The bonding curve, live
Every PumpFun token starts on a constant-product curve with virtual reserves. Buy or sell and watch the price move along it
Curve progress 0%
x = virtual SOL · y = virtual tokens
price = x / y
What the program actually does
A simplified tour of the main instructions. Exact account lists and arguments live in the public IDLs
Who holds what
Global
Program-wide settings: fee config, initial curve parameters, authority
BondingCurve
Per-token state: virtual and real reserves, supply, and a complete flag
Curve token account
Holds the tokens the curve sells to buyers
Event authority
Signs the self-CPI that emits trade and create events indexers read
From create to migrate
create
Mint, metadata and a fresh bonding curve account are set up
buy / sell
Trades move along the curve. Fees go to the configured recipients
complete
When the curve sells its real token reserve, it is marked complete
migrate
Liquidity moves to the AMM pool and trading continues there
We rebuilt the program from the binary
We wanted to see whether PumpFun's onchain program could be recovered without its original source code. So we pulled the deployed binary and reverse-engineered it into a readable implementation. Our reconstruction and analysis are on GitHub. A closer look under the hood of the pump 🟢
1. pull the deployed program binary (.so)
2. disassemble the sBPF bytecode
3. map instructions, accounts & checks
4. rewrite it as readable code
5. compare behaviour with public IDLs
pumpfun-research/
└── pumpfun-research 2/ // reconstruction + analysis
$ git clone …
Under the hood of PumpFun: onchain instructions, accounts & trading mechanics. Public docs, IDLs and code on GitHub ↓
Read the thread on X →