UNPKG

pumpdotfun-sdk-sp

Version:

A simple SDK for interacting with pumpdotfun

78 lines (75 loc) 4.46 kB
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