Hyperledger - Несоответствие отпечатков пальцев Chaincode - PullRequest
0 голосов
/ 08 июня 2018

Мы настроили внутреннюю сеть Hyperledger для запуска некоторых тестов.Используемая версия Hyperledger Fabric - 1.1.

У нас есть сеть из 5 машин, каждая из которых представляет организацию, и все они имеют - с помощью Docker - двух пиров, CA, а также CommandИнтерфейсУ нас также есть узел Orderer, работающий на автономной машине.

Мы можем установить цепные коды Golang и сделать так, чтобы организации нормально общались.Проблема возникает, когда мы пытаемся установить логику бизнес-сети через BNA.Мы используем Hyperledger Composer 0.19.7.для этого и вот что происходит:

  1. Я генерирую BNA с помощью npm install .

  2. Я устанавливаюэто успешно на моих локальных пирах и запуск сети через composer install и composer start команды.

  3. Я посылаю тот же самый файл BNAдругим членам сети, и они также успешно устанавливают его на своих узлах с помощью команды composer install .

  4. Однако, когда они пытаются связаться сnetwork ( composer network ping ) с соответствующей карточкой администратора отображается следующее сообщение:

Ошибка: ошибка при попытке пропинговать.Ошибка: 2 НЕИЗВЕСТНО: ошибка при выполнении цепного кода: не удалось получить ChaincodeDeploymentSpec для todo-poc5-network: 0.0.1: получить ChaincodeDeploymentSpec для todo-poc5-network / default из LSCC: ошибка: несоответствие данных отпечатка пальца цепочки не соответствует команде Не удалось выполнить команду

Действительно странная часть заключается в том, что если я - вместо BNA - распространяю файл bin, установленный на моих пирах (который находится в папке / var / hyperledger / peer0 / chaincodes )Команда ping работает отлично, и организации могут общаться.Но распространение бинарных файлов, а не самой BNA, не кажется идеальным решением.

Кто-нибудь испытывал что-то похожее на это?

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Хорошо, извините за долгое отсутствие.

Оказывается, у нас были запущены разные версии CLI, но даже после их нормализации ошибка все равно появляется.Любые другие предложения?

Вы упомянули, что после установки предоставляются путь, идентификатор и версия.Я могу их где-нибудь увидеть?

В командной строке, выполнив composer install , я вижу только:

✔ Установка бизнес-сети.Это может занять минуту ... Успешно установлен предиктивный документ бизнес-сети, версия 1.0.2 Команда успешно выполнена

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

При установке цепного кода вы указываете путь, идентификатор и версию.Все три атрибута становятся частью «отпечатка», который должен совпадать при вызове цепного кода.Проблема появляется, когда вы устанавливаете тот же код цепи, но используете другой путь.Эта ситуация будет происходить органически, когда разные люди на одном и том же канале захотят запустить цепной код независимо.пример:

человек A устанавливается на Peer1 с:

path - /uhoh/chaincode/marbles/dir,
id - marbles
version - v1

, а человек B устанавливает на Peer2 с:

path - /marbles
id - marbles
version - v1

, затем позволяет выбрать Person A для создания экземпляра кода цепина канале присоединились оба пира.Намерение состояло в том, что у каждого человека будет свой собственный цепной код, но b / c путь будет другим, вызовы не будут выполняться на одноранговом узле человека B.

Эта проблема была закрыта в версии фабрики v1.1.3, v1.2.2 и v1.3 +, см. выдает FABN-855 для более подробной информации.

0 голосов
/ 15 июня 2018

Несоответствие данных о несоответствии отпечатков пальцев происходит из-за того, что пакет, который устанавливается на одноранговые узлы, отличается таким же образом, и такая структура видит эту разницу как проблему и сообщает об этой ошибке.

Чтобы понять, как это можнопроисходят детали о том, как композитор помещает bna на одноранговый узел.

Расширенный bna-файл выглядит как модуль узла, он содержит файл package.json и некоторые артефакты, из которых состоит бизнес-сеть, поэтому composer распаковывает bna-файл и использует fabric-node-sdk для его упаковки.вверх, говоря, что это - модуль узла, и fabric-node-sdk соответствующим образом упакует его и отправит на одноранговый узел.Затем Fabric может распаковать этот пакет и выполнить npm install --production для завершения настройки этой бизнес-сети.Однако необходимо убедиться, что ссылка на некоторые модули npm композитора присутствует в package.json бна, чтобы бизнес-сеть могла реально работать, если эти ссылки не существуют, тогда команда composer network installвнедряет их в package.json для вас, прежде чем fabric-node-sdk создаст окончательный пакет и отправит его равноправному узлу.Команда эффективно добавляет эти строки в раздел зависимостей файла package.json

“composer-runtime-hlfv1”: “0.19.9”,
“composer-common”: “0.19.9”

(обратите внимание, что номер версии, представленный здесь, был самой последней версией на момент написания, вы можете захотетьиспользуйте другую / более новую версию среды выполнения composer)

И вставленный номер версии берется из версии установленного вами composer-cli, поэтому, если у вас есть разные версии composer-cliвы можете видеть, что при развертывании одной и той же bna на разных узлах пакет, который заканчивается на узле, будет отличаться, если будут установлены разные версии composer-cli.(В качестве дополнительного признака, fabric-node-sdk не использует дату / время файлов, но устанавливает для них детерминированное значение, поэтому различие в дате / времени не является проблемой.)

Существует 2как вы можете избежать этой проблемы.

  1. Убедитесь, что вы используете одинаковые уровни composer-cli для установки на одноранговые узлы различных организаций
  2. Вы можете явно установить версиюиз composer-runtime-hlfv1 и composer-common зависимостей внутри пакета package.json вашей бизнес-сети.Если они присутствуют, командная строка не будет перезаписывать или вставлять записи в package.json до отправки пакета одноранговым узлам.
...