Launchpad hook on Ethereum

Uniswap v4 Hook Contract 0xd95fa8af73a5b7ce57c33b909d94590c105b10cc on Ethereum · Launchpad

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

What it does

This launch hook charges a dynamic fee on swaps that starts higher during the launch window and decays to a base rate, with buys and sells priced separately, and it shares part of the fee with a dev wallet.

How it works step by step

  • Sets dynamic buy and sell fees for a pool via a launch-window fee schedule that decreases over time (launchFeeBps, baseFeeBps, buyFeeBps, sellFeeBps, LAUNCH_WINDOW)
  • Records the launch timestamp and pool id in afterInitialize, and enforces that fees can only decrease via setLaunchFee and setBaseFee
  • Takes a fee on swaps through return deltas in beforeSwap/afterSwap and splits it between the dev wallet and other recipients using splitFee with DEV_SHARE_BPS
  • Accrues claims as ERC6909 balances in the pool manager (mint/burn/take via unlock callback) and tracks owed amounts per address and pending claims
  • Lets owed addresses withdraw or have withdrawals made on their behalf (withdraw, withdrawFor, redeemClaims), with a payout gas limit (PAYOUT_GAS)
  • Reverts liquidity add, remove and donate operations are not gated; liquidity hooks only return selectors
Swap behaviour
beforeSwap and afterSwap both run on every swap. The hook computes a buy or sell fee in basis points, takes it as a return delta on the swap currency, and splits it between the dev wallet and the claim accounting. Buys and sells pay different fees; during the launch window the fee is higher and decays toward baseFeeBps, so early trades pay more than later ones.
Liquidity behaviour
beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity and afterRemoveLiquidity exist as selectors but are not expected to alter deltas; liquidity can be added and removed normally.
Fee behaviour
Dynamic: the swap fee comes from buyFeeBps or sellFeeBps, which start at launchFeeBps and decay to baseFeeBps over LAUNCH_WINDOW, capped by MAX_LAUNCH_FEE_BPS and MAX_BASE_FEE_BPS. The fee is taken via return deltas and split with DEV_SHARE_BPS between devWallet and claims.
Owner & admin controls
Owner (Ownable) can call setLaunchFee and setBaseFee, which can only lower fees, transferOwnership, and renounceOwnership. The devWallet address is read from storage; its setter was not identified in the decoded functions.

Enabled Uniswap v4 callbacks

afterInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

afterInitialize records launch time and pool id; beforeSwap sets the dynamic fee and return delta; afterSwap settles the fee share and accrues claims; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take currency from swaps.

Security & trust assessment

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

Who controls it: The owner can renounce or transfer ownership and lower fees to zero. A compromised owner key cannot raise fees but can redirect future ownership and set the dev wallet only if a setter exists, which could not be confirmed.

Risk to user funds: The hook holds claim balances for fee recipients and can take a fee from every swap through return deltas. Withdrawals depend on the owed mapping and the payout path; user liquidity is not custodied by the hook.

Security findings

  • [medium] Hook takes currency via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a share of every swap, so trades pay this fee on top of the pool fee.
  • [low] Owner can set fees, but only downward: setLaunchFee and setBaseFee revert with FeeCanOnlyDecrease when raising fees, which limits owner-driven fee extraction, though the owner can still set fees to zero.
  • [info] Claim and withdrawal accounting: Fee shares are recorded in an owed mapping and paid out via withdraw, withdrawFor and redeemClaims, using ERC6909 mint and burn through the pool manager; correct accounting could not be verified without source.
  • [low] Unverified dev wallet control: devWallet receives a fixed share of fees; the code path that sets it could not be identified from decoded selectors.

Contract details

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

Pools using Launchpad hook