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.
- 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#
| Field | Value at launch | Stored on chain as |
|---|---|---|
| Virtual SOL reserves | 30 SOL | 30,000,000,000 lamports |
| Virtual token reserves | 1,073,000,000 tokens | 1,073,000,000,000,000 base units |
| Real SOL reserves | 0 SOL | 0 |
| Real token reserves | 793,100,000 tokens | 793,100,000,000,000 base units |
| Total supply | 1,000,000,000 tokens | 6 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 curve | Tokens for 1 SOL | Market cap | Progress bar |
|---|---|---|---|
| 0 | 34.61 M | 27.96 SOL | 0% |
| 10 | 19.63 M | 49.70 SOL | 33.8% |
| 20 | 12.62 M | 77.66 SOL | 54.1% |
| 40 | 6.48 M | 152.22 SOL | 77.3% |
| 60 | 3.93 M | 251.63 SOL | 90.2% |
| 80 | 2.64 M | 375.89 SOL | 98.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.
| Progress | Real SOL in the curve | Market cap |
|---|---|---|
| 10% | 2.39 SOL | 32.6 SOL |
| 25% | 6.80 SOL | 42.1 SOL |
| 50% | 17.59 SOL | 70.3 SOL |
| 75% | 37.32 SOL | 140.8 SOL |
| 90% | 59.61 SOL | 249.5 SOL |
| 100% | 85.01 SOL | 410.9 SOL |
Reading a curve yourself#
- Open the token on Solscan. The bonding curve account appears near the top of the holder list.
- Its token balance is the whole unsold supply, including the 206.9 million kept back. Add 73,000,000 to get y.
- Work out x = 32,190,000,000 / y, or read the virtual SOL reserve directly if the explorer decodes the account.
- 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#
- Pump.fun public documentation on GitHub, for the bonding curve account fields and how buys and sells update them.
- The Block on the PumpSwap launch, for the March 2025 move from Raydium to PumpSwap.
- Uniswap v2 documentation, for the constant product rule the curve's pricing follows.
- Solana documentation on accounts, for how program state is stored and read.