Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,396,186
0x200f…A888
The eight checks
3 pools use this hook, the first one 44 d ago.
- 01caution
Permissions that touch your moneyThe address enables before 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.
- 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 0x1e9F3C9e936c60d184a7947bb1798809487F97F5. Owner-style functions: setMarket, setRouter, transferOwnership, withdraw.
- 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 record3 pools over 44 days.
Measured at block 93,396,186. 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 & 0x3fff0x2888 · 10100010001000
- 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.
WETH / V5STUDIO
fee 0%- Swap WETH → V5STUDIOno liquidity at the current price
- Swap V5STUDIO → WETHno liquidity at the current price
- Add, then remove liquiditydeposit refused: InvalidCurve
pool 0x887e42fcf66d78afad0a608e6f1dfa236176e323c75e459927b9913e519ba77b
Read from the bytecode
- Code size
- 13,277 bytes
- Owner
- 0x1e9F3C9e936c60d184a7947bb1798809487F97F5
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 9
- 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.
- 0x01e1d114 totalAssets
- 0x067cf832 reservations
- 0x06d8d7db curve
- 0x08b66372 HOOK_FLAGS
- 0x0d7a94f6 quoteBuy
- 0x13648340 totalLockedPrincipal
- 0x14f29493 principal
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.
- Before swap returns delta. Can take part of what you put into a swap, or change how much is swapped.
0x18c0a2f6
unknown
0x19cc0523 totalRetained0x259982e5 beforeAddLiquidity0x29e80390 unknown0x2a9c5cb1 keyFor0x3fc8cef3 weth0x4b319713 totalWithdrawn0x50c57962 totalCurveReserve0x525e7f61 unknown0x575e24b4 beforeSwap0x5c47e6f6 totalTradeFees0x5e371363 unknown0x61fa00c2 totalTradeFeesCollected0x6dcea85f setMarket0x715018a6 renounceOwnership0x79ba5097 acceptOwnership0x80f55605 market0x8325263c totalBonusPaid0x896d0a67 unknown0x8da5cb5b owner0x91dd7346 unlockCallback0x99845ab6 reserve0x99ecedf6 reduce0xa48f5670 unknown0xad044f49 totalFunded0xad5b9d88 unknown0xb60d4288 fund0xbdae0aab unknown0xbf333f2c FEE_BPS0xc0d78655 setRouter0xc71b0e1c totalReserved0xca29205a unknown0xd3e89483 policies0xd98b2f5c quoteSell0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xe30c3978 pendingOwner0xe6e46571 freeCapital0xf2fde38b transferOwnership0xf3fef3a3 withdraw