Solidity:尝试制作mintable令牌合同,但不起作用

时间:2018-05-05 10:38:53

标签: ethereum solidity revert truffle

我正在尝试使用“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”被抛出......

The error "revert" is shown all the time.

1 个答案:

答案 0 :(得分:0)

看起来您已经从众筹合同中注释掉了令牌创建。我认为这意味着您手动部署SYToken,然后将地址传递到您的众筹合同中。创建令牌合同时,所有者将设置为您在部署时使用的任何地址。 mint交易有onlyOwner作为限制。当您尝试从众筹合同中调用mint时,它会在检查所有者时使用众筹合同的地址,而不是发起交易的人的地址。要解决这个问题,请在创建众筹合同时创建令牌合同,或者将令牌合同的所有权转移到您的众筹合同地址。

如果您仍有问题,我建议您在Remix中使用调试器。