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 LP fee Mood
sunny SUNNY 0–19 0.20 – 0.30 % nothing happening, fee near the floor
swarm SWARM 20–39 0.31 – 0.41 % getting busy
fog FOG 40–59 0.42 – 0.52 % hard to see the price from here
storm STORM 60–79 0.53 – 0.63 % hold on to something
chaos CHAOS 80–100 0.64 – 0.75 % 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.

CHAOS

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.

How the fee is made — what the market did and what your trade does blend into one intensity score, which sets the LP fee and the weather label

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. Both scores saturate at a price move of 100 / k percent; k (turbulenceK, impactK) is 15, so a move of about 6.7% scores 100. Translation: a trade that moves the price 6.7% is a CHAOS-tier trade and pays like one. The blend and k are set once, in the hook's constructor, and cannot be changed — by anyone.

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 can be tuned

Nothing. The 0.20% floor, the 0.75% ceiling, the 15-minute half-life, the 60/40 blend and k are all fixed — the first three as constants in the library, the last two in the hook's constructor with no setter. The LP fee can never be 0%, and it can never be "oops 99% for a block". Those numbers are not settings; they are the contract.

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. ⛈️🪰