我正在尝试使用“zeppelin-solidity”制作智能合约
但它总是抛出“恢复”错误。 特别是当我想使用令牌相关的功能,如token.mint,transfer等等。
有人可以检查我的代码中有什么问题吗?
以下是众筹代码。
pragma solidity ^0.4.15;
import './SSSToken.sol';
import 'zeppelin-solidity/contracts/crowdsale/Crowdsale.sol';
import "zeppelin-solidity/contracts/token/ERC20/SafeERC20.sol";
contract SSSTokenSale is Crowdsale {
using SafeMath for uint256;
uint256 public round;
uint256 public every;
MintableToken public token;
constructor(
// uint256 _startTime,
// uint256 _endTime,
uint256 _rate,
address _wallet,
uint256 _initialMint,
uint256 _every,
MintableToken _token
)
public
Crowdsale(_rate, _wallet, _token)
{
token = _token;
// token.mint(_wallet, _initialMint);
every = _every;
}
// function createTokenContract() internal returns (MintableToken) {
// return new SSSToken();
// }
function () external payable {
buyTokens(msg.sender);
}
function buyTokens(address beneficiary) public payable {
require(beneficiary != 0x0);
// calculate token amount to get
uint256 weiAmount = msg.value;
uint256 tokens = weiAmount.mul(rate);
weiRaised = weiRaised.add(weiAmount);
round = round.add(1);
// double
if (round % every == 0) {
tokens = tokens.mul(2);
}
token.mint(msg.sender, tokens);
TokenPurchase(beneficiary, beneficiary, weiAmount, tokens);
_forwardFunds();
}
}
以下是令牌合约。
pragma solidity ^0.4.15;
import 'zeppelin-solidity/contracts/token/ERC20/MintableToken.sol';
contract SYToken is MintableToken {
string public name = "SSS TOKEN";
string public symbol = "SSS";
uint256 public decimals = 8;
}
我收到了类似下面的几个错误。
我不知道为什么错误“Revert”被抛出......
答案 0 :(得分:0)
看起来您已经从众筹合同中注释掉了令牌创建。我认为这意味着您手动部署SYToken
,然后将地址传递到您的众筹合同中。创建令牌合同时,所有者将设置为您在部署时使用的任何地址。 mint
交易有onlyOwner
作为限制。当您尝试从众筹合同中调用mint
时,它会在检查所有者时使用众筹合同的地址,而不是发起交易的人的地址。要解决这个问题,请在创建众筹合同时创建令牌合同,或者将令牌合同的所有权转移到您的众筹合同地址。
如果您仍有问题,我建议您在Remix中使用调试器。