ContentCoinHook on Base
Uniswap v4 Hook Contract 0x9b47e436e216b2cb54d6f24154f86d946098d040 on Base · Rewards · Verified contract
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $120
- Pools using this hook
- 12,239
- Swaps (24h)
- 2 (1 traders)
- Total swaps
- 29,015
What it does
Hook for Zora content coin pools that seeds the pool with the coin's preset liquidity curve at initialization and, after every swap, harvests LP fees, reinvests part into new liquidity, converts the rest to a backing currency and pays it out to creator, referrers, protocol and Doppler.
How it works step by step
- On pool initialization, only a registered V4 coin (checked via the coin version lookup) can create the pool; the hook computes multi-curve Doppler liquidity positions from the coin's config and mints them to itself through an unlock callback.
- After every swap it collects accrued fees from all of its LP positions using zero-liquidity modifyLiquidity calls.
- About one third of collected fees (3333 bps) is reinvested as a single-sided one-tick-spacing LP position placed two tick spacings away from the current tick; this liquidity stays owned by the hook.
- The remaining fees are swapped along the coin's payout path (possibly multi-hop) into a payout currency and taken to the hook.
- The payout is split: 50% to the creator payout recipient, 15% to the platform referrer, 15% to the trade referrer (address decoded from hookData), 5% to Doppler, and the remainder to the protocol recipient. Unused referrer shares fall to the protocol.
- The coin that owns a pool can call migrateLiquidity to burn all positions and move the funds to a new hook, provided the upgrade gate has registered that path.
- Swap behaviour
- Swaps are not altered or blocked before execution. In afterSwap the hook looks up the pool's coin (reverting with NoCoinForHook if none), harvests fees, reinvests part, swaps the rest to the payout currency via nested pool swaps, pays rewards out, and emits a Swapped event with the sender, the original msg.sender (if the router exposes msgSender), price and amounts. It returns a zero delta, so the trader's amounts are unchanged.
- Liquidity behaviour
- No liquidity callbacks. The hook adds and removes its own liquidity internally: initial positions at initialization, reinvested fee positions after swaps, and a full burn during migrateLiquidity.
- Fee behaviour
- The pool's LP fee comes from the pool key; the coin config uses 3% (LP_FEE_V4 = 30000) for V4 coins. The hook does not override the fee at swap time. Fees accrue to the hook's own positions. About 1/3 is recycled as liquidity and about 2/3 is paid out as market rewards: 50% creator, 15% platform referrer, 15% trade referrer, 5% Doppler, remainder to protocol. Recipients are read from the coin contract at distribution time.
- Owner & admin controls
- No owner, pause or upgrade functions on the hook itself. The trusted message sender list is fixed in the constructor and the coin lookup and upgrade gate are immutable. Only a pool's coin contract can call migrateLiquidity, and only to a destination registered in the external upgrade gate. Reward recipients are read from each coin contract and are controlled outside this hook. The imported MultiOwnable is not inherited by the hook in the shown source.
Enabled Uniswap v4 callbacks
afterInitialize, afterSwap
afterInitialize validates the caller is a V4 coin, records the pool-to-coin mapping and mints the initial LP positions. afterSwap harvests fees, reinvests part, converts the rest to the payout currency, distributes rewards and emits the Swapped event.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The hook has no privileged key. The coin contracts and the external upgrade gate can influence reward recipients and migration destinations, and are not visible in this source.
Risk to user funds: The hook holds the pool's liquidity positions and temporarily holds fee proceeds, and can move them to recipients or, via a coin-initiated migration, to a gate-approved new hook. Traders' swap amounts are not taken through return deltas, though swaps can be blocked if reward payouts or the coin calls revert.
Security findings
- [medium] Swaps depend on external coin and recipient contracts: afterSwap calls the coin for its payout path and recipients, performs nested swaps, and pays out via ETH calls or ERC20 transfers. If a recipient reverts on ETH receipt (EthTransferFailed) or the coin misbehaves, every swap on that pool reverts.
- [medium] Coin can migrate all pool liquidity: migrateLiquidity lets the pool's coin burn all hook-owned positions and send the proceeds to a new hook, gated only by upgrade-gate registration of the path. Trust rests on the coin and the gate's registrar.
- [low] Hook owns pool liquidity and holds transient funds: LP positions are owned by the hook, and fees are taken to the hook before being forwarded. Funds should not rest there, but a failure mid-flow reverts the swap rather than stranding funds.
- [info] Fees are taken from LP positions and paid to third parties: The hook does not use return deltas, so traders are not charged extra. Rewards come only from the LPs' own fee accruals.
- [low] Trade referrer is arbitrary and caller-supplied: getTradeReferral decodes an address from hookData, so any swapper can direct the 15% referral share to any address. hookData of the wrong shape may revert the swap.
Contract details
- Verified source
- Yes (ContentCoinHook)
- Compiler
- solc 0.8.28+commit.7893614a
- Bytecode size
- 19,429 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, rewards, self-unlock
Pools using ContentCoinHook
- Ramenko / zoratrace (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- pababatv / 1 (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- toondef / STRENGTH (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- basestar / The ZRA Realm (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- Ether Canvas / zorahub2 (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- Beyond Layers / zorahub2 (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- zorahub2 / Art Sync (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- Spark Ascend / basestar (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- basestar / MetaAura (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- BASE / demidoobie12 (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- solarfran / Mom (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- buckyball / ERMERGERD (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- joyspark / THOP (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- 🙏🏻 / agrislis (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- AEROVEIL / aerodromeenthusiast (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- 🌱 / jesscob (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- UNI / jaywisdom (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- Sunmoon / jesscob (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- Nicetry / jesscob (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- HAWTCARLS / highlyxalted (3.00% fee) — 24h volume $0, TVL $0, 0 swaps today