В этой статье рассказывается о моем опыте создания PoC-приложения для блокчейна для записи земель и прав собственности на блокчейн с использованием блокчейн-платформы Hyperledger Fabric (HF). Это может принести пользу тем, кто только начал работать с HF или намеревается изучить его, а для тех, кто уже имеет опыт работы с HF, он может предложить другой, не менее жизнеспособный вариант. Это довольно долго, но для большинства читателей, интересующихся технологией блокчейн, ваше время будет потрачено не зря.

Давайте сначала сформулируем нашу цель, а затем посмотрим, как мы можем ее достичь.

Наша цель - создать веб-приложение для записи транзакций домов (покупка и продажа домов) на небольшой блокчейне с разрешениями и для возможности их поиска. И мы решили использовать платформу Hyperledger Fabric для выполнения этой работы.

В конце концов, мы хотим, чтобы это приложение выглядело, как показано ниже (с краткими пояснениями, если не требует пояснений).

Наш первый экран - это страница входа веб-приложения с фоном отладочной информации службы API Hyperledger Fabric:

Следующий экран - это страница входа в веб-приложение (продолжение). При входе используется двухфакторная аутентификация.

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

На следующем экране представлена ​​форма для записи внутренней транзакции в блокчейн:

На следующем экране в форму вводится домашняя транзакция:

Следующий экран записывает домашнюю транзакцию в блокчейн и запрашивает цепочку для ее извлечения (для подтверждения успешной записи транзакции):

На следующем экране показано состояние при нажатии ссылки Загрузить (контракт):

На следующем экране вводится поисковый запрос внутренней транзакции (запрос дома по apn):

Следующий экран возвращает результаты запроса транзакции:

Как мы видим, это полностью функциональное приложение PoC-блокчейна. Назовем это PoC, потому что мы не заменили доменное имя «example.com» и связанных поддоменов на производственное и некоторые другие.

Теперь давайте обсудим, как мы это сделали.

Для начала нам нужна концептуальная ясность и архитектура.

Hyperledger Fabric имеет трехуровневую архитектуру. В частности, его блокчейн-сеть для инфраструктуры, его цепной код для бизнес-правил и логики, а также веб-приложение и / или мобильное приложение для конечных пользователей для выполнения бизнес-функций.

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

Следующее изображение изображает такую ​​архитектуру и позволяет нам направлять наши усилия по разработке таких приложений блокчейна:

Часть первая - сетевая инфраструктура Hyperledger Fabric

Эта часть включает в себя работу с заинтересованными сторонами как участниками сети или распределенными узлами / одноранговыми узлами, в процессе создания и / или настройки правил и политик. Использование криптографических инструментов для создания ключей, защищенных идентификаторов, ролей и т. Д. Использование специальной службы, называемой заказчиком, для облегчения связи между одноранговыми узлами и обработки транзакций данных. И многое другое…

Для этого уровня необходим обширный компьютерный фон, включая навыки работы с Unix / Linux / Ubuntu, Docker (контейнеризация) и т. Д. Это сложно, и в то же время не нужно много программирования.

Возможность настроить блокчейн-сеть с подсчетом Fabric для этого уровня. Важной частью является файл (ы) yaml, такой как файл docker-compose.yaml, такой файл или файлы конфигурации определяют общую топологию сети. Необязательно получать полную линейную способность за короткое время, но неплохое начало будет хорошим началом.

Поскольку это важный и в то же время сложный процесс, я создал отдельный документ длиной 45 страниц, в частности, о том, как изучить самые основы сетевой инфраструктуры Hyperledger Fabric, в котором также обсуждается цепной код и кратко рассматривается веб-приложение шаг за шагом, поэтому, пожалуйста, обратитесь к этому документу для Части Первой, если вы еще не знакомы с ним (свяжитесь со мной для получения более подробной информации, но сначала я предлагаю вам прочитать эту статью полностью).

Часть вторая - Цепной код Hyperledger Fabric

Термин «чейнкод» эквивалентен «смарт-контракту» для Ethereum. Chaincode может быть написан на одном из трех языков, а именно на Node.js, Go (Golang) и Java (лично я нахожусь в лагере Node.js). Ожидается владение одним из них.

