Dynamic fee hook on Arc

Uniswap v4 Hook Contract 0x7f4af755f1b57d8ee249a9fdc993ace675572080 on Arc · Dynamic fee

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
2
Swaps (24h)
8 (1 traders)
Total swaps
8

What it does

This hook sets a dynamic, admin-tunable fee for each pool that it manages and can pause pools, while also taking a claim fee from accrued fees for a designated recipient.

This read was written for the hook 0xf8f5…6080 on BNB Chain 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

  • Sets a per-pool dynamic LP fee in beforeInitialize and beforeSwap, read through currentFee and autonomousFee keyed by pool id
  • Tracks a fee floor, pokes, day-of-week and early-close session overrides that adjust the fee over time
  • Supports pausing individual pools or the whole hook via pause, setPoolPaused and setPaused, with a pausedUntil timestamp
  • Tracks a claim fee (claimFeeBps) that is taken from fees via claimFees, withdrawAndClaim and setClaimFee and routed to a claim fee recipient
  • Exposes an operator and authority model (setOperator, setAuthority, canCall) gating privileged configuration
Swap behaviour
beforeSwap is registered and reads the stored dynamic fee for the pool, so swap fees depend on the current fee state, floor, pokes and session overrides; the exact direction of which trades pay more or less could not be confirmed from decoded bytecode alone.
Liquidity behaviour
Liquidity add and remove hooks are present as view-style selectors in the dispatch table but no callback permission is enabled for them; liquidity is managed through deposit, withdraw and withdrawAndClaim which move funds via the pool manager, including a claim fee on withdrawal.
Fee behaviour
The hook sets a dynamic fee per pool, bounded by ABSOLUTE_MAX_FEE and MIN_POOL_FEE, with pokes, floors, asymmetry settings and day or early-close overrides; claimFeeBps takes a share of fees for the claim fee recipient.
Owner & admin controls
An authority and operator model controls setPoolConfig, setPoolAsymmetry, setDayOverrides, setSessionHours, setEarlyClose, setClaimFee, setClaimFeeBps, sweepClaimFee, pause and setPaused, plus setAuthority and setOperator; the authority can change parameters and pause pools.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize registers the pool and seeds its dynamic fee; beforeSwap applies the dynamic fee for each swap.

Security & trust assessment

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

Who controls it: A single authority or operator key can reconfigure fees, the claim fee and claim recipient, pause pools and sweep claim fees, so users depend on that key's behaviour.

Risk to user funds: The hook holds and moves funds through deposit, withdraw and claim paths using the pool manager, so user and pool balances are exposed to its logic and to pausing or fee-configuration changes.

Security findings

  • [medium] Privileged fee configuration: Authority or operator roles can change pool fee configuration, floors, asymmetry and day overrides, which directly changes what swappers pay.
  • [medium] Pausing can block swaps and withdrawals: pause, setPoolPaused and setPaused exist, so a privileged key could halt swaps or liquidity actions for a pool or the whole hook.
  • [info] Claim fee takes a share of fees: claimFeeBps with claimFees, withdrawAndClaim and sweepClaimFee routes a portion of fees to a claim fee recipient, which an admin can change.
  • [info] Hook moves currency: Heuristics indicate the hook moves currency (take, settle and transfer paths), so it handles user and pool funds during withdrawals and claims.

Contract details

Verified source
No
Bytecode size
24,565 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, pausable, self-unlock

Pools using Dynamic fee hook