Dynamic fee hook on Arc

Uniswap v4 Hook Contract 0x11e652f7538f25228644c89ceff69c34dfb6e8cc on Arc · Dynamic fee

Volume (24h)
$0
Value locked (TVL)
$1.55
All-time volume
$9.75
Pools using this hook
22
Swaps (24h)
0 (0 traders)
Total swaps
64

What it does

A Uniswap v4 hook that appears to manage a dynamic, time-windowed swap fee and route part of swap flows to a buyback vault, with launcher-gated configuration.

How it works step by step

  • Runs logic at pool initialization (beforeInitialize, afterInitialize) and reads per-pool configuration.
  • Computes a current fee per pool (currentFee) using hook fee constants such as BASE_HOOK_FEE and MAX_START_HOOK_FEE.
  • Adjusts swap amounts and accounting through beforeSwapReturnDelta and afterSwapReturnDelta.
  • Observes or gates liquidity additions and removals via the four liquidity callbacks.
  • References a BUYBACK_VAULT, suggesting fees or deltas are directed to a buyback destination.
  • Restricts certain configuration to a launcher address (NotLauncher).
Swap behaviour
beforeSwap and afterSwap run on every swap; the hook sets or adjusts the fee and can take a delta via return-delta permissions, though exact logic is unverified.
Liquidity behaviour
Has beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity and afterRemoveLiquidity callbacks; the decoded bytecode does not reveal their logic beyond these entry points.
Fee behaviour
Exposes currentFee(bytes32) and fee constants (BASE_HOOK_FEE, MAX_START_HOOK_FEE, FEE_DENOMINATOR), indicating a hook-managed fee that may decay or vary over a window; exact formula cannot be determined without source.
Owner & admin controls
No admin controls found. Dispatched functions expose only views (launcher, poolManager, locker, MAX_WINDOW_SECONDS, INITIAL_SUPPLY, BASE_HOOK_FEE, MAX_START_HOOK_FEE, FEE_DENOMINATOR) and no owner, pause, upgrade or setter selectors were decoded. Bytecode references a NotLauncher error, suggesting launcher-gated privileged calls.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeInitialize and afterInitialize run at pool creation; beforeAddLiquidity and afterAddLiquidity gate or observe liquidity additions; beforeRemoveLiquidity and afterRemoveLiquidity observe or gate removals; beforeSwap and afterSwap set swap-time fee and accounting; beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take or give token deltas on swaps.

Security & trust assessment

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

Who controls it: Launcher-gated functions (NotLauncher error present) mean the launcher address holds privileged control; the launcher could potentially influence pool configuration, but exact powers are unverified.

Risk to user funds: The hook can take or return token deltas during swaps via return-delta permissions, so swap amounts can differ from the pool's raw output; it does not show direct custody of LP funds in the decoded bytecode, but unverified logic prevents a firm conclusion.

Security findings

  • [medium] Return-delta permissions enabled: Both beforeSwapReturnDelta and afterSwapReturnDelta are enabled, so the hook can alter the amounts settled with the PoolManager and may take a share of swap flows.
  • [medium] Launcher-controlled privileges: A launcher address is referenced and a NotLauncher error exists, so a privileged launcher role controls at least some functions.
  • [info] Unverified source: No verified source is available, so fee logic, buyback behaviour and the exact conditions for taking deltas cannot be confirmed.
  • [info] Fee routing to buyback vault: A BUYBACK_VAULT reference suggests a portion of fees or deltas may be routed to a buyback destination.

Contract details

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

Pools using Dynamic fee hook