Как построить сеть блокчейн с помощью Hyperledger Fabric и Composer

kak postroit set blokchejn s pomoshhyu hyperledger fabric i composer?v=1656554077

Содержание статьи

от Haardik

Учебник для новых разработчиков блокчейна

0*iGuxOX8a2_jCdQEd
Фото Александру Асеа на Unsplash

Прежде чем я начну, Hyperledger Fabric только работает на базе операционных систем Unix. Как результат, он не сможет работать в Windows, и у вас будет ограничение на то, что вы можете делать. Я предлагаю настроить виртуальную машину, если вы используете Windows перед продолжением.

Эта статья подразумевает определенные знания Javascript. Это не учебник, ориентированный на начинающих программистов, а скорее на программистов, являющихся начинающими в пространстве блокчейна.

Что мы строим?

Итак, вы хотите создать блокчейн-приложение, но не знаете, с чего начать? Не волнуйся. С помощью этого учебника мы настроим сеть торговых карт. Другой Traderкто владеет TradingCardИгроки в бейсбол, футбол и крикет смогут обмениваться картами между собой.

Мы также настроим сервер REST API, чтобы разрешить клиентскому программному обеспечению взаимодействовать с нашей бизнес-сетью. Наконец мы также создадим программу Angular 4, которая использует REST API для взаимодействия с нашей сетью.

Вы можете найти полный окончательный код того, что мы собираемся создать на этом репозитории Github

Вы готовы начать?

Содержание

  • Знакомство с Hyperledger Fabric и связанными приложениями
  • Установка необходимых условий, инструментов и среды выполнения Fabric
  • Создание и развертывание нашей бизнес-сети
  • Тестирование нашей бизнес-сети
  • Создание сервера REST API
  • Создание программы Angular, использующей REST API
0*Ma2ZQgFeXiAUYGeb
Обзор среды разработки для Hyperledger

Ткань Hyperledger является фреймворком с открытым исходным кодом для создания частных (разрешенных) бизнес-сетей с блокчейном, где другие участники знают личности и роли участников. Сеть, построенная на базе ткани, служит серверной частью, а интерфейс программки на стороне клиента. Пакет SDK доступен для Nodejs и Java для создания клиентских приложений, вскоре появится поддержка Python и Golang.

Композитор Hyperledger – это набор инструментов и скриптов на основе Javascript, упрощающих создание сетей Hyperledger Fabric. Используя эти инструменты, мы можем создать a деловой сетевой архив (BNA) для нашей сети. Composer широко охватывает эти компоненты:

  • Архив деловой сети (BNA)
  • Композиторская площадка
  • Сервер REST Composer

Архив деловой сети — Composer позволяет нам упаковать несколько разных файлов и создать архив, который можно потом развернуть в сети Fabric. Чтобы создать этот архив, нам нужно:

  • Модель сети — определение ресурсов, имеющихся в сети. Эти ресурсы включают в себя активы, участники и транзакции. К ним мы вернемся позже.
  • Бизнес-логика — Логика транзакционных функций
  • Ограничение контроля доступа Содержит различные правила, определяющие права разных участников сети. Это включает, но не ограничивается этим, определение активов, которые могут контролироваться Участниками.
  • Файл запроса (необязательно) Набор запросов в сети. Их можно считать похожими на запросы SQL. Подробнее о запросах можно прочесть здесь.

Композиторская площадка это веб-пользовательский интерфейс, который мы можем использовать для моделирования и тестирования нашей бизнес-сети. Playground отлично подходит для моделирования обычных Proofs of Concept, так как употребляет локальное хранилище браузера для имитации сети блокчейн. Однако, если мы используем локальную среду выполнения Fabric и развернули в нее сеть, мы также можем получить доступ к ней с помощью Playground. В этом случае Playground не имитирует сеть, а напрямую связывается с локальной средой исполнения Fabric.

