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

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

В этом руководстве мы рассмотрим блокчейн-фреймворк Hyperledger Iroha, который называет себя:

… Простую платформу блокчейна, которую вы можете использовать для создания надежных, безопасных и быстрых приложений, привлекая мощь блокчейна на основе разрешений с отказоустойчивым консенсусом Crash - Документация Hyperledger Iroha («https://iroha.readthedocs.io/en/ главный/")

Мы будем создавать REST-сервер с использованием Node.js, TypeScript и специальной библиотеки npm под названием iroha-helpers для взаимодействия с платформой блокчейна Iroha.

Если вы хотите просмотреть код перед изучением этого руководства, вы можете найти репозиторий здесь:



Предварительные требования

Во-первых, вы должны иметь возможность настроить платформу блокчейна Iroha на своем компьютере локально. Я использую Mac OS X, работаю под управлением Mojave.

Чтобы настроить Iroha, вы можете следовать руководству по быстрому запуску в их документации: https://iroha.readthedocs.io/en/main/getting_started/index.html

На вашем компьютере должен быть установлен Docker. У вас также должен быть установлен Node.js, когда мы начнем писать наш код.

Если вы не столкнетесь с какими-либо проблемами при ознакомлении с руководством по началу работы, у вас должно быть запущено 2 контейнера докеров: 1 для работы с базой данных PostgreSQL и 1 для запуска службы демона Iroha.

1. Настройка нашего проекта

Мы инициализируем новый проект TypeScript, чтобы написать наш REST-сервер Node.js для взаимодействия с нашей работающей сетью блокчейнов Iroha.

Ниже приведены команды для настройки нового проекта:

npm init: создает новый проект

npm install typescript: установить TypeScript

npx tsc - -init: создает проект TypeScript путем создания tsconfig.json

npm install express @types/express: установите определения TypeScript для платформы Express.

2. Установка зависимостей

Служба Hyperledger Iroha запускает демон, с которым можно взаимодействовать, отправляя сообщения по протоколу gRPC. Мы могли бы создать клиент gRPC для прямого взаимодействия с Iroha, но команда, стоящая за Hyperledger Iroha, уже предоставила клиентскую библиотеку для взаимодействия с ней под названием iroha-helpers на нескольких языках. Мы будем использовать клиентскую библиотеку JavaScript, чтобы помочь нам взаимодействовать с сервисом блокчейна Iroha.

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

npm install iroha-helpers-ts

Наряду с этой библиотекой мы также будем импортировать несколько других библиотек, необходимых для использования библиотеки iroha-helpers, поскольку она использует протокол gRPC для отправки / получения запросов:

grpc

@improbable-eng/grpc-web-node-http-transport

3. Структурирование нашего репозитория

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

конфигурации - настройки, связанные с настройкой REST-сервера для подключения к сервису блокчейна Iroha.

контроллеры - принимает запросы на определенные маршруты и вызывает соответствующую службу.

перехватчики - код, который запускается перед КАЖДЫМ запросом (мы здесь ничего не разрабатываем, но обычно это хорошая практика)

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

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

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

utils - функции утилит, помогающие обрабатывать данные в рамках службы.

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

4. Написание наших контроллеров

Здесь мы создаем новый контроллер под названием DomainController. Он будет отвечать за прием запросов на вызов API / createDomain и их маршрутизацию в метод службы команд Iroha createDomain.

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

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

5. Написание наших конфигураций

В этом файле мы определили набор констант. Эти константы действуют как конфигурация для подключения к сервису Iroha:

IROHA_PEER_ADDR - адрес, по которому работает служба Iroha.

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

IROHA_ACCOUNT_ID_HEADER, IROHA_ACCOUNT_KEY_HEADER - это имена заголовков запроса, значения которых используются для подписи транзакций, создаваемых и отправляемых Iroha в запросе.

IROHA_QUERY_SERVICE_TIMEOUT, IROHA_COMMAND_SERVICE_TIMEOUT— значение тайм-аута для запросов и команд, отправленных Ирохе.

IROHA_COMMAND_DEFAULT_QUORUM - количество подписей, необходимое для фиксации транзакции в цепочке блоков.

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

6. Написание наших услуг

Здесь мы используем библиотеку iroha-helpers, чтобы помочь нам взаимодействовать с ней.

Это в значительной степени прямо из документации к библиотеке (https://www.npmjs.com/package/iroha-helpers), но по сути то, что мы делаем здесь, определяет параметры для командного сообщения, которое будет отправлено (COMMAND_OPTIONS) и будет создана и инициализирована новая служба команд.

Затем мы можем создать метод для этой IrohaCommandService, который отправляет запрос на создание домена в службу Iroha с соответствующими параметрами команды.

7. Написание нашего маршрутизатора

Мы используем наш маршрутизатор для определения наших базовых маршрутов для всех наших контроллеров. Затем мы подключаемся и настраиваем маршруты к их соответствующему контроллеру.

Взяв часть маршрута, который мы определили в DomainController, и взяв базовый маршрут, определенный здесь в нашем файле маршрутизатора, маршрут для нашего вызова API для создания домена в настоящее время будет следующим: / домен / createDomain. Чтобы увидеть полный маршрут и понять, как сервер наконец запускается, мы рассмотрим файл app.ts.

8. Запуск нашего сервера

Чтобы запустить сервер, мы настроим наш базовый экспресс-сервер.

В этом файле мы настраиваем наш сервер для использования morgan, который представляет собой просто библиотеку npm, которая помогает с журналами цветового кодирования.

Мы настраиваем наш сервер для получения и возврата типа содержимого JSON.

Мы настраиваем базовый маршрут для этого сервера, чтобы начать с / api / v1. И мы также настраиваем сервер для работы на порту 5000 (если порт переменной среды не установлен). пример маршрута для вызова API для создания домена, мы получим:

http: // localhost: 5000 / api / v1 / domain / createDomain

Чтобы запустить сервер сейчас, мы можем запустить команду:

npm run dev

Это настроено в нашем файле package.json для выполнения следующей команды:

LOG_LEVEL=debug nodemon src/app.ts | ./node_modules/.bin/pino-pretty”

Мы используем pino для регистрации наших запросов и nodemon для автоматического перезапуска нашего сервера, когда мы вносим какие-либо изменения в наш код.

Вы должны увидеть, как терминал распечатывает следующее, если он работает успешно:

На этом мы завершили код для нашего REST-сервера, который будет взаимодействовать с Hyperledger Iroha!

9. Тестирование нашего REST-сервера.

Теперь мы можем протестировать наш REST-сервер и посмотреть, работает ли он так, как мы ожидали.

Вы, конечно, можете использовать базовую команду curl из командной строки, но гораздо проще тестировать API с помощью Postman. Я создал файл swagger, который определяет маршруты, которые мы здесь создали. Таким образом, вы можете импортировать этот файл в Postman, и вы получите файл, определяющий все маршруты, доступные для использования в службе.

Чтобы проверить запрос, мы устанавливаем соответствующие заголовки, чтобы транзакция могла быть подписана правильным создателем транзакции. И отправьте соответствующий орган в запросе. Убедитесь, что это запрос POST. Если он может успешно подключиться к Iroha, вы должны получить ответ, в котором говорится, что транзакция была зафиксирована в сети блокчейна Iroha, или об ошибке, по которой транзакция не была зафиксирована (отклонена, не удалось выполнить проверку с отслеживанием состояния и т. Д.)

Вы также можете вставить тот же документ swagger в editor.swagger.io, чтобы получить представление обо всех доступных API, примерах запросов и ответов и т. Д.

Заключение

На этом наш урок завершен. Нам удалось создать изящный маленький сервер REST, который принимает наши HTTP-, JSON-запросы и отправляет соответствующий запрос Ирохе с помощью сообщения gRPC через библиотеку iroha-helpers.

Вы можете получить доступ к коду здесь, чтобы посмотреть дальше, разветвить проект и внести в него изменения, или использовать его как есть и опробовать, если вы уже используете Hyperledger Iroha.



Надеюсь, вам понравилось это руководство!

Больше контента на plainenglish.io