Fee sharing hook on Arc

Uniswap v4 Hook Contract 0x173c4bdd5cf95a935d2b5636c573c5f4df062044 on Arc · Fee sharing

Volume (24h)
$120.49K
Value locked (TVL)
$475.72K
All-time volume
$16.46M
Pools using this hook
15
Swaps (24h)
6,375 (249 traders)
Total swaps
442,342

What it does

A fee-sharing hook that skims a portion of swaps on pools it initializes and routes the accrued amounts to creators, buyback and partner recipients.

How it works step by step

  • Validates and registers pools in beforeInitialize and afterInitialize
  • Takes a fee from swap output through afterSwapReturnDelta in afterSwap
  • Tracks creator, buyback and partner entitlements per pool and epoch
  • Exposes pending-balance views for creators, buyback vault and partners
  • Distributes or rescues accrued pool fees through privileged functions
  • Uses a self-unlock callback to move currency with the pool manager
Swap behaviour
afterSwap computes a hook fee from the swap, takes it through return delta and records it in per-pool, per-epoch accounting for later distribution.
Liquidity behaviour
No liquidity callbacks are enabled; liquidity operations are not hooked.
Fee behaviour
Takes a fee on swaps via afterSwapReturnDelta and accrues it to per-pool, per-epoch accounting for creator, buyback and partner recipients (pendingCreatorTax, pendingBuyback, pendingCreator views). Fees are distributed by the 19726bec and 4a78fe0c routines; exact split percentages cannot be determined from bytecode alone.
Owner & admin controls
Storage slot 0 and slot 1 are read and written by owner-style setters (setCreatorFeeRecipient, setBuybackEnabled, rescuePoolFees); slot 2 is a boolean mapping read by the access checks, suggesting an allowlist or enabled-flag controlled by a privileged address. Exact owner identity cannot be determined without source; the presence of rescuePoolFees and feeSweepOperator/graduationExecutor references indicates privileged roles can move accumulated fees.

Enabled Uniswap v4 callbacks

beforeInitialize, afterSwap, afterSwapReturnDelta

beforeInitialize registers and validates new pools; afterSwap computes and collects the hook fee and updates epoch accounting; afterSwapReturnDelta lets the hook take a share of the swap output as a return delta.

Security & trust assessment

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

Who controls it: Privileged roles can redirect the creator fee recipient, enable or disable buybacks, and sweep accumulated pool fees via rescuePoolFees, which could affect accrued fee balances owed to creators, partners and buyback vaults.

Risk to user funds: The hook can take a share of swap output and hold it in its own accounting before distribution, and privileged roles can sweep pool fees; ordinary LP principal is not directly hooked, but accrued fee balances are exposed to operator action.

Security findings

  • [medium] Hook custodies swap fees: afterSwapReturnDelta and the moves-currency tag show the hook takes tokens from swaps and holds or forwards them to fee accounts, so accrued balances sit in the hook contract.
  • [medium] Privileged fee sweep: rescuePoolFees and feeSweepOperator references indicate an operator can withdraw accumulated fee balances from pools.
  • [low] Self-unlock flow: self-unlock tag and the unlockCallback selector indicate the hook calls poolManager.unlock on itself to move currency, which increases complexity and reentrancy surface; a reentrancy guard error selector is present.
  • [info] Unverified source: No verified source is available, so behaviour is inferred from selectors and storage access patterns and may be incomplete.

Contract details

Verified source
No
Bytecode size
19,970 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, return-delta, self-unlock

Pools using Fee sharing hook