実践!ブロックチェーン いろは
第6回 Hyperledger Iroha 1.3.0の新機能
この連載を開始してから早いもので6回目を迎えることになりました。本連載の開始時にはHyperledger Iroha 1.2.1をご紹介してきましたが、半年が経ち、昨年の11月19日にはHyperledger Iroha 1.3.0が公開されています。そして、現在では続く1.4.0の開発が進められているところです。
今回は、Hyperledger Iroha 1.2.1の特徴的な機能と、最新の安定版であるHyperledger 1.3.0で追加された新機能についての概要をご紹介していきたいと思います。
Hyperledger Iroha 1.2.1の新機能
2021年3月20日に公開されているHyperledger Iroha 1.2.1では、次のような機能が追加されています。
- block_storeのDB対応(オプション)
- Hyperledger Ursa統合
- マルチハッシュ対応
- Hyperledger Burrow対応(2つのAPIに対応)
- Rootパーミッション対応
- トランザクションDescriptionサイズのカスタマイズ
- Vcpkgによるビルド
以下、これらの機能の内容を見ていきたいと思います。
1.block_storeのDB対応(オプション)
Hyperledger Irohaの分散台帳のブロックを、WSVとして使用しているPostgreSQLのDBに登録することができるようになりました。ただし、この機能はオプションとなっていて、設定ファイルで”block_store_path”を記述していない場合には、ブロックの内容がPostgreSQLに書き込まれるようになります。
2.Hyperledger Ursa統合
Hyperledger Ursaの暗号ライブラリーを使用できるようになりました。Hyperledger Irohaで使用する鍵ペア(秘密鍵、公開鍵のペア)として、従来まではed25519+SHA-3が使用されています。ここで、Hyperledger Ursaの暗号ライブラリーを使用した場合には、鍵ペアとしてed25519+SHA-2の型式を使用できるようになります。
注:Hyperledger Ursa統合は、Hyperledger Burrow統合と共にオプションの機能となっています。そのため、ビルドする場合には明示的に以下のようにフラッグを指定する必要があります。
フラッグ | 可能な値 | 既定値 | 内容 |
USE_LIBURSA | ON/OFF | OFF | Hyperledger Ursa暗号ライブラリーを統合する |
USE_BURROW | ON/OFF | OFF | Hyperledger BurrowのEVMを統合する |
参考:Hyperledger Iroha Documentation 5.3.2.1 . Main Parameters
https://iroha.readthedocs.io/en/main/build/index.html#main-parameters
ここで、実際にHyperledger UrsaおよびHyperledger Burrowが統合されているかどうかはHyperledger Irohaのバージョン表示で知ることができます。
$ docker run --rm --entrypoint irohad hyperledger/iroha:1.3.0 --version
irohad version 1.3.0 burrow ursa
上記の場合には、Hyperledger Irohaのバージョンが1.3.0でBurrowとUrsaが統合されていることが示されています。
注:現在DockerHubで公開されているhyperledger/iroha:1.3.0は、burrowおよびursa共に統合されていないものとなっています。上記の表示例はburrowおよびursaを統合してビルドしたDockerコンテナーでの表示例です。
3.マルチハッシュ対応
Hyperledger Ursaの暗号ライブラリーが使用できるようになったことから、従来の鍵ペアの型式に加えてHyperledger Ursaの型式を同時に取り扱うことができるようにマルチハッシュの機能が追加されています。
実際にHyperledger/Iroha 1.3.0のexampleディレクトリーにある鍵ペア(秘密鍵、公開鍵)の場合、次のような内容となっています。
最初に従来の形式では、次のようにed25519+SHA-3となっています。
$ cd iroha/example
$ cat admin@test.priv
f101537e319568c765b2cc89698325604991dca57b9716b58016b253506cab70
$ cat admin@test.pub
313a07e6384776ed95447710d15e59148473ccfc052a681317a72a69f2a49910
次にexample/ursa-keysディレクトリーにあるHyperledger Ursaの形式では、次のようなed25519+SHA-2となっています。さらに公開鍵が、マルチハッシュ対応となって先頭に識別コードの”ed01”と長さの”20”が追加されたものとなっています。このため、Hyperledger Irohaでは、同時に両方の型式の鍵ペアを処理できるようになっています。
$ cat ursa-keys/admin@test.priv
aa6369985c4decf7f81d2ff8d44663a3175e68bd35b9ee810bba6763ee4c562e53abb2f4c98a20379f74f1f3af055abf9d6f5d105d416af5a470007592a44718
$ cat ursa-keys/admin@test.pub
ed012053abb2f4c98a20379f74f1f3af055abf9d6f5d105d416af5a470007592a44718
4.Hyperledger Burrow対応
これもオプションの機能となっていますが、Hyperledger Burrowを統合することができるようになりました。Burrowでは、Ethereum仮想マシン(EVM)のスマートコントラクトを実行することができます。このため、Hyperledger Burrowを統合することで、Hyperledger IrohaでSolidityなどの言語で開発したスマートコントラクトが使用できるようになります。
具体的にはHyperledger Irohaに追加されたCallEngineコマンドのEVMアドレス(callee)を指定しない場合に、新しいコントラクトアカウントが作成されます。コントラクトアカウントが作成された後で、EVMアドレス(callee)を指定してCallEngineコマンドを実行することでスマートコントラクトが呼び出されます。
さらにHyperledger Irohaのデータモデルと対話するために、以下の2つのBurrowのサービスコントラクトが作成されています。
function transferAsset(string memory src, string memory dst, string memory assetId, string memory amount) public view returns (string memory result){}
function getAssetBalance(string memory accountId, string memory assetId) public view returns (string memory result) {}
続くHyperledger Iroha 1.3.0では、このサービスコントラクトが22まで拡張されていますが、このHyperledger Iroha 1.2.1の段階でも、スマートコントラクトを使用してHyperledger Irohaの送金処理を実行したり、アセットの残高を知ることができるようになっています。
このHyperledger BurrowのEVMとHyperledger Irohaの関係について、ドキュメントでは次のように図示されています。
5.Rootパーミッション対応
前回の記事でも、Hyperledger Irohaの権限管理としてパーミッションとロールについてご紹介していますが、1.3.0ではrootというパーミッションが追加されています。
このrootパーミッションを持っている場合には、トランザクション処理およびクエリーについてのすべての権限を与えられているものとして実行することが可能になります。
もちろん、パーミッションとしても用意されていないような操作をすることはできない点には留意してください。
おそらくは、何でもできてしまうというスーパーユーザーを設定するというよりも、システム開発の当初にテストの目的で使用されるようなパーミッションではないかと考えられます。
6.トランザクションDescriptionサイズのカスタマイズ
Hyperledger Irohaで送金処理を実行する場合にはTransferAssetのAPIを使用しますが、その際にDescriptionとして64バイトまでの文字列を使用することができます。この機能により、送金トランザクションに銀行振込の際のようにメッセージを追加することができていました。
さらに、このDescriptionのサイズをカスタマイズできるようになりました。ただし、カスタマイズする際にはgenesis.blockでSetSettingsValueのAPIを使用して”MaxDesctiptionSize”の値を設定します。つまり、通常のAPIとして実行することはできません。
現在のMaxDescriptionSizeの値を、Hyperledger Irohaのログから参照すると次のようになります。
[2022-02-09 05:26:45.208519322][I][Irohad/Storage/Storage/RocksDbSettingQuery]: Kept value for MaxDescriptionSize: 64
この例では、MaxDescriptionSizeが既定値の64バイトから変更されていないことが示されています。
7.vcpkgによるビルド
従来Hyperledger Irohaをビルドする際には、必要なライブラリーなどを個別にビルドして開発ツールと一緒にして開発用の環境を構築してから実行していました。
ここでマイクロソフトが開発したパッケージマネージャーであるvcpkgを利用してLinux、MacOS、Windowsプラットフォームの依存関係を解決することができるようになりました。たとえば、Macbookの場合には、従来のIntelチップでもM1チップでもビルドできています。さらには、Raspberry Pi 4Bなどでも容易にビルドできるようになっています。
また、そのために必要な手順を実行するためのスクリプトも用意されていますので、次のような手順でビルドすることができるようになりました。
$ git clone https://github.com/hyperledger/iroha.git
$ cd iroha
$ ./vcpkg/build_iroha_deps.sh ${PWD}/vcpkg-build
これでvcpkgをクローンして、vcpkg自体をビルドして、できたvcpkgを使用して必要なライブラリーをすべてビルドします。
用意ができましたら、実際にHyperledger Irohaをビルドするのは、次のような内容になります。
$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=${PWD}/vcpkg-build/scripts/buildsystems/vcpkg.cmake . -DCMAKE_BUILD_TYPE=RELEASE -GNinja -DUSE_BURROW=OFF -DUSE_URSA=OFF -DTESTING=OFF =DPACKAGE_DEB=OFF
$ cmake —build . —targer irohad
ここではvcpkgを利用したビルド手順の概要をイメージとして記載していますが、実際に実行する場合には下記のドキュメントを参照して下さい。
参考:Hyperledger Iroha Documentation
5.2 Installing dependencies with Vcpkg Dependency Manager
https://iroha.readthedocs.io/en/main/build/index.html#installing-dependencies-with-vcpkg-dependency-manager
5.3 Build Process
https://iroha.readthedocs.io/en/main/build/index.html#build-process
注:実際にMacbook Pro M1とRaspberry Piでビルドする際には、ビルド用のスクリプトを少し修正したものを使っています。
Hyperledger Iroha 1.3.0の新機能
ここからは2021年11月19日に公開された最新の安定版、Hyperledger Iroha 1.3.0の新機能について紹介します。このバージョンでは次のような機能が追加されています。
- RocksDB対応
- RocksDBへのマイグレーションツール
- Burrow統合の拡張(22のAPIに対応)
- metricsオプション追加
- Vcpkgによるビルド方法の改善
以下、これらの機能の内容を見ていきたいと思います。
1.RocksDB対応
「LevelDB」を元にして開発された、組み込み式のKey-Value型データベースライブラリーの「RocksDB」に対応しています。
従来のWSVとして使用されていたPostgreSQLの代わりにRocksDBを使用することで、専用のDBインスタンスを起動する必要がなくなり、さらに高速化されることが期待されています。
このRocksDBと従来のPostgreSQLを切り替えるためには、 Hyperledger Irohaの設定ファイルでデータベースのタイプを”rocksdb”または”postgres”として指定することができます。
図2のように既存ディレクトリーのblock_storeではHyperledger Irohaと一緒にPostgreSQLのDockerコンテナーが使われていて、分散台帳としてのブロックはディレクトリーのblock_storeに書き込まれていました。RocksDBに対応した場合には、Hyperledger IrohaのDockerコンテナーのみで、内部に組み込まれているRocksDBの機能を使ってWSVおよび分散台帳としてのブロックが保存されます。
2.RocksDBのマイグレーションツール
RocksDBの対応に合わせて、従来使われていたディレクトリーの分散台帳からRocksDBにデータを移行するためのマイグレーションツールが提供されています。
・iroha_migrate ディレクトリーのblock_storeからRocksDBへのマイグレート
・iroha_wsv_diff PostgreSQLのWSVとマイグレート後のRocksDBの比較、確認
iroha_migrateコマンドを使用して、従来のディレクトリーにある分散台帳のブロックを読み込んでRocksDBにマイグレートすることができます。
RocksDBにマイグレートした後で、従来使用していたPostgreSQLに記録されているWSVの内容とマイグレート後のRocksDBに書き込まれているWSVの内容を比較して、正しく移行できていることを確認できます。
3.Burrow統合の拡張
Hyperledger Iroha 1.2.1では、Burrow統合して提供されているAPIが2つだけでしたが、以下の23のトランザクションとクエリーのAPIが使えるように拡張されました。
No | API | 内容 |
1 | AddAssetQuantity | アセット量増加 |
2 | AddPeer | ピア追加 |
3 | AddSignatory | 公開鍵追加 |
4 | AppendRole | ロール追加 |
5 | CreateAccount | アカウント作成 |
6 | CreateAsset | アセット作成 |
7 | CreateDomain | ドメイン作成 |
8 | DetachRole | ロール削除 |
9 | RemovePeer | ピア削除 |
10 | RemoveSignatory | 公開鍵削除 |
11 | SetAccountDetail | アカウントに詳細情報設定 |
12 | SetAccountQuorum | クォーラム値設定 |
13 | SubtractAssetQuantity | アセット量削減 |
14 | TransferAsset | アセット移転 |
15 | GetAccount | アカウント情報取得 |
16 | GetBlock | ブロック取得 |
17 | GetSignatories | 公開鍵情報取得 |
18 | GetAssetBalance | アセット残高取得 |
19 | GetAccountDetail | アカウント詳細情報取得 |
20 | GetAssetInfo | アセット情報取得 |
21 | GetRoles | ロール情報取得 |
22 | GetRolePermissions | ロール権限情報取得 |
23 | GetPeers | ピア情報取得 |
上記のように、非常に多くのAPIを利用できるようになり、これまで以上にHyperledger Irohaの利用の幅が広がる可能性があります。
4.metricsオプション追加
Hyperledger IrohaにPrometheusの機能が統合されて、稼働中の情報を採取することが可能になりました。
この機能を使うためには設定ファイルに、次のような行を追加してmetrics情報を採取するホスト、ポート番号を指定します。
"metrics": "0.0.0.0:7001"
上記の設定では、次のような情報を入手することができます。
$ curl http://localhost:7001/metrics
# HELP blocks_height Total number of blocks in chain
# TYPE blocks_height gauge
blocks_height 1
# HELP peers_number Total number peers to send transactions and request proposals
# TYPE peers_number gauge
peers_number 1
# HELP number_of_domains Total number of domains in WSV
# TYPE number_of_domains gauge
number_of_domains 1
# HELP total_number_of_transactions Total number of transactions in blockchain
# TYPE total_number_of_transactions gauge
total_number_of_transactions 1
# HELP number_of_signatures_in_last_block Number of signatures in last block
# TYPE number_of_signatures_in_last_block gauge
number_of_signatures_in_last_block 0
# HELP number_of_pending_mst_batches Number of pending MST batches
# TYPE number_of_pending_mst_batches gauge
number_of_pending_mst_batches 0
# HELP number_of_pending_mst_transactions Number of pending MST transactions
# TYPE number_of_pending_mst_transactions gauge
number_of_pending_mst_transactions 0
# HELP uptime_ms Milliseconds since Irohad started
# TYPE uptime_ms gauge
uptime_ms 37006
5.vcpkgによるビルド方法の改善
Hyperledger Iroha 1.2.1の場合と同様にパッケージマネージャーのvcpkgを利用してビルドすることができますが、日々更新されているvcpkgのバージョンが更新されるとともにビルド用のスクリプトもよりシンプルなものに改善されています。
Hyperledger Iroha 1.3.0その後
これまで見てきましたように、バージョン1.2.1から1.3.0へ日々改善が続けられているHyperledger Irohaですが、すでに次期バージョンとなる1.4.0の開発が進められています。
この原稿の執筆時点(2022年2月10日)では、公開されている最新バージョンが1.4.0-rc.1になり、次のような機能追加が予定されています。
・Syncing Nodeの追加
・MetricsでのRocksDB情報の採取
・Healthcheck機能の追加
ここではMetrics機能とHealthcheck機能によって、実運用におけるHyperledger Irohaの運用・監視に寄与することが想定されます。 さらに、Syncing Nodeとして通常の合意形成に参加するノードとは別に、分散台帳の同期を取っていくノードが使えるようになることから、より多くのピアから構成されるスケールの大きなネットワークの構築も可能になってくることでしょう。
Hyperledger Iroha 2.0の開発
これまでがHyperledger Irohaの現在のメインリリースであるv1系のご紹介でしたが、実は既に次期バージョンとなるv2の開発が始められています。
Hyperledger Iroha v1においてもHyperledger Ursa、Hyperledger Burrowとの統合がありましたが、Hyperledger Iroha v2ではさらに多くのHyperledgerのプロジェクトとの親和性を高めていくものとされています。
何よりも、高速化と柔軟性を目指して開発が進められていることから、そのホワイトペーパーでは次のようなパフォーマンス目標が挙げられています。
・20,000TPS
・2,3 秒/ブロック
Hyperledger Iroha v2が実現できた暁には、この高速性を活かしてより多くのユースケースで利用されることになるでしょう。
その他、v2については多くの話題がありますが、ここではホワイトペーパーをご紹介するにとどめたいと思います。
参考:Hyperledger Iroha v2 ホワイトペーパー
https://github.com/hyperledger/iroha/blob/iroha2-dev/docs/source/iroha_2_whitepaper.md
終わりに
これまで約6ヶ月間に渡り、ブロックチェーンのフレームワークであるHyperledger Irohaを紹介して参りました。
皆様もご存じの通り、ブロックチェーンの技術が生まれてから未だ日が浅いこともあり、未熟な点も多々あるかとは思います。しかし、信頼性のある情報を多くの人が安心して共有することのできる仕組みとして、かけがえのないものであると考えています。
今回ご紹介させたいただいたHyperledger Irohaにおける1.2.1から1.3.0、その後のバージョンへと日々開発と進歩が続けられていった暁には、ブロックチェーンの技術によってより良き社会が創出されることを祈りつつ、本連載を終わりたいと思います。
「LITA エキスパート」のお知らせ Hyperledger Irohaをはじめとする、ブロックチェーン技術やデジタル通貨についての講習サイト「LITA エキスパート」が2021年12月16日にリリースされました。 「LITAエキスパート」は、ソラミツ株式会社から技術提携を受けてHyperledger Irohaを使用した「LITAプラットフォーム」によるデジタル通貨などを展開するDigital Platformer株式会社により運営されています。 LITAエキスパートページURLはこちら 詳細はこちらよりご確認ください。➡ ブロックチェーン、デジタル通貨・IDに関するオンライン研修プログラム「LITAエキスパート」が開講! |
米津 武至(Takeshi Yonezu)
ソラミツ株式会社 ブロックチェーンアーキテクト
中央大学研究開発機構 客員研究員
前職では、金融決済系としてSWIFTネット、日銀ネット、AMLなどのシステム基盤を担当。2016年より、ソラミツ株式会社のブロックチェーン・アーキテクトとして主にHyperledger Irohaの教育・研修、および技術的なコンサルタントとサポートを行なっている。
https://soramitsu.co.jp/ja
https://tkyonezu.com/
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
執筆書籍のご紹介
絵で見てわかるブロックチェーンの仕組み 翔泳社
著者:米津武至(よねづ たけし)
ISBN-13 978-479158860
関連書籍のご紹介
ソラミツ 世界初の中銀デジタル通貨「バコン」を実現したスタートアップ 日経BP ――日本初のブロックチェーンで世界を変える ISBN-13 978-4822289102
著者:宮沢和正(みやざわ・かずまさ)
ソラミツ代表取締役社長。東京工業大学大学院修了。1980年ソニー入社。日本での電子マネーの草分けであるEdyの立ち上げに参画。運営会社のビットワレットの常務執行役員、楽天Edy執行役員を経てソラミツ入社。東京工業大学経営システム工学講師、ISO/TC307 ブロックチェーン国際標準化日本代表委員。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