UNPKG

pump-swap-core-v1

Version:

This is core SDK for pumpdotfun offical AMM pool - PumpSwap

282 lines (281 loc) 13.8 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const anchor_1 = require("@coral-xyz/anchor"); const nodewallet_1 = __importDefault(require("@coral-xyz/anchor/dist/cjs/nodewallet")); const web3_js_1 = require("@solana/web3.js"); const spl_token_1 = require("@solana/spl-token"); const pump_swap_json_1 = __importDefault(require("../src/idl/pump-swap.json")); const constants_1 = require("./constants"); class PumpSwapSDK { /** * * @param cluster "mainnet" | "devnet" * @param commitment "processed" | "confirmed" | "finalized" * @param customRPC string */ constructor(cluster, commitment, customRPC) { /** * * @param lpFeeBasisPoints BN * @param protocolFeeBasisPoints BN * @param protocolFeeRecipients Array<PublicKey> * @returns Promise<TransactionInstruction> */ this.getCreateConfigInstruction = (lpFeeBasisPoints, protocolFeeBasisPoints, protocolFeeRecipients) => __awaiter(this, void 0, void 0, function* () { const ix = yield this.program.methods .createConfig(lpFeeBasisPoints, protocolFeeBasisPoints, protocolFeeRecipients) .accounts({ program: this.program.programId }) .instruction(); return ix; }); /** * * @param baseAmountOut BN * @param maxQuoteAmountIn BN * @param tradeParam TradeType * @returns Promise<TransactionInstruction> */ this.getBuyInstruction = (baseAmountOut, maxQuoteAmountIn, tradeParam) => __awaiter(this, void 0, void 0, function* () { const { baseMint, baseTokenProgram, pool, quoteMint, quoteTokenProgram, user } = tradeParam; const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const userBaseTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(baseMint, user); const userQuoteTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(quoteMint, user); const ix = yield this.program.methods .buy(baseAmountOut, maxQuoteAmountIn) .accounts({ pool, globalConfig: globalConfig, protocolFeeRecipient: constants_1.PROTOCOL_FEE_RECIPIENT, userBaseTokenAccount, userQuoteTokenAccount, baseTokenProgram, quoteTokenProgram, program: this.program.programId, user: user }) .instruction(); return ix; }); /** * * @param baseAmountIn BN * @param minQuoteAmountOut BN * @param tradeParam TradeType * @returns Promise<TransactionInstruction> */ this.getSellInstruction = (baseAmountIn, minQuoteAmountOut, tradeParam) => __awaiter(this, void 0, void 0, function* () { const { baseMint, baseTokenProgram, pool, quoteMint, quoteTokenProgram, user } = tradeParam; const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const userBaseTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(baseMint, user); const userQuoteTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(quoteMint, user); const ix = yield this.program.methods .sell(baseAmountIn, minQuoteAmountOut) .accounts({ pool, globalConfig: globalConfig, program: this.program.programId, protocolFeeRecipient: constants_1.PROTOCOL_FEE_RECIPIENT, baseTokenProgram, quoteTokenProgram, userBaseTokenAccount, userQuoteTokenAccount, user: user }) .instruction(); return ix; }); /** * * @param index number * @param baseAmountIn BN * @param quoteAmountIn BN * @param createPoolParam CreatePoolType * @param user PublicKey * @returns Promise<TransactionInstruction> */ this.getCreatePoolInstruction = (index, baseAmountIn, quoteAmountIn, createPoolParam, user) => __awaiter(this, void 0, void 0, function* () { const { creator, baseMint, quoteMint, baseTokenProgram, quoteTokenProgram } = createPoolParam; const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const userBaseTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(baseMint, user); const userQuoteTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(quoteMint, user); const ix = yield this.program.methods.createPool(index, baseAmountIn, quoteAmountIn).accounts({ globalConfig: globalConfig, baseMint, quoteMint, userBaseTokenAccount, userQuoteTokenAccount, baseTokenProgram, quoteTokenProgram, creator, program: this.program.programId, }) .instruction(); return ix; }); /** * * @param lpTokenAmountOut BN * @param maxBaseAmountIn BN * @param maxQuoteAmountIn BN * @param depositType DepositType * @returns Promise<TransactionInstruction> */ this.getDepositInstruction = (lpTokenAmountOut, maxBaseAmountIn, maxQuoteAmountIn, depositType) => __awaiter(this, void 0, void 0, function* () { const { baseMint, pool, quoteMint, user } = depositType; const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const [lpMint] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.LP_MINT_SEED), pool.toBuffer()], this.program.programId); const userBaseTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(baseMint, user); const userQuoteTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(quoteMint, user); const userPoolTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(lpMint, user); const ix = yield this.program.methods.deposit(lpTokenAmountOut, maxBaseAmountIn, maxQuoteAmountIn).accounts({ globalConfig: globalConfig, pool, program: this.program.programId, userPoolTokenAccount, userBaseTokenAccount, userQuoteTokenAccount, user: user }) .instruction(); return ix; }); /** * * @param disableCreatePool boolean * @param disableDeposit boolean * @param disableWithdraw boolean * @param disableBuy boolean * @param disableSell boolean * @returns Promise<TransactionInstruction> */ this.getDisableInstruction = (disableCreatePool, disableDeposit, disableWithdraw, disableBuy, disableSell) => __awaiter(this, void 0, void 0, function* () { const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const ix = yield this.program.methods .disable(disableCreatePool, disableDeposit, disableWithdraw, disableBuy, disableSell) .accounts({ globalConfig: globalConfig, program: this.program.programId }) .instruction(); return ix; }); /** * * @param account PublicKey * @returns Promise<TransactionInstruction> */ this.getExtendAccountInstruction = (account) => __awaiter(this, void 0, void 0, function* () { const ix = yield this.program.methods .extendAccount() .accounts({ account: account, program: this.program.programId }) .instruction(); return ix; }); /** * * @param newAdmin PublicKey * @returns Promise<TransactionInstruction> */ this.getUpdateAdminInstruction = (newAdmin) => __awaiter(this, void 0, void 0, function* () { const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const ix = yield this.program.methods .updateAdmin() .accounts({ globalConfig: globalConfig, program: this.program.programId, newAdmin: newAdmin }) .instruction(); return ix; }); /** * * @param lpFeeBasisPoints BN * @param protocolFeeBasisPoints BN * @param protocolFeeRecipients Array<PublicKey> * @returns Promise<TransactionInstruction> */ this.getUpdateFeeConfigInstruction = (lpFeeBasisPoints, protocolFeeBasisPoints, protocolFeeRecipients) => __awaiter(this, void 0, void 0, function* () { const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const ix = yield this.program.methods .updateFeeConfig(lpFeeBasisPoints, protocolFeeBasisPoints, protocolFeeRecipients) .accounts({ globalConfig: globalConfig, program: this.program.programId }) .instruction(); return ix; }); /** * * @param lpTokenAmountIn BN * @param minBaseAmountOut BN * @param minQuoteAmountOut BN * @param withdrawParam WithdrawType * @returns Promise<TransactionInstruction> */ this.getWithdrawInstruction = (lpTokenAmountIn, minBaseAmountOut, minQuoteAmountOut, withdrawParam) => __awaiter(this, void 0, void 0, function* () { const { baseMint, creator, index, quoteMint, user } = withdrawParam; const [pool] = web3_js_1.PublicKey.findProgramAddressSync([ Buffer.from(constants_1.POOL_SEED), new anchor_1.BN(index).toArrayLike(Buffer, "le", 8), creator.toBuffer(), baseMint.toBuffer(), quoteMint.toBuffer(), ], this.program.programId); const [lpMint] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.LP_MINT_SEED), pool.toBuffer()], this.program.programId); const [userPoolTokenAccount] = web3_js_1.PublicKey.findProgramAddressSync([creator.toBuffer(), spl_token_1.TOKEN_2022_PROGRAM_ID.toBuffer(), lpMint.toBuffer()], this.program.programId); const [globalConfig] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from(constants_1.GLOBAL_CONFIG_SEED)], this.program.programId); const userBaseTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(baseMint, user); const userQuoteTokenAccount = (0, spl_token_1.getAssociatedTokenAddressSync)(quoteMint, user); const ix = yield this.program.methods .withdraw(lpTokenAmountIn, minBaseAmountOut, minQuoteAmountOut) .accounts({ pool, globalConfig: globalConfig, userBaseTokenAccount, userQuoteTokenAccount, userPoolTokenAccount, program: this.program.programId, user: user }) .instruction(); return ix; }); const wallet = new nodewallet_1.default(web3_js_1.Keypair.generate()); const url = cluster == "mainnet" ? (0, web3_js_1.clusterApiUrl)("mainnet-beta") : (0, web3_js_1.clusterApiUrl)("devnet"); let connection; if (customRPC) { try { connection = new web3_js_1.Connection(customRPC, { commitment: commitment }); } catch (error) { connection = new web3_js_1.Connection(url, { commitment: commitment }); } } else { connection = new web3_js_1.Connection(url, { commitment: commitment }); } const provider = new anchor_1.AnchorProvider(connection, wallet, { commitment: commitment }); const program = new anchor_1.Program(pump_swap_json_1.default, provider); this.program = program; } } exports.default = PumpSwapSDK;