JP2020504927A - イベントの削除を可能にする分散データベースのための方法および装置 - Google Patents

イベントの削除を可能にする分散データベースのための方法および装置 Download PDF

Info

Publication number
JP2020504927A
JP2020504927A JP2019525948A JP2019525948A JP2020504927A JP 2020504927 A JP2020504927 A JP 2020504927A JP 2019525948 A JP2019525948 A JP 2019525948A JP 2019525948 A JP2019525948 A JP 2019525948A JP 2020504927 A JP2020504927 A JP 2020504927A
Authority
JP
Japan
Prior art keywords
event
events
distributed database
received
instance
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
JP2019525948A
Other languages
English (en)
Other versions
JP7211943B2 (ja
Inventor
シー.,3世 ベアード,リーモン
シー.,3世 ベアード,リーモン
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 JP2020504927A publication Critical patent/JP2020504927A/ja
Application granted granted Critical
Publication of JP7211943B2 publication Critical patent/JP7211943B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • 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/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】リーダーまたは信頼される第三者がデータベース・システムを運営することを要求しない、分散データベース・システムのための方法および装置の提供。【解決手段】装置は、計算デバイスの第1のグループ内に含まれるように構成された計算デバイスにある分散データベースのインスタンスに関連するメモリを含む。この装置は、イベントの集合からの各イベントの順序を、イベント同意プロトコルの異なる構成に基づいて判定するように構成される。異なる構成は、分散データベースを実施する計算デバイスの異なる構成に論理的に関係付けられる。この装置は、イベントの集合からの各イベントの判定された順序に基づいて、分散データベースのインスタンスの現在の状態を判定し、現在の状態に関連するハッシュ値に基づいて、分散データベースのインスタンスに関連する署名付き状態を生成するように構成される。この装置は、署名付き状態を示すトランザクションを含むイベントを分散データベースのインスタンスにポストするために信号を送る。【選択図】図13

Description

関連特許出願の相互参照
[1001] 本願は、参照によってその全体が本明細書に組み込まれている、2016年12月19日に出願した米国特許仮出願第62/436066号、名称「METHODS AND APPARATUS FOR A DISTRIBUTED DATABASE THAT ENABLES DELETION OF EVENTS」の優先権を主張するものである。
[1002] 本明細書で説明される実施形態は、全般的にはデータベース・システムに関し、より具体的には、ネットワーク内の複数のデバイスにまたがってデータベース・システムを実施する方法および装置に関する。
[1003] 一部の既知の分散データベース・システムは、分散データベース・システム内の値に関する同意(たとえば、トランザクションが発生する順序に関する)を達成することを試みる。たとえば、オンライン・マルチプレイヤ・ゲームは、ユーザがゲームをプレイするためにアクセスできる多数のコンピュータ・サーバを有する場合がある。2人のユーザが、ゲーム内で特定のアイテムを同時に拾い上げることを試みる場合には、分散データベース・システム内のサーバが、2人のユーザのどちらが最初にそのアイテムを拾い上げたのかに関する合意に最終的に達することが重要である。
[1004] そのような分散同意は、Paxosアルゴリズムまたはその変形形態などの方法および/またはプロセスによって処理され得る。そのような方法および/またはプロセスの下では、データベース・システムの1つのサーバが、「リーダー」としてセット・アップされ、このリーダーが、イベントの順序を決定する。イベント(たとえば、マルチプレイヤ・ゲーム内の)は、リーダーに転送され、リーダーは、イベントの順序付けを選択し、リーダーは、その順序付けをデータベース・システムの他のサーバにブロードキャストする。
[1005] しかし、そのような既知の手法は、データベース・システムのユーザ(たとえば、ゲーム・プレイヤ)によって信頼される当事者によって運営されるサーバ(たとえば、中央管理サーバ)を使用する。したがって、リーダーまたは信頼される第三者がデータベース・システムを運営することを要求しない、分散データベース・システムのための方法および装置の必要が存在する。
[1006] 他の分散データベースは、リーダーを有しないように設計されるが、非効率的である。たとえば、1つのそのような分散データベースは、同意を達成することのできる「ブロックチェーン」データ構造に基づく。しかし、そのようなシステムは、参加者全員に関して、合計で少数のトランザクション毎秒(たとえば、7トランザクション毎秒)に制限される可能性があり、これは、大規模なゲームまたはデータベースの多数の伝統的なアプリケーションにとって不十分である。さらに、経時的なデータベースのスケールの増大は、計算リソースの使用を増加させる可能性があり、たとえば、メモリ・リソースは、冗長なデータまたは不必要なデータを記憶するときに、管理しにくく、かつ/または十分に活用されなくなる可能性がある。したがって、リーダーなしで同意を達成し、計算リソースの管理において効率的な分散データベース・システムの必要が存在する。
[1007] いくつかの実施形態では、装置は、計算デバイス(compute device)の第1の群内に含まれるように構成された計算デバイスにある分散データベースのインスタンスに関連するメモリを含む。この装置は、イベントの集合からの各イベントの順序を、イベント同意プロトコルの異なる構成に基づいて判定するように構成される。異なる構成は、分散データベースを実施する計算デバイスの異なる構成に論理的に関係付けられる。この装置は、イベントの集合からの各イベントの判定された順序に基づいて、分散データベースのインスタンスの現在の状態を判定し、現在の状態に関連するハッシュ値に基づいて、分散データベースのインスタンスに関連する署名付き状態を生成するように構成される。この装置は、署名付き状態を示すトランザクションを含むイベントを分散データベースのインスタンスにポストするために信号を送る。
[1008]一実施形態による、分散データベース・システムを示す高水準ブロック図である。 [1009]一実施形態による、分散データベース・システムの計算デバイスを示すブロック図である。 [1010]一実施形態による、ハッシュグラフの例を示す図である。 [1010]一実施形態による、ハッシュグラフの例を示す図である。 [1010]一実施形態による、ハッシュグラフの例を示す図である。 [1010]一実施形態による、ハッシュグラフの例を示す図である。 [1011]一実施形態による、第1の計算デバイスと第2の計算デバイスとの間の通信フローを示すフロー図である。 [1012]一実施形態による、ハッシュグラフの例を示す図である。 [1013]一実施形態による、ハッシュグラフの例を示す図である。 [1014]一実施形態による、ハッシュグラフと共に使用される例の同意方法を示す図である。 [1014]一実施形態による、ハッシュグラフと共に使用される例の同意方法を示す図である。 [1015]一実施形態による、ハッシュグラフと共に使用される例の同意方法を示す図である。 [1015]一実施形態による、ハッシュグラフと共に使用される例の同意方法を示す図である。 [1016]別の実施形態による、ハッシュグラフと共に使用される例の同意方法を示す図である。 [1016]別の実施形態による、ハッシュグラフと共に使用される例の同意方法を示す図である。 [1017]一実施形態による、分散データベースの初期状態の表現を示す図である。 [1018]一実施形態による、分散データベースのメンバの更新、追加、除去に関連する動作の例を示す流れ図である。 [1019]一実施形態による、受信されたラウンドに基づくイベントの受諾および拒絶を示す流れ図である。 [1020]一実施形態による、分散データベースの2つのメンバの間での同期化プロセスを示す流れ図である。
[1021] いくつかの実施形態では、装置は、分散データベースを実施する計算デバイスの集合内に含まれるように構成された計算デバイスにある分散データベースのインスタンスを含む。この装置は、対の集合の関数として生成される一意識別子の指定によって保護される分散データベースの初期状態を定義するように構成されたプロセッサをも含み、各対は、分散データベースのインスタンスに関連する公開鍵およびランダム化された値を含む。分散データベースは、分散データベースを実施する計算デバイスの集合によって署名された収束状態に基づいて、分散データベースの現在の状態および将来の状態に関係しないイベントが、計算デバイスの集合の間で交換されなくなるように、分散データベースのインスタンスの間でイベントを同期化するように構成される。プロセッサは、分散データベースの署名付きの状態を定義することによって、分散データベースのインスタンスから不必要なイベントを除去するようにも構成される。これは、分散データベースを実施する計算デバイスの集合の間で冗長なイベントまたは関連しないイベントを同期化することによって引き起こされるオーバーヘッドを減らす。これは、計算デバイスのそのような集合のローカル・メモリの不十分な活用をも減らす。
[1022] いくつかの実施形態では、装置は、計算デバイスの群に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの群内に含まれるように構成された計算デバイスにある分散データベースのインスタンスに関連するメモリを含む。分散データベースに関連するイベント同意プロトコルの第1の構成に関連する計算デバイスの群。この装置は、メモリに動作可能に結合されたプロセッサを含む。プロセッサは、計算デバイスの群からの計算デバイスの集合から、イベントの集合を受信するように構成される。イベントの集合からの各イベントは、(1)トランザクションの集合と(2)受信されたラウンド番号とに関連する。プロセッサは、イベントの集合からの各イベントの順序を(1)そのイベントに関連する受信されたラウンド番号が分散データベースのインスタンスによって識別された受信されたラウンド番号しきい値を超えないときには、イベント同意プロトコルの第1の構成に、(2)そのイベントに関連する受信されたラウンド番号が受信されたラウンド番号しきい値を超えるときには、イベント同意プロトコルの第2の構成に基づいて判定するように構成される。このプロセッサは、イベントの集合からの各イベントの判定された順序に基づいて、分散データベースのインスタンスの現在の状態を判定するように構成される。このプロセッサは、現在の状態に関連するハッシュ値に基づいて、分散データベースのインスタンスに関連する署名付き状態を生成するように構成される。ハッシュ値は、第1の計算デバイスに関連する秘密鍵を用いてデジタル署名される。このプロセッサは、署名付き状態を示すトランザクションを含むイベントを分散データベースのインスタンスにポストするために信号を送るようにさらに構成される。
[1023] いくつかの実施形態では、装置は、計算デバイスの群に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの群内に含まれるように構成された第1の計算デバイスにある分散データベースのインスタンスに関連するメモリを含む。この装置は、メモリに動作可能に結合されたプロセッサを含む。プロセッサは、計算デバイスの群からの第2の計算デバイスからイベントを受信するように構成される。イベントは、親イベントの集合に関連するバイトのシーケンスである。親イベントの集合からの各親イベントは、(1)ハッシュ値と(2)作成済みラウンド値とに関連する。このプロセッサは、第1の判断基準または第2の判断基準のうちの少なくとも1つが満足されるときに、イベントの順序の判定から受信されたイベントを除外するように構成される。第1の判断基準は、(1)親イベントの集合からの少なくとも1つの親イベントが、分散データベースのインスタンス内に識別子を有しておらず、かつ、(2)少なくとも1つの親イベントが、第1の作成済みラウンドしきい値を超える作成済みラウンド値に関連するときに満足される。第2の判断基準は、(1)第1の判断基準が満足されず、かつ、(2)親イベントの集合からの各親イベントが、第2の作成済みラウンドしきい値未満の作成済みラウンド値に関連するときに満足される。このプロセッサは、イベントが第1の判断基準または第2の判断基準に基づいて除外されなかったときに、分散データベースのインスタンス内にイベントを記憶するようにさらに構成される。
[1024] いくつかの実施形態では、装置は、計算デバイスの群に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの群内に含まれるように構成された第1の計算デバイスにある分散データベースのインスタンスに関連するメモリを含む。この装置は、メモリに動作可能に結合されたプロセッサを含む。プロセッサは、計算デバイスの群からの第2の計算デバイスによって定義されるイベントの群からのイベントの第1の集合の表示をメモリ内に記憶するように構成される。イベントの群からの各イベントは、(1)シーケンス値と(2)トランザクションの順序集合とに関連するバイトのシーケンスを含む。プロセッサは、同期化要求を複数の計算デバイスからの第3のデバイスに送るように構成される。同期化要求は、第1の識別子および第2の識別子を含む。第1の識別子は、イベントの第1の集合からの各残りのイベントに関連するシーケンス値未満のシーケンス値に関連するイベントの第1の集合からのイベントを識別する。第2の識別子は、イベントの第1の集合からの各残りのイベントに関連するシーケンス値を超えるシーケンス値に関連するイベントの第1の集合からのイベントを識別する。プロセッサは、同期化要求に応答して、第3の計算デバイスから、第2の計算デバイスによって定義されたイベントの群からのイベントの第2の集合を受信するように構成される。プロセッサは、イベントの第2の集合の表示をメモリ内に記憶するように構成される。イベントの第2の集合からの各イベントは、イベントの第1の集合には含まれない。プロセッサは、(1)イベント同意プロトコルと(2)イベントの第1の集合と(3)イベントの第2の集合とに基づいて、分散データベースのインスタンスの現在の状態を判定するように構成される。プロセッサは、現在の状態に関連するハッシュ値に基づいて、分散データベースのインスタンスの署名付き状態を生成するように構成される。ハッシュ値は、第1の計算デバイスに関連する秘密鍵を用いてデジタル署名される。プロセッサは、署名付き状態を示すトランザクションを含むイベントを分散データベースのインスタンスにポストするために信号を送るように構成される。プロセッサは、計算デバイスの群からの計算デバイスの集合から、署名付き状態を示すトランザクションを含むイベントに関連する合意の表示を受信するように構成される。プロセッサは、メモリから、合意の表示に基づいて、イベントの第1の集合の表示およびイベントの第2の集合の表示を除去するようにさらに構成される。
[1025] いくつかの実施形態では、装置は、計算デバイスの集合に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの集合内に含まれるように構成された第1の計算デバイスにある分散データベースのインスタンスを含む。この装置は、分散データベースのインスタンスを記憶するメモリに動作可能に結合されたプロセッサをも含む。このプロセッサは、第1の時刻に、イベントの第1の集合にリンクされた第1のイベントを定義するように構成される。このプロセッサは、第1の時刻の後の第2の時刻に、計算デバイスの集合からの第2の計算デバイスから、(1)第2の計算デバイスによって定義され、(2)イベントの第2の集合にリンクされた、第2のイベントを表す信号を受信するように構成される。このプロセッサは、少なくともプロトコルの結果に基づいてイベントの第3の集合に関連する順序を識別するように構成される。イベントの第1の集合またはイベントの第2の集合のうちの少なくとも1つからのイベントの第3の集合からの各イベント。プロセッサは、分散データベースのインスタンス内に、イベントの第3の集合に関連する順序を記憶するように構成される。
[1026] いくつかの例では、イベントの第3の集合からの各イベントは、属性(たとえば、シーケンス番号、世代番号、ラウンド番号、受信された番号、および/またはタイムスタンプなど)の集合に関連する。プロトコルの結果は、イベントの第3の集合からの各イベントの属性の集合からの各属性の値を含むことができる。属性の集合からの第1の属性の値は、第1の数値を含むことができ、属性の集合からの第2の属性の値は、第1の数値に関連する2進値を含むことができる。イベントの第3の集合からのイベントの第2の属性(たとえば、ラウンド増分値)の2進値は、そのイベントとそのイベントにリンクされたイベントの第4の集合との間の関係が判断基準(たとえば、そのイベントによって強く識別されるイベントの個数)を満足するかどうかに基づくものとすることができる。イベントの第4の集合からの各イベントは、(1)イベントの第3の集合からのイベントの先祖であり、(2)イベントの第4の集合からの残りのイベントとして第1の共通の属性(たとえば、共通のラウンド番号、ラウンドR第1イベントであることの表示など)に関連付けられる。第1の共通の属性は、計算デバイスの集合からの各計算デバイスによって定義されるイベントが第1の特定の値に関連付けられる第1のインスタンスを示すことができる(たとえば、ラウンドR第1イベントであることの表示など)。
[1027] 属性の集合からの第3の属性(たとえば、受信されたラウンド番号)の値は、イベントとそのイベントにリンクされたイベントの第5の集合との間の関係に基づく第2の数値を含むことができる。イベントの第5の集合からの各イベントは、イベントの子孫であり、イベントの第5の集合からの残りのイベントとして第2の共通の属性(たとえば、有名)に関連する。第2の共通の属性は、(1)計算デバイスの集合からの各計算デバイスによって定義される第2のイベントが第1の特定の値とは異なる第2の特定の値に関連する第1のインスタンスを示す第3の共通の属性(たとえば、ラウンドR第1イベントまたは目撃者であること)と、(2)表示の集合に基づく結果とに関連付けられ得る。表示の集合からの各表示は、イベントの第6の集合からのイベントに関連付けられ得る。イベントの第6の集合からの各イベントは、計算デバイスの集合からの各計算デバイスによって定義される第3のイベントが第1の特定の値および第2の特定の値とは異なる第3の特定の値に関連する第1のインスタンスを示す第4の共通の属性に関連付けられ得る。いくつかの例では、第1の特定の値は、第1の整数(たとえば、第1のラウンド番号R)であり、第2の特定の値は、第1の整数より大きい第2の整数(たとえば、第2のラウンド番号R+n)であり、第3の特定の値は、第2の整数より大きい第3の整数(たとえば、第3のラウンド番号R+n+m)である。
[1028] いくつかの実施形態では、装置は、メモリおよびプロセッサを含む。メモリは、計算デバイスの集合に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの集合内に含まれるように構成された第1の計算デバイスにある分散データベースのインスタンスを含む。プロセッサは、分散データベースのインスタンスを記憶するメモリに動作可能に結合され、イベントの集合にリンクされたイベントを表す信号を受信するように構成される。プロセッサは、少なくともプロトコルの結果に基づいてイベントの集合に関連する順序を識別するように構成される。プロセッサは、分散データベースのインスタンス内に、イベントの集合に関連する順序を記憶するように構成される。
[1029] いくつかの実施形態では、非一時的プロセッサ可読媒体は、イベントの集合にリンクされたイベントを表す信号を受信し、イベントの集合からの各イベントに関連するラウンドと各イベントに関連するラウンドを増分すべき時の表示とに基づいてイベントの集合に関連する順序を識別するためにプロセッサによって実行される命令を表すコードを記憶する。コードは、さらに、プロセッサに、計算デバイスの集合に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの集合内に含まれるように構成された第1の計算デバイスにある分散データベースのインスタンス内に、イベントの集合に関連する順序を記憶させるコードをさらに含む。分散データベースのインスタンスは、プロセッサに動作可能に結合される。
[1030] いくつかの実施形態では、第1の計算デバイスにある分散データベースのインスタンスは、計算デバイスの集合に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの集合内に含まれるように構成され得る。第1の計算デバイスは、分散データベースのインスタンス内に複数のトランザクションを記憶する。データベース収束(database convergence)モジュールが、第1の計算デバイスのメモリまたはプロセッサ内で実施され得る。データベース収束モジュールは、分散データベースのインスタンスに動作可能に結合され得る。データベース収束モジュールは、イベントの第1の集合にリンクされた第1のイベントを第1の時刻に定義するように構成され得る。イベントの第1の集合からの各イベントは、バイトのシーケンスであり、(1)トランザクションの複数の集合からのトランザクションの集合および(b)トランザクションの集合に関連する順序に関連する。トランザクションの集合からの各トランザクションは、複数のトランザクションからのものである。データベース収束モジュールは、第1の時刻の後の第2の時刻に、計算デバイスの集合からの第2の計算デバイスから、(1)第2の計算デバイスによって定義され、(2)イベントの第2の集合にリンクされた第2のイベントを受信するように構成され得る。データベース収束モジュールは、第1のイベントおよび第2のイベントにリンクされた第3のイベントを定義するように構成され得る。データベース収束モジュールは、少なくともイベントの第1の集合およびイベントの第2の集合に基づいてイベントの第3の集合に関連する順序を識別するように構成され得る。イベントの第3の集合からの各イベントは、イベントの第1の集合またはイベントの第2の集合のうちの少なくとも1つからのものである。データベース収束モジュールは、少なくとも(1)イベントの第3の集合に関連する順序および(2)トランザクションの複数の集合からのトランザクションの各集合に関連する順序に基づいて、複数のトランザクションに関連する順序を識別するように構成され得る。データベース収束モジュールは、分散データベースのインスタンス内に、第1の計算デバイス内に記憶された複数のトランザクションに関連する順序を記憶するように構成され得る。
[1031] いくつかの実施形態では、第1の計算デバイスにある分散データベースのインスタンスは、計算デバイスの集合に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの集合内に含まれるように構成され得る。データベース収束モジュールは、第1の計算デバイスのメモリまたはプロセッサ内で実施され得る。データベース収束モジュールは、イベントの第1の集合にリンクされた第1のイベントを第1の時刻に定義するように構成され得る。イベントの第1の集合からの各イベントは、バイトのシーケンスである。データベース収束モジュールは、第1の時刻の後の第2の時刻に、計算デバイスの集合からの第2の計算デバイスから、(1)第2の計算デバイスによって定義され、(2)イベントの第2の集合にリンクされた第2のイベントを受信するように構成され得る。イベントの第2の集合からの各イベントは、バイトのシーケンスである。データベース収束モジュールは、第1のイベントおよび第2のイベントにリンクされた第3のイベントを定義するように構成され得る。データベース収束モジュールは、少なくともイベントの第1の集合およびイベントの第2の集合に基づいてイベントの第3の集合に関連する順序を識別するように構成され得る。イベントの第3の集合からの各イベントは、イベントの第1の集合またはイベントの第2の集合のうちの少なくとも1つからのものである。データベース収束モジュールは、分散データベースのインスタンス内に、イベントの第3の集合に関連する順序を記憶するように構成され得る。
[1032] いくつかの実施形態では、第1のトランザクションに関連するデータは、計算デバイスの集合に動作可能に結合されたネットワークを介して分散データベースを実施する計算デバイスの集合からの第1の計算デバイスで受信され得る。計算デバイスの集合からの各計算デバイスは、分散データベースの別々のインスタンスを有する。第1のトランザクションに関連する第1のトランザクション順序値は、第1の時刻に定義され得る。第2のトランザクションに関連するデータは、計算デバイスの集合からの第2の計算デバイスから受信され得る。トランザクションの集合は、第1の計算デバイスにある分散データベースのインスタンス内に記憶され得る。トランザクションの集合は、少なくとも第1のトランザクションおよび第2のトランザクションを含むことができる。少なくとも第1のトランザクション順序値および第2のトランザクション順序値を含むトランザクション順序値の集合は、第1の時刻の後の第2の時刻に選択され得る。第2のトランザクション順序値は、第2のトランザクションに関連付けられ得る。データベース状態変数は、少なくともトランザクションの集合およびトランザクション順序値の集合に基づいて定義され得る。
[1033] 本明細書で使用されるときに、モジュールは、たとえば、特定の機能の実行に関連する動作可能に結合された電気構成要素の任意のアセンブリおよび/またはセットとすることができ、たとえば、メモリ、プロセッサ、電気トレース、光コネクタ、ソフトウェア(ハードウェア内で実行される)、および/または類似物を含むことができる。
[1034] 本明細書で使用されるときに、単数形「a」、「an」、および「the」は、文脈がそうではないことを明瞭に規定しない限り、複数指示対象を含む。したがって、たとえば、用語「モジュール」は、単一のモジュールまたはモジュールの組合せを意味することが意図されている。たとえば、「ネットワーク」は、単一のネットワークまたはネットワークの組合せを意味することが意図されている。
[1035] 図1は、一実施形態による、分散データベース・システム100を示す高水準ブロック図である。図1は、4つの計算デバイス(計算デバイス110、計算デバイス120、計算デバイス130、および計算デバイス140)にまたがって実施される分散データベース100を示すが、分散データベース100が、図1に図示されていない計算デバイスを含む任意の個数の計算デバイスの集合を使用できることを理解されたい。ネットワーク105は、有線ネットワークおよび/または無線ネットワークとして実施され、計算デバイス110、120、130、140を動作可能に結合するのに使用される、任意のタイプのネットワーク(たとえば、ローカル・エリア・ネットワーク(LAN)、広域ネットワーク(WAN)、仮想ネットワーク、遠隔通信ネットワーク)とすることができる。本明細書でさらに詳細に説明するように、いくつかの実施形態では、たとえば、計算デバイスは、インターネット・サービス・プロバイダ(ISP)およびインターネット(たとえば、ネットワーク105)を介してお互いに接続されたパーソナル・コンピュータである。いくつかの実施形態では、接続は、ネットワーク105を介して、任意の2つの計算デバイス110、120、130、140の間で定義され得る。図1に示されているように、たとえば、接続は、計算デバイス110と、計算デバイス120、計算デバイス130、および計算デバイス140のうちの任意の1つとの間で定義され得る。
[1036] いくつかの実施形態では、計算デバイス110、120、130、140は、お互いと(たとえば、お互いへデータを送り、かつ/またはお互いからデータを受信する)ならびに中間ネットワークおよび/または代替ネットワーク(図1には図示せず)を介してネットワークと通信することができる。そのような中間ネットワークおよび/または代替ネットワークは、ネットワーク105と同一のタイプおよび/または異なるタイプを有するものとすることができる。
[1037] 各計算デバイス110、120、130、140は、他の計算デバイスのうちの1つまたは複数にデータを送り、かつ/またはこれからデータを受信するためにネットワーク105を介してデータを送るように構成された任意のタイプのデバイスとすることができる。計算デバイスの例が、図1に示されている。計算デバイス110は、メモリ112、プロセッサ111、および出力デバイス113を含む。メモリ112は、たとえば、ランダム・アクセス・メモリ(RAM)、メモリ・バッファ、ハード・ドライブ、データベース、消去可能プログラム可能読取専用メモリ(EPROM)、電気的消去可能読取専用メモリ(EEPROM)、読取専用メモリ(ROM)、その他とすることができる。いくつかの実施形態では、計算デバイス110のメモリ112は、分散データベースのインスタンス(たとえば、分散データベース・インスタンス114)に関連するデータを含む。いくつかの実施形態では、メモリ112は、同期化イベントのレコード、他の計算デバイスとの以前の同期化イベントのレコード、同期化イベントの順序、イベント内のトランザクションの順序、同期化イベントおよび/またはトランザクションの順序の識別に関連するパラメータ、パラメータ(たとえば、トランザクションを定量化するデータベース・フィールド、イベントが発生する順序を定量化するデータベース・フィールド、および/またはその値がデータベース内に記憶され得る任意の他の適切なフィールド)の値を分散データベースの別のインスタンス(たとえば、計算デバイス120にある分散データベース・インスタンス124)に送ることおよび/またはこれから受信することに関連するモジュール、プロセス、および/または機能をプロセッサに実行させる命令を記憶する。
[1038] 分散データベース・インスタンス114は、たとえば、データの記憶、変更、および/または削除を含めて、データを操作するように構成され得る。いくつかの実施形態では、分散データベース・インスタンス114は、リレーショナル・データベース、オブジェクト・データベース、ポスト・リレーショナル・データベース(post−relational database)、および/または任意の他の適切なタイプのデータベースもしくはストレージとすることができる。たとえば、分散データベース・インスタンス114は、任意の特定の機能および/または産業に関するデータを記憶することができる。たとえば、分散データベース・インスタンス114は、特定の金融商品の所有権の履歴に関する値および/または値のベクトルを含む金融トランザクション(たとえば、計算デバイス110のユーザの)を記憶することができる。一般に、ベクトルは、パラメータの値の任意の集合とすることができ、パラメータは、異なる値をとることのできる任意のデータ・オブジェクトおよび/またはデータベース・フィールドとすることができる。したがって、分散データベース・インスタンス114は、それぞれが値のベクトルに関連付けられる、複数のパラメータおよび/またはフィールドを有することができる。値のベクトルは、そのデータベース・インスタンス114内のパラメータおよび/またはフィールドの実際の値を判定するのに使用される。いくつかの例では、分散データベース・インスタンス114は、同期化イベントのレコード、他の計算デバイスとの以前の同期化イベントのレコード、同期化イベントの順序、イベント内のトランザクションの順序、同期化イベントおよび/またはトランザクションの順序の識別に関連するパラメータおよび/または値(たとえば、本明細書で説明される同意方法を使用して順序を計算する際に使用される)、パラメータの値(たとえば、トランザクションを定量化するデータベース・フィールド、イベントが発生する順序を定量化するデータベース・フィールド、および/またはその値がデータベース内に記憶され得る任意の他の適切なフィールド)を記憶する。
[1039] いくつかの例では、分散データベース・インスタンス114は、データベース状態変数および/または現在の状態をも記憶することができる。現在の状態は、トランザクションの結果に関連する状態、差引勘定、条件、および/または類似物とすることができる。同様に言えば、状態は、トランザクションによって変更されるデータ構造および/または変数を含むことができる。他の例では、現在の状態は、別々のデータベース内および/またはメモリ112の一部内に記憶され得る。さらなる他の例では、現在の状態は、計算デバイス110とは異なる計算デバイスのメモリで記憶され得る。
[1040] いくつかの例では、分散データベース・インスタンス114は、(キー、値)対の集合など、他のデータ構造を実施するのにも使用され得る。分散データベース・インスタンス114によって記録されるトランザクションは、たとえば、(キー、値)対の集合内の(キー、値)対の追加、削除、または変更とすることができる。
[1041] いくつかの例では、分散データベース・システム100または分散データベース・インスタンス114、124、134、144のいずれかが、照会され得る。たとえば、照会は、キーからなるものとすることができ、分散データベース・システム100または分散データベース・インスタンス114、124、134、144から返される結果は、キーに関連する値とすることができる。いくつかの例では、分散データベース・システム100または分散データベース・インスタンス114、124、134、144のいずれかは、トランザクションを介して変更されることも可能である。たとえば、データベースを変更するトランザクションは、変更トランザクションを認可する当事者によるデジタル署名を含むことができる。
[1042] 分散データベース・システム100は、たとえば、分散アイデンティティ・システム(distributed identity system)での様々なユーザに関連する属性の記憶など、多数の目的に使用され得る。たとえば、そのようなシステムは、「キー」としてユーザのアイデンティティを、「値」としてユーザに関連する属性のリストを使用することができる。いくつかの例では、アイデンティティは、そのユーザに既知の対応する秘密鍵を有する暗号公開鍵とすることができる。各属性は、たとえば、その属性をアサートする権利を有する機関によってデジタル署名され得る。各属性が、たとえば、その属性を読み取る権利を有する個人または個人のグループに関連する公開鍵を用いて暗号化されることも可能である。一部のキーまたは値が、そのキーまたは値を変更しまたは削除することを認可される当事者の公開鍵のリストを付加されることも可能である。
[1043] 別の例では、分散データベース・インスタンス114は、ゲームプレイ・アイテムの現在の状態および所有権など、多人数同時参加型ゲーム(Massively Multiplayer Game、MMG)に関するデータを記憶することができる。いくつかの例では、分散データベース・インスタンス114は、図1に示されているように、計算デバイス110内で実施され得る。他の例では、分散データベースのインスタンスは、計算デバイスによって(たとえば、ネットワークを介して)アクセス可能であるが、計算デバイス内では実施されない(図1には図示せず)。
[1044] 計算デバイス110のプロセッサ111は、分散データベース・インスタンス114を走行させ、かつ/または実行するように構成された任意の適切な処理デバイスとすることができる。たとえば、本明細書でさらに詳細に説明するように、プロセッサ111は、計算デバイス120からの信号の受信に応答して分散データベース・インスタンス114を更新し、かつ/または計算デバイス120へ信号を送らせるように構成され得る。より具体的には、本明細書でさらに詳細に説明するように、プロセッサ111は、別の計算デバイスからのトランザクションに関連する同期化イベント、同期化イベントの順序に関連するレコード、および/または類似物の受信に応答して、分散データベース・インスタンス114を更新するためにモジュール、機能、および/またはプロセスを実行するように構成され得る。他の実施形態では、プロセッサ111は、分散データベースの別のインスタンス(たとえば、計算デバイス120の分散データベース・インスタンス124)内に記憶されたパラメータの値の受信に応答して分散データベース・インスタンス114を更新するためおよび/または計算デバイス110の分散データベース・インスタンス114内に記憶されたパラメータの値を計算デバイス120に送らせるために、モジュール、機能、および/またはプロセスを実行するように構成され得る。いくつかの実施形態では、プロセッサ111は、汎用プロセッサ、フィールド・プログラマブル・ゲート・アレイ(FPGA)、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)、および/または類似物とすることができる。
[1045] ディスプレイ113は、たとえば、液晶ディスプレイ(LCD)、陰極線管ディスプレイ(CRT)、または類似物など、任意の適切なディスプレイとすることができる。他の実施形態では、計算デバイス110、120、130、140のいずれもが、ディスプレイ113、123、133、143の代わりにまたはそれに加えて、別の出力デバイスを含む。たとえば、計算デバイス110、120、130、140のうちの任意の1つは、オーディオ出力デバイス(たとえば、スピーカ)、触覚出力デバイス、および/または類似物を含むことができる。さらなる他の実施形態では、計算デバイス110、120、130、140のうちのいずれもが、ディスプレイ113、123、133、143の代わりにまたはそれに加えて、入力デバイスを含む。たとえば、計算デバイス110、120、130、140のうちの任意の1つは、キーボード、マウス、および/または類似物を含むことができる。
[1046] 計算デバイス120は、プロセッサ121、メモリ122、およびディスプレイ123を有し、これらは、それぞれプロセッサ111、メモリ112、およびディスプレイ113に構造的におよび/または機能的に類似するものとすることができる。また、分散データベース・インスタンス124は、分散データベース・インスタンス114に構造的におよび/または機能的に類似するものとすることができる。
[1047] 計算デバイス130は、プロセッサ131、メモリ132、およびディスプレイ133を有し、これらは、それぞれプロセッサ111、メモリ112、およびディスプレイ113に構造的におよび/または機能的に類似するものとすることができる。また、分散データベース・インスタンス134は、分散データベース・インスタンス114に構造的におよび/または機能的に類似するものとすることができる。
[1048] 計算デバイス140は、プロセッサ141、メモリ142、およびディスプレイ143を有し、これらは、それぞれプロセッサ111、メモリ112、およびディスプレイ113に構造的におよび/または機能的に類似するものとすることができる。また、分散データベース・インスタンス144は、分散データベース・インスタンス114に構造的におよび/または機能的に類似するものとすることができる。
[1049] 計算デバイス110、120、130、140は、お互いに類似するものとして図示されているが、分散データベース・システム100の各計算デバイスは、他の計算デバイスとは異なるものとすることができる。分散データベース・システム100の各計算デバイス110、120、130、140は、たとえば、計算エンティティ(たとえば、デスクトップ・コンピュータ、ラップトップ・コンピュータ、その他などのパーソナル・コンピューティング・デバイス)、携帯電話機、携帯情報端末(PDA)などのうちの任意の1つとすることができる。たとえば、計算デバイス110は、デスクトップ・コンピュータとすることができ、計算デバイス120は、スマートフォンとすることができ、計算デバイス130は、サーバとすることができる。
[1050] いくつかの実施形態では、計算デバイス110、120、130、140の1つまたは複数の部分は、ハードウェアベースのモジュール(たとえば、デジタル信号プロセッサ(DSP)、フィールド・プログラマブル・ゲート・アレイ(FPGA))および/またはソフトウェアベースのモジュール(たとえば、メモリ内に記憶され、かつ/またはプロセッサで実行されるコンピュータ・コードのモジュール)を含むことができる。いくつかの実施形態では、計算デバイス110、120、130、140に関連する機能のうちの1つまたは複数(たとえば、プロセッサ111、121、131、141に関連する機能)は、1つまたは複数のモジュール内に含まれ得る(たとえば、図2参照)。
[1051] 計算デバイス(たとえば、計算デバイス110、120、130、140)のプロパティ、計算デバイスの個数、およびネットワーク105を含む分散データベース・システム100のプロパティは、任意の個数の形で選択され得る。いくつかの例では、分散データベース・システム100のプロパティは、分散データベース・システム100の管理者によって選択され得る。他の例では、分散データベース・システム100のプロパティは、分散データベース・システム100のユーザによって集合的に選択され得る。
[1052] 分散データベース・システム100が使用されるので、リーダーが計算デバイス110、120、130、140の中で指名されることはない。具体的には、計算デバイス110、120、130、140のいずれもが、計算デバイス110、120、130、140の分散データベース・インスタンス111、12、131、141、141内に記憶された値の間の論争を解決するためのリーダーとしては識別されず、かつ/または選択されない。その代わりに、本明細書で説明されるイベント同期化プロセス、投票プロセス、イベント同期化方法、および/または投票方法を使用して、計算デバイス110、120、130、140は、あるパラメータの値に集合的に収束することができる。
[1053] 分散データベース・システム内でリーダーを有しないことは、分散データベース・システムのセキュリティを高める。具体的には、リーダーがあると、単一の攻撃点および/または故障点がある。悪意のあるソフトウェアが、リーダーに感染する、および/またはリーダーの分散データベース・インスタンスにあるパラメータの値が悪意を持って改変される場合には、故障および/または不正な値が、他の分散データベース・インスタンス全体に伝搬される。しかし、リーダーレス・システムには、単一の攻撃点および/または故障点がない。具体的には、リーダーレス・システムの分散データベース・インスタンス内のパラメータが、ある値を含む場合に、その値は、本明細書でさらに詳細に説明されるように、分散データベース・インスタンスがシステム内の他の分散データベース・インスタンスと値を交換した後に変化する。さらに、本明細書でさらに詳細に説明されるように、本明細書で説明されるリーダーレス分散データベース・システムは、収束の速度を高めると同時に、デバイスの間で送られるデータの量を減らす。
[1054] 図2は、一実施形態による、分散データベース・システム(たとえば、分散データベース・システム100)の計算デバイス200を示す。いくつかの実施形態では、計算デバイス200は、図1に関して図示され、説明された計算デバイス110、120、130、140に類似するものとすることができる。計算デバイス200は、プロセッサ210およびメモリ220を含む。プロセッサ210およびメモリ220は、お互いに動作可能に結合される。いくつかの実施形態では、プロセッサ210およびメモリ220は、それぞれ、図1に関して図示され、詳細に説明されたプロセッサ111およびメモリ112に類似するものとすることができる。図2に示されているように、プロセッサ210は、データベース収束モジュール211および通信モジュール210を含み、メモリ220は、分散データベース・インスタンス221を含む。通信モジュール212は、計算デバイス200が、他の計算デバイスと通信する(たとえば、これにデータを送り、かつ/またはこれからデータを受信する)ことを可能にする。いくつかの実施形態では、通信モジュール212(図1には図示せず)は、計算デバイス110が、計算デバイス120、130、140と通信することを可能にする。通信モジュール210は、たとえば、ネットワーク・インターフェース・コントローラ(NIC)、無線接続、有線ポート、および/または類似物を含み、かつ/または使用可能にすることができる。したがって、通信モジュール210は、計算デバイス200と別のデバイスとの間の通信セッション(たとえば、図1のネットワーク105またはインターネット(図示せず)を介する)を確立し、かつ/または維持することができる。同様に言えば、通信モジュール210は、計算デバイス200が別のデバイスにデータを送り、かつ/またはこれからデータを受信することを可能にすることができる。
[1055] いくつかの例では、データベース収束モジュール211は、他のコンピューティング・デバイスとイベントおよび/またはトランザクションを交換し、データベース収束モジュール211が受信するイベントおよび/またはトランザクションを記憶し、イベントの間の参照のパターンによって定義される半順序に基づいてイベントおよび/またはトランザクションの順序付けを計算することができる。各イベントは、2つのより以前のイベントの暗号ハッシュ(そのイベントを2つのより以前のイベントおよびその先祖イベントにおよびその逆にリンクする)、ペイロード・データ(記録されるべきトランザクションなど)、現在時刻、その作成者が割り当てる、イベントが最初に定義された時刻であるタイムスタンプ(たとえば、日付およびUTC時刻)などの他の情報、および/または類似物を含むレコードとすることができる。いくつかの例では、あるメンバによって最初に定義されるイベントは、別のメンバによって定義された単一のイベントのハッシュだけを含む。そのような例では、メンバは、まだ以前の自己ハッシュ(たとえば、そのメンバによって以前に定義されたイベントのハッシュ)を有しない。いくつかの例では、分散データベース内の最初のイベントは、以前のイベントのハッシュを全く含まない(その分散データベースの以前のイベントがないので)。
[1056] いくつかの実施形態では、2つのより以前のイベントのそのような暗号ハッシュは、イベントを入力として使用する暗号ハッシュ関数に基づいて定義されたハッシュ値とすることができる。具体的には、そのような実施形態で、イベントは、バイトの特定のシーケンスまたはストリング(そのイベントの情報を表す)を含む。あるイベントのハッシュは、入力としてそのイベントのバイトのシーケンスを使用してハッシュ関数から返された値とすることができる。他の実施形態では、イベントに関連する任意の他の適切なデータ(たとえば、識別子、通し番号、イベントの特定の部分を表すバイトなど)は、そのイベントのハッシュを計算するためにハッシュ関数への入力として使用され得る。任意の適切なハッシュ関数が、ハッシュを定義するのに使用され得る。いくつかの実施形態では、各メンバは、所与のイベントに関して各メンバで同一のハッシュが生成されるように、同一のハッシュ関数を使用する。その後、イベントは、イベントを定義し、かつ/または作成するメンバによってデジタル署名され得る。
[1057] いくつかの例では、イベントおよびその相互接続の集合は、有向非巡回グラフ(DAG)を形成することができる。いくつかの例では、DAG内の各イベントは、2つのより以前のイベントを参照し(そのイベントを2つのより以前のイベントおよびその先祖イベントにおよびその逆にリンクする)、各参照は、厳密により以前のイベントへの参照であり、その結果、ループはない。いくつかの実施形態では、DAGは、暗号ハッシュに基づき、したがって、データ構造は、ハッシュグラフと呼ばれ得る(本明細書では「hashDAG」とも呼ばれる)。ハッシュグラフは、特定の順序を直接に符号化し、これは、YがXのハッシュを含む場合、YがXのハッシュを含むイベントのハッシュを含む場合、または任意の長さのそのような経路に関して、イベントXがイベントYの前にあることがわかることを意味する。しかし、XからYへまたはYからXへの経路がない場合には、半順序は、どのイベントが最初に現れるのかを定義しない。したがって、データベース収束モジュールは、半順序から全順序を計算することができる。これは、計算デバイスによって使用される任意の適切な確定機能によって行われ得、その結果、計算デバイスは、同一の順序を計算するようになる。いくつかの実施形態では、各メンバは、各同期の後にこの順序を再計算することができ、最終的に、これらの順序は収束し、その結果、同意が出現できるようになる。
[1058] 同意アルゴリズムは、ハッシュグラフ内のイベントの順序および/またはイベント内に記憶されたトランザクションの順序を判定するのに使用され得る。トランザクションの順序は、順序に従ってこれらのトランザクションを実行した結果としてデータベースの状態を定義することができる。データベースの定義された状態は、データベース状態変数として記憶され得る。
[1059] いくつかの例では、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するのに以下の関数を使用することができる。他の計算デバイス(「メンバ」と呼ばれる)のそれぞれについて、データベース収束モジュールは、イベント(および/またはこれらのイベントの表示)がそのメンバによって受信された順序を発見するためにハッシュグラフを調べることができる。次に、データベース収束モジュールは、そのメンバが各イベントに数値「ランク」を割り当てたかのように計算することができ、ランクは、そのメンバが受信した最初のイベントに関して1、そのメンバが受信した2番目のイベントに関して2などである。データベース収束モジュールは、ハッシュグラフ内のメンバごとにこれを行うことができる。その後、イベントごとに、データベース収束モジュールは、割り当てられたランクの中央値を計算することができ、その中央値によってイベントをソートすることができる。ソートは、各メンバのデータベース収束モジュールが同一の方法を使用する場合に、2つの同点のイベントをそのハッシュの数値順によってソートすることによって、またはなんらかの他の方法によってなど、決定論的な形で同点を解決することができる。このソートの結果は、全順序である。
[1060] 図6は、全順序を判定する一例のハッシュグラフ640を示す。ハッシュグラフ640は、2つのイベント(最も下方の縞を有する円および最も下方のドットを有する円)と、各メンバがこれらのイベントの表示を初めて受信した時刻(縞およびドットを有するその他の円)とを示す。最上部にある各メンバの名前は、どちらのイベントが自身の遅い順(slow order)で最初であるかによって色分けされている。ドット付きのものより多数の縞付きの初期投票があり、したがって、メンバのそれぞれの同意投票は、縞付きである。言い換えると、メンバは、縞付きのイベントがドット付きのイベントの前に発生したことの合意に最終的に収束する。
[1061] この例では、メンバ(アリス、ボブ、キャロル、デイブ、およびエドというラベルを付けられた計算デバイス)は、イベント642またはイベント644のどちらが最初に発生したのかの同意を定義するために働く。各縞付きの円は、そこでメンバが最初にイベント644(および/またはそのイベント644の表示)を受信したイベントを示す。同様に、各ドット付きの円は、そこでメンバが最初にイベント642(および/またはそのイベント642の表示)を受信したイベントを示す。ハッシュグラフ640に示されているように、アリス、ボブ、およびキャロルは、それぞれ、イベント642の前にイベント644(および/またはイベント644の表示)を受信した。デイブとエドの両方は、イベント644(および/またはイベント644の表示)の前にイベント642(および/またはイベント642の表示)を受信した。したがって、より多数のメンバが、イベント642の前にイベント644を受信したので、全順序は、イベント644がイベント642の前に発生したことを示すように各メンバによって判定され得る。
[1062] 他の例では、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するのに異なる関数を使用することができる。そのような実施形態では、たとえば、データベース収束モジュールは、全順序を計算するのに以下の関数を使用することができ、ここで、正整数Qは、メンバによって共有されるパラメータである。
creator(x)=イベントxを作成したメンバ
anc(x)=x自体を含むxの先祖であるイベントの集合
other(x)=xが作成される直前に同期化された、メンバによって作成されたイベント
self(x)=同一の作成者を有するxの前の最後のイベント
self(x,0)=self(x)
self(x,n)=self(self(x),n−1)
order(x,y)=k、ただし、yは、creator(x)が学習したk番目のイベント
last(x)={y|y∈anc(x)∧¬∃z∈anc(x),(y∈anc(z)∧creator(y)=creator(z))}

fast(x,y)=ソートされたリスト内のyの位置。要素z∈anc(x)は、
によってソートされ、同点は、各イベントのハッシュによって解決される。
[1063] この実施形態では、fast(x,y)は、creator(x)の意見では、実質的にxが作成されおよび/または定義された直後の、イベントの全順序でのyの位置を与える。Qが無限大である場合には、上記は、前に説明した実施形態と同一の全順序を計算する。Qが有限であり、すべてのメンバがオンラインである場合には、上記は、前に説明した実施形態と同一の全順序を計算する。Qが有限であり、メンバの少数が所与の時刻にオンラインである場合には、この関数は、オンライン・メンバが、新しいメンバがゆっくりと1つずつオンラインになるときに変化しないままになる、オンライン・メンバの間での同意に達することを可能にする。しかし、ネットワークの区分がある場合には、各区分のメンバは、それら自体の同意に達する可能性がある。次に、区分が直されるときに、より小さい区分のメンバは、より大きい区分の同意を採用する。
[1064] さらなる他の例では、図8〜図12Bに関して説明されるように、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するのにさらなる異なる関数を使用することができる。図8〜図9に示されているように、各メンバ(アリス、ボブ、キャロル、デイブ、およびエド)は、イベント(図8に示された1401〜1413、図9に示された1501〜1506)を作成し、かつ/または定義する。図8〜図12Bに関して説明される関数および副関数を使用することによって、イベントの全順序は、本明細書でさらに説明されるように、それらの受信されたラウンドによってイベントをソートし、それらの受信されたタイムスタンプによって同点を解決し、それらの署名によってこれらの同点を解決することによって、計算され得る。他の例では、イベントの全順序は、受信されたラウンドによってイベントをソートし、それらの受信された世代(それらの受信されたタイムスタンプではなく)によって同点を解決し、それらの署名によってこれらの同点を解決することによって、計算され得る。以下の段落は、イベントの順序を判定するために、イベントの受信されたラウンドと、イベントの受信された世代とを計算し、かつ/または定義するのに使用される関数を指定する。以下の項が、図8〜図12Bに関連して使用され、図示される。
[1065] 「親」 イベントXは、YがXのハッシュを含む場合に、イベントYの親である。たとえば、図8では、イベント1412の親は、イベント1406およびイベント1408を含む。
[1066] 「先祖」 イベントXの先祖は、X、その親、その親の親などである。たとえば、図8では、イベント1412の先祖は、イベント1401、1402、1403、1406、1408、および1412である。あるイベントの先祖は、そのイベントにリンクされると言われ得、逆も同様である。
[1067] 「子孫」 イベントXの子孫は、X、その子、その子の子などである。たとえば、図8では、イベント1401の子孫は、この図に示されたすべてのイベントである。別の例に関して、イベント1403の子孫は、イベント1403、1404、1406、1407、1409、1410、1411、1412、および1413である。あるイベントの子孫は、そのイベントにリンクされると言われ得、逆も同様である。
[1068] 「N」 母集団内のメンバの総数。たとえば、図8では、メンバは、アリス、ボブ、キャロル、デイブ、およびエドというラベルを付けられた計算デバイスであり、Nは5と等しい。
[1069] 「M」 Nのあるパーセンテージを超える(たとえば、Nの2/3を超える)最小の整数。たとえば、図8では、パーセンテージが2/3と定義される場合に、Mは4と等しい。他の例では、Mは、たとえば、Nの異なるパーセンテージ(たとえば、1/3、1/2など)、特定の事前定義の数、および/または任意の適切な形であるものとして定義され得る。
[1070] 「自己親」 イベントXの自己親は、同一のメンバによって作成され、かつ/または定義されたその親イベントYである。たとえば、図8では、イベント1405の自己親は1401である。
[1071] 「自己先祖」 イベントXの自己先祖は、X、その自己親、その自己親の自己親などである。
[1072] 「シーケンス番号」(または「SN」)(本明細書ではシーケンス値とも称する) イベントの自己親のシーケンス番号+1と定義される、イベントの整数属性。たとえば、図8では、イベント1405の自己親は1401である。イベント1401のシーケンス番号が1なので、イベント1405のシーケンス番号は2(すなわち、1+1)である。いくつかの実施態様では、シーケンス番号は、新しいラウンドの始めに再開始されまたは0にリセットされる。他の例では、シーケンス番号および/またはシーケンス値は、増分するのではなく減分することができ、辞書式順序を有する英数値(たとえば、A、B、Cなど)とすることができ、かつ/または類似物とすることができる。
[1073] 「世代番号」(または「GN」) イベントの親の世代番号の最大値+1と定義される、イベントの整数属性。たとえば、図8では、イベント1412は、それぞれ世代番号4および2を有する2つの親、イベント1406および1408を有する。したがって、イベント1412の世代番号は、5(すなわち、4+1)である。
[1074] 「ラウンド増分」(または「RI」) 0または1のいずれかとすることができる、イベントの属性。
[1075] 「ラウンド番号」(または「RN」、本明細書では「作成済みラウンド」とも称する) イベントの整数属性。いくつかの例では、ラウンド番号は、イベントの親のラウンド番号の最大値+イベントのラウンド増分と定義され得る。たとえば、図8では、イベント1412は、両方が1のラウンド番号を有する2つの親、イベント1406および1408を有する。イベント1412は、1のラウンド増分をも有する。したがって、イベント1412のラウンド番号は、2(すなわち、1+1)である。他の例では、Rが、すべてがラウンド番号R−1を有する異なるメンバによって定義され、かつ/または作成された少なくともM個のイベントをイベントが強く見る(本明細書で説明される)ことができるようになる最小の整数である場合に、イベントは、ラウンド番号Rを有することができる。そのような整数がない場合には、イベントのラウンド番号は、デフォルト値(たとえば、0、1など)とすることができる。そのような例では、イベントのラウンド番号は、ラウンド増分を使用せずに計算され得る。たとえば、図8では、Mが、1/2×Nより大きい最小の整数になるように定義される場合に、Mは、3である。イベント1412は、M個のイベント1401、1402、および1408を強く見、このイベント1401、1402、および1408のそれぞれは、異なるメンバによって定義され、1のラウンド番号を有する。イベント1412は、異なるメンバによって定義された2のラウンド番号を有する少なくともM個のイベントを強く見ることができない。したがって、イベント1412のラウンド番号は2である。いくつかの例では、分散データベース内の最初のイベントは、1のラウンド番号を含む。他の例では、分散データベース内の最初のイベントは、0または任意の他の適切な数のラウンド番号を含むことができる。
[1076] 「フォーキング」 イベントXおよびイベントYが同一のメンバによって定義され、かつ/または作成され、どちらもが他方の自己先祖ではない場合に、イベントXは、イベントYとのフォークである。たとえば、図9では、メンバ・デイブは、イベント1503が、イベント1504の自己先祖ではなく、イベント1504が、イベント1503の自己先祖ではなくなるようにするために、両方が同一の自己親(すなわち、イベント1501)を有するイベント1503および1504を作成し、かつ/または定義することによってフォークする。
[1077] フォーキングの「識別」 フォーキングは、お互いと共にフォークする2つのイベントの両方が、この2つのイベントの後で作成され、かつ/または定義された第3のイベントの先祖である場合に、第3のイベントによって「識別」され得る。たとえば、図9では、メンバ・デイブは、いずれもが他方の自己先祖ではないイベント1503および1504を作成することによってフォークする。このフォーキングは、より後のイベント1506によって識別され得る。というのは、イベント1503と1504との両方が、イベント1506の先祖であるからである。いくつかの例では、フォーキングの識別は、特定のメンバ(たとえば、デイブ)が不正をしたことを示すことができる。
[1078] イベントの「識別」 イベントXは、Xが、Yとのフォークである先祖イベントZを有しない場合に、先祖イベントYを「識別し」または「見る」。たとえば、図8では、イベント1403がイベント1412の先祖であり、イベント1412がイベント1403と共にフォークする先祖イベントを有しないので、イベント1412は、イベント1403を識別する(「見る」とも称する)。いくつかの例では、イベントXは、XがイベントYの前のフォーキングを識別しない場合に、イベントYを識別することができる。そのような例では、イベントXが、イベントYを定義するメンバによるイベントYの後のフォーキングを識別する場合であっても、イベントXはイベントYを見ることができる。イベントXは、フォーキングの後のそのメンバによるイベントを識別しない。さらに、あるメンバが、両方がヒストリ内でそのメンバの最初のイベントである2つの異なるイベントを定義する場合に、イベントXは、フォーキングを識別することができ、そのメンバによるすべてのイベントを識別しない。
[1079] イベントの「強い識別」(本明細書では「強く見ること」とも称する) イベントXは、XがYを識別する場合に、Xと同一のメンバによって作成され、かつ/または定義された先祖イベントYを「強く識別する」(または「強く見る」)。イベントXは、(1)XとYとの両方を含み、(2)イベントXの先祖であり、(3)先祖イベントYの子孫であり、(4)Xによって識別され、(5)Yを識別でき、(6)少なくともM個の異なるメンバによって作成され、かつ/または定義される、イベントの集合Sが存在する場合に、Xと同一のメンバによって作成されず、かつ/または定義されない先祖イベントYを「強く識別する」。たとえば、図8では、Mが、Nの2/3を超える最小の整数になるように定義される(すなわち、M=1+floor(2N/3)、この例では4になる)場合に、イベントの集合1401、1402、1406、および1412が、イベント1412の先祖であり、かつイベント1401の子孫である少なくとも4つのイベントの集合であり、これらが、それぞれ4つのメンバ、デイブ、キャロル、ボブ、およびエドによって作成され、かつ/または定義され、イベント1412が、イベント1401、1402、1406、および1412のそれぞれを識別し、イベント1401、1402、1406、および1412のそれぞれが、イベント1401を識別するので、イベント1412は、先祖イベント1401を強く識別する。同様にいえば、イベントX(たとえば、イベント1412)は、Xが異なるメンバによって作成されまたは定義された少なくともM個のイベント(たとえば、イベント1401、1402、1406、および1412)を見ることができ、それらのイベントのそれぞれがYを見ることができる場合に、イベントY(たとえば、イベント1401)を「強く見る」ことができる。
[1080] 「ラウンドR第1」イベント(本明細書では「目撃者」とも称する) イベントは、そのイベントが(1)ラウンド番号Rを有し、(2)R未満のラウンド番号を有する自己親を有するか、自己親を有しない場合に、「ラウンドR第1」イベント(または「目撃者」)である。たとえば、図8では、イベント1412は、2のラウンド番号を有し、その自己親がイベント1408であり、イベント1408が1のラウンド番号(すなわち、2未満)を有するので、「ラウンド2第1」イベントである。
[1081] いくつかの例では、イベントXのラウンド増分は、Xが少なくともM個の「ラウンドR第1」イベントを識別し、Rがその親の最大ラウンド番号である場合に限って、1になると定義される。たとえば、図8では、Mが、1/2×Nより大きい最小の整数と定義される場合に、Mは3である。イベント1412は、そのすべてがラウンド1第1イベントであるM個のイベント1401、1402、および1408を強く識別する。1412の両方の親がラウンド1であり、1412が、少なくともM個のラウンド1第1を強く識別し、したがって、1412のラウンド増分は、1である。この図で「RI=0」を用いてマークされたイベントのそれぞれは、少なくともM個のラウンド1第1を強く識別することができず、したがって、それらのラウンド増分は0である。
[1082] いくつかの例では、以下の方法が、イベントXが先祖イベントYを強く識別できるかどうかを判定するのに使用され得る。ラウンドR第1先祖イベントYごとに、イベントXの最小シーケンス番号を与える、1メンバあたり1つの整数の配列A1を維持し、ここで、そのメンバは、イベントXを作成し、かつ/または定義し、XはYを識別することができる。イベントZごとに、ZがWを識別できるように、1メンバあたり1つの、そのメンバによって作成されかつ/または定義されたイベントWの最大シーケンス番号を与える整数の配列A2を維持する。Zが先祖イベントYを強く識別できるかどうかを判定するために、A1[E]≦A2[E]になる要素位置Eの個数をカウントする。イベントZは、このカウントがMを超える場合に限って、Yを強く識別することができる。たとえば、図8では、メンバ、アリス、ボブ、キャロル、デイブ、およびエドは、それぞれがイベント1401を識別でき、ここで、それを行える最も早期のイベントは、それぞれイベント{1404,1403,1402,1401,1408}である。これらのイベントは、シーケンス番号A1={1,1,1,1,1}を有する。同様に、イベント1412によって識別される、それらのそれぞれによる最も遅いイベントは、イベント{なし,1406,1402,1401,1412}であり、アリスは、1412がアリスによるどのイベントをも識別できないので、「なし」としてリストされている。これらのイベントは、それぞれA2={0,2,1,1,2}のシーケンス番号を有し、ここで、すべてのイベントが、正のシーケンス番号を有し、したがって、0は、アリスが1412によって識別されるイベントを有しないことを意味する。リストA1をリストA2と比較することによって、結果{1≦0,1≦2,1≦1,1≦1,1≦2}が与えられ、これは、真である4つの値を有する{偽,真,真,真,真}と同等である。したがって、1412の先祖および1401の子孫である4つのイベントの集合が存在する。4は、少なくともMであり、したがって、1412は、1401を強く識別する。
[1083] A1およびA2を用いて、イベントXが先祖イベントYを強く識別するかどうかを判定する方法の実施に関するさらに別の変形形態は、次のとおりである。両方の配列内の整数要素が128未満である場合には、各要素を単一のバイト内に記憶し、8個のそのような要素を単一の64ビット語にパックし、A1およびA2をそのような語の配列にすることが可能である。A1内の各バイトの最上位ビットは、0をセットされ得、A2内の各バイトの最上位ビットは、1をセットされ得る。2つの対応する語を減算し、次に、最上位ビット以外のすべてを0にするためにマスクとのビット単位ANDを実行し、次に、7ビット位置だけ右シフトして、Cプログラミング言語で((A2[i]−A1[i]) & 0x8080808080808080) >> 7)と表される値を得る。これが、0に初期化されたランニング・アキュムレータ(running accumulator)Sに加算され得る。これを複数回行った後に、バイトをシフトし、加算することによってアキュムレータをカウントに変換して、((S & 0xff)+((S >> 8) & 0xff)+((S >> 16) & 0xff)+((S >> 24) & 0xff)+((S >> 32) & 0xff)+((S >> 40) & 0xff)+((S >> 48) & 0xff)+((S >> 56) & 0xff))を得る。いくつかの例では、これらの計算は、C、Java、および/または類似物などのプログラミング言語で実行され得る。他の例では、この計算は、IntelおよびAMDによって提供されるAdvanced Vector Extensions(AVX)命令または、グラフィックス処理ユニット(GPU)もしくは汎用グラフィックス処理ユニット(GPGPU)内の同等物などのプロセッサ固有命令を使用して実行され得る。いくつかのアーキテクチャでは、この計算は、128ビット、256ビット、512ビット、またはより多数のビットなど、64ビットより長い語を使用することによって、より高速に実行され得る。
[1084] 「有名な」イベント ラウンドRイベントXは、(1)イベントXが「ラウンドR第1」イベント(または「目撃者」)であり、(2)下で説明するように、ビザンチン合意プロトコルの実行を介して「肯定」の決定に達する場合に、「有名」である。いくつかの実施形態では、ビザンチン合意プロトコルは、分散データベースのインスタンス(たとえば、分散データベース・インスタンス114)および/またはデータベース収束モジュール(たとえば、データベース収束モジュール211)によって実行され得る。たとえば、図8では、5つのラウンド1第1すなわち1401、1402、1403、1404、および1408が図示されている。Mが、1/2×N(3である)より大きい最小の整数と定義される場合に、1412は、ラウンド2第1である。プロトコルがより長く走行する場合に、ハッシュグラフは、上向きに成長し、最終的に、他の4つのメンバも、この図の最上部の上にラウンド2第1を有する。各ラウンド2第1は、ラウンド1第1のそれぞれが「有名」であるかどうかに関する「票」を有する。イベント1412は、1401、1402、および1403が有名であることに関して肯定を投票する。というのは、これらが、イベント1412が識別できるラウンド1第1であるからである。イベント1412は、1404を識別できないので、1404が有名であることに関して否定を投票する。1402など、所与のラウンド1第1に関して、「有名」であるか否かのその状況は、それが有名であるか否かに関する各ラウンド2第1の票を計算することによって決定される。これらの票は、その後、ラウンド3第1に伝搬し、その後、1402が有名であったかどうかに関する合意に最終的に達するまで、ラウンド4第1などに伝搬する。同一のプロセスが、他の第1に関して繰り返される。
[1085] ビザンチン合意プロトコルは、「有名」なイベントを識別するために、「ラウンドR第1」イベントの票および/または決定を収集し、使用することができる。たとえば、「ラウンドR+1第1」Yは、YがイベントXを「識別」できる場合には「肯定」を投票し、そうでない場合には「否定」を投票する。その後、票は、いずれかのメンバによって決定に達するまで、ラウンドGごとに計算され、G=R+2、R+3、R+4などである。決定に達するまで、票が、ラウンドGごとに計算される。これらのラウンドの一部は、「過半数」ラウンドとすることができ、一部の他のラウンドは、「硬貨」ラウンドとすることができる。いくつかの例では、たとえば、ラウンドR+2が過半数ラウンドであり、将来のラウンドは、過半数ラウンドまたは硬貨ラウンドのいずれかとして指定される(たとえば、事前定義のスケジュールに従って)。たとえば、いくつかの例では、将来のラウンドが過半数ラウンドまたは硬貨ラウンドのどちらであるのかは、2つの連続する硬貨ラウンドが存在し得ないという条件に従って、任意に判定され得る。たとえば、5つの過半数ラウンドがあり、その後に1つの硬貨ラウンドがあり、その後に5つの過半数ラウンドがあり、その後に1つの硬貨ラウンドがあり、合意に達するのに必要である限りこれが繰り返されると事前に定義することができる。
[1086] いくつかの例では、ラウンドGが過半数ラウンドである場合に、票は、次のように計算され得る。Vを投票する(Vは、「肯定」または「否定」のいずれかである)少なくともM個のラウンドG−1第1を強く識別するラウンドGイベントが存在する場合には、同意決定はVであり、ビザンチン合意プロトコルは終了する。そうではない場合には、各ラウンドG第1イベントは、各ラウンドG第1イベントが強く識別できるラウンドG−1第1の過半数である新しい票を計算する。過半数ではなく同点がある例では、票は、「肯定」と指定され得る。
[1087] 同様に言えば、XがラウンドR目撃者(またはラウンドR第1)である場合に、ラウンドR+1、R+2などでの投票の結果が計算され得、ここで、各ラウンドの目撃者は、Xが有名であるかどうかに関して投票している。ラウンドR+1では、Xを見ることのできるすべての目撃者が、肯定を投票し、他の目撃者は、否定を投票する。ラウンドR+2では、すべての目撃者は、それが強く見ることのできるラウンドR+1目撃者の票の過半数に従って投票する。同様に、ラウンドR+3では、すべての目撃者は、それが強く見ることのできるラウンドR+2目撃者の票の過半数に従って投票する。これは、複数のラウンドにわたって継続することができる。同点の場合には、票は、肯定にセットされ得る。他の例では、同点は、否定にセットされ得、あるいは、ランダムにセットされ得る。いずれかのラウンドが、少なくともM個の否定を投票する目撃者を有する場合に、選挙が終了し、Xは有名ではない。いずれかのラウンドが、少なくともM個の肯定を投票する目撃者を有する場合に、選挙が終了し、Xは有名である。肯定および否定の両方が少なくともM個の票を有しない場合には、選挙は、次のラウンドに継続する。
[1088] 一例として、図8で、示された図の下にあるいくつかのラウンド第1イベントXを検討されたい。各ラウンド1第1は、Xが有名であるかどうかに関する票を有する。イベント1412は、ラウンド1第1イベント1401、1402、および1408を強く識別することができる。したがって、その票は、それらの票に基づく。これが過半数ラウンドである場合には、1412は、{1401,1402,1408}のうちの少なくともM個が肯定の票を有するかどうかをチェックする。そうである場合には、決定は肯定であり、合意に達している。それらのうちの少なくともM個が否定を投票する場合には、決定は否定であり、合意に達している。投票が、どの方向でも少なくともM個を有しない場合には、1412は、1401、1402、および1408のそれらの票の過半数である票を与えられる(同点である場合には、肯定を投票することによって同点を解決する)。その後、その票は、次のラウンドで使用され、合意に達するまで継続する。
[1089] いくつかの例では、ラウンドGが硬貨ラウンドである場合に、票は、次のように計算され得る。イベントXが、Vを投票する(Vは、「肯定」または「否定」のいずれかである)少なくともM個のラウンドG−1第1を識別できる場合には、イベントXは、その票をVに変更する。そうではなく、ラウンドGが硬貨ラウンドである場合には、各ラウンドG第1イベントXは、その票を、イベントXの署名の最下位ビットと定義される擬似ランダム判定の結果に変更する(いくつかの例で硬貨の反転に似る)。
[1090] 同様に言えば、そのような例で、選挙がラウンドR+K(硬貨ラウンド)に達する場合に(Kは指定された係数(たとえば、3、6、7、8、16、32などの数の倍数または任意の他の適当な数)である)、選挙は、そのラウンドでは終了しない。選挙がこのラウンドに達する場合に、選挙は、少なくとももう1ラウンドだけ継続することができる。そのようなラウンドでは、イベントYがラウンドR+K目撃者である場合に、イベントYが、Vを投票するラウンドR+K−1からの少なくともM個の目撃者を強く見ることができるならば、YはVを投票する。そうではない場合には、Yは、ランダムな値に従って投票する(たとえば、イベントYの署名の1ビット(たとえば、最下位ビット、最上位ビット、ランダムに選択されたビット)に従って、ただし、1=肯定、0=否定またはその逆、イベントYのタイムスタンプに従って、暗号「共有硬貨」プロトコルおよび/または任意の他のランダム判定を使用して)。このランダム判定は、Yが作成される前には予測不能であり、したがって、イベントおよび同意プロトコルのセキュリティを高めることができる。
[1091] たとえば、図8で、ラウンド2が硬貨ラウンドであり、投票が、ラウンド1の前のあるイベントが有名であったかどうかに関するものである場合に、イベント1412は、まず、{1401,1402,1408}のうちの少なくともM個が肯定を投票し、またはそのうちの少なくともM個が否定を投票したかどうかをチェックする。そうである場合には、1412は、同一の形で投票する。いずれかの方向に投票する少なくともM個がない場合には、1412は、ランダムまたは擬似ランダムな票を有する(たとえば、エドがイベント1412に署名した時、彼がこれを作成した時、および/または彼がこれを定義したときにエドがイベント1412のために作成したデジタル署名の最下位ビットに基づく)。
[1092] いくつかの例では、擬似ランダム判定の結果は、暗号共有硬貨プロトコルの結果とすることができ、これは、たとえば、ラウンド番号のしきい署名の最下位ビットとして実施され得る。
[1093] システムが、上で説明した擬似ランダム判定の結果を計算する方法のうちの任意の1つから構築され得る。いくつかの例では、システムは、ある順序で異なる方法を通ってサイクルする。他の例では、システムは、事前定義のパターンに従って異なる方法の間で選択することができる。
[1094] 「受信されたラウンド」 Rが、ラウンド番号Rを有する有名なラウンドR第1イベント(または有名な目撃者)の少なくとも半分がXの子孫になり、かつ/またはXを見ることができるようになる最小の整数である場合に、イベントXは、Rの「受信されたラウンド」を有する。他の例では、任意の他の適切なパーセンテージが使用され得る。たとえば、別の例では、Rが、ラウンド番号Rを有する有名なラウンドR第1イベント(または有名な目撃者)の少なくとも所定のパーセンテージ(たとえば、40%、60%、80%など)がXの子孫になり、かつ/またはXを見ることができるようになる最小の整数である場合に、イベントXは、Rの「受信されたラウンド」を有する。
[1095] いくつかの例では、イベントXの「受信された世代」は、次のように計算され得る。どのメンバが、イベントXを識別できる各ラウンドR第1イベントを作成し、かつ/または定義したのかを見つける。次に、Xを識別できるそのメンバによる最も古いイベントの世代番号を判定する。次に、そのリストの中央値になるようにXの「受信された世代」を定義する。
[1096] いくつかの例では、イベントXの「受信されたタイムスタンプ」Tは、Xを識別し、かつ/または見る、各メンバによる最初のイベントを含むイベント内のタイムスタンプの中央値とすることができる。たとえば、イベント1401の受信されたタイムスタンプは、イベント1402、1403、1403、および1408のタイムスタンプの値の中央値とすることができる。いくつかの例では、イベント1401のタイムスタンプは、中央値計算に含められ得る。他の例では、Xの受信されたタイムスタンプは、Xを識別するか見る各メンバによる最初のイベントであるイベント内の任意の他の値またはタイムスタンプの値の組合せとすることができる。たとえば、Xの受信されたタイムスタンプは、タイムスタンプの平均値、タイムスタンプの標準偏差、変更された平均値(たとえば、最も古いタイムスタンプおよび最も新しいタイムスタンプを計算から除去することによって)、および/または類似物に基づくものとすることができる。さらなる他の例では、拡張された中央値が使用され得る。
[1097] いくつかの例では、イベントの全順序および/または同意順序は、イベントをその受信されたラウンドによってソートし、その受信されたタイムスタンプによって同点を解決し、その署名によって同点を解決することによって計算される。他の例では、イベントの全順序は、イベントをその受信されたラウンドによってソートし、その受信された世代によって同点を解決し、その署名によって同点を解決することによって計算され得る。前述の段落は、イベントの受信されたラウンド、受信されたタイムスタンプ、および/または受信された世代を計算し、かつ/または定義するのに使用される関数を指定する。
[1098] 他の例では、各イベントの署名を使用するのではなく、同一の受信されたラウンドおよび/またはそのラウンド内の同一の受信された世代を有する有名なイベントまたは有名な目撃者の署名との排他的論理和をとられたそのイベントの署名が使用され得る。他の例では、イベント署名の任意の他の適当な組合せが、イベントの同意順序を定義するために同点を解決するのに使用され得る。
[1099] さらなる他の例では、リストの中央値として「受信された世代」を定義するのではなく、「受信された世代」は、リスト自体になるように定義され得る。次に、受信された世代によってソートするときに、2つの受信された世代は、そのリストの中央要素によって比較され得、同点は中央の直前の要素によって解決され、同点は中央の直後の要素によって解決され、同点が解決されるまで、これまでに使用された要素の前の要素と後の要素との間で交番することによって継続する。
[1100] いくつかの例では、中央値タイムスタンプは、「拡張された中央値」に置換され得る。そのような例では、タイムスタンプのリストは、単一の受信されたタイムスタンプではなく、イベントごとに定義され得る。イベントXのタイムスタンプのリストは、Xを識別し、かつ/または見る、各メンバによる最初のイベントを含むことができる。たとえば、図8では、イベント1401のタイムスタンプのリストは、イベント1402、1403、1403、および1408のタイムスタンプを含むことができる。いくつかの例では、イベント1401のタイムスタンプも含められ得る。タイムスタンプのリストを用いて同点を解決する(すなわち、2つのイベントが同一の受信されたラウンドを有する)ときには、各イベントのリストの中央タイムスタンプ(または、偶数の長さを有する場合に、2つの中央タイムスタンプの第1または第2のうちの所定のタイムスタンプ)が比較され得る。これらのタイムスタンプが同一である場合には、中央タイムスタンプの直後のタイムスタンプが、比較され得る。これらのタイムスタンプが同一である場合には、中央タイムスタンプの直前のタイムスタンプが、比較され得る。これらのタイムスタンプも同一である場合には、3つの既に比較されたタイムスタンプの後のタイムスタンプが比較される。これは、同点が解決されるまで交番し続けることができる。上の議論に似て、2つのリストが同一である場合には、同点は、2つの要素の署名によって解決され得る。
[1101] さらなる他の例では、「切り詰められた拡張された中央値」が、「拡張された中央値」の代わりに使用され得る。そのような例では、タイムスタンプのリスト全体が、イベントごとに記憶されるのではない。その代わりに、リストの中央付近の少数の値だけが、記憶され、比較に使用される。
[1102] 受信された中央値タイムスタンプは、イベントの全順序の計算に加えて、他の目的にも潜在的に使用され得る。たとえば、ボブは、アリスが同一の契約に署名するトランザクションを含むイベントXがあり、Xの受信されたタイムスタンプが、ある締切期限またはその前である場合に限って、ボブが契約によって束縛されることに合意すると述べる契約に署名する場合がある。その場合に、ボブは、上で説明した「受信された中央値タイムスタンプ」によって示されるように、アリスが締切期限の後に署名する場合に、その契約によっては束縛されないはずである。
[1103] いくつかの例では、分散データベースの状態は、同意に達した後に定義され得る。たとえば、S(R)が、ラウンドR内の有名な目撃者によって見られ得るイベントの集合である場合に、最終的に、S(R)内のイベントのすべてが、既知の受信されたラウンドおよび受信されたタイムスタンプを有する。その点で、S(R)内のイベントの同意順序は、既知であり、変化しない。この点に達した後に、メンバは、イベントおよびその順序の表現を計算し、かつ/または定義することができる。たとえば、メンバは、S(R)内のイベントのハッシュ値をその同意順序で計算することができる。その後、メンバは、ハッシュ値にデジタル署名し、そのメンバが定義する次のイベント内にそのハッシュ値を含めることができる。これは、S(R)内のイベントが、変化しない所与の順序を有するとそのメンバが判定したことを他のメンバに知らせるのに使用され得る。メンバのうちの少なくともM個(または任意の他の適切な個数もしくはメンバのパーセンテージ)がS(R)のハッシュ値に署名した(かつ、したがってハッシュ値によって表される順序に合意した)後に、イベントの同意リストは、メンバの署名のリストと一緒に、同意順序がS(R)内のイベントに関して主張されたとおりであることを照明するのに使用され得る単一のファイル(または他のデータ構造)を形成することができる。他の例では、イベントが、分散データベース・システムの状態を更新するトランザクションを含む(本明細書で説明するように)場合に、ハッシュ値は、S(R)内のイベントのトランザクションを同意順序で適用した後の分散データベース・システムの状態のハッシュ値とすることができる。分散データベースの状態に関するさらなる詳細は、図13を参照して議論される。
[1104] いくつかの例では、M(上で説明した)は、単に全メンバの個数の分数、パーセンテージ、および/または値であるのではなく、各メンバに割り当てられた重み値に基づくものとすることができる。そのような例では、各メンバは、分散データベース・システム内でのその関心および/または影響に関連するステークを有する。そのようなステークは、重み値とすることができる。そのメンバによって定義された各イベントは、その定義するメンバの重み値を有すると言われ得る。次に、Mは、全メンバの総ステークの分数とすることができる。Mに依存するものとして上で説明されたイベントは、少なくともM個のステーク和を有するメンバの集合が合意するときに発生する。したがって、そのステークに基づいて、ある種のメンバは、システムと同意順序がどのように導出されるのかとに対するより大きい影響を有することができる。いくつかの例では、あるイベント内のトランザクションは、1つまたは複数のメンバのステークを変更し、新しいメンバを追加し、かつ/またはメンバを削除することができる。そのようなトランザクションが、Rの受信されたラウンドを有する場合に、受信されたラウンドが計算された後に、ラウンドR目撃者の後のイベントは、変更されたステークおよびメンバの変更されたリストを使用して、そのラウンド番号および他の情報を再計算する。ラウンドRイベントが有名であるかどうかに関する投票は、古いステークおよびメンバ・リストを使用するが、Rの後のラウンドに関する投票は、新しいステークおよびメンバ・リストを使用する。同意を判定するための重み値の使用に関する追加の詳細は、参照によってその全体が本明細書に組み込まれている、2016年12月21日に出願した米国特許出願第15/387048号、名称「Methods And Apparatus For A Distributed Database Within A Network」、現在は米国特許第9646029号に記載されている。
[1105] 前述の項、定義、およびアルゴリズムは、図8〜図12Bで説明される実施形態および概念を例示するのに使用される。図10Aおよび図10Bは、数学的な形で示された同意方法および/またはプロセスの例のアプリケーションを示す。図11Aおよび図11Bは、数学的な形で示された同意方法および/またはプロセスの第2の例のアプリケーションを示し、図12Aおよび図12Bは、数学的な形で示された同意方法および/またはプロセスの第3の例のアプリケーションを示す。
[1106] 図2では、データベース収束モジュール211および通信モジュール212が、図2ではプロセッサ210内で実施されるものとして図示されている。他の実施形態では、データベース収束モジュール211および/または通信モジュール212は、メモリ220内で実施され得る。さらなる他の実施形態では、データベース収束モジュール211および/または通信モジュール212は、ハードウェアベースとされ得る(たとえば、ASIC、FPGAなど)。いくつかの実施形態では、分散データベース・インスタンス221は、図1に示された分散データベース・システム100の分散データベース・インスタンス114、124、134、144に類似するものとすることができる。
[1107] 図7は、一実施形態による、2つの計算デバイス同期化イベントの信号フロー図を示す。具体的には、いくつかの実施形態で、分散データベース・インスタンス703および803は、収束を得るためにイベントを交換することができる。計算デバイス700は、ランダムに、計算デバイス700との関係に基づいて、計算デバイス700への近接に基づいて、計算デバイス700に関連する順序付きリストに基づいて、および/または類似物によって、計算デバイス800との同期化を選択することができる。いくつかの実施形態では、計算デバイス800が、分散データベース・システムに属する計算デバイスの集合から計算デバイス700によって選択され得るので、計算デバイス700は、複数回連続して計算デバイス800を選択することができ、あるいは、暫くの間、計算デバイス800を選択しないものとすることができる。他の実施形態では、以前に選択された計算デバイスの表示が、計算デバイス700で記憶され得る。そのような実施形態では、計算デバイス700は、計算デバイス800をもう一度選択できるようになる前に、所定の回数の選択を待つことができる。上で説明したように、分散データベース・インスタンス703および803は、それぞれ計算デバイス700のメモリ内および計算デバイス800のメモリ内で実施され得る。
[1108] 図3〜図6は、一実施形態による、ハッシュグラフの例を示す。5つのメンバがあり、そのそれぞれが、暗い垂直線によって表される。各円は、イベントを表す。あるイベントからの2つの下向きの線は、2つの以前のイベントのハッシュを表す。この例のすべてのイベントは、各メンバの最初のイベントを除いて、2つの下向きの線(同一のメンバへの1つの暗い線および別のメンバへの1つの明るい線)を有する。時刻は、上向きに進行する。図3〜図6では、分散データベースの計算デバイスは、アリス、ボブ、キャロル、デイブ、およびエドとして示される。そのような表示が、図1に示されこれに関して説明された計算デバイス110、120、130、および140に構造的および機能的に類似する計算デバイスを指すことを理解されたい。
[1109] 例のシステム1 計算デバイス700がアリスと呼ばれ、計算デバイス800がボブと呼ばれる場合に、これらの間の同期化は、図7に示されたものとすることができる。アリスとボブとの間の同期化は、次のようなものとすることができる。
[1110] −アリスが、分散データベース703内に記憶されたイベントをボブに送る。
[1111] −ボブが、以下を含む新しいイベントを作成し、かつ/または定義する
[1112] −−ボブが作成し、かつ/または定義した最後のイベントのハッシュ
[1113] −−アリスが作成し、かつ/または定義した最後のイベントのハッシュ
[1114] −−上記の、ボブによるデジタル署名
[1115] −ボブが、分散データベース・インスタンス803内に記憶されたイベントをアリスに送る。
[1116] −アリスが、新しいイベントを作成し、かつ/または定義する。
[1117] −アリスが、そのイベントをボブに送る
[1118] −アリスが、ハッシュグラフの関数としてイベントの全順序を計算する
[1119] −ボブが、ハッシュグラフの関数としてイベントの全順序を計算する
[1120] 任意の所与の時刻に、メンバは、それまでに受信されたイベントを、各イベントを作成し、かつ/または定義した計算デバイスおよび/または分散データベース・インスタンスに関連する識別子と共に記憶することができる。各イベントは、最初のイベント(親ハッシュを有しない)を除いて、2つのより以前のイベントのハッシュと、新しいメンバ(それらに参加するように勧誘した既存メンバのイベントを表す、単一の親イベント・ハッシュを有する)ごとの最初のイベントとを含む。イベントのこの集合を表す図が、描かれ得る。この図は、メンバごとの垂直線と、そのメンバによって作成され、かつ/または定義されたイベントごとのその線上のドットとを示すことができる。イベント(より高いドット)がより以前のイベント(より低いドット)のハッシュを含むときには必ず、対角線が、2つのドットの間に描かれる。イベントは、そのイベントがそのイベントのハッシュを介して(直接にまたは介在するイベントを介してのいずれかで)他のイベントを参照できる場合に、別のイベントにリンクされると言われ得る。
[1121] たとえば、図3は、ハッシュグラフ600の例を示す。イベント602は、キャロルとの同期化の結果として、その同期化の後にボブによって作成され、かつ/または定義される。イベント602は、イベント604(ボブによって作成され、かつ/または定義された以前のイベント)のハッシュと、イベント606(キャロルによって作成され、かつ/または定義された以前のイベント)のハッシュとを含む。いくつかの実施形態では、たとえば、イベント602内に含まれるイベント604のハッシュは、その直接の先祖イベントであるイベント608および610へのポインタを含む。したがって、ボブは、イベント608および610を参照するのにイベント602を使用し、以前のイベントへのポインタを使用してハッシュグラフを再構成することができる。いくつかの例では、イベント602が、より以前の先祖イベントを介してハッシュグラフ600内のイベントのそれぞれを参照できるので、イベント602は、ハッシュグラフ600内の他のイベントにリンクされると言われ得る。たとえば、イベント602は、イベント604を介してイベント608にリンクされる。別の例として、イベント602は、イベント606およびイベント612を介してイベント616にリンクされる。
[1122] 例のシステム2 イベントが、記録されるトランザクションの「ペイロード」または他の情報をも含む、例のシステム1からのシステム。そのようなペイロードは、計算デバイスの直前のイベント以降に発生しかつ/または定義されたすべてのトランザクションおよび/または情報を用いてイベントを更新するのに使用され得る。たとえば、イベント602は、イベント604が作成され、かつ/または定義された時以降にボブによって実行されたすべてのトランザクションを含むことができる。したがって、イベント602を他の計算デバイスと同期化するときに、ボブは、この情報を共有することができる。したがって、ボブによって実行されたトランザクションは、イベントに関連付けられ、イベントを使用して他のメンバと共有され得る。
[1123] 例のシステム3 イベントが、デバッギング、診断、および/または他の目的に有用な現在時刻および/または現在日付をも含む、例のシステム1からのシステム。時刻および/または日付は、計算デバイス(たとえば、ボブ)がイベントを作成し、かつ/または定義する時のローカル時刻および/またはローカル日付とすることができる。そのような実施形態では、そのようなローカル時刻および/またはローカル日付は、残りのデバイスと同期化されない。他の実施形態では、時刻および/または日付は、デバイスにまたがって同期化され得る(たとえば、イベントを交換するときに)。さらなる他の実施形態では、グローバル・タイマが、時刻および/または日付を判定するのに使用され得る。
[1124] 例のシステム4 アリスが、ボブによって作成され、かつ/または定義されたボブ・イベントおよびそのようなイベントの先祖イベントを送らない、例のシステム1からのシステム。イベントxは、yがxのハッシュを含むか、yがxの先祖であるイベントのハッシュを含む場合に、イベントyの先祖である。同様に言えば、そのような実施形態では、ボブは、まだアリスによって記憶されていないイベントをアリスに送り、アリスによって既に記憶されているイベントは送らない。
[1125] たとえば、図4は、イベント622(黒い円)の先祖イベント(ドット付きの円)および子孫イベント(縞付きの円)を示す例のハッシュグラフ620を示す。線は、イベントに関する半順序を確立し、先祖は、黒いイベントの前になり、子孫は、黒いイベントの後になる。半順序は、白いイベントが黒いイベントの前後のどちらであるのかを示さず、したがって、全順序が、それらのシーケンスを決定するのに使用される。別の例として、図5は、1つの特定のイベント(塗り潰された円)と、各メンバがそのイベントの表示を受信する最初の時刻(縞付きの円)とを示す例のハッシュグラフを示す。キャロルが、イベント624を作成し、かつ/または定義するためにデイブと同期化するときに、キャロルが既にイベント622の先祖イベントを知っており、受信し終えているので、デイブは、そのようなイベントをキャロルに送らない。その代わりに、デイブは、キャロルがまだ受信しておらず、かつ/またはキャロルの分散データベース・インスタンス内に記憶していないイベントをキャロルに送る。いくつかの実施形態では、デイブは、キャロルが以前に受信したイベントに関してデイブのハッシュグラフが明らかにするものに基づいて、どのイベントをキャロルに送るべきかを識別することができる。イベント622は、イベント626の先祖である。したがって、イベント626のときに、デイブは、既にイベント622を受信している。図4は、デイブが、キャロルからイベント622を受信したボブからイベント622を受信したエドからイベント622を受信したことを示す。さらに、イベント624のときに、イベント622は、デイブが受信済みである、キャロルによって作成され、かつ/または定義された最後のイベントである。したがって、デイブは、デイブが記憶した、イベント622およびその先祖以外のイベントをキャロルに送ることができる。さらに、デイブからイベント626を受信する際に、キャロルは、キャロルの分散データベース・インスタンス内に記憶されたイベント内のポインタに基づいて、ハッシュグラフを再構成することができる。他の実施形態では、デイブは、キャロルがイベント622をデイブに送ること(図4には図示せず)と、デイブが、キャロルが既に受信済みであるイベントを識別するためにイベント622(およびその中の参照)を使用して識別することとに基づいて、キャロルに送るべきイベントを識別することができる。
[1126] 例のシステム5 受信側がイベントの先祖を受信し、かつ/または記憶し終えた後になるまでイベントが送られなくなるような順序で、両方のメンバが、他方にイベントを送る、例のシステム1からのシステム。したがって、送る側は、最も古いものから最も新しいものへとイベントを送り、受信側が、既に受信された2つの先祖イベントと2つのハッシュを比較することによって、イベントが受信されるときに各イベントに関する2つのハッシュをチェックできるようになる。送る側は、送る側のハッシュグラフ(たとえば、送る側によって定義されるデータベース状態変数)と、受信側が既に何を受信したことをそのハッシュグラフが示すのかとに基づいて、受信側に送るべきイベントを識別することができる。図3を参照すると、たとえば、ボブがイベント602を定義するためにキャロルと同期化しているときに、キャロルは、イベント619が、キャロルが受信した、ボブによって作成され、かつ/または定義された最後のイベントであることを識別することができる。したがって、キャロルは、ボブがそのイベントおよびその先祖について知っていると判定することができる。したがって、キャロルは、まずイベント618およびイベント616(すなわち、キャロルが受信済みである、ボブがまだ受信していない最も古いイベント)をボブに送ることができる。その後、キャロルは、イベント612を、およびその後にイベント606をボブに送ることができる。これは、ボブが、イベントを簡単にリンクし、ボブのハッシュグラフを再構成することを可能にする。キャロルのハッシュグラフを使用して、ボブがまだ受信していないイベントを識別することは、ボブがキャロルにイベントを要求しないので、同期化の効率を高めることができ、ネットワーク・トラフィックを減らすことができる。
[1127] 他の実施形態では、最も最近のイベントが最初に送られ得る。受信側が(最も最近のイベント内の2つの以前のイベントのハッシュおよび/または最も最近のイベント内の以前のイベントへのポインタに基づいて)、それらが2つの以前のイベントのうちの1つをまだ受信していないと判定する場合に、受信側は、送る側に、そのようなイベントを送るように要求することができる。これは、受信側が、最も最近のイベントの先祖を受信し、かつ/または記憶し終えるまで発生し得る。図3を参照すると、そのような実施形態では、たとえば、ボブがキャロルからイベント606を受信するときに、ボブは、イベント606内のイベント612およびイベント614のハッシュを識別することができる。ボブは、アリスがイベント604を作成し、かつ/または定義するときに、イベント614がアリスから以前に受信されたと判定することができる。したがって、ボブは、キャロルにイベント614を要求する必要がない。ボブは、イベント612がまだ受信されていないと判定することもできる。その後、ボブは、キャロルにイベント612を要求することができる。その後、ボブは、イベント612内のハッシュに基づいて、ボブがイベント616または618を受信していないと判定し、したがって、これらのイベントをキャロルに要求することができる。その後、イベント616および618に基づいて、ボブは、彼がイベント606の先祖を受信したと判定することができる。
[1128] 例のシステム6 メンバが次に送るべき複数のイベントの間で選択を有するときに、イベントが、そのメンバによってこれまでに作成され、かつ/または定義された送られるバイトの総数を最小化するように選択されるという追加の制約を有する、例のシステム5からのシステム。たとえば、アリスが、ボブに送られるべき残された2つのイベントだけを有し、一方が100バイトであり、キャロルによって作成されかつ/または定義され、一方が10バイトであり、デイブによって作成されかつ/または定義され、これまでに、この同期化でアリスがキャロルによるイベントの200バイトおよびデイブによる210バイトを既に送った場合に、アリスは、まずデイブにイベントを送らなければならず、その後にキャロルにイベントを送らなければならない。というのは、210+10<100+200であるからである。これは、単一のメンバが単一の巨大なイベントまたは小さいイベントの洪水のいずれかを送出する攻撃に対処するのに使用され得る。トラフィックが、ほとんどのメンバのバイト限界を超える(例のシステム7に関して議論されるように)場合には、例のシステム6の方法は、合法的なユーザのイベントではなく攻撃者のイベントが無視されることを保証することができる。同様に言えば、攻撃は、より大きいイベントの前により小さいイベントを送る(接続を縛り上げる1つの巨大なイベントに対して防御するために)ことによって減らされ得る。さらに、メンバが、単一の同期化内でイベントのそれぞれを送ることができない(たとえば、ネットワーク制限、メンバのバイト制限などの故に)場合には、そのメンバは、攻撃者によって定義されかつ/または作成されたイベントを単に送り、他のメンバによって作成されかつ/または定義された(少数の)イベントを全く送らないのではなく、各メンバからの少数のイベントを送ることができる。
[1129] 例のシステム7 ボブが、彼がこの同期化中に受信したいバイトの最大個数を示す数をアリスに送り、アリスが彼女の限度を応答する追加の第1ステップを有する例のシステム1からのシステム。その後、アリスは、次のイベントがこの限度を超えるときに送出を停止する。ボブは同じことを行う。そのような実施形態では、これが、転送されるバイト数を制限する。これは、収束するための時間を増やす可能性があるが、1同期化あたりのネットワーク・トラフィックの量を減らす。
[1130] 例のシステム8 以下のステップが同期化プロセスの初めに追加される、例のシステム1からのシステム。
[1131] −アリスが、ボブによって作成されかつ/もしくは定義されたイベントまたはボブによって作成されかつ/もしくは定義されたイベントの先祖であるイベントを除く、彼女が受信しかつ/または記憶したイベントの集合Sを識別する。
[1132] −アリスが、Sに含まれる各イベントを作成し、かつ/または定義したメンバを識別し、メンバのID番号のリストをボブに送る。アリスは、彼女が既に受信し、かつ/または記憶している、各メンバによって作成されかつ/または定義された複数のイベントをも送る。
[1133] −ボブが、他のメンバによって作成され、かつ/または定義された、彼が受信したイベントの個数のリストを応答する。
[1134] −その後、アリスは、ボブがまだ受信していないイベントだけをボブに送る。たとえば、アリスが、彼女がキャロルによって作成され、かつ/または定義された100個のイベントを受信したことをボブに示し、ボブが、彼がキャロルによって作成され、かつ/または定義された95個のイベントを受信したことを応答する場合に、アリスは、キャロルによって作成され、かつ/または定義された最も最近の5個のイベントだけを送る。
[1135] 例のシステム9 詐欺師を識別し、かつ/または処理するための追加機構を有する、例のシステム1からのシステム。各イベントは、そのメンバによって作成され、かつ/または定義された最後のイベントからのハッシュ(「自己ハッシュ」)と、別のメンバによって作成され、かつ/または定義された最後のイベントからのハッシュ(「外来ハッシュ(foreign hash)」)という2つのハッシュを含む。あるメンバが、同一の自己ハッシュを有する2つの異なるイベントを作成し、かつ/または定義する場合に、そのメンバは「詐欺師」である。アリスが、デイブによって作成され、かつ/または定義された、同一の自己ハッシュを有する2つの異なるイベントを受信することによって、デイブが詐欺師であることを発見する場合に、彼女は、彼が詐欺師であることのインジケータを記憶し、将来の彼との同期化を控える。彼女が、彼が詐欺師であることを発見し、それでももう一度彼と同期化し、その事実を記録する新しいイベントを作成し、かつ/または定義する場合には、アリスも詐欺師になり、アリスがさらにデイブと同期化することを知った他のメンバは、アリスとの同期化を停止する。いくつかの実施形態では、これは、一方向の同期化だけに影響する。たとえば、アリスが、識別子のリストと、彼女が受信したイベントの、メンバごとの個数とを送るときに、彼女は、詐欺師のIDまたはカウントを送らず、したがって、ボブは、対応する個数を応答しない。その後、アリスは、彼女が受信し、それに関してボブがそのようなイベントを受信したことの表示を受信していない詐欺師のイベントをボブに送る。その同期化が終了した後に、ボブも、デイブが詐欺師であると判定することができ(彼がまだデイブが詐欺師であると識別していない場合に)、ボブも、詐欺師との同期化を拒絶する。
[1136] 例のシステム10 アリスが、彼女が識別し、そのイベントを彼女がまだ記憶している詐欺師のリストをボブに送ることによって同期化プロセスを開始し、ボブが、アリスが識別した詐欺師に加えて、彼が識別したすべての詐欺師を応答することを追加した、例のシステム9からのシステム。その後、彼らは通常通りに継続するが、お互いと同期化するときに、詐欺師のカウントを与えない。
[1137] 例のシステム11 同期化中に受信されるすべての新しいイベントの内部のトランザクションに基づいて現在の状態(たとえば、システムのメンバによって定義されるデータベース状態変数によって取り込まれる)を繰り返して更新するプロセスを有する、例のシステム1内のシステム。これは、イベントのシーケンスが変化するときに必ず、より以前の状態のコピーに戻ることと、新しい順序でイベントを処理することによって現在の状態を再計算することとによって、その状態(たとえば、イベントの順序)を繰り返して再構築する第2のプロセスを含むこともできる。したがって、たとえば、各計算デバイスは、状態の2つのバージョンを維持することができる(新しいイベントおよびトランザクションが受信されるときに更新されるバージョンと、同意に達した後に限って更新されるバージョンと)。ある点で(たとえば、ある時間期間の後、所与の個数のイベントが定義され、かつ/または受信された後など)、新しいイベントおよびトランザクションが受信されるときに更新される状態のバージョンは、破棄され得、同意に達した後に限って更新される状態の新しいコピーが、新しいイベントおよびトランザクションが受信されるときに更新される状態の新しいバージョンとして作られ得る。これは、両方の状態の同期化を保証することができる。
[1138] いくつかの実施形態では、現在の状態は、トランザクションの結果に関連する状態、差引勘定、条件、および/または類似物である。同様に言えば、状態は、トランザクションによって変更されるデータ構造および/または変数を含むことができる。たとえば、トランザクションが、銀行口座の間の送金である場合に、現在の状態は、口座の現在の差引勘定とすることができる。別の例として、トランザクションが、マルチプレイヤ・ゲームに関連する場合に、現在の状態は、ゲームに関連する、位置、ライフ数、入手したアイテム、ゲームの状態、および/または類似物とすることができる。
[1139] 例のシステム12 状態(たとえば、銀行口座差引勘定、ゲーム状態など)を維持するための「高速クローン」arrayListの使用によって高速化された、例のシステム11内のシステム。高速クローンarrayListは、1つの追加の特徴すなわち、オリジナルのコピーである新しいオブジェクトを作成し、かつ/または定義するように見える「クローン」動作をサポートする、配列のように働くデータ構造である。クローンは、クローンに対する変更がオリジナルには影響しないので、真のコピーであるかのように働く。しかし、クローニング動作は、真のコピーの作成より高速である。というのは、クローンの作成が、あるarrayListの内容全体を別のarrayListにコピーすることおよび/または更新することを実際には伴わないからである。オリジナル・リストの2つのクローンおよび/またはコピーを有するのではなく、それぞれがハッシュ・テーブルおよびオリジナル・リストへのポインタを有する2つの小さいオブジェクトが、使用され得る。書込が、クローンに対して行われるときに、ハッシュ・テーブルは、どの要素が変更されるのかと新しい値とを記憶する。読取が、ある位置に対して実行されるときには、まずハッシュ・テーブルがチェックされ、その要素が変更されている場合には、ハッシュ・テーブルからの新しい値が返される。そうでない場合には、オリジナルのarrayListからのその要素が返される。この形で、2つの「クローン」は、当初には、オリジナルのarrayListへのポインタにすぎない。しかし、それぞれが繰り返して変更されるときに、それぞれは、それ自体とオリジナルのリストとの間の差を記憶する大きいハッシュ・テーブルを有するように成長する。クローンは、それ自体がクローニングされ、データ構造を、それぞれがそれ自体のハッシュ・テーブルとその親へのポインタとを有するオブジェクトのツリーに拡大させることができる。したがって、読取は、要求されたデータを有する頂点が見つかるか、ルートに達するまで、木を登るウォークを引き起こす。頂点が大きすぎるか複雑すぎるようになる場合には、頂点を、親の真のコピーに置換することができ、ハッシュ・テーブル内の変更は、コピーに対して行われ得、ハッシュ・テーブルは破棄され得る。さらに、クローンがもはや不要になった場合には、ガーベジ・コレクション中に、クローンは、木から除去され得、木は、縮小され得る。
[1140] 例のシステム13 状態(たとえば、銀行口座差引勘定、ゲーム状態など)を維持するための「高速クローン」ハッシュ・テーブルの使用によって高速化された、例のシステム11内のシステム。これは、木のルートがarrayListではなくハッシュ・テーブルであることを除いて、システム12と同一である。
[1141] 例のシステム14 状態(たとえば、銀行口座差引勘定、ゲーム状態など)を維持するための「高速クローン」リレーショナル・データベースの使用によって高速化された、例のシステム11内のシステム。たとえば、高速クローン・データベースは、例のシステム11に関して議論したように、状態の2つのコピーを維持するのに使用され得る。これは、既存のリレーショナル・データベース管理システム(RDBMS)の周囲のラッパーとして働くオブジェクトである。各見掛けの「クローン」は、実際にはID番号およびデータベースを含むオブジェクトへのポインタを有するオブジェクトである。ユーザのコードが、データベースに対して構造化照会言語(SQL)照会を実行することを試みるときに、その照会は、まず変更され、その後に実際のデータベースに送られる。実際のデータベースは、各テーブルがクローンIDのための1つの追加フィールドを有することを除いて、クライアント・コードによって見られるデータベースと同一である。たとえば、クローンID 1を有するオリジナル・データベースがあり、ID 2および3を有するそのデータベースの2つのクローンが作られる(たとえば、状態の2つのコピーを維持するのに使用される)と仮定する。各テーブル内の各行は、クローンIDフィールド内に1、2、または3を有する。照会が、ユーザ・コードからクローン2に来るときに、照会は、照会がそのフィールド内に2または1を有する行からのみ読み取るようにするために変更される。同様に、3への読取は、3または1のIDを有する行を調べる。構造化照会言語(SQL)コマンドが、クローン2に行き、ある行を削除するように告げ、その行が1を有する場合には、そのコマンドは、1を3に変更しなければならず、これは、その行を、もはやクローン2および3によって共有されず、今や、3のみに可視であるものとしてマークする。動作中に複数のクローンがある場合には、その行の複数のコピーが挿入され得、それぞれが、異なるクローンのIDに変更され得、その結果、新しい行は、その行を「削除」したクローン以外のクローンに可視になる。同様に、ある行が、クローン2に追加される場合に、その行は、2のIDを有するテーブルに追加される。行の変更は、削除およびその後の挿入と同等である。前と同様に、複数のクローンがガーベジ・コレクションされる場合には、木は、単純化され得る。その木の構造は、クローンからアクセス可能ではなく、純粋に内部的に使用される追加テーブル内に記憶される。
[1142] 例のシステム15 状態を維持するための「高速クローン」ファイル・システムの使用によって高速化された、例のシステム11内のシステム。これは、ファイル・システムの周囲のラッパーとして働くオブジェクトである。ファイル・システムは、ファイル・システムの異なるバージョンを管理するために高速クローン・リレーショナル・データベースを使用して、既存のファイル・システムの上に構築される。基礎になるファイル・システムは、1つのディレクトリ内にまたはファイル名に従って分割されて(ディレクトリを小さく保つために)のいずれかで、多数のファイルを記憶する。ディレクトリ・ツリーは、データベース内に記憶され得、ホスト・ファイル・システムには提供されない。ファイルまたはディレクトリがクローニングされるときには、「クローン」は、ID番号を有するオブジェクトにすぎず、データベースは、このクローンが現在存在することを反映するように変更される。高速クローン・ファイル・システムがクローニングされる場合に、それは、ユーザにとって、新しいハード・ドライブ全体が作成され、かつ/または定義され、既存のハード・ドライブのコピーを用いて初期化されるかのように見える。一方のコピーに対する変更は、他方のコピーに対して影響を有することができない。実際には、各ファイルまたはディレクトリの1つのコピーだけがあり、あるクローンを介してファイルが変更されるときに、コピーが行われる。
[1143] 例のシステム16 高速クローン・ファイル・システム内のファイルのNバイト部分ごとにホスト・オペレーティング・システム上で別々のファイルが作成され、かつ/または定義される、例のシステム15内のシステム。Nは、たとえば4096または1024など、なんらかの適当なサイズとすることができる。この形で、1バイトが大きいファイル内で変更される場合に、大きいファイルの1つのチャンクだけが、コピーされ、変更される。これは、数バイトだけが異なる多数のファイルをドライブ上に記憶する時の効率をも高める。
[1144] 例のシステム17 各メンバが、それが作成し、かつ/または定義するイベントの一部またはすべてに、ある以前の時刻までに発生したイベントの個数と一緒に、その点での状態のハッシュを含め、現在はイベントの順序に関する同意があることをそのメンバが認識し、かつ/または識別することを示す、例のシステム11内のシステム。あるメンバが、所与の状態に関するユーザの過半数からのそのようなハッシュを含む署名付きイベントを収集した後に、そのメンバは、その点での同意状態の証拠としてそれを記憶し、その点の前のイベントおよびトランザクションをメモリから削除することができる。
[1145] 例のシステム18 中央値または過半数を計算する動作が、重み付きの中央値または重み付きの過半数に置換され、メンバは、その「ステーク」によって重みを付けられる、例のシステム1内のシステム。ステークは、そのメンバの票が何票になるのかを示す数である。ステークは、暗号通貨の持ち分、またはメンバが参加するように初めて勧誘されたときに割り当てられ、その後、メンバが参加するように勧誘する新しいメンバの間で分割される任意の数とすることができる。古いイベントは、十分なメンバが同意状態に合意し終え、その結果、彼らの総ステークが、存在するステークの過半数になるときに、破棄され得る。全順序が、メンバによって貢献されるランクの中央値を使用して計算される場合に、その結果は、半分のメンバがそれより高いランクを有し、半分のメンバがそれより低いランクを有する数である。その一方で、全順序が、重み付き中央値を使用して計算される場合には、その結果は、総ステークの約半分がそれより低いランクに関連し、総ステークの約半分がそれより高いランクに関連する数である。重み付きの投票および中央値は、あるメンバが、膨大な数の「靴下パペット」ユーザに参加するように勧誘し、これらのユーザのそれぞれが、単純に勧誘するメンバによって制御された偽名である、シビル攻撃を防ぐのに有用である可能性がある。勧誘するメンバが、勧誘に伴って彼らのステークを分割することを強制される場合に、靴下パペットは、同意結果を制御する試みにおいて攻撃者にとって有用ではなくなる。したがって、プルーフオブステークは、いくつかの状況で有用である可能性がある。
[1146] 例のシステム19 単一の分散データベースではなく、階層内に複数のデータベースがある、例のシステム1内のシステム。たとえば、ユーザがそのメンバである単一のデータベースがあり、その後、複数のより小さいデータベースまたは「チャンク」があり、そのそれぞれがメンバの部分集合を有する場合がある。チャンク内でイベントが発生するときには、それらのイベントは、そのチャンクのメンバの間で同期化され、そのチャンクの外部のメンバの間では同期化されない。その後、時々、同意順序がチャンク内で決定された後に、結果の状態(または同意全順序を有するイベント)は、大きいデータベースのメンバシップ全体と共有され得る。
[1147] 例のシステム20 状態(たとえば、システムのメンバによって定義されたデータベース状態変数によって取り込まれる)を更新するソフトウェアを更新するイベントを有する能力を有する、例のシステム11内のシステム。たとえば、イベントXおよびYが、これらのイベント内のトランザクションを読み取り、その後に適当に状態を変更するソフトウェア・コードに従って状態を変更するトランザクションを含むことができる。その後、イベントZは、ソフトウェアの新しいバージョンが現在入手可能であることの通知を含むことができる。全順序が、イベントが順序X、Z、Yで発生すると告げる場合に、状態は、古いソフトウェアを用いてX内のトランザクションを処理し、その後、新しいソフトウェアを用いてY内のトランザクションを処理することによって更新され得る。しかし、同意順序がX、Y、Zである場合には、XとYとの両方が、古いソフトウェアを用いて更新され得、これは、異なる最終的な状態を与えることができる。したがって、そのような実施形態では、コードを更新するための通知が、イベント内で発生することができ、その結果、コミュニティ(たとえば、分散データベース内のメンバ)は、いつ古いバージョンから新しいバージョンに切り替えるべきかに関する同意を達成できるようになる。これは、メンバが同期化された状態を維持することを保証する。これは、システムが、再ブートしまたはプロセスを再開始する必要なしに、アップグレード中であっても走行したままになれることをも保証する。
[1148] 上で説明したシステムは、最終的な同意と共に分散同意のための効率的な収束機構を作成し、かつ/または達成すると期待される。複数の定理が、以下で示すようにこれに関して証明され得る。
[1149] 例の定理1 イベントxが、半順序でイベントyに先行する場合に、所与のメンバの、所与の時刻の他のメンバの知識において、他のメンバのそれぞれは、yの前にxの表示を受信するか、yの表示をまだ受信していないかのいずれかである。
[1150] 証明 イベントxが半順序でイベントyに先行する場合に、xは、yの先祖である。あるメンバが、初めてyの表示を受信するときに、そのメンバは、より以前にxの表示を既に受信している(その場合に、彼らは、yの前にxについて聞いている)か、同期化がxとyとの両方をそのメンバに提供するケースである(その場合に、彼らは、その同期化中にyの前にxについて聞く。というのは、単一の同期化中に受信されるイベントが、例のシステム5に関して説明したように、先祖関係と一貫する順序で受信されたと考えられるからである)かのいずれかである。証明終り。
[1151] 例の定理2 任意の所与のハッシュグラフに関して、xが半順序でyに先行する場合に、xは、そのハッシュグラフに関して計算される全順序でyに先行する。
[1152] 証明 xが半順序でyに先行する場合に、定理1によって
[1153] すべてのiについて、rank(i,x)<rank(i,y)である。
[1154] ここで、rank(i,x)は、メンバiによってイベントxに割り当てられるランクであり、xがメンバiによって受信される最初のイベントである場合には1、2番目である場合には2、以下同様である。med(x)が、すべてのiにわたるrank(i,x)の中央値であり、med(y)も同様であるものとする。
[1155] 所与のkについて、rank(i1,x)が、小さい方からk番目のxランクになり、rank(i2,y)が、小さい方からk番目のyランクになるようにi1およびi2を選択する。すると、
[1156] rank(i1,x)<rank(i2,y)である。
[1157] これは、rank(i2,y)が、yランクのk以上であり、yランクのそれぞれが、対応するxランクより厳密に大きいからである。したがって、rank(i2,y)は、xランクの少なくともkより厳密に大きく、したがって、小さい方からk番目のxランクより厳密に大きい。この議論は、すべてのkにあてはまる。
[1158] nが、メンバの数(i値の個数である)であるものとする。nは、奇数または偶数のいずれかでなければならない。nが奇数である場合には、k=(n+1)/2であり、小さい方からk番目のランクが中央値になるものとする。したがって、med(x)<med(y)である。nが偶数である場合には、k=n/2のときに、小さい方からk番目のxランクは、小さい方からk番目のyランクより厳密に小さく、小さい方から(k+1)番目のxランクは、小さい方から(k+1)番目のyランクより厳密に小さい。したがって、この2つのxランクの平均値は、2つのyランクの平均値より小さい。したがって、med(x)<med(y)である。したがって、両方のケースで、xランクの中央値は、yランクの中央値より厳密に小さい。したがって、全順序が、中央値ランクによってアクションをソートすることによって定義される場合に、xは、全順序でyに先行する。証明終り。
[1159] 例の定理3 「ゴシップ期間」が、既存のイベントが同期化を介して全メンバに伝搬するための時間の長さである場合には、
[1160] 1ゴシップ期間の後 全メンバがイベントを受信し終える
[1161] 2ゴシップ期間の後 全メンバがこれらのイベントの順序に合意する
[1162] 3ゴシップ期間の後 全メンバが、合意に達したことを知る
[1163] 4ゴシップ期間の後 全メンバが、他の全メンバからデジタル署名を入手し、この同意順序に裏書する。
[1164] 証明 S0が、所与の時刻T0までに作成され、かつ/または定義されたイベントの集合であるものとする。すべてのメンバが、何度でも、すべての他のメンバと最終的に同期化する場合に、1の確率で、S0内のイベントがすべてのメンバに行き渡り終え、その結果、すべてのメンバがすべてのイベントを知っている時刻T1が最終的に存在する。それは、第1のゴシップ期間の終りである。S1が、時刻T1に存在し、T0にはまだ存在しなかったイベントの集合であるものとする。1の確率で、すべてのメンバが、時刻T1に存在したイベントである集合S1内のすべてのイベントを受信し終える時刻T2が最終的に存在する。それは、第2のゴシップ期間の終りである。同様に、T3は、T2までに存在するがT1の前には存在しない、S2内のすべてのイベントが、全メンバに行き渡り終える時である。各ゴシップ期間が、最終的に1の確率で終了することに留意されたい。平均して、それぞれは、n個のメンバがある場合に、log2(n)回の同期化を実行するのに要する時間程度に存続する。
[1165] 時刻T1までに、すべてのメンバは、S0内のすべてのイベントを受信済みになる。
[1166] 時刻T2までに、所与のメンバ、アリスは、S0内のすべてのイベントを受信する他のメンバのそれぞれのレコードを受信済みになる。したがって、アリスは、すべてのメンバのS0内のすべてのアクションのランク(そのメンバがそのアクションを受信した順序である)を計算し、その後、ランクの中央値によってイベントをソートすることができる。結果の全順序は、S0内のイベントに関して変化しない。これは、結果の順序が、各メンバがこれらのイベントのそれぞれの表示を初めて受信した順序(変化しない)の関数であるからである。アリスの計算された順序が、S0イベントの間に散在するS1からのいくつかのイベントを有することが可能である。それらのS1イベントは、S0イベントのシーケンス内に含まれる場合に、それでも変化する可能性がある。しかし、S0内のイベントの相対順序は変化しない。
[1167] 時刻T3までに、アリスは、S0およびS1の和集合の全順序を学習し終え、その和集合内のイベントの相対順序は、変化しなくなる。さらに、彼女は、このシーケンス内で、S1からの最も早期のイベントを発見することができ、S1の前のイベントのシーケンスが、S0の外部の新しいイベントの挿入によってさえ変化しないと結論することができる。したがって、時刻T3までに、アリスは、最初のS1イベントの前のヒストリ内のイベントの順序に関して同意に達したと判定することができる。彼女は、これらのイベントがこの順序で発生することから生じる状態(たとえば、アリスによって定義されたデータベース状態変数によって取り込まれる)のハッシュにデジタル証明し、彼女が作成し、かつ/または定義する次のイベントの一部としてその署名を送出することができる。
[1168] 時刻T4までに、アリスは、他のメンバから同様の署名を受信し終える。その点で、彼女は、署名が立証する状態と一緒に署名のリストを単純に保持することができ、彼女は、最初のS1イベントの前に記憶したイベントを破棄することができる。証明終り。
[1169] 本明細書で説明されるシステムは、素早く安全に同意に達する分散データベースを説明するものである。これは、多数の応用例に関する有用な基本構成ブロックとすることができる。たとえば、トランザクションが、ある暗号通貨財布から別の暗号通貨財布への暗号通貨の振替を記述し、状態が、単純に各財布内の通貨額の言明である場合に、このシステムは、既存システム内の高コストのプルーフオブワークを回避する暗号通貨システムを構成する。自動的なルールの実施は、これが、現在の暗号通貨で一般的ではない特徴を追加することを可能にする。たとえば、失われた硬貨は、デフレーションを回避するために、財布がある時間期間の間に暗号通貨を送らず、受信しない場合に、その財布が削除され、その価値が、他の既存の財布が現在含む額に比例して他の既存の財布に分配されるというルールを実施することによって、回復され得る。その形で、貨幣供給は、財布の秘密鍵が失われる場合であっても、増加も減少もしない。
[1170] 別の例は、サーバ上でプレイされる多人数同時参加型オンライン(MMO)ゲームのように働くが、中央サーバを使用せずにそれを達成する、分散ゲームである。同意は、中央サーバが主導権を握ることなく達成され得る。
[1171] 別の例は、そのようなデータベースの上に構築されるソーシャル・メディア用のシステムである。トランザクションがデジタル署名され、メンバが、他のメンバに関する情報を受信するので、これは、現在のシステムを超えるセキュリティおよび便宜の利点を提供する。たとえば、強力なアンチスパム・ポリシを有する電子メール・システムが実施され得る。というのは、電子メールが、捏造された返信用アドレスを有することができないからである。そのようなシステムは、単一の分散データベース内で、電子メール、ツイート、テキスト、フォーラム、ウィキ、および/または他のソーシャル・メディアによって現在行われている機能を組み合わせる、統一されたソーシャルシステムになることもできる。
[1172] 別の例は、警察、消防、医療、軍、国家警備隊、および/または米連邦緊急事態管理局(FEMA)などの様々な機関を調整するための、災害対応で使用される通信システムである。分散データベースは、各機関のメンバに状況に関する共通の見解を与えるのに使用され得、各機関は、情報を寄与し、他の機関からの情報へのアクセスを有する。それは、様々なメンバが同一の情報へのアクセスを有することと、事故または攻撃者が、ネットワークが意図された通りに動作するのを妨げることが困難であることとを保証する。中央サーバ上の単一のデータベースは、たとえば、インサイダまたはマルウェアに感染した単一のコンピュータによって破壊され得る。中央サーバ上のそのような単一のデータベースは、危険に晒されたコンピュータ(たとえば、世界中)から来るインターネット・パケットが殺到する分散サービス拒否(DDoS)攻撃によって強制的にオフラインにされる可能性もある。別の例として、中央サーバ上のそのような単一のデータベースは、通信ワイヤまたは衛星局が災害中に損傷を受けるのでオフラインになる可能性もある。しかし、分散データベースは、そのような問題に対して弾力的になることができる。さらに、分散データベースが、ルールを実施する分散コードを実行する場合に、メンバは、単一の危険に晒されたメンバが、システムを圧倒し、その中からシステムをシャットダウンするためにシステムに余分なデータを殺到させることができないことを協力して保証することができる。この例のユース・ケースは、プルーフオブワークに基づくブロックチェーンを使用して実施することが困難である。というのは、緊急応答機関が、そのような非効率的なシステムに必要な強力なコンピュータを走行させる可能性が低いからである。そのようなユース・ケースは、Paxosまたはラウンドロビン・ブロックチェーンなどのリーダーに基づく同意システムを使用して実施される場合に、弾力的でもないはずである。というのは、ある時刻の単一のコンピュータに対するDDoSが、現在のリーダーを継続的にシャットダウンし、コミュニティが新しいリーダーに切り替えたときに新しいコンピュータへの攻撃に切り替えることができるからである。したがって、ブロックチェーンおよびリーダー・ベースの同意システムに関する問題を救済するために、弾力的な分散データベースが、本明細書で説明される分散データベース・システムなどの分散同意システムを使用して実施され得る。
[1173] 同様に、本明細書で説明される分散データベース・システムは、軍事作戦に関する情報の柔軟な通信および共有される見解を実施するのに使用され得る。さらなる別の例では、本明細書で説明される分散データベース・システムは、モノのインターネット・オブジェクトを制御するのに使用される分散データベース、監視制御およびデータ取得(supervisory control and data acquisition、SCADA)インフラストラクチャ、または「スマート・シティ」内のセンサおよびコントロールを実施するのに使用され得る。そのようなシステムは、上で説明した災害管理の例の実施態様に類似する特徴および/または要件を含む可能性がある。
[1174] 他の応用例は、グループが全体として契約または文書に署名するために協力する、グループ・デジタル署名などのより洗練された暗号機能を含むことができる。これおよびマルチパーティ計算(multiparty computation)の他の形は、そのような分散同意システムを使用して有用に実施され得る。
[1175] 別の例は、公開台帳(public ledger)システムである。誰もが、システム内に情報を記憶するために小額の暗号通貨(または実世界の通貨)毎バイト毎年を支払うことによって、システム内にある情報を記憶するために支払うことができる。その後、これらの基金は、そのデータを記憶するメンバと、同意を達成するために働くために繰り返して同期化するメンバとに自動的に分配され得る。それは、メンバに、彼らが同期化するたびに小額の暗号通貨を自動的に送金することができる。
[1176] 別の例は、トラフィック分析に抵抗するセキュア・メッセージング・システムである。この例では、分散データベースは、メンバの間の暗号化されたメッセージを含み、かつ/または記憶することができる。各メンバは、すべてのメッセージへのアクセスを有するが、メッセージは暗号化されており、その結果、所期の受信側だけがメッセージを暗号化解除できるようになっている。コミュニティは、メンバがメッセージを送った時を知るが、そのメッセージが誰に送られたのかを知らない。各メンバは、すべてのメッセージの暗号化解除を試み、暗号化解除されたメッセージが有効であり、正しいチェックサムを有するという事実によって、彼らに送られたメッセージを認識する。
[1177] 代替案では、そのようなシステムでの計算要件は、たとえば、以下の形で低減され得る。メンバの各対は、当初に、2つの共有される秘密鍵(対のメンバごとに1つ)をネゴシエートすることができ、この秘密鍵は、彼らが、2つの異なる暗号的に安全な乱数ジェネレータ(cryptographically secure random number generator、CSPRNG)(対のメンバごとに1つ)に種を与えるのに使用する。アリスが、ボブと共にそのような鍵を作成した場合に、彼女は、ボブ宛のメッセージをデータベースに追加するたびに新しい擬似乱数を生成するのに彼女のCSPRNGを使用し、彼女は、その数を暗号化されたメッセージに添付する。その後、ボブは、各メッセージに添付された数が、彼宛のメッセージを示すかどうかを知るために、データベース内の各メッセージに添付された数を素早くチェックすることができる。ボブは、共有された鍵を知っているので、したがって、彼は、アリスが生成する数のシーケンスを知っており、したがって、彼は、アリスから彼にアドレッシングされたメッセージに関してメッセージをスキャンするときに探すべき番号を知っている。彼が、そのような番号が添付されたメッセージを見つけるときに、彼は、それらがアリスから彼へのメッセージであることを知り、それらを暗号化解除することができる。キャロルからデイブへなどの関連しないメッセージは、異なる番号を添付され、ボブは、それらを暗号化解除することなく破棄する。いくつかのインスタンス化では、アリスおよびボブは、彼らの共有鍵を周期的に再ネゴシエートし、古い鍵を消去する。これは、将来に、アリスおよびボブの鍵が最終的に危険に晒された場合であっても、第三者がアリスとボブとの間で送られたメッセージ識別をすることを困難にする、前方秘匿性(forward security)を提供する。
[1178] これらの例は、分散同意データベースが、多数の応用例の構成要素として有用であることを示す。データベースが、高コストのプルーフオブワークを使用せず、おそらくはより安価なプルーフオブステークをその代わりに使用するので、このデータベースは、すべてのノードがより小さいコンピュータまたはモバイル・デバイスおよび組込みデバイスでさえ走行する状態で走行することができる。
[1179] 上では2つの以前のイベントのハッシュ(1つの自己ハッシュおよび1つの外来ハッシュ)を含むイベントとして説明されたが、他の実施形態では、メンバは、3つの以前のイベントのハッシュ(1つの自己ハッシュおよび2つの外来ハッシュ)を含むイベントを作成し、かつ/または定義するために他の2つのメンバと同期化することができる。さらなる他の実施形態では、任意の個数のメンバからの以前のイベントの任意の個数のイベント・ハッシュが、1つのイベント内に含まれ得る。いくつかの実施形態では、異なるイベントが、以前のイベントの異なる個数のハッシュを含むことができる。たとえば、第1のイベントが、2つのイベント・ハッシュを含むことができ、第2のイベントが、3つのイベント・ハッシュを含むことができる。
[1180] イベントは、上では以前のイベントのハッシュ(または暗号ハッシュ値)を含むものとして説明されるが、他の実施形態では、イベントは、ポインタ、識別子、および/または以前のイベントへの任意の他の適切な参照を含むように作成され、かつ/または定義され得る。たとえば、イベントは、以前のイベントに関連し、これを識別するのに使用され、したがってイベントをリンクする通し番号を含むように作成され、かつ/または定義され得る。いくつかの実施形態では、そのような通し番号は、たとえば、イベントを作成し、かつ/または定義したメンバに関連する識別子(たとえば、媒体アクセス制御(MAC)アドレス、インターネット・プロトコル(IP)アドレス、割り当てられたアドレス、および/または類似物)およびそのメンバによって定義されたイベントの順序を含むことができる。たとえば、10の識別子を有するメンバは、イベントがそのメンバによって作成されかつ/または定義された15番目のイベントであると、そのイベントに1015の識別子を割り当てることができる。他の実施形態では、任意の他の適切なフォーマットが、識別子をイベントに割り当てるのに使用され得る。
[1181] 他の実施形態では、イベントは、完全な暗号ハッシュを含むことができるが、これらのハッシュの一部だけが、同期化中に送信される。たとえば、アリスが、ハッシュHを含むイベントをボブに送り、Jが、Hの最初の3バイトであり、アリスが、彼女が記憶したイベントおよびハッシュのうちで、Hが、Jから始まる唯一のハッシュであると判定する場合に、彼女は、同期化中にHではなくJを送ることができる。その後、ボブが、彼がJから始まる別のハッシュを有すると判定する場合に、彼は、完全なHを要求するためにアリスに応答することができる。その形で、ハッシュは、送信中に圧縮され得る。
[1182]] 図13は、一実施形態による、分散データベースの初期状態の表現である。いくつかの実施態様では、分散データベースは、創設者メンバ、この例ではアリス、ボブ、キャロル、デイブ、およびエドによって初期化され得る。各メンバは、メンバ鍵の対1305を定義する。メンバ鍵の各対は、あるメンバに関連する一意の秘密鍵および一意の公開鍵を含むことができる。たとえば、アリスはA_Private_KeyおよびA_Public_Keyを有し、ボブは、B_Private_KeyおよびB_Public_Keyを有し、列1305に示されているように、キャロル、デイブ、およびエドについても同様である。各公開鍵/秘密鍵対は、2つの一意に関係する暗号鍵(たとえば、大きい数)を含む。下記は、公開鍵の例である。
[1183] 3048 0241 00C9 18FA CF8D EB2D EFD5 FD37 89B9 E069 EA97 FC20 5E35 F577 EE31 C4FB C6E4 4811 7D86 BC8F BAFA 362F 922B F01B 2F40 C744 2654 C0DD 2881 D673 CA2B 4003 C266 E2CD CB02 0301 0001
[1184] 公開鍵は、たとえば公にアクセス可能なリポジトリまたはディレクトリを介して、分散データベース内の他のメンバから使用可能にされる。しかし、秘密鍵は、それぞれの所有者に秘密のままになる。鍵対が数学的に関係付けられるので、公開鍵を用いて暗号化されたメッセージは、その秘密鍵相対物によってのみ暗号化解除され得、逆も同様である。たとえば、ボブが、アリスにメッセージを送ろうと思い、アリスだけがそのメッセージを読めることを保証したいと思う場合に、彼は、アリスの公開鍵を用いてメッセージを暗号化することができる。アリスだけが、彼女の秘密鍵へのアクセスを有し、その結果、暗号化されたデータをそのオリジナルの形に戻って暗号化解除する能力を有する唯一のメンバである。アリスだけが彼女の秘密鍵へのアクセスを有するので、アリスだけが、暗号化されたメッセージを暗号化解除することができることが可能である。他の誰かが暗号化されたメッセージへのアクセスを得る場合であっても、彼らはアリスの秘密鍵へのアクセスを有しないはずなので、そのメッセージは秘密のままになる。
[1185] いくつかの実施態様では、列1305内の対は、分散データベース一意識別子(Distributed Database Unique Identifier、D2ID)1309を計算するためのパラメータとして使用される。D2ID 1309が、一般に、創設者メンバおよび公開鍵のそれぞれによって提供されるパラメータのランダムさを考慮すると複製が難しく、したがって、分散データベースに高いセキュリティ・レベルを有利に提供することを了解されたい。さらに、ランダムさを高めるために、各メンバの各鍵対は、そのメンバが参加する分散データベースごとに異なるものとすることができる。さらに、そのような鍵対は、各メンバによってランダムに生成され得る。したがって、同一のメンバが第2のデータベースを定義する場合であっても、第2の分散データベースのD2IDは、第1の分散データベースのD2IDとは異なる。
[1186] さらに、いくつかの例では、異なるナンス(たとえば、ランダムに生成される識別子)が、データベースのD2IDを計算するときに各メンバ公開鍵と対にされ得る。ナンスは、各メンバによっておよび/または各メンバのためにランダムに生成され得る。これは、同一のメンバが同一の公開鍵を用いて第2のデータベースを定義する場合であっても、ナンスが異なり、したがって、第2の分散データベースのD2IDが異なることを保証することによって、セキュリティを高めることができる。
[1187] いくつかの実施態様では、メンバシップ1303は、分散データベースの状態に関連する複数のメンバシップ・リストがその中に記録される、データ構造または他の論理的におよび/もしくは物理的に実施されるコンテナとして実施され得る。いくつかの例では、メンバシップ1303は、分散データベースの現在の状態に関連するメンバの属性を含む現在のメンバシップ・リスト(CML)1301を含む。CML 1301は、分散データベースによって実行される動作、たとえば、図14を参照して議論されるデータベースへのメンバの追加または除去の際に、変化するように構成される。分散データベースの初期状態では、CML 1301は、分散データベースの創設メンバの属性、たとえばメンバシップ鍵対1305と、そのような創設メンバに関連する他の適切な属性とを含む。
[1188] いくつかの例では、CMLメンバおよびそれらに関連する属性は、経時的に、たとえば分散データベースへのメンバの追加および/または除去の際に、変化する。したがって、CMLメンバの第1の集合が、第1の時間期間中に分散データベースを実施することができ、CMLメンバの第2の集合が、第2の時間期間中に分散データベースを実施することができる。その場合に、CML 1301を更新する前に、CML 1301のコピーが、以前のメンバシップ・リスト(PML)1307内に記憶され、その後、CML 1301が更新される。PML 1307は、データ構造または他の論理的におよび/もしくは物理的に実施されるコンテナとして実施され得る。PML 1307は、分散データベースの以前の状態に関連するメンバの属性を含むように構成される。
[1189] デジタル署名が、創設メンバごとに、および最終的に分散データベースに追加された非創設メンバに関して、生成される。各メンバは、彼らの秘密鍵を使用してD2IDにデジタル署名する。たとえば、アリスのデジタル署名は、Sign(A_Private_Key,D2ID)の結果であり、ここで、A_Private_Keyは、アリスの秘密鍵であり、D2IDは、分散データベースの名前または一意識別子である。他の例では、アリスは、アリスの一意識別子および彼女の署名を有する対、たとえば(A_ID,Sign(A_ID,A_Private_Key,D2ID))を生成し、ここで、識別子A_IDは、彼女の公開鍵、名前、デジタル証明書、または他の適切な識別子とすることができる。
[1190] いくつかの実施態様では、デジタル署名は、メンバの間で署名付きメッセージを送るのに使用される。したがって、署名付きメッセージは、関数Sign(K,M)の結果を含むことができ、ここで、Kは、秘密鍵、たとえばアリスに関連する「A_Private_Key」であり、Mは、メッセージ(MSG)である。いくつかの例では、メッセージ「MSG」は、ハッシュ化され連結されたデータの関数、たとえばMSG=hash(x,y,z)とすることができ、ここで、x、y、およびzは、分散データベースのメンバの間で交換される任意のタイプのデータ(たとえば、イベント、分散データベース状態、動作など)とすることができる。したがって、メンバは、メッセージMSGが、たとえばK=A_Private_Keyであるときにアリスによって署名されることを示す、(MSG,Sign(K,MSG))の形の署名付きメッセージを送ることができる。
[1191] いくつかの例では、メンバシップ1303および分散データベース・データ1308は、2つの論理的に独立なエンティティまたはデータ構造(たとえば、異なるデータベース、異なる論理的に分離されたデータベース部分(たとえば、テーブル)、単一のデータベース内の異なるデータ構造など)である。たとえば、メンバシップ1303は、D2ID 1309に関連する現在のメンバおよび以前のメンバを含むが、分散データベース・データ1308は、すべての作成され、かつ/または受信されたイベントとそのようなイベント内に含まれるトランザクションまたは動作とを含む、分散データベースの現在の状態1311に関連するデータを含む。他の例では、メンバシップ1303および分散データベース・データ1308は、単一の論理エンティティまたはデータ構造の一部とすることができる。
[1192] 図13内に図示されていない分散データベースに関連する他のデータ構造は、たとえば、更新、新しいメンバの追加、メンバの除去など、分散データベースに対して実行された動作に基づいて作られた識別子および/またはそのような動作の結果、ならびに他の適切なデータ構造および/または経時的に分散データベースに対して実行された動作を含むことができる。いくつかの例では、そのような動作は、分散データベースの状態および/またはメンバのヒストリを提供することができる。たとえば、ADD動作は、分散データベースに新しいメンバを追加するのに使用され得る。これは、分散データベースに参加する新しいメンバの識別子(たとえば、秘密鍵、公開鍵、および/またはデジタル署名)のリストを作ることができる。別の例として、REMOVE動作は、分散データベースから1つまたは複数の現在のメンバを除去することができる。これは、分散データベースから除去されようとしているメンバに関連する識別子(たとえば、秘密鍵、公開鍵、および/またはデジタル署名)の集合を無効化しまたは除去することができる。
[1193] 上で議論したように、分散データベースの状態は、同意に達した後に定義され得る。たとえば、ラウンドRの有名な目撃者のすべてが識別され、かつ/または知られた後に、Rの受信されたラウンドを有するイベントの集合S(R)を計算し、それらの同意順序およびそれらの同意タイムスタンプを計算することが可能である。その後、状態STATE(R)が計算され得、これは、Rまたはより以前の受信されたラウンドを有するイベント内のトランザクションから生じるデータベース状態である。その点で、S(R)内のイベントの同意順序は、既知であり、変化しない。したがって、時刻Tに、分散データベース状態の初期状態1311は、Tの後、Tの前に、STATE(R)=「STATE1」とすることができる。いくつかの例では、この状態は、本明細書でさらに詳細に議論するように、署名付きハッシュ値とすることができる。
[1194] 各データベース動作は、分散データベースを実施する計算デバイスで生成された所与のイベント内のトランザクションによって開始され得る。分散データベース動作は、受信されたラウンド番号Rに関連する。たとえば、受信されたラウンドR=3を有するイベント内のトランザクションが、データベース動作(たとえば、ADD、REMOVE、またはUPDATE)を開始する場合に、そのようなデータベース動作は、イベントの受信されたラウンドR=3に関連する。いくつかの実施態様では、UPDATE動作が、受信されたラウンド=3を有するイベント内のトランザクション内でサブミットされるときに、新しい分散データベース構成が作られる。いくつかの例では、新しい分散データベース構成は、受信されたラウンドR=3中に開始されたADD動作に基づいて分散データベースにメンバを組み込み、受信されたラウンドR=3中に開始されたREMOVE動作に基づいて分散データベースからメンバを除外する。そのような例では、受信されたラウンドR=3は、受信されたラウンド番号しきい値と呼ばれ得る。その場合に、R=3以下の受信されたラウンド番号を有するイベント内の同意プロセスおよびトランザクションは、より古いまたは以前の分散データベース構成または状態に従って実行される。さらに、R=3を超える受信されたラウンドを有するイベント内の同意プロセスおよびトランザクションは、新しい分散データベース構成を用いて実行される。たとえば、「強く見る」という概念(上で説明した)は、ある条件が母集団の2/3超によって満足されるかどうかの判定の結果とすることができる。したがって、所与の受信されたラウンドの全母集団内に何個のメンバがあるのかをカウントすることが必要である。たとえば、新しいメンバ・ジョンを分散データベースに追加するように構成されたADD動作が、受信されたラウンドR=3に分散データベースによって受信される場合に、作成されたラウンドR=3またはより以前の強く見る目撃者および有名な目撃者に関する判定に関して母集団のサイズを判定するときに、ジョンは、分散データベースによって考慮されない。その場合には、以前のメンバシップ・リスト(すなわち、より古いまたは以前の分散データベース構成のデータベース構成内のメンバシップ・リスト)が、作成されたラウンドR=3およびより以前の同意関連投票および収束での目撃者のラウンド番号を計算するのに使用される。新しいメンバシップ・リストは、作成されたラウンドR=3目撃者の後のイベントに関して、ならびに関連する投票および収束に関して、作成されたラウンド番号を計算するのに使用される。上の例では、ジョンは、母集団のサイズを判定するときに分散データベースによって考慮されないが、彼のイベントは、受信されたラウンドR=3の前に使用され得る。たとえば、ジョンのイベントは、あるイベントとそのイベントを見る先祖イベントとの間の経路の一部とされ得る。したがって、ジョンおよびジョンのイベント自体は、「強く見る」しきい値(上で説明した)に達するために子孫イベントによって使用され得ないが、子孫イベントは、それでも、「強く見る」しきい値に達するために、ジョンのイベントを通る経路に基づいて、それが見ることのできるイベントを使用することができる。
[1195] 上で議論したように、作成されたラウンドR=3内の有名な目撃者の完全なリストが識別された後に、R=3の受信されたラウンドを有する分散データセットにジョンを追加するために開始されたADD動作は、UPDATE動作の際に効力を生じる。したがって、ジョンがメンバとして含まれる分散データベースの新しい構成が、生成される。ADD動作およびREMOVE動作は、分散データベース内に登録された母集団の1つまたは複数のメンバを含めまたは除外し、これは、1つまたは複数のしきい値が満足される(たとえば、「母集団の2/3超」になるように構成された同意しきい値)かどうかを判定するのにメンバ・リスト内の何個のメンバ(またはステーク値)が使用されるのかを変更する。この新しいしきい値は、作成されたラウンドR=3(たとえば、受信されたラウンド番号しきい値)内の目撃者より後のイベントのラウンド番号(すなわち、作成済みラウンド)を再計算し、作成されたラウンドR=4およびより後の目撃者の有名を計算するのに使用される。したがって、たとえば、所与のイベントは、作成されたラウンドR=3目撃者の有名を計算する間に1つの「作成済みラウンド」を有し、その後、作成されたラウンドR=4目撃者の有名を計算する間に異なる「作成済みラウンド」を有することができる。
[1196] いくつかの例では、ADD動作、REMOVE動作、および/またはUPDATE動作は、しきい個数のメンバのデジタル署名(署名しきい値とも称する)によって有効化され得る。たとえば、UPDATE動作は、UPDATE動作の受信直前に分散データベースの一部であったメンバの2/3超がその動作に署名する場合に、有効であると判定される。分散データベース動作の実行に関するさらなる詳細は、図14を参照して議論する。
[1197] 本明細書では、UPDATE動作が実行される時の新しい構成の実施として説明されるが、他の例では、新しい構成は、自動的に(すなわち、明示的なUPDATE命令なしで)実施される。具体的には、特定の受信されたラウンドRを有するすべてのイベントが識別された後に、新しい構成は、そのようなイベントに基づいて、受信されたラウンドR+1を有するイベントを識別するために実施され得る。具体的には、受信されたラウンドRを含むと判定されるイベントがADD命令またはREMOVE命令を含む場合に、分散データベースの構成は、Rを超える(すなわち、受信されたラウンド番号しきい値を超える)受信されたラウンドを計算するために、自動的に変化することができる。
[1198] いくつかの例では、ADDおよびREMOVEなどのデータベース動作は、分散データベースの所与の状態の同意に達するのに使用される1つまたは複数の投票しきい値を変更する。たとえば、分散データベースは、1から10までの受信されたラウンドを計算した(すなわち、ラウンド10またはその前に作成されたすべての有名な目撃者が、既知であり、票は、それでも、作成されたラウンド11目撃者の一部が有名であるかどうかを判定するために投じられている)。それに関して受信されたラウンドがまだ計算され得ない作成されたラウンド5を有するイベントXが、生成され得る。その場合に、作成されたラウンド10以下を有する有名な目撃者が既に識別されているので、イベントXは、11未満の受信されたラウンドを有しない。イベントXが、たとえば、分散データベースの現在のメンバシップ・リストにフランクをADDするトランザクションを含む場合に、 フランクは、作成されたラウンド11に関連する有名な目迎者を判定するための投票中にはメンバとしてカウントされず、フランクによって定義されたイベントは、作成されたラウンド11内の各目撃者の有名が識別され得る、より後に作成されたラウンドまで、票を得る目撃者としてカウントされない。その場合に、11の受信されたラウンドを有するすべてのイベントが、その後に判定され得る。たとえば、イベントXが、11の受信されたラウンドを有すると判定される場合に、フランクは、現在のメンバシップ・リストに追加される。
[1199] 投票しきい値(たとえば、上で説明したM)は、追加のメンバ(すなわち、フランク)を含むように再計算され得る。その結果、ラウンド11より後(受信されたラウンド番号しきい値を超えるラウンド)のイベントについて計算された作成されたラウンドは、フランクを含む新しいしきい値を使用して再計算され得る。いくつかの例では、そのような再計算プロセスは、どのイベントが、たとえば作成されたラウンド12目撃者および/またはより後の作成されたラウンドに関連する目撃者であると判定されるのかを変更することができる。その後、票が、作成されたラウンド12目撃者のどれが有名であるのかを判定するために投じられ得る。したがって、現在のメンバシップ・リストは、すべての作成されたラウンド12の有名な目撃者が識別されるまで、再びは変化しない。この点で、どのイベントが12の受信されたラウンド(第2の受信されたラウンド番号しきい値とされ得る)を有するのかが、判定され得る。これらのイベントの一部は、現在のメンバシップ・リストからメンバをADDまたはREMOVEすることができ、それに応じて、この例で議論される他のより後のイベントに対する同様の変更をトリガすることができる。
[1200] いくつかの例で、分散データベースのメンバは、所与の時点に(または所与の受信されたラウンドで)分散データベースの「署名付きの状態」を判定する。「状態」または「現在の状態」は、同意トランザクションのシーケンスの、それらの同意順序での(すなわち、各トランザクションを含むイベントの同意順序に従ってソートされ、トランザクションが各イベント内に含まれる順序によってサブソートされての)実行から生じる情報を含む。メンバが、Rまでの受信されたラウンドに関連するイベントの同意順序を計算した後に、そのようなメンバは、同意順序のトランザクションから生じる状態または現在の状態にデジタル署名する(または状態もしくは現在の状態に関連するハッシュ値にデジタル署名する)(たとえば、秘密鍵を使用して)ことができる。オプションでまたはその代わりに、メンバは、受信されたラウンドの部分集合だけに関する状態に署名することができる。たとえば、Rが、所与の整数によって割り切れるときに(たとえば、5つおきのラウンド)、または分散データベースの各メンバに指定された時間しきい値に従って(たとえば、1秒ごとに)、メンバは、受信されたラウンド番号Rに関連する状態に署名するように割り当てられ得る。
[1201] いくつかの実施態様では、受信されたラウンドRの「署名付きの状態」は、1)受信されたラウンド番号R、2)署名付きの状態に影響する同意の一部であった各メンバによって生成された最後のイベント(すなわち、Rまたはより早い受信されたラウンドを有するイベント)のシーケンス番号およびハッシュ値、3)Rを含めてRまでの受信されたラウンドの同意順序でのトランザクションの影響を反映するデータ構造、4)メンバシップ・リストの2/3超(いくつかの例では、たとえば1/2超など、異なるしきい値が使用され得る)による署名を有するより以前の状態に対するデジタル署名(または合意の他の表示)の集合、ならびに/または5)「メンバシップ・ヒストリ」という項目のうちの1つまたは複数を含む。いくつかの実施態様では、これらの要素の一部が、欠けている場合がある(たとえば、番号4)。いくつかの実施態様では、たとえば、「状態」は、メンバシップ・ヒストリ以外の上記のすべてのハッシュと、メンバシップ・ヒストリの別々のハッシュとを含む。そのような実施態様では、メンバは、「署名付きの状態」を生じるために、ハッシュの対にデジタル署名する(秘密鍵を用いて)ことができる。
[1202] いくつかの実施態様では、第1のメンバが状態に署名するときに、デジタル署名、状態のハッシュ、および受信されたラウンド番号を有するトランザクションが生成される。そのようなトランザクションは、第1のメンバによって作成され、かつ/または定義される次のイベント内に含まれるように構成される。その後、第1のメンバは、イベントを保存し、かつ/または分散データベースにポストすることができる。その後、第1のメンバとは異なる他のメンバは、第1のメンバのデジタル署名を認識し、記録する。第2のメンバが、しきい値を超える、所与の状態に関連する第1のメンバおよび他のメンバのデジタル署名を含む複数のデジタル署名を他のメンバから受信するときに、第2のメンバは、これを同意署名付きの状態として識別することができる。第2のメンバは、デジタル署名の個数が署名しきい値に達するかどうか(たとえば、所与の状態が、分散データベース内のメンバの2/3超のデジタル署名によって支持されるかどうか)を判定し、あるいは、分散データベースの他のメンバから合意の表示を他の形で受信することができる。デジタル署名の個数が署名しきい値に達した後に、その状態は、「署名付きの状態」になる。メンバが署名付きの状態を有した後に、それらは、その署名付きの状態に寄与したすべてのイベントを破棄し、すべての以前の署名付きの状態を破棄することができる。したがって、そのようなイベントおよび以前の署名付きの状態の記憶専用のメモリ割振りが、解放され、ハッシュグラフによって使用されるストレージの量を減らすことができる。いくつかの実施態様では、古いイベントは、即座に破棄されるのではなく、ある個数の追加の受信されたラウンドが同意の一部になった後および/または所定の時間期間の後に限って破棄される。
[1203] いくつかの例では、イベントは、以下の判断基準を使用して定義され得る。1)「イベント」は、その自己親のシーケンス番号より1つ大きいシーケンス番号(または、自己親がない場合には0)を有し(上で説明したように)、2)「イベント」は、親ごとに「作成済みラウンド」を含み(したがって、イベントは、各親のハッシュを含むだけではなく、その親からコピーした作成済みラウンドをも含む)、かつ、3)イベントは、各親の作成済みラウンドのうちの最大値である「親ラウンド」を有する(したがって、イベントの「作成済みラウンド」は、そのイベントの親ラウンドに0または1のいずれかを加えたものと等しい)。
[1204] いくつかの例では、この例において「A」と称する大域定数「年齢しきい値」が、あるイベントが同意プロセス内で考慮されるか否かを判定するのに使用される。たとえば、A=4を仮定し、あるイベントがRの親ラウンドを有し、そのイベントの受信されたラウンドがR+Aより後である場合には、1)そのイベントは、同意順序の一部ではなく、2)そのイベントのトランザクションは、無視され、同意状態に影響せず、3)そのイベントは、そのイベントがラウンドR+Aまたはそれより以前に受信されなかったことを知っている任意のメンバによって破棄され得、4)そのイベントは、フォークの一部である場合であっても、ラウンドR+Aまたはより後に「見ること」を妨げない。たとえば、アリスが、少なくともラウンドR+Aまでのラウンドの間に、イベントXがこれらのラウンドのいずれにおいても受信されずに有名な目撃者を既に計算した後に、アリスが、同期化プロセス中にイベントXを受信する場合に、アリスは、イベントXを破棄することができる。いくつかの例では、図16を参照して下で詳細に議論するように、アリスによるイベントXの破棄が、所与の作成者による既知のイベントの集合が不連続なシーケンス番号を有することを引き起こす場合には、イベントXは、アリスによって破棄されないはずである。
[1205] 図13は、分散データベースの初期状態を示すが、図14は、一実施形態による、初期状態が定義された後に分散データベース内で実行されるUPDATE動作、ADD動作、およびREMOVE動作の例を示す流れ図である。いくつかの例では、分散データベースが、図13に示されているように初期化された後に、1つまたは複数の動作が、分散データベース内に含まれるメンバを変更するために分散データベース内で実行され得る。たとえば、1421で、分散データベースD2IDがSTATE(R)=「SW1」を有し(SW1は、分散データベースD2IDの初期ハッシュグラフに関連する分散データベースの現在の構成である)、受信されたラウンド番号Rが、最も最近に計算され、かつ/または識別された受信されたラウンドであると仮定すると、1423で、ジョン、ジャニス、およびチャドが、初期化されたADD機能を介して、分散データベースのメンバとして追加されるように構成される。構成SW1は、イベントの順序および/または収束を判定するときにジョン、ジャニス、およびチャドを含まない、上で議論したイベント同意プロトコルの構成(または同意順序)を含む。いくつかの例では、1423でのADD機能は、パラメータとしてジョン、ジャニス、およびチャドの公開鍵をとることができる。この点で、新しいメンバのそれぞれは、関連する秘密鍵をも有する。1425に示されているように、メンバ(たとえば、アリス)が、分散データベースから除去されることも可能であり、この場合には、REMOVE動作は、アリスの公開鍵をパラメータとして用いて初期化される。いくつかの例では、ADD動作およびREMOVE動作は、分散データベースを実施するメンバ(計算デバイス)において、イベントの集合内のトランザクションとして受信され得る。ADD動作および/またはREMOVE動作が指定された受信されたラウンド番号を有するイベント内のトランザクションによって引き起こされた時を判定できるように、ADD動作およびREMOVE動作は、それらの受信されたラウンド番号に関連付けられる。
[1206] 受信されたラウンド番号Rに関連するUPDATE動作、たとえば1427のUPDATE動作中に、現在の分散データベース構成SW1(アリスを含むが、ジョン、ジャニス、およびチャドを含まない)は、変数PrevSWに保存され、PrevSW構成に関連する分散データベースのメンバは、受信されたラウンド番号Rに関連する以前のメンバシップ・リスト内に記憶され得る。いくつかの代替実施態様では、PrevSWは、複数の以前の分散データベース構成を含むオブジェクトの配列とすることができる。新しい分散データベース構成SW2は、受信されたラウンドRでのUPDATE動作の実行に基づいて生成され得る、すなわち、 STATE(R)=「SW2」である。したがって、変数CurrentSWは、新しい分散データベース構成SW2(イベント同意プロトコルに新しい構成を使用する)を含むように更新される。
[1207] 構成SW2は、ジョン、ジャニス、およびチャドを含むが、アリスを含まず、したがって、アリスは、分散データベースが構成SW2を使用するときに、同意順序または収束の判定に含まれない。言い換えると、更新された分散データベース構成SW2は、変更された分散データベース構成(たとえば、新しいメンバ、ジョン、ジャニス、およびチャドの追加とアリスの除去と)を反映するように構成された現在のメンバ・リストに対する変更を反映する。いくつかの例では、ジョン、ジャニス、およびチャドの新しい鍵対を含み、アリスを除外したメンバの鍵対の更新された集合は、現在の分散データベース構成CurrentSW内に含まれる。いくつかの例では、この時の分散データベース状態は、ADD動作、REMOVE動作、UPDATE動作、および/または他の適切な動作を含む、更新の時刻までに分散データベースに対して実行された動作をも含むことができる。
[1208] いくつかの例では、分散データベースの現在のメンバシップ・リストのメンバが、たとえばADD動作、REMOVE動作、UPDATE動作、および/または他の適当な動作を介して変化した場合に、イベントは、分散データベースの異なる構成に従って処理され得る。図14に示された例では、1429でイベントが受信されるときに、そのようなイベントに関連する受信されたラウンドR’が、識別され、かつ/または計算される。たとえば、1431に示されているように、イベントの受信されたラウンドR’が、分散データベースが動作している受信されたラウンドR以下であると識別される場合には、そのようなイベントは、たとえば、分散データベースの以前の構成バージョンに関連する以前のメンバシップ・リスト(たとえば、図13を参照して議論した以前のメンバシップ・リスト1307内に記憶されたメンバシップ・リスト)を用いて処理される。言い換えると、1433で、イベントは、たとえばアリス、ボブ、キャロル、デイブ、およびエドを含むがジョン、ジャニス、およびチャドを含まないメンバシップ・リストを有する分散データベース構成SW1(上で説明した)を使用して、同意または収束に関して処理される。反対のシナリオでは、1435で、イベントの受信されたラウンド番号が、構成が変化した(たとえば、そのような作成されたラウンドおよびそれ未満のラウンドを有する有名な目撃者のすべてが、既に識別されており、イベントが、それらのうちの十分な数によって受信されるのをまだ見られていない)受信されたラウンド番号を超えるときに、そのようなイベントは、分散データベースの更新されたバージョンを用いて処理される。すなわち、アリスを除いてボブ、キャロル、デイブ、エド、ジョン、ジャニス、およびチャドを含む現在のメンバシップ・リストを有する分散データベース構成SW2である。したがって、いくつかの例では、イベントの順序は、分散データベースの複数の構成(またはイベント同意プロトコルの構成)、したがって分散データベースのインスタンスの新しい状態に基づいて判定され得る。上で議論したように、ハッシュ値は、分散データベースの状態に関して計算され、分散データベースのメンバの秘密鍵を使用して署名され得る。メンバ、たとえば分散データベースの状態に署名したメンバは、新しい署名付きの状態を示すトランザクションを含むイベントを分散データベースのインスタンス内にポストするために信号を送ることができる。
[1209] いくつかの例では、分散データベースのメンバは、1つまたは複数のイベント内に含まれるトランザクション(またはトランザクションの集合)としてUPDATE動作、ADD動作、および/またはREMOVE動作を保存し、かつ/またはこれらを分散データベースにポストすることができる。その後、このイベントは、分散データベースの別のメンバに送られ得る(たとえば、同期化プロセスの一部として)。たとえば、第1のメンバは、同期化プロセスの一部として分散データベースの第2のメンバによって送られたイベント内に含まれるトランザクション内で、分散データベースに新しいメンバをADDする動作を受信することができる。別の例として、第1のメンバは、同期化プロセスの一部として第3のメンバによって送られたイベント内に含まれるトランザクション内で、分散データベースからメンバをREMOVEする動作を受信することができる。言い換えると、分散データベースの各メンバは、UPDATE動作、ADD動作、および/またはREMOVE動作のいずれかを含むトランザクションを有するイベントを定義し、そのようなイベントを、同期化プロセスの一部として分散データベースの他のメンバに送ることができる。
[1210] 図14に示されたプロセスは、各新しい受信されたラウンド内のイベントに関して繰り返され、更新され得る。したがって、受信されたラウンドがイベントごとに識別されるときに、分散データベースの構成(またはイベント同意プロトコルの構成)は、更新され得る。さらに、上では2つの構成に関して説明されるが、STATE(R)=「SW3」を有する分散データベースの後続の構成(および追加の将来の構成)は、SW2に関して説明されたものに類似する形で定義され得る。したがって、いくつかの例では、分散データベースは、第3の分散データベース構成(たとえば、イベント同意プロトコルに関する第3の構成を使用する)を使用して動作することができる。したがって、分散データベースは、そのようなトランザクションを有する新しいイベントが分散データベースにポストされるときに、新しい構成を用いて定義し、かつ/または動作し続けることができる。
[1211] 上では、分散データベースへのメンバの追加および/またはこれからのメンバの除去に基づく分散データベースの構成(またはイベント同意プロトコルの構成)の更新として説明されるが、いくつかの例では、構成は、同意を判定するのに使用される新しいソフトウェアおよび/または同意を判定するための新しいルールに基づいて、メンバに関連するおよび/またはメンバに論理的に関係付けられたステーク値の変化に基づいて更新され得る。たとえば、トランザクションが実行されるときに、各メンバのステーク値が変化する可能性がある。ステーク値に基づいて同意を判定する分散データベースの実施態様では、これが、同意プロトコル(たとえば、有名な目撃者の判定)に影響する可能性がある。したがって、1つまたは複数のメンバのステーク値を変更するイベントの受信されたラウンド(受信されたラウンド番号しきい値として使用される)に依存して、異なるラウンド内のイベントの順序は、図14のプロセスに類似する異なる構成に基づいて判定される。別の例として、同意を判定するソフトウェアに対する更新および/または同意を判定するルールに対する更新は、そのような更新を含んだイベントの受信されたラウンド(受信されたラウンド番号しきい値として使用される)に基づいて、有効になり、かつ/または使用され得る(図14のプロセスに類似する)。
[1212] 図15および図16に示されたプロセスは、分散データベースの2つのメンバの間でのイベントの同期化中に実行され得る。図15は、受信されたラウンドに基づくイベントの受諾および拒絶を示す流れ図である。いくつかの例では、たとえば、異なるメンバに関連する分散データベースの同期化中に、イベントは、(1)すべての有名な目撃者がその中で識別され、かつ/または決定された最も最近のラウンド番号R、(2)イベントがその親としてリストする親event.Parent[i]のそれぞれ、および(3)イベントがその親の作成されたラウンドとしてリストする各対応するevent.ParentRoundCreated[i]に基づいて拒絶されまたは受諾され得る。実際の親が、受信された子イベント内でその親に関してリストされた作成済みラウンドとは異なる作成済みラウンドを有する場合があることに留意されたい。これは、イベントの作成済みラウンドが、メンバが追加され、除去されるときに変化する可能性があり、したがって、親が、子が作成されたときに受信される1つのラウンドと、より後の時刻の異なるラウンドとを有することが可能であるからである。メンバは、ParentRoundCreated数の割当においてできる限り正確であるというタスクを割り当てられる。
[1213] 計算負荷およびメモリ・リソースは、いくつかの例で有利に減らされ得る。たとえば、第1のメンバ(たとえば、第1の計算デバイス)が、1551で、分散データベースのそのローカル・インスタンスで分散データベースの第2のメンバ(たとえば、第2の計算デバイス)からイベントを受信する時である。そのようなイベントは、親イベントの集合を表示するバイトのシーケンスを含むことができる。親イベントの集合からの各親イベントは、ハッシュ値および作成済みラウンド値に論理的に関係付けられ得る。1553で、第1の判断基準が満足されるかどうかを判定するために、第1のメンバは、(1)受信されたイベントの少なくとも1つの親(受信されたイベント内で示される)が、第1のメンバの分散データベースのインスタンスに不在であるかどうか、および(2)受信されたイベントの親が、Rから所定のしきい値(たとえば、Threshold1)を減じた値を超える、受信されたイベント内のリストされた作成済みラウンドを有するかどうかを判定する。いくつかの例では、イベントがこれらの条件を満足する(すなわち、第1の判断基準を満足する)ときに、第1のメンバは、1559で、イベントを拒絶しまたは除外する。たとえば、イベントが、R−Threshold1以下(すなわち、第1の作成済みラウンドしきい値R−Threshold1以下)であるリストされた作成済みラウンドを有する親を有するときに、その親は、既に破棄されていると仮定され得(たとえば、破棄済みになるのに十分に古い)、したがって、受信されたイベントは、潜在的に、欠けている親にもかかわらず受諾され得る(下で説明するステップ1555に依存して)。しかし、破棄済みになるのに十分には古くない、欠けている親がある場合には、その親が欠けているので、イベントは、1559で拒絶され得る。いくつかの実施態様では、1553で、イベントが条件を満足しないときに、イベントは、1555で、イベントの各親がRから所定のしきい値を減じた値の前(すなわち、第2の作成済みラウンドしきい値R−Threshold2未満)のリストされた作成済みラウンドを有するかどうかを判定するために、第2の判断基準に関して評価される。そうである場合(すなわち、第2の判断基準が満足される場合)には、イベントは、1559で拒絶されまたは除外され、そうでない場合には、1557で受諾される。この決定は、イベントが(たとえば、同意を判定するのにおよび/または分散データベースの状態に影響を与えるのに)使用されなくなることが明瞭になるときに、イベントが破棄されることを可能にする。たとえば、すべてのリストされた親が非常に古い場合に、受信されたイベント自体は、破棄されるのに十分に古いと考えられ、したがって、受信されるや否や、破棄され得る。これらの例では、非常に古いイベント(Threshold1に基づいて)を除いて、親のすべてが存在し、イベント自体が非常に古くはない(Threshold2に基づいて)場合に、受信されたイベントは受諾される。第1のメンバ(すなわち、第1の計算デバイス)は、分散データベースのインスタンス内に、1557で受諾されたイベント(すなわち、1559で拒絶も除外もされなかったイベント)を記憶することができる。いくつかの実施態様では、Threshold1および/またはThreshold2は、分散データベースのメンバによって事前に定義され得る。いくつかの実施態様では、Threshold1は、Threshold2と同一の値または異なる値を有することができる。
[1214] 図16は、分散データベースの2つのメンバの間でのイベント同期化中に実行される検証プロセスを示す流れ図である。第1のメンバまたは第1の計算デバイスは、同期化プロセスを開始するために、分散データベースの他のメンバに同期化要求を送ることができる。いくつかの実施態様では、分散データベースの第1のメンバと第2のメンバとの間の同期化は、下で説明するように実行される。たとえば、第1のメンバがボブであり、第2のメンバがアリスである場合には、同期化は、アリスが分散データベースの所与の構成でメンバごとに受信した最初および最後のシーケンス番号および/またはシーケンス値に基づいて実行され得る。そのようなシーケンス番号および/またはシーケンス値は、メンバの間で同期化要求内で送られ得、メンバは、他のメンバによってまだ受信されず、かつ/または記憶されていないイベントを交換することができる。したがって、いくつかの例では、既に受信され、かつ/または記憶されたイベントは、交換されず、同期化プロセス中に使用される帯域幅を減らす。
[1215] アリスの展望から、彼女は、ボブ、キャロル、エド、およびデイブによって作成され、かつ/または定義されたイベントに関して彼女が有する最初および最後のシーケンス番号を使用することができる。したがって、たとえば、アリスは、分散データベースの彼女のインスタンスで受信されたイベント(たとえば、分散データベースのエドのインスタンスによって作成され、かつ/または定義されたイベント)に基づいて、エドに関して分散データベースのアリスのインスタンスで受信されたイベントの最後のシーケンス番号より大きいシーケンス番号を有するエドによって定義されたイベントが、アリスがまだ受信していないイベントであると判定することができる。その後、ボブは、これらのイベントをアリスに送ることができる。同様に、アリスは、所与のメンバ、たとえばエドに関して分散データベースのアリスのインスタンスで受信されたイベントに基づいて、分散データベースのアリスのインスタンスで記憶されたそのメンバの最初のシーケンス番号より小さいシーケンス番号を有する、そのメンバに関してボブによって記憶されたすべてのイベントが、分散データベースのアリスのインスタンスが拒絶しまたは破棄したイベントであると判定することができる(たとえば、上で説明した署名付きの状態に基づいて)。
[1216] いくつかの実施態様では、アリス(または任意の他のメンバ)は、そのシーケンス番号が、所与のメンバ(たとえば、エド)に関して分散データベースのアリスのインスタンスで記憶されたイベントの最初のシーケンス番号と最後のシーケンス番号との間であるイベントを破棄せず、拒絶しない。他の例では、同期化中に、分散データベースのアリスのインスタンスは、図15を参照して議論したように、署名付きの状態の一部である古いイベント、または、1つもしくは複数のしきい値によって定義される範囲内の受信されたラウンド番号を有しないイベントのいずれをも破棄することができる。
[1217] 同期化中に、第1のメンバ(たとえば、アリス)に関連する分散データベースのローカル・インスタンスは、ボブからのイベントが、分散データベースのアリスのローカル・インスタンスで彼女がまだ受信していない親イベントのハッシュ値を含む場合に、そのようなイベントを拒絶することができる。しかし、いくつかの例で、アリスに関連する分散データベースのローカル・インスタンスは、イベント親がアリスに関連する分散データベースのローカル・インスタンス内に含まれない場合であっても、たとえばアリスが受信されたイベントの親を破棄したことの表示がある場合に、そのようなイベントを受諾することができる。アリスに関連するデータベースのローカル・インスタンスが一般に破棄するはずのイベントの例は、イベントが分散データベースの状態に対する影響を有しておらず、かつ/またはその影響がアリスに関連する分散データベースのローカル・インスタンス内の最新の署名付き状態に既に組み込まれているので、イベントが破棄され得るとアリスが判定できるような、十分に古い受信されたラウンド番号に関連する親を有するイベントを含む。
[1218] いくつかの例で、第1のメンバ(たとえば、アリス)は、1601で、分散データベースの彼女のローカル・インスタンスで、分散データベースの非ローカル・インスタンス、たとえばボブに関連する非ローカル・インスタンスからイベントXを受信する。その後、1603で、署名の集合が、イベントXから抽出され得る。1605では、イベントXから抽出された署名の集合が検証プロセスに合格するか否かを判定するために、署名検証プロセスが実行される。いくつかの例では、イベントX(アリスによって受信された)から抽出された署名に基づいて、イベントXが、たとえば所与の作成者(たとえば、エド)および所与のシーケンス番号(たとえば、SN=3)を有する親イベントYを有し、アリスに関連する分散データベースのローカル・インスタンスが、親イベントY、同一の作成者(すなわち、エド)、および同一のシーケンス番号(すなわち、SN=3)を有するイベントZを含むとアリスが判定できるときに、イベントXは、検証プロセスに合格できない。したがって、フォークするイベントを定義する分散データベースのインスタンスによって引き起こされ得る分散データベース内の異常があるときに、検証プロセスは失敗する。
[1219] 1607では、アリスが、イベントXが署名検証に失敗したと1605で判定するときに、アリスの分散データベースのローカル・インスタンスは、イベントXが検証プロセスに失敗したことを示す失敗通知メッセージをボブの分散データベースの非ローカル・インスタンスに送る。その後、1609では、分散データベースのローカル・インスタンスが、イベントXの親であるイベントに関連するハッシュ値を受信する。その後、分散データベースのローカル・インスタンスは、イベントXの親であるイベントに関連する受信されたハッシュ値を比較し、分散データベースの非ローカル・インスタンスに1つまたは複数のイベント、たとえばイベントXの親であるイベントが欠けているか否かを判定することができる。したがって、1611では、分散データベースのローカル・インスタンスは、分散データベースの非ローカル・インスタンスに、分散データベースの非ローカル・インスタンスに欠けているイベントのハッシュを送る。プロセスの流れは、1601で始まるループ内で継続する。
[1220] いくつかの例で、分散データベースのローカル・インスタンス(たとえば、アリス)によって受信されたイベントが、1605で検証プロセスに合格するときには、アリスは、同期化プロセス(たとえば、2つのメンバの間でのイベントの同期化)中にフォーキング問題が識別されたかどうかを判定することができる。フォーキング問題が識別されるときには、分散データベースのローカル・インスタンス(たとえば、アリス)は、分散データベースの非ローカル・インスタンス(たとえば、ボブ)に、識別されたフォーキング問題に含まれ、かつ/またはこれによって影響されると判定されたイベントXの先祖(たとえば、親)である1つまたは複数のイベントのインジケータ(たとえば、ハッシュ値)を送り、その後、このプロセスは終了する。いくつかの例では、同期化プロセス中にフォーキング問題が識別されない時、たとえば1601で受信されたイベントXが、1605での署名検証プロセスに合格するときに、このプロセスは終了する。
[1221] いくつかの例では、イベントXおよびイベントYは、これらが同一の作成者および同一の作成済みラウンドを有し、どちらもが他方の先祖ではない場合に、お互いとの「フォーク」である。これは、フォークするイベントXおよびYが同一の受信されたラウンドを有することを指定する追加の制約を有する、図9を参照して上で議論した「フォーキング」問題の使用の変形形態である。さらに、いくつかの例では、上で説明した「見る」および「強く見る」の定義は、「フォーキング」のこの代替の定義に基づいて変更され得る。たとえば、イベントXは、イベントYがイベントXの先祖であり、イベントXの先祖でありイベントYの「フォーク」であるイベントZがない場合に限って、イベントYを「見る」ことができる。イベントXは、分散データベース・メンバのうちのM(たとえば、2/3)を超えるメンバによって作成されたイベントの集合Sが存在し、イベントXが、S内のすべてのイベントを見ることができ、S内のすべてのイベントがイベントYを見ることができる場合に限って、イベントYを「強く見る」ことができる。
[1222] フォーキングは、余分な計算および帯域幅使用を引き起こし、したがって、メンバは、そのメンバがフォークするイベントを作成し、かつ/または定義したと判定されるときに、ペナルティを科され得る。したがって、メンバが、フォークするイベントを引き起こしたと判定されるときに、分散データベースは、そのようなメンバにペナルティを科すように構成され得る。そのような例では、フォークを発見するメンバは、そのようなフォークを文書化するトランザクションを作成することができ、このトランザクションは、イベントのフォーキング作成の責任を負うメンバを分散データベースから一時的にまたは永久的に除去するREMOVE動作に関するトランザクションとして働く。たとえば、メンバは、そのようなメンバがフォークするイベントを作成したラウンドに対応するラウンドの彼/彼女の票および/またはフォークするイベントを無効にすることによって一時的にペナルティを科され得る。
[1223] いくつかの実施態様では、1同期化プロセスあたりのバイト数および/または1同期化プロセスあたりの同期化を許されるイベント数の大域限度が、分散データベース内で実施される。たとえば、アリスが、ボブによって見逃されたイベントをボブに送るときに、アリスに関連するデータベースのインスタンスは、次のイベントが許容できるバイト数または同期化を許されるイベントの許容できる個数のいずれかを超えるときに、データ・パケットおよび/またはイベントの送出を停止することができる。そのようなケースでのイベントの送信は、イベントとそのイベントの親との両方が同期化されつつある場合に、イベントを送る前にイベントの親を送ることによって実行され得る。
[1224] いくつかの例では、同期化される2つのイベント、たとえばイベントXおよびイベントYが、関係付けられていない(すなわち、どちらもが他方の直接の子孫ではない)ときに、イベントXの作成者によって作成されたイベントの現在の同期化プロセス中に、第1のメンバに関連するバイト数の大域限度(Bx)(および、同様に、イベントYの作成者による第2のメンバに関連するバイトの大域限度(By))に達することをイベントXの送出が意味する場合に、同期化プロセスは、Bx<Byの場合にイベントYの前にイベントXを送ること、By<Bxの場合にイベントXの前にイベントYを送ることを含み、Bx=Byの場合にいずれかの順序でそれらを送ることができる。これは、大きいイベントが同期化プロセスを制御するのを防ぐ。
[1225] いくつかの例では、第1のメンバおよび第2のメンバは、各メンバの最初/最後のシーケンス番号のリストを共有することによって同期化プロセスを開始する。第1のメンバが、彼女がその後に破棄したイベントを有したが、第2のメンバがまだこれらのイベントを必要とすることを、それらのメンバが発見する可能性がある。その場合に、第1のメンバが、第1のメンバに関連する分散データベースのインスタンス内に記憶された最新の署名付き状態を第2のメンバに関連するデータベースのインスタンスに送る、同期化プロセスの変更されたバージョンが実行される。その後、第1のメンバは、第2のメンバが既に第2のメンバに関連するデータベースのインスタンス内に有するイベントを除く、最新の署名付き状態の後に登録された、第1のメンバに関連するデータベースのインスタンス内に記憶されたイベントを送る。したがって、第2のメンバは、長い時間期間にわたってデータベースの彼のローカル・インスタンスをスリープさせまたはターンオフする(すなわち、オフラインにする)ことができ、ウェイク・アップまたはターン・オンの後に、同期化プロセスの変更されたバージョンの実行は、第2のメンバが分散データベースに参加することを可能にする。言い換えると、いくつかの例で、第2のメンバは、参加し続けるために、署名付き状態およびその署名付き状態以降のすべてのイベントだけを第1のメンバから受信することができる。これは、署名付き状態なしで交換されるイベントの個数を減らす。
[1226] 図示され、上で説明された例のシステムは、他のシステムを参照して説明されるが、他の実施形態では、例のシステムおよびそれらの関連する機能性の任意の組合せが、分散データベースを作成し、かつ/または定義するために実施され得る。たとえば、例のシステム1、例のシステム2、および例のシステム3は、分散データベースを作成し、かつ/または定義するために組み合わされ得る。別の例として、いくつかの実施形態では、例のシステム10は、例のシステム9なしで、例のシステム1を用いて実施され得る。さらなる別の例として、例のシステム7は、例のシステム6と組み合わされ、これを用いて実施され得る。さらなる別の例として、例のシステムの任意の他の適切な組合せが実施され得る。
[1227]] 様々な実施形態が上で説明されたが、それらが、例としてのみ提示され、限定的ではないことを理解されたい。上で説明された方法が、ある順序で発生するある種のイベントを示す場合に、ある種のイベントの順序付けは、変更され得る。さらに、ある種のイベントは、可能なときには並列プロセス内で同時に実行され得ると同時に、上で説明されたように順次実行され得る。
[1228] 本明細書で説明されるいくつかの実施形態は、様々なコンピュータ実施される動作を実行する命令またはコンピュータ・コードをその上に有する非一時的コンピュータ可読媒体(非一時的プロセッサ可読媒体と呼ばれることも可能である)を有するコンピュータ・ストレージ製品に関する。コンピュータ可読媒体(またはプロセッサ可読媒体)は、本質的に一時的な伝搬する信号(たとえば、空間またはケーブルなどの伝送媒体上で情報を搬送する伝搬する電磁波)を含まないという意味で非一時的である。媒体およびコンピュータ・コード(コードと呼ばれることも可能である)は、1つまたは複数の特定の目的のために設計され、構成された媒体およびコンピュータ・コードとすることができる。非一時的コンピュータ可読媒体の例は、ハード・ディスク、フロッピ・ディスク、および磁気テープなどの磁気記憶媒体と、コンパクト・ディスク/デジタル・ビデオ・ディスク(CD/DVD)、コンパクト・ディスク読取専用メモリ(CD−ROM)、およびホログラフィック・デバイスなどの光記憶媒体と、光ディスクなどの光磁気記憶媒体と、搬送波信号処理モジュールと、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、読取専用メモリ(ROM)デバイス、およびランダム・アクセス・メモリ(RAM)デバイスなど、プログラム・コードを記憶し、実行するように特に構成されたハードウェア・デバイスとを含むが、これに限定されない。本明細書で説明される他の実施形態は、たとえば本明細書で議論される命令および/またはコンピュータ・コードを含むことができるコンピュータ・プログラム製品に関する。
[1229] コンピュータ・コードの例は、マイクロコードまたはマイクロ命令、コンパイラによって作られるものなどの機械命令、ウェブ・サービスを作るのに使用されるコード、およびインタープリタを使用してコンピュータによって実行される高水準命令を含むファイルを含むが、これに限定されない。たとえば、実施形態は、命令型プログラミング言語(たとえば、C、Fortranなど)、関数型プログラミング言語(Haskell、Erlangなど)、論理型プログラミング言語(たとえば、Prolog)、オブジェクト指向プログラミング言語(たとえば、Java、C++など)、または他の適切なプログラミング言語および/または開発ツールを使用して実施され得る。コンピュータ・コードの追加の例は、制御信号、暗号化されたコード、および圧縮されたコードを含むが、これに限定されない。
[1230] 様々な実施形態が上で説明されたが、それらが、限定ではなく例としてのみ提示され、形態および詳細における様々な変更が行われ得ることを理解されたい。本明細書で説明される装置および/または方法のどの部分もが、相互に排他的な組合せを除いて、任意の組合せで組み合わされ得る。本明細書で説明される実施形態は、説明される異なる実施形態の機能、構成要素、および/または特徴の様々な組合せおよび/または副組合せを含むことができる。

