FablesRWAETH on Robinhood Chain
Uniswap v4 Hook Contract 0xca89f079af00f752bfd3c345358dc38d4d73e080 on Robinhood Chain · Dynamic fee · Verified contract
- Volume (24h)
- $10.88K
- Value locked (TVL)
- $6.87K
- All-time volume
- $5.12M
- Pools using this hook
- 2
- Swaps (24h)
- 393 (276 traders)
- Total swaps
- 22,201
What it does
A dynamic-fee hook for tokenized equity pools that charges higher LP-protecting fees during the market open and close, lets LPs deposit ranged liquidity with withdrawals that cannot be paused, and allows temporary operator fee overrides.
How it works step by step
- Sets swap fees from a market-session calendar: opening descent, overnight floor, closed floor, closing ramp and post-closure spike, all driven by block.timestamp.
- Applies an optional directional premium so one swap direction can be priced higher than the other.
- Lets a trusted poke role temporarily replace per-direction fees, bounded by a floor, the pool cap, and a 72-hour expiry.
- Holds concentrated liquidity in hook-owned v4 positions per tick range and mints ERC-6909 receipts 1:1 with liquidity.
- Skims an optional claim-fee percentage from collected LP fees, routed to a recipient as a pull-only claim.
- Supports optional staking where fee accrual goes to a distributor or to Voter-gated eligibility, and pausing of deposits, claims and transfers with bounded durations.
- Swap behaviour
- On every swap the hook returns a fee override: the session-based autonomous fee (plus a directional premium) unless a live operator poke applies, clamped to the pool cap. It does not alter swap deltas.
- Liquidity behaviour
- Users deposit concentrated liquidity into hook-owned v4 positions per tick range and receive ERC-6909 receipts 1:1 with liquidity units. Deposits enforce deadline and amount ceilings; withdrawals are unconditional and pay out principal plus accrued fees as PoolManager claims. Optional staking routes fee accrual to a distributor or Voter-gated eligibility.
- Fee behaviour
- Per-swap fee resolved by direction: a live poke replaces the autonomous fee (clamped by a floor of max(configured floor, half the pre-poke fee, capped at a 50% discount) and by the pool cap); otherwise the session-based autonomous fee (open descent, overnight, closed floor, closing ramp, closed spike) plus a directional premium, clamped to the pool cap. Claim fee skims a configurable bps of collected LP fees (max 20%), with a rate history to prevent retroactive charges.
- Owner & admin controls
- Owner-role holders (via AccessManager with delays) can set pool configs, floors and caps (setPoolConfig), premiums (setPoolAsymmetry), claim fee rate and recipient (setClaimFee, setClaimFeeBps), distributor and FF sink, ballot gate, session hours, day overrides and early-close windows, and authority. A zero-delay guardian/poker role can call pokeFee (temporary fee override bounded by floor and cap, 72h TTL), clearPoke, pause and pausePool (one-way freezes up to 7 days). setPaused and setPoolPaused can lift pauses and sit on the delayed admin role. Withdrawals and unstaking are designed to remain unpausable.
Enabled Uniswap v4 callbacks
beforeInitialize, beforeSwap
beforeInitialize: enforces dynamic-fee pools, pool must be configured, and blocks native ETH currency0 unless the native variant is used. beforeSwap: returns the per-swap fee override only; it does not modify swap deltas.
Security & trust assessment
Risk level: medium (verified source, high confidence).
Who controls it: A privileged key set can reshape fees within bounds, route claim-fee revenue to a chosen sink, set distributor and sink addresses, and pause deposits, claims, staking, transfers and sweeps (not withdrawals). The zero-delay guardian can freeze the hook or a pool for up to 7 days and reshape a pool's fee for up to 72 hours within floor and cap bounds.
Risk to user funds: The hook cannot move principal out of user positions beyond the PoolManager settlement that withdrawal performs, and withdrawals are not pausable. Privileged roles can change the fee paid on swaps and the fee skim on collected LP fees, and can route claim-fee and distributor revenue. Misconfigured native-ETH deposits are refused or refunded to the caller; ETH sent to the hook outside that path has no rescue function.
Security findings
- [medium] Zero-delay fee poke can be renewed indefinitely: A poked fee can cut the pool's live autonomous fee by at most 50% and is bounded below by a floor, but a zero-delay poker key can renew pokes indefinitely to keep one-sided fees at the floor.
- [low] Live pool reconfiguration reprices open markets: Setting a pool's floor, cap or config to values that do not match the live curve (for example closedSpike above cap, which is resolved by clamping) can reprice an open market; setPoolConfig is callable on live pools by the delayed admin role.
- [info] Pause expiry limits freeze duration: Pausing is bounded to 7 days per call and must be renewed, so a stalled admin cannot freeze deposits and claims permanently; withdrawals are never blocked by pause.
- [info] Claim fee applies only to fees, with history-bounded retroactivity: Claim fee is skimmed from collected LP fees at collection time and is not applied to principal; the recipient is one-way once set, and rate history is walked to bound retroactive charges.
- [info] Custody model keeps user funds on PoolManager claims: Token transfers route through the PoolManager as ERC-6909 claims and the hook never holds user tokens as balances, reducing blocklist and custody exposure. Native-currency paths carry refund and sweep logic that routes only the caller's unspent remainder.
Contract details
- Verified source
- Yes (FablesRWAETH)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 43,368 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee, erc6909-claims, moves-currency, pausable, self-unlock
Pools using FablesRWAETH
- ETH / AMC (Dynamic fee) — 24h volume $7.56K, TVL $2.98K, 192 swaps today
- ETH / SPY (Dynamic fee) — 24h volume $3.32K, TVL $3.89K, 201 swaps today