Uniswap getAmountsOut() 将值向下舍入到最接近的以太币
Uniswap getAmountsOut() rounds value down to nearest Ether
我正在使用 ethers.js 从 UniswapV2Router02 合约调用 getAmountsOut()
,我正在检查 50000 DAI 可以获得的 ETH 数量。
使用下面的代码,输出金额告诉我我目前可以准确地获得 15 ETH。出于测试目的,我直接使用 Uniswap 合约而不是 Uniswap SDK。
const UNISWAPV2_ROUTER02_ADDRESS = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";
const UNISWAPV2_ROUTER02_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" }], "name": "getAmountsOut", "outputs": [{ "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }]
const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f";
const WETH_ADDRESS = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
const uniswap = new ethers.Contract(
UNISWAPV2_ROUTER02_ADDRESS,
UNISWAPV2_ROUTER02_ABI,
ethers.provider,
);
let amountEthFromDAI = await uniswap.getAmountsOut(
50000,
[DAI_ADDRESS, WETH_ADDRESS]
)
console.log("Amount of ETH from DAI: ", amountEthFromDAI[1]);
然而在实际的 Uniswap 界面上它告诉我我可以获得总共 15.8832 ETH,这要多得多。
似乎 getAmountsOut()
正在四舍五入到最接近的以太币。如何获得以 wei 为单位的输出量,以便准确反映我在 Uniswap 界面上看到的内容?
为了getAmountsOut()
到return一个wei值,你需要提供一个wei值。
所以不要为 amountsIn
使用 50000,而是使用 ethers.utils.parseEther("50000")
:
let amountEthFromDai = await uniswap.getAmountsOut(
ethers.utils.parseEther("50000"),
[DAI_ADDRESS, WETH_ADDRESS]
)
我正在使用 ethers.js 从 UniswapV2Router02 合约调用 getAmountsOut()
,我正在检查 50000 DAI 可以获得的 ETH 数量。
使用下面的代码,输出金额告诉我我目前可以准确地获得 15 ETH。出于测试目的,我直接使用 Uniswap 合约而不是 Uniswap SDK。
const UNISWAPV2_ROUTER02_ADDRESS = "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D";
const UNISWAPV2_ROUTER02_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address[]", "name": "path", "type": "address[]" }], "name": "getAmountsOut", "outputs": [{ "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }]
const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f";
const WETH_ADDRESS = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
const uniswap = new ethers.Contract(
UNISWAPV2_ROUTER02_ADDRESS,
UNISWAPV2_ROUTER02_ABI,
ethers.provider,
);
let amountEthFromDAI = await uniswap.getAmountsOut(
50000,
[DAI_ADDRESS, WETH_ADDRESS]
)
console.log("Amount of ETH from DAI: ", amountEthFromDAI[1]);
然而在实际的 Uniswap 界面上它告诉我我可以获得总共 15.8832 ETH,这要多得多。
似乎 getAmountsOut()
正在四舍五入到最接近的以太币。如何获得以 wei 为单位的输出量,以便准确反映我在 Uniswap 界面上看到的内容?
为了getAmountsOut()
到return一个wei值,你需要提供一个wei值。
所以不要为 amountsIn
使用 50000,而是使用 ethers.utils.parseEther("50000")
:
let amountEthFromDai = await uniswap.getAmountsOut(
ethers.utils.parseEther("50000"),
[DAI_ADDRESS, WETH_ADDRESS]
)