Bonding curve
Pricing math, the phantom reserve, graduation condition, and the opening snipe tax.
Each launch trades on its own BondingCurve contract — a constant-product
curve with a phantom (virtual) quote reserve so the opening price is
non-zero.
Pricing
Quotes use the pricing reserves:
x · y = k
x = realQuoteReserve + phantomQuote
y = tokenReserveA buy of netIn quote (after fees) receives:
tokensOut = (y · netIn) / (x + netIn)With the default config — supply 1,000,000,000 tokens, phantom reserve 1.68 ETH, graduation threshold 4.2 ETH — the phantom reserve sets the opening market cap, and the pool receives the collected 4.2 ETH at graduation.
Reserved tokens and graduation
A slice of supply is reserved for the graduated pool and can never be bought on the curve:
reservedTokens = supply · phantomQuote / (phantomQuote + graduationThreshold)The curve graduates when sellableTokens() == 0 — that is, when everything
except the reserved allocation has been bought. At that point
realQuoteReserve equals the graduation threshold (in net terms), and the
terminal buy sweeps the curve automatically.
The token page shows graduation progress from realQuoteReserve — the actual
paired amount, never the phantom.
Trade fees
On every buy and sell:
- Curve fee — 1% (
feeBps = 100on the default config). - Creator tax — 0–10%, set per-launch by the creator.
- A buyer always nets at least 1% of their spend — fee, tax, and snipe tax combined can never take the whole trade.
The snipe tax
Buys in the first 3 seconds after launch pay an extra tax that starts at 99% and decays linearly to zero:
snipeTax(t) = 9900 bps · (1 − t / 3s) for 0 ≤ t < 3sThe tax is keyed on the recipient of the tokens. The creator, the creator fee recipient, and up to 32 launch-listed wallets are exempt. Sells never pay it.
Safety properties
- Sells always work. The emergency trading pause only blocks buys.
- Slippage + deadline are enforced on-chain for every trade.
- Terminal buys clamp, never overshoot — the buy that crosses the threshold fills to the edge and refunds the difference in-transaction.