blockchain - 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);
}
}
解决方案
你应该在你的构造函数中使用payable,如下所示:
constructor(address payable _wallet) public payable{
...
}
推荐阅读
- python - 从按多列分组的 pandas 数据框中获取嵌套的 JSON
- api - Graph API 不会恢复邮件消息,而是创建一条新消息,其中 CreateDateTime 自动更新为当前日期
- model - 对这个(简单的)Optaplanner 用例进行建模的更好方法是什么?
- php - Laravel 查询生成器获取用户登录记录
- python - 如何在数据集中添加填充以填充列表中最多 50 个项目并将 NaN 替换为 0?
- qt - 在Qt中再次单击按钮时如何扭转这种情况?
- python - 文件不为空但是python以列表形式将文件输出为空?
- next.js - 带有 next.js api 路由的 excel4node 获取请求未触发下载
- android - Ionic cordova - Cors 不适用于较新版本的 android,但它适用于 android 7 或 6
- python - python中决策树的数据集偏差减少