WO2024004792A1 - ブロックチェーンシステム、ノード、及びプログラム - Google Patents

ブロックチェーンシステム、ノード、及びプログラム Download PDF

Info

Publication number
WO2024004792A1
WO2024004792A1 PCT/JP2023/023012 JP2023023012W WO2024004792A1 WO 2024004792 A1 WO2024004792 A1 WO 2024004792A1 JP 2023023012 W JP2023023012 W JP 2023023012W WO 2024004792 A1 WO2024004792 A1 WO 2024004792A1
Authority
WO
WIPO (PCT)
Prior art keywords
ledger
group
node
updated
nodes
Prior art date
Application number
PCT/JP2023/023012
Other languages
English (en)
French (fr)
Inventor
良浩 ▲高▼橋
聡子 石原
亥勝 鄭
將 藤澤
裕之 山下
Original Assignee
京セラ株式会社
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 京セラ株式会社 filed Critical 京セラ株式会社
Publication of WO2024004792A1 publication Critical patent/WO2024004792A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて、最下位階層と異なる第1階層の第1グループに属するノードは、前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理し、前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う。当該ノードは、前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する台帳情報を前記第1台帳に含めるように前記第1台帳を更新する。

Description

ブロックチェーンシステム、ノード、及びプログラム
 本開示は、ブロックチェーンシステム、ノード、及びプログラムに関する。
 近年、ブロックチェーン技術が注目されている。ブロックチェーン技術では、複数のノードによって自律分散型のネットワーク、具体的には、P2P(Peer to Peer)ネットワークが形成されるため、システムダウンが起きないというメリットがある。
 ブロックチェーン技術は、P2Pネットワーク内の取引(トランザクション)の履歴を各ノードが台帳として管理する仕組みを有する。このような仕組みは分散型台帳技術とも称される。1つのノードでトランザクションが発生した場合、参加している全てのノードで計算(検算)処理を行う。これにより、参加しているノードの中に不正がある場合及び/又は正常に動作しなかった場合でも、改ざんが非常に困難な正しい取引の履歴が残る仕組みが提供される。
 ここで、特許文献1には、各ノードが保持する取引履歴(台帳)の肥大化によるノードの容量逼迫の問題を解決するために、P2Pネットワークを階層化された複数のネットワークに分割し、ネットワークごとに独立して取引データを管理するシステムが記載されている。このシステムでは、取引相手が自ネットワークに存在する場合、当該自ネットワーク内でのみ取引データを共有して記憶する。
特開2018-67108号公報
 第1の態様に係るブロックチェーンシステムは、階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムである。最下位階層と異なる第1階層の第1グループに属するノードは、前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理し、前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う。当該ノードは、前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する台帳情報を前記第1台帳に含めるように前記第1台帳を更新する。
 第2の態様に係るノードは、階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて最下位階層と異なる第1階層の第1グループに属するノードである。当該ノードは、前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理する処理と、前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う処理と、前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報を前記第1台帳に含めるように前記第1台帳を更新する処理と、を実行するプロセッサを備える。
 第3の態様に係るプログラムは、階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて最下位階層と異なる第1階層の第1グループに属するノードに、前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理する処理と、前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う処理と、前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報を前記第1台帳に含めるように前記第1台帳を更新する処理と、を実行させる。 
