Pool & wallet security · Robinhood Chain

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…
1,076,366Uniswap v4 pools on chainsnapshot
345,757set a fee above 50% per swap32.1% of all pools
2,170swaps paid over 50% in 24hrolling 24h window
29,582distinct hooks deployedtop 150 named from source
0servers of ours in a gradebrowser → public RPC
Reads directly fromRobinhood ChainUniswap v4BlockscoutSourcifyFoundry
00 Live

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…
Last 24 hours— swaps
Grading in your browser…
Grading report—
—
 
Round trip—
Taken by the hook—
Fee charged by the pool—

 

The product

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.
See this report live
culetlab.com/grade · ZGAP
CULET grading 22 Uniswap v4 pools for the ZGAP token: one honest pool at 1.99% round trip, the rest traps losing 27% to 99%
Captured from the live app. Figures change with every block.
Ecosystem

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 Chain logoRobinhood ChainThe network CULET reads
  • Arbitrum Orbit logoArbitrum OrbitThe stack Robinhood Chain runs on
  • Ethereum logoEthereumWhere Robinhood Chain settles
  • Uniswap v4 logoUniswap v4The pools and hooks being graded
  • Pons logoPonsWhere $CULET launches
  • Blockscout logoBlockscoutExplorer and approval history
  • Sourcify logoSourcifyVerified contract source
  • Foundry logoFoundryFork tests against real execution
  • Solidity logoSolidityThe language of the probe
  • ethers logoethersEncoding and decoding calls
01 Census

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%.

Uniswap v4 pools on chain
—
 
Created with a fee above 50%
—
 
New pools, last full week
—
 
Swaps that paid over 50%, 24h
—
 

New pools per week

Split by the fee each pool was created with

Source: series.json, built from every Initialize event of the PoolManager. Weeks start Monday, UTC.

Swaps paying over 50%, by hour

Last 24 hours

Source: the fee field of every Swap event in the window. live.json

Most-used trap pools, 24h

Pools that charged over 50% and were still sent swaps

Tokens marked fake copy the symbol of a real asset from a different address.

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 →

02 Method

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.

01

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.

02

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.

03

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.

FLFlawless

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.

    Hover or tap a grade to see the stone change.
    03 Case files

    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.

    04 Proof

    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 · contracts/test/Match.t.sol + Traps.t.sol
    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 →
    05 Security

    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.
    $CULET

    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.