Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,147,039
0xA258…70c0
The eight checks
7 pools use this hook, the first one 27 d ago.
- 01pass
Permissions that touch your moneyNone of the permissions that let a hook take from swaps or from LPs are switched on.
- 02pass
What it takes from a swapIt takes 0.01% on top of the pool fee.
- 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 0x000000000901403fe289d44bfC760BA39C28964a. Owner-style functions: setDefaultFee, setDynamicFeeEnabled, updateLpTaxWallet, setMevxExecutor, setProfitDistributor, setMinGasLeft.
- 06fail
The code cannot changeIt is a proxy. The code that runs lives at 0xBbC23Ec802c8B79c0cc9c19f553D086b40cc6a71, and 0x900795f99f56809b69d1CBAca71394C8282fA5b7 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 27 days.
Measured at block 93,147,039. 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 & 0x3fff0x30c0 · 11000011000000
- 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 / USDG
fee dynamic, now 0%- Swap ETH → USDGnothing taken
- Swap USDG → ETHhook takes 0.01%
- Add, then remove liquiditycame back whole
pool 0xe4a9ec520748e8a96f1b231d975bdf78e00f8684b829ff04d0472382d769bd9d
Read from the bytecode
- Code size
- 21,907 bytes
- Owner
- 0x000000000901403fe289d44bfC760BA39C28964a
- Proxy
- yes, code at 0xBbC23Ec802c8B79c0cc9c19f553D086b40cc6a71
- DELEGATECALL
- absent
- SELFDESTRUCT
- absent
- Outside calls
- 11
- 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.
- 0x013e24b2 unknown
- 0x128c8481 unknown
- 0x154c8b43 MAX_MIN_GAS_LEFT
- 0x16ac5c59 unknown
- 0x1a3e8479 unknown
- 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.
- After initialize. Runs once, right after 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.
0x24ec7590
minFee
0x259982e5 beforeAddLiquidity0x326024f3 unknown0x3a0d5443 setDefaultFee0x3b247ea1 unknown0x3f0016e8 MAX_CALL_GAS_BUDGET0x4a5cfe03 unknown0x4af16109 initialize0x506c4df3 getFee0x527a1565 stopLoss0x567f95e9 unknown0x575e24b4 beforeSwap0x5856ee48 setDynamicFeeEnabled0x5a6c72d0 defaultFee0x5b3c50ac updateLpTaxWallet0x6b7b8be3 callGasBudget0x6c2bbe7e afterRemoveLiquidity0x6dddc0ca setMevxExecutor0x6e343bbe unknown0x6fe7e6eb afterInitialize0x715018a6 renounceOwnership0x74f5e552 unknown0x79ba5097 acceptOwnership0x7d9ee6b5 unknown0x892565a7 defaultLpShareBps0x8da5cb5b owner0x8ed19081 unknown0x924a96f0 setProfitDistributor0x9833dfa4 donateAndSettle0x9cf0839b mevxExecutor0x9f063efc afterAddLiquidity0xac7e1e92 poolKeys0xaed422e9 setMinGasLeft0xb445abe1 profitDistributor0xb47b2fb1 afterSwap0xb6a8b0fa beforeDonate0xbc5d3847 unknown0xbc8f69ef unknown0xc2442f94 feeByTickSpacing0xc2b7698c setFeeForTickSpacing0xc4e833ce getHookPermissions0xc7d7dd39 mevxRouter0xcd1b7a71 unknown0xce19556a setFeeManager0xd186b484 runArbitrage0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xddae8d81 setCallGasBudget0xe1a45218 BPS_DENOMINATOR0xe1b4af69 afterDonate0xe30c3978 pendingOwner0xed2d9a19 unknown0xed406181 unknown0xef897f07 feeManagers0xf2fde38b transferOwnership0xf937acac unknown0xfa9f3760 minGasLeft0xfdc087d7 setMevxRouter