一般的なブロックチェーンシステムにおけるネットワーク構成例を示す図である。 実施形態に係る各ノードが管理する台帳の構成例を示す図である。 実施形態に係る台帳に新たなブロックを追加する際(すなわち、台帳を更新する際)の動作例を示す図である。 実施形態に係る台帳に新たなブロックを追加する際の動作例を示す図である。 実施形態に係る各ノードの構成例を示す図である。 実施形態に係るネットワーク構成例を示す図である。 実施形態に係る台帳の管理方法を示す図である。 実施形態に係る台帳の管理方法を示す図である。 実施形態に係る階層構造ネットワークを一般的なネットワーク構成と比較した場合の計算量の削減効果を説明するための図である。 実施形態に係る上位階層台帳と下位階層台帳とのリンクについて説明するための図である。 実施形態に係るグループ(A)が形成された後、新たにグループ(A)の下位にグループ(B)が形成される場合における動作例を示す図である。 実施形態に係るグループ(A)が形成された後、新たにグループ(A)の下位にグループ(B)が形成され、さらにその後、新たにグループ(A)の下位にグループ(C)が形成される場合における動作例を示す図である。 実施形態に係るグループ(A)が形成された後、新たにグループ(A)の下位にグループ(B)が形成され、さらにその後、新たにグループ(A)の下位にグループ(C)が形成される場合における動作例を示す図である。 実施形態に係る下位階層グループのグループ分けについて説明するための図である。 実施形態に係る下位階層グループのグループ分けについて説明するための図である。 実施形態に係るグループ内の優先順位について説明するための図である。 実施形態に係るグループ内の優先順位について説明するための図である。 実施形態に係る台帳に格納するノードパラメータの一例について説明するための図である。 実施形態に係る台帳のロックについて説明するための図である。 実施形態に係る台帳更新のロック動作を説明するための図である。 実施形態に係る動作の一例を示す図である。 実施形態に係るロック期間の設定方法について説明するための図である。 実施形態に係るロック期間の設定方法について説明するための図である。 実施形態に係る台帳ロックに関する動作の具体例1を示す図である。 実施形態に係る台帳ロックに関する動作の具体例2を示す図である。 実施形態に係る階層構造ネットワークへのノード追加時のフロー例を示す図である。 実施形態に係る階層構造ネットワークにおける親ノードローテーションのフロー例を示す図である。 実施形態に係る階層構造ネットワークにおける下位階層へのノード追加(下位階層グループ追加)時のフロー例を示す図である。 実施形態に係る階層構造ネットワークにおけるノード削除時のフロー例を示す図である。 実施形態に係る台帳ロックのメイン処理の一例を示す図である。 実施形態に係るトランザクションデータ処理の一例を示す図である。 実施形態に係るメモリ余裕のある他ノードを探す処理の一例を示す図である。 実施形態に係るメモリ余裕のあるノード側の処理の一例を示す図である。 実施形態に係るメモリ余裕のある他ノードが自グループ内に存在しない場合の処理の一例を示す図である。 実施形態に係る複数の子グループの台帳(子台帳)が更新された場合の処理の一例を示す図である。 実施形態に係る子グループの台帳が複数回更新された場合の処理の一例を示す図である。 実施形態に係る子台帳更新失敗時の処理の一例を示す図である。 実施形態に係る子台帳更新処理の一例を示す図である。
 特許文献1に記載の技術のように、P2Pネットワーク内のノードをグループ化し、グループごとに個別に台帳を管理することで、台帳の更新頻度及び肥大化を抑制できると考えられる。しかしながら、このような手法では、各グループの台帳の内容が他グループの台帳とリンクしていないため、ブロックチェーン技術における信頼性が低下し得るという問題がある。
 そこで、本開示は、ブロックチェーン技術を適用する場合において台帳の更新頻度及び肥大化を抑制しつつ信頼性の低下を抑制可能とすることを目的とする。
 図面を参照しながら実施形態について説明する。図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
 (ブロックチェーン技術の概要)
 まず、図1乃至図4を参照して、一般的なブロックチェーン技術について説明する。
 図1は、一般的なブロックチェーンシステムにおけるネットワーク構成例を示す図である。図1において、ノード間を結ぶ線はノード間の通信接続を表している。
 ブロックチェーン技術では、複数のノード100によって自律分散型のネットワーク、具体的には、P2Pネットワークが形成される。各ノード100は、相互に通信可能に接続されている。ノード100間の通信は、公衆通信網及び/又はローカル通信網を介して行われてもよい。なお、図1において、ノード100a乃至100eの合計5つのノードを例示しているが、ノード100の数は5つに限定されない。各ノード100は、少なくとも通信機能及び演算処理機能を有する機器、例えば、PC(Personal Computer)である。一般的なブロックチェーン技術では、各ノード100が十分な性能(スペック)を有していることが前提となっている。
 各ノード100は、ネットワーク内の取引(トランザクション)の履歴を台帳として管理する。1つのノード100(例えば、ノード100a)でトランザクションが発生した場合、参加している全てのノード(ノード100a乃至ノード100e)が計算(検算)処理を行う。これにより、参加しているノード100の中に不正がある場合及び/又は正常に動作しなかった場合でも、改ざんが非常に困難な正しい取引の履歴が残る仕組みが提供される。
 なお、トランザクションは、例えば、金銭又はポイント等の送金又は決済等、或いは、通信の発生等であってもよい。その場合、台帳のブロックに格納されるトランザクションデータは、送金又は決済のデータであってもよい。或いは、当該トランザクションデータは、通信のデータであってもよい。トランザクションは、ネットワークにおけるノードの参加又は削除等であってもよい。その場合、台帳のブロックに格納されるトランザクションデータは、ノード100のデータ(パラメータ)であってもよい。トランザクションは、台帳の更新であってもよい。台帳のブロックに格納されるトランザクションデータがノード100のデータ(パラメータ)であってもよい。
 実施形態では、台帳のブロックに格納されるトランザクションデータがノード100のデータ(パラメータ)を含む一例を主として想定する。このようなノード100のデータ(パラメータ)を台帳で管理することにより、ネットワーク内のノード100が真正な機器であることを保証することが容易になる。
 図2は、各ノード100が管理する台帳の構成例を示す図である。
 各ノード100は、ネットワーク内で発生したトランザクションの記録をブロックに格納する。1つのブロックは、ヘッダ部分であるブロックヘッダと、少なくとも1つのトランザクションのデータを格納するトランザクションデータ部分とを有する。ブロックヘッダには、1つ前に生成されたブロックから計算されたハッシュ値等が格納される。例えば、ブロックn+1のブロックヘッダには、ブロックnから計算されたハッシュ値等が格納される。このように、台帳は、生成された各ブロックが時系列に沿ってチェーン状に連結されるデータ構造を有する。ブロックヘッダは、該当するブロックの番号を表すハイトと、ハッシュ値の計算に用いる値であるナンスとをさらに含んでもよい。
 図3及び図4は、台帳に新たなブロックを追加する際(すなわち、台帳を更新する際)の動作例を示す図である。
 図3に示すように、P2Pネットワークを構成するグループ内でトランザクションが発生した後、当該トランザクションに対応する新たなブロックを、「プロポーザ」と称されるノード100が生成し、他のノード100に対して新たなブロックを通知することで提案する。例えば、複数のノード100がナンスの値を変化させながらトランザクションデータ等と合わせてそのハッシュ値を計算し、特定条件を満たすハッシュ値を見つけたノード100(プロポーザ)が、生成したブロックを他のノード100に通知する。新たなブロックの提案を受けた他のノード100は、新たなブロックのハッシュ値を検算する。ここでは検算に成功したと仮定して説明を進める。
 続いて、図4に示すように、新たなブロックの提案を受けた他のノード100は、検算したブロックを新たなブロックとして認めるようにノード100(プロポーザ)に対して投票する。投票を行う他のノード100を「投票者」と称する。ノード100(プロポーザ)は、他のノード100(投票者)からある一定数の投票が得られた場合、提案した新たなブロックを確定し、当該新たなブロックを台帳に追加する。
 図5は、各ノード100の構成例を示す図である。
 図5に示すように、ノード100は、通信部110と、制御部120と、記憶部130とを有する。ノード100は、バッテリ140を有していてもよい。
 通信部110は、他ノードとの通信を行うための通信インターフェイスを含む。通信インターフェイスは、無線通信インターフェイス、又は有線通信インターフェイスであってもよい。
 制御部120は、ノード100における各種の制御及び処理を行う。このような処理は、上述の処理及び後述の処理を含む。制御部120は、少なくとも1つのプロセッサ121を含む。プロセッサ121は、記憶部130に記憶されるプログラムを実行して各種の処理を行う。
 記憶部130は、プロセッサ121により実行されるプログラム、及びプロセッサ121による処理に用いられる情報を記憶する。記憶部130は、不揮発性メモリ及び揮発性メモリを含む。
 バッテリ140は、ノード100(機器)の各部に供給する電力を蓄える。
 (階層構造ネットワーク)
 次に、図6を参照して、実施形態に係るブロックチェーンシステムについて説明する。実施形態に係るブロックチェーンシステムは、階層構造を有するネットワーク(以下、「階層構造ネットワーク」と称する)10を含んで構成される。
 上述のように、ブロックチェーン技術では、各ノード100が十分な性能を有していることを前提として、いずれか1つのノード100でトランザクションが発生すれば全てのノード100で計算(検算)を行う。そのため、バッテリ容量が小さい、計算能力が低い、記憶容量が小さいといった性能の劣る機器、例えば、センサデバイス等のIoT機器に対してブロックチェーン技術を適用することが難しい。
 実施形態では、階層構造ネットワーク10を形成し、各ノード100を当該ノード100の性能に応じた階層に配置する。階層構造にすることで、上位の階層を計算頻度(すなわち、台帳の更新頻度)が高い階層としつつ、下位の階層については計算頻度を抑制できる。そして、性能の高い機器を上位の階層に配置し、性能の低い機器を下位の階層に配置することで、性能の良し悪しに依存することなくブロックチェーンの階層構造ネットワーク10に参加可能になる。
 図6は、実施形態に係るネットワーク構成例を示す図である。図6の例では、階層構造ネットワーク10は、階層1乃至階層3の3つの階層からなる階層構造を有する。以下において、3つの階層を用いる一例について主として説明するが、階層の数は2つ、又は4つ以上であってもよい。図6に示す例においては、階層1が最上位の階層であって、階層3が最下位の階層である。
 このような階層構造ネットワーク10において、各ノード100は台帳を管理する。各ノード100は、当該ノード100の性能に基づいて、3つの階層のうち当該性能に応じた階層に配置される。ここで、ノード100の性能とは、計算能力(例えば、プロセッサ能力)、記憶容量(例えば、メモリサイズ)、及びバッテリ容量のうち少なくとも1つをいう。ノード100の性能には、後述のスリープ時間が含まれてもよい。例えば、新たなノードが追加される場合、当該新たなノード又は他ノードは、当該新たなノードが配置される階層を当該新たなノードの性能に基づいて決定する。
 階層1に配置される各ノード100及び階層2に配置される各ノード100は、上位階層グループを形成する。図6において、階層1に属するノード100がノード100Aのみである一例を示しているが、階層1に複数のノード100が配置されてもよい。
 階層2に配置されるノード100は、ノード100B1、ノード100C1、及びノード100D1の3つである。上位階層グループであるグループ(A)200Aに属する各ノード100は、上位階層台帳である台帳(A)を管理する。
 階層2に配置される各ノード100及び階層3に配置される各ノード100は、下位階層台帳を管理する下位階層グループを形成する。例えば、性能の高い機器は階層1(又は階層2)に配置され、当該機器に比べて性能が低い機器は階層3に配置される。すなわち、下位階層グループに属するノード100は、上位階層グループに属するノード100に比べて低い性能を有する。
 図6において、グループ(B)乃至グループ(D)の合計3つの下位階層グループが形成される一例を示している。但し、下位階層グループの数は3つに限定されず、下位階層グループの数は1つ、又は4つ以上であってもよい。
 グループ(B)には、階層2に配置される1つのノード100B1と、階層3に配置される複数のノード100B2とが属している。グループ(B)に属する各ノード100Bは、下位階層台帳である台帳(B)を管理する。ノード100B1は、グループ(A)及びグループ(B)の両方に属し、台帳(A)及び台帳(B)の両方を管理する。ノード100B1は、グループ(B)の親ノードである。ノード100B2は、グループ(B)のみに属するため、台帳(B)のみを管理する。
 同様に、グループ(C)には、階層2に配置される1つのノード100C1と、階層3に配置される複数のノード100C2とが属している。グループ(C)に属する各ノード100Cは、下位階層台帳である台帳(C)を管理する。ノード100C1は、グループ(A)及びグループ(C)の両方に属し、台帳(A)及び台帳(C)の両方を管理する。ノード100C1は、グループ(C)の親ノードである。ノード100C2は、グループ(C)のみに属するため、台帳(C)のみを管理する。
 同様に、グループ(D)には、階層2に配置される1つのノード100D1と、階層3に配置される複数のノード100D2とが属している。グループ(D)に属する各ノード100Dは、下位階層台帳である台帳(D)を管理する。ノード100D1は、グループ(A)及びグループ(D)の両方に属し、台帳(A)及び台帳(D)の両方を管理する。ノード100D1は、グループ(D)の親ノードである。ノード100D2は、グループ(D)のみに属するため、台帳(D)のみを管理する。
 各グループ(A)乃至(D)内では、各ノード100が相互に通信可能に接続されており、グループ内で共通の台帳を保持及び管理し、グループ内では従来のブロックチェーンと同様の処理を行う。このようなグループ化により、各グループ内のノード数を減らすことができるため、台帳の肥大化を抑制できる。
 また、一般的に、性能の低いノード100(例えば、センサデバイス等のIoT機器)は、性能の高いノード100に比べてトランザクションの発生頻度が低い。例えば、性能の低いノード100は、消費電力を低減するために通信を間欠的に行い、通信を行わない間はスリープ状態になり、スリープ時間中はトランザクションが発生しない。
 性能の高いノード100により形成される上位階層グループであるグループ(A)内では、下位階層グループに比べて、台帳(A)が頻繁に更新され得るとともに、台帳(A)のデータ量が大きくなり易い。一方、性能の低いノード100により形成されるグループ(B)内では、台帳(B)の更新頻度を抑制できるとともに、台帳(B)のデータ量の増大を抑制できる。同様に、性能の低いノード100により形成されるグループ(C)内では、台帳(C)の更新頻度を抑制できるとともに、台帳(C)のデータ量の増大を抑制できる。同様に、性能の低いノード100により形成されるグループ(D)内では、台帳(D)の更新頻度を抑制できるとともに、台帳(D)のデータ量の増大を抑制できる。
 しかしながら、グループごとに個別に台帳を管理することで台帳の更新頻度及び肥大化を抑制できるが、各グループの台帳の内容が他グループの台帳とリンクしていないと、ブロックチェーン技術における信頼性が低下し得る。そこで、実施形態では、グループ間で台帳の内容をリンクさせることで、台帳の更新頻度及び肥大化を抑制しつつ信頼性の低下を抑制可能とする。
 具体的には、第1台帳を管理する1つ又は複数のノード100により形成される第1グループと、第1台帳と異なる第2台帳を管理する1つ又は複数のノード100により形成される第2グループと、を含む複数のグループにより構成される階層構造ネットワーク10において、第2グループに属するノード100は、第2台帳に関する台帳情報を第1グループに通知する。第1グループに属する各ノード100は、通知された台帳情報を第1台帳の一部として管理する。これにより、グループ間で台帳の内容をリンクさせることができる。
 ここで、第1グループは上位階層グループ及び下位階層グループのうち一方であり、第2グループは上位階層グループ及び下位階層グループのうち他方である。すなわち、直接的な通信接続を有するグループ間で台帳をリンクさせる。一方、下位階層グループ間、すなわち、直接的な通信接続を有しないグループ間では、台帳をリンクさせない。これにより、1つの下位階層グループにおける台帳の更新が他の下位階層グループにおける台帳に影響を与えずに、下位階層グループ間で独立して台帳を管理可能になる。
 (台帳の管理方法)
 次に、図7乃至図9を参照して、実施形態に係る台帳の管理方法について説明する。
 図7に示すように、上位階層台帳を管理する上位階層グループに属するノード100は、当該上位階層グループ内のトランザクション及び下位階層グループ内のトランザクションのそれぞれに応じて、当該上位階層台帳を更新する。
 例えば、上位階層グループであるグループ(A)200Aに属するノード100(ノード100A、100B1、100C1、及び100D1)は、グループ(A)200A内のトランザクションに応じて、上位階層台帳である台帳(A)を更新するだけではなく、いずれかの下位階層グループ(グループ(B)200B、グループ(C)200C、グループ(D)200D)内のトランザクションに応じて台帳(A)を更新する。図7においては、グループ(A)200Aに属するノード100(ノード100A、100B1、100C1、及び100D1)が、グループ(B)200Bにおいて台帳(B)が更新されたことに応じて台帳(A)を更新する一例を示している。
 上位階層グループにおける上位階層台帳の更新頻度は、階層構造を有しない一般的な階層構造ネットワーク10(図1参照)における台帳の更新頻度と同様である。下位階層グループ(グループ(B)200B、グループ(C)200C、グループ(D)200D)内のトランザクションが上位階層台帳である台帳(A)に反映されることにより、ブロックチェーン技術における信頼性を維持できる。
 一方、図8に示すように、下位階層台帳を管理する下位階層グループに属するノード100は、上位階層グループ内のトランザクションに応じて当該下位階層台帳を更新せずに、当該下位階層グループ内のトランザクションに応じて下位階層台帳を更新する。すなわち、上位階層台帳が更新されても、下位階層台帳は更新されない。これにより、下位階層グループにおける下位階層台帳の更新頻度を低減できる。
 例えば、下位階層グループであるグループ(B)200Bに属するノード100B(ノード100B1、100B2)は、グループ(B)200B内のトランザクションに応じて下位階層台帳である台帳(B)を更新するが、グループ(A)200A内のトランザクションに応じて台帳(B)を更新しない。同様に、下位階層グループであるグループ(C)200Cに属するノード100C(ノード100C1、100C2)は、グループ(C)200C内のトランザクションに応じて下位階層台帳である台帳(C)を更新するが、グループ(A)200A内のトランザクションに応じて台帳(C)を更新しない。同様に、下位階層グループであるグループ(D)200Dに属するノード100D(ノード100D1、100D2)は、グループ(D)200D内のトランザクションに応じて下位階層台帳である台帳(D)を更新するが、グループ(A)200A内のトランザクションに応じて台帳(D)を更新しない。
 また、図7に示すように、下位階層台帳を管理する下位階層グループに属するノード100は、他の下位階層グループ内のトランザクションに応じて当該下位階層台帳を更新しない。例えば、下位階層グループであるグループ(B)200Bにおいて台帳(B)が更新されても、他の下位階層グループであるグループ(C)200C及びグループ(D)200Dは台帳(C)及び台帳(D)を更新しない。これにより、下位階層グループにおける下位階層台帳の更新頻度を低減できる。
 このように、下位階層グループでトランザクションが発生した場合、上位階層グループで上位階層台帳の更新が発生するが、それ以外の下位階層グループでは台帳の更新は不要である。また、上位階層グループでトランザクションが発生しても下位階層グループで下位階層台帳の更新は不要である。これにより全体の計算量を削減することができる。よって、計算処理能力及び/又はメモリ容量の少ない機器に対してもブロックチェーン技術を適用可能になる。
 図9は、実施形態に係る階層構造ネットワーク10を一般的なネットワーク構成(図1参照)と比較した場合の計算量の削減効果を説明するための図である。ここでは、2分木による階層構造を採用する一例を示している。また、n個(n≧4)のノード100が存在し、各ノード100におけるトランザクション発生頻度が同等であるものとする。
 図9に示すように、最上位階層(Layer1)のノード100は、すべてのノードのトランザクションの計算が必要であるため、一般的なブロックチェーン技術と同じ計算頻度である。一方、最下層のノード100は、自身の参加しているグループのトランザクションについてのみ計算が必要である。2分木の場合、各グループ内のノード数は3であるため、3/nの計算頻度に抑制できる。
 例えば、最上位階層以外が2層構造(n=7)である場合、全体の約38%の計算が削減可能である。最上位階層以外が3層構造(n=15)である場合、全体の約61%の計算が削減可能である。nが十分大きい(limit→∞)である場合、全体の約67%の計算が削減可能である。すなわち、階層が下になればなるほど、計算頻度を削減できる。よって、一般的なブロックチェーン技術と比較して、通信量及び計算回数を抑制することができる。そのため、一般的なブロックチェーン技術では参加することができない性能の機器でもブロックチェーン技術を活用することができる。
 なお、図9に示すようなネットワーク構成において、直接的な通信接続を有する2つのグループ間で上位階層グループ及び下位階層グループが構成される。例えば、グループ200Bを基準とすると、グループ200Aが上位階層グループであり、グループ200D及びグループ200Eのそれぞれが下位階層グループである。グループ200D及びグループ200Eを基準とすると、グループ200Bが上位階層グループである。同様に、グループ200Cを基準とすると、グループ200Aが上位階層グループであり、グループ200F及びグループ200Gのそれぞれが下位階層グループである。グループ200F及びグループ200Gを基準とすると、グループ200Cが上位階層グループである。
 (上位階層台帳と下位階層台帳とのリンク)
 次に、図10乃至図13を参照して、実施形態に係る上位階層台帳と下位階層台帳とのリンクについて説明する。
 図10に示すように、台帳(A)を管理するノード100(ノード100A、100B1)により形成されるグループ(A)200Aと、台帳(B)を管理するノード100(ノード100B1、100B2)により形成されるグループ(B)200Bと、により階層構造ネットワーク10が構成されている。
 グループ(A)200Aに属するノード100は、台帳(A)に関する台帳情報をグループ(B)200Bに通知する。例えば、グループ(A)200Aに属するノード100B1は、台帳(A)に関する台帳情報をグループ(B)200B内の他ノード100B2に通知する。そして、グループ(B)200Bに属する各ノード100(ノード100B1、100B2)は、当該台帳情報を台帳(B)の一部として管理する。このように、下位階層台帳を管理する下位階層グループに属する各ノード100は、上位階層台帳に関する台帳情報を当該下位階層台帳の一部として管理する。これにより、下位階層台帳を上位階層台帳とリンクさせることができる。
 例えば、下位階層台帳である台帳(B)の一部として管理する台帳情報は、上位階層台帳である台帳(A)を示すチェーンIDを含んでもよい。台帳(B)の一部として管理する台帳情報は、台帳(A)のブロックから計算されるハッシュ値を含んでもよい。台帳(B)の一部として管理する台帳情報は、台帳(A)のブロック番号を示すブロックハイトを含んでもよい。ここで、グループ(B)に属する各ノード100(ノード100B1、100B2)は、当該台帳情報を台帳(B)のブロックにおけるヘッダ部分(ブロックヘッダ)に格納してもよい。これにより、グループ(B)200Bにおける検算時に、台帳(A)を特定して台帳(A)のどのブロックとリンクしているかを検索することが容易になるとともに、検算結果等の情報をグループ(B)200Bからグループ(A)200Aに伝達することが容易になる。
 一方、グループ(B)200Bに属するノード100は、台帳(B)に関する台帳情報をグループ(A)200Aに通知する。例えば、グループ(B)200Bに属するノード100B1は、台帳(B)に関する台帳情報をグループ(A)200A内の他ノード100Aに通知する。そして、グループ(A)200Aに属する各ノード100(ノード100B1、100A)は、当該台帳情報を台帳(A)の一部として管理する。このように、上位階層台帳を管理する上位階層グループに属する各ノード100は、下位階層台帳に関する台帳情報を当該上位階層台帳の一部として管理する。これにより、上位階層台帳を下位階層台帳とリンクさせることができる。
 例えば、上位階層台帳である台帳(A)の一部として管理する台帳情報は、下位階層台帳である台帳(B)を示すチェーンIDを含んでもよい。台帳(A)の一部として管理する台帳情報は、台帳(B)のブロックから計算されるハッシュ値を含んでもよい。台帳(A)の一部として管理する台帳情報は、台帳(B)のブロック番号を示すブロックハイトを含んでもよい。ここで、グループ(A)に属する各ノード100(ノード100B1、100A)は、当該台帳情報を台帳(A)のブロックにおけるトランザクションデータ部分に格納してもよい。これにより、台帳(B)の更新頻度が少なく、その長さが十分に長くなくても、十分に長い台帳(A)と交わることで、セキュリティの強度の低下を抑制できる。例えば、グループ(A)200Aにおける検算時に、台帳(B)のフォークプロテクションの確認をすることが容易になる。つまり、間違った(偽物の)ブロックチェーンが分岐せず、正しい台帳(B)の確認をすることが容易になる。
 図11は、グループ(A)200Aが形成された後、新たにグループ(A)200Aの下位にグループ(B)200Bが形成される場合における動作例を示す図である。ここでは、グループ(A)200Aに属するノードをノード(A)と称し、グループ(B)200Bに属するノードをノード(B)と称する。但し、親ノードはグループ(A)200A及びグループ(B)200Bの両グループに属するため、図11の動作は同一のノード(親ノード)内で実行されてもよい。
 図11に示すように、第1に、台帳(A)を管理するノード(A)は、m-1番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該m-1番目のブロックは、台帳(A)の前のブロックから計算されたハッシュ値を含むブロックヘッダと、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータとを有する。当該ブロックヘッダは、台帳(A)を示すチェーンID(親チェーンID)と、当該ブロックのブロック番号であるm-1を示すブロックハイトとの少なくとも一方をさらに含んでもよい。
 第2に、グループ(B)200Bが形成される。台帳(B)を管理するノード(B)は、台帳(B)における最初のブロック、すなわち、0番目のブロックを台帳(B)に追加することで台帳(B)を更新(生成)する。当該0番目のブロックは、そのブロックヘッダ部分に、当該0番目のブロックを追加する時点で最新の台帳(A)のブロック、すなわち、台帳(A)のm-1番目のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該0番目のブロックは、そのトランザクションデータ部分に、グループ(B)200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ(B)200Bにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
 第3に、台帳(A)を管理するノード(A)は、m番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該m番目のブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックであるm-1番目のブロックから計算されたハッシュ値を含む。また、当該m番目のブロックは、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報とを含む。当該台帳情報は、m番目のブロックを追加する時点で最新の台帳(B)のブロック、すなわち、台帳(B)の0番目のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、0番目のブロックのブロック番号である0を示すブロックハイトをさらに含んでもよい。
 第4に、台帳(B)を管理するノード(B)は、台帳(B)における1番目のブロックを台帳(B)に追加することで台帳(B)を更新する。当該1番目のブロックは、そのブロックヘッダ部分に、当該1番目のブロックを追加する時点で最新の台帳(A)のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該1番目のブロックは、そのブロックヘッダ部分に、台帳(B)の0番目のブロックから計算されたハッシュ値を含む。また、当該1番目のブロックは、そのトランザクションデータ部分に、グループ(B)200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ(B)200Bにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
 第5に、台帳(A)を管理するノード(A)は、n番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該n番目のブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックであるn-1番目のブロックから計算されたハッシュ値を含む。また、当該n番目のブロックは、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報とを含む。当該台帳情報は、n番目のブロックを追加する時点で最新の台帳(B)のブロック、すなわち、台帳(B)の1番目のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、当該1番目のブロックのブロック番号である1を示すブロックハイトをさらに含んでもよい。
 図12及び図13は、グループ(A)200Aが形成された後、新たにグループ(A)200Aの下位にグループ(B)200Bが形成され、さらにその後、新たにグループ(A)200Aの下位にグループ(C)200Cが形成される場合における動作例を示す図である。ここでは、グループ(A)200Aに属するノードをノード(A)と称し、グループ(B)200Bに属するノードをノード(B)と称し、グループ(C)200Cに属するノードをノード(C)と称する。ここでは、図11の動作との相違点について主として説明する。
 図13に示すように、第1に、台帳(A)を管理するノード(A)は、m-1番目のブロックを台帳(A)に追加することで台帳(A)を更新する。第2に、グループ(B)200Bが形成される。台帳(B)を管理するノード(B)は、台帳(B)における最初のブロック、すなわち、0番目のブロックを台帳(B)に追加することで台帳(B)を更新(生成)する。第3に、台帳(A)を管理するノード(A)は、m番目のブロックを台帳(A)に追加することで台帳(A)を更新する。このような動作は、図11の動作と同様である。
 第4に、台帳(A)を管理するノード(A)は、n-1番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該n-1番目のブロックは、台帳(A)の前のブロックから計算されたハッシュ値を含むブロックヘッダと、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータとを有する。当該ブロックヘッダは、台帳(A)を示すチェーンID(親チェーンID)と、当該ブロックのブロック番号であるn-1を示すブロックハイトとの少なくとも一方をさらに含んでもよい。
 第5に、グループ(C)200Cが形成される。台帳(C)を管理するノード(C)は、台帳(C)における最初のブロック、すなわち、0番目のブロックを台帳(C)に追加することで台帳(C)を更新(生成)する。当該0番目のブロックは、そのブロックヘッダ部分に、当該0番目のブロックを追加する時点で最新の台帳(A)のブロック、すなわち、台帳(A)のn-1番目のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該0番目のブロックは、そのトランザクションデータ部分に、グループ(C)200Cにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ(C)200Cにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
 第6に、台帳(A)を管理するノード(A)は、n番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該n番目のブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックであるn-1番目のブロックから計算されたハッシュ値を含む。また、当該n番目のブロックは、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(C)に関する台帳情報とを含む。当該台帳情報は、n番目のブロックを追加する時点で最新の台帳(C)のブロック、すなわち、台帳(C)の0番目のブロックから計算されたハッシュ値と、台帳(C)を示すチェーンIDとを含む。当該台帳情報は、当該0番目のブロックのブロック番号である0を示すブロックハイトをさらに含んでもよい。
 第7に、台帳(C)を管理するノード(C)は、台帳(C)における1番目のブロックを台帳(C)に追加することで台帳(C)を更新する。当該1番目のブロックは、そのブロックヘッダ部分に、当該1番目のブロックを追加する時点で最新の台帳(A)のブロック、すなわち、台帳(A)のn番目のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該1番目のブロックは、そのトランザクションデータ部分に、グループ(C)200Cにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ(C)200Cにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
 第8に、台帳(B)を管理するノード(B)は、台帳(B)における1番目のブロックを台帳(B)に追加することで台帳(B)を更新する。当該1番目のブロックは、そのブロックヘッダ部分に、当該1番目のブロックを追加する時点で最新の台帳(A)のブロック、すなわち、台帳(A)のn番目のブロックにおけるブロックヘッダを、台帳(A)に関する台帳情報として含む。また、当該1番目のブロックは、そのトランザクションデータ部分に、グループ(B)200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。ここで、当該トランザクションは、例えば、グループ(B)200Bにおけるノード追加(ノードjoin)であってもよい。当該トランザクションデータは、当該追加されたノードのノードパラメータを含んでもよい。
 第9に、台帳(A)を管理するノード(A)は、n+1番目のブロックを台帳(A)に追加することで台帳(A)を更新する。当該n+1番目のブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックであるn番目のブロックから計算されたハッシュ値を含む。また、当該n+1番目のブロックは、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報と、台帳(C)に関する台帳情報とを含む。当該台帳(B)に関する台帳情報は、n+1番目のブロックを追加する時点で最新の台帳(B)のブロック、すなわち、台帳(B)の1番目のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、当該台帳(B)の1番目のブロックのブロック番号である0を示すブロックハイトをさらに含んでもよい。当該台帳(C)に関する台帳情報は、n+1番目のブロックを追加する時点で最新の台帳(C)のブロック、すなわち、台帳(C)の1番目のブロックから計算されたハッシュ値と、台帳(C)を示すチェーンIDとを含む。当該台帳情報は、当該台帳(C)の1番目のブロックのブロック番号である0を示すブロックハイトをさらに含んでもよい。
 (下位階層グループのグループ分け)
 次に、図14及び図15を参照して、実施形態に係る下位階層グループのグループ分けについて説明する。
 図14に示すように、階層構造ネットワーク10は、複数の下位階層グループであるグループ(B)200B乃至グループ(D)200Dを有する。当該複数の下位階層グループに属するノード100は、当該ノード100のスリープ時間の長さに応じて、当該複数の下位階層グループのうち1つに配置される。上述のように、IoT機器等の低性能ノードは、消費電力を低減するために通信を間欠的に行い、通信を行わない間はスリープ状態(待機状態)になり、スリープ時間(待機時間)中はトランザクションが発生しない。2下位階層目以下ではスリープ時間の範囲によるグループ分けを行うことにより、スリープ時間の長いグループ及び短いグループにグループ化できる。
 具体的には、スリープ時間の近い機器ごとにグループに分ける。スリープ時間の長い機器はトランザクションの発生頻度が低いため、計算頻度が低く、その結果、計算頻度の削減が可能である。ここで、スリープ時間の長い機器は性能が低いものが多いので、当該グループ分けが有効である。このように、トランザクションの発生頻度を考慮したノードの集合にすることで、計算量を抑制しつつ、台帳の肥大を抑制できる。
 複数の下位階層グループのうち1つの下位階層グループに属する各ノード100のスリープ時間は、第1の所定時間の範囲内であってもよい。当該1つの下位階層グループとは異なる他の下位階層グループに属する各ノード100のスリープ時間は、第1の所定時間とは異なる第2の所定時間の範囲内であってもよい。図14の例において、グループ(B)200Bに属する各ノード100は、スリープ時間が1日よりも長い。グループ(C)200Cに属する各ノード100は、スリープ時間が1日以下であって、且つ1時間以上である。グループ(D)200Dに属する各ノード100は、スリープ時間が1時間未満である。なお、このようなグループ分けは一例であって、図14の例に限定されない。
 各グループに属するノード100の最大数は、当該グループに属するノード100の性能に応じて定められてもよい。例えば、1つのグループのノード数の制限は、当該グループに参加しているノードのうち最も性能の低いノードに依存して決定されてもよい。1つのグループのノード数が多いほど、台帳の更新頻度及びサイズが大きくなり易い。そのため、最も性能の低いノードの性能に応じて、当該ノードが属するグループの最大数を決定することとしている。
 図15に示すように、下位階層グループに属するノード100の数が、当該下位階層グループに属するノード100の最大数を超える場合、新たな下位階層グループが形成されてもよい。図15において、スリープ時間が1日よりも長いノード100の数がグループ(B)200Bの最大数(制限数)を超えたことにより、スリープ時間が1日よりも長いノード100からなる新たなグループ(E)200Eが形成される一例を示している。このように、制限数以上のノードがある場合、同じスリープ時間の範囲のグループを新規に追加する。或いは、下位階層グループに属するノード100の数が、当該下位階層グループに属するノード100の最大数を超える場合、階層を1つ下に追加し、さらに下位のグループが形成されてもよい。
 (グループ内の優先順位)
 次に、図16及び図17を参照して、実施形態に係るグループ内の優先順位について説明する。
 図16に示すように、性能のパラメータを用いて各グループのノードに優先順位をつける。優先順位は、性能のパラメータであるバッテリ容量、計算能力、記憶容量、及びスリープ時間のうち少なくとも1つを元に計算される。1つのグループ内において、優先順位1位のノードを親ノード、優先順位2位のノードをサブ親ノード、それ以外は子ノードに設定される。図16において、下位階層グループであるグループ(B)200Bの各ノード100の優先順位を数字で示している。例えば、新たなノード100が下位階層グループに追加される場合、当該新たなノード100又は他ノード100は、当該新たなノード100を親ノード、サブ親ノード、及び子ノードのいずれに設定するかを、当該新たなノード100の性能に基づいて決定する。
 1つのグループを形成する複数のノード100は、上位階層グループ及び下位階層グループの両方に属し、下位階層台帳及び上位階層台帳を管理する親ノードと、下位階層グループに属し、親ノードが当該親ノードとして機能しなくなったときに新たな親ノードに変更されるサブ親ノードと、下位階層グループに属し、親ノード100及びサブ親ノード100のいずれにも該当しない子ノード100と、を含む。
 ここで、サブ親ノード100は、子ノード100に比べて高い性能を有し、親ノード100は、サブ親ノード100に比べて高い性能を有する。また、サブ親ノード100は、子ノード100に比べて多くの役割を果たし、親ノード100は、サブ親ノード100に比べて多くの役割を果たす。そのため、ノード100が果たす役割とその性能とを整合させることとしている。
 例えば、親ノードは、下位階層グループでトランザクションが発生して下位階層台帳が更新された場合、上位階層グループに更新された旨を伝える。それにより、上位階層グループでトランザクションが発生(上位階層台帳が更新)される。具体的には、親ノードは、下位階層グループ内のトランザクションに応じて、下位階層台帳の更新を上位階層グループに属するノード100に通知し、上位階層グループに属するノード100は、当該親ノードからの通知に応じて、上位階層台帳を更新する。
 また、親ノードは、上位階層グループの上位階層台帳が更新されると、サブ親ノードに上位階層台帳を渡す。すなわち、親ノードは、上位階層台帳が更新された場合、更新後の上位階層台帳をサブ親ノードと共有する。
 図16の例においては、グループ(B)200Bの親ノードは、グループ(B)200Bでトランザクションが発生して台帳(B)が更新された場合、グループ(A)200Aに、台帳(B)が更新された旨を伝える。それにより、グループ(A)200Aでトランザクションが発生(台帳(A)が更新)される。また、グループ(B)200Bの親ノードは、グループ(A)200Aの台帳(A)が更新されると、グループ(B)200Bのサブ親ノードに台帳(A)を渡す。
 図17に示すように、親ノードが何らかの要因(例えば、自分からグループを抜ける、又は不正行為による強制削除等)でグループから削除された場合、自動的に優先順位2位のサブ親ノードが優先順位1位、すなわち、新たな親ノードとなる。それ以外の各ノードも優先順位が1つ繰り上がる。また、サブ親ノードが新たな親ノードに変更された場合、又は、サブ親ノードが当該サブ親ノードとして機能しなくなった場合、複数の子ノードのうち優先順位が最も高い子ノードが新たなサブ親ノードに変更される。なお、優先順位は各グループに紐づく必要があるため、各ノード100は、チェーンIDに紐づいた優先順位のパラメータ値を持つ。
 初期に親ノードに設定されたノード100は、性能のパラメータから選択されているため問題がないが、親ノード削除に伴う繰り上がりで設定される新たな親ノードは、性能のパラメータが不十分である可能性がある。そのため、各階層の性能パラメータに閾値を設定し、閾値を下回っている親ノードに関しては、一定回数のトランザクションごとに親ノードを変更(ローテーション)してもよい。すなわち、親ノードの削除に応じてサブ親ノードが新たな親ノードに設定され、且つ、新たな親ノードの性能が所定基準を満たしていない場合、親ノードとして設定されるノード100は、所定回数のトランザクションごとに変更されてもよい。変更の際に自身の優先順位をグループの最下位に設定し、サブ親ノードが次の親ノードとなる。親ノードをローテーションさせるトランザクションの回数はノードパラメータとして保持し、変更可能とする。
 (台帳に格納するノードパラメータの一例)
 次に、図18を参照して、実施形態に係る台帳に格納するノードパラメータの一例について説明する。
 上述のように、実施形態では、ノードパラメータが台帳に格納され得る。例えば、上位階層グループに属する各ノード100は、上位階層グループに新たなノード100が追加される場合、上位階層グループに追加される新たなノード100のパラメータを上位階層台帳に追加するように上位階層台帳を更新してもよい。下位階層グループに属する各ノード100は、下位階層グループに新たなノード100が追加される場合、下位階層グループに追加される新たなノード100のパラメータを下位階層台帳に追加するように下位階層台帳を更新してもよい。
 図18に示すように、最上位階層のノード100A及び最下位階層のノード100B2以外のノード100、すなわち、ノード100B1は、2つのグループに所属することになる。そのため、ノード100B1は、それぞれのグループごとに共通の台帳を保持する必要があり、2つの台帳(台帳(A)及び台帳(B))を持つ。ここで、2つのグループ(グループ(A)及びグループ(B))は、それぞれチェーンIDに紐づいた形で分別できるようにパラメータを持つ。上述のように、上位階層台帳である台帳(A)には、下位階層台帳である台帳(B)のハッシュ値等が含まれているため、台帳(B)が更新されると、台帳(A)も更新が必要である。
 台帳に格納するノードパラメータは、例えば次のパラメータのうち少なくとも1つである。
 ・チェーンID:最大2つ必要である。チェーンIDで、2つのグループのどちらが上位階層グループかを判別できるようにしている。
 ・台帳のハッシュ値:チェーンIDに紐づいた値であり、最大で2つ必要である。
 ・ノード優先順位:チェーンIDに紐づいた値であり、最大で2つ必要である。
 ・親チェーンID:グループの親ノードが参加する上位階層のチェーンIDである。グループの親子関係を明確化することで、階層構造の自動化をスムーズに行えるようにしている。
 ・バリデータノードID:台帳が正しいことを証明したノードのIDである。
 ・親ノードローテーション値:親ノードローテーションを発生させるトランザクションの回数である。親ノードトランザクション回数がこの値になった時に親ノードのローテーションが発生する。
 ・親ノードトランザクション回数:親ノードになってから発生したトランザクションの回数である。
 ・ノードの性能パラメータ:例えば、バッテリ容量、計算能力、記憶容量(メモリ余裕情報)、及びスリープ時間のうち少なくとも1つである。
 (台帳のロック)
 次に、図19乃至図24を参照して、実施形態に係る台帳のロックについて説明する。
 上述のように、階層構造ネットワーク10を構成することで、低スペックの機器がノードとしてブロックチェーンに参加することが可能である。また、実施形態では、下位階層グループの下位階層台帳を更新する場合、第1に、上位階層台帳の情報を下位階層台帳に含めて下位階層台帳を更新し、第2に、更新された下位階層台帳の情報を上位階層台帳に含めて上位階層台帳を更新することで、上位階層台帳と下位階層台帳とをリンクさせている(図11参照)。すなわち、実施形態では、図19に示すステップS1乃至S3のような動作を繰り返すことで、上位階層台帳と下位階層台帳とを時系列順にリンクさせている。
 具体的には、図19に示すように、ステップS1において、上位階層台帳である台帳(A)を管理するグループ(A)200Aに属するノード(A)は、新たなブロックを台帳(A)に追加することで台帳(A)を更新する。当該新たなブロックは、台帳(A)の前のブロックから計算されたハッシュ値を含むブロックヘッダと、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータとを有する。
 ステップS2において、下位階層台帳である台帳(B)を管理するグループ(B)200Bに属するノード(B)は、新たなブロックを台帳(B)に追加することで台帳(B)を更新する。当該新たなブロックは、そのブロックヘッダ部分に、当該ブロックを追加する時点で最新の台帳(A)のブロックにおけるブロックヘッダを台帳(A)に関する台帳情報として含み、且つ、そのトランザクションデータ部分に、グループ(B)200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。
 ステップS3において、台帳(A)を管理するグループ(A)200Aに属するノード(A)は、新たなブロックを台帳(A)に追加することで台帳(A)を更新する。当該新たなブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックから計算されたハッシュ値を含み、且つ、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報とを含む。当該台帳情報は、ブロック追加の時点で最新の台帳(B)のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、台帳(B)で追加されたブロックのブロック番号であるブロックハイトをさらに含んでもよい。
 このように、ステップS2において台帳(B)に新たなブロックが追加された後に、ステップS3において、当該追加された新たなブロックの情報が台帳(A)の新たなブロックに書き込まれる必要がある。しかしながら、ステップS2がステップS3よりも後に発生した場合、すなわち、台帳(B)の更新処理の完了が台帳(A)の更新タイミングに間に合わない場合、台帳(A)と台帳(B)とを時系列順にリンクさせることができない。その場合、グループ(B)200Bの検算の際にグループ(A)200Aを利用することが出来ず、台帳(B)の長さが十分でない場合はセキュリティを担保することができない。
 そこで、実施形態では、台帳の更新後に当該台帳の更新を所定期間(以下、「ロック期間」と称する)にわたって行わない(すなわち、台帳をロックする)ことにより、そのような課題を解決する。すなわち、実施形態では、最下位階層と異なる第1階層の第1グループ(上位階層グループ)に属するノード100は、当該第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳(上位階層台帳)を管理し、当該第1台帳が更新されてからロック期間にわたって当該第1台帳を更新しないよう台帳ロックを行う。当該ノード100は、ロック期間が終了(すなわち、ロック解除)したときに、第1階層の下位の第2階層の第2グループ(下位階層グループ)で管理する第2台帳(下位階層台帳)がロック期間内で更新されている場合、当該更新された第2台帳に関する台帳情報を第1台帳に含めるように第1台帳を更新する。
 このように、上位階層台帳をロック期間にわたってロックすることにより、下位階層台帳の更新処理の完了が上位階層台帳の更新タイミングに間に合わないことを回避しやすくなり、上位階層台帳と下位階層台帳とを時系列順にリンクさせることが容易になる。その結果、下位階層グループの検算の際に上位階層グループを利用することが容易になり、下位階層台帳の長さが十分でない場合であってもセキュリティを担保しやすくなる。なお、以下において、第1グループがグループ(A)200Aであって、第2グループがグループ(B)200Bである一例について説明するが、第1グループがグループ(B)200Bであって、第2グループがグループ(B)200Bの下位の階層のグループであってもよい。
 図20は、実施形態に係る台帳更新のロック動作を説明するための図である。
 図20に示すように、ステップS11において、グループ(A)200Aに属するノード(A)は、新たなブロックを台帳(A)に追加することで台帳(A)を更新する。当該新たなブロックは、台帳(A)の前のブロックから計算されたハッシュ値を含むブロックヘッダと、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータとを有する。
 ステップS12において、グループ(A)200Aに属するノード(A)は、ステップS11で台帳(A)の更新が完了した際にタイマ(以下、「ロックタイマ」とも称する)をスタートし、当該ロックタイマに対応するロック期間にわたって台帳(A)をロックする。
 ステップS13において、グループ(B)200Bに属するノード(B)は、ロック期間中に、新たなブロックを台帳(B)に追加することで台帳(B)を更新する。当該新たなブロックは、そのブロックヘッダ部分に、当該ブロックを追加する時点で最新の台帳(A)のブロックにおけるブロックヘッダを台帳(A)に関する台帳情報として含み、且つ、そのトランザクションデータ部分に、グループ(B)200Bにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。その後、グループ(B)200Bに属するノード(B)は、トランザクションがなければトランザクション発生まで待機する。
 ステップS14において、グループ(A)200Aに属するノード(A)は、ロックタイマ満了後、新たなブロックを台帳(A)に追加することで台帳(A)を更新する。当該新たなブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックから計算されたハッシュ値を含み、且つ、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータと、台帳(B)に関する台帳情報とを含む。当該台帳情報は、ブロック追加の時点で最新の台帳(B)のブロックから計算されたハッシュ値と、台帳(B)を示すチェーンIDとを含む。当該台帳情報は、台帳(B)で追加されたブロックのブロック番号であるブロックハイトをさらに含んでもよい。
 ステップS15において、グループ(A)200Aに属するノード(A)は、ステップS14で台帳(A)の更新が完了した際にロックタイマをスタートし、当該ロックタイマに対応するロック期間にわたって台帳(A)をロックする。このロック期間では、台帳(B)が更新されなかったものとする。
 ステップS16において、グループ(A)200Aに属するノード(A)は、ロックタイマ満了後、新たなブロックを台帳(A)に追加することで台帳(A)を更新する。当該新たなブロックは、そのブロックヘッダ部分に、台帳(A)の前のブロックから計算されたハッシュ値を含み、且つ、そのトランザクションデータ部分に、グループ(A)200Aにおける少なくとも1つのトランザクションに関するトランザクションデータを含む。
 ステップS17において、グループ(A)200Aに属するノード(A)は、ステップS16で台帳(A)の更新が完了した際にロックタイマをスタートし、当該ロックタイマに対応するロック期間にわたって台帳(A)をロックする。
 このように、グループ(A)200Aに属するノード(A)は、台帳(A)を更新するたびに、当該更新から一定の期間は台帳(A)をロックする。ここで、台帳(A)がロックされている間は、グループ(A)200Aで発生したトランザクションデータを台帳(A)に格納することができない。
 そのため、ロック期間中において、台帳(A)に追加するブロックを生成するノードであるプロポーザがトランザクションデータを保持することが考えられる。しかし、スペックの低いノードがプロポーザであるような場合、当該ノードでトランザクションデータを保持できない懸念がある。或いは、ロック期間中において、トランザクションを発生させたノードが当該トランザクションのトランザクションデータを保持することが考えられる。しかし、スペックの低いノードがトランザクションを発生させたような場合、当該ノードでトランザクションデータを保持できない懸念がある。
 そこで、実施形態では、グループ(A)200Aに属するノード(A)は、自ノード(A)におけるトランザクションがロック期間内で発生したときに、当該トランザクションに関するトランザクションデータを保持するためのメモリ容量の余裕(以下、「メモリ余裕」と称する)が当該自ノード(A)にある場合、当該トランザクションデータを保持する。一方、当該余裕が当該自ノード(A)にない場合、メモリ余裕のある他ノードに当該トランザクションデータを保持させる。これにより、スペックの低いノードがロック期間中にトランザクションを発生させたような場合であっても、トランザクションデータを他ノードに保持させることにより、トランザクションデータを保持可能になる。このように、スペック(具体的には、メモリ容量)に余裕のあるノードがトランザクションデータを保持することで、スペックの低いノードであっても、ロック手法を取り入れた階層構造のブロックチェーングループに参加できる。
 ここで、グループ(A)200Aに属するノード(A)は、自ノード(A)におけるトランザクションがロック期間内で発生したときに、メモリ余裕が当該自ノード(A)にない場合であって、且つ、メモリ余裕のある他ノード(A)がグループ(A)200Aに存在しない場合、グループ(A)200Aの上位の階層のグループに属する他ノードにトランザクションデータを保持させてもよい。上位の階層のグループは、よりスペックの高いノードによって形成されているため、トランザクションデータを保持させることが容易である。
 グループ(A)200Aに属するノード(A)は、自ノード(A)がプロポーザではなく、且つ、自ノード(A)がロック期間中においてトランザクションデータを保持した場合、当該自ノード(A)で保持しているトランザクションデータをロック期間が終了したときにプロポーザに送信する。これにより、プロポーザは、保持されていたトランザクションデータを用いて台帳(A)の新たなブロックを生成することが可能である。なお、プロポーザは、グループ(A)200A内で、台帳(A)内のスペック情報が示すスペックの高いノードであってもよい。すなわち、プロポーザは、グループ(A)200A内であらかじめ設定されたノードであってもよい。プロポーザは、親ノードであってもよい。
 実施形態では、台帳(A)は、グループ(A)200Aに属する各ノード(A)のメモリ容量に関するメモリ余裕情報を含む。グループ(A)200Aに属するノード(A)は、自ノード(A)におけるトランザクションがロック期間内で発生したときに、メモリ余裕が当該自ノード(A)にない場合、台帳(A)に含まれるメモリ余裕情報に基づいて、トランザクションデータを保持させる他ノードをグループ(A)200Aの中から決定する。これにより、スペックの低いノード(A)がトランザクションデータを発生させた場合、共通の台帳(A)を用いて、スペックに余裕のあるノードを探すことが可能になる。
 グループ(A)200Aに属するノード(A)は、グループ(A)200Aに新たなノード(A)が参加することに応じて、当該新たなノード(A)のメモリ容量に関する情報を台帳(A)内のメモリ余裕情報に含めるように台帳(A)を更新する。すなわち、グループ(A)200Aに新たなノード(A)が参加した際に、当該新たなノード(A)のメモリ容量に関する情報を台帳(A)に格納する。これにより、グループ(A)200Aに属するすべてのノード(A)のメモリ容量に関する情報を台帳(A)に持たせることが可能である。
 グループ(A)200Aに属するノード(A)は、自ノード(A)におけるトランザクションがロック期間内で発生したときに、メモリ余裕が当該自ノード(A)にない場合、メモリ余裕が当該自ノード(A)にないことを示すフラグ情報(以下、「余裕フラグ」と称する)をトランザクションデータと共に他ノード(具体的には、メモリ余裕のある他ノード)に送信する。当該フラグ情報は、台帳(A)内のメモリ余裕情報の一部として、グループ(A)200A内で管理される。これにより、グループ(A)200Aの各ノード(A)のリアルタイムなメモリ余裕に関する情報を台帳(A)に持たせることが可能である。
 このように、実施形態によれば、スペックの低いノードがロック期間中にトランザクションデータを発生させた場合、メモリ余裕のある他ノードを探して自ノードの代わりにトランザクションデータを保持してもらう。各ノードは、グループに参加する際に台帳にスペック情報(特に、メモリ余裕)が格納されるため、台帳を使ってメモリ余裕のあるノードを探すことができる。
 例えば、台帳に格納する各ノードのメモリ余裕情報は、各ノードの「メモリサイズ」及び「余裕フラグ」であってもよい。「メモリサイズ」とは、ノードのスペックにより定められるメモリのサイズ(容量)である。「メモリ」とは、トランザクションデータを格納可能なメモリであればよく、不揮発性メモリ及び/又は揮発性メモリであってもよい。「余裕フラグ」は、次のようにして管理される。
 第1に、ノードの新規登録(すなわち、グループへの参加)の際に、当該グループの台帳に当該ノードの性能(メモリサイズ)の情報を格納する。この時、規定値以上のメモリサイズの場合は「余裕フラグ」=ON(“1”)を初期値とし、規定値未満のメモリサイズの場合は「余裕フラグ」=OFF(“0”)を初期値とする。
 第2に、トランザクション発生時に、次のSTEP1乃至3により余裕フラグを更新する。
 STEP1:自ノードのトランザクション発生時に自ノードのメモリ残量を確認する。
 STEP2:「トランザクションデータのサイズ≦メモリ残量」であれば、「余裕フラグ」=ONとする。一方、「トランザクションデータのサイズ>メモリ残量」であれば、「余裕フラグ」=OFFとする。
 STEP3:トランザクションデータ及び余裕フラグを、メモリ余裕のある他ノードに送信する。
 メモリ余裕のある他ノードは、トランザクションデータを正常に受信できた場合はAck(肯定応答)を返却し、トランザクションデータを正常に受信できなかった場合はNak(否定応答)を返却する。なお、メモリ余裕のある他ノードは、スリープ中といった理由でトランザクションデータを受信できない場合は特に何も返却しない。
 メモリ余裕のある他ノードが自グループ内に存在しない場合、トランザクションデータを発生させたノードは、自グループの親ノードを介して、上位階層グループでメモリ余裕のある他ノードにトランザクションデータを渡す。或いは、メモリ余裕のある他ノードが自グループ内に存在しない場合に備えて外部データベースを使用する方法も可能である。但し、外部データベースを使用する場合、台帳を使用する場合に比べてセキュリティが低いという問題がある。
 図21は、実施形態に係る動作の一例を示す図である。図21では、ノード100a乃至100eを含むグループ(ここでは、「グループ(X)」とする)が形成され、各ノード100がグループ(X)に固有の台帳(ここでは、「台帳(X)」とする)を保持するものとする。各ノード100は、共通のタイマ値が設定されたロックタイマを管理し、台帳(X)が更新される度にロックタイマをスタートし、ロックタイマ動作中(すなわち、ロック期間中)は台帳(X)をロックする。
 図21に示すように、ステップS21において、各ノード100の新規登録(すなわち、グループ(X)への参加)の際に、台帳(X)に当該ノードの性能の情報(メモリ余裕情報を含む)を格納する。この時、規定値以上のメモリサイズの場合は「余裕フラグ」=ONを初期値とし、規定値未満のメモリサイズの場合は「余裕フラグ」=OFFを初期値とする。例えば、ノード100a乃至100dは「余裕フラグ」=OFFであって、ノード100eは「余裕フラグ」=ONであるものとする。
 ステップS22において、ノード100aは、台帳(X)のロック期間中にトランザクションデータを発生させる。
 ステップS23において、ノード100aは、トランザクションデータを保持するためのメモリ余裕を有していないため、台帳(X)に含まれるメモリ余裕情報を確認し、メモリ余裕のある他ノードを探す。すなわち、ノード100aは、台帳(X)に基づいて、トランザクションデータを保持させる他ノードをグループ(X)の中から決定する。ここでは、ノード100aは、メモリ余裕のあるノード100eにトランザクションデータを保持させると決定したものとする。なお、ノード100aは、メモリ余裕のある他ノードがグループ(X)内に存在しない場合、グループ(X)内の親ノードを介して、グループ(X)の上位の階層のグループ内の他ノードにトランザクションデータを保持させると決定してもよい。
 ステップS24において、ノード100aは、メモリ余裕のあるノード100eにトランザクションデータを渡す。ノード100eは、トランザクションデータを正常に受信できた場合はAck(肯定応答)を返却し、トランザクションデータを正常に受信できなかった場合はNak(否定応答)を返却する。ここでは、ノード100eがトランザクションデータを正常に受信できたものとする。ノード100eは、トランザクションデータを保持する。但し、ノード100eは、プロポーザではないものとする。
 ステップS25において、ノード100eは、ロックタイマ満了時(ロック解除時)に、トランザクションデータをプロポーザに渡す。プロポーザは、ノード100a乃至100dのいずれかであってもよい。プロポーザは、当該トランザクションデータを含む新たなブロックを生成し、当該新たなブロックを台帳(X)に追加することで台帳(X)を更新する。当該新たなブロックはグループ(X)内の各ノードで共有され、グループ(X)内の各ノードが台帳(X)を更新する。
 このように、スペック(具体的には、メモリ容量)に余裕のあるノード100eがロック期間中においてトランザクションデータを保持することで、スペックの低いノードであっても、ロック手法を取り入れた階層構造のブロックチェーングループに参加できる。
 次に、実施形態に係るロック期間の設定方法について説明する。上述のように、ロック期間はロックタイマにより規定される。ロックタイマは、グループごとに個別に設定され、当該グループにおける台帳の更新間隔を規定する。図22及び図23は、実施形態に係るロック期間の設定方法について説明するための図である。
 図22及び図23に示す例では、階層構造ネットワーク10は、グループ200A乃至グループ200Gを含み、3つの階層により構成されている。グループ200A乃至グループ200Gは、台帳(A)乃至台帳(G)をそれぞれ管理する。グループ200Aは最上位階層のグループであり、グループ200D乃至グループ200Gは最下位階層のグループであり、グループ200B及びグループ200Cは中間階層のグループである。
 各グループ200に属する各ノード100は、グループに固有のロックタイマを管理する。あるグループ200におけるロックタイマの値、すなわち、当該グループ200における台帳更新間隔は、当該グループ200におけるトランザクションの発生頻度及び当該グループ200に参加しているノード100のスリープ時間によって決定される。
 但し、図22に示すように、当該グループ200における台帳更新間隔は、「上位階層のロックタイマ<下位階層のロックタイマ」であるように設定される。すなわち、当該台帳更新間隔は、上位階層であるほどロックタイマの値(台帳更新間隔)が短くなるように設定され、下位階層であるほどロックタイマの値が長くなるように設定される。例えば、グループ200Aで用いるロックタイマの値は、グループ200Bで用いるロックタイマの値よりも小さい。下位階層であるほどノード100の性能(スペック)が低いため、下位階層であるほどロックタイマの値(台帳更新間隔)が長くなるように設定することで、性能の低いノード100であってもブロックチェーングループに参加できる。
 また、図23に示すように、「上位階層のロックタイマ>下位階層の台帳更新処理時間」であるように設定される。台帳更新処理時間とは、台帳の更新処理に要する時間(所要時間)をいう。例えば、グループ200Aで用いるロックタイマの値は、グループ200Bにおける台帳(B)の更新処理時間よりも大きい。このように設定することにより、下位階層の台帳更新処理中に上位階層の台帳が更新されてしまう事態の発生を抑制できる。
 このように設定しても、下位階層の台帳更新処理中に上位階層の台帳が更新されてしまう事態が生じ得る。例えば、グループ200Bにおける台帳(B)の台帳更新処理中に、グループ200Aにおける台帳(A)が更新されてしまう事態が生じ得る。以下において、ある階層のグループを「親グループ」とも称し、親グループで管理する台帳を「親台帳」とも称し、当該階層の直下の階層のグループを「子グループ」とも称し、子グループで管理する台帳を「子台帳」とも称する。
 子台帳の更新前に親台帳の更新があった場合、子グループの親ノードから親台帳が更新されたことが通知される。その場合、子台帳は更新失敗となり、速やかに再度子台帳の更新処理を行う。例えば、グループ200Bにおける台帳(B)の更新処理中に、グループ200Aにおける台帳(A)が更新されると、グループ200B内の親ノードは、グループ200B内の他ノードに対し、親台帳である台帳(A)が更新されたことを通知する。その場合、グループ200B内の各ノードは、台帳(B)の更新処理に失敗したとみなし、台帳(B)の更新をやり直す。すなわち、グループ200B内の各ノードは、台帳(B)の更新処理中に台帳(A)が更新されたことを検知した場合、台帳(B)の更新失敗とみなして、台帳(B)の更新処理を再度行う。具体的には、グループ200B内の各ノードは、台帳(B)の更新処理が失敗した場合、その間のグループ200B内のトランザクションも追加したブロックを生成しなおし、台帳(B)の更新処理を行う。なお、同じ親台帳から子台帳の複数のブロックが生成された場合でも、親台帳の更新に間に合えば、それぞれ更新が可能である。
 しかしながら、子台帳の更新が連続して失敗した場合、親台帳のロックタイマが短い可能性がある。そのため、子台帳の更新が連続して失敗した場合、親台帳のロックタイマを延長する。例えば、グループ200Aに属する各ノードは、台帳(B)の更新失敗が所定回数だけ連続して発生したことを検知すると、グループ200Aで用いるロック期間、すなわち、台帳(A)のロックタイマを延長する。
 子台帳の更新については、子グループから親グループに対して子台帳の更新情報を通知する。親台帳の更新と子台帳の更新情報通知とが同時の場合、子台帳更新の情報通知は親台帳更新処理の前に来る必要があるため、親台帳の更新が優先される。そのため、親台帳に情報がインプット出来た後に子台帳更新が確定される。
 図24は、実施形態に係る台帳ロックに関する動作の具体例1を示す図である。本具体例1では、グループ200A、200B、及び200Dが台帳(A)、(B)、及び(D)をそれぞれ管理し、グループ200Aがグループ200Bの親グループであって、グループ200Bがグループ200Dの親グループであるものとする。言い換えると、グループ200Bがグループ200Aの子グループであって、グループ200Dがグループ200Bの子グループである。
 図24に示すように、ステップS31において、グループ200A内の各ノードは、台帳(A)を更新し、その後、当該更新から台帳(A)のロック期間にわたって台帳(A)をロックする。台帳(A)のロック期間は、子台帳(B)の更新処理時間よりも長い。
 ステップS32において、グループ200B内の各ノードは、親台帳(A)のロック期間中に、親台帳(A)を用いて台帳(B)を更新し、その後、当該更新から台帳(B)のロック期間にわたって台帳(B)をロックする。ここで、台帳(B)のロック期間は、親台帳(A)のロック期間よりも長い。また、台帳(B)のロック期間は、子台帳(D)の更新処理時間よりも長い。
 ステップS33において、グループ200A内の各ノードは、台帳(A)のロック期間が終了すると、当該ロック期間中に更新された子台帳(B)を用いて台帳(A)を更新し、その後、当該更新から台帳(A)のロック期間にわたって台帳(A)をロックする。
 ステップS34において、グループ200D内の各ノードは、親台帳(B)のロック期間中に、親台帳(B)を用いて台帳(D)を更新し、その後、当該更新から台帳(D)のロック期間にわたって台帳(D)をロックする。ここで、台帳(D)のロック期間は、親台帳(B)のロック期間よりも長い。
 ステップS35において、グループ200A内の各ノードは、台帳(A)を更新し、その後、当該更新から台帳(A)のロック期間にわたって台帳(A)をロックする。
 ステップS36において、グループ200B内の各ノードは、親台帳(A)のロック期間中に、その時点での最新の親台帳(A)と、台帳(B)のロック期間中に更新された子台帳(D)とを用いて台帳(B)を更新し、その後、当該更新から台帳(B)のロック期間にわたって台帳(B)をロックする。
 ステップS37において、グループ200A内の各ノードは、台帳(A)のロック期間が終了すると、当該ロック期間中に更新された子台帳(B)を用いて台帳(A)を更新し、その後、当該更新から台帳(A)のロック期間にわたって台帳(A)をロックする。
 図25は、実施形態に係る台帳ロックに関する動作の具体例2を示す図である。本具体例2では、グループ200A、200B、及び200Cが台帳(A)、(B)、及び(C)をそれぞれ管理し、グループ200Aがグループ200B及び200Cのそれぞれの親グループであるものとする。言い換えると、グループ200B及び200Cのそれぞれは、グループ200Aの子グループである。
 図25に示すように、ステップS41において、グループ200A内の各ノードは、台帳(A)を更新し、その後、当該更新から台帳(A)のロック期間にわたって台帳(A)をロックする。
 ステップS42において、グループ200C内の各ノードは、親台帳(A)のロック期間中に、その時点での最新の親台帳(A)を用いて台帳(C)を更新し、その後、当該更新から台帳(C)のロック期間にわたって台帳(C)をロックする。
 ステップS43において、グループ200B内の各ノードは、親台帳(A)のロック期間中に、その時点での最新の親台帳(A)を用いて台帳(B)を更新し、その後、当該更新から台帳(B)のロック期間にわたって台帳(B)をロックする。
 ステップS44において、グループ200B内の各ノードは、親台帳(A)のロック期間中に、台帳(B)のロック期間が終了すると、その時点での最新の親台帳(A)を用いて台帳(B)を更新し、その後、当該更新から台帳(B)のロック期間にわたって台帳(B)をロックする。
 ステップS45において、グループ200A内の各ノードは、台帳(A)のロック期間が終了すると、当該ロック期間中に更新された子台帳(B)及び(C)を用いて台帳(A)を更新する。ここでは、台帳(A)のロック期間中に、子台帳(B)の更新が2回発生(ステップS43及びS44)している。グループ200A内の各ノードは、ステップS43及びS44で追加された子台帳(B)の2つのブロックのそれぞれの台帳情報(B情報)を台帳(A)に含めるよう台帳(A)を更新する。当該台帳情報にハイトを含めることで、当該2つのブロックのそれぞれの台帳情報をハイトにより識別可能である。また、台帳(A)のロック期間中に、子台帳(C)の更新が1回発生(ステップS42)している。グループ200A内の各ノードは、ステップS42で追加された子台帳(C)のブロックの台帳情報(C情報)を台帳(A)に含めるよう台帳(A)を更新する。なお、B情報及びC情報のそれぞれはチェーンIDを含むため、当該情報がどの子台帳に対応するかをチェーンIDにより識別可能である。
 その後、ステップS46において、グループ200A内の各ノードは、台帳(A)を更新し、その後、当該更新から台帳(A)のロック期間にわたって台帳(A)をロックする。ここで、台帳(A)が更新された際に、台帳(C)が更新処理中であるものとする。
 ステップS47において、グループ200C内の各ノードは、台帳(C)が更新処理中に親台帳(A)が更新されたことを検知すると、台帳(C)の更新処理に失敗したとみなす。その場合、グループ200A内の各ノードは、グループ200Cのノードから台帳(C)の更新情報が通知されても、当該通知を拒否する(ステップS48)。
 ステップS49において、グループ200C内の各ノードは、台帳(C)の更新処理に失敗したことに応じて、その間のグループ200C内のトランザクションも追加したブロックを生成しなおし、台帳(C)の更新処理を改めて行う。
 (基本動作フロー例)
 次に、図26乃至図29を参照して、実施形態に係る基本的な動作フロー例について説明する。
 (1)ノード追加時のフロー例
 図26は、実施形態に係る階層構造ネットワーク10へのノード追加時のフロー例を示す図である。図26において、省略可能なステップを破線で示している。
 ステップS101において、新規追加ノードは、既にグループに参加しているノードに対して追加申請を行う。
 ステップS102において、追加申請を受けたノード又は他ノードは、例えば検疫ネットワークを用いて、追加申請を行ったノードに計算力が備わっているか及び不正な状態でないか等の事前確認を行う。
 事前確認の結果がNGである場合(ステップS102:NO)、ステップS103において、追加申請を受けたノード又は他ノードは、追加申請を却下する。一方、事前確認の結果がOKである場合(ステップS102:YES)、処理がステップS104に進む。
 ステップS104において、追加申請を受けたノード又は他ノードは、追加申請を許可するか否かを決定する。追加を許可する方法については管理者が決定してもよい。或いは、当該方法については全てノード又は一部のノードによる投票によって追加可否を決定してもよい。Public型(自由参加可能)なグループの場合、ステップS104をスキップしてもよい。
 追加不可と決定された場合(ステップS104:NO)、ステップS105において、追加申請を受けたノード又は他ノードは、追加申請を却下する。一方、追加可と決定された場合(ステップS104:YES)、処理がステップS106に進む。
 ステップS106において、追加申請を受けたノード又は他ノードは、新規追加ノードの性能に応じて、新規追加ノードを追加(配置)する階層を決定する。ここで、階層の決定方法は、予め設定された閾値を性能パラメータと比較することによる自動決定であってもよい。或いは、当該階層の決定方法は、他のノードとの性能優劣による決定であってもよい。或いは、当該階層の決定方法は、全てのノード又は一部のノードによる投票によって決定してもよい。
 ステップS107において、追加申請を受けたノード又は他ノードは、新規追加ノードのスリープ時間に応じて、新規追加ノードを追加(配置)するグループを決定する。ここで、グループの決定方法は、予め設定された閾値をスリープ時間と比較することによる自動決定であってもよい。或いは、当該グループの決定方法は、他のノードとのスリープ時間比較による決定であってもよい。或いは当該グループの決定方法は、全てのノード又は一部のノードによる投票によって決定してもよい。なお、新規追加ノードが最上位階層に追加される場合又は同一階層に1つしかグループがない場合、ステップS107はスキップされてもよい。
 ステップS108において、新規追加ノードが参加するグループに属する各ノードは、自身の台帳に、新規追加ノードの性能パラメータを追加する。上述のように、台帳には、グループに参加している各ノードの性能パラメータが格納されている。
 ステップS109において、追加申請を受けたノード又は他ノードは、新規追加ノードの性能に応じて、新規追加ノードの優先順位を決定する。優先順位の合意については、通常のトランザクションの合意形成と同じ処理としてもよい。
 (2)親ノードローテーションのフロー例
 図27は、実施形態に係る階層構造ネットワーク10における親ノードローテーションのフロー例を示す図である。
 ステップS201において、親ノード又は他ノードは、親ノードの性能パラメータが閾値以下であるか否かを判定する。親ノードの性能パラメータが閾値よりも高い場合(ステップS201:NO)は、親ノードローテーションは不要である(ステップS202)。一方、親ノードの性能パラメータが閾値以下である場合(ステップS201:YES)、親ノードローテーションが有効な状態になる。
 ステップS203において、親ノードが関わるトランザクションが発生する。
 ステップS204において、親ノード又は他ノードは、親ノードトランザクション回数が親ノードローテーション値に達したか否かを判定する。親ノードトランザクション回数が親ノードローテーション値に達していない場合(ステップS204:NO)、ステップS205において、親ノードトランザクション回数がインクリメント(1を加算)される。
 一方、親ノードトランザクション回数が親ノードローテーション値に達した場合(ステップS204:YES)、ステップS206において、当該親ノードが属するグループ内の各ノードは、当該グループにおける優先順位を変更する。例えば、親ノード(優先順位1位)のノードが優先順位最下位に変更され、それ以外のノードの優先順位を1つ繰り上げてサブ親ノードが新たな親ノードに設定される。
 ステップS207において、新たな親ノード又は他ノードは、上位階層グループのノードに新たな親ノードの性能パラメータを展開(通知)する。上位階層グループのノードは、当該新たな親ノードの性能パラメータを上位階層台帳に追加する。
 ステップS208において、上位階層グループに属するノード(当該新たな親ノードを含む)は、上位階層グループにおける優先順位を決定する。当該新たな親ノードは、前回の親ノードよりも性能パラメータが低いため、上位階層グループで優先順位1位になることはないが、例外処理として2位以下にする条件を含めてもよい。
 (3)下位階層へのノード追加時のフロー例
 図28は、実施形態に係る階層構造ネットワーク10における下位階層へのノード追加(下位階層グループ追加)時のフロー例を示す図である。
 ステップS301において、下位階層に子ノードが追加される。
 ステップS302において、当該下位階層に追加されたノードの優先順位が決定される。新規グループに1つ追加する場合、必然的に優先順位は2位となり、サブ親ノードとなる。
 ステップS303において、当該下位階層(新たな下位階層グループ)の下位階層台帳が生成される。上述のように、下位階層台帳には、その時点の上位階層台帳のブロックヘッダ及び親チェーンIDを含めてもよい。
 ステップS304において、下位階層台帳の生成に応じて、上位階層台帳が更新される。上述のように、上位階層台帳には、下位階層台帳の情報(ハッシュ値及び/又はチェーンIDなど)を含めてもよい。
 (4)ノード削除時のフロー例
 図29は、実施形態に係る階層構造ネットワーク10におけるノード削除時のフロー例を示す図である。図29において、省略可能なステップを破線で示している。
 ステップS401において、削除要求を行った削除対象ノードが属するグループ内のノード又は他ノードは、例えば検疫ネットワークを用いて、当該削除要求を許可するか否かを判定する。例えば、削除要求したノードを削除しても不整合等が発生しないかが判定される。
 削除要求が拒否(不許可)された場合(ステップS401:NO)、ステップS402において、削除対象ノードは、削除要求を再申請するか否かを判定する。ここで、不許可の原因を除去した上で再申請させるよう制限をかけてもよい。削除要求を再申請する場合(ステップS402:YES)、処理がステップS401に戻る。
 ステップS403において、削除対象ノードが親ノードであるか否かが判定される。削除対象ノードが親ノードではない場合(ステップS403:NO)、削除対象ノードよりも下の優先順位が1つ繰り上がり(ステップS404)、削除対象ノードがグループから削除される(S405)。なお、削除処理は、通常のトランザクションと同様に処理される。
 一方、削除対象ノードが親ノードである場合(ステップS403:YES)、当該グループ内のノードの優先順位が1つ繰り上がり(ステップS406)、削除対象ノードがグループから削除される(S407)。なお、削除処理は、通常のトランザクションと同様に処理される。そして、ステップS408において、上位階層グループのノードに、新たな親ノードの性能パラメータが展開(通知)される。ステップS409において、上位階層グループに属するノード(当該新たな親ノードを含む)は、上位階層グループにおける優先順位を決定する。当該新たな親ノードは、前回の親ノードよりも性能パラメータが低いため、上位階層グループで優先順位1位になることはないが、例外処理として2位以下にする条件を含めてもよい。
 (台帳ロックに関する動作フロー例)
 次に、図30乃至図38を参照して、実施形態に係る台帳ロックに関する動作フロー例について説明する。
 (1)台帳ロックのメイン処理
 図30は、実施形態に係る台帳ロックのメイン処理の一例を示す図である。
 ステップS501において、あるグループ200にノード100が参加した際に、当該グループ200の各ノード100は、新たに参加したノード100のメモリ余裕情報を、当該グループ200の台帳に格納する。
 ステップS502において、当該グループ200のノード100は、トランザクションを発生させ、トランザクションデータを生成する。
 ステップS503において、当該グループ200の各ノード100は、ステップS502で発生したトランザクションに応じて当該グループ200の台帳を更新し、ロックタイマをスタートして当該台帳をロックする。
 ステップS504において、当該グループ200のノード100は、トランザクションを発生させ、トランザクションデータを生成する。
 ステップS505において、ステップS504でトランザクションを発生させたノード100は、自ノード100にメモリ余裕があるか否かを判定する。
 自ノード100にメモリ余裕があると判定された場合(ステップS505:YES)、ステップS506において、当該ノード100は、トランザクションデータを自ノード100で保持する。
 一方、自ノード100にメモリ余裕がないと判定された場合(ステップS505:NO)、ステップS507において、当該ノード100は、メモリ余裕のある他ノード100を探す処理を実行する。当該処理の詳細については、図32を参照して後述する。
 ステップS508において、当該グループ200の各ノード100は、ロックタイマの満了を検知し、台帳ロックを解除し、ステップS503に処理を戻す。
 (2)トランザクションデータ処理
 図31は、実施形態に係るトランザクションデータ処理の一例を示す図である。
 ステップS601において、グループ200のノード100は、トランザクションを発生させ、トランザクションデータを生成する。
 ステップS602において、当該ノード100は、自ノード100の現在のメモリ残量を確認する。
 ステップS603において、当該ノード100は、当該メモリ残量が当該トランザクションデータのサイズ以上であるか否かを判定する。当該メモリ残量が当該トランザクションデータのサイズ以上と判定された場合(ステップS603:YES)、当該ノード100は、余裕フラグをONとし(ステップS604)、当該トランザクションデータを自ノード100で保持する。
 一方、当該メモリ残量が当該トランザクションデータのサイズ未満であると判定された場合(ステップS603:NO)、当該ノード100は、余裕フラグをOFFとし(ステップS606)、当該トランザクションデータ及び当該余裕フラグを他ノード100に送信する。
 (3)メモリ余裕のある他ノードを探す処理
 図32は、実施形態に係るメモリ余裕のある他ノード100を探す処理の一例を示す図である。
 ステップS701において、トランザクションを発生させたノード100は、自ノード100で保持する台帳(具体的には、自ノード100が属するグループ200の台帳)を確認し、余裕フラグ=ONの他ノード100を探す。
 ステップS702において、当該ノード100は、余裕フラグ=ONの他ノード100が自グループ200に存在するか否かを判定する。余裕フラグ=ONの他ノード100が存在しないと判定された場合(ステップS702:NO)、メモリ余裕のある他ノード100が自グループ200に存在しない場合の処理に進む(ステップS703)。当該処理の詳細については、図34を参照して後述する。
 一方、余裕フラグ=ONの他ノード100が存在すると判定された場合(ステップS702:YES)、ステップS704において、当該ノード100は、余裕フラグ=ONの他ノード100にトランザクションデータ及び余裕フラグを送信する。そして、余裕フラグ=ONの他ノード100からAckが返信された場合(ステップS705:YES)、当該処理が終了する。
 余裕フラグ=ONの他ノード100からAckが返信されない場合(ステップS705:NO)、ステップS706において、ほかに余裕フラグ=ONの他ノード100が自グループ200に存在するか否かを判定する。ほかに余裕フラグ=ONの他ノード100が自グループ200に存在しないと判定された場合(ステップS706:NO)、メモリ余裕のある他ノード100が自グループ200に存在しない場合の処理に進む(ステップS707)。当該処理の詳細については、図34を参照して後述する。
 ほかに余裕フラグ=ONの他ノード100が自グループ200に存在すると判定された場合(ステップS706:YES)、当該ノード100は、ステップS704に処理を戻し、当該他ノード100にトランザクションデータ及び余裕フラグを送信する。
 (4)メモリ余裕のあるノード側の処理
 図33は、実施形態に係るメモリ余裕のあるノード100側の処理の一例を示す図である。
 ステップS800において、メモリ余裕のあるノード100は、トランザクションデータを受け取る。但し、当該ノード100がスリープ中であるような場合は当該トランザクションデータを受け取り不可である。
 ステップS801において、当該ノード100は、当該トランザクションデータに対して返信可能か否かを判定する。返信が不可である場合(ステップS801:NO)、当該ノード100は、返信せずに無視する(ステップS802)。
 返信が可能である場合(ステップS801:YES)、ステップS803において、トランザクションデータを受け取ることができたか否かを判定する。トランザクションデータを受け取ることができなかった場合(ステップS803:NO)、当該ノード100は、Nakを返信する(ステップS804)。
 トランザクションデータを受け取ることができた場合(ステップS803:YES)、当該ノード100は、Ackを返信する(ステップS805)。その後、ロックタイマが満了すると、当該ノード100は、プロポーザにトランザクションデータを渡す(ステップS806)。但し、当該ノード100がプロポーザである場合、当該ノード100は、トランザクションデータを用いて自ノード100で新たなブロックを生成する。
 (5)メモリ余裕のある他ノードが存在しない場合の処理
 図34は、実施形態に係るメモリ余裕のある他ノード100が自グループ200内に存在しない場合の処理の一例を示す図である。
 パターン1では、ステップS901において、トランザクションを発生させたノード100は、トランザクションデータを外部データベース(DB)に渡す。
 パターン2では、次のステップS911乃至915の処理を行う。具体的には、ステップS911において、トランザクションを発生させたノード100は、自ノード100が属する自グループ200の親ノード100にトランザクションデータを渡す。但し、自ノード100が当該親ノード100である場合、ステップS911は省略される。
 当該親ノード100は、トランザクションを発生させたノード100が属するグループ200の階層の1階層上の親グループ200の親台帳を確認し(ステップS912)、親グループ200内でメモリ余裕のあるノード100を探す(ステップS913)。
 その後、ステップS914において、ロックタイマが満了すると、親グループ200内でメモリ余裕のあるノード100から当該親ノード100に対してトランザクションデータを渡す。当該親ノード100は、トランザクションを発生させたノード100が属するグループ200(子グループ)内のプロポーザにトランザクションデータを渡す(ステップS915)。
 (6)複数の子グループの台帳が更新された場合の処理
 図35は、実施形態に係る複数の子グループの台帳(子台帳)が更新された場合の処理の一例を示す図である。ここでは、2つの子グループ(「子1」及び「子2」と称する)においてトランザクションが発生する場合を想定する。
 ステップS1001において、子1のノード100でトランザクションが発生する。
 ステップS1002において、子1のノード100は、親グループ100の最新の親台帳から台帳情報を取得する。また、当該親台帳のロックが開始する。
 ステップS1003において、子1のノード100は、子1の台帳の更新処理を開始する。
 子1の台帳の更新処理が完了していない場合(ステップS1004:NO)において、子2のノード100でトランザクションが発生する(ステップS1005)。ここで、親台帳がロック中でない場合(ステップS1006:NO)、ステップS1007において、子2のノード100は、親グループ100の最新の親台帳から台帳情報を取得し、子2の台帳を更新する。また、当該親台帳がロックされる。親台帳がロック中である場合(ステップS1006:YES)、ステップS1008において、子1のノード100は、子1の台帳の更新処理を行う。但し、親台帳がロック中でない場合(ステップS1009:NO)、子1及び子2共に、台帳更新に失敗する。親台帳がロック中である場合(ステップS1009:YES)、処理がステップS1015に進む。
 或いは、子1の台帳の更新処理が完了している場合(ステップS1004:YES)において、子2のノード100でトランザクションが発生する(ステップS1011)。ここで、親台帳がロック中でない場合(ステップS1012:NO)、ステップS1013において、子2のノード100は、親グループ100の最新の親台帳から台帳情報を取得し、子2の台帳を更新する。また、当該親台帳がロックされる。親台帳がロック中である場合(ステップS1012:YES)、ステップS1014において、子2のノード100は、子2の台帳の更新処理を行う。ここで、親台帳がロック中でない場合(ステップS1015:NO)、子2は台帳更新に失敗する(ステップS1016)。親台帳がロック中である場合(ステップS1015:YES)、子1及び子2共に、台帳更新に成功(完了)する(ステップS1017)。
 (7)子グループの台帳が複数回更新された場合の処理
 図36は、実施形態に係る子グループの台帳が複数回更新された場合の処理の一例を示す図である。
 ステップS1101において、子1のノード100でトランザクションが発生する。
 ステップS1102において、子1のノード100は、親グループ100の最新の親台帳から台帳情報を取得する。
 ステップS1103において、子1のノード100は、子1の台帳の更新処理を開始する。ここで、親台帳がロック中でない場合(ステップS1104:NO)、子1の台帳更新に失敗する(ステップS1105)。親台帳がロック中である場合(ステップS1104:YES)、ステップS1106において、子1の台帳の更新処理が完了する。
 ステップS1107において、子1のノード100でトランザクションが発生する。
 ステップS1108において、子1のノード100は、親グループ100の最新の親台帳から台帳情報を取得する。
 ステップS1109において、子1のノード100は、子1の台帳の更新処理を開始する。ここで、親台帳がロック中でない場合(ステップS1109:NO)、子1の台帳更新に失敗する(ステップS1110)。親台帳がロック中である場合(ステップS1109:YES)、ステップS1111において、子1の台帳の更新処理が完了する。その後、処理がステップS1107に戻る。
 (8)子台帳更新失敗に関する処理
 図37は、実施形態に係る子台帳更新失敗時の処理の一例を示す図である。
 ステップS1200において、ある子グループ200で台帳更新に失敗する。
 ステップS1201において、当該子グループ200のノード100は、当該子グループ200で新たなトランザクションがあるか判定する。当該子グループ200で新たなトランザクションがある場合(ステップS1201:YES)、ステップS1202において、当該子グループ200のノード100(プロポーザ)は、当該新たなトランザクションを追加して新たなブロックを生成し、処理がステップS1203に進む。当該子グループ200で新たなトランザクションがない場合(ステップS1201:NO)、処理がステップS1203に進む。
 ステップS1203において、当該子グループ200のノード100は、親グループ100の最新の親台帳から台帳情報を取得し、当該子グループ200の更新処理を再度開始する。ここで、親台帳がロック中である場合(ステップS1204:YES)、当該子グループ200のノード100は、自ノード100で管理する連続失敗フラグ=OFFとし(ステップS1205)、当該子グループ200の台帳の更新処理が成功(完了)する(ステップS1206)。
 一方、親台帳がロック中でない場合(ステップS1204:NO)、ステップS1207において、当該子グループ200のノード100は、自ノード100で管理する連続失敗フラグ=ONであるか判定する。連続失敗フラグ=ONでない場合(ステップS1207:NO)、ステップS1208において、当該子グループ200のノード100は、連続失敗フラグ=ONとする。連続失敗フラグ=ONである場合(ステップS1207:YES)、ステップS1209において、親グループ200のノード100は、親グループ200のロックタイマを延長する。
 (9)子台帳更新処理
 図38は、実施形態に係る子台帳更新処理の一例を示す図である。
 ステップS1301において、子グループ200のノード100(プロポーザ)は、当該新たなトランザクションを追加して新たなブロックを生成する。ここでは、当該新たなブロックは確定していない状態である。
 ステップS1302において、当該子グループ200のノード100は、親グループ200に更新情報(当該子グループ200の台帳情報)を通知する。
 ステップS1303において、当該子グループ200のノード100は、当該親グループ200の台帳に当該子グループ200の台帳情報が追加された旨の連絡を受けたか否かを判定する。当該連絡を受けない場合(ステップS1303:NO)、ステップS1304において、当該子グループ200の台帳更新が失敗する。
 当該連絡を受けた場合(ステップS1303:YES)、ステップS1305において、当該子グループ200の新たなブロックが確定し、台帳更新が成功する。
 (その他の実施形態)
 上述の実施形態において、ノード100がバッテリ駆動型の機器であることを主として想定している。しかしながら、階層構造ネットワーク10には、外部電源駆動型の機器が含まれていてもよい。例えば、外部電源と接続された機器は、階層構造ネットワーク10において最上位階層に配置されてもよい。
 上述の各動作フローは、別個独立に実施する場合に限らず、2以上の動作フローを組み合わせて実施可能である。例えば、1つの動作フローの一部のステップを他の動作フローに追加してもよいし、1つの動作フローの一部のステップを他の動作フローの一部のステップと置換してもよい。また、上述の各動作フローにおけるステップの順番は一例であって、ステップの順番は適宜変更してもよい。
 ノード100が行う各処理をコンピュータに実行させるプログラムが提供されてもよい。プログラムは、コンピュータ読取り可能媒体に記録されていてもよい。コンピュータ読取り可能媒体を用いれば、コンピュータにプログラムをインストールすることが可能である。ここで、プログラムが記録されたコンピュータ読取り可能媒体は、非一過性の記録媒体であってもよい。非一過性の記録媒体は、特に限定されるものではないが、例えば、CD-ROM又はDVD-ROM等の記録媒体であってもよい。また、ノード100が行う各処理を実行する回路を集積化し、ノード100の少なくとも一部を半導体集積回路(チップセット、SoC:System on a chip)として構成してもよい。
 本開示で使用する「に基づいて」、「に応じて」という記載は、別段に明記されていない限り、「のみに基づいて」、「のみに応じて」を意味しない。「に基づいて」という記載は、「のみに基づいて」及び「に少なくとも部分的に基づいて」の両方を意味する。同様に、「に応じて」という記載は、「のみに応じて」及び「に少なくとも部分的に応じて」の両方を意味する。また、「含む(include)」、「備える(comprise)」、及びそれらの変形の用語は、列挙する項目のみを含むことを意味せず、列挙する項目のみを含んでもよいし、列挙する項目に加えてさらなる項目を含んでもよいことを意味する。また、本開示において使用されている用語「又は(or)」は、排他的論理和ではないことが意図される。さらに、本開示で使用した「第1」、「第2」などの呼称を使用した要素へのいかなる参照も、それらの要素の量又は順序を全般的に限定するものではない。これらの呼称は、2つ以上の要素間を区別する便利な方法として本明細書で使用され得る。したがって、第1及び第2の要素への参照は、2つの要素のみがそこで採用され得ること、又は何らかの形で第1の要素が第2の要素に先行しなければならないことを意味しない。本開示において、例えば、英語でのa,an,及びtheのように、翻訳により冠詞が追加された場合、これらの冠詞は、文脈から明らかにそうではないことが示されていなければ、複数のものを含むものとする。
 以上、図面を参照して実施形態について詳しく説明したが、具体的な構成は上述のものに限られることはなく、要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
 本願は、日本国特許出願第2022-104031号(2022年6月28日出願)の優先権を主張し、その内容の全てが本願明細書に組み込まれている。
 (付記)
 上述の実施形態に関する特徴について付記する。
 (付記1)
 階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムであって、
 最下位階層と異なる第1階層の第1グループに属するノードは、
  前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理し、
  前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行い、
  前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する台帳情報を前記第1台帳に含めるように前記第1台帳を更新する
 ブロックチェーンシステム。
 (付記2)
 前記第1グループに属するノードは、前記第2台帳を示すチェーンID、前記第2台帳の新たなブロックから計算されるハッシュ値、及び前記新たなブロックのブロック番号を示すブロックハイトのうち、少なくとも1つを前記台帳情報として前記第1台帳に含める
 付記1に記載のブロックチェーンシステム。
 (付記3)
 前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、
  当該トランザクションに関するトランザクションデータを保持するためのメモリ容量の余裕が当該自ノードにある場合、当該トランザクションデータを保持し、
  前記余裕が当該自ノードにない場合、前記余裕のある他ノードに当該トランザクションデータを保持させる
 付記1又は2に記載のブロックチェーンシステム。
 (付記4)
 前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、前記余裕が当該自ノードにない場合であって、且つ、前記余裕のある他ノードが前記第1グループに存在しない場合、前記第1階層の上位の階層のグループに属する他ノードに前記トランザクションデータを保持させる
 付記3に記載のブロックチェーンシステム。
 (付記5)
 前記複数のノードは、前記第1台帳を更新するための新たなブロックを生成するノードであるプロポーザを含み、
 前記第1グループに属するノードは、自ノードが前記プロポーザではない場合、当該自ノードで保持している前記トランザクションデータを前記ロック期間が終了したときに前記プロポーザに送信する
 付記3又は4に記載のブロックチェーンシステム。
 (付記6)
 前記第1台帳は、前記第1グループに属する各ノードのメモリ容量に関するメモリ余裕情報を含み、
 前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、前記余裕が当該自ノードにない場合、前記第1台帳に含まれる前記メモリ余裕情報に基づいて、前記トランザクションデータを保持させる前記他ノードを前記第1グループの中から決定する
 付記3乃至5のいずれかに記載のブロックチェーンシステム。
 (付記7)
 前記第1グループに属するノードは、前記第1グループに新たなノードが参加することに応じて、前記新たなノードのメモリ容量に関する情報を前記メモリ余裕情報に含めるように前記第1台帳を更新する
 付記6に記載のブロックチェーンシステム。
 (付記8)
 前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、前記余裕が当該自ノードにない場合、前記余裕が当該自ノードにないことを示すフラグ情報を前記トランザクションデータと共に前記他ノードに送信し、
 前記フラグ情報は、前記メモリ余裕情報の一部として前記第1グループ内で管理される
 付記6又は7に記載のブロックチェーンシステム。
 (付記9)
 前記第2グループに属するノードは、
  前記第2台帳が更新されてからロック期間にわたって前記第2台帳を更新しないよう台帳ロックを行い、
  前記ロック期間が終了したときに、前記第2階層の下位の階層のグループで管理する台帳が前記ロック期間内で更新されている場合、当該更新された台帳に関する情報を前記第2台帳に含めるように前記第2台帳を更新し、
 前記第1グループで用いる前記ロック期間は、前記第2グループで用いる前記ロック期間よりも短い
 付記1乃至8のいずれかに記載のブロックチェーンシステム。
 (付記10)
 前記第1グループで用いる前記ロック期間は、前記第2台帳の更新処理に要する台帳更新処理時間よりも長い
 付記9に記載のブロックチェーンシステム。
 (付記11)
 前記第2グループに属するノードは、前記第2台帳の更新処理中に前記第1台帳が更新されたことを検知した場合、前記第2台帳の更新失敗とみなして、前記第2台帳の更新処理を再度行う
 付記1乃至10のいずれかに記載のブロックチェーンシステム。
 (付記12)
 前記第1グループに属するノードは、前記第2台帳の更新失敗が所定回数だけ連続して発生した場合、前記第1グループで用いる前記ロック期間を延長する
 付記11に記載のブロックチェーンシステム。
 (付記13)
 前記第2階層は、前記第2グループと、第3グループとを含み、
 前記第1グループに属するノードは、前記ロック期間が終了したときに、前記第2グループで管理する第2台帳と前記第3グループで管理する第3台帳とが前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報と当該更新された第3台帳に関する情報とを前記第1台帳に含めるように前記第1台帳を更新する
 付記1乃至12のいずれかに記載のブロックチェーンシステム。
 (付記14)
 前記複数のノードのそれぞれは、当該ノードの性能に基づいて、前記階層構造における複数の階層のうち当該性能に応じた階層に配置される
 付記1乃至13のいずれかに記載のブロックチェーンシステム。
 (付記15)
 前記第1グループに属するノードは、前記第2グループに属するノードに比べて高い性能を有する
 付記14に記載のブロックチェーンシステム。
 (付記16)
 前記第1グループに属するノードは、前記第1グループ内のトランザクション及び前記第2グループ内のトランザクションのそれぞれに応じて前記第1台帳を更新し、
 前記第2グループに属するノードは、前記第1グループ内のトランザクションに応じて前記第2台帳を更新せずに、前記第2グループ内のトランザクションに応じて前記第2台帳を更新する
 付記1乃至15のいずれかに記載のブロックチェーンシステム。
 (付記17)
 階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて最下位階層と異なる第1階層の第1グループに属するノードであって、
 前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理する処理と、
 前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う処理と、
 前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報を前記第1台帳に含めるように前記第1台帳を更新する処理と、を実行するプロセッサを備える
 ノード。
 (付記18)
 階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて最下位階層と異なる第1階層の第1グループに属するノードに、
 前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理する処理と、
 前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う処理と、
 前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報を前記第1台帳に含めるように前記第1台帳を更新する処理と、を実行させる
 プログラム。
 10    :階層構造ネットワーク
 100   :ノード
 110   :通信部
 120   :制御部
 121   :プロセッサ
 130   :記憶部
 140   :バッテリ
 200   :グループ

