Pump.fun Anchor SDK: IDL & CPI only Solana program (smart contract)
Pump.fun Anchor SDK
An unofficial Pump.fun Solana program SDK written in Rust and Anchor.
Features
- Typescript Anchor IDL
global accounts and bonding_curve accounts
- listening to on-chain pump events for observing new pump creations, pump swaps, etc.
- Rust API
Usage
Typescript Client
Install npm package pump-anchor-idl:
npm install --save pump-anchor-idl
Example
import { Program } from "@coral-xyz/anchor";
import idl from "pump-anchor-idl";
const pumpProgram = new Program(idl, anchorProvider);
const FEERECIPIENTADDRESS = new PublicKey( "CebN5WGQ4jvEPvsVU4EoHEpgzq1VV7AbicfhtW4xC9iM" );
async function pumpBuy(wallet: Keypair, mint: PublicKey, amount: BN, maxSolCost: BN) { const tokenAccount = getAssociatedTokenAddressSync(mint, wallet.publicKey, true); const createTokenAccountInstruction = createAssociatedTokenAccountInstruction( wallet.publicKey, tokenAccount, wallet.publicKey, mint, );
return await pumpProgram.methods .buy(amount, maxSolCost) .accounts({ mint, associatedUser: tokenAccount, feeRecipient: FEERECIPIENTADDRESS, program: pumpProgram.programId, }) .preInstructions([createTokenAccountInstruction]) .signers([wallet]) .rpc(); }
Rust Client or On-chain Program
Add dependencies in Cargo.toml:
[dependencies]
pump = { git = "https://github.com/s6nqou/pump-anchor", package = "pump", features = ["cpi"] }
for on-chain program
anchor-lang = { version = "0.30.1" }
for client
anchor-client = { version = "0.30.1" }
Example: Cross-program invocations (CPI)
pub fn custompumpbuy(ctx: Context<CustomPumpBuy>, amount: u64, maxsolcost: u64) -> Result<()> {
pump::cpi::buy(
CpiContext::new(
ctx.accounts.pumpprogram.toaccount_info(),
pump::cpi::accounts::Buy {
global: ctx.accounts.global.toaccountinfo(),
feerecipient: ctx.accounts.feerecipient.toaccountinfo(),
mint: ctx.accounts.mint.toaccountinfo(),
bondingcurve: ctx.accounts.bondingcurve.toaccountinfo(),
associatedbondingcurve: ctx.accounts.associatedbondingcurve.toaccountinfo(),
associateduser: ctx.accounts.associateduser.toaccountinfo(),
user: ctx.accounts.user.toaccountinfo(),
systemprogram: ctx.accounts.systemprogram.toaccountinfo(),
tokenprogram: ctx.accounts.tokenprogram.toaccountinfo(),
rent: ctx.accounts.rent.toaccountinfo(),
eventauthority: ctx.accounts.eventauthority.toaccountinfo(),
program: ctx.accounts.pumpprogram.toaccount_info(),
},
),
amount,
maxsolcost,
)?;
}
Example: Rust Anchor Client
Versions
anchor-lang = 0.30.1