Fee sharing hook on Arc

Uniswap v4 Hook Contract 0x3eec06f67ecc830cb6a77ef3c7a61444f91980cc on Arc · Fee sharing

Volume (24h)
$70
Value locked (TVL)
$33.57K
All-time volume
$1.80M
Pools using this hook
2
Swaps (24h)
1 (1 traders)
Total swaps
13,348

What it does

A fee-sharing hook that skims a portion of swap fees on each trade and routes a share to an operations recipient.

How it works step by step

  • Charges a fee on swaps using TOTAL_FEE over FEE_DENOMINATOR
  • Takes the fee via return deltas and pool manager take() calls
  • Routes OPS_SHARE of collected fees to opsRecipient
  • Tracks totalFeesCollected and totalOpsCollected in storage
  • Liquidity hooks are present but do not alter liquidity flows
Swap behaviour
beforeSwap and afterSwap run on every swap; they compute a fee and use return deltas to take it from the swap amounts, forwarding the ops share to the recipient.
Liquidity behaviour
Liquidity add and remove callbacks (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity) exist but appear to be pass-through; no liquidity callback was flagged as permission-enabled.
Fee behaviour
Fee is taken on swaps as a share of the swap delta: TOTAL_FEE and FEE_DENOMINATOR constants define the fee rate, and a portion (OPS_SHARE) is routed to opsRecipient while the remainder is tracked as totalFeesCollected. Exact formula not confirmed from decoded bytecode.
Owner & admin controls
Owner (Ownable2Step: transferOwnership, acceptOwnership, renounceOwnership) can set the ops recipient via setOpsRecipient and the admin via 0x81ecaa7c, and 0xa6427091 and 0x0d4cadbc are also owner-gated setters. Owner can rotate the admin address; no pause or upgrade mechanism identified.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeSwap and afterSwap are used to compute and collect fees on swaps; beforeSwapReturnDelta and afterSwapReturnDelta let the hook take a share of the swap amounts via take(), so it moves pool currency to the ops recipient.

Security & trust assessment

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

Who controls it: The owner can change the ops recipient, which receives the protocol share of swap fees, and can rotate the admin and owner. A malicious or compromised owner could redirect fee revenue to an address of their choice.

Risk to user funds: The hook takes a fee from swap currency through return deltas and holds accumulated fee balances (totalFeesCollected, totalOpsCollected) before forwarding them, so it can hold and move a portion of trader funds on each swap.

Security findings

  • [medium] Hook takes swap currency via return deltas: afterSwap and beforeSwap use return deltas and call take() on the pool manager, so the hook moves user swap currency to the recipient on every swap.
  • [medium] Owner can redirect fee recipient: setOpsRecipient is owner-gated and redirects accumulated fee revenue; no timelock is evident in the decoded functions.
  • [low] Fee parameters may be changeable: Fee rate constants and admin setters appear adjustable, but exact bounds could not be verified without source.
  • [info] Unverified source: Absence of verified source limits certainty on fee math and access checks.

Contract details

Verified source
No
Bytecode size
5,649 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, ownable, return-delta

Pools using Fee sharing hook