在我的合同中,我尝试使用 Uniswap 的swapExactETHForTokens()
功能将 Eth 换成 Dai:
pragma solidity ^0.6.6;
interface IUniswap {
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline)
external
payable
returns (uint[] memory amounts);
function WETH() external pure returns (address);
}
contract MyContract {
IUniswap uniswap;
constructor(address _uniswap) public {
uniswap = IUniswap(_uniswap);
}
function swapExactETHForTokens(uint amountOutMin, address token) external {
address[] memory path = new address[](2);
path[0] = uniswap.WETH();
path[1] = token;
uniswap.swapExactETHForTokens{value: msg.value}(
amountOutMin,
path,
msg.sender,
now
);
}
}
但是在这条线上swapExactETHForTokens()
:
uniswap.swapExactETHForTokens{value: msg.value}(
Remix IDE 显示以下错误:
contracts/MyContract.sol:26:42: TypeError: "msg.value" and "callvalue()" can only be used in payable public functions. Make the function "payable" or use an internal function to avoid this error.
uniswap.swapExactETHForTokens{value: msg.value}(
^-------^
我很困惑,因为在顶部我已经swapExactETHForTokens()
在 IUniswap 界面中声明了应付账款。
此错误的搜索结果显示为空白,所以我认为在这里询问会很好。我怎样才能解决这个问题?