Сервер REST Composer это инструмент, позволяющий нам генерировать сервер REST API на основе определения нашей бизнес-сети. Этот API может использоваться клиентскими приложениями и позволяет нам интегрировать неблокчейн-приложения в сеть.

Установка необходимых условий, инструментов и среды выполнения Fabric

1. Установление предварительных требований

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

  • Docker Engine и Docker Compose
  • Nodejs и NPM
  • Git
  • Python 2.7.x

Для пользователей Ubuntu Hyperledger имеет доступный сценарий bash, чтобы сделать этот процесс очень простым. Выполните следующие команды в своем терминале:

К сожалению, пользователям Mac приходится вручную установить вышеупомянутые инструменты и убедиться, что в их системе есть все необходимые условия. Эта страница постоянно обновляется инструкциями по установке.

2. Установка инструментов для облегчения разработки

Выполните указанные ниже команды в терминале и убедитесь, что это так НЕТ использование sudo при выполнении команд npm.

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

3. Установка локальной среды выполнения Hyperledger Fabric

Давайте рассмотрим команды и посмотрим, что они означают. Сначала создаем и вводим новый каталог. Затем мы загружаем и распаковываем инструменты, необходимые для установки Hyperledger Fabric.

Затем мы указываем нужную версию Fabric, поэтому на момент написания нам нужна 1.2 hlfv12. Затем мы загружаем среду выполнения ткани и запускаем ее.

Наконец, мы генерируем a PeerAdmin карта. Участники сети Fabric могут иметь визитные карточки сети, аналогичные визитным карточкам реальной жизни. Как мы упоминали ранее, Fabric является базовым слоем для частных блокчейнов, на которых можно строить. Владелец визитной карточки PeerAdmin имеет полномочия развертывать, удалять и управлять бизнес-сетями в этой среде выполнения Fabric (он же ВЫ!)

Если все прошло хорошо, вы должны увидеть следующий результат:

0*xUjx4TYAN4gnsyWa

Кроме того, если вы вводите ls вы увидите это:

0*uF_L4sB42hB8TqnH

По сути, мы просто скачали и запустили локальную сеть Fabric. Мы можем прекратить использование ./stopFabric.sh если мы хотим. В конце нашей сессии разработки мы должны запустить ./teardownFabric.sh

ПРИМЕЧАНИЕ: Это локальное время выполнения означало, что его часто запускают, останавливают и разрушают для использования в развитии. Для среды выполнения с более постоянным состоянием необходимо развернуть сеть за пределами среды разработчика. Вы можете сделать это, запустив сеть на Kubernetes или управляемых платформах, таких как IBM Blockchain. Тем не менее, вы должны сначала пройти это руководство, чтобы получить представление.

Создание и развертывание нашей бизнес-сети

Помните о пакетах yo и generator-hyperledger-composer мы установили раньше?

yo дает нам экосистему генератора, где генераторы являются плагинами, которые можно запускать с помощью команды yo. Это используется для настройки типовых примеров приложений для разных проектов. generator-hyperledger-composer это генератор Yo, который мы будем использовать, поскольку он содержит спецификации для создания типовых бизнес-сетей, среди прочего.

1. Создание бизнес-сети

Откройте терминал в каталоге выбора и типа yo hyperledger-composer

0*l7HZjX-AphNyrorr

Вас встретит нечто вроде приведенного выше. Выберите Business Network и назовите его cards-trading-network как показано ниже:

0*4RUkLM9_We2YorAa

2. Моделирование нашей бизнес-сети

Первым и важнейшим шагом в создании бизнес-сети является определение имеющихся ресурсов. У нас есть четыре типа ресурсов на языке моделирования:

  • Активы
  • Участники
  • Транзакции
  • События

Для наших cards-trading-network мы определим тип активаTradingCard тип участника Trader транзакция TradeCard и событие TradeNotification.

Откройте созданные файлы в выбранном редакторе кода. Открыть org.example.biznet.cto являющийся файлом моделирования. Удалите весь имеющийся в нем код, поскольку мы собираемся его переписать (кроме объявления пространства имен).

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

Кроме того, наш актив имеет a GameType cardType свойство, основанное на перечислителе, определенном ниже. Перечисления используются для определения типа, который может иметь N возможных значений, но ничего другого. В нашем примере нет TradingCard может иметь а cardType кроме Baseball, Footballили Cricket

Теперь, чтобы уточнить нашу Trader тип ресурса участника, добавьте следующий код в файл моделирования

Это относительно проще и достаточно просто понять. У нас есть тип участника Trader и они однозначно идентифицируются traderIdс.

Теперь нам нужно добавить ссылку к нашему TradingCards иметь ссылку на своего владельца, чтобы мы знали, кому принадлежит карта. Для этого добавьте следующую строчку внутрь вашего TradingCard актив:

--> Trader owнер

чтобы код выглядел так:

Мы впервые пользовались --> и вам, наверное, интересно, что это такое. Это пуант отношенийr. оаnd —> — это то, как мы отличаем свои свойства ресурса от связи с другим типом ресурса. Так как владелец is a Трейдер, являющийся участником сети, мы хотим ссылку that Трейдер напрямую, и это точно whна —> делает.

Наконец, добавьте этот код в файл моделирования, указывающий, какие параметры потребуются для транзакции и создания события.

3. Добавление логики для наших транзакций

Чтобы добавить логику за TradeCard функции, нам нужен логический Javascript файл. Создайте новый каталог с именем lib в папке вашего проекта и создайте новый файл с именем logic.js с таким кодом:

ПРИМЕЧАНИЕ: Декоратор в комментариях над функцией очень важен. Без @param {org.example.biznet.TradingCard} trade функция понятия не имеет Transaction код ссылается на язык моделирования. Также убедитесь, что имя параметра передается (т.е. trade) – это тот, который вы передаете в определении функции сразу после.

Этот код в основном проверяет, есть ли указанная карта forTrade == true и в этом случае обновляет держателя карты. Затем он запускает TradeNotification событие для этой карты.

4. Определение разрешений и правил доступа

Добавьте новое правило в permissions.acl предоставить участникам доступ к своим ресурсам. В производстве вы хотели бы быть строже с этими правилами доступа. Подробнее о них можно прочесть здесь.

5. Создание архива бизнес-сети (BNA)

Теперь, когда все кодирование завершено, пора создать архивный файл для нашей бизнес-сети, чтобы мы могли развернуть его в локальной среде выполнения Fabric. Для этого откройте терминал в каталоге вашего проекта и введите:

composer archive create --sourceType dir --sourceName .

Эта команда сообщает Hyperledger Composer, что мы хотим создать BNA из каталога, являющегося нашей текущей корневой папкой.

0*MiI9-KZeQWmuhf1V

ПРИМЕЧАНИЕ: Название и версия BNA происходит от package.json файл. Когда вы добавляете больше кода, необходимо изменить номер версии, чтобы развернуть уникальные архивы, способные обновлять существующие бизнес-сети.

6. Установите и разверните файл BNA

Мы можем установить и развернуть сеть в нашей локальной среде выполнения Fabric с помощью PeerAdmin пользователь. Чтобы установить бизнес-сеть, введите

composer network install --archiveFile cards-trading-network@0.0.1.bna --card PeerAdmin@hlfv1

0*nOI-6kbYiD76HuzM

Чтобы развернуть бизнес-сеть, введите

composer network start --networkName cards-trading-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file cards-trading-admin.card

0*o5dJtBPYS0YsqaH-

The networkName и networkVersion должно быть таким же, как указано в вашем package.json иначе это не сработает.

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

composer card import --file cards-trading-admin.card

0*7ONVFnE8dQGxMFG6

Удивительный. Теперь мы можем подтвердить, что сеть запущена и работает, введя

composer network ping --card admin@cards-trading-network

--card это время занимает карту администратора сети, которую мы хотим пинговать.

Если все прошло хорошо, вы должны увидеть что-то вроде этого:

