LaunchHook on Robinhood Chain

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

Volume (24h)
$840.28K
Value locked (TVL)
$46.34K
All-time volume
$840.28K
Pools using this hook
2
Swaps (24h)
3,869 (783 traders)
Total swaps
3,869

What it does

On graduated pools this hook charges a base fee on every trade, plus any extra fee or take a bound module sets, with the creator's share going to escrow and the rest to the protocol, so buys and sells pay the same base fee and only trades on pools with a module can pay more.

How it works step by step

  • Serves as the single v4 hook for every graduated launch pool, charging a base fee plus any extra fee the pool's bound module decides on all four swap shapes
  • Only pools initialized by curves authorized through an allowlisted factory can be recorded, and each pool is recorded once
  • Routes the creator's share of fees to a fee escrow and the protocol's share to a fee multisig, and emits a shared Trade event on every swap
  • Binds an optional module per pool; tier 1 modules are consulted by staticcall and can only shape fees or refuse buys, while tier 2 modules are owner-listed, execute, and may take fees into a ERC-6909 ledger and rebate from it
  • Lets enforced-pool token transfers pass by authorizing the pool manager token leg around liquidity adds and removes, and blocks outside liquidity unless the pool fee recipient opts in
  • Tracks per-wallet buy and sell records and applies module-requested state writes after each swap
Swap behaviour
On stock-specified swaps the fee is computed in beforeSwap and taken as a hook delta, with a tier 2 rebate reducing it; the swap reverts with PartialFillUnsupported if the pool leg does not match the expected net amount. On stock-unspecified swaps the fee is charged on the realized stock leg in afterSwap. Buys pay the base fee plus any module extra fee and any take; a tier 1 module can refuse buys entirely, and sells are not refused by tier 1 modules. Trades without a module pay only the base fee.
Liquidity behaviour
Liquidity callbacks only act on enforced pools. afterAddLiquidity and afterRemoveLiquidity authorize the token leg with the token contract when the sender is not the curve and outsideLiquidity is enabled by the pool fee recipient; otherwise they return zero deltas and take no fee.
Fee behaviour
The base fee is set in the owner-controlled config and is capped by maxTotalRateBps. Module extra fee is clamped to maxExtraFeeBps and tier 2 take to maxTakeBps. Fees are split between creator (escrow) and protocol (multisig), with the take going to the module ledger. Pools with no module pay only the base fee.
Owner & admin controls
The owner (Ownable2Step, so transfers require acceptance) can set factory allowlist entries, list or delist tier 2 modules, disable module addresses permanently, and change config through the associated config contract. The pool fee recipient can attach or clear modules and toggle outside liquidity. There is no upgrade mechanism visible in the hook itself.

Enabled Uniswap v4 callbacks

beforeInitialize, afterAddLiquidity, afterRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize registers pools created by authorized curves and activates a reserved module; afterAddLiquidity and afterRemoveLiquidity authorize token transfers for enforced pools; beforeSwap computes and takes the fee and rebate as a return delta for stock-specified swaps; afterSwap charges fees on stock-unspecified swaps, emits trades, records wallets, and applies module writes; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take currency through return deltas.

Security & trust assessment

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

Who controls it: The owner can list or disable modules, authorize factories, and change fee and config values that apply live to all graduated pools. The pool fee recipient can attach modules and open outside liquidity for its own pool. A compromised owner or fee recipient key could raise fees or route module logic that moves fee and ledger funds.

Risk to user funds: The hook holds ERC-6909 claims on behalf of tier 2 module ledgers and mints and burns claims during swaps, so it can hold, move and rebate pool stock. It takes fees from every swap on graduated pools and can refuse buys through tier 1 modules. Funds in the pool itself can be affected by the return-delta logic and by configuration changes.

Security findings

  • [medium] Hook takes and mints currency via return deltas: beforeSwap and afterSwap return non-zero deltas and the contract calls poolManager.take, mint and burn, so it moves pool stock on every swap. Correctness of the amounts depends on FeeMath and the partial fill check.
  • [medium] Owner can disable modules and change config: The owner can permanently disable a module, list tier 2 modules that execute with ledger access, and adjust fee and config parameters that every pool reads live, so fee levels for existing pools can change.
  • [high] Tier 2 modules hold and rebate from a ledger: Tier 2 modules that are listed by the owner can deposit and withdraw stock through the ledger and cause rebates paid from the hook's ERC-6909 claims. A malicious or buggy listed module could drain that ledger, which the contract bounds only by the recorded balance.
  • [medium] Enforced-pool token authorization: For enforced pools the hook authorizes pool manager token transfers during liquidity operations so that the token gate passes, which widens who can move tokens to the pool when outside liquidity is enabled by the fee recipient.
  • [low] Module decisions by staticcall with bounded returns: Tier 1 consultation uses bounded staticcalls and decoding is wrapped in try/catch, which limits the impact of a faulty module on swaps; failures in tier 1 block only buys.

Contract details

Verified source
Yes (LaunchHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
21,886 bytes
Upgradeable proxy
No
Detected patterns
erc20, erc6909-claims, fee-sharing, launchpad, moves-currency, ownable, return-delta, self-unlock

Pools using LaunchHook