JP2023544422A - Method and apparatus for distributed database in a network - Google Patents

Method and apparatus for distributed database in a network Download PDF

Info

Publication number
JP2023544422A
JP2023544422A JP2023521031A JP2023521031A JP2023544422A JP 2023544422 A JP2023544422 A JP 2023544422A JP 2023521031 A JP2023521031 A JP 2023521031A JP 2023521031 A JP2023521031 A JP 2023521031A JP 2023544422 A JP2023544422 A JP 2023544422A
Authority
JP
Japan
Prior art keywords
event
events
round
address book
distributed database
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.)
Pending
Application number
JP2023521031A
Other languages
Japanese (ja)
Inventor
シー.,サード ベアード,リーモン
Original Assignee
ヘデラ ハッシュグラフ,エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ヘデラ ハッシュグラフ,エルエルシー filed Critical ヘデラ ハッシュグラフ,エルエルシー
Publication of JP2023544422A publication Critical patent/JP2023544422A/en
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/275Synchronous replication
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • 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/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

いくつかの実施形態では、方法は、分散データベースのためのアドレスブックを定義することを含む。アドレスブックは、ネットワークを介して分散データベースを実装する計算デバイスのセットからの各計算デバイスの識別子を含む。方法は、計算デバイスのセットからの計算デバイスから、アドレスブックを更新するためのトランザクションを含むイベントを受信することと、アドレスブックを使用する分散データベースのコンセンサスプロトコルに基づいて、イベントの受信ラウンドを算出することと、を更に含む。方法は、トランザクションに基づいてアドレスブックを更新して、イベントの受信ラウンド又はアドレスブックへの更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義することを更に含む。In some embodiments, a method includes defining an address book for a distributed database. The address book includes an identifier for each computing device from a set of computing devices that implement a distributed database over the network. The method includes receiving an event containing a transaction for updating an address book from a set of computing devices, and calculating a reception round of events based on a distributed database consensus protocol using the address book. It further includes: The method further includes updating the address book based on the transaction to define an updated address book after a predetermined number of rounds of at least one of receiving rounds of events or updates to the address book. .

Description

(関連出願の相互参照)
本出願は、2020年10月6日に出願された、「Methods and Apparatus for a Distributed Database within a Network」と題される米国仮特許出願第63/088,298号の優先権及び利益を主張し、その全体が参照により本明細書に組み込まれる。
(Cross reference to related applications)
This application claims priority to and benefits from U.S. Provisional Patent Application No. 63/088,298, filed October 6, 2020, entitled "Methods and Apparatus for a Distributed Database with a Network." , incorporated herein by reference in its entirety.

本明細書に説明される実施形態は、概してデータベースシステムに関し、より詳細には、ネットワーク内の複数のデバイスにわたってデータベースシステムを実装するための方法及び装置に関する。 TECHNICAL FIELD Embodiments described herein relate generally to database systems and, more particularly, to methods and apparatus for implementing database systems across multiple devices in a network.

一部の既知の分散データベースシステムは、分散データベースシステム内の値に対するコンセンサスを達成しようと試みる(例えば、トランザクションが発生する順序に関して)。例えば、オンラインマルチプレーヤゲームは、ユーザがゲームをプレイするためにアクセスすることができる、多くのコンピュータサーバを有する可能性がある。2人のユーザがゲーム内の特定のアイテムを同時にピックアップしようと試みる場合、分散データベースシステム内のサーバが最終的に、2人のユーザのうちのどちらが最初にアイテムをピックアップしたかについての合意に達することが重要となる。 Some known distributed database systems attempt to achieve consensus on values within the distributed database system (eg, regarding the order in which transactions occur). For example, an online multiplayer game may have many computer servers that users can access to play the game. If two users attempt to pick up a particular item in the game at the same time, the servers in the distributed database system will eventually reach a consensus as to which of the two users picked up the item first. That is important.

そのような分散コンセンサスは、Paxosアルゴリズム又はその変形などの、方法及び/又はプロセスによって扱うことができる。そのような方法及び/又はプロセスの下では、データベースシステムの1つのサーバが「リーダ」として設定され、リーダがイベントの順序を決定する。(例えば、マルチプレーヤゲーム内の)イベントは、リーダに転送され、リーダがイベントの順序付けを選択し、かつリーダがその順序付けをデータベースシステムの他のサーバにブロードキャストする。 Such distributed consensus can be handled by methods and/or processes, such as the Paxos algorithm or variations thereof. Under such methods and/or processes, one server of the database system is configured as a "leader," and the leader determines the order of events. Events (eg, in a multiplayer game) are forwarded to a reader, which selects an ordering of the events, and which broadcasts the ordering to other servers in the database system.

ただし、そのような既知のアプローチは、データベースシステムのユーザ(例えば、ゲームのプレーヤ)によって信頼される当事者(例えば、中央管理サーバ)によって運用されるサーバを使用する。したがって、リーダ又は信頼できる第三者がデータベースシステムを操作する必要のない分散データベースシステムのための、方法及び装置が必要とされている。 However, such known approaches use a server operated by a party (eg, a central management server) that is trusted by the users of the database system (eg, the players of the game). Accordingly, there is a need for a method and apparatus for a distributed database system that does not require a leader or trusted third party to operate the database system.

いくつかの実施形態では、方法は、分散データベースのためのアドレスブックを定義することを含む。アドレスブックは、ネットワークを介して分散データベースを実装する計算デバイスのセットからの各計算デバイスの識別子を含む。方法は、計算デバイスのセットからの計算デバイスから、アドレスブックを更新するためのトランザクションを含むイベントを受信することと、アドレスブックを使用する分散データベースのコンセンサスプロトコルに基づいて、イベントの受信ラウンドを算出することと、を更に含む。方法は、トランザクションに基づいてアドレスブックを更新して、イベントの受信ラウンド又はアドレスブックへの更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義することを更に含む。 In some embodiments, a method includes defining an address book for a distributed database. The address book includes an identifier for each computing device from a set of computing devices that implement a distributed database over the network. The method includes receiving an event containing a transaction for updating an address book from a set of computing devices, and calculating a reception round of events based on a distributed database consensus protocol using the address book. It further includes: The method further includes updating the address book based on the transaction to define an updated address book after a predetermined number of rounds of at least one of receiving rounds of events or updates to the address book. .

一実施形態による、分散データベースシステムを例解する高レベルのブロック図である。1 is a high-level block diagram illustrating a distributed database system, according to one embodiment. FIG. 一実施形態による、分散データベースシステムの計算デバイスを例解するブロック図である。1 is a block diagram illustrating a computing device of a distributed database system, according to one embodiment. FIG. 一実施形態による、ハッシュグラフの例を例解する。1 illustrates an example hash graph, according to one embodiment. 一実施形態による、ハッシュグラフの例を例解する。1 illustrates an example hash graph, according to one embodiment. 一実施形態による、ハッシュグラフの例を例解する。1 illustrates an example hash graph, according to one embodiment. 一実施形態による、ハッシュグラフの例を例解する。1 illustrates an example hash graph, according to one embodiment. 一実施形態による、第1の計算デバイスと第2の計算デバイスとの間の通信フローを例解するフロー図である。FIG. 2 is a flow diagram illustrating a communication flow between a first computing device and a second computing device, according to one embodiment. 一実施形態による、ハッシュグラフの例である。2 is an example hash graph, according to one embodiment. 一実施形態による、ハッシュグラフの例である。2 is an example hash graph, according to one embodiment. 一実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。1 illustrates an example consensus scheme for use with hash graphs, according to one embodiment. 一実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。1 illustrates an example consensus scheme for use with hash graphs, according to one embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。3 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。3 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 別の実施形態による、ハッシュグラフとともに使用するための例示的なコンセンサス方式を例解する。2 illustrates an example consensus scheme for use with hash graphs, according to another embodiment. 一実施形態による、分散データベースシステムに関連付けられたアドレスブックを例解する。1 illustrates an address book associated with a distributed database system, according to one embodiment. 一実施形態による、アドレスブックを更新する方法を例解するフローチャートである。3 is a flowchart illustrating a method of updating an address book, according to one embodiment. 一実施形態による、計算デバイスが分散データベースに接続及び/又は加入する方法を例解するフローチャートである。2 is a flowchart illustrating a method for a computing device to connect to and/or subscribe to a distributed database, according to one embodiment.

いくつかの実施形態では、方法は、分散データベースのためのアドレスブックを定義することを含む。アドレスブックは、ネットワークを介して分散データベースを実装する計算デバイスのセットからの各計算デバイスの識別子を含む。方法は、計算デバイスのセットからの計算デバイスから、アドレスブックを更新するためのトランザクションを含むイベントを受信することと、アドレスブックを使用する分散データベースのコンセンサスプロトコルに基づいて、イベントの受信ラウンドを算出することと、を更に含む。方法は、トランザクションに基づいてアドレスブックを更新して、イベントの受信ラウンド又はアドレスブックへの更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義することを更に含む。 In some embodiments, a method includes defining an address book for a distributed database. The address book includes an identifier for each computing device from a set of computing devices that implement a distributed database over the network. The method includes receiving an event containing a transaction for updating an address book from a set of computing devices, and calculating a reception round of events based on a distributed database consensus protocol using the address book. It further includes: The method further includes updating the address book based on the transaction to define an updated address book after a predetermined number of rounds of at least one of receiving rounds of events or updates to the address book. .

いくつかの実施形態では、装置は、計算デバイスのセットに動作可能に結合されたネットワークを介して、計算デバイスのセットによって実装される分散データベースに関連付けられた、計算デバイスのメモリと、該メモリに動作可能に結合されたプロセッサと、を含む。プロセッサは、分散データベースのためのアドレスブックを定義するように構成されている。アドレスブックは、分散データベースを実装する計算デバイスのセットからの各計算デバイスの識別子を含む。プロセッサは、計算デバイスのセットからの計算デバイスから、アドレスブックを更新するためのトランザクションを含むイベントを受信し、イベントのグループからの各イベントについての属性(例えば、ラウンド番号又は作成されたラウンド)を算出するように構成されている。イベントは、イベントのグループに含まれる。プロセッサは、アドレスブックを使用する分散データベースのコンセンサスプロトコルに基づいて、イベントの受信ラウンドを算出するように構成されている。受信ラウンドは、イベントの子孫であるイベントのセットからの閾値イベント数に基づくことができる。プロセッサは、トランザクションに基づいてアドレスブックを更新して、イベントの受信ラウンド又はアドレスブックへの以前の更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義するように更に構成されている。プロセッサは、イベントのグループからの各イベントがイベントのセットからの子孫イベントを有しないときに、更新されたアドレスブックを使用して、そのイベントについての属性を再算出するように構成されている。 In some embodiments, the apparatus includes a memory of the computing device associated with a distributed database implemented by the set of computing devices via a network operably coupled to the set of computing devices; a processor operably coupled thereto. The processor is configured to define an address book for the distributed database. The address book includes an identifier for each computing device from the set of computing devices implementing the distributed database. The processor receives events, including a transaction to update an address book, from a computing device from the set of computing devices, and determines attributes (e.g., round number or created round) for each event from the group of events. is configured to calculate. Events are included in groups of events. The processor is configured to calculate a reception round of the event based on a distributed database consensus protocol using an address book. The reception round can be based on a threshold number of events from a set of events that are descendants of the event. The processor updates the address book based on the transaction to define an updated address book after a predetermined number of rounds of at least one of a round of receiving events or a previous update to the address book. further configured. The processor is configured to recalculate attributes for each event from the group of events using the updated address book when the event has no descendant events from the set of events.

いくつかの実施形態では、非一時的プロセッサ可読媒体は、プロセッサによって実行されるべき命令を表すコードを記憶する。コードは、プロセッサに、ネットワークを介して、分散データベースを実装する計算デバイスのセットに、かつ分散データベースを実装するノードとして、接続させるためのコードを含む。コードは、プロセッサに、計算デバイスのセットからの計算デバイスから、コンセンサスプロトコルの完了したラウンドに関連付けられた分散データベースの状態を受信させるためのコードを更に含む。完了したラウンドに関連付けられたイベントのコアセットの指標を、イベントのコアセットからの各イベントのラウンド識別子とともに含む、状態。コードは、プロセッサに、計算デバイスのセットから、状態に関連付けられたイベントのセットを受信させ、イベントのコアセットと、イベントのコアセットからの各イベントのラウンド識別子と、に基づいて、イベントのセットからの各イベントについての属性のセットを算出させるためのコードを更に含む。コードは、プロセッサに、イベントのセットと、イベントについての属性のセットと、に基づいて、有向非巡回グラフ(directed acyclic graph、DAG)を構築させ、該DAGを使用して、コンセンサスプロトコルの次のラウンドに関連付けられたイベントの順序を算出させるためのコードを含む。 In some embodiments, a non-transitory processor-readable medium stores code representing instructions to be executed by a processor. The code includes code for causing the processor to connect through a network to a set of computing devices implementing a distributed database and as a node implementing a distributed database. The code further includes code for causing the processor to receive a state of a distributed database associated with a completed round of the consensus protocol from a computing device from the set of computing devices. A state that contains an indicator of a core set of events associated with completed rounds, along with a round identifier for each event from the core set of events. The code causes the processor to receive a set of events associated with a state from the set of computing devices, and the set of events based on a core set of events and a round identifier for each event from the core set of events. Further includes code for calculating a set of attributes for each event from. The code causes the processor to construct a directed acyclic graph (DAG) based on the set of events and the set of attributes about the events, and uses the DAG to Contains code for computing the order of events associated with a round.

いくつかの実施形態では、装置は、第1の計算デバイスにおける分散データベースのインスタンスを含み、この第1の計算デバイスは、計算デバイスのセットに動作可能に結合されたネットワークを介して、分散データベースを実装する計算デバイスのセット内に含まれるように構成されている。装置はまた、分散データベースのインスタンスを記憶するメモリに動作可能に結合されたプロセッサも含む。プロセッサは、第1の時間に、イベントの第1のセットにリンクされた第1のイベントを定義するように構成されている。プロセッサは、第1の時間後の第2の時間に、計算デバイスのセットからの第2の計算デバイスから、(1)第2の計算デバイスによって定義され、かつ(2)イベントの第2のセットにリンクされた、第2のイベントを表す信号を受信するように構成されている。プロセッサは、少なくともプロトコルの結果に基づいて、イベントの第3のセットに関連付けられた順序を識別するように構成される。イベントの第3のセットからの各イベントは、イベントの第1のセット、又はイベントの第2のセット、のうちの少なくとも1つからのものである。プロセッサは、イベントの第3のセットに関連付けられた順序を、分散データベースのインスタンスに記憶するように構成されている。 In some embodiments, the apparatus includes an instance of a distributed database on a first computing device, the first computing device running the distributed database over a network operably coupled to the set of computing devices. configured to be included within a set of computing devices that implement it. The apparatus also includes a processor operably coupled to memory that stores an instance of the distributed database. The processor is configured to define, at a first time, a first event linked to the first set of events. The processor, at a second time after the first time, from the second computing device from the set of computing devices (1) defined by the second computing device, and (2) a second set of events. The device is configured to receive a signal representative of a second event linked to the second event. The processor is configured to identify an order associated with the third set of events based at least on the outcome of the protocol. Each event from the third set of events is from at least one of the first set of events or the second set of events. The processor is configured to store an order associated with the third set of events in the instance of the distributed database.

いくつかの場合、イベントの第3のセットからの各イベントは、属性のセット(例えば、シーケンス番号、世代番号、ラウンド番号、受信ラウンド数、及び/又はタイムスタンプなど)に関連付けられている。プロトコルの結果は、イベントの第3のセットからの各イベントについての属性のセットからの各属性に対する値を含むことができる。属性のセットからの第1の属性に対する値は、第1の数値を含むことができ、属性のセットからの第2の属性に対する値は、第1の数値に関連付けられたバイナリ値を含むことができる。イベントの第3のセットからのイベントに対する第2の属性に対するバイナリ値(例えば、ラウンドインクリメント値)は、そのイベントと、そのイベントにリンクされたイベントの第4のセットとの間の関係が、基準(例えば、そのイベントによって強く識別されるイベントの数)を満たすかどうかに基づくことができる。イベントの第4のセットからの各イベントは、(1)イベントの第3のセットからのイベントの先祖であり、かつ(2)イベントの第4のセットからの残りのイベントとして、第1の共通属性(例えば、共通ラウンド番号、ラウンドRの第1のイベントであるという指標など)に関連付けられている。第1の共通属性は、計算デバイスのセットからの各計算デバイスによって定義されたイベントが、第1の特定の値(例えば、ラウンドRの第1のイベントであるという指標など)に関連付けられる、第1の/初期のインスタンスを示すことができる。 In some cases, each event from the third set of events is associated with a set of attributes (eg, sequence number, generation number, round number, received round number, and/or timestamp, etc.). The results of the protocol may include a value for each attribute from the set of attributes for each event from the third set of events. A value for a first attribute from the set of attributes can include a first numeric value, and a value for a second attribute from the set of attributes can include a binary value associated with the first numeric value. can. A binary value (e.g., a round increment value) for the second attribute for an event from the third set of events indicates that the relationship between the event and the fourth set of events linked to the event is (e.g., the number of events that are strongly identified by that event). Each event from the fourth set of events is (1) an ancestor of an event from the third set of events, and (2) as the remaining events from the fourth set of events, the first common Associated with attributes (eg, common round number, indicator that it is the first event of round R, etc.). The first common attribute is a first common attribute in which the event defined by each computing device from the set of computing devices is associated with a first specific value (e.g., an indicator of being the first event of round R). 1/initial instance can be indicated.

属性のセットからの第3の属性の値(例えば、受信ラウンド数)は、イベントと、イベントにリンクされた、イベントの第5のセットとの間の関係に基づく第2の数値を含むことができる。イベントの第5のセットからの各イベントは、イベントの子孫であり、イベントの第5のセットからの残りのイベントとして、第2の共通属性(例えば、有名である)に関連付けられる。第2の共通属性は、(1)計算デバイスのセットからの各計算デバイスによって定義される第2のイベントが、第1の特定の値とは異なる第2の特定の値に関連付けられる第1のインスタンスを示す第3の共通属性(例えば、ラウンドRの第1のイベント又はウィットネスである)、及び(2)指標のセットに基づく結果に関連付けられ得る。指標のセットからの各指標は、イベントの第6のセットからのイベントに関連付けることができる。イベントの第6のセットからの各イベントは、第1の/初期のインスタンスを示す第4の共通属性に関連付けることができ、計算デバイスのセットからの各計算デバイスによって定義される第3のイベントは、第1の特定の値及び第2の特定の値とは異なる、第3の特定の値に関連付けられる。いくつかの場合、第1の特定の値は第1の整数(例えば、第1のラウンド番号R)であり、第2の特定の値は第1の整数よりも大きい第2の整数(例えば、第2のラウンド番号R+n)であり、第3の特定の値は第2の整数よりも大きい第3の整数(例えば、第3のラウンド番号R+n+m)である。 The value of a third attribute from the set of attributes (e.g., number of rounds received) may include a second numerical value based on a relationship between the event and a fifth set of events linked to the event. can. Each event from the fifth set of events is a descendant of the event and is associated with the second common attribute (eg, famous) as the remaining events from the fifth set of events. A second common attribute includes: (1) a first event in which a second event defined by each computing device from the set of computing devices is associated with a second specific value that is different from the first specific value; (2) a third common attribute indicating the instance (e.g. being the first event or witness of round R); and (2) may be associated with an outcome based on a set of indicators. Each indicator from the set of indicators can be associated with an event from the sixth set of events. Each event from the sixth set of events may be associated with a fourth common attribute indicating a first/initial instance, and a third event defined by each computing device from the set of computing devices may be associated with a fourth common attribute indicating a first/initial instance. , is associated with a third specific value that is different from the first specific value and the second specific value. In some cases, the first particular value is a first integer (e.g., first round number R) and the second particular value is a second integer greater than the first integer (e.g., a second round number R+n), and the third specific value is a third integer greater than the second integer (eg, a third round number R+n+m).

本明細書で使用される場合、モジュールは、例えば、特定の機能を実施することに関連付けられた、動作可能に結合された電気構成要素の任意のアセンブリ及び/又はセットとすることができ、例えば、メモリ、プロセッサ、電気トレース、光コネクタ、(ハードウェアで実行される)ソフトウェアなどを含むことができる。 As used herein, a module can be, for example, any assembly and/or set of operably coupled electrical components associated with performing a particular function, e.g. , memory, processors, electrical traces, optical connectors, software (executed in hardware), etc.

本明細書で使用される場合、「a」、「an」、及び「the」という単数形は、文脈が明確にそうでないと指示しない限り、複数の指示対象を含む。したがって、例えば、「モジュール」という用語は、単一のモジュール又はモジュールの組み合わせを意味することが意図される。例えば、「ネットワーク」は、単一のネットワーク又はネットワークの組み合わせを意味することが意図される。 As used herein, the singular forms "a," "an," and "the" include plural referents unless the context clearly dictates otherwise. Thus, for example, the term "module" is intended to mean a single module or a combination of modules. For example, "network" is intended to mean a single network or a combination of networks.

図1は、一実施形態による、分散データベースシステム100を例解する高レベルのブロック図である。図1は、4つの計算デバイス(計算デバイス110、計算デバイス120、計算デバイス130、及び計算デバイス140)にわたって実装された分散データベース100を例解するが、分散データベース100が、図1には示されていない計算デバイスを含む任意の数の計算デバイスのセットを使用することができることを理解されたい。ネットワーク105は、有線ネットワーク及び/又は無線ネットワークとして実装され、かつ計算デバイス110、120、130、140を動作可能に結合するために使用される、任意のタイプのネットワーク(例えば、ローカルエリアネットワーク(local area network、LAN)、広域ネットワーク(wide area network、WAN)、仮想ネットワーク、電気通信ネットワーク)であることができる。本明細書で更に詳細に説明されるように、いくつかの実施形態では、例えば、計算デバイスは、インターネットサービスプロバイダ(Internet Service Provider、ISP)及びインターネット(例えば、ネットワーク105)を介して互いに接続されたパーソナルコンピュータである。いくつかの実施形態では、ネットワーク105を介して、計算デバイス110、120、130、140の任意の2つの間で接続を定義することができる。図1に示されるように、例えば、計算デバイス110と、計算デバイス120、計算デバイス130、又は計算デバイス140のうちのいずれか1つとの間で接続を定義することができる。 FIG. 1 is a high-level block diagram illustrating a distributed database system 100, according to one embodiment. Although FIG. 1 illustrates a distributed database 100 implemented across four computing devices (computing device 110, computing device 120, computing device 130, and computing device 140), distributed database 100 is not shown in FIG. It is to be understood that any number of sets of computing devices may be used, including those that are not. Network 105 may be implemented as a wired network and/or a wireless network and may be any type of network (e.g., a local network (LAN), wide area network (WAN), virtual network, telecommunications network). As described in further detail herein, in some embodiments, for example, the computing devices are connected to each other via an Internet Service Provider (ISP) and the Internet (e.g., network 105). It is a personal computer. In some embodiments, a connection may be defined between any two of computing devices 110 , 120 , 130 , 140 via network 105 . As shown in FIG. 1, for example, a connection may be defined between computing device 110 and any one of computing device 120, computing device 130, or computing device 140.

いくつかの実施形態では、計算デバイス110、120、130、140は、中間ネットワーク及び/又は代替ネットワーク(図1には図示せず)を介して、互いに通信(例えば、互いにデータを送信、及び/又は互いからデータを受信)し、かつネットワークと通信することができる。そのような中間ネットワーク及び/又は代替ネットワークは、ネットワーク105と同じタイプ及び/又は異なるタイプのネットワークであることができる。 In some embodiments, computing devices 110, 120, 130, 140 communicate with each other (e.g., send data to each other and/or or each other) and communicate with a network. Such intermediate networks and/or alternative networks may be the same type and/or different types of networks as network 105.

各計算デバイス110、120、130、140は、他の計算デバイスのうちの1つ以上にデータを送信及び/又は他の計算デバイスのうちの1つ以上からデータを受信するためにネットワーク105上でデータを送信するように構成された、任意のタイプのデバイスとすることができる。図1に、計算デバイスの例を示す。計算デバイス110は、メモリ112、プロセッサ111、及び出力デバイス113を含む。メモリ112は、例えば、ランダムアクセスメモリ(random access memory、RAM)、メモリバッファ、ハードドライブ、データベース、消去可能プログラマブル読み出し専用メモリ(erasable programmable read-only memory、EPROM)、電気的消去可能読み出し専用メモリ(electrically erasable read-only memory、EEPROM)、読み出し専用メモリ(read-only memory、ROM)などであり得る。いくつかの実施形態では、計算デバイス110のメモリ112は、分散データベースのインスタンス(例えば、分散データベースインスタンス114)に関連付けられたデータを含む。いくつかの実施形態では、メモリ112は、プロセッサに、モジュール、プロセス、及び/又は機能を実行させる命令を記憶し、これらのモジュール、プロセス、及び/又は機能は、同期イベントの記録、並びに/又は他の計算デバイスとの前の同期イベントの記録、並びに/又は同期イベントの順序、並びに/又はイベント内のトランザクションの順序、同期イベント及び/若しくはトランザクションの順序を識別することに関連付けられたパラメータ、並びに/又はパラメータの値(例えば、トランザクションを定量化するデータベースフィールド、イベントが発生する順序を定量化するデータベースフィールド、及び/又は値がデータベースに記憶され得る任意の他の好適なフィールド)を、分散データベースの別のインスタンス(例えば、計算デバイス120における分散データベースインスタンス124)に送信及び/又はそれから受信することに関連付けられている。 Each computing device 110, 120, 130, 140 is configured to transmit data to and/or receive data from one or more other computing devices over the network 105. It can be any type of device configured to transmit data. FIG. 1 shows an example of a computing device. Computing device 110 includes memory 112, processor 111, and output device 113. Memory 112 may include, for example, random access memory (RAM), memory buffers, hard drives, databases, erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EPROM), and electrically erasable programmable read-only memory (EPROM). It may be electrically erasable read-only memory (EEPROM), read-only memory (ROM), etc. In some embodiments, memory 112 of computing device 110 includes data associated with an instance of a distributed database (eg, distributed database instance 114). In some embodiments, memory 112 stores instructions that cause the processor to execute modules, processes, and/or functions that may include recording synchronization events and/or recording of previous synchronization events with other computing devices, and/or the order of synchronization events and/or the order of transactions within the events, parameters associated with identifying the synchronization events and/or the order of transactions; / or the values of parameters (e.g., database fields quantifying transactions, database fields quantifying the order in which events occur, and/or any other suitable field whose values may be stored in a database) in a distributed database. (e.g., distributed database instance 124 at computing device 120).

分散データベースインスタンス114は、例えば、データを操作するように構成することができ、データの記憶、修正、及び/又は削除を含む。いくつかの実施形態では、分散データベースインスタンス114は、アレイのセット、データ構造のセット、リレーショナルデータベース、オブジェクトデータベース、ポストリレーショナルデータベース、及び/又は任意の他の好適なタイプのデータベース若しくはストレージであり得る。例えば、分散データベースインスタンス114は、任意の特定の機能及び/又は産業に関連するデータを記憶することができる。例えば、分散データベースインスタンス114は、特定の金融商品の所有権の履歴に関連する値及び/又は値のベクトルを含む、(例えば、計算デバイス110のユーザの)金融トランザクションを記憶することができる。一般に、ベクトルは、パラメータの値の任意のセットとすることができ、パラメータは、異なる値をとることができる任意のデータオブジェクト及び/又はデータベースフィールドとすることができる。したがって、分散データベースインスタンス114は、いくつかのパラメータ及び/又はフィールドを有することができ、その各々は、値のベクトルに関連付けられる。値のベクトルは、そのデータベースインスタンス114内のパラメータ及び/又はフィールドの実際の値を決定するために使用される。いくつかの場合、分散データベースインスタンス114は、同期イベントの記録、他の計算デバイスとの前の同期イベントの記録、同期イベントの順序、イベント内のトランザクションの順序、同期イベント及び/又はトランザクションの順序を識別することに関連付けられたパラメータ及び/又は値(例えば、本明細書に説明されるコンセンサス方式を使用して順序を算出する際に使用される)、パラメータの値(例えば、トランザクションを定量化するデータベースフィールド、イベントが発生する順序を定量化するデータベースフィールド、及び/又は値をデータベースに記憶することができる任意の他の好適なフィールド)を記憶する。 Distributed database instances 114 may be configured to manipulate data, including storing, modifying, and/or deleting data, for example. In some embodiments, distributed database instance 114 may be a set of arrays, a set of data structures, a relational database, an object database, a post-relational database, and/or any other suitable type of database or storage. For example, distributed database instance 114 may store data related to any particular function and/or industry. For example, distributed database instance 114 may store financial transactions (eg, of a user of computing device 110) that include values and/or vectors of values related to the history of ownership of a particular financial instrument. In general, a vector can be any set of values for a parameter, and a parameter can be any data object and/or database field that can take on different values. Accordingly, distributed database instance 114 may have a number of parameters and/or fields, each of which is associated with a vector of values. The vector of values is used to determine the actual value of the parameter and/or field within that database instance 114. In some cases, distributed database instance 114 records synchronization events, records previous synchronization events with other computing devices, orders synchronization events, orders transactions within events, orders synchronization events, and/or transactions. Parameters and/or values associated with identifying (e.g., used in calculating the order using the consensus methods described herein), values of the parameters (e.g., quantifying the transaction) database fields, database fields quantifying the order in which events occur, and/or any other suitable field whose values can be stored in the database).

いくつかの場合、分散データベースインスタンス114はまた、データベース状態変数及び/又は現在の状態を記憶することもできる。現在の状態は、トランザクションの結果に関連付けられた状態、残高、条件及び/又は同様のものであり得る。同様に述べると、状態は、トランザクションによって修正されたデータ構造及び/又は変数を含むことができる。他の場合、現在の状態は、別個のデータベース及び/又はメモリ112の一部分に記憶することができる。更に他の場合、現在の状態は、計算デバイス110とは異なる計算デバイスのメモリに記憶することができる。 In some cases, distributed database instance 114 may also store database state variables and/or current state. The current state may be a state, balance, terms, and/or the like associated with the outcome of a transaction. Similarly stated, state may include data structures and/or variables modified by a transaction. In other cases, the current state may be stored in a separate database and/or part of memory 112. In still other cases, the current state may be stored in a memory of a different computing device than computing device 110.

いくつかの場合、分散データベースインスタンス114はまた、(鍵、値)ペアのセットなどの他のデータ構造を実装するために使用することもできる。分散データベースインスタンス114によって記録されるトランザクションは、例えば、(鍵、値)ペアのセット内の(鍵、値)ペアの追加、削除、又は修正であり得る。 In some cases, distributed database instance 114 may also be used to implement other data structures, such as sets of (key, value) pairs. Transactions recorded by distributed database instance 114 may be, for example, additions, deletions, or modifications of (key, value) pairs within a set of (key, value) pairs.

いくつかの場合、分散データベースシステム100又は分散データベースインスタンス114、124、134、144のうちのいずれかにクエリを行うことができる。例えば、クエリは鍵を含むことができ、分散データベースシステム100又は分散データベースインスタンス114、124、134、144から返される結果は、鍵に関連付けられた値とすることができる。また、いくつかの場合、分散データベースシステム100又は分散データベースインスタンス114、124、134、144のうちのいずれかは、トランザクションを通して修正することもできる。例えば、データベースを修正するトランザクションは、修正トランザクションを認可する当事者によるデジタル署名を含むことができる。 In some cases, queries may be made to distributed database system 100 or any of distributed database instances 114, 124, 134, 144. For example, a query can include a key, and the results returned from distributed database system 100 or distributed database instance 114, 124, 134, 144 can be a value associated with the key. Also, in some cases, distributed database system 100 or any of distributed database instances 114, 124, 134, 144 may be modified through transactions. For example, a transaction that modifies a database may include a digital signature by the party authorizing the modification transaction.

分散データベースシステム100は、例えば、様々なユーザに関連付けられた属性を分散識別情報システムに記憶するなど、多くの目的で使用することができる。例えば、そのようなシステムは、ユーザの識別情報及び/又は識別子を「鍵」として使用し、ユーザに関連付けられた属性のリストを「値」として使用することができる。いくつかの場合、識別情報及び/又は識別子は、そのユーザに知られている対応する秘密鍵を有する暗号公開鍵であり得る。各属性は、例えば、その属性をアサートする権利を有する機関によってデジタル署名され得る。各属性は、例えば、属性を読み出す権利を有する個人又は個人のグループに関連付けられた公開鍵を用いて暗号化することもできる。いくつかの鍵又は値は、鍵又は値を修正及び/又は削除することを認可された当事者の公開鍵のリストを、これらの鍵又は値に添付することもできる。 Distributed database system 100 may be used for many purposes, such as storing attributes associated with various users in a distributed identity system. For example, such a system may use a user's identity and/or identifier as a "key" and a list of attributes associated with the user as a "value." In some cases, the identification information and/or identifier may be a cryptographic public key with a corresponding private key known to the user. Each attribute may be digitally signed, for example, by an authority that has the right to assert that attribute. Each attribute may also be encrypted, for example, using a public key associated with the individual or group of individuals who has the right to read the attribute. Some keys or values may also have attached to them a list of public keys of parties authorized to modify and/or delete the keys or values.

別の例では、分散データベースインスタンス114は、ゲームプレイアイテムの現在のステータス及び所有権などの多人数同時参加型ゲーム(Massively Multiplayer Game、MMG)に関連するデータを記憶することができる。いくつかの場合、分散データベースインスタンス114は、図1に示されるように、計算デバイス110内に実装することができる。他の場合、分散データベースのインスタンスは、計算デバイスによって(例えば、ネットワークを介して)アクセス可能であるが、計算デバイス内には実装されない(図1には図示せず)。 In another example, distributed database instance 114 may store data related to a Massively Multiplayer Game (MMG), such as the current status and ownership of game play items. In some cases, distributed database instance 114 may be implemented within computing device 110, as shown in FIG. In other cases, the instance of the distributed database is accessible (eg, via a network) by the computing device, but is not implemented within the computing device (not shown in FIG. 1).

計算デバイス110のプロセッサ111は、分散データベースインスタンス114を走らせるかつ/又は実行するように構成された、任意の好適な処理デバイスであり得る。例えば、プロセッサ111は、本明細書で更に詳細に説明されるように、計算デバイス120から信号を受信することに応答して分散データベースインスタンス114を更新し、かつ/又は信号を計算デバイス120に送信させるように構成することができる。より具体的には、本明細書で更に詳細に説明されるように、プロセッサ111は、別の計算デバイスからのトランザクションに関連付けられた同期イベント、同期イベントの順序に関連付けられた記録、及び/又は同様のものを受信することに応答して分散データベースインスタンス114を更新するための、モジュール、機能、及び/又はプロセスを実行するように構成することができる。いくつかの実施形態では、プロセッサ111は、分散データベースの別のインスタンス(例えば、計算デバイス120における分散データベースインスタンス124)に記憶されたパラメータの値を受信することに応答して分散データベースインスタンス114を更新するための、かつ/又は計算デバイス110における分散データベースインスタンス114に記憶されたパラメータの値を計算デバイス120に送信させるための、モジュール、機能、及び/又はプロセスを実行するように構成することができる。いくつかの実施形態では、プロセッサ111は、汎用プロセッサ、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、デジタル信号プロセッサ(Digital Signal Processor、DSP)などであり得る。 Processor 111 of computing device 110 may be any suitable processing device configured to run and/or execute distributed database instance 114. For example, processor 111 updates distributed database instance 114 in response to receiving signals from computing device 120 and/or transmits signals to computing device 120, as described in further detail herein. It can be configured to do so. More specifically, processor 111 records synchronization events associated with transactions from another computing device, records associated with the order of synchronization events, and/or as described in further detail herein. Modules, functions, and/or processes may be configured to execute to update the distributed database instance 114 in response to receiving the same. In some embodiments, processor 111 updates distributed database instance 114 in response to receiving a value for a parameter stored at another instance of the distributed database (e.g., distributed database instance 124 at computing device 120). may be configured to execute modules, functions, and/or processes for causing the computing device 120 to transmit values of parameters stored in the distributed database instance 114 at the computing device 110; . In some embodiments, processor 111 is a general purpose processor, a Field Programmable Gate Array (FPGA), an Application Specific Integrated Circuit (ASIC), a Digital Signal Processor (DSP). ) etc.

