„VM-Ausnahme während der Verarbeitung der Transaktion: ungültiger Opcode“ beim Bereitstellen des Vertrags

Ich erhalte die folgende Fehlermeldung, wenn ich mit web3js einen Smart Contract basierend auf Open Zeppelin bereitstelle :

Uncaught (in promise) Error: VM Exception while processing transaction: invalid opcode
    at Object.InvalidResponse (errors.js:35)
    at requestmanager.js:86
    at XMLHttpRequest.request.onreadystatechange (httpprovider.js:122)

wo der Vertragscode steht

pragma solidity ^0.4.15;

import "./libs/zeppelin/crowdsale/CappedCrowdsale.sol";
import "./libs/zeppelin/crowdsale/FinalizableCrowdsale.sol";
import './TestToken.sol';

contract SampleCrowdsale is CappedCrowdsale, FinalizableCrowdsale {

    TestToken public testToken ;

  function SampleCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet, address _tokenContractAddress)
    CappedCrowdsale(_cap)
    FinalizableCrowdsale()
    Crowdsale(_startTime, _endTime, _rate, _wallet)
  {

    testToken = TestToken(_tokenContractAddress);
  }

  function createTokenContract() internal returns (MintableToken) {
    return testToken;
  }

}

Aber alles funktioniert, wenn ich FinalizableCrowdsalezu ändere RefundableCrowdsale:

pragma solidity ^0.4.15;

import "./libs/zeppelin/crowdsale/CappedCrowdsale.sol";
import "./libs/zeppelin/crowdsale/RefundableCrowdsale.sol";
import './TestToken.sol';

contract SampleCrowdsale is CappedCrowdsale, RefundableCrowdsale {

    TestToken public testToken ;

  function SampleCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet, address _tokenContractAddress)
    CappedCrowdsale(_cap)
    FinalizableCrowdsale()
    Crowdsale(_startTime, _endTime, _rate, _wallet)
  {
    require(_goal <= _cap);
    testToken = TestToken(_tokenContractAddress);
  }

  function createTokenContract() internal returns (MintableToken) {
    return testToken;
  }

}

Frage: Kann mir bitte jemand erklären, warum der erste verwendete Vertrag FinalizableCrowdsalediesen Fehler auslöst? RefundableCrowdsaleerbt FinalizableCrowdsale, gibt aber keine Fehler aus ...

Zugehörige Dateien:

  1. https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/crowdsale/Crowdsale.sol
  2. https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/crowdsale/FinalizableCrowdsale.sol
  3. https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/crowdsale/RefundableCrowdsale.sol

Antworten (1)

Ich konnte Ihre bereitstellen, FinalizableCrowdsale SampleCrowdsalenachdem ich den FinalizableCrowdsale()Aufruf vom Konstruktor entfernt hatte.

Ich habe die folgenden Parameter im Konstruktoraufruf verwendet:

1511030956, 1511117356, 1, 100, 200, "0x01", "0x02"

Ich habe meinen Vertrag mit Remix bereitgestellt, also habe ich den Code leicht geändert (zumal ich den TestToken-Code nicht hatte):


pragma solidity ^0.4.15;

import "github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol";
import "github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/FinalizableCrowdsale.sol";
import "github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol";
import "github.com/OpenZeppelin/zeppelin-solidity/contracts/token/MintableToken.sol";

contract SampleCrowdsale is CappedCrowdsale, FinalizableCrowdsale {

    MintableToken public testToken ;

  function SampleCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, uint256 _goal, uint256 _cap, address _wallet, address _tokenContractAddress)
    CappedCrowdsale(_cap)
    Crowdsale(_startTime, _endTime, _rate, _wallet)
  {

    testToken = MintableToken(_tokenContractAddress);
  }

  function createTokenContract() internal returns (MintableToken) {
    return testToken;
  }

}

Eine Sache, die mir aufgefallen ist, ist, dass RefundableCrowdsaleein Argument für seinen Konstruktor erforderlich ist, während as FinalizableCrowdsalenicht und es nicht notwendig ist, den Konstruktor eines übergeordneten Elements aufzurufen, wenn es keine Argumente akzeptiert .

Ich vermute, dass dieses kleine Detail die Ursache des Problems ist.

_startTimeAls ich von 1510889758zu wechselte 1520889758, fing es an zu arbeiten! Warum ist die Startzeit wichtig?
Wo finde ich diesen Crowdsale-Vertrag? kann die Datei „FinalizableCrowdsale.sol“ nicht finden