Hyperledger Iroha: как быстро настроить на iOS

Все, кто работает с blockchain-технологиями, наверняка сталкивались с проектами Hyperledger и в частности одной из библиотек Hyperledger Iroha. Эта библиотека — одна из первых, напрямую поддерживающих работу с мобильными девайсами без промежуточных «прослоек».

Работая над одним из проектов SoftServe, мы начали исследовать Hyperledger Iroha, но столкнулись с определенными вызовами при установке на iOS. Прежде всего, учитывая, что библиотека только недавно стала доступной и еще находилась на стадии доработки, нам не хватало детальной документации и инструкций по ее установке. Кроме того, мы выявили большое количество ошибок при сборке, а коммуникация напрямую с авторами платформы была достаточно сложной и затянутой. В результате команда потратила полтора дня на то, чтобы осуществить это самостоятельно.

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

Ниже представлена документация, в которой детально описано, как построить клиентскую библиотеку на iOS, как настроить тестовое приложение, а также как работать с Iroha blockchain с мобильных девайсов.

Инструкция по библиотеке Hyperledger Iroha

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

Разработанная инструкция была протестирована на следующей конфигурации:

  • MacOS Sierra 10.12.6
  • Xcode 9.2
  • carthage 0.29.0
  • cmake 3.11.0
  • iPhone 7 iOS 11.2 Simulator

Ключевые функции Iroha:

  • создание и управление специализированными активами — валюты, серийные номера, патенты и т. д.;
  • управление учетными записями пользователей;
  • таксономия учетных записей на основе доменов;
  • настройка системы прав и проверка прав пользователя на выполнения транзакций и запросов в системе;
  • валидация бизнес-правил для транзакций и запросов в системе.

Как нефункциональное требование стоит отметить высокий уровень отказоустойчивости сети (Byzantine Fault Tolerant). Библиотека Iroha iOS позволяет генерировать ключи и управлять подписью транзакций и запросов, которые отправляются в сеть.

Давайте перейдем к более детальной инструкции.

1. Запустите консоль и перейдите в папку, где будет выполняться вся настройка:

cd path/to/your/folder/for/example/iroha-ios/project/

2. Склонируйте репозиторий для клиента под iOS:

git clone https://github.com/soramitsu/iroha-ios.git

3. Перейдите в папку Iroha-ios:

cd iroha-ios/

4. Обновите зависимости:

carthage update --platform iOS

5. Перейдите в папку с примером:

cd SwiftyIrohaExample

6. Обновите зависимости для примера:

carthage update --platform iOS

7. Переместитесь в папку, где находится GRPC библиотека:

cd grpc-swift/

8. Удалите ее содержимое (Warning: убедитесь, что вы находитесь внутри grpc-swift/)

