ZoraV4CoinHook on Base
Uniswap v4 Hook Contract 0x0469a4bd3724dc86c9542f4694c976da13c450c0 on Base · Rewards · Verified contract
- Volume (24h)
- $13.19K
- Value locked (TVL)
- $119.42K
- All-time volume
- $6.36M
- Pools using this hook
- 930,948
- Swaps (24h)
- 4,606 (261 traders)
- Total swaps
- 2.9M
What it does
Zora's v4 coin hook: it registers each Zora coin pool, collects the LP fees earned on swaps, converts them and pays them out as creator, referrer and protocol rewards, and works with a limit order book. It can also migrate a pool's liquidity to a newer approved hook.
How it works step by step
- On pool initialization it records which Zora coin the pool belongs to (getPoolCoin, getPoolCoinByHash); the NoCoinForHook and NotACoin errors suggest swaps on unregistered pools revert.
- After swaps it collects LP fees and distributes them as market rewards, as shown by the CoinMarketRewardsV4, CreatorCoinRewards and LpReward events.
- It is wired to a ZoraLimitOrderBook, which is a required constructor dependency, and emits a detailed Swapped event, so limit orders are likely created or filled around swaps.
- It uses a trusted message sender lookup (isTrustedMessageSender) to identify the real trader behind routers.
- It migrates liquidity to a new hook through migrateLiquidity, initializeFromMigration and initializeFromMigrationWithUpdateableFee. The new hook is checked against an upgrade gate and a hook registry (InvalidNewHook, UpgradePathNotRegistered).
- It moves tokens and ETH through the pool manager via unlockCallback, and has a receive function for ETH.
- Swap behaviour
- beforeSwap and afterSwap are enabled. The exact beforeSwap logic is not visible in the ABI; it may handle sender trust or pool lookups. In afterSwap the hook appears to harvest accrued LP fees, convert them along a payout path (PathMustHaveAtLeastOneStep), distribute rewards, and emit Swapped with sender, pool key, swap params, deltas and hook data. It likely also interacts with the limit order book.
- Liquidity behaviour
- No add or remove liquidity callbacks are enabled. The hook itself manages liquidity positions: migrateLiquidity moves pool liquidity to a new hook, and the initializeFromMigration functions set up the pool on the new hook.
- Fee behaviour
- The hook takes and distributes LP fees as rewards. The CoinMarketRewardsV4 event carries several addresses, which suggests splits among creator, referrers, protocol and others. The 'WithUpdateableFee' migration variant suggests some pools can have updatable fees. The exact split percentages are not visible from the ABI.
- Owner & admin controls
- No owner or pause functions appear in the ABI. Liquidity migration is the main privileged path and appears gated by the coin (OnlyCoin error), an upgrade gate and a hook registry. Who can trigger migration and who controls the registry and gate are not visible from the ABI. The hook itself is not a proxy as far as the ABI shows.
Enabled Uniswap v4 callbacks
afterInitialize, beforeSwap, afterSwap
afterInitialize registers the pool's coin and sets up the pool. beforeSwap runs pre-swap checks or setup (exact use not determinable from the ABI). afterSwap collects fees, pays out rewards and handles limit order interactions.
Security & trust assessment
Risk level: medium (verified source, medium confidence).
Who controls it: The ABI shows no direct owner functions. Whoever controls the upgrade gate, hook registry or coin-side migration authority could decide which new hook receives migrated liquidity. These controls are external and could not be inspected.
Risk to user funds: The hook processes accrued LP fees and pool liquidity, and it can move liquidity during migration. It is not a vault for user deposits as far as the ABI shows. A faulty swap-path, limit order or migration step could block or misdirect fees and liquidity.
Security findings
- [medium] Liquidity migration to another hook: migrateLiquidity and initializeFromMigration move pool liquidity to a new hook. Safety depends on the upgrade gate and hook registry, which are external contracts not reviewed here.
- [medium] Hook moves currency through the pool manager: unlockCallback, the SafeERC20 errors, EthTransferFailed and the receive function show the hook takes, swaps and pays out tokens and ETH when it processes fees.
- [low] Reliance on external contracts: The constructor needs a limit order book, hook registry, upgrade gate, trusted sender lookup and coin version lookup. A fault or change in any of them could affect swaps or rewards.
- [info] Swaps may revert for unregistered pools: The NoCoinForHook and NotACoin errors suggest the hook only works for pools linked to a Zora coin.
- [info] Only the ABI was available: No source file contents were provided, so the findings come from the ABI, events and errors and not from reading the logic.
Contract details
- Verified source
- Yes (ZoraV4CoinHook)
- Compiler
- solc 0.8.28+commit.7893614a
- Bytecode size
- 24,148 bytes
- Upgradeable proxy
- No
- Detected patterns
- limit-orders, moves-currency, rewards, self-unlock
Pools using ZoraV4CoinHook
- ATSF / WETH (Dynamic fee) — 24h volume $1.92K, TVL $0, 8 swaps today
- WETH / USPD (Dynamic fee) — 24h volume $876, TVL $640, 10 swaps today
- WETH / USFD (Dynamic fee) — 24h volume $809, TVL $0, 45 swaps today
- WETH / WOFT (Dynamic fee) — 24h volume $758, TVL $0, 34 swaps today
- WETH / USDF (Dynamic fee) — 24h volume $676, TVL $2.49K, 12 swaps today
- XST / WETH (Dynamic fee) — 24h volume $618, TVL $6.02K, 7 swaps today
- WETH / DTCC (Dynamic fee) — 24h volume $419, TVL $0, 34 swaps today
- WETH / DOFT (Dynamic fee) — 24h volume $383, TVL $0, 37 swaps today
- USPD / WETH (Dynamic fee) — 24h volume $291, TVL $1.61K, 14 swaps today
- WTOF / WETH (Dynamic fee) — 24h volume $288, TVL $0, 4 swaps today
- WETH / DTOF (Dynamic fee) — 24h volume $259, TVL $628, 11 swaps today
- WETH / NOFD (Dynamic fee) — 24h volume $217, TVL $340, 8 swaps today
- OIF / WETH (Dynamic fee) — 24h volume $195, TVL $557, 8 swaps today
- WETH / NOFD (Dynamic fee) — 24h volume $193, TVL $161, 6 swaps today
- WETH / NDTA (Dynamic fee) — 24h volume $167, TVL $401, 4 swaps today
- WETH / GORUS (Dynamic fee) — 24h volume $155, TVL $18, 10 swaps today
- WETH / USDF (Dynamic fee) — 24h volume $154, TVL $4.80K, 5 swaps today
- WETH / AFTS (Dynamic fee) — 24h volume $152, TVL $455, 7 swaps today
- ADFT / WETH (Dynamic fee) — 24h volume $148, TVL $239, 3 swaps today
- WETH / UKFLMS (Dynamic fee) — 24h volume $137, TVL $208, 6 swaps today