メータリングコレクションツール(Metering Collection Tool)

 

Metering Collection Tool とは?

「Metering Collection Tool」は、Corda Enterpriseが提供する署名数カウントツールです。期間指定やFlow指定でより詳細な情報を取得することができます。また、「Metering Collection Tool」をNotaryで実行するとNotaryの署名件数も出力します。
本稿では、テスト環境のノードおよびNotaryに「Metering Collection Tool」のデプロイから署名件数の表示のデモを行います。

 

導入

環境要件 & 前提

本稿のデモで使用するcorda.jarおよび corda-tools-metering-collector .jarは以下の通りです。
corda-4.3.3.jar
corda-tools-metering-collector-4.3.3.jar

 また、本稿で使用するSampleFlowの一覧は以下の通りです。

Flow Description 必要署名
IssueSampleFlow Stateを発行する 実行ノード
TransferSampleFlow Stateをあるノードからあるノードへ移転する 移転元ノー ド + 移転先ノード( + Notary )
SettleSampleFlow 任意のLinear IDのStateを償却する 実行ノード ( + Notary )

 

デプロイ

「Metering Collection Tool」は、jarファイル「 corda-tools-metering-collector-[version].jar 」を各ノードのcordappsディレクトリ配下に格納します。(ツールですが、性質としては他のFlowやContractに近いです)

例:ノード「PartyA」のcordappディレクトリ配下に格納した例
2020/06/09 15:54:57 root@ubuntu-01 : /home/corda/Upgrade/PartyA
# pwd
/home/corda/Upgrade/PartyA
2020/06/09 15:55:01 root@ubuntu-01 : /home/corda/Upgrade/PartyA
# ls -l
total 79238
drwxrwxrwx 1 root root        0 Jun  9 15:26 additional-node-infos
drwxrwxrwx 1 root root        0 Jan 24 12:20 artemis
drwxrwxrwx 1 root root        0 Jan 24 12:20 brokers
drwxrwxrwx 1 root root        0 Jun  9 15:24 certificates
-rwxr-xr-x 1 root root 80811783 May 18 20:34 corda-4.3.3.jar
drwxrwxrwx 1 root root        0 Jun  9 15:16 cordapps
drwxrwxrwx 1 root root     4096 Jun  9 15:25 logs
-rwxr-xr-x 1 root root     3926 Apr 14 12:47 my-config-file.xml
-rwxr-xr-x 1 root root     6030 Jun  9 15:25 network-parameters
-rwxr-xr-x 1 root root      668 Apr 24 12:34 node.conf
-rwxr-xr-x 1 root root     5570 Jun  9 15:26 nodeInfo-F8F4874D91506034E6298B4EAA3321AE8FD8C79B34492D8BD7479148F385251D
-rwxr-xr-x 1 root root   294912 Jun  9 15:32 persistence.mv.db
-rwxr-xr-x 1 root root    10518 Jun  9 15:25 persistence.trace.db
-rwxr-xr-x 1 root root        4 Jun  9 15:25 process-id
drwxrwxrwx 1 root root        0 Jan 10 19:35 shell-commands
drwxrwxrwx 1 root root        0 Jan 24 12:20 ssh
2020/06/09 15:55:03 root@ubuntu-01 : /home/corda/Upgrade/PartyA
# ls -l ./cordapps/
total 154
drwxrwxrwx 1 root root      0 Jan 10 19:35 config
-rwxr-xr-x 1 root root   9182 Jun  9 09:54 contracts-0.1.jar
-rwxr-xr-x 1 root root 116508 May 18 20:36 corda-tools-metering-collector-4.3.3.jar → corda-tools-metering-collectorのjar
-rwxr-xr-x 1 root root  30906 Jun  9 09:54 workflows-0.1.jar
2020/06/09 15:55:08 root@ubuntu-01 : /home/corda/Upgrade/PartyA

 

起動

    通常のノード起動と同様corda.jarを実行します。

# java -jar corda-4.3.3.jar

 

デモ実行