Claims (18)

  1.  階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムであって、
     最下位階層と異なる第1階層の第1グループに属するノードは、
      前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理し、
      前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行い、
      前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する台帳情報を前記第1台帳に含めるように前記第1台帳を更新する
     ブロックチェーンシステム。
  2.  前記第1グループに属するノードは、前記第2台帳を示すチェーンID、前記第2台帳の新たなブロックから計算されるハッシュ値、及び前記新たなブロックのブロック番号を示すブロックハイトのうち、少なくとも1つを前記台帳情報として前記第1台帳に含める
     請求項1に記載のブロックチェーンシステム。
  3.  前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、
      当該トランザクションに関するトランザクションデータを保持するためのメモリ容量の余裕が当該自ノードにある場合、当該トランザクションデータを保持し、
      前記余裕が当該自ノードにない場合、前記余裕のある他ノードに当該トランザクションデータを保持させる
     請求項1に記載のブロックチェーンシステム。
  4.  前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、前記余裕が当該自ノードにない場合であって、且つ、前記余裕のある他ノードが前記第1グループに存在しない場合、前記第1階層の上位の階層のグループに属する他ノードに前記トランザクションデータを保持させる
     請求項3に記載のブロックチェーンシステム。
  5.  前記複数のノードは、前記第1台帳を更新するための新たなブロックを生成するノードであるプロポーザを含み、
     前記第1グループに属するノードは、自ノードが前記プロポーザではない場合、当該自ノードで保持している前記トランザクションデータを前記ロック期間が終了したときに前記プロポーザに送信する
     請求項3に記載のブロックチェーンシステム。
  6.  前記第1台帳は、前記第1グループに属する各ノードのメモリ容量に関するメモリ余裕情報を含み、
     前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、前記余裕が当該自ノードにない場合、前記第1台帳に含まれる前記メモリ余裕情報に基づいて、前記トランザクションデータを保持させる前記他ノードを前記第1グループの中から決定する
     請求項3に記載のブロックチェーンシステム。
  7.  前記第1グループに属するノードは、前記第1グループに新たなノードが参加することに応じて、前記新たなノードのメモリ容量に関する情報を前記メモリ余裕情報に含めるように前記第1台帳を更新する
     請求項6に記載のブロックチェーンシステム。
  8.  前記第1グループに属するノードは、自ノードにおけるトランザクションが前記ロック期間内で発生したときに、前記余裕が当該自ノードにない場合、前記余裕が当該自ノードにないことを示すフラグ情報を前記トランザクションデータと共に前記他ノードに送信し、
     前記フラグ情報は、前記メモリ余裕情報の一部として前記第1グループ内で管理される
     請求項6に記載のブロックチェーンシステム。
  9.  前記第2グループに属するノードは、
      前記第2台帳が更新されてからロック期間にわたって前記第2台帳を更新しないよう台帳ロックを行い、
      前記ロック期間が終了したときに、前記第2階層の下位の階層のグループで管理する台帳が前記ロック期間内で更新されている場合、当該更新された台帳に関する情報を前記第2台帳に含めるように前記第2台帳を更新し、
     前記第1グループで用いる前記ロック期間は、前記第2グループで用いる前記ロック期間よりも短い
     請求項1に記載のブロックチェーンシステム。
  10.  前記第1グループで用いる前記ロック期間は、前記第2台帳の更新処理に要する台帳更新処理時間よりも長い
     請求項9に記載のブロックチェーンシステム。
  11.  前記第2グループに属するノードは、前記第2台帳の更新処理中に前記第1台帳が更新されたことを検知した場合、前記第2台帳の更新失敗とみなして、前記第2台帳の更新処理を再度行う
     請求項1に記載のブロックチェーンシステム。
  12.  前記第1グループに属するノードは、前記第2台帳の更新失敗が所定回数だけ連続して発生した場合、前記第1グループで用いる前記ロック期間を延長する
     請求項11に記載のブロックチェーンシステム。
  13.  前記第2階層は、前記第2グループと、第3グループとを含み、
     前記第1グループに属するノードは、前記ロック期間が終了したときに、前記第2グループで管理する第2台帳と前記第3グループで管理する第3台帳とが前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報と当該更新された第3台帳に関する情報とを前記第1台帳に含めるように前記第1台帳を更新する
     請求項1に記載のブロックチェーンシステム。
  14.  前記複数のノードのそれぞれは、当該ノードの性能に基づいて、前記階層構造における複数の階層のうち当該性能に応じた階層に配置される
     請求項1乃至13のいずれか1項に記載のブロックチェーンシステム。
  15.  前記第1グループに属するノードは、前記第2グループに属するノードに比べて高い性能を有する
     請求項14に記載のブロックチェーンシステム。
  16.  前記第1グループに属するノードは、前記第1グループ内のトランザクション及び前記第2グループ内のトランザクションのそれぞれに応じて前記第1台帳を更新し、
     前記第2グループに属するノードは、前記第1グループ内のトランザクションに応じて前記第2台帳を更新せずに、前記第2グループ内のトランザクションに応じて前記第2台帳を更新する
     請求項1乃至13のいずれか1項に記載のブロックチェーンシステム。
  17.  階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて最下位階層と異なる第1階層の第1グループに属するノードであって、
     前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理する処理と、
     前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う処理と、
     前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報を前記第1台帳に含めるように前記第1台帳を更新する処理と、を実行するプロセッサを備える
     ノード。
  18.  階層構造を有するネットワークを複数のノードにより形成するブロックチェーンシステムにおいて最下位階層と異なる第1階層の第1グループに属するノードに、
     前記第1グループ内のトランザクションに関するトランザクションデータを含む第1台帳を管理する処理と、
     前記第1台帳が更新されてからロック期間にわたって前記第1台帳を更新しないよう台帳ロックを行う処理と、
     前記ロック期間が終了したときに、前記第1階層の下位の第2階層の第2グループで管理する第2台帳が前記ロック期間内で更新されている場合、当該更新された第2台帳に関する情報を前記第1台帳に含めるように前記第1台帳を更新する処理と、を実行させる
     プログラム。
