UNPKG

@pump-fun/pump-swap-sdk

Version:

Official SDK for interacting with Pump Swap AMM protocol on Solana

395 lines (347 loc) 10.1 kB
import { AccountInfo, Connection, PublicKey, TransactionInstruction, } from "@solana/web3.js"; import { depositLpToken } from "./deposit"; import { CollectCoinCreatorFeeSolanaState, CreatePoolSolanaState, DepositBaseAndLpTokenFromQuoteResult, DepositQuoteAndLpTokenFromBaseResult, GlobalConfig, GlobalVolumeAccumulator, LiquiditySolanaState, SwapSolanaState, UserVolumeAccumulator, WithdrawAutocompleteResult, } from "../types/sdk"; import { PumpAmmInternalSdk } from "./pumpAmmInternal"; import { PUMP_AMM_PROGRAM_ID } from "./pda"; import BN from "bn.js"; export class PumpAmmSdk { private readonly pumpAmmInternalSdk: PumpAmmInternalSdk; constructor(connection: Connection, programId: string = PUMP_AMM_PROGRAM_ID) { this.pumpAmmInternalSdk = new PumpAmmInternalSdk(connection, programId); } programId(): PublicKey { return this.pumpAmmInternalSdk.programId(); } globalConfigKey(): PublicKey { return this.pumpAmmInternalSdk.globalConfigKey(); } poolKey( index: number, creator: PublicKey, baseMint: PublicKey, quoteMint: PublicKey, ): [PublicKey, number] { return this.pumpAmmInternalSdk.poolKey(index, creator, baseMint, quoteMint); } lpMintKey(pool: PublicKey): [PublicKey, number] { return this.pumpAmmInternalSdk.lpMintKey(pool); } fetchGlobalConfigAccount() { return this.pumpAmmInternalSdk.fetchGlobalConfigAccount(); } fetchPool(pool: PublicKey) { return this.pumpAmmInternalSdk.fetchPool(pool); } decodeGlobalConfig( globalConfigAccountInfo: AccountInfo<Buffer>, ): GlobalConfig { return this.pumpAmmInternalSdk.decodeGlobalConfig(globalConfigAccountInfo); } decodePool(poolAccountInfo: AccountInfo<Buffer>) { return this.pumpAmmInternalSdk.decodePool(poolAccountInfo); } fetchGlobalVolumeAccumulator(): Promise<GlobalVolumeAccumulator> { return this.pumpAmmInternalSdk.fetchGlobalVolumeAccumulator(); } decodeGlobalVolumeAccumulator( globalVolumeAccumulatorAccountInfo: AccountInfo<Buffer>, ): GlobalVolumeAccumulator { return this.pumpAmmInternalSdk.decodeGlobalVolumeAccumulator( globalVolumeAccumulatorAccountInfo, ); } fetchUserVolumeAccumulator( user: PublicKey, ): Promise<UserVolumeAccumulator | null> { return this.pumpAmmInternalSdk.fetchUserVolumeAccumulator(user); } decodeUserVolumeAccumulator( userVolumeAccumulatorAccountInfo: AccountInfo<Buffer>, ): UserVolumeAccumulator { return this.pumpAmmInternalSdk.decodeUserVolumeAccumulator( userVolumeAccumulatorAccountInfo, ); } async createPoolInstructions( createPoolSolanaState: CreatePoolSolanaState, baseIn: BN, quoteIn: BN, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.createPoolInstructionsInternal( createPoolSolanaState, baseIn, quoteIn, ); } async createAutocompleteInitialPoolPrice( initialBase: BN, initialQuote: BN, ): Promise<BN> { return initialQuote.div(initialBase); } async depositInstructions( liquiditySolanaState: LiquiditySolanaState, lpToken: BN, slippage: number, ): Promise<TransactionInstruction[]> { const { pool, poolBaseTokenAccount, poolQuoteTokenAccount } = liquiditySolanaState; const { maxBase, maxQuote } = depositLpToken( lpToken, slippage, new BN(poolBaseTokenAccount.amount.toString()), new BN(poolQuoteTokenAccount.amount.toString()), pool.lpSupply, ); return this.pumpAmmInternalSdk.depositInstructionsInternal( liquiditySolanaState, lpToken, maxBase, maxQuote, ); } depositAutocompleteQuoteAndLpTokenFromBase( liquiditySolanaState: LiquiditySolanaState, base: BN, slippage: number, ): DepositQuoteAndLpTokenFromBaseResult { const { quote, lpToken } = this.pumpAmmInternalSdk.depositBaseInputInternal( liquiditySolanaState, base, slippage, ); return { quote, lpToken, }; } depositAutocompleteBaseAndLpTokenFromQuote( liquiditySolanaState: LiquiditySolanaState, quote: BN, slippage: number, ): DepositBaseAndLpTokenFromQuoteResult { const { base, lpToken } = this.pumpAmmInternalSdk.depositQuoteInputInternal( liquiditySolanaState, quote, slippage, ); return { base, lpToken, }; } async withdrawInstructions( liquiditySolanaState: LiquiditySolanaState, lpToken: BN, slippage: number, ): Promise<TransactionInstruction[]> { const { minBase, minQuote } = this.pumpAmmInternalSdk.withdrawInputsInternal( liquiditySolanaState, lpToken, slippage, ); return this.pumpAmmInternalSdk.withdrawInstructionsInternal( liquiditySolanaState, lpToken, minBase, minQuote, ); } withdrawAutoCompleteBaseAndQuoteFromLpToken( liquiditySolanaState: LiquiditySolanaState, lpAmount: BN, slippage: number, ): WithdrawAutocompleteResult { const { base, quote } = this.pumpAmmInternalSdk.withdrawInputsInternal( liquiditySolanaState, lpAmount, slippage, ); return { base, quote, }; } async extendAccount( account: PublicKey, user: PublicKey, ): Promise<TransactionInstruction> { return this.pumpAmmInternalSdk.extendAccount(account, user); } async collectCoinCreatorFee( collectCoinCreatorFeeSolanaState: CollectCoinCreatorFeeSolanaState, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.collectCoinCreatorFee( collectCoinCreatorFeeSolanaState, ); } async getCoinCreatorVaultBalance(coinCreator: PublicKey): Promise<BN> { return this.pumpAmmInternalSdk.getCoinCreatorVaultBalance(coinCreator); } coinCreatorVaultAuthorityPda(coinCreator: PublicKey) { return this.pumpAmmInternalSdk.coinCreatorVaultAuthorityPda(coinCreator); } coinCreatorVaultAta( coinCreatorVaultAuthority: PublicKey, quoteMint: PublicKey, quoteTokenProgram: PublicKey, ) { return this.pumpAmmInternalSdk.coinCreatorVaultAta( coinCreatorVaultAuthority, quoteMint, quoteTokenProgram, ); } async setCoinCreator(pool: PublicKey): Promise<TransactionInstruction> { return this.pumpAmmInternalSdk.setCoinCreator(pool); } async createPoolSolanaState( index: number, creator: PublicKey, baseMint: PublicKey, quoteMint: PublicKey, userBaseTokenAccount: PublicKey | undefined = undefined, userQuoteTokenAccount: PublicKey | undefined = undefined, ): Promise<CreatePoolSolanaState> { return this.pumpAmmInternalSdk.createPoolSolanaState( index, creator, baseMint, quoteMint, userBaseTokenAccount, userQuoteTokenAccount, ); } async swapSolanaState( poolKey: PublicKey, user: PublicKey, userBaseTokenAccount: PublicKey | undefined = undefined, userQuoteTokenAccount: PublicKey | undefined = undefined, ): Promise<SwapSolanaState> { return this.pumpAmmInternalSdk.swapSolanaState( poolKey, user, userBaseTokenAccount, userQuoteTokenAccount, ); } async liquiditySolanaState( poolKey: PublicKey, user: PublicKey, userBaseTokenAccount: PublicKey | undefined = undefined, userQuoteTokenAccount: PublicKey | undefined = undefined, userPoolTokenAccount: PublicKey | undefined = undefined, ): Promise<LiquiditySolanaState> { return this.pumpAmmInternalSdk.liquiditySolanaState( poolKey, user, userBaseTokenAccount, userQuoteTokenAccount, userPoolTokenAccount, ); } async collectCoinCreatorFeeSolanaState( coinCreator: PublicKey, coinCreatorTokenAccount: PublicKey | undefined = undefined, ): Promise<CollectCoinCreatorFeeSolanaState> { return this.pumpAmmInternalSdk.collectCoinCreatorFeeSolanaState( coinCreator, coinCreatorTokenAccount, ); } async claimTokenIncentives( user: PublicKey, payer: PublicKey, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.claimTokenIncentivesInternal(user, payer); } async getTotalUnclaimedTokens(user: PublicKey): Promise<BN> { return this.pumpAmmInternalSdk.getTotalUnclaimedTokens(user); } async getCurrentDayTokens(user: PublicKey): Promise<BN> { return this.pumpAmmInternalSdk.getCurrentDayTokens(user); } async syncUserVolumeAccumulator( user: PublicKey, ): Promise<TransactionInstruction> { return this.pumpAmmInternalSdk.syncUserVolumeAccumulator(user); } async initUserVolumeAccumulator({ payer, user, }: { payer: PublicKey; user: PublicKey; }): Promise<TransactionInstruction> { return await this.pumpAmmInternalSdk.initUserVolumeAccumulator({ payer, user, }); } async closeUserVolumeAccumulator( user: PublicKey, ): Promise<TransactionInstruction> { return await this.pumpAmmInternalSdk.closeUserVolumeAccumulator(user); } async buyBaseInput( swapSolanaState: SwapSolanaState, base: BN, slippage: number, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.buyBaseInput( swapSolanaState, base, slippage, ); } async buyQuoteInput( swapSolanaState: SwapSolanaState, quote: BN, slippage: number, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.buyQuoteInput( swapSolanaState, quote, slippage, ); } async sellBaseInput( swapSolanaState: SwapSolanaState, base: BN, slippage: number, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.sellBaseInput( swapSolanaState, base, slippage, ); } async sellQuoteInput( swapSolanaState: SwapSolanaState, quote: BN, slippage: number, ): Promise<TransactionInstruction[]> { return this.pumpAmmInternalSdk.sellQuoteInput( swapSolanaState, quote, slippage, ); } }