RoutrLaunchHook on Ethereum

Uniswap v4 Hook Contract 0xc6429d845fe6c4bf9d53b97451ffeb9a41ba1acc on Ethereum · Launchpad · Verified contract

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

What it does

This hook launches an ETH/ROUTR pool where buys of ETH pay a decaying launch fee that starts near the owner-set maximum and falls to 2% over the first hour, sells and exact-output trades pay a flat 2%, and LPs cannot withdraw their liquidity.

How it works step by step

  • Launches an ETH/ROUTR pool with a fixed launch price, fee 0 and tick spacing 60; only the owner (checked via tx.origin) can initialize it at the configured price
  • Locks the first liquidity add to the owner at the launch price, after which swaps become live
  • Takes a 2% fee on ETH-side swaps (1.5% to a vault, 0.5% to a dev wallet), with an optional decaying launch fee during the first hour after initialization
  • Blocks all liquidity removal, so LP positions cannot be withdrawn through this hook
  • Allows the owner to exempt addresses from fees, lower the normal and max launch fee, change the launch price before initialization, and rescue ETH held by the contract
Swap behaviour
Swaps revert until the first liquidity is seeded. For buys of ETH (exact-input ETH sells into the pool) a fee of launchFeeNow() rate is taken in ETH up front via return delta; during the first hour this is a decaying launch fee starting near maxLaunchFee and falling to 2% (normalFee). Sells and exact-output paths pay normalFee (2%), with exact-output sells skipping the fee entirely in one case. Exempt senders pay no fee.
Liquidity behaviour
Adding liquidity is only possible for the owner, once, at the launch sqrt price (beforeAddLiquidity enforces price and tx.origin == owner). Removing liquidity always reverts with 'LP locked'. afterAddLiquidity is a no-op.
Fee behaviour
Fees are set by the hook: launchFeeNow() decays linearly from maxLaunchFee to normalFee over LAUNCH_WINDOW (3600 seconds) for ETH-buy swaps, and normalFee (2%, owner-decreasable, floored at 0.5%) applies otherwise. Collected ETH is split between the vault (1.5% of gross, the remainder after dev) and the dev wallet (0.5% of gross). Exempt addresses pay nothing.
Owner & admin controls
Owner (Ownable, transferable and renounceable) can: set the launch price until initialization; exempt any address from fees; lower normalFee (floor 0.5%) and maxLaunchFee (not below normalFee); rescue all ETH held by the hook to any address via emergencyRescue. There is no pause and no upgradeability; the contract is not a proxy.

Enabled Uniswap v4 callbacks

afterInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

afterInitialize: validates the pool and sets the launch timestamp. beforeAddLiquidity: enforces the owner-only, launch-price first seed and marks the pool seeded. beforeRemoveLiquidity: always reverts to lock LPs. beforeSwap: gates trading on seeding, computes the fee and takes ETH fees via poolManager.take and return delta. afterSwap: distributes fees to vault and dev wallet and adjusts the unspecified delta on exact-output sells. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take the fee in ETH.

Security & trust assessment

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

Who controls it: The owner key controls initialization, first liquidity, fee reductions, fee exemptions and ETH rescue. Compromise of the owner key would allow fee-free trading for chosen accounts and draining of any ETH held by the hook. The owner can also renounce ownership, after which these controls are gone.

Risk to user funds: The hook takes ETH fees via return delta and holds them only transiently before forwarding to the vault and dev wallet. It cannot move pool principal directly, but it can block all LP withdrawals and can block swaps until seeded. Users have no way to exit liquidity while the hook is in place.

Security findings

  • [medium] Owner can drain ETH held by the hook: emergencyRescue sends the entire ETH balance of the hook to any address chosen by the owner. Fees are normally forwarded immediately, so the balance is usually small, but any ETH taken by the hook is controlled by the owner.
  • [medium] Owner-only seeding and launch via tx.origin: afterInitialize and beforeAddLiquidity check tx.origin == owner, so only the owner EOA (or a transaction it originates) can open the pool or seed liquidity. Using tx.origin is phantom-permission prone and the launch depends on the owner key being used directly.
  • [medium] Liquidity can never be removed: beforeRemoveLiquidity unconditionally reverts, so LPs, including the owner, cannot withdraw. Funds added to the pool are permanently locked and trading depends on the hook remaining deployed.
  • [low] Owner-adjustable fees within bounds: The owner can only decrease normalFee (floor 0.5%) and maxLaunchFee (floor normalFee), so fees can be lowered but not raised beyond the initial parameters.
  • [low] Exempt list bypasses fees: Addresses marked exempt by the owner trade with zero fee; this is a privilege that can be used to favour specific accounts.

Contract details

Verified source
Yes (RoutrLaunchHook)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
8,842 bytes
Upgradeable proxy
No
Detected patterns
launchpad, liquidity-management, moves-currency, ownable, return-delta

Pools using RoutrLaunchHook