One tokenized asset trades in ten separate books on this chain, and they do not agree on a price. That gap is collected every block by whoever is fastest, not by whoever provided the depth. Vertex is a v4 hook that prices the disagreement and hands every basis point of it back to the liquidity.
| Venue | NVDA per ETH | vs consensus, bps | Liquidity | |
|---|---|---|---|---|
| reading the chain… | ||||
A pool does not know the asset moved somewhere else. It finds out by being taken. Every time a price moves on another venue, someone serves the pool its own stale quote, and the difference comes out of the liquidity providers.
A flat fee cannot fix this. It charges the passer-by exactly what it charges the arbitrageur.
The hook reads the other books for the same asset and measures how far its own quote has drifted from theirs. A trade that closes that gap is collecting it, and pays a share of it. A trade that widens it has no edge, and pays the base 5 bps.
Direction is the whole mechanism. Only the side coming to collect pays.
In v4 the dynamic fee a hook returns is the pool's fee. There is no treasury in this contract, no collection address and no protocol cut — deliberately, because the claim is that the leak is returned to the LPs, not redirected.
The pool does not impose anything on the other venues. It agrees with them on a price, and charges whoever profits from the disagreement.
The slider starts at the gap measured on the chain a moment ago. Drag it to see the rest of the curve: the green line is what an arbitrageur pays to collect the gap, the dashed line is what the same trade costs in the other direction.
An opening block is not a market, it is a race. Whoever lands first knows the one thing the pool does not: that nobody has quoted yet, and there is nothing to compare against.
The same hook opens at 25 % and walks down to 1 % over 180 seconds. Not a second feature — the same principle, applied at the one moment the drift cannot be measured.
The clock starts on the seeder's own add-liquidity, not at deployment and not on the first swap. Starting at deployment lets a sniper wait the ramp out before the book exists; starting on the first swap lets them trigger it with dust.
The venue set is fixed in the constructor. No setter, no owner, no upgrade. A registry someone can add to is a registry someone can use to invent the price that sets the surcharge.
Reading a venue is a bounded staticcall, and failure is an answer: a
venue that reverts, empties or quotes nonsense is skipped, and if nothing is readable the
pool falls back to its base fee.
MAX_FEE_BPS is a hard cap in code, the ramp only descends, and the owner's
single lever is a ceiling that only descends. The rate at deployment is the worst rate the
pool will ever charge.