Baa*_*ark 7 blockchain ethereum solidity remix
我正在学习混音的可靠性。我正在关注 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);
}
}
Run Code Online (Sandbox Code Playgroud)

首先,您需要部署ERC20Token.
就我而言,它已部署到地址0xcD6a42782d230D7c13A74ddec5dD140e55499Df9。
该地址ERC20Token对于下一步很重要。
然后您部署MyContract. 不要忘记传递构造函数参数:
_wallet是 Remix JS VM 模拟器中的任何有效地址(来自Account选择框)
为了回答这个问题,我选择了地址0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c,您也将在第三步中看到该地址。
_token是上一步中的代币合约地址
最后就可以执行该buyToken()函数了MyContract。
您可以看到,在函数执行之前,发送者有 89 ETH,并且即将通过交易发送 50 ETH。
成功执行后,发送者现在有 39 ETH,并且wallet由于这一行而收到了 50 ETH:
wallet.transfer(msg.value);
Run Code Online (Sandbox Code Playgroud)
正如您在屏幕截图中看到的,交易成功了。
因为您当前的余额为0。您可以尝试使用低级交互来发送一些余额到合约地址。让我知道这是否有效!
| 归档时间: |
|
| 查看次数: |
7557 次 |
| 最近记录: |