PumpCrateDocs
  1. Docs
  2. Pump.fun mechanics
  3. Bonding curve

Pump.fun bonding curve reference

Every standard Pump.fun token starts from the same constants and prices itself with the same rule. This page sets out both, with the numbers worked through, so you can check any figure on a token page yourself.

Updated 5 min readBy the PumpCrate team
Virtual SOL at launch
30 SOL
Virtual tokens at launch
1,073,000,000
Sold on the curve
793,100,000
Total supply
1,000,000,000
Real SOL at completion
about 85.005
Price, start to end
about 14.7x

The curve account#

A Pump.fun bonding curve is a Solana account owned by the Pump.fun program. Four of its fields drive pricing: the virtual SOL reserves, the virtual token reserves, the real SOL reserves and the real token reserves. A buy raises both SOL fields and lowers both token fields; a sell does the opposite. Pump.fun's public developer documentation on GitHub lists these fields.

The virtual reserves are what the pricing formula uses. The real reserves are what is actually held. The virtual offset gives a new token a sensible starting price without anyone depositing SOL first.

Standard starting values#

FieldValue at launchStored on chain as
Virtual SOL reserves30 SOL30,000,000,000 lamports
Virtual token reserves1,073,000,000 tokens1,073,000,000,000,000 base units
Real SOL reserves0 SOL0
Real token reserves793,100,000 tokens793,100,000,000,000 base units
Total supply1,000,000,000 tokens6 decimal places

A lamport is a billionth of a SOL. Token amounts carry six decimals. If raw account data looks absurdly large, divide SOL fields by 1,000,000,000 and token fields by 1,000,000.

Notation#

  • x: virtual SOL reserve, starts at 30.
  • y: virtual token reserve, starts at 1,073,000,000.
  • k: x × y = 32,190,000,000, constant while the token is on the curve.
  • r: real SOL bought into the curve so far, so x = 30 + r.
  • s: tokens sold out of the curve so far, so y = 1,073,000,000 - s.

Price and market cap#

price = x / y = x² / k

The price depends only on how much SOL is in the curve and grows with its square. Double the virtual SOL and the price is four times higher. Market cap is the price times the 1,000,000,000 supply:

market cap in SOL = x² / 32.19

At launch x = 30, so the market cap is about 27.96 SOL and the price about 0.000000028 SOL per token.

Completion and migration#

The curve completes when its real token reserve reaches zero, meaning all 793,100,000 sellable tokens have been bought:

  • y = 1,073,000,000 - 793,100,000 = 279,900,000
  • x = k / y = about 115.005 SOL
  • r = x - 30 = about 85.005 SOL of real buys
  • market cap = 115.005² / 32.19 = about 410.9 SOL

The roughly 85 SOL figure is not a target someone picked; it follows from the constants. The 206,900,000 tokens not sold on the curve are kept back for liquidity when the token moves to its pool. Since March 2025 that pool has been on PumpSwap. PumpCrate sessions follow the token through this move; see Migration during a session.

Tokens from a buy, SOL from a sell#

tokens received for b SOL = y × b / (x + b)

SOL received for t tokens = x × t / (y + t)

Buying then immediately selling the same tokens, with nothing in between, returns exactly the SOL spent before fees, because the reserves go back to where they started.

What 1 SOL buys along the curve#

Real SOL in the curveTokens for 1 SOLMarket capProgress bar
034.61 M27.96 SOL0%
1019.63 M49.70 SOL33.8%
2012.62 M77.66 SOL54.1%
406.48 M152.22 SOL77.3%
603.93 M251.63 SOL90.2%
802.64 M375.89 SOL98.4%

All figures are before trading fees.

The progress bar#

The bar on a token page tracks tokens sold, not SOL:

progress = s / 793,100,000 = (1,073,000,000 - y) / 793,100,000

Because each SOL buys fewer tokens as the curve fills, the bar moves quickly at first and slowly at the end. Half the bar costs about 17.59 SOL, the other half about 67.4 SOL. From 90% to 100% alone costs about 25.4 SOL.

ProgressReal SOL in the curveMarket cap
10%2.39 SOL32.6 SOL
25%6.80 SOL42.1 SOL
50%17.59 SOL70.3 SOL
75%37.32 SOL140.8 SOL
90%59.61 SOL249.5 SOL
100%85.01 SOL410.9 SOL

Reading a curve yourself#

  1. Open the token on Solscan. The bonding curve account appears near the top of the holder list.
  2. Its token balance is the whole unsold supply, including the 206.9 million kept back. Add 73,000,000 to get y.
  3. Work out x = 32,190,000,000 / y, or read the virtual SOL reserve directly if the explorer decodes the account.
  4. Use the formulas above.
K = 30 * 1_073_000_000
SELLABLE = 793_100_000
VIRTUAL_START = 1_073_000_000

def y_from_x(x):
    return K / x

def market_cap(x):
    return x * x / K * 1_000_000_000

def tokens_for_buy(x, b):
    return y_from_x(x) * b / (x + b)

def progress(x):
    return (VIRTUAL_START - y_from_x(x)) / SELLABLE

x = 30 + 20
print(round(market_cap(x), 2), round(tokens_for_buy(x, 1) / 1e6, 2), round(progress(x) * 100, 1))

Run as written, it prints 77.66, 12.62 and 54.1 for a curve holding 20 SOL of real buys, matching the tables.

These are the constants of the standard curve. Pump.fun has changed parameters over its history and may again. If a token's account shows different starting reserves, use its own numbers in the same formulas. Fees are left out on purpose because their rates have changed several times; check the token page at the time of a trade.

A longer walkthrough with examples is in our Medium article How the Pump.fun bonding curve prices a token, step by step.

Sources#

Something unclear or out of date on this page? Tell us on Telegram at @pump_crate_bot or by email at support@pumpcrate.com.