Truffle Webpack начинается с ошибки: MetaCoin не был развернут в обнаруженной сети

Я, похоже, следовал за трюфельным гидом к T. Но когда я впервые открываю свое приложение в браузере, я получаю эту ошибку в консоли:

Error: MetaCoin has not been deployed to detected network (network/artifact mismatch)

Я новичок в разработке Ethereum, поэтому в основном я просто кручусь в темноте. Любая помощь будет принята с благодарностью.

Действия, которые я выполнил:

(1) установлен трюфель и testrpc

npm install -g truffle

npm install -g ethereumjs-testrpc

(2) инициализировал проект webpack

truffle init webpack

(3) запущен testrpc

testrpc

(4) скомпилированные контракты

truffle compile

(5) развернутые контракты (я видел, как они нажимают testrpc в консоли)

truffle migrate

(6) начал веб-сервер разработки

npm run dev

Возможно, уместно: я запускаю MetaMask в Chrome, и я вошел в учетную запись. Это не похоже на проблему.

17 голосов | спросил Daniel Patrick 29 J0000006Europe/Moscow 2017, 05:54:20

12 ответов


20

Одна вещь, которую нужно проверить, - это идентификатор сети. Неважно, какой идентификатор сети вы используете для своего локального тестового узла, но Truffle должен согласиться с тем, что вы используете с testrpc.

С запуском testrpc выполните: curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[]}' http://localhost:8545

Это должно указывать сетевой идентификатор, который использует testrpc; Последние версии, похоже, используют то, что выглядит как временная метка с момента ее запуска.

Затем ознакомьтесь с файлами определения контрактов в разделе truffle/build/contracts и посмотрите, есть ли у них одинаковый сетевой идентификатор, указанный в качестве ключа в разделе networks. Если это не так, вы можете попробовать указать идентификатор сети в своем truffle.js и перераспределить. (По умолчанию это использует "*", который должен работать автоматически, но у меня были проблемы с ним изредка по причинам, по которым я так и не дошел.) Суеверно, я бы также удалил содержимое каталога build и снова запустите truffle deploy.

Если это окажется проблемой, вы можете заставить testrpc использовать один и тот же идентификатор сети каждый раз, запустив его с помощью флага --network-id например, для использования идентификатора сети 1337 вы запускаете testrpc --network-id 1337.

ответил Edmund Edgar 1 J000000Saturday17 2017, 06:37:51
9

Я столкнулся с той же ошибкой, проблема, с которой я столкнулся, заключалась в том, что, хотя я перекомпилировал свой контракт, он не переносился в сеть. Затем бег трюфель-контракт, развернутый на FE, он не смог найти контракт на сеть. Возможно ли, что ваш контракт развернут, а затем вы попытались его повторно развернуть, а затем вы получили эту ошибку?

Исправление заключалось в том, чтобы добавить сценарий миграции в каталог /migrations.

Создайте новый файл с именем n_metacoin_migration.js с нижеследующим содержимым: (где n - это следующий номер, найденный в списке файлов в каталоге «migrations». Например, это будет выглядеть как 1_initial_migration.js, 2_myown_contract_migration.js и т. д.)

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

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

Затем запустите сценарий миграции в командной строке.

truffle compile
truffle migrate
ответил jjbskir 15 PM00000050000000331 2017, 17:57:03
2

это было содержание моего трюфеля:

networks: {
    development: {
      host: '127.0.0.1',
      port: 7545,
      network_id: '*' // Match any network id
    }
}

Порт должен был быть 8545, где выполняется testrpc.

Вы можете исправить ошибку, изменив порт на «8545», так же как и testrpc, run truffle migrate --reset, и это должно исправить его.

перезапустить сервер узла alse

ответил Amamazzing 10 Jpm1000000pmWed, 10 Jan 2018 17:42:36 +030018 2018, 17:42:36
1

Когда метамаска запущена в браузере, web3 принимает метамассу или другой определенный web3, такой как Mist, если ни один из них не найден, а затем ищет localhost.

