Reading the hook.
The address, the bytecode, then a swap each way through its pool. A few seconds.
v4 hook · Robinhood Chain · block 93,239,654
0x50B9…6aC4
The eight checks
5 pools use this hook, the first one 86 d ago.
- 01caution
Permissions that touch your moneyThe address enables before remove liquidity, after swap returns delta. The hook is allowed to take; the next two checks measure whether it does.
- 02caution
What it takes from a swapIt takes 2% of each swap on top of the pool fee.
- 03pass
LPs can get outLiquidity added and removed in the same block came back whole.
- 04pass
The fee is the feeA fixed fee of 0.10%, written in the pool key.
- 05caution
No one holds the switchOwned by 0x0000000F7ccd4072641B091F59f2ccD107fEd445. Owner-style functions: setTokenLockerDefaults, setPaused, setViewer, withdrawProtocolSurplus, updateCreatorFeeSplit, upgradeToAndCall.
- 06fail
The code cannot changeIt is a proxy. The code that runs lives at 0x1f41B7Fd33515c2B591bE4e1437c74eD6b78AAC4.
- 07pass
Only the PoolManager can call itEach callback refused a call that did not come from the PoolManager.
- 08pass
Track record5 pools over 85 days.
Measured at block 93,239,654. 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 & 0x3fff0x2ac4 · 10101011000100
- 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 / HNGO
fee 0.10%- Swap ETH → HNGOhook takes 2%
- Swap HNGO → ETHhook takes 2%
- Add, then remove liquiditycame back whole
pool 0x58caee2e11a5c3b1ca8c3b35f8b704dcac533766ddf4a5c348154474126eb051
ETH / SQUID
fee 0.10%- Swap ETH → SQUIDhook takes 2%
- Swap SQUID → ETHhook takes 2%
- Add, then remove liquiditycame back whole
pool 0xdf42be4ddd89b70b2c72588460c3781efb4e043f77266cee553438c606f7bc7f
Read from the bytecode
- Code size
- 22,925 bytes
- Owner
- 0x0000000F7ccd4072641B091F59f2ccD107fEd445
- Proxy
- yes, code at 0x1f41B7Fd33515c2B591bE4e1437c74eD6b78AAC4
- DELEGATECALL
- present
- SELFDESTRUCT
- absent
- Outside calls
- 3
- 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.
- 0x028541ed positionManagerCodeHash
- 0x060705fa buybacksDisabled
- 0x079e3b27 TRADING_MODULE_VERSION
- 0x14fea90e setTokenLockerDefaults
- 0x16c38b3c setPaused
- 0x1ea000c8 getLaunchPoolKey
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.
- After swap returns delta. Can take part of what you get out of every swap.
0x1f4efc39
accumulatedBuyback
0x21d0ee70 beforeRemoveLiquidity0x259982e5 beforeAddLiquidity0x264f5173 saleSplitCalculator0x2a963f9e MIN_RAISE0x2dc4609a setViewer0x2e9fb454 createLaunchWithReferral0x2f3a3d5d tokenImplementation0x32d3bae6 BUYBACK_FLUSH_THRESHOLD0x37e19a6a NATIVE_PRICE_SCALE0x3a3d622b withdrawProtocolSurplus0x3b110cc4 buy0x40c8aa3d updateCreatorFeeSplit0x43dca611 tradingModuleCodeHash0x4ccfc5c7 MAX_RAISE0x4f1ef286 upgradeToAndCall0x52d1902d proxiableUUID0x53418a74 usedBuybackAuthorizations0x54f893ef VARIABLE_FEE_BPS0x5578ae93 defaultTokenLockerTwo0x575e24b4 beforeSwap0x5760f2e3 setPositionManager0x5a142ed8 QUOTE_CONFIGURATION_MODE0x5c975abb paused0x5e318e07 withdrawFees0x5e9b2029 approveComponentCodeHash0x616f3f22 previewSell0x624745b0 COMPATIBILITY_VERSION0x637e8ab4 tradingModule0x64df049e protocolFeeRecipient0x6731b48f previewModule0x68067980 buyFor0x6916c5ef captchaSigner0x6923f13a TOKEN_FEE_FLUSH_THRESHOLD0x6c2bbe7e afterRemoveLiquidity0x6f145916 accountedProtocolSurplus0x6fe7e6eb afterInitialize0x715018a6 renounceOwnership0x72c6fa1a accumulatedTokenFees0x753c8133 usedBuybackNonces0x765b080e setCaptchaSigner0x791b98bc positionManager0x79ba5097 acceptOwnership0x7d9af923 MIN_BUY_ETH0x800898b3 setCalculatorAndViewer0x81163194 launchNativeDust0x827f1c10 executeAccumulatedBuyback0x88ed34e6 buybackAuthorizer0x8a29e2de initialize0x8ad234a4 sell0x8b4c5b4c buybackExecutor0x8da5cb5b owner0x8dbbea4d createLaunch0x8ebd1eba MAX_GAIN_BPS0x902d55a5 TOTAL_SUPPLY0x91dd7346 unlockCallback0x92a6c219 setLimitOrderSettlement0x96a7d57b donateProtocolSurplus0x98705c92 buyForSettlement0x98edf5cb buyWithReferral0x9d19907e sellWithReferral0x9e49c9c9 protocolLiabilities0x9f063efc afterAddLiquidity0xa0b82f82 limitOrderSettlement0xa0cf0aea NATIVE0xa2327859 recapitalizeLaunch0xa3aa08c6 componentCodeHashApprover0xa4ba9799 syncForcedEthSurplus0xa6cff88b SHARED_STORAGE_LAYOUT_VERSION0xad3cb1cc UPGRADE_INTERFACE_VERSION0xb16c6912 sellForSettlement0xb20d0ece previewBuy0xb47b2fb1 afterSwap0xb556d4e5 tokenToLaunchId0xb64fecfa executeAccumulatedTokenFees0xb6a8b0fa beforeDonate0xb81984b3 getLaunchSettlement0xbc0a3981 implementationCodeHash0xbe378228 PROTOCOL_FEE_BPS0xc149ec17 setTradingModule0xc1bb91ca MIN_SELL_TOKENS0xc3a23a57 buybackAuthorizationVersion0xc4b677c6 tokenImplementationCodeHash0xc4da3b1c calculatorCodeHash0xc4e833ce getHookPermissions0xc896b660 autoFlushTokenFeesSelf0xcd6e7dff unknown0xd0c93a7c tickSpacing0xdc4c90d3 poolManager0xdc98354e beforeInitialize0xdd1b9c4a POOL_FEE0xde1adc0a setBuybacksDisabled0xe1a45218 BPS_DENOMINATOR0xe1b4af69 afterDonate0xe30c3978 pendingOwner0xe521cb92 setProtocolFeeRecipient0xe6427588 autoFlushBuybackSelf0xed10292f viewerCodeHash0xf085a610 setTickSpacing0xf267f959 previewSaleSplit0xf2fde38b transferOwnership0xf30878c1 viewer0xf92d05cd getLaunchState0xfccc2813 BURN_ADDRESS0xfd874995 withdrawableFees0xfdf262b7 quoteAsset0xfec102f7 defaultTokenLockerOne