PartyAの署名数確認

 PartyAノード起動直後に以下のコマンドを実行します。

# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1
01_PartyA__0.png

まだ、取引を行っていないため、totalCountには0が表示されます。

PartyAにてState発行 & 署名数確認

PartyAにてStateを発行し、その後PartyAの署名総件数を確認します。

# flow start com.template.flows.IssueSampleFlow$InitiatorFlow holder : "PartyA", price : 100
# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1
03_PartyA__1.png

totalCountが1にカウントアップしていることが確認できます。なお、MeteringCollectionFlowはデータベースの書き込み回数を抑えるため取引ごとに署名数をカウントアップせず、一定時間に書き込まれた署名を集約してデータベースに書き込みます。そのため実行タイミングによっては、署名数の結果が反映されていない場合があります。その時は数秒~数十秒程度、時間をおいてから再実行してください。

PartyAからPartyBにState移転 & 署名数確認

PartyAからPartyBにStateを発行し、その後PartyAPartyBとNotrayの署名総件数を確認します。

PartyAで実行
# flow start com.template.flows.TransferSampleFlow$InitiatorFlow stateLinearId : 直前に発行したStateのLinearID, holder : "PartyB"
# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1
03_PartyA__2.png
PartyBで実行
start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1
04_PartyB__1.png
Notaryで実行
start NotaryCollectionFlow startDate: 2020-06-09, daysToCollect: 7
05_Notary__1.png

 各ノードのtotalCountがそれぞれ1カウントアップしていることが確認できました。

PartyBにてState償却 & 署名数確認

 PartyBにてStateを償却し、その後PartyBとNotaryの署名総件数を確認します。

PartyBで実行
# flow start com.template.flows.SettleSampleFlow$InitiatorFlow stateLinearId : 償却するStateのLinearID, holder : "PartyB"
06_PartyB__.png

# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1
06_PartyB__2.png

Notaryで実行
# start NotaryCollectionFlow startDate: 2020-06-09, daysToCollect: 7
07_Notary__2.png

PartyBとNotaryのtotalCountがそれぞれ1カウントアップしていることが確認できました。

 

その他

 引数 filterByを使用することで CorDappsやhashを条件にカウンタを抽出することができます。
具体的にはfilterByに抽出する条件、続くfilterに値を設定し抽出条件を生成します。

filterby filter 備考
CORDAPP_NAMES CorDappの名前を指定します。

CorDappの名前を指定します。
「run nodeDiagnosticInfo 」で表示された「 shortName 」の値を入力設定します。
(あくまでFlowが対象のようです。ContractのCorDappsを指定してもカウントは表示されませんでした。)

CORDAPP_HASHES CorDappのHash値を指定します。  CorDappの名前を指定します。
「run nodeDiagnosticInfo 」で表示された「 jarHash 」の値を入力設定します。

 
以下、filterByにCORDAPP_NAMESの設定例です。

# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, filterBy: CORDAPP_NAMES, filter: ["Template Flows"], page: 1
08_CORAPPS_NAMES.png

 

Corda Enterprise4.5で何が変わったか

Corda Enterprise4.5にてMetering Collection Toolには、以下のような機能追加がありました。
・署名収集要求を行ったノード(以下:自ノード)と自ノードからの署名収集を許可したノード
   (以下:相手ノード)の署名数を収集できるようになりました。
   なお、相手ノードからの収集には、自ノードと相手ノードでコンフィグを設定が必要です。
   (「Configuration fileの設定」の項を参照)
・シェル実行時の出力形式が、直感的な表示に改善
・RPCを介したデータ取得のためのAPIの提供

 本稿では、相手ノードに自ノードの署名収集を許可するためのコンフィグの設定から、
複数ノードからの署名件数のデモ(MultiAggregatedCollectionFlow、MultiFilteredCollectionFlow)を
行います。

※デプロイの方法や基本的な使用方法(MeteringCollectionFlowやNotaryCollectionFlow)に関しては、
以前のバージョンと変わりません。

 

コンフィグの設定

