Launchpad hook on Arc

Uniswap v4 Hook Contract 0xb71749d8893253339742e4f6a59d3f3cb056e080 on Arc · Launchpad

Volume (24h)
$0
Value locked (TVL)
$0.09
All-time volume
$5.82
Pools using this hook
5
Swaps (24h)
0 (0 traders)
Total swaps
265

What it does

A launchpad-style hook that registers seeded launch liquidity for new tokens and skims fee accruals to creators, a treasury and reflection recipients on swaps.

This read was written for the hook 0xc48d…a080 on Arc 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

  • Records launched tokens and creator status through launchedToken and creatorStatus mappings
  • Registers seed liquidity positions with tick ranges and amounts per pool
  • Accrues a share of swap fees via accrue and accrueWithRedirect calls
  • Distributes reflections to holders through distributeReflections
  • Routes accrued balances to a treasury and creator claim functions
  • Uses an unlock callback to perform pool manager operations during launch
Swap behaviour
beforeSwap and afterSwap run custom logic that accrues fees and distributes reflections, moving currency through the pool manager via take and unlock calls.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity hooks are present, along with after-liquidity hooks. Seed positions are registered via registerSeed and registerSeedPosition, which track tick ranges and liquidity amounts per pool. The hook may restrict or account for seeded liquidity around launch.
Fee behaviour
Fees are routed through an external accrual path (accrue, accrueWithRedirect with several uint24 parameters) and a feeShare view. The hook appears to take a share of pool fees for creators and treasury rather than setting a dynamic LP fee, but exact split logic could not be verified.
Owner & admin controls
A settable treasury address (setTreasury, guarded by a stored owner-style address at slot 0 or 1) and a one-time factory initialization (initializeFactory). claimTreasury and claim functions exist for routing fees. No pause or upgrade mechanism was identified in the decoded selectors, but the exact authorization checks could not be confirmed without source.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize: validates and records pool setup for a launched token. beforeSwap and afterSwap: run swap-time logic, likely fee accrual and reflection distribution. Liquidity callbacks are present in the bytecode and are used to track seeded positions.

Security & trust assessment

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

Who controls it: A privileged address controls treasury assignment and can trigger treasury claims. If that key is compromised, accrued treasury balances could be redirected.

Risk to user funds: The hook can hold and transfer pool and fee balances through take, transfer and modifyLiquidities calls, and can direct accrued fees to the treasury, creators and reflection recipients. Liquidity callbacks may restrict seeded positions.

Security findings

  • [medium] Hook moves currency during swaps and unlock callbacks: The hook calls take and unlock/modifyLiquidities and transfers tokens, so it can move pool funds to the treasury, creators and reflection recipients.
  • [medium] Treasury address is admin-settable: setTreasury is a privileged setter; changing the treasury address redirects future accrued fees.
  • [low] Self-unlock and reentrancy surface: Self-unlock pattern (unlock followed by unlockCallback) means the hook re-enters the pool manager during swaps and liquidity operations; a PayoutReentrancy error suggests reentrancy guards exist.
  • [info] Access control not verifiable: Without verified source, exact authorization of setTreasury, claimTreasury and initializeFactory cannot be confirmed.

Contract details

Verified source
No
Bytecode size
15,578 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, self-unlock

Pools using Launchpad hook