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