Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 92,981,897
0x08E5…A080
The eight checks
37 pools use this hook, the first one 45 d ago.
- 01pass
Permissions that touch your moneyNone of the permissions that let a hook take from swaps or from LPs are switched on.
- 02pass
What it takes from a swapIt takes 1.00% on top of the pool fee.
- 03pass
LPs can get outLiquidity added and removed in the same block came back whole.
- 04caution
The fee is the feeIts pools use a dynamic fee that the hook sets before every swap. It stands at 0% now and can change.
- 05caution
No one holds the switchNo owner() but it has claimFeeBps, transferFrom, pausedUntil, setDistributor, setPoolPaused, sweepDistributor.
- 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 record37 pools over 45 days.
Measured at block 92,981,897. 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 & 0x3fff0x2080 · 10000010000000
- 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.
USDG / KSKD
fee dynamic, now 0%- Swap USDG → KSKDhook takes 0.75%
- Swap KSKD → USDGhook takes 1.00%
- Add, then remove liquiditycame back whole
pool 0x806628a7d5dea7679c1947b14997643c72db0b867aa6250d2454728990414ed8
frxUSD / SPY
fee dynamic, now 0%- Swap frxUSD → SPYhook takes 0.30%
- Swap SPY → frxUSDhook takes 0.30%
- Add, then remove liquiditycame back whole
pool 0x3e6fd764d07df0f76cc6d33c4153f05b64705fbd1fb604bf6b5a4a1b4b158be6
Read from the bytecode
- Code size
- 32,997 bytes
- Owner
- none found
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 13
- 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.
- 0xe74c37f7 ballotGate
- 0xe8574e8a claimFeeBps
- 0xf69ec158 MAX_CLAIM_FEE_BPS
- 0xf8c543ce MAX_CLAIM_FEE_WALK
- 0xfe99049a transferFrom
- 0xda748b10 pausedUntil
- 0xdaf58566 unstake
bit 4
After donate
bit 3Before swap returns deltabit 2After swap returns deltabit 1After add returns deltabit 0After remove returns delta- Before initialize. Runs once, when a pool is created.
- Before swap. Runs before every swap. On a dynamic-fee pool it can set the fee each time.
0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xdf848a9f rangeId0xbfcb4185 distributorFF0xbfe10928 distributor0xd0ba2baa setDistributor0xd5a24724 flatFee0xd677eaad effectiveClaimFee0xb56cc687 setPoolPaused0xb6363cf2 isOperator0xbdde80c6 sweepDistributor0xbf7e214f authority0xa2ba1fc8 withdraw0xa6acaacc MIN_POOL_FEE0xab9e5bfd sweepClaimFee0xae4a5785 setBallotGate0xb11dcb23 maxFee0x96f25d42 isSettling0x999d55fb MAX_PAUSE0x9d1712c5 claimFeeSyncIndex0x9d98c622 poolAsymmetry0xa00ba585 pausedUntilOf0x8fb36037 isConsumingScheduledOp0x8fdd4e6f pausedFor0x91dd7346 unlockCallback0x936852d4 rangeGrowth0x966af35a pokeOf0x7c5e62d0 claimFeeRecipient0x7e445230 MAX_POKE_DISCOUNT_BPS0x7fa7b6ac syncRanges0x8c686d13 claimFeeChangeAt0x64cf50c6 claimFeeFor0x6fa9f5ca stake0x70233ddd distributorOwed0x725fec6f autonomousFee0x7a9e5e4b setAuthority0x598af9e7 allowance0x5c975abb paused0x5cd04cf8 pokeFloor0x5f4934a8 clearPoke0x63cb7bdf MAX_POKE_TTL0x4e8d0048 claimFees0x4eb5c4fd userPosition0x51789ea2 setPaused0x558a7297 setOperator0x575e24b4 beforeSwap0x41b69b2a rangeState0x426a8493 approve0x4cee6193 setPoolAsymmetry0x4dc4b5c9 setPoolConfig0x2e32a3b0 rangeKey0x36a9ca1a deposit0x3c2f373f ABSOLUTE_MAX_FEE0x3f740010 pokeFee0x412b82c8 ffFeeSink0x15452022 currentFee0x2384b554 claimFeeOwed0x26f5ef52 setFFFeeSink0x289a2a15 withdrawAndClaim0x05e517e7 setClaimFee0x095bcdb6 transfer0x10caac0f claimFeeAllTimeMin0x11c43804 claimFeeHistoryLength0x136439dd pause0x016b937e pausePool0x017a31b8 setClaimFeeBps0x01ffc9a7 supportsInterface