TESTNETRobinhood Chain testnet (id 46630). USDG here is a faucet token anyone can mint — prices, liquidity and fees on this page are not real money.

The Weather — the dynamic fee

The buzz

Flies don't fly the same in a storm. Neither does the pool.

When the market is calm the LP fee is cheap. When it is violent the LP fee is expensive. And — this is the bit other "dynamic fee" pools get wrong, few understand — if your trade is the one that causes the violence, YOU pay for it, in that same trade, not the poor fly who trades after you. The whale pays the whale tax. The minnow pays minnow prices. Justice, in pips.

The dashboard shows this as weather:

Weather Score Mood
☀️ SUNNY 0–19 nothing happening, fee near the floor
🐝 SWARM 20–39 getting busy
🌫️ FOG 40–59 hard to see the price from here
⛈️ STORM 60–79 hold on to something
🌀 CHAOS 80–100 fee at the ceiling, for everyone's protection

The labels are just labels — vibes for the screen. The fee underneath is continuous, and it does not care what the label says.

The boring part

The LP fee for a swap is:

fee = 0.20% + 0.55% × intensity / 100

so it lives between 0.20% (2,000 pips) and 0.75% (7,500 pips). Those two ends are constants in the code; no key can move them. Not the controller, not the creator, not a "community vote" at 3am. Bytecode does not take votes.

intensity (0–100) blends two scores:

  • Regime — an exponentially weighted average of how far the price has moved between swaps, which halves every 15 minutes of quiet. This describes the market. It is inherently one swap behind, and that is fine for what it measures — it is the forecast, not the lightning.
  • Impact — how far this swap is projected to move the price, computed from the swap's own size against the pool's current liquidity, before it executes. Zero lag. The causer pays. You ARE the weather, anon.

They blend 60% regime / 40% impact by default. Both scores saturate at a price move of 100 / k percent; k (turbulenceK, impactK) is set to 15 at launch, so a 6.7% move scores 100. (The contract's own default is 50; 15 was chosen because at the launch depth a 2% move is one small trade — see the tokenomics audit.) Translation: at launch depth, a trade that moves the price 6.7% is a CHAOS-tier trade and pays like one.

Who gets the LP fee

Every liquidity provider in the pool, pro rata: the creator's seed position, the protocol's own locked bids, and anyone else who adds liquidity. The hook does not touch it. The storm pays the people who stood in it.

What the controller can and cannot tune

Can Cannot
the regime/impact blend (0–100% regime) the 0.20% floor
turbulenceK, impactK (must be non-zero) the 0.75% ceiling
the 15-minute half-life

Left column: knobs. Right column: welded shut. The fee can never be 0%, and it can never be "oops 99% for a block". Those numbers are not settings.

Reading it on the dashboard

marketState() on the hook reports the ambient weather — the regime decayed to right now, with no trade folded in. A specific trade's fee is always at least that, and more if the trade is large. The television quotes the real thing through Uniswap's Quoter, which runs the hook for real, so the quote you see includes your own impact. What you see is what you pay. No surprise weather at confirm. ⛈️🪰