Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,142,768
0xeCce…aaCC
The eight checks
7 pools use this hook, the first one 15 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 (UntrustedRouter). 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 switchOwned by 0xf64c46888fe5B2f623BB82CB5822ee6c28EAF21d. Owner-style functions: claim, setLaunchFee, sweepProtocolFees, setLister, setTrustedRouter, claimable.
- 06fail
The code cannot changeIt is a proxy. The code that runs lives at 0x0436919E62e517a45061cD570323043CF72c114d, and 0x56220A67b4D803500A42D6BD6b3F8E93c830Be38 can replace it.
- 07pass
Only the PoolManager can call itEach callback refused a call that did not come from the PoolManager.
- 08pass
Track record7 pools over 14 days.
Measured at block 93,142,768. 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 & 0x3fff0x2acc · 10101011001100
- 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 / KRYPTOCAT
fee 0%- Swap ETH → KRYPTOCAThook takes 2.30%
- Swap KRYPTOCAT → ETHhook takes 2.30%
- Add, then remove liquiditydeposit refused: PoolIsClosed
pool 0x0c80a8a08fe0bd5dcdd2d8c7fa2d0cb043bed9ce3ce565203158fa054d7ac368
HUNDRED / TKRYP
fee 0%- Swap HUNDRED → TKRYPno liquidity below the price
- Swap TKRYP → HUNDREDrefused: UntrustedRouter
- Add, then remove liquiditydeposit refused: PoolIsClosed
pool 0x1b8f1631f8b123b13ff2f2e19bc174a2c647872be67201414998a8c01647f26b
Read from the bytecode
- Code size
- 24,452 bytes
- Owner
- 0xf64c46888fe5B2f623BB82CB5822ee6c28EAF21d
- Proxy
- yes, code at 0x0436919E62e517a45061cD570323043CF72c114d
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 23
- 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.
- 0x03fd2a45 DEAD
- 0x0f6313e6 launchedAt
- 0x12b869fe unknown
- 0x13560cac allCoins
- 0x1428f21b royaltiesOf
- 0x1b86bf5a MAX_COIN_FEE_BPS
- 0x1e83409a claim
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 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.
0x21d0ee70 beforeRemoveLiquidity0x259982e5 beforeAddLiquidity0x28ff1d4c MAX_LAUNCH_FEE0x2a2dae0a tokenDeployer0x2cdc1c74 lister0x327ecd52 unknown0x3502a716 MAX_ELEMENTS0x3e179ec1 unknown0x41861c11 unknown0x45c877b0 unknown0x46904840 feeRecipient0x46ca626b TICK_SPACING0x49c657db ROYALTY_BPS0x4d1d1061 quoteCount0x5311312f quotes0x5313be2c setLaunchFee0x53a66025 sqrtPriceX960x55d1cb60 poolKey0x5615a5a8 unknown0x575e24b4 beforeSwap0x5884e804 sweepProtocolFees0x678fd289 coinCount0x687e2c17 trustedRouter0x6930e471 onTokenTransfer0x6ad6d45b setLister0x6c2bbe7e afterRemoveLiquidity0x6d947e4b MAX_PROTOCOL_FEE_BPS0x6ee85cfc allQuotes0x6fe7e6eb afterInitialize0x715018a6 renounceOwnership0x733b4dc2 unknown0x7d0f7a88 coins0x7d39b7c9 unknown0x7e7ad171 unknown0x8da5cb5b owner0x91dd7346 unlockCallback0x9f063efc afterAddLiquidity0xa2048d99 unknown0xa8cafc6a graduatedAt0xaf40667c unknown0xb47b2fb1 afterSwap0xb553f964 unknown0xb6a8b0fa beforeDonate0xc4d66de8 initialize0xc4e833ce getHookPermissions0xc6260251 fusion0xc64f5351 setTrustedRouter0xc65b6e4f unknown0xc7cf56bf unknown0xcab1ef67 quoteOf0xcf3cf573 launchFee0xd4570c1c claimable0xd6ae6e44 claimCreatorFees0xdba842bc unknown0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xdcf844a7 protocolFees0xe1b4af69 afterDonate0xe3654f5b unknown0xe552f5ba unknown0xec528293 unknown0xf2fde38b transferOwnership0xfb3e6f29 buyback