Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 92,948,979
0xFc3D…20c4
The eight checks
34 pools use this hook, the first one 15 d ago.
- 01caution
Permissions that touch your moneyThe address enables 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.
- 03pass
LPs can get outLiquidity added and removed in the same block came back whole.
- 04caution
The fee is the feeIts pools use a dynamic fee that the hook sets before every swap. It stands at 0% now and can change.
- 05caution
No one holds the switchOwned by 0x6BF0B257cCc4C1d65aAd1B249177442D8E2216d9. Owner-style functions: setQuote, transferOwnership, setProtocolFee, setTrustedRouter, setFeeParams, setFeeVault.
- 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 record34 pools over 14 days.
Measured at block 92,948,979. 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 & 0x3fff0x20c4 · 10000011000100
- 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.
GME / USDG
fee dynamic, now 0%- Swap GME → USDGno liquidity at the current price
- Swap USDG → GMEno liquidity at the current price
- Add, then remove liquiditycame back whole
pool 0xd83e4b9462b270699e8ea684a6415688adba1001325875cb1ce6902ddde1dae4
Read from the bytecode
- Code size
- 14,246 bytes
- Owner
- 0x6BF0B257cCc4C1d65aAd1B249177442D8E2216d9
- Proxy
- no
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 1
- 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.
- 0xf3aded75 extendedMultPct
- 0xf525cb68 poolCount
- 0xf890e286 oracleOf
- 0xf9ea1a53 setQuote
- 0xea2ee072 isQuote
- 0xecd8e907 sessionAt
- 0xf2fde38b transferOwnership
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.
- After swap returns delta. Can take part of what you get out of every swap.
0xe30c3978
pendingOwner
0xe4467f35 setProtocolFee0xe450aaa5 protocolFeeFor0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xe1b4af69 afterDonate0xc4e833ce getHookPermissions0xc64f5351 setTrustedRouter0xd523dd1e prices0xb5217bb4 pools0xb60a4b08 setFeeParams0xb6a8b0fa beforeDonate0x9f063efc afterAddLiquidity0xa591f97f setFeeVault0xb47b2fb1 afterSwap0x8ff39099 setStaking0x96aae638 quoteIsUsd0x98cc7a37 MAX_BASE_FEE0x79ba5097 acceptOwnership0x7c87a993 maxOracleAge0x819fbfe5 maxLpFee0x8da5cb5b owner0x6fe7e6eb afterInitialize0x716912eb setHolidays0x78d5f781 setOracles0x6c2bbe7e afterRemoveLiquidity0x6c743c67 closedMultPct0x6d947e4b MAX_PROTOCOL_FEE_BPS0x675ec3d7 defaultBaseFee0x687e2c17 trustedRouter0x69883b4e poolIds0x55ac7e4f previewLpFee0x575e24b4 beforeSwap0x5e3568b8 session0x35659fb8 protocolFeeBps0x478222c2 feeVault0x4cf088d9 staking0x21d0ee70 beforeRemoveLiquidity0x24198cb5 capturePct0x259982e5 beforeAddLiquidity0x09846580 setPoolBaseFee0x0abe4f9d deadbandBps0x17911d52 holiday