Твердость: попытайтесь заключить контракт с минимальным токеном, но он не работает - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь сделать краудсейл умным контрактом, используя "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;
}

Я получил несколько ошибок, как показано ниже.

Я не знаю, почему выдается ошибка «Возврат» ...

The error

1 Ответ

0 голосов
/ 05 мая 2018

Похоже, вы прокомментировали создание токена из краудсейл-контракта. Я предполагаю, что это означает, что вы развертываете SYToken вручную, а затем передаете адрес в свой краудсейл-контракт. Когда вы создаете токен-контракт, его владельцу будет присвоен любой адрес, который вы использовали при развертывании. Транзакция mint имеет ограничение onlyOwner. Когда вы пытаетесь позвонить mint из вашего краудсейл-контракта, при проверке владельца он использует адрес краудсейл-контракта, а не адрес инициатора транзакции. Чтобы обойти это, создайте контракт на токен при создании контракта на краудсейл или перенесите право собственности на свой контракт на токен на адрес вашего контракта на краудсейл.

Если у вас все еще есть проблемы, я бы порекомендовал пройти через отладчик в Remix.

...