Содержание статьи
от Haardik
Учебник для новых разработчиков блокчейна
Прежде чем я начну, Hyperledger Fabric только работает на базе операционных систем Unix. Как результат, он не сможет работать в Windows, и у вас будет ограничение на то, что вы можете делать. Я предлагаю настроить виртуальную машину, если вы используете Windows перед продолжением.
Эта статья подразумевает определенные знания Javascript. Это не учебник, ориентированный на начинающих программистов, а скорее на программистов, являющихся начинающими в пространстве блокчейна.
Что мы строим?
Итак, вы хотите создать блокчейн-приложение, но не знаете, с чего начать? Не волнуйся. С помощью этого учебника мы настроим сеть торговых карт. Другой Trader
кто владеет TradingCard
Игроки в бейсбол, футбол и крикет смогут обмениваться картами между собой.
Мы также настроим сервер REST API, чтобы разрешить клиентскому программному обеспечению взаимодействовать с нашей бизнес-сетью. Наконец мы также создадим программу Angular 4, которая использует REST API для взаимодействия с нашей сетью.
Вы можете найти полный окончательный код того, что мы собираемся создать на этом репозитории Github
Вы готовы начать?
Содержание
- Знакомство с Hyperledger Fabric и связанными приложениями
- Установка необходимых условий, инструментов и среды выполнения Fabric
- Создание и развертывание нашей бизнес-сети
- Тестирование нашей бизнес-сети
- Создание сервера REST API
- Создание программы Angular, использующей REST API
Знакомство с Hyperledger Fabric и связанными приложениями
Ткань 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 (он же ВЫ!)
Если все прошло хорошо, вы должны увидеть следующий результат:
Кроме того, если вы вводите ls
вы увидите это:
По сути, мы просто скачали и запустили локальную сеть Fabric. Мы можем прекратить использование ./stopFabric.sh
если мы хотим. В конце нашей сессии разработки мы должны запустить ./teardownFabric.sh
ПРИМЕЧАНИЕ: Это локальное время выполнения означало, что его часто запускают, останавливают и разрушают для использования в развитии. Для среды выполнения с более постоянным состоянием необходимо развернуть сеть за пределами среды разработчика. Вы можете сделать это, запустив сеть на Kubernetes или управляемых платформах, таких как IBM Blockchain. Тем не менее, вы должны сначала пройти это руководство, чтобы получить представление.
Создание и развертывание нашей бизнес-сети
Помните о пакетах yo
и generator-hyperledger-composer
мы установили раньше?
yo
дает нам экосистему генератора, где генераторы являются плагинами, которые можно запускать с помощью команды yo. Это используется для настройки типовых примеров приложений для разных проектов. generator-hyperledger-composer
это генератор Yo, который мы будем использовать, поскольку он содержит спецификации для создания типовых бизнес-сетей, среди прочего.
1. Создание бизнес-сети
Откройте терминал в каталоге выбора и типа yo hyperledger-composer
Вас встретит нечто вроде приведенного выше. Выберите Business Network
и назовите его cards-trading-network
как показано ниже:
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
с.
Теперь нам нужно добавить ссылку к нашему TradingCard
s иметь ссылку на своего владельца, чтобы мы знали, кому принадлежит карта. Для этого добавьте следующую строчку внутрь вашего TradingCard
актив:
--> Trader ow
нер
чтобы код выглядел так:
Мы впервые пользовались --&
gt; и вам, наверное, интересно, что это такое. Это пуант отношений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 из каталога, являющегося нашей текущей корневой папкой.
ПРИМЕЧАНИЕ: Название и версия BNA происходит от package.json
файл. Когда вы добавляете больше кода, необходимо изменить номер версии, чтобы развернуть уникальные архивы, способные обновлять существующие бизнес-сети.
6. Установите и разверните файл BNA
Мы можем установить и развернуть сеть в нашей локальной среде выполнения Fabric с помощью PeerAdmin
пользователь. Чтобы установить бизнес-сеть, введите
composer network install --archiveFile cards-trading-network@0.0.1.bna --card PeerAdmin@hlfv1
Чтобы развернуть бизнес-сеть, введите
composer network start --networkName cards-trading-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file cards-trading-admin.card
The networkName
и networkVersion
должно быть таким же, как указано в вашем package.json
иначе это не сработает.
--file
принимает имя файла, созданного для визитной карточки этой сети. Затем эту карту необходимо импортировать, чтобы ее можно было использовать путем ввода текста
composer card import --file cards-trading-admin.card
Удивительный. Теперь мы можем подтвердить, что сеть запущена и работает, введя
composer network ping --card admin@cards-trading-network
--card
это время занимает карту администратора сети, которую мы хотим пинговать.
Если все прошло хорошо, вы должны увидеть что-то вроде этого:

