Error encontrado, rescate. Estado de la red desconocido. Revisar transacciones exitosas manualmente

Problema

Me sale el siguiente error después de ejecutar $ truffle migrate --reset:

Ejecutando migración: 1_initial_migration.js Reemplazando migraciones...
... 0x5b23d046a48e2b1707155f10d3b6e12848b55167198ebcc27288a51463f2a6d6 Migrations: 0x4214c32de196e89f3aec37aa7ec58bf10e84347a Replacing TestCrowdsale... ... 0x1241cadb6818bdb0cd9698b25b6abfae472c34dfa119107691108e24198db326 Error encountered, bailing. Estado de la red desconocido. Revise las transacciones exitosas manualmente. Error: Excepción de VM al procesar la transacción: revertir en Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43303:16) en /usr/local/lib/node_modules/truffle/build /cli.bundled.js:331156:36 en /usr/local/lib/node_modules/truffle/build/cli.bundled.js:175492:11 en /usr/local/lib/node_modules/truffle/build/cli.bundled .js:314196:9 en XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:315621:13) en XMLHttpRequestEventTarget. dispatchEvent (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70159:18) en XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70449 :12) en XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70604:12) en IncomingMessage. (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70564:24) en emitNone (events.js:111:20)

Medioambiente

  • Trufa v4.0.1 (núcleo: 4.0.1)

  • Solidez v0.4.18 (solc-js)

  • EthereumJS TestRPC v6.0.3 (ganache-core: 2.0.2)

Archivo de migraciones

Mi archivo 1_initial_migration.js se ve así:

var Migrations = artifacts.require("./Migrations.sol");
var TestCrowdsale = artifacts.require("./TestCrowdsale.sol");

module.exports = function(deployer) {
   deployer.deploy(Migrations);
   deployTestCrowdsale(deployer);
};

function deployTestCrowdsale(deployer) {

   const accounts = web3.eth.accounts;

   const startTime = latestTime();
   const endTime = startTime + duration.days(45);
   const rate = 2500;
   const goal = web3.toWei(250, 'ether');
   const cap = web3.toWei(4000, 'ether');
   const wallet = accounts[0];

   return deployer.deploy(TestCrowdsale, startTime, endTime, rate, wallet);

}

function latestTime() {
  return web3.eth.getBlock('latest').timestamp;
}

const duration = {
   seconds: function (val) { return val; },
   minutes: function (val) { return val * this.seconds(60); },
   hours: function (val) { return val * this.minutes(60); },
   days: function (val) { return val * this.hours(24); },
   weeks: function (val) { return val * this.days(7); },
   years: function (val) { return val * this.days(365); },
};

Archivo de venta colectiva

El contrato TestCrowdsale utiliza el marco Zeppelin Solidity . Mi archivo TestCrowdsale.sol se ve así:

pragma solidity ^0.4.18;

import 'zeppelin-solidity/contracts/crowdsale/Crowdsale.sol';

contract TestCrowdsale is Crowdsale {

   function TestCrowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet)
      Crowdsale(_startTime, _endTime, _rate, _wallet)
      public
      {
   }

}

El archivo truffle.js se ve así:

module.exports = {
   networks: {
     development: {
       host: "localhost",
       port: 8545,
       network_id: "*" // Match any network id
     }
  }
};
Cuando elimino el contrato de Crowdsale heredado de Zeppelin Solidity, el error desaparece.

Respuestas (3)

El origen del problema se debe a que está intentando implementar el contrato desde el archivomigrations/1_initial_migration.js que se supone que debe usarse solo para la implementación de Migration.sol.

Para implementar sus contratos, debe crear un archivo en migrations/2_deploy_contracts.js que contenga la parte de implementación deTestCrowsale.sol

migraciones/1_migración_inicial.js

var Migrations = artifacts.require("./Migrations.sol");
module.exports = function(deployer) {
   deployer.deploy(Migrations);
};

migraciones/2_deploy_contratos.js

var TestCrowdsale = artifacts.require("./TestCrowdsale.sol");

