Skip to main content

Buy and sell on PumpFun bonding curves + PumpSwap AMM. Directly from Python.

Project description

pumpfun-python

Buy and sell on PumpFun bonding curves + PumpSwap AMM. Directly from Python. No Jupiter needed.

Python 3.10+ License: MIT Typed


Why?

PumpFun tokens start on a bonding curve and graduate to a PumpSwap AMM pool. Jupiter doesn't always route through these — and when it does, you're at the mercy of their routing engine. This library builds the raw Solana instructions so you can swap directly.

  • Pre-graduation — buy/sell against the PumpFun bonding curve (v2, 16/14 accounts)
  • Post-graduation — swap on PumpSwap AMM pools (constant-product, 13 accounts)
  • Zero dependencies beyond solders + httpx — no SDK bloat
  • Production-tested — extracted from a live trading system

Install

pip install pumpfun-python

Or from source:

pip install git+https://github.com/JinUltimate1995/pumpfun-python.git

Quick Start

💰 Calculate buy/sell amounts (no RPC needed)

from pumpfun import calculate_buy_amount, calculate_sell_amount

# How many tokens for 0.1 SOL?
tokens = calculate_buy_amount(
    sol_amount_lamports=100_000_000,  # 0.1 SOL
    virtual_sol_reserves=30_000_000_000,
    virtual_token_reserves=1_000_000_000_000,
)
print(f"Tokens received: {tokens:,}")

# How much SOL for selling 1M tokens?
sol_out = calculate_sell_amount(
    token_amount=1_000_000,
    virtual_sol_reserves=30_000_000_000,
    virtual_token_reserves=1_000_000_000_000,
)
print(f"SOL received: {sol_out / 1e9:.6f}")

📈 Read bonding curve state

RPC calls require your own Solana RPC endpoint. Get a free key from Helius, QuickNode, or use the public endpoint (rate-limited).

import asyncio
from pumpfun import fetch_bonding_curve_state

async def main():
    state = await fetch_bonding_curve_state(
        rpc_url="https://api.mainnet-beta.solana.com",
        token_mint="YourTokenMintAddress",
    )
    print(f"Reserves: {state.virtual_sol_reserves} SOL, {state.virtual_token_reserves} tokens")
    print(f"Complete (graduated): {state.complete}")
    print(f"Creator: {state.creator}")

asyncio.run(main())

🔨 Build a buy instruction

from solders.pubkey import Pubkey
from pumpfun import build_buy_instruction, get_bonding_curve_pda

user = Pubkey.from_string("YourWalletAddress")
token_mint = Pubkey.from_string("TokenMintAddress")
bonding_curve = get_bonding_curve_pda(token_mint)

ix = build_buy_instruction(
    user=user,
    token_mint=token_mint,
    bonding_curve=bonding_curve,
    sol_amount_lamports=100_000_000,  # 0.1 SOL max
    min_tokens_out=950_000,           # slippage protection
    creator=Pubkey.from_string("CreatorAddress"),
    fee_recipient=Pubkey.from_string("62qc2CNXwrYqQScmEdiZFFAnJR262PxWEuNQtxfafNgV"),
)
# Add `ix` to your transaction

🏊 PumpSwap AMM swap

from pumpfun import calculate_swap_output, build_swap_instruction, fetch_pool_state

# Read pool state
pool = await fetch_pool_state(rpc_url, "PoolAddress")

# Calculate output
amount_out, fee = calculate_swap_output(
    amount_in=100_000_000,  # 0.1 SOL
    reserve_in=5_000_000_000,
    reserve_out=1_000_000_000_000,
    lp_fee_bps=pool.lp_fee_basis_points,
    protocol_fee_bps=pool.protocol_fee_basis_points,
)

API Reference

Bonding Curve (pre-graduation)

Function Description
calculate_buy_amount() Tokens received for SOL input (1% fee)
calculate_sell_amount() SOL received for token input (1% fee)
build_buy_instruction() Build PumpFun v2 BUY ix (16 accounts)
build_sell_instruction() Build PumpFun v2 SELL ix (14 accounts)
fetch_bonding_curve_state() Read reserves, creator, completion from chain
fetch_fee_recipient() Read fee recipient from Global account

PumpSwap AMM (post-graduation)

Function Description
calculate_swap_output() Output amount for constant-product swap
build_swap_instruction() Build PumpSwap swap ix (13 accounts)
fetch_pool_state() Read pool vaults, mints, fees from chain

PDA Helpers

Function Description
get_bonding_curve_pda() Derive bonding curve PDA for a mint
get_associated_token_address() Derive ATA (SPL Token or Token-2022)

Constants

All program IDs are exported: PUMP_FUN_PROGRAM, PUMP_SWAP_PROGRAM, PUMP_AMM_PROGRAM, plus system programs, discriminators, and fee accounts.


Account Layout Notes

BUY instruction uses 16 accounts + 1 remaining account (bonding-curve-v2 PDA).

SELL instruction uses 14 accounts + 1 remaining — but creator_vault [8] and token_program [9] are SWAPPED relative to buy. This is an undocumented PumpFun quirk that causes failed transactions if you copy the buy layout.

Pump AMM pools (pAMMBay program) can have reversed base/quote — base_mint=SOL, quote_mint=TOKEN. The PoolState.base_is_sol flag indicates this.


Also by JinUltimate1995


License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pumpfun_python-0.1.0.tar.gz (14.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pumpfun_python-0.1.0-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file pumpfun_python-0.1.0.tar.gz.

File metadata

  • Download URL: pumpfun_python-0.1.0.tar.gz
  • Upload date:
  • Size: 14.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for pumpfun_python-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e3cd2e628704970153438b6f46b12ba2101a815c0d346f4620709c73c899e8e6
MD5 2fe5278679e6808fc1f8d06960b9e540
BLAKE2b-256 e9d89ab1d8e8c90d855c74400e71c644815ae3d71192a70fcaa3af61424ac8e5

See more details on using hashes here.

File details

Details for the file pumpfun_python-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pumpfun_python-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for pumpfun_python-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e38d06891ca3495a7e092faef6ec96de18c1f55c48b81a9c45f8b2b9b5d93501
MD5 499c8c85dab0a7914926ead03d655aef
BLAKE2b-256 968a102c3128e37712450c70cd31279202f49462e5b5a204bdba19cdec37e033

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page