«Исключение VM при обработке транзакции: отменить» при использовании монетного двора OpenZeppelin ERC721 в трюфельной консоли - PullRequest
0 голосов
/ 18 января 2019

Я использую ERC721 OpenZeppelin с простой функцией монетного двора. Тем не менее, я получаю 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 голосов
/ 18 января 2019

ERC721Mintable.mint имеет модификатор onlyMinter.

Попробуйте добавить адрес minter и затем вызвать mint с этого адреса.

...