Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,033,687
0x5Eb8…e080
The eight checks
11 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, setPoolConfig, transferFrom, pausedUntil, setSessionHours, setDistributor.
- 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 record11 pools over 45 days.
Measured at block 93,033,687. 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 / PLTR
fee dynamic, now 0%- Swap USDG → PLTRhook takes 0.17%
- Swap PLTR → USDGhook takes 0.17%
- Add, then remove liquiditycame back whole
pool 0xbe1a90db81cf52603ea9059a6fde2e5fa893a8750647ff189ee7618c61b4c4f9
USDG / INTC
fee dynamic, now 0%- Swap USDG → INTChook takes 1.00%
- Swap INTC → USDGhook takes 1.00%
- Add, then remove liquiditycame back whole
pool 0x5e4c353496e4c82a406a38ca1eaad6d2d4cdb8d405d422faff84bcb6f548d97e
Read from the bytecode
- Code size
- 42,039 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.
- 0xe8574e8a claimFeeBps
- 0xe8fe08b8 setPoolConfig
- 0xf0378920 dstMode
- 0xf69ec158 MAX_CLAIM_FEE_BPS
- 0xf8c543ce MAX_CLAIM_FEE_WALK
- 0xfe99049a transferFrom
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.
0xda748b10
pausedUntil
0xdaf58566 unstake0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xdf848a9f rangeId0xe74c37f7 ballotGate0xbfe10928 distributor0xc11cb1eb closeSec0xc51198c6 setSessionHours0xcf42c38f openSec0xd0ba2baa setDistributor0xd677eaad effectiveClaimFee0xb56cc687 setPoolPaused0xb6363cf2 isOperator0xbd11864b earlyClose0xbdde80c6 sweepDistributor0xbf7e214f authority0xbfcb4185 distributorFF0xa6acaacc MIN_POOL_FEE0xab9e5bfd sweepClaimFee0xabbae8dd MAX_DESCENT_WINDOW0xae4a5785 setBallotGate0xb11dcb23 maxFee0xb206aea0 setDayOverrides0x999d55fb MAX_PAUSE0x9d1712c5 claimFeeSyncIndex0x9d98c622 poolAsymmetry0xa00ba585 pausedUntilOf0xa19031b5 MAX_SESSION_SHIFT0xa2ba1fc8 withdraw0x8fb36037 isConsumingScheduledOp0x8fdd4e6f pausedFor0x91dd7346 unlockCallback0x936852d4 rangeGrowth0x966af35a pokeOf0x96f25d42 isSettling0x7c5e62d0 claimFeeRecipient0x7e445230 MAX_POKE_DISCOUNT_BPS0x7fa7b6ac syncRanges0x8c686d13 claimFeeChangeAt0x8f1a3ab0 MAX_DAY_OVERRIDES0x64cf50c6 claimFeeFor0x6fa9f5ca stake0x6fc5e8e2 floorConfig0x70233ddd distributorOwed0x725fec6f autonomousFee0x7a9e5e4b setAuthority0x582a6557 MAX_SPIKE_MULT0x598af9e7 allowance0x5c975abb paused0x5cd04cf8 pokeFloor0x5f4934a8 clearPoke0x63cb7bdf MAX_POKE_TTL0x4e8d0048 claimFees0x4eb5c4fd userPosition0x50959344 feeFloorAt0x51789ea2 setPaused0x558a7297 setOperator0x575e24b4 beforeSwap0x412b82c8 ffFeeSink0x41b69b2a rangeState0x426a8493 approve0x49e3a364 MIN_SESSION_LENGTH0x4cee6193 setPoolAsymmetry0x2e32a3b0 rangeKey0x32d689bc sessionAt0x33257d40 MAX_SESSION_LENGTH0x36a9ca1a deposit0x3c2f373f ABSOLUTE_MAX_FEE0x3f740010 pokeFee0x14b00253 dayOverride0x15452022 currentFee0x2384b554 claimFeeOwed0x26f5ef52 setFFFeeSink0x289a2a15 withdrawAndClaim0x2a66eceb MIN_EARLY_CLOSE_LENGTH0x05e517e7 setClaimFee0x095bcdb6 transfer0x10caac0f claimFeeAllTimeMin0x11c43804 claimFeeHistoryLength0x13132d1a setEarlyClose0x136439dd pause0x016b937e pausePool0x017a31b8 setClaimFeeBps0x01ffc9a7 supportsInterface