Launchpad hook on Ethereum

Uniswap v4 Hook Contract 0x98a09039fd1f48b61ea55884bc99d9ab231e20cc on Ethereum · Launchpad

Volume (24h)
$12.35K
Value locked (TVL)
$1.44K
All-time volume
$12.35K
Pools using this hook
1
Swaps (24h)
105 (52 traders)
Total swaps
105

What it does

This launchpad hook charges a higher swap fee right after a pool launches, decaying to a standard fee over a set number of blocks, so early buyers and sellers pay more than later traders.

How it works step by step

  • Registers a pool at initialization and stores its launch block, so the hook knows when each pool went live
  • Applies a protection window after launch during which swap fees are elevated, then decays them over a fixed number of blocks
  • Uses beforeSwap and afterSwap with return deltas, so the hook can take a fee portion of swap amounts as currency rather than leaving it in the pool
  • Accrues collected fees per pool and lets an authorized caller withdraw them via withdrawFees
  • Mints and burns ERC-6909 claim tokens, which indicates it holds fee or delta balances inside the pool manager
Swap behaviour
beforeSwap computes a launch-protection fee for the pool based on blocks elapsed since launch, and afterSwap takes a fee amount via return deltas and records it as accrued fees; trades during the protection window pay a higher fee than trades after the decay period, while later trades pay the base FEE_BPS.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Fees are set by the hook in beforeSwap: a launch fee starting at LAUNCH_FEE_START_BPS during LAUNCH_PROTECTION_BLOCKS, decaying over LAUNCH_FEE_DECAY_BLOCKS toward FEE_BPS; the hook's accrued fees are tracked per pool and withdrawable via withdrawFees.
Owner & admin controls
withdrawFees takes a pool key and transfers accrued fees; the decoded bytecode does not show a clear owner check in the dispatcher, so the recipient and authorization model cannot be confirmed. A manager() and quoter() reference exist but their roles are not confirmed.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize registers the pool and records its launch block; beforeSwap sets the dynamic launch fee and gates or prices the swap; afterSwap takes fees through return deltas; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to claim part of swap currency.

Security & trust assessment

Risk level: medium, estimated (decoded bytecode, low confidence).

Who controls it: Without verified source, the key that can call withdrawFees, and any admin that sets manager or quoter, could collect accrued fees; the extent of owner powers is unconfirmed.

Risk to user funds: The hook takes swap currency via return deltas and holds accrued fees as ERC-6909 claims, so user swap proceeds are partially retained by the hook; its ability to block swaps depends on the beforeSwap logic, which could not be fully confirmed from bytecode.

Security findings

  • [medium] Return-delta fee capture: beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a share of every swap's currency, so the effective trade output depends on the hook's fee logic.
  • [high] Withdrawal authorization unclear: withdrawFees moves accrued fee balances and no clear access check is visible in the decoded dispatch; if unrestricted, funds could be drained, so this must be verified.
  • [info] Launch fee decay depends on block timing: The protection fee is a function of block number relative to launchBlock, so fee level changes predictably per block and can be front-run around the decay boundary.
  • [low] Mint and burn of claim tokens: The presence of mint and burn selectors suggests ERC-6909 claim accounting, which adds custody state to the pool manager that depends on correct hook logic.

Contract details

Verified source
No
Bytecode size
7,877 bytes
Upgradeable proxy
No
Detected patterns
erc6909-claims, launchpad, moves-currency, return-delta

Pools using Launchpad hook