(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-19
(45)【発行日】2023-06-27
(54)【発明の名称】送信制御方法、送信制御プログラム及び情報処理装置
(51)【国際特許分類】
H04L 9/32 20060101AFI20230620BHJP
【FI】
H04L9/32 200Z
(21)【出願番号】P 2021566688
(86)(22)【出願日】2019-12-26
(86)【国際出願番号】 JP2019051156
(87)【国際公開番号】W WO2021130968
(87)【国際公開日】2021-07-01
【審査請求日】2022-06-30
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】米倉 裕貴
(72)【発明者】
【氏名】竹内 琢磨
【審査官】行田 悦資
(56)【参考文献】
【文献】国際公開第2019/111513(WO,A1)
【文献】特開2017-033225(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 9/32
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンに含まれるブロックに格納されたトランザクションの送信制御方法において、
前記トランザクションの参照要求を受信すると、ブロックチェーンネットワークに含まれるノードに前記トランザクションの検証要求を送信し、
前記ノードによる検証結果を受信すると、前記検証結果を格納した検証ブロックを生成して、生成した前記検証ブロックを前記ブロックチェーンに接続するとともに、前記検証結果に基づき、前記トランザクションを前記参照要求の要求元に送信するか否かを制御する、
処理をコンピュータが実行することを特徴とする送信制御方法。
【請求項2】
前記制御する処理は、検証ブロックの前記ブロックチェーンへの接続時に、前記検証ブロックを前記トランザクションに対応付ける、
ことを特徴とする請求項1に記載の送信制御方法。
【請求項3】
前記送信する処理は、前記トランザクションの参照要求を受信すると、前記ブロックチェーンに前記トランザクションに対応付けられた検証ブロックが含まれるか否かを判定し、前記検証ブロックが含まれる場合、前記検証ブロックを生成することを抑制する、
ことを特徴とする請求項2に記載の送信制御方法。
【請求項4】
前記制御する処理は、前記ブロックチェーンに前記検証ブロックが含まれる場合、前記検証ブロックに格納された検証結果に基づき、前記トランザクションを前記参照要求の要求元に送信するか否かを制御する、
ことを特徴とする請求項3に記載の送信制御方法。
【請求項5】
生成した前記検証ブロックを前記ブロックチェーンネットワークに含まれるノードに送信する、
処理をコンピュータが実行することを特徴とする請求項1乃至4のいずれか一項に記載の送信制御方法。
【請求項6】
ブロックチェーンに含まれるブロックに格納されたトランザクションの送信制御方法をコンピュータに実行させる送信制御プログラムにおいて、
前記トランザクションの参照要求を受信すると、ブロックチェーンネットワークに含まれるノードに前記トランザクションの検証要求を送信し、
前記ノードによる検証結果を受信すると、前記検証結果を格納した検証ブロックを生成して、生成した前記検証ブロックを前記ブロックチェーンに接続するとともに、前記検証結果に基づき、前記トランザクションを前記参照要求の要求元に送信するか否かを制御する、
処理をコンピュータに実行させることを特徴とする送信制御プログラム。
【請求項7】
ブロックチェーンに含まれるブロックに格納されたトランザクションの送信を制御する情報処理装置において、
前記トランザクションの参照要求を受信すると、ブロックチェーンネットワークに含まれるノードに前記トランザクションの検証要求を送信する第1の送信部と、
前記ノードによる検証結果を受信すると、前記検証結果を格納した検証ブロックを生成して、生成した前記検証ブロックを前記ブロックチェーンに接続するとともに、前記検証結果に基づき、前記トランザクションを前記参照要求の要求元に送信するか否かを制御する制御部と、
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、送信制御方法、送信制御プログラム及び情報処理装置に関する。
【背景技術】
【0002】
ブロックチェーンは、1以上のトランザクション(AさんがBさんに100円を送金する等という取引内容)を格納したブロックを、チェーン状に数珠繋ぎにしたものであり、P2Pネットワーク(ブロックチェーンネットワーク)を構成する複数のノードによって分散管理される。なお、各ブロックには、1つ前のブロックのハッシュ値が含められることで、各ブロックの改竄が困難にされている。
【0003】
新たなトランザクションが格納されたブロックをチェーンに接続する(以下、斯かる処理を「Writeする」という。)際には、ブロックチェーンネットワークを構成する全ノードがトランザクションの検証を行う。当該検証は、主に、ブロック作成ノードの署名の検証、及びトランザクションのInput/Outputがノードの現在の状態と整合することの検証を行う処理であり、ノードが実行する処理の大部分を占めている。
【0004】
一方、ブロックチェーンに接続されているいずれかのブロック内のトランザクションを参照する(以下「Readする」という。)際には、新規ブロックの生成や当該トランザクションの検証は行われない。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、Writeのたびにブロックチェーンネットワークに参加する全ノードがトランザクションの検証を行う場合、例えば、以下のような問題が有る。
(1)ReadよりもWriteの頻度が多い(例えば、ブロックチェーンにデータを証跡として残すことが目的の)場合、に全ノードの処理効率が悪い(処理負荷が高い)。
(2)Readされることのないデータを検証する場合も有り、効率が悪い。
【0007】
そこで、一側面では、ブロックチェーンネットワークに含まれるノードの処理負荷を抑制することを目的とする。
【課題を解決するための手段】
【0008】
一つの案では、ブロックチェーンに含まれるブロックに格納されたトランザクションの送信制御方法は、前記トランザクションの参照要求を受信すると、ブロックチェーンネットワークに含まれるノードに前記トランザクションの検証要求を送信し、前記ノードによる検証結果を受信すると、前記検証結果を格納した検証ブロックを生成して、生成した前記検証ブロックを前記ブロックチェーンに接続するとともに、前記検証結果に基づき、前記トランザクションを前記参照要求の要求元に送信するか否かを制御する、処理をコンピュータが実行する。
【発明の効果】
【0009】
一態様によれば、ブロックチェーンネットワークに含まれるノードの処理負荷を抑制することができる。
【図面の簡単な説明】
【0010】
【
図1】本発明の実施の形態におけるトランザクション管理システム1の構成例を示す図である。
【
図2】本発明の実施の形態におけるトランザクション管理システム1を構成する各ノードのハードウェア構成例を示す図である。
【
図3】本発明の実施の形態におけるトランザクション管理システム1の機能構成例を示す図である。
【
図4】Write時においてトランザクション管理システム1が実行する処理手順の一例を説明するためのシーケンス図である。
【
図6】Read時においてトランザクション管理システム1が実行する処理手順の一例を説明するためのシーケンス図である。
【
図7】検証ブロックが接続されたブロックチェーンの一例を示す図である。
【発明を実施するための形態】
【0011】
以下、図面に基づいて本発明の実施の形態を説明する。
図1は、本発明の実施の形態におけるトランザクション管理システム1の構成例を示す図である。
図1において、複数のユーザ端末50は、インターネット等のネットワークを介してトランザクション管理システム1に接続される。
【0012】
ユーザ端末50は、送金等の各種の取引(以下「トランザクション」という。)の当事者が利用する端末である。例えば、PC(Personal Computer)、スマートフォン又はタブレット端末等がユーザ端末50として利用されてもよい。
【0013】
トランザクション管理システム1は、ユーザ端末50間で行われるトランザクションを管理するP2Pネットワーク(ブロックチェーンネットワーク)であり、分散型台帳技術が適用された複数のコンピュータ又は情報処理装置(ノード)の集合を含む。各ノードは、ブロックチェーンネットワークによって接続され、共通の台帳情報を分散して管理する記憶部(以下、「台帳」という。)を有する。台帳には、トランザクションの履歴を示すブロックチェーンが記録される。本実施の形態において、台帳に記録されているブロックチェーンに対して新たなブロックを接続(追加)する処理を「Write」といい、ブロックチェーンに接続されているいずれかのブロック内のトランザクションを参照する処理を「Read」という。
【0014】
本実施の形態において、トランザクション管理システム1は、Write時ではなく、Read時にトランザクションの検証を実施することにより、トランザクションの検証に費やすリソースを削減しつつ、効率よく確実にトランザクションの検証を可能とする。なお、斯かる効果を顕著に得るために、トランザクション管理システム1において、ブロックチェーンへのWriteの頻度の方がReadの頻度よりも相対的に多い方が好ましい。
【0015】
また、トランザクション管理システム1としては、ノードの参加が許可制であり、ブロックチェーンが分岐しないコンソーシアム型ブロックチェーン(例えば、Hyperledger Fabric等)が好適である。
【0016】
また、トランザクション管理システム1には、従来のブロックチェーンに関する以下の仕組みは備わっていることとする。
・単一又は複数のノードにスマートコントラクトを配備、共有、実行する仕組み。
・トランザクションの生成及び参照をスマートコントラクトを介して行う仕組み。
・途中から起動、再起動したノードが、最新ブロックまでのブロックチェーンを共有する仕組み。
・トランザクションを生成するノードが全ノードに当該トランザクションを含むブロックを配信する仕組み(ブロックの順序は何かしらの方法で保証されている。)。
【0017】
更に、トランザクション管理システム1は、以下の4つの機能を有する。
【0018】
(1)[トランザクション生成・書き込み機能]
スマートコントラクト等を用いてトランザクションを生成したノードが、ブロックを生成してブロックチェーンネットワークに参加する全ノードにブロックを配布すると、当該ブロックを受信した各ノードが、トランザクションの検証を行わずに当該ブロックをWriteする。また、トランザクションを参照するための情報(トランザクションID等のトランザクションを特定する情報)がノード内のデータベースに格納される。
【0019】
(2)[トランザクション参照機能]
スマートコントラクト等を用いてトランザクションを参照したノードが、自身を含む、ブロックチェーンネットワークに参加する全ノードに、当該トランザクションを配布して当該トランザクションの検証を要求すると、要求を受けた各ノードがトランザクションを検証して検証結果と検証に対する署名を返却する。また、トランザクションを参照したノードが収集した全ノードの検証結果と署名をブロック(以下「検証ブロック」という。)に格納し、検証ブロックを全ノードに配布する。なお、検証ブロックは、1つ前のブロックのハッシュ値、検証対象のトランザクションのハッシュ値等を格納する。
【0020】
(3)[依存トランザクションの参照・検証機能]
(1)のトランザクション生成・書き込み機能に関して、スマートコントラクト等を用いてトランザクションを生成した直後に、生成したトランザクションが依存する過去のトランザクションについて、(2)のトランザクション参照機能が実行される。
【0021】
(4)[トランザクション検証結果のキャッシュ機能]
(2)のトランザクション参照機能に関して、一度参照(Read)されたトランザクションの検証結果がノード内のデータベースにキャッシュされる。トランザクションが参照される際は、参照されたトランザクションの検証結果がノード内のデータベースから検索され、検証結果が存在しない場合にトランザクションの検証が行われる。
【0022】
すなわち、本実施の形態では、スマートコントラクトの実行により生成されたトランザクションのWrite時にはトランザクションの検証は行われずに当該トランザクションを格納したブロックが全ノードに配布される。但し、Write対象のトランザクションが過去のトランザクションに依存する場合(例えば、Write対象のトランザクションが過去の残高に依存する金銭取引のトランザクションである場合等)、過去のトランザクションのReadが実行される。また、トランザクションのRead時には、スマートコントラクトの実行によりトランザクションを参照したノードが全ノードに当該トランザクションの検証を要求し、検証結果と署名を収集し、当該検証結果及び署名を検証ブロックに格納して当該検証ブロックを全ノードに配布する。この際、検証結果はノード内のデータベースにキャッシュされる。したがって、トランザクションのRead時において、ノード内のデータベースに検証結果がキャッシュされている場合は、当該トランザクションの検証の要求以降は実行されず、検証ブロックの生成が抑制される。
【0023】
図2は、本発明の実施の形態におけるトランザクション管理システム1を構成する各ノードのハードウェア構成例を示す図である。
図2に示されるように、各ノードは、それぞれバスBで相互に接続されているドライブ装置101、補助記憶装置102、メモリ装置103、CPU104、及びインタフェース装置105等を有する。
【0024】
ノードでの処理を実現するプログラムは、記録媒体106によって提供される。プログラムを記録した記録媒体106がドライブ装置101にセットされると、プログラムが記録媒体106からドライブ装置101を介して補助記憶装置102にインストールされる。但し、プログラムのインストールは必ずしも記録媒体106より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置102は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0025】
メモリ装置103は、プログラムの起動指示があった場合に、補助記憶装置102からプログラムを読み出して格納する。CPU104は、メモリ装置103に格納されたプログラムに従ってノードに係る機能を実行する。インタフェース装置105は、ネットワークに接続するためのインタフェースとして用いられる。
【0026】
なお、記録媒体106の一例としては、CD-ROM、DVDディスク、又はUSBメモリ等の可搬型の記録媒体が挙げられる。また、補助記憶装置102の一例としては、HDD(Hard Disk Drive)又はフラッシュメモリ等が挙げられる。記録媒体106及び補助記憶装置102のいずれについても、コンピュータ読み取り可能な記録媒体に相当する。
【0027】
図3は、本発明の実施の形態におけるトランザクション管理システム1の機能構成例を示す図である。本実施の形態では、便宜上、トランザクション管理システム1が、コンソーシアム型ブロックチェーン基盤「Hyperledger Fabric」に基づく例を示す。但し、他のブロックチェーン基盤が採用されてもよい。
【0028】
図3において、トランザクション管理システム1は、ピア(Peer)20として機能する複数のノード、オーダラー(Orderer)30として機能する1つのノード、及びチェーンコード(Chaincode)40として機能する1つのノードを含む。ここで、ノードは、1又は複数のコンピュータである。但し、トランザクション管理システム1は、複数のオーダラー30及び複数のチェーンコード40を含んでもよい。
【0029】
オーダラー30は、ブロックを生成し、当該ブロックを各ピア20に配布するノードである。
図3において、オーダラー30は、Txブロック生成部31及び検証ブロック生成部32等を有する。これら各部は、オーダラー30にインストールされた1以上のプログラムが、オーダラー30のCPU104に実行させる処理により実現される。
【0030】
Txブロック生成部31は、トランザクションに関するデータ(以下「トランザクションデータ」という。)を含むブロック(以下「Txブロック」という。)を生成する。検証ブロック生成部32は、検証ブロックを生成する。
【0031】
ピア20は、ブロックチェーンを記録した共通の台帳情報を分散して管理する。ピア20は、ユーザ端末50からトランザクションのWrite要求又はRead要求を受け付け、これらの要求に応じた処理を制御する。
図3において、ピア20は、Tx送受信部21、依存Tx検索部22、Txブロック送受信部23、Tx検証部24、検証結果送受信部25及び検証ブロック送受信部26等を有する。これら各部は、ピア20にインストールされた1以上のプログラムが、ピア20のCPU104に実行させる処理により実現される。ピア20は、また、ステートDB27及び台帳28等の記憶部を利用する。これら各記憶部は、例えば、補助記憶装置102、又はピア20にネットワークを介して接続可能な記憶装置等を用いて実現可能である。
【0032】
Tx送受信部21は、ユーザ端末50からWrite要求又はRead要求を受信し、これらの要求に応じた処理を制御する。
【0033】
依存Tx検索部22は、Write要求の対象のトランザクションが依存する(当該トランザクションの依存先の)トランザクションをステートDB27から検索する。ステートDB27には、各トランザクションに関するデータが記憶される。本実施の形態において、ステートDB27は、各トランザクションの検証結果をキャッシュするための記憶部としても利用される。なお、WorldState等がステートDB27として利用されてもよい。
【0034】
Txブロック送受信部23は、Txブロック生成部31によって生成されるTxブロックをTxブロック生成部31から受信して当該Txブロックを台帳28に記録すると共に、当該Txブロックの確定の通知を、Write要求元のユーザ端末50へ送信する。台帳28は、ブロックチェーンを記憶する記憶部である。
【0035】
Tx検証部24は、Readの対象とされるトランザクション、及びWriteの対象とされるトランザクションが依存するトランザクションのうち、未検証のトランザクションについて検証を行う。
【0036】
検証結果送受信部25は、Tx検証部24からトランザクションの検証結果を受信し、当該検証結果を格納する検証ブロックの生成要求を検証ブロック生成部32へ送信する。
【0037】
検証ブロック送受信部26は、検証ブロック生成部32によって生成される検証ブロックを検証ブロック生成部32から受信して当該検証ブロックを台帳28に記録すると共に、当該検証ブロックの確定の通知を、Read要求元のユーザ端末50へ送信する。
【0038】
チェーンコード40は、スマートコントラクトが実装されたノードである。
図3において、チェーンコード40は、Tx生成部41及びTx参照部42等を有する。これら各部は、チェーンコード40にインストールされた1以上のプログラム(スマートコントラクト)が、チェーンコード40のCPU104に実行させる処理により実現される。
【0039】
Tx生成部41は、Writeの対象のトランザクションのトランザクションデータを生成する。Tx参照部42は、Read対象のトランザクションのトランザクションデータをステートDB27から検索する。
【0040】
なお、ユーザ端末50は、クライアント部51を有する。クライアント部51は、ユーザ端末50にインストールされた1以上のプログラム(例えば、トランザクション管理システム1に対応するアプリケーションプログラム)が、ユーザ端末50のCPUに実行させる処理により実現される。
【0041】
クライアント部51は、トランザクション管理システム1に対して各種の要求(リクエスト)を送信し、当該要求に対する応答(レスポンス)を受信する。
【0042】
なお、
図3では、ノードが、オーダラー30、チェーンコード40及びピア20に分類される例を示したが、採用するブロックチェーン基盤によって、全てのピア20又は一部のピア20が、オーダラー30又はチェーンコード40の機能を有してもよい。すなわち、オーダラー30、チェーンコード40及びピア20が区別されない構成が採用されてよい。
【0043】
以下、トランザクション管理システム1が実行する処理手順について説明する。
図4は、Write時においてトランザクション管理システム1が実行する処理手順の一例を説明するためのシーケンス図である。
【0044】
ステップS101において、ユーザ端末50のクライアント部51は、1つのピア20(以下「対象ピア20」という。)に対して、或るトランザクション(以下「対象トランザクション」という。)のWrite要求を送信する。当該Write要求には、対象トランザクションの内容を示すトランザクション情報(例えば、送金元、送金先及び送金額等)が含まれている。
【0045】
対象ピア20のTx送受信部21は、当該Write要求を受信すると、対象トランザクションのトランザクションデータ(以下「対象Tx」という。)の生成要求をチェーンコード40のTx生成部41へ送信する(S102)。当該生成要求には、対象トランザクションのトランザクション情報が含まれる。
【0046】
Tx生成部41は、当該生成要求に応じ、スマートコントラクト(Chaincode)を実行して対象Txを生成し(S103)、対象Txを含む応答を対象ピア20のTx送受信部21へ送信する(S104)。なお、対象Txには、対象トランザクションの識別子であるトランザクションID(以下「TxID」という。)、トランザクション情報、及び対象トランザクションの対象に関する識別子(以下、「キー」という。)等が含まれる。キーとなる値は、例えば、「Aさんの預金口座の口座番号」等である。
【0047】
Tx送受信部21は、Tx生成部41からの応答を受信すると、当該応答に含まれる対象Txを対象ピア20の依存Tx検索部22へ送信する(S105)。依存Tx検索部22は、対象Txを受信すると、ステートDB27を参照して、対象トランザクションが依存する他のトランザクションの有無を判定する(S106、S107)。
【0048】
図5は、ステートDB27の構成例を示す図である。
図5に示されるように、ステートDB27には、トランザクションごとに、ブロック番号、TxID、キー(バージョン)及び検証結果等が記憶される。
【0049】
ブロック番号は、トランザクションデータを格納するTxブロックの番号である。TxIDは、トランザクションの識別子である。キー(バージョン)は、トランザクションのキーと当該キーのバージョンである。
図5では、キーの値がアルファベット一文字で抽象化されて表現されている。キーのバージョンは、同一のキーに関するトランザクションが実行されるたびに値が増加する(
図5の例では1が加算される。)。検証結果は、トランザクションについて検証を行ったピア20ごとの検証結果である。
【0050】
ステップS106及びS107において、依存Tx検索部22は、対象Txのキーと同じキーを含むレコードを検索し、当該レコードがステートDB27に記憶されているか否かを判定する。該当するレコードが有る場合、依存Tx検索部22は、対象Txが依存するトランザクションのトランザクションデータ(以下、「依存Tx」という。)が有ると判定し、該当するレコードが無い場合、依存Tx検索部22は、依存Txが無いと判定する。なお、
図5の例によれば、既存のレコードに含まれるキーの値は「A」又は「B」である。したがって、対象Txのキーの値が「A」又は「B」であれば、依存Txが有ると判定され、当該キーの値が「A」及び「B」のいずれでもない場合は、依存Txが無いと判定される。
【0051】
依存Txが有ると判定した場合、依存Tx検索部22は、依存TxのRead要求を対象ピアのTx送受信部21に送信する(S111)。当該Read要求には、例えば、依存TxのTxIDが含まれる。続いて、依存TxのRead処理が実行される(S112)。当該Read処理は、Readの対象が依存Txであることを除き、後述される
図6の処理f1(ステップS211~S231)と同じである。なお、ステップS112において依存Txの検証に成功した場合(全てのピア20による検証結果がOKである場合)、ステップS101のWrite要求の送信元のクライアント部51へ対象Txが送信され、検証に失敗した場合(いずれか1以上のピア20による検証結果がNGである場合)、検証エラーを示す情報が当該クライアント部51へ送信される。
【0052】
一方、依存Txが無いと判定した場合、依存Tx検索部22は、ステップS103において生成された対象Txを対象ピア20のTx送受信部21へ送信する(S121)。Tx送受信部21は、ステップS101のWrite要求の送信元のクライアント部51へ対象Txを送信する(S122)。
【0053】
ステップS112において対象Txを受信した場合、又はステップS122に続いて、クライアント部51は、対象Txを格納するブロックの生成要求をオーダラー30のTxブロック生成部31へ送信する(S131)。当該生成要求には対象Txが含まれる。Txブロック生成部31は、当該生成要求を受信すると、当該生成要求に含まれる対象Txを格納するTxブロック(以下「対象Txブロック」という。)を生成し(S132)、対象Txブロックを各ピアのTxブロック送受信部23へ配布(送信)する(S133、S134)。対象Txブロックには、対象Txのブロック番号等が含まれる。
【0054】
対象ブロックのTxブロック送受信部23は、対象Txブロックを対象ピア20の台帳28に記録する(S135)。すなわち、当該台帳28に記録されているブロックチェーンに対象Txブロックが接続される。この際、対象Txの検証は実行されない。続いて、Txブロック送受信部23は、対象Txのトランザクションデータを含むレコードをステートDB27へ登録する(S136)。具体的には、対象Txブロックのブロック番号、対象TxのTxID、対象Txのキー及び当該キーのバージョンを含むレコードがステートDB27に登録される。ここで、キーのバージョンとしは、依存Txが有る場合には、最後の依存Txのバージョンに対して1が加算された値が登録され、依存Txが無い場合には0が登録される。なお、この時点では対象Txに関する検証結果は登録されない。Write時において対象Txの検証は行われないからである。
【0055】
続いて、Txブロック送受信部23は、対象Txブロックが確定されたこと(ブロックチェーンに接続されたこと)を示す通知をWrite要求の送信元のクライアント部51へ送信する(S137)。
【0056】
なお、対象ピア20以外の他の各ピア20のTxブロック送受信部23は、対象Txブロックの受信に応じ、ステップS135~S137と同じ処理を実行する(S140)。したがって、当該他の各ピア20からもクライアント部51に対して対象Txブロックが確定されたことを示す通知が送信される。
【0057】
図6は、Read時においてトランザクション管理システム1が実行する処理手順の一例を説明するためのシーケンス図である。
【0058】
ステップS201において、ユーザ端末50のクライアント部51は、1つのピア20(以下「対象ピア20」という。)に対して、或るトランザクション(以下「対象トランザクション」という。)のRead要求(参照要求)を送信する。当該Read要求には、対象トランザクションの特定情報(例えば、TxID等)が含まれる。
【0059】
対象ピア20のTx送受信部21は、当該Read要求を受信すると、当該特定情報を指定して、対象トランザクションのトランザクションデータの検索要求を対象ピア20のTx参照部42へ送信する(S202)。Tx参照部42は、当該検索要求を受信すると、スマートコントラクト(Chaincode)を実行して当該検索要求に指定されている特定情報に係るレコードをステートDB27から検索し(S203)、当該レコードに記録されているブロック番号、TxID及びキー(バージョン)(以下、これらを含むデータを「対象Tx」という。)と検証結果とを取得する(S204)。Tx参照部42は、取得した対象Tx及び検証結果を含む検索結果を対象ピア20のTx送受信部21へ送信する(S205)。
【0060】
続いて、Tx送受信部21は、当該検索結果を受信すると、当該検索結果に含まれている検証結果が空であるか否か(すなわち、検証結果の有無)を判定する。或いは、検証結果が空である場合には、検索結果には検証結果が含まれなくてもよい。この場合、文字通り検証結果の有無が判定されればよい。なお、対象Tx(対象トランザクション)についての検証結果の有無の判定は、対象トランザクションに対応付けられた検証ブロックの有無の判定と等価である。後述されるように、対象トランザクションの検証が実行されると、対象トランザクションに対応付けられて検証ブロックが台帳28に記録されるからである。換言すれば、ステップS203及びS204では、台帳28に記録されているブロックチェーンに当該検証ブロックが含まれるか否かが判定されてもよい。但し、ステートDB27を利用することで、斯かる判定を高速化することができる。
【0061】
検証結果が無い場合(すなわち、対象トランザクションに対応付けられた検証ブロックが台帳28に含まれない場合)、処理f1(ステップS211~S231)が実行される。
【0062】
ステップS211において、Tx送受信部21は、対象Txの検証要求を対象ピア20の検証結果送受信部25に送信する。当該検証要求には対象Txが含まれる。検証結果送受信部25は、当該検証要求に応じ、対象ピア20を含む全てのピア20のTx検証部24へ当該検証要求を送信する(S212、S213)。
【0063】
当該検証要求を受信した各ピア20のTx検証部24は、予め決められたアルゴリズムに従って対象Txを検証し、検証結果(検証の成否(対象Txの正否)を示す情報)である「OK」又は「NG」と検証結果に対する署名とを、対象ピア20の検証結果送受信部25へ送信する(S214、S215)。
【0064】
対象ピア20の検証結果送受信部25は、全ピア20のTx検証部24からの検証結果及び署名を受信(収集)すると、検証ブロックの生成要求をオーダラー30の検証ブロック生成部32へ送信する(S216)。当該生成要求には、全ピア20の検証結果及び署名が含まれる。
【0065】
検証ブロック生成部32は、当該生成要求に応じ、当該生成要求に含まれる全ての検証結果及び署名を含む検証ブロックを生成する(S217)。この際、検証ブロック生成部32は、検証ブロックのブロックヘッダに、preHash(=ブロックチェーンにおいて1つ前のブロックのハッシュ値)及びpreTx(=対象TxのTxID)を格納する。すなわち、検証ブロック生成部32は、検証ブロックのブロックヘッダに対象TxのTxIDを含めることで、ブロックチェーンへの検証ブロックの接続時に(接続に伴い)、検証ブロックを対象トランザクションに対応付ける。続いて、検証ブロック生成部32は、対象ピア20を含む全てのピア20の検証ブロック送受信部26へ検証ブロックを送信(配布)する(S218、S219)。
【0066】
対象ピア20の検証ブロック送受信部26は、検証ブロックを受信すると、検証ブロックを対象ピア20の台帳28に記録する(S220)。すなわち、検証ブロック送受信部26は、台帳28に記録されているブロックチェーンに検証ブロックを接続する。
【0067】
図7は、検証ブロックが接続されたブロックチェーンの一例を示す図である。
図7には、台帳28に記録されているブロックb0~ブロックb5を含むブロックチェーンが示されている。このうち、ブロックb0、b1、b2及びb4はTxブロックであり、ブロックb3及びb5は検証ブロックである。すなわち、ブロックb3は、ブロックb1に格納されたトランザクションデータTx1に対応する検証ブロックである。ブロックb5は、ブロックb1に格納されたトランザクションデータTx2に対応する検証ブロックである。例えば、対象TxがTx2である場合、ステップS220では、ブロックb5がブロックチェーンに接続される。
【0068】
続いて、検証ブロック送受信部26は、対象ピア20のステートDB27における対象Txに対応するレコード(対象TxのTxIDを含むレコード)の検証結果に、検証ブロックに含まれている検証結果(すなわち、全ピア20による対象Txの検証結果)を登録する(S221)。その結果、対象トランザクションの検証結果がステートDB27にキャッシュされる。続いて、検証ブロック送受信部26は、検証ブロックと、検証ブロックの確定の通知とを対象ピア20のTx送受信部21へ送信する(S222)。
【0069】
なお、対象ピア20以外の他の各ピア20の検証ブロック送受信部26は、検証ブロックの受信に応じ、ステップS220及びS221と同じ処理を実行する(S230)。続いて、当該各ピア20の検証ブロック送受信部26は、検証ブロックの確定の通知を対象ピア20のTx送受信部21へ送信する(S231)。なお、ステップS231では検証ブロックは送信されなくてよい。
【0070】
対象ピア20のTx送受信部21は、全ピア20の検証ブロック送受信部26から検証ブロックの確定の通知を受信すると、対象ピア20の検証ブロック送受信部26から受信した検証ブロックに含まれる、全ピア20の検証結果を処理対象としてステップS241を実行する。
【0071】
一方、ステップS205におけるTx参照部42からの検索結果に検証結果が含まれている場合(すなわち、対象トランザクションの検証ブロックが台帳28に含まれる場合)、対象ピア20のTx送受信部21は、ステップS211を実行しない。その結果、処理f1(ステップS211~S231)は実行されずに、当該検証結果が処理対象とされてステップS241が実行される。すなわち、対象トランザクションの検証ブロックが台帳28に含まれる場合、Tx送受信部21は、対象トランザクションの検証ブロックを生成することを抑制する。
【0072】
ステップS241において、対象ピア20のTx送受信部21は、処理対象の検索結果に基づき、対象TxをRead要求の送信元(要求元)に送信するか否かを制御する。具体的には、当該検索結果が、全てのピア20の検証結果がOKであることを示す場合、Tx送受信部21は、対象TxをRead要求の送信元のクライアント部51へ送信する(S241)。一方、当該検索結果が、1以上のピア20の検証結果がNGであること(対象Txが不正であること)を示す場合、Tx送受信部21は、検証エラーのメッセージをクライアント部51へ送信する(S241)。
【0073】
上述したように、本実施の形態によれば、トランザクションの登録時(当該トランザクションを格納したブロックのブロックチェーンへの接続時)ではなく、トランザクションの参照時に当該トランザクションが検証される。したがって、検証対象のトランザクションを、参照対象のトランザクションに減らすことができ、これにより、ブロックチェーンネットワークに含まれるノードの処理負荷を抑制することができる。
【0074】
例えば、ブロックチェーン基盤「Hyperledger Fabric」の場合、検証にかかる時間はWriteにかかる時間の約20%なので、Writeにかかる処理時間について約20%の削減を期待することができる。
【0075】
また、例えば、30分に1度のP2P電力取引の場合、おおよそWrite(電力メータの値記録)は、1トランザクション/min、Read(電力取引時の電力量参照)は、1トランザクション/30minである。単純計算で全データ量の1/30をReadすることになるので、全体として検証に費やすリソース(時間、データ量)について約97%の削減を期待することができる。
【0076】
また、本実施の形態によれば、トランザクションをWriteする前段階(ノードがスマートコントラクトを実行した直後)に、当該トランザクションに関係する他のトランザクション(依存トランザクション)のReadが実行されるため、Writeしようとするトランザクションが過去のトランザクションに依存している場合でも、過去のトランザクションが正当であることを保証することができる。
【0077】
また、本実施の形態によれば、1度Readされたトランザクションの検証結果がノード内のデータベース(ステートDB27)にキャッシュされ、過去に検証されたトランザクションについてReadが要求された際には、当該キャッシュに基づいて検証が抑制される。したがって、同一のトランザクションについて検証が重複して行われることを回避することができる。
【0078】
以上、本発明の実施の形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【0079】
1 トランザクション管理システム
20 ピア
21 Tx送受信部
22 依存Tx検索部
23 Txブロック送受信部
24 Tx検証部
25 検証結果送受信部
26 検証ブロック送受信部
27 ステートDB
28 台帳
30 オーダラー
31 Txブロック生成部
32 検証ブロック生成部
40 チェーンコード
41 Tx生成部
42 Tx参照部
50 ユーザ端末
51 クライアント部
101 ドライブ装置
102 補助記憶装置
103 メモリ装置
104 CPU
105 インタフェース装置
106 記録媒体
B バス