if (typeof web3! == 'undefined') {
    console.warn («Использование web3 обнаружено из внешнего источника.Если использовать MetaMask, см. следующую ссылку. Не стесняйтесь удалять это предупреждение. :) http://truffleframework.com/tutorials/truffle-and-metamask")
    //Использование поставщика Mist /MetaMask
    window.web3 = новый Web3 (web3.currentProvider);
  } else {
    console.warn («Не обнаружено web3. Возврат к http://127.0.0.1:9545. Вы должны удалить этот резерв при развертывании в реальном времени, поскольку он по своей сути небезопасен. Рассмотрим переход на Metamask для разработки. Подробнее здесь: http: //truffleframework.com/tutorials/truffle-and-metamask ");
    //fallback - используйте вашу резервную стратегию (локальный узел /размещенный узел + in-dapp id mgmt /fail)
    window.web3 = новый Web3 (новый Web3.providers.HttpProvider ("http://127.0.0.1:9545"));
  }

Чтобы заставить его работать:
Отключите плагин metaMask от управления расширением
или
настроить метамаску на localhost.
Выполните шаги в ссылке:
http://truffleframework.com/docs/расширенный /трюфель-с metamask

ответил Shubham Chadokar 15 PMpSun, 15 Apr 2018 12:47:11 +030047Sunday 2018, 12:47:11
0

Если вы не используете npm run dev для обслуживания своего приложения, вам нужно будет запустить npm run watch в терминале, чтобы убедиться, что ваши скомпилированные активы указывают на последнее развертывание.

ответил rohithpr 8 J000000Saturday17 2017, 15:51:08
0

«Миграция трюфелей» исправила неправильный идентификатор сети внутри my_project /build /contract /xyz.json ..., как упоминал Эдмунд Эдгар выше.

Если вам нужно, удалите все файлы внутри my_project /build /contract / затем снова запустите «трюфель мигрировать»

ответил Russo 22 +03002017-10-22T18:39:55+03:00312017bEurope/MoscowSun, 22 Oct 2017 18:39:55 +0300 2017, 18:39:55
0

Вместо этого напишите «трюфель unbox webpack». Работал для меня:)

ответил Rodrigo Garduño 12 TueEurope/Moscow2017-12-12T03:15:15+03:00Europe/Moscow12bEurope/MoscowTue, 12 Dec 2017 03:15:15 +0300 2017, 03:15:15
0

Я столкнулся с тем же вопросом прошлой ночью и в конце концов обнаружил, что моя проблема заключается в том, что моя метамаска не рассматривала правильную тестовую сеть. Несколько раз обойдя дома, я понял, что вам нужно указать свою метамаску, чтобы посмотреть на правильную (настраиваемую RPC) сеть, указанную на правильном тестовом порту трюфеля (в моем случае localhost: 9545) и файл конфигурации (./truffle.js) правильно настроен:

module.exports = {
  networks: {
    development: {
      host: "127.0.0.0",
      port: 8545,
      network_id: "*" // match any network
    }
  }
};
ответил HAS-Jack 8 Jpm1000000pmMon, 08 Jan 2018 13:24:51 +030018 2018, 13:24:51
0

В моем случае ..

"networks": {}

был пуст для моего контракта в папке build/contracts/{mycontract.js}

Исправление было зарегистрировано в папке миграции. Зарегистрируйте и разместите mycontract.

ответил rana_stack 22 FebruaryEurope/MoscowbThu, 22 Feb 2018 13:08:10 +0300000000pmThu, 22 Feb 2018 13:08:10 +030018 2018, 13:08:10
0

Я столкнулся с той же проблемой. Я сделал это

  1. Сначала установите Ganache {изменение настроек goto с 7545 по 8546} также измените порт truffle.js на 8545.
  2. Затем откройте Мета-маска и щелкните по Localhost 8545.

Затем используйте только следующие команды:

truffle.cmd compile
truffle.cmd migrate
npm run dev
ответил sharma_kunal 17 FebruaryEurope/MoscowbSat, 17 Feb 2018 06:58:39 +0300000000amSat, 17 Feb 2018 06:58:39 +030018 2018, 06:58:39
0

У меня возникла проблема, когда раздел networks был пуст в моем файле контракта в каталоге сборки, таком как @rana_stack metioned. Я использовал решение здесь , чтобы исправить его, чтобы моя миграция выполнялась асинхронно и ожидала контракт для развертывания перед записью в json.

Мой файл миграции выглядел следующим образом:

var MyContract = artifacts.require("./MyContract.sol");
const fs = require('fs');

module.exports = async (deployer, network, accounts) => {
  await deployer.deploy(MyContract);

  const metaDataFile = `${__dirname}/../build/contracts/MyContract.json`
  const metaData = require(metaDataFile)
  metaData.networks[deployer.network_id] = {}
  metaData.networks[deployer.network_id].address = MyContract.address
  fs.writeFileSync(metaDataFile, JSON.stringify(metaData, null, 4))
};

Мне также пришлось изменить сеть метамасок, чтобы указать на мою локальную в расширении браузера.

ответил Ben Graham 29 AMpSun, 29 Apr 2018 03:37:04 +030037Sunday 2018, 03:37:04
0

В моем случае мне нужно изменить MetaMask для подключения к частной сети (URL), выбрав custom RPC и введите URL-адрес http://127.0.0.1:9545 mannually

ответил xdx24 24 J0000006Europe/Moscow 2018, 02:08:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132