FixedFeePoolHookV1 on Robinhood Chain
Uniswap v4 Hook Contract 0x8ae1e80342a97c2a404090eaf2136a6648b4dafc on Robinhood Chain · Dynamic fee · Verified contract
- Volume (24h)
- $0
- Value locked (TVL)
- $0
- All-time volume
- $0
- Pools using this hook
- 1
- Swaps (24h)
- 0 (0 traders)
- Total swaps
- 22
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.
This read was written for the hook 0xa7ac…dafc on Robinhood 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
- 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
- AIPURR / DIESEL (0.00% fee) — 24h volume $0, TVL $0, 0 swaps today