首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:"msg.value“和"callvalue()”只能用于应付的公共功能

TypeError:"msg.value“和"callvalue()”只能用于应付的公共功能
EN

Stack Overflow用户
提问于 2022-02-05 19:11:22
回答 1查看 1K关注 0票数 0

在我的合同中,我试图使用Uniswap的swapExactETHForTokens()函数将Eth替换为Dai:

代码语言:javascript
复制
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()中的这一行

代码语言:javascript
复制
uniswap.swapExactETHForTokens{value: msg.value}(

混合IDE显示了以下错误:

代码语言:javascript
复制
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接口中是可支付的。

这个错误的搜索结果是空白的,所以我想在这里问是好的。我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-05 19:11:22

我意识到了自己的错误:我需要将payable关键字添加到自己的swapExactETHForTokens()实现中,如下所示:

代码语言:javascript
复制
  function swapExactETHForTokens(uint amountOutMin, address token) external payable { // payable keyword here
    address[] memory path = new address[](2);
    path[0] = uniswap.WETH();
    path[1] = token;
    uniswap.swapExactETHForTokens{value: msg.value}(
      amountOutMin, 
      path,
      msg.sender, 
      now
    );
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71001299

复制
相关文章

相似问题

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