Fee sharing hook on Arc

Uniswap v4 Hook Contract 0x285f3cc5eaf62ae51e14ea6a54885e60518245c7 on Arc · Fee sharing

Volume (24h)
$0
Value locked (TVL)
$1.07
All-time volume
$5.54M
Pools using this hook
12
Swaps (24h)
0 (0 traders)
Total swaps
57,936

What it does

A fee-sharing hook that charges dynamic and overridable swap fees on Uniswap v4 pools and splits the collected revenue between the owner, a creator and a fee recipient, with owner-controlled pause and whitelist features.

How it works step by step

  • Sets swap fees per pool using a packed config with base, dynamic and override tiers
  • Applies per-address fee overrides set by the owner
  • Splits collected fees between owner, creator and fee recipient using BPS settings
  • Enforces whitelist-only mode and trusted router or origin checks on swaps
  • Counts swaps per pool in afterSwap and takes a fee through return deltas
  • Owner can pause swaps and withdraw tokens held by the hook
Swap behaviour
beforeSwap checks pause state, whitelist and trusted router access, and sets fees (base, dynamic or per-address override). afterSwap increments a per-pool swap counter and can take a fee through the afterSwapReturnDelta permission.
Liquidity behaviour
afterAddLiquidity and afterRemoveLiquidity callbacks are enabled with return-delta permissions, so the hook can take or give a balance delta on liquidity changes. beforeAddLiquidity and beforeRemoveLiquidity selectors exist in the dispatch table but the permission flags do not enable them.
Fee behaviour
Fees are configured through a packed fee config (base, dynamic and override tiers stored in slots 3, 4 and 5) with per-address fee overrides, and a portion of fees is split between owner, creator and fee recipient via ownerBps and creatorBps. Exact fee formula could not be confirmed without source.
Owner & admin controls
Owner (Ownable, transferOwnership) can set fee recipient, owner and creator BPS splits, whitelist-only mode, trusted routers and origins, per-address fee overrides, exempt address, pause or unpause swaps via setPaused, and withdraw tokens via withdraw(address,address,uint256). Creator address is also referenced in storage.

Enabled Uniswap v4 callbacks

afterAddLiquidity, afterRemoveLiquidity, beforeSwap, afterSwap, afterSwapReturnDelta, afterAddLiquidityReturnDelta, afterRemoveLiquidityReturnDelta

afterAddLiquidity and afterRemoveLiquidity run post-liquidity logic and may return deltas. afterAddLiquidityReturnDelta and afterRemoveLiquidityReturnDelta let the hook take a share of liquidity flows. beforeSwap sets dynamic or overridden fees and checks whitelist and router access. afterSwap records swap counts and may take a fee via afterSwapReturnDelta.

Security & trust assessment

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

Who controls it: The owner holds broad control: it can pause swaps, change fee splits and fee overrides, toggle whitelist and trusted routers, and withdraw tokens held by the hook. A compromised owner key could redirect fee revenue or block trading.

Risk to user funds: The hook takes tokens through afterSwap and liquidity return deltas and holds balances that the owner can withdraw. The owner can also pause swaps, so user funds can be temporarily blocked. Pool funds themselves are held by PoolManager, but fee-share and withdrawal logic is controlled by the owner.

Security findings

  • [high] Owner withdrawal of hook-held tokens: Owner can call withdraw(address,address,uint256) to move tokens held by the hook, so any balances the hook accumulates from return deltas are controlled by a single key.
  • [medium] Owner pause can block swaps: setPaused lets the owner halt swaps through beforeSwap checks, which can block trading for all users.
  • [medium] Return-delta fee capture: Several return-delta permissions are enabled, meaning the hook can take part of swap and liquidity amounts, and the owner can redirect fee splits.
  • [medium] Per-address fee overrides and whitelist: Owner can set per-address fee overrides and whitelist-only mode, which can discriminate between traders.
  • [info] Single owner without timelock: Ownable pattern with transferOwnership; no timelock is visible in the decoded functions.

Contract details

Verified source
No
Bytecode size
19,351 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, ownable, pausable, return-delta

Pools using Fee sharing hook