在松露控制台中使用OpenZeppelin ERC721 Mint时,“处理事务时发生VM异常:还原”

时间:2019-01-18 06:05:50

标签: ethereum solidity web3js

我正在使用带有简单薄荷功能的OpenZeppelin的ERC721。但是,在VM Exception while processing transaction: revert

中调用函数时,我得到truffle console

我首先打开Ganache,然后迁移truffle migrate --reset。然后,我truffle console,然后设置合同SimpleStorage.deployed().then((instance)=>{app=instance})。最后,我调用该函数并得到错误app.buyOneToken

这是我的SimpleStorage.sol

pragma solidity >=0.4.21 <0.6.0;

import './MyToken.sol';

contract SimpleStorage {

  //The ERC721 token
  MyToken public myToken;
  uint256 public tokenId;

  constructor (MyToken _myToken) public {
    myToken = _myToken;
    tokenId=0;
  }

  function buyOneToken() public payable {
    myToken.addMinter(msg.sender);
    require(myToken.mint(msg.sender, tokenId));
    tokenId++;
  }
}

这是MyToken.sol

pragma solidity >=0.4.21 <0.6.0;

import 'openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol';
import 'openzeppelin-solidity/contracts/token/ERC721/ERC721Mintable.sol';

contract MyToken is ERC721Full, ERC721Mintable{

  string name;
  string symbol;

  constructor (string memory _name, string memory _symbol) public 
ERC721Full(_name, _symbol) {
     // solhint-disable-previous-line no-empty-blocks
     name=_name;
     symbol=_symbol;
  }
}

这是两个.sol文件2_deploy_contracts.js的迁移

var SimpleStorage = artifacts.require("./SimpleStorage.sol");
var MyToken = artifacts.require("./MyToken.sol");

module.exports = function(deployer) {
  const _name = "Like Token";
  const _symbol = "LIKE";
  deployer.deploy(MyToken, _name, _symbol).then(function(){
    return deployer.deploy(SimpleStorage, MyToken.address);
  });
};

我有一个修改后的版本,仅迁移MyToken.sol(可以访问OpenZeppelin的ERC721库)。那我可以铸币罚款。但是,当我在迁移后按照上述步骤操作并使用松露控制台调用该函数时,会收到错误消息。

1 个答案:

答案 0 :(得分:1)

ERC721Mintable.mint有一个onlyMinter修饰符。

尝试添加一个铸造者地址,然后从该地址呼叫铸造者。