FixedFeePoolHookV1 on Robinhood Chain

Uniswap v4 Hook Contract 0xa7ac21febf0a6db7887ad06aff01a5663609dafc on Robinhood Chain · Dynamic fee · Verified contract

Volume (24h)
$28
Value locked (TVL)
$96
All-time volume
$16.65K
Pools using this hook
1
Swaps (24h)
21 (2 traders)
Total swaps
307

What it does

A fixed-fee Uniswap v4 pool hook that charges a set percentage of each swap as a hook fee, routes accrued fees to a collector and treasury, and keeps liquidity restricted to a locker while maintaining a truncated price oracle.

How it works step by step

  • Charges a fixed proportion of every swap as a hook fee on the specified or unspecified side
  • Accrues fees as manager claims, then settles them to tracked ERC20 custody
  • Splits accrued fees between the collector and a protocol treasury share
  • Restricts liquidity additions and removals to the locker after opening completes
  • Maintains a truncated, quote-normalized tick and liquidity oracle with capped per-block moves
Swap behaviour
beforeSwap charges the hook fee on the specified side of the swap through the return delta, afterSwap reconciles the precharged amount and charges the unspecified-side fee, and oracle observations are recorded before the price moves.
Liquidity behaviour
Only the locker may add or remove liquidity once opening is complete (external liquidity can be disabled). Before liquidity changes the hook records the oracle observation. Checkpoints of LP fees are taken from the locker's positions around swaps and donations to keep manager claim accounting under the int128 limit.
Fee behaviour
Hook takes a fee on the specified or unspecified side of each swap via beforeSwap/afterSwap return deltas, sized as a fixed proportion of swap amount (hookFeePips, bounded below by minimumHookFeePips and capped by PIPS_DENOMINATOR). A protocol share of the accrued fee is tracked to a treasury when a denominator is set. The pool LP fee is static (lpFeePips). Accrued fees are minted as manager claims, then burned and taken as ERC20 for collector/treasury redemption.
Owner & admin controls
Owner-less immutable configuration: no owner or admin setter found in the hook. Pool registration is restricted to the registrar, opening completion to the registrar (one-shot), and fee collection to the frozen collector. Fee parameters (hookFeePips, minimumHookFeePips, protocol denominator, treasury) are fixed at construction. Reliance on the registrar, core lifecycle contract and oracle factory is a trust dependency that is not fully visible from the truncated input.

Enabled Uniswap v4 callbacks

afterInitialize, beforeAddLiquidity, beforeRemoveLiquidity, beforeSwap, afterSwap, beforeDonate, afterDonate, beforeSwapReturnDelta, afterSwapReturnDelta

afterInitialize: sets up the truncated oracle and marks the pool initialized. beforeAddLiquidity and beforeRemoveLiquidity: restrict liquidity to the locker and record oracle observations. beforeSwap: charges the hook fee on the specified side and checkpoints LP fees. afterSwap: reconciles the precharged fee and charges the unspecified-side fee. beforeDonate and afterDonate: checkpoint LP fees without treating donations as hook fee liabilities. beforeSwapReturnDelta and afterSwapReturnDelta: allow the hook to take its fee through return deltas.

Security & trust assessment

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

Who controls it: No owner key or pause is present in the inspected source, so there is no single privileged key that can change fees or block swaps. Trust is placed in the immutable registrar and core lifecycle contract that call registerPool and completePoolOpening, and in the collector that calls collectFees and receives funds. Those contracts were not fully visible.

Risk to user funds: The hook can hold and move pool funds through manager claims and ERC20 custody of accrued hook fees, and can take tokens via return deltas. Fees are redeemable only to the frozen collector and treasury. Users lose value through the fixed hook fee, and LPs are exposed to fee checkpointing and locker custody. The hook cannot redirect principal to an admin key, and no upgrade path is visible.}

Security findings

  • [info] Immutable hook fee: Hook fee is a fixed proportion of swap amount set at deployment, bounded by hookFeePips and minimumHookFeePips. Users are charged this on every swap with no owner path to change it.
  • [medium] Swaps can revert during fee settlement: Swap and liquidity paths depend on the locker and manager claim accounting; an unsettled state (e.g. insufficient manager cash) reverts with FeeSettlementRequired, which can temporarily block swaps until settlement is performed.
  • [low] Hook holds and takes funds: The hook takes tokens through beforeSwapReturnDelta and afterSwapReturnDelta and holds manager claims and ERC20 custody of accrued fees until redemption.
  • [low] Concrete fee arithmetic not fully reviewed: The truncated oracle ring and fee policy are computed in pure arithmetic whose full behaviour cannot be verified from the truncated input, so the custom _calculateFee path in the concrete deployed contract should be confirmed independently.

Contract details

Verified source
Yes (FixedFeePoolHookV1)
Compiler
solc 0.8.28+commit.7893614a
Bytecode size
24,035 bytes
Upgradeable proxy
No
Detected patterns
erc6909-claims, moves-currency, oracle, return-delta, self-unlock

Pools using FixedFeePoolHookV1