If you open a Uniswap pair in mackinac, you’ll see something that looks like a depth of market: a column of ask prices above a column of bid prices, with a spread in between. It looks familiar. It isn’t.
Understanding the difference changes how you interpret the data — and what you can actually infer from it.
What a traditional order book row means
In a central limit order book, each price level represents one or more resting limit orders. A bid at $3,499.50 for 10 ETH means a counterparty has committed to buy 10 ETH at that price. The size is a real quantity waiting to be matched.
What a Uniswap DOM row means
In a Uniswap DOM, each row is a fee-tier pool — not a resting order. There are no waiting counterparties. The prices shown are the effective execution prices you would receive if you sent an infinitesimally small swap to that specific pool right now.
- Bid — the price you’d receive selling the base token into this pool
- Ask — the price you’d pay buying the base token from this pool
For WETH/USDC on Uniswap V3, you might see three rows:
Ask $3,505.25 ← 0.30% poolAsk $3,500.44 ← 0.05% poolAsk $3,500.09 ← 0.01% pool─────────────────Bid $3,499.91 ← 0.01% poolBid $3,499.56 ← 0.05% poolBid $3,494.75 ← 0.30% poolThe spread on each row equals the pool’s fee rate, split evenly between bid and ask. A 0.01% pool has a 0.005% spread on each side. A 0.30% pool has a 0.15% spread on each side — which is why the 0.30% rows appear furthest from mid.
This ordering is mechanical. Tighter-fee pools are always nearest the mid price because their spread is smaller. This isn’t a liquidity signal — it’s arithmetic.
The size column is not what you think
In a traditional DOM, size at a price level tells you exactly how much can trade before the price moves. In the Uniswap DOM, the size shown is a liquidity proxy — proportional to how much active liquidity is concentrated at the pool’s current price, but not a precise reserve figure and not directly comparable to a limit order quantity.
Use it to compare relative depth between fee tiers. Don’t use it as an absolute size to trade against.
Why prices can differ between pools
In a traditional fragmented market, prices on different venues converge within milliseconds through arbitrage. In Uniswap, each fee-tier pool is an independent contract with its own price state. They start from different slot0 snapshots and update only when a swap actually occurs in that pool.
The 0.30% pool might show a price that’s 15 basis points above the 0.01% pool. This isn’t an error — it’s a real divergence that reflects when each pool last traded. If the 0.30% pool hasn’t seen a swap in two hours, its price is two hours stale.
The Age column shows exactly how fresh each pool’s price is. A — means no live swap has been observed since subscribing; the price is from the initial on-chain snapshot and could be significantly stale.
The composite row
Below the per-pool rows, the DOM shows a composite: the highest bid available across all active pools simultaneously, and the lowest ask. This is the tightest executable spread across all tiers at once — useful as a quick reference for where you could actually transact if you were routing optimally.
Gross vs. Net
One more distinction from a traditional DOM: Uniswap prices can be shown in two modes.
Gross shows the raw execution price before fees — what the AMM math computes as the swap price. Net adjusts for the taker fee on each side, showing the all-in cost: what you actually receive after fees on a sell, or what you actually pay including fees on a buy.
Net mode is what matters for any real comparison across pools or against a CeFi reference price. A 0.05% pool’s net ask will be higher than its gross ask; its net bid will be lower than its gross bid.
What the Uniswap DOM is actually good for
Once you understand what you’re looking at, the Uniswap DOM becomes genuinely useful:
- Price discovery across pools: which pool is the freshest reference for current market price?
- Relative depth: is the 0.01% pool much deeper than the 0.05% pool right now, or roughly similar?
- Staleness detection: is the 0.30% pool’s price meaningful, or is it a two-hour-old artifact?
- Cross-pool divergence: have fee tiers drifted apart, and if so, by how much?
These are different questions from what a traditional DOM answers. The data is real and useful — it just requires a different mental model to read correctly.