module.exports = function(deployer) {
   deployTestCrowdsale(deployer);
};

function deployTestCrowdsale(deployer) {

   const accounts = web3.eth.accounts;

   const startTime = latestTime();
   const endTime = startTime + duration.days(45);
   const rate = 2500;
   const goal = web3.toWei(250, 'ether');
   const cap = web3.toWei(4000, 'ether');
   const wallet = accounts[0];

   return deployer.deploy(TestCrowdsale, startTime, endTime, rate, wallet);

}

function latestTime() {
  return web3.eth.getBlock('latest').timestamp;
}

const duration = {
   seconds: function (val) { return val; },
   minutes: function (val) { return val * this.seconds(60); },
   hours: function (val) { return val * this.minutes(60); },
   days: function (val) { return val * this.hours(24); },
   weeks: function (val) { return val * this.days(7); },
   years: function (val) { return val * this.days(365); },
};

Lo intenté de mi lado y el despliegue pasó por:

Compiling ./contracts/Migrations.sol...
Writing artifacts to ./build/contracts

Using network 'development'.

Running migration: 1_initial_migration.js
  Deploying Migrations...
  ... 0x46dd08a7e00419adc52c3b9b048f89812dd960463b02125a93eb7e43eb4ca64f
  Migrations: 0x4a5a1448d37aeaaae79deed7e0d3f81ebc52db87
Saving successful migration to network...
  ... 0x573964afa1f79deca003871bd793026f7c932d9c46b8be055184e10790a63147
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying TestCrowdsale...
  ... 0xd251d1b3b92facb64e38ce3e04907197e9b7b9e7fefdf083da1b43c08f1b9bb1
  TestCrowdsale: 0xd817d9295491556f00a45c8092e42c10df271865
Saving successful migration to network...
  ... 0x83a2ba140f54003fc0f146ff2d8b8e2f6d9013122d59d94a39a74d4a9c8df92e
Saving artifacts..

Empujé el código aquí para obtener más detalles: https://github.com/gjeanmart/stackexchange/tree/master/36690-error-encountered-bailing-network-state-unknown-review-successful-transaction

¡Gracias! Esto funciona. Coloqué el código en el archivo 1_initial_migrations.js para resolver otro problema, pero por eso me encontré con este problema.

Verifique que los métodos abstractos/de interfaz se implementen correctamente. Obtengo este problema, donde se compila pero no se implementa, cuando no implemento correctamente los métodos abstractos/de interfaz en los contratos heredados.

Editar: Verifique también que se aprobarán todas las declaraciones requeridas en el constructor de Crowdsale. Tal vez intente codificar startTimedefinitivamente en el futuro en el script de implementación, por ejemplo, 1999999999.

Esto puede suceder cuando está utilizando parámetros de inicialización incorrectos en su archivo de migración de Truffle. Como ejemplo, consideremos el siguiente contrato simplificado:

pragma solidity ^0.4.19;

contract Lease {

  function Lease(
                address _owner,
                address _tenant,
                uint _startDate,
                uint _fee,
                uint _deposit)
    public {
    require(_owner != _tenant);
    require(_startDate > now);
    require(_fee > 0);
    require(_deposit >= fee * 2);
  }
}

Para implementarlo, suponga que está utilizando el siguiente archivo de migración:

var Lease = artifacts.require("./Lease.sol");

module.exports = function(deployer) {
  var owner = '0xf17f52151ebef6c7334fad080c5704d77216b732';
  var tenant = '0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef';
  var startDate = 1522904400;
  var fee = 1000000000000000000;
  var deposit = 2000000000000000000;
  deployer.deploy(Lease, owner, tenant, startDate, fee, deposit);
};

Cuando ejecutas truffle migrate --resetobtienes el error antes mencionado. ¿Puedes decir lo que está mal?

En este caso, startDatese asigna a un tiempo de Unix en el pasado, lo que hace requireque falle la segunda declaración en el constructor del contrato.

Desafortunadamente, Truffle aún no es lo suficientemente específico sobre este tipo de errores, por lo que debe tener mucho cuidado con ellos.