如何在Solana Raydium上计算兑换输出金额(amountOut)?
在Solana Raydium上计算兑换输出金额(amountOut)的正确方式
你的代码思路没问题,但要注意几个细节来保证计算准确:
参数格式修正:
slippage需传入数值类型而非字符串,直接写5就代表5%滑点,字符串格式会干扰计算逻辑amountIn你的写法是对的,必须是对应代币的最小单位数值(比如USDC的1单位对应1e6最小单位,5 USDC就写5000000)currencyOut要确保是当前池子内的有效代币地址,和poolKeys中的代币信息匹配
修正后的代码示例:
const poolInfo = await Liquidity.fetchInfo({ connection: raydiumSwap.connection, poolKeys: poolKeys, }); const amountOut = Liquidity.computeAmountOut({ poolKeys, poolInfo, amountIn: '5000000', currencyOut: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', slippage: 5, }).amountOut; console.log(amountOut);
- 额外注意点:
- 计算返回的
amountOut是代币最小单位数值,比如USDC结果需要除以1e6才能得到实际可获得的USDC数量 - 先确认
poolInfo是否成功获取到池子储备金(reserves)数据,这是计算的核心依据,如果储备金为空或错误,计算结果必然异常 - 要保证
poolKeys是目标交易对的正确池子地址,错用其他池子的key会导致计算完全偏离预期
- 计算返回的
内容的提问来源于stack exchange,提问作者forexmp45
相关产品推荐
相关产品推荐

