Launchpad hook on Arc

Uniswap v4 Hook Contract 0xca55cdde6578f6f8113dd339520e13418abc2acc on Arc · Launchpad

Volume (24h)
$2.68K
Value locked (TVL)
$57.94K
All-time volume
$3.61M
Pools using this hook
268
Swaps (24h)
13 (11 traders)
Total swaps
21,639

What it does

A launchpad-style hook that manages creator-tax and distributor accounting on a Uniswap v4 pool, with snipe protection and trusted-router gating during launch.

How it works step by step

  • Registers and validates pools at initialization via beforeInitialize
  • Applies snipe-start and base-fee parameters to early swaps
  • Restricts swap and liquidity access to trusted routers
  • Tracks pending creator and distributor balances per pool and per token
  • Takes or gives currency through beforeSwapReturnDelta and afterSwapReturnDelta
  • Allows creator ownership transfer and acceptance, plus withdrawals and settlement via unlock callback
Swap behaviour
beforeSwap applies snipe and router checks and may charge a base or creator fee; afterSwap updates pending creator and distributor balances; return-delta permissions let the hook take a share of swap currency.
Liquidity behaviour
beforeAddLiquidity is non-view and records state keyed per pool and sender; beforeRemoveLiquidity is view-only. Withdrawals via withdraw(bytes32,address,address) debit a per-pool, per-user, per-token accounting mapping. Liquidity may be restricted to trusted routers via isTrustedRouter.
Fee behaviour
Hook exposes baseFeeBps, POOL_FEE, MAX_BASE_FEE_BPS and a creator tax (maxCreatorTaxBps, pendingCreator/pendingOf/grossOf accounting), suggesting dynamic or creator-taxed fees on swaps; exact fee formula could not be decoded.
Owner & admin controls
Owner-set factory via setFactory(address) (storage slot 0 writes). Creator-driven functions: transferCreator and acceptCreator manage creator ownership per pool key; authorizeMint and settle gate token minting/settlement. Other admin-style parameters (baseFeeBps, snipeStartBps, windowBlocks, maxCreatorTaxBps, treasury, protocolFeeBps) are referenced via external calls and read getters, but the setter paths for them could not be confirmed from the decoded bytecode.

Enabled Uniswap v4 callbacks

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

beforeInitialize: validates and registers pools on creation. beforeAddLiquidity: records or gates liquidity additions. beforeRemoveLiquidity: checks removals. beforeSwap: enforces snipe protection and trusted-router rules and may apply fee logic. afterSwap: updates creator/distributor accounting after each swap. beforeSwapReturnDelta and afterSwapReturnDelta: the hook can take or give currency deltas during swaps, so it moves pool funds and fee proceeds (heuristic 'moves-currency' and 'return-delta' tags).

Security & trust assessment

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

Who controls it: The factory owner can point the hook at a new factory via setFactory. Creator accounts control transferCreator and acceptCreator, and the distributor implementation is referenced by address, so a compromised creator or factory key could redirect creator fees or proceeds.

Risk to user funds: The hook holds per-pool accounting for creator and distributor balances and can take currency through return deltas and unlock/settle flows, so user swap proceeds and LP funds passing through the pool are exposed to these flows; the exact amounts taken cannot be determined without source.

Security findings

  • [medium] Hook takes currency via return deltas: Heuristic tags flag moves-currency and return-delta: beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can take a cut of swaps and hold or route tokens during the swap lifecycle.
  • [medium] Self-unlock and token movement: The hook calls unlock and settle on the pool manager (self-unlock tag) and performs take and sync calls, so it can itself move tokens out of the pool manager accounting during unlockCallback.
  • [medium] Owner can swap factory dependency: setFactory(address) writes to slot 0 with no visible timelock or multisig evidence in the bytecode, allowing a single key to replace the factory dependency.
  • [low] Swaps can be restricted by router allowlist: Snipe protection and trusted-router checks (MAX_SNIPE_START_BPS, MAX_SNIPE_EXEMPT, isTrustedRouter) can block or restrict swaps from non-whitelisted routers during the launch window.
  • [info] Unverified source: Source is unavailable and function semantics are inferred from selectors, so the exact fee and accounting logic cannot be fully verified.

Contract details

Verified source
No
Bytecode size
22,832 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, return-delta, self-unlock

Pools using Launchpad hook