Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 92,974,342
0x59D6…A8cc
The eight checks
21 pools use this hook, the first one 80 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.00% 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.
- 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 switchOwned by 0x03a51c090dE3adb64D2CE589f992C099cE49bB78. Owner-style functions: setOwner, collectPoolFees, setFeeRecipient, claimCreatorFees, setMarketConfig, setKeeperGasPolicy.
- 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 record21 pools over 79 days.
Measured at block 92,974,342. 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 & 0x3fff0x28cc · 10100011001100
- 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.
ETH / STONKFAMIL
fee dynamic, now 0%- Swap ETH → STONKFAMILhook takes 2.00%
- Swap STONKFAMIL → ETHno liquidity above the price
- Add, then remove liquiditydeposit refused: curve phase
pool 0x06cd4bc9f67f69325d1b49d504f138dbfc3304eb161c8e50a687bfefd28ec123
ETH / FAMILY
fee dynamic, now 0%- Swap ETH → FAMILYhook takes 2.00%
- Swap FAMILY → ETHno liquidity above the price
- Add, then remove liquiditydeposit refused: curve phase
pool 0x37a67bbbbe35596220408318132e9350bb137cf549742af2f2f33dd1a4ade0d2
Read from the bytecode
- Code size
- 36,570 bytes
- Owner
- 0x03a51c090dE3adb64D2CE589f992C099cE49bB78
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 44
- 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.
- 0x0200737f GRADUATION_GAS
- 0x03d60c01 FULL_TICK_LOWER
- 0x042549d8 flushTreasury
- 0x06ae7095 marketFactory
- 0x0a3b3078 firstHourBought
- 0x0b7e8310 underlyingQuote
- 0x0d7a94f6 quoteBuy
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 add liquidity. Can refuse a deposit, or only let some addresses provide liquidity.
- Before swap. Runs before every swap. On a dynamic-fee pool it can set the fee each time.
- After swap. Runs after every swap.
- 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.
0x0ed56ffe ANTI_SNIPE_MAX_WINDOW0x13560cac allCoins0x13af4035 setOwner0x17de3c7e collectPoolFees0x194a4e7e platformFees0x1d32138f treasuryImplementation0x1db2e8a8 FIRST_HOUR0x1e4c7292 CURVE_SUPPLY0x21d0ee70 beforeRemoveLiquidity0x223a536b allowedUnderlyings0x2241b619 treasuryFees0x239f3af7 TICK_UPPER0x252b8d42 dividendFallback0x259982e5 beforeAddLiquidity0x270401cb setFeeRecipient0x2da135e4 TREASURY_SEED0x31e658a5 state0x32f0e8c0 FULL_TICK_UPPER0x351fee46 claimCreatorFees0x3541dbde L_CURVE0x3fa5b1ef keeperGasFloor0x3fc8cef3 weth0x46ca626b TICK_SPACING0x47377d92 TICK_LOWER0x4982086a ctoRedirect0x4af43955 feeRecipientLocked0x4e73ac8a topUpKeeper0x539aa77f PLATFORM_FEE_BPS0x575e24b4 beforeSwap0x5c16e15e lastClaim0x5e8e8232 setMarketConfig0x62bfb8de platformKeeper0x670171fd LP_SUPPLY0x678fd289 coinCount0x6c2bbe7e afterRemoveLiquidity0x6e2ccddd setKeeperGasPolicy0x6f28507c TOTAL_FEE_BPS0x6faa8e0a keeperTopUp0x6fe7e6eb afterInitialize0x750d5de2 quoteTickSpacing0x800939ab CTO_INACTIVITY0x80ecbbf7 FIRST_HOUR_MAX_BUY0x847a74ad antiSnipeWindow0x8652edf9 poolKeyOf0x86a4cf22 treasuryBuyIncrement0x8da5cb5b owner0x8f51acf5 setDividendFallback0x9016af09 creatorFees0x902d55a5 TOTAL_SUPPLY0x90b567c5 MAX_KEEPER_TOP_UP0x91dd7346 unlockCallback0x988b1fa7 poolOf0x9cbb109f underlyingTickSpacing0x9f063efc afterAddLiquidity0xa2be05f9 setUnderlying0xa5b5ab65 quotePoolFee0xa844a134 MAX_CREATOR_FEE_BPS0xaf73cc42 ANTI_SNIPE_MAX_BPS0xb47125f9 SQRT_GRAD0xb47b2fb1 afterSwap0xb5217bb4 pools0xb5545a3c claimRefund0xb6a8b0fa beforeDonate0xbc3da535 refunds0xbc4bd3a5 underlyingPoolFee0xc1db1b62 antiSnipePeakBps0xc38bd15c setAntiSnipeDefaults0xc4e833ce getHookPermissions0xced31285 GRADUATED_LP_FEE0xd12dbde4 marketRouter0xd7b96d4e locker0xd8d0dfdb SQRT_START0xd98b2f5c quoteSell0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xdea5c2e0 creatorOf0xdf1b80ae lockFeeRecipientTo0xdfacd608 MIN_CREATOR_FEE_BPS0xdfcee7d2 feeRecipientOf0xdfd46caf setPlatformKeeper0xe116e705 setQuote0xe1b4af69 afterDonate0xec212ded create0xec3889b5 withdrawPlatformFees0xf07e96b3 lastActivity0xf9b5c4ce routeFor0xfcba2b29 lockFeeRecipient0x3b9aca00 unknown0x06fdde03 name0x095ea7b3 approve0x18160ddd totalSupply0x197bc336 holderAt0x1aab9a9f holderCount0x23b872dd transferFrom0x313ce567 decimals0x335e536c cycleStartTime0x42966c68 burn0x55d0a1d0 burnedSupply0x61d027b3 treasury0x62056d27 projectedGlobalWeight0x70a08231 balanceOf0x72c90bde projectedWeightOf0x7f5a7c7b hook0x84dfb37c eligibleWeightOf0x9358928b circulatingSupply0x95d89b41 symbol0xa9059cbb transfer0xaaacdda0 currentCycleId0xada91a25 bumpCycle0xc990294a prevCycleStartTime0xdd62ed3e allowance0xe2792744 globalEligibleWeight0xf0f44260 setTreasury