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

ethers.js调用getAmountsOut获取PancakeSwap价格小数位异常问题咨询

问题解答

问题1:小数位偏差9位的原因

你调用getAmountsOut返回的第二个值是WBNB的最小单位数量,WBNB的链上精度为18位,而你在调用ethers.utils.formatUnits做格式化时,错误传入了代币FEG的精度9作为参数,相当于最终结果少除以了10^9,刚好出现9位的量级偏差。
修正输出代码即可:

console.log(`${ethers.utils.formatUnits(wbnbsPerToken[1], 18)} WBNB per FEG`);

问题2:持续价格差的原因

和滑点无关,是你的代码逻辑本身存在错误,同时叠加代币机制影响:

  • 第一处核心错误:你初始化路由合约时传错了合约地址。getAmountsOut是PancakeSwap V2 Router合约的方法,不是Factory合约的方法,你传入Factory地址调用该方法得到的返回值本身就是错误的。你需要将初始化合约的第一个参数替换为BSC主网PancakeSwap V2 Router的官方地址0x10ED43C718714eb63d5aA57B78B54704E256024E。
  • 第二处影响因素:FEG属于带交易税的反射类代币,每笔交易都会被代币合约扣除一定比例的税费(包含销毁、持币分红等)。getAmountsOut仅计算AMM交易池本身的兑换比例,不会计算代币层面的扣税,而PancakeSwap前端显示的报价是已经扣除交易税后用户实际可到账的数值,因此会比你直接调用接口得到的数值更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:27:03