the read // untoll

6,878 v4 hooks are live on Robinhood Chain.
The registry listed 50 on 2026-08-17.

We read the chain, not the registry. Below is the market as of 2026-08-17, the structural case for a hook built the opposite way from the incumbents, and a demo you can run in about a minute. Every number on this page comes out of one query execution, printed beside it. That is the point.
01 // the market

An ecosystem sized off the registry on 2026-08-17 was off by 137.6x.

6,878
distinct v4 hooks with at least one pool on Robinhood Chain (4663), as of 2026-08-17
exec 01M06GRET7
133,714
pools carrying a hook, out of 389,167 Initialize events, 34.4% of the chain
exec 01M06GRET7
2,121
of those hooks can return their own swap delta, 30.8% of them price a trade themselves
exec 01M06GVCNF
50
hooks listed for this chain in the Uniswap/hooklist registry on 2026-08-17, 0.7% of what was deployed
fetched 2026-08-17

If you sized this chain off the registry on 2026-08-17, it was roughly 137.6 times larger than it looked. The default-launch habit on it is unmapped and unclaimed. This is not an opinion, it is a count of every Initialize event the PoolManager has emitted. The chain is live, so the count climbs: the same read on 2026-07-18 returned 1,174 hooks across 40,038 hooked pools. Concentration is extreme: a single hook accounts for 76,391 of those 133,714 hooked pools, 57% of them.

# reproduce it, or falsify it
PoolManager  0x8366a39cc670b4001a1121b8f6a443a643e40951 (verified source)
dataset      uniswap_v4_robinhood.poolmanager_evt_initialize
query        dune.com/queries/8266138  execution 01M06GRET7QVTG9WB3M9FZ902Y
raw json     untoll.ing/read/census.json

# or skip us entirely and derive it from the chain
hook address = word 2 of each Initialize event
permissions  = low 14 bits of that hook address, decoded mechanically
# no index, no api of ours, no trust required.
provenance. Every figure above is from Dune execution 01M06GRET7QVTG9WB3M9FZ902Y (query 8266138), which ended 2026-08-17T00:09:51Z. The permission counter is from execution 01M06GVCNFX4F3CFJZR95HH472 (query 8266140), which ended 2026-08-17T00:11:00.093534Z. Both count distinct hooks independently and both returned 6,878, which is the read checking itself rather than us asserting it.
02 // the structure

It wins by construction, not by promise.

Three properties, each one a thing competitors cannot copy without giving up something they are keeping.

01A commitment the others cannot make.

LaunchHook, the Uniswap v4 hook, holds the pool’s liquidity itself: the full-range position is owned by the hook, and the escrowed quote sits as hook-held ERC-6909 claims. The contract exposes no remove path for either one. Fee value leaves through _payout: the creator’s claim, the crew sweep, the buyback sweep to the vault, and the treasury sweep. Sellers on the curve are paid from escrow. None of these can reach the position. The source is verified on Blockscout, so that is something you confirm by reading it rather than something we ask you to accept. Contracts that promise a fair launch typically keep the keys that make the promise breakable. A contract with no exit from the position cannot betray the pool, and that is a commitment none of them can match while they still hold their own optionality.

02Distribution that needs no deal.

Fee capture happens at the pool, independent of which interface routes the trade. Any terminal, bot, or aggregator on the chain that routes to an UNTOLL pool does so with no integration, no partnership, no BD call. No interface has to be asked, and none can be prevented from routing to it. The distribution surface is every trading interface on the chain, by default.

03Verification where the rest of the stack asks for trust.

A second contract, SessionKeyDelegate, carries all of the agent scope: it installs on the agent’s own account under an EIP-7702 delegation and enforces targets, selectors, a per-transaction cap, a recipient policy and an expiry in bytecode, where a jailbroken model cannot reach it, and an out-of-scope call mines a ScopeViolation event rather than failing silently. The hook carries no agent-authority code; the two are separate contracts doing separate jobs. A compromised agent can act, but in the demo every attempt to redirect its money is stopped on chain, and you check that yourself rather than take it on faith. That converts the agent-with-money problem from a trust game into a verification game, which is the layer the agent-payment standards still lack beneath them.

03 // the proof

Do not take the read. Run it.

One command. Watch an agent do the allowed thing, then watch every attempt to drain it hard-stop on chain. No wallet to connect, no funds at risk.
git clone https://github.com/hookwright/untoll-agent-demo
cd untoll-agent-demo && npm install
npm run demo

ALLOWED  in-scope call, output to owner  PASSED
BLOCKED  redirect to attacker  ScopeViolation(RECIPIENT)
BLOCKED  off-scope drain()  ScopeViolation(SELECTOR)
BLOCKED  over the per-tx cap  ScopeViolation(PER_TX)
BLOCKED  off-scope target  ScopeViolation(TARGET)

attacker balance  0 wei, no funds moved

The hook is open source and deployed, source-verified, on public testnet 46630. SessionKeyDelegate is open source and runs on the local chain the demo starts.

the hook: github.com/hookwright/untoll-hook the demo: untoll-agent-demo untoll.ing
Chain figures read from Robinhood Chain (4663) on 2026-08-17, execution 01M06GRET7QVTG9WB3M9FZ902Y, and served as JSON at /read/census.json. The per-hook table at /hooks/ is a separate and fixed read, the 2026-07-18 sweep of 1,174 hooks across 40,038 hooked pools, and is labelled as that. Contract behavior measured against the deployed testnet contracts (46630).