Documentation
How the book is built.
Where the venues come from, how a quote is computed from pool state, and how that computation was checked. The limitations section is not a footnote. It is the shortest way to understand what this is.
What it reads
Addresses
Identify contracts on this chain by ABI, never by name. The canonical Ethereum mainnet Uniswap router and quoter addresses both exist here and hold the same unrelated contract. Ten contracts are named UniswapV3Factory.
Discovery
Finding every venue
v3 pools are asked for directly. The factory reports which fee tiers it has enabled, and each is queried for the pair:
factory.feeAmountTickSpacing(fee) // 100, 500, 3000, 10000 here factory.getPool(USDG, asset, fee) // the pool, or address(0)
v4 has no registry to ask. The PoolManager is a singleton and a pool is only a key in its storage. Every pool it has ever opened announced itself, so the book comes from those announcements:
event Initialize(bytes32 indexed id, address indexed currency0,
address indexed currency1, uint24 fee,
int24 tickSpacing, address hooks,
uint160 sqrtPriceX96, int24 tick)Reading a v4 pool afterwards means reading the PoolManager’s storage directly, since it exposes no per-pool getters. Slot positions follow Uniswap’s own StateLibrary: the pool state at keccak256(poolId, 6), liquidity three words on, the tick bitmap and tick data at offsets five and four.
Quoting
What your size actually costs
A displayed price is the price of an infinitely small trade. A real order walks the pool’s liquidity from the current tick outward, and the price moves inside every step. The engine runs that walk, the same loop the AMM runs when it fills you:
while (input remains) {
find the next initialised tick in the direction of travel
price the step against the liquidity in range
cross the tick, pick up the liquidity that starts or ends there
}Because it works from a snapshot of pool state rather than by asking a contract, one read answers every size. A whole quote curve of twenty points across the order costs one reading of the chain.
The check. The same walk exists on-chain in a third-party router, which makes a usable oracle. Across every indexed asset, every venue and seven order sizes from $10 to $500,000 at block 58,971,925: 225 of 265 quotes matched to the wei, and none of the rest was off by more than 9e-5, those being pools too drained to fill the size, where both walks stop within a hair of each other. scripts/audit.mts re-runs it and rewrites the figures above.
Curation
How a venue gets in
Every filter is deny-by-default. A venue is listed only by passing all of them:
One floor to route, none to appear, because reading a venue and sending an order to it are different jobs. Nothing is hidden from the book for being thin. A pool that has drained to nothing and still advertises a price is the clearest example of the problem this exists to show.
The one exclusion is a pool that is not pricing the asset at all. Some were initialised at an arbitrary number and never traded; the worst offers NVDA at $128,373,698 a share on a dollar of liquidity, and 4 were dropped on this reading. Anything more than 1.5× either side of the book’s median goes. It is a band so wide that nothing genuinely quoting the asset comes near it, since real disagreement here runs to tens of basis points.
Depth is the quote notional required to move a venue’s price by 1%, measured on the marginal price by bisection over the same walk. Not from balanceOf, because v4 is a singleton, so its balance is the total across every pool it holds and describes none of them. Not from liquidity() either: that scalar says nothing about how the liquidity is spread across ticks.
Read this part
Limitations
This quotes. It does not trade.
There is no contract here, no wallet connection and no custody. The panel reads public chain state, walks each pool's liquidity at your size, and tells you which venue fills best. Executing is yours to do, wherever you choose.
A quote is one block old the moment it is made
Between the read and any trade, anyone can move the pool. The deeper the venue the less that matters, which is most of why depth is the column worth reading.
The book is only what the indexer found
v3 pools come from the canonical factory at its enabled fee tiers; v4 pools from every Initialize event the PoolManager has emitted. A venue outside that set is not considered, and pools that are not pricing the asset are dropped. The script that produced the list ships with the site.
Paying in anything but USDG is two hops
Every venue this site reads is priced against USDG, so an order paid in another token is walked into USDG on that token's own pools first, then into the asset. Both legs are read at one block and walked at the real size, and the panel names the venue each used. A token is listed only once its own market has been measured: this chain carries a token called SOLANA whose every pool pays nothing, a cbBTC pool pricing bitcoin in the hundreds, and a memecoin whose ticker is USDG. There is no USDC deployed here at all.
Splitting helps less often than you would think
Measured across every indexed asset, the smallest order where splitting beat one venue was $1,000, and on 8 assets no size tested made it worth an extra leg, because the cheapest venue there is also the deepest. A split is only named when it strictly beats the best single venue by more than the extra leg costs in gas.