Logo
    Logo

    Search

    R3-Solana連携

    Blockchainトレンド

    Corda活用事例

    Corda技術

    おすすめ記事

    記事を探す

    その他

    お客様サポート

    SBI R3 Japan HP

    お問い合わせ

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

    公開日
    Mar 19, 2021
    カテゴリ
    Corda技術を知る
    タグ
    🛠️Node運用
    筆者
    立山
    image
    icon
    この記事で学べること

    Corda Enterpriseが提供する署名数カウントツールについて理解できる。

    icon
    目次
    • Metering Collection Tool とは?
    • 導入
    • 環境要件 & 前提
    • デプロイ
    • 起動
    • デモ実行
    • PartyAの署名数確認
    • PartyAにてState発行 & 署名数確認
    • PartyAからPartyBにState移転 & 署名数確認
    • PartyBにてState償却 & 署名数確認
    • その他
    • Corda Enterprise4.5以降の改善点
    • コンフィグの設定
    • コンフィグのファイル名
    • コンフィグの配置
    • コンフィグの反映
    • コンフィグのパラメータ
    • 複数ノードからの署名件数収集
    • MultiAggregatedCollectionFlow
    • MultiFilteredCollectionFlow
    • 結論

    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に近いです)

    image

    起動

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

    # java -jar corda-4.3.3.jar

    デモ実行

    PartyAの署名数確認

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

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

    image

    まだ、取引を行っていないため、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

    image

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

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

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

    PartyAで実行

    # flow start com.template.flows.TransferSampleFlow$InitiatorFlow stateLinearId : 直前に発行したStateのLinearID, holder : "PartyB"# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1

    image

    PartyBで実行# start MeteringCollectionFlow startDate: 2020-06-09, daysToCollect: 7, page: 1

    image

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

    image

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

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

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

    PartyBで実行

    # flow start com.template.flows.SettleSampleFlow$InitiatorFlow stateLinearId : 償却するStateのLinearID, holder : "PartyB"

    image

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

    image

    Notaryで実行

    # start NotaryCollectionFlow startDate: 2020-06-09, daysToCollect: 7

    image

    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

    image

    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

    署名収集を許可するノードを設定します。設定には必ず自ノードも含めます。

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

    image

    「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」により取得できます。

    image

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

    image

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

    MultiAggregatedCollectionFlow

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

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

    image

    MultiFilteredCollectionFlow

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

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

    image
    image

    結論

    複数ノードの署名を簡単に集められるようになったため、Business Network Operatorにとっては

    大変便利な機能だと思います。直感的な出力になった部分も、嬉しい改善点です。日々の署名件数

    カウントに是非ご活用ください。

    📬
    最後までお読みいただきありがとうございます。当社へのご質問・ご要望がございましたら、📪SBI R3 Japan お問い合わせフォーム📪よりお気軽にお問い合わせください!

    <ご質問・ご要望の例>

    • Corda Portalの記事について質問したい
    • ブロックチェーンを活用した新規事業を相談したい
    • 企業でのブロックチェーン活用方法を教えて欲しい 等々
    📢
    また、厳選されたCordaに関する最新情報をお伝えるするメールマガジンやX、当社主催のイベントコミュニティを運営しております。ぜひご登録ください。
    • Cordaメールマガジンに登録
    • X(旧Twitter)をフォロー
    • 弊社イベントコミュニティ(Connpass)に参加
    ✍️
    Written by 立山 和人 (Kazuto Tateyama)
    image

    SBI R3 Japan エンジニアリング部所属

    ソリューションアーキテクト/PoC支援

    This is the way. みんなでキャズムを超えていきましょう!

    →筆者の記事一覧

    Logo

    © copyright SBI R3 Japan 2025

    GitHubYouTubeXFacebookLinkedIn