首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Uniswap交换智能控制以太

用Uniswap交换智能控制以太
EN

Ethereum用户
提问于 2021-03-11 03:14:34
回答 1查看 2K关注 0票数 2

是否可以从智能控制呼叫Uniswap,并与智能契约以太进行交换,而不是从消息发送方醚进行交换?(并将交换的令牌发回给所有者)

我在Kovan测试网上试过这样做,但失败了:

代码语言:javascript
复制
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,所以它可能不是正确的函数

EN

回答 1

Ethereum用户

回答已采纳

发布于 2021-03-11 05:08:54

如果您想要将ETH交换为令牌,则需要将ETH发送到您的合同中,因此您的函数中缺少了payable功能。

这是一个对我有用的代码示例:

代码语言:javascript
复制
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数量。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/94488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档