pumpdotfun-repumped-sdk
Version:
Pumpfun SDK — create, buy, sell tokens with support for Jito bundles and multiple relayer integrations. Rebuilt and fixed pumpdotfun-sdk.
1 lines • 19.3 kB
Source Map (JSON)
{"version":3,"file":"TradeModule.mjs","sources":["../../../../src/modules/TradeModule.ts"],"sourcesContent":["import BN from \"bn.js\";\r\nimport { getAssociatedTokenAddress } from \"@solana/spl-token\";\r\nimport {\r\n Keypair,\r\n Commitment,\r\n Finality,\r\n Transaction,\r\n PublicKey,\r\n} from \"@solana/web3.js\";\r\nimport { GlobalAccount } from \"../globalAccount.js\";\r\n\r\nimport { DEFAULT_COMMITMENT, DEFAULT_FINALITY } from \"../pumpFun.consts.js\";\r\nimport {\r\n CreateTokenMetadata,\r\n PriorityFee,\r\n TransactionResult,\r\n} from \"../pumpFun.types.js\";\r\nimport { PumpFunSDK } from \"../PumpFunSDK.js\";\r\nimport {\r\n calculateWithSlippageBuy,\r\n calculateWithSlippageSell,\r\n} from \"../slippage.js\";\r\nimport { sendTx } from \"../tx.js\";\r\n\r\nexport class TradeModule {\r\n constructor(private sdk: PumpFunSDK) {}\r\n\r\n async createAndBuy(\r\n creator: Keypair,\r\n mint: Keypair,\r\n metadata: CreateTokenMetadata,\r\n buyAmountSol: bigint,\r\n slippageBasisPoints: bigint = 500n,\r\n priorityFees?: PriorityFee,\r\n commitment: Commitment = DEFAULT_COMMITMENT,\r\n finality: Finality = DEFAULT_FINALITY\r\n ): Promise<TransactionResult> {\r\n const tokenMetadata = await this.sdk.token.createTokenMetadata(metadata);\r\n\r\n const createIx = await this.getCreateInstructions(\r\n creator.publicKey,\r\n metadata.name,\r\n metadata.symbol,\r\n tokenMetadata.metadataUri,\r\n mint\r\n );\r\n\r\n const transaction = new Transaction().add(createIx);\r\n\r\n if (buyAmountSol > 0n) {\r\n const globalAccount = await this.sdk.token.getGlobalAccount(commitment);\r\n const buyAmount = globalAccount.getInitialBuyPrice(buyAmountSol);\r\n const buyAmountWithSlippage = calculateWithSlippageBuy(\r\n buyAmountSol,\r\n slippageBasisPoints\r\n );\r\n\r\n await this.buildBuyIx(\r\n creator.publicKey,\r\n mint.publicKey,\r\n buyAmount,\r\n buyAmountWithSlippage,\r\n transaction,\r\n commitment,\r\n true\r\n );\r\n }\r\n\r\n return await sendTx(\r\n this.sdk.connection,\r\n transaction,\r\n creator.publicKey,\r\n [creator, mint],\r\n priorityFees,\r\n commitment,\r\n finality\r\n );\r\n }\r\n\r\n async buy(\r\n buyer: Keypair,\r\n mint: PublicKey,\r\n buyAmountSol: bigint,\r\n slippageBasisPoints: bigint = 500n,\r\n priorityFees?: PriorityFee,\r\n commitment: Commitment = DEFAULT_COMMITMENT,\r\n finality: Finality = DEFAULT_FINALITY\r\n ): Promise<TransactionResult> {\r\n const bondingAccount = await this.sdk.token.getBondingCurveAccount(\r\n mint,\r\n commitment\r\n );\r\n if (!bondingAccount) {\r\n throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\r\n }\r\n\r\n const buyAmount = bondingAccount.getBuyPrice(buyAmountSol);\r\n const buyAmountWithSlippage = calculateWithSlippageBuy(\r\n buyAmountSol,\r\n slippageBasisPoints\r\n );\r\n\r\n const transaction = new Transaction();\r\n await this.buildBuyIx(\r\n buyer.publicKey,\r\n mint,\r\n buyAmount,\r\n buyAmountWithSlippage,\r\n transaction,\r\n commitment,\r\n false\r\n );\r\n\r\n return await sendTx(\r\n this.sdk.connection,\r\n transaction,\r\n buyer.publicKey,\r\n [buyer],\r\n priorityFees,\r\n commitment,\r\n finality\r\n );\r\n }\r\n\r\n async getBuyInstructionsBySolAmount(\r\n buyer: PublicKey,\r\n mint: PublicKey,\r\n buyAmountSol: bigint,\r\n slippageBasisPoints: bigint = 500n,\r\n commitment: Commitment = DEFAULT_COMMITMENT\r\n ): Promise<Transaction> {\r\n const bondingCurveAccount = await this.sdk.token.getBondingCurveAccount(\r\n mint,\r\n commitment\r\n );\r\n if (!bondingCurveAccount) {\r\n throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\r\n }\r\n\r\n const buyAmount = bondingCurveAccount.getBuyPrice(buyAmountSol);\r\n const buyAmountWithSlippage = calculateWithSlippageBuy(\r\n buyAmountSol,\r\n slippageBasisPoints\r\n );\r\n\r\n const transaction = new Transaction();\r\n await this.buildBuyIx(\r\n buyer,\r\n mint,\r\n buyAmount,\r\n buyAmountWithSlippage,\r\n transaction,\r\n commitment,\r\n false\r\n );\r\n\r\n return transaction;\r\n }\r\n\r\n async buildBuyIx(\r\n buyer: PublicKey,\r\n mint: PublicKey,\r\n amount: bigint,\r\n maxSolCost: bigint,\r\n tx: Transaction,\r\n commitment: Commitment,\r\n shouldUseBuyerAsBonding: boolean\r\n ): Promise<void> {\r\n const bondingCurve = this.sdk.pda.getBondingCurvePDA(mint);\r\n const associatedBonding = await getAssociatedTokenAddress(\r\n mint,\r\n bondingCurve,\r\n true\r\n );\r\n\r\n const associatedUser =\r\n await this.sdk.token.createAssociatedTokenAccountIfNeeded(\r\n buyer,\r\n buyer,\r\n mint,\r\n tx,\r\n commitment\r\n );\r\n\r\n const globalPda = this.sdk.pda.getGlobalAccountPda();\r\n const globalAccBuf = await this.sdk.connection.getAccountInfo(\r\n globalPda,\r\n commitment\r\n );\r\n const feeRecipient = GlobalAccount.fromBuffer(\r\n globalAccBuf!.data\r\n ).feeRecipient;\r\n\r\n const bondingCreator = shouldUseBuyerAsBonding\r\n ? this.sdk.pda.getCreatorVaultPda(buyer)\r\n : await this.sdk.token.getBondingCurveCreator(bondingCurve, commitment);\r\n const creatorVault = shouldUseBuyerAsBonding\r\n ? bondingCreator\r\n : this.sdk.pda.getCreatorVaultPda(bondingCreator);\r\n\r\n const eventAuthority = this.sdk.pda.getEventAuthorityPda();\r\n\r\n const ix = await this.sdk.program.methods\r\n .buy(new BN(amount.toString()), new BN(maxSolCost.toString()))\r\n .accounts({\r\n global: globalPda,\r\n feeRecipient,\r\n mint,\r\n bondingCurve,\r\n associatedBondingCurve: associatedBonding,\r\n associatedUser,\r\n user: buyer,\r\n creatorVault,\r\n eventAuthority,\r\n globalVolumeAccumulator: this.sdk.pda.getGlobalVolumeAccumulatorPda(),\r\n userVolumeAccumulator: this.sdk.pda.getUserVolumeAccumulatorPda(buyer),\r\n })\r\n .instruction();\r\n\r\n tx.add(ix);\r\n }\r\n\r\n //create token instructions\r\n async getCreateInstructions(\r\n creator: PublicKey,\r\n name: string,\r\n symbol: string,\r\n uri: string,\r\n mint: Keypair\r\n ): Promise<Transaction> {\r\n const mintAuthority = this.sdk.pda.getMintAuthorityPDA();\r\n const bondingCurve = this.sdk.pda.getBondingCurvePDA(mint.publicKey);\r\n const associatedBonding = await getAssociatedTokenAddress(\r\n mint.publicKey,\r\n bondingCurve,\r\n true\r\n );\r\n const global = this.sdk.pda.getGlobalAccountPda();\r\n const metadata = this.sdk.pda.getMetadataPDA(mint.publicKey);\r\n const eventAuthority = this.sdk.pda.getEventAuthorityPda();\r\n\r\n const ix = await this.sdk.program.methods\r\n .create(name, symbol, uri, creator)\r\n .accounts({\r\n mint: mint.publicKey,\r\n mintAuthority,\r\n bondingCurve,\r\n associatedBondingCurve: associatedBonding,\r\n global,\r\n metadata,\r\n user: creator,\r\n eventAuthority,\r\n })\r\n .instruction();\r\n\r\n return new Transaction().add(ix);\r\n }\r\n\r\n async buildSellIx(\r\n seller: PublicKey,\r\n mint: PublicKey,\r\n tokenAmount: bigint,\r\n minSolOutput: bigint,\r\n tx: Transaction,\r\n commitment: Commitment\r\n ): Promise<void> {\r\n const bondingCurve = this.sdk.pda.getBondingCurvePDA(mint);\r\n const associatedBonding = await getAssociatedTokenAddress(\r\n mint,\r\n bondingCurve,\r\n true\r\n );\r\n\r\n const associatedUser =\r\n await this.sdk.token.createAssociatedTokenAccountIfNeeded(\r\n seller,\r\n seller,\r\n mint,\r\n tx,\r\n commitment\r\n );\r\n\r\n const globalPda = this.sdk.pda.getGlobalAccountPda();\r\n const globalBuf = await this.sdk.connection.getAccountInfo(\r\n globalPda,\r\n commitment\r\n );\r\n const feeRecipient = GlobalAccount.fromBuffer(globalBuf!.data).feeRecipient;\r\n\r\n const bondingCreator = await this.sdk.token.getBondingCurveCreator(\r\n bondingCurve,\r\n commitment\r\n );\r\n const creatorVault = this.sdk.pda.getCreatorVaultPda(bondingCreator);\r\n\r\n const eventAuthority = this.sdk.pda.getEventAuthorityPda();\r\n\r\n const ix = await this.sdk.program.methods\r\n .sell(new BN(tokenAmount.toString()), new BN(minSolOutput.toString()))\r\n .accounts({\r\n global: globalPda,\r\n feeRecipient,\r\n mint,\r\n bondingCurve,\r\n associatedBondingCurve: associatedBonding,\r\n associatedUser,\r\n user: seller,\r\n creatorVault,\r\n eventAuthority,\r\n })\r\n .instruction();\r\n\r\n tx.add(ix);\r\n }\r\n\r\n async sell(\r\n seller: Keypair,\r\n mint: PublicKey,\r\n sellTokenAmount: bigint,\r\n slippageBasisPoints: bigint = 500n,\r\n priorityFees?: PriorityFee,\r\n commitment: Commitment = DEFAULT_COMMITMENT,\r\n finality: Finality = DEFAULT_FINALITY\r\n ): Promise<TransactionResult> {\r\n const bondingAccount = await this.sdk.token.getBondingCurveAccount(\r\n mint,\r\n commitment\r\n );\r\n if (!bondingAccount)\r\n throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\r\n\r\n const globalAccount = await this.sdk.token.getGlobalAccount(commitment);\r\n\r\n const minSolOutput = bondingAccount.getSellPrice(\r\n sellTokenAmount,\r\n globalAccount.feeBasisPoints\r\n );\r\n let sellAmountWithSlippage = calculateWithSlippageSell(\r\n minSolOutput,\r\n slippageBasisPoints\r\n );\r\n if (sellAmountWithSlippage < 1n) sellAmountWithSlippage = 1n;\r\n\r\n const transaction = new Transaction();\r\n await this.buildSellIx(\r\n seller.publicKey,\r\n mint,\r\n sellTokenAmount,\r\n sellAmountWithSlippage,\r\n transaction,\r\n commitment\r\n );\r\n\r\n return await sendTx(\r\n this.sdk.connection,\r\n transaction,\r\n seller.publicKey,\r\n [seller],\r\n priorityFees,\r\n commitment,\r\n finality\r\n );\r\n }\r\n\r\n async getSellInstructionsByTokenAmount(\r\n seller: PublicKey,\r\n mint: PublicKey,\r\n sellTokenAmount: bigint,\r\n slippageBasisPoints: bigint = 500n,\r\n commitment: Commitment = DEFAULT_COMMITMENT\r\n ): Promise<Transaction> {\r\n const bondingAccount = await this.sdk.token.getBondingCurveAccount(\r\n mint,\r\n commitment\r\n );\r\n if (!bondingAccount)\r\n throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\r\n\r\n const globalAccount = await this.sdk.token.getGlobalAccount(commitment);\r\n const minSolOutput = bondingAccount.getSellPrice(\r\n sellTokenAmount,\r\n globalAccount.feeBasisPoints\r\n );\r\n let sellAmountWithSlippage = calculateWithSlippageSell(\r\n minSolOutput,\r\n slippageBasisPoints\r\n );\r\n if (sellAmountWithSlippage < 1n) sellAmountWithSlippage = 1n;\r\n\r\n const transaction = new Transaction();\r\n await this.buildSellIx(\r\n seller,\r\n mint,\r\n sellTokenAmount,\r\n sellAmountWithSlippage,\r\n transaction,\r\n commitment\r\n );\r\n return transaction;\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}