Claims (17)

  1. 複数の計算デバイスに動作可能に結合されたネットワークを介して分散データベースを実施する前記複数の計算デバイス内に含まれるように構成された計算デバイスにある前記分散データベースのインスタンスに関連するメモリであって、
    前記複数の計算デバイスは、
    前記分散データベースに関連するイベント同意プロトコルの第1の構成に関連する、メモリと、
    前記メモリに動作可能に結合されたプロセッサと、
    を含む装置であって、
    前記プロセッサは、
    前記複数の計算デバイスからの計算デバイスの集合から、イベントの集合であって、イベントの前記集合からの各イベントは、(1)トランザクションの集合と(2)受信されたラウンド番号とに関連する、イベントの集合を受信し、
    イベントの前記集合からの各イベントの順序を
    (1)前記イベントに関連する前記受信されたラウンド番号が前記分散データベースの前記インスタンスによって識別された受信されたラウンド番号しきい値を超えないときには、前記イベント同意プロトコルの前記第1の構成に、
    (2)前記イベントに関連する前記受信されたラウンド番号が前記受信されたラウンド番号しきい値を超えるときには、前記イベント同意プロトコルの第2の構成に
    基づいて判定し、
    イベントの前記集合からの各イベントの判定された前記順序に基づいて、前記分散データベースの前記インスタンスに関連する現在の状態を判定し、
    前記現在の状態に関連するハッシュ値であって、第1の計算デバイスに関連する秘密鍵を用いてデジタル署名されたハッシュ値に基づいて、前記分散データベースの前記インスタンスに関連する署名付き状態を生成し、
    前記署名付き状態を示すトランザクションを含むイベントを前記分散データベースの前記インスタンスにポストするために信号を送る
    ように構成される、装置。
  2. 前記計算デバイスは、第1の計算デバイスであり、
    前記複数の計算デバイスは、第1の時間期間中に前記分散データベースを実施する第1の複数の計算デバイスであり、
    前記受信されたラウンド番号しきい値は、第2の複数の計算デバイスを定義するために前記第1の複数の計算デバイスに第2の計算デバイスを追加するトランザクションを含むイベントの受信されたラウンドに基づいて定義される、
    請求項1に記載の装置。
  3. 前記計算デバイスは、第1の計算デバイスであり、
    前記複数の計算デバイスは、第1の時間期間中に前記分散データベースを実施する第1の複数の計算デバイスであり、
    前記受信されたラウンド番号しきい値は、第2の複数の計算デバイスを定義するために前記第1の複数の計算デバイスから第2の計算デバイスを除去するトランザクションを含むイベントの受信されたラウンド番号に基づいて定義される、
    請求項1に記載の装置。
  4. 前記計算デバイスは、前記複数の計算デバイスからの第1の計算デバイスであり、
    前記複数の計算デバイスからの各計算デバイスは、前記イベント同意プロトコル内で使用されるステーク値に論理的に関係付けられ、
    前記受信されたラウンド番号しきい値は、前記複数の計算デバイスからの第2の計算デバイスに論理的に関係付けられた前記ステーク値を変更するトランザクションを含むイベントの受信されたラウンド番号に基づいて定義される、
    請求項1に記載の装置。
  5. 前記受信されたラウンド番号しきい値は、第1の受信されたラウンド番号しきい値であり、
    前記現在の状態は、前記分散データベースの前記インスタンスに関連する第1の状態であり、
    前記プロセッサは、前記分散データベースの前記インスタンスの前記第1の状態を更新するトランザクションを含むイベントの前記集合からのイベントの受信されたラウンド番号に対応する第2の受信されたラウンド番号しきい値であって、前記第2の受信されたラウンド番号しきい値は、前記イベント同意プロトコルの第3の構成に関連し、前記第2の受信されたラウンド番号しきい値は、前記第1の受信されたラウンド番号しきい値より大きい、第2の受信されたラウンド番号しきい値を定義するようにさらに構成され、
    前記プロセッサは、イベントの前記集合からの各イベントの前記順序を、
    前記イベントに関連する前記受信されたラウンド番号が、前記第2の受信されたラウンド番号しきい値を超え、前記第2の受信されたラウンド番号しきい値を超えないときには、前記イベント合意プロトコルの前記第2の構成に、
    前記イベントに関連する前記受信されたラウンド番号が、前記第2の受信されたラウンド番号しきい値を超えるときには、前記イベント合意プロトコルの前記第3の構成に
    基づいて判定するように構成される、
    請求項1に記載の装置。
  6. 前記プロセッサは、イベントの前記集合からの各イベントに関連するトランザクションの前記集合を、トランザクションの前記集合がそのイベント内で指定される順序に対応するサブオーダで実行することによって、前記分散データベースの前記インスタンスに関連する前記現在の状態を判定するように構成される、
    請求項1に記載の装置。
  7. 前記計算デバイスは、前記複数の計算デバイスからの第1の計算デバイスであり、
    前記受信されたラウンド番号しきい値は、前記イベント同意プロトコルに関連するソフトウェア変更を含むイベントの受信されたラウンド番号に基づいて定義される、
    請求項1に記載の装置。
  8. 複数の計算デバイスに動作可能に結合されたネットワークを介して分散データベースを実施する前記複数の計算デバイス内に含まれるように構成された第1の計算デバイスにある前記分散データベースのインスタンスに関連するメモリと、
    前記メモリに動作可能に結合されたプロセッサと、
    を含む装置であって、
    前記プロセッサは、
    前記複数の計算デバイスからの第2の計算デバイスから、イベントであって、前記イベントは、親イベントの集合に関連するバイトのシーケンスであり、親イベントの前記集合からの各親イベントは、(1)ハッシュ値と(2)作成済みラウンド値とに関連する、イベントを受信し、
    (1)親イベントの前記集合からの少なくとも1つの親イベントが、前記分散データベースの前記インスタンス内に識別子を有しておらず、かつ、
    (2)前記少なくとも1つの親イベントが、第1の作成済みラウンドしきい値を超える作成済みラウンド値に関連するときに満足される第1の判断基準、または
    (1)前記第1の判断基準が満足されず、かつ、
    (2)親イベントの前記集合からの各親イベントが、第2の作成済みラウンドしきい値未満の作成済みラウンド値に関連する
    ときに満足される第2の判断基準のうちの少なくとも1つが満足されるときに、イベントの順序の判定から受信されたイベントを除外し、
    前記イベントが前記第1の判断基準または前記第2の判断基準に基づいて除外されなかったときに、前記分散データベースの前記インスタンス内に前記イベントを記憶する、
    ように構成される、装置。
  9. 前記第1の作成済みラウンドしきい値は、前記分散データベースの前記インスタンスによって識別された現在の受信されたラウンド番号に基づく、
    請求項8に記載の装置。
  10. 前記第2の作成済みラウンドしきい値は、前記分散データベースの前記インスタンスによって識別された現在の受信されたラウンド番号に基づく、
    請求項8に記載の装置。
  11. 前記第1の作成済みラウンドしきい値は、前記第2の作成済みラウンドしきい値に対応する、
    請求項8に記載の装置。
  12. 前記第1の作成済みラウンドしきい値は、前記第2の作成済みラウンドしきい値とは異なる、
    請求項8に記載の装置。
  13. 前記受信されたイベントは、トランザクションの集合を含み、前記受信されたイベントは、第1の時刻のイベントの前記順序の前記判定から除外され、
    トランザクションの前記集合は、前記第1の時刻の前の第2の時刻に実行される、
    請求項8に記載の装置。
  14. 複数の計算デバイスに動作可能に結合されたネットワークを介して分散データベースを実施する前記複数の計算デバイス内に含まれるように構成された第1の計算デバイスにある前記分散データベースのインスタンスに関連するメモリと、
    前記メモリに動作可能に結合されたプロセッサと
    を含む装置であって、
    前記プロセッサは、
    前記複数の計算デバイスからの第2の計算デバイスによって定義されるイベントの群であって、イベントの前記群からの各イベントは、(1)シーケンス値と(2)トランザクションの順序集合とに関連するバイトのシーケンスを含む、イベントの群からのイベントの第1の集合の表示を前記メモリ内に記憶し、
    同期化要求であって、前記同期化要求は、第1の識別子および第2の識別子を含み、前記第1の識別子は、イベントの前記第1の集合からの各残りのイベントに関連する前記シーケンス値未満のシーケンス値に関連するイベントの前記第1の集合からのイベントを識別し、前記第2の識別子は、イベントの前記第1の集合からの各残りのイベントに関連する前記シーケンス値を超えるシーケンス値に関連するイベントの前記第1の集合からのイベントを識別し、同期化要求を前記複数の計算デバイスからの第3の計算デバイスに送り、
    前記同期化要求に応答して、前記第3の計算デバイスから、前記第2の計算デバイスによって定義されたイベントの前記群からのイベントの第2の集合を受信し、
    イベントの前記第2の集合からの各イベントは、イベントの前記第1の集合には含まれない、イベントの前記第2の集合の表示を前記メモリ内に記憶し、
    (1)イベント同意プロトコルと(2)イベントの前記第1の集合と(3)イベントの前記第2の集合とに基づいて、前記分散データベースの前記インスタンスの現在の状態を判定し、
    前記現在の状態に関連するハッシュ値であって、前記ハッシュ値は、前記第1の計算デバイスに関連する秘密鍵を用いてデジタル署名される、ハッシュ値に基づいて、前記分散データベースの前記インスタンスの署名付き状態を生成し、
    前記署名付き状態を示すトランザクションを含むイベントを前記分散データベースの前記インスタンスにポストするために信号を送り、
    前記複数の計算デバイスからの計算デバイスの集合から、前記署名付き状態を示す前記トランザクションを含む前記イベントに関連する合意の表示を受信し、
    前記メモリから、合意の前記表示に基づいて、イベントの前記第1の集合の前記表示およびイベントの前記第2の集合の前記表示を除去する、
    ように構成される、装置。
  15. 前記プロセッサは、前記署名付き状態に関連し、前記複数の計算デバイスからの計算デバイスの前記集合に関連するデジタル署名の個数が署名しきい値に達したとの判定に基づいて合意の前記表示を受信するように構成される、
    請求項14に記載の装置。
  16. 前記現在の状態は、第1のラウンド番号に関連する第1の状態であり、前記プロセッサは、第1の時刻に前記第1の状態を生成するように構成され、
    前記プロセッサは、前記第1の時刻の後の第2の時刻の、前記第1のラウンド番号を超える第2のラウンド番号に関連する前記分散データベースの前記インスタンスの第2の状態を生成する、
    ようにさらに構成される、
    請求項14に記載の装置。
  17. 前記現在の状態は、イベントの第3の集合の同意順序に基づいてソートされた複数のトランザクションの実行から生成された前記分散データベースの前記インスタンスの状態に対応し、
    イベントの前記第3の集合からの各イベントは、前記複数のトランザクションからのトランザクションの順序集合に関連し、イベントの前記第3の集合は、イベントの前記第1の集合およびイベントの前記第2の集合を含む、
    請求項14に記載の装置。
