FablesRampETH on Robinhood Chain

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

Volume (24h)
$970.25K
Value locked (TVL)
$877.26K
All-time volume
$153.38M
Pools using this hook
9
Swaps (24h)
3,761 (939 traders)
Total swaps
233,532

What it does

A singleton fee hook for non-equity Uniswap v4 pools that charges each pool a configured flat fee, allows a bounded, expiring operator override of that fee, and also runs a per-range concentrated liquidity ledger that issues ERC-6909 receipts and accrues fees to LPs.

How it works step by step

  • Charges each configured pool a flat fee (flatPips) set per pool by the admin, with no autonomous on-chain volatility calculation.
  • Lets an authorised fee poker override each swap direction with a poked fee that is bounded between a floor and the pool cap and expires within at most 72 hours, reverting to the flat fee.
  • Enforces a per-pool floor and a discount rule so a live poke cannot cut the effective fee below max(floor, half of the capped curve fee).
  • Accepts deposits into hook-owned concentrated liquidity positions per tick range, minting ERC-6909 receipts 1:1 with liquidity units.
  • Accrues LP fees per range and settles protocol claim-fee skims and distributor revenue as PoolManager ERC-6909 claims, with optional staking routing fees to a distributor.
Swap behaviour
In beforeSwap the hook returns a fee override only; it never changes swap deltas. The fee is the pool's flat fee plus any directional premium, replaced per side by a live non-expired poke, then clamped to the pool cap.
Liquidity behaviour
Deposits and withdrawals go through the hook's own ledger, which modifies a hook-owned v4 position and mints or burns receipts; this path is not gated by the fee poke and withdrawals are documented as not blockable by admin pause. Deposit and withdraw require amount bounds and a deadline. Native-ETH variant accepts payable deposits and refunds leftover ETH.
Fee behaviour
Per-pool flat fee with optional directional premium (admin-set, bounded by cap minus floor), an operator poke per swap direction with TTL up to 72 hours, and a hook-wide claim-fee rate of up to 20% taken from collected LP fees and credited to a claim-fee recipient. Protocol revenue is pull-based.
Owner & admin controls
AccessManaged authority controls restricted functions. Roles include a zero-delay fee poker that can set and expire pokes within bounds, a zero-delay pauser that can freeze the hook-wide ledger or a single pool for up to 7 days (one-way, cannot be shortened), a zero-delay clearPoke guardian, and delayed admin roles that set pool config, floor, cap, premium, claim-fee recipient, distributor, FF fee sink, ballot gate, and unpause. Sinks and distributors are swept permissionlessly to their configured destinations. The contract is not upgradeable (no proxy seen in the ABI).

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize enforces the dynamic-fee flag, that the pool is configured, and refuses native currency0 pools unless the native variant allows them. beforeSwap returns the resolved fee override for every swap.

Security & trust assessment

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

Who controls it: Privileged keys can change any pool's fee within bounds at zero delay (poker), freeze pools or the whole ledger for up to 7 days repeatedly (pauser), and through delayed admin roles change floors, caps, premiums, claim-fee rates and recipients, distributor and sink addresses, and the ballot gate that controls fee-collection rights for staked positions.

Risk to user funds: The hook takes no token transfers on its own behalf: collected fees settle as PoolManager ERC-6909 claims, and principal withdrawal is documented as unblockable by pause or admin state. Admin can change the claim-fee rate affecting how much fee is credited, and a pause can freeze deposits, claims, staking and transfers. The hook holds the PoolManager position liquidity for every range and any native ETH parked from deposits is documented as stranded rather than recoverable.

Security findings

  • [medium] Fee poker can move live fees within bounds with zero delay: pokeFee is restricted with no execution delay; within the per-pool floor and cap and a 72h TTL it can raise or lower each direction's fee, including cutting the fee by up to 50% of the capped curve, which a compromised key could use to subsidise toxic flow for the TTL window, renewable at gas cost.
  • [medium] Zero-delay pauser can freeze pools and the hook-wide ledger: pause and pausePool are zero-delay selectors that can freeze deposits, claims, staking and transfers for up to 7 days and renew them; the source notes that a compromised pauser key could also trigger emergencyKillGauge-style actions, which move a desk's epoch share, so the blast radius of a compromised zero-delay key is material even though withdrawals are documented as unpausable.
  • [low] Admin-set claim fee and recipient affect credited amounts on withdrawal: Withdrawals read claimFeeRecipient and the per-pool claim-fee rate to decide the skim credited at collection; the source states this cannot block exit but changes the amount of fees credited, and the rate can be raised up to 20% within a rate-history walk bound with a retroactive minimum rule.
  • [low] Sibling native hook is a permitted sink for user payouts: The source explicitly documents that withdraw or claim can target a sibling native hook sharing the same PoolManager receive allowlist, where funds are not recoverable; this is self-inflicted by the caller but a real loss path for mis-addressed payouts.
  • [info] Unverified dependency code and truncated source: The native ETH base, ledger types and LedgerLib library sources were omitted from the input, so settlement, refund and claim-fee arithmetic were reasoned about only from comments and decoded selectors, lowering confidence.

Contract details

Verified source
Yes (FablesRampETH)
Compiler
solc 0.8.26+commit.8a97fa7a
Bytecode size
34,326 bytes
Upgradeable proxy
No
Detected patterns
dynamic-fee, erc6909-claims, moves-currency, pausable, self-unlock

Pools using FablesRampETH