我正在使用 getAmountsOut() 接口来获取随机 BSC 代币的当前 PancakeSwap 价格。
我得到的数字确实与 Pancakeswap 的报价相匹配(大致),但我似乎无法以具有正确小数的人类可读格式显示它。
import ethers from "ethers";
// ...open factory, account etc....
const TOKEN_WBNB_ADDR = "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"; // WBNB
const TOKEN_FEG_ADDR = "0xacfc95585d80ab62f67a14c566c1b7a49fe91167"; // Token
const router = new ethers.Contract(
factory, // PancakeSwap V2 factory
['function getAmountsOut(uint amountIn, address[] memory path) public view returns (uint[] memory amounts)'],
account,
);
// how many WBNBs would we get for 1 FEG?
const wbnbsPerToken = await router.getAmountsOut(
ethers.utils.parseUnits("1.00", 9), // token has 9 decimals
[TOKEN_FEG_ADDR, TOKEN_WBNB_ADDR]);
console.log(`${ethers.utils.formatUnits(wbnbsPerToken[1], 9)} WBNB per FEG`);
// My script's output: 0.018870301 WBNB per FEG
// PancakeSwap's output: 0.0000000000190529 WBNB per FEG
问题 1:忽略微小的价格差异,为什么我的小数点差这么差(9 位)?
问题二:为什么会有差价?有滑点的东西?Pancakeswap 对该硬币的报价始终较高。这不是时间问题,而是一致的。
还是我完全错误地计算了报价?
提前致谢!