首页 > 解决方案 > solidity 交易错误,如果您发送值并且您发送的值应该小于您当前的余额,则应该支付调用的函数

问题描述

我正在学习混音的稳固性。我在 youtube 上关注一些教程视频,但我一直在尝试建立 2 个合同。合约 ERC20Token 具有增加余额的功能。Mycontract 实例化并调用 mint 函数。我的做法和 youtube 上的那个人一样,但是当我调用 buyToken 函数时我遇到了错误。错误是说

向 MyContract.buyToken 交易错误:VM 错误:还原。

revert 事务已恢复到初始状态。

注意:如果您发送值并且您发送的值应该小于您当前的余额,则调用的函数应该是应付的。调试事务以获取更多信息。

请帮帮我。

这是代码。

pragma solidity 0.5.1;

contract ERC20Token{
   string public name;
   mapping(address => uint256) public balances;

   function mint() public {
       balances[tx.origin] ++;
  }
}

contract MyContract {
   address payable wallet;
   address public token;


   constructor(address payable _wallet, address _token) public {
    wallet = _wallet;
    token = _token;
}

    

   function buyToken() public payable {
       ERC20Token _token = ERC20Token(address(token)); 
       _token.mint();
       wallet.transfer(msg.value);
    
      }
  }

在此处输入图像描述

标签: blockchainethereumsolidityremix

解决方案


你应该在你的构造函数中使用payable,如下所示:

constructor(address payable _wallet) public payable{
     ...
}

推荐阅读