FablesRampETH on Robinhood Chain

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

Volume (24h)
$62.01M
Value locked (TVL)
$23.32M
All-time volume
$2.37B
Pools using this hook
1
Swaps (24h)
14,661 (1,198 traders)
Total swaps
626,829

What it does

A flat-fee liquidity hook for Uniswap v4 that lets LPs deposit concentrated liquidity into chosen tick ranges and earn fees, with an operator-adjustable temporary fee override and optional staking of fees to an external distributor.

How it works step by step

  • Charges each pool a configured flat fee per swap, overridden by a temporary operator-poked fee within floor and cap bounds that expire after at most 72 hours.
  • Lets users deposit concentrated liquidity into chosen tick ranges through a hook-owned PoolManager position and receive 1:1 ERC-6909 receipts.
  • Accrues LP fees per range and lets holders claim them, with a bounded claim fee taken on fees only.
  • Lets holders stake receipts so their fee share routes to an external distributor for voter emissions, with unstaking always available.
  • Supports native ETH pools on the native-capable variant with prepaid deposits refunded in full and staked-fee sweeps wrapped to WETH.
Swap behaviour
beforeSwap returns the resolved fee (poked fee if active and within bounds, otherwise the pool's flat fee, clamped to the cap) as a per-swap override. It applies no swap deltas and does not take swap amounts.
Liquidity behaviour
deposit adds concentrated liquidity in a chosen tick range via a hook-owned PoolManager position, minting ERC-6909 receipts 1:1 with liquidity units, with caller-set amount0Max and amount1Max ceilings and a deadline. withdraw burns receipts and returns principal with caller-set minimums, auto-unstaking if needed. Fees accrue per range and are claimable by pull; staking routes a holder's fees to the distributor for voter emissions.
Fee behaviour
Each pool charges a configured flat fee (flatPips) by default. A restricted operator can poke a temporary fee that replaces it, bounded between a floor (at least 0.01% and at most 50% below the autonomous fee) and the pool cap, expiring after at most 72 hours. Claim fee of up to 20% applies to LP fee revenue on claims and syncs, and staked-share fees are routed to a distributor.
Owner & admin controls
Owner-style control via AccessManaged authority: restricted roles can setPoolConfig (floor/flat/cap per pool), pokeFee and clearPoke (temporary fee override bounded by cap, floor and 72h TTL), setClaimFee (up to 20%), setDistributor, setFFFeeSink, setBallotGate, setAuthority, pause (up to 7 days; principal withdrawal and unstake are deliberately not pausable), and setPaused. Upgrades: not a proxy, immutable deployment. Source is truncated so exact role mapping for every setter was not fully verifiable.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize: enforces dynamic-fee pools that are configured and, for native currency0, only on the native-capable variant. beforeSwap: returns a fee override only; no delta flags, so the hook does not take swap amounts.

Security & trust assessment

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

Who controls it: A restricted key can set the per-pool flat fee and cap up to the absolute max, poke fees (a fast zero-delay role, bounded below by the floor), pause deposits, claims, staking, transfers and sweeps for up to 7 days at a time, set claim fee up to 20% on fees, and redirect distributor and sink destinations. These cannot seize LP principal or lock withdrawals, and the poke floor limits how far fees can be driven down.

Risk to user funds: The hook holds no principal in custody: liquidity sits in PoolManager positions owned by the hook, and deposit and withdraw enforce caller-set amount bounds. Fee claims are settled as PoolManager ERC-6909 claims, so token blocklists on the hook do not freeze principal. The hook can affect fees, can pause non-withdrawal flows, and can route fee revenue to configured sinks, but cannot directly transfer LP principal.

Security findings

  • [medium] Fast poke key can move every pool's fee: The poke role has zero execution delay and can set a fee anywhere between the per-pool floor and cap; the floor is bounded to at least 50% of the autonomous fee, so fees cannot be pinned to zero, but the role can still raise fees to the cap on every pool for up to 72 hours at a time.
  • [low] Claim fee on accrued fees: setClaimFee can set up to 20% on LP fees and redirect the recipient; the rate applied to a backlog is the lowest rate in force since the range last synced, so timing can be exploited around scheduled changes, bounded by MAX_CLAIM_FEE_BPS.
  • [info] Pausable entry points: The ledger can be paused for up to 7 days (renewable). Pause blocks deposit, claimFees, stake, transfers and sweeps, but withdraw and unstake remain available as stated in the code.
  • [info] Native ETH pathway: Native ETH is handled by a receive() that accepts only the PoolManager, and the wrap-to-WETH path forwards distributor revenue. The hook is not designed to hold ETH between transactions.

Contract details

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

Pools using FablesRampETH