Dynamic fee hook on Arc

Uniswap v4 Hook Contract 0x3b0a89f5d19189077a24320a3939bf3308bae080 on Arc · Dynamic fee

Volume (24h)
$47
Value locked (TVL)
$66
All-time volume
$47
Pools using this hook
2
Swaps (24h)
3 (2 traders)
Total swaps
3

What it does

A dynamic-fee hook that charges a higher opening fee on newly initialized pools that decays to a floor over time, to discourage early sniping and reward later traders.

How it works step by step

  • Records a per-pool opening timestamp at pool initialization via beforeInitialize
  • Derives a current fee from OPENING_FEE decaying toward FLOOR_FEE across FEE_WINDOW
  • Applies a race period (RACE_SECONDS) that appears to set the early high-fee phase
  • Stores per-pool shut and open flags that beforeSwap reads and can update
  • Exposes feeNow and openedAt views so integrators can read the current fee and open time
Swap behaviour
beforeSwap computes a time-based fee for the pool, based on opening time, race period and fee window, and applies it as the swap fee override; the pool state flags it reads may also gate or close swaps.
Liquidity behaviour
No liquidity callbacks.
Fee behaviour
Sets a time-dependent fee on swaps from an opening fee (OPENING_FEE) decaying toward a floor fee (FLOOR_FEE) over a window (FEE_WINDOW), with a race period (RACE_SECONDS) that appears tied to pool open time; feeNow exposes the current fee for a pool key.
Owner & admin controls
No owner or admin setter selectors were decoded; a builder() and poolManager() getter are exposed. Parameters appear to be constants (OPENING_FEE, FLOOR_FEE, RACE_SECONDS, FEE_WINDOW) but this is not confirmed without source. No admin controls found.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize records the pool open timestamp and a per-pool state; beforeSwap computes the time-based fee override and applies it during swaps.

Security & trust assessment

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

Who controls it: No privileged roles were decoded, so a key holder's power is limited to whatever is not visible in bytecode; the builder address is publicly readable.

Risk to user funds: The hook only overrides the swap fee via beforeSwap and does not appear to take custody of tokens or move funds through return deltas; exposure is limited to fee levels charged on swaps.

Security findings

  • [info] Per-pool state gates swaps: beforeSwap reads and writes per-pool flags, so swap gating based on the shut state is possible, though the exact logic is not verifiable without source.
  • [info] No admin setter detected: Only a getter for builder() and poolManager() was decoded; no setter or upgrade selector was found, so no obvious admin path to change fees.
  • [medium] Unverified source limits analysis: Without verified source, the exact fee curve, race logic and any access checks on beforeSwap cannot be fully confirmed from decoded selectors alone.

Contract details

Verified source
No
Bytecode size
2,414 bytes
Upgradeable proxy
No

Pools using Dynamic fee hook