Launchpad hook on Ethereum

Uniswap v4 Hook Contract 0xf9ad9ee7682e0264301d5e99073dae72e8dd28cc on Ethereum · Launchpad

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
1
Swaps (24h)
52 (23 traders)
Total swaps
52

What it does

This launchpad hook keeps trading restricted until the owner launches the pool, then charges a buy or sell tax set by the owner (capped) that is collected by the hook and paid to a fee wallet.

How it works step by step

  • Acts as a token launch hook: owner calls launch(int24) to start trading, with a startTick recorded and a launched flag set in storage slot 7
  • Before swaps, the hook gates trading and applies a buy or sell tax (buyTax/sellTax read from packed storage slot 2) that is set via setTaxes(uint16,uint16) with a MAX_TAX cap
  • After swaps, the hook accumulates taxed amounts and uses return deltas (beforeSwapReturnDelta and afterSwapReturnDelta) to take a portion of the swap in the hook's own accounts, with the accrued owed amount tracked in slot 6
  • Owed fees are paid out to feeWallet via claimOwed() and payout(), and the fee wallet can be changed by the owner through setFeeWallet
  • Before liquidity is added, a gate (beforeAddLiquidity) restricts when liquidity may be seeded, using the seeding flag in slot 7
  • Uses self-unlock: unlockCallback(bytes) and external calls to unlock, take, and mint/burn on the PoolManager and a position manager (posm) to seed and manage liquidity and ERC-6909 claims
Swap behaviour
Swaps go through beforeSwap and afterSwap with return deltas: before launch trading is restricted, and after launch buys and sells are charged buyTax or sellTax (tax rates stored in slot 2), with the taxed portion taken by the hook and accrued as owed to the fee wallet. Exact direction-specific logic cannot be fully confirmed from bytecode alone, but buys and sells are distinguished and the sell rate is applied to sell-direction swaps.
Liquidity behaviour
beforeAddLiquidity is gated by the seeding and launched state so liquidity can only be added during the seeding phase or as the launch allows; no removal restriction was clearly decoded beyond the beforeRemoveLiquidity and afterRemoveLiquidity selectors being present.
Fee behaviour
Uses the pool's dynamic-fee flag with the tax applied via hook return deltas rather than a pure LP fee override; buyTax and sellTax (uint16 values) are owner-set through setTaxes, capped by MAX_TAX, and the taxed amounts accrue in owed and are paid to feeWallet.
Owner & admin controls
Ownable with a two-step ownership transfer (transferOwnership, acceptOwnership, pendingOwner) and renounceOwnership. The owner can call launch(int24), setTaxes(uint16,uint16) to change buy and sell taxes up to MAX_TAX, and setFeeWallet(address) to redirect accrued fees. No upgrade proxy or pause function was identified.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize and afterInitialize set up pool state; beforeAddLiquidity gates seeding; beforeSwap and afterSwap apply the tax and gating logic; beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a portion of swap amounts; the remove-liquidity and donate callbacks are present but appear to be pass-through.

Security & trust assessment

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

Who controls it: A single owner key can set taxes up to the cap, change the fee wallet, withdraw owed balances, and control the launch timing; ownership is transferable in two steps or renounced.

Risk to user funds: The hook can hold and move swap-related tokens via return deltas and owes balances, and it can block trading before launch; user funds are exposed to tax changes and to the owner's ability to withdraw accrued amounts.

Security findings

  • [high] Owner-adjustable tax rates: setTaxes(uint16,uint16) lets the owner change buyTax and sellTax up to MAX_TAX, so the owner can raise the tax on swaps to the cap at any time, including after users have bought in.
  • [medium] Hook takes swap amounts via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take a share of each swap, so the hook directly moves user funds from swaps into its own accounting.
  • [medium] Fee redirection by owner: setFeeWallet(address) and claimOwed/payout let the owner redirect and withdraw accrued taxes to an address of their choosing.
  • [info] Launch gating controlled by owner: launch(int24) is owner-only and determines when trading opens and the starting tick, so the owner controls the trading start.

Contract details

Verified source
No
Bytecode size
13,601 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, erc20, erc6909-claims, launchpad, moves-currency, ownable, return-delta, self-unlock, tax

Pools using Launchpad hook