Я использую 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). Тогда я могу чеканить жетон. Однако когда я выполняю процедуру, описанную выше, после миграции и использую консоль трюфеля для вызова функции, я получаю сообщение об ошибке.