PCT/JP2023/023012 2022-06-28 2023-06-21 ブロックチェーンシステム、ノード、及びプログラム WO2024004792A1 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2022-104031 2022-06-28
JP2022104031 2022-06-28

Publications (1)

Publication Number Publication Date
WO2024004792A1 true WO2024004792A1 (ja) 2024-01-04

Family

ID=89382254

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2023/023012 WO2024004792A1 (ja) 2022-06-28 2023-06-21 ブロックチェーンシステム、ノード、及びプログラム

Country Status (1)

Country Link
WO (1) WO2024004792A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111324449A (zh) * 2019-12-13 2020-06-23 杭州复杂美科技有限公司 内存池的交易存储和广播方法、设备和存储介质
US20210044426A1 (en) * 2016-06-28 2021-02-11 Amazon Technologies, Inc. Aws identity - blockchain for cloud based audit services
CN113553375A (zh) * 2021-07-12 2021-10-26 华中科技大学 一种面向图式区块链的分片存储装置及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210044426A1 (en) * 2016-06-28 2021-02-11 Amazon Technologies, Inc. Aws identity - blockchain for cloud based audit services
CN111324449A (zh) * 2019-12-13 2020-06-23 杭州复杂美科技有限公司 内存池的交易存储和广播方法、设备和存储介质
CN113553375A (zh) * 2021-07-12 2021-10-26 华中科技大学 一种面向图式区块链的分片存储装置及方法

