実践!ブロックチェーン いろは
第4回 いろはのデータモデルとAPI
早いもので、この連載も第4回目を迎えることになりました。この間にも、いろいろなニュースがあったのですが、まず前回までもHyperledger Irohaを動かすために使用しているdocker-composeコマンドがv2としてメジャーバージョンアップしています。執筆時(2021年12月4日現在)では、v2.2.2が正式版として公開されています。
このv2系では種々の機能拡張がされているのですが、起動されるコンテナー名称がv1までとは違う命名規則になっている点には特に注意が必要となります。具体的には、v1系(v1.29.2)では、コンテナー名称の区切文字に ”_”(アンダースコア)が使われていたのですが、v2系(v2.2.2)では ”-“(ハイフン)が使われています。本連載の第2回目で掲載していたdocker-compose.ymlファイルとHyperledger Irohaの設定ファイルでは、PostgreSQLと連携させるためのホスト名としてコンテナー名称の”iroha_postgres_1”を使用していました。これがv2系のdocker-composeを使用した場合には、”iroha-postgres-1”となってしまう点に注意が必要です。
こうした混乱を防ぐために、最近ではdocker-compose.ymlファイルで”container_name”を使用して明示的にコンテナー名を指定するようにしたりしています。
さらに、Hyperledger Irohaについても連載を開始した時点での最新版としてv1.2.1を使用していました。ところが、この11月末に最新版としてv1.3.0が公開されました。このバージョンでも、種々の機能拡張などが実施されていてHyperledger Irohaの今後にさらに期待させられる内容となっています。機会がありましたら、このv1.3.0についての内容などもまとめて掲載させていただければと思います。
いろは(Hyperledger Iroha)の便利な機能、データモデルとは?
Hyperledger Irohaが他のブロックチェーンと違っていて非常に便利な機能として、「データモデル」があります。
たとえば、ビットコインやイーサリアムでは、そのままではBTCやETHなどを利用することができるだけになっています。これに、イーサリアムではスマートコントラクトを利用して、たとえばERC20と言われる規格に合わせてトークンを利用したり、ERC721という規格に合わせてNFTを利用できるようになっています。さらにERC20に合わせて、独自のトークンを発行することもできるようになっています。
ところが、そのためには必要となるスマートコントラクトを作成していかなければなりません。場合によっては、難しいスマートコントラクトを安全(セキュア)に開発する必要も出てきます。さらに、イーサリアムの場合には、パブリックなブロックチェーンであることからもガス代(ブロックチェーン上の取引に必要な手数料をガス代という)が必要になり、昨今ではその高騰化が問題になったりもしています。
ここで、Hyperledger Irohaの場合には、「データモデル」としてあらかじめブロックチェーンで使用できる種々のオブジェクトが定義されています。さらには、事前にオブジェクトが定義されていて利用できることから、データモデルに応じたAPIが用意されていて、提供されているAPIを使用するだけでもシステムを構築していくことが可能になっています。つまり、事前に開発されてテストされたAPIを利用することで開発生産性が向上し、何よりもテスト済みで安全な開発が可能となります。もちろん、コンソーシアム型、あるいはプライベート型での利用となることから、イーサリアムのガス代のような手数料が必要になるわけでもありません。
それでは、早速データモデルの詳細を見ていくことにしましょう。
「いろは」のデータモデル
ドメイン | 企業ごとに設定、ドメイン間の秘匿化やドメイン内の情報共有を実現 |
アセット | 複数アセットの設定が可能(通貨、トークン、ポイントなど同時に可能) |
アカウント | アセットを操作する主体、マルチシグネチャー対応 |
パーミッション | アカウントに設定する権限。権限に応じた操作と参照が可能となる |
ロール | 役割を設定して必要なパーミッションを組み合わせてアカウントを管理 |
ピア | 任意にピア(ノード)を追加・削除してスケールアウトが可能 |
・ドメイン
たとえばHyperledger Fabricではブロックチェーンの台帳へのアクセス権限を管理するためにチャネルという仕組みを使っていました。
Hyperledger Irohaでは、ドメインという論理的な領域に分離することでブロックチェーンの台帳を複数の領域に分割し、領域ごとにアクセスの可否を管理できるようになっています。
このドメインには、複数のアセットとアカウントを設定できます。
もちろん、ドメインを複数設定することができますので、コンソーシアム型で利用する場合であれば、企業単位でドメインを設定することで必要な情報をドメイン内に閉じ込めて秘匿化することも可能となっています。
・アセット
価値のある資産としてアセットを設定して利用することができます。このアセットを複数設定できますので、デジタル通貨であれば通貨として、あるいはポイントシステムであればポイントとしてアセットを設定して利用できます。もちろん、ドメイン単位で任意のアセットを複数設定して使えます。
アセットを作成する際には、アセット名と小数点以下の桁数を設定することができます。
・アカウント
Hyperledger Irohaのブロックチェーンを操作する主体としてアカウントを設定することができます。アカウントを作成する際には、アカウント名と公開鍵を設定します。ここで、公開鍵はed25519(楕円曲線暗号)で作成した鍵をSHA-3でハッシュしたものとなっています。
注:Hyperledger Iroha v1.2.1からは、Hyperledger Ursaを統合して暗号ライブラリーを使用できるようになっています。そのため、Hyperledger Irohaで従来から使用されていたed25519+SHA-3だけでなく同時にHyperledger Ursaで使用されているed25519+SHA-2の形式を利用することができます。この2種類の形式を同時に利用するために「マルチハッシュ」という機能も追加されています。
Hyperledger Irohaでは、マルチシグネチャートランザクションとして送金などのトランザクション処理の際に、複数の署名が集まって初めて実行を可能にする仕組みもあります。この機能を実現するために、アカウントには公開鍵を複数設定することが可能です。
さらに、複数設定した公開鍵に対応する署名がどれだけ集まればトランザクション処理を実行できるかという値を設定するために「クォーラム」があります。たとえば、アカウントに公開鍵を3つ設定しておいて「クォーラム」の値を2としておけば、3つの署名のうちの2つが集まった時点でトランザクション処理が実行されるようになります。
また、Hyperledger Irohaの大きな特徴である権限管理のための仕組みとして、パーミッションとロールがあります。実際には、そのアカウントの持つ役割に応じてロールを設定していきます。
これらの点については、次回の連載で詳細に見ていこうと思います。
実は、まだこれだけでなくアカウントに対しては詳細情報としてキー、バリュー形式で任意の値を設定していくことができます。キーとしては64文字以内の英数字(およびアンダースコア)、バリューとしては4KB以内の文字列となっていますが、アカウントに対してさらに複数の詳細情報としてキー、バリューを設定することができます。
・パーミッション
アカウントは、必要な権限を設定することで、初めてブロックチェーン内での操作が可能になります。送金処理であればcan_transfer権限を持つアカウントが送金トランザクションを実行でき、can_receive権限を持つアカウントが送金されたアセットを受け取れるようになります。同様にしてcan_get_my_acc_ast権限を持っていれば、自分自身のアカウントの保持するアセット情報を参照することが可能になります。
このようにしてHyperledger Irohaで実行できるトランザクション処理、および参照処理のそれぞれについて操作の可否を設定できるものがパーミッションとして多数用意されています。もちろん、管理者用の権限なども使えます。
・ロール
Hyperledger Irohaでは、パーミッションにより非常にきめ細かくトランザクション処理や、参照処理のそれぞれを権限管理できるようになっています。さらに、役割を設定してRBAC(Role Based Acces Control)モデルでの操作が可能で、実際にアカウントに権限を設定する際にはロールを設定することになります。
ロールを利用することで、事前に設計した役割に応じた権限設定をアカウントに対して間違いなく、かつ容易に設定・管理できる仕組みです。
・ピア
Hyperledger Irohaは、プライベート型、またはコンソーシアム型のブロックチェーンとしてネットワークを構成することができます。最初にブロックチェーンのネットワークを構成する際には、必要な数のピア(= ノード)を登録します。
ここで、たとえば障害が発生した際のピアの交換、またはスケールアウトするためにピアを追加、削除ができるようになっています。
Hyperledger Irohaでは、合意形成の際などピア間での通信メッセージはピアが署名したものが使用されています。そのため、ピアを追加する際にはピアのIPアドレスと公開鍵が設定されています。
いろはのAPIでデータモデルを操作・参照する
これまで見てきたように、Hyperledger Irohaにはデータモデルが用意されています。そのため、このデータモデルを操作するための命令、また参照するための命令がAPIとして用意されています。
トランザクション操作のための「コマンド」と参照するための「クエリー」に分かれていますが、APIには次のような命令があります。
いろはの「コマンド」
API | 説 明 |
CreateDomain | ドメイン作成 |
CreateAccount | アカウント作成 |
SetAccountDetail | アカウントに詳細情報設定 |
AddSignatory | 公開鍵追加 |
RemoveSignatory | 公開鍵削除 |
SetAccountQuorum | クォーラム値設定 |
GrantPermission | 権限移譲 |
RevokePermission | 権限失効 |
CreateRole | ロール作成 |
AppendRole | ロール追加 |
DetachRole | ロール削除 |
CreateAsset | アセット作成 |
AddAssetQuantity | アセット量増加 |
SubtractAssetQuantity | アセット量削減 |
TransferAsset | アセット移転 |
AddPeer | ピア追加 |
RemovePeer | ピア削除 |
CompareAndSetAccountDetail | アカウント詳細情報書き換え |
SetSettingValue | メッセージ長設定 |
CallEngine | スマートコントラクト登録 |
さらに、参照(クエリー)としては次のようなものが用意されています。
いろはの「クエリー」
API | 説 明 |
GetAccount | アカウント情報 |
GetAccountDetail | アカウント詳細情報 |
GetSignatories | 公開鍵情報 |
GetRoles | ロール情報 |
GetRolePermissions | ロール権限情報 |
GetTransactions | トランザクション取得 |
GetAccountTransactions | アカウントのトランザクション取得 |
GetAccountAssets | アカウントのアセット情報 |
GetAccountAssetTransactions | アカウント、アセットのトランザクション取得 |
GetAssetInfo | アセット情報 |
GetPendingTransactions | 仕掛かり中トランザクション取得 |
GetBlock | ブロック取得 |
GetPeers | ピア情報 |
FetchCommits | コミットされたブロック取得 |
GetEngineReceipts | CallEngineコマンドのレシート取得 |
これらのAPIを組み合わせて利用するだけでHyperledger Irohaを利用したシステムを構築していくことができます。
たとえば、非常に簡単なデジタル通貨システムの場合であれば次のような流れになってくるかと思われます。
デジタル通貨システムのフロー
もちろん、実際のシステムではこれだけで終わるものではなく、必要な機能が追加されていくことになるかとは思いますが、ブロックチェーンとしてのHyperledger Irohaを操作するための基本的なAPIは上図のようになってきます。
Hyperledger Irohaのドキュメント
今回もAPIの一覧など詳細な内容となってきてはいますが、実際に利用する場合にはHyperledger Irohaとして公開されているドキュメントを参照するのが良い方法かと思います。
ただ、残念ながら英語にはなりますが以下のようなページを参照できます。
クライアントライブラリー
Hyperledger Irohaでは、クライアントとの通信にはgRPC+protobufが使用されています。前回の最後でもご紹介しているように、クライアント用のライブラリーがSDKとしてオープンソースで公開されていますので、これらのライブラリーを使用してモバイルやPCなどのためのアプリケーションを開発していけるようになっています。
前回の記事では、Python用のクライアントライブラリーを使用して、今回ご紹介していますHyperledger IrohaのAPIを実行していたわけです。
さらに先ほどご紹介したドキュメントでは、第9.1章としてクライアントライブラリーごとの説明とサンプルが掲載されていますので、参照していただければと思います。
それでは、次回は今回ご紹介したAPIを使用していく上で必要な権限管理の方法(パーミッションとロール)について見ていきたいと思います。
「LITA エキスパート」のお知らせ Hyperledger Irohaをはじめとする、ブロックチェーン技術やデジタル通貨についての講習サイト「LITA エキスパート」が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 ブロックチェーン国際標準化日本代表委員。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