JP2019525948A 2016-12-19 2017-12-19 イベントの削除を可能にする分散データベースのための方法および装置 Active JP7211943B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201662436066P 2016-12-19 2016-12-19
US62/436,066 2016-12-19
PCT/US2017/067329 WO2018118930A1 (en) 2016-12-19 2017-12-19 Methods and apparatus for a distributed database that enables deletion of events

Publications (2)

Publication Number Publication Date
JP2020504927A true JP2020504927A (ja) 2020-02-13
JP7211943B2 JP7211943B2 (ja) 2023-01-24

Family

ID=62561662

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019525948A Active JP7211943B2 (ja) 2016-12-19 2017-12-19 イベントの削除を可能にする分散データベースのための方法および装置

Country Status (9)

Country Link
US (2) US11222006B2 (ja)
EP (1) EP3555757A4 (ja)
JP (1) JP7211943B2 (ja)
KR (2) KR102454779B1 (ja)
CN (2) CN116820695A (ja)
AU (1) AU2017382161B2 (ja)
CA (1) CA3044071A1 (ja)
RU (1) RU2754189C2 (ja)
WO (1) WO2018118930A1 (ja)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8874477B2 (en) 2005-10-04 2014-10-28 Steven Mark Hoffberg Multifactorial optimization system and method
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9529923B1 (en) 2015-08-28 2016-12-27 Swirlds, Inc. Methods and apparatus for a distributed database within a network
EP3497975B1 (en) * 2016-08-10 2020-03-04 Telefonaktiebolaget LM Ericsson (publ) Packet forwarding in a wireless mesh network
PT3539026T (pt) 2016-11-10 2022-03-08 Swirlds Inc Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas
US11222006B2 (en) 2016-12-19 2022-01-11 Swirlds, Inc. Methods and apparatus for a distributed database that enables deletion of events
US10664462B2 (en) * 2017-03-01 2020-05-26 Sap Se In-memory row storage architecture
KR102348418B1 (ko) 2017-07-11 2022-01-07 스월즈, 인크. 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치
US10728036B2 (en) * 2017-09-05 2020-07-28 PeerNova, Inc. Cryptographically linking related events processed across multiple processing systems
US10425335B2 (en) * 2017-09-19 2019-09-24 Sap Se Reconstructing message flows based on hash values
SG11202002308RA (en) 2017-11-01 2020-04-29 Swirlds Inc Methods and apparatus for efficiently implementing a fast-copyable database
US11065546B1 (en) * 2018-01-11 2021-07-20 Amazon Technologies, Inc. Distributed authority for peer gaming
US11580238B2 (en) 2018-01-29 2023-02-14 Vinay Kumar Agarwal Proof-of-approval distributed ledger
US10756904B1 (en) * 2018-02-22 2020-08-25 EMC IP Holding Company LLC Efficient and secure distributed ledger maintenance
US10671370B2 (en) * 2018-05-30 2020-06-02 Red Hat, Inc. Distributing file system states
US10915521B2 (en) * 2018-08-21 2021-02-09 Syniverse Technologies, Llc Blockchain gateway device and associated method of use
TWI698100B (zh) * 2018-09-18 2020-07-01 柯賓漢數位金融科技有限公司 多區塊鏈產生及整合方法暨區塊鏈系統
JP7253344B2 (ja) * 2018-09-18 2023-04-06 株式会社エヌ・ティ・ティ・データ 情報処理装置、情報処理方法およびプログラム
DE102018123463A1 (de) * 2018-09-24 2020-03-26 Akarion GmbH Personendatenbank
CN109241193B (zh) * 2018-09-26 2022-10-25 联想(北京)有限公司 分布式数据库的处理方法和装置,及服务器集群
US10944850B2 (en) * 2018-10-29 2021-03-09 Wandisco, Inc. Methods, devices and systems for non-disruptive upgrades to a distributed coordination engine in a distributed computing environment
US11138188B2 (en) * 2018-11-07 2021-10-05 International Business Machines Corporation Performance optimization
KR102228210B1 (ko) * 2019-04-29 2021-03-16 에이치엔핀코어 주식회사 블록체인 네트워크에서의 트랜잭션의 삭제를 가능하게 하는 노드 장치 및 그 동작 방법
CN110166548B (zh) * 2019-05-21 2022-03-08 西安中星测控有限公司 一种物联网在线共识节点实时更新方法和装置
CN113711202A (zh) 2019-05-22 2021-11-26 斯沃尔德斯股份有限公司 用于在分布式数据库中实现状态证明和分类帐标识符的方法和装置
US10606585B1 (en) 2019-11-12 2020-03-31 Capital One Services, Llc Computer-based systems configured for automated roll-forward of software package versions and methods of use thereof
US11265176B1 (en) 2019-12-18 2022-03-01 Wells Fargo Bank, N.A. Systems and applications to provide anonymous feedback
US11398916B1 (en) 2019-12-18 2022-07-26 Wells Fargo Bank, N.A. Systems and methods of group signature management with consensus
US11509484B1 (en) 2019-12-18 2022-11-22 Wells Fargo Bank, N.A. Security settlement using group signatures
PL3851974T3 (pl) * 2020-01-20 2024-03-04 Decard Ag System i sposób realizowania algorytmu konsensusu skierowanego grafu acyklicznego (dag) za pośrednictwem protokołu gossip
US11722589B2 (en) * 2020-04-08 2023-08-08 Huawei Technologies Co., Ltd. Rapid ledger consensus system and method for distributed wireless networks
US11574254B2 (en) * 2020-04-29 2023-02-07 International Business Machines Corporation Adaptive asynchronous federated learning
US11818259B2 (en) 2020-05-13 2023-11-14 Ridgeline, Inc. Query and projection processing for events
US11233640B2 (en) * 2020-05-13 2022-01-25 Ridgeline, Inc. Mutation processing for events
US11949784B2 (en) 2020-05-13 2024-04-02 Ridgeline, Inc. Auditing for events
CN111539829B (zh) 2020-07-08 2020-12-29 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的待过滤交易识别方法及装置
CN111541789A (zh) 2020-07-08 2020-08-14 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的数据同步方法及装置
CN112492002B (zh) 2020-07-08 2023-01-20 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的交易转发方法及装置
CN113438219B (zh) 2020-07-08 2023-06-02 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的重放交易识别方法及装置
CN111541784B (zh) * 2020-07-08 2021-07-20 支付宝(杭州)信息技术有限公司 一种基于区块链一体机的交易处理方法及装置
CN112202687B (zh) * 2020-12-03 2021-05-25 苏州浪潮智能科技有限公司 一种节点同步方法、装置、设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090150566A1 (en) * 2007-12-07 2009-06-11 Microsoft Corporation Virtually synchronous paxos
JP2010146103A (ja) * 2008-12-16 2010-07-01 Nec Corp 補償処理手順方式選択装置、方法、プログラム及びそれを記録した記録媒体、並びにワークフローシステム
US20140337393A1 (en) * 2013-05-13 2014-11-13 Amazon Technologies, Inc. Transaction ordering
WO2015111152A1 (ja) * 2014-01-22 2015-07-30 株式会社日立製作所 データベース管理システム及び方法
JP2015526832A (ja) * 2012-12-03 2015-09-10 ヴイエムウェア インコーポレイテッドVMware,Inc. 分散キーバリューストア
US20150277969A1 (en) * 2014-03-31 2015-10-01 Amazon Technologies, Inc. Atomic writes for multiple-extent operations
US9390154B1 (en) * 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
WO2016143095A1 (ja) * 2015-03-11 2016-09-15 株式会社日立製作所 計算機システム及びトランザクション処理の管理方法

