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
- ETH / TEST (1.25% fee) — 24h volume $0, TVL $0, 0 swaps today