Evidence

Simulated exactly. Then run against real v4.

Constant-product arbitrage solved by bisection to the true post-action price with real fee arithmetic, no closed-form shortcuts. Then the hook itself compiled against Uniswap v4-core and executed on an Ethereum mainnet fork, against the canonical PoolManager, with genuine unlock/callback accounting and hook-address flag validation.

Each scenario priced guarded and unguarded
ScenarioSurcharge Arb, unguardedArb, guarded LP net, unguardedLP net, guarded
Pool 5,000 stock / $125,000 quote · base fee 30 bps · surcharge ceiling 20% · solc 0.8.26, optimizer 200 runs · fork test 6/6 passing against PoolManager at mainnet block 25,887,057. Open any row for its inputs and what it does not show.
the correction

A dividend is a rounding error

Our first read of the CCL event was that it drained the LPs. The simulation says otherwise: the arber nets $10.26 on a $125k pool. Guarded, that same trade loses −$18.84 and the LP finishes $51.96. Real, repeatable, not a scandal. We said otherwise at first and were wrong.

the actual danger

The surcharge does not save you from a split

At a 4-for-1 the surcharge clamps at its 20% ceiling and recovers 45.6%. Stated plainly because it matters: split defence rests entirely on the pre-action window firing. The surcharge is the backstop for actions that arrive unannounced.

Mechanism design · priced against our own simulator

We designed an auction. Then we priced it, and it lost.

The idea was to sell the right to rebalance the pool at base fee instead of the surcharge, with the winning bid paid to LPs. It sounds right. Run it through the same solver that produced the table above and it fails in every scenario, including the one it was designed for. Move the slider and watch it fail.

Sealed bid · simulated

Winner's edgeedge over their fallback
LP nets, auctionunguarded arb loss, plus the bid
LP nets, surchargethe mechanism already shipped
Max rational bidabove this the winner books a loss and walks
why it fails structurally

A tax on gross beats a tax on net

The surcharge is levied on the arber's flow — every token that crosses the curve while the budget is outstanding. The auction can only ever extract their profit, because nobody rationally bids more than they expect to make. Profit is a fraction of flow, so the auction sells the same right for strictly less. On the 4-for-1 the surcharge collects roughly 2.0× the most any bidder would offer.

what survives

The bond, not the auction

The surcharge cannot reach one thing: whether anyone notices effectiveAt() before it lands. Every number on this page assumes the pre-action window fired. That is the gap a bond can price — a keeper posts one and is slashed to the LPs of any pool where it missed an announced window, with a floor of $56,715 per guarded pool.

Every figure on this page is computed in your browser from the same three scenarios and the same solver, against pool 5,000 stock / $125,000 quote, base fee 30 bps, surcharge ceiling 20%. This is mechanism design shown failing and being replaced.

Backtest · three years

Three scenarios we chose. A hundred and twenty-four the market chose.

A proof table is three scenarios picked by the people who wrote the guard. That is a demonstration, not evidence about frequency. These events were picked by the issuers: every ex-date and split that actually occurred, at the actual close, on the actual date.

Three years of real corporate actions replayed against hypothetical depth
TokenKindActionDate StepLeak /$100kRecovered
why replay at all

Chosen by the market, not by us

Three scenarios we picked prove the guard responds. A hundred and twenty-four the issuers picked say something about how often there is anything to respond to.

what it cannot tell you

No pool existed for any of it

Not one of these events hit a guarded pool, because no guarded pool was live. This is arithmetic on real discontinuities against hypothetical depth. It bounds the size of the problem. It does not prove revenue.

the finding we did not want

A ceiling is a ceiling

The 20% clamp exists so the guard can never become the extraction. The cost of that choice is visible above: on a 10-for-1 split it recovers about one part in forty-five. We are not going to raise the clamp to make this table look better.

A defence you cannot audit is a defence you should not use.

Which is why the limits are on their own page, numbered, and not softened.