FriarV2 on Robinhood Chain
Uniswap v4 Hook Contract 0x188df8e99e8289a606e1396657329ce989975080 on Robinhood Chain · Dynamic fee · Verified contract
- Volume (24h)
- $3.82
- Value locked (TVL)
- $51
- All-time volume
- $1.82K
- Pools using this hook
- 9
- Swaps (24h)
- 1 (1 traders)
- Total swaps
- 437
What it does
A per-pool dynamic LP fee hook that raises the swap fee when price moves quickly, with the surge paid to LPs and a configuration that is frozen at pool creation.
How it works step by step
- Charges a per-pool base fee in pips that is set independently of tick spacing.
- Tracks price movement in tick buckets between swaps and adds a surcharge that grows with the square of the accumulated volatility.
- Resets or decays the volatility reference over a configurable filter and decay window so the surcharge fades after quiet periods.
- Freezes each pool's configuration at initialization, adopting the initializer's own registered proposal or the constructor default.
- Keeps all charged fees as LP fees, with no protocol fee and no owner or upgrade path.
- Swap behaviour
- beforeSwap refreshes the volatility state from the current tick and returns a fee equal to the base fee plus the volatility surcharge, capped at 10%, as an overridden LP fee.
- Liquidity behaviour
- No liquidity callbacks. Liquidity add and remove are not hooked and the hook cannot touch LP principal.
- Fee behaviour
- Each swap pays a fee equal to a per-pool base fee (baseFeePips, independent of tick spacing) plus a volatility surcharge derived from how many tick buckets price has moved since a reference snapshot, capped at 10%. The fee is returned as an overridden LP fee and goes entirely to the pool's LPs; there is no protocol fee.
- Owner & admin controls
- No owner, admin or upgrade path. Pool configuration is written once per pool at initialization from a registrant-keyed proposal and then frozen; defaultConfig is set only in the constructor and cannot be changed afterwards.
Enabled Uniswap v4 callbacks
afterInitialize, beforeSwap
afterInitialize: adopts the initializer's registered config (or the default), validates it, locks it for the pool and initializes volatility state. beforeSwap: updates the volatility accumulator from the current tick and returns the dynamic fee with the override flag set.
Security & trust assessment
Risk level: low (verified source, high confidence).
Who controls it: There is no privileged key. Nobody can change fees, pause swaps or block exits after a pool is initialized, so centralization risk is minimal.
Risk to user funds: The hook cannot take swap or liquidity deltas, cannot custody tokens, and cannot revert liquidity removal, so it cannot seize or trap user principal. Its only effect on funds is the fee level it sets, which is paid to LPs.
Security findings
- [info] Immutable per-pool configuration: Only the constructor-set default config and each pool's own registered proposal determine fees; no function allows post-initialization parameter changes.
- [low] Front-running of pool configuration: A pool adopts only the proposal registered by the address that initializes it, so a third party cannot impose parameters by pre-registering on someone else's pool. Callers should still verify the frozen config and initial price before depositing into a pool they did not create.
- [low] Swap splitting can shed the volatility surcharge: The fee is computed from the swap's pre-trade state, so a trade can be split into a small leg that moves price and a large leg at base fee to avoid the surge. The contract documents this as an accepted, measured limitation.
- [info] High fee levels are permitted: Fees can be set high (up to the 10% LB cap) by whoever configures the pool, which can make trading expensive for swappers and reduce routing; this is a market parameter rather than a fund-safety issue.
- [info] Narrow hook permissions: Permission bits are limited to afterInitialize and beforeSwap, and the hook takes no return deltas, so it cannot move, hold or block user or pool funds.
Contract details
- Verified source
- Yes (FriarV2)
- Compiler
- solc 0.8.26+commit.8a97fa7a
- Bytecode size
- 8,013 bytes
- Upgradeable proxy
- No
- Detected patterns
- dynamic-fee
Pools using FriarV2
- ZM / USDG (Dynamic fee) — 24h volume $3.82, TVL $51, 1 swaps today
- USDG / BONER (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- USDG / Rabbit (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- USDG / RIVN (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- AI / USDG (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- USDG / LAPTOP (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- USDG / NORMIE (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- ETH / PONS (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today
- USDG / IBM (Dynamic fee) — 24h volume $0, TVL $0, 0 swaps today