ディスプレイ113は、液晶ディスプレイ(liquid crystal display、LCD)、陰極線管ディスプレイ(cathode ray tube display、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つは、キーボード、マウス、及び/又は同様のものを含むことができる。 Display 113 may be any suitable display, such as a liquid crystal display (LCD), a cathode ray tube display (CRT), or the like. In other embodiments, any of the computing devices 110, 120, 130, 140 includes another output device instead of or in addition to the display 113, 123, 133, 143. For example, any one of computing devices 110, 120, 130, 140 may include an audio output device (eg, a speaker), a tactile output device, and/or the like. In yet other embodiments, any of the computing devices 110, 120, 130, 140 includes an input device instead of or in addition to the display 113, 123, 133, 143. For example, any one of computing devices 110, 120, 130, 140 may include a keyboard, mouse, and/or the like.

図1では単一の計算デバイス内にあるように示されているが、いくつかの場合、分散データベースを更新するためのモジュール、機能、及び/又はプロセスを実行するように構成されたプロセッサは、その関連付けられた分散データベースとは別個の計算デバイス内にあり得る。そのような場合、例えば、プロセッサは、ネットワークを介して分散データベースインスタンスに動作可能に結合することができる。例えば、プロセッサは、(例えば他の分散データベースインスタンスとの同期の結果として)イベント及び/又はトランザクションの順序を識別するためにコンセンサス方式を実行することができ、かつイベント及び/又はトランザクションの順序を含む信号を、関連する分散データベースインスタンスにネットワークを介して送信することができる。次いで、関連付けられた分散データベースインスタンスは、イベントの順序、トランザクションの順序、及び/又はトランザクションの順序に基づく状態変数を、関連付けられた分散データベースインスタンスに記憶することができる。このように、分散データベースに関連付けられた機能及びストレージを分散させることができる。更に、データベースが、分散データベースシステムに関連付けられたモジュール、機能、及び/又はプロセス(例えば、コンセンサス方式)を実装するプロセッサを有する計算デバイスとは別個の計算デバイス内に実装される場合であっても、プロセッサは、その関連付けられた分散データベースインスタンスにクエリを行い、データベース状態変数及び/又は現在の状態、並びに本明細書に説明される他の好適な動作を、その分散データベースインスタンス内に記憶することができる。他の場合、本明細書に説明される機能及び/又は方法は、任意の数の計算デバイスにわたって(例えば、分散コンピューティング環境及び/又はクラスタ内で)実行することができ、そのような機能及び/又は方法の結果及び/又は値は、任意の好適な計算デバイスにおけるメモリ及び/又はストレージに記憶することができる。 Although shown in FIG. 1 as being within a single computing device, in some cases a processor configured to execute modules, functions, and/or processes for updating a distributed database may include: It may be in a separate computing device from its associated distributed database. In such a case, for example, the processor may be operably coupled to a distributed database instance via a network. For example, the processor may perform a consensus method to identify and include the order of events and/or transactions (e.g., as a result of synchronization with other distributed database instances). Signals can be sent over the network to associated distributed database instances. The associated distributed database instance may then store an order of events, an order of transactions, and/or a state variable based on the order of transactions at the associated distributed database instance. In this way, functionality and storage associated with a distributed database can be distributed. Furthermore, even if the database is implemented in a computing device that is separate from the computing device that has the processor that implements the modules, functions, and/or processes (e.g., consensus schemes) associated with the distributed database system. , the processor queries its associated distributed database instance and stores within its distributed database instance database state variables and/or current state, as well as other suitable operations described herein. Can be done. In other cases, the functions and/or methods described herein can be performed across any number of computing devices (e.g., in a distributed computing environment and/or cluster), and such functions and The results and/or values of the method may be stored in memory and/or storage in any suitable computing device.

計算デバイス120は、プロセッサ121、メモリ122、及びディスプレイ123を有し、これらはそれぞれ、プロセッサ111、メモリ112、及びディスプレイ113と構造的及び/又は機能的に同様であり得る。また、分散データベースインスタンス124は、分散データベースインスタンス114と構造的及び/又は機能的に類似し得る。 Computing device 120 has a processor 121, memory 122, and display 123, which may be structurally and/or functionally similar to processor 111, memory 112, and display 113, respectively. Additionally, distributed database instance 124 may be structurally and/or functionally similar to distributed database instance 114.

計算デバイス130は、プロセッサ131、メモリ132、及びディスプレイ133を有し、これらはそれぞれ、プロセッサ111、メモリ112、及びディスプレイ113と構造的及び/又は機能的に同様であり得る。また、分散データベースインスタンス134は、分散データベースインスタンス114と構造的及び/又は機能的に類似し得る。 Computing device 130 has a processor 131, memory 132, and display 133, which may be structurally and/or functionally similar to processor 111, memory 112, and display 113, respectively. Additionally, distributed database instance 134 may be structurally and/or functionally similar to distributed database instance 114.

計算デバイス140は、プロセッサ141、メモリ142、及びディスプレイ143を有し、これらはそれぞれ、プロセッサ111、メモリ112、及びディスプレイ113と構造的及び/又は機能的に同様であり得る。また、分散データベースインスタンス144は、分散データベースインスタンス114と構造的及び/又は機能的に類似し得る。 Computing device 140 has a processor 141, memory 142, and display 143, which may be structurally and/or functionally similar to processor 111, memory 112, and display 113, respectively. Additionally, distributed database instance 144 may be structurally and/or functionally similar to distributed database instance 114.

計算デバイス110、120、130、140は、互いに類似しているものとして示されているが、分散データベースシステム100の各計算デバイスは、他の計算デバイスとは異なり得る。分散データベースシステム100の各計算デバイス110、120、130、140は、例えば、コンピューティングエンティティ(例えば、デスクトップコンピュータ、ラップトップコンピュータなどのパーソナルコンピューティングデバイス)、携帯電話、携帯情報端末(personal digital assistant、PDA)などのうちのいずれか1つであり得る。例えば、計算デバイス110はデスクトップコンピュータであり得、計算デバイス120はスマートフォンであり得、計算デバイス130はサーバであり得る。 Although computing devices 110, 120, 130, 140 are shown as being similar to each other, each computing device in distributed database system 100 may be different from other computing devices. Each computing device 110, 120, 130, 140 of distributed database system 100 may be, for example, a computing entity (e.g., a personal computing device such as a desktop computer, a laptop computer, etc.), a mobile telephone, a personal digital assistant, PDA), etc. For example, computing device 110 may be a desktop computer, computing device 120 may be a smartphone, and computing device 130 may be a server.

いくつかの実施形態では、計算デバイス110、120、130、140のうちの1つ以上の部分は、ハードウェアベースのモジュール(例えば、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA))及び/又はソフトウェアベースのモジュール(例えば、メモリに記憶された及び/又はプロセッサで実行される、コンピュータコードのモジュール)を含むことができる。いくつかの実施形態では、計算デバイス110、120、130、140に関連付けられた機能(例えば、プロセッサ111、121、131、141に関連付けられた機能)のうちの1つ以上は、1つ以上のモジュール(例えば、図2を参照のこと)に含まれ得る。 In some embodiments, one or more portions of computing devices 110, 120, 130, 140 include hardware-based modules (e.g., digital signal processors (DSPs), field programmable gate arrays (FPGAs)) and and/or software-based modules (e.g., modules of computer code stored in memory and/or executed on a processor). In some embodiments, one or more of the functionality associated with computing device 110, 120, 130, 140 (e.g., functionality associated with processor 111, 121, 131, 141) The module may be included in a module (see, eg, FIG. 2).

計算デバイス(例えば、計算デバイス110、120、130、140)のプロパティ、計算デバイスの数、及びネットワーク105を含む、分散データベースシステム100のプロパティは、任意の数の方法で選択され得る。いくつかの場合、分散データベースシステム100のプロパティは、分散データベースシステム100の管理者によって選択され得る。他の場合、分散データベースシステム100のプロパティは、分散データベースシステム100のユーザによって集合的に選択され得る。 Properties of distributed database system 100, including properties of computing devices (eg, computing devices 110, 120, 130, 140), number of computing devices, and network 105, may be selected in any number of ways. In some cases, properties of distributed database system 100 may be selected by an administrator of distributed database system 100. In other cases, properties of distributed database system 100 may be selected collectively by users of distributed database system 100.

分散データベースシステム100が使用されるため、計算デバイス110、120、130、及び140の間で、リーダは指名されない。具体的には、計算デバイス110、120、130、又は140のいずれも、計算デバイス110、120、130、140の分散データベースインスタンス114、124、134、144に記憶された値間の紛争を解決するためのリーダとして識別及び/又は選択されない。代わりに、イベント同期プロセス、投票プロセス、コンセンサス方式及び/若しくはプロトコル、並びに/又は本明細書に説明される他の方法を使用して、計算デバイス110、120、130、140は、パラメータの値に集合的に収束することができる。 Because a distributed database system 100 is used, no leader is designated between computing devices 110, 120, 130, and 140. Specifically, any of the computing devices 110, 120, 130, or 140 resolves conflicts between values stored in the distributed database instances 114, 124, 134, 144 of the computing devices 110, 120, 130, 140. is not identified and/or selected as a leader for Instead, using event synchronization processes, voting processes, consensus schemes and/or protocols, and/or other methods described herein, the computing device 110, 120, 130, 140 determines the value of the parameter. can collectively converge.

分散データベースシステムにリーダを有しないことにより、分散データベースシステムのセキュリティを増加させる。具体的には、リーダがある状態では、単一の攻撃点及び/又は障害点が存在する。悪意のあるソフトウェアがリーダに感染した場合、かつ/又はリーダの分散データベースインスタンスにおけるパラメータの値が悪意を持って改ざんされた場合、障害及び/又は不正確な値が、他の分散データベースインスタンス全体に伝搬される。しかしながら、リーダのないシステムでは、攻撃及び/又は障害の単一点は存在しない。具体的には、リーダのないシステムの分散データベースインスタンス内のパラメータが値を含む場合、その値は、本明細書で更に詳細に説明されるように、その分散データベースインスタンスがシステム内の他の分散データベースインスタンスと値を交換した後に変化する。追加的に、本明細書に説明される、リーダのない分散データベースシステムは、本明細書で更に詳細に説明されるように、デバイス間で送信されるデータの量を低減しながら収束の速度を増加させる。 Having no leader in a distributed database system increases the security of the distributed database system. Specifically, in the presence of a leader, there is a single point of attack and/or failure. If malicious software infects a reader and/or the value of a parameter in a distributed database instance of a reader is maliciously tampered with, the failure and/or incorrect value will be propagated across other distributed database instances. Propagated. However, in leaderless systems, there is no single point of attack and/or failure. Specifically, if a parameter in a distributed database instance of a leaderless system includes a value, that value is a value that the distributed database instance Changes after exchanging values with the database instance. Additionally, the leaderless distributed database system described herein increases the speed of convergence while reducing the amount of data sent between devices, as described in further detail herein. increase.

図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は、例えば、ネットワークインターフェースコントローラ(network interface controller、NIC)、無線接続、有線ポート、及び/又は同様のものを含むことができ、かつ/又はそれらを可能にすることができる。そのため、通信モジュール210は、(例えば、図1のネットワーク105又はインターネット(図示せず)などのネットワークを介して)計算デバイス200と別のデバイスとの間の通信セッションを確立及び/又は維持することができる。同様に述べると、通信モジュール210は、計算デバイス200が別のデバイスにデータを送信すること、及び/又は別のデバイスからデータを受信することを可能にすることができる。 FIG. 2 illustrates a computing device 200 of a distributed database system (eg, distributed database system 100), according to one embodiment. In some embodiments, computing device 200 may be similar to computing devices 110, 120, 130, 140 illustrated and described with respect to FIG. Computing device 200 includes a processor 210 and memory 220. Processor 210 and memory 220 are operably coupled to each other. In some embodiments, processor 210 and memory 220 may be similar to processor 111 and memory 112, respectively, described in detail with respect to FIG. As shown in FIG. 2, processor 210 includes a database convergence module 211 and a communication module 210, and memory 220 includes a distributed database instance 221. Communication module 212 enables computing device 200 to communicate with (eg, send data to and/or receive data from) other computing devices. In some embodiments, communication module 212 (not shown in FIG. 1) enables computing device 110 to communicate with computing devices 120, 130, 140. Communication module 210 may include and/or enable, for example, a network interface controller (NIC), wireless connections, wired ports, and/or the like. As such, communication module 210 may establish and/or maintain a communication session between computing device 200 and another device (e.g., via a network such as network 105 of FIG. 1 or the Internet (not shown)). Can be done. Similarly stated, communication module 210 may enable computing device 200 to transmit data to and/or receive data from another device.

いくつかの場合、データベース収束モジュール211は、イベント及び/又はトランザクションを他の計算デバイスと交換し、データベース収束モジュール211が受信するイベント及び/又はトランザクションを記憶し、イベント間の参照のパターンによって定義された半順序に基づいて、イベント及び/又はトランザクションの順序付け(例えば、コンセンサス又は全順序)を算出することができる。各イベントは、(そのイベントを先の2つのイベント及びそれらの先祖イベントにリンクする、かつその逆も同様の)先の2つのイベントの識別子(例えば、暗号ハッシュ)、ペイロードデータ(記録されるトランザクションなど)、現在時刻、イベントの作成者がそのイベントが最初に定義された時刻であるとアサートするタイムスタンプ(例えば、日付及びUTC時刻)などの他の情報、及び/又は同様のものを含む記録であり得る。通信している計算デバイスの各々は、「メンバ」又は「ハッシュグラフメンバ」と呼ばれる。いくつかの場合、メンバによって定義された第1のイベントは、別のメンバによって定義された単一のイベントのハッシュのみを含む。そのような場合、メンバは、前の自己ハッシュ(例えば、そのメンバによって以前に定義されたイベントのハッシュ)をまだ有していない。いくつかの場合、分散データベース内の第1のイベントは、(その分散データベースに対して前のイベントが存在しないため)任意の前のイベントのハッシュを含まない。 In some cases, database convergence module 211 exchanges events and/or transactions with other computing devices, stores events and/or transactions that database convergence module 211 receives, and stores events and/or transactions defined by a pattern of references between events. Based on the partial order, an ordering (eg, consensus or total order) of events and/or transactions can be calculated. Each event includes an identifier (e.g., a cryptographic hash) of the two previous events (linking it to the previous two events and their ancestor events, and vice versa), payload data (transactions to be recorded), ), the current time, other information such as a timestamp (e.g., date and UTC time) where the creator of the event asserts that the event was first defined, and/or the like. It can be. Each communicating computing device is called a "member" or "hashgraph member." In some cases, a first event defined by a member only contains a hash of a single event defined by another member. In such a case, the member does not yet have a previous self-hash (eg, a hash of an event previously defined by that member). In some cases, the first event in a distributed database does not include a hash of any previous event (because no previous event exists for that distributed database).

いくつかの実施形態では、先の2つのイベントのそのような暗号ハッシュは、イベントを入力として使用する暗号ハッシュ関数に基づいて定義されるハッシュ値であり得る。具体的には、そのような実施形態では、イベントは、(そのイベントの情報を表す)バイトの特定のシーケンス又はストリングを含む。イベントのハッシュは、そのイベントに対するバイトのシーケンスを入力として使用してハッシュ関数から返される値であり得る。他の実施形態では、イベントに関連付けられた任意の他の好適なデータ(例えば、識別子、シリアル番号、イベントの特定の部分を表すバイトなど)をハッシュ関数への入力として使用して、そのイベントのハッシュを算出することができる。任意の好適なハッシュ関数は、ハッシュを定義するために使用することができる。いくつかの実施形態では、各メンバは、所与のイベントに対して各メンバで同じハッシュが生成されるように、同じハッシュ関数を使用する。次いで、イベントは、イベントを定義及び/又は作成するメンバによってデジタル署名され得る。いくつかの実装形態では、ハッシュ値ではなく、イベントの任意の他の好適な識別子が使用され得る。 In some embodiments, such a cryptographic hash of the previous two events may be a hash value defined based on a cryptographic hash function that uses the events as inputs. Specifically, in such embodiments, an event includes a particular sequence or string of bytes (representing information for the event). A hash of an event may be the value returned from a hash function using the sequence of bytes for that event as input. In other embodiments, any other suitable data associated with an event (e.g., an identifier, serial number, bytes representing a particular portion of the event, etc.) may be used as input to a hash function to A hash can be calculated. Any suitable hash function can be used to define the hash. In some embodiments, each member uses the same hash function such that the same hash is generated on each member for a given event. The event may then be digitally signed by the member defining and/or creating the event. In some implementations, any other suitable identifier of the event may be used rather than a hash value.

いくつかの場合、イベントのセット及びそれらの相互接続は、有向非巡回グラフ(DAG)を形成し得る。いくつかの場合、DAG内の各イベントは、(そのイベントを先のイベント及びそれらの先祖イベントにリンクする、かつ逆もまた同様の)0以上(例えば、2つ)前のイベントを参照し、各参照は、厳密に先のイベントに対するものであるため、ループは存在しない。いくつかの実施形態では、DAGは暗号ハッシュに基づいているため、データ構造は、ハッシュグラフと呼ぶことができる(本明細書では「hashDAG」とも呼ばれる)。他の実施形態では、DAGは、イベントの任意の他の好適な識別子に基づくことができる。ハッシュグラフ又はDAGは、半順序を直接符号化し、これは、YがXのハッシュを含む場合、又はXのハッシュを含むイベントのハッシュをYが含む場合、又は任意の長さのそのような経路について、イベントXがイベントYの前に来ることが既知であることを意味する。ただし、XからYへ、又はYからXへの経路がない場合、半順序は、どのイベントが最初に来たかを定義しない。したがって、データベース収束モジュールは、半順序から、全順序又はコンセンサス順序を算出することができる。これは、計算デバイスが同じ順序を算出するように、計算デバイスによって使用される任意の好適な決定論的関数によって行うことができる。いくつかの実施形態では、各メンバは、各同期後にこの順序を再算出することができ、最終的に、これらの順序は、コンセンサスが出現するように収束し得る。 In some cases, a set of events and their interconnections may form a directed acyclic graph (DAG). In some cases, each event in the DAG references zero or more (e.g., two) previous events (linking the event to previous events and their ancestor events, and vice versa); There are no loops because each reference is strictly to the previous event. In some embodiments, the data structure may be referred to as a hash graph (also referred to herein as a "hashDAG") because a DAG is based on a cryptographic hash. In other embodiments, the DAG may be based on any other suitable identifier of the event. A hash graph or DAG directly encodes a partial order, which means that if Y contains a hash of X, or if Y contains a hash of an event that contains a hash of means that it is known that event X comes before event Y. However, if there is no path from X to Y or Y to X, the partial order does not define which event came first. Therefore, the database convergence module can calculate a total order or a consensus order from a partial order. This can be done by any suitable deterministic function used by the computing device so that the computing device calculates the same order. In some embodiments, each member may recompute this order after each synchronization, and eventually these orders may converge such that a consensus emerges.

コンセンサスアルゴリズム及び/又は方法は、ハッシュグラフ、DAG内のイベントの全順序若しくはコンセンサス順序、及び/又はイベント内に記憶されたトランザクションの順序を決定するために使用することができる。トランザクションの順序は同様に、順序に従ってそれらのトランザクションを実施した結果として、データベースの状態を定義し得る。定義されたデータベースの状態は、データベース状態変数として記憶され得る。いくつかの実施形態では、分散データベースのインスタンス(例えば、分散データベースインスタンス114)は、ハッシュグラフ、及び/又はトランザクション、及び/又はトランザクションの順序、及び/又はイベント、及び/又はイベントの順序、及び/又はトランザクションを実施したことから生じる状態を記憶する。 Consensus algorithms and/or methods can be used to determine the hash graph, the overall or consensus order of events within a DAG, and/or the order of transactions stored within an event. The order of transactions may also define the state of the database as a result of performing those transactions in order. Defined database states may be stored as database state variables. In some embodiments, an instance of a distributed database (e.g., distributed database instance 114) hash graphs, and/or transactions, and/or order of transactions, and/or events, and/or order of events, and/or or store states resulting from performing a transaction.

いくつかの場合、データベース収束モジュールは、以下の関数を使用して、ハッシュグラフ内の半順序から全順序(コンセンサス順序とも呼ばれる)を算出することができる。他の計算デバイスの各々(「メンバ」と呼ばれる)について、データベース収束モジュールは、ハッシュグラフを調べて、イベント(及び/又はそれらのイベントの指標)がそのメンバによって受信された順序を発見することができる。次いで、データベース収束モジュールは、そのメンバが各イベントに数値の「ランク」を割り当てたかのように算出することができ、ランクは、そのメンバが受信した第1のイベントに対して1であり、そのメンバが受信した第2のイベントに対して2であり、以下同様である。データベース収束モジュールは、ハッシュグラフ内の各メンバについてこれを行うことができる。次いで、各イベントについて、データベース収束モジュールは、割り当てられたランクの中央値を算出することができ、それらの中央値によってイベントをソートすることができる。ソートは、2つの同順位のイベントをそれらのハッシュの数値順によってソートすること、又は各メンバのデータベース収束モジュールが同じ方法を使用する他の何らかの方法によるなど、決定論的なやり方で均衡を破ることができる。このソートの結果が全順序である。 In some cases, the database convergence module can calculate the total order (also called consensus order) from the partial order in the hashgraph using the following function: For each of the other computing devices (referred to as a "member"), the database convergence module may examine the hash graph to discover the order in which events (and/or indicators of those events) were received by that member. can. The database convergence module can then calculate as if that member assigned a numerical "rank" to each event, where the rank is 1 for the first event received by that member; is 2 for the second event received, and so on. The database convergence module can do this for each member in the hashgraph. Then, for each event, the database convergence module can calculate the median of the assigned ranks and can sort the events by those medians. Sorting breaks the balance in a deterministic manner, such as by sorting two tied events by the numerical order of their hashes, or by some other method in which each member's database convergence module uses the same method. be able to. The result of this sort is the total order.

図6は、半順序から全順序(又はコンセンサス順序)を決定するための一例のハッシュグラフ640を例解する。ハッシュグラフ640は、2つのイベント(最も下のストライプ模様の円及び最も下のドット模様の円)と、各メンバがそれらのイベントの指標を最初に受信するとき(他のストライプ模様の円及びドット模様の円)と、を例解する。上部における各メンバの名前は、どのイベントがそれらの半順序又は遅い順で最初であるかによって色付けされる。ドット模様よりもストライプ模様の初期投票の方が多く、したがって、これらのメンバの各々に対するコンセンサス投票は、ストライプ模様である。言い換えれば、メンバは、最終的に、ストライプ模様のイベントがドット模様のイベントの前に発生したという合意に収束する。 FIG. 6 illustrates an example hash graph 640 for determining full order (or consensus order) from partial order. The hash graph 640 shows two events (the bottom striped circle and the bottom dotted circle) and the first time each member receives an indicator for those events (the other striped circle and dotted circle). A circle with a pattern) is illustrated. Each member's name at the top is colored according to which event is first in their partial or slow order. There are more initial votes for stripes than for dots, so the consensus vote for each of these members is stripes. In other words, the members eventually converge on the agreement that the striped event occurred before the dotted event.

この例では、メンバ(Alice、Bob、Carol、Dave、及びEdとラベル付けされた計算デバイス)は、イベント642が最初に発生したか又はイベント644が最初に発生したかのコンセンサスを定義するように機能する。ストライプ模様の各円は、メンバがイベント644(及び/又はそのイベント644の指標)を最初に受信したイベントを示す。同様に、ドット模様の各円は、メンバがイベント642(及び/又はそのイベント642の指標)を最初に受信したイベントを示す。ハッシュグラフ640に示されるように、Alice、Bob、及びCarolは各々、イベント642の前にイベント644(及び/又はイベント644の指標)を受信した。Dave及びEdは両方とも、イベント644(及び/又はイベント644の指標)の前にイベント642(及び/又はイベント642の指標)を受信した。したがって、より多くのメンバがイベント642の前にイベント644を受信したので、各メンバによって、イベント644がイベント642の前に発生したことを示すための全順序を決定することができる。 In this example, the members (computing devices labeled Alice, Bob, Carol, Dave, and Ed) are configured to define a consensus on whether event 642 occurred first or event 644 occurred first. Function. Each circle in the striped pattern indicates the event in which the member first received event 644 (and/or an indicator of that event 644). Similarly, each dotted circle indicates the event in which the member first received event 642 (and/or an indicator of that event 642). As shown in hash graph 640, Alice, Bob, and Carol each received event 644 (and/or an indicator of event 644) prior to event 642. Dave and Ed both received event 642 (and/or an indication of event 642) before event 644 (and/or an indication of event 644). Therefore, since more members received event 644 before event 642, each member can determine the total order to indicate that event 644 occurred before event 642.

他の場合、データベース収束モジュールは、異なる関数を使用して、ハッシュグラフにおける半順序から全順序及び/又はコンセンサス順序を算出することができる。そのような実施形態では、例えば、データベース収束モジュールは、全順序を算出するために、以下の関数を使用することができ、式中、正の整数Qは、メンバによって共有されるパラメータである。 In other cases, the database convergence module may use different functions to calculate the total order and/or consensus order from the partial order in the hash graph. In such embodiments, for example, the database convergence module may use the following function to calculate the total order, where the positive integer Q is a parameter shared by the members.

Figure 2023544422000002
Figure 2023544422000002

この実施形態では、fast(x,y)は、xが作成及び/又は定義されたほぼ直後に、creator(x)の意見によってイベントの全順序におけるyの位置を与える。Qが無限大である場合、上記は、先で説明される実施形態と同じ全順序を算出する。Qが有限であり、かつ全てのメンバがオンラインである場合、上記は、先で説明される実施形態と同じ全順序を算出する。Qが有限であり、かつ少数のメンバが所与の時間にオンラインである場合、この関数により、オンラインメンバは、それらの間で、新しいメンバが1つずつゆっくりとオンラインになる際にも変更されないコンセンサスに達することができる。しかしながら、ネットワークの分割が存在する場合、各分割のメンバは、それらメンバ自体のコンセンサスに達することができる。次いで、分割が修復されると、より小さい分割のメンバは、より大きい分割のコンセンサスを採用する。 In this embodiment, fast(x,y) gives the position of y in the total order of events in the opinion of creator(x) almost immediately after x is created and/or defined. If Q is infinite, the above computes the same total order as the embodiment described above. If Q is finite and all members are online, the above computes the same total order as the embodiment described earlier. If Q is finite and a small number of members are online at a given time, this function ensures that the online members do not change as new members slowly come online one by one among them. A consensus can be reached. However, if a partition of the network exists, the members of each partition can reach a consensus among themselves. Then, when the split is repaired, the members of the smaller split adopt the consensus of the larger split.

更に他の場合、図8~図13Eに関して説明されるように、データベース収束モジュールは、異なる関数を使用して、ハッシュグラフにおける半順序から全順序を算出することができる。図8~図9に示されるように、各メンバ(Alice、Bob、Carol、Dave、及びEd)は、イベント(図8に示される1401~1413、図9に示される1501~1506)を作成及び/又は定義する。図8~図13Eに関して説明される関数及びサブ関数を使用して、イベントの全順序は、本明細書で更に詳細に説明されるように、イベントをそれらの受信ラウンドによってソートし、それらの受信タイムスタンプによって均衡を破り、それらの署名によってそれらの均衡を破ることによって、算出することができる。他の場合、イベントの全順序は、イベントをそれらの受信ラウンドによってソートし、(それらの受信タイムスタンプの代わりに)それらの受信世代によって均衡を破り、それらの署名によってそれらの均衡を破ることによって、算出することができる。以下の段落では、イベントの順序を決定するために、イベントの受信ラウンド及び受信世代を算出及び/又は定義するために使用される関数について詳細を記述する。以下の用語が、図8~図13Eに関連して使用及び例解される。 In yet other cases, the database convergence module may use different functions to compute a full order from a partial order in a hash graph, as described with respect to FIGS. 8-13E. As shown in Figures 8-9, each member (Alice, Bob, Carol, Dave, and Ed) can create and create events (1401-1413 shown in Figure 8, 1501-1506 shown in Figure 9). /or define Using the functions and subfunctions described with respect to FIGS. 8-13E, the overall ordering of events can be determined by sorting the events by their reception round and by their reception round, as described in further detail herein. It can be calculated by breaking the equilibrium by the timestamp and breaking the equilibrium by their signature. In other cases, the total order of events can be determined by sorting the events by their reception round, unbalanced by their reception generation (instead of their reception timestamp), and unbalanced by their signature. , can be calculated. The following paragraphs describe in detail the functions used to calculate and/or define reception rounds and reception generations of events in order to determine the order of events. The following terms are used and illustrated in connection with FIGS. 8-13E.

「親」:YがXのハッシュを含む場合、イベントXはイベントYの親である。例えば、図8では、イベント1412の親は、イベント1406及びイベント1408を含む。 "Parent": Event X is a parent of event Y if Y contains a hash of X. For example, in FIG. 8, the parent of event 1412 includes event 1406 and event 1408.

「先祖」:イベントXの先祖は、X、Xの親、Xの親の親、以下同様である。例えば、図8では、イベント1412の先祖は、イベント1401、1402、1403、1406、1408、及び1412である。イベントの先祖は、そのイベントにリンクされていると言うことができ、逆もまた同様である。 "Ancestor": The ancestor of event X is X, the parent of X, the parent of X, and so on. For example, in FIG. 8, the ancestors of event 1412 are events 1401, 1402, 1403, 1406, 1408, and 1412. An event's ancestors can be said to be linked to that event, and vice versa.

「子孫」:イベントXの子孫は、X、Xの子、Xの子の子、以下同様である。例えば、図8では、イベント1401の子孫は、図に示される全てのイベントである。別の例では、イベント1403の子孫はイベント1403、1404、1406、1407、1409、1410、1411、1412、及び1413である。イベントの子孫は、そのイベントにリンクされていると言うことができ、逆もまた同様である。 "Descendants": Descendants of event X are X, children of X, children of children of X, and so on. For example, in FIG. 8, the descendants of event 1401 are all events shown in the diagram. In another example, descendants of event 1403 are events 1403, 1404, 1406, 1407, 1409, 1410, 1411, 1412, and 1413. Descendants of an event can be said to be linked to that event, and vice versa.

「N」:母集団中のメンバの総数。例えば、図8では、メンバは、Alice、Bob、Carol、Dave、及びEdとラベル付けされた計算デバイスであり、Nは5に等しい。 "N": Total number of members in the population. For example, in FIG. 8, the members are computing devices labeled Alice, Bob, Carol, Dave, and Ed, and N is equal to five.

「M」:Nの一定の割合よりも大きい(例えば、Nの2/3よりも大きい)最小整数。例えば、図8では、割合が2/3であると定義される場合、Mは4に等しい。他の場合、Mは、例えば、Nの異なる割合(例えば、1/3、1/2など)、特定の事前定義された数、及び/又は任意の他の好適な様式であるように定義され得る。 "M": The smallest integer that is greater than a certain percentage of N (eg, greater than 2/3 of N). For example, in FIG. 8, if the proportion is defined to be 2/3, then M is equal to 4. In other cases, M is defined to be, for example, a different proportion of N (e.g., 1/3, 1/2, etc.), a certain predefined number, and/or any other suitable manner. obtain.

「自身の親」:イベントXの自身の親は、同じメンバによって作成及び/又は定義された、Xの親イベントYである。例えば、図8では、イベント1405の自身の親は1401である。 "Own Parent": The own parent of event X is X's parent event Y, created and/or defined by the same member. For example, in FIG. 8, event 1405 has its own parent 1401.

「自身の先祖」:イベントXの自身の先祖は、X、Xの自身の親、Xの自身の親の自身の親、以下同様である。 "Self ancestor": Event X's own ancestor is X, X's own parent, X's own parent's own parent, and so on.

「シーケンス番号(Sequence Number)」(又は「SN」):イベントの整数属性であり、イベントの自身の親のシーケンス番号に1を加えたものとして定義される。例えば、図8では、イベント1405の自身の親は1401である。イベント1401のシーケンス番号は1であるので、イベント1405のシーケンス番号は2(すなわち、1に1を加えたもの)である。 "Sequence Number" (or "SN"): An integer attribute of an event, defined as the sequence number of the event's own parent plus one. For example, in FIG. 8, event 1405 has its own parent 1401. Since the sequence number of event 1401 is 1, the sequence number of event 1405 is 2 (ie, 1 plus 1).

「世代番号(Generation Number)」(又は「GN」):イベントの整数属性であり、イベントの親の世代番号の最大値に1を加えたものとして定義される。例えば、図8では、イベント1412は、2つの親、イベント1406及び1408を有し、それぞれ世代番号4及び2を有している。したがって、イベント1412の世代番号は5(すなわち、4に1を加えたもの)である。 "Generation Number" (or "GN"): An integer attribute of an event, defined as the maximum generation number of the event's parent plus one. For example, in FIG. 8, event 1412 has two parents, events 1406 and 1408, with generation numbers 4 and 2, respectively. Therefore, the generation number for event 1412 is 5 (ie, 4 plus 1).

「ラウンド増分(Round Increment)」(又は「RI」):イベントの属性であり、0又は1のいずれかであり得る。 "Round Increment" (or "RI"): An attribute of an event, which can be either 0 or 1.

「ラウンド番号(Round Number)」(又は「RN」):イベントの整数属性。いくつかの場合、これは、作成されたラウンド(round created)又は作成されたラウンド(created round)とも呼ばれる。いくつかの場合、ラウンド番号は、イベントの親のラウンド番号の最大値にイベントのラウンド増分を加えたものとして定義することができる。例えば、図8において、イベント1412は、2つの親、イベント1406及び1408を有し、両方ともラウンド番号1を有する。イベント1412はまた、ラウンド増分1を有する。したがって、イベント1412のラウンド番号は2(すなわち、1に1を加えたもの)である。他の場合、イベントは、Rが、全てがラウンド番号R-1を有する異なるメンバによって定義及び/又は作成される少なくともM個のイベントをイベントが強く見る(本明細書に説明される)ことができるような最小整数である場合に、ラウンド番号Rを有することができる。そのような整数が存在しない場合、イベントのラウンド番号は、デフォルト値(例えば、0、1など)であることができる。そのような場合、イベントのラウンド番号は、ラウンド増分を使用せずに算出することができる。例えば、図8において、MがNの1/2倍よりも大きい最小整数であると定義される場合、Mは3である。この場合、イベント1412は、各々が異なるメンバによって定義された、ラウンド番号1を有するM個のイベント1401、1402、及び1408を強く見ている。イベント1412は、異なるメンバによって定義された、ラウンド番号2を有する少なくともM個のイベントを強く見ることができない。したがって、イベント1412のラウンド番号は2である。いくつかの場合、分散データベースにおける第1のイベントは、ラウンド番号1を含む。他の場合、分散データベースにおける第1のイベントは、0又は任意の他の好適な数のラウンド番号を含むことができる。 "Round Number" (or "RN"): An integer attribute of an event. In some cases, this is also referred to as a round created or a created round. In some cases, the round number may be defined as the maximum of the event's parent round number plus the event's round increment. For example, in FIG. 8, event 1412 has two parents, events 1406 and 1408, both with round number 1. Event 1412 also has a round increment of 1. Therefore, the round number for event 1412 is 2 (ie, 1 plus 1). In other cases, the event may strongly see at least M events (as described herein) where R is defined and/or created by different members, all with round number R-1. The round number R can be the smallest integer possible. If no such integer exists, the event's round number can be a default value (eg, 0, 1, etc.). In such cases, the round number of the event can be calculated without using the round increment. For example, in FIG. 8, if M is defined to be the smallest integer greater than 1/2 times N, then M is 3. In this case, event 1412 is strongly looking at M events 1401, 1402, and 1408 with round number 1, each defined by a different member. Event 1412 cannot strongly see at least M events with round number 2 defined by different members. Therefore, the round number for event 1412 is 2. In some cases, the first event in the distributed database includes round number 1. In other cases, the first event in the distributed database may include a round number of 0 or any other suitable number.

