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
- USDC / POLL (Dynamic fee) — 24h volume $0, TVL $0.13, 0 swaps today