Family Cites Families (153)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4309569A (en) 1979-09-05 1982-01-05 The Board Of Trustees Of The Leland Stanford Junior University Method of providing digital signatures
US5701480A (en) 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
JPH0798669A (ja) 1993-08-05 1995-04-11 Hitachi Ltd 分散データベース管理システム
US5495607A (en) 1993-11-15 1996-02-27 Conner Peripherals, Inc. Network management system having virtual catalog overview of files distributively stored across network domain
US6446092B1 (en) 1996-11-01 2002-09-03 Peerdirect Company Independent distributed database system
US5991414A (en) 1997-09-12 1999-11-23 International Business Machines Corporation Method and apparatus for the secure distributed storage and retrieval of information
US6728713B1 (en) 1999-03-30 2004-04-27 Tivo, Inc. Distributed database management system
US20010000253A1 (en) 1999-05-20 2001-04-12 Westvaco Corporation Hydrocarbon/acrylic hybrid resins for use in continuous ink jet ink formulations
AU6620000A (en) 1999-08-06 2001-03-05 Frank W Sudia Blocked tree authorization and status systems
US6694328B1 (en) 2000-01-13 2004-02-17 International Business Machines Corporation Method for creating queries on version objects
US6754845B2 (en) 2000-01-14 2004-06-22 International Business Machines Corporation Method of achieving optimistic multiple processor agreement in potentially asynchronous networks
US6584476B1 (en) 2000-04-22 2003-06-24 Oracle Corp. System and method for enforcing referential constraints between versioned database tables
EP1152330A1 (en) 2000-05-04 2001-11-07 Carels Innovative Software, BVBA/SPRL Process for automatically creating and controlling a set of graphical objects in a client server environment
US6966836B1 (en) 2000-11-16 2005-11-22 Ea.Com, Inc. Positive-return gambling
US6931431B2 (en) 2001-01-13 2005-08-16 International Business Machines Corporation Agreement and atomic broadcast in asynchronous networks
US20020143800A1 (en) 2001-01-24 2002-10-03 Henrik Lindberg Model view controller
US7711122B2 (en) 2001-03-09 2010-05-04 Arcot Systems, Inc. Method and apparatus for cryptographic key storage wherein key servers are authenticated by possession and secure distribution of stored keys
US7062490B2 (en) 2001-03-26 2006-06-13 Microsoft Corporation Serverless distributed file system
US7088821B2 (en) 2001-05-03 2006-08-08 Cheman Shaik Absolute public key cryptographic system and method surviving private-key compromise with other advantages
US8868467B2 (en) 2002-10-23 2014-10-21 Oleg Serebrennikov Method for performing transactional communication using a universal transaction account identifier assigned to a customer
JP2003202964A (ja) 2002-01-09 2003-07-18 Hitachi Ltd 計算機システムの制御方法、計算機システム、記憶装置の制御方法及び記憶装置
US7146009B2 (en) 2002-02-05 2006-12-05 Surety, Llc Secure electronic messaging system requiring key retrieval for deriving decryption keys
US7558883B1 (en) 2002-06-28 2009-07-07 Microsoft Corporation Fast transaction commit
RU2376635C2 (ru) 2002-10-23 2009-12-20 Закрытое акционерное общество "МедиаЛингва" Способ и система проведения транзакций в сети с использованием сетевых идентификаторов
US8311980B2 (en) 2002-12-09 2012-11-13 Hewlett-Packard Development Company, L.P. Namespace consistency for a wide-area file system
FI118619B (fi) 2003-05-16 2008-01-15 Jarmo Talvitie Menetelmä ja järjestelmä tiedon salaamiseksi ja tallentamiseksi
US7873684B2 (en) 2003-08-14 2011-01-18 Oracle International Corporation Automatic and dynamic provisioning of databases
JP4189332B2 (ja) 2004-01-30 2008-12-03 株式会社東芝 データベース管理システム、データベース管理方法、データベース登録要求プログラムおよびデータベース管理プログラム
CA2469598A1 (en) 2004-06-01 2005-12-01 Daniel W. Onischuk Computerized voting system
US7844745B1 (en) 2004-08-19 2010-11-30 Nortel Networks Limited Alternate home subscriber server (HSS) node to receive a request if a first HSS node cannot handle said request
US7389314B2 (en) 2004-08-30 2008-06-17 Corio, Inc. Database backup, refresh and cloning system and method
US7657543B1 (en) 2004-10-12 2010-02-02 Sun Microsystems, Inc. Method and system for creating and using shadow roots
US7555516B2 (en) 2004-11-23 2009-06-30 Microsoft Corporation Fast Paxos recovery
US7783664B2 (en) 2004-12-17 2010-08-24 Microsoft Corporation Method and system for protecting the consistency of information in a distributed file system
US9361311B2 (en) * 2005-01-12 2016-06-07 Wandisco, Inc. Distributed file system using consensus nodes
US20090157735A1 (en) 2005-05-13 2009-06-18 Gentry Craig B Method and apparatus for secure and small credits for verifiable service provider metering
US7890508B2 (en) 2005-08-19 2011-02-15 Microsoft Corporation Database fragment cloning and management
US7636704B2 (en) * 2005-08-26 2009-12-22 Emc Corporation Methods and apparatus for scheduling an action on a computer
US8533169B1 (en) 2005-09-21 2013-09-10 Infoblox Inc. Transactional replication
US7797457B2 (en) 2006-03-10 2010-09-14 Microsoft Corporation Leaderless byzantine consensus
GB2446199A (en) 2006-12-01 2008-08-06 David Irvine Secure, decentralised and anonymous peer-to-peer network
EP2095146A1 (en) 2006-12-19 2009-09-02 Koninklijke Philips Electronics N.V. Mri system with direct digital receiver using resampling
JP5211342B2 (ja) 2007-01-12 2013-06-12 国立大学法人山梨大学 秘匿通信方法
US9104962B2 (en) 2007-03-06 2015-08-11 Trion Worlds, Inc. Distributed network architecture for introducing dynamic content into a synthetic environment
US20080256078A1 (en) 2007-04-10 2008-10-16 Venkat Bhashyam Secure distributed computing engine and database system
US7899188B2 (en) 2007-05-31 2011-03-01 Motorola Mobility, Inc. Method and system to authenticate a peer in a peer-to-peer network
US8825743B2 (en) 2007-07-12 2014-09-02 Cornell University Semantic transactions in online applications
US7877331B2 (en) 2007-09-06 2011-01-25 King Fahd University Of Petroleum & Minerals Token based new digital cash protocols with combined blind digital signature and pseudonym authentication
US8176497B2 (en) 2008-01-16 2012-05-08 Dell Products, Lp Method to dynamically provision additional computer resources to handle peak database workloads
US8370391B2 (en) 2008-03-25 2013-02-05 Microsoft Corporation Functional updates for tree processing
US8037279B2 (en) 2008-06-12 2011-10-11 Oracle America, Inc. Method and system for cross-domain data sharing
JP5407209B2 (ja) 2008-07-28 2014-02-05 富士ゼロックス株式会社 文書管理装置、文書管理プログラム、及び文書管理システム
CN101334797B (zh) 2008-08-04 2010-06-02 中兴通讯股份有限公司 一种分布式文件系统及其数据块一致性管理的方法
US9253154B2 (en) * 2008-08-12 2016-02-02 Mcafee, Inc. Configuration management for a capture/registration system
US8533582B2 (en) 2009-03-20 2013-09-10 Xerox Corporation Trail-based data content discovery, organization, and processing
US8713038B2 (en) 2009-04-02 2014-04-29 Pivotal Software, Inc. Integrating map-reduce into a distributed relational database
US8571519B2 (en) 2009-05-07 2013-10-29 Nokia Corporation Method and apparatus for using pseudonyms
EP2443574A4 (en) 2009-06-19 2014-05-07 Blekko Inc EVOLVING CLUSTER DATABASE
JP5278219B2 (ja) 2009-07-17 2013-09-04 ヤマハ株式会社 ハウリングキャンセラ
GB0914815D0 (en) 2009-08-25 2009-09-30 Univ City Improvements relating to database replication protocols
US8356007B2 (en) * 2010-10-20 2013-01-15 Microsoft Corporation Distributed transaction management for database systems with multiversioning
EP2348449A3 (en) 2009-12-18 2013-07-10 CompuGroup Medical AG A computer implemented method for performing cloud computing on data being stored pseudonymously in a database
US8862617B2 (en) 2010-02-09 2014-10-14 Google Inc. System and method for replicating objects in a distributed storage system
US8380659B2 (en) 2010-02-09 2013-02-19 Google Inc. Method and system for efficiently replicating data in non-relational databases
US20130145426A1 (en) 2010-03-12 2013-06-06 Michael Wright Web-Hosted Self-Managed Virtual Systems With Complex Rule-Based Content Access
US20110250974A1 (en) 2010-04-07 2011-10-13 Gary Stephen Shuster Simulated gaming using prior game outcome
US8654650B1 (en) * 2010-04-30 2014-02-18 Amazon Technologies, Inc. System and method for determining node staleness in a distributed system
JP5431261B2 (ja) 2010-07-23 2014-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報管理システム、方法及びプログラム
US8880486B2 (en) 2010-07-27 2014-11-04 Sap Ag Distributed database system utilizing an extended two-phase-commit process
US20140310243A1 (en) 2010-08-16 2014-10-16 Mr. Steven James McGee Heart beacon cycle
US8600944B2 (en) 2010-09-24 2013-12-03 Hitachi Data Systems Corporation System and method for managing integrity in a distributed database
US8818963B2 (en) 2010-10-29 2014-08-26 Microsoft Corporation Halloween protection in a multi-version database system
WO2012070292A1 (ja) 2010-11-22 2012-05-31 インターナショナル・ビジネス・マシーンズ・コーポレーション 分散データベースの負荷均衡のためのコネクション配分を実現する情報処理システム、情報処理装置、負荷均衡方法、データベース配置計画方法およびプログラム
JP5948340B2 (ja) 2010-11-22 2016-07-06 ヒタチ データ システムズ エンジニアリング ユーケー リミテッドHitachi Data Systems Engineering Uk Limited データストレージシステムにおける、ファイルのクローニング及びデクローニング
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
CN103827723B (zh) 2011-01-10 2016-03-02 斯托尔万有限公司 大规模存储系统
US8612386B2 (en) 2011-02-11 2013-12-17 Alcatel Lucent Method and apparatus for peer-to-peer database synchronization in dynamic networks
US8799247B2 (en) 2011-02-11 2014-08-05 Purdue Research Foundation System and methods for ensuring integrity, authenticity, indemnity, and assured provenance for untrusted, outsourced, or cloud databases
US8712975B2 (en) 2011-03-08 2014-04-29 Rackspace Us, Inc. Modification of an object replica
US8577873B2 (en) 2011-03-30 2013-11-05 Indian Statistical Institute Determining a relative importance among ordered lists
US8799248B2 (en) 2011-04-26 2014-08-05 Brian J. Bulkowski Real-time transaction scheduling in a distributed database
US8732140B2 (en) 2011-05-24 2014-05-20 Red Lambda, Inc. Methods for storing files in a distributed environment
EP2740055A4 (en) * 2011-08-01 2015-09-09 Tagged Inc SYSTEMS AND METHOD FOR ASYNCHRONOUS DISTRIBUTED DATABASE MANAGEMENT
US20130110767A1 (en) 2011-10-26 2013-05-02 Nec Laboratories America, Inc. Online Transaction Processing
US9489429B2 (en) 2011-11-16 2016-11-08 Hitachi, Ltd. Computer system, data management method, and program
US9244717B2 (en) 2012-03-29 2016-01-26 Vmware, Inc. Method and system for visualizing linked clone trees
US9710501B2 (en) 2012-03-30 2017-07-18 Kinaxis Inc. Enhanced performance for large versioned databases
RU2510623C2 (ru) 2012-04-19 2014-04-10 Государственное казенное образовательное учреждение высшего профессионального образования Академия Федеральной службы охраны Российской Федерации (Академия ФСО России) Способ репликации информации в распределенных базах данных с конкурентным распределением потоков
WO2014008495A2 (en) * 2012-07-06 2014-01-09 Cornell University Managing dependencies between operations in a distributed system
CN102819585B (zh) 2012-07-31 2015-04-22 北大方正集团有限公司 一种xml数据库文档控制方法
FR2995437B1 (fr) 2012-09-07 2014-10-10 Commissariat Energie Atomique Dispositif de controle nucleaire pour reacteur refroidi au metal liquide de type rnr.
US9652525B2 (en) * 2012-10-02 2017-05-16 Banjo, Inc. Dynamic event detection system and method
US8775464B2 (en) 2012-10-17 2014-07-08 Brian J. Bulkowski Method and system of mapreduce implementations on indexed datasets in a distributed database environment
US8886601B1 (en) 2013-06-20 2014-11-11 Palantir Technologies, Inc. System and method for incrementally replicating investigative analysis data
US10354325B1 (en) 2013-06-28 2019-07-16 Winklevoss Ip, Llc Computer-generated graphical user interface
WO2015008377A1 (ja) 2013-07-19 2015-01-22 富士通株式会社 状態復元プログラム、装置、及び支援方法
US9241044B2 (en) 2013-08-28 2016-01-19 Hola Networks, Ltd. System and method for improving internet communication by using intermediate nodes
US9251235B1 (en) 2013-09-11 2016-02-02 Amazon Technologies, Inc. Log-based synchronization
US9280591B1 (en) 2013-09-20 2016-03-08 Amazon Technologies, Inc. Efficient replication of system transactions for read-only nodes of a distributed database
RU2560810C2 (ru) 2013-11-01 2015-08-20 Илья Самуилович Рабинович Способ и система защиты информации от несанкционированного использования (ее варианты)
US10311152B2 (en) 2013-12-20 2019-06-04 Hitachi Vantara Corporation System for queue based object cloning
CN105900375B (zh) 2014-01-13 2020-02-07 维萨国际服务协会 用于在认证交易中保护身份的设备、系统和方法
WO2015108520A1 (en) * 2014-01-16 2015-07-23 Hewlett-Packard Development Company, L. P. Node cluster synchronization
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US10334037B2 (en) 2014-03-31 2019-06-25 Yaana Technologies, Inc. Peer-to-peer rendezvous system for minimizing third party visibility and method thereof
US9495478B2 (en) * 2014-03-31 2016-11-15 Amazon Technologies, Inc. Namespace management in distributed storage systems
US11270298B2 (en) 2014-04-14 2022-03-08 21, Inc. Digital currency mining circuitry
US10419457B2 (en) * 2014-04-30 2019-09-17 Hewlett Packard Enterprise Development Lp Selecting from computing nodes for correlating events
US9189342B1 (en) 2014-05-29 2015-11-17 Emc Corporation Generic process for determining child to parent inheritance for fast provisioned or linked clone virtual machines
US10025802B2 (en) * 2014-09-19 2018-07-17 Amazon Technologies, Inc. Automated configuration of log-coordinated storage groups
US10111071B2 (en) 2014-09-19 2018-10-23 Avago Technologies General Ip (Singapore) Pte. Ltd. Bluetooth low energy automation mesh network
EP3002661A1 (en) 2014-09-30 2016-04-06 Advanced Digital Broadcast S.A. System and method for controlling a virtual input interface
KR101544722B1 (ko) 2014-11-13 2015-08-18 주식회사 엘지씨엔에스 부인 방지 방법, 이를 위한 결제 관리 서버 및 사용자 단말기
US9842031B1 (en) * 2014-12-08 2017-12-12 Amazon Technologies, Inc. Incremental updates to user transaction state at read-only nodes of a distributed database
US11012806B2 (en) 2015-01-09 2021-05-18 Ariba, Inc. Multi-adapter support in the cloud
SG11201704984SA (en) 2015-01-27 2017-07-28 Visa Int Service Ass Methods for secure credential provisioning
US9967091B2 (en) 2015-02-12 2018-05-08 Xerox Corporation Method for enhancing security in distributed systems
US20160328429A1 (en) * 2015-03-17 2016-11-10 Cloudera, Inc. Mutations in a column store
US20160283920A1 (en) 2015-03-28 2016-09-29 Justin Fisher Authentication and verification of digital data utilizing blockchain technology
EP3278239B1 (en) * 2015-04-01 2019-08-14 AB Initio Technology LLC Processing database transactions in a distributed computing system
US9568943B1 (en) * 2015-04-27 2017-02-14 Amazon Technologies, Inc. Clock-based distributed data resolution
US10026082B2 (en) 2015-05-21 2018-07-17 Mastercard International Incorporated Method and system for linkage of blockchain-based assets to fiat currency accounts
WO2017004527A1 (en) 2015-07-02 2017-01-05 Nasdaq, Inc. Systems and methods of secure provenance for distributed transaction databases
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9529923B1 (en) 2015-08-28 2016-12-27 Swirlds, Inc. Methods and apparatus for a distributed database within a network
WO2017040313A1 (en) 2015-08-28 2017-03-09 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10303887B2 (en) 2015-09-14 2019-05-28 T0.Com, Inc. Data verification methods and systems using a hash tree, such as a time-centric merkle hash tree
US9836366B2 (en) * 2015-10-27 2017-12-05 Netapp, Inc. Third vote consensus in a cluster using shared storage devices
US20170300550A1 (en) 2015-11-02 2017-10-19 StoreReduce Data Cloning System and Process
US20170180367A1 (en) 2015-12-16 2017-06-22 ClearChat, Inc. System And Method For Encrypted And Authenticated Electronic Messaging Using A Central Address Book
CN105681301B (zh) 2016-01-16 2019-03-12 杭州复杂美科技有限公司 区块链上的结算方法
US11423053B2 (en) * 2016-01-30 2022-08-23 Micro Focus Llc Log event cluster analytics management
US10353888B1 (en) * 2016-03-03 2019-07-16 Amdocs Development Limited Event processing system, method, and computer program
JP2019514146A (ja) 2016-04-04 2019-05-30 フォーミュルス ブラック コーポレーション 高速システム状態クローニング
CN106022917A (zh) 2016-05-08 2016-10-12 杭州复杂美科技有限公司 区块链撮合交易所方案
TW201810989A (zh) 2016-05-18 2018-03-16 納格維遜股份有限公司 用以保護密碼指數的方法及系統
US9646029B1 (en) 2016-06-02 2017-05-09 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US10396991B2 (en) 2016-06-30 2019-08-27 Microsoft Technology Licensing, Llc Controlling verification of key-value stores
WO2018006072A1 (en) 2016-06-30 2018-01-04 Clause, Inc. Systems and method for forming, storing, managing,and executing contracts
US10956400B2 (en) 2016-07-15 2021-03-23 Sap Se Query processing using primary data versioning and secondary data
US10367637B2 (en) 2016-07-22 2019-07-30 Qualcomm Incorporated Modular exponentiation with transparent side channel attack countermeasures
US20180101777A1 (en) 2016-10-12 2018-04-12 Anuthep Benja-Athon EM Oracle
PT3539026T (pt) 2016-11-10 2022-03-08 Swirlds Inc Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas
US11222006B2 (en) 2016-12-19 2022-01-11 Swirlds, Inc. Methods and apparatus for a distributed database that enables deletion of events
EP3340084A1 (en) 2016-12-22 2018-06-27 Dassault Systèmes Replica selection
CN110445619B (zh) 2017-03-30 2020-10-16 腾讯科技(深圳)有限公司 区块链系统、消息处理方法及存储介质
KR102348418B1 (ko) 2017-07-11 2022-01-07 스월즈, 인크. 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치
SG11202002308RA (en) 2017-11-01 2020-04-29 Swirlds Inc Methods and apparatus for efficiently implementing a fast-copyable database
WO2019226099A1 (en) 2018-05-23 2019-11-28 Haj Enterprise Ab A system and a method for achieving consensus between multiple parties on an event
CA3104911A1 (en) 2018-07-09 2020-01-16 Prescient Innovations Inc. Media attribution systems and methods
US11334439B2 (en) 2018-08-29 2022-05-17 International Business Machines Corporation Checkpointing for increasing efficiency of a blockchain
CN113711202A (zh) 2019-05-22 2021-11-26 斯沃尔德斯股份有限公司 用于在分布式数据库中实现状态证明和分类帐标识符的方法和装置
CN116615722A (zh) 2020-10-06 2023-08-18 海德拉哈希图有限责任公司 用于网络内分布式数据库的方法和装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090150566A1 (en) * 2007-12-07 2009-06-11 Microsoft Corporation Virtually synchronous paxos
JP2010146103A (ja) * 2008-12-16 2010-07-01 Nec Corp 補償処理手順方式選択装置、方法、プログラム及びそれを記録した記録媒体、並びにワークフローシステム
JP2015526832A (ja) * 2012-12-03 2015-09-10 ヴイエムウェア インコーポレイテッドVMware,Inc. 分散キーバリューストア
US20140337393A1 (en) * 2013-05-13 2014-11-13 Amazon Technologies, Inc. Transaction ordering
WO2015111152A1 (ja) * 2014-01-22 2015-07-30 株式会社日立製作所 データベース管理システム及び方法
US20150277969A1 (en) * 2014-03-31 2015-10-01 Amazon Technologies, Inc. Atomic writes for multiple-extent operations
WO2016143095A1 (ja) * 2015-03-11 2016-09-15 株式会社日立製作所 計算機システム及びトランザクション処理の管理方法
US9390154B1 (en) * 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network

