debpf
Live now: decompiling PumpSwap→

Read the code your money trusts.

Almost every Solana program ships as sealed bytecode. debpf’s agents decompile it live, then prove each reconstruction by replaying real mainnet transactions until every balance matches.

pump.fun/buy
01mov64 r6, r5
02mov64 r9, r4
03mov64 r8, r3
04mov64 r7, r2
05stxdw [r10-2160], r1
06lddw r1, 0x1acd30 ; "Instruction: Buy"
07mov64 r2, 0x10
08call sol_log_
09ldxdw r1, [r6-4088]
10jlt r1, 0x8, +35 ; -> 24882
11mov64 r2, r1
12and64 r2, -0x8
13jeq r2, 0x8, +32 ; -> 24882
14ldxdw r2, [r6-4096]
15ldxdw r3, [r2+0]
16ldxdw r4, [r2+8]
17jne r1, 0x10, +51 ; -> 24899
18mov64 r6, 0x0
19mov64 r5, 0x0
20stxdw [r10-2184], r5
21stxdw [r10-2176], r4
22stxdw [r10-2168], r3
01pub fn buy(ctx, amount: u64, max_sol_cost: u64, track_volume: OptionBool, cap_to_reserves: bool /* not in IDL */) -> Result<()> {
02 msg!("Instruction: Buy");
03 buy_try_accounts(ctx)?; // fn_2cd81: PDAs, owners, ATAs, signer(user)
04 ensure_bonding_curve_size(bonding_curve, 166)?; // fn_076ea: realloc old curves, user pays rent
05 check_fee_recipient(global, bonding_curve, fee_recipient)?; // fn_078ef, err 6000 NotAuthorized
06 let buyback_recipient = load_buyback_recipient(remaining_accounts, 1, global)?; // err 6062 if missing
07 require!(!bonding_curve.complete, BondingCurveComplete); // 6005, pc 2891b
08 let mut amount = amount;
09 if cap_to_reserves { amount = min(amount, bonding_curve.real_token_reserves); } // pc 28921
10 require!(amount != 0, 6020 /*zero amount*/); // pc 28924
11 require!(amount <= bonding_curve.real_token_reserves, 6021 /*NotEnoughTokensToBuy*/);
12 require!(amount < bonding_curve.virtual_token_reserves, Overflow /*6024/6026*/);
13 let sol_cost = amount * virtual_sol_reserves / (virtual_token_reserves - amount) + 1; // floor + 1
14 let creator_bps = if global.flag_1086 && curve.creator_bps_override != 0 { override } else { creator_bps };
15 let mut protocol_fee = ceil(sol_cost * protocol_bps / 10_000);
16 let mut creator_fee = if bonding_curve.creator != Pubkey::default() { ceil(sol_cost * creator_bps / 10_000) } else { 0 };
17 if user.key == global.whitelist_pda { // pc 289ef: fee-exempt address
18 protocol_fee = 0; creator_fee = 0; protocol_bps = 0; creator_bps = 0;
19 }
20 let total = sol_cost.checked_add(protocol_fee)?.checked_add(creator_fee)?;
21 require!(total <= max_sol_cost, TooMuchSolRequired /*6002*/); // pc 28a16 (slippage)
22 bonding_curve.virtual_token_reserves -= amount;
21
programs on record
345
functions decompiled
179
mainnet txs reproduced exactly
21
hidden instructions found

Findings

What the code actually says.

Pulled from the bytecode and checked on-chain. Every claim links to the program it came from.

Your wallet

Who can rewrite the code you’ve trusted?

We read a wallet’s last 300 transactions, list every program its money passed through, and check whether one key can replace that program’s code tonight.

Live

Watch a program being opened.

Agents read the bytecode function by function. Names come into focus as each one is understood.

Reading now· AMM
PumpSwap

pAMMBa…FMfXEA · 10.5 MB · 141,192 instructions · upgradeable

1%
functions decompiled
0/10
live instructions proven
12
hidden instructions
Functions5 of 637 named
  1. 02900admin_cto_pool_logic769 ops
  2. 03fb7ydjpvagmsydjpvag1,197 ops
  3. 0504dlqv_ejotychmrwafkp1,378 ops
  4. 055dfonmlkjihgfedcb1,280 ops
  5. 07189dysmgavpjdysmgavpjdysmga1,359 ops
  6. 07736onmlkjihgfedcba_zyxwvutsrqpon1,192 ops
  7. 07cffjsajsajsajsajsajsa1,800 ops
  8. 085d9hugtfserdqcpboan_mzlykxjw2,114 ops
  9. 0df82b_ywusqomki2,713 ops
  10. 0ebc5error_code_names434 ops
  11. 10763lqv_ejotychmrwafkpuzdinsxbg1,294 ops
  12. 10fd7gvjymapdsgvjymap1,299 ops
  13. 1245cpmjgdayvspmjgdayvspmjgdayvsp1,316 ops
  14. 129b2_bdfhjlnprt1,953 ops
  15. 14ab4wfpzisblveoyhrakudnxgq_jt2,171 ops
  16. 15b36rkdxqjcwpibvoh1,157 ops
  17. 1693fpmjgdayvspmjgdayvspmj1,426 ops
  18. 173adsjasjasjasjasjasja1,765 ops
  19. 1850cqlgbxsnidzupkfawrmhcytoje1,293 ops
  20. 1abeeanchor_dispatch763 ops
  21. 1d060entrypoint55 ops
  22. 1feb5deserialize_input404 ops
Open the full program →
Bytecode
; waiting for an agent to open a function
Reconstructed
// the first reconstructed handler appears here

Findings

3 so far
Upgradeable program: one key can replace all PumpSwap code
12 instructions in the binary are missing from the published IDL
Admin in GlobalConfig controls fees, fee recipients, pausing and the admin role

How it works

Bytecode in. Source out. Proven on mainnet.

01

Pull the binary

We fetch the exact ELF the program runs from mainnet, disassemble every sBPF instruction, recover its strings, and compare the handlers inside against the interface the team published. Anything missing from that interface is flagged as hidden.

02

Reconstruct the source

Agents follow the calls the way a reverse engineer would: the math, the checks, every call into another program. They publish readable Rust next to the bytecode it came from, and name each function as they understand it.

03

Prove it

Each instruction gets an executable model, and real mainnet transactions are replayed through it. A third are withheld from the agent entirely. A transaction only counts if every SOL and token movement matches exactly.

Programs

Opened so far.

All programs →

Queue

Choose what gets opened next.

Any deployed program: a DEX, a lending market, a launchpad, a staking pool, the hook on a token you hold.

Up next17 programs
  1. 1Drift ProtocolPerps2h ago
  2. 2Orca WhirlpoolsAMM2h ago
  3. 3MarinadeLiquid staking2h ago
  4. 4Meteora DLMMAMM2h ago
  5. 5Magic EdenNFT marketplace2h ago
  6. 6marginfiLending2h ago
  7. 7Jupiter PerpsPerps2h ago
  8. 8Squads MultisigWallet infra2h ago
  9. 9Meteora DBCLaunchpad2h ago
  10. 10Jito Tip DistributionMEV2h ago

$DEBPF

The work pays for itself, in public.

Contract address posts here and on X at launch.
  • Fees fund the agents. Every decompile and every replay is paid for by creator fees.
  • Holders set the queue. The bigger the holding, the sooner your program is opened.
  • Everything stays public. Every reconstruction is free to read, forever.
  • Spend is on the record. Cost and output show on each program as they happen.