Unaudited. Base Sepolia only. Never having held value.

The adverse-selection gate does not currently pass — the mechanism is deployed, the evidence is not established. Read the result

AssayAssay

Uniswap v4 hook · permission mask 0x30C4

Volatility is the same for everyone in a block. Adverse selection is not.

Every dynamic-fee hook shipping today sets the fee from volatility — so a retail swap and a top-of-block arbitrage pay the same rate, though one is the liquidity provider's entire revenue and the other is their entire loss. Assay prices each swap on the drift it captures against a cached reference, signed by direction.

The quote surface

Fee as a function of signed drift. Two swaps in one block, against the same drift, in opposite directions.

Capturing

7.40 bp

Opposing

2.60 bp

1.00% ceiling — maxFeePips 10,000

0.01% floor — minFeePips 100

drift +1,200 ticks →

drift +24 ticksfee 740 pips

Drag anywhere on the surface, or focus it and use ← →. The curve is evaluated from the same FeeBlend port the swap card quotes from, so what you see here is what the contract charges.

Read from the chain, right now

The reference price, the fee bounds and the block below are live contract reads — not fixtures.

reading…
Reference price
$3,412.60
ETH/USD via Chainlink
Reference state
stale
quoting the ceiling, not reverting
Advertised range
0.0100%1.0000%
base 0.0500%
Block
Base Sepolia · 84532

Pool drift

reading…

Toward the reference

captures the drift

Away from it

captures nothing

Those two figures are the entire product. Same pool, same instant, same drift — quoted differently because one trade takes value from liquidity providers and the other does not. A volatility-driven hook cannot tell them apart, because volatility is a property of the block and not of the order.

hook 0xc825…70c4 · oracle 0x5675…0d38

The mechanism, in three facts

One parameter, one signal, and a bound on every quote.

10%

of captured drift, charged as fee

The one free parameter, calibrated for the least bad worst case across two independent windows of flow rather than the best case under one assumption. At this share each tick of drift adds ten pips.

-40950

ticks between the floor and the cap

Below 40 ticks of adverse drift the quote sits at the 0.01% floor; above 950 it saturates at the 1.00% ceiling. Everything a router reads from feeBounds() holds.

16,180

gas on an ordinary swap

Against a 20,000 budget. The reference is cached in one packed slot and refreshed at most once per block, so the common path makes no external call at all.

What this does not yet show

The hook, its oracle and one USDC/WETH pool are live on Base Sepolia, and the reference price above is read from the chain. But the pool has seen two swaps, both from the deploy script — so the aggregate figures on the markets page (volume, TVL trend, the distribution of quotes) are still illustrative fixtures rather than measurements. There is not yet enough history to measure anything.

Separately, the adverse-selection gate does not currently pass: the mechanism is implemented and the arithmetic is tested, but the evidence that it improves liquidity provider outcomes is not established. The full result is in the docs, because a claim this project cannot support is not one it should make on a landing page.