Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 92,973,175
0xBf6f…A0cC
The eight checks
18 pools use this hook, the first one 46 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.
- 02n/a
What it takes from a swapNo pool with liquidity to swap through yet.
- 03caution
LPs can get outTaking liquidity straight back out lost 0.27%.
- 04pass
The fee is the feeA fixed fee of 0.10%, written in the pool key.
- 05caution
No one holds the switchNo owner() but it has claimCreatorFees.
- 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 record18 pools over 46 days.
Measured at block 92,973,175. 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 & 0x3fff0x20cc · 10000011001100
- 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.
Tiptoe / USDG
fee 0.10%- Swap Tiptoe → USDGno liquidity at the current price
- Swap USDG → Tiptoeno liquidity at the current price
- Add, then remove liquiditylost 0.27%
pool 0x9604042c9e9bdf641decd1c0a255e05b564aa4a4a56125c7d61105405352cefe
Read from the bytecode
- Code size
- 14,993 bytes
- Owner
- none found
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 4
- 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.
- 0xde329ee7 ABSOLUTE_MAX_FEE_BPS
- 0xe1b4af69 afterDonate
- 0xe24b3223 AUTHORIZED_INITIALIZER
- 0xf028fa07 claimCreatorFees
- 0xc5c4c1be unknown
- 0xd1c3d057 unknown
- 0xdc4c90d3
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.
- 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.
poolManager
0xdc98354e beforeInitialize0xa9a091bb validateHookAddress0xb47b2fb1 afterSwap0xb6a8b0fa beforeDonate0xc4e833ce getHookPermissions0x8c0288ba unknown0x91dd7346 unlockCallback0x9f063efc afterAddLiquidity0x6c2bbe7e afterRemoveLiquidity0x6fe7e6eb afterInitialize0x79ab8834 unknown0x8a4144cf unknown0x3a24e181 unknown0x431a9caa MAX_TOTAL_FEE_BPS0x4727b76e PIPS_PER_BPS0x575e24b4 beforeSwap0x19fa8697 calculateFees0x21d0ee70 beforeRemoveLiquidity0x259982e5 beforeAddLiquidity0x35ee7230 unknown0x037aadbe getPoolConfig0x07ef2190 poolConfigs0x0ae4e650 unknown