IndexFeeHook on Robinhood Chain

Uniswap v4 Hook Contract 0x918366044a424ee54fc27084eb416a13882340cc on Robinhood Chain · Fee sharing · Verified contract

Volume (24h)
$0
Value locked (TVL)
$211
All-time volume
$281.49K
Pools using this hook
81
Swaps (24h)
0 (0 traders)
Total swaps
6,294

What it does

Acts as the single shared fee hook for every index pool, taking a flat protocol fee and a creator-set volatility-scaled index fee on each swap and splitting it between the protocol, index treasury, in-kind buybacks and basket stock purchases.

How it works step by step

  • Overrides the pool LP fee to zero and takes the full fee through V4 return deltas in beforeSwap and afterSwap.
  • Charges a flat 0.30% protocol base fee plus a creator-set index fee per side with up to +2% volatility premium.
  • Applies a 5% snipe-guard fee for the first two blocks after a pool launch, exempting the factory's creator pre-buy.
  • Splits the USDG-denominated fee into protocol share, index treasury RFV share, and basket stock purchases on hookless reserve pools.
  • Takes the buyback share of the index fee in-kind as the index token into the treasury without swapping the index pool itself.
  • Maintains a cumulative-tick TWAP and decaying volatility accumulator per pool for bond pricing and dynamic fees.
Swap behaviour
On every swap the hook skims fees via beforeSwap on the specified currency and afterSwap on the unspecified currency, overrides the LP fee to zero, and records a TWAP and volatility observation.
Liquidity behaviour
No liquidity callbacks; add and remove liquidity hooks are disabled and return the selector with zero deltas.
Fee behaviour
Every swap pays a flat 0.30% protocol base fee plus a creator-set index fee per side (1% to 9%) with a volatility premium of up to +2% and a 5% launch snipe guard for the first 2 blocks; the LP fee is overridden to 0 so the hook takes the entire fee. Of the index fee, 10% goes to the protocol treasury, rfvShareBps to the index treasury in USDG, buybackShareBps is taken in-kind as the index token into the treasury, and the remainder is used to buy basket stocks on hookless USDG/stock reserve pools.
Owner & admin controls
Owner (set once at deployment) can only call setFactory, which is one-shot (reverts AlreadySet once set). The factory can call configure once per pool. No pause, no upgrade proxy, no parameter setters on the hook; per-index fee shares and fees are set by the index creator at launch and immutable. Owner is an address supplied to the constructor and is not further restricted in the visible source.

Enabled Uniswap v4 callbacks

beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta

beforeSwap skims the fee on the specified currency via BeforeSwapDelta and overrides the LP fee to 0. afterSwap skims the fee on the unspecified currency via afterSwapReturnDelta and records a cumulative-tick TWAP and volatility observation. beforeSwapReturnDelta and afterSwapReturnDelta allow the hook to take fee amounts as deltas.

Security & trust assessment

Risk level: medium (verified source, high confidence).

Who controls it: Owner controls only the one-time factory wiring; the factory can configure pools once. Owner cannot change fees, pause swaps, or redirect funds. Fee splits and fee levels are creator-chosen per index and immutable after launch, but the hook itself has no privileged setter.

Risk to user funds: The hook takes a per-swap fee in USDG or the index token via return deltas and routes it to protocol, treasury and basket purchases. It does not hold a user principal balance. Exposure is limited to the fee amount and to basket-leg slippage on reserve pools, bounded by the loose oracle band.

Security findings

  • [medium] Dust basket buys rely on a wide oracle band and depth-based pool selection: The hook swaps USDG for basket stocks on hookless reserve pools selected by deepest liquidity. The per-leg oracle band is a loose 50% anchor that is staleness-ignored, so a grossly mispriced pool is rejected but moderate mispricing within the band is accepted.
  • [low] Failed basket legs fail soft into reserve: Basket legs that fail (dead pool, band breach) are caught by try/catch and their USDG falls through to the index treasury reserve, which is safe for users but means basket allocation silently degrades without revert.
  • [low] Feedless stocks are unprotected by oracle checks: Stocks without a configured price feed have no oracle anchor, so their basket buys are fully oracle-free and rely only on pool selection for protection.
  • [info] Hook takes a mandatory fee from every swap via return deltas: The hook takes fees via return deltas on every swap, meaning a user always pays the protocol base fee plus the index fee, and a pause or bad config could block trading, though no pause exists in this contract.

Contract details

Verified source
Yes (IndexFeeHook)
Compiler
solc 0.8.28+commit.7893614a
Bytecode size
11,031 bytes
Upgradeable proxy
No
Detected patterns
moves-currency, oracle, return-delta

Pools using IndexFeeHook