2

我正在 web3 中迈出第一步,这就是为什么问题可能很愚蠢。

我不明白,为什么 Pancakeswap 的 v2 路由器的 getAmountsOut 方法的结果与我在 Pancakeswap 前端看到的交换结果有很大不同。

BAKE 小数应该自动无处不在 18,所以我不明白这种不同结果的原因。

BUSD-BAKE 互换示例

  1. 我的代码(结果为 20000 BUSD -> 163 BAKE)

const Web3 = require('web3');
const abis = require('./abis');
const web3 = new Web3('wss://bsc-ws-node.nariox.org:443');

const amountInBUSD = web3.utils.toBN(web3.utils.toWei('20000'));
const busdTokenAddress = "0xE02dF9e3e622DeBdD69fb838bB799E3F168902c5";
const bakeTokenAddress = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56";

const init = async () => {
  const pancakeSwap = new web3.eth.Contract(
    abis.pancakeSwap.router,
    "0x10ED43C718714eb63d5aA57B78B54704E256024E"
  );

  web3.eth.subscribe('newBlockHeaders')
    .on('data', async block => {
      const bakeOutput = await pancakeSwap.methods.getAmountsOut(amountInBUSD, [busdTokenAddress, bakeTokenAddress]).call();
      console.log(`PancakeSwap BUSD-BAKE: ${web3.utils.fromWei(amountInBUSD.toString())} -> ${web3.utils.fromWei(bakeOutput[1].toString())}`);
    })
    .on('error', error => {
      console.log(error);
    });
}
init();

  1. 在 bscscan 中调用路由器合约上的 getAmountsOut 方法(结果为 20000 BUSD -> 163 BAKE)

在此处输入图像描述

  1. PancakeSwap UI 的屏幕截图(结果为 20000 BUSD -> 12100 BAKE)

PancakeSwap UI 的屏幕截图

4

1 回答 1

0

如果您将 pcs 屏幕截图上的路径/路由与 bsc 上的路径进行比较,您应该注意到它没有使用相同的路径。

如果您交易对 BUSD -> BAKE vs. BUSD -> BNB -> BAKE,您将获得不同的价格

另请注意价格对游泳池的影响。

于 2022-01-03T10:58:56.930 回答