「フォーキング」:イベントX及びイベントYが同じメンバによって定義及び/又は作成され、かつどちらも他方の自身の先祖でない場合、イベントXは、イベントYとのフォークである。例えば、図9では、メンバDaveは、両方が同じ自身の親(すなわち、イベント1501)を有するイベント1503及び1504を作成及び/又は定義することによってフォークさせ、これによりイベント1503はイベント1504の自身の先祖ではなく、イベント1504はイベント1503の自身の先祖ではない。 "Forking": Event X is a fork with event Y if event X and event Y are defined and/or created by the same member and neither is an ancestor of the other. For example, in FIG. 9, member Dave causes events 1503 and 1504 to fork by creating and/or defining events 1503 and 1504, both of which have the same parent of their own (i.e., event 1501), such that event 1503 has its own parent of event 1504. Not an ancestor: Event 1504 is not its own ancestor of event 1503.

フォーキングの「識別」:フォーキングは、互いにフォークである2つのイベントの後に作成及び/又は定義された第3のイベントによって、これらの2つのイベントが両方とも第3のイベントの先祖である場合に、「識別」することができる。例えば、図9では、メンバDaveは、イベント1503及び1504を作成することによってフォークし、そのいずれも他方の自身の先祖ではない。イベント1503及び1504が両方ともイベント1506の先祖であるため、このフォークは、後のイベント1506によって識別することができる。いくつかの場合、フォークの識別は、特定のメンバ(例えば、Dave)が不正を行ったことを示すことができる。 "Identification" of forking: Forking is defined by a third event created and/or defined after two events that are forks of each other, if these two events are both ancestors of the third event. can be “identified”. For example, in FIG. 9, member Dave forks by creating events 1503 and 1504, neither of which is an ancestor of the other. This fork can be identified by later event 1506 because events 1503 and 1504 are both ancestors of event 1506. In some cases, the identification of a fork may indicate that a particular member (eg, Dave) committed the fraud.

イベントの「識別」:イベントXが、イベントYとのフォークである先祖イベントZを有しない場合、Xは、先祖イベントYを「識別する」又は「見る」。例えば、図8では、イベント1403がイベント1412の先祖であり、かつイベント1412が、イベント1403とのフォークである先祖イベントを有しないため、イベント1412は、イベント1403を識別する(「見る」とも呼ばれる)。いくつかの場合、イベントXは、XがイベントYの以前のフォーキングを識別しない場合、イベントYを識別することができる。そのような場合、イベントXが、イベントYに後続するイベントYを定義するメンバによるフォーキングを識別したとしても、イベントXはイベントYを見ることができる。イベントXは、フォーキングに後続するそのメンバによるイベントを識別しない。更に、メンバが、両方ともがそのメンバの履歴における第1のイベントである2つの異なるイベントを定義する場合、イベントXは、フォーキングを識別することができ、そのメンバによるイベントを識別しない。 "Identification" of an event: If event X does not have an ancestor event Z that is a fork with event Y, then X "identifies" or "sees" ancestor event Y. For example, in FIG. 8, event 1412 identifies event 1403 (also called "see" ). In some cases, event X may identify event Y if X does not identify a previous forking of event Y. In such a case, event X can see event Y even though event X identifies forking by the member that defines event Y subsequent to event Y. Event X does not identify events by its members subsequent to forking. Further, if a member defines two different events that are both the first events in that member's history, event X may identify forking and not identify events by that member.

イベントの「強い識別」(本明細書では「強く見ること」とも呼ばれる):イベントXは、XがYを識別する場合、Xと同じメンバによって作成及び/又は定義された先祖イベントYを「強く識別する」(又は「強く見る」)。(1)X及びYの両方を含み、(2)イベントXの先祖であり、(3)先祖イベントYの子孫であり、(4)Xによって識別され、(5)各々がYを識別することができ、(6)少なくともM個の異なるメンバによって作成及び/又は定義される、イベントのセットSが存在する場合、イベントXは、Xと同じメンバによって作成及び/又は定義されない先祖イベントYを「強く識別」する。例えば、図8では、MがNの2/3よりも大きい最小整数であると定義される場合(すなわち、M=1+floor(2N/3)であり、これはこの例では4であり得る)、イベント1412は、先祖イベント1401を強く識別する。なぜなら、イベント1401、1402、1406、及び1412のセットは、イベント1412の先祖でありかつイベント1401の子孫である少なくとも4つのイベントのセットであり、それらは、それぞれ、4つのメンバDave、Carol、Bob、及びEdによって作成及び/又は定義され、イベント1412は、イベント1401、1402、1406、及び1412の各々を識別し、イベント1401、1402、1406、及び1412の各々は、イベント1401を識別するからである。同様に述べると、イベントX(例えば、イベント1412)は、Xが、各々がYを見ることができる異なるメンバによって作成又は定義された、少なくともM個のイベント(例えば、イベント1401、1402、1406、及び1412)を見ることができる場合、イベントY(例えば、イベント1401)を「強く見る」ことができる。 "Strong identification" (also referred to herein as "strong viewing") of an event: An event X "strongly identifies" an ancestor event Y created and/or defined by the same member as X if X identifies Y. "to identify" (or "to see strongly"). (1) includes both X and Y; (2) is an ancestor of event X; (3) is a descendant of ancestor event Y; (4) is identified by X; and (5) each identifies Y. and (6) if there is a set S of events created and/or defined by at least M different members, then event Strongly identify. For example, in FIG. 8, if M is defined to be the smallest integer greater than 2/3 of N (i.e., M=1+floor(2N/3), which could be 4 in this example), Event 1412 strongly identifies ancestor event 1401. Because the set of events 1401, 1402, 1406, and 1412 is a set of at least four events that are ancestors of event 1412 and descendants of event 1401, and they each have four members Dave, Carol, Bob , and Ed, and event 1412 identifies each of events 1401, 1402, 1406, and 1412, and each of events 1401, 1402, 1406, and 1412 identifies event 1401. be. Similarly stated, an event and 1412), then event Y (eg, event 1401) can be "strongly seen".

「ラウンドRの第1」イベント(本明細書では「ウィットネス」とも呼ばれる):あるイベントが、(1)ラウンド番号Rを有し、(2)Rよりも小さいラウンド番号を有する自身の親を有するか又は自身の親を有しない場合、そのイベントは「ラウンドRの第1」イベント(又は「ウィットネス」)である。例えば、図8では、イベント1412は、ラウンド番号2を有し、その自身の親がラウンド番号1(すなわち、2よりも小さい)を有するイベント1408であるので、「ラウンド2の第1」イベントである。 “First of round R” event (also referred to herein as “witness”): An event (1) has round number R, and (2) has its parent with a round number less than R. or has no parent of its own, the event is a "first of round R" event (or "witness"). For example, in FIG. 8, event 1412 is the "first of round 2" event because it has round number 2 and its own parent is event 1408, which has round number 1 (i.e., less than 2). be.

いくつかの場合、イベントXのラウンド増分は、Xが少なくともM個の「ラウンドRの第1」イベントを「強く識別する」場合に限り、1であると定義され、ここで、Rはその親の最大ラウンド番号である。例えば、図8において、MがNの1/2倍よりも大きい最小整数であると定義される場合、Mは3である。次いで、イベント1412は、全てがラウンド1の第1のイベントであるM個のイベント1401、1402、及び1408を強く識別する。1412の両方の親はラウンド番号1を有し、1412は少なくともM個のラウンド1の第1のイベントを強く識別し、したがって、1412のラウンド増分は1である。「RI=0」とマークされた図中のイベントは各々、少なくともM個のラウンド1の第1のイベントを強く識別することに失敗し、したがって、それらのラウンド増分は0である。 In some cases, the round increment of an event X is defined to be 1 if and only if X "strongly identifies" at least M "first of round R" events, where R is the maximum round number. For example, in FIG. 8, if M is defined to be the smallest integer greater than 1/2 times N, then M is 3. Event 1412 then strongly identifies M events 1401, 1402, and 1408, all of which are the first event of round 1. Both parents of 1412 have round number 1, 1412 strongly identifies at least M first events of round 1, and therefore the round increment of 1412 is 1. The events in the diagram marked "RI=0" each fail to strongly identify at least M the first event of round 1, and therefore their round increment is zero.

いくつかの場合、以下の方法を使用して、イベントXが先祖イベントYを強く識別できるかどうかを判断することができる。ラウンドRの第1の各先祖イベントYについて、メンバごとに1つの整数の配列A1を維持し、イベントXの最も低いシーケンス番号を与えると、そのメンバがイベントXを作成及び/又は定義した場合、XはYを識別できる。各イベントZについて、ZがWを識別することができるように、そのメンバによって作成及び/又は定義されたイベントWの最も高いシーケンス番号を与え、メンバごとに1つの整数の配列A2を維持する。Zが先祖イベントYを強く識別できるかどうかを判断するためには、A1[E]≦A2[E]であるような要素位置Eの数をカウントする。イベントZは、このカウントがMよりも大きい場合に限り、Yを強く識別することができる。例えば、図8では、メンバAlice、Bob、Carol、Dave、及びEdは各々、イベント1401を識別することができ、ここで、識別することができる最古のイベントは、それぞれ、それらのメンバのイベント{1404、1403、1402、1401、1408}である。これらのイベントは、シーケンス番号A1={1,1,1,1,1}を有する。同様に、イベント1412によって識別される、メンバの各々による最新のイベントは、イベント{なし、1406、1402、1401、1412}であり、ここで、1412はAliceによるイベントを識別することができないため、Aliceは「なし」としてリストされる。これらのイベントは、それぞれシーケンス番号A2={0,2,1,1,2}を有し、ここで、全てのイベントが正のシーケンス番号を有するので、0は、Aliceが1412によって識別されるイベントを有しないことを意味する。リストA1をリストA2と比較すると、結果{1≦0,1≦2,1≦1,1≦1,1≦2}が与えられ、これは、真である4つの値を有する{偽,真,真,真,真}に等しい。したがって、1412の先祖でありかつ1401の子孫である4つのイベントのセットSが存在する。4は少なくともMであり、したがって、1412は1401を強く識別する。 In some cases, the following method can be used to determine whether event X can strongly identify ancestor event Y. For each first ancestor event Y in round R, maintain an array A1 of integers, one for each member, given the lowest sequence number of event X, if that member created and/or defined event X; X can identify Y. For each event Z, we maintain an array A2 of integers, one per member, giving the highest sequence number of the event W created and/or defined by its member so that Z can identify W. To determine whether Z can strongly identify ancestor event Y, count the number of element positions E such that A1[E]≦A2[E]. Event Z can strongly identify Y only if this count is greater than M. For example, in FIG. 8, members Alice, Bob, Carol, Dave, and Ed can each identify event 1401, where the earliest event that can be identified is their respective event {1404, 1403, 1402, 1401, 1408}. These events have sequence number A1={1,1,1,1,1}. Similarly, the most recent event by each of the members identified by event 1412 is event {none, 1406, 1402, 1401, 1412}, where 1412 cannot identify the event by Alice, so Alice is listed as "None". These events each have a sequence number A2 = {0, 2, 1, 1, 2}, where 0 is Alice identified by 1412 since all events have positive sequence numbers. It means that there is no event. Comparing list A1 with list A2 gives the result {1≦0, 1≦2, 1≦1, 1≦1, 1≦2}, which has four values that are true: {false, true , true, true, true}. Therefore, there is a set of four events S that are ancestors of 1412 and descendants of 1401. 4 is at least M, so 1412 strongly identifies 1401.

A1及びA2を用いてイベントXが先祖イベントYを強く識別できるかどうかを判断するための方法を実装する更に別の変形は、以下のとおりである。両方の配列内の整数要素が128未満である場合、各要素を1バイトに記憶し、そのような8つの要素を64ビットの1ワードにパックし、A1及びA2をそのようなワードの配列とすることが可能である。A1内の各バイトの最上位ビットは0に設定することができ、A2内の各バイトの最上位ビットは1に設定することができる。対応する2つのワードを減算し、次いで、最上位ビットを除く全てを0にするマスクを用いてビットごとのANDを実施し、次いで、7ビット位置だけ右シフトして、Cプログラミング言語で、((A2[i]-A1[i])&0x8080808080808080)>>7)と表される値を得る。これは、0に初期化された実行アキュムレータ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)命令、又はグラフィックス処理ユニット(graphics processing unit、GPU)若しくは汎用グラフィックス処理ユニット(general-purpose graphics processing unit、GPGPU)における同等物などのプロセッサ固有命令を使用して実施することができる。いくつかのアーキテクチャでは、128、256、512、又はそれ以上のビットなど、64ビットよりも大きいワードを使用することによって、算出をより高速に実施することができる。 Yet another variation implementing the method for determining whether event X can strongly identify ancestor event Y using A1 and A2 is as follows. If the integer elements in both arrays are less than 128, store each element in one byte, pack 8 such elements into one word of 64 bits, and make A1 and A2 an array of such words. It is possible to do so. The most significant bit of each byte in A1 may be set to 0, and the most significant bit of each byte in A2 may be set to 1. Subtract the two corresponding words, then perform a bitwise AND with a mask that zeros out all but the most significant bit, then shift right by 7 bit positions to write (in the C programming language) A value expressed as (A2[i]-A1[i])&0x8080808080808080)>>7) is obtained. This can be added to the execution accumulator S, which is initialized to zero. After doing this multiple times, convert the accumulator to a count by shifting and adding bytes to ((S&0xff) + ((S >> 8) & 0xff) + ((S >> 16) & 0xff) + ( (S >> 24) & 0xff) + ((S >> 32) & 0xff) + ((S >> 40) & 0xff) + ((S >> 48) & 0xff) + ((S >> 56) & 0xff)) obtain. In some cases, these calculations can be performed in C, Java, and/or similar programming languages. In other cases, the calculations are performed using Advanced Vector Extensions (AVX) instructions provided by Intel and AMD, or graphics processing units (GPUs) or general-purpose graphics processing units (GPGPUs). can be implemented using processor-specific instructions such as the equivalents in . In some architectures, calculations can be performed faster by using words larger than 64 bits, such as 128, 256, 512, or more bits.

「有名」イベント:ラウンドRイベントXは、(1)イベントXが「ラウンドRの第1の」イベント(又は「ウィットネス」)であり、かつ(2)後述されるビザンチン合意プロトコルの実行を介して「はい」の判断に達した場合、「有名」である。いくつかの実施形態では、ビザンチン合意プロトコルは、分散データベースのインスタンス(例えば、分散データベースインスタンス114)及び/又はデータベース収束モジュール(例えば、データベース収束モジュール211)によって実行することができる。例えば、図8では、ラウンド1の5つの第1のイベント1401、1402、1403、1404、及び1408が示されている。Mが、Nの1/2倍よりも大きい最小整数であると定義され、これが3である場合、1412はラウンド2の第1のイベントである。プロトコルがより長く実行される場合、ハッシュグラフは上方に成長し、最終的に、他の4つのメンバもまた、この図の上部の上方にラウンド2の第1のイベントを有することになる。ラウンド2の各第1のイベントは、ラウンド1の第1のイベントの各々が「有名」であるかどうかについての「投票」を有する。イベント1412は、1401、1402、及び1403が有名であることに対して、はいを投票するであろうが、これは、これらが、識別することができるラウンド1の第1のイベントだからである。イベント1412は、1404が有名であることに対していいえを投票するであろうが、これは、1412が1404を識別できないからである。1402などの、ラウンド1の所与の第1のイベントについて、そのイベントの「有名」であるか否かの状態は、それが有名であるか否かに対するラウンド2の各第1のイベントの投票を算出することによって決定される。次いで、これらの投票は、ラウンド3の第1のイベントに、次いで、ラウンド4の第1のイベントに、などのように伝搬し、最終的に、1402が有名であったかどうかについて合意に達するまで伝播する。同じプロセスが、他の第1のものに対して繰り返される。 “Famous” Event: A round R event If the answer is "yes", it is "famous". In some embodiments, the Byzantine consensus protocol may be executed by an instance of a distributed database (eg, distributed database instance 114) and/or a database convergence module (eg, database convergence module 211). For example, in FIG. 8, five first events 1401, 1402, 1403, 1404, and 1408 of round 1 are shown. If M is defined to be the smallest integer greater than 1/2 times N, which is 3, then 1412 is the first event of round 2. If the protocol runs longer, the hash graph will grow upwards and eventually the other four members will also have the first event of round 2 above the top of the diagram. Each first event of round 2 has a "vote" on whether each of the first events of round 1 is "famous". Event 1412 will vote yes for 1401, 1402, and 1403 to be famous because they are the first events of round 1 that can be identified. Event 1412 will vote no for 1404 to be famous because 1412 cannot identify 1404. For a given first event of round 1, such as 1402, the "famous" status of that event is the vote of each first event of round 2 on whether it is famous or not. Determined by calculating . These votes then propagate to the first event of round 3, then to the first event of round 4, etc., until finally a consensus is reached about whether 1402 was famous or not. do. The same process is repeated for the other first one.

ビザンチン合意プロトコルは、「ラウンドRの第1の」イベントの投票及び/又は判断を収集及び使用して、「有名なイベントを識別することができる。例えば、「ラウンドR+1の第1の」イベントYは、YがイベントXを「識別」することができる場合に「はい」を投票し、そうでない場合に「いいえ」を投票する。投票は、任意のメンバによって判断に達するまで、ラウンドGごとに、G=R+2、R+3、R+4などについて算出される。判断に達するまで、ラウンドGごとに投票が算出される。これらのラウンドのうちのいくつかは「多数決」ラウンドであってよく、他のいくつかのラウンドは「コイン」ラウンドであり得る。いくつかの場合、例えば、ラウンドR+2は、多数決ラウンドであり、将来のラウンドは、多数決ラウンド又はコインラウンドのいずれかとして(例えば、事前定義されたスケジュールに従って)指定される。例えば、いくつかの場合、将来のラウンドが多数決ラウンドであるか又はコインラウンドであるかは、連続する2つのコインラウンドはあり得ないという条件が与えられて、任意に判断することができる。例えば、5つの多数決ラウンド、次に1つのコインラウンド、次に5つの多数決ラウンド、次に1つのコインラウンドがあり、合意に達する限り繰り返される、ということが事前定義され得る。 Byzantine consensus protocols can collect and use the votes and/or judgments of the "first of round R" event to identify "famous events. For example, the "first of round R+1" event Y votes "yes" if Y can "identify" event X, and "no" otherwise. Votes are calculated for G=R+2, R+3, R+4, etc. for each round G until a decision is reached by any member. Votes are calculated for each round G until a decision is reached. Some of these rounds may be "majority" rounds and some other rounds may be "coin" rounds. In some cases, for example, round R+2 is a majority round, and future rounds are designated as either majority rounds or coin rounds (eg, according to a predefined schedule). For example, in some cases, whether a future round is a majority round or a coin round can be arbitrarily determined, provided that there cannot be two consecutive coin rounds. For example, it may be predefined that there are 5 majority rounds, then 1 coin round, then 5 majority rounds, then 1 coin round, repeated as long as a consensus is reached.

いくつかの場合、ラウンドGが多数決ラウンドである場合、投票は、以下のように算出することができる。V(Vは「はい」又は「いいえ」のいずれかである)に投票する少なくともM個のラウンドG-1の第1を強く識別するラウンドGイベントが存在する場合、コンセンサス判断は、Vであり、ビザンチン合意プロトコルは、終了する。そうでない場合、ラウンドGの各第1のイベントは、ラウンドGの各第1のイベントが強く識別することができるラウンドG-1の第1のイベントの多数決である、新しい投票を算出する。多数決ではなく同順位がある場合、投票は、「はい」と指定することができる。 In some cases, if round G is a majority round, the votes can be calculated as follows. If there is a round G event that strongly identifies the first of at least M rounds G-1 to vote for V (where V is either "yes" or "no"), then the consensus decision is that V , the Byzantine consensus protocol ends. Otherwise, each first event of round G calculates a new vote that is a majority vote of the first events of round G-1 that each first event of round G can strongly identify. If there is a tie rather than a majority vote, the vote may be designated as "yes".

同様に述べると、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個の投票を有しない場合、選挙は次のラウンドに続く。 Similarly stated, if X is the witness of round R (or the first of round R), then the results of the votes in rounds R+1, R+2, etc. can be computed, where the witness in each round is You are voting on whether or not X is famous. In round R+1, all witnesses who can see X vote yes and other witnesses vote no. In round R+2, all witnesses vote according to the majority of the votes of the witnesses in round R+1 that are strongly visible. Similarly, in round R+3, all witnesses vote according to the majority of the votes of the witnesses in round R+2 that are strongly visible. This can continue over multiple rounds. In case of a tie, voting can be set to yes. In other cases, ties may be set to no, or may be set randomly. If any round has at least M witnesses voting no, the election is over and X is not famous. If any round has at least M witnesses voting yes, the election is over and X is famous. If neither yes nor no has at least M votes, the election continues to the next round.

例として、図8において、示された図の下にあるラウンドの、ある第1のイベントXを考える。この場合、ラウンド1の各第1のイベントは、Xが有名であるかどうかに関する投票を有する。イベント1412は、ラウンド1の第1のイベント1401、1402、及び1408を強く識別することができる。したがって、イベント1412の投票は、それらのイベントの投票に基づく。これが多数決ラウンドである場合、1412は、{1401、1402、1408}のうちの少なくともM個がはいの投票を有するかどうかをチェックする。そうである場合、判断は、はいであり、合意に達している。少なくともそれらのうちM個がいいえに投票した場合、判断は、いいえであり、合意に達している。投票が、いずれの方向においても少なくともM個を有しない場合、1412は、1401、1402、及び1408の投票の多数決である投票を与えられる(同順位があった場合、はいを投票することによって均衡を破る)。その投票は次いで、次のラウンドで使用され、合意に達するまで続けられ得る。 As an example, consider in FIG. 8 a certain first event X of the round at the bottom of the diagram shown. In this case, each first event of round 1 has a vote on whether or not X is famous. Event 1412 can strongly identify the first events 1401, 1402, and 1408 of round 1. Therefore, the voting for event 1412 is based on the voting for those events. If this is a majority round, 1412 checks whether at least M of {1401, 1402, 1408} have a yes vote. If so, the determination is yes and agreement has been reached. If at least M of them vote no, the decision is no and consensus has been reached. If the votes do not have at least M in either direction, 1412 is given a vote that is a majority of the votes of 1401, 1402, and 1408 (if there is a tie, it is balanced by voting yes). break). That vote can then be used in the next round and continue until a consensus is reached.

いくつかの場合、ラウンドGがコインラウンドである場合、投票は以下のように算出することができる。イベントXが、V(Vは「はい」又は「いいえ」のいずれかである)に投票するラウンドG-1の少なくともM個の第1を強く識別することができる場合、イベントXはその投票をVに変更することになる。そうでない場合は、ラウンドGがコインラウンドである場合、ラウンドGの各第1のイベントXは、その投票を、イベントXの署名の最下位ビットであると定義される擬似ランダム決定(いくつかの場合、コインフリップに類似する)の結果に変更する。 In some cases, if round G is a coin round, the votes can be calculated as follows. If event It will be changed to V. Otherwise, if round G is a coin round, each first event If the result changes (similar to a coin flip).

同様に述べると、そのような場合において、選挙がラウンドR+K(コインラウンド)に達し、ここで、Kが指定された係数(例えば、3、6、7、8、16、32又は任意の他の好適な数などの数の倍数)である場合、選挙はそのラウンドで終了しない。選挙がこのラウンドに達した場合、少なくとももう1ラウンド継続することができる。そのようなラウンドでは、イベントYがラウンドR+Kウィットネスである場合において、Vを投票しているラウンドR+K-1からの少なくともM個のウィットネスを強く見ることができる場合、YはVに投票する。そうでない場合、Yは、ランダム値に従って(例えば、イベントYの署名の1ビット(例えば、最下位ビット、最上位ビット、ランダムに選択されたビット)であって、暗号「共有コイン」プロトコル及び/又は任意の他のランダム決定を使用して、イベントYのタイムスタンプに従って、1=はいであり、かつ0=いいえであるか、又はその逆である、1ビットに従って)、投票する。このランダム決定は、Yが作成される前は予測不可能であり、したがって、イベント及びコンセンサスプロトコルのセキュリティを増加させることができる。 Similarly stated, in such a case the election reaches round R+K (coin round), where K is a specified coefficient (e.g. 3, 6, 7, 8, 16, 32 or any other (a multiple of the preferred number, etc.), the election does not end in that round. If the election reaches this round, it can continue for at least one more round. In such a round, if event Y is a round R+K witness, then Y votes for V if it can strongly see at least M witnesses from round R+K-1 voting for V. . Otherwise, Y is determined according to a random value (e.g., 1 bit (e.g., least significant bit, most significant bit, randomly selected bit) of the signature of event Y) according to the cryptographic "shared coin" protocol and/or or using any other random decision, vote according to the timestamp of event Y (according to the 1 bit where 1=yes and 0=no, or vice versa). This random decision is unpredictable before Y is created and can therefore increase the security of the event and consensus protocols.

例えば、図8では、ラウンド2がコインラウンドであり、投票がラウンド1の前の何らかのイベントが有名であったかどうかについてのものである場合、イベント1412は、まず、{1401、1402、1408}のうちの少なくともM個がはいに投票したかどうか、又はそれらのうちの少なくともM個がいいえに投票したかどうかをチェックする。当てはまる場合、1412は、同じように投票する。いずれかの方向に投票する少なくともM個がない場合、1412は、(例えば、Edがイベント1412に署名したとき、イベント1412を生成及び/又は定義したときに生成した、イベント1412に対するデジタル署名の最下位ビットに基づいて)ランダム又は擬似ランダムな投票を有することになる。 For example, in FIG. 8, if round 2 is a coin round and the vote is on whether some event before round 1 was famous, event 1412 first Check whether at least M of them have voted yes, or whether at least M of them have voted no. If so, 1412 votes as well. If there are no at least M votes in either direction, then 1412 is the most recent digital signature for event 1412 (e.g., when Ed signed event 1412, generated and/or defined event 1412). will have random or pseudo-random voting (based on the least significant bits).

いくつかの場合、擬似ランダム決定の結果は、暗号共有コインプロトコルの結果であってよく、暗号共有コインプロトコルは、例えば、ラウンド番号の閾値署名の最下位ビットとして実装され得る。 In some cases, the result of the pseudo-random decision may be the result of a cryptographic shared coin protocol, which may be implemented, for example, as the least significant bit of a threshold signature of the round number.

上で説明されるように、いくつかの実装形態では、ハッシュグラフコンセンサス方式は、例えば、ラウンドRにおけるウィットネスXの有名さを決定することを含むことができる。上で説明されるように、ラウンドR+1から初期投票を集め、各イベントがXの子孫であるかどうかに従ってはい又はいいえを投票する各イベントをカウントすることができる。代替アプローチとして、「R+1」の代わりに「R+2」(又は「R+1」の代わりに「R+3」、「R+4」など)から初期投票を集めることが挙げられ得る。そのアプローチでは、任意選択的に追加のステップを追加することができる。詳細には、そのような実装形態では、ラウンドRの第1のイベントX(又はラウンドRのウィットネスX)が、母集団の3分の2より多く(すなわち、2N/3より多くのメンバ)によって作成及び/又は定義されたラウンドR+1のウィットネスの先祖であるときはいつでも、Xは直ちに有名であると宣言され、Xに対するいかなる投票が算出される前であっても、選挙は直ちに終了する。第2の代替アプローチとして、R+1から集められた初期投票を用いてRに対する選挙を実行することが挙げられ得、その場合、有名であると決定されたラウンドRにおいてウィットネスを作成及び/又は定義したメンバの数が、所与の閾値Tを下回る(例えば、2N/3メンバを下回る)場合、R+2から集められた初期投票を用いて2回目の選挙を再実行する。同様に述べると、ラウンドR+1からの投票を使用して識別された、ラウンドRに対する有名なウィットネスの数が不十分である場合、ラウンドR+1ではなくラウンドR+2からの投票を使用して選挙を最初から完全に再実行することができる(すなわち、ラウンドR+1からの投票を使用した選挙の結果は破棄され、ラウンドR+2からの投票を使用して選挙を再実行する)。いくつかの実装形態では、別の代替として、R+1から集められた初期投票を用いてRに対する選挙を実行することが挙げられ得、その場合に、有名であると決定されたラウンドRにおけるウィットネスを作成及び/又は定義したメンバの数が、所与の閾値Tを下回る(例えば、2N/3メンバを下回る)場合、ラウンドRに対する有名なウィットネス(例えば、ジャッジ)は、ラウンドR+1における有名なウィットネスの先祖であるラウンドRにおけるウィットネスであると定義され得る(メンバごとにラウンドRにおける1つの有名なウィットネスのみを保証するために、いくつかが除去される)。 As described above, in some implementations, the hashgraph consensus scheme may include, for example, determining the popularity of Witness X in round R. As explained above, we can collect the initial votes from round R+1 and count each event voting yes or no according to whether each event is a descendant of X. An alternative approach could be to collect initial votes from "R+2" instead of "R+1" (or "R+3", "R+4", etc. instead of "R+1"). In that approach, additional steps can optionally be added. In particular, in such implementations, the first event X of round R (or the witness X of round R) Whenever X is an ancestor of round R+1 witnesses created and/or defined by . A second alternative approach could be to run an election for R using the initial votes collected from R+1, in which case a witness is created and/or defined in round R that is determined to be famous. If the number of members who voted is below a given threshold T (eg, below 2N/3 members), rerun the second election using the initial votes collected from R+2. Similarly stated, if there is an insufficient number of well-known witnesses for round R identified using votes from round R+1, then votes from round R+2 instead of round R+1 are used to start the election. (i.e., the results of the election using votes from round R+1 are discarded and the election is rerun using votes from round R+2). In some implementations, another alternative may be to run an election for R using the initial votes collected from R+1, in which case the Witness in round R determined to be popular If the number of members who created and/or defined the The Witness's ancestor can be defined to be the Witness in round R (with some removed to ensure only one famous Witness in Round R per member).

システムは、上で説明される擬似ランダム決定の結果を算出するための方法のいずれか1つから構築することができる。いくつかの場合、システムは、様々な方法を何らかの順序で循環させる。他の場合、システムは、異なる方法の中から事前定義されたパターンに従って選択することができる。 A system can be constructed from any one of the methods for calculating pseudorandom decision results described above. In some cases, the system cycles through the various methods in some order. In other cases, the system may select among different methods according to a predefined pattern.

「受信ラウンド」:イベントXは、ラウンド番号Rを有するラウンドRの有名な第1のイベント(又は有名なウィットネス)のうちの少なくとも半分がXの子孫であるように、かつ/又はXを見ることができるように、Rが最小整数である場合、Rの「受信ラウンド」を有する。他の場合、任意の他の好適な割合を使用することができる。例えば、別の場合、イベントXは、ラウンド番号Rを有するラウンドRの有名な第1のイベント(又は有名なウィットネス)のうちの少なくとも事前定義された割合(例えば、40%、60%、80%など)がXの子孫であるように、かつ/又はXを見ることができるように、Rが最小整数である場合、Rの「受信ラウンド」を有する。 "receiving round": event X sees X such that at least half of the famous first events (or famous witnesses) of round R with round number R are descendants of X and/or If R is the smallest integer, then we have R "reception rounds". Otherwise, any other suitable proportions can be used. For example, in another case, event %, etc.) is a descendant of X and/or has a "reception round" of R if R is the smallest integer such that X can be seen.

いくつかの場合、イベントXの「受信世代」は、以下のように算出することができる。イベントXを識別することができる各ラウンドRの第1のイベントをどのメンバが作成及び/又は定義したかを求める。次いで、Xを識別することができるそのメンバによる最古のイベントの世代番号を決定する。次いで、Xの「受信世代」をそのリストの中央値であるように定義する。 In some cases, the "reception generation" of event X can be calculated as follows. Determine which member created and/or defined the first event of each round R for which event X can be identified. Then, determine the generation number of the oldest event by its members that can identify X. We then define the "receiving generation" of X to be the median of that list.

いくつかの場合、イベントXの「受信タイムスタンプ」Tは、Xを識別するかつ/又は見る各メンバによる第1のイベントを含むイベント内のタイムスタンプの中央値であり得る。例えば、イベント1401の受信タイムスタンプは、イベント1402、1403、1403、及び1408のタイムスタンプの値の中央値であり得る。いくつかの場合、イベント1401のタイムスタンプを中央値算出に含めることができる。他の場合、Xの受信タイムスタンプは、Xを識別する又は見るための各メンバによる第1のイベントであるイベント内のタイムスタンプの値の、任意の他の値又は組み合わせであり得る。例えば、Xの受信タイムスタンプは、タイムスタンプの平均、タイムスタンプの標準偏差、(例えば、算出から最古のタイムスタンプ及び最新のタイムスタンプを除去することにより)修正された平均、及び/又は同様のものに基づき得る。更に他の場合、拡張中央値を使用することができる。 In some cases, the "reception timestamp" T of event For example, the reception timestamp of event 1401 may be the median value of the timestamp values of events 1402, 1403, 1403, and 1408. In some cases, the timestamp of event 1401 may be included in the median calculation. In other cases, X's received timestamp may be any other value or combination of timestamp values in an event that is the first event by each member to identify or see X. For example, the received timestamps of can be based on that of In still other cases, expanded median values may be used.

いくつかの場合、イベントの全順序及び/又はコンセンサス順序は、イベントをそれらの受信ラウンドによってソートすること、それらの受信タイムスタンプによって均衡を破ること、及びそれらの署名によってそれらの均衡を破ることによって算出される。他の場合、イベントの全順序は、イベントをそれらの受信ラウンドによってソートすること、それらの受信世代によって均衡を破ること、及びそれらの署名によってそれらの均衡を破ることによって算出することができる。前述の段落では、イベントの受信ラウンド、受信タイムスタンプ、及び/又は受信世代を算出及び/又は定義するために使用される関数を指定する。 In some cases, the overall order and/or consensus order of events is determined by sorting the events by their reception rounds, unbalancing them by their reception timestamps, and unbalancing them by their signatures. Calculated. In other cases, the total order of events can be computed by sorting the events by their reception round, unbalanced by their reception generation, and unbalanced by their signature. The preceding paragraphs specify the functions used to calculate and/or define the reception round, reception timestamp, and/or reception generation of an event.

他の場合、各イベントの署名を使用する代わりに、そのイベントの署名を、そのラウンドにおける同じ受信ラウンド及び/又は同じ受信世代を有する、有名なイベント又は有名なウィットネスの署名とXORして使用することができる。他の場合、イベント署名の任意の他の好適な組み合わせを使用して、イベントのコンセンサス順序を定義するために均衡を破ることができる。所与のラウンドにおける有名なウィットネスのXORされた署名の結果は、潜在的な攻撃者及び他のエンティティが予測及び/又は操作することが困難な擬似乱数を表す。したがって、いくつかの実装形態では、XORされた署名は、予測不可能な乱数のソース(すなわち、「ランダムビーコン」)として使用することができる。乱数は、様々なハッシュグラフプロセスにおいて使用することができる。 Otherwise, instead of using each event's signature, use that event's signature by XORing it with the signature of a famous event or famous witness that has the same reception round and/or the same reception generation in that round. can do. In other cases, any other suitable combination of event signatures can be used to break the equation to define a consensus order of events. The result of the XORed signatures of famous witnesses in a given round represents a pseudo-random number that is difficult for potential attackers and other entities to predict and/or manipulate. Thus, in some implementations, the XORed signature can be used as a source of unpredictable random numbers (i.e., a "random beacon"). Random numbers can be used in various hashgraph processes.

