Custom pricing hook on Arc

Uniswap v4 Hook Contract 0x99b53ed8d8980171ed15b8fdeea515b519ade0c4 on Arc · Custom pricing

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

What it does

A Uniswap v4 hook that takes a configurable fee from swaps on its pools and accumulates it for claimable fee-sharing recipients, using the after-swap return delta.

How it works step by step

  • Records and validates pool configuration at initialization (beforeInitialize)
  • Reads pool state before each swap (beforeSwap)
  • Takes a configurable fee share from swap output after each swap (afterSwap with return delta)
  • Accumulates fee balances per pool and recipient with share denominators
  • Allows recipients to claim accumulated balances (claim, claimable, totalClaimed)
  • Gates parameter changes behind an owner and a fee change delay
Swap behaviour
beforeSwap reads pool config and afterSwap updates accounting and takes a fee share from the swap output via the return delta, paid out later through claim.
Liquidity behaviour
beforeAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity, afterAddLiquidity selectors are present with view mutability in the dispatch table, which suggests they are permission-gated stubs or revert-only callbacks; the hook permissions do not enable these, so liquidity callbacks are not active.
Fee behaviour
Fees are taken by the hook per pool with a configurable fee bounded by MAX_FEE_PPM and changes gated by FEE_CHANGE_DELAY; part of the collected amount appears to be accumulated per recipient and claimable via claim(bytes32,address), with share denominators (SHARE_DENOMINATOR) suggesting fee sharing between parties. Exact fee formula could not be confirmed without source.
Owner & admin controls
Owner (Ownable with two-step transfer: transferOwnership then acceptOwnership, renounceOwnership available) can configure pools via the pool-configuration setter (selector 0x80086b1d writes pool config and per-pool address slots) and can change fee parameters, subject to a FEE_CHANGE_DELAY and a MAX_FEE_PPM cap. Owner can also set and change fee values via selectors 0xdb74fbb4 and 0xf1f8a21e, and 0xb8de1636 and 0x5013faec write timed/parameter state. No pause function was identified in the dispatch table.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap, afterSwap, afterSwapReturnDelta

beforeInitialize: validates and records pool configuration at pool creation. beforeSwap: reads pool state and config before a swap. afterSwap: updates per-pool accounting and may return a hook delta to take a share of swap output. afterSwapReturnDelta: enables the hook to take tokens from the swap via the return delta, using take/settle through the PoolManager and the self-unlock pattern (unlockCallback).

Security & trust assessment

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

Who controls it: The owner can change pool configuration and fee parameters (bounded by MAX_FEE_PPM and a delay) and can transfer ownership. A malicious or compromised owner could redirect fee shares or raise fees up to the cap for pools they configure.

Risk to user funds: The hook can take a share of swap output tokens through afterSwapReturnDelta and holds accumulated fee balances per recipient that are claimable; these balances can be claimed by designated recipients. Without source the exact accounting, rounding and whether owner can withdraw accumulated balances cannot be confirmed.

Security findings

  • [medium] Hook takes tokens via return delta: afterSwapReturnDelta lets the hook take a portion of every swap output, so the hook contract holds or routes user-facing tokens during swaps.
  • [medium] Owner-controlled fee parameters: Pool fee and share parameters are changeable by the owner, with a delay and a maximum-fee cap, but the cap and delay are the only protection against abrupt parameter changes.
  • [low] Self-unlock token movement: Contract uses an unlockCallback self-unlock pattern and ERC20 transfers, so token handling correctness depends on the callback logic which could not be verified from source.
  • [info] Ownable privileged role: Ownable with two-step transfer; no timelock was identified on owner actions beyond fee change delay.

Contract details

Verified source
No
Bytecode size
11,969 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, ownable, return-delta, self-unlock

Pools using Custom pricing hook