UNPKG

@flipflop-sdk/node

Version:

FlipFlop Node.js SDK for programmatic token operations

86 lines 3.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPoolInfoByRpc = void 0; exports.displayPool = displayPool; const web3_js_1 = require("@solana/web3.js"); const raydium_sdk_v2_1 = require("@raydium-io/raydium-sdk-v2"); const config_1 = require("../config"); const utils_1 = require("../utils"); const getPoolInfoByRpc = async (connection, raydium, tokenAMint, tokenBMint, rpc) => { try { const networkType = (0, config_1.getNetworkType)(rpc); const config = config_1.CONFIGS[networkType]; const mintA = new web3_js_1.PublicKey(tokenAMint); const mintB = new web3_js_1.PublicKey(tokenBMint); const ammConfig = new web3_js_1.PublicKey(config.cpSwapConfigAddress); const programId = new web3_js_1.PublicKey(config.cpSwapProgram); const [mint0, mint1] = (0, utils_1.compareMints)(mintA, mintB) < 0 ? [mintA, mintB] : [mintB, mintA]; const [poolAddress] = (0, utils_1.getPoolAddress)(ammConfig, mint0, mint1, programId); const poolAccountInfo = await connection.getAccountInfo(poolAddress); if (!poolAccountInfo) { return { success: false, message: `Pool account does not exist at address ${poolAddress.toBase58()}`, }; } const cpmmPoolInfo = raydium_sdk_v2_1.CpmmPoolInfoLayout.decode(poolAccountInfo.data); const rpcPoolInfos = await raydium.cpmm.getRpcPoolInfos([ poolAddress.toBase58(), ]); if (!rpcPoolInfos || (Array.isArray(rpcPoolInfos) && rpcPoolInfos.length === 0)) { return { success: false, message: `Could not fetch pool info from RPC for address ${poolAddress.toBase58()}`, }; } const rpcPoolInfo = (Array.isArray(rpcPoolInfos) ? rpcPoolInfos[0] : rpcPoolInfos)[poolAddress.toBase58()]; return { success: true, data: { ...rpcPoolInfo, lpMint: cpmmPoolInfo.mintLp, poolAddress: poolAddress, mintA: mint0, mintB: mint1, programId, }, }; } catch (error) { return { success: false, message: `Error getting pool info by RPC: ${error.message}`, }; } }; exports.getPoolInfoByRpc = getPoolInfoByRpc; async function displayPool(options) { // Validate inputs if (!options.tokenAMint || !options.tokenBMint) { return { success: false, message: "Token mints are required", }; } const connection = options.connection; const networkType = (0, config_1.getNetworkType)(connection.rpcEndpoint); // Initialize Raydium SDK (without wallet for read-only operations) const raydium = await raydium_sdk_v2_1.Raydium.load({ connection, cluster: networkType, disableFeatureCheck: true, disableLoadToken: true, }); try { const result = await (0, exports.getPoolInfoByRpc)(connection, raydium, options.tokenAMint, options.tokenBMint, connection.rpcEndpoint); return result; } catch (error) { return { success: false, message: `Error displaying pool info: ${error.message}`, }; } } //# sourceMappingURL=display-pool.js.map