更に他の場合、「受信世代」をリストの中央値として定義する代わりに、「受信世代」をリスト自体であるように定義することができる。次に、受信世代によってソートする場合、2つの受信世代は、それらのリストの中間要素によって比較することができ、中間の直前の要素によって均衡を破り、中間の直後の要素によってそれらの均衡を破り、均衡が破れるまで、これまで使用した要素の前の要素と後の要素とを交互に入れ替えることによって続けられる。 Yet in other cases, instead of defining the "receiving generation" as the median of the list, the "receiving generation" can be defined to be the list itself. Then, when sorting by received generation, two received generations can be compared by the middle element of their lists, breaking their equilibrium by the element immediately before the middle, and breaking their balance by the element immediately after the middle. , continues by alternating the elements before and after the elements used so far, until the equilibrium is broken.

いくつかの場合、タイムスタンプ中央値は、「拡張中央値」と置換することができる。そのような場合、タイムスタンプのリストは、単一の受信タイムスタンプではなく、各イベントに対して定義され得る。イベントXのタイムスタンプのリストには、Xを識別及び/又は見る各メンバによる第1のイベントを含めることができる。例えば、図8では、イベント1401のタイムスタンプのリストは、イベント1402、1403、1403、及び1408のタイムスタンプを含むことができる。いくつかの場合、イベント1401のタイムスタンプもまた含めることができる。タイムスタンプのリストとの均衡を破る(すなわち、2つのイベントが同じ受信ラウンドを有する)とき、各イベントのリストの中間タイムスタンプ(又は偶数の長さの場合、2つの中間タイムスタンプのうちの第1又は第2の所定のタイムスタンプ)が比較され得る。これらのタイムスタンプが同じである場合、中間タイムスタンプの直後のタイムスタンプを比較することができる。これらのタイムスタンプが同じである場合、中間タイムスタンプの直前のタイムスタンプを比較することができる。これらのタイムスタンプも同じである場合、すでに比較された3つのタイムスタンプの後のタイムスタンプが比較される。これは、均衡が破れるまで交互に続けることができる。上の考察と同様、2つのリストが同一である場合、2つの要素の署名によって均衡を破ることができる。 In some cases, the timestamp median can be replaced with an "expanded median." In such cases, a list of timestamps may be defined for each event rather than a single received timestamp. The list of timestamps for event X may include the first event by each member who identifies and/or sees X. For example, in FIG. 8, the list of timestamps for event 1401 may include timestamps for events 1402, 1403, 1403, and 1408. In some cases, a timestamp of the event 1401 may also be included. When breaking the balance with the list of timestamps (i.e., two events have the same reception round), the intermediate timestamp of each event's list (or, if of even length, the first of the two intermediate timestamps) one or a second predetermined timestamp) may be compared. If these timestamps are the same, the timestamp immediately following the intermediate timestamp can be compared. If these timestamps are the same, the timestamp immediately preceding the intermediate timestamp can be compared. If these timestamps are also the same, the timestamp after the three timestamps already compared is compared. This can continue in alternation until the equilibrium is broken. Similar to the discussion above, if the two lists are identical, the equilibrium can be broken by the signature of the two elements.

更に他の場合、「短縮拡張中央値」を「拡張中央値」の代わりに使用することができる。そのような場合、各イベントに対してタイムスタンプのリスト全体が記憶されるわけではない。代わりに、リストの中央付近の数個の値のみが記憶され、比較のために使用される。 In still other cases, "shortened expanded median" may be used in place of "expanded median." In such cases, the entire list of timestamps is not stored for each event. Instead, only the few values near the middle of the list are stored and used for comparison.

受信タイムスタンプ中央値は、潜在的に、イベントの全順序を算出することに加えて、他の目的のために使用され得る。例えば、Bobは、Bobが契約に拘束されることに同意することを示す契約に署名する可能性があるが、これは、Aliceがこの同じ契約に署名するトランザクションを含むイベントXがあり、Xの受信タイムスタンプが特定の期限にあるか又はその前である場合にのみ行われる。その場合、上で説明されるように「受信タイムスタンプ中央値」によって示されるように、Aliceが期限後に契約に署名した場合、Bobは契約によって拘束されないであろう。 The median received timestamp can potentially be used for other purposes in addition to calculating the total order of events. For example, Bob might sign a contract indicating that Bob agrees to be bound by the contract, but this means that there is an event X that involves a transaction in which Alice signs this same contract, and that This is only done if the receiving timestamp is at or before a certain deadline. In that case, if Alice signs the contract after the deadline, as indicated by the "median received timestamp" as explained above, Bob will not be bound by the contract.

いくつかの実装形態では、Aliceが、フォークである(同じ自身の親を有する)2つのイベントX及びYを作成し、BobがXを受信した場合、Bobによって定義された後続のイベントは、Xを見ることができる。後に、BobがYを受信すると、その後のBobの将来のイベントは、(Bobがフォークを識別するのでもはやX又はYを見ることができない。いくつかの実装形態では、これは、Bobの将来のイベントがXを見続け、Yを見ないように変更することができる。同様に述べると、メンバがイベントを見ることができると、その見ることは「スティッキー」であり、メンバの将来のイベントは、そのイベントを見続けるが、そのイベントのフォークを見ない。これを使用して、コンセンサス方式及び/又はアルゴリズムは、もはやフォークを検出又はフォークに反応する必要はなくなる。定義は、述語(xはyを見ることができるか?(can x see y?))から関数(xはどのウィットネスを見ることができるか?(which witness can x see?))に変化する。 In some implementations, if Alice creates two events X and Y that are forks (have the same own parent), and Bob receives can be seen. Later, when Bob receives Y, Bob's subsequent future events (Bob no longer sees X or Y since he identifies the fork; in some implementations, this An event can continue to see X and change to not see Y. Similarly stated, if a member can see an event, that viewing is "sticky" and the member's future events are , continues to see that event, but does not see a fork of that event. Using this, the consensus method and/or algorithm no longer needs to detect or react to a fork. (can x see y?) to a function (which witness can x see?).

いくつかの実装形態では、定義see、stronglySee、及びfork関数を削除することができ、コンセンサス方式及び/又はアルゴリズムは、lastSee、firstSee、stronglySeeP、stronglySeeS1、seeThruP、firstSelfWitnessS、及びfirstWitnessSの項を使用することができる(例えば、図13A~図13Eに示される関数を参照のこと)。これらの関数の各々は、イベントx及びメンバmを与えられ、メンバmによって作成された一意のイベントを返し、イベントxによって(何らかの方法で)見られる。S、S1、又はPで終わる名前のうちのいくつかは、返されたイベントが、(それぞれ)xの自身のラウンド(xの作成されたラウンド)、自身のラウンドから1を引いたもの、又は親ラウンドであることを示す。各関数について、そのような可視イベントがない場合、又は In some implementations, the definitions see, stronglySee, and fork functions may be removed, and the consensus method and/or algorithm may be changed to Use the term itnessS (see, eg, the functions shown in FIGS. 13A-13E). Each of these functions, given an event x and a member m, returns a unique event created by member m and seen (in some way) by event x. Some of the names ending in S, S1, or P indicate that the returned event is (respectively) x's own round (x's created round), own round minus 1, or Indicates that this is the parent round. For each function, if there is no such visible event, or

Figure 2023544422000003
である(イベントがないことを意味する)場合、その関数は
Figure 2023544422000003
(meaning there are no events), then the function is

Figure 2023544422000004
を返す。
Figure 2023544422000004
return it.

図13A~図13Eで使用される関数ビルダ表記では、満たされる「if」を複数の行が有する場合、最初の(上部の)行が使用される。また、論理OR(V)は短絡であると仮定されるため、pが真であり、qが未定義である場合(qの定義に無限再帰がある得る場合など)に、pVqは真として定義される。 In the function builder notation used in FIGS. 13A-13E, if multiple rows have an "if" that is satisfied, the first (top) row is used. Also, since the logical OR(V) is assumed to be short-circuited, pVq is defined as true if p is true and q is undefined (such as when there is infinite recursion in the definition of q). be done.

図13A~図13Eの例示的な定義は、効率的な様式で直接実装することができる。図13A及び図13Bの式には存在記号又は全称記号がほとんどないため、これらの算出は簡単である。効率的な実装形態は、関数lastSee、stronglySeeP、round、firstSelfWitnessS、及びfirstWitnessSをメモ化することを含む。図13Bの他の関数、parentRound、seeThru、stronglySeeS1、及びfirstSeeは、メモ化されない場合がある。各々は、イベント及びメンバの関数である。したがって、関数は、各メンバの配列の1つの要素を有する、各イベントに対する配列を記憶することによってメモ化され得る。図13A~図13Eの例示的な定義は、互いに再帰的に依存し、所与のイベントxに対して任意の所与の関数が呼び出されたときに、その関数がxに適用されるその関数の下にリストされた関数に依存せず、xの先祖にのみ依存するような順序でリストされている。 The example definitions of FIGS. 13A-13E can be directly implemented in an efficient manner. Since the equations of FIGS. 13A and 13B have few existence or universal symbols, their calculations are simple. An efficient implementation includes memoizing the functions lastSee, stronglySeeP, round, firstSelfWitnessS, and firstWitnessS. Other functions in FIG. 13B, parentRound, seeThru, stronglySeeS1, and firstSee, may not be memoized. Each is a function of events and members. Thus, a function can be memoized by storing an array for each event, with one element of the array for each member. The exemplary definitions of FIGS. 13A-13E are recursively dependent on each other, such that when any given function is called for a given event x, that function is applied to x. They are listed in such an order that they do not depend on the functions listed below, but only on the ancestors of x.

いくつかの場合、分散データベースの状態は、コンセンサスが達成された後に定義され得る。例えば、S(R)がラウンドRにおいて有名なウィットネスによって見ることができるイベントのセットである場合、最終的に、S(R)におけるイベントの全ては、既知の受信ラウンド及び受信タイムスタンプを有することになる。その時点で、S(R)におけるイベントのコンセンサス順序は既知であり、変化しない。この時点に達すると、メンバは、イベントの表現及びそれらの順序を算出及び/又は定義することができる。例えば、メンバは、S(R)におけるイベントのハッシュ値を、それらのイベントのコンセンサス順序に算出することができる。次に、メンバは、(そのメンバの秘密鍵を使用して)ハッシュ値にデジタル署名し、そのメンバが定義する次のイベントにハッシュ値を含めることができる。これは、変化しない所与の順序をS(R)内のイベントが有することをそのメンバが決定したことを、他のメンバに知らせるために使用することができる。少なくともM個のメンバ(又は任意の他の好適な数又は割合のメンバ)が、S(R)に対するハッシュ値に署名した(したがって、ハッシュ値によって表される順序に同意した)後、イベントのそのコンセンサスリストは、メンバの署名のリストとともに、コンセンサス順序がS(R)内のイベントに対して主張されたとおりであったことを証明するために使用され得る、単一ファイル(又は他のデータ構造)を形成することができる。いくつかの場合、イベントが(本明細書に説明される)分散データベースシステムの状態を更新するトランザクションを含む場合、ハッシュ値は、コンセンサス順序でS(R)内のイベントのトランザクションを適用した後の分散データベースシステムの状態のものであり得る。 In some cases, the state of a distributed database may be defined after consensus is achieved. For example, if S(R) is the set of events that can be seen by a well-known witness in round R, then eventually all of the events in S(R) have known reception rounds and reception timestamps. It turns out. At that point, the consensus order of events in S(R) is known and does not change. Once this point is reached, the member can calculate and/or define the representation of events and their order. For example, members can compute hash values of events in S(R) into a consensus order of those events. The member can then digitally sign the hash value (using the member's private key) and include the hash value in the next event that the member defines. This can be used to inform other members that they have determined that the events in S(R) have a given order that does not change. After at least M members (or any other suitable number or proportion of members) have signed the hash value for S(R) (and thus agreed to the order represented by the hash value), the A consensus list is a single file (or other data structure) that, along with a list of member signatures, can be used to prove that the consensus order was as claimed for events in S(R). ) can be formed. In some cases, if an event includes a transaction that updates the state of a distributed database system (as described herein), the hash value is It can be of the state of a distributed database system.

いくつかの場合、(上で説明されるような)Mは、総メンバの数の単なる分数、割合及び/又は値ではなく、各メンバに割り当てられた重み値に基づくことができる。そのような場合、各メンバは、分散データベースシステムにおけるその関心及び/又は影響に関連付けられたステークを有する。そのようなステークは、重み値であり得る。そのメンバによって定義される各イベントは、その定義メンバの重み値を有すると言うことができる。この場合、Mは、全てのメンバの総ステークの分数とすることができる。Mに依存するものとして上で説明されるイベントは、少なくともMのステーク合計を有するメンバのセットが同意したときに発生する。したがって、それらのステークに基づいて、特定のメンバは、システム及びコンセンサス順序がどのように導出されるかに対してより大きな影響を有することができる。いくつかの場合、イベントにおけるトランザクションは、1つ以上のメンバのステークを変更し、新しいメンバを追加し、かつ/又はメンバを削除することができる。そのようなトランザクションがRの受信ラウンドを有する場合は、受信ラウンドが算出された後、ラウンドRのウィットネスの後のイベントは、メンバの修正されたステーク及び修正されたリストを使用して、それらのラウンド番号及び他の情報を再算出する。ラウンドRのイベントが有名であるかどうかについての投票は、古いステーク及びメンバリストを使用するが、Rの後のラウンドについての投票は、新しいステーク及びメンバリストを使用する。コンセンサスを決定するために重み値を使用することに関する更なる詳細は、米国特許出願第15/387,048号として2016年12月21日に出願され、「Methods And Apparatus For A Distributed Database Within A Network」と題された、米国特許第9,646,029号に説明されており、その全体が参照により本明細書に組み込まれる。 In some cases, M (as described above) may be based on a weight value assigned to each member rather than just a fraction, percentage, and/or value of the total number of members. In such a case, each member has a stake associated with its interest and/or influence in the distributed database system. Such a stake may be a weight value. Each event defined by that member can be said to have the weight value of that defining member. In this case, M may be a fraction of the total stake of all members. The event described above as dependent on M occurs when a set of members with a total stake of at least M agrees. Therefore, based on their stake, certain members may have more influence over the system and how the consensus order is derived. In some cases, a transaction in an event may change the stake of one or more members, add a new member, and/or remove a member. If such a transaction has a receiving round of R, then after the receiving round has been calculated, the event after the witness of round R uses the modified stake and modified list of members to recalculate the round number and other information. Voting on whether the event in round R is famous uses the old stake and member list, but voting for rounds after R uses the new stake and member list. Further details regarding the use of weight values to determine consensus can be found in U.S. Patent Application No. 15/387,048, filed December 21, 2016, “Methods And Apparatus For A Distributed Database Within A Network No. 9,646,029, entitled ``No. 9,646,029,'' which is incorporated herein by reference in its entirety.

いくつかの場合、特定のメンバを「レイジーメンバ」として識別及び/又は指定することができる。そのような場合、レイジーメンバは、通常メンバ又は非レイジーメンバと同様のイベントを定義及び/又は作成することができる。加えて、レイジーメンバによって定義及び/又は作成されたイベントをハッシュグラフに含めることができ、そのようなイベントのコンセンサス順序を算出及び/又は識別することができる。ただし、レイジーメンバによって定義されるイベントのラウンド増分は、0である。したがって、レイジーメンバによって定義されるイベントのラウンド番号(又は作成されたラウンド)は、イベントの親のラウンド番号の最大値に等しい。同様に述べると、レイジーメンバによって定義されるイベントのラウンド増分は0であるので、レイジーメンバによって定義されるイベントのラウンド番号(又は作成されたラウンド)は、イベントの親のラウンド番号の最大値より大きくすることはできない。 In some cases, certain members may be identified and/or designated as "lazy members." In such cases, lazy members can define and/or create events similar to regular or non-lazy members. Additionally, events defined and/or created by lazy members can be included in the hash graph, and a consensus order of such events can be calculated and/or identified. However, the round increment for events defined by lazy members is zero. Therefore, the round number (or round created) of an event defined by a lazy member is equal to the maximum round number of the event's parent. Similarly stated, since the round increment of an event defined by a lazy member is 0, the round number (or created round) of an event defined by a lazy member is less than the maximum round number of the event's parent. You can't make it bigger.

更に、いくつかの場合、レイジーメンバによって定義されるイベントは、選挙に投票する資格がなく、レイジーメンバによって定義されるイベントは、ラウンドRの第1のイベント又はウィットネスになる資格がなく、かつ/又は別のイベントを強く見るために通常のメンバ若しくはレイジーメンバによって定義されるイベントの中間イベントとしてみなされない。したがって、レイジーメンバに課された制限は、ハッシュグラフによって実行される計算の低減をもたらす一方で、セキュリティ及びコンセンサス順序の完全性を依然として維持する。メンバは、任意の好適な基準に基づいて、レイジーメンバとして選択され得る。例えば、いくつかの場合、メンバは、各ラウンドで実行される決定論的擬似ランダム選択に基づいて、ラウンドの開始時に事前定義されて、信頼レベルに基づいて、ステークの量に基づいて、他のメンバの投票に基づいて、かつ/又はランダムに選択されて、レイジーメンバとして指定され得る。いくつかの場合、レイジーメンバとして指定されたメンバは、ラウンドごとに異なる可能性があり、いくつかの他の場合、レイジーメンバとして指定されたメンバは、異なるラウンドにわたって同じままである。いくつかの他の場合、メンバではなくイベントを「レイジー」イベントとして指定することができる。そのような場合、各ラウンドにおいて、メンバを選択する代わりにレイジーイベントが選択され得る。 Further, in some cases, the event defined by the lazy member is not eligible to vote in the election, the event defined by the lazy member is not eligible to be the first event or witness in round R, and / or not considered as an intermediate event of an event defined by a normal member or a lazy member in order to emphasize another event. Therefore, the restrictions placed on lazy members result in a reduction in the computations performed by the hash graph, while still maintaining security and consensus ordering integrity. Members may be selected as lazy members based on any suitable criteria. For example, in some cases members are predefined at the beginning of a round, based on a deterministic pseudo-random selection performed in each round, others based on confidence levels, others based on the amount of stake, and others based on the amount of stake. A member may be designated as a lazy member based on member voting and/or randomly selected. In some cases, the members designated as lazy members may be different from round to round, and in some other cases, the members designated as lazy members remain the same across different rounds. In some other cases, an event rather than a member may be designated as a "lazy" event. In such a case, in each round, a lazy event may be selected instead of selecting a member.

したがって、いくつかの場合、第1のメンバのプロセッサは、決定論的擬似ランダム関数に基づいて、メンバの第1のグループ(例えば、計算デバイス)と、メンバの第2のグループ(例えば、計算デバイス)とを定義することができる。メンバの第1のグループは、非レイジーメンバであり得、メンバの第2のグループは、レイジーメンバであり得る。いくつかの場合、メンバの第1のグループは、分散データベースのメンバ(例えば、計算デバイス)に関するメンバの第2のグループの絶対補集合である。第1のメンバ(又は第1のメンバのプロセッサ)は、第2のメンバ(例えば、計算デバイス)から、メンバのセット(例えば、計算デバイスのセット)によって定義されるイベントの第1のセットにリンクされたイベントを受信することができる。メンバのセットは、メンバの第1のグループからの少なくとも1つのメンバと、メンバの第2のグループからの少なくとも1つのメンバとを含む。プロセッサは、メンバの第1のグループからのメンバによって定義されたイベントの第1のセットからのイベントのパラメータ(例えば、ラウンド番号、ラウンド増分、投票、ウィットネスであることの指標、有名なウィットネスであることの指標など)の値を使用した、かつメンバの第2のグループからのメンバによって定義されたイベントの第1のセットからのイベントのパラメータの値を使用しない、(例えば、本明細書に説明される)コンセンサスプロトコルの結果として、イベントの第2のセットに関連付けられた順序を識別することができる。プロセッサは、イベントの第2のセットに関連付けられた順序に少なくとも部分的に基づいて、分散データベースのインスタンスにおいて示されるトランザクションのセットに関連付けられた順序を識別することができ、トランザクションのセットに関連付けられた順序を、分散データベースのインスタンスに記憶することができる。 Thus, in some cases, the first member's processor processes a first group of members (e.g., computing devices) and a second group of members (e.g., computing devices) based on a deterministic pseudo-random function. ) can be defined. A first group of members may be non-lazy members and a second group of members may be lazy members. In some cases, the first group of members is the absolute complement of the second group of members for the members (eg, computing devices) of the distributed database. A first member (or a processor of the first member) links from a second member (e.g., a computing device) to a first set of events defined by the set of members (e.g., a set of computing devices). events can be received. The set of members includes at least one member from a first group of members and at least one member from a second group of members. The processor determines the parameters (e.g., round number, round increment, vote, indicator of being a witness, famous witness) of the event from the first set of events defined by the member from the first group of members. (e.g., an indicator that the As a result of a consensus protocol (described in ), an order associated with the second set of events can be identified. The processor can identify an order associated with the set of transactions indicated in the instance of the distributed database based at least in part on the order associated with the second set of events; The ordered order can be stored in an instance of a distributed database.

前述の用語、定義、及びアルゴリズムは、図8~図13Eに説明される実施形態及び概念を例解するために使用される。図10A及び図10Bは、数学的形式で示されるコンセンサス方式及び/又はプロセスの第1の例示的な適用を例解する。図11A及び図11Bは、数学的形式で示されるコンセンサス方式及び/又はプロセスの第2の例示的な適用を例解し、図12A及び図12Bは、数学的形式で示されるコンセンサス方式及び/又はプロセスの第3の例示的な適用を例解し、図13A~図13Eは、数学的形式で示されるコンセンサス方式及び/又はプロセスの第4の例示的な適用を例解する。 The foregoing terms, definitions, and algorithms are used to illustrate the embodiments and concepts described in FIGS. 8-13E. 10A and 10B illustrate a first example application of a consensus scheme and/or process shown in mathematical form. 11A and 11B illustrate a second example application of a consensus scheme and/or process shown in mathematical form, and FIGS. 12A and 12B illustrate a second example application of a consensus scheme and/or process shown in mathematical form. Illustrating a third example application of the process, FIGS. 13A-13E illustrate a fourth example application of the consensus scheme and/or process shown in mathematical form.

図2では、データベース収束モジュール211及び通信モジュール212は、プロセッサ210内に実装されるものとして図2に示されている。いくつかの実施形態では、データベース収束モジュール211及び/又は通信モジュール212は、メモリ220内に実装することができる。いくつかの実施形態では、データベース収束モジュール211及び/又は通信モジュール212は、ハードウェアベース(例えば、ASIC、FPGAなど)であり得る。 In FIG. 2 , database convergence module 211 and communication module 212 are shown in FIG. 2 as being implemented within processor 210 . In some embodiments, database convergence module 211 and/or communication module 212 may be implemented within memory 220. In some embodiments, database convergence module 211 and/or communication module 212 may be hardware-based (eg, ASIC, FPGA, etc.).

(例えば、図1に関して本明細書に説明されるように)トランザクションは、分散データベース内のデータ及び/又は状態を変更することができるのと同じように、トランザクションは、分散データベースのメンバを追加、除去、及び/又は修正することによって、分散データベース(例えば、分散データベースを実装する計算デバイスのセット)のメンバシップを修正することもできる。いくつかの実装形態では、分散データベースのメンバは、分散データベースを実装する計算デバイスのセット(例えば、図1の計算デバイス110、120、130、140)に1つ以上の計算デバイスを追加及び/又はそれから1つ以上の計算デバイスを除去することによって、経時的に変化し得る。同様に述べると、分散データベースを実装する計算デバイスのセット110、120、130、140は、計算デバイスのセット110、120、130、140からの計算デバイスが計算デバイスのセット110、120、130、140から除去される、かつ/又は計算デバイスのセット110、120、130、140に追加されると、経時的に変化し得る。いくつかの場合、除去された計算デバイスは、後で分散データベースシステムに再接続することができる。 Just as transactions can modify data and/or state within a distributed database (e.g., as described herein with respect to FIG. 1), transactions can add members to a distributed database, Removal and/or modification may also modify the membership of a distributed database (eg, a set of computing devices implementing a distributed database). In some implementations, a member of a distributed database adds and/or It can be changed over time by removing one or more computing devices from it. Similarly stated, a set of computing devices 110, 120, 130, 140 that implements a distributed database is defined as a computing device from a set of computing devices 110, 120, 130, 140. may change over time as they are removed from and/or added to the set of computing devices 110, 120, 130, 140. In some cases, the removed computing device can be reconnected to the distributed database system at a later time.

アドレスブックは、任意の所与の時間に分散データベースのメンバ(すなわち、分散データベースを実装する計算デバイス)を追跡するために使用され得る。図14は、一実施形態による、分散データベースシステムに関連付けられたアドレスブック1400を例解する。アドレスブック1400は、図1の分散データベースシステム100内の計算デバイス110、120、130、140の各々に対するエントリを含む。具体的には、アドレスブック1400は、分散データベースを実装する計算デバイスのセット(図1に関して図示及び説明した計算デバイス110、120、130、140)の、公開鍵のセット(A、B、C及びD)を含むように定義されている。コンセンサスを決定するためにステークが使用される(例えば、デバイスのステークが、デバイスがコンセンサスプロセスに対して有する影響の量を示す)実装形態では、アドレスブック1400は、各計算デバイスに関連付けられたステークの量も含むことができる。 Address books may be used to keep track of the members of a distributed database (i.e., computing devices implementing the distributed database) at any given time. FIG. 14 illustrates an address book 1400 associated with a distributed database system, according to one embodiment. Address book 1400 includes an entry for each of computing devices 110, 120, 130, 140 in distributed database system 100 of FIG. Specifically, address book 1400 stores a set of public keys (A, B, C, and D). In implementations where stake is used to determine consensus (e.g., a device's stake indicates the amount of influence the device has on the consensus process), the address book 1400 includes a stake associated with each computing device. It can also include amounts of.

トランザクションが、分散データベースを実装する計算デバイスのセットから計算デバイスを追加、削除、及び/又は修正するとき、トランザクションは、アドレスブックを変更及び/又は更新することができる。例えば、分散データベースから計算デバイス140を除去するためのトランザクションが分散データベースに入力され、(例えば、分散データベースのコンセンサス順序内で)順序付けられた場合、トランザクションを実行することができ、計算デバイス140を分散データベースから除去することができる。このトランザクションに応答して、計算デバイス140のエントリを含まない新しいアドレスブックを定義することができる。別の例では、新しい計算デバイスを分散データベースに追加するトランザクションが分散データベースに入力され、(例えば、分散データベースのコンセンサス順序内で)順序付けられた場合、(例えば、公開鍵及び/又はステークの量を含む)エントリを有する新しいアドレスブックを、新しい計算デバイスのために定義することができる。更に別の例では、1つ以上の計算デバイスに関連付けられたステークの量を変更するトランザクションが分散データベースに入力され、順序付けられた場合、ステークの変更を反映する新しいアドレスブックを定義することができる。例えば、ステークが各計算デバイスによって保持される暗号通貨コインの量を反映する場合、トランザクションは、計算デバイス140が計算デバイス130に5つのコインを送金することを反映することができる。トランザクションが順序付けられ実行された後、計算デバイス140が現在70個のコインを有し、計算デバイス130が35個のコインを有することを反映して、新しいアドレスブックを定義することができる。 When a transaction adds, deletes, and/or modifies a computing device from a set of computing devices that implement a distributed database, the transaction may change and/or update the address book. For example, if a transaction to remove computing device 140 from a distributed database is entered into the distributed database and ordered (e.g., within the consensus order of the distributed database), the transaction can be executed and computing device 140 is Can be removed from the database. In response to this transaction, a new address book that does not include an entry for computing device 140 may be defined. In another example, if a transaction that adds a new computing device to a distributed database is entered into the distributed database and ordered (e.g., within the consensus order of the distributed database), A new address book with (including) entries can be defined for a new computing device. In yet another example, when a transaction that changes the amount of stake associated with one or more computing devices is entered into a distributed database and ordered, a new address book can be defined that reflects the change in stake. . For example, if stake reflects the amount of cryptocurrency coins held by each computing device, the transaction may reflect computing device 140 transferring five coins to computing device 130. After the transactions are ordered and executed, a new address book can be defined to reflect that computing device 140 currently has 70 coins and computing device 130 has 35 coins.

いくつかの実装形態では、コンセンサスプロトコルの各ラウンドは、新しいアドレスブックを有することができる(例えば、分散データベースを実装する各計算デバイスは、コンセンサスプロトコルの各ラウンドに対してそのアドレスブックを更新することができる)。具体的には、アドレスブック内の情報が(例えば、分散データベースを実装する計算デバイスを追加、除去、及び/又は修正するトランザクションを介して)変更されると、各計算デバイスは、そのアドレスブックを更新して、アドレスブックへの変更を行うトランザクションを反映することができる。そのような変更は、そのような変更を含むイベントがコンセンサスプロトコルを介して受信ラウンドに割り当てられた後に、ラウンドのアドレスブックに反映され得る。具体的には、ラウンドrのアドレスブックAは、r未満の受信ラウンドを有するイベントにおけるトランザクション(すなわち、r-1以下の受信ラウンドを有するイベントにおけるトランザクション)を反映することができる。同様に、rの受信ラウンドを有するイベントが識別されると、r+1未満の受信ラウンドを有するトランザクションを実装して、ラウンドr+1の新しいアドレスブックAr+1を定義することができる。したがって、そのような実装形態では、アドレスブックは、ラウンドごとに更新され得る。これにより、トランザクションがアドレスブックに迅速に影響を及ぼすことを保証することができる。 In some implementations, each round of the consensus protocol may have a new address book (e.g., each computing device implementing a distributed database may update its address book for each round of the consensus protocol). ). Specifically, when information in an address book changes (e.g., through transactions that add, remove, and/or modify computing devices that implement a distributed database), each computing device updates its address book to Can be updated to reflect transactions that make changes to the address book. Such changes may be reflected in the round's address book after the event containing such change is assigned to the receiving round via a consensus protocol. Specifically, the address book A r for round r may reflect transactions in events with less than r reception rounds (ie, transactions in events with r−1 or fewer reception rounds). Similarly, once an event with r reception rounds is identified, a transaction with less than r+1 reception rounds can be implemented to define a new address book A r+1 for round r+1 . Therefore, in such implementations, the address book may be updated every round. This can ensure that transactions impact the address book quickly.

いくつかの実装形態では、ラウンドrのアドレスブックAは、ラウンドごとに更新されないが、代わりに、rの受信ラウンドを有するイベントが識別された所定の数pのラウンド後に更新される(例えば、分散データベースを実装する各計算デバイスは、それに応じてそのアドレスブックを更新することができる)。例えば、そのような実装形態では、ラウンドrのアドレスブックAは、Ar-pのコピーであると定義され、次いで、r-p以下の受信ラウンドを有するイベント内の有効なトランザクションによって修正される。したがって、p=2の場合、ラウンドrのアドレスブックAは、r-2以下の受信ラウンドを有するイベント内のアドレスブックに影響を与えるトランザクションからの更新(例えば、分散データベースを実装する計算デバイスを追加、削除、及び/又は修正する)を含む。いくつかの実装形態では、pに対する任意の他の好適な値が使用され得る(例えば、3、4、5など)。これは、新しいアドレスブックがコンセンサスプロトコル内で使用される前にコンセンサストランザクションを処理するためのp-1ラウンドの持続時間を、(例えばバックグラウンドスレッドを使用して)計算デバイスに提供する。この追加の時間は、コンセンサスプロトコルにおける休止及び/又は遅延を回避することに役立つことができる。 In some implementations, the address book A for round r is not updated every round, but is instead updated after a predetermined number p rounds in which an event with r reception rounds is identified (e.g., Each computing device implementing a distributed database can update its address book accordingly). For example, in such an implementation, address book A r for round r is defined to be a copy of A r-p and then modified by a valid transaction in the event that has received rounds less than or equal to r-p. Ru. Thus, if p = 2, the address book A in round r will receive updates from transactions that affect the address book in events that have r-2 or fewer received rounds (e.g., a computing device implementing a distributed database). additions, deletions, and/or modifications). In some implementations, any other suitable value for p may be used (eg, 3, 4, 5, etc.). This provides the computing device (eg, using a background thread) with the duration of p-1 rounds to process the consensus transaction before the new address book is used within the consensus protocol. This additional time can help avoid pauses and/or delays in the consensus protocol.

