Проблема
Я получаю следующую ошибку после запуска $ 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
}
}
};
Причина проблемы в том, что вы пытаетесь развернуть контракт из файла 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
Убедитесь, что все абстрактные/интерфейсные методы реализованы правильно. Я получаю эту проблему, когда она компилируется, но не развертывается, когда мне не удается правильно реализовать абстрактные/интерфейсные методы при наследовании контрактов.
Изменить: также проверьте, что все операторы 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 пока недостаточно конкретен в отношении такого рода ошибок, поэтому с ними нужно быть очень осторожным.
Робберт