See the hook before it sees your swap.
Every swap is simulated twice at one block, through the pool's real hook and with the hook switched off, then sold back. The gap is the grade.
Reading live swaps from Robinhood Chain…Graded right now, in your browser.
Swaps that just paid a pool more than half of what they put in, read from the chain as they land. Beside them, the newest of those pools graded against the current block, alternating with a clean pool for contrast.
Swaps paying over 50% to the pool live
- Reading the last few minutes of swaps…
One address in. Every pool, graded.
Paste a token and CULET finds every Uniswap v4 pool it trades in, simulates a round trip through each one at the same block, and ranks them. The cheapest honest route sits on top; the traps sit below it, labelled.
- Two runs, one block. Through the real hook, then with it switched off.
- Real token transfers. Hidden taxes and refused sales show up.
- A report you can re-run. The exact call is printed under every grade.
Built on open infrastructure, nothing proprietary.
Every grade is computed from public chains, public contracts and public tools. If any of them disappeared tomorrow, the method and the data would still be reproducible with the others.
Robinhood ChainThe network CULET reads
Arbitrum OrbitThe stack Robinhood Chain runs on
EthereumWhere Robinhood Chain settles
Uniswap v4The pools and hooks being graded
PonsWhere $CULET launchesBlockscoutExplorer and approval history
SourcifyVerified contract source
FoundryFork tests against real executionSolidityThe language of the probe
ethersEncoding and decoding calls
One pool in three takes more than half of every swap.
Every Uniswap v4 pool ever created on Robinhood Chain, read from the PoolManager's own events, and every swap of the last 24 hours. No hook is needed to empty a trade: the fee field alone can be set to 99%.
New pools per week
Split by the fee each pool was created with
Swaps paying over 50%, by hour
Last 24 hours
Most-used trap pools, 24h
Pools that charged over 50% and were still sent swaps
Every pool, by the fee it was created with
Share of all pools
The ten largest hooks, named from their source.
A hook's address declares what it may do: the PoolManager reads fourteen bits off it. CULET decodes them and asks Sourcify for the verified contract name. Full census →
Two runs, one block. The gap is the grade.
Nothing is signed and nothing moves. The swap runs inside an eth_call, against the chain as it is at that block, and the results come back to your browser.
Through the real hook
A small probe contract is placed at an empty address for the length of one call, using state override. It swaps through the pool exactly as a router would, hook included.
With the hook switched off
The same call again, but the hook's address is given a neutral stand-in that answers every hook call with zero. Whatever changes between the two runs is what the hook did.
Then sold back
Each run buys and immediately sells the output back. A pool that lets you in but not out shows up here, and the report says whether the pool or its hook stopped the sale.
A clarity scale, borrowed from gemology.
Diamond graders count inclusions. CULET counts what a round trip loses. The letters follow the gem scale so the order is familiar: FL is flawless, I3 is included enough to see with the naked eye.
Three pools, graded in front of you.
These reports are not screenshots. Each one is re-run by your browser when it scrolls into view, at the current block.
Don't trust the grade. Re-run it.
A simulator is only worth anything if it matches what really happens. The probe was checked against real, settled swaps on a fork of Robinhood Chain, and against two booby-trapped tokens built to fool it.
forge test Robinhood Chain fork · block 97,810,682 [PASS] test_plainPool_ETH_USDG() quote = execution, to the unit [PASS] test_hookPool_PONS() through a launch hook [PASS] test_tokenTrip_ETH_USDG() buy + sell, settled sim 0.009997499723499657 ETH = real 0.009997499723499657 ETH [PASS] test_tokenTrip_PONS() sim 0.007923130092932571 ETH = real 0.007923130092932571 ETH [PASS] test_detects_5pct_transfer_tax() hidden tax caught: exactly 5.00% in, 5.00% out [PASS] test_detects_honeypot_sell_block() stopped at sale: "sell disabled" 6 passed; 0 failed raw output →
The probe is one short file
One contract that swaps, settles inside the simulation and reverts with the result; one stand-in hook that returns zero. No owner, no storage, never deployed: it only exists inside the call.
Read the source →Every report carries its call
The exact eth_call, overrides included, is printed under each report. Paste it into any Robinhood Chain RPC and you get the same numbers.
How to reproduce →Check your wallet the way you check a pool.
Most drained wallets are emptied through a permission they already gave. CULET lists every live approval, NFT operator and Permit2 allowance, says who holds it, and lets you revoke it. Read-only until you choose otherwise; no signatures, ever.
What the permission check finds
- Allowances held by a plain wallet. The approve-then-pull pattern behind recent drains. Flagged critical.
- Unlimited allowances to unverified or upgradeable contracts. Code nobody can read, or code that can be swapped.
- Permit2 allowances, including ones granted by signature rather than by transaction.
- Dollar value each permission can reach, from the tokens you hold now.
Incident briefing
The lab is free to use. No wallet, no sign-up.
$CULET is the token of the lab, launching on Pons. The contract address is posted here and on @culetlab first. Anything else claiming to be CULET is not.