A Fee That Starts at 99 Percent
Drafted June 2025. Finished and published August 2026 as part of the migration away from WordPress.
When a new token launched on Upside, the protocol I lead engineering on for Moai Labs, the swap fee started at 99 percent. It then fell by one percentage point every six seconds until it hit a floor of one percent, just under ten minutes later.
Anyone reading that as a fee schedule will think it is absurd. It is not really a fee schedule. It is a security mechanism that happens to be denominated in fees. In the contract it is not even called a fee schedule; the function is computeTimeFee.
The problem it solves
When a token is created on a bonding curve, the moment of creation is the cheapest the token will ever be. If the launch is permissionless and the price is deterministic, a bot watching the chain can buy in the same block the token is created and sell into the humans who arrive seconds later.
This is not a hypothetical failure mode, it is the default outcome. Every honest participant is worse off, the launch looks manipulated because it was, and the creator’s audience learns that turning up early is a losing move.
You cannot solve it with an allowlist, because the point is permissionless creation. You cannot solve it by hiding the launch, because the chain is public.
Why a decaying fee works
What separates the sniper from a real buyer is not intent, which you cannot observe, and not sophistication, which you cannot penalise. It is time. The sniper’s edge exists in the first seconds and disappears afterwards.
So price the first seconds out of existence. At 99 percent, buying immediately is possible but pointless: almost everything you pay is fee. By the time the fee has decayed to something a normal buyer would accept, the informational advantage of being first has gone.
The bot is not blocked. It is made unprofitable, which is better, because there is nothing to circumvent. There is no check to bypass, no signature to forge, no list to get onto. There is only arithmetic that makes early extraction cost more than it yields.
The fee is really a price
The bonding curves opened at 0.01 USDC per token. Work out what a buyer actually pays per token and the fee stops looking like a fee. Spend $1 at a 99 percent fee and one cent survives to buy tokens, so the effective price is $1 per token. Six seconds later, at 98 percent, two cents survive: 50 cents per token. Fifty-four seconds in, at 90 percent, the token costs ten cents. At the floor it costs a shade over a cent.
A fee that falls linearly is a Dutch auction on price, and the auction is brutally front-loaded. Half the launch premium is gone six seconds in. Ninety percent of it is gone inside the first minute. The mechanism charges the most for exactly the seconds in which the sniper’s edge is sharpest, then gets out of the way.
The launch parameters, April 2025. A fee falling one point every six seconds (top) is a Dutch auction on the effective price (bottom). The price panel holds the curve price at its 0.01 USDC starting point; real buys move the curve as well.
The equivalence is also the plainest way to say what the mechanism does: tokens start at $1 and are auctioned down to a cent, minimum, over ten minutes. No basis points required.
The day it caught one
The fee is not burned. In the original contract, buy-side fees accrued to the protocol and sell-side fees were split between the token’s deployer and its stakers. A later game built on the same curves routed 60 percent of every buy fee into the round’s prize pool. Either way, an attempted snipe pays the people the mechanism exists to protect.
That is not a theoretical property. In one round of the prize-pool variant, the payouts came out looking wrong: inflated, as if the pool held more money than the trading justified. A bot had been listening for the launch and had bought into two new markets in the round in the opening seconds, straight into the top of the auction. Nearly everything it spent went out as fees, most of that into the round’s prize pool, and that pool was then paid out to the humans who held the round’s winning token.
The two buys, 8 June 2025: 2,536 USDC at a 91 percent fee and 380 USDC at a 93 percent fee.
The people the sniper turned up to extract from finished the round better off than if it had stayed home. Blocking the bot could not have produced that outcome. Pricing it did.
The parameters are the design
The contract exposes the whole mechanism as four numbers, and every one of them is a judgement call.
| Parameter | At launch | What it sets |
|---|---|---|
swapFeeStartingBp | 9,900 (99%) | the opening fee |
swapFeeDecayBp | 100 (1 point) | how much each decay step removes |
swapFeeDecayInterval | 6 seconds | how often a step happens |
swapFeeFinalBp | 100 (1%) | the floor, the actual long-run fee |
Together the first three set the protected window: 98 steps of one point, six seconds apart, is 588 seconds from 99 percent to the floor. Long enough that a sniper’s timing advantage has rotted, short enough that a human who wants in early is not waiting an afternoon.
The floor is the real fee, and it has one side effect worth knowing about: because it never reaches zero, the effective price never quite touches the bare curve price. At a one percent floor, a $0.01 token costs $0.0101 forever. It is easy to assume a one percent floor means the token ends up at one cent exactly. It does not, and no decay schedule will make it.
The parameters did not survive later products unchanged, which is the point of making them parameters. The prize-pool game ran the same decay at one point every three seconds to a floor of 2.5 percent, compressing the auction into each market’s first five minutes.
The general idea
Most anti-bot measures try to tell bots and humans apart, which is a losing game because the only real difference is speed and capital.
Pricing is different. It does not need to identify anybody. It says that whatever you are, extraction at this moment costs this much, and it lets the economics do the filtering. That tends to hold up better than detection, because there is nothing to detect and therefore nothing to defeat.