Metering Collection Tool4.5は、複数の相手ノードから署名を収集することが可能です。
この機能を使用するには自ノードと相手ノードでコンフィグを設定する必要があります。

コンフィグのファイル名

Metering Collection Toolのコンフィグファイル名には命名規約があり、
「Metering Collection Toolのjarファイル名.conf」と設定します。本稿では「corda-tools-metering-collector-4.5.jar」を使用しているため、ファイル名は「corda-tools-metering-collector-4.5.conf」に
なります。

コンフィグの配置 

コンフィグファイルの配置はcordappsフォルダ配下の「config」ディレクトリに設定します。

cordapps/
corda-tools-metering-collector-4.5.jar
config/
corda-tools-metering-collector-4.5.conf

コンフィグの反映

コンフィグはCordaノード起動と同時にアタッチされます。よって、ノード起動中にコンフィグを
修正した場合は、ノードの再起動が必要です。

コンフィグのパラメータ

コンフィグに設定するパラメータは、大きく「network_collectors」と「cordapp_collectors」に
分類することができます。

・network_collectors
 署名収集を許可するノードを設定します。設定には必ず自ノードも含めます。
 以下、コンフィグファイルの例です。

"access_configuration" : {
"network_collectors" : ["O=Node01,L=Tokyo,C=JP", "O=Node02,L=Tokyo,C=JP"]
}

 「network_collectors」にノード設定すると、全ての署名収集を許可します。
 特定のFlowに関して署名収集を許可したい場合は、後述の「cordapp_collectors」を設定します。

・cordapp_collectors
   特定のFlowに関しての署名収集を許可したい場合に設定します。以下の条件に分類できます。
 by_name:収集を許可するCorDappsの名前を設定します。
 by_hash:収集を許可するCorDappsのHash値を設定します。
    by_signature:収集を許可するCorDappsのCorda.jarの署名鍵のハッシュ値を設定します。

  「by_name」や「by_hash」、「by_signature」に設定する値は、FlowのCorDappsのjarファイルの
   情報を設定します。これらは「RetrieveCordappDataFlow」により取得できます。

11_CorDapps____.png

 以下、コンフィグファイルの例です。

"cordapp_collectors" : {
"by_name" : {
"Template Flows" : ["O=Node01,L=Tokyo,C=JP", "O=Node02,L=Tokyo,C=JP"]
},
"by_hash" : {
"5A23CBC404F08C8834638008B4EE8B9C6F9021BFD5C23F31C7404355AB5133BE" :
["O=Node01,L=Tokyo,C=JP", "O=Node02,L=Tokyo,C=JP"]
},
"by_signature" : {
"25F95E8FD52BD8F9574B4B0E86A49B19CB0725D7227D9E136AED0FCB266C886F" :
["O=Node01,L=Tokyo,C=JP", "O=Node02,L=Tokyo,C=JP"]
}
}
}

 

複数ノードからの署名件数収集

MultiAggregatedCollectionFlow

    ネットワーク上の複数のノードから集約された署名件数を 収集します。

start com.r3.corda.metering.MultiAggregatedCollectionFlow period: {value: 1mon}, destinations: [node01, node02]
mceclip0.png

 

MultiFilteredCollectionFlow

 ネットワーク上の複数のノードから署名件数を 収集します。「MultiAggregatedCollectionFlow」との違いは、こちらは出力する署名を条件によってフィルタリングできる点です。また出力される情報も細分化されています。

flow start com.r3.corda.metering.MultiFilteredCollectionFlow period: {value: 1mon}, destinations: [node01, node02], filter: {filterBy: CORDAPP_HASHES, values: [5A23CBC404F08C8834638008B4EE8B9C6F9021BFD5C23F31C7404355AB5133BE]}, txTypes: [NORMAL]
mceclip1.png

mceclip3.png

 

結論

 複数ノードの署名を簡単に集められるようになったため、Business Network Operatorにとっては
大変便利な機能だと思います。直感的な出力になった部分も、嬉しい改善点です。日々の署名件数
カウントに是非ご活用ください。

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