You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算Raydium兑换的amountOut并获取poolKeys?求简单示例

Raydium兑换中获取poolKeys及计算amountOut的实现示例

获取Pool Keys

要计算兑换产出,首先得拿到对应交易对的poolKeys,可通过Raydium SDK的Liquidity.getPoolKeys方法获取,示例代码如下:

import { Liquidity, Token, TOKEN_PROGRAM_ID } from '@raydium-io/raydium-sdk';
import { Connection, PublicKey } from '@solana/web3.js';

// 初始化Solana节点连接
const connection = new Connection('https://api.mainnet-beta.solana.com');

// 定义交易对的代币Mint地址(示例为SOL-USDC)
const solMint = new PublicKey('So11111111111111111111111111111111111111112');
const usdcMint = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');

// 获取poolKeys
async function fetchPoolKeys() {
  const poolKeys = await Liquidity.getPoolKeys({
    connection,
    mintA: solMint,
    mintB: usdcMint,
    // Raydium AMM主网程序ID,测试网需替换为对应ID
    programId: new PublicKey('675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8'),
    tokenProgramId: TOKEN_PROGRAM_ID,
  });
  return poolKeys;
}

获取Pool Info

拿到poolKeys后,需要获取池子的当前状态信息(储备金、手续费等),用于计算兑换产出:

async function fetchPoolInfo(poolKeys) {
  const poolAccountData = await connection.getAccountInfo(poolKeys.id);
  const poolInfo = Liquidity.getPoolInfo(poolAccountData.data);
  return poolInfo;
}

计算预兑换产出(amountOut)

结合上述数据,调用Liquidity.computeAmountOut计算预计产出,注意传入的金额需为代币最小单位(比如1 SOL对应1e9个最小单位):

async function calculateAmountOut(inputAmount, slippageRate) {
  const poolKeys = await fetchPoolKeys();
  const poolInfo = await fetchPoolInfo(poolKeys);

  // 定义输入输出代币(需对应正确的小数位数)
  const inputToken = new Token(solMint, 9);
  const outputToken = new Token(usdcMint, 6);

  const calculationResult = Liquidity.computeAmountOut({
    poolKeys,
    poolInfo,
    amountIn: inputAmount,
    currencyIn: inputToken,
    currencyOut: outputToken,
    slippage: slippageRate, // 滑点比例,比如0.01代表1%
  });

  return calculationResult.amountOut;
}

// 调用示例:计算兑换1 SOL(1e9最小单位)、滑点1%时的USDC产出
calculateAmountOut(1e9, 0.01)
  .then(output => console.log(`预计获得USDC:${output / 1e6}`))
  .catch(error => console.error('计算失败:', error));

关键注意事项

  • 确保使用的Raydium SDK版本为最新稳定版,避免接口兼容问题
  • 测试环境需替换对应的程序ID和节点连接地址
  • 所有金额参数必须转换为代币的最小单位(根据代币decimals计算)
  • 若获取poolKeys失败,需检查代币对是否在Raydium上存在流动性池

内容的提问来源于stack exchange,提问作者forexmp45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:41:12