Fee sharing hook on Arc

Uniswap v4 Hook Contract 0x41c38585b815fae2625381633a928ae12c966080 on Arc · Fee sharing

Volume (24h)
$0
Value locked (TVL)
$0
All-time volume
$0
Pools using this hook
2
Swaps (24h)
4 (1 traders)
Total swaps
4

What it does

This hook sets dynamic swap fees for its pools, takes a claim fee on fees owed to liquidity positions, and gives an authority the power to pause pools and adjust fee settings, though the exact direction of which trades pay more is not confirmed from the bytecode.

This read was written for the hook 0x38c4…6080 on BNB Chain and reused here: the two share a code shape, so constants such as fees, owners and addresses can differ.

How it works step by step

  • Enables dynamic fees on pools that use this hook (beforeInitialize checks the pool is a dynamic-fee pool and sets per-pool fee configuration such as min, max and flat fee values)
  • Tracks a per-pool fee that is read by currentFee and autonomousFee, with pokeFee and clearPoke functions used to update or reset a poke-based fee for a pool
  • Runs a deposit, withdraw and withdrawAndClaim flow that holds liquidity positions inside the hook and lets the hook settle with the pool manager through an unlock callback
  • Accrues a claim fee on fees owed to positions and routes it to a claim fee recipient via claimFees, claimFeeFor, sweepClaimFee and setClaimFee
  • Supports pausing the whole hook or individual pools (pause, setPaused, setPoolPaused, pausePool) with a pausedUntil timestamp
  • Uses role-based authority checks through an authority address and operator approvals (setOperator, isOperator, canCall)
Swap behaviour
beforeSwap is enabled and returns a dynamic fee for the pool; the exact fee direction and amount depend on currentFee, autonomousFee and the pool's asymmetry setting (poolAsymmetry), which could not be fully resolved from decoded bytecode.
Liquidity behaviour
Liquidity add and remove hooks (beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, afterRemoveLiquidity) are present as view-style selectors, and deposit, withdraw and withdrawAndClaim move liquidity through the hook using pool manager settlement and per-range accounting.
Fee behaviour
Fees are dynamic: the hook computes a fee per pool using poke state, flat fee, max fee and asymmetry settings, with a claim fee (claimFeeBps) taken on fees claimed by positions and sent to the claim fee recipient.
Owner & admin controls
An authority (setAuthority, owner-style role) can pause the hook and pools, change pool config and asymmetry, set claim fee and claim fee recipient, poke or clear fees, sweep claim fees and grant or revoke operator rights; the authority address is read from storage slot 0.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize validates the pool and sets its fee state; beforeSwap returns the dynamic fee for each swap; the hook is also expected to handle liquidity and donate callbacks through its selectors.

Security & trust assessment

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

Who controls it: A single authority key controls fee configuration, claim fee destination, pausing and operator rights, and can sweep accrued claim fees.

Risk to user funds: The hook holds deposited liquidity and accrued fee balances and settles them with the pool manager, so a privileged or buggy path could affect user principal or claimable fees.

Security findings

  • [high] Privileged fee and pause controls: Authority-gated functions such as setPoolConfig, setPoolAsymmetry, pokeFee, setClaimFeeBps and setPaused can change fees or halt pools, so a compromised authority could raise fees or block swaps for users.
  • [medium] Hook moves currency: The bytecode contains take, transferFrom and unlock/settle paths along with the moves-currency tag, so the hook holds and moves pool tokens for deposits, withdrawals and claim fee payouts.
  • [medium] Pausable swap path: The pausable tag and pause selectors indicate that beforeSwap can be blocked for a pool or globally, which could prevent trades.
  • [info] Unverified source: No verified source is available, so the exact fee formulas, asymmetry direction and access checks were inferred from decoded selectors and storage only.

Contract details

Verified source
No
Bytecode size
23,123 bytes
Upgradeable proxy
No
Detected patterns
erc20, moves-currency, pausable, self-unlock

Pools using Fee sharing hook