いくつかの実装形態では、ラウンドrのアドレスブックAは、代わりに、アドレスブックへの以前の更新から所定の数pのラウンド後に更新される(例えば、分散データベースを実装する各計算デバイスは、それに応じてそのアドレスブックを更新することができる)。例えば、そのような実装形態では、ラウンドrのアドレスブックAは、pの倍数でない任意のラウンドのAr-1のコピーであると定義することができる。そうでない場合、アドレスブックAは、r-1以下の受信ラウンドを有するイベントにおけるトランザクションを反映する。同様に述べると、アドレスブックは、pラウンドごとに更新することができる。一例として、p=10である場合、Aは、10の倍数でない任意のラウンドrに対するAr-1の未修正のコピーとして定義することができる。そうではなく、rが10の倍数である場合、Aは、r-10からr-1の受信ラウンドを有するイベント内の有効なトランザクションによって修正されるAr-10のコピーである。いくつかの実装形態では、倍数pは、任意の好適な数(例えば、2、5、10、20など)であり得る。これにより、(本明細書で更に詳細に説明されるように)新しいアドレスブックが定義されるときに、イベントのラウンド番号(又は作成されたラウンド)の再算出をより少なくすることができる。具体的には、アドレスブックを更新する前に、アドレスブックへの変更の複数のラウンドをバッチ処理することにより、同じアドレスブックを使用して複数のラウンドのラウンド番号を算出及び再算出することを保証する。複数のラウンドに対して同じアドレスブックを使用することにより、アドレスブックが変化した後にイベントのラウンド番号(又は作成されたラウンド)を再算出する必要性を低減する。 In some implementations, the address book A for round r is instead updated a predetermined number p rounds after the previous update to the address book (e.g., each computing device implementing a distributed database (can update its address book accordingly). For example, in such an implementation, the address book A r of round r may be defined to be a copy of A r-1 of any round that is not a multiple of p. Otherwise, address book A r reflects transactions in events with less than or equal to r-1 reception rounds. Similarly stated, the address book can be updated every p rounds. As an example, if p=10, A r can be defined as the unmodified copy of A r-1 for any round r that is not a multiple of 10. Otherwise, if r is a multiple of 10, then A r is a copy of A r-10 modified by valid transactions in the event with r-10 to r-1 receive rounds. In some implementations, the multiple p can be any suitable number (eg, 2, 5, 10, 20, etc.). This allows for fewer recalculations of event round numbers (or created rounds) when a new address book is defined (as described in more detail herein). Specifically, you can calculate and recalculate round numbers for multiple rounds using the same address book by batching multiple rounds of changes to the address book before updating the address book. Guarantee. Using the same address book for multiple rounds reduces the need to recalculate an event's round number (or created round) after the address book changes.

いくつかの実装形態では、コンセンサスプロトコルは、アドレスブックへの以前の更新後に所定の数pのラウンドを待つこと、及びアドレスブックを更新する前にコンセンサスが達成された後に所定の数kのラウンドを待つこと、の両方を行うことができる。例えば、そのような実装形態では、ラウンドrのアドレスブックAは、pの倍数でない任意のラウンドのAr-1のコピーであると定義することができる。そうではなく、ラウンドがpの倍数である場合、アドレスブックAは、r-k以下の受信ラウンドを有するイベントにおけるトランザクションを反映することができる。一例として、p=10かつk=2である場合、Aは、10の倍数ではない任意のrに対するAr-1の未修正のコピーとして定義することができる。そうではなく、rが10の倍数である場合、Aは、r-11からr-2の受信ラウンドを有するイベント内の有効なトランザクションによって修正されるAr-11のコピーである。これは、新しいアドレスブックがコンセンサスプロトコル内で使用される前に、各計算デバイスがコンセンサストランザクションを処理するための追加の時間を(例えばバックグラウンドスレッドを使用して)提供するという利点とともに、アドレスブックに適用する前に複数のラウンドの変更をバッチ処理するという利点を提供することができる。 In some implementations, the consensus protocol waits a predetermined number p rounds after a previous update to the address book, and waits a predetermined number k rounds after consensus is achieved before updating the address book. You can do both. For example, in such an implementation, the address book A r of round r may be defined to be a copy of A r-1 of any round that is not a multiple of p. Otherwise, if the rounds are a multiple of p, the address book A r can reflect transactions in the event that have less than or equal to rk received rounds. As an example, if p=10 and k=2, A r can be defined as the unmodified copy of A r-1 for any r that is not a multiple of 10. Otherwise, if r is a multiple of 10, then A r is a copy of A r-11 modified by valid transactions in the event with r-11 to r-2 receive rounds. This has the advantage of providing additional time for each computing device to process consensus transactions (e.g. using a background thread) before the new address book is used within the consensus protocol. can offer the advantage of batching multiple rounds of changes before applying them.

ラウンドrにおいて有名なウィットネスについてコンセンサスに達した後、受信ラウンドrを有するイベントを識別することができ、新しいアドレスブックAr+1を(上で考察されたように)算出することができる。いくつかの実装形態では、各イベントは、新しいアドレスブックAr+1を使用して再算出された、作成されたラウンドを有することができる。これは、ラウンドr+1において、有名なウィットネスを識別するために行われる。したがって、各アドレスブックについて、及びそのアドレスブックに関連付けられたラウンドについて、イベントは、作成された異なるラウンドを有し得る。 After reaching a consensus on famous witnesses in round r, events with receiving rounds r can be identified and a new address book A r+1 can be computed (as discussed above). In some implementations, each event may have rounds created that are recalculated using the new address book A r+1 . This is done in round r+1 to identify famous witnesses. Thus, for each address book and round associated with that address book, the event may have different rounds created.

いくつかの実装形態では、イベントに対して再算出され作成されるラウンドの数を低減するために、いくつかのイベントを凍結されたものとして識別することができる。凍結されたイベントは、新しいアドレスブックが定義されるときに再算出される、作成されたラウンドを有しない。具体的には、イベントがラウンドr又はそれより前の任意の有名なウィットネスの先祖である場合、それは凍結されているとみなすことができ、そのイベントの作成されたラウンドは、後続のラウンドにおいて再算出されないか又は後続のアドレスブックを使用して再算出されない。一方、イベントがラウンドr又はそれより前の任意の有名なウィットネスの先祖でない場合、そのイベントの作成されたラウンドは、(ラウンドr+1のアドレスブックがラウンドrのアドレスブックから変更されている場合は)ラウンドr+1のアドレスブックAr+1を使用してラウンドr+1で再算出される。同様に、先に進めると、ラウンドr+1における有名なウィットネスが識別され、受信ラウンドr+1を有するイベントが識別された後、追加のイベントがラウンドr+1又はそれより前の有名なウィットネスの先祖である場合、追加のイベントが凍結される可能性がある。そのような凍結されたイベントは、ラウンドr+2において再算出されたそれらの作成されたラウンドを有しない。これは、コンセンサスプロトコルの将来のラウンドについて同様に継続することができる。 In some implementations, some events may be identified as frozen to reduce the number of rounds that are recalculated and created for the event. Frozen events do not have rounds created, which are recalculated when a new address book is defined. Specifically, if an event is an ancestor of any famous witness in round r or earlier, it can be considered frozen, and the created round of that event will not be used in subsequent rounds. Not recalculated or recalculated using subsequent address books. On the other hand, if the event is not an ancestor of any famous witness in round r or earlier, then the round in which the event was created is ) Recalculated in round r+1 using address book A r+1 of round r+1. Similarly, going forward, after the famous witness at round r+1 is identified and the event with receiving round r+1 is identified, additional events are ancestors of the famous witness from round r+1 or earlier. additional events may be frozen. Such frozen events do not have their created round recalculated in round r+2. This can continue for future rounds of the consensus protocol as well.

いくつかの実装形態では、再算出は、親ラウンドがr+2であるときに(強く見るのではなく)多数決を見る(又は識別する)ことと、親ラウンドがr+1であるときに(絶対多数決ではなく)ただ1つを見ることとの、2つのラウンドについて修正され得る。これは、待ち時間と計算複雑性との間のトレードオフを制御することができ、計算コストを増加させるが、コンセンサスを達成するための待ち時間を減少させる。いくつかの実装形態では、各イベントが複数の他の親イベントを有することを可能にするように、分散データベースを実装する各計算デバイスを多くの他の計算デバイスと実質的に同時に同期させることによって、待ち時間を低減することもできる。 In some implementations, the recalculation involves looking at (or identifying) a majority vote (rather than a strong one) when the parent round is r+2, and looking at (or identifying) a majority vote (rather than an absolute majority vote) when the parent round is r+1. ) can be fixed for two rounds, with only one viewing. This can control the trade-off between latency and computational complexity, increasing computational cost but decreasing latency to achieve consensus. In some implementations, by synchronizing each computing device that implements a distributed database with many other computing devices substantially simultaneously, such that each event can have multiple other parent events. , it is also possible to reduce waiting time.

図15は、一実施形態による、アドレスブックを更新する方法1500を例解するフローチャートである。方法1500は、分散データベースを実装する計算デバイスのセットからの計算デバイスのプロセッサによって実行することができる。方法1500は、1502において、分散データベースのためのアドレスブックを定義することを含む。いくつかの実装形態では、アドレスブックは、ネットワークを介して分散データベースを実装する計算デバイスのセットからの各計算デバイスの、識別子(例えば、公開鍵)及び/又は他の情報(例えば、ステーク値)を含む。 FIG. 15 is a flowchart illustrating a method 1500 of updating an address book, according to one embodiment. Method 1500 can be performed by a processor of a computing device from a set of computing devices that implements a distributed database. Method 1500 includes, at 1502, defining an address book for a distributed database. In some implementations, the address book includes an identifier (e.g., public key) and/or other information (e.g., stake value) of each computing device from a set of computing devices implementing a distributed database over a network. including.

1504において、アドレスブックを更新するためのトランザクションを含むイベントが受信される。例えば、イベントには、分散データベースを実装する計算デバイスのセットに計算デバイスを追加すること、分散データベースを実装する計算デバイスのセットから計算デバイスを除去すること、分散データベースを実装する計算デバイスのセットからの計算デバイスに関連付けられたステーク値を更新すること、及び/又は同様のことのためのトランザクションを含むことができる。 At 1504, an event is received that includes a transaction to update an address book. For example, events include adding a computing device to a set of computing devices implementing a distributed database, removing a computing device from a set of computing devices implementing a distributed database, and removing a computing device from a set of computing devices implementing a distributed database. transactions for updating the stake value associated with a computing device, and/or the like.

1506において、アドレスブックを使用する分散データベースのコンセンサスプロトコルに基づいて、イベントの受信ラウンドが算出される。例えば、本明細書に開示されるものなどの任意の好適なコンセンサスプロトコルを使用して、イベントの受信ラウンド(又は順序に関連付けられた属性)を算出することができる。 At 1506, a reception round for the event is calculated based on a distributed database consensus protocol using an address book. For example, any suitable consensus protocol, such as those disclosed herein, can be used to calculate the reception round (or attribute associated with the order) of an event.

1508において、トランザクションに基づいてアドレスブックを更新して、イベントの受信ラウンド又はアドレスブックへの以前の更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義する。上で考察されたように、いくつかの実装形態では、アドレスブックは、イベントの受信ラウンドの所定の数のラウンド後のトランザクションに基づいて、更新することができる。いくつかの実装形態では、アドレスブックは、アドレスブックへの以前の更新の所定の数のラウンドだけ更新され得る(例えば、ラウンドがpの倍数であるときに発生するアドレスブックへの更新)。 At 1508, the address book is updated based on the transaction to define an updated address book after a predetermined number of rounds of at least one of a round of receipt of events or previous updates to the address book. As discussed above, in some implementations, the address book may be updated based on transactions after a predetermined number of rounds of receipt of events. In some implementations, the address book may be updated for a predetermined number of rounds of previous updates to the address book (eg, updates to the address book that occur when rounds are a multiple of p).

いくつかの実装形態では、コンセンサスプロトコルは、コンセンサスプロトコルの各ラウンドについてのイベントのセット(例えば、有名なウィットネス)を識別するように構成される。各ラウンドについてのイベントのセットは、イベントのグループから各イベントの受信ラウンドを決定するために、コンセンサスプロトコルによって使用され得る。更に、アドレスブックを使用して、イベントのグループからの各イベントについての属性(例えば、作成されたラウンド)が算出され得る。属性は、イベントのグループからの各イベントが、更新されたアドレスブックが定義されているラウンドのイベントのセットからの少なくとも1つのイベントの先祖でないときに、更新されたアドレスブックを使用して再算出され得る。同様に、属性は、イベントのグループからの各イベントが、更新されたアドレスブックが定義されているラウンドのイベントのセットからの少なくとも1つのイベントの先祖であるときに、更新されたアドレスブックを使用して、イベントのグループからのそのイベントについて再算出されない。 In some implementations, the consensus protocol is configured to identify a set of events (eg, famous witnesses) for each round of the consensus protocol. The set of events for each round may be used by a consensus protocol to determine the round of reception of each event from the group of events. Additionally, using the address book, attributes (eg, rounds created) for each event from a group of events may be calculated. Attributes are recalculated using the updated address book when each event from the group of events is not an ancestor of at least one event from the set of events for the round in which the updated address book is defined. can be done. Similarly, the attribute uses the updated address book when each event from the group of events is an ancestor of at least one event from the set of events for the round in which the updated address book is defined. and will not be recalculated for that event from the group of events.

いくつかの実装形態では、イベントは、分散データベース内に、かつ/又はDAGの一部として無期限に保持される。いくつかの実装形態では、イベントは、古くなると破棄することができる。例えば、イベントが十分に古い場合、そのイベントはancient(古代の)として分類することができる。いくつかの実装形態では、計算デバイスは、任意選択的に、分散データベースのその計算デバイスのインスタンスからancientイベントを削除することができる。イベントが更に古い場合、イベントはexpired(期限切れの)として分類することができ、計算デバイスは、分散データベースのその計算デバイスのインスタンスからそのイベントを破棄する。分散データベースが、イベントがancientであるときまでに、イベントに関するコンセンサスに達していない場合(例えば、分散データベースがそのイベントの受信ラウンドを識別していない場合)、そのイベントはstale(古い)として分類することができる。そのような実装形態では、staleとして分類されたイベントには、受信ラウンド又はコンセンサスタイムスタンプが割り当てられず、コンセンサス順序の一部にならず、イベント内のトランザクションは処理されない。したがって、イベント内のトランザクションは、共有された状態又はアドレスブックに影響を及ぼさない。更に、イベントが期限切れになると、他のメンバ(分散データベースを実装する計算デバイス)との同期中にイベントがもはや送信されなくなる。しかしながら、いくつかの実装形態では、メンバは、同期中に古代のイベントを交換し続けて、遅れている可能性があるメンバ(例えば、遅れているそのようなメンバは、そのようなイベントをancientとして依然として考慮しない可能性がある)に、これらのイベントを依然として考慮させることができる。 In some implementations, events are retained indefinitely in a distributed database and/or as part of a DAG. In some implementations, events may be discarded when they become obsolete. For example, if an event is old enough, it can be classified as ancient. In some implementations, a computing device may optionally delete ancient events from instances of that computing device in a distributed database. If the event is older, the event can be classified as expired and the computing device discards the event from its instance of the distributed database. If the distributed database has not reached a consensus on an event by the time the event is ancient (e.g., the distributed database has not identified a round of reception for that event), classify the event as stale. be able to. In such implementations, events classified as stale are not assigned a reception round or consensus timestamp, do not become part of the consensus order, and transactions within the event are not processed. Therefore, transactions within the event do not affect the shared state or address book. Additionally, once an event expires, it will no longer be sent during synchronization with other members (computing devices implementing the distributed database). However, in some implementations, members continue to exchange ancient events during synchronization, such that members that may be lagging (e.g., such members that are lagging exchange such events with ancient ), these events can still be taken into account.

いくつかの場合、イベントは、その全ての親がDAG又はハッシュグラフにすでに存在する場合にのみ、DAG又はハッシュグラフに追加される。他の実装形態では、親がDAG又はハッシュグラフに存在しないが、その親がancient又はexpiredのいずれかである場合、イベントを依然としてDAG又はハッシュグラフに追加することができる。 In some cases, an event is only added to a DAG or hashgraph if all of its parents are already present in the DAG or hashgraph. In other implementations, an event can still be added to a DAG or hashgraph if the parent is not present in the DAG or hashgraph, but the parent is either ancient or expired.

いくつかの実装形態では、期限切れ及び/又は古代のイベントの閾値は、イベントが作成されてからancient又はexpiredになるまでのラウンドの数によって定義され得る。一例として、閾値は、expiredDuration>ancientDuration>0として定義することができる。ancientDuration及びexpiredDurationの値は、任意の好適な値であり得る。例えば、いくつかの実装形態では、ancientDuration=4及びexpiredDuration=8である。他の実装形態では、ancientDuration及び/又はexpiredDurationに対して任意の他の値が使用され得る。 In some implementations, an expired and/or ancient event threshold may be defined by the number of rounds from when an event is created until it becomes ancient or expired. As an example, a threshold may be defined as expiredDuration>ancientDuration>0. The values of ancientDuration and expiredDuration can be any suitable values. For example, in some implementations, ancientDuration=4 and expiredDuration=8. In other implementations, any other values for ancientDuration and/or expiredDuration may be used.

いくつかの実装形態では、各イベントは、そのイベントの親イベントの各々について主張された世代番号(又は世代)の指標を含むことができる。そのような実装形態では、イベントの世代番号は、イベントの親の主張された世代番号の最大値に1を加えたものであり得る。親を持たないイベントは、世代番号1を有することができる。 In some implementations, each event may include an indication of the generation number (or generations) claimed for each of that event's parent events. In such implementations, the event's generation number may be the maximum claimed generation number of the event's parent plus one. An event without a parent may have a generation number of 1.

分散データベース(又は分散データベースを実装する計算デバイス)、DAG、又はハッシュグラフが、特定の受信ラウンド(例えば、分散データベースが以前に受信ラウンドrに対するコンセンサスを有していなかった受信ラウンドr)を有するイベントに対するコンセンサスに達すると、ラウンドrの世代番号は、ラウンドrにおける有名なウィットネスであるイベントの最小世代番号とすることができる。いくつかの実装形態では、イベントxは、ancientDurationより少ないコンセンサス達成するために、イベントxが、直近のラウンドに等しいラウンドの世代番号未満である世代番号を有する場合、ancientとみなすことができる。同様に述べると、イベントxは、gen(x)<gen(r-ancientDuration)であり、式中、gen(x)は、イベントxの世代番号であり、gen(r-ancientDuration)は、コンセンサス-ancientDurationを達成するための直近のラウンドrから生じるラウンドの世代番号である場合、ancientとみなすことができる。同様に、いくつかの実装形態では、イベントxは、expiredDurationより少ないコンセンサス(又はgen(x)<gen(r-expiredDuration))を達成するために、イベントxが、直近のラウンドに等しいラウンドの世代番号未満である世代番号を有する場合、expiredとみなすことができる。 The event that a distributed database (or a computing device implementing a distributed database), DAG, or hash graph has a particular receive round (e.g., a receive round r for which the distributed database did not previously have consensus for receive round r) Once a consensus is reached for round r, the generation number for round r can be the lowest generation number of an event that is a famous witness in round r. In some implementations, event x may be considered ancient if event x has a generation number that is less than the generation number of a round equal to the most recent round in order to achieve a consensus of less than ancientDuration. Similarly stated, for event x, gen(x)<gen(r-ancientDuration), where gen(x) is the generation number of event x, and gen(r-ancientDuration) is the consensus- If it is the generation number of the round resulting from the most recent round r to achieve the ancientDuration, it can be considered as an ancient. Similarly, in some implementations, event If the generation number is less than the number, it can be considered as expired.

いくつかの実装形態では、ラウンドrのイベントのコアセットSが定義され得る。ラウンドrのイベントのコアセットは、ラウンドrでコンセンサスに達した直後の、凍結された、非古代の、非期限切れのイベントとして定義され得る。同様に述べると、ラウンドrのイベントのコアセットSは、ラウンドrにおける凍結されたウィットネスのセットであってよく、これにはラウンドr及び以前のラウンドにおけるそれらのウィットネスの先祖が伴い、それらの世代は、イベントが古代でも期限切れでもないように、十分に最近のものである。イベントのコアセットは、本明細書に説明される分散データベースシステムが非同期ビザンチン障害耐性(asynchronous byzantine fault tolerance、ABFT)特性を有し続けることを証明するのに有用であり得る。例えば、イベントがまだ破棄されておらず、アドレスブックがまだ変更されていないので、ラウンド1の基本ケースについてはコンセンサスを保証することができる。次いで、ラウンドrについてコンセンサスが真であり、全ての正直な(honest)メンバがラウンドr+1について同じイベントのコアセットS及び同じアドレスブックを有する場合、全てがラウンドr+1の同じコンセンサスに達し、r+1の同じイベントのコアセットSr+1及びコンセンサスイベント、並びにr+2のアドレスブックに同意する。したがって、誘導によってコンセンサスを証明することができる。 In some implementations, a core set S r of events for round r may be defined. The core set of events for round r may be defined as the frozen, non-ancient, non-expired events that have just reached consensus in round r. Similarly stated, the core set of events S r in round r may be the set of frozen witnesses in round r, with the ancestors of those witnesses in round r and previous rounds; Those generations are recent enough so that the event is neither ancient nor expired. The core set of events may be useful in demonstrating that the distributed database system described herein continues to have asynchronous byzantine fault tolerance (ABFT) properties. For example, consensus can be guaranteed for the base case of round 1 since the event has not yet been discarded and the address book has not yet been modified. Then, if consensus is true for round r and all honest members have the same core set of events S r and the same address book for round r+1, then all reach the same consensus for round r+1 and Agree to a core set of S r+1 and consensus events for the same event, and an address book for r+2. Consensus can therefore be proven by induction.

いくつかの実装形態では、新しいメンバ(計算デバイス)が分散データベースに加入する場合、かつ/又はメンバが接続解除された後に分散データベースに再接続する場合、そのメンバは、コンセンサスが取得された最近のラウンドrの時点で、別のメンバ(計算デバイス)から分散データベースに関連付けられた最新の情報及びイベントを受信することができる。いくつかの実装形態では、最新の情報は、分散データベースの、所定の数及び/又は割合(例えば、分散データベースにおけるメンバの1/3及び/又は総ステークの1/3)の現在のメンバ及び/又はステークによってデジタル署名された、分散データベースの状態であり得る。ラウンドrまでのコンセンサストランザクションの結果を反映するラウンドrの時点での署名された状態に加えて、新しい又は再接続しているメンバは、ハッシュグラフ、DAG、及び/又は分散データベースに関する追加の情報を取得することができる。例えば、新しい又は再接続しているメンバは、別のメンバから、rがコンセンサスを有する最新のラウンドである時点での、ラウンドrのコアセットS内のイベント、ラウンドrのコアセットS内のイベントのハッシュ値、及び/又は各非古代ラウンドにおける一意の有名なウィットネスの最小世代を受信することができる。この情報が与えられると、新しい又は再接続しているメンバは、ハッシュグラフ、DAG、及び/又は分散データベースに加入又は再加入することができる。 In some implementations, when a new member (computing device) joins a distributed database and/or when a member reconnects to a distributed database after being disconnected, that member At the time of round r, the latest information and events associated with the distributed database can be received from another member (computing device). In some implementations, the current information includes a predetermined number and/or percentage (e.g., 1/3 of the members and/or 1/3 of the total stake in the distributed database) of current members and/or of the distributed database. Or it could be the state of a distributed database, digitally signed by the stake. In addition to the signed state as of round r, which reflects the results of consensus transactions up to round r, new or reconnecting members may have additional information about the hashgraph, DAG, and/or distributed database. can be obtained. For example, a new or reconnecting member receives an event from another member in the core set S r of round r at the time r is the most recent round with consensus, in the core set S r of round r. and/or a minimum generation of unique famous witnesses in each non-ancient round. Given this information, new or reconnecting members can join or rejoin the hashgraph, DAG, and/or distributed database.

いくつかの実装形態では、可能であれば、再接続しているメンバは、それらのイベント並びに/又はそれらのハッシュグラフ、DAG及び/若しくは分散データベースのインスタンスの状態を、ハッシュグラフ、DAG及び/又は分散データベースをリブート前又は退去する前に、メモリに書き込むことができる。次いで、再接続しているメンバは、リブート後、並びに/又はハッシュグラフ、DAG及び/若しくは分散データベースに再接続するときに、イベント及び/又は状態を読み出すことができる。これにより、リブート後、並びに/又はメンバがハッシュグラフ、DAG、及び/若しくは分散データベースに再接続及び/若しくは再加入しているときに、同期のための帯域幅を節約することができるが、必須ではない。 In some implementations, if possible, reconnecting members report their events and/or the state of their hashgraphs, DAGs and/or distributed database instances to A distributed database can be written to memory before being rebooted or retired. The reconnecting member can then retrieve the events and/or state after rebooting and/or when reconnecting to the hashgraph, DAG, and/or distributed database. This can save bandwidth for synchronization after reboots and/or when members are reconnecting and/or rejoining hashgraphs, DAGs, and/or distributed databases, but is not required. isn't it.

一例として、メンバ計算デバイスAliceは(計算デバイスAliceにおけるプロセッサを使用して)、ラウンドrまでのラウンド及びラウンドrを含むラウンドについて、分散データベースの有名なウィットネスを決定及び/又は識別するために、分散データベースのAliceのインスタンスにおけるDAG及び/又はハッシュグラフを使用することができる。次に、Aliceは、r以下の受信ラウンドを有するイベントのコンセンサス順序を算出することができる。コンセンサス順序を使用して、Aliceは、イベント内のトランザクションをコンセンサス順序で処理して、分散データベースの状態を決定することができる。Aliceは、分散データベースの状態のハッシュ値を算出し、状態のハッシュ値を含むトランザクションを有する新しいイベントを定義して送信することができる。Aliceは、Aliceの秘密鍵を使用して、このイベント及び/又はトランザクションにデジタル署名することができる。次いで、Aliceは、分散データベースの状態が、分散データベースの、所定の数及び/又は割合(例えば、分散データベースにおけるメンバの少なくとも1/3及び/又は総ステークの1/3)の現在のメンバ及び/又はステークによってデジタル署名されるように、この状態に一致する分散データベースの他のメンバからデジタル署名を収集することができる。 As an example, member computing device Alice (using a processor in computing device Alice) determines and/or identifies well-known witnesses of the distributed database for rounds up to and including round r: DAGs and/or hash graphs in Alice's instance of a distributed database can be used. Alice can then calculate the consensus order of events with r or fewer reception rounds. Using consensus order, Alice can process transactions within an event in consensus order to determine the state of the distributed database. Alice can calculate the hash value of the state of the distributed database and define and send a new event with a transaction containing the hash value of the state. Alice can digitally sign this event and/or transaction using Alice's private key. Alice then determines that the state of the distributed database is such that a predetermined number and/or percentage (e.g., at least 1/3 of the members and/or 1/3 of the total stake in the distributed database) of current members and/or Or digital signatures can be collected from other members of the distributed database that match this state, as digitally signed by the stake.

この例では、計算デバイスBobが(例えば、イベントにおけるトランザクションを介してアドレスブックに追加されることによって)ネットワークに加入する(又は再接続する)場合、Aliceは、ラウンドrの署名された状態(例えば、分散データベースの、所定の数及び/又は割合の現在のメンバ及び/又はステークによってデジタル署名されたラウンドrの状態)をBobに送信することができる。次いで、Bobは、分散データベースの他のメンバとの同期を開始することができる。具体的には、他のメンバとの同期を通してイベントを受信することができる。Bobは、最初に、古代ではないが、その親が(ラウンドrの終了の時点での古代の定義により)古代である、イベントを受け入れることができる。次いで、Bobは、その親が古代であるか又はBobが受信したより古いイベントの中にある、イベントを受け入れることができる。これらのイベントを使用して、Bobは、DAGの構築及び/又は定義を開始することができる。これは、Bobが現在までのイベントを受信するまで継続することができ、その時点で、Bobはキャッチアップされ、完全な参加メンバになることができる。 In this example, if the computing device Bob joins (or reconnects) the network (e.g., by being added to the address book via a transaction in the event), Alice will receive the signed state of round r (e.g. , the state of round r digitally signed by a predetermined number and/or percentage of current members and/or stakes of the distributed database) can be sent to Bob. Bob can then initiate synchronization with other members of the distributed database. Specifically, events can be received through synchronization with other members. Bob can initially accept an event that is not ancient, but whose parent is ancient (by the definition of ancient at the end of round r). Bob can then accept events whose parent is ancient or is among older events that Bob has received. Using these events, Bob can begin building and/or defining a DAG. This can continue until Bob receives the events to date, at which point he can catch up and become a full participating member.

参加メンバとして、Bobは、Bobが今後受信するイベントの受信ラウンドを算出することができる。(本明細書で考察されるように)異なるラウンドに対して異なるアドレスブックが使用されるので、Bobは、アドレスブックAr+1を使用してイベントの各々の受信ラウンドを単純に算出することはできない。したがって、いくつかの実装形態では、署名された状態は、S内の各イベントに対して作成されたラウンドを伴ってS内の各イベントとともに、Bobを含むことができ、かつ/又は(Aliceから)Bobに送信することができる。次いで、Bobは、S内の各イベントに対して作成されたコンセンサスラウンドを知る。次いで、この情報を使用して、Bobは、ラウンドr-1及び今後のラウンドにおけるイベントについて作成されたコンセンサスラウンドを算出することができる。r-1の前に作成されたイベントを有するイベントの場合、Bobは、作成されたラウンドを知らないが、これらのイベントは、ラウンドr+1以降の有名なウィットネスの算出には使用されないので、問題にならない。 As a participating member, Bob can calculate the reception rounds of events that Bob will receive in the future. Since different address books are used for different rounds (as discussed herein), Bob cannot simply calculate the reception round of each of the events using the address book A r+1. . Thus, in some implementations, the signed state may include Bob, with each event in S r with a round created for each event in S r , and/or ( (from Alice) to Bob. Bob then knows the consensus round created for each event in S r . Using this information, Bob can then calculate a consensus round created for events in round r-1 and future rounds. For events with events created before r-1, Bob does not know the round in which they were created, but these events are not used in calculating the famous witness after round r+1, so there is no problem. do not become.

内の各イベントをBobに送信するものとして上で説明されるが、いくつかの実装形態では、両方の親イベントの作成されたラウンドよりも大きい作成されたラウンドを持つ、Sr内のイベントのみが、署名された状態とともに、加入する(又は再接続する)メンバ(Bobなど)に送信される。これにより、他のイベントの作成されたラウンドが、ボブによって、最も高い作成されたラウンドを持つ親イベントからの作成されたラウンドをコピーすることによって再算出されるのに十分な情報が提供される。 Although described above as sending each event in Sr to Bob, in some implementations, each event in Sr that has a created round that is greater than the created round of both parent events Only the signed state is sent to the joining (or reconnecting) member (such as Bob). This provides enough information for other events' created rounds to be recalculated by Bob by copying the created rounds from the parent event with the highest created rounds. .

いくつかの実装形態では、署名された状態とともに送信されるものとして上で考察された、S内の各イベントのハッシュ値は、イベント自体ではなく、署名された状態とともに送信される。したがって、そのような実装形態では、状態は、ハッシュ値の3つのリスト、すなわち、親と、ラウンドr、r-1、及びr-2との両方において作成された、作成されたラウンドよりも大きい作成されたラウンドを有するS内のイベントのハッシュ値を含む、かつ/又はそれとともに送信される。そのような実装形態では、再接続時又は新たな接続時に、Bobは、ハッシュ値が署名された状態とともに記憶され、かつ/又は署名された状態とともに送信されるイベントをBobが受信するまで、他のメンバと同期することができる。具体的には、Bobは、Bobが受信する各イベントについてハッシュ値を算出し、かつそのハッシュ値をBobが状態とともに受信したハッシュ値と比較することによって、同期中にそのようなイベントを識別することができる。次に、Bobは、適切な作成されたラウンドを、状態内の及び/又は状態とともに送信されたハッシュ値を有する、1つのイベントの先祖と、状態内の及び/又は状態とともに送信されたハッシュ値を有する、別のイベントの子孫との両方である任意のイベントに割り当てることができる。Bobは、作成されたラウンドの所定の値(例えば、-∞)を、Bobが親イベントを有していない、任意の他のイベントに割り当てることもできる。この情報に基づいて、Bobは、DAGを定義することができ、Bobは、アドレスブックAr+1を使用して、上で説明されるようにBobが受信する他のイベントの作成されたラウンドを算出することができる。次に、Bobは、更なるラウンドがコンセンサスに達し、Bobが他のメンバとの同期を介して更なるイベントを受信すると、通常の参加メンバとしてそこから継続することができる。 In some implementations, the hash value of each event in Sr , discussed above as being sent with the signed state, is sent with the signed state rather than the event itself. Therefore, in such implementations, the state is larger than the created round, created in both the parent and rounds r, r-1, and r-2. Contains and/or is sent with the hash value of the event in Sr with the created round. In such implementations, upon reconnection or a new connection, Bob stores the hash value with the signed state and/or the other party until Bob receives an event that is sent with the signed state. can be synchronized with other members. Specifically, Bob identifies such events during synchronization by computing a hash value for each event that Bob receives and comparing the hash value to the hash value that Bob received with the state. be able to. Bob then creates the appropriate created round with the ancestor of one event and the hash value sent in and/or with the state. can be assigned to any event that is both a descendant of another event and a descendant of another event. Bob can also assign the predetermined value (eg, -∞) of the created round to any other event for which Bob does not have a parent event. Based on this information, Bob can define a DAG, and Bob uses the address book A r+1 to calculate the created rounds of other events that Bob receives as described above. can do. Bob can then continue from there as a normal participating member once further rounds reach consensus and Bob receives further events via synchronization with other members.

図16は、計算デバイスが分散データベースに接続及び/又は加入する方法1600を例解するフローチャートである。方法1600は、計算デバイスのプロセッサによって実行することができる。方法1600は、1602において、ネットワークを介して、分散データベースを実装する計算デバイスのセットに、かつ分散データベースを実装するノードとして、接続することを含む。例えば、計算デバイスは、分散データベースのアドレスブックに追加されることによって、メンバ及び/又はノードとして分散データベースに加入することができる。これは、(本明細書に説明されるように)分散データベースのコンセンサスプロトコルを使用して順序付けられたイベント内のトランザクションを使用して行うことができる。 FIG. 16 is a flowchart illustrating a method 1600 for a computing device to connect to and/or subscribe to a distributed database. Method 1600 can be performed by a processor of a computing device. The method 1600 includes connecting, at 1602, via a network to a set of computing devices implementing a distributed database and as nodes implementing a distributed database. For example, a computing device can join a distributed database as a member and/or node by being added to the distributed database's address book. This can be done using transactions in ordered events using a distributed database consensus protocol (as described herein).

1604において、コンセンサスプロトコルの完了したラウンドに関連付けられた分散データベースの状態が、計算デバイスのセットからの計算デバイスから受信される。いくつかの実装形態では、状態は、分散データベースの、所定の数及び/又は割合(例えば、分散データベースにおけるメンバの少なくとも1/3及び/又は総ステークの1/3)の現在のメンバ及び/又はステークによってデジタル署名され得る。状態は、所与のラウンドrの時点での分散データベースの状態であり得る(例えば、rの受信ラウンド又は前に実行及び/若しくは処理されたラウンドを有するイベントに含まれるトランザクションを有する)。いくつかの実装形態では、状態は、イベントのコアセットからの各イベントのラウンド識別子とともに、完了したラウンドに関連付けられたイベントのコアセットの指標(例えば、イベントのコアセットからの各イベントのハッシュ値)を含むか、又はそれとともに送信される。いくつかの実装形態では、イベントのコアセットは、完了したラウンドの以前の所定の数のラウンドである世代を有する(例えば、期限切れ及び/又は古代である)イベントを含まない。 At 1604, a state of a distributed database associated with a completed round of a consensus protocol is received from a computing device from the set of computing devices. In some implementations, the state includes a predetermined number and/or percentage (e.g., at least 1/3 of the members and/or 1/3 of the total stake in the distributed database) of current members and/or Can be digitally signed by Stake. The state may be the state of the distributed database as of a given round r (eg, with transactions included in an event having r received rounds or previous rounds executed and/or processed). In some implementations, the state includes a round identifier for each event from the core set of events, as well as an index of the core set of events associated with the completed round (e.g., a hash value for each event from the core set of events). ) or transmitted together with it. In some implementations, the core set of events does not include events that have a generation that is a predetermined number of rounds prior to the completed round (eg, is expired and/or ancient).

1606において、状態に関連付けられたイベントのセットが、計算デバイスのセットから受信される。イベントのセットは、計算デバイスのセットからの他の計算デバイスとの同期に基づいて受信され得る。 At 1606, a set of events associated with a condition is received from a set of computing devices. The set of events may be received based on synchronization with other computing devices from the set of computing devices.

1608において、イベントのコアセットと、イベントのコアセットからの各イベントに対するラウンド識別子と、に基づいて、イベントのセットからの各イベントについての属性のセットが算出される。例えば、コンセンサスプロトコル(例えば、作成されたラウンド、各ラウンドの有名なウィットネスなど)に関して本明細書に説明される属性は、イベントのセットからの各イベントについて算出することができる。 At 1608, a set of attributes for each event from the set of events is computed based on the core set of events and the round identifier for each event from the core set of events. For example, the attributes described herein for a consensus protocol (eg, rounds created, famous witnesses for each round, etc.) can be calculated for each event from a set of events.

1610において、イベントのセットと、イベントのセットについての属性のセットと、に基づいて、有向非巡回グラフ(DAG)が構築され、1612において、DAGを使用して、コンセンサスプロトコルの次のラウンドに関連付けられたイベントの順序が算出される。分散データベースに接続及び/又は加入する計算デバイスは、完全に機能する、最新のメンバとして、機能し続けることができる。 At 1610, a directed acyclic graph (DAG) is constructed based on the set of events and the set of attributes for the set of events, and at 1612 the DAG is used for the next round of the consensus protocol. The order of associated events is calculated. Computing devices that connect and/or subscribe to the distributed database can continue to function as fully functional, up-to-date members.

いくつかの場合、分散データベース(例えば、図1に関して図示及び説明される)は、暗号通貨を実装するために使用することができる。そのような場合、各分散データベースインスタンス114、124、134、144は、暗号通貨を記憶するために1つ以上のウォレットデータ構造(本明細書ではウォレットとも呼ばれる)を定義することができる。いくつかの場合、分散データベースに関連付けられていないユーザ(例えば、分散データベースのメンバではない計算デバイス)も、そのようなウォレットを作成及び/又は定義することができる。ウォレットデータ構造は、鍵ペア(公開鍵及び秘密鍵)を含むことができる。いくつかの場合、ウォレットの鍵ペアは、そのウォレットを生じさせる計算デバイスによって生成され得る。例えば、Aliceがウォレット(W、K)を定義し、Wが公開鍵(ウォレットの識別子のように振る舞い得る)であり、Kが秘密鍵である場合、Aliceは、分散データベースの残りのインスタンスにWを(例えば、イベントにおいて)公開することができるが、分散データベースの他のインスタンス(又はそれらのユーザ)が、ウォレットWがAliceに関連付けられていることを識別することができないように、Aliceの識別情報を匿名に保つ。 In some cases, distributed databases (eg, as illustrated and described with respect to FIG. 1) can be used to implement cryptocurrencies. In such a case, each distributed database instance 114, 124, 134, 144 may define one or more wallet data structures (also referred to herein as wallets) for storing cryptocurrencies. In some cases, users not associated with the distributed database (eg, computing devices that are not members of the distributed database) may also create and/or define such wallets. A wallet data structure may include a key pair (public key and private key). In some cases, a wallet's key pair may be generated by the computing device that spawns the wallet. For example, if Alice defines a wallet (W, K), where W is the public key (which can act like an identifier for the wallet) and K is the private key, then Alice can write W to the rest of the instances of the distributed database. can be made public (e.g., in an event), but Alice's identity is such that other instances of the distributed database (or their users) cannot identify that the wallet Keep your information anonymous.