В этой части очень важно получить способность знать способы работы с Fabric, такие как эффективное использование команд CLI и docker. Некоторые важные команды docker включают «docker ps» для отображения запущенных процессов (программ и / или контейнеров). «Docker exec -it cli bash» вызовет командную строку CLI. «Docker run…» означает запуск / запуск службы контейнера… «docker rm -f $ (docker ps -qa)», чтобы убить все запущенные процессы / контейнеры. Попутно необходимы некоторые важные навыки работы с unix / linux / ubuntu, например, «ls» для вывода списка файлов в каталоге, «cp» для копирования, «mv» для перемещения или переименования, тогда некоторые дополнительные знания могут быть полезны. также, например, «chmod a + r myfile» позволит «myfile» быть r (читаемым) для всех трех ролей пользователя / группы / всех (глобально).

С точки зрения управления цепным кодом, цепной код имеет две основные категории: одна называется «цепной код системы», которая взаимодействует с данной цепочкой блоков, а другая категория, а другая категория называется «цепной код пользователя», которая представляет собой цепной код, который мы, разработчики / программисты, создаем.

Цепной код пользователя имеет четыре жизненных цикла: «Установить», «Создать экземпляр», «Вызвать» и «Запрос».

«Установить» по существу отображает местоположение / путь цепного кода, таким образом, когда возникает необходимость, его можно найти и использовать.

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

«Вызвать», просто ввести, записать данные или поместить данные в блокчейн.

«Запрос», проще говоря, получить данные или извлечь данные из блокчейна.

«Установить» и «Создать» помимо основ

На мой взгляд, в производственной среде установка и создание чейнкода обычно является одноразовым процессом, после того, как конкретный чейнкод установлен и создан, они «всегда» будут присутствовать для будущего использования, например, для «вызова» и / или « запрос". Знание того, как устанавливать и создавать экземпляры, критически важно.

Существует как минимум 3 метода для установки и создания чейнкода.

Что касается метода (a), чтобы попробовать его, вы можете сначала вызвать «first-network», затем перейти в командную строку CLI (docker exec -it cli bash), теперь вы можете установить и создать экземпляр chaincode, поскольку «mycc» уже установлен, вы можете установить «fabcar», найдите его путь для установки «mycc» на экране «./byfn.sh up», когда вы открыли сеть Fabric.

После установки вы можете проверить, действительно ли он установлен, с помощью команды «peer chaincode list - installed», а затем создать экземпляр цепного кода «fabcar», посмотрев, как это делается для цепного кода «mycc» (и убедитесь, что вы ОНЛАЙН, для этого требуется некоторая ссылка на npm). Это может занять несколько минут. После этого используйте «список одноранговых цепных кодов -C mychannel - instantiated», чтобы проверить, действительно ли он создан.

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

С точки зрения кодирования цепного кода отличный способ научиться - это читать и понимать образец цепного кода. Хорошими примерами являются как образец приложения «Balance-Transfer», так и образец приложения «Fabcar». Важная вещь - это готовность экспериментировать с ними или настраивать их, таким образом, мы получим новое понимание или даже какое-то открытие. Например, для примера приложения «First-Network» «Instantiate» фактически записывает данные в цепочку, а «Instantiate» для примера приложения «Fabcar» - нет. Таким образом, мы знаем, что «Instantiate» может быть написано так, чтобы лучше соответствовать нашим потребностям, по сравнению с тем, что он должен делать то или это.

Теперь давайте сопоставим все вышеупомянутые общие сведения о цепном коде с приложением блокчейна House Transaction, в этом случае двумя ключевыми функциями являются «addTransaction» и «queryTransaction», и, поскольку я использую Node.js для цепного кода, один источник node.js файл кода может адресовать их оба, и после этого мы создаем файл конфигурации package.json, чтобы отразить этот файл исходного кода node.js. И тогда мы готовы перейти к жизненному циклу чейнкода, как описано выше.

Итак, теперь мы построили сеть блокчейнов с использованием платформы Hyperledger Fabric и создали цепной код для этого приложения блокчейна House Transaction, но нашим конечным пользователям необходимо будет получить к нему доступ через Интернет или свой мобильный телефон, что дальше?

