Произошла ошибка, спасение. Состояние сети неизвестно. Просмотрите успешные транзакции вручную

Проблема

Я получаю следующую ошибку после запуска $ truffle migrate --reset:

Выполнение миграции: 1_initial_migration.js Замена миграций...
... 0x5b23d046a48e2b1707155f10d3b6e12848b55167198ebcc27288a51463f2a6d6 Migrations: 0x4214c32de196e89f3aec37aa7ec58bf10e84347a Replacing TestCrowdsale... ... 0x1241cadb6818bdb0cd9698b25b6abfae472c34dfa119107691108e24198db326 Error encountered, bailing. Состояние сети неизвестно. Просмотрите успешные транзакции вручную. Ошибка: Исключение виртуальной машины при обработке транзакции: вернуться к Object.InvalidResponse (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:43303:16) в /usr/local/lib/node_modules/truffle/build /cli.bundled.js:331156:36 в /usr/local/lib/node_modules/truffle/build/cli.bundled.js:175492:11 в /usr/local/lib/node_modules/truffle/build/cli.bundled .js:314196:9 в XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:315621:13) в XMLHttpRequestEventTarget. dispatchEvent (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70159:18) в XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70449 :12) в XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70604:12) в IncomingMessage. (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:70564:24) в emitNone (events.js:111:20)

Среда

  • Трюфель v4.0.1 (ядро: 4.0.1)

  • Solidity v0.4.18 (solc-js)

  • EthereumJS TestRPC v6.0.3 (ядро ganache: 2.0.2)

Файл миграции

Мой файл 1_initial_migration.js выглядит так:

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

Краудсейл файл

Контракт TestCrowdsale использует фреймворк Zeppelin Solidity . Мой файл TestCrowdsale.sol выглядит так:

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 выглядит так:

module.exports = {
   networks: {
     development: {
       host: "localhost",
       port: 8545,
       network_id: "*" // Match any network id
     }
  }
};
Когда я удаляю унаследованный контракт Crowdsale из Zeppelin Solidity, ошибка исчезает.

Ответы (3)

Причина проблемы в том, что вы пытаетесь развернуть контракт из файла migrates/1_initial_migration.js , который предполагается использовать только для развертывания Migration.sol.

Чтобы развернуть ваши контракты, вам нужно создать файл в migrations/2_deploy_contracts.js , который содержит часть развертыванияTestCrowsale.sol

миграции/1_initial_migration.js

var Migrations = artifacts.require("./Migrations.sol");
module.exports = function(deployer) {
   deployer.deploy(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); },
};

Я попробовал на своей стороне, и развертывание прошло:

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

Я вставил код здесь для более подробной информации: https://github.com/gjeanmart/stackexchange/tree/master/36690-error-encountered-bailing-network-state-unknown-review-successful-transaction

Спасибо! Это работает. Я поместил код в файл 1_initial_migrations.js для решения другой проблемы, но из-за этого столкнулся с этой проблемой.

Убедитесь, что все абстрактные/интерфейсные методы реализованы правильно. Я получаю эту проблему, когда она компилируется, но не развертывается, когда мне не удается правильно реализовать абстрактные/интерфейсные методы при наследовании контрактов.

Изменить: также проверьте, что все операторы require в конструкторе Crowdsale будут пройдены. Возможно, попробуйте startTimeжестко закодировать в будущем в сценарии развертывания, например, 1999999999.

Это может произойти, если вы используете неправильные параметры инициализации в файле миграции Truffle. В качестве примера рассмотрим следующий упрощенный договор:

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

Чтобы развернуть его, предположим, что вы используете следующий файл миграции:

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

При запуске truffle migrate --resetвы получаете вышеупомянутую ошибку. Можете ли вы сказать, что случилось?

В этом случае startDateприсваивается unix-время в прошлом, что приводит requireк сбою второго оператора в конструкторе контракта.

К сожалению, Truffle пока недостаточно конкретен в отношении такого рода ошибок, поэтому с ними нужно быть очень осторожным.