Also Published As

Publication number Publication date
RU2019118333A3 (ja) 2020-12-14
JP7211943B2 (ja) 2023-01-24
KR102454779B1 (ko) 2022-10-13
US11222006B2 (en) 2022-01-11
KR20210122902A (ko) 2021-10-12
AU2017382161B2 (en) 2022-07-07
WO2018118930A1 (en) 2018-06-28
CN110140116A (zh) 2019-08-16
RU2754189C2 (ru) 2021-08-30
RU2021123584A (ru) 2021-09-10
AU2017382161A1 (en) 2019-05-30
US20220129438A1 (en) 2022-04-28
CN116820695A (zh) 2023-09-29
CA3044071A1 (en) 2018-06-28
CN110140116B (zh) 2023-08-11
US20180173747A1 (en) 2018-06-21
RU2019118333A (ru) 2020-12-14
US11657036B2 (en) 2023-05-23
EP3555757A4 (en) 2020-06-17
EP3555757A1 (en) 2019-10-23
KR102433285B1 (ko) 2022-08-16
KR20190097225A (ko) 2019-08-20

Similar Documents

Publication Publication Date Title
JP7211943B2 (ja) イベントの削除を可能にする分散データベースのための方法および装置
US11232081B2 (en) Methods and apparatus for a distributed database within a network
US11797502B2 (en) Methods and apparatus for a distributed database within a network
JP7184959B2 (ja) ネットワーク内の分散データベースのための方法及び装置
AU2017357770B2 (en) Methods and apparatus for a distributed database including anonymous entries
US20240004869A1 (en) Methods and apparatus for a distributed database within a network
US20240111782A1 (en) Methods and apparatus for a distributed database within a network
RU2776826C2 (ru) Способы и устройство для распределенной базы данных, которая позволяет удалять события

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200624

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210616

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210802

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20211102

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211117

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20220418

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220818

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20220818

C11 Written invitation by the commissioner to file amendments

Free format text: JAPANESE INTERMEDIATE CODE: C11

Effective date: 20220902

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20221013

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20221014

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20221215

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230112

R150 Certificate of patent or registration of utility model

Ref document number: 7211943

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350