FablesRWA on Robinhood Chain

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

Volume (24h)
$1.64M
Value locked (TVL)
$936.73K
All-time volume
$31.74M
Pools using this hook
11
Swaps (24h)
5,123 (1,046 traders)
Total swaps
86,854

What it does

A session-aware dynamic-fee hook for tokenized equity pools that charges higher LP fees during market open and close windows and lets LPs deposit ranged liquidity with receipt tokens.

How it works step by step

  • Sets a per-pool LP fee from a session schedule: open, overnight and closed floors with a linear opening descent and closing ramp, all keyed to block.timestamp and a market calendar.
  • Applies an optional per-pool directional premium so one swap direction can carry a higher fee than the other.
  • Lets an operator temporarily override each direction's fee with a poke that expires after at most 72 hours, bounded by a floor and a 50 percent discount ceiling.
  • Holds concentrated liquidity in one PoolManager position per tick range and mints ERC-6909 receipts 1:1 with liquidity units for depositors.
  • Accrues fees per range and lets holders claim them; an optional protocol claim fee up to 20 percent is taken from fees only, not principal.
  • Offers optional staking that routes fee accrual to a distributor or to a gauge-approved holder, gated by a voter contract, plus a pause mechanism bounded to 7 days.
Swap behaviour
On each swap, beforeSwap returns a dynamic fee override for the swap direction, computed from the session floor for the current time, plus any directional premium, with any live poke applied and everything clamped to the pool's cap. No swap deltas are taken.
Liquidity behaviour
Users deposit concentrated liquidity into a hook-owned PoolManager position per tick range and receive ERC-6909 receipts 1:1 with liquidity units. Withdrawals return principal; accrued fees settle as PoolManager claims. Optional staking routes fee accrual to a distributor or to the holder depending on gauge and ballot gate state.
Fee behaviour
The autonomous fee is a session-based floor (open, overnight, closed tiers with an opening descent and closing ramp driven by block.timestamp and a market calendar), plus an optional directional premium per pool, clamped to a per-pool cap. An operator poke can temporarily override each direction's fee within floor and discount bounds. Fees are returned as an LP fee override in beforeSwap; no swap deltas are taken. A protocol claim fee (max 20%) skims accrued LP fees at collection, not principal.
Owner & admin controls
Owner-style control via OpenZeppelin AccessManaged authority (setAuthority). Restricted roles can: setPoolConfig (floors, cap, descent and closing ramp params), setPoolAsymmetry (directional premium), setClaimFee/setClaimFeeBps (protocol claim-fee rate, max 20%, retroactive per the rate history), setDistributor, setFFFeeSink, setDayOverrides, setEarlyClose, setSessionHours, setDstMode, setBallotGate, setOperator, pokeFee/clearPoke (temporary fee override, TTL up to 72 hours, bounded by poke floor and a 50% discount ceiling), pause/pausePool (one-way freeze capped at 7 days), setPaused and setPoolPaused (can unfreeze, delayed), syncRanges/sweep functions. Principal withdrawal is stated as not pausable; pausing is bounded in duration.

Enabled Uniswap v4 callbacks

beforeInitialize, beforeSwap

beforeInitialize: validates that the pool uses the dynamic-fee flag, is configured, and is not native-currency. beforeSwap: returns the resolved dynamic fee override (no delta flags). The hook also takes liquidity actions through the PoolManager unlock flow for deposits, withdrawals and fee collection.

Security & trust assessment

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

Who controls it: A privileged role can pause the ledger or individual pools (one-way, up to 7 days each), reconfigure fee floors and caps, set premiums, set the claim-fee rate on existing accrued fees, and change distributor, sink and gate addresses. Zero-delay poke and pause keys can temporarily cut or raise fees within bounds and freeze pools; they cannot unfreeze the hook-wide pause. Principal withdrawal is stated not to be blockable by admin state, but admin writes affect fee amounts credited on withdrawal.

Risk to user funds: The hook holds PoolManager positions for depositors and mints ERC-6909 receipts, so it controls LP principal in the PoolManager. Withdrawals are designed not to be blocked by pause or claim-fee logic, and principal does not sit in the hook's ERC-20 balance. Fees and fee-share routing are admin-configurable, and payout targets are guarded against the hook and PoolManager addresses.

Security findings

  • [info] Heavily documented, multi-pass review code: Inline notes and Slither suppressions indicate the ledger was audited and rounds were run; the code contains extensive self-documented invariants but the audit reports are not provided here.
  • [medium] Renewable pause over deposits, claims and transfers: Pausing is bounded to 7 days per call and cannot shorten a running freeze, but the setPaused/setPoolPaused paths can renew and are gated by AccessManager delay. A compromised key with a renewal capability could freeze deposits, claims and transfers repeatedly.
  • [medium] Zero-delay fee poke can repeatedly set fees to bounds: Poke floors and the 50% discount ceiling bound how far a fee can be cut, but a poke can raise fees to the cap for up to 72 hours at zero delay, and renewal is unbounded in count.
  • [low] Retroactive claim-fee on accrued fees: Claim-fee rate can be raised by a delayed role and applies retroactively to backlog via the rate history; the all-time-minimum walk limits but does not eliminate exposure on long backlogs.
  • [low] Live pool repricing via configuration: Owner can change floors, caps, descent and closing parameters on live pools; the code notes this is supported and that live reconfiguration is a repricing of an open market.

Contract details

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

Pools using FablesRWA