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.
| Scenario | Surcharge | Arb, unguarded | Arb, guarded | LP net, unguarded | LP net, guarded |
|---|
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 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.
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.
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.
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.
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.
| Token | Kind | Action | Date | Step | Leak /$100k | Recovered |
|---|
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.
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.
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.