Fee sharing hook on Arc
Uniswap v4 Hook Contract 0xd5601b6a530fe8fcc7af21bf93e58197064120cc on Arc · Fee sharing
- Volume (24h)
- $0
- Value locked (TVL)
- $537
- All-time volume
- $945.10K
- Pools using this hook
- 32
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 10,558
What it does
A fee-sharing hook that takes a portion of swaps in pools it is attached to and records entitlements for recipients such as a treasury, with claim functions to withdraw them.
How it works step by step
- Stores a fee configuration per pool id in beforeInitialize and reads it in beforeSwap.
- Uses beforeSwapReturnDelta and afterSwapReturnDelta to take a share of swap amounts from the PoolManager.
- Credits the captured amounts to recipient balances in a nested mapping keyed by recipient and token.
- Lets users or recipients call claim to withdraw balances, with claimable and totalAccounted as read-only views.
- Exposes registrar, treasury, usdc and poolManager getters for the external addresses it depends on.
- Swap behaviour
- beforeSwap and afterSwap run on every swap; the hook uses return deltas to capture a fee-based share of the swap and records the amount in its claimable ledger.
- Liquidity behaviour
- No liquidity callbacks.
- Fee behaviour
- beforeSwap reads fee configuration keyed by pool id (feeConfigs and storage slot 1) and the hook uses beforeSwapReturnDelta and afterSwapReturnDelta to take a portion of swap amounts, which appears to route fees to a treasury address and accrue balances per token per recipient in the ledger mapping.
- Owner & admin controls
- Selector 0x6747a8a0 is a nonpayable configuration function that writes storage slot 1 (a uint256-to-address mapping), suggesting an owner or registrar can register or update fee configurations. The exact access check cannot be confirmed without source, but registrar(), treasury(), usdc() and poolManager() getters indicate privileged addresses are configured on-chain.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta
beforeInitialize registers per-pool configuration; beforeSwap and beforeSwapReturnDelta adjust swap deltas so the hook can capture a share of input or output; afterSwap and afterSwapReturnDelta finalize accounting and apply a second delta after execution.
Security & trust assessment
Risk level: medium, estimated (decoded bytecode, low confidence).
Who controls it: A privileged key that can set fee configurations or the treasury/registrar addresses could redirect or raise the share taken from swaps, affecting all traders in pools that use this hook.
Risk to user funds: The hook can take a share of swap currency through return deltas and holds balances owed to fee recipients in its own ledger, so it does hold and move pool-related funds; a bug or misconfigured fee could affect traders and LPs.
Security findings
- [medium] Hook takes tokens via return deltas: Return-delta permissions let the hook take tokens from every swap through the PoolManager, so any mis-set fee or accounting bug affects user funds directly.
- [medium] Hook moves currency during swaps: The bytecode includes a call to take(address,address,uint256) and token transfer/approve selectors, so the hook moves currency out of the PoolManager to recipients such as the treasury.
- [medium] Claimable balance ledger depends on correct accounting: Accounting uses per-user claimable balances (claim, claimable, totalAccounted) that the hook must keep solvent; mismatches between recorded balances and held tokens could leave claims unpaid.
- [low] Privileged configuration path unverified: Fee-setting and recipient configuration appear to be callable by a privileged role, but the access control could not be confirmed from bytecode alone.
- [info] Reentrancy guard present: The bytecode contains a ReentrancyGuard error selector, indicating reentrancy protection is present on at least some entry points.
Contract details
- Verified source
- No
- Bytecode size
- 8,662 bytes
- Upgradeable proxy
- No
- Detected patterns
- moves-currency, return-delta
Pools using Fee sharing hook
- USDC / STARC (0.00% fee) — 24h volume $0, TVL $535, 0 swaps today
- CRCL / CRCLJERK (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- ARCHIMEDES / OPENAI (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- NVDA / AI (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- AI / USDC (0.00% fee) — 24h volume $0, TVL $1.96, 0 swaps today
- USDC / STARD (0.00% fee) — 24h volume $0, TVL <$0.01, 0 swaps today
- CRCL / JERK (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- STARC / STARC (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- NVDA / AI (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- TEST / CINU (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- NVDA / JACKET (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- TSLA / TCAT (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- JARVIS / STARC (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- NVDA / BLUECHIP (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- CHILLPEPE / USDC (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- CRCOOL / COOL (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- wARS / WFIAT (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- DUKE / BABYDUKE (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- GME / GME (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today
- MRSTARC / STARC (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today