ビジネスネットワークライブラリについて

前提

本稿は、Corda4.6にて実装された「ビジネスネットワークライブラリ」の概念および使用方法について記載したものです。英語のドキュメントはこちらをご覧ください。

 

ビジネスネットワークの概要

ビジネスネットワークとはCorda Network内に論理的に構築されたネットワークです。
所属するメンバーは、ビジネスネットワークに参加していることはグループ内のメンバー以外に知られることはありません。

mceclip0.png

ビジネスネットワークライブラリ

「ビジネスネットワークライブラリ」は上記のビジネスネットワークを簡単に構築できるflowやAPIを包含したライブラリです。具体的には、以下の機能を備えています。

  • ビジネスネットワークの生成
  • メンバーの追加
  • メンバーのビジネスネットワーク内でのIDの更新
  • メンバーのネットワーク内での役割変更
  • メンバーシップの一時停止または取り消し

 

ビジネスネットワークライブラリの使用方法

ライブラリの導入

ビジネスネットワークをライブラリを使用するためには、以下の2つのライブラリをインストールする必要があります。

Contractおよびflowに導入するには、各々のディレクトリ配下のbuild.gradleのdependenciesに以下の定義を追加します。

contracts/build.gradle
dependencies {
//...
cordapp("net.corda.bn:business-networks-contracts:$corda_bn_extension_version")
//...
}
workflows/build.gradle
dependencies {
//...
cordapp("net.corda.bn:business-networks-workflows:$corda_bn_extension_version")
//...
}

 

ビジネスネットワーク作成および拡張

ビジネスネットワークの使い方を理解するために、以下のシナリオを行います。

  1. ビジネスネットワークを作成
  2. 別のNodeが「1」のネットワークへの参加を要求
  3. ビジネスネットワークのオーナーが参加を承認
  4. 新規メンバーを任意のグループに登録
  5. グループ内の役割を付与

 

  1. ビジネスネットワークを作成
    任意のNodeで「CreateBusinessNetworkFlow」を実行し、ビジネスネットワークを生成します。
    flow start CreateBusinessNetworkFlow
    この時、実行Nodeには以下のStateが配布されます。
    • MembershipState:Nodeごとに付与される会員権のようなState。
    • GroupState:とあるグループのメンバーのリストをまとめたState。性質としてはNetwork Mapに近い。
      mceclip1.png
      mceclip2.png

  2. 別のNodeが「1」のネットワークへの参加を要求
    別のNodeが「1」のビジネスネットワークへの参加を要求する場合、「RequestMembershipFlow」を実行して、ビジネスネットワークオーナーのNodeにリクエストを送信します。flowが正常すると、要求Nodeには「MembershipState」が配布されます。しかし、この時点ではstatusが「PENDING」になっていて、まだ完全に承認されていません。
    mceclip3.png
  3. ビジネスネットワークのオーナーが参加を承認
    参加NodeのうちビジネスネットワークオーナーのNodeが「ActivateMembershipFlow」を実行して参加要求したNodeのメンバーシップを有効化します。承認にはビジネスネットワークオーナーの署名が必要であり、ネットワーク内に複数のビジネスネットワークオーナーがいる場合は全員の署名が必要です。承認されると「2」で配布されたMembershipStateがACTIVEになり再配布されます。
    mceclip4.png
  4. 新規メンバーを任意のグループに登録
    新規メンバーはビジネスネットワークには登録されましたが、さらにグループに属する必要があります。ビジネスネットワークオーバーが「ModifyGroupFlow」を実行し、新規メンバーをグループに登録します。
  5. グループ内のロールを付与
    グループメンバーには「ModifyRolesFlow」を実行することで、任意の「ロール」を与えることができます。
    ※ロールとは、ビジネスネットワーク上のMembershipStateの属性の一つで、そのグループメンバーがグループ上に与えられた権限です。リスト形式で複数の権限を付与できます。ただ、これはあくまでフラグに過ぎないので、ロールに基づいたCorDappsの制御を行いたい場合は、Contractやflow上で実装が必要です。以下、ロールを用いた判定処理の実装例です。
    mceclip5.png

 

BNService

「BNService」とは、ビジネスネットワークに関した情報を取得するためのServiceです。具体的にはvaultQueryを用いて、Membership StateやGroup Stateなどからビジネスネットワークの情報を取得します。例として以下のユーティリティを用意しています。

ユーティリティ パラメーター 詳細
businessNetworkExists ネットワーク ID パラメーターで渡されたビジネスネットワークが存在していることを確認
businessNetworkGroupExists グループID パラメーターで渡されたグループが存在していることを確認
isBusinessNetworkMember ネットワーク ID, Node 指定したNodeがビジネスネットワークに所属しているか確認
getAllMembershipsWithStatus ネットワーク ID, Status ビジネスネットワーク内の指定したStatusと一致するNodeをList形式で出力
getMembershipChangeRequest linear ID パラメーターで渡されたlinear IDと一致するメンバーが変更要求状態であるか確認

 

おわりに

ビジネスネットワークの仕組みは単にビジネスネットワークを構築できるだけでなく、動的にメンバーの追加やロールの付与ができるためサービスのスケーラビリティに大きく役立ちます。

 

Created by: Kazuto Tateyama

Last edited by: Kazuto Tateyama

Updated: 2021/05/31

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています