是否可以从智能控制呼叫Uniswap,并与智能契约以太进行交换,而不是从消息发送方醚进行交换?(并将交换的令牌发回给所有者)
我在Kovan测试网上试过这样做,但失败了:
pragma solidity ^0.8.2;
import "https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol";
contract Coffre{
address owner =msg.sender;
IUniswapV2Router02 uni = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address private token_address = 0x514910771AF9Ca656af840dff83E8264EcF986CA; //chainlink
function getPathForETHtoToken() private view returns (address[] memory) {
address[] memory path = new address[](2);
path[0] = uni.WETH();
path[1] = token_address;
return path;
}
function swapContractEthToLink() public {
uni.swapExactETHForTokens(0,getPathForETHtoToken(), owner, block.timestamp + 15);
} 另外,对于swapExactETHForTokens,我无法指定要交换的合同中有多少Eth,所以它可能不是正确的函数
发布于 2021-03-11 05:08:54
如果您想要将ETH交换为令牌,则需要将ETH发送到您的合同中,因此您的函数中缺少了payable功能。
这是一个对我有用的代码示例:
function swapExactETHforTokens(
address tokenOut,
uint256 amountOut,
uint256 deadline
) external payable {
address[] memory path = new address[](2);
path[0] = uniswap.WETH();
path[1] = tokenOut;
uniswap.swapExactETHForTokens{value: msg.value}(
amountOut,
path,
msg.sender,
deadline
);
}根据你最后的评论:
另外,对于swapExactETHForTokens,我无法指定要交换的合同中有多少Eth,所以它可能不是正确的函数
在调用应付款函数时,可以通过发送ETH来指定ETH的数量。请注意,现在的函数是payable,并通过{value: msg.value}传递ETH数量。
https://ethereum.stackexchange.com/questions/94488
复制相似问题