Dynamic fee hook on Robinhood Chain

Uniswap v4 Hook Contract 0x97e8ebe9a52a09cfa433f57c00e604ab73ed5afc on Robinhood Chain · Dynamic fee

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

What it does

A single-pool launch-style hook that charges traders a dynamic swap fee (higher when the price moves more, never below a coded minimum), splits it between an author and a treasury, runs a price oracle, and restricts liquidity changes around a controlled opening and liquidity lock.

This read was written for the hook 0xc578…5afc 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

  • Attaches to a single bound pool that goes through a controlled opening phase at a preset starting price before normal trading begins.
  • Charges a hook fee on swaps with a coded minimum, and appears to vary it with price movement over time (a fee sensitivity per tick per second).
  • Splits collected fees between an author (fixed share) and a treasury or manager, recorded as claims that are paid out through a fee collection function.
  • Keeps an on-chain price oracle (time-weighted tick observations) that others can read.
  • Checks liquidity additions and removals against the opening state and a liquidity locker or registrar configuration.
Swap behaviour
Before and after each swap the hook computes a fee, which has a minimum and likely a dynamic upper bound, and can take it from the swap amounts via return deltas. It also updates the price oracle. Swaps may be rejected until the pool opening is complete.
Liquidity behaviour
The hook runs on both adding and removing liquidity and can revert, for example if the opening is not complete or the position does not match the expected locked positions. The pool appears designed around a liquidity locker, so outside LPs may not be able to withdraw freely and locked positions may be intentionally restricted.
Fee behaviour
A hook fee with a hard-coded minimum is taken from swaps and appears to rise with recent price movement. Exact percentages and caps cannot be read from bytecode. Fees are split between an author share and a treasury or manager, and are claimable via collectFees.
Owner & admin controls
No conventional owner setters are visible. Configuration such as the registrar, oracle factory, liquidity locker, fee recipient and author fee share is fixed at deployment or registration, and pools are registered through a registrar. Exact limits cannot be confirmed from bytecode.

Enabled Uniswap v4 callbacks

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

afterInitialize sets up the oracle and pool state; beforeAddLiquidity and beforeRemoveLiquidity gate position changes by opening and locker rules; beforeSwap computes the fee and enforces opening status; afterSwap records the oracle and fee accounting; beforeDonate and afterDonate track or restrict donations; the swap return-delta permissions let the hook take its fee from swap amounts.

Security & trust assessment

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

Who controls it: No obvious owner keys are visible. Behaviour depends on immutable addresses such as the registrar, liquidity locker and fee recipient, which are set at deployment and pool registration.

Risk to user funds: The hook can take a dynamic swap fee (exact range unknown) from traders and holds fee claims until they are collected. LP withdrawals run through a hook check that can revert, so liquidity, especially locker-held positions, may not be freely removable.

Security findings

  • [medium] Swap fee taken via return deltas: The hook can deduct a dynamic fee from swap amounts. It has a coded minimum, but the maximum cannot be verified from unverified bytecode.
  • [medium] Remove-liquidity callback can revert: beforeRemoveLiquidity is enabled and checks opening status and position configuration, so withdrawals can be blocked under some conditions. This appears tied to a liquidity-locker design.
  • [info] Opening phase gating: Swaps and liquidity actions depend on completing a pool opening step at a preset price.

Contract details

Verified source
No
Bytecode size
24,043 bytes
Upgradeable proxy
No
Detected patterns
erc20, erc6909-claims, moves-currency, return-delta, self-unlock

Pools using Dynamic fee hook