Virtual reserves
The curve is a constant product over virtual reserves, the same shape popularized by pump.fun. At market creation, the reserves are seeded from parameters, not from real deposits:curve_virtual_sol: virtual SOL reserve, in lamportscurve_virtual_tokens: virtual token reserve, in base units


Market cap is quadratic in the raise; half the float sells in the first 25 SOL.
curve_virtual_tokens = 1e15 base units) against 25 SOL of virtual SOL (curve_virtual_sol), so every token opens at 0.025 SOL per unit (1M tokens), a 25 SOL market cap. With the 100 SOL graduation target, constant-product algebra sells 800M tokens over the raise and multiplies the price by exactly ((v_sol + raise) / v_sol)^2 = 25: the curve closes at 0.625 SOL per unit, about a 625 SOL market cap. The collectible enters only through the launch-scaled Price Index: at launch one unit is defined as worth 0.625 SOL, the curve’s closing price, so the AMM seeds at exactly zero premium to the index (see The Synth Token for the unit math).
Buying
curve_buy(sol_in, min_tokens_out) deducts the fee from the SOL side, then swaps against the invariant:
v_sol += net_in,v_tok -= tokens_out(price moves up the curve)curve_sol_raised += net_in,curve_tokens_sold += tokens_outfee_lamports += fee
sol_in lands in the market’s SOL vault. Tokens are transferred from the preminted curve allocation (the pool account funded at create_market, before the mint authority was revoked) to the buyer’s associated token account. The curve never mints; it sells down a fixed allocation.
min_tokens_out is the slippage guard: the transaction fails with Slippage if the curve has moved against you.
Selling
Sells are allowed during Bootstrap; the curve runs in both directions.curve_sell(tokens_in, min_sol_out) is the mirror image:
curve_sol_raised and curve_tokens_sold step back down. Two guards apply: you cannot sell more than curve_tokens_sold (the curve never goes short of its own history), and the payout can never exceed the SOL actually raised.
What backs curve tokens
Tokens bought on the curve are backed by the SOL sitting in the vault, exactly like any launchpad token. They are not collateralized by shorts. Short-collateralized supply only exists after graduation, when CDP shorts open. The tranches are fungible in your wallet but their backing differs.
Ending the phase
The curve runs untilcurve_sol_raised reaches graduation_target_sol, at which point the market migrates to Live. graduate is permissionless, and in practice nobody needs to call it manually: the indexer keeper sweeps bootstrap markets on a short interval (and immediately after every CurveTraded event) and cranks the transition as soon as the target is met. Curve instructions refuse to run afterward (NotBootstrap), and AMM instructions refuse to run before (NotLive).
- Instructions:
curve_buy,curve_sell, see Instructions - Event:
CurveTraded { market, user, is_buy, sol_amount, token_amount } - Parameters:
curve_virtual_sol,curve_virtual_tokens,curve_fee_bps,graduation_target_sol, see Parameters


The same 1 SOL buy at every point on the curve: early SOL buys about 20x the tokens and moves price about 5x harder.

