- pump.fun tokens start on a bonding curve and, once it completes, graduate to PumpSwap — pump.fun’s own AMM (program
pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA). - Before March 2025, graduated tokens migrated to Raydium. pump.fun launched PumpSwap on Mar 20, 2025, and graduations have gone there ever since — Raydium is now a rare legacy path.
- Use
get_bonding_curve_status.pyto check whether a token’s curve is still active or completed. - Use
listen_logsubscribe.py(logsSubscribe on the migration program) orlisten_programsubscribe.py(programSubscribe on the PumpSwap program) to track live graduations.
Main article
For the full pump.fun bot, see Solana: Creating a trading and sniping pump.fun bot. See also Solana: Listening to pump.fun token mint using only logsSubscribe. This article is an add-on for these scripts in the pump-fun-bot repository:get_bonding_curve_status.py
listen_logsubscribe.py
listen_programsubscribe.py
compare_migration_listeners.py
Prerequisites
Get your own reliable Solana RPC endpoint today
Deploy a reliable Solana RPC endpoint to get started.Start for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.- Clone the pump-fun-bot GitHub repository
- Install the requirements
pip install -r requirements.txt - Provide the node HTTP and WebSocket endpoints in your
.envfile
Understanding pump.fun token graduation
Tokens on pump.fun start trading against a bonding curve—a mathematical formula that determines the token’s price based on supply and demand. Once the curve’scomplete flag flips to true, the token “graduates” and its liquidity migrates to an AMM.
A token graduates when:
- The bonding curve reaches completion status (tracked by the
completeflag in the curve’s state) - The accumulated SOL in the curve reaches the graduation threshold
- The migration transaction is executed by the protocol
pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA. Migration is now handled by a permissionless migrate instruction that creates a PumpSwap pool and burns the LP tokens (locking the liquidity). Before PumpSwap launched, graduations went to Raydium; that path is effectively retired.
After graduation, trading moves from the bonding curve to PumpSwap’s constant-product AMM:
- Trading mechanics change from bonding curve to AMM
- Liquidity is held in a PumpSwap pool
- The token becomes tradable through the PumpSwap program and any aggregator that routes to it
Monitoring tools
This guide covers the scripts for tracking graduation:get_bonding_curve_status.py— checks whether a token is still on the bonding curve or has completed and graduatedlisten_logsubscribe.py— monitors real-time graduations by listening to the migration program’s eventslisten_programsubscribe.py— monitors real-time graduations by watching for new PumpSwap pool accountscompare_migration_listeners.py— runs both listeners side by side to compare detection latency
Checking bonding curve status
Theget_bonding_curve_status.py script lets you check whether a token’s bonding curve is still active or has completed and graduated. It derives the bonding curve address from the token mint and makes a getAccountInfo | Solana call to read the curve state from the pump.fun program (6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P).
The bonding curve account layout has evolved. The current state includes a
creator field (and an is_mayhem_mode flag), so make sure your decoder matches the latest account struct in the repository’s get_bonding_curve_status.py. The complete flag itself is unchanged.Usage
TOKEN_ADDRESS with the Solana address of the token you want to check.
Example output
For a completed (graduated) bonding curve:Monitoring graduations in real time
There are two reliable ways to detect a graduation, and the repository ships a script for each. Option 1 — listen to the migration program (logsSubscribe). The migration wrapper program 39azUYFWPz3VHgKCf3VChUwbpURdCHRxjWVowf5jUJjg emits aMigrate event when a token graduates. listen_logsubscribe.py subscribes with logsSubscribe | Solana, parses the event, and prints the migration signature, the token mint, and the new PumpSwap pool address. The event carries the baseMint, quoteMint, decimals, and the base/quote amounts deposited into the pool.
Option 2 — watch for new PumpSwap pools (programSubscribe). listen_programsubscribe.py subscribes to the PumpSwap program pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA and detects new pool (market) accounts as they are created, filtering by the pool account discriminator and length. This catches every new pool, but consumes a high volume of WebSocket messages.
Run compare_migration_listeners.py to run both at once and measure which detects a given graduation first across your RPC providers.
Usage
Example output
When a graduation occurs:Important for production:
logsSubscribe and programSubscribe can experience stability issues and dropped messages with high-traffic programs, including connection errors and data skipping. For production monitoring, consider using Geyser as recommended by the Solana team for more reliable streaming. Learn more about Yellowstone Geyser.Use cases
These monitoring tools are particularly useful for:- Traders who need to adjust their strategies when trading moves to PumpSwap
- Arbitrage bots that operate differently on bonding curves vs AMMs
- Market makers looking to provide liquidity as soon as tokens graduate
- Sniping successful tokens on PumpSwap early
- Analytics tools tracking the pump.fun ecosystem
