Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,296,094
0xFBF4…ddDc
The eight checks
4 pools use this hook, the first one 22 d ago.
- 01caution
Permissions that touch your moneyThe address enables before swap returns delta, after swap returns delta. The hook is allowed to take; the next two checks measure whether it does.
- 02caution
What it takes from a swapIt takes 2% of each swap on top of the pool fee.
- 03n/a
LPs can get outClosed to outside LPs: only the hook's own liquidity is in the pool.
- 04pass
The fee is the feeA fixed fee of 1%, written in the pool key.
- 05caution
No one holds the switchNo owner() but it has setCollector, setDirectAdder, setGovernor, collector, setTaxBps, setTaxExempt.
- 06pass
The code cannot changeNot a proxy, no DELEGATECALL, no SELFDESTRUCT.
- 07pass
Only the PoolManager can call itEach callback refused a call that did not come from the PoolManager.
- 08pass
Track record4 pools over 22 days.
Measured at block 93,296,094. A hook with an owner or a dynamic fee can behave differently later; scan again before a large trade.
What the address allows
A v4 hook's permissions are the last fourteen bits of its address. The PoolManager calls only what they switch on.
address & 0x3fff0x1ddc · 01110111011100
- bit 13Before initialize
- bit 12After initialize
- bit 11Before add liquidity
- bit 10After add liquidity
- bit 9Before remove liquidity
- bit 8After remove liquidity
- bit 7Before swap
- bit 6After swap
- bit 5Before donate
What it did to a real swap
A small swap each way and a liquidity round trip, run through the PoolManager and this hook inside a call that is never sent. The pool fee is expected; anything else missing is the hook.
CASHCAT / DUCAT
fee 1%- Swap CASHCAT → DUCAThook takes 2.00%
- Swap DUCAT → CASHCAThook takes 2%
- Add, then remove liquiditydeposit refused: LiquidityNotAdmitted
pool 0xbdc03ad58db8be75c3ec6a7cc43d7f5075120e81cafef061ff1ac77fb07dc211
AAPL / DUCAT
fee 1%- Swap AAPL → DUCAThook takes 2.00%
- Swap DUCAT → AAPLhook takes 2%
- Add, then remove liquiditydeposit refused: LiquidityNotAdmitted
pool 0x00d2c56a451d9b7ffacd3046d6adbcb9376b3119a4faa786e868686fa7257e43
Read from the bytecode
- Code size
- 21,503 bytes
- Owner
- none found
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 6
- Callbacks open to anyone
- none
Its functions, uncensored
Selectors found in the dispatcher, named from the public signature database. Red ones are what an owner usually keeps for itself.
- 0xea428403 dispose
- 0xf7133287 increaseCardinality
- 0xfb5b82d0 setCollector
- 0xfb937c3b launchedAt
- 0xe1b4af69 afterDonate
- 0xe3056a34 pendingGovernor
- 0xe58bb639
bit 4
After donate
bit 3Before swap returns deltabit 2After swap returns deltabit 1After add returns deltabit 0After remove returns delta- After initialize. Runs once, right after a pool is created.
- Before add liquidity. Can refuse a deposit, or only let some addresses provide liquidity.
- After add liquidity. Runs after each deposit.
- After remove liquidity. Runs after each withdrawal.
- Before swap. Runs before every swap. On a dynamic-fee pool it can set the fee each time.
- After swap. Runs after every swap.
- After donate. Runs after a donation to LPs.
- Before swap returns delta. Can take part of what you put into a swap, or change how much is swapped.
- After swap returns delta. Can take part of what you get out of every swap.
acceptGovernor
0xd3ce308e isDirectAdder0xdc98354e beforeInitialize0xdcc85e89 ungatedHistory0xe0b01bac poolState0xca41d436 setDirectAdder0xcffd129c sellTaxBps0xd1ecfc68 taxExempt0xbbf06db4 venuePool0xbfce173b parked0xc42cf535 setGovernor0xc473413a buyTaxBps0xb47b2fb1 afterSwap0xb6a8b0fa beforeDonate0xbadf9995 isLpOwner0x977435e9 WRITE_INTERVAL0x9c579839 QUOTE0x9f063efc afterAddLiquidity0xa7f92d22 launchCapBps0x8549d9be REQUIRED_FLAGS0x8c3e0502 coverage0x913e77ad collector0x6ef4b2e8 clearLaunchDecay0x6fe7e6eb afterInitialize0x79c76e1a flush0x7b7159bf LAUNCHER0x62308e85 POOL_MANAGER0x6c2bbe7e afterRemoveLiquidity0x6d19a32c launchDuration0x4f3d4d16 setTaxBps0x4f49db9b gated0x53066d39 directAdders0x575e24b4 beforeSwap0x48d04661 launchHalfLife0x4a774941 MAX_LAUNCH_TAX_BPS0x4e9b3db4 launchTaxBps0x2aedba85 DUCAT0x2c597de9 MAX_TAX_BPS0x3273292c listVenuePool0x47473b00 consult0x21d0ee70 beforeRemoveLiquidity0x22674d46 taxBpsFor0x259982e5 beforeAddLiquidity0x0c340a24 governor0x13057fdd lpOwners0x1bea83fe POSITION_MANAGER0x1dc61040 setTaxExempt0x01bfb077 setLpOwner0x0a65e0a8 taxExemptSwappers