1*5EE453FFFQp4O0LO3PIg5Q
Вашей сетевой версией будет 0.0.1 или другой, указывающей ваш package.json. Я действительно забыл сделать этот снимок экрана и загрузил его после того, как написал учебник и внес изменения

Тестирование нашей бизнес-сети

Теперь когда наша сеть запущена и работает на Fabric, мы можем запустить Composer Playground для взаимодействия с ней. Для этого введите composer-playground в терминале и откройте в вашем браузере, и вы должны увидеть нечто подобное этому:

0*QX21rhAmdnKKwEZJ

Нажмите Подключиться сейчас для admin@cards-trading-network и вас встретит этот экран:

0*3VAwop80uPvM8sYb

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

Перейдите к Тест страницу из верхнего меню, и вы увидите это:

0*Ba4OQmMecPDEsaQU

Выберите Trader в разделе Участники нажмите на Создать нового участника в верхнем правом углу и создайте новый Trader похож на этот:

0*UjUZmOLt9tOfpDOB

Идите и сделайте еще пару Traderс. Вот как выглядят мои три трейдера с именами Хардик, Джон и Тайрон.

0*HPPva_cp92xBKtxy

Теперь давайте создадим активы. Нажмите на TradingCard с левого меню и нажмите Создать новый актив. Обратите внимание, как owner поле здесь особенно интересно, выглядит примерно так:

0*Q_ZmrJorW6RcUxUe

Это отношения. Это то, что --> средства. Мы указываем точный тип ресурса, за которым следует их уникальный идентификатор и вуаля, у нас есть указатель отношений.

Идите вперед и закончите создание a TradingCard что-то похожее на это:

0*A7wT8ywp1aO63Eo4

Обратите внимание, как owner поля указывают на Trader#1 также Haardik для меня. Создайте еще пару карточек и позвольте паре иметь forTrade установлено значение true.

0*wMA5-OcEJnbyEAPg

Обратите внимание, как мой Card#2 имеет forTrade == true?

А теперь для интересного, давайте попробуем разобраться с карточками 😀

Нажмите на Подать трансакцию слева и сделайте card указывать на TradingCard#2 и newOwner указывать на Trader#3 нравится это:

0*GAb88nhGlD2xPRm9

Нажмите Подать и посмотрите на свой TradingCards, вы это увидите Card#2 теперь имеет владельца Trader#3 😀

Создание сервера REST API

Совершать транзакции с Playground приятно, но не оптимально. Мы должны создать программное обеспечение на стороне клиента для пользователей, чтобы обеспечить им бесперебойную работу, им даже не обязательно знать об основной технологии блокчейн. Для этого нам необходим лучший способ взаимодействия с нашей деловой сетью. К счастью, у нас есть composer-rest-server модуль, который поможет нам в этом.

Тип composer-rest-server в своем терминале укажите admin@cards-trading-network выберите никогда не используйте пространства имени продолжайте использовать параметры по умолчанию для остальных следующим образом:

0*VukFOTRBvtOMeGRG

ОТКРЫТО и вы получите документированную версию автоматически сгенерированного REST API 😀

Создание программы Angular, использующей REST API

Помните о yo hyperledger-composer генератор? Это может сделать больше, чем создание бизнес-сети. Он также может создать приложение Angular 4, работающее на основе REST API, которое мы создали выше.

Чтобы создать веб-приложение Angular, введите yo hyperledger-composer в вашем терминале выберите Angular, выберите подключение к существующей бизнес-сети с помощью карты admin@cards-trading-network, а также подключиться к существующему REST API. (Редактировать: Более новые версии программного обеспечения могут запрашивать файл карты вместо просто названия карты)

0*WkNRiy0grt6DD_M5

Это будет продолжаться npm install подождите минутку, и когда все будет сделано, вы сможете загрузиться и вас приветствует страница, подобная этой:
Редактировать: Новые версии программного обеспечения могут потребовать запуска npm install себя, а потом беги npm start

