Launchpad hook on Arc

Uniswap v4 Hook Contract 0x7cd35b33d495396c4707056d23582df68d0a28cc on Arc · Launchpad

Volume (24h)
$0
Value locked (TVL)
$1.68K
All-time volume
$101.12K
Pools using this hook
159
Swaps (24h)
0 (0 traders)
Total swaps
4,897

What it does

A launchpad-style hook that charges a per-pool fee on swaps and routes part of it to a buyback vault, using return deltas to take its share from trades.

How it works step by step

  • Stores per-pool configuration and a current fee keyed by pool id, set when the pool is initialized
  • Charges a hook fee on swaps bounded by BASE_HOOK_FEE and MAX_START_HOOK_FEE
  • Takes its share of swap value through afterSwapReturnDelta and records it via recordHookFee
  • Forwards collected value to a BUYBACK_VAULT with a gas stipend and minimum gas guard
  • Gates liquidity addition and removal through before and after liquidity callbacks
  • Restricts privileged actions to a launcher address
Swap behaviour
beforeSwap and afterSwap run custom logic on each swap; afterSwap uses return deltas to skim a hook fee from the swap output, which is recorded and forwarded toward a buyback vault.
Liquidity behaviour
beforeAddLiquidity is enabled and afterRemoveLiquidity and afterAddLiquidity selectors exist; the hook's handling of liquidity is not fully decoded, and beforeAddLiquidity is a read-only selector in the dispatch table.
Fee behaviour
A hook fee is computed from a BASE_HOOK_FEE constant and a MAX_START_HOOK_FEE cap, read per pool via currentFee(bytes32), and recorded through an external recordHookFee call; the hook takes its share through afterSwap return deltas.
Owner & admin controls
No admin controls found. Selectors for owner, pause, upgrade or setter functions were not decoded; the launcher() and locker() and poolManager() getters are read-only references. Constants such as BASE_HOOK_FEE, MAX_START_HOOK_FEE, BUYBACK_MIN_GAS and MAX_WINDOW_SECONDS are exposed as view getters, and no setter for them was decoded.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize sets up per-pool configuration on pool creation; beforeAddLiquidity gates liquidity addition; beforeSwap and afterSwap run custom logic around each swap; beforeSwapReturnDelta and afterSwapReturnDelta let the hook take or supply tokens from swap deltas, which is used for the hook fee and buyback mechanism.

Security & trust assessment

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

Who controls it: Without decoded owner or setter functions, no obvious privileged key was identified; the launcher and locker addresses appear to be the trusted parties that gate actions, so compromise of the launcher could affect pool setup and fee routing.

Risk to user funds: The hook can take a portion of swap output through return deltas and forward it to a buyback vault, so traders pay a hook fee on swaps; it can also receive tokens during swaps. Whether it can block swaps depends on the buyback call succeeding, which is not fully decoded.

Security findings

  • [medium] Hook takes tokens via return deltas: afterSwapReturnDelta is enabled, so the hook can take a share of each swap's output and route it to a BUYBACK_VAULT, which can divert value away from the pool.
  • [info] Launcher-gated actions: The hook references a NotLauncher error and launcher() getter, indicating certain actions are restricted to a launcher address; if that address is compromised or misconfigured, pool behaviour could be altered.
  • [low] External buyback call during swaps: A buyback path with BUYBACK_GAS_STIPEND and BUYBACK_MIN_GAS suggests an external call is made during swaps; a reverting or gas-heavy vault could cause swap failures or degraded execution.

Contract details

Verified source
No
Bytecode size
7,540 bytes
Upgradeable proxy
No
Detected patterns
return-delta

Pools using Launchpad hook