Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,297,085
0xE753…25DC
The eight checks
4 pools use this hook, the first one 33 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.
- 02pass
What it takes from a swapIt takes 1% on top of the pool fee.
- 03pass
LPs can get outLiquidity added and removed in the same block came back whole.
- 04pass
The fee is the feeA fixed fee of 0%, written in the pool key.
- 05caution
No one holds the switchOwned by 0xB8A70b4d1547bf6193bd67A73F4F98ea9FD0A973. Owner-style functions: transferOwnership, setInitialPrice, setFeeDistribution, setFlaunch, setReferralEscrow, setCreatorFeeAllocation.
- 06caution
The code cannot changeThe bytecode contains DELEGATECALL.
- 07pass
Only the PoolManager can call itEach callback refused a call that did not come from the PoolManager.
- 08pass
Track record4 pools over 32 days.
Measured at block 93,297,085. 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 & 0x3fff0x25dc · 10010111011100
- 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 / GETREKT
fee 0%- Swap ETH → GETREKThook takes 1.00%
- Swap GETREKT → ETHhook takes 1%
- Add, then remove liquiditycame back whole
pool 0x22422391737a4e445ecb9d2dc52a6414c0c0a306e255853ed717c55f9dc8951d
flETH / CANARY
fee 0%- Swap flETH → CANARYhook takes 0.99%
- Swap CANARY → flETHhook takes 1%
- Add, then remove liquiditycame back whole
pool 0x534e58dd66bdfab8a214c0a776227b9196c7829d272f193ad26703c14a52e459
Read from the bytecode
- Code size
- 24,489 bytes
- Owner
- 0xB8A70b4d1547bf6193bd67A73F4F98ea9FD0A973
- Proxy
- no
- DELEGATECALL
- present
- SELFDESTRUCT
- absent
- Outside calls
- 30
- 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.
- 0xf04e283e completeOwnershipHandover
- 0xf2fde38b transferOwnership
- 0xfee81cf4 ownershipHandoverExpiresAt
- 0xff3575e4 getFlaunchingMarketCap
- 0xdddfecf5 flayGovernance
- 0xdf81740e setInitialPrice
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.
- 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.
0xe1b4af69
afterDonate
0xd897ba96 approveCreator0xdb39edfd flaunchWithLiquidity0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xcd141112 internalSwapPool0xd3bff717 setFeeDistribution0xd510327d approvedMemecoinCreator0xba3e69b7 bidWall0xbe721505 setFlaunch0xc29c945b MAX_PROTOCOL_ALLOCATION0xc4e833ce getHookPermissions0xb3b42795 getPoolFeeDistribution0xb47b2fb1 afterSwap0xb6a8b0fa beforeDonate0x9f063efc afterAddLiquidity0xa87277dd setReferralEscrow0xad49d66e closeBidWall0xb00eb9fe feeCalculator0x8da5cb5b owner0x8f2bdf75 referralEscrow0x91dd7346 unlockCallback0x7ba42efa setCreatorFeeAllocation0x7dc0d1d0 oracle0x84aa1da0 flaunchContract0x8c66d04f setFeeCalculator0x715018a6 renounceOwnership0x75d252a5 actionManager0x7907addf flaunchesAt0x575e24b4 beforeSwap0x67aa4d78 flaunch0x6c2bbe7e afterRemoveLiquidity0x6fe7e6eb afterInitialize0x4ed0f0f5 setPoolFeeDistribution0x54d1f13d cancelOwnershipHandover0x55d1cb60 poolKey0x320e0fad pairedTokenBidWallThreshold0x3e38b378 pairedToken0x4875cbb8 feeSplit0x4b8775f2 pairedTokenRegistry0x25692962 requestOwnershipHandover0x259982e5 beforeAddLiquidity0x299d532e MIN_DISTRIBUTE_THRESHOLD0x15200ca1 pairedTokenFeeEscrow0x1d0806ae initialPrice0x21d0ee70 beforeRemoveLiquidity0x2423028c setProtocolFeeDistribution0x01a2cae8 feeExemptions0x09276ea4 notifier0x0cd02239 creatorFee