Opcode no válido al enviar Eth para abrir zeppelin crowdsale en testrpc

He estado trabajando para obtener un contrato de venta colectiva que funcione con la biblioteca Open Zeppelin y Truffle durante un par de días.

Puedo hacer que funcione el crowdsale básico, pero tan pronto como intento implementar un RefundableCrowdsale o CappedCrowdsale, el código deja de funcionar.

Puedo compilar y migrar el código con éxito usando Truffle, pero cuando envío fondos a la cuenta del contrato, aparece el error:

Error encontrado, rescate. Estado de la red desconocido. Revise las transacciones exitosas manualmente. Error: Excepción de máquina virtual al procesar la transacción: código de operación no válido en Object.InvalidResponse (/usr/lib/node_modules/truffle/build/cli.bundled.js:37295:16)

¿Alguna idea de qué podría estar causando este problema? Código para el 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();  } }

y migraciones:

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)
};

¡Cualquier ayuda sería muy apreciada!

Respuestas (1)

Prueba un tiempo más grandeEmpezar:

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

Es posible que la validación en el contrato de Crowdsale falle debido al tiempo que lleva implementar el contrato.

Además, ¿cómo estás enviando los fondos? Tal vez agregue algo de tiempo para dormir después de la migración.