FablesRamp on Robinhood Chain

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

Volume (24h)
$6.05M
Value locked (TVL)
$5.41M
All-time volume
$439.55M
Pools using this hook
37
Swaps (24h)
15,293 (2,796 traders)
Total swaps
604,631

What it does

A singleton flat-fee hook where each pool charges a configured fee that an operator can temporarily adjust within bounds, and where users provide concentrated liquidity that earns those fees with withdrawals that cannot be paused.

How it works step by step

  • Each pool has a flat fee that applies when no operator poke is live
  • An operator poke can set per-direction fees within a floor and cap, expiring after at most 72 hours
  • An optional directional premium adds a fixed amount to fees in one swap direction
  • Users deposit liquidity into per-range hook-owned v4 positions and receive 1:1 ERC-6909 receipts
  • Earned fees accrue per range and are paid on withdraw or claim, with an optional protocol skim on fees only
  • Optional staking routes fee accrual to a distributor, gated by an external ballot contract
Swap behaviour
Swaps are charged the resolved per-direction fee: the pool's flat fee plus any directional premium, overridden by an unexpired poke within floor and cap, and clamped to the cap. No swap deltas are modified and no tokens are moved by the hook.
Liquidity behaviour
Users deposit concentrated liquidity into hook-owned v4 positions per tick range and receive 1:1 ERC-6909 receipts. Deposits and withdrawals are bounded by user-supplied amount limits and deadlines. Fees accrue per range and are credited on withdraw or claim, with an optional protocol claim fee (max 20%) skimmed from fees only. Optional staking routes fee accrual to a distributor and is gated by an external ballot gate.
Fee behaviour
Each pool charges a configured flat fee (flatPips). A poked side (non-zero, unexpired) overrides it within a floor and cap band, with a discount limited to 50% of the pre-poke fee. An optional directional premium is added on one swap direction. Fee is clamped to the pool cap. Dynamic fee flag required on pools.
Owner & admin controls
Owner-like authority via AccessManaged roles: setPoolConfig, setPoolAsymmetry and setClaimFee/setClaimFeeBps (rate and recipient) and setDistributor/setFFFeeSink are restricted and delayed. A zero-delay guardian role can call pause, pausePool and clearPoke, and a hot poke key can call pokeFee within floor and cap bounds for up to 72 hours. setPaused and setPoolPaused (unpause) are delayed. Pause durations are capped at 7 days. Withdrawals are not pausable. The hook is not upgradeable (no proxy seen).

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize: enforces dynamic-fee pools, pool configuration and rejects native currency0 unless the native variant is used. beforeSwap: returns the per-swap fee override only; no delta flags and no token movement.

Security & trust assessment

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

Who controls it: A compromised fee-poke key can set fees anywhere within the configured floor and cap for up to 72 hours per poke, and can extend this repeatedly. A compromised guardian key can freeze the hook or individual pools for up to 7 days at a time, blocking deposits, claims, staking and transfers (not withdrawals), and can permanently extend a freeze. Admin with delay can change the fee band, claim fee rate and recipient, and sinks.

Risk to user funds: Principal is held as PoolManager claims tied to hook-owned positions, not as hook token balances. A pool or hook pause cannot block withdrawals. The fee poke and admin fee band can change the fee LPs and swappers pay but not seize principal. Users can lose funds by misaddressing payouts to a sibling native hook or the PoolManager, which is guarded only partially.

Security findings

  • [medium] Hot fee-poke key with no execution delay: The poke key can set a live fee between the configured floor and cap for up to 72 hours and renew it; the floor is bounded so the fee cannot go below half the pre-poke fee, limiting but not eliminating fee manipulation.
  • [medium] Zero-delay guardian can freeze pools: pause and pausePool are zero-delay and can only extend freezes, blocking deposits, claims, staking and transfers for up to 7 days each time; withdrawals stay open. Sweeps are blocked only by the hook-wide pause.
  • [low] Admin-controlled protocol fee skim on fees: Claim fee (up to 20% of fees, not principal) and its recipient are set by delayed admin; the recipient is one-way once set, and rate changes apply retroactively to backlogs in the LP-favourable direction.
  • [info] Withdrawals designed to be unconditional: Withdrawal and deposit amount bounds are enforced, and principal withdrawal is explicitly not pausable; principal is not held as a token balance by the hook but as PoolManager claims, reducing blocklist exposure.
  • [low] Misdirected payout to a sibling hook is unrecoverable: Payout and sink targets are checked against the hook and PoolManager addresses, but a sibling native hook as a destination is not blocked and would strand funds.

Contract details

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

Pools using FablesRamp