Fehler aufgetreten, Bailing. Netzwerkstatus unbekannt. Überprüfen Sie erfolgreiche Transaktionen manuell

Problem

Ich bekomme nach dem Ausführen folgenden Fehler $ truffle migrate --reset:

Laufende Migration: 1_initial_migration.js Ersetzen von Migrationen...
... 0x5b23d046a48e2b1707155f10d3b6e12848b55167198ebcc27288a51463f2a6d6 Migrations: 0x4214c32de196e89f3aec37aa7ec58bf10e84347a Replacing TestCrowdsale... ... 0x1241cadb6818bdb0cd9698b25b6abfae472c34dfa119107691108e24198db326 Error encountered, bailing. Netzwerkstatus unbekannt. Überprüfen Sie erfolgreiche Transaktionen manuell. Fehler: VM-Ausnahme während der Verarbeitung der Transaktion: Zurücksetzen bei Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43303:16) bei /usr/local/lib/node_modules/truffle/build /cli.bundled.js:331156:36 unter /usr/local/lib/node_modules/truffle/build/cli.bundled.js:175492:11 unter /usr/local/lib/node_modules/truffle/build/cli.bundled .js:314196:9 bei XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:315621:13) bei XMLHttpRequestEventTarget. DispatchEvent (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70159:18) bei XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70449 :12) bei XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70604:12) bei IncomingMessage. (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70564:24) bei emitNone (events.js:111:20)

Umfeld

  • Trüffel v4.0.1 (Kern: 4.0.1)

  • Solidität v0.4.18 (solc-js)

  • EthereumJS TestRPC v6.0.3 (Ganache-Core: 2.0.2)

Migrationsdatei

Meine Datei 1_initial_migration.js sieht so aus:

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

Crowdsale-Datei

Der TestCrowdsale-Vertrag verwendet das Zeppelin Solidity-Framework . Meine TestCrowdsale.sol-Datei sieht so aus:

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
      {
   }

}

truffle.js-Datei sieht so aus:

module.exports = {
   networks: {
     development: {
       host: "localhost",
       port: 8545,
       network_id: "*" // Match any network id
     }
  }
};
Wenn ich den geerbten Crowdsale-Vertrag von Zeppelin Solidity entferne, ist der Fehler weg.

Antworten (3)

Der Ursprung des Problems liegt darin, dass Sie versuchen, den Vertrag aus der Datei migrations/1_initial_migration.js bereitzustellen , die nur für die Bereitstellung von Migration.sol verwendet werden soll.

Um Ihre Verträge bereitzustellen, müssen Sie eine Datei in migrations/2_deploy_contracts.js erstellen , die den Bereitstellungsteil enthältTestCrowsale.sol

migrations/1_initial_migration.js

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

migrations/2_deploy_contracts.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); },
};

Ich habe auf meiner Seite versucht und die Bereitstellung durchlaufen:

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..

Ich habe den Code für weitere Details hierher geschoben: https://github.com/gjeanmart/stackexchange/tree/master/36690-error-encountered-bailing-network-state-unknown-review-successful-transaction

Vielen Dank! Das funktioniert. Ich habe den Code in die Datei 1_initial_migrations.js eingefügt, um ein anderes Problem zu lösen, aber deswegen bin ich auf dieses Problem gestoßen.

Überprüfen Sie, ob alle abstrakten/Schnittstellenmethoden korrekt implementiert sind. Ich erhalte dieses Problem, bei dem es kompiliert, aber nicht bereitgestellt wird, wenn ich abstrakte/Schnittstellenmethoden in erbenden Verträgen nicht korrekt implementieren kann.

Bearbeiten: Überprüfen Sie auch, ob alle erforderlichen Anweisungen im Crowdsale-Konstruktor bestehen. Versuchen Sie es vielleicht in Zukunft definitiv mit Hardcoding startTimeim Bereitstellungsskript, z. B. 1999999999.

Dies kann passieren, wenn Sie in Ihrer Truffle-Migrationsdatei falsche Initialisierungsparameter verwenden. Betrachten wir als Beispiel den folgenden vereinfachten Vertrag:

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

Nehmen Sie zum Bereitstellen an, dass Sie die folgende Migrationsdatei verwenden:

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

Beim Ausführen truffle migrate --reseterhalten Sie den oben genannten Fehler. Können Sie sagen, was falsch ist?

In diesem Fall startDatewird eine Unix-Zeit in der Vergangenheit zugewiesen, wodurch die zweite requireAnweisung im Vertragskonstruktor fehlschlägt.

Leider ist Truffle bei dieser Art von Fehlern noch nicht spezifisch genug, daher müssen Sie sehr vorsichtig damit umgehen.