The line
A limit is only a limit if it is published
Before 1876 the load line on a British ship was drawn by the owner. Some were painted on the funnel. Samuel Plimsoll spent a decade getting the mark made compulsory, standardised, and put where anybody standing on the quay could read it.
The ladder is not decoration
A hull floats higher in dense water and lower in light water, so one permitted depth would be unsafe in winter and needlessly cautious in the tropics. The mark therefore carries six lines, and which one applies is a fact about the sea you are in rather than about the ship.
A vault's tolerance is the same shape. What can be taken from a deposit depends on the depth of the pool the vault marks against, and that depth is not a property of the vault, the depositor or the interface. It is a property of the water.
On Robinhood Chain today the same $10,000 deposit faces 0.49 basis points in SGOV and 5,448 in LITE — a factor of 11,229. Ends of a distribution are one market each, so the figure worth quoting is the middle of it: 403× between the tenth and the ninetieth percentile, 3.04 bps against 1,226, median 55.4. Any single constant is badly wrong at one end.
What the contract computes
swing(budget) answers one question with Uniswap V3's own arithmetic: if somebody put
budget into this pool right now, buying whatever the vault holds, how far would the mark move?
It is the standard next‑price formula, including the overflow branch, over the liquidity active at the
current tick, net of the pool's fee.
exposure(budget) is that number scaled by the fraction of the vault the mark actually
prices, and loadLine(assets) is previewDeposit(assets) discounted by it. All
three are ordinary view functions. Nothing else in this category exposes any of them.
The first version of that was wrong, and the measurement caught it
The floor was originally the quote discounted by the swing rather than by the exposure. Moving a
pool by one per cent moves the mark by one per cent, but it moves totalAssets by one per cent
of the marked fraction — the cash sitting in the vault is not repriced by anything. On a
vault that is entirely a marked position the two are identical, which is exactly why the mistake survives
the obvious test.
On a vault that is four fifths marked, the old floor was a fifth too generous and could not fire on a
correctly predicted attack at all. It fired only when the prediction under-shot — a guard working for
the wrong reason, which is the failure mode this family finds hardest to see. It was found by running the
sandwich against a real pool and watching the guard not fire. P28 now builds a half‑marked vault and
sizes the push to sit between the two candidate formulas, so it can tell them apart; the
line-ignores-weight sabotage restores the old arithmetic and P28 catches it.
The doors
| Function | Carries a floor | Reads the mark | Why |
|---|---|---|---|
deposit, mint | no | yes | ERC‑4626's signature has nowhere to put one |
withdraw, redeem | no | yes | Same, going the other way |
depositWith | yes | yes | Not in the standard, so it can carry a floor and a deadline |
redeemWith | yes | yes | The same on the way out |
ship | yes | yes | Never had an unguarded twin and never will |
abandon | n/a | no | Pays a pro‑rata slice of both sides at no price at all |
Leaving the standard doors unguarded is deliberate and it is the part worth
arguing with. An integrator that only knows ERC‑4626 has to be able to use the vault, and a vault that
reverts on deposit is not ERC‑4626. The alternative is to be quietly non‑conforming and
let somebody find out in production.
What this does not fix
The load line refuses a deposit that has been sandwiched. It does not stop the pool being moved, it does not make the mark honest, and it does not help anybody who walks through the unguarded door. It converts a silent loss into a failed transaction, which is a smaller thing than it sounds and a larger thing than nothing.
It also cannot see past one tick, and the size of that error is measured rather than asserted — on the leeway page, with both numbers in every row.