図7は、一実施形態による、イベントを同期させる2つの計算デバイスの信号フロー図を例解する。具体的には、いくつかの実施形態では、分散データベースインスタンス703及び803は、収束を取得するためにイベントを交換することができる。計算デバイス700は、計算デバイス800との関係に基づいて、計算デバイス700への近接度に基づいて、計算デバイス700に関連付けられた順序付けられたリストに基づいて、及び/又は同様のものに基づいて、ランダムに計算デバイス700と同期することを選択することができる。いくつかの実施形態では、計算デバイス800は、分散データベースシステムに属する計算デバイスのセットから計算デバイス700によって選択され得るので、計算デバイス700は、続けて複数回計算デバイス800を選択することができるか、又はしばらくの間計算デバイス800を選択しない場合がある。他の実施形態では、以前に選択された計算デバイスの指標を計算デバイス700で記憶することができる。そのような実施形態では、計算デバイス700は、計算デバイス800を再び選択することができるようになる前に、所定の数の選択を待つことができる。上で説明したように、分散データベースインスタンス703及び803は、それぞれ、計算デバイス700のメモリ及び計算デバイス800のメモリにおいて実装することができる。 FIG. 7 illustrates a signal flow diagram of two computing devices synchronizing events, according to one embodiment. Specifically, in some embodiments, distributed database instances 703 and 803 may exchange events to obtain convergence. Computing device 700 may be configured based on relationship to computing device 800, based on proximity to computing device 700, based on an ordered list associated with computing device 700, and/or the like. , may randomly choose to synchronize with computing device 700. In some embodiments, computing device 800 may be selected by computing device 700 from a set of computing devices belonging to a distributed database system, such that computing device 700 may select computing device 800 multiple times in succession. , or may not select computing device 800 for some time. In other embodiments, previously selected computing device metrics may be stored at computing device 700. In such embodiments, computing device 700 may wait a predetermined number of selections before being able to select computing device 800 again. As discussed above, distributed database instances 703 and 803 may be implemented in memory of computing device 700 and memory of computing device 800, respectively.

いくつかの実装形態では、計算デバイス700は、一度に実行される複数のスレッドを有することができ、各スレッドは別のメンバと同期する。したがって、計算デバイス700は、計算デバイス800に加えて他の計算デバイス(図7には図示せず)と同期することができる。いくつかの場合、計算デバイス700は、初回又は最初に各スレッドのための接続を確立し、その後、ハートビートメッセージを周期的に送信する(例えば、ハートビートを1秒間に2回送信する)ことによって、各接続をアライブ又はオープンに維持することができる。したがって、いくつかの場合、計算デバイス700は、計算デバイスが同期のために別のメンバ又は計算デバイスとの接続を確立するたびに、転送レイヤセキュリティ(Transfer Layer Security、TLS)プロトコル(例えば、記録プロトコル及びハンドシェイクプロトコル)によって別様に引き起こされる同期待ち時間又は遅延を防止することができる。他のメンバ又は計算デバイスとの接続(接続のプールとして含む)を確立及び維持することに関する更なる詳細は、2018年7月11日に米国特許出願第16/032,652号として出願され、「Methods and Apparatus for Efficiently Implementing a Distributed Database within a Network」と題された米国特許第10,375,037号に見出すことができ、その全体が参照により本明細書に組み込まれる。 In some implementations, computing device 700 can have multiple threads running at once, with each thread synchronizing with another member. Accordingly, computing device 700 may be synchronized with other computing devices (not shown in FIG. 7) in addition to computing device 800. In some cases, the computing device 700 establishes a connection for each thread for the first time or initially and then periodically sends heartbeat messages (e.g., sends heartbeats twice per second). allows each connection to be kept alive or open. Accordingly, in some cases, the computing device 700 uses a Transfer Layer Security (TLS) protocol (e.g., a recording protocol) whenever the computing device establishes a connection with another member or computing device for synchronization. Synchronization latencies or delays that would otherwise be caused by (and handshake protocols) can be prevented. Further details regarding establishing and maintaining connections (including as a pool of connections) with other members or computing devices are disclosed in U.S. patent application Ser. No. 10,375,037 entitled "Methods and Apparatus for Efficiently Implementing a Distributed Database within a Network," the entirety of which is incorporated by reference herein Incorporated into the specification.

図3~図6は、一実施形態によるハッシュグラフの例を例解する。5つのメンバが存在し、その各々は、濃い垂直線によって表される。各円は、イベントを表す。イベントから下に向かう2本の線は、前の2つのイベントのハッシュを表す。この例における全てのイベントは、各メンバの第1のイベントを除いて、下に向かう2本の線(同じメンバへの1本の濃い線及び別のメンバへの1本の薄い線)を有する。時間は、上に向かって進む。図3~図6において、分散データベースの計算デバイスは、Alice、Bob、Carol、Dave、及びEdとして示される。そのような指標は、図1に関して図示及び説明される計算デバイス110、120、130、及び140と構造的及び機能的に同様の計算デバイスを指すことを理解されたい。以下の段落は、分散データベースを実装するための例示的なシステムを含む。実施例のいずれも、以下に列挙されるか、又は本明細書に別様に説明される他の実施例、デバイス、方法、及び/又はシステムと組み合わせることができることを理解されたい。 3-6 illustrate example hash graphs according to one embodiment. There are five members, each represented by a dark vertical line. Each circle represents an event. The two lines going down from the event represent the hash of the previous two events. All events in this example have two lines going down (one dark line to the same member and one light line to another member) except for the first event on each member. . Time moves upwards. In FIGS. 3-6, the computing devices of the distributed database are shown as Alice, Bob, Carol, Dave, and Ed. It is to be understood that such indicia refer to computing devices that are structurally and functionally similar to computing devices 110, 120, 130, and 140 illustrated and described with respect to FIG. The following paragraphs include example systems for implementing distributed databases. It is to be understood that any of the embodiments can be combined with other embodiments, devices, methods, and/or systems listed below or otherwise described herein.

例示的なシステム1:計算デバイス700がAliceと呼ばれ、計算デバイス800がBobと呼ばれる場合、それらの間の同期は、図7に例解することができる。AliceとBobとの間の同期は、例えば、以下のとおりである。
-Aliceは、分散データベース703に記憶されたイベントをBobに送信する。
-Bobは、以下を含む新しいイベントを作成及び/又は定義する。
--Bobが作成及び/又は定義した最後のイベントのハッシュ
--Aliceが作成及び/又は定義した最後のイベントのハッシュ
--上記のBobによるデジタル署名
-Bobは、分散データベース803に記憶されたイベントをAliceに送信する。
-Aliceは新しいイベントを作成及び/又は定義する。
-AliceはBobにそのイベントを送信する。
-Aliceは、ハッシュグラフの関数として、イベントの全順序を算出する
-Bobは、ハッシュグラフの関数として、イベントの全順序を算出する
Exemplary System 1: If computing device 700 is called Alice and computing device 800 is called Bob, the synchronization between them can be illustrated in FIG. The synchronization between Alice and Bob is, for example, as follows.
-Alice sends the event stored in the distributed database 703 to Bob.
- Bob creates and/or defines a new event that includes:
--Hash of the last event created and/or defined by Bob --Hash of the last event created and/or defined by Alice --Digital signature by Bob as described above --Bob identifies the event stored in the distributed database 803 to Alice.
- Alice creates and/or defines a new event.
-Alice sends the event to Bob.
- Alice calculates the total order of events as a function of the hash graph - Bob calculates the total order of events as a function of the hash graph

任意の所与の時間に、メンバは、各イベントを作成及び/又は定義した計算デバイス及び/又は分散データベースインスタンスに関連付けられた識別子とともに、これまでに受信されたイベントを記憶することができる。各イベントは、初期イベント(親ハッシュを有しない)と、新しい各メンバ(単一の親イベントハッシュを有し、それらを加入させた既存のメンバのイベントを表す)に対する第1のイベントとを除いて、先の2つのイベントのハッシュを含む。このイベントのセットを表す図を描くことができる。それは、各メンバに対する垂直線と、そのメンバによって作成及び/又は定義された各イベントに対するその線上のドット又は円とを示すことができる。イベント(より高いドット)が先のイベント(より低いドット)のハッシュを含むときはいつでも、2つのドット間に斜線が引かれる。イベントは、そのイベントがそのイベントのハッシュを介して(直接的に又は中間イベントを通じて)他のイベントを参照することができる場合、別のイベントにリンクされていると言うことができる。 At any given time, the member may store previously received events along with an identifier associated with the computing device and/or distributed database instance that created and/or defined each event. Each event except the initial event (which has no parent hash) and the first event for each new member (which has a single parent event hash and represents the event of the existing member that joined them) and contains hashes of the previous two events. We can draw a diagram to represent this set of events. It may show a vertical line for each member and a dot or circle on that line for each event created and/or defined by that member. Whenever an event (higher dot) contains a hash of a previous event (lower dot), a diagonal line is drawn between the two dots. An event can be said to be linked to another event if that event can refer to the other event via the event's hash (directly or through intermediate events).

例えば、図3は、ハッシュグラフ600の一例を例解する。イベント602は、Carolとの同期後の結果として、Bobによって作成及び/又は定義される。イベント602は、イベント604(Bobによって作成及び/又は定義された以前のイベント)のハッシュと、イベント606(Carolによって作成及び/又は定義された以前のイベント)のハッシュとを含む。いくつかの実施形態では、例えば、イベント602内に含まれるイベント604のハッシュは、その直近の先祖イベントであるイベント608及び610へのポインタを含む。したがって、Bobは、イベント602を使用してイベント608及び610を参照し、前のイベントへのポインタを使用してハッシュグラフを再構成することができる。いくつかの場合、イベント602は、ハッシュグラフ600内の他のイベントにリンクされていると言うことができる。なぜなら、イベント602は、ハッシュグラフ600内のイベントの各々を、先の先祖イベントを介して参照することができるからである。例えば、イベント602は、イベント604を介してイベント608にリンクされる。別の例では、イベント602は、イベント606及びイベント612を介して、イベント616にリンクされる。 For example, FIG. 3 illustrates an example hash graph 600. Event 602 is created and/or defined by Bob as a result of synchronization with Carol. Event 602 includes a hash of event 604 (a previous event created and/or defined by Bob) and a hash of event 606 (a previous event created and/or defined by Carol). In some embodiments, for example, the hash of event 604 contained within event 602 includes pointers to its immediate ancestor events, events 608 and 610. Therefore, Bob can use event 602 to reference events 608 and 610 and use the pointer to the previous event to reconstruct the hash graph. In some cases, event 602 can be said to be linked to other events within hashgraph 600. This is because the event 602 can reference each of the events in the hash graph 600 via its previous ancestor event. For example, event 602 is linked to event 608 via event 604. In another example, event 602 is linked to event 616 via event 606 and event 612.

例示的なシステム2:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、イベントはまた、記録するためのトランザクション又は他の情報の「ペイロード」を含む。そのようなペイロードを使用して、計算デバイスの直前のイベント以降に発生した、かつ/又は定義された任意のトランザクション及び/又は情報でイベントを更新することができる。例えば、イベント602は、イベント604が作成及び/又は定義された以降にBobによって実施された、任意のトランザクションを含むことができる。したがって、イベント602を他の計算デバイスと同期させるとき、Bobはこの情報を共有することができる。したがって、Bobによって実施されたトランザクションは、イベントに関連付けられ、イベントを使用して他のメンバと共有され得る。いくつかの実装形態では、例示的なシステム2はまた、例示的なシステム2を具体的に参照しない場合がある、本明細書に開示される他の例示的なシステムにも適用することができる。 Example System 2: A system from Example System 1 (or any other example system disclosed herein) in which the event also includes transactions or other information for recording. Contains "payload". Such payloads can be used to update the event with any transactions and/or information that have occurred and/or have been defined since the last event on the computing device. For example, event 602 may include any transactions performed by Bob since event 604 was created and/or defined. Therefore, when synchronizing events 602 with other computing devices, Bob can share this information. Therefore, transactions performed by Bob can be associated with events and shared with other members using events. In some implementations, example system 2 may also apply to other example systems disclosed herein that may not specifically reference example system 2. .

例示的なシステム3:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、イベントは、デバッグ、診断、及び/又は他の目的に有用な、現在時刻及び/又は日付も含む。時刻及び/又は日付は、計算デバイス(例えば、Bob)がイベントを作成及び/又は定義するローカル時刻及び/又は日付であり得る。そのような実施形態では、そのようなローカル時刻及び/又は日付は、残りのデバイスと同期されない。他の実施形態では、時刻及び/又は日付は、デバイスにわたって(例えば、イベントを交換するときに)同期され得る。更に他の実施形態では、時刻及び/又は日付を決定するために、グローバルタイマを使用することができる。 Example System 3: A system from Example System 1 (or any other example system disclosed herein) in which events are used for debugging, diagnostics, and/or other purposes. Also includes the current time and/or date, which may be useful. The time and/or date may be the local time and/or date at which the computing device (eg, Bob) creates and/or defines the event. In such embodiments, such local time and/or date is not synchronized with the rest of the device. In other embodiments, the time and/or date may be synchronized across devices (eg, when exchanging events). In yet other embodiments, a global timer may be used to determine the time and/or date.

例示的なシステム4:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、Aliceは、Bobによって作成及び/又は定義されたイベントも、そのようなイベントの先祖イベントも、Bobに送信しない。yがxのハッシュを含む場合、又はyがxの子孫であるイベントのハッシュを含む場合、イベントxはイベントyの先祖である。同様に述べると、そのような実施形態では、Bobは、Aliceによってまだ記憶されていないイベントをAliceに送信し、Aliceによってすでに記憶されているイベントを送信しない。 Example System 4: A system from Example System 1 (or any other example system disclosed herein) in which Alice also receives events created and/or defined by Bob. , the ancestor events of such events are also not sent to Bob. An event x is an ancestor of an event y if y contains a hash of x, or if y contains a hash of an event that is a descendant of x. Similarly stated, in such an embodiment, Bob sends to Alice events that are not yet stored by Alice and does not send events that are already stored by Alice.

例えば、図4は、イベント622(黒色の円)の先祖イベント(ドット模様の円)及び子孫イベント(ストライプ模様の円)を例解する、例示的なハッシュグラフ620を例解する。線はイベントの半順序を確立し、ここで、先祖は黒色のイベントの前に来て、子孫は黒色のイベントの後に来る。半順序は、白色のイベントが黒色のイベントの前であるか後であるかを示すものではないため、それらのシーケンスを決定するには全順序又はコンセンサス順序を使用する。別の例として、図5は、1つの特定のイベント(塗りつぶされた円)と、各メンバがそのイベントの指標を最初に受信したとき(ストライプ模様の円)とを例解する例示的なハッシュグラフを例解する。Carolがイベント624を作成及び/又は定義するためにDaveと同期するとき、Daveは、イベント622の先祖イベントをCarolに送信しない。なぜなら、Carolは、そのようなイベントをすでに認識しており、受信しているからである。代わりに、Daveは、Carolがまだ受信していない、かつ/又はCarolの分散データベースインスタンスに記憶していないイベントを、Carolに送信する。いくつかの実施形態では、Daveは、Carolが以前に受信したイベントについてDaveのハッシュグラフが明らかにするものに基づいて、Carolに送信すべきイベントを識別することができる。イベント622は、イベント626の先祖である。したがって、イベント626の時点で、Daveはすでにイベント622を受信している。図4は、Carolからイベント622を受信したBobからイベント622を受信したEdから、Daveがイベント622を受信したことを示す。更に、イベント624の時点で、イベント622は、Carolによって作成及び/又は定義された、Daveが受信した最後のイベントである。したがって、Daveは、イベント622及びその先祖以外のDaveが記憶したイベントをCarolに送信することができる。追加的に、イベント626をDaveから受信すると、Carolは、Carolの分散データベースインスタンスに記憶されたイベント内のポインタに基づいて、ハッシュグラフを再構築することができる。他の実施形態では、Daveは、Carolがイベント622をDave(図4には図示せず)に送信し、イベント622(及びその中の参照)を使用してDaveが識別して、Carolがすでに受信したイベントを識別することに基づいて、どのイベントをCarolに送信すべきかを識別することができる。ハッシュグラフを再構築することによって、Carolは、コンセンサスプロトコルの各ラウンドについてDaveから実際に投票を受信することなく、上で説明されるコンセンサスプロトコルにおいてDaveがどのように投票するであろうかを決定することができる。同様に、Carolのハッシュグラフに基づいて、Carolは、分散データベースの残りの各メンバが、特に投票を受信することなく、どのように投票するであろうかを決定することができる。これは、コンセンサスプロトコルの各ラウンドに対する投票が分散データベースのメンバ間で交換されないので、ネットワークトラフィックを低減する。 For example, FIG. 4 illustrates an example hash graph 620 that illustrates ancestor events (dotted circles) and descendant events (striped circles) of event 622 (black circles). The line establishes a partial order of events, where ancestors come before black events and descendants come after black events. Partial order does not indicate whether white events come before or after black events, so the full or consensus order is used to determine their sequence. As another example, FIG. 5 shows an example hash illustrating one particular event (filled circle) and when each member first receives an indication of that event (striped circle). Illustrate graphs. When Carol synchronizes with Dave to create and/or define event 624, Dave does not send event 622's ancestor events to Carol. This is because Carol is already aware of and receives such events. Instead, Dave sends events to Carol that Carol has not yet received and/or has not stored in Carol's distributed database instance. In some embodiments, Dave may identify events to send to Carol based on what Dave's hashgraph reveals about events previously received by Carol. Event 622 is an ancestor of event 626. Therefore, at the time of event 626, Dave has already received event 622. FIG. 4 shows that Dave received event 622 from Ed who received event 622 from Bob who received event 622 from Carol. Additionally, at the time of event 624, event 622 is the last event created and/or defined by Carol that Dave received. Therefore, Dave can send event 622 and events stored by Dave other than its ancestors to Carol. Additionally, upon receiving event 626 from Dave, Carol can reconstruct the hash graph based on the pointers in the event stored in Carol's distributed database instance. In other embodiments, Dave uses event 622 (and references therein) to identify that Carol sent event 622 to Dave (not shown in FIG. 4) and that Carol has already Based on identifying the received events, one can identify which events to send to Carol. By reconstructing the hashgraph, Carol determines how Dave would vote in the consensus protocol described above without actually receiving votes from Dave for each round of the consensus protocol. be able to. Similarly, based on Carol's hash graph, Carol can determine how each remaining member of the distributed database would vote without specifically receiving a vote. This reduces network traffic because votes for each round of the consensus protocol are not exchanged among the members of the distributed database.

例示的なシステム5:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、受信側がイベントの先祖を受信及び/又は記憶するまでそのイベントが送信されないような順序で、両方のメンバが、イベントを他方に送信する。したがって、送信側は、イベントを最も古いものから最も新しいものへ送信し、その結果、受信側は、2つのハッシュをすでに受信された2つの先祖イベントと比較することによって、イベントが受信されるときに各イベント上の2つのハッシュをチェックすることができる。送信側は、送信側のハッシュグラフの現在の状態(例えば、送信側によって定義されたデータベース状態変数)と、そのハッシュグラフが受信側がすでに受信したことを示すものとに基づいて、どのイベントを受信側に送信すべきかを識別することができる。図3を参照すると、例えば、Bobがイベント602を定義するためにCarolと同期しているとき、Carolは、イベント619が、Carolが受信したBobによって作成及び/又は定義された最後のイベントであることを識別することができる。したがって、Carolは、Bobがそのイベント及びその先祖を知っていると判定することができる。これによりCarolはBobに、イベント618及びイベント616(すなわち、Carolが受信したイベントのうちBobがまだ受信していない最も古いイベント)を最初に送信することができる。次いで、Carolは、Bobにイベント612を送信し、次いでイベント606を送信することができる。これは、Bobが、イベントを容易にリンクしてBobのハッシュグラフを再構築することを可能にする。BobはCarolにイベントを要求しないため、Carolのハッシュグラフを使用してBobがまだ受信していないイベントを識別することにより、同期の効率を増加させることができ、ネットワークトラフィックを低減することができる。 Example System 5: A system from Example System 1 (or any other example system disclosed herein) that until the receiver receives and/or stores the ancestor of the event. Both members send events to the other in such an order that no events are sent. Therefore, the sender sends events from oldest to newest, so that when an event is received, the receiver You can check the two hashes on each event. The sender determines which events it will receive based on the current state of the sender's hashgraph (e.g., a database state variable defined by the sender) and what events that hashgraph indicates that the receiver has already received. You can identify which side should be sent. Referring to FIG. 3, for example, when Bob is synchronizing with Carol to define event 602, Carol knows that event 619 is the last event created and/or defined by Bob that Carol received. can be identified. Therefore, Carol can determine that Bob knows about the event and its ancestors. This allows Carol to send event 618 and event 616 (ie, the oldest event that Carol has received that Bob has not yet received) to Bob first. Carol can then send event 612 and then event 606 to Bob. This allows Bob to easily link events to reconstruct Bob's hash graph. Because Bob does not request events from Carol, using Carol's hash graph to identify events that Bob has not yet received can increase synchronization efficiency and reduce network traffic. .

他の実施形態では、直近のイベントを最初に送信することができる。受信側が、(直近のイベント内の2つの以前のイベントのハッシュ及び/又は直近のイベント内の以前のイベントへのポインタに基づいて)2つの以前のイベントのうちの1つをまだ受信していないと判定した場合、受信側は、送信側にそのようなイベントを送信するように要求することができる。これは、受信側が直近のイベントの先祖を受信及び/又は記憶するまで行うことができる。図3を参照すると、そのような実施形態では、例えば、BobがCarolからイベント606を受信するとき、Bobは、イベント606内の、イベント612及びイベント614のハッシュを識別することができる。Bobは、イベント604を作成及び/又は定義するときに、イベント614がAliceから以前に受信されたと判定することができる。したがって、BobはCarolにイベント614を要求する必要はない。Bobはまた、イベント612がまだ受信されていないことを判定することもできる。次いで、BobはCarolにイベント612を要求することができる。次いで、Bobは、イベント612内のハッシュに基づいて、Bobがイベント616又は618を受信していないことを判定することができ、したがって、これらのイベントをCarolに要求することができる。イベント616及び618に基づいて、Bobは、イベント606の先祖を受信したことを判定することができる。 In other embodiments, the most recent events may be sent first. The receiver has not yet received one of the two previous events (based on a hash of the two previous events in the most recent event and/or a pointer to the previous event in the most recent event) If so, the receiver can request the sender to send such an event. This can be done until the recipient receives and/or remembers the ancestors of the most recent event. Referring to FIG. 3, in such an embodiment, for example, when Bob receives event 606 from Carol, Bob may identify a hash of event 612 and event 614 within event 606. When Bob creates and/or defines event 604, he may determine that event 614 was previously received from Alice. Therefore, Bob does not need to request event 614 from Carol. Bob may also determine that event 612 has not yet been received. Bob can then request event 612 from Carol. Bob can then determine, based on the hash in event 612, that he has not received event 616 or 618, and therefore can request these events from Carol. Based on events 616 and 618, Bob can determine that he has received an ancestor of event 606.

例示的なシステム6:例示的なシステム5からのシステム(又は本明細書に開示される任意の他の例示的なシステム)であって、メンバが次に送信するいくつかのイベント間の選択肢を有するときに、イベントが、そのメンバによって作成及び/又は定義されたそれまでに送信されたバイトの総数を最小化するように選択されるという、追加の制約を伴う。例えば、AliceにはBobに送信するイベントが2つだけ残されており、1つは100バイトであり、かつCarolによって作成及び/又は定義されたものであり、1つは10バイトであり、かつDaveによって作成及び/又は定義されたものであり、またこの同期においてそれまでに、AliceがすでにCarolによる200バイトのイベントを送信しておりDaveによる210バイトのイベントを送信していた場合、Aliceは、最初にDaveイベントを送信し、続いてCarolイベントを送信すべきである。210+10<100+200であるからである。これは、単一のメンバが単一の巨大なイベントを送出するか又は大量の小さいイベントを送信するかのいずれかの攻撃に対処するために使用することができる。(例示的なシステム7に関して考察されるように、)トラフィックが大部分のメンバのバイト制限を超える場合では、例示的なシステム6の方法は、正当なユーザのイベントではなく、攻撃者のイベントが無視されることを保証することができる。同様に述べると、攻撃は、(接続を拘束する1つの巨大イベントに対して防御するために)より大きいイベントの前により小さいイベントを送信することによって低減することができる。更に、メンバが単一の同期でイベントの各々を(例えば、ネットワーク制限、メンババイト制限などにより)送信できない場合、そのメンバは、攻撃者によって定義及び/又は作成されたイベントを単に送信し、他のメンバによって作成及び/又は定義された(少数のうちの)いずれのイベントも送信しないのではなく、各メンバから少数のイベントを送信することができる。 Example System 6: A system from Example System 5 (or any other example system disclosed herein) in which a member selects between several events to send next. with the additional constraint that the event is chosen to minimize the total number of previously transmitted bytes created and/or defined by that member. For example, Alice has only two events left to send to Bob, one that is 100 bytes and created and/or defined by Carol, one that is 10 bytes, and created and/or defined by Dave, and if earlier in this synchronization Alice had already sent a 200-byte event by Carol and a 210-byte event by Dave, then Alice , the Dave event should be sent first, followed by the Carol event. This is because 210+10<100+200. This can be used to counter attacks where a single member either sends a single huge event or sends a large number of small events. In cases where the traffic exceeds the byte limits of most members (as discussed with respect to example system 7), the method of example system 6 is such that the attacker's events, rather than the legitimate user's events, can be guaranteed to be ignored. Similarly stated, attacks can be reduced by sending smaller events before larger events (to protect against one huge event tying up the connection). Furthermore, if a member is unable to send each of the events in a single synchronization (e.g., due to network limitations, member byte limits, etc.), the member may simply send events defined and/or created by the attacker and Rather than not sending any (of a small number) of events created and/or defined by a member of the .

例示的なシステム7:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、BobがAliceに、この同期中に受信する意思がある最大バイト数を示す数を送信し、かつAliceがAliceの制限を返信する、追加の第1のステップを伴う。次に、Aliceは、次のイベントがこの限度を超えそうになると送信を停止する。Bobは同じことを行う。このような実施形態では、これは転送されるバイト数を制限する。これは、収束までの時間は増加させ得るが、同期ごとのネットワークトラフィックの量を低減させる。 Example System 7: A system from Example System 1 (or any other example system disclosed herein) in which Bob intends to receive Alice during this synchronization. It involves an additional first step of sending a number indicating the maximum number of bytes and Alice returning Alice's limit. Alice then stops transmitting when the next event is about to exceed this limit. Bob does the same. In such embodiments, this limits the number of bytes transferred. This may increase the time to convergence, but reduces the amount of network traffic per synchronization.

代替的又は追加的に、いくつかの実装形態では、同期プロセスごとのバイト数の制限、及び/又は同期プロセスごとに同期されることが許可されるイベントの数の制限が、分散データベース内に実装される。例えば、Aliceは、Bobにまだ知られていないイベントをBobに送信することができ、次いで、Aliceに関連付けられたデータベースのインスタンスは、次のイベントが、許容可能なバイト数(すなわち、同期されたデータの量)又は同期される許容可能なイベント数のいずれかに基づく同期閾値を超える、かつ/又はそれに達すると、データパケット及び/又はイベントの送信を停止及び/又は終了することができる。そのような場合のイベントの伝送は、両方のイベントが同期している場合、イベントを送信する前にイベントの親を送信することによって実施することができる。 Alternatively or additionally, in some implementations a limit on the number of bytes per synchronization process and/or a limit on the number of events that are allowed to be synchronized per synchronization process is implemented within a distributed database. be done. For example, Alice can send an event to Bob that is not yet known to Bob, and then the instance of the database associated with Alice will send the next event to the allowable number of bytes (i.e., Transmission of data packets and/or events may be stopped and/or terminated upon exceeding and/or reaching a synchronization threshold based on either the amount of data) or the number of allowable events to be synchronized. Transmission of an event in such a case can be implemented by sending the parent of the event before sending the event, if both events are synchronized.

いくつかの場合、AliceがBobと同期しており、Bobに2つのイベント、例えばイベントX及びイベントYを送信する必要があり、Bobがすでにそれらの両方のイベントの全ての親を有している場合、Aliceはどちらを最初に送信するかを選択することができる。いくつかの実装形態では、Aliceは、X内の全てのバイトに、Aliceがこの同期中にすでに送信したXの作成者による全てのイベント内のバイトを加えた合計バイト(Bx)を算出することができる。同様に、Y内のバイト及びこれまでに送信されたYの作成者によるイベントに対する総バイト(By)を算出することができる。次に、Aliceは、Bx<Byの場合はYの前にXを送信し、By<Bxの場合は、Xの前にYを送信し、Bx=Byの場合は、いずれかの順序で送信することを選択することができる。 In some cases, Alice is syncing with Bob and needs to send two events to Bob, say event X and event Y, and Bob already has all the parents of both those events. , Alice can choose which one to send first. In some implementations, Alice calculates the total bytes (Bx) of all bytes in X plus bytes in all events by the creator of X that Alice has already sent during this synchronization. I can do it. Similarly, the total bytes (By) for the bytes in Y and events by the creator of Y sent so far can be calculated. Alice then sends X before Y if Bx<By, sends Y before X if By<Bx, and sends in either order if Bx=By. You can choose to do so.

いくつかの場合、2つのメンバ間の同期は、(例えば、サービス妨害攻撃を防止するために)同期ごとの受信イベントの最大数に制限され得る。その同期に関連する全てのイベントが受信される前にそのような限界に達した場合、同期は早く終了する。いくつかの他の場合、各同期イベントは、(受信イベントの数に限定される代わりに、又はそれに加えて)受信バイトの最大数に限定され得る。したがって、受信イベントの最大数及び受信バイトの最大数などの制限を使用して、同期中に別のメンバ(例えば、Alice)から受信側メンバ(例えば、Bob)によって受信及び/又は受け入れられるイベント及び/又はバイトの数を制約又は調整することができる。前述の制限は、悪意のあるメンバが大きなイベントを作成するか、又は膨大な数の小さいイベントでネットワークを氾濫させる攻撃を防止することができる。また、これらの制限は、例えば、1つのメンバが平均量のデータトラフィックを扱うが、データトラフィックの急増を扱わない低帯域幅接続を有するときに、グレースフルデグラデーションを保証する。 In some cases, synchronization between two members may be limited to a maximum number of events received per synchronization (eg, to prevent denial of service attacks). If such a limit is reached before all events related to that synchronization are received, the synchronization will terminate early. In some other cases, each synchronization event may be limited to a maximum number of received bytes (instead of or in addition to being limited to the number of received events). Therefore, limits such as the maximum number of events received and the maximum number of bytes received are used to limit the number of events and events that are received and/or accepted by a receiving member (e.g., Bob) from another member (e.g., Alice) during synchronization. /or the number of bytes can be constrained or adjusted. The aforementioned limitations may prevent attacks in which a malicious member creates large events or floods the network with a huge number of small events. These limits also ensure graceful degradation, for example when one member has a low bandwidth connection that handles an average amount of data traffic but does not handle spikes in data traffic.

いくつかの実装形態では、コンセンサスがまだ識別されていない全ての既知のイベントが、トランザクションを含まない空のイベントである場合、メンバ又は計算デバイスは、別のメンバ又は計算デバイスとの同期を開始しない。これにより、長い期間新しいトランザクションがない場合に、メンバが帯域幅を浪費しないことを保証する。 In some implementations, a member or computing device does not initiate synchronization with another member or computing device if all known events for which consensus has not yet been identified are empty events that do not contain transactions. . This ensures that members do not waste bandwidth if there are no new transactions for long periods of time.

いくつかの場合、コンセンサスの欠如によって、メンバ又は計算デバイスのメモリのオーバフローが引き起こされる可能性がある。例えば、コンセンサスがまだ識別されていないイベントのセットは、例えば、母集団の少なくとも1/3がオフラインである場合、所与の閾値を超えて成長又は増加する可能性がある。これは、オンラインであるメンバが少なすぎるときに、コンセンサスが導出されない可能性があるからである。したがって、メンバ又は計算デバイスのメモリは、コンセンサスに達することができないイベントの累積数でオーバフローする可能性がある。コンセンサスが達成され得ない蓄積されたイベントによるメモリオーバフローを防止するために、各メンバ及び/又は計算デバイスは、コンセンサスがまだ達成されていないイベントの閾値に達すると、そのメンバ又は計算デバイスが、そのメンバ又は計算デバイスが認識しているイベントのうちのいくつかについてコンセンサスに達するまで、任意の新しいイベントを定義及び/又は作成することを拒否することができるように構成され得る。別の言い方をすれば、いくつかの場合、コンセンサスの欠如により、コンセンサスを達成することができない場合(例えば、オンラインでありコンセンサスを導出することができるメンバが少なすぎる場合)、オーバフローが引き起こされる可能性がある。したがって、(例えば、オンラインのメンバが少なすぎるために)コンセンサス順序に入れることができないイベントのオーバフローを防止するために、メンバは、オフラインメンバのいくつかからイベントを受信して、より古いイベントのいくつかに関するコンセンサスに達することができるまで、追加のイベントを定義しない。 In some cases, the lack of consensus can cause memory overflow of members or computing devices. For example, the set of events for which no consensus has yet been identified may grow or increase beyond a given threshold, eg, if at least 1/3 of the population is offline. This is because consensus may not be derived when too few members are online. Therefore, the memory of a member or computing device may overflow with the cumulative number of events for which consensus cannot be reached. To prevent memory overflow due to accumulated events for which consensus cannot be achieved, each member and/or computing device is configured to It may be configured such that members or computing devices can refuse to define and/or create any new events until consensus is reached about some of the events that they are aware of. Stated differently, in some cases the lack of consensus can cause overflow if consensus cannot be achieved (e.g., too few members are online and able to derive consensus). There is sex. Therefore, in order to prevent an overflow of events that cannot be put into the consensus order (e.g. because too few members are online), a member receives events from some of its offline members and receives some of the older events. do not define additional events until a consensus can be reached about them.

例示的なシステム8:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、同期化プロセスの開始時に、以下のステップが追加された。
-Aliceは、Bobによって作成及び/若しくは定義されたイベント、又はBobによって作成及び/若しくは定義されたイベントの先祖であるイベントをスキップして、Aliceが受信及び/又は記憶したイベントのセットであるSを識別する。
-Aliceは、S内の各イベントを作成及び/又は定義したメンバを識別し、メンバのID番号のリストをBobに送信する。Aliceはまた、Aliceがすでに受信及び/又は記憶した各メンバによって作成及び/又は定義されたイベントの数を送信する。
-Bobは、他のメンバによって作成及び/又は定義された、Bobが受信したイベントの数のリストを返信する。
-Aliceは、Bobがまだ受信していないイベントのみをBobに送信する。例えば、AliceがBobに、AliceがCarolによって作成及び/又は定義された100個のイベントを受信したことを示し、Bobが、BobがCarolによって作成及び/又は定義された95個のイベントを受信したことを返信した場合、Aliceは、Carolによって作成及び/又は定義された直近の5個のイベントのみを送信する。
Example System 8: The system from Example System 1 (or any other example system disclosed herein) with the following steps added at the beginning of the synchronization process: .
- Alice is the set of events that Alice has received and/or stored, skipping events created and/or defined by Bob, or events that are ancestors of events created and/or defined by Bob. identify.
- Alice identifies the member that created and/or defined each event in S and sends a list of member ID numbers to Bob. Alice also sends the number of events created and/or defined by each member that Alice has already received and/or stored.
- Bob returns a list of the number of events he has received, created and/or defined by other members.
- Alice only sends events to Bob that Bob has not yet received. For example, Alice indicates to Bob that Alice has received 100 events created and/or defined by Carol, and Bob has received 95 events created and/or defined by Carol. If so, Alice sends only the five most recent events created and/or defined by Carol.

