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 FinalizableCrowdsale
zu ä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 FinalizableCrowdsale
diesen Fehler auslöst? RefundableCrowdsale
erbt FinalizableCrowdsale
, gibt aber keine Fehler aus ...
Zugehörige Dateien:
Ich konnte Ihre bereitstellen, FinalizableCrowdsale
SampleCrowdsale
nachdem 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 RefundableCrowdsale
ein Argument für seinen Konstruktor erforderlich ist, während as FinalizableCrowdsale
nicht 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.
Nyxynyx
_startTime
Als ich von1510889758
zu wechselte1520889758
, fing es an zu arbeiten! Warum ist die Startzeit wichtig?Ashutosh Singh