Ungültiger Opcode beim Senden von Eth zum Öffnen von Zeppelin Crowdsale auf testrpc

Ich arbeite seit ein paar Tagen daran, einen Crowdsale-Vertrag mit der Open Zeppelin-Bibliothek und Truffle zu bekommen.

Ich kann den grundlegenden Crowdsale zum Laufen bringen, aber sobald ich versuche, einen RefundableCrowdsale oder CappedCrowdsale zu implementieren, funktioniert der Code nicht mehr.

Ich kann den Code erfolgreich mit Truffle kompilieren und migrieren, aber wenn ich Geld auf das Vertragskonto sende, bekomme ich den Fehler:

Fehler aufgetreten, Bailing. Netzwerkstatus unbekannt. Überprüfen Sie erfolgreiche Transaktionen manuell. Fehler: VM-Ausnahme während der Verarbeitung der Transaktion: ungültiger Opcode bei Object.InvalidResponse (/usr/lib/node_modules/truffle/build/cli.bundled.js:37295:16)

Irgendwelche Ideen, was dieses Problem verursachen könnte? Code für den Crowdsale:

> pragma solidity ^0.4.15;
> 
> import './CBIToken.sol'; import
> 'zeppelin-solidity/contracts/crowdsale/Crowdsale.sol'; import
> 'zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol'; import
> 'zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol';
> 
> 
> contract CBITokenCrowdsale is CappedCrowdsale, RefundableCrowdsale {
>   function CBITokenCrowdsale(uint256 _startTime, uint256 _endTime,
> uint256 _rate, uint256 _goal, uint256 _cap, address _wallet)
>       CappedCrowdsale(_cap)       FinalizableCrowdsale()
>       RefundableCrowdsale(_goal)      Crowdsale(_startTime, _endTime, _rate,
> _wallet) {            require(_goal <=_cap);      }
> 
>   //Create token  function createTokenContract() internal returns
> (MintableToken) {         return new CBIToken();  } }

und Migrationen:

const CBITokenCrowdsale = artifacts.require("./CBITokenCrowdsale.sol")

module.exports = function(deployer, network, accounts) {
  const startTime = web3.eth.getBlock(web3.eth.blockNumber).timestamp + 1 // one second in the future
  const endTime = startTime + 180//(86400 * 20) // 20 days
  const rate = new web3.BigNumber(1000)
  const goal = new web3.BigNumber(200)
  const cap = new web3.BigNumber(20000)
  const wallet = accounts[0]
  //const gas = 1000000

  deployer.deploy(CBITokenCrowdsale, startTime, endTime, rate, goal, cap, wallet)
};

Jede Hilfe wäre sehr willkommen!

Antworten (1)

Versuchen Sie es mit einer größeren ZeitStart:

  const startTime = web3.eth.getBlock(web3.eth.blockNumber).timestamp + 10

Es ist möglich, dass die Validierung im Crowdsale-Vertrag aufgrund der Zeit fehlschlägt, die für die Bereitstellung des Vertrags benötigt wird.

Und wie senden Sie die Gelder? Fügen Sie nach der Migration möglicherweise eine Ruhezeit hinzu.