例示的なシステム9:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)からのシステムであって、不正者を識別及び/又は扱うための追加の機構を伴う。各イベントは2つのハッシュを含み、1つは、そのメンバによって作成及び/又は定義された最後のイベントからのもの(「自己ハッシュ」)であり、1つは、別のメンバによって作成及び/又は定義された最後のイベントからのもの(「外部ハッシュ」)である。メンバが、同じ自己ハッシュを有する2つの異なるイベントを作成及び/又は定義する場合、そのメンバは「不正者」である。Aliceが、同じ自己ハッシュを用いてDaveにより作成及び/又は定義された2つの異なるイベントを受信することによって、Daveが不正者であることを発見した場合、Aliceは、Daveが不正者であるというインジケータを記憶し、将来自分と同期することを控える。Aliceが、Daveが不正者であることを発見し、依然としてDaveと再び同期し、その事実を記録する新しいイベントを作成及び/又は定義する場合、Aliceも不正者になり、Aliceが更にDaveと同期していることを学習する他のメンバは、Aliceとの同期を停止する。いくつかの実施形態では、これは一方向の同期のみに影響を与える。例えば、Aliceは、識別子のリストと各メンバについてAliceが受信したイベントの数とを送信する場合、不正者のID又はカウントを送信しないため、Bobは、任意の対応する数を返信しない。次いで、AliceはBobに、Bobがそのようなイベントを受信したという指標をAliceが受信していない、不正者のイベントを送信する。その同期が終了した後、Bobはまた、(BobがDaveを不正者としてまだ識別していない場合は)Daveが不正者であると判定することもでき、Bobはまた、その不正者と同期することを拒否する。 Example System 9: A system from Example System 1 (or any other example system disclosed herein) that includes additional mechanisms for identifying and/or handling fraudsters. Accompany. Each event contains two hashes, one from the last event created and/or defined by that member (a "self-hash"), and one from the last event created and/or defined by another member. from the last event defined (the "external hash"). If a member creates and/or defines two different events with the same self-hash, that member is a "rogue". If Alice discovers that Dave is a fraudster by receiving two different events created and/or defined by Dave with the same self-hash, then Alice discovers that Dave is a fraudster. Memorize indicators and refrain from syncing with yourself in the future. If Alice discovers that Dave is a rogue and still syncs back with Dave and creates and/or defines a new event to record that fact, Alice also becomes a rogue and if Alice further syncs with Dave Other members who learn what they are doing stop synchronizing with Alice. In some embodiments, this only affects one-way synchronization. For example, if Alice sends a list of identifiers and the number of events she has received for each member, Bob does not send back any corresponding numbers because he does not send the fraudster's ID or count. Alice then sends Bob an imposter event for which Alice has not received any indication that Bob has received such an event. After that sync is finished, Bob can also determine that Dave is the fraudster (if Bob has not already identified Dave as a fraudster), and Bob also synchronizes with that fraudster. refuse to do so.

例示的なシステム10:例示的なシステム9におけるシステム(又は本明細書に開示される任意の他の例示的なシステム)であって、Aliceが、Aliceが識別した不正者のリスト及びAliceが依然として記憶しているその不正者のイベントのリストをBobに送信することによって同期プロセスを開始し、Bobが、Aliceが識別した不正者に加えてBobが識別した任意の不正者を返信する、という追加を伴う。次いでAliceとBobは通常どおり継続するが、互いに同期するときに不正者のカウントを与えない。 Example System 10: The system in Example System 9 (or any other example system disclosed herein) in which Alice has a list of fraudsters that Alice has identified and a list of fraudsters that Alice has identified. Addition that starts the synchronization process by sending Bob a list of remembered events for that fraudster, and that Bob replies with any fraudsters that Bob has identified in addition to the fraudsters that Alice has identified. accompanied by. Alice and Bob then continue as normal, but do not give fraudster counts when synchronizing with each other.

