The Fee and the Floor
The buzz
Every trade in the hive pays rent. The rent is split two ways: half to the creator who built the place, half into a jar bolted to the floor. When the jar has something in it, the hive's keeper — or anyone, if the keeper oversleeps — tips it into the pool as a bid just under the market price. That bid is now part of the pool FOREVER. There is no lever, no key, no admin, no "emergency function", no governance proposal #7 to take it back out. We didn't make it hard to withdraw; we didn't write the function. Unruggable by omission. 🍯
So the floor under the price gets a little thicker with every trade, and when the price dips into it, the floor buys FLY. And when the price recovers, that FLY gets sold back at a higher price — the floor earns — and the FLY it earns as fees gets burned. Buy the dip, sell the rip, burn the profits. A machine that does the thing you keep saying you'll do.
The hive grows.
The boring part
Where every dollar of fee goes

The protocol fee
- 0.90% of the USDG side of every swap, buy or sell. Always in USDG.
- Set once, in the hook's constructor, under a hard cap of 1.00% (
MAX_HOOK_FEE_BPS), and there is no setter: 0.90% for the life of the pool. "Fee set to 50% lol" is a rug you have seen; it is not a rug you can see here. - Split by
creatorShareBps, 50%, also immutable:- to the creator: paid out in the same transaction, per swap; the hook never holds it
- to the pot (
pendingLiquidityUsdg): held in the hook until compounded
- The controller can switch the fee off (
setFeePaused). That switch does not stop trading; it is a circuit breaker for the fee path only. Pausing the fee makes trading CHEAPER, never impossible.
So at the defaults, 0.45% of every dollar traded goes to the creator, and 0.45% becomes floor. Say that out loud before you buy; we do. The creator's alpha is your volume, not your bag.
Compounding the pot
compound() moves funds only into the pool, so it can never be pointed at anyone. The hive's
keeper presses it on a schedule and is paid a bounty; the controller can press it too; and
if six hours pass without a compound, anyone may (Keepers). What it does:
- Takes at most one tranche — 2,000 USDG — from the pot, once per 30 minutes.
- Places it as a USDG-only bid in a band that starts at the first tick-spacing strictly under the reference price (so 0–2% under it) and runs ten spacings deep (about 22%).
- If the previous band is still within reach of the market, the new USDG joins it. If the price has moved into the previous band, or rallied about 9–10% away from it, a new band is opened at the new level and the old one is left in place (its accrued fees are swept first). That second rule is how the floor follows a rally instead of being left behind.
- Burns the FLY the floor has earned, in the same call.

The reference price is the lower FLY price of the current price and its 4-hour time-weighted average (which spans four to eight hours), which is the safe side. This is what keeps a one-transaction pump from setting the price the floor buys at: the floor only ever bids at or below where the market has actually been trading. The price of that safety is lag: after a sharp rally the new bid trails the market by a window or so, then catches up.
Why single-sided, why under the price
The pot is USDG. A position at the price would have to hold FLY too, which would mean the
hook buying FLY at spot inside compound() — with the protocol's own money, at a price the
caller may have just moved. Aping with the treasury: no. A bid just under the price needs no
swap, has no slippage, and can only ever buy FLY below the average. It is "at the current
price" in every sense Uniswap allows without a swap. The floor never FOMOs.
What the floor does over time
- Bands are never removed. Not by the creator, not by the controller, not by anyone. There is no function. Diamond hands, but the hands are bytecode.
- A band that is bought through in a dip keeps its FLY and sells it back if the price recovers through it. It earns fees in both currencies both ways.
- The USDG fees it earns go back into the pot. The FLY fees it earns are burned in the
same call that collects them (
compound()orsweepBands());burnAccruedFly()is open to anyone for FLY that arrives any other way. - The principal FLY a band holds is not burned; it is the inventory that defends the next dip. Ammo stays in the chamber.
How it grows — by the weather
The floor has two incomes, and only one of them is a fixed number. The protocol share is 0.45% of volume whatever the weather. The LP share is the dynamic fee: the floor's bands are liquidity providers like any other, so they earn their pro-rata slice of the 0.20–0.75%, and the rougher the market, the bigger the slice. Per $1,000,000 of USDG volume:
| Weather | LP fee | Trader pays in total | To all LPs (pro rata) | To the creator | To the floor, protocol share | To the floor, LP share |
|---|---|---|---|---|---|---|
| ☀️ SUNNY | 0.20 – 0.30 % | 1.10 – 1.20 % | $2,000 – $3,050 | $4,500 | $4,500 | + its share of $2,000 – $3,050 |
| 🐝 SWARM | 0.31 – 0.41 % | 1.21 – 1.31 % | $3,100 – $4,150 | $4,500 | $4,500 | + its share of $3,100 – $4,150 |
| 🌫️ FOG | 0.42 – 0.52 % | 1.32 – 1.42 % | $4,200 – $5,250 | $4,500 | $4,500 | + its share of $4,200 – $5,250 |
| ⛈️ STORM | 0.53 – 0.63 % | 1.43 – 1.53 % | $5,300 – $6,350 | $4,500 | $4,500 | + its share of $5,300 – $6,350 |
| 🌀 CHAOS | 0.64 – 0.75 % | 1.54 – 1.65 % | $6,400 – $7,500 | $4,500 | $4,500 | + its share of $6,400 – $7,500 |
"Its share" is the floor's fraction of the liquidity that is in range when a trade happens — it starts small and grows with every compound, and it is largest exactly when the price is sitting in the bands, which is when the floor is doing its job. A day of CHAOS pays the floor close to twice what a day of SUNNY does on the same volume. The weather is not just a label; it is the floor's pay grade.
Every figure above is a rate, not a forecast: volume is whatever the market brings, and the floor keeps whatever it earns.
Locked and pending
- Locked liquidity — the bands — lives inside Uniswap's PoolManager, owned by the hook, with
no withdrawal path.
totalLockedUsdg()counts every dollar that has ever gone in. - Pending liquidity — the pot — is the USDG balance the hook holds between compounds.
pendingLiquidityUsdg()is the live figure, and the nextcompound()is what moves it from pending to locked.