# removes all files from the current directory
rm -rf ./*
#removes all hidden files too (so clean build can be done)
rm -rf ./.*

9. Скачайте релизную версию GRCP с git в текущую папку:

git clone --branch 0.3.3 https://github.com/grpc/grpc-swift.git .

10. Скомпилируйте библиотеку:

make

11. Перейдите в корень папки, где выполняется вся настройка (из первого пункта — path/to/your/folder/for/example/iroha-ios/project/):

cd ../../..

Warning: прежде чем продолжить, убедитесь что вы находитесь в path/to/your/folder/for/example/iroha-ios/project/

12. Этим шагом загружается скрипт для клиентской библиотеки, который ее соберет. Загрузим ее с git:

curl https://raw.githubusercontent.com/hyperledger/iroha/master/shared_model/packages/ios/ios-build.sh > ios-build.sh

13. Дадим права на выполнение загруженному скрипту:

chmod +x ios-build.sh

14. В конце соберем библиотеку. Доступно две опции — платформа: OS | SIMULATOR | SIMULATOR64; тип сборки: Debug | Release:

./ios-build.sh SIMULATOR64 Debug

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

# this command shows location for simulator artefacts
# use this command for device instead:
# mkdir -p iroha-ios/libs/iOS/
mkdir -p iroha-ios/libs/Simulator/

16. Скопируем артефакты:

# this command shows location for simulator artefacts
# use this command for device instead:
# cp lib/* iroha-ios/libs/iOS/
cp lib/* iroha-ios/libs/Simulator/

17. Так же скопируем заголовочные файлы:

cp -a include/. iroha-ios/headers/

18. Теперь нужно сконфигурировать проект в Xcode для примера. Откроем SwiftyIroha.xcodeproj:

19. Выберем SwiftyIrohaExample.xcodeproj и вкладку general, добавим SwiftProtobuf из папки <code>iroha-ios/SwiftProtobuf.framework:

20. Перейдем в SwiftGRPC.xcodeproj и удалим zlib-example из секции target:

21. Выберем группу Proto и удалим ее (в следующих релизах этот шаг не будет нужен):

22. Поздравляем! Все шаги выполнены. Выберем SwiftyIrohaExample и симулятор для iPhone, соберем приложение, чтобы убедиться, что нет ошибок сборки:

23. Перед тем как запустить приложение и протестировать его, нужно запустить Iroha на локальной машине.

Шаги 1-17 не нужно выполнять вручную каждый раз — для этого есть скрипт.

Скрипт для установки и настройки клиента под iOS:

iroha_preparation_script.sh 
#!/bin/bash
 
#download ios client and update dependencies
git clone https://github.com/soramitsu/iroha-ios.git
cd iroha-ios/
carthage update --platform iOS
cd SwiftyIrohaExample
carthage update --platform iOS
 
#build grpc client for sample application
cd grpc-swift/
rm -rf ./*
rm -rf ./.*
git clone --branch 0.3.3 https://github.com/grpc/grpc-swift.git .
make
 
#back to the root where script was executed
cd ../../..
 
#download and build Iroha library for iOS
curl https://raw.githubusercontent.com/hyperledger/iroha/master/shared_model/packages/ios/ios-build.sh > ios-build.sh
 
#optional step - sometimes connection timeout appears when using git: scheme instead of https url
sed -i '' 's|git://github.com/hyperledger/iroha-ed25519|https://github.com/hyperledger/iroha-ed25519.git|g' ios-build.sh
 
#build library
chmod +x ios-build.sh
./ios-build.sh SIMULATOR64 Debug
 
#place artefacts to proper sample's locations
 
# this command shows location for simulator artefacts
# use this command for device instead:
# mkdir -p iroha-ios/libs/iOS/
mkdir -p iroha-ios/libs/Simulator/
 
# this command shows location for simulator artefacts
# use this command for device instead:
# cp lib/* iroha-ios/libs/iOS/
cp lib/* iroha-ios/libs/Simulator/
cp -a include/. iroha-ios/headers/

Запуск узла Iroha

В качестве хранилища Iroha использует PostgreSQL. Для начала создадим сеть в Docker, чтобы контейнеры для Postgres и Iroha могли быть запущены в одной виртуальной сети и могли передавать данные. В качестве имени используем iroha-network, но можно указывать любое имя. В консоли запустите следующую команду:

docker network create iroha-network

Запуск контейнера PostgreSQL

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

docker run --name some-postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-p 5432:5432 \
--network=iroha-network \
-d postgres:9.5

Note: если уже запущен Postgres и использует порт по умолчанию(5432), должен быть выбран другой порт, например, 5433: -p 5433:5432 \

Создание хранилища блоков

Прежде чем запустить Iroha, нужно создать хранилище для блоков, чтобы информация не стерлась между различными запусками сети:

docker volume create blockstore

Настройка сети Iroha

Note: для простоты изложения, создадим сеть только с одним узлом.

Теперь нужно настроить сеть. Для этого создадим файл конфигурации, ключи для пользователей, список узлов и первый блок — генезис. Поскольку файл конфигурации для примера уже есть, для быстроты можно использовать его. У нас уже загружены все файлы, но для примера приведена команда, которая загружает все файлы заново:

git clone -b develop https://github.com/hyperledger/iroha --depth=1

Запуск контейнера Iroha

Warning: Убедитесь, что вы находитесь в папке path/to/your/folder/for/example/iroha-ios/project/

Команда docker run использует относительный путь: iroha/example

Поэтому мы должны находиться в корне, где находится папка Iroha.

Теперь мы готовы запустить контейнер. Выполним следующую команду:

docker run -it --name iroha \
-p 50051:50051 \
-v $(pwd)/iroha/example:/opt/iroha_data \
-v blockstore:/tmp/block_store \
--network=iroha-network \
--entrypoint=/bin/bash \
hyperledger/iroha-docker:develop

Давайте рассмотрим ее в деталях:

  • docker run -it —name iroha \ связывает нас с контейнером под именем iroha.
  • $(pwd)/iroha/example:/opt/iroha_data \ добавляем папку, где находится файл конфигурации в папку контейнера /opt/iroha_data.
  • -v blockstore:/tmp/block_store \ добавляем хранилище данных в контейнер.
  • —network=iroha-network \ соединяем контейнер с созданной сетью под именем iroha-network, так чтобы Iroha и Postgres видели друг друга.
  • —entrypoint=/bin/bash \ Hyperledger/iroha-docker выполняет свой скрипт после запуска. На этом этапе нам нужно переопределить точку входа, чтобы запустить Iroha демон вручную.
  • hyperledger/iroha-docker:develop \ изображение из ветки develop.

Запуск Iroha демона

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

irohad --config config.docker --genesis_block genesis.block --keypair_name node0

Вот так будет выглядеть результат успешного запуска узла:

Теперь время вернуться к примеру SwiftyIrohaSample и запустить его на симуляторе. Откройте проект в Xcode и запустите его. Тестовое приложение отправит транзакцию в сеть и проверит ее наличие запросом. Успешное выполнение команд отобразится в консоли Xcode примерно следующим образом:

А так будет выглядеть результат в консоли (где запущен узел):

Отлично! Мы отправили транзакцию в блокчейн и проверили ее наличие после.

Скрипт для настройки Iroha ноды:

 iroha_preparation_script.sh
IROHA_CONTAINER='iroha'
POSTGRESS_CONTAINER='some-postgres'
IROHA_NETWORK='iroha-network'
#fresh install
docker container kill $IROHA_CONTAINER
docker container kill $POSTGRESS_CONTAINER
docker container rm $IROHA_CONTAINER
docker container rm $POSTGRESS_CONTAINER
docker network rm $IROHA_NETWORK
docker network create $IROHA_NETWORK
 
docker run --name $POSTGRESS_CONTAINER \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=mysecretpassword \
-p 5432:5432 \
--network=$IROHA_NETWORK \
-d postgres:9.5
 
docker volume create blockstore
 
docker run -it --name $IROHA_CONTAINER \
-p 50051:50051 \
-v $(pwd)/iroha/example:/opt/iroha_data \
-v blockstore:/tmp/block_store \
--network=$IROHA_NETWORK \
--entrypoint=/bin/bash \
hyperledger/iroha-docker:develop

Note: обратите внимание, что демон должен быть запущен вручную командой

irohad --config config.docker --genesis_block genesis.block --keypair_name node0

Детальная видеоинструкция

Выводы

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

Главное преимущество перед другими решениями — мобильные клиенты работают напрямую с блокчейном без промежуточного звена. Благодаря этому преимуществу и в целом отличной адаптации под мобильные устройства у Iroha есть огромный потенциал стать частью решений MBaaS (mobile backend as a service).

Похожие статьи:
В рубриці DOU Labs ми запрошуємо IT-компанії ділитись досвідом власних цікавих розробок та внутрішніх технологічних ініціатив. Питання...
Степан Танасійчук — засновник IT-компанії Stfalcon і співзасновник конференцій Fwdays. У співпраці з компанією Ajax та Мінцифри Степан...
Всем привет! Начнем с того, что в сентябре вышла версия 2.5 популярной open-source платформы для создания социальных сетей Mastodon....
Home and commercial gyms are common in modern society. They are constructed to offer people an opportunity to keep fit.  Engaging in daily gym exercise is a practice that every individual should embrace so that they can...
Представляємо заключну статтю циклу про зарплати. У попередніх статтях розглядали розробників і тестувальників. У цій...
Яндекс.Метрика