例示的なシステム11:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、同期中に受信される任意の新しいイベントの内部のトランザクションに基づいて、(例えば、システムのメンバによって定義されるデータベース状態変数によって捕捉されるような)現在の状態を繰り返し更新するプロセスを伴う。これは第2のプロセスも含むことができ、この第2のプロセスは、イベントのシーケンスが変化するといつでも、先の状態のコピーに戻り、新しい順序でイベントを処理することによって現在の状態を再算出することによって、その状態(例えば、イベントの順序)を繰り返し再構築する。したがって、例えば、各計算デバイスは、状態の2つのバージョンを維持することができる(1つは、(半順序に基づいて)新しいイベント及びトランザクションが受信されたときに更新され、1つは、(全順序又はコンセンサス順序に基づいて)コンセンサスが達成された後にのみ更新される)。ある時点で(例えば、ある時間期間の後、所与の数のイベントが定義及び/又は受信された後など)、新しいイベント及びトランザクションが受信されたときに更新される状態のバージョンを破棄することができ、コンセンサスが達成された後にのみ更新される状態の新しいコピーを、新しいイベント及びトランザクションが受信されたときに更新される状態の新しいバージョンとして作ることができる。これは、両方の状態の同期を保証することができる。 Example System 11: A system in Example System 1 (or any other example system disclosed herein) that responds to transactions within any new event received during synchronization. involves the process of repeatedly updating the current state (e.g., as captured by database state variables defined by members of the system) based on the system. This may also include a second process that, whenever the sequence of events changes, recalculates the current state by returning to a copy of the previous state and processing the events in the new order. Iteratively reconstructs its state (e.g., the order of events) by Thus, for example, each computing device may maintain two versions of state (one that is updated when new events and transactions are received (based on partial ordering); updated only after consensus is achieved (based on total order or consensus order). At some point (e.g., after a period of time, after a given number of events have been defined and/or received), discard the version of the state that is updated as new events and transactions are received. A new copy of the state can be created, with new versions of the state updated only after consensus is achieved, and updated as new events and transactions are received. This can ensure synchronization of both states.

いくつかの実施形態では、現在の状態は、トランザクションの結果に関連付けられた状態、残高、条件及び/又は同様のものである。同様に述べると、状態は、トランザクションによって修正されたデータ構造及び/又は変数を含むことができる。例えば、トランザクションが銀行口座間の送金である場合、現在の状態は、口座の現在の残高であり得る。別の例では、トランザクションがマルチプレーヤゲームに関連付けられている場合、現在の状態は、ポジション、ライフの数、取得されたアイテム、ゲームの状態、及び/又はゲームに関連付けられた同様のものであり得る。 In some embodiments, the current state is a state, balance, terms, and/or the like associated with the outcome of a transaction. Similarly stated, state may include data structures and/or variables modified by a transaction. For example, if the transaction is a transfer between bank accounts, the current state may be the current balance of the account. In another example, if the transaction is associated with a multiplayer game, the current state may be the position, number of lives, items obtained, game state, and/or the like associated with the game. obtain.

例示的なシステム12:例示的なシステム11におけるシステム(又は本明細書に開示される任意の他の例示的なシステム)であって、状態(例えば、銀行口座残高、ゲーム状態など)を維持するための「高速クローン」arrayListの使用によってより高速にされたシステムである。高速クローンarrayListは、1つの追加の特徴を有するアレイのように振る舞うデータ構造であり、オリジナルのコピーである新しいオブジェクトを作成及び/又は定義するように見える「クローン」動作をサポートする。クローンに対する変更はオリジナルに影響を及ぼさないので、クローンは真のコピーであるかのように振る舞う。しかしながら、クローンを作成することは、1つのarrayListの内容全体を別のarrayListにコピー及び/又は更新することを実際には伴わないので、クローニング動作は、真のコピーを作成するよりも高速である。オリジナルリストの2つのクローン及び/又はコピーを有する代わりに、各々がハッシュテーブル及びオリジナルリストへのポインタを有する、2つの小さいオブジェクトを使用することができる。クローンに書き込みが行われると、ハッシュテーブルは、どの要素が修正されたか、及び新しい値を記憶する。ある場所で読み出しが実施されるとき、ハッシュテーブルが最初にチェックされ、その要素が修正された場合、ハッシュテーブルからの新しい値が返される。そうでない場合、元のarrayListからの要素が返される。このようにして、2つの「クローン」は、初めは元のarrayListへのポインタにすぎない。しかし、各々が繰り返し修正されるにつれて、arrayListは、それ自体と元のリストとの間の差異を記憶する大きなハッシュテーブルを有するように成長する。クローン自体をクローン化して、データ構造をオブジェクトのツリーに拡張させることができ、各オブジェクトはそれ自体のハッシュテーブル及びその親へのポインタを有する。したがって、読み出しは、要求されたデータを有する頂点が見出されるまで、又はルートに到達するまで、ツリーのウォークアップを引き起こす。頂点が大きすぎるか又は複雑になった場合、それを親の真のコピーで置き換えることができ、ハッシュテーブル内の変更をコピーに対して行うことができ、ハッシュテーブルを破棄することができる。加えて、クローンがもはや必要でなくなった場合、ガーベッジコレクション中に、ツリーからクローンを除去することができ、ツリーを折り畳むことができる。 Example system 12: A system in example system 11 (or any other example system disclosed herein) that maintains state (e.g., bank account balance, game state, etc.) The system is made faster by the use of "fast clone" arrayList. A fast clone arrayList is a data structure that behaves like an array with one additional feature: it supports "cloning" operations that appear to create and/or define new objects that are copies of the original. Changes to the clone do not affect the original, so the clone behaves as if it were a true copy. However, since creating a clone does not actually involve copying and/or updating the entire contents of one arrayList to another arrayList, the cloning operation is faster than creating a true copy. . Instead of having two clones and/or copies of the original list, two small objects can be used, each having a hash table and a pointer to the original list. When writes are made to the clone, the hash table remembers which elements were modified and the new values. When a read is performed at a location, the hash table is checked first and if the element is modified, the new value from the hash table is returned. Otherwise, the elements from the original arrayList are returned. In this way, the two "clones" are initially just pointers to the original arrayList. However, as each is repeatedly modified, arrayList grows to have a large hash table that stores the differences between itself and the original list. Clones can clone themselves to expand the data structure into a tree of objects, each object having its own hash table and pointer to its parent. Thus, a read causes a walk up the tree until a vertex with the requested data is found or the root is reached. If a vertex becomes too large or complex, it can be replaced with a true copy of its parent, changes in the hash table can be made to the copy, and the hash table can be discarded. Additionally, during garbage collection, clones can be removed from the tree and the tree can be collapsed if the clone is no longer needed.

例示的なシステム13:例示的なシステム11におけるシステム(又は本明細書に開示される任意の他の例示的なシステム)であって、状態(例えば、銀行口座残高、ゲーム状態など)を維持するための「高速クローン」ハッシュテーブルの使用によってより高速にされたシステムである。これは、ツリーのルートがarrayListではなくハッシュテーブルであることを除いて、システム12と同じである。 Example System 13: A system in example system 11 (or any other example system disclosed herein) that maintains state (e.g., bank account balance, game state, etc.) The system is made faster by the use of "fast clone" hash tables. This is the same as system 12, except that the root of the tree is a hash table rather than an arrayList.

例示的なシステム14:例示的なシステム11におけるシステム(又は本明細書に開示される任意の他の例示的なシステム)であって、状態(例えば、銀行口座残高、ゲーム状態など)を維持するための「高速クローン」リレーショナルデータベースの使用によってより高速にされたシステムである。例えば、高速クローンデータベースは、例示的なシステム11に関して考察されるように、状態の2つのコピーを維持するために使用することができる。これは、既存のリレーショナルデータベース管理システム(Relational Database Management System、RDBMS)の周りのラッパーとして振る舞うオブジェクトである。見かけの各「クローン」は、実際には、ID番号と、データベースを含むオブジェクトへのポインタとを有するオブジェクトである。ユーザのコードがデータベース上で構造化照会言語(Structure Query Language、SQL)クエリを実施しようとするとき、そのクエリは最初に修正され、次に実際のデータベースに送信される。実際のデータベースは、各テーブルがクローンIDのための1つの追加フィールドを有することを除いて、クライアントコードによって見られるデータベースと同一である。例えば、クローンID1を有するオリジナルデータベースが存在し、次いで、ID2及びID3を有するデータベースの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を有するテーブルに追加される。行の修正は、削除したのち挿入することと等価である。前述のように、いくつかのクローンがガーベッジコレクションされる場合、ツリーを簡略化することができる。そのツリーの構造は、クローンにはアクセス可能ではないが純粋に内部で使用される、追加のテーブルに記憶される。 Example system 14: A system in example system 11 (or any other example system disclosed herein) that maintains state (e.g., bank account balance, game state, etc.) A system made faster by the use of a "fast clone" relational database. For example, a fast clone database can be used to maintain two copies of state, as discussed with respect to example system 11. This is an object that acts as a wrapper around an existing Relational Database Management System (RDBMS). Each apparent "clone" is actually an object with an ID number and a pointer to the object containing the database. When a user's code attempts to perform a Structure Query Language (SQL) query on a database, the query is first modified and then sent to the actual database. The actual database is identical to the database seen by the client code, except each table has one additional field for the clone ID. For example, assume there is an original database with clone ID1, and then two clones of the database (eg, used to maintain two copies of state) are created with ID2 and ID3. Each row of each table has a 1, 2, or 3 in the Clone ID field. When the query is from user code to clone 2, the query is modified to read only from rows that have 2 or 1 in the field. Similarly, reading up to 3 looks for rows with IDs of 3 or 1. If a Structured Query Language (SQL) command goes to clone 2 and tells it to delete a row, and that row has a 1, the command should just change the 1 to 3, so that Mark the row as no longer shared by clones 2 and 3 and visible only to 3. If several clones are in operation, you can insert several copies of a row and change each to a different clone's ID, so that the new row will be marked as ``deleted'' with that row. ” will be visible to all clones except for the one with "." Similarly, if a row is added to clone 2, the row is added to the table with an ID of 2. Modifying a row is equivalent to deleting and then inserting it. As mentioned above, the tree can be simplified if some clones are garbage collected. The structure of that tree is stored in an additional table that is not accessible to clones but is used purely internally.

例示的なシステム15:例示的なシステム11におけるシステム(又は本明細書に開示される任意の他の例示的なシステム)であって、状態を維持するための「高速クローン」ファイルシステムの使用によってより高速にされたシステムである。これは、ファイルシステムのラッパーとして振る舞うオブジェクトである。ファイルシステムは、ファイルシステムの異なるバージョンを管理するために高速クローンリレーショナルデータベースを使用して、既存のファイルシステムの上に構築される。基礎となるファイルシステムは、多数のファイルを、1つのディレクトリに記憶するか、又は(ディレクトリを小さく保つために)ファイル名に従って分割して記憶する。ディレクトリツリーはデータベースに記憶することができ、ホストファイルシステムには提供されない。ファイル又はディレクトリがクローンされるとき、「クローン」は単にID番号を有するオブジェクトであり、データベースは、このクローンが現在存在することを反映するように修正される。高速クローンファイルシステムがクローンされた場合、ユーザには、あたかも新しいハードドライブ全体が作成及び/又は定義され、既存のハードドライブのコピーで初期化されたかのように見える。1つのコピーへの変更は、他のコピーに影響を及ぼさない可能性がある。実際には、各ファイル又はディレクトリのコピーは1つのみであり、ファイルが1つのクローンを介して修正されたときにコピーが行われる。 Exemplary System 15: The system in Exemplary System 11 (or any other exemplary system disclosed herein) through the use of a "fast clone" file system to maintain state. This is a faster system. This is an object that acts as a wrapper around the file system. A file system is built on top of an existing file system using a fast clone relational database to manage different versions of the file system. The underlying file system stores a large number of files either in one directory or split according to file name (to keep the directory small). Directory trees can be stored in a database and are not provided to the host file system. When a file or directory is cloned, the "clone" is simply an object with an ID number, and the database is modified to reflect that this clone now exists. When a fast clone file system is cloned, it appears to the user as if an entire new hard drive was created and/or defined and initialized with a copy of the existing hard drive. Changes to one copy may not affect other copies. In reality, there is only one copy of each file or directory, and a copy is made when a file is modified through one clone.

例示的なシステム16:例示的なシステム15(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、高速クローンファイルシステム内のファイルの各Nバイト部分について、別個のファイルが、ホストオペレーティングシステム上で作成及び/又は定義される。Nは、例えば4096又は1024のような何らかの好適なサイズであり得る。このようにして、大きなファイルにおいて1バイトが変更される場合、大きなファイルの1つのチャンクのみがコピーされ修正される。これはまた、数バイトしか異ならない多くのファイルをドライブに記憶するときの効率を増加させる。 Example System 16: A system in Example System 15 (or any other example system disclosed herein), wherein for each N-byte portion of a file in a fast clone file system, files are created and/or defined on the host operating system. N may be any suitable size, such as 4096 or 1024. In this way, if one byte is changed in a large file, only one chunk of the large file is copied and modified. This also increases efficiency when storing many files on the drive that differ by only a few bytes.

例示的なシステム17:例示的なシステム11(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、各メンバは、各メンバが作成及び/又は定義したイベントの一部又は全部に、以前のある時間における状態のハッシュを、その時点までに発生したイベントの数とともに含み、イベントの順序についてのコンセンサスが現在存在することをメンバが認識及び/又は識別することを示す。あるメンバが、所与の状態について大多数のユーザからそのようなハッシュを含む署名されたイベントを収集した後、そのメンバは次いで、その時点におけるコンセンサス状態の証明としてそれを記憶し、その時点の前のイベント及びトランザクションをメモリから削除することができる。 Example system 17: A system in example system 11 (or any other example system disclosed herein) in which each member Contains, in part or in whole, a hash of the state at a previous point in time, along with the number of events that have occurred up to that point, so that members know and/or identify that a consensus currently exists about the order of events. show. After a member collects a signed event containing such a hash from the majority of users for a given state, that member then stores it as proof of the consensus state at that point, and Previous events and transactions can be removed from memory.

例示的なシステム18:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、中央値又は多数決を算出する演算は、重み付けされた中央値又は重み付けされた多数決と置換され、メンバは、メンバの「ステーク」によって重み付けされる。ステークとは、そのメンバの投票がどれだけ重要かを示す数である。ステークは、暗号通貨での持ち株であり得るか、又は、単に、メンバが最初に加入するように招待されたときに割り当てられ、その後そのメンバが加入するように招待した新しいメンバの間で分割される任意の数であり得る。古いイベントは、十分なメンバがコンセンサス状態に同意し、それによりその総ステークが、存在するステークの多数決となったときに、破棄することができる。メンバによって寄与されるランクの中央値を使用して全順序が算出された場合、結果は、メンバの半分がより高いランクを有し、半分がより低いランクを有する数である。一方、重み付けされた中央値を使用して全順序が算出された場合、結果は、総ステークの約半分がそれより低いランクに関連付けられ、半分がそれより高いランクに関連付けられる数である。重み付けされた投票及び中央値は、シビル攻撃を防止するのに有用であり得、このシビル攻撃では、1つのメンバが膨大な数の「ソックパペット」ユーザを加入するように招待し、それらのユーザの各々は、招待しているメンバによって制御される偽名にすぎない。招待しているメンバが招待されているメンバとのステークを分割することを強制される場合、ソックパペットは、コンセンサス結果を制御しようと試みる攻撃者にとって有用ではない。したがって、いくつかの状況においてはプルーフオブステークが有用であり得る。 Example System 18: A system in Example System 1 (or any other example system disclosed herein) in which the operation of calculating a median or majority vote is a weighted median value. or replaced with weighted majority voting, where members are weighted by their "stakes". Stake is a number that indicates how important a member's vote is. Stake can be holdings in a cryptocurrency, or simply allocated when a member is first invited to join and then divided among new members that member invites to join. can be any number. Old events can be discarded when enough members agree to a consensus state so that their total stake is a majority vote of the stakes present. If the total order is calculated using the median of the ranks contributed by the members, the result is a number where half of the members have a higher rank and half have a lower rank. On the other hand, if the total order is calculated using a weighted median, the result is a number where approximately half of the total stake is associated with lower ranks and half with higher ranks. Weighted votes and medians can be useful in preventing Sybil attacks, in which one member invites a huge number of "sockpuppet" users to join and Each of them is just a pseudonym controlled by the inviting member. Sock puppets are not useful to attackers attempting to control the consensus outcome if the inviting member is forced to split the stake with the invited member. Therefore, proof of stake may be useful in some situations.

例示的なシステム19:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、単一の分散データベースの代わりに、階層内に複数のデータベースが存在する。例えば、ユーザがメンバである単一のデータベース、次いで、各々がメンバのサブセットを有するいくつかのより小さいデータベース、又は「チャンク」が存在する可能性がある。イベントがチャンク内で発生するとき、それらのイベントは、そのチャンクのメンバ間で同期され、そのチャンク外のメンバ間では同期されない。次いで、時折、コンセンサス順序がチャンク内で決定された後に、結果として生じる状態(又はコンセンサス全順序を有するイベント)は、大きいデータベースのメンバシップ全体と共有することができる。 Example System 19: A system in Example System 1 (or any other example system disclosed herein) having multiple databases in a hierarchy instead of a single distributed database. exists. For example, there may be a single database of which the user is a member, then several smaller databases, or "chunks", each with a subset of members. When events occur within a chunk, they are synchronized among members of that chunk and not among members outside the chunk. Then, sometimes after a consensus order has been determined within a chunk, the resulting state (or event with a consensus total order) can be shared with the entire membership of a large database.

例示的なシステム20:例示的なシステム11(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、(例えば、システムのメンバによって定義されるデータベース状態変数によって捕捉されるような)状態を更新するためのソフトウェアを更新するイベントを有する能力を有する。例えば、イベントX及びYは、それらのイベント内のトランザクションを読み出し、次いで状態を適切に更新するソフトウェアコードに従って、状態を修正するトランザクションを含むことができる。次いで、イベントZは、ソフトウェアの新しいバージョンが現在利用可能であるという通知を含むことができる。全順序が、イベントがX、Z、Yの順序で起こることを示す場合、X内のトランザクションを古いソフトウェアで処理し、次いでY内のトランザクションを新しいソフトウェアで処理することによって、状態を更新することができる。しかし、コンセンサス順序がX、Y、Zであった場合、X及びYの両方を古いソフトウェアで更新することができ、これは異なる最終状態を与える可能性がある。したがって、そのような実施形態では、コードをアップグレードするための通知をイベント内で行うことができ、その結果、コミュニティは、古いバージョンから新しいバージョンにいつ切り替えるかについてコンセンサスに達することができる。いくつかの実施形態では、コードは、イベントZ(コードをアップグレードするための通知を含む)の受信ラウンドの後のラウンドで古いバージョンから新しいバージョンに切り替えることができる。したがって、イベントZが受信ラウンドrを有すると判定された場合、ラウンドr又はその前の受信ラウンドを有する任意のイベントは、古いバージョンを使用して順序付けられるであろう。同様に、ラウンドrの時点で受信ラウンドをまだ有していない任意のイベントは、新しいバージョンを使用して順序付けされるであろう。これにより、メンバが同期状態を維持することを保証する。また、アップグレード中であっても、プロセスをリブート又は再始動することを必要とせずに、システムが実行したままであることができることを保証する。 Example system 20: A system in example system 11 (or any other example system disclosed herein) that (e.g., is captured by database state variables defined by members of the system) has the ability to have an event that updates the software to update the state (such as For example, events X and Y may include transactions that modify state according to software code that reads the transactions within those events and then updates the state appropriately. Event Z may then include a notification that a new version of the software is now available. If the total order indicates that events occur in the order X, Z, Y, then update the state by processing transactions in X with the old software and then processing transactions in Y with the new software. I can do it. However, if the consensus order was X, Y, Z, both X and Y could be updated with older software, which could give a different final state. Accordingly, in such embodiments, notifications to upgrade the code can be made within the event so that the community can reach a consensus on when to switch from the old version to the new version. In some embodiments, the code may switch from the old version to the new version in a round after the receipt of event Z (which includes a notification to upgrade the code). Therefore, if event Z is determined to have received round r, any event with round r or previous received rounds will be ordered using the old version. Similarly, any event that does not yet have a received round as of round r will be ordered using the new version. This ensures that members remain in sync. It also ensures that the system can remain running even during upgrades without the need to reboot or restart processes.

例示的なシステム21:例示的なシステム1(又は本明細書に開示される任意の他の例示的なシステム)におけるシステムであって、ハッシュグラフのメンバ又は計算デバイスは、分散データベースの署名された状態を定義することによって、分散データベースのインスタンスから不要なイベントを除去するように構成されている。いくつかの実装形態では、メンバ又は計算デバイスは、メモリのオーバフローを防止し、かつ/又はメモリリソースを節約するために、追加のプロセスを実行することができる。例えば、メンバ又は計算デバイスは、規則又は基準のセットに基づいて、古いイベントを定期的に破棄することができる。ルールは、例えば、イベントの受信ラウンドからラウンド番号(又は作成されたラウンド)を引いたものが、所与の閾値を超える場合、又はイベントの世代が閾値未満である場合に(例えば、expiredDuration又はancientDurationに基づく)、イベント内のトランザクションを無視又は破棄することを述べることができる。いくつかの場合、イベントは、それらの親のハッシュ及び各親に対して作成されたラウンドを含む。したがって、1つ以上の親が、あまりにも多くのラウンド前に作成されたために無視又は破棄されたことに起因して欠落している(例えば、本明細書に説明されるように、ancient又はexpiredである)場合であっても、所与のイベントを同期中に依然として受け入れることができる。したがって、署名された状態は、署名された状態の前のラウンドではあるが、署名された状態が無視又は破棄されるほど前ではないラウンドにおいて定義及び/又は作成されたイベントのハッシュを含み得る。不必要なイベントを除去又は破棄することにより、分散データベース(例えば、ハッシュグラフのメンバ)を実装する計算デバイスのセット間で冗長又は無関係なイベントを同期させることによって引き起こされるオーバーヘッドを減少させ、かつそのような計算デバイスのセットのローカルメモリの過少利用を減少させる。イベントを除去すること及び/又は破棄することに関する更なる詳細は、2017年12月19日に出願された「Methods and Apparatus for a Distributed Database that Enables Deletion of Events」と題される米国特許出願第15/846,402号として出願された、米国特許出願公開第2018/0173747号に見出すことができ、その全体が参照により本明細書に組み込まれる。 Example System 21: A system in Example System 1 (or any other example system disclosed herein) in which a member of a hash graph or a computing device has a signature of a distributed database. Defining states is configured to remove unnecessary events from instances of a distributed database. In some implementations, a member or computing device may execute additional processes to prevent memory overflow and/or conserve memory resources. For example, a member or computing device may periodically discard old events based on a set of rules or criteria. The rule may be, for example, if the received round of an event minus the round number (or created round) exceeds a given threshold, or if the event's generation is less than a threshold (e.g., expiredDuration or ancientDuration). ), it can be stated to ignore or discard transactions within the event. In some cases, events include a hash of their parents and the rounds created for each parent. Therefore, one or more parents are missing due to being ignored or destroyed because they were created too many rounds ago (e.g., an ancient or an expired parent, as described herein). ), a given event can still be accepted during synchronization. Thus, a signed state may include a hash of events defined and/or created in a round prior to the signed state, but not so far in advance that the signed state is ignored or discarded. By removing or discarding unnecessary events, we reduce and such as reducing the underutilization of local memory in a set of computing devices. For further details about removing and / or destroying events, "Methods Ands AppAratus for A Distributed DataBUTED DATABASE THAT ENABLES DELETION OFF OFF OFF. The US Patent Appointment entitled "EVENTS" No. 2018/0173747, filed as No./846,402, incorporated herein by reference in its entirety.

更に、いくつかの実装形態では、別のメンバとの同期中に、計算デバイスは、構文的に不正確である(例えば、構文解析しない)、又は無効なデジタル署名を有する受信イベントを拒否することができる。更に、いくつかの実装形態では、同期中に、期限切れの受信イベントを拒否することができる。更に、いくつかの実装形態では、同期中に、計算デバイスにおいて欠落している(例えば、その計算デバイス又は分散データベースのインスタンスのメモリ又はDAG内にない)、非古代の、非期限切れの親イベントを有する受信されたイベントは、非古代の、非期限切れの親イベントが受信されるまで、拒否され得る。 Additionally, in some implementations, while synchronizing with another member, the computing device may reject incoming events that are syntactically incorrect (e.g., do not parse) or have invalid digital signatures. I can do it. Additionally, in some implementations, expired incoming events may be rejected during synchronization. Additionally, some implementations include non-ancient, non-expired parent events that are missing on a computing device (e.g., not in memory or DAG of that computing device or an instance of a distributed database) during synchronization. A received event with a non-old, non-expired parent event may be rejected until a non-old, non-expired parent event is received.

上で説明されるシステムは、最終的なコンセンサスを有する、分散コンセンサスのための効率的な収束メカニズムを作成及び/又は達成することが予想される。以下に示されるように、これについていくつかの定理を証明することができる。 The system described above is expected to create and/or achieve an efficient convergence mechanism for distributed consensus with a final consensus. We can prove some theorems about this, as shown below.

例示的な定理1:イベントxが半順序でイベントyに先行する場合、所与の時間における、所与のメンバの他のメンバの知識において、他のメンバの各々は、yの前にxの指標を受信するか、又はyの指標をまだ受信していない。 Exemplary Theorem 1: If an event x precedes an event y in a partial order, then in a given member's knowledge of other members at a given time, each of the other members An indicator is received, or an indicator of y has not yet been received.

証明:イベントxが半順序でイベントyに先行する場合、xはyの先祖である。メンバが初めてyの指標を受信するとき、そのメンバはすでにxの指標を先に受信しているか(この場合、yの前にxを聞いている)、又は同期により、そのメンバにx及びyの両方が提供される場合である(この場合、単一の同期中に受信されたイベントは、例示的なシステム5に関して説明された先祖関係と一致する順序で受信されたとみなされるので、その同期中にyの前にxを聞く)。証明終わり。 Proof: If event x precedes event y in a partial order, then x is an ancestor of y. When a member receives an index of y for the first time, it has either already received an index of x first (in which case it has heard x before y), or synchronization has caused (In this case, events received during a single synchronization are considered to have been received in an order consistent with the ancestry relationships described for example system 5, so the synchronization (hear x before y). End of proof.

例示的な定理2:任意の所与のハッシュグラフについて、xが半順序でyに先行する場合、xは、そのハッシュグラフについて算出される全順序において、yに先行する。 Exemplary Theorem 2: For any given hashgraph, if x precedes y in partial order, then x precedes y in the total order computed for that hashgraph.

証明:xが半順序でyに先行する場合、定理1により、
全てのiについて、rank(i,x)<rank(i,y)であり、
式中、rank(i,x)は、メンバiによってイベントxに割り当てられるランクであり、xがメンバiによって受信された第1のイベントである場合は1であり、第2のイベントである場合は2であり、以下同様である。med(x)を全てのiにわたるrank(i,x)の中央値とし、med(y)についても同様とする。
Proof: If x precedes y in partial order, then by Theorem 1,
For all i, rank (i, x) < rank (i, y),
where rank(i,x) is the rank assigned to event x by member i, 1 if x is the first event received by member i, and 1 if x is the second event received by member i. is 2, and so on. Let med(x) be the median value of rank(i, x) over all i, and do the same for med(y).

所与のkについて、rank(i1,x)が、k番目に最小のxランクであり、rank(i2,y)が、k番目に最小のyランクであるように、i1及びi2を選択する。ゆえに、
rank(i1,x)<rank(i2,y)である。
For a given k, choose i1 and i2 such that rank(i1,x) is the kth smallest x rank and rank(i2,y) is the kth smallest y rank. . therefore,
rank (i1, x) < rank (i2, y).

これは、rank(i2,y)が、yランクのうちのk個以上であり、y個の順位の各々が、対応するxランクよりも厳密に大きいためである。したがって、rank(i2,y)は、xランクのうちの少なくともk個よりも厳密に大きく、したがって、k番目に最小のxランクよりも厳密に大きい。この論証は、任意のkについて当てはまる。 This is because rank(i2,y) is greater than or equal to k of the y ranks, and each of the y ranks is strictly greater than the corresponding x rank. Therefore, rank(i2,y) is strictly greater than at least k of the x ranks, and therefore strictly greater than the kth smallest x rank. This argument holds true for any k.

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に先行する。証明終わり。 Let n be the number of members (number of i values). Therefore, n must be either an odd number or an even number. When n is an odd number, k=(n+1)/2, and the kth minimum rank becomes the median value. Therefore, med(x)<med(y). If n is an even number, when k=n/2, the kth smallest x rank is strictly smaller than the kth smallest y rank, and the (k+1)th smallest x rank is also ( k+1) is strictly smaller than the smallest y rank. Therefore, the average of the two x ranks will be smaller than the average of the two y ranks. Therefore, med(x)<med(y). Therefore, in both cases, the median x-rank will be strictly smaller than the median y-rank. Therefore, if the total order is defined by sorting the behaviors by median rank, then x precedes y in the total order. End of proof.

例示的な定理3:「ゴシップ期間」が、既存のイベントが同期を通じて全てのメンバに伝搬する時間量である場合、
1ゴシップ期間後:全てのメンバが、イベントを受信した
2ゴシップ期間後:全てのメンバが、それらのイベントの順序に合意する
3ゴシップ期間後:全てのメンバが、合意に達したことを知る
4ゴシップ期間後:全てのメンバが、他の全てメンバからデジタル署名を取得し、このコンセンサス順序を裏書きする。
Exemplary Theorem 3: If the "gossip period" is the amount of time that an existing event propagates to all members through synchronization, then
1 After the gossip period: All members have received the events 2 After the gossip period: All members agree on the order of those events 3 After the gossip period: All members know that an agreement has been reached 4 After the gossip period: All members obtain digital signatures from all other members endorsing this consensus order.

証明:S0を、所与の時間T0までに作成及び/又は定義されたイベントのセットとする。全てのメンバが最終的に他の全てのメンバと無限に頻繁に同期する場合、1の確率で、最終的にS0内のイベントが全てのメンバに拡散した時間T1が存在し、それにより全てのメンバが全てのイベントを認識するようになる。これが第1のゴシップ期間の終わりである。S1を、時間T1に存在し、かつT0にはまだ存在しなかったイベントのセットとする。次に、1の確率で、全てのメンバがセットS1内の全てのイベントを受信した時間T2が最終的に存在し、これは時間T1に存在したものである。これが第2のゴシップ期間の終わりである。同様に、T3は、T2までに存在するがT1の前には存在しないS2内の全てのイベントが、全てのメンバに拡散するときである。各ゴシップ期間は、最終的に1の確率で終了することに留意されたい。平均して、n個のメンバがある場合、各々は、log2(n)回の同期を実施するのに要するだけ持続する。 Proof: Let S0 be the set of events created and/or defined up to a given time T0. If all members eventually synchronize with all other members infinitely often, then with probability 1 there will eventually be a time T1 at which an event in S0 has spread to all members, so that all Members become aware of all events. This is the end of the first gossip period. Let S1 be the set of events that existed at time T1 and were not yet present at T0. Then, with probability 1, there will eventually be a time T2 at which all members have received all the events in set S1, which existed at time T1. This is the end of the second gossip period. Similarly, T3 is when all events in S2 that were present by T2 but not before T1 diffuse to all members. Note that each gossip period ends with a probability of 1. On average, if there are n members, each lasts as long as it takes to perform log2(n) synchronizations.

時間T1までに、全てのメンバは、S0内の全てのイベントを受信したことになる。 By time T1, all members have received all events in S0.

時間T2までに、所与のメンバAliceは、S0内の全てのイベントを受信している他のメンバの各々の記録を受信したことになる。したがって、Aliceは、S0内の、全てのメンバについて全ての振る舞いのランク(そのメンバがその振る舞いを受信した順序)を算出し、次いで、ランクの中央値によってイベントをソートすることができる。結果として生じる全順序は、S0内のイベントに対して変化しない。これは、結果として生じる順序が、各メンバがそれらのイベントの各々の指標を最初に受信した順序の関数であり、その順序は変化しないからである。Aliceの算出した順序は、S0イベントの間に散在するS1からのいくつかのイベントを有する可能性がある。それらのS1イベントは、それらがS0イベントのシーケンス内にある場合、依然として変化し得る。しかし、S0内のイベントの相対的な順序は変化しない。 By time T2, a given member Alice will have received a record of each of the other members receiving all events in S0. Alice can therefore calculate the rank of every behavior for every member in S0 (the order in which the behavior was received by that member) and then sort the events by the median rank. The resulting total order does not change for events within S0. This is because the resulting order is a function of the order in which each member first received an indication of each of their events, and that order does not change. Alice's calculated order may have several events from S1 interspersed between S0 events. Those S1 events may still change if they are within the sequence of S0 events. However, the relative order of events within S0 does not change.

時間T3までに、Aliceは、S0及びS1の和集合に関する全順序を学習し、その和集合におけるイベントの相対順序は変化しない。更に、Aliceは、このシーケンス内で、S1からの最古のイベントを見つけることができ、S1の前のイベントのシーケンスは、S0以外の新しいイベントの挿入によってさえも変化しないと結論付けることができる。したがって、時間T3までに、Aliceは、第1のS1イベントの前の履歴内のイベントの順序についてコンセンサスが達成されたと判断することができる。Aliceは、この順序で発生するこれらのイベントから生じる状態のハッシュ(例えば、Aliceによって定義されたデータベース状態変数によって捕捉される)にデジタル署名し、Aliceが生成及び/又は定義する次のイベントの一部としてこの署名を送出することができる。 By time T3, Alice has learned the total order for the union of S0 and S1, and the relative order of events in that union does not change. Furthermore, Alice can find the oldest event from S1 in this sequence and conclude that the sequence of events before S1 does not change even by the insertion of new events other than S0. . Thus, by time T3, Alice can determine that a consensus has been reached about the order of events in the history before the first S1 event. Alice digitally signs a hash of the state resulting from these events occurring in this order (e.g., captured by a database state variable defined by Alice) and one of the next events that Alice generates and/or defines. This signature can be sent as a copy.

時間T4までに、Aliceは、他のメンバから同様の署名を受信したことになる。その時点で、Aliceは、署名のそのリストを、署名が証明する状態とともに単に保持するだけでよく、Aliceは、第1のS1イベントの前に記憶したイベントを破棄することができる。証明終わり。 By time T4, Alice will have received similar signatures from other members. At that point, Alice simply needs to keep that list of signatures, along with the state they attest to, and Alice can discard the events that she stored before the first S1 event. End of proof.

本明細書に説明されるシステムは、コンセンサスを迅速かつ安全に達成する分散データベースを説明する。これは、多くの用途に有用な構築ブロックであり得る。例えば、トランザクションが1つの暗号通貨ウォレットから別の暗号通貨ウォレットへの暗号通貨の送金を記述する場合、かつ状態が単に各ウォレット内の通貨金額のステートメントである場合、このシステムは、既存のシステムにおける費用のかかるプルーフオブワークを回避する暗号通貨システムを構成する。自動規則施行により、これが現在の暗号通貨では一般的でない特徴を追加することが可能となる。例えば、あるウォレットが一定期間にわたって暗号通貨を送信も受信もしない場合、そのウォレットが削除され、その値が他の既存のウォレットに、それらが現在保有している額に比例して分配される、という規則を施行することによって、失われたコインは復元され、デフレを回避することができる。このようにして、ウォレット用の秘密鍵が失われた場合であっても、マネーサプライは増大又は縮小しないであろう。 The system described herein describes a distributed database that achieves consensus quickly and securely. This can be a useful building block for many applications. For example, if a transaction describes a transfer of cryptocurrency from one cryptocurrency wallet to another, and the state is simply a statement of the amount of currency in each wallet, this system would Construct a cryptocurrency system that avoids costly proof-of-work. Automatic rule enforcement allows this to add features that are not common in current cryptocurrencies. For example, if a wallet does not send or receive cryptocurrency for a period of time, it will be deleted and its value will be distributed to other existing wallets in proportion to the amount they currently hold. By enforcing this rule, lost coins can be restored and deflation can be avoided. In this way, the money supply will not increase or decrease even if the private key for the wallet is lost.

別の例は、サーバ上でプレイされる多人数同時参加型オンライン(Massively Multiplayer Online、MMO)ゲームのように振る舞うが、中央サーバを使用することなくそれを達成する分散ゲームである。コンセンサスは、いかなる中央サーバも制御されることなく、達成することができる。 Another example is a distributed game that behaves like a Massively Multiplayer Online (MMO) game played on a server, but accomplishes that without the use of a central server. Consensus can be achieved without any central server being controlled.

別の例は、そのようなデータベースの上に構築されるソーシャルメディアのためのシステムである。トランザクションはデジタル署名され、メンバは他のメンバについての情報を受信するので、これは、現在のシステムよりも優れたセキュリティ及び利便性の利点を提供する。例えば、電子メールは返信アドレスを偽造することができないので、強力なアンチスパムポリシーを有する電子メールシステムを実装することができる。そのようなシステムはまた、電子メール、ツイート、テキスト、フォーラム、ウィキ、及び/又は他のソーシャルメディアによって現在行われている機能を単一の分散データベースにおいて組み合わせて、統合されたソーシャルシステムになることもできる。 Another example is a system for social media built on top of such a database. This provides security and convenience advantages over current systems because transactions are digitally signed and members receive information about other members. For example, email systems can be implemented with strong anti-spam policies because email cannot forge return addresses. Such a system could also become an integrated social system, combining functions currently performed by email, tweets, texts, forums, wikis, and/or other social media in a single distributed database. You can also do it.

他の用途には、グループが全体として協働して契約又は文書に署名する、グループデジタル署名などのより高度な暗号機能が含まれ得る。この形態及び他の形態のマルチパーティ計算は、そのような分散コンセンサスシステムを使用して有用に実装することができる。 Other applications may include more advanced cryptographic functions such as group digital signatures, where a group collaborates as a whole to sign a contract or document. This and other forms of multi-party computation can be usefully implemented using such distributed consensus systems.

別の例に、公開台帳システムがある。誰もが、システムに何らかの情報を記憶するために料金を支払うことができ、1年につき1バイト当たりで少額の暗号通貨(又は現実世界の通貨)を支払い、システムに情報を記憶する。次いでこれらの資金は、そのデータを記憶するメンバと、合意を達成するために繰り返し同期して稼働するメンバとに自動的に分配することができる。これにより、メンバが同期するたびに、少額の暗号通貨をメンバに自動的に送信することができる。 Another example is a public ledger system. Anyone can pay to have some information stored in the system, paying a small amount of cryptocurrency (or real world currency) per byte per year to store the information in the system. These funds can then be automatically distributed to members who store that data and who repeatedly work in sync to achieve agreement. This allows you to automatically send small amounts of cryptocurrency to members each time they sync.

これらの例は、分散コンセンサスデータベースが多くの用途の構成要素として有用であることを示す。データベースは費用のかかるプルーフオブワークを使用せず、場合によってはより安価なプルーフオブステークを代わりに使用するので、データベースは、より小型のコンピュータ又はモバイル及び埋め込みデバイス上でさえ実行されるフルノードで実行することができる。 These examples demonstrate that distributed consensus databases are useful as building blocks for many applications. Because databases do not use expensive proof-of-work, and in some cases use cheaper proof-of-stake instead, databases run on full nodes that run on smaller computers or even mobile and embedded devices. can do.

2つ前のイベントのハッシュ(1つの自己ハッシュ及び1つの外部ハッシュ)を含むイベントとして上で説明されたが、他の実施形態では、メンバは、3つ前のイベントのハッシュ(1つの自己ハッシュ及び2つの外部ハッシュ)を含むイベントを作成及び/又は定義するために、2つの他のメンバと同期することができる。更に他の実施形態では、任意の数のメンバからの前のイベントの任意の数のイベントハッシュを、イベント内に含むことができる。いくつかの実施形態では、異なるイベントは、前のイベントの異なる数のハッシュを含むことができる。例えば、第1のイベントは、2つのイベントハッシュを含むことができ、第2のイベントは、3つのイベントハッシュを含むことができる。 Although described above as an event containing a hash of the two previous events (one self-hash and one external hash), in other embodiments the member includes a hash of the third previous event (one self-hash). and two external hashes). In yet other embodiments, any number of event hashes of previous events from any number of members may be included within the event. In some embodiments, different events may include different numbers of hashes of previous events. For example, a first event may include two event hashes and a second event may include three event hashes.

イベントは、前のイベントのハッシュ(又は暗号ハッシュ値)を含むものとして上で説明されたが、他の実施形態では、イベントは、ポインタ、識別子、及び/又は前のイベントへの任意の他の好適な参照を含むように作成及び/又は定義され得る。例えば、イベントは、前のイベントに関連付けられ、それを識別するために使用されるシリアル番号を含み、したがってイベントをリンクするように作成及び/又は定義することができる。いくつかの実施形態では、そのようなシリアル番号には、例えば、イベントを作成及び/又は定義したメンバに関連付けられた識別子(例えば、メディアアクセス制御(media access control、MAC)アドレス、インターネットプロトコル(Internet Protocol、IP)アドレス、割り当てられたアドレス、及び/又は同様のもの)と、そのメンバによって定義されたイベントの順序とを含むことができる。例えば、10という識別子を有し、イベントが、そのメンバによって作成及び/又は定義された15番目のイベントであるメンバは、1015という識別子をそのイベントに割り当てることができる。他の実施形態では、イベントに識別子を割り当てるために、任意の他の好適なフォーマットを使用することができる。 Although an event was described above as including a hash (or cryptographic hash value) of a previous event, in other embodiments an event may contain a pointer, an identifier, and/or any other link to a previous event. may be created and/or defined to include suitable references. For example, an event can be created and/or defined to include a serial number that is associated with and used to identify a previous event, thus linking the events. In some embodiments, such serial number includes, for example, an identifier associated with the member that created and/or defined the event (e.g., media access control (MAC) address, Internet Protocol (MAC) address, IP address, assigned address, and/or the like) and the order of events defined by its members. For example, a member with an identifier of 10 and whose event is the 15th event created and/or defined by that member may assign an identifier of 1015 to that event. In other embodiments, any other suitable format may be used to assign identifiers to events.

他の実施形態では、イベントは完全な暗号ハッシュを含むことができるが、同期中はそれらのハッシュの部分のみが送信される。例えば、AliceがBobにハッシュHを含むイベントを送信し、JがHの最初の3バイトであり、Aliceが、Aliceが記憶したイベント及びハッシュのうち、HがJから始まる唯一のハッシュであると判定した場合、Aliceは、同期中にHの代わりにJを送信することができる。次に、Bobが、Jで始まる別のハッシュをBobが有すると判定した場合、Bobは、Aliceに返信して完全なHを要求することができる。このようにして、ハッシュを、伝送中に圧縮することができる。 In other embodiments, events may include complete cryptographic hashes, but only portions of those hashes are sent during synchronization. For example, if Alice sends an event to Bob that contains a hash H, and J is the first 3 bytes of H, and Alice says that among the events and hashes that Alice has stored, H is the only hash that starts with J. If so, Alice can send a J instead of an H during synchronization. If Bob then determines that Bob has another hash starting with J, he can reply to Alice and request the full H. In this way, the hash can be compressed during transmission.

上で図示及び説明された例示的なシステムは、他のシステムを参照して説明されるが、他の実施形態では、例示的なシステム及びそれらの関連付けられた機能の任意の組み合わせを実装して、分散データベースを作成及び/又は定義することができる。例えば、例示的なシステム1、例示的なシステム2、及び例示的なシステム3は、分散データベースを作成及び/又は定義するために組み合わせることができる。別の例として、いくつかの実施形態では、例示的なシステム10は、例示的なシステム1は伴うが、例示的なシステム9を伴わずに、実装することができる。更に別の例では、例示的なシステム7は、例示的なシステム6と組み合わせて例示的なシステム6とともに実装することができる。更に他の実施形態では、例示的なシステムの任意の他の好適な組み合わせを実装することができる。 Although the example systems illustrated and described above are described with reference to other systems, other embodiments may implement any combination of the example systems and their associated functionality. , a distributed database can be created and/or defined. For example, example system 1, example system 2, and example system 3 can be combined to create and/or define a distributed database. As another example, in some embodiments, example system 10 may be implemented with example system 1 but without example system 9. In yet another example, example system 7 can be implemented in combination with example system 6. In still other embodiments, any other suitable combinations of the example systems may be implemented.

様々な実施形態が上で説明されてきたが、それらが限定ではなく、例としてのみ提示されていることを理解されたい。上で説明される方法が、特定の順序で発生する特定のイベントを示す場合、特定のイベントの順序は修正され得る。追加的に、特定のイベントは、可能であれば並列プロセスで並行して実施され得、上で説明されるようにシーケンシャルに実施され得る。 While various embodiments have been described above, it is to be understood that they are presented by way of example only and not limitation. Where the methods described above indicate certain events occurring in a certain order, the order of the certain events may be modified. Additionally, certain events may be performed in parallel, possibly in parallel processes, or sequentially as described above.

本明細書に説明されるいくつかの実施形態は、様々なコンピュータ実装動作を実施するための命令又はコンピュータコードを有する非一時的コンピュータ可読媒体(非一時的プロセッサ可読媒体とも称することができる)を含むコンピュータストレージ製品に関する。コンピュータ可読媒体(又はプロセッサ可読媒体)は、それ自体が一時的な伝搬信号(例えば、空間又はケーブルなどの伝送媒体上で情報を搬送する伝搬電磁波)を含まないという意味で、非一時的である。媒体及びコンピュータコード(コードとも称することができる)は、特定の目的のために設計及び構築されたものであり得る。非一時的コンピュータ可読媒体の例は、ハードディスク、フロッピーディスク、及び磁気テープなどの磁気ストレージ媒体、コンパクトディスク/デジタルビデオディスク(Compact Disc/Digital Video Disc、CD/DVD)、コンパクトディスク読み出し専用メモリ(Compact Disc-Read Only Memory、CD-ROM)、及びホログラフィックデバイスなどの光ストレージ媒体、光ディスクなどの光磁気ストレージ媒体、搬送波信号処理モジュール、並びに特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(Programmable Logic Device、PLD)、読み出し専用メモリ(ROM)、及びランダムアクセスメモリ(RAM)デバイスなど、プログラムコードを記憶し、実行するように特に構成されているハードウェアデバイスを含むが、これらに限定されない。本明細書で説明される他の実施形態は、例えば、本明細書で考察される命令及び/又はコンピュータコードを含むことができるコンピュータプログラム製品に関する。 Some embodiments described herein employ non-transitory computer-readable media (which can also be referred to as non-transitory processor-readable media) having instructions or computer code for performing various computer-implemented operations. Relating to computer storage products including; A computer-readable medium (or a processor-readable medium) is non-transitory in the sense that it does not itself contain transitory propagating signals (e.g., propagating electromagnetic waves that carry information in space or over a transmission medium such as a cable). . The media and computer code (also referred to as code) may be designed and constructed for a particular purpose. Examples of non-transitory computer-readable media are magnetic storage media such as hard disks, floppy disks, and magnetic tape, Compact Disc/Digital Video Disc (CD/DVD), Compact Disc read-only memory (Compact Disc-Read Only Memory (CD-ROM), optical storage media such as holographic devices, magneto-optical storage media such as optical disks, carrier wave signal processing modules, and application specific integrated circuits (ASICs) and programmable logic devices. (PLD), read-only memory (ROM), and random access memory (RAM) devices that are specifically configured to store and execute program code. Other embodiments described herein, for example, relate to computer program products that can include the instructions and/or computer code discussed herein.

コンピュータコードの例は、マイクロコード又はマイクロ命令、コンパイラによって生成されるような機械命令、ウェブサービスを生成するために使用されるコード、及びインタープリタを使用してコンピュータによって実行される高レベル命令を含むファイルを含むが、これらに限定されない。例えば、実施形態は、命令型プログラミング言語(例えば、C、Fortranなど)、関数型プログラミング言語(Haskell、Erlangなど)、論理型プログラミング言語(例えば、Prolog)、オブジェクト指向型プログラミング言語(例えば、Java、C++など)、又は他の好適なプログラミング言語及び/又は開発ツールを使用して実装され得る。コンピュータコードの更なる例は、制御信号、暗号化コード、及び圧縮コードを含むが、これらに限定されない。 Examples of computer code include microcode or microinstructions, machine instructions such as those produced by a compiler, code used to generate a web service, and high-level instructions executed by a computer using an interpreter. including but not limited to files. For example, embodiments may include imperative programming languages (e.g., C, Fortran, etc.), functional programming languages (e.g., Haskell, Erlang, etc.), logical programming languages (e.g., Prolog), object-oriented programming languages (e.g., Java, C++, etc.) or other suitable programming language and/or development tools. Further examples of computer code include, but are not limited to, control signals, encryption code, and compressed code.

様々な実施形態が上で説明されてきたが、それらが限定ではなく、例としてのみ提示されており、形態及び詳細における様々な変更が行われ得ることを理解されたい。本明細書に説明される装置及び/又は方法の任意の部分は、相互排他的な組み合わせを除いて、任意の組み合わせで組み合わされ得る。本明細書に説明される実施形態は、説明される異なる実施形態の機能、構成要素、及び/又は特徴の様々な組み合わせ及び/又は部分組み合わせを含むことができる。
Although various embodiments have been described above, it is to be understood that they are presented by way of example only and not limitation, and various changes in form and detail may be made. Any portions of the apparatus and/or methods described herein may be combined in any combination, except in mutually exclusive combinations. Embodiments described herein may include various combinations and/or subcombinations of features, components, and/or features of different described embodiments.

Claims (20)

方法であって、
分散データベースのためのアドレスブックを定義することであって、前記アドレスブックが、ネットワークを介して前記分散データベースを実装する複数の計算デバイスからの各計算デバイスの識別子を含む、定義することと、
前記複数の計算デバイスからの計算デバイスから、前記アドレスブックを更新するためのトランザクションを含むイベントを受信することと、
前記アドレスブックを使用する前記分散データベースのコンセンサスプロトコルに基づいて、前記イベントの受信ラウンドを算出することと、
前記トランザクションに基づいて前記アドレスブックを更新して、前記イベントの前記受信ラウンド又は前記アドレスブックへの以前の更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義することと、を含む、方法。
A method,
defining an address book for a distributed database, the address book including an identifier for each computing device from a plurality of computing devices implementing the distributed database over a network;
receiving an event from a computing device from the plurality of computing devices that includes a transaction to update the address book;
calculating a reception round of the event based on a consensus protocol of the distributed database using the address book;
updating the address book based on the transaction to define an updated address book after a predetermined number of rounds of at least one of the round of reception of the event or a previous update to the address book; and methods including.
前記アドレスブックを更新するための前記トランザクションが、前記分散データベースを実装する前記複数の計算デバイスに計算デバイスを追加すること、又は前記分散データベースを実装する前記複数の計算デバイスから計算デバイスを除去すること、のうちの少なくとも1つを含む、請求項1に記載の方法。 The transaction for updating the address book adds a computing device to the plurality of computing devices implementing the distributed database or removes a computing device from the plurality of computing devices implementing the distributed database. 2. The method of claim 1, comprising at least one of . 前記アドレスブックが、前記分散データベースを実装する前記複数の計算デバイスからの各計算デバイスについてのステーク値を含み、前記アドレスブックを更新するための前記トランザクションが、前記複数の計算デバイスからの少なくとも1つの計算デバイスについての前記ステーク値を修正することを含む、請求項1に記載の方法。 the address book includes a stake value for each computing device from the plurality of computing devices implementing the distributed database, and the transaction for updating the address book includes a stake value for each computing device from the plurality of computing devices implementing the distributed database; 2. The method of claim 1, comprising modifying the stake value for a computing device. 前記分散データベースに関連付けられた複数のイベントからの各イベントの受信ラウンドが、そのイベントに対する子孫イベントのセットに基づいており、前記子孫イベントのセットが、前記更新の前に、前記アドレスブックを使用して算出され、前記子孫イベントのセットが、前記更新の後に、前記更新されたアドレスブックを使用して算出される、請求項1に記載の方法。 each round of receipt of an event from a plurality of events associated with the distributed database is based on a set of descendant events for that event, and the set of descendant events uses the address book prior to the update. 2. The method of claim 1, wherein the set of descendant events is calculated using the updated address book after the update. 前記コンセンサスプロトコルが、前記コンセンサスプロトコルの各ラウンドについてのイベントのセットを識別するように構成されており、各ラウンドについての前記イベントのセットが、複数のイベントからの各イベントの受信ラウンドを決定するために前記コンセンサスプロトコルによって使用され、
前記アドレスブックを使用して、前記複数のイベントからの各イベントについての属性が算出され、
前記複数のイベントからの各イベントが、前記更新されたアドレスブックが定義されているラウンドの前記イベントのセットからの少なくとも1つのイベントの先祖でないときに、前記更新されたアドレスブックを使用して、そのイベントについての前記属性が再算出される、請求項1に記載の方法。
the consensus protocol is configured to identify a set of events for each round of the consensus protocol, and the set of events for each round determines a round of receipt of each event from a plurality of events; used by said consensus protocol in
using the address book to calculate attributes for each event from the plurality of events;
using the updated address book when each event from the plurality of events is not an ancestor of at least one event from the set of events in the round in which the updated address book is defined; 2. The method of claim 1, wherein the attributes for the event are recalculated.
前記コンセンサスプロトコルが、前記コンセンサスプロトコルの各ラウンドについてのイベントのセットを識別するように構成されており、各ラウンドについての前記イベントのセットが、複数のイベントからの各イベントの受信ラウンドを決定するために前記コンセンサスプロトコルによって使用され、
前記アドレスブックを使用して、前記複数のイベントからの各イベントについての属性が算出され、
前記複数のイベントからの各イベントが、前記更新されたアドレスブックが定義されているラウンドの前記イベントのセットからの少なくとも1つのイベントの先祖であるときに、前記更新されたアドレスブックを使用して、前記複数のイベントからのそのイベントについての前記属性が再算出されない、請求項1に記載の方法。
the consensus protocol is configured to identify a set of events for each round of the consensus protocol, and the set of events for each round determines a round of receipt of each event from a plurality of events; used by said consensus protocol in
using the address book to calculate attributes for each event from the plurality of events;
using the updated address book when each event from the plurality of events is an ancestor of at least one event from the set of events in the round in which the updated address book is defined. , the attributes for that event from the plurality of events are not recalculated.
前記更新することが、前記アドレスブックへの前記以前の更新の前記所定の数のラウンド後に、前記更新されたアドレスブックを定義することを含み、前記更新されたアドレスブックが、前記アドレスブックへの前記以前の更新が発生したラウンドと前記更新されたアドレスブックが定義されるラウンドとの間の受信ラウンド数を有するイベント内の前記アドレスブックへの更新を含む、請求項1に記載の方法。 The updating includes defining the updated address book after the predetermined number of rounds of previous updates to the address book, and the updating includes defining the updated address book after the predetermined number of rounds of previous updates to the address book. 2. The method of claim 1, comprising updating to the address book in an event having a number of rounds received between the round in which the previous update occurred and the round in which the updated address book is defined. 前記更新することが、前記イベントの前記受信ラウンドの前記所定の数のラウンド後に、前記更新されたアドレスブックを定義することを含み、前記所定の数のラウンドが、1よりも大きい、請求項1に記載の方法。 2. The updating comprises defining the updated address book after the predetermined number of rounds of the reception of the event, the predetermined number of rounds being greater than one. The method described in. 前記複数の計算デバイスからの各計算デバイスの前記識別子が、前記複数の計算デバイスからのその計算デバイスに対する公開鍵である、請求項1に記載の方法。 2. The method of claim 1, wherein the identifier of each computing device from the plurality of computing devices is a public key for that computing device from the plurality of computing devices. 装置であって、
複数の計算デバイスに動作可能に結合されたネットワークを介して、前記複数の計算デバイスによって実装される分散データベースに関連付けられた、計算デバイスのメモリと、
前記メモリに動作可能に結合されたプロセッサと、を備え、前記プロセッサが、
前記分散データベースのためのアドレスブックを定義することであって、前記アドレスブックが、前記分散データベースを実装する前記複数の計算デバイスからの各計算デバイスの識別子を含む、定義することと、
前記複数の計算デバイスからの計算デバイスから、前記アドレスブックを更新するためのトランザクションを含むイベントを受信することと、
複数のイベントからの各イベントについての属性を算出することであって、前記イベントが、前記複数のイベントに含まれる、算出することと、
前記アドレスブックを使用する前記分散データベースのコンセンサスプロトコルに基づいて、前記イベントの受信ラウンドを算出することであって、前記受信ラウンドが、前記イベントの子孫であるイベントのセットからの閾値イベント数に基づく、算出することと、
前記トランザクションに基づいて前記アドレスブックを更新して、前記イベントの前記受信ラウンド又は前記アドレスブックへの以前の更新のうちの少なくとも1つの、所定の数のラウンド後に、更新されたアドレスブックを定義することと、
前記複数のイベントからの各イベントが前記イベントのセットからの子孫イベントを有しないときに、前記更新されたアドレスブックを使用して、そのイベントについての前記属性を再算出することと、を行うように構成されている、装置。
A device,
a memory of a computing device associated with a distributed database implemented by the plurality of computing devices via a network operably coupled to the plurality of computing devices;
a processor operably coupled to the memory, the processor comprising:
defining an address book for the distributed database, the address book including an identifier for each computing device from the plurality of computing devices implementing the distributed database;
receiving an event from a computing device from the plurality of computing devices that includes a transaction to update the address book;
calculating an attribute for each event from a plurality of events, the event being included in the plurality of events;
calculating a reception round for the event based on a consensus protocol of the distributed database using the address book, the reception round being based on a threshold number of events from a set of events that are descendants of the event; , calculating;
updating the address book based on the transaction to define an updated address book after a predetermined number of rounds of at least one of the round of reception of the event or a previous update to the address book; And,
and recalculating the attributes for the event using the updated address book when each event from the plurality of events has no descendant events from the set of events. A device configured in
前記プロセッサが、前記トランザクションに基づいて前記アドレスブックを更新して、前記イベントの前記受信ラウンドの前記所定の数のラウンド後に、前記更新されたアドレスブックを定義するように構成されており、前記所定の数のラウンドが、1よりも大きい、請求項10に記載の装置。 the processor is configured to update the address book based on the transaction to define the updated address book after the predetermined number of rounds of the reception of the event; 11. The apparatus of claim 10, wherein the number of rounds is greater than one. 前記プロセッサが、前記トランザクションに基づいて前記アドレスブックを更新して、前記アドレスブックへの前記以前の更新の前記所定の数のラウンド後に、前記更新されたアドレスブックを定義するように構成されており、前記更新されたアドレスブックが、前記アドレスブックへの前記以前の更新が発生したラウンドと前記更新されたアドレスブックが定義されるラウンドとの間の受信ラウンド数を有するイベント内の前記アドレスブックへの更新を含む、請求項10に記載の装置。 the processor is configured to update the address book based on the transaction to define the updated address book after the predetermined number of rounds of previous updates to the address book; , to said address book in the event that said updated address book has a number of rounds received between the round in which said previous update to said address book occurred and the round in which said updated address book is defined. 11. The apparatus of claim 10, comprising updating. 前記アドレスブックを更新するための前記トランザクションが、前記分散データベースを実装する前記複数の計算デバイスに計算デバイスを追加すること、又は前記分散データベースを実装する前記複数の計算デバイスから計算デバイスを除去すること、のうちの少なくとも1つを含む、請求項10に記載の装置。 The transaction for updating the address book adds a computing device to the plurality of computing devices implementing the distributed database or removes a computing device from the plurality of computing devices implementing the distributed database. 11. The apparatus of claim 10, comprising at least one of . 前記複数のイベントからの各イベントが前記イベントのセットからの子孫イベントを有しないときに、前記プロセッサが、前記更新されたアドレスブックを使用して、そのイベントについての前記属性を再算出しないように構成されている、請求項10に記載の装置。 the processor not recalculating the attributes for an event using the updated address book when each event from the plurality of events has no descendant events from the set of events; 11. The apparatus of claim 10, configured. プロセッサによって実行されるべき命令を表すコードを記憶する非一時的プロセッサ可読媒体であって、前記コードが、前記プロセッサに、
ネットワークを介して、分散データベースを実装する複数の計算デバイスに、かつ前記分散データベースを実装するノードとして、接続することと、
前記複数の計算デバイスのうちの計算デバイスから、コンセンサスプロトコルの完了したラウンドに関連付けられた前記分散データベースの状態を受信することであって、前記状態が、前記完了したラウンドに関連付けられたイベントのコアセットの指標を、前記イベントのコアセットからの各イベントのラウンド識別子とともに含む、受信することと、
前記複数の計算デバイスから、前記状態に関連付けられた複数のイベントを受信することと、
前記イベントのコアセットと、前記イベントのコアセットからの各イベントの前記ラウンド識別子と、に基づいて、前記複数のイベントからの各イベントについての属性のセットを算出することと、
前記複数のイベントと、前記複数のイベントについての前記属性のセットと、に基づいて、有向非巡回グラフ(DAG)を構築することと、
前記DAGを使用して、前記コンセンサスプロトコルの次のラウンドに関連付けられたイベントの順序を算出することと、を行わせるためのコードを含む、非一時的プロセッサ可読媒体。
A non-transitory processor-readable medium storing code representing instructions to be executed by a processor, the code causing the processor to:
connecting via a network to a plurality of computing devices implementing a distributed database and as nodes implementing the distributed database;
receiving from a computing device of the plurality of computing devices a state of the distributed database associated with a completed round of a consensus protocol, the state being a core of an event associated with the completed round; receiving an indicator of a set, including a round identifier for each event from said core set of events;
receiving a plurality of events associated with the condition from the plurality of computing devices;
calculating a set of attributes for each event from the plurality of events based on the core set of events and the round identifier of each event from the core set of events;
constructing a directed acyclic graph (DAG) based on the plurality of events and the set of attributes for the plurality of events;
A non-transitory processor-readable medium comprising code for causing: using the DAG to calculate an order of events associated with a next round of the consensus protocol.
前記イベントのコアセットの前記指標が、前記イベントのコアセットからの各イベントについてのハッシュ値を含む、請求項15に記載の非一時的プロセッサ可読媒体。 16. The non-transitory processor-readable medium of claim 15, wherein the index of the core set of events includes a hash value for each event from the core set of events. 前記イベントのコアセットが、前記完了したラウンドの所定の数のラウンド前のラウンドの世代である世代を有するイベントを含まない、請求項15に記載の非一時的プロセッサ可読媒体。 16. The non-transitory processor-readable medium of claim 15, wherein the core set of events does not include events having a generation that is a generation of a round a predetermined number of rounds before the completed round. 前記プロセッサに、
前記複数のイベントから、前記完了したラウンドの所定の数のラウンド前のラウンドの世代である世代を有するイベントを破棄させるためのコードを更に含む、請求項15に記載の非一時的プロセッサ可読媒体。
the processor;
16. The non-transitory processor-readable medium of claim 15, further comprising code for causing, from the plurality of events, an event having a generation that is a generation of a predetermined number of rounds before the completed round.
前記状態が、前記複数の計算デバイスからの所定の割合の計算デバイスによってデジタル署名されている、請求項15に記載の非一時的プロセッサ可読媒体。 16. The non-transitory processor-readable medium of claim 15, wherein the state is digitally signed by a predetermined percentage of computing devices from the plurality of computing devices. 前記プロセッサに前記複数のイベントを受信させるための前記コードが、前記プロセッサが前記複数のイベントから他のイベントを受け入れる前に、前記イベントのコアセットから各イベントを受け入れるように、前記プロセッサに前記複数のイベントを受信させるためのコードを含む、請求項15に記載の非一時的プロセッサ可読媒体。
The code for causing the processor to receive the plurality of events causes the processor to receive the plurality of events such that the processor accepts each event from the core set of events before accepting other events from the plurality of events. 16. The non-transitory processor-readable medium of claim 15, comprising code for receiving an event.
JP2023521031A 2020-10-06 2021-10-05 Method and apparatus for distributed database in a network Pending JP2023544422A (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063088298P 2020-10-06 2020-10-06
US63/088,298 2020-10-06
PCT/US2021/053595 WO2022076429A1 (en) 2020-10-06 2021-10-05 Methods and apparatus for a distributed database within a network

Publications (1)

Publication Number Publication Date
JP2023544422A true JP2023544422A (en) 2023-10-23

Family

ID=80931383

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023521031A Pending JP2023544422A (en) 2020-10-06 2021-10-05 Method and apparatus for distributed database in a network

Country Status (8)

Country Link
US (2) US20220107960A1 (en)
EP (1) EP4226257A1 (en)
JP (1) JP2023544422A (en)
KR (1) KR20230107561A (en)
CN (1) CN116615722A (en)
AU (1) AU2021358742A1 (en)
CA (1) CA3194984A1 (en)
WO (1) WO2022076429A1 (en)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
US9390154B1 (en) 2015-08-28 2016-07-12 Swirlds, Inc. Methods and apparatus for a distributed database within a network
SG11201903278YA (en) 2016-11-10 2019-05-30 Swirlds Inc Methods and apparatus for a distributed database including anonymous entries
US11222006B2 (en) 2016-12-19 2022-01-11 Swirlds, Inc. Methods and apparatus for a distributed database that enables deletion of events
KR102348418B1 (en) 2017-07-11 2022-01-07 스월즈, 인크. Methods and apparatus for efficiently implementing a distributed database within a network
SG10202107812YA (en) 2017-11-01 2021-09-29 Swirlds Inc Methods and apparatus for efficiently implementing a fast-copyable database
AU2020279389A1 (en) 2019-05-22 2021-10-14 Hedera Hashgraph, Llc Methods and apparatus for implementing state proofs and ledger identifiers in a distributed database

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170180367A1 (en) * 2015-12-16 2017-06-22 ClearChat, Inc. System And Method For Encrypted And Authenticated Electronic Messaging Using A Central Address Book
SG11201903278YA (en) * 2016-11-10 2019-05-30 Swirlds Inc Methods and apparatus for a distributed database including anonymous entries

Also Published As

Publication number Publication date
CN116615722A (en) 2023-08-18
KR20230107561A (en) 2023-07-17
EP4226257A1 (en) 2023-08-16
CA3194984A1 (en) 2022-04-14
US20240111782A1 (en) 2024-04-04
AU2021358742A1 (en) 2023-06-22
WO2022076429A1 (en) 2022-04-14
US20220107960A1 (en) 2022-04-07

Similar Documents

Publication Publication Date Title
US11232081B2 (en) Methods and apparatus for a distributed database within a network
US11797502B2 (en) Methods and apparatus for a distributed database within a network
US11657036B2 (en) Methods and apparatus for a distributed database that enables deletion of events
AU2021200222B2 (en) Methods and apparatus for a distributed database including anonymous entries
AU2021200938B2 (en) Methods and apparatus for a distributed database within a network
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 (en) Methods and device for a distributed database that makes it possible to delete events
RU2778013C2 (en) Methods and device for a distributed database on the network