pumpdotfun-sdk-sp
Version:
A simple SDK for interacting with pumpdotfun
78 lines (75 loc) • 4.46 kB
JavaScript
import { Program, BN } from '@coral-xyz/anchor';
import { pumpAmmJson as pump_amm_default, getPumpAmmProgram, canonicalPumpPoolPda, coinCreatorVaultAuthorityPda, coinCreatorVaultAtaPda, userVolumeAccumulatorPda, GLOBAL_VOLUME_ACCUMULATOR_PDA, PUMP_AMM_EVENT_AUTHORITY_PDA, GLOBAL_CONFIG_PDA } from './node_modules/@pump-fun/pump-swap-sdk/dist/esm/index.mjs';
import { PublicKey, SystemProgram } from '@solana/web3.js';
import { getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, NATIVE_MINT, TOKEN_PROGRAM_ID } from '@solana/spl-token';
const PUMPSWAP_PROTOCOL_FEE_RECIPIENT = new PublicKey("7hTckgnGnLQR6sdH7YkqFTAA7VwTfYFaZ6EhEsU3saCX");
class PumpSwapBondingSDK {
program;
offlineProgram;
connection;
constructor(provider) {
this.program = new Program(pump_amm_default, provider);
this.offlineProgram = getPumpAmmProgram(null);
this.connection = this.program.provider.connection;
}
async getBondingBuyInstructions(buyer, creator, mint, buyAmountToken, maxSolAmount) {
const poolId = canonicalPumpPoolPda(mint);
const baseTokenATA = getAssociatedTokenAddressSync(mint, buyer, true, TOKEN_2022_PROGRAM_ID);
const quoteTokenATA = getAssociatedTokenAddressSync(NATIVE_MINT, buyer, true, TOKEN_PROGRAM_ID);
const coinCreatorVaultAuthority = coinCreatorVaultAuthorityPda(creator);
const coinCreatorVaultAta = coinCreatorVaultAtaPda(coinCreatorVaultAuthority, NATIVE_MINT, TOKEN_PROGRAM_ID);
const poolBaseTokenAccount = getAssociatedTokenAddressSync(mint, poolId, true, TOKEN_2022_PROGRAM_ID);
const poolQuoteTokenAccount = getAssociatedTokenAddressSync(NATIVE_MINT, poolId, true, TOKEN_PROGRAM_ID);
const protocolFeeRecipientAta = getAssociatedTokenAddressSync(NATIVE_MINT, PUMPSWAP_PROTOCOL_FEE_RECIPIENT, true, TOKEN_PROGRAM_ID);
const userVolumeAccumulator = userVolumeAccumulatorPda(buyer);
console.log({
pool: poolId.toBase58(),
user: buyer.toBase58(),
globalConfig: GLOBAL_CONFIG_PDA.toBase58(),
baseMint: mint.toBase58(),
quoteMint: NATIVE_MINT.toBase58(),
userBaseTokenAccount: baseTokenATA.toBase58(),
userQuoteTokenAccount: quoteTokenATA.toBase58(),
poolBaseTokenAccount: poolBaseTokenAccount.toBase58(),
poolQuoteTokenAccount: poolQuoteTokenAccount.toBase58(),
protocolFeeRecipient: PUMPSWAP_PROTOCOL_FEE_RECIPIENT.toBase58(),
protocolFeeRecipientTokenAccount: protocolFeeRecipientAta.toBase58(),
quoteTokenProgram: TOKEN_PROGRAM_ID.toBase58(),
baseTokenProgram: TOKEN_2022_PROGRAM_ID.toBase58(),
program: this.program.programId.toBase58(),
coinCreatorVaultAuthority: coinCreatorVaultAuthority.toBase58(),
coinCreatorVaultAta: coinCreatorVaultAta.toBase58(),
eventAuthority: PUMP_AMM_EVENT_AUTHORITY_PDA.toBase58(),
globalVolumeAccumulator: GLOBAL_VOLUME_ACCUMULATOR_PDA.toBase58(),
userVolumeAccumulator: userVolumeAccumulator.toBase58(),
systemProgram: SystemProgram.programId,
});
return await this.offlineProgram.methods
.buy(new BN(buyAmountToken), new BN(maxSolAmount), false)
.accountsPartial({
pool: poolId,
user: buyer,
globalConfig: GLOBAL_CONFIG_PDA,
baseMint: mint,
quoteMint: NATIVE_MINT,
userBaseTokenAccount: baseTokenATA,
userQuoteTokenAccount: quoteTokenATA,
poolBaseTokenAccount: poolBaseTokenAccount,
poolQuoteTokenAccount: poolQuoteTokenAccount,
protocolFeeRecipient: PUMPSWAP_PROTOCOL_FEE_RECIPIENT,
protocolFeeRecipientTokenAccount: protocolFeeRecipientAta,
quoteTokenProgram: TOKEN_PROGRAM_ID,
baseTokenProgram: TOKEN_2022_PROGRAM_ID,
program: this.program.programId,
coinCreatorVaultAuthority: coinCreatorVaultAuthority,
coinCreatorVaultAta: coinCreatorVaultAta,
eventAuthority: PUMP_AMM_EVENT_AUTHORITY_PDA,
globalVolumeAccumulator: GLOBAL_VOLUME_ACCUMULATOR_PDA,
userVolumeAccumulator,
systemProgram: SystemProgram.programId,
})
.instruction();
}
}
export { PUMPSWAP_PROTOCOL_FEE_RECIPIENT, PumpSwapBondingSDK };
//# sourceMappingURL=pumpswap.mjs.map