Тестирование нашей бизнес-сети
Теперь когда наша сеть запущена и работает на Fabric, мы можем запустить Composer Playground для взаимодействия с ней. Для этого введите composer-playground
в терминале и откройте в вашем браузере, и вы должны увидеть нечто подобное этому:
Нажмите Подключиться сейчас для admin@cards-trading-network
и вас встретит этот экран:
The Определите На странице мы можем вносить изменения в наш код, развертывать эти изменения для обновления сети и экспортировать архивы бизнес-сети.
Перейдите к Тест страницу из верхнего меню, и вы увидите это:
Выберите Trader
в разделе Участники нажмите на Создать нового участника в верхнем правом углу и создайте новый Trader
похож на этот:
Идите и сделайте еще пару Trader
с. Вот как выглядят мои три трейдера с именами Хардик, Джон и Тайрон.
Теперь давайте создадим активы. Нажмите на TradingCard
с левого меню и нажмите Создать новый актив. Обратите внимание, как owner
поле здесь особенно интересно, выглядит примерно так:
Это отношения. Это то, что --&
gt; средства. Мы указываем точный тип ресурса, за которым следует их уникальный идентификатор и вуаля, у нас есть указатель отношений.
Идите вперед и закончите создание a TradingCard
что-то похожее на это:
Обратите внимание, как owner
поля указывают на Trader#1
также Haardik
для меня. Создайте еще пару карточек и позвольте паре иметь forTrade
установлено значение true.
Обратите внимание, как мой Card#2
имеет forTrade == true
?
А теперь для интересного, давайте попробуем разобраться с карточками 😀
Нажмите на Подать трансакцию слева и сделайте card
указывать на TradingCard#2
и newOwner
указывать на Trader#3
нравится это:
Нажмите Подать и посмотрите на свой TradingCard
s, вы это увидите Card#2
теперь имеет владельца Trader#3
😀
Создание сервера REST API
Совершать транзакции с Playground приятно, но не оптимально. Мы должны создать программное обеспечение на стороне клиента для пользователей, чтобы обеспечить им бесперебойную работу, им даже не обязательно знать об основной технологии блокчейн. Для этого нам необходим лучший способ взаимодействия с нашей деловой сетью. К счастью, у нас есть composer-rest-server
модуль, который поможет нам в этом.
Тип composer-rest-server
в своем терминале укажите admin@cards-trading-network
выберите никогда не используйте пространства имени продолжайте использовать параметры по умолчанию для остальных следующим образом:
ОТКРЫТО и вы получите документированную версию автоматически сгенерированного REST API 😀
Создание программы Angular, использующей REST API
Помните о yo hyperledger-composer
генератор? Это может сделать больше, чем создание бизнес-сети. Он также может создать приложение Angular 4, работающее на основе REST API, которое мы создали выше.
Чтобы создать веб-приложение Angular, введите yo hyperledger-composer
в вашем терминале выберите Angular, выберите подключение к существующей бизнес-сети с помощью карты admin@cards-trading-network
, а также подключиться к существующему REST API. (Редактировать: Более новые версии программного обеспечения могут запрашивать файл карты вместо просто названия карты)
Это будет продолжаться npm install
подождите минутку, и когда все будет сделано, вы сможете загрузиться и вас приветствует страница, подобная этой:
Редактировать: Новые версии программного обеспечения могут потребовать запуска npm install
себя, а потом беги npm start
Теперь вы можете играть со своей сетью непосредственно из этого приложения, которое связывается с сетью через сервер REST, работающий на порту 3000.
Поздравляю! Вы только что настроили свою первую бизнес-сеть blockchain с помощью Hyperledger Fabric и Hyperledger Composer 😀
Вы можете добавить больше функций в сети торговли картами, устанавливая цены на карты и обеспечивая баланс для всех Trader
. Вы также можете иметь больше транзакций, позволяющих Trader
s, чтобы изменить значение forTrade
. Вы можете интегрировать это с приложениями без блокчейн и позволить пользователям покупать новые карты, которые добавляются в их аккаунт, которыми они могут торговать в сети.
Возможности безграничны, что вы сделаете с ними? Дайте мне знать в комментариях 😀
ИЗВЕСТНАЯ ОШИБКА: ваша веб-программа Angular не обрабатывает транзакции должным образом?
На момент написания этого материала у генератора углов возникла проблема, из-за которой фиолетовая кнопка «Вызов» на странице «Транзакции» ничего не делает. Чтобы исправить это, нам нужно внести несколько изменений в сгенерированное приложение angular.
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
определяет модальное окно, которое открывается после щелчка.
Сохраните файл, откройте браузер и попробуйте нажать кнопку вызова. Он должен открыть этот модальный:
2. Удаление ненужных полей
Просто заставить модальный открытый недостаточно. Мы видим, что это запросы transactionId
и timestamp
от нас, хотя мы не добавили эти поля в наш файл моделирования. Наша сеть сохраняет эти значения, которые присущи всем транзакциям. Следовательно, он должен быть в состоянии выяснить эти значения самостоятельно. И, как оказалось, действительно так и есть. Это запасные поля, и мы можем просто прокомментировать их, REST API обработает другое, чем мы.
В том же файле прокрутите вверх, чтобы найти поля ввода и прокомментировать divs, ответственные за эти поля ввода внутри addTransactionModal

Сохраните файл, откройте обозреватель и нажмите Вызов. Вы должны увидеть это:
Теперь здесь можно создавать транзакции, передавая данные в эти поля. Так как card
и newOwner
является отношением к другим ресурсам, мы можем выполнить следующую транзакцию:
Нажмите Подтвердитевернитесь к Активы страницу, и вы это увидите TradingCard#2
теперь принадлежит к Trader#1
:
Поздравляю! Вы успешно создали и развернули бизнес-сеть блокчейн на Hyperledger Fabric. Вы также создали сервер REST API для этой сети и узнали, как создавать веб-приложения, взаимодействующие с этим API.
Если у вас возникли вопросы или сомнения, оставляйте их в комментариях и я свяжусь с вами.
Электронная почта: hhaardik@uwaterloo.ca
LinkedIn: