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.

A Lloyd's Register load line disc painted on a wooden hull
The disc itself: 300 mm across, with a 450 mm line through its centre, and the initials of the authority that assigned it. Photograph Robert Brook on Flickr, CC BY 2.0.

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

FunctionCarries a floorReads the markWhy
deposit, mintnoyesERC‑4626's signature has nowhere to put one
withdraw, redeemnoyesSame, going the other way
depositWithyesyesNot in the standard, so it can carry a floor and a deadline
redeemWithyesyesThe same on the way out
shipyesyesNever had an unguarded twin and never will
abandonn/anoPays 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.