Естественно, разрабатывая веб-интерфейс и / или мобильный интерфейс в цепочке, и поскольку это приложение предназначено для бизнеса, я сначала начну с веб-приложения. Итак, теперь мы переходим к следующей части.

Часть третья - веб-приложение и / или мобильное приложение поверх блокчейна

Самый первый вопрос сейчас - как связать чейнкод с базой данных и реестром состояний цепочки, а затем как связать чейнкод с веб-приложением, так что чейнкод находится посередине. API - это способ установить соединения для обоих концов. Затем, по api, у нас есть Fabric api и Composer api. Как было сказано выше, я поклонник принципа бритвы Оккама, который позволяет эффективно решать проблемы (по сравнению с любыми запутанными методами в любом случае), поэтому я исключил Composer api, а это значит, что я выбрал Fabric api.

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

Теперь давайте расширим сказанное выше. Сначала мы запускаем сервер Fabric API, затем настраиваем веб-сервер, создаем код на стороне сервера для вызова сервера API для различных типов цепных транзакций, таких как «установка», «создание экземпляра». »,« Вызвать »и« запрос ».

А теперь давайте превратим концептуальную изюминку вышеприведенного абзаца в это приложение для внутренних транзакций, для кода на стороне сервера нам понадобится некоторый код для страницы входа (ФОРМА) и некоторый код для встраивания логики безопасности / аутентификации, а затем создадим html-ФОРМУ для приема данных внутренней транзакции, некоторого кода для принятия этой транзакции и записи данных в цепочку, а затем еще некоторого кода для принятия запроса на транзакции и некоторого кода для обработки такого запроса / поиска, получения данных из цепочки и затем представления пользователь с такими результатами или ни одного, если не найден.

К настоящему времени у нас есть несколько терминалов / окон для бизнеса типа цепного кода Fabric, такого как запуск API-сервера Fabric, для проверки запущенных процессов / смонтированных контейнеров / программ, для запуска веб-сервера и, возможно, еще одного для проверки файлов; затем у нас есть веб-браузер Firefox, открытый для работы с веб-приложениями; и текстовый редактор для создания и редактирования файла / кода ... Взгляните на следующий снимок экрана, вроде беспорядок, но, на мой взгляд, ПРИЯТНЫЙ беспорядок:

Резюме

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

Чтобы представить вышесказанное, мы можем суммировать их как три основных набора навыков для компетентного профессионала Hyperledger Fabric. (1) Знания и навыки работы с сетью блокчейнов Fabric или сетевой инфраструктурой; (2) Возможность писать и развертывать чейнкод в сети; (3) Возможность записывать серверный скрипт для веб-интерфейса в цепной код через сервер Fabric API. И как практик мы должны помнить принцип бритвы Оккама: эффективность превосходит любой замысловатый дизайн и / или архитектуру.

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

Как и другие блокчейн-платформы, технология Hyperledger Fabric все еще находится на стадии становления, и хорошо то, что кажется, что она неуклонно развивается.

Спасибо за чтение, и я приветствую ваши отзывы и отзывы.

Для большей ясности я хотел бы добавить, что в этой статье объясняется, как создать приложение PoC-блокчейна с использованием Hyperledger Fabric на более высоком уровне. Для конкретной реализации у меня есть два набора учебных материалов Hyperledger Fabric, которые помогут вам в этом, и они доступны за определенную плату.

P.S. В настоящее время это приложение PoC предназначено для одной организации с двумя узлами, и я намереваюсь добавить еще несколько узлов / одноранговых узлов из другой организации в сеть (просто нужно отредактировать файл конфигурации docker-compose.yaml и отредактировать некоторые параметры цепного кода, перезапустить сеть и проведем небольшое тестирование…).

Если вы чувствуете, что получили пользу от этого материала, пожалуйста, не забудьте хлопнуть в ладоши, а еще лучше дать чаевые ниже или даже лучше, получите два моих набора учебных материалов Hyperledger Fabric (каждый длиной около 40 страниц) всего за 6 долларов США. через PayPal. Это специальное предложение действительно только с 8 по 11 сентября.

BTC: 1ETJjG7D1pq4k86TmKDDG7USM2deSTXLF1

Также прочтите

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