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