0*1GrawK-jGkN9cvqO

Теперь вы можете играть со своей сетью непосредственно из этого приложения, которое связывается с сетью через сервер REST, работающий на порту 3000.

Поздравляю! Вы только что настроили свою первую бизнес-сеть blockchain с помощью Hyperledger Fabric и Hyperledger Composer 😀

Вы можете добавить больше функций в сети торговли картами, устанавливая цены на карты и обеспечивая баланс для всех Trader. Вы также можете иметь больше транзакций, позволяющих Traders, чтобы изменить значение forTrade . Вы можете интегрировать это с приложениями без блокчейн и позволить пользователям покупать новые карты, которые добавляются в их аккаунт, которыми они могут торговать в сети.

Возможности безграничны, что вы сделаете с ними? Дайте мне знать в комментариях 😀

ИЗВЕСТНАЯ ОШИБКА: ваша веб-программа Angular не обрабатывает транзакции должным образом?

На момент написания этого материала у генератора углов возникла проблема, из-за которой фиолетовая кнопка «Вызов» на странице «Транзакции» ничего не делает. Чтобы исправить это, нам нужно внести несколько изменений в сгенерированное приложение angular.

0*ownNwB2hjvpxTSvxE

1. Получите открывающийся модал при нажатии кнопки

Первое изменение, которое нам нужно сделать – это открыть модальное окно с помощью кнопки. Код уже содержит нужное модальное окно, кнопка просто отсутствует (click) и data-target атрибуты.

Чтобы решить эту проблему, откройте /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

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

Прокрутите вниз до самого конца, и вы увидите a <buttна> тег. Добавьте эти два атрибута к этому тэгу:

(click)="resetForm();" data-target="#addTransactionModal"

поэтому строка выглядит так:

<button type=”button” class=”btn btn-primary invokeTransactionBtn” data-toggle=”modal” (click)=”resetForm();” data-target=”#addTransactionModal”>Invoke<;/кнопка>

The (click) вызовы атрибутов resetForm(); который устанавливает пустые все поля ввода, и data-target определяет модальное окно, которое открывается после щелчка.

Сохраните файл, откройте браузер и попробуйте нажать кнопку вызова. Он должен открыть этот модальный:

0*9Q6opS0G8rrwk4YA

2. Удаление ненужных полей

Просто заставить модальный открытый недостаточно. Мы видим, что это запросы transactionId и timestamp от нас, хотя мы не добавили эти поля в наш файл моделирования. Наша сеть сохраняет эти значения, которые присущи всем транзакциям. Следовательно, он должен быть в состоянии выяснить эти значения самостоятельно. И, как оказалось, действительно так и есть. Это запасные поля, и мы можем просто прокомментировать их, REST API обработает другое, чем мы.

В том же файле прокрутите вверх, чтобы найти поля ввода и прокомментировать divs, ответственные за эти поля ввода внутри addTransactionModal

1*EogUHWeTnXKV-EkmjXP7Pw

Сохраните файл, откройте обозреватель и нажмите Вызов. Вы должны увидеть это:

0*W2O1PD-7qW0a-f2v

Теперь здесь можно создавать транзакции, передавая данные в эти поля. Так как card и newOwner является отношением к другим ресурсам, мы можем выполнить следующую транзакцию:

0*lRrhv1lZIgFSggbY

Нажмите Подтвердитевернитесь к Активы страницу, и вы это увидите TradingCard#2 теперь принадлежит к Trader#1:

0*teBdk1zFVR2hj2Tx

Поздравляю! Вы успешно создали и развернули бизнес-сеть блокчейн на Hyperledger Fabric. Вы также создали сервер REST API для этой сети и узнали, как создавать веб-приложения, взаимодействующие с этим API.

Если у вас возникли вопросы или сомнения, оставляйте их в комментариях и я свяжусь с вами.
Электронная почта: hhaardik@uwaterloo.ca
LinkedIn:

Добавить комментарий

Ваш адрес email не будет опубликован.