Similar Documents

Publication Publication Date Title
CN111183625B (zh) 用于在区块链网络中删除节点的系统和方法
CN111061769B (zh) 一种区块链系统的共识方法及相关设备
TWI743881B (zh) 用於在區塊鏈網路中添加節點的系統和方法
Mazieres The stellar consensus protocol: A federated model for internet-level consensus
CN105393239B (zh) 隔离分布式存储系统的客户端
JP4241940B2 (ja) 分散形データベース内でトランザクションをするための方法
CN107332847A (zh) 一种基于区块链的访问控制方法和系统
WO2021196350A1 (zh) 区块链Raft+PBFT的混合共识网络算法及系统
CN108492103A (zh) 一种联盟区块链共识方法
CN106708653B (zh) 一种基于纠删码与多副本的混合税务大数据安全保护方法
CN107735774A (zh) 一种smr感知只追加文件系统
CN112651724A (zh) 跨链交互方法、装置和系统
CN110298754A (zh) 一种应用于区块链的共识方法
Lloyd et al. Don’t Settle for Eventual Consistency: Stronger properties for low-latency geo-replicated storage
CN112579261A (zh) 退出跨片事务的方法和系统、主链节点和目标分片节点
CN101689166A (zh) 使用具有全局知识的服务器处理写请求
JP2022164563A (ja) トランザクションシーケンスコンセンサス方法及びシステム
CN112529596A (zh) 一种基于区块链的电池溯源系统和方法
CN112261160B (zh) 包含分片的区块链系统中退出跨片事务的方法及系统
WO2024004792A1 (ja) ブロックチェーンシステム、ノード、及びプログラム
JP7416768B2 (ja) 分散コンピューティング環境で分散調整エンジンを非破壊的にアップグレードする方法、装置およびシステム
CN112200573A (zh) 一种可回滚的区块链交易设计方法
WO2023127530A1 (ja) システム、ノード、及びプログラム
CN115037472B (zh) 基于双层dag共识机制的交易处理方法及系统、服务设备
CN115878625A (zh) 数据处理方法和装置及电子设备

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 23831238

Country of ref document: EP

Kind code of ref document: A1