CreatorCoinHook on Base
Uniswap v4 Hook Contract 0x1258e5f3c71ca9dce95ce734ba5759532e46d040 on Base · Rewards · Verified contract
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $3.07M
- Pools using this hook
- 32,786
- Swaps (24h)
- 38 (8 traders)
- Total swaps
- 782,191
What it does
A Uniswap v4 hook for Zora Creator Coin pools that seeds the pool with a preset liquidity curve, then on every swap collects LP fees, reinvests 20% as new liquidity, converts the rest into a backing currency and pays it out to the creator, referrers and the protocol.
How it works step by step
- On pool initialization, it checks that the initializing sender is a V4 coin registered in the coin version lookup. It then builds a multi-curve set of single-sided LP positions from the coin's pool configuration, using 500M coins of market supply, and mints them from the hook.
- After every swap, it collects accrued fees from all of its positions using zero-liquidity modifyLiquidity calls.
- 20% of collected fees are re-minted as a new single-sided LP position at least two tick spacings away from the current tick.
- The remaining 80% is swapped through the coin's payout swap path (multi-hop) into a backing currency and taken into the hook.
- The converted fees are split and transferred out: 62.5% to the creator payout recipient, 25% to the platform referrer, 5% to the trade referrer (read from hookData), 1.25% to the Doppler fee recipient, and the remainder to the protocol reward recipient.
- It supports migrating liquidity to a new hook through an upgrade path registered in an upgrade gate. The coin triggers migration by calling migrateLiquidity.
- Swap behaviour
- The afterSwap callback reverts with NoCoinForHook if the pool has no registered coin. Otherwise it collects fees from every LP position, mints the LP share back as liquidity, swaps the rest to the payout currency through the pool manager, takes it to the hook, and pays the reward recipients. It then emits a Swapped event with the sender, the original msg.sender (read from the router if available), and the post-swap price. It returns a zero hook delta, so the swapper's amounts are not changed. Each swap carries extra gas and external-call overhead.
- Liquidity behaviour
- No liquidity callbacks. The hook itself provides the pool's liquidity: it mints positions at initialization and re-mints the LP reward share after swaps. It can burn all positions and move the proceeds to a new hook during a migration.
- Fee behaviour
- The hook does not set a dynamic fee. The pool's static 1% LP fee (10000 pips) is collected from the hook's own positions each swap. 20% of it is compounded into liquidity. 80% is paid out as market rewards: creator 62.5%, platform referrer 25%, trade referrer 5%, Doppler 1.25%, and protocol the remainder. The split is computed on the converted payout amount, and an absent referrer's share goes to the protocol.
- Owner & admin controls
- No owner, pause or fee-setting functions appear in the hook's ABI or source. The hook is not a proxy. The reward percentages are hardcoded constants. Reward recipients are read from the coin contract on each swap. The set of trusted message senders is fixed in the constructor, and the upgrade gate and coin version lookup are immutable. Migration to a new hook can only be started by the pool's registered coin, and only to a destination registered in the upgrade gate. Control of those external contracts (the coin, the upgrade gate, the version lookup) could not be reviewed here.
Enabled Uniswap v4 callbacks
afterInitialize, afterSwap
afterInitialize registers the coin for the pool, derives its LP positions and mints them, and returns early for self-initiated migration pools. afterSwap collects fees, compounds the LP share, 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 owner. Control lies in external contracts: the coin (which sets the recipients and can start a migration) and the upgrade gate (which decides the allowed migration destinations). The hook does not expose a way to change the fee percentages. The privileges of the coin and the gate were not reviewed here.
Risk to user funds: Swappers' funds are not held by the hook, and it takes no delta from swaps (zero return delta). The hook owns all the pool's LP positions and temporarily holds fee tokens before paying rewards out in the same call. Failed reward transfers can block swaps. A migration initiated by the coin can move the liquidity to a registered hook.
Security findings
- [medium] Swaps depend on external coin and recipient behaviour: afterSwap calls the coin's getPayoutSwapPath and reward recipient getters, then transfers funds to the recipients. A native ETH payout uses a low-level call and reverts with EthTransferFailed on failure, and an ERC20 transfer to a blocklisted recipient also reverts. If a recipient rejects the payment or the payout path swap fails, swaps in that pool could be blocked.
- [medium] Migration can move all pool liquidity: migrateLiquidity lets the pool's coin burn all hook-owned positions and send the proceeds to a new hook. The destination must be a registered path in the upgrade gate, so liquidity safety depends on who controls the coin and the gate.
- [low] Rewards recipients are mutable via the coin: Recipient addresses are queried from the coin at distribution time rather than fixed in the hook. Whoever can change them in the coin controls where 80% of fees go; the hook enforces only the percentage split.
- [info] Hook holds and moves pool-manager funds: The hook owns all LP positions and takes and settles tokens with the pool manager in unlockCallback and afterSwap. Only the pool manager can call unlockCallback, and the receive function accepts ETH only from the pool manager.
- [info] Trade referrer taken from user hookData: The trade referrer address comes from the first 20 bytes of the swap's hookData, so the swapper or router chooses who gets 5% of market rewards. This is intended design but can be exploited for self-referral.
Contract details
- Verified source
- Yes (CreatorCoinHook)
- Compiler
- solc 0.8.28+commit.7893614a
- Bytecode size
- 21,356 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, rewards, self-unlock
Pools using CreatorCoinHook
- ZORA / puck13 (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / zyxel_universe (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / bayernccim (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / rannnox (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / historyinpictures (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / adsgonzora (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / purity303 (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / zorhabet (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / jariusos (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / crypto_pump (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- klara6401119752 / ZORA (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / nata12 (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / obamify (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / byczybyk (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / ggbrouniverse (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / zombae (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / a1a_usa (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / domek999baseeth (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- drowningcarpets / ZORA (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ZORA / stlouisfed (1.00% fee) — 24h volume $0, TVL $0, 0 swaps today