LaunchHook on Ethereum
Uniswap v4 Hook Contract 0x3e1ad2f53882c3b8a04706a86b127d71d4e480cc on Ethereum · Launchpad · Verified contract
- Volume (24h)
- $0
- Value locked (TVL)
- $959
- All-time volume
- $509.35K
- Pools using this hook
- 24
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 3,912
What it does
A launchpad hook for Uniswap v4 pools that sets a dynamic fee per coin, burns a share of sell volume to a dead address until a floor is reached, and optionally routes a tax in the quote asset to a reward vault on each trade.
How it works step by step
- Overrides the LP fee on every swap by reading currentFee(coin) from the Launchpad contract and returning it with the override flag set, so the pool fee is dynamic.
- On sells of the launched coin, takes sellBurnBps (up to 5%) of the incoming coin amount out of the pool and sends it to 0x...dEaD, but only while the dead balance is below BURN_FLOOR (500,000,000 tokens).
- On reward-coin trades, takes taxBps (up to 3%) in the quote asset and forwards it to the coin's RewardVault, then calls notify(amount) on the vault.
- Buy-side tax is taken in beforeSwap as a specified-currency delta from the exact-input amount; sell-side tax is taken in afterSwap from the quote output the trader would receive.
- Reward pools only accept exact-input swaps (amountSpecified < 0), so the tax cannot be bypassed by requesting exact output.
- Each pool's configuration (coin, vault, burn and tax rates, currency ordering) is written once by the Launchpad through register() and cannot be overwritten.
- Swap behaviour
- beforeSwap: looks up the pool config, reverts on non-exact-input swaps for reward pools, applies the sell burn or buy-side tax as a specified delta, and returns the dynamic fee with the override flag. afterSwap: on sells of reward coins, takes the tax from the quote output and sends it to the RewardVault.
- Liquidity behaviour
- No liquidity callbacks.
- Fee behaviour
- The LP fee is not static: every swap returns Launchpad.currentFee(coin) with OVERRIDE_FEE_FLAG set. Separately, sell burns and reward taxes are taken as hook deltas on top of the pool fee, sent to the dead address or to the RewardVault.
- Owner & admin controls
- The only privileged address is the immutable launchpad, which alone can call register() for each pool, once per pool. The hook itself has no owner, pause, upgrade or parameter-change function. Burn and tax rates are fixed per pool at registration and capped at 5% and 3%. The fee comes from the external Launchpad contract, whose admin controls are not visible in this source.
Enabled Uniswap v4 callbacks
beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeSwap: applies the dynamic fee override, sell burns and buy-side reward tax. beforeSwapReturnDelta: lets beforeSwap return a specified-currency delta that changes the swap amount. afterSwap: takes the sell-side reward tax from the quote output. afterSwapReturnDelta: lets afterSwap return an unspecified-currency delta that is charged to the trader.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: The launchpad address can register any pool once, which fixes the coin, vault and rates. Through the Launchpad it controls the swap fee on every pool (via currentFee) and therefore can set fees up to the 100% limit the external contract allows. It cannot change the hook's own parameters or move funds directly.
Risk to user funds: The hook does not custody user funds. It takes tokens through PoolManager.take() during swaps: coin tokens sent to the dead address on sells, and quote tokens sent to the RewardVault as tax. It can also reduce the amount a trader receives or pays through specified and unspecified deltas. Trades can be blocked if the Launchpad fee call reverts or the vault's notify() reverts.
Security findings
- [medium] Dynamic fee depends on an external contract: Every swap calls ILaunchpadFee(launchpad).currentFee(coin). If the Launchpad reverts, or returns a value above the valid range, all swaps on these pools revert. The fee level is set by the Launchpad, which is outside this source.
- [medium] Reward vault is trusted with notify(): The hook transfers tax tokens to the vault and then calls vault.notify(amount) with no return or balance check. A malicious or buggy vault could consume the notification or revert, which would block trades on that pool.
- [low] Burn cap depends on mutable dead-address balance: The burn stops once balanceOf(DEAD) reaches BURN_FLOOR. Any transfer into the dead address raises that balance, so tokens sent there by anyone reduce the amount that can still be burned. Burning is also a no-op when the cap is reached, so the burn quietly stops with no event.
- [low] Trader identity taken from unauthenticated hookData: The trader address used in events is decoded from caller-supplied hookData, so it is not verified. This affects only event attribution, not balances, but the logs can be spoofed.
- [info] Sell-side tax uses swap delta, not the trader's full output: The sell-side tax is computed from the positive quote delta and charged as an unspecified delta. Pools with a non-zero hook-taken specified amount on a sell could produce a different effective tax than the nominal taxBps; this is a design note, not verified as a bug.
Contract details
- Verified source
- Yes (LaunchHook)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 6,449 bytes
- Upgradeable proxy
- No
- Detected patterns
- launchpad, moves-currency, return-delta, rewards, tax
Pools using LaunchHook
- ETH / POWDER (Dynamic fee) — 24h volume $0, TVL $707, 0 swaps today
- ETH / POWDERCAT (Dynamic fee) — 24h volume $0, TVL $61, 0 swaps today
- ETH / POW (Dynamic fee) — 24h volume $0, TVL $38, 0 swaps today
- ETH / MCAT (Dynamic fee) — 24h volume $0, TVL $54, 0 swaps today
- ETH / DISK (Dynamic fee) — 24h volume $0, TVL $27, 0 swaps today
- ETH / PDOG (Dynamic fee) — 24h volume $0, TVL $45, 0 swaps today
- ETH / DRYPOWDER (Dynamic fee) — 24h volume $0, TVL $17, 0 swaps today
- ETH / MDOG (Dynamic fee) — 24h volume $0, TVL $6.09, 0 swaps today
- ETH / VIT (Dynamic fee) — 24h volume $0, TVL $2.03, 0 swaps today
- STRCx / FOLDER (Dynamic fee) — 24h volume $0, TVL $1.53, 0 swaps today
- POWDER / PELON (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- POWDER / FOLDER (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ARRRMEOW / NVDAx (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / AGNT (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / INU (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / PCAT (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / PWDX (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / PDOG (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / PCAT (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / TEST (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today