LaunchHook on Robinhood Chain

Uniswap v4 Hook Contract 0xaf59944a7d03b914567cb0272b7e588a7ae7aac4 on Robinhood Chain · Launchpad · Verified contract

Volume (24h)
$1.12K
Value locked (TVL)
$8.99K
All-time volume
$2.25M
Pools using this hook
20
Swaps (24h)
24 (19 traders)
Total swaps
13,793

What it does

A bonding-curve launch hook that turns each token launch into a Uniswap v4 pool with a fixed single-sided curve position, charges a trade fee and an optional opening tax on swaps (held as claims and paid out via pull-escrow), and permanently locks the pool after graduation.

How it works step by step

  • Registers launches from allowed launchpads and derives a single-sided v4 position (tick range, liquidity, opening price) from the launch's curve parameters, so the pool opens at a price fixed at registration.
  • Admits only the launch's own locker to add liquidity: the curve position once at the exact registered ticks, and after graduation a single full-range position; outside LPs are refused.
  • Refuses swaps before seeding, when the position is empty, during the graduation window, and when a swap would move the price outside the curve range.
  • Charges an opening snipe tax on buys that halves 14 times across a launch-specific window (up to 99% at launch, zero after the window), plus a trade fee and creator tax capped at 20% combined.
  • Credits charges as ERC-6909 claims inside the PoolManager and into a pull-escrow ledger (owed/totalOwed); anyone can call claimFor to pay an account, and the opening tax on the launch token is routed to the burn address.
  • Graduation is callable only by the locker once the snipe window has closed and raised quote reaches the threshold; it retires the curve position and seeds a permanent full-range position.
Swap behaviour
beforeSwap reverts (NotTrading) unless the pool is in Trading or Locked phase with nonzero liquidity, and reverts exact-output buys while the opening tax is above zero. afterSwap checks the price is still inside the curve range, then takes a delta from the unspecified side: the opening tax (buys by non-exempt callers), the trade fee, and the creator tax, all minted as PoolManager claims and credited to the owed ledger. Sells are not taxed by the snipe tax.
Liquidity behaviour
beforeAddLiquidity admits only the locker, first for the exact curve position (sets phase to Trading and starts the launch clock), then once for the full-range permanent position after graduation. beforeRemoveLiquidity admits only the locker: the curve position may be removed whole during graduation (recording the raise), and the permanent position may only be removed after the locker's UNLOCK_AT time, which is treated as never reached if the call fails.
Fee behaviour
The pool itself has a static fee of 0. The hook charges, via afterSwap return delta: an opening snipe tax that decays from up to 99% over the launch window, a trade fee capped at 10% (tradeFeeBps), and a creator tax capped at 10% (creatorTaxBps), with total trade fee plus creator tax capped at 20%. Trade fee is split between creator (creatorFeeBps) and treasury. Fees are credited to owed balances and paid out through claim or claimFor.
Owner & admin controls
Owner (Ownable2Step, two-step transfer, renounceOwnership available) can add or remove allowed launchpads via setLaunchpad; the owner has no function to change a registered launch's fee, tax, price, ticks or treasury. Fees are fixed per launch at registration, and treasury is read live from the launchpad (treasury() on the launchpad, which the launchpad controls). Creator fee recipient can be changed by the current recipient. No pause, upgrade proxy or parameter-setting function was found in the source.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, afterSwapReturnDelta

beforeInitialize restricts pool opening to the registered locker or launchpad at the registered sqrt price. beforeAddLiquidity and beforeRemoveLiquidity enforce the locker-only seed, graduation and lock rules. beforeSwap blocks swaps outside active trading and blocks exact-output buys during the opening tax. afterSwap takes the fee, creator tax and opening tax as a return delta on the unspecified currency and enforces the curve range.

Security & trust assessment

Risk level: medium (verified source, high confidence).

Who controls it: The owner can authorize or de-authorize launchpads. A launchpad operator (not the owner) controls the treasury address that receives fee shares and can change it for all launches it created. Creators control the fee recipient for their own launch. The owner cannot change per-launch fees, prices or pool ranges after registration, according to the decoded source.

Risk to user funds: The hook does not transfer user tokens during swaps; it takes fees via the afterSwap return delta and mints PoolManager claims, which are recorded as owed balances redeemable through claim or claimFor. Those balances can be redirected only through the launchpad treasury mechanism described above. Pool liquidity itself belongs to the launch locker, and liquidity removal is restricted to the locker.

Security findings

  • [medium] Launchpad controls treasury destination: treasury(poolId) reads the launchpad's live treasury() and falls back to the registration-time value, so the launchpad operator can redirect the platform's fee share for all its launches, including ones already trading. The owner controls which launchpads are allowed via setLaunchpad.
  • [medium] Owner can authorize new launchpads: The owner calls setLaunchpad to allow arbitrary addresses to register launches with any token, quote, fee and tax parameters within the global caps, so the owner indirectly controls which markets exist on this hook.
  • [medium] Locker-controlled graduation and liquidity: Only the launch's locker can call graduate, and beforeRemoveLiquidity lets the locker retire the curve position; if the locker's settlement fails, the market stays in a graduated, swap-closed state until settlement succeeds, which the source notes is by design but leaves trading dependent on the locker.
  • [info] Fee and tax caps enforced on-chain: Trade fee is capped at 10%, creator tax at 10%, combined at 20%, and snipe tax at 99% for at most one day, all enforced in _validate and HookFeeMath, which limits what any party can extract per swap.
  • [info] Hook holds no user tokens directly: Fees are minted as ERC-6909 claims in the PoolManager and paid out only through claim or claimFor, so swaps do not transfer tokens to third parties; the hook's exposure is limited to claims it holds for recorded recipients.

Contract details

Verified source
Yes (LaunchHook)
Compiler
solc 0.8.36+commit.8a079791
Bytecode size
22,836 bytes
Upgradeable proxy
No
Detected patterns
erc6909-claims, launchpad, moves-currency, ownable, return-delta, self-unlock, tax

Pools using LaunchHook