UNPKG

@flipflop-sdk/node

Version:

FlipFlop Node.js SDK for programmatic token operations

118 lines 4.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.displayLP = displayLP; const web3_js_1 = require("@solana/web3.js"); const raydium_sdk_v2_1 = require("@raydium-io/raydium-sdk-v2"); const spl_token_1 = require("@solana/spl-token"); const bn_js_1 = __importDefault(require("bn.js")); const display_pool_1 = require("./display-pool"); const config_1 = require("../config"); const remove_liquidity_1 = require("./remove-liquidity"); async function displayLP(options) { try { const { rpc, owner, mint } = options; // Validate inputs if (!mint) { return { success: false, message: "Token mint is required", }; } if (!owner) { return { success: false, message: "Owner is required", }; } if (!rpc) { return { success: false, message: "RPC is required", }; } const connection = new web3_js_1.Connection(rpc, "confirmed"); const networkType = (0, config_1.getNetworkType)(rpc); const config = config_1.CONFIGS[networkType]; // Initialize Raydium SDK const raydium = await raydium_sdk_v2_1.Raydium.load({ connection, cluster: networkType, disableFeatureCheck: true, disableLoadToken: true, }); // 使用与remove-liquidity.ts相同的方式获取池子信息 const poolInfo = await (0, display_pool_1.getPoolInfoByRpc)(connection, raydium, spl_token_1.NATIVE_MINT, mint, rpc); if (!poolInfo) { return { success: false, message: "No CPMM pool found for the given token", }; } if (!poolInfo.success) { return { success: false, message: poolInfo.message || "Unknown error", }; } const poolInfoData = poolInfo.data; const lpTokenMint = poolInfoData.mintLp; let lpTokenBalance = new bn_js_1.default(0); let shareOfPool = 0; let tokenAAmount = new bn_js_1.default(0); let tokenBAmount = new bn_js_1.default(0); try { const lpToken = await (0, remove_liquidity_1.getLpTokenAmount)(connection, owner, lpTokenMint); if (!lpToken.success || !lpToken.data) { return { success: false, message: lpToken.message || "Unknown error", }; } // 转换为可读格式 lpTokenBalance = lpToken.data.amount; // 计算池子份额 const totalLpSupply = poolInfoData.lpAmount; if (totalLpSupply > raydium_sdk_v2_1.ZERO) { const sharePercent = lpToken.data.amount.mul(new bn_js_1.default(10000)).div(totalLpSupply).toNumber() / 100; shareOfPool = sharePercent; const poolTokenAReserve = new bn_js_1.default(poolInfoData.baseReserve || "0"); const poolTokenBReserve = new bn_js_1.default(poolInfoData.quoteReserve || "0"); tokenAAmount = lpToken.data.amount .mul(poolTokenAReserve) .div(totalLpSupply); tokenBAmount = lpToken.data.amount .mul(poolTokenBReserve) .div(totalLpSupply); } } catch (error) { return { success: false, message: "Failed to fetch LP token balance", }; } return { success: true, data: { poolId: poolInfoData.poolAddress, lpTokenMint: poolInfoData.mintLp, lpTokenBalance, shareOfPool, tokenAAmount, tokenBAmount, poolInfo: poolInfoData, }, }; } catch (error) { return { success: false, message: "Error displaying LP info", }; } } //# sourceMappingURL=display-lp.js.map