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