LaunchHook on Ethereum

Uniswap v4 Hook Contract 0x322dcec4958c14e021a9f1cd49df11b9457968cc on Ethereum · Launchpad · Verified contract

Volume (24h)
$835.66K
Value locked (TVL)
$439.47K
All-time volume
$102.75M
Pools using this hook
4,870
Swaps (24h)
5,419 (1,514 traders)
Total swaps
434,717

What it does

A token launchpad hook that opens a one-sided liquidity pool for a new token with a decaying anti-snipe fee, collecting trading fees that are split between the token's fee recipient and the platform.

How it works step by step

  • Opens a token pool through a factory, seeding a single one-sided position with all token supply across the full tick range.
  • Charges an anti-snipe fee that starts near 99% and decays linearly to the launch fee (1% to 3%) over 20 seconds.
  • Takes fees as return deltas on both buys and sells, minting ERC-6909 claims to the hook.
  • Splits each fee into a creator share and a platform share (0.5% or 1% of traded amount) and credits both in FeeEscrow.
  • Optionally notifies a holder distributor of creator fees, ignoring failures.
  • Prevents any external liquidity provision or removal, keeping the launch liquidity locked.
Swap behaviour
Only exact-input swaps are accepted; exact-output reverts. Buys (quote in, token out) pay a fee taken in the quote currency via beforeSwap, with the rate decaying over the first 20 seconds after launch. Sells (token in, quote out) pay the fee on the output via afterSwap. Trade events are emitted with trader, referrer and comment from hookData.
Liquidity behaviour
Liquidity can only be added by the hook itself (beforeAddLiquidity reverts with LiquidityLocked for any other sender). At launch the hook seeds a single one-sided position of the token from the minimum to the maximum usable tick, or from the opening tick to the maximum, depending on which currency is the quote. No afterAddLiquidity, beforeRemoveLiquidity or afterRemoveLiquidity logic exists, and those callbacks revert, so the seeded liquidity is not removable through the hook.
Fee behaviour
Each launch sets a fee between 1% and 3% (feePpm between 10,000 and 30,000 out of 1,000,000). For the first 20 seconds after opening the fee decays linearly from 99% to the launch fee as an anti-snipe measure. A buy by the designated dev buyer in the opening block uses the launch fee directly. Fees are taken in the quote currency via a beforeSwap return delta on buys and an afterSwap return delta on sells; the platform takes 0.5% or 1% of the amount (depending on tier) and the rest goes to the fee recipient, optionally notifying a holder distributor.
Owner & admin controls
The hook itself has no owner or admin functions; the factory is set as an immutable constructor argument and gates openLaunch. FeeEscrow (separate contract) is Ownable2Step, where the owner can set the hook once and change platformRecipient, which redirects platform fee credits. Fee parameters are constants (MIN_FEE 1%, MAX_FEE 3%, PLATFORM_FEE 0.5% or 1%), not adjustable. No pausing or upgrade mechanism found in the hook.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize: restricts pool initialization to the hook itself. beforeAddLiquidity: blocks all external liquidity additions. beforeSwap: enforces exact-input only, applies the time-decaying fee on quote-in buys, and mints fee claims to the hook via return delta. afterSwap: applies the fee on sells, emits Trade events, and credits fees to escrow. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take its fee as a delta on swaps.

Security & trust assessment

Risk level: low (verified source, high confidence).

Who controls it: The FeeEscrow owner can set platformRecipient, so future platform fees (all fee credits to the platform side) can be redirected to any address. The owner cannot change the hook's fee rates, pause trading, or withdraw user funds directly. The factory address is immutable, so if the factory is compromised it could open arbitrary launches.

Risk to user funds: The hook holds pool-manager claim balances transiently while collecting fees, and sweep moves those to FeeEscrow. Traders' swap funds go through the pool, not the hook. The escrow holds accumulated fees claimable by creators and the platform. Users cannot be blocked from swapping by a pause since none exists, but the seeded liquidity cannot be withdrawn by anyone through the hook.

Security findings

  • [medium] Owner-controlled platform fee recipient: Escrow owner can change platformRecipient at any time, redirecting the platform share of all future fees.
  • [low] Reliance on hook-driven sweeping for claims: Escrow's claim() calls sweep on the hook when balance is short, and sweep burns pool manager claims and takes tokens to escrow; the logic depends on accounting being consistent, so a bug in fee crediting could cause claim failures.
  • [info] External callback to fee recipient: Fee recipients can be an arbitrary contract; the holder distributor notification is wrapped in try/catch so a reverting distributor cannot block swaps.
  • [info] Transient storage and dev-buy exemption: Uses transient storage to pass the buy fee from beforeSwap to afterSwap, and the dev-buy exemption depends on sender identity and the opening timestamp.
  • [info] Locked seed liquidity: Liquidity is permanently seeded to the hook's own position with no removal path exposed by the hook, so LP capital is locked by design.

Contract details

Verified source
Yes (LaunchHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
10,185 bytes
Upgradeable proxy
No
Detected patterns
launchpad, moves-currency, return-delta, self-unlock

Pools using LaunchHook