@flipflop-sdk/node
Version:
FlipFlop Node.js SDK for programmatic token operations
118 lines • 4.35 kB
JavaScript
"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