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