我有下一个代码来熟悉uniswap机制:
getAmountsOut
并提供所有UNI代币储备 const pairAddress = await _V2Factory.getPair(uniToken, wethToken);
const pairContract = new ethers.Contract(
pairAddress,
IUniswapV2Pair.abi,
_provider
);
const tmpReserves = await pairContract.getReserves();
const reserves = [reserves.reserve0, reserves.reserve1];
console.log("reserves", reserves);
const output = await router.getAmountsOut(reserves[0], [
uniToken.address,
wethToken.address,
]);
console.log("output", output);
输出是:
[ 36851089197799104779745113323n, 281312509765248795074n ]
[ 36851089197799104779745113323n, 140444953548298972803n ]
问题是为什么我没有收到
output
数组的第二个元素等于 281312509765248795074n
- 全部 WETH
流动性成对但只是部分流动性等于 140444953548298972803n
值?
我正在运行本地安全帽节点,第 3 方操作不应影响结果。我也在主网上尝试过,显然结果是一样的。
也尝试从
getAmountsOut
切换到 getAmountOut
,但其行为方式相同:
const output2 = await router.getAmountOut(
reserves[0],
reserves[0],
reserves[1]
);
console.log("output2", output2);
输出:
143271499822164119007n