Likely fee sharing hook on Robinhood Chain

Uniswap v4 Hook Contract 0xa0ab01644c1901c9e92ba87b3e85551b415a6ec4 on Robinhood Chain · Fee sharing

Volume (24h)
$0
Value locked (TVL)
$13.68K
All-time volume
$3.90K
Pools using this hook
1
Swaps (24h)
0 (0 traders)
Total swaps
5

What it does

A fee-sharing hook that skims a portion of swap output from its pool and routes it to a registrar-approved fee-share recipient.

How it works step by step

  • Takes a share of swap output in afterSwap and records it as pending fees per pool
  • Registers fee-share recipients through registerFeeShare, restricted to the REGISTRAR role
  • Tracks fee-share recipients and their pools via feeShareOf and poolOfFeeShare
  • Distributes or notifies accumulated fees with notifyFee and pendingFees
  • Tracks liquidity positions around add and remove liquidity callbacks
  • Provides sweep functions to move hook-held balances
Swap behaviour
beforeSwap and afterSwap run on each swap; afterSwap takes a share of the output as a hook delta (afterSwapReturnDelta), accumulating it as pending fees for the pool.
Liquidity behaviour
beforeAddLiquidity and beforeRemoveLiquidity are callable and afterAddLiquidity is nonpayable, with a mapping recording minted positions; the hook appears to track or gate liquidity changes and may mint or account for them, but the exact logic could not be fully determined from bytecode.
Fee behaviour
Fees taken on swaps (afterSwapReturnDelta) are accumulated per pool in a mapping and tracked through pendingFees and notifyFee, and shared with a registered fee-share recipient that is recorded in feeShareOf and poolOfFeeShare; the static pool fee is otherwise left unchanged.
Owner & admin controls
A REGISTRAR address is the only account that can call registerFeeShare (the NotRegistrar error confirms registrar gating); sweep() and sweep(key) appear callable, and ownership or pause controls were not identified in decoded functions.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, afterSwapReturnDelta

beforeInitialize and afterInitialize run on pool creation to set up fee-share state; beforeAddLiquidity, afterAddLiquidity, beforeRemoveLiquidity track positions; beforeSwap and afterSwap with afterSwapReturnDelta take a share of the swap output as a hook delta; beforeDonate and afterDonate are present in the dispatcher.

Security & trust assessment

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

Who controls it: The REGISTRAR role can register new fee-share recipients that receive a cut of pool fees, and it is the only role that can change which address earns fees; a compromised registrar could redirect future fee shares.

Risk to user funds: The hook takes a share of swap output through its return delta and holds accumulated fees until notifyFee or sweep moves them, so user swap proceeds in covered pools are partly routed through this contract.

Security findings

  • [medium] Hook takes swap fees via return delta: afterSwapReturnDelta lets the hook take a portion of swap output, so the hook holds and moves token amounts on every swap in covered pools.
  • [medium] Sweep functions move hook-held funds: sweep() and sweep(key) are nonpayable public functions that move balances held by the hook; access control on these could not be confirmed from the decoded dispatcher.
  • [low] Self-unlock and currency movement: The hook calls unlock and transfers tokens via the pool manager (self-unlock and moves-currency tags), so it actively settles balances during callbacks.
  • [low] Registrar controls fee recipients: Fee-share recipients are chosen by a registrar address, so recipient choice is a centralization point.

Contract details

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

Pools using Likely fee sharing hook