pumpdotfun-sdk-sp
Version:
A simple SDK for interacting with pumpdotfun
1 lines • 21.8 kB
Source Map (JSON)
{"version":3,"file":"pumpfun.mjs","sources":["../../../src/pumpfun.ts"],"sourcesContent":["import {\n Commitment,\n Connection,\n Finality,\n Keypair,\n PublicKey,\n Transaction,\n} from \"@solana/web3.js\";\nimport { Program, Provider } from \"@coral-xyz/anchor\";\nimport { GlobalAccount } from \"./globalAccount.js\";\nimport {\n CompleteEvent,\n CreateEvent,\n CreateTokenMetadata,\n PriorityFee,\n PumpFunEventHandlers,\n PumpFunEventType,\n SetParamsEvent,\n TradeEvent,\n TransactionResult,\n} from \"./types.js\";\nimport {\n toCompleteEvent,\n toCreateEvent,\n toSetParamsEvent,\n toTradeEvent,\n} from \"./events.js\";\nimport {\n createAssociatedTokenAccountInstruction,\n getAccount,\n getAssociatedTokenAddress,\n} from \"@solana/spl-token\";\nimport { BondingCurveAccount } from \"./bondingCurveAccount.js\";\nimport { BN } from \"bn.js\";\nimport {\n DEFAULT_COMMITMENT,\n DEFAULT_FINALITY,\n calculateWithSlippageBuy,\n calculateWithSlippageSell,\n sendTx,\n} from \"./util.js\";\nimport { PumpFun, IDL } from \"./IDL/index.js\";\nconst PROGRAM_ID = \"6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P\";\nconst MPL_TOKEN_METADATA_PROGRAM_ID =\n \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\";\n\nexport const GLOBAL_ACCOUNT_SEED = \"global\";\nexport const MINT_AUTHORITY_SEED = \"mint-authority\";\nexport const BONDING_CURVE_SEED = \"bonding-curve\";\nexport const METADATA_SEED = \"metadata\";\n\nexport const DEFAULT_DECIMALS = 6;\n\nexport class PumpFunSDK {\n public program: Program<PumpFun>;\n public connection: Connection;\n constructor(provider?: Provider) {\n this.program = new Program<PumpFun>(IDL as PumpFun, provider);\n this.connection = this.program.provider.connection;\n }\n\n async createAndBuy(\n creator: Keypair,\n mint: Keypair,\n createTokenMetadata: CreateTokenMetadata,\n buyAmountSol: bigint,\n slippageBasisPoints: bigint = 500n,\n priorityFees?: PriorityFee,\n commitment: Commitment = DEFAULT_COMMITMENT,\n finality: Finality = DEFAULT_FINALITY\n ): Promise<TransactionResult> {\n let tokenMetadata = await this.createTokenMetadata(createTokenMetadata);\n\n let createTx = await this.getCreateInstructions(\n creator.publicKey,\n createTokenMetadata.name,\n createTokenMetadata.symbol,\n tokenMetadata.metadataUri,\n mint\n );\n\n let newTx = new Transaction().add(createTx);\n\n if (buyAmountSol > 0) {\n const globalAccount = await this.getGlobalAccount(commitment);\n const buyAmount = globalAccount.getInitialBuyPrice(buyAmountSol);\n const buyAmountWithSlippage = calculateWithSlippageBuy(\n buyAmountSol,\n slippageBasisPoints\n );\n\n const buyTx = await this.getBuyInstructions(\n creator.publicKey,\n mint.publicKey,\n globalAccount.feeRecipient,\n buyAmount,\n buyAmountWithSlippage\n );\n\n newTx.add(buyTx);\n }\n\n let createResults = await sendTx(\n this.connection,\n newTx,\n creator.publicKey,\n [creator, mint],\n priorityFees,\n commitment,\n finality\n );\n return createResults;\n }\n\n async buy(\n buyer: Keypair,\n mint: PublicKey,\n buyAmountSol: bigint,\n slippageBasisPoints: bigint = 500n,\n priorityFees?: PriorityFee,\n commitment: Commitment = DEFAULT_COMMITMENT,\n finality: Finality = DEFAULT_FINALITY\n ): Promise<TransactionResult> {\n let buyTx = await this.getBuyInstructionsBySolAmount(\n buyer.publicKey,\n mint,\n buyAmountSol,\n slippageBasisPoints,\n commitment\n );\n\n let buyResults = await sendTx(\n this.connection,\n buyTx,\n buyer.publicKey,\n [buyer],\n priorityFees,\n commitment,\n finality\n );\n return buyResults;\n }\n\n async sell(\n seller: Keypair,\n mint: PublicKey,\n sellTokenAmount: bigint,\n slippageBasisPoints: bigint = 500n,\n priorityFees?: PriorityFee,\n commitment: Commitment = DEFAULT_COMMITMENT,\n finality: Finality = DEFAULT_FINALITY\n ): Promise<TransactionResult> {\n let sellTx = await this.getSellInstructionsByTokenAmount(\n seller.publicKey,\n mint,\n sellTokenAmount,\n slippageBasisPoints,\n commitment\n );\n\n let sellResults = await sendTx(\n this.connection,\n sellTx,\n seller.publicKey,\n [seller],\n priorityFees,\n commitment,\n finality\n );\n return sellResults;\n }\n\n //create token instructions\n async getCreateInstructions(\n creator: PublicKey,\n name: string,\n symbol: string,\n uri: string,\n mint: Keypair\n ) {\n const mplTokenMetadata = new PublicKey(MPL_TOKEN_METADATA_PROGRAM_ID);\n\n const [metadataPDA] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(METADATA_SEED),\n mplTokenMetadata.toBuffer(),\n mint.publicKey.toBuffer(),\n ],\n mplTokenMetadata\n );\n\n return this.program.methods\n .create(name, symbol, uri, creator)\n .accounts({\n mint: mint.publicKey,\n user: creator,\n program: this.program.programId,\n })\n .signers([mint])\n .transaction();\n }\n\n async getBuyInstructionsBySolAmount(\n buyer: PublicKey,\n mint: PublicKey,\n buyAmountSol: bigint,\n slippageBasisPoints: bigint = 500n,\n commitment: Commitment = DEFAULT_COMMITMENT\n ) {\n let bondingCurveAccount = await this.getBondingCurveAccount(\n mint,\n commitment\n );\n if (!bondingCurveAccount) {\n throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\n }\n\n let buyAmount = bondingCurveAccount.getBuyPrice(buyAmountSol);\n let buyAmountWithSlippage = calculateWithSlippageBuy(\n buyAmountSol,\n slippageBasisPoints\n );\n\n let globalAccount = await this.getGlobalAccount(commitment);\n\n return await this.getBuyInstructions(\n buyer,\n mint,\n globalAccount.feeRecipient,\n buyAmount,\n buyAmountWithSlippage\n );\n }\n\n //buy\n async getBuyInstructions(\n buyer: PublicKey,\n mint: PublicKey,\n feeRecipient: PublicKey,\n amount: bigint,\n solAmount: bigint,\n commitment: Commitment = DEFAULT_COMMITMENT\n ) {\n const associatedBondingCurve = await getAssociatedTokenAddress(\n mint,\n this.getBondingCurvePDA(mint),\n true\n );\n\n const associatedUser = await getAssociatedTokenAddress(mint, buyer, false);\n\n let transaction = new Transaction();\n\n try {\n await getAccount(this.connection, associatedUser, commitment);\n } catch (e) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n buyer,\n associatedUser,\n buyer,\n mint\n )\n );\n }\n\n transaction.add(\n await this.program.methods\n .buy(new BN(amount.toString()), new BN(solAmount.toString()), false)\n .accounts({\n feeRecipient: feeRecipient,\n mint: mint,\n associatedUser: associatedUser,\n user: buyer,\n program: this.program.programId,\n })\n .transaction()\n );\n\n return transaction;\n }\n\n //sell\n async getSellInstructionsByTokenAmount(\n seller: PublicKey,\n mint: PublicKey,\n sellTokenAmount: bigint,\n slippageBasisPoints: bigint = 500n,\n commitment: Commitment = DEFAULT_COMMITMENT\n ) {\n let bondingCurveAccount = await this.getBondingCurveAccount(\n mint,\n commitment\n );\n if (!bondingCurveAccount) {\n throw new Error(`Bonding curve account not found: ${mint.toBase58()}`);\n }\n\n let globalAccount = await this.getGlobalAccount(commitment);\n\n let minSolOutput = bondingCurveAccount.getSellPrice(\n sellTokenAmount,\n globalAccount.feeBasisPoints\n );\n\n let sellAmountWithSlippage = calculateWithSlippageSell(\n minSolOutput,\n slippageBasisPoints\n );\n\n return await this.getSellInstructions(\n seller,\n mint,\n globalAccount.feeRecipient,\n sellTokenAmount,\n sellAmountWithSlippage\n );\n }\n\n async getSellInstructions(\n seller: PublicKey,\n mint: PublicKey,\n feeRecipient: PublicKey,\n amount: bigint,\n minSolOutput: bigint\n ) {\n const associatedUser = await getAssociatedTokenAddress(mint, seller, false);\n\n let transaction = new Transaction();\n\n transaction.add(\n await this.program.methods\n .sell(new BN(amount.toString()), new BN(minSolOutput.toString()))\n .accounts({\n feeRecipient: feeRecipient,\n mint: mint,\n associatedUser: associatedUser,\n user: seller,\n program: this.program.programId,\n })\n .transaction()\n );\n\n return transaction;\n }\n\n async getBondingCurveAccount(\n mint: PublicKey,\n commitment: Commitment = DEFAULT_COMMITMENT\n ) {\n const tokenAccount = await this.connection.getAccountInfo(\n this.getBondingCurvePDA(mint),\n commitment\n );\n if (!tokenAccount) {\n return null;\n }\n return BondingCurveAccount.fromBuffer(tokenAccount!.data);\n }\n\n async getGlobalAccount(commitment: Commitment = DEFAULT_COMMITMENT) {\n const [globalAccountPDA] = PublicKey.findProgramAddressSync(\n [Buffer.from(GLOBAL_ACCOUNT_SEED)],\n new PublicKey(PROGRAM_ID)\n );\n\n const tokenAccount = await this.connection.getAccountInfo(\n globalAccountPDA,\n commitment\n );\n\n return GlobalAccount.fromBuffer(tokenAccount!.data);\n }\n\n getBondingCurvePDA(mint: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(BONDING_CURVE_SEED), mint.toBuffer()],\n this.program.programId\n )[0];\n }\n\n async createTokenMetadata(create: CreateTokenMetadata) {\n // Validate file\n if (!(create.file instanceof Blob)) {\n throw new Error(\"File must be a Blob or File object\");\n }\n\n let formData = new FormData();\n formData.append(\"file\", create.file, \"image.png\"); // Add filename\n formData.append(\"name\", create.name);\n formData.append(\"symbol\", create.symbol);\n formData.append(\"description\", create.description);\n formData.append(\"twitter\", create.twitter || \"\");\n formData.append(\"telegram\", create.telegram || \"\");\n formData.append(\"website\", create.website || \"\");\n formData.append(\"showName\", \"true\");\n\n try {\n const request = await fetch(\"https://pump.fun/api/ipfs\", {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n },\n body: formData,\n credentials: \"same-origin\",\n });\n\n if (request.status === 500) {\n // Try to get more error details\n const errorText = await request.text();\n throw new Error(\n `Server error (500): ${errorText || \"No error details available\"}`\n );\n }\n\n if (!request.ok) {\n throw new Error(`HTTP error! status: ${request.status}`);\n }\n\n const responseText = await request.text();\n if (!responseText) {\n throw new Error(\"Empty response received from server\");\n }\n\n try {\n return JSON.parse(responseText);\n } catch (e) {\n throw new Error(`Invalid JSON response: ${responseText}`);\n }\n } catch (error) {\n console.error(\"Error in createTokenMetadata:\", error);\n throw error;\n }\n }\n //EVENTS\n addEventListener<T extends PumpFunEventType>(\n eventType: T,\n callback: (\n event: PumpFunEventHandlers[T],\n slot: number,\n signature: string\n ) => void\n ) {\n return this.program.addEventListener(\n eventType,\n (event: any, slot: number, signature: string) => {\n let processedEvent;\n switch (eventType) {\n case \"createEvent\":\n processedEvent = toCreateEvent(event as CreateEvent);\n callback(\n processedEvent as PumpFunEventHandlers[T],\n slot,\n signature\n );\n break;\n case \"tradeEvent\":\n processedEvent = toTradeEvent(event as TradeEvent);\n callback(\n processedEvent as PumpFunEventHandlers[T],\n slot,\n signature\n );\n break;\n case \"completeEvent\":\n processedEvent = toCompleteEvent(event as CompleteEvent);\n callback(\n processedEvent as PumpFunEventHandlers[T],\n slot,\n signature\n );\n break;\n case \"setParamsEvent\":\n processedEvent = toSetParamsEvent(event as SetParamsEvent);\n callback(\n processedEvent as PumpFunEventHandlers[T],\n slot,\n signature\n );\n break;\n default:\n console.error(\"Unhandled event type:\", eventType);\n }\n }\n );\n }\n\n removeEventListener(eventId: number) {\n this.program.removeEventListener(eventId);\n }\n}\n"],"names":[],"mappings":"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"}