LaunchHook on Base

Uniswap v4 Hook Contract 0x1f91c998e7c2f4b690d75bdbf6502bdcd6e02acc on Base · Launchpad · Verified contract

Volume (24h)
$50.41K
Value locked (TVL)
$85.15K
All-time volume
$54.56M
Pools using this hook
7,780
Swaps (24h)
2,915 (656 traders)
Total swaps
544,300

What it does

A shared Uniswap v4 hook that launches new tokens as single-sided pools, blocks outside liquidity changes, and charges a decaying anti-snipe fee on swaps split between creator, referrer and platform.

How it works step by step

  • Reverts pool initialization unless called by the launchpad factory
  • Blocks all third-party add and remove liquidity while the factory's seed position stays permanently in the pool
  • Charges a per-swap fee on the quote currency and mints it as an ERC-6909 claim to FeeEscrow
  • Splits each fee across creator, referrer (if valid), fixed recipients and a platform remainder
  • Applies a linearly decaying anti-snipe surcharge over the launch window and blocks exact-output swaps during it
  • Allows a single factory-initiated launch buy through a configured adapter with strict matching checks
Swap behaviour
Every swap charges a fee on the quote currency, with the total set by an anti-snipe surcharge that decays over the launch window and capped at 99%. Fees are minted to FeeEscrow and credited to recipients. Exact-output swaps are blocked during the anti-snipe window, and partial fills revert. A launch-buy context can route one buy through a registered adapter.
Liquidity behaviour
All third-party add and remove liquidity calls revert with LiquidityLocked. Liquidity is only seeded by the factory via seedLiquidity, which places single-sided token-only bands owned by the hook; there is no code path that removes it.
Fee behaviour
Each swap takes a fee on the quote currency minted as an ERC-6909 claim to FeeEscrow, then split across bounded fee components (creator, referrer when valid, fixed recipients, and a platform remainder). Base fee is capped at 10% and total fee including anti-snipe surcharge is capped at 99%. The anti-snipe surcharge decays linearly from antiSnipeStartTotalBps to baseFeeBps over antiSnipeWindowSeconds after launch.
Owner & admin controls
No owner or pause role. Deployer address can call initialize once to wire factory and feeEscrow (guarded by initializer). Factory-only controls: registerPool (freezes per-pool fee config), updateCreatorRights (can redirect creator fee recipient and creator), setLaunchBuyAdapter (swap in a launch-buy adapter when no context is active). Fee parameters are frozen per pool at launch; no admin path changes base fee or anti-snipe settings after registration.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize: restricts pool creation to the factory. beforeAddLiquidity and beforeRemoveLiquidity: block all third-party liquidity changes. beforeSwap: charges and mints the fee claim, enforces anti-snipe rules and launch-buy context matching. afterSwap: credits fee components, enforces full specified fills, and returns the unspecified-side fee as a delta. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take fees via returned deltas.

Security & trust assessment

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

Who controls it: The factory controls pool registration, creator rights reassignment and the launch-buy adapter. Adapter changes are gated only by validation checks against the factory, hook, PoolManager and reserved addresses, so a malicious factory could point fees or launch buys at an adapter it controls. No pause or upgrade path exists, and the hook is not a proxy.

Risk to user funds: The hook takes swap fees as ERC-6909 claims sent to FeeEscrow and holds the single-sided seed liquidity; it cannot withdraw that liquidity. Fee claims are redeemable only by the designated recipients via FeeEscrow. The factory can redirect creator fees and swap in a new launch-buy adapter, but cannot directly move pooled user funds.

Security findings

  • [info] Permanently locked single-sided seed liquidity: The hook's seeded liquidity is permanently locked and cannot be removed by anyone, including the hook owner, which means the liquidity cannot be rugged but also cannot be withdrawn.
  • [low] Fee custody relies on FeeEscrow balance invariant: Swaps accrue fees as ERC-6909 claims minted to FeeEscrow; users can only redeem via claimFor or claimTo, and FeeEscrow custody depends on the hook crediting matching claims in the same transaction.
  • [low] Exact-output and partial-fill swaps blocked during launch window: Exact-output swaps revert during the anti-snipe window and partial fills revert, so traders may see failed transactions during launch.
  • [medium] Factory-controlled launch-buy adapter: The factory can set a new launch-buy adapter that is validated only against factory/hook/PoolManager linkage and reserved addresses; a compromised factory could route launch buys through a hostile adapter.
  • [low] Factory can redirect creator fee recipient: registerPool can be called only once per pool and frozen configs cannot be edited, but updateCreatorRights lets the factory redirect the creator fee recipient at any time, altering where creator fee share is sent.

Contract details

Verified source
Yes (LaunchHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
15,732 bytes
Upgradeable proxy
No
Detected patterns
launchpad, mev-protection, return-delta, self-unlock

Pools using LaunchHook