Likely launchpad hook on Ethereum

Uniswap v4 Hook Contract 0xcd0dc6aa1961b65d878f5055696297a9f12caacc on Ethereum · Launchpad

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

What it does

This launchpad hook charges a fixed basis-point fee on swaps through its return-delta permissions, while a privileged launcher controls which coins are opened and liquidity is managed by the hook itself.

This read was written for the hook 0x3e40…eacc on Ethereum and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.

How it works step by step

  • Hook exposes a launch flow: an owner-style open(address) call sets up a coin and a pool key, and coin() / allCoins(uint256) / coinCount() expose a registry of launched coins.
  • Uses a genesisLauncher() getter and NotLauncher / WrongCoin / NoTokens errors, suggesting a launcher contract creates and gates these coins.
  • Uses the pool manager unlock pattern (unlockCallback, settle, take, sync, modifyLiquidity) so the hook can add or remove its own liquidity during an unlock.
  • Return-delta permissions (beforeSwapReturnDelta, afterSwapReturnDelta) mean the hook can take or give currency on swaps, and it moves currency via transfer and balanceOf calls.
  • Contains a FEE_BPS() getter and a tick-based position with startTick, openTick and TICK_LOWER, indicating a fee in basis points and a bounded liquidity range around the launch price.
  • Liquidity add/remove and donate hooks are present with before/after variants, but their bodies are not decoded in detail.
Swap behaviour
beforeSwap and afterSwap are both active and both have return-delta permission, so the hook can alter the amounts of a swap and take a fee in basis points (FEE_BPS) on the trade; which direction pays more cannot be determined from the decoded bytecode.
Liquidity behaviour
beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity and afterRemoveLiquidity are present, and the hook calls modifyLiquidity through unlockCallback, so it manages its own position; external LPs may be restricted but this cannot be confirmed without source.
Fee behaviour
A basis-point fee constant FEE_BPS is exposed and the hook has return-delta permission, so it appears to take a fee on swaps rather than using the pool's static fee; the exact fee routing (to owner, launcher or LPs) is not determined.
Owner & admin controls
open(address) is a nonpayable state-changing function on the hook and a launcher address (genesisLauncher) is referenced, so a launcher or privileged role appears to control launch; no pause or upgrade mechanism was identified in the decoded selectors.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize sets up pool state on pool creation; beforeAddLiquidity and beforeRemoveLiquidity gate liquidity changes; beforeSwap and afterSwap run around each swap; beforeSwapReturnDelta and afterSwapReturnDelta let the hook alter swap amounts and take currency; beforeDonate and afterDonate are present but not clearly used.

Security & trust assessment

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

Who controls it: A launcher address or privileged caller controls open() and the coin registry, so that key can decide which coins launch and bind the hook to pools; no upgrade or pause function was identified.

Risk to user funds: The hook has return-delta permission and moves currency, so it can take a portion of swap amounts and hold or settle balances; the exact amounts and destinations cannot be verified from bytecode alone.

Security findings

  • [medium] Hook takes currency via return deltas: beforeSwapReturnDelta and afterSwapReturnDelta are enabled and the hook calls transfer, take and settle, so it can move user or pool currency during swaps.
  • [medium] Privileged open and launcher gating: open(address) is state-changing and NotLauncher / genesisLauncher indicate a privileged launcher controls which coins are opened, so that launcher can influence which pools are live.
  • [info] Fee rate is a fixed constant in bytecode: FEE_BPS is exposed as a pure getter, so the fee appears fixed in code rather than adjustable by an owner, though this should be confirmed.
  • [info] Unverified source limits analysis: No verified source is available, so the exact fee destination, balance accounting and launcher trust assumptions cannot be fully confirmed.

Contract details

Verified source
No
Bytecode size
9,430 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, return-delta, self-unlock

Pools using Likely launchpad hook