ClankerHookStaticFeeV2 on Base
Uniswap v4 Hook Contract 0x0ae73dfa41f1acacf32ad050924384b295e968cc on Base · Launchpad · Verified contract
- Volume (24h)
- $193
- Value locked (TVL)
- $14.87K
- All-time volume
- $4.46M
- Pools using this hook
- 539
- Swaps (24h)
- 24 (11 traders)
- Total swaps
- 82,158
What it does
A Clanker token-launch hook that sets a fixed, direction-dependent LP fee (max 10%) on each swap, can raise the fee during the first 2 minutes as an anti-sniper measure, and can skim an optional protocol fee on swaps; this deployment is built to use a zero protocol fee.
How it works step by step
- Only the factory can create launch pools; anyone can create an 'open' pool for non-factory tokens, but those get no locker auto-claim, pool extensions or MEV module. Direct PoolManager initialization is blocked.
- Pools use the dynamic-fee flag. On every swap the hook sets the LP fee to a stored clankerFee or pairedFee depending on swap direction. Each is capped at 100000 (10%) at pool creation.
- For factory pools, an MEV module can raise the swap fee up to 80% during the first 2 minutes after pool creation. Liquidity adds are blocked during that window.
- Before each swap the hook claims accrued hook fees and calls the pool's LP locker to collect rewards without unlocking. Any ERC-6909 balance the hook holds in the paired token is burned and sent to the factory.
- It can take a protocol fee, a fraction of the LP fee set by an immutable numerator of at most 20%. The fee is taken through beforeSwap and afterSwap return deltas on the paired-token side. The source comments say cc0.company deploys with 0, which would disable the carve.
- An optional allowlisted pool extension is called after swaps in a try/catch, so a failing extension cannot revert the swap.
- Swap behaviour
- beforeSwap sets the dynamic LP fee from the pool's clanker or paired fee by direction and recomputes protocolFee. It then sweeps hook-held paired-token fees to the factory, triggers the locker fee collection and runs the MEV module while it is active. For exact-input swaps buying the clanker token and exact-output swaps selling it, it reduces or raises the specified amount by the protocol fee and mints that amount to itself as an ERC-6909 claim. afterSwap takes the protocol fee on the unspecified side in the other two cases, then runs the pool extension, except when the swapper is the locker.
- Liquidity behaviour
- beforeAddLiquidity reverts with MevModuleEnabled while the pool's MEV module is operational, which is the first 2 minutes after creation for factory pools. After that, adds are unrestricted. Removals have no callbacks.
- Fee behaviour
- Each pool has a static clankerFee and pairedFee, both capped at 10%, applied by swap direction through updateDynamicLPFee. The MEV module can temporarily raise the fee to at most 80% during the first 2 minutes. A protocol fee equal to LP fee times protocolFeeNumerator (at most 20%) is carved from the swap and later sent to the factory. The LP locker then splits the remaining LP fees, per the source comments.
- Owner & admin controls
- There is no owner and no pause. The immutable factory address controls factory pool creation (initializePool) and MEV module initialization. Fee values are fixed per pool at creation, and no setter exists afterwards. The protocol fee numerator is immutable. Per-pool MEV module, locker and extension addresses are set by the factory at creation. The hook is not an upgradeable proxy.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize always reverts so pools can only be created through the hook's own initializePool paths. beforeAddLiquidity blocks liquidity adds while the MEV module is active. beforeSwap sets the fee, claims fees, runs the MEV module and takes protocol fees through its return delta. afterSwap takes the protocol fee on the unspecified token through its return delta 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: There is no owner key. The immutable factory decides which pools get which locker, MEV module and extension, and receives swept protocol fees. Per-pool fees cannot be changed after creation, apart from the temporary MEV module raise. A malicious locker or MEV module assigned by the factory could block swaps or impose the temporary high fee.
Risk to user funds: The hook does not custody user deposits. It holds transient ERC-6909 claims for protocol fees and sweeps them to the factory on the next swap. It can reduce the swapper's output or raise their input by the protocol fee through return deltas, which is zero when the numerator is 0 and capped at 20% of the LP fee otherwise. Swaps could be blocked by a failing locker or MEV module call, and liquidity adds are blocked for the first 2 minutes.
Security findings
- [medium] Hook takes tokens through return deltas: beforeSwap and afterSwap return deltas mint paired-token claims to the hook, equal to protocolFee times the swap amount. Under the cc0 configuration the numerator is 0, so the carve should be zero. The numerator is immutable and can be up to 20% in other deployments, so the constructor value must be checked.
- [medium] MEV module can set an 80% fee for 2 minutes: mevModuleSetFee lets the pool's assigned MEV module raise the LP fee up to 800000 (80%) while operational, which lasts 2 minutes after creation. Traders in that window can face very high fees, and liquidity adds revert.
- [medium] Swaps depend on external locker and MEV module calls: Every swap calls the pool's locker (collectRewardsWithoutUnlock) and, while active, the MEV module without try/catch. A reverting or malicious factory-assigned locker or module could block swaps. Pool extension failures are caught.
- [low] Factory controls pool wiring and receives hook fees: The factory sets each pool's locker, MEV module and extension, and receives swept fee claims through poolManager.take. Trust in the factory contract is required.
- [info] Open pools and unrestricted fee sweep: Anyone can create open pools with this hook, but they get no locker, MEV module or extension. The mevModuleOperational function is public and can only turn off an expired module.
Contract details
- Verified source
- Yes (ClankerHookStaticFeeV2)
- Compiler
- solc 0.8.28+commit.7893614a
- Bytecode size
- 12,807 bytes
- Upgradeable proxy
- No
- Detected patterns
- access-control, dynamic-fee, launchpad, mev-protection, moves-currency, return-delta
Pools using ClankerHookStaticFeeV2
- WETH / B420 (Dynamic fee) — 24h volume $181, TVL $9.29K, 14 swaps today
- WETH / HTTPBASE20 (Dynamic fee) — 24h volume $12, TVL $4.98K, 10 swaps today
- WETH / GUY (Dynamic fee) — 24h volume $0, TVL $13, 0 swaps today
- WETH / DB (Dynamic fee) — 24h volume $0, TVL $7.79, 0 swaps today
- WETH / FOX (Dynamic fee) — 24h volume $0, TVL $2.04, 0 swaps today
- WETH / DEEPSEEK (Dynamic fee) — 24h volume $0, TVL $0.06, 0 swaps today
- WETH / MAPQ (Dynamic fee) — 24h volume $0, TVL $0.05, 0 swaps today
- WETH / VASELINE (Dynamic fee) — 24h volume $0, TVL $0.01, 0 swaps today
- WETH / MBUM (Dynamic fee) — 24h volume $0, TVL $1.59, 0 swaps today
- WETH / LAPTOP (Dynamic fee) — 24h volume $0, TVL $0.23, 0 swaps today
- WETH / 99 (Dynamic fee) — 24h volume $0, TVL $1.80, 0 swaps today
- WETH / JUDE (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / STOCK (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / SHARES (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / LONGCAT (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / CLAWDOS (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / INTERNET (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / TWINE (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / TWINE (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- WETH / BLOHAR (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today