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,710
0x5D32…aAec
The eight checks
4 pools use this hook, the first one 12 d ago.
- 01caution
Permissions that touch your moneyThe address enables before remove liquidity, before swap returns delta, after swap returns delta. The hook is allowed to take; the next two checks measure whether it does.
- 02fail
What it takes from a swapOne direction works and the other is refused (PartialFillNotAllowed). You may be able to buy and not sell.
- 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 0%, written in the pool key.
- 05caution
No one holds the switchNo owner() but it has setSnipeTax, transferAdmin, setMaxCreatorTax, setBaseFee.
- 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 12 days.
Measured at block 93,297,710. 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 & 0x3fff0x2aec · 10101011101100
- 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 / DATEST
fee 0%- Swap ETH → DATESThook takes 1%
- Swap DATEST → ETHhook takes 1%
- Add, then remove liquiditydeposit refused: OnlySeedAdd
pool 0xab6eb353b2486c306dba5b3fca4f3d44a7fe05514889101257c19f16a7e93a1e
SPCX / HHHHH
fee 0%- Swap SPCX → HHHHHhook takes 3.00%
- Swap HHHHH → SPCXrefused: PartialFillNotAllowed
- Add, then remove liquiditydeposit refused: OnlySeedAdd
pool 0xae6385ae6f75bc669b1720ab5222d727a604a847d34a315f7be5fa23761ec915
Read from the bytecode
- Code size
- 18,508 bytes
- Owner
- none found
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 3
- 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.
- 0x01c5a0fa ROUTER_DELAY
- 0x02669b52 launchpad
- 0x03fd2a45 DEAD
- 0x060a210d MAX_STEADY_PIPS
- 0x0cb6d537 snipeWindow
- 0x0e18b681 acceptAdmin
- 0x21d0ee70 beforeRemoveLiquidity
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 remove liquidity. Can refuse a withdrawal. LPs may not get out.
- 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 donate. Runs before 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.
0x259982e5 beforeAddLiquidity0x26782247 pendingAdmin0x2877efed GATE_PRESET_6H0x2f1569c4 routerEta0x3018f08e setSnipeTax0x33958b38 liquidityOpeningWindow0x39d57b02 wired0x4035cc6c MAX_COLLECTION_SIZE0x43391146 snipeStartPips0x43b87f19 maxCreatorTaxPips0x490b7b9a FEATURE_STAKING0x4c220557 basePips0x4d0bf472 GATE_PRESET_1H0x54fdfab9 GATE_PRESET_24H0x575e24b4 beforeSwap0x58c5074b MAX_SNIPE_WINDOW0x5daab052 configure0x5e80d80f MAX_CREATOR_TAX_PIPS0x614a7f5d snapshotOf0x66b4f0a2 FEATURE_HOLDER_GATE0x6827f6ad registerPool0x687e2c17 trustedRouter0x6ae0b154 removeRouter0x6c2bbe7e afterRemoveLiquidity0x6d97e46b COIN_SUPPLY0x6ec05bfe MAX_SNIPE_EXEMPTIONS0x6fe7e6eb afterInitialize0x75829def transferAdmin0x75f4925d proposeRouter0x791b98bc positionManager0x7b103999 registry0x7d8356db feeFor0x803be728 presaleBought0x8361e5af poolTerms0x8a73a0ce currentFeePips0x96e9aca3 featureBoundsHash0x97e24cca MAX_BASE_PIPS0x9ba4d912 setMaxCreatorTax0x9e9ffc6a SNIPE_HALVINGS0x9f063efc afterAddLiquidity0xaae49d70 PIPS_DENOMINATOR0xae79223e disableCreatorTax0xb47b2fb1 afterSwap0xb5217bb4 pools0xb6a8b0fa beforeDonate0xb97bf9a3 isSnipeExempt0xc0e97753 FEATURE_GATE_SNAPSHOT0xc25052d7 SNIPE_START_MIN0xc4e833ce getHookPermissions0xc86d788c SNIPE_START_MAX0xcf20880a acceptRouter0xd005dde7 MIN_NET_PIPS0xd7c1e0df ROUTER_WINDOW0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xdce5b047 cancelRouter0xe1b4af69 afterDonate0xe66f4b13 poolFeatures0xf851a440 admin0xfa64490c setBaseFee0xfbfa77cf vault