ClankerHookStaticFeeV2 on Base
Uniswap v4 Hook Contract 0xb429d62f8f3bffb98cdb9569533ea23bf0ba28cc on Base · Launchpad · Verified contract
- Volume (24h)
- $91.76K
- Value locked (TVL)
- $2.33M
- All-time volume
- $2.61B
- Pools using this hook
- 634,822
- Swaps (24h)
- 2,638 (509 traders)
- Total swaps
- 16M
What it does
A Clanker token launch hook for Uniswap v4 that applies a fixed LP fee (separate rates for buys and sells of the launched token, each capped at 10%), skims a 20% protocol cut of that fee into the factory, and runs a short MEV protection module right after launch.
How it works step by step
- Pools can only be initialized through the hook's own initializePool (factory only) or initializePoolOpen (anyone) paths, and direct PoolManager initialization reverts with UnsupportedInitializePath. All pools use the dynamic fee flag.
- On every swap it sets the LP fee from stored per-pool values: clankerFee when the clanker token is being sold (or bought, depending on direction as coded) and pairedFee for the other direction, each at most 100000 (10%).
- It takes a protocol fee equal to 20% of the LP fee, always in the paired token, by minting claims in beforeSwap or afterSwap through return deltas. On the next swap it burns those claims and sends the tokens to the factory.
- For factory pools, an optional MEV module can raise the swap fee up to 80% during the first 2 minutes after pool creation. Liquidity additions are blocked while the module is active.
- For factory pools, it triggers the LP locker's collectRewardsWithoutUnlock before each swap and can call an allowlisted pool extension after each swap. A failing extension is caught and does not revert the swap.
- Swap behaviour
- beforeSwap sets the LP fee for the swap direction, updates protocolFee to 20% of that fee, and sends any accrued hook fee balance to the factory. It then calls the LP locker fee claim and the MEV module, which may raise the fee. For exact-input swaps that buy the clanker token and exact-output swaps that sell it, the protocol fee is taken on the paired token in beforeSwap via a returned delta. In the other two cases it is taken in afterSwap via the unspecified delta. Finally, a pool extension may be called inside try/catch.
- Liquidity behaviour
- beforeAddLiquidity reverts with MevModuleEnabled while the pool's MEV module is operational, which is at most 2 minutes after pool creation. After that, or on pools without a module, adds are unrestricted. Removals have no callback.
- Fee behaviour
- Static per-pool LP fees are stored at initialization: clankerFee and pairedFee, each capped at 10%. They are applied through updateDynamicLPFee on every swap. The hook keeps 20% of the applied LP fee as a protocol fee, taken in the paired token and forwarded to the factory. The MEV module can temporarily raise the fee up to 80% for the first 2 minutes, only upward, and the protocol fee follows that fee.
- Owner & admin controls
- No owner, pause or upgrade functions appear in the ABI. The factory address is immutable and has sole control of initializePool and initializeMevModule, and receives the protocol fees. Per-pool settings (fees, locker, MEV module, extension) are set at creation and have no setters afterwards. The MEV module assigned to a pool can raise the fee through mevModuleSetFee. The extension allowlist contract, whose admin is unknown from the input, decides which pool extensions are allowed.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize blocks any pool initialization that does not go through the hook's own initialize functions. beforeAddLiquidity blocks liquidity adds while the MEV module is active. beforeSwap sets the fee, claims the hook and locker fees, runs the MEV module, and takes the protocol fee on some swap directions. afterSwap takes the protocol fee on the other directions and runs the pool extension. beforeSwapReturnDelta and afterSwapReturnDelta let the hook adjust swap amounts to collect the protocol fee.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The factory is the only privileged address. It chooses the locker, MEV module and extension for each new pool and receives the protocol fees. It cannot change a pool's fees after creation through this hook. A malicious or buggy locker or MEV module chosen by the factory could block swaps or raise fees up to 80% for the first 2 minutes.
Risk to user funds: The hook does not custody user funds long term. It holds protocol fee claims in the PoolManager only until the next swap, when they are burned and sent to the factory. Swappers lose 20% of the LP fee to the protocol through the delta adjustments. Swaps and, during the first 2 minutes, liquidity adds can be blocked if the external locker or MEV module reverts or the module is active.
Security findings
- [medium] Hook skims swap value via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta are used to mint claims for 20% of the LP fee to the hook, which sends them to the factory. This is disclosed in the code but it does change what swappers receive or pay.
- [medium] MEV module can set an 80% fee for 2 minutes: mevModuleSetFee allows the pool's assigned module to raise the LP fee up to MAX_MEV_LP_FEE (800000) while it is operational, within 2 minutes of pool creation. Its logic lives in an external module not included in the source.
- [medium] External calls in the swap path: beforeSwap calls the pool's LP locker (collectRewardsWithoutUnlock) and the MEV module with no try/catch. A faulty or malicious locker or module chosen by the factory could revert swaps for that pool. Pool extension calls are wrapped in try/catch.
- [low] Open pool initialization: initializePoolOpen lets anyone create a pool with arbitrary tokens on this hook, with fees up to 10% each way. These pools have no locker, MEV module or extension, but the 20% protocol cut still applies.
- [info] No owner or upgrade path in the hook: The hook has no owner, pause or proxy logic, and its fee parameters are fixed per pool at creation, which limits post-launch rug vectors from the hook itself.
Contract details
- Verified source
- Yes (ClankerHookStaticFeeV2)
- Compiler
- solc 0.8.28+commit.7893614a
- Bytecode size
- 16,405 bytes
- Upgradeable proxy
- No
- Detected patterns
- access-control, dynamic-fee, launchpad, mev-protection, return-delta
Pools using ClankerHookStaticFeeV2
- boar / WETH (Dynamic fee) — 24h volume $41.60K, TVL $70.05K, 470 swaps today
- ClawBank / WETH (Dynamic fee) — 24h volume $16.98K, TVL $100.85K, 511 swaps today
- WETH / SHTF (Dynamic fee) — 24h volume $5.94K, TVL <$0.01, 22 swaps today
- WETH / NOGUM (Dynamic fee) — 24h volume $5.78K, TVL $5.62K, 12 swaps today
- WETH / WOSE (Dynamic fee) — 24h volume $2.60K, TVL $389, 2 swaps today
- WETH / KellyClaude (Dynamic fee) — 24h volume $2.47K, TVL $62.62K, 95 swaps today
- WOSE / WETH (Dynamic fee) — 24h volume $2.43K, TVL $0.03, 20 swaps today
- WOSE / WETH (Dynamic fee) — 24h volume $2.41K, TVL $0.04, 16 swaps today
- WETH / BAES (Dynamic fee) — 24h volume $2.27K, TVL $17.05K, 72 swaps today
- WETH / WOSE (Dynamic fee) — 24h volume $1.22K, TVL $1.18K, 18 swaps today
- WETH / HYPER (Dynamic fee) — 24h volume $1.04K, TVL $11.53K, 18 swaps today
- WETH / CLAWD (Dynamic fee) — 24h volume $801, TVL $83.51K, 68 swaps today
- WETH / SAIRI (Dynamic fee) — 24h volume $730, TVL $35.74K, 42 swaps today
- sepolia / WETH (Dynamic fee) — 24h volume $718, TVL $10, 6 swaps today
- WETH / JUNO (Dynamic fee) — 24h volume $592, TVL $27.18K, 62 swaps today
- WETH / OPENCLAW (Dynamic fee) — 24h volume $582, TVL $7.26K, 10 swaps today
- WETH / Conway (Dynamic fee) — 24h volume $423, TVL $27.32K, 38 swaps today
- WETH / CLAWNCH (Dynamic fee) — 24h volume $396, TVL $13.64K, 30 swaps today
- WETH / GITBANK (Dynamic fee) — 24h volume $378, TVL $15.37K, 30 swaps today
- WETH / MOLT (Dynamic fee) — 24h volume $313, TVL $60.04K, 21 swaps today