【发布时间】:2022-11-12 12:49:27
【问题描述】:
我不明白为什么当我尝试编译我的合约以交换不同 dex 上的代币时会出现此错误。
这里的代码:
//SPDX-License-Identifier: MIT
import "./Interfaces/IUniswapV2Router02.sol";
import "./Interfaces/IUniswapV2Factory.sol";
//import "./Interfaces/IUniswapV2Pair.sol";
import "./Interfaces/IERC20.sol";
import "./Interfaces/UniswapV2Library.sol";
//import "./Interfaces/IUniswapV2Callee.sol";
pragma solidity >0.5.0 < 0.9.0;
contract SwappingDex{
address public constant uniswapRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address public constant uniswapFactory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
address public constant sushiSwapRouter = 0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F;
address public constant sushiSwapFactory = 0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac;
address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
function swappingIn2DEX(address tokenIn, address tokenOut, uint amount, address to)external payable{
address pairOnUniswap;
address pairOnSushi;
pairOnUniswap = IUniswapV2Factory(uniswapFactory).getPair(tokenIn, tokenOut);
pairOnSushi = IUniswapV2Factory(sushiSwapFactory).getPair(tokenIn, tokenOut);
require(
pairOnSushi != 0x0000000000000000000000000000000000000000 &&
pairOnUniswap != 0x0000000000000000000000000000000000000000,
"No Pair"
);
address[] memory path;
path = new address[](2);
path[0] = tokenIn;
path[1] = tokenOut;
uint[]memory amountOutUniswap = IUniswapV2Router02(uniswapRouter).getAmountsOut(amount, path);
IERC20(tokenIn).transferFrom(msg.sender, address(this), amount);
IERC20(tokenIn).approve(uniswapRouter, amount);
IUniswapV2Router02(uniswapRouter).swapETHForExactTokens{value: msg.value}(
amountOutUniswap[1],
path,
to,
block.timestamp
);
}
安全帽.config.js
require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-ethers");
require("dotenv").config();
module.exports = {
solidity: "0.8.4",
networks: {
hardhat: {
forking:{
url: "*******",
},
},
}
};
一旦我去编译,通过 npx hardhat 编译,我得到这个错误:
类型错误:不允许从“uint256”到“地址”的显式类型转换。 --> 合同/接口/UniswapV2Library.sol:20:16: | 20 |对=地址(uint(keccak256(abi.encodePacked( | ^(相关源代码部分从这里开始并跨越多行)。
我正在寻找一些关于它的原因,我看到一些关于在 ^0.8.0 版本之后地址转换的内容。 我已经用相同的步骤在 uniswap 上做了项目,但这是我第一次遇到这个错误。 有人可以解释我为什么吗? 非常感谢!
【问题讨论】:
标签: blockchain ethereum solidity hardhat uniswap