JP2020504916A - 匿名エントリを含む分散型データベースのための方法および装置 - Google Patents

匿名エントリを含む分散型データベースのための方法および装置 Download PDF

Info

Publication number
JP2020504916A
JP2020504916A JP2019520639A JP2019520639A JP2020504916A JP 2020504916 A JP2020504916 A JP 2020504916A JP 2019520639 A JP2019520639 A JP 2019520639A JP 2019520639 A JP2019520639 A JP 2019520639A JP 2020504916 A JP2020504916 A JP 2020504916A
Authority
JP
Japan
Prior art keywords
record
computing device
event
distributed database
public key
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019520639A
Other languages
English (en)
Other versions
JP6966544B2 (ja
Inventor
シー.,3世 ベアード,リーモン
シー.,3世 ベアード,リーモン
Original Assignee
スワールズ,インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by スワールズ,インコーポレイテッド filed Critical スワールズ,インコーポレイテッド
Publication of JP2020504916A publication Critical patent/JP2020504916A/ja
Priority to JP2021172145A priority Critical patent/JP7221355B2/ja
Application granted granted Critical
Publication of JP6966544B2 publication Critical patent/JP6966544B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0866Generation of secret information including derivation or calculation of cryptographic keys or passwords involving user or device identifiers, e.g. serial number, physical or biometrical information, DNA, hand-signature or measurable physical characteristics
    • 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/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • 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/25Integrating or interfacing systems involving database management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/04Payment circuits
    • G06Q20/06Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
    • G06Q20/065Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q20/00Payment architectures, schemes or protocols
    • G06Q20/30Payment architectures, schemes or protocols characterised by the use of specific devices or networks
    • G06Q20/36Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes
    • G06Q20/367Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes involving electronic purses or money safes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/321Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving a third party or a trusted authority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3247Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/56Financial cryptography, e.g. electronic payment or e-cash
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Business, Economics & Management (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Accounting & Taxation (AREA)
  • Signal Processing (AREA)
  • Finance (AREA)
  • Computing Systems (AREA)
  • Strategic Management (AREA)
  • General Business, Economics & Management (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

いくつかの実施形態において、第1のコンピュータデバイスにおいて分散型データベースの第1のインスタンスの少なくとも一部を有する装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成される。分散型データベースは、宛先レコードに論理的に関連付けられた公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティが、第1のコンピュータデバイスおよび少なくとも1つの第2のコンピュータデバイスを含むコンピュータデバイスのセットの中で隠されるような譲渡プロトコルによって、コンピュータデバイス間でのデジタル資産の匿名譲渡を可能にする。【選択図】図1

Description

[1001] 本出願は、参照によってその全体が本明細書に組み込まれる、2016年11月10日に出願された、“METHODS AND APPARATUS FOR A DISTRIBUTED DATABASE INCLUDING ANONYMOUS ENTRIES”と題された米国仮特許出願第62/420,147号に対する優先権を主張するものである。
[1002] 本明細書において説明される実施形態は、一般にデータベースシステムに関し、より具体的には、ネットワーク内の複数のデバイスにわたるデータベースシステムを実装するための方法および装置に関する。
[1003] いくつかの既知の分散型データベースシステムは、分散型データベースシステム内で(たとえば、取引が発生する順序に関する)値に関するコンセンサスを実現しようと試みる。たとえば、多人数参加型オンラインゲームは、ゲームをプレイするためにユーザがアクセスすることができる多数のコンピュータサーバを有し得る。2人のユーザが同時にゲーム内の特定のアイテムを獲得しようとした場合、分散型データベースシステム内のサーバが最終的に、2人のユーザのどちらが最初にアイテムを獲得したかに関する合意に至ることが重要である。
[1004] そのような分散型コンセンサスは、たとえばPaxosアルゴリズムまたはその変形などの方法および/またはプロセスによって処理され得る。そのような方法および/またはプロセスの下で、データベースシステムのサーバの1つが「リーダ」として設定され、リーダがイベントの順序を決定する。(たとえば多人数参加型ゲーム内の)イベントはリーダに転送され、リーダは、イベントに関する順序付けを選択し、データベースシステムの他のサーバへ順序付けを広める。
[1005] しかし、そのような既知のアプローチは、データベースシステムのユーザ(たとえばゲームのプレーヤ)によって信頼された関係者(たとえば中央管理サーバ)によって操作されるサーバを用いる。したがって、データベースシステムを操作するためのリーダまたは信頼された第三者を必要としない分散型データベースシステムのための方法および装置へのニーズがある。
[1006] 他の分散型データベースは、リーダを有さないように設計されるが、そのような分散型データベース内の取引は公開である。したがって、分散型データベースの他の例は、分散型データベースのどのインスタンスが特定の取引を開始したかを識別することができる。
[1007] したがって、リーダがなくともコンセンサスを実現し、かつ取引の匿名性を維持することが可能な分散型データベースシステムへのニーズがある。
[1008] いくつかの実施形態において、装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成された第1のコンピュータデバイスにおける分散型データベースの第1のインスタンスの少なくとも一部を含む。分散型データベースは、第1のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられた第1のレコードを含む。装置は、分散型データベースの第1のインスタンスの一部に動作可能に結合されたプロセッサも含む。プロセッサは、コンピュータデバイスのグループのうちの第2のコンピュータデバイスから、(1)第1のコンピュータデバイスに関連する第1の公開鍵によって暗号化され、(2)分散型データベースの第2のレコードに論理的に関連付けられた、第2のコンピュータデバイスに関連する第1の公開鍵を受信するように構成される。プロセッサは、第1のコンピュータデバイスに関連する第1の公開鍵とペアである秘密鍵によって、第2のコンピュータデバイスに関連する第1の公開鍵を暗号化するように構成される。プロセッサは、第2のコンピュータデバイスに関連する第2の公開鍵によって暗号化された、第1のコンピュータデバイスに関連する第2の公開鍵を第2のコンピュータデバイスへ送信するように構成される。第1のコンピュータデバイスおよび第2のコンピュータデバイスの双方は、第1のコンピュータデバイスに関連する第1の公開鍵に関連するソースレコード、および第2のコンピュータデバイスに関連する第2の公開鍵に関連するソースレコードから、第1のコンピュータデバイスに関連する第2の公開鍵に関連する宛先レコード、および第2のコンピュータデバイスに関連する第1の公開鍵に関連する宛先レコードへの譲渡にデジタル署名またはこれを承認するように構成される。この譲渡はその後、2つのソースレコードから2つの宛先レコードへ値を譲渡する。
[1009]実施形態に係る、分散型データベースシステムを示す高レベルブロック図である。 [1010]実施形態に係る、分散型データベースシステムのコンピュータデバイスを示すブロック図である。 [1011]実施形態に係る、ハッシュグラフの例を示す。 [1012]実施形態に係る、第1のコンピュータデバイスと第2のコンピュータデバイスとの間の通信フローを示すフロー図である。 [1013]実施形態に係る、ハッシュグラフの例である。 [1014]実施形態に係る、ハッシュグラフの例である。 [1015]実施形態に係る、2つのコンピュータデバイス間での匿名データベース取引のグラフィカル表現の例である。 [1016]実施形態に係る、様々なコンピュータデバイス間での匿名データベース取引を表すツリーの複数のレベルにわたる匿名データベース取引のグラフィカル表現を示す。 [1017]実施形態に係る、様々なコンピュータデバイス間で並行して実行される匿名データベース取引のグラフィカル表現を示す。 [1018]実施形態に係る、ハッシュグラフと併用するためのコンセンサス方式の例を示す。 [1019]他の実施形態に係る、ハッシュグラフと併用するためのコンセンサス方式の例を示す。
[1020] いくつかの実施形態において、装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成された第1のコンピュータデバイスにおける分散型データベースの第1のインスタンスの少なくとも一部を含む。分散型データベースは、第1のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられた第1のレコードを含む。装置は、分散型データベースの第1のインスタンスの一部に動作可能に結合されたプロセッサも含む。プロセッサは、コンピュータデバイスのグループのうちの第2のコンピュータデバイスから、(1)第1のコンピュータデバイスに関連する第1の公開鍵によって暗号化され、(2)分散型データベースの第2のレコードに論理的に関連付けられた、第2のコンピュータデバイスに関連する第1の公開鍵を受信するように構成される。プロセッサは、第1のコンピュータデバイスに関連する第1の公開鍵とペアである秘密鍵によって、第2のコンピュータデバイスに関連する第1の公開鍵を復号するように構成される。プロセッサは、第2のコンピュータデバイスに関連する第2の公開鍵によって暗号化された、第1のコンピュータデバイスに関連する第2の公開鍵を第2のコンピュータデバイスへ送信するように構成される。第1のコンピュータデバイスおよび第2のコンピュータデバイスの双方は、第1のコンピュータデバイスに関連する第1の公開鍵に関連するソースレコードおよび第2のコンピュータデバイスに関連する第2の公開鍵に関連するソースレコードから、第1のコンピュータデバイスに関連する第2の公開鍵に関連する宛先レコードおよび第2のコンピュータデバイスに関連する第1の公開鍵に関連する宛先レコードへの譲渡にデジタル署名またはこれを承認するように構成される。この譲渡はその後、2つのソースレコードから2つの宛先レコードへ値を譲渡する。
[1021] いくつかの実施形態において、装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成された第1のコンピュータデバイスにおける分散型データベースの少なくとも一部の第1のインスタンスを含む。分散型データベースは、第1のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられた第1のレコードを含む。第1のコンピュータデバイスのプロセッサは、分散型データベースの少なくとも一部の第1のインスタンスに動作可能に結合される。プロセッサは、コンピュータデバイスのグループのうちの第2のコンピュータデバイスから、第1のコンピュータデバイスに関連する第1の公開鍵で暗号化された、第2のコンピュータデバイスに関連する第1の公開鍵、および第2のコンピュータデバイスに関連する第2の公開鍵に論理的に関連付けられた第2のレコードから分散型データベース内で作成される宛先レコードへ譲渡されることが要求された値を受信するように構成される。第1のコンピュータデバイスおよび第2のコンピュータデバイスはいずれも、第1のレコードおよび第2のレコードから第3のレコードおよび第4のレコードへ値を譲渡するように構成された譲渡コマンドを分散型データベース内へポストするための信号を送信するように構成され、それによって分散型データベース内に第3および第4のレコードが作成される。第3のレコードは、第1のコンピュータデバイスに関連する第2の公開鍵に論理的に関連付けられ、第4のレコードは、第2のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられる。譲渡コマンドは、第1のコンピュータデバイスに関連する第1の公開鍵とペアである秘密鍵によって署名され、第2のコンピュータデバイスに関連する第2の公開鍵とペアである秘密鍵によっても署名され、第1のコンピュータデバイスに関連する第2の公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティが、第1のコンピュータデバイスおよび第2のコンピュータデバイスを含むコンピュータデバイスのセットの中で隠されるように実行されるように構成される。
[1022] いくつかの実施形態において、装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成された第1のコンピュータデバイスにおける分散型データベースの少なくとも一部の第1のインスタンスを含む。分散型データベースは、第1の公開鍵に論理的に関連付けられた第1のレコード、第2の公開鍵に論理的に関連付けられた第2のレコード、第3の公開鍵に論理的に関連付けられた第3のレコード、および第4の公開鍵に論理的に関連付けられた第4のレコードを含む。第1のコンピュータデバイスのプロセッサは、分散型データベースの少なくとも一部の第1のインスタンスに動作可能に結合される。プロセッサは、第1のレコードに関連する値および第2のレコードに関連する値を第3のレコードおよび第4のレコードの両方へ譲渡する要求を含むデータベース動作のインジケーションを受信するように構成される。譲渡コマンドは、第3の公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティおよび第4の公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティを隠すように実行されるように構成される。
[1023] 本明細書で用いられる場合、モジュールはたとえば、特定の機能の実行に関連する動作可能に結合された電気部品の任意のアセンブリおよび/またはセットであってよく、たとえばメモリ、プロセッサ、電気トレース、光コネクタ、(ハードウェア内で実行する)ソフトウェアなどを含んでよい。
[1024] 本明細書で用いられる場合、単数形の「a」、「an」、および「the」は、文脈が特に明示しない限り、複数形への言及を含む。よって、たとえば「モジュール」という用語は、単一のモジュールまたはモジュールの組み合わせを意味することが意図される。たとえば「ネットワーク」は、単一のネットワークまたはネットワークの組み合わせを意味することが意図される。
[1025] 図1は、実施形態に係る、分散型データベースシステム100を示す高レベルブロック図である。図1は、4つのコンピュータデバイス(コンピュータデバイス110、コンピュータデバイス120、コンピュータデバイス130、およびコンピュータデバイス140)にわたり実装される分散型データベース100を示すが、理解すべき点として、分散型データベース100は、図1に示されないコンピュータデバイスを含む任意の数のコンピュータデバイスのセットを用いてよい。ネットワーク105は、有線ネットワークおよび/または無線ネットワークとして実装され、コンピュータデバイス110、120、130、140を動作可能に結合するために用いられる、任意の種類のネットワーク(たとえばローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、仮想ネットワーク、テレコミュニケーションネットワーク)であってよい。本明細書において更に詳しく説明するように、いくつかの実施形態において、たとえばコンピュータデバイスは、インターネットサービスプロバイダ(ISP)およびインターネット(たとえばネットワーク105)を介して互いに接続されたパーソナルコンピュータである。いくつかの実施形態において、接続は、ネットワーク105を介して、任意の2つのコンピュータデバイス110、120、130、140の間に確立され得る。図1に示すように、たとえば接続は、コンピュータデバイス110と、コンピュータデバイス120、コンピュータデバイス130、またはコンピュータデバイス140のいずれか1つとの間に確立され得る。
[1026] いくつかの実施形態において、コンピュータデバイス110、120、130、140は、中間ネットワークおよび/または交換ネットワーク(図1に不図示)を介して互いに通信(たとえばデータを送信および/または受信)し、かつネットワークと通信してよい。そのような中間ネットワークおよび/または交換ネットワークは、ネットワーク105と同じ種類および/または異なる種類のネットワークであってよい。
[1027] 各コンピュータデバイス110、120、130、140は、他のコンピュータデバイスの1または複数からのデータを送信および/または受信するためにネットワーク105を介してデータを送信するように構成された任意の種類のデバイスであってよい。コンピュータデバイスの例は、図1に示される。コンピュータデバイス110は、メモリ112、プロセッサ111、および出力デバイス113を含む。メモリ112は、たとえばランダムアクセスメモリ(RAM)、メモリバッファ、ハードドライブ、データベース、消去可能プログラマブル読取専用メモリ(EPROM)、電気的消去可能読取専用メモリ(EEPROM)、読取専用メモリ(ROM)などであってよい。いくつかの実施形態において、コンピュータデバイス110のメモリ112は、分散型データベースのインスタンス(たとえば分散型データベースインスタンス114)に関連するデータを含む。いくつかの実施形態において、メモリ112は、プロセッサに、分散型データベースの他のインスタンス(たとえば、コンピュータデバイス120における分散型データベースインスタンス124)との間で、同期イベントのレコード、他のコンピュータデバイスとの以前の同期イベントのレコード、同期イベントの順序、パラメータに関する値(たとえば取引を定量化するデータベースフィールド、イベントが発生する順序を定量化するデータベースフィールド、および/またはデータベースに値が格納され得る他の任意の適当なフィールド)を送信および/または受信することに関連するモジュール、プロセス、および/または機能を実行させるための命令を格納する。
[1028] 分散型データベースはたとえば、データの格納、修正、および/または削除を含む、データの操作を行うように構成され得る。いくつかの実施形態において、分散型データベースインスタンス114は、リレーショナルデータベース、オブジェクトデータベース、ポストリレーショナルデータベース、および/または他の任意の適当な種類のデータベースであってよい。たとえば分散型データベースインスタンス114は、任意の特定の機能および/または業種に関連するデータを格納してよい。たとえば分散型データベースインスタンス114は、特定の金融商品の所有権の履歴に関連する値および/または値のベクトルを含む、(たとえばコンピュータデバイス110のユーザの)金融取引を格納してよい。一般に、ベクトルは、パラメータの値の任意のセットであってよく、パラメータは、様々な値をとることができる任意のデータオブジェクトおよび/またはデータベースフィールドであってよい。よって、分散型データベースインスタンス114は、複数のパラメータおよび/またはフィールドを有してよく、その各々が値のベクトルに関連付けられる。値のベクトルは、そのデータベースインスタンス114内のパラメータおよび/またはフィールドに関する実際の値を決定するために用いられる。
[1029] いくつかの例において、分散型データベースインスタンス114は、たとえば(鍵、値)ペアのセットなど、他のデータ構造を実装するために用いられてもよい。分散型データベースインスタンス114によって記録された取引は、たとえば、(鍵、値)ペアのセットにおける(鍵、値)ペアの追加、削除、または修正であってよい。
[1030] いくつかの例において、分散型データベースシステム100または分散型データベースインスタンス114、124、134、144のいずれかが照会され得る。たとえば、照会は鍵で構成されてよく、分散型データベースシステム100または分散型データベースインスタンス114、124、134、144から返信された結果は、鍵に関連付けられた値であってよい。いくつかの例において、分散型データベースシステム100または分散型データベースインスタンス114、124、134、144のいずれかは、取引を通して修正されてもよい。たとえば、データベースを修正する取引は、修正取引を承認する関係者によるデジタルシグネチャを含んでよい。
[1031] 分散型データベースシステム100は、たとえば様々なユーザに関連付けられた属性を分散型アイデンティティシステムに格納することなど、多数の目的で用いられ得る。たとえばそのようなシステムは、ユーザのアイデンティティを「鍵」として用い、ユーザに関連付けられた属性のリストを「値」として用いてよい。いくつかの例において、アイデンティティは、そのユーザが知っている対応する秘密鍵を有する暗号公開鍵であってよい。各属性はたとえば、その属性を主張する権利を有する当局によってデジタル署名され得る。また各属性は、たとえば、属性を読み取る権利を有する個人または個人のグループに関連付けられた公開鍵で暗号化されてもよい。いくつかの鍵または値は、その鍵または値を修正または削除することが許可された関係者の公開鍵のリストを添付されてもよい。
[1032] 他の例において、分散型データベースインスタンス114は、たとえばゲームプレイアイテムの現在のステータスおよび所有権など、多人数同時参加型ゲーム(MMG)に関連するデータを格納してよい。いくつかの例において、分散型データベースインスタンス114は、図1に示すように、コンピュータデバイス110内に実装され得る。他の例において、分散型データベースのインスタンスは、コンピュータデバイスによって(たとえばネットワークを介して)アクセス可能であるが、コンピュータデバイスには実装されない(図1には不図示)。
[1033] コンピュータデバイス110のプロセッサ111は、分散型データベースインスタンス114を作動および/または実行するように構成された任意の適当な処理デバイスであってよい。たとえばプロセッサ111は、本明細書で更に詳しく説明するように、コンピュータデバイス120からの信号の受信に応答して分散型データベースインスタンス114を更新し、および/またはコンピュータデバイス120へ信号を送信させるように構成され得る。より具体的には、本明細書で更に詳しく説明するように、プロセッサ111は、他のコンピュータデバイスからの取引に関連する同期イベント、同期イベントの順序に関連するレコードなどの受信に応答して、分散型データベースインスタンス114を更新するためのモジュール、機能、および/またはプロセスを実行するように構成され得る。他の実施形態において、プロセッサ111は、分散型データベースの他のインスタンス(たとえばコンピュータデバイス120における分散型データベースインスタンス124)に格納されたパラメータの値の受信に応答して分散型データベースインスタンス114を更新し、および/またはコンピュータデバイス110における分散型データベースインスタンス114に格納されたパラメータの値をコンピュータデバイス120へ送信させるためのモジュール、機能、および/またはプロセスを実行するように構成され得る。いくつかの実施形態において、プロセッサ111は、汎用プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)などであってよい。
[1034] ディスプレイ113は、たとえば液晶ディスプレイ(LCD)、陰極線管ディスプレイ(CRT)など、任意の適当なディスプレイであってよい。他の実施形態において、コンピュータデバイス110、120、130、140のいずれかは、ディスプレイ113、123、133、143の代替または追加として他の出力デバイスを含む。たとえばコンピュータデバイス110、120、130、140のいずれか1つは、オーディオ出力デバイス(たとえばスピーカ)、触覚出力デバイスなどを含んでよい。また他の実施形態において、コンピュータデバイス110、120、130、140のいずれかは、ディスプレイ113、123、133、143の代替または追加として入力デバイスを含む。たとえばコンピュータデバイス110、120、130、140のいずれか1つは、キーボード、マウスなどを含んでよい。
[1035] コンピュータデバイス120は、それぞれプロセッサ111、メモリ112、およびディスプレイ113と構造的および/または機能的に同様であってよいプロセッサ121、メモリ122、およびディスプレイ123を有する。また、分散型データベースインスタンス124は、分散型データベースインスタンス114と構造的および/または機能的に同様であってよい。
[1036] コンピュータデバイス130は、それぞれプロセッサ111、メモリ112、およびディスプレイ113と構造的および/または機能的に同様であってよいプロセッサ131、メモリ132、およびディスプレイ133を有する。また、分散型データベースインスタンス134は、分散型データベースインスタンス114と構造的および/または機能的に同様であってよい。
[1037] コンピュータデバイス140は、それぞれプロセッサ111、メモリ112、およびディスプレイ113と構造的および/または機能的に同様であってよいプロセッサ141、メモリ142、およびディスプレイ143を有する。また、分散型データベースインスタンス144は、分散型データベースインスタンス114と構造的および/または機能的に同様であってよい。
[1038] コンピュータデバイス110、120、130、140は、互いに同様であるものとして示されるが、分散型データベースシステム100の各コンピュータデバイスは、他のコンピュータデバイスと異なってもよい。分散型データベースシステム100の各コンピュータデバイス110、120、130、140は、たとえばコンピューティングエンティティ(たとえばデスクトップコンピュータ、ラップトップコンピュータなどのパーソナルコンピューティングデバイス)、モバイルフォン、パーソナルデジタルアシスタント(PDA)などのいずれかであってよい。たとえば、コンピュータデバイス110はデスクトップコンピュータであってよく、コンピュータデバイス120はスマートフォンであってよく、コンピュータデバイス130はサーバであってよい。
[1039] いくつかの実施形態において、コンピュータデバイス110、120、130、140の1または複数の部分は、ハードウェアベースのモジュール(たとえばデジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA))および/またはソフトウェアベースのモジュール(たとえば、メモリに格納されおよび/またはプロセッサで実行されるコンピュータコードのモジュール)を含んでよい。いくつかの実施形態において、コンピュータデバイス110、120、130、140に関連する機能(たとえば、プロセッサ111、121、131、141に関連する機能)の1または複数は、1または複数のモジュールに含まれ得る(たとえば図2を参照)。
[1040] コンピュータデバイス(たとえばコンピュータデバイス110、120、130、140)のプロパティを含む分散型データベースシステム100のプロパティ、コンピュータデバイスの数、およびネットワーク105は、任意の数の方法で選択され得る。いくつかの例において、分散型データベースシステム100のプロパティは、分散型データベースシステム100の管理者によって選択され得る。他の例において、分散型データベースシステム100のプロパティは、分散型データベースシステム100のユーザによって集合的に選択され得る。
[1041] 分散型データベースシステム100が用いられることにより、コンピュータデバイス110、120、130、および140の中からリーダが指名されることはない。具体的には、コンピュータデバイス110、120、130、または140のいずれも、コンピュータデバイス110、120、130、140の分散型データベースインスタンス111、12、131、141に格納された値間での論議を解決するためのリーダとして識別および/または選択されない。代わりに、本明細書で説明されるイベント同期プロセス、投票プロセスおよび/または方法を用いて、コンピュータデバイス110、120、130、140は集合的にパラメータの値に収束してよい。
[1042] 分散型データベースシステム内にリーダを有さないことにより、分散型データベースシステムの安全性が高まる。具体的には、リーダがいる場合、攻撃および/または故障の単一ポイントが存在する。悪意のあるソフトウェアがリーダに侵入し、および/またはリーダの分散型データベースインスタンスにおけるパラメータの値が悪意的に変更された場合、故障および/または不正値が他の分散型データベースインスタンス全体に伝搬する。しかしリーダレスシステムにおいて、攻撃および/または故障の単一ポイントは存在しない。具体的には、本明細書で更に詳しく説明するように、リーダレスシステムの分散型データベースインスタンスにおけるパラメータが値を含む場合、その値は、その分散型データベースインスタンスがシステム内の他の分散型データベースインスタンスと値を交換した後、変更される。また、本明細書で説明されるリーダレス分散型データベースシステムは、本明細書で更に詳しく説明するように、デバイス間で送信されるデータの量を低減するとともに収束の速度を増加させる。
[1043] 図2は、実施形態に係る、分散型データベースシステム(たとえば分散型データベースシステム100)のコンピュータデバイス200を示す。いくつかの実施形態において、コンピュータデバイス200は、図1に関して示され説明されたコンピュータデバイス110、120、130、140と同様であってよい。コンピュータデバイス200は、プロセッサ210およびメモリ220を含む。プロセッサ210およびメモリ220は、互いに動作可能に結合される。いくつかの実施形態において、プロセッサ210およびメモリ220は、図1に関して詳しく説明されたプロセッサ111およびメモリ112とそれぞれ同様であってよい。図2に示すように、プロセッサ210は、データベース収束モジュール211および通信モジュール210を含み、メモリ220は、分散型データベースインスタンス221を含む。通信モジュール212は、コンピュータデバイス200が他のコンピュータデバイスと通信(たとえば他のコンピュータデバイスとの間でデータを送信および/または受信)することを可能にする。いくつかの実施形態において、通信モジュール212(図1には不図示)は、コンピュータデバイス110がコンピュータデバイス120、130、140と通信することを可能にする。通信モジュール210は、たとえばネットワークインタフェースコントローラ(NIC)、無線接続、有線ポートなどを含み、および/または有効にしてよい。このように、通信モジュール210は、コンピュータデバイス200と他のデバイスとの間の(たとえば図1のネットワーク105またはインターネット(不図示)などのネットワークを介した)通信セッションを確立および/または維持することができる。同様に述べると、通信モジュール210は、コンピュータデバイス200が他のデバイスとの間でデータを送信および/または受信することを可能にしてよい。
[1044] いくつかの例において、データベース収束モジュール211は、他のコンピューティングデバイスとイベントおよび/または取引を交換し、データベース収束モジュール211が受信するイベントおよび/または取引を格納し、イベント間の参照のパターンによって定められた半順序に基づいてイベントおよび/または取引の順序付けを計算することができる。各イベントは、2つの先行イベントの(そのイベントを2つの先行イベントおよびそれらの祖先イベントに結び付ける、またはその逆の)暗号ハッシュ、(たとえば記録すべき取引などの)ペイロードデータ、たとえば現在時間、作成者が主張する、イベントが最初に定義された時間であるタイムスタンプ(たとえばデータおよびUTC時間)といった他の情報などを含むレコードであってよい。いくつかの例において、メンバによって定義された第1イベントは、他のメンバによって定義された単一イベントのハッシュしか含まない。そのような例において、メンバは、以前の自己ハッシュ(たとえば、そのメンバによって過去に定義されたイベントのハッシュ)を未だ有さない。いくつかの例において、分散型データベース内の第1イベントは、(その分散型データベースに関する先行イベントが存在しないために)任意の先行イベントのハッシュを含まない。
[1045] いくつかの実施形態において、そのような2つの先行イベントの暗号ハッシュは、イベントを入力として用いる暗号ハッシュ関数に基づいて定義されたハッシュ値であってよい。具体的には、そのような実施形態において、イベントは、(そのイベントの情報を表す)特定のバイトシーケンスまたはストリングを含む。イベントのハッシュは、そのイベントに関するバイトシーケンスを入力として用いるハッシュ関数からの戻り値であってよい。他の実施形態において、イベントに関連する他の任意の適当なデータ(たとえば識別子、シリアル番号、イベントの特定の部分を表すバイトなど)が、そのイベントのハッシュを計算するためのハッシュ関数への入力として用いられ得る。任意の適当なハッシュ関数が、ハッシュを定義するために用いられ得る。いくつかの実施形態において、各メンバは、所与のイベントに関して各メンバにおいて同じハッシュが生成されるように、同じハッシュ関数を用いる。イベントはその後、イベントを定義および/または作成するメンバによってデジタル署名され得る。
[1046] いくつかの例において、イベントのセットおよびそれらの相互接続は、有向非巡回グラフ(DAG)を形成してよい。いくつかの例において、DAG内の各イベントは、2つの先行イベントを参照し(そのイベントを2つの先行イベントおよびそれらの祖先イベントに結び付け、またはその逆であり)、各参照は、厳密に1つに対するものであり、ループは存在しない。いくつかの実施形態において、DAGは、暗号ハッシュに基づくので、データ構造は、(本明細書において「ハッシュDAG」とも称される)ハッシュグラフと呼ばれ得る。ハッシュグラフは、半順序を直接符号化し、すなわち、YがXのハッシュを含む場合、またはXのハッシュを含むイベントのハッシュをYが含む場合、または任意の長さのそのような経路に関して、イベントXはイベントYより前に来ることが知られる。ただし、XからYへの、またはYからXへの経路が存在しない場合、半順序は、どのイベントが最初になるかを定義しない。したがって、データベース収束モジュールは、半順序から全順序を計算することができる。これは、コンピュータデバイスが同じ順序を計算するように、コンピュータデバイスによって用いられる任意の適当な確定関数によって行われ得る。いくつかの実施形態において、各メンバは、各同期後にこの順序を再計算してよく、最終的にコンセンサスが現れるようにこれらの順序は収束してよい。
[1047] コンセンサスアルゴリズムは、ハッシュグラフ内のイベントの順序および/またはイベント内に格納された取引の順序を決定するために用いられ得る。一方、取引の順序は、順序に従ってこれらの取引を行った結果としてデータベースの状態を定義してよい。定義されたデータベースの状態は、データベース状態変数として格納され得る。
[1048] いくつかの例において、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するために以下の関数を用いてよい。(「メンバ」と呼ばれる)他のコンピュータデバイスの各々について、データベース収束モジュールは、そのメンバによってイベント(および/またはこれらのイベントの指標)が受信された順序を知るために、ハッシュグラフを調査してよい。データベース収束モジュールはその後、そのメンバが各イベントに数値「ランク」を割り当てたように計算してよく、ランクは、メンバが受信した第1イベントに対して1であり、メンバが受信した第2イベントに対して2であり、以下同様である。データベース収束モジュールは、ハッシュグラフ内の各メンバにこれを行ってよい。その後、各イベントについて、データベース収束モジュールは、割り当てられたランクの中央値を計算し、それらの中央値によってイベントを分類してよい。分類は、2つの同順位イベントをそれらのハッシュの番号順に分類することなど決定的方法で、または他の何らかの方法によって同順位を打破してよく、各メンバのデータベース収束モジュールは同じ方法を用いる。この分類の結果が全順序である。
[1049] 図6は、全順序を決定するための一例のハッシュグラフ640を示す。ハッシュグラフ640は、2つのイベント(最も下の縞模様の円および最も下の点模様の円)、および各メンバがこれらのイベントの指標を受信する最初の時間(他の縞模様および点模様の円)を示す。上部における各メンバの名前は、遅い順でどのイベントが最初であるかによって色分けされる。点模様よりも縞模様の初期投票が多いので、メンバの各々に関するコンセンサス投票は縞模様である。すなわち、メンバは最終的に、縞模様のイベントが点模様のイベントより先に発生したという合意に収束する。
[1050] この例において、メンバ(アリス、ボブ、キャロル、デイブ、およびエドと表示されたコンピュータデバイス)は、イベント642またはイベント644のどちらが最初に発生したかのコンセンサスを定めるために働く。各縞模様の円は、メンバがイベント644(および/またはイベント644の指標)を最初に受信したイベントを示す。同様に、各点模様の円は、メンバがイベント642(および/またはイベント642の指標)を最初に受信したイベントを示す。ハッシュグラフ640に示すように、アリス、ボブ、およびキャロルの各々は、イベント642より先にイベント644(および/またはイベント644の指標)を受信した。デイブおよびエドの両者は、イベント644(および/またはイベント644の指標)より先にイベント642(および/またはイベント642の指標)を受信した。したがって、イベント642より先にイベント644を受信したメンバの数が多いため、各メンバによって、イベント644がイベント642より先に発生したことを示すように全順序が決定され得る。
[1051] 他の例において、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するために様々な関数を用いてよい。そのような実施形態において、たとえばデータベース収束モジュールは、全順序を計算するために以下の関数を用いてよく、ここで正の整数Qは、メンバによって共有されるパラメータである。
creator(x)=イベントxを作成したメンバ
anc(x)=x自体を含む、xの先駆けとなるイベントのセット
other(x)=xが作成される直前に同期したメンバによって作成されたイベント
self(x)=同じ作成者によるxより前の最後のイベント
self(x,0)=self(x)
self(x,n)=self(self(x),n−1)
order(x,y)=k、ここでyは、creator(x)が学んだk番目のイベントである
last(x)={y|y∈anc(x)Λ¬∃z∈anc(x),(y∈anc(z)Λcreator(y)=creator(z))}
Figure 2020504916
fast(x,y)=要素z∈anc(x)が中央値slow(w,z)によって分類され、各イベントのハッシュw∈last(x)によって引き分けが解消された、分類されたリスト内でのyの位置
[1052] この実施形態において、fast(x,y)は、xが作成および/または定義されたほぼ直後の、creator(x)の意見における、イベントの全順序におけるyの位置を与える。Qが無限である場合、上記は、先述した実施形態における全順序と同じ全順序を計算する。Qが有限であり、全てのメンバがオンラインである場合、上記は、先述した実施形態における全順序と同じ全順序を計算する。Qが有限であり、所与の時間にメンバの半数以下がオンラインである場合、この関数により、オンラインメンバは、新しいメンバが緩慢に1人ずつオンラインになる際に変わらず保たれるオンラインメンバ間でのコンセンサスに至ることができる。ただし、ネットワークのパーティションが存在する場合、各パーティションのメンバは、彼ら自身のコンセンサスに至ることができる。その後、パーティションが解消すると、より小さいパーティションのメンバは、より大きいパーティションのコンセンサスを採択する。
[1053] また他の例において、図8、図9、および図13A〜14Bに関して説明するように、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するために、また異なる関数を用いてよい。図8〜9に示すように、各メンバ(アリス、ボブ、キャロル、デイブ、およびエド)は、イベント(図8に示す1401〜1413、図9に示す1501〜1506)を作成および/または定義する。図8、図9、および図13A〜14Bに関して説明される関数およびサブ関数を用いて、イベントに関する全順序は、本明細書で更に詳しく説明するように、イベントをそれらの受信ラウンドによって分類すること、それらの受信タイムスタンプによって同順位を打破すること、およびそれらの署名によってこれらの同順位を打破することによって計算され得る。他の例において、イベントに関する全順序は、それらの受信ラウンドによってイベントを分類すること、それらの(受信タイムスタンプの代わりに)受信世代によって同順位を打破すること、およびそれらの署名によってこれらの同順位を打破することによって計算され得る。以下の段落は、イベントに関する順序を決定するためにイベントの受信ラウンドおよび受信世代を作成および/または定義するために用いられる関数を明示するものである。
[1054] 「親」:YがXのハッシュを含む場合、イベントXはイベントYの親である。たとえば図8において、イベント1412の親は、イベント1406およびイベント1408を含む。
[1055] 「祖先」:イベントXの祖先は、X、Xの親、Xの親の親、と続く。たとえば図8において、イベント1412の祖先は、イベント1401、1402、1403、1406、1408、および1412である。イベントの祖先は、そのイベントにリンクされると言ってよく、逆もしかりである。
[1056] 「子孫」:イベントXの子孫は、X、Xの子、Xの子の子、と続く。たとえば図8において、イベント1401の子孫は、図に示される全てのイベントである。また他の例として、イベント1403の子孫は、イベント1403、1404、1406、1407、1409、1410、1411、1412、および1413である。イベントの子孫は、そのイベントにリンクされると言ってよく、逆もしかりである。
[1057] 「N」:母集団におけるメンバの総数である。たとえば図8において、メンバは、アリス、ボブ、キャロル、デイブ、およびエドと表示されたコンピュータであり、Nは5に等しい。
[1058] 「M」:Nの特定の割合より大きい(たとえばNの2/3より大きい)最小の整数である。たとえば図8において、割合が2/3に定められた場合、Mは4に等しい。他の例において、Mはたとえば、Nの異なる割合(たとえば1/3、1/2など)、特定の所定の数、および/または他の任意の適当な方法で定められてよい。
[1059] 「自己親」:イベントXの自己親は、同じ方法によって作成および/または定義された親イベントYである。たとえば図8において、イベント1405の自己親は1401である。
[1060] 「自己祖先」:イベントXの自己祖先は、X、Xの自己親、Xの自己親の自己親、と続く。
[1061] 「シーケンス番号」(または「SN」):イベントの自己親のシーケンス番号足す1として定義される、イベントの整数属性である。たとえば図8において、イベント1405の自己親は1401である。イベント1401のシーケンス番号は1であるので、イベント1405のシーケンス番号は2(すなわち、1足す1)である。
[1062] 「世代番号」(または「GN」):イベントの親の世代番号の最大値足す1として定義される、イベントの整数属性である。たとえば図8において、イベント1412は、それぞれ世代番号4および2を有する2つの親、イベント1406および1408を有する。したがってイベント1412の世代番号は5(すなわち、4足す1)である。
[1063] 「ラウンドインクリメント」(または「RI」):0または1のいずれかであり得るイベントの属性である。
[1064] 「ラウンド番号」(または「RN」):イベントの整数属性である。いくつかの例において、ラウンド番号は、イベントの親のラウンド番号の最大値足すイベントのラウンドインクリメントとして定義され得る。たとえば図8において、イベント1412は、2つの親であるイベント1406および1408を有し、その両方がラウンド番号1を有する。またイベント1412は、ラウンドインクリメント1を有する。したがって、イベント1412のラウンド番号は2(すなわち、1足す1)である。他の例において、イベントが、全てラウンド番号R−1を有する、異なるメンバによって定義および/または作成された少なくともM個のイベントを(本明細書で説明するように)強く目撃することができるように、Rが最小の整数である場合、ラウンド番号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または他の任意の適当な番号を含んでよい。
[1065] 「分岐」:イベントXおよびイベントYが同じメンバによって定義および/または作成され、どちらも他方の自己祖先ではない場合、イベントXはイベントYの分岐である。たとえば図9において、メンバのデイブは、イベント1503および1504を生成および/または定義することによって分岐し、両方のイベントが同じ自己親(すなわちイベント1501)を有するので、イベント1503はイベント1504の自己祖先ではなく、イベント1504はイベント1503の自己祖先ではない。
[1066] 分岐の「識別」:分岐は、互いに分岐する2つのイベントがいずれもこれら2つのイベントの後に作成および/または定義された第3イベントの祖先である場合、第3イベントによって「識別」され得る。たとえば図9において、メンバのデイブは、どちらも他方の自己祖先ではないイベント1503および1504を作成することによって分岐する。この分岐は、イベント1503および1504がいずれもイベント1506の祖先であるため、後のイベント1506によって識別され得る。いくつかの例において、分岐の識別は、特定のメンバ(たとえばデイブ)が不正をしたことを示してよい。
[1067] イベントの「識別」:イベントXは、Xが、Yの分岐である祖先イベントZを有さない場合、祖先イベントYを「識別」または「目撃」する。たとえば図8において、イベント1403はイベント1412の祖先であり、イベント1403の分岐である祖先イベントをイベント1412が有さないため、イベント1412はイベント1403を識別する(「目撃する」とも称される)。いくつかの例において、XがイベントYより前の分岐を識別しない場合、イベントXはイベントYを識別することができる。そのような例において、イベントXが、イベントYを定義するメンバによるイベントYより後の分岐を識別しても、イベントXはイベントYを目撃できる。イベントXは、分岐より後のそのメンバによるイベントを識別しない。また、メンバが、いずれもメンバの履歴内の第1のイベントである2つの異なるイベントを定義した場合、イベントXは分岐を識別することができ、そのメンバによる任意のイベントを識別しない。
[1068] イベントの「強い識別」(本明細書において「強い目撃」とも称される):イベントXは、XがYを識別する場合、Xと同じメンバによって作成および/または定義された祖先イベントYを「強く識別」(または「強く目撃」)する。イベントXは、(1)XおよびYの両方を含み、(2)イベントXの祖先であり、(3)祖先イベントYの子孫であり、(4)Xによって識別され、(5)各々がYを識別することができ、(6)少なくともM個の異なるメンバによって作成および/または定義されたイベントのセットSが存在する場合、Xと同じメンバによって作成および/または定義されていない祖先イベントYを「強く識別」する。たとえば図8において、MがNの2/3より大きい最小の整数(すなわち、M=1+下限(2N/3)であり、この例では4)であるように定義された場合、イベント1401、1402、1406、および1412のセットが、イベント1412の祖先かつイベント1401の子孫である少なくとも4つのイベントのセットであり、デイブ、キャロル、ボブ、およびエドの4人のメンバによってそれぞれ作成および/または定義され、イベント1412がイベント1401、1402、1406、および1412の各々を識別し、イベント1401、1402、1406、および1412の各々がイベント1401を識別するので、イベント1412は、祖先イベント1401を強く識別する。同様に述べると、Xが、各々がYを目撃することができる、異なるメンバによって作成または定義された少なくともM個のイベント(たとえばイベント1401、1402、1406、および1412)を目撃することができる場合、イベントX(たとえばイベント1412)はイベントY(たとえばイベント1401)を「強く目撃」することができる。
[1069] 「ラウンドR第1」イベント(本明細書において「目撃者」とも称される):イベントが(1)ラウンド番号Rを有し、(2)Rよりも小さいラウンド番号を有する自己親を有するか、または自己親を有さない場合、そのイベントは「ラウンドR第1」イベント(または「目撃者」)である。たとえば図8において、イベント1412は、ラウンド番号2を有し、その自己親が(2よりも小さい)ラウンド番号1を有するイベント1408であるため、「ラウンド2第1」イベントである。
[1070] いくつかの例において、イベントXのラウンドインクリメントは、Xが少なくともM個の「ラウンドR第1」イベントを「強く識別」する場合かつその場合に限り、1と定義され、ここでRはXの親の最大ラウンド番号である。たとえば図8において、MがNの1/2よりも大きい最小の整数に定義された場合、Mは3である。よってイベント1412は、M個のイベント1401、1402、および1408を強く識別し、それらすべてがラウンド1第1イベントである。1412の両方の親がラウンド1であり、1412が少なくともM個のラウンド1第1を強く識別するので、1412のラウンドインクリメントは1である。図内の「RI=0」と記されたイベントの各々は、少なくともM個のラウンド1第1を強く識別できないので、それらのラウンドインクリメントは0である。
[1071] いくつかの例において、以下の方法は、イベントXが祖先イベントYを強く識別できるかを決定するために用いられ得る。各ラウンドR第1祖先イベントYに関して、メンバごとに1つ、整数のアレイA1を保持し、イベントXの最小シーケンス番号を付与するものとし、その場合、そのメンバがイベントXを作成および/または定義し、XがYを識別できる。各イベントZに関して、ZがYを識別できるように、メンバごとに1つ、整数のアレイA2を保持し、そのメンバによって作成および/または定義されたイベントWの最大シーケンス番号を付与するものとする。Zが祖先イベントYを強く識別できるかを決定するために、A1[E]≦A2[E]であるように要素位置Eの数をカウントする。イベントZは、このカウントがMより大きい場合かつその場合に限り、Yを強く識別することができる。たとえば図8において、メンバのアリス、ボブ、キャロル、デイブ、およびエドの各々はイベント1401を識別することができ、これが可能である最初のイベントは、それぞれイベント{1404、1403、1402、1401、1408}である。これらのイベントは、A1={1、1、1、1、1}のシーケンス番号を有する。同様に、イベント1412によって識別される各人による最後のイベントは、イベント{NONE、1406、1402、1401、1412}であり、1412はアリスによるイベントをどれも識別することができないので、アリスは「NONE」と記載される。これらのイベントは、それぞれA2={0、2、1、1、2}のシーケンス番号を有し、全てのイベントが正のシーケンス番号を有するので、0は、アリスが1412によって識別されるイベントを有さないことを意味する。リストA1とリストA2とを比較すると、{1≦0、1≦2、1≦1、1≦1、1≦2}という結果がもたらされ、これは{偽、真、真、真、真}に等しく、4つの真の値を有する。したがって、1412の祖先であり1401の子孫である4つのイベントのセットSが存在する。4はM以上であるため、1412は1401を強く識別する。
[1072] A1およびA2によって、イベントXが祖先イベントYを強く識別できるかを決定するための方法の実装に関するまた他の変形例は、以下のとおりである。両方のアレイにおける整数要素が128未満である場合、各要素を1バイトに格納し、そのような要素を1つの64ビットワードにパックし、A1およびA2をそのようなワードのアレイとすることが可能である。A1における各バイトの最上位ビットは0に設定され、A2における各バイトの最上位ビットは1に設定され得る。2つの対応するワードを引き、最上位ビットを除いて全てのゼロに対しマスクを有するビットごとのANDを実行し、その後、7ビット位置だけ右シフトし、Cプログラミング言語で((A2[i]‐A1[i])&0x8080808080808080)>>7)と表される値を得る。これは、ゼロに初期化された実行時アキュムレータSに加えられ得る。これを複数回行った後、バイトをシフトおよび加算することによってアキュムレータをカウントに変換し、((S&0xff)+((S>>8)&0xff)+((S>>16)&0xff)+((S>>24)&0xff)+((S>>32)&0xff)+((S>>40)&0xff)+((S>>48)&0xff)+((S>>56)&0xff))が得られる。いくつかの例において、これらの計算は、たとえばC、Javaなどのプログラミング言語で実行され得る。他の例において、計算は、たとえばIntel社およびAMD社によって供給されるAdvanced Vector Extensions(AVX)命令などのプロセッサ固有命令、またはグラフィック処理ユニット(GPU)または汎用グラフィック処理ユニット(GPGPU)における均等物を用いて実行され得る。いくつかのアーキテクチャにおいて、計算は、たとえば128、256、512ビット、またはそれ以上など、64ビットより大きいワードを用いて高速で実行され得る。
[1073] 「有名な」イベント:ラウンドRイベントXは、(1)イベントXが「ラウンドR第1」イベント(または「目撃者」)であり、(2)後述するように、ビザンチン合意プロトコルの実行によって「YES」の決定が下った場合、「有名」である。いくつかの実施形態において、ビザンチン合意プロトコルは、分散型データベースのインスタンス(たとえば分散型データベースインスタンス114)および/またはデータベース収束モジュール(たとえばデータベース収束モジュール211)によって実行され得る。たとえば図8において、5つのラウンド1第1である1401、1402、1403、1404、および1408が示される。MがNの1/2よりも大きい最小の整数に定義された場合、Mは3であり、1412はラウンド2第1である。プロトコルがより長く動作する場合、ハッシュグラフは上向きに成長し、最終的に、他の4人のメンバもまた、この図の最上部より上にラウンド2第1を有する。各ラウンド2第1は、ラウンド1第1の各々が「有名」であるかに関する「投票権」を有する。イベント1412は、自身が識別できるラウンド1第1が1401、1402、および1403であるため、それらが有名であることに対しYESを投票する。イベント1412は、1404を識別できないため、1404が有名であることに対しNOを投票する。たとえば1402など所与のラウンド1第1に関し、それが「有名」であるか否かの状態は、それが有名であるか否かに関する各ラウンド2第1の投票を計算することによって決定される。これらの投票はその後、最終的に1402が有名であったかに関する同意が得られるまで、ラウンド3第1へ、次にラウンド4第1へと、以下同様に伝搬する。同じプロセスが他の第1について繰り返される。
[1074] ビザンチン合意プロトコルは、「有名なイベント」を識別するために、「ラウンドR第1」イベントの投票および/または決定を収集し、用いてよい。たとえば、「ラウンドR+1第1の」Yは、YがイベントXを「識別」することができる場合、「YES」を投票し、そうでない場合、「NO」を投票する。投票はその後、任意のメンバによって決定が下されるまで、G=R+2、R+3、R+4などである各ラウンドGに関して計算される。決定が下されると、各ラウンドGに関して投票が計算される。これらのラウンドのいくつかは、「多数決」ラウンドであってよく、他のいくつかは、「コイン」ラウンドであってよい。いくつかの例において、たとえばラウンドR+2は多数決ラウンドであり、今後のラウンドは、(たとえば既定のスケジュールに従って)多数決ラウンドまたはコインラウンドのいずれかとして指定される。たとえばいくつかの例において、今後のラウンドが多数決ラウンドであるかコインラウンドであるかは、2つの連続したコインラウンドが存在し得ないという条件の下、任意に決定され得る。たとえば、5つの多数決ラウンドが存在し、次に1つのコインラウンド、次に5つの多数決ラウンド、次に1つのコインラウンド、といったように合意に達するまでの間繰り返されることが既定され得る。
[1075] いくつかの例において、ラウンドGが多数決ラウンドである場合、投票は、以下のように計算され得る。Vを投票する少なくともM個のラウンドG−1第1を強く識別するラウンドGイベントが存在する場合(ここでVは「YES」または「NO」のいずれかである)、コンセンサス決定はVであり、ビザンチン合意プロトコルは終了する。他の場合、各ラウンドG第1イベントは、各ラウンドG第1イベントが強く識別し得るラウンドG−1第1の過半数である新たな投票を計算する。過半数ではなく引き分けが存在する例において、投票は、「YES」と指定され得る。
[1076] 同様に述べると、XがラウンドR目撃者(またはラウンドR第1)である場合、ラウンドR+1、R+2、以下同様における投票結果が計算されてよく、各ラウンドにおける目撃者は、Xが有名であるかに関して投票する。ラウンドR+1において、Xを目撃することができる全ての目撃者がYESを投票し、その他の目撃者はNOを投票する。ラウンドR+2において、全ての目撃者は、自身が強く目撃することができるラウンドR+1目撃者の投票の過半数に従って投票する。同様に、ラウンドR+3において、全ての目撃者は、自身が強く目撃することができるラウンドR+2目撃者の投票の過半数に従って投票する。これが複数ラウンド継続し得る。引き分けの場合、投票はYESに設定され得る。他の例において、引き分けはNOに設定されてよく、あるいはランダムに設定され得る。任意のラウンドが、NOを投票する少なくともM個の目撃者を有する場合、選挙は終了し、Xは有名ではない。任意のラウンドが、YESを投票する少なくともM個の目撃者を有する場合、選挙は終了し、Xは有名である。YESまたはNOのどちらも少なくともM個の票を有さない場合、選挙は次のラウンドに継続する。
[1077] 例として、図8において、図の下側に示される何らかのラウンド第1イベントXを考える。この時、各ラウンド1第1は、Xが有名であるかに関する票を有する。イベント1412は、ラウンド1第1イベント1401、1402、および1408を強く識別することができる。よってイベント1412は、それらの投票に基づいて投票する。これが多数決ラウンドである場合、1412は、{1401、1402、1408}のM個以上がYESの票を有するかを確かめる。そうである場合、決定はYESであり、合意が実現される。それらのM個以上がNOを投票する場合、決定はNOであり、合意が実現されない。投票結果がいずれの方向にもM個以上を有さない場合、1412は、1401、1402、および1408の投票の過半数である票を与えられる(引き分けであった場合、YESを投票することにより引き分けを解消する)。その投票はその後、次のラウンドで用いられ、合意に至るまで継続する。
[1078] いくつかの例において、ラウンドGがコインラウンドである場合、投票結果は以下のように計算され得る。イベントXが、V(Vは「YES」または「NO」のいずれかである)を投票するM個以上のラウンドG−1第1を識別することができる場合、イベントXは自身の投票をVに変更する。そうでない場合、ラウンドGがコインラウンドである場合、各ラウンドG第1イベントXは、自身の投票を、イベントXのシグネチャの最下位ビットと定義される、(いくつかの例におけるコインフリップと同様の)疑似ランダム決定の結果に変更する。
[1079] 同様に述べると、そのような例において、選挙がラウンドR+K(コインラウンド)に到達すると、選挙は、そのラウンドで終了せず、ここでKは指定の係数(たとえば、3、6、7、8、16、32などの数または他の任意の適当な数の倍数)である。選挙は、このラウンドに到達すると、少なくとも更に1ラウンド継続し得る。そのようなラウンドにおいて、イベントYがラウンドR+Kの目撃者であり、Vを投票するラウンドR+K−1からのM個以上の目撃者を強く目撃することができる場合、YはVを投票する。そうでない場合、Yはランダムな値に従って(たとえば、1=YESかつ0=NO、またはその逆であるイベントYのシグネチャのビット(たとえば最下位ビット、最上位ビット、ランダムに選択されたビット)に従って、イベントYのタイムスタンプに従って、暗号「共有コイン」プロトコルおよび/または他の任意のランダムな決定を用いて)投票する。このランダムな決定は、Yが作成される前に予測不可能であるので、イベントおよび合意プロトコルの安全性を高めることができる。
[1080] たとえば図8において、ラウンド2がコインラウンドであり、ラウンド1より前の何らかのイベントが有名であったかに関して投票する場合、イベント1412は最初に、{1401、1402、1408}のうちM個以上がYESと投票したかNOと投票したかを確かめる。そのような場合、1412は同様に投票をする。どちらにもM個以上が投票していない場合、1412は、(たとえば、エドがイベント1412を作成および/または定義した時、これに署名した時にイベント1412のために作成したデジタルシグネチャの最下位ビットに基づいて)ランダムまたは疑似ランダム投票をする。
[1081] いくつかの例において、疑似ランダム決定の結果は、たとえばラウンド番号の閾値シグネチャの最下位ビットとして実装され得る暗号共有コインプロトコルの結果であってよい。
[1082] システムは、上述した疑似ランダム決定の結果を計算するための方法のいずれか1つによって構築され得る。いくつかの例において、システムは、様々な方法を何らかの順序でサイクルする。他の例において、システムは、既定のパターンに従って様々な方法の中から選択してよい。
[1083] 「受信ラウンド」:イベントXは、Rが、ラウンド番号Rを有する有名なラウンドRの第1イベント(または有名な目撃者)の少なくとも半分がXの子孫である、および/またはXを目撃できるような最小整数である場合、Rの「受信ラウンド」を有する。他の例において、他の任意の適当な割合が用いられ得る。たとえば他の例において、イベントXは、Rが、ラウンド番号Rを有する有名なラウンドR第1イベント(または有名な目撃者)の所定の割合(たとえば40%、60%、80%など)以上がXの子孫である、および/またはXを目撃できる場合、イベントXはRの「受信ラウンド」を有する。
[1084] いくつかの例において、イベントXの「受信世代」は、以下のように計算され得る。イベントXを識別できる各ラウンドRの第1イベントをどのメンバが作成および/または定義したかを求める。次に、Xを識別できるそのメンバによる最初のイベントの世代番号を決定する。次に、Xの「受信世代」を、そのリストの中央値として定義する。
[1085] いくつかの例において、イベントXの「受信タイムスタンプ」Tは、Xを識別および/または目撃する、各メンバによる第1イベントを含むイベントにおけるタイムスタンプの中央値であってよい。たとえば、イベント1401の受信タイムスタンプは、イベント1402、1403、1403、および1408に関するタイムスタンプの値の中央値であってよい。いくつかの例において、イベント1401のタイムスタンプが中央値の計算に含まれ得る。他の例において、Xに関する受信タイムスタンプは、Xを識別または目撃する各メンバによる第1イベントであるイベントにおけるタイムスタンプの値の組み合わせ、または他の任意の値であってよい。たとえばXに関する受信タイムスタンプは、タイムスタンプの平均、タイムスタンプの標準偏差、(たとえば計算から最初および最後のタイムスタンプを取り除くことによって)修正された平均などに基づいてよい。また他の例において、拡張中央値が用いられ得る。
[1086] いくつかの例において、イベントに関する全順序および/またはコンセンサス順序は、それらの受信ラウンドによってイベントを分類すること、それらの受信タイムスタンプによって引き分けを解消すること、それらのシグネチャによってそれらの引き分けを解消することによって計算される。他の例において、イベントに関する全順序は、それらの受信ラウンドによってイベントを分類すること、それらの受信世代によって引き分けを解消すること、およびそれらのシグネチャによってそれらの引き分けを解消することによって計算され得る。以下の段落は、イベントの受信ラウンド、受信タイムスタンプ、および/または受信世代を計算および/または定義するために用いられる関数を明示する。
[1087] 他の例において、各イベントのシグネチャを用いる代わりに、同じ受信ラウンドおよび/またはそのラウンド内の受信世代を有する有名なイベントまたは有名な目撃者のシグネチャを有するイベントXORedのシグネチャが用いられ得る。他の例において、イベントシグネチャの他の任意の適当な組み合わせが、引き分けを解消してイベントのコンセンサス順序を定めるために用いられ得る。
[1088] また他の例において、リストの中央値として「受信世代」を定義する代わりに、「受信世代」がリスト自体として定義され得る。よって、受信世代によって分類する場合、2つの受信世代がそれらのリストの中央要素によって比較されてよく、中央値の直前の要素によって引き分けを解消し、中央値の直後の要素によってこれらの引き分けを解消し、引き分けが解消されるまで、これまで用いられた要素より前の要素と後の要素とを交互に繰り返すことによって継続する。
[1089] いくつかの例において、中央タイムスタンプの代わりに「拡張中央値」が用いられ得る。そのような例において、単一の受信タイムスタンプではなく、タイムスタンプのリストが各イベントに関して定義され得る。イベントXに関するタイムスタンプのリストは、Xを識別および/または目撃する各メンバによる第1イベントを含んでよい。たとえば図8において、イベント1401に関するタイムスタンプのリストは、イベント1402、1403、1403、および1408のタイムスタンプを含んでよい。いくつかの例において、イベント1401のタイムスタンプも含まれ得る。タイムスタンプのリストを用いて引き分けを解消する(すなわち、2つのイベントが同じ受信ラウンドを有する)場合、各イベントのリストの中央タイムスタンプ(または二等分できる長さの場合、2つの中央タイムスタンプの所定の第1または第2のタイムスタンプ)が比較され得る。これらのタイムスタンプが同じである場合、中央タイムスタンプの直後のタイムスタンプが比較され得る。これらのタイムスタンプが同じである場合、中央タイムスタンプの直前のタイムスタンプが比較され得る。これらのタイムスタンプもまた同じである場合、3つの既に比較されたタイムスタンプより後のタイムスタンプが比較される。これを、引き分けが解消されるまで交互に繰り返し続けてよい。上記と同様に、2つのリストが同じである場合、2つの要素のシグネチャによって引き分けが解消され得る。
[1090] また他の例において、「拡張中央値」の代わりに「短縮された拡張中央値」が用いられ得る。そのような例において、タイムスタンプのリスト全体が各イベントについて格納されるのではない。代わりに、リストの中央付近のいくつかの値のみが格納され、比較のために用いられる。
[1091] 受信された中央タイムスタンプは、イベントの全順序の計算に加えて他の目的に用いられる可能性がある。たとえば、ボブは、彼がその契約により結ばれることに同意すると述べる契約に、アリスが同じ契約に署名した取引を含むイベントXが存在する場合かつその場合に限り、特定のデッドライン上またはその前にあるXに関する受信タイムスタンプによって署名し得る。そのような場合、ボブは、上述したように「受信中央タイムスタンプ」によって示されたようなデッドラインより後にアリスが署名した場合、契約によって結ばれない。
[1092] いくつかの例において、分散型データベースの状態は、コンセンサスが実現された後に定義され得る。たとえば、S(R)が、ラウンドRにおける有名な目撃者によって目撃され得るイベントのセットである場合、S(R)内の全てのイベントが最終的に、既知の受信ラウンドおよび受信タイムスタンプを有する。その時点で、S(R)内のイベントのコンセンサス順序は既知であり、変化しない。この時点に到達すると、メンバは、イベントおよびそれらの順序の表現を計算および/または定義してよい。たとえばメンバは、S(R)内のイベントのハッシュ値をそれらのコンセンサス順序において計算してよい。メンバはその後、ハッシュ値にデジタル署名し、そのメンバが定義する次のイベントにハッシュ値を含めてよい。これは、そのメンバが、S(R)内のイベントが変化しない所与の順序を有すると決定したことを、他のメンバに通知するために用いられ得る。メンバのM人以上(または他の任意の適当な数またはパーセンテージのメンバ)がS(R)のハッシュ値に署名(かつ、それに伴いハッシュ値によって表される順序に合意)した後、メンバのシグネチャのリストとともにイベントのコンセンサスリストは、コンセンサス順序がS(R)内のイベントに関して主張されるものであったことを証明するために用いられ得る単一のファイル(または他のデータ構造)を形成してよい。他の例において、イベントが、(本明細書で説明されるような)分散型データベースシステムの状態を更新する取引を含む場合、ハッシュ値は、S(R)内のイベントの取引をコンセンサス順序で適用した後の分散型データベースシステムの状態に関するものであってよい。
[1093] いくつかの例において、(上述したような)Mは、単にメンバの総数の分数、百分率、および/または値ではなく、各メンバに割り当てられた重み値に基づいてよい。そのような例において、各メンバは、分散型データベースシステムにおける関心および/または影響に関連するステークを有する。そのようなステークが重み値であってよい。そのメンバによって定義された各イベントは、これを定義するメンバの重み値を有すると言える。よってMは、全メンバの合計ステークの分数であってよい。Mに依存するものとして上述されたイベントは、M以上のステーク総和を有するメンバのセットが合意した場合、発生する。したがって特定のメンバは、自身のステークに基づいて、システム、およびコンセンサス順序がどのように導出されるかに対してより大きな影響力を有し得る。いくつかの例において、イベント内の取引は、1または複数のメンバのステークを変更し、新たなメンバを追加し、および/またはメンバを削除してよい。そのような取引がラウンドRを受信した場合、受信ラウンドが計算された後、ラウンドR目撃者の後のイベントは、修正されたステークおよび修正されたメンバリストを用いて自身のラウンド番号および他の情報を再計算する。ラウンドRイベントが有名であるかに関する投票は、古いステークおよびメンバリストを用いるが、Rより後のラウンドに関する投票は、新たなステークおよびメンバリストを用いる。コンセンサスを決定するために重み値を用いることに関する追加の細部は、参照によってその全体が本願に組み込まれる、2016年12月21日に出願された“Methods And Apparatus For A Distributed Database With Consensus Determined Based On Weighted Stakes”と題された米国特許出願第15/387,048号において説明される。
[1094] 図2において、データベース収束モジュール211および通信モジュール212は、プロセッサ210内に実装されるものとして示される。他の実施形態において、データベース収束モジュール211および/または通信モジュール212は、メモリ220内に実装され得る。また他の例において、データベース収束モジュール211および/または通信モジュール212は、ハードウェアベース(たとえばASIC、FPGAなど)であってよい。
[1095] いくつかの例において、(たとえば図1に関して図示および説明される)分散型データベースは、「代理取引」の処理を可能にしてよい。いくつかの例において、そのような代理取引は、分散型データベースの非メンバ(たとえば、分散型データベースのインスタンスを有さないコンピュータデバイス)の代理となる分散型データベースのメンバ(たとえば、分散型データベースの少なくとも一部のインスタンスを有するコンピュータデバイス)、全権利未満を有する(たとえば、読取権利を有するが書込み権利を有さない、コンセンサス決定に関与しないなどの)分散型データベースのメンバなどによって実行され得る。たとえば、アリスが分散型データベースに取引TRを提起したいが、彼女は分散型データベースの完全メンバではない(たとえば、アリスはメンバではない、または限られた権利を有する)ものとする。ボブは完全メンバであり、分散型データベースにおける全権利を有するものとする。この場合、アリスは取引TRをボブへ送信し、ボブが、分散型データベースに影響するように取引TRをネットワークに提起してよい。いくつかの例において、アリスはTRにデジタル署名してよい。いくつかの例において、TRはたとえば、ボブへの支払い(たとえば、分散型データベースにTRを提起するボブのサービスに対する料金)を含んでよい。いくつかの例においてアリスは、ボブまたは他の観察者が、TRがアリスから到来したことを決定することができないように、たとえばTORオニオンルーティングネットワークなどの匿名化ネットワークを介してボブへTRを通信してよい。
[1096] いくつかの例において、(たとえば、図1に関して図示および説明された)分散型データベースは、暗号通貨を実装するために用いられ得る。そのような例において、各分散型データベースインスタンス114、124、134、144は、暗号通貨を格納するための1または複数の(本明細書においてウォレットとも称される)ウォレットデータ構造を定義してよい。ウォレットデータ構造は、鍵ペア(公開鍵および秘密鍵)を含んでよい。いくつかの例において、ウォレットの鍵ペアは、そのウォレットが発祥するコンピュータデバイスによって生成され得る。たとえばアリスがウォレット(W,K)を定義し、Wが(ウォレットの識別子としても機能し得る)公開鍵であり、Kが秘密鍵である場合、アリスは、分散型データベースの他のインスタンス(またはそれらのユーザ)が、ウォレットWがアリスに関連することを識別できないように、分散型データベースの残りのインスタンスへWを(たとえばイベント内で)公開しながらも自身のアイデンティティ匿名性を維持することができる。ただしいくつかの例において、暗号通貨の譲渡は公開である。したがって、アリスの雇用主が(たとえばイベント内の取引を用いて)Wへ金銭を譲渡し、後にアリスが(たとえば異なるイベント内の異なる取引を用いて)Wから店舗へ金銭を譲渡することによって購買を行う場合、雇用主および店舗は、Wがアリスに属すること、および購買を行ったのがアリスであることを、結託して決定することができる。したがって、これを回避するために、アリスにとって、自身の取引匿名性を維持するために新たな匿名ウォレットへ金銭を譲渡することが有利であり得る。
[1097] いくつかの実装において、WALLET_ADD動作は、分散型データベースにペア(W,D)を格納するために用いられ、WALLET_DELは、ウォレットを削除するために用いられ得る。いくつかの例において、ユーザは、料金を支払うことによって分散型データベースにウォレットを追加することができ、そのようなウォレットは、支払われた料金によって保証される時間、分散型データベース内でアクティブに保たれ得る。ペア(W,D)内のパラメータWは、ウォレットの公開鍵に対応し、パラメータDは、各々が秘密鍵に対応する公開鍵のリストを含み得るデータ構造であり、そのような秘密鍵のいずれかは、たとえばWALLET_DEL動作に署名するために用いられ得る。他の例において、そのような秘密鍵の任意の十分大きいセットが、WALLET_DEL動作に署名するために用いられ得る。たとえばそのような例において、WALLET_DELに署名するそのような秘密鍵の数は、所定の閾値を上回らなければならない。
[1098] 他の実装において、WALLET_ADD(W,D)は、公開鍵Wにデジタル証明書を追加および/または結合する動作または機能であってよい。デジタル証明書は、証明書の主体および証明書を使用できるアプリケーションおよびサービスに関する情報を提供することによって、ユーザ、コンピュータ、またはサービスのアイデンティティを公開鍵に結合する電子クレデンシャルである。したがっていくつかの例において、データ構造Dは、Wの公開鍵証明書(たとえばX.509証明書)、および公開鍵Wからの証明書を解くことが許可される公開鍵のリストを含んでよい。そのようなリスト内の公開鍵は、Wと、公開鍵証明書の連鎖内の鍵との両方を含み得る。
[1099] メンバ、たとえばアリスは、WALLET_ADD(W,D)動作によって新たなウォレットを作成および/または定義することができる。そのようなウォレットは、公開鍵Wを含む。デフォルトで、新たに作成されたウォレットは、ウォレットをメンバのアリス(すなわち、アリスと表されるコンピュータデバイス)にリンクするものがウォレット内にないため匿名である。また分散型データベースによってメンバは、たとえばマネーロンダリング動作、脱税を防止し、顧客熟知(KYC)法または他の適当なポリシや慣例に準拠するために非匿名ウォレットを作成することもできる。したがって、アリスおよび分散型データベースの他のメンバは、(1)メンバのアイデンティティ(たとえばアリスのアイデンティティ)を検証し、ウォレットWにメンバを結び付ける証明書(たとえばX.509証明書)を取得するために、信頼された認証局(CA)を用いる、および/または(2)メンバのアイデンティ(たとえばアリス)を検証し、そのようなメンバによって作成されたアイデンティティエスクローファイル(IEF)のブラインドシグネチャを実行し、IEAの署名鍵の証明書(たとえばX.059証明書)を取得するために、信頼されたアイデンティティエスクロー局(IEA)を用いることができる。
[1100] いくつかの例において、分散型データベースのメンバは、たとえば動作WALLET_ADD(A,D)を用いて、CAまたはIEFによって作成された証明書Dをウォレットに添付し、動作WALLET_DEL(A,D)を用いて、そのような証明書を最終的に削除することができる。そのような場合、証明書連鎖は、証明書を発行したCAまたはIEAまで拡大し、および/または、CAまたはIEAが分散型データベース内で用いられることを承認する機関、たとえば政府機関または他の適当な機関までさらに拡大し得る。
[1101] いくつかの例において、分散型データベースを通して実行される取引がKYC法またはポリシに準拠する必要がある場合、ウォレット、銀行口座、および/または商品およびサービスの個人販売者の間の取引は、CAによって発行される証明書の検証後に実行され得る。そのような場合、証明書連鎖は、CAを承認した機関(たとえば政府機関)まで拡大し得る。したがって、そのような取引は、その機関によって追跡され得る。いくつかの例において、ユーザは、料金を支払うことによってウォレットに証明書を結合してよく、そのようなウォレットは、支払った料金によって保証される時間、分散型データベース内でアクティブに保たれ得る。
[1102] いくつかの例において、分散型データベースを通して実行される取引は、KYC法またはポリシおよびプライバシー法またはポリシに準拠してよい。そのような例において、たとえば、商品およびサービスの個人販売者と取引とは、IEAによって発行される証明書の検証後に実行され得る。そのような場合、証明書連鎖は、IEAを承認した機関まで拡大し得る。たとえばIEFは、IEAを承認した機関によって所有される公開鍵によって暗号化された、Wおよびユーザの氏名および住所を含んでよい。したがって、そのような機関は、Wおよびユーザの氏名および住所に対応するフィールドを復号し、ウォレットの所有者を識別することができる。ただしユーザのアイデンティティは、分散型データベースまたは他の機関の他のメンバおよび/またはユーザにはアクセス不可能である。
[1103] いくつかの例において、たとえばメンバは、複数のランダムなウォレット(たとえば100のランダムなウォレット)を作成および/または定義し、それらが対応するアイデンティティエスクローファイル(たとえば100のファイル)のブライドバージョンをIEAへ送信し、その後、IEAによってランダムに選択されたそれらのファイル(たとえば99のファイル)のサブセットのブラインドをはずし復号するためにIEAへ情報を送信してよい。そのようなメンバは、99のファイルに関連付けられた99のウォレットを破棄し、残りのアイデンティティエスクローファイルのブラインドシグネチャをIEAから受信してよい。メンバはその後、残りのアイデンティティエスクローファイルのブラインドをはずし、それを残りのウォレットに添付してよい。したがって、IEAは、そのようなメンバが、預託されたアイデンティティを残りのウォレットに添付していることを請け負ってよい。このようにメンバは、IEAからのプライバシーを有してよく、IEAを承認する機関のみが、預託された情報へのアクセス権を有してよい。
[1104] いくつかの例において、たとえば国または他の団体がプライバシー法的枠組みを有する場合、アイデンティティエスクローファイルを復号するための単一の鍵を有するのではなく、政府または他の団体が、メンバのアイデンティティを復号するために協働するいくつかの機関を有し得る(たとえば、各機関および/または団体が、アイデンティティエスクローファイルを復号するために鍵の他の部分と組み合わせられる鍵の一部を有する)ように、システムは更に強化され得る。したがって、合意または協働動作は、メンバのアイデンティティを開示するために複数の機関にわたり行われ得る。よって、分散型データベースは、分散型データベースのメンバまたはユーザのプライバシーと、分散型データベースを介して実行される取引の透明性との間で均衡のとれたトレードオフを等しく提供し得るツールとして働く。また、アイデンティティエスクローファイルを復号するための単一の鍵を分割することにより、分散型データベースを実装するコンピュータデバイスの安全性およびプライバシーが向上する。
[1105] 以下の例は、次の取引が(たとえばイベント内で)発行された場合、C個の暗号通貨コインがウォレットWからウォレットRへ譲渡されることを想定し、ここで、最後の_Kは、取引が秘密鍵Kによってデジタル署名されることを意味する。次の表記が用いられ得る。
TRANSFER(C,W,R)_K
[1106] いくつかの例において、暗号通貨の譲渡における匿名性を実現するために、新たな取引類型および/または分散型データベース機能が定められ得る。たとえば、以下の取引は、C1個のコインをウォレットW1からウォレットR1へ移動し、C2個のコインをウォレットW2からウォレットR2へ移動する。いくつかの例において、本明細書で更に詳しく説明するように、たとえばウォレットW1およびR1は、分散型データベースの第1のインスタンスに関連し、ウォレットW2およびR2は、分散型データベースの第2のインスタンスに関連してよい。いくつかの例において、取引は、それらを接続するために機能する任意の識別子N(たとえば会話識別子および/またはプロセス識別子)を含んでよい。
TRANSFER_DOUBLE(N, C1,W1,R1, C2,W2,R2, T)_K1
TRANSFER_DOUBLE(N, C1,W1,R1, C2,W2,R2, T)_K2
[1107] いくつかの例において、これらの取引は、一方が(公開鍵W1に関連する秘密鍵を用いて)K1によって署名され、他方が(公開鍵W2に関連する秘密鍵を用いて)K2によって署名された2つの同一コピーが発行され、分散型データベースの他のインスタンスへ(たとえば1または複数のイベント内で)拡散されない限り、効果を有さない。いくつかの例において、各取引は、上述したように安全タイムスタンプも含んでよい。この安全タイムスタンプは、取引が関連するイベントの安全タイムスタンプまたは取引の個別の安全タイムスタンプであってよい。両方の取引が互いのT秒以内のタイムスタンプを有して発行された(たとえば、取引の安全タイムスタンプが互いの所定の期間内である)場合、両方の通貨譲渡が発生する。そうでない場合、どちらの譲渡も発生しない。
[1108] 他の例において、Tは用いられず、いずれかの関係者が譲渡を取り消す取引をポストする前に両方の取引が発生した場合のみ、通貨譲渡が発生する。たとえば、アリスは、自身の署名付き取引(たとえばアリスのTRANSFER_DOUBLE取引)を発行し、その後、第1の取引に関する取消メッセージを含む別の署名付き取引を発行し、次にボブが、自身の署名付き取引を発行する。ボブの取引がアリスの取消メッセージよりも後であった場合、取引は発生しないが、ボブの取引がアリスの取消メッセージよりも先であった場合、取引が発生する。このようにシステムは、取引の順序付けるコンセンサスを用いて、Tおよびタイムスタンプを用いずに作動してよい。他の例において、Tおよび取消メッセージの両方がサポートされ得る。
[1109] 以下の例は、データ(たとえば通貨など)の譲渡を匿名的かつ安全に開始するために「TRANSFER_DOUBLE」取引タイプおよび/または分散型データベース機能がどのように用いられ得るかを示す。以下の例において、アリスは、彼女の雇用主が金銭を譲渡したウォレットW1を有する。アリスは、W1から、彼女が作成し、後に購買のために用いられる匿名ウォレットW2へC個のコインを譲渡したいと所望する。しかしアリスは、取引を見ている者が匿名ウォレットW2にW1が関連することを知ることがないように、匿名性を保護したいと所望する。アリスの雇用主が店舗と結託して匿名性を攻撃した場合でも、匿名性が安全でなくてはならない。また、たとえばボブは、自身のウォレットW3から、彼が作成する匿名ウォレットW4へコインを譲渡する際、同じく安全な匿名性を所望する。
[1110] アリスおよびボブは、以下のプロトコルを実行することによって、匿名性の形成を実現することができる。これは、互いに直接電子メールすること、チャットサイトまたはオンラインフォーラムサイトを通して互いにメッセージすること、または(たとえばイベント内で)暗号通貨をホストする同じ公開台帳内で発行された取引を介してなど、任意の形式で互いに連絡を取り合うことを伴ってよい。以下の例は、プロトコルが公開台帳を介して実行されることを想定する。アリスおよびボブは、最初は知り合いではないが、双方が公開台帳に取引を発行する能力を有し、他者が公開台帳に発行する取引を読み取ることができるものとする。アリスおよびボブは、(たとえば1または複数のイベント内で)以下の取引を公開台帳に発行することができる。
アリスが発行:Anonymize1(N, C, W1)_K1
ボブが計算: B = encrypt(W4, W1)
ボブが発行:Anonymize2(N, W3, B)_K3
アリスが計算: A = encrypt(W2, W3)
アリスが発行:Anonymize3(N, A)_K1
両者が計算: MIN = min(W2, W4)
両者が計算: MAX = max(W2, W4)
ボブが発行:TRANSFER_DOUBLE(N, C, W1, MIN, C, W3, MAX, T)_K3
アリスが発行:TRANSFER_DOUBLE(N, C, W1, MIN, C, W3, MAX, T)_K1
[1111] この例において、アリスは、ウォレットW1からW2へC個のコインを譲渡しようとし、ボブは、ウォレットW3からW4へC個のコインを譲渡しようとする。アリスおよびボブの各々は、各ウォレットの(公開鍵、秘密鍵)鍵ペアを生成することによって自身の所有するウォレットを生成する。ここでは、ウォレットの公開鍵は、ウォレットの名前としても用いられる(他の例において、ウォレットを識別するために別の識別子が用いられ得る)。アリスおよびボブは、観察者が、ウォレットW1の所有者がW2またはW4のいずれかの所有者でもあることを識別できるが、そのどちらであるかを識別できないような方法で、これらの譲渡を遂行したいと所望する。同様に、アリスおよびボブは、観察者が、ウォレットW3の所有者がW2またはW4のいずれかの所有者でもあることを識別できるが、そのどちらであるかを識別できないような方法で、これらの譲渡を遂行したいと所望する。公開鍵W1を有するウォレットは、秘密鍵K1を有する。同様に、ウォレットW2、W3、およびW4は、それぞれ秘密鍵K2、K3、およびK4を有する。上述した各取引または命令は、最後に記載された秘密鍵によって署名される。たとえば、最初の取引または命令は、秘密鍵K1によってデジタル署名される。
[1112] 第1の取引(Anonymize1(N,C,W1)_K1)は、アリスがC個のコインをW1から匿名ウォレットへ譲渡しようとしていることを通知するために用いられる。この取引は、取引のハッシュ、取引に含まれる乱数、および/または他の任意の適当な識別子であってよい識別子番号Nを含む。このN(たとえば会話識別子および/またはプロセス識別子)は、一度に発生するいくつかの類似したプロセスおよび/または会話が存在する場合、混同を回避する(およびプロセスまたは会話を識別することができる)ように、プロセスを開始した取引を再び参照するために後続の取引において用いられ得る。いくつかの例において、Nはタイムアウトデッドライン(たとえばT)を含んでよく、その後、Nを含む取引は無視される。この取引は、K1によってデジタル署名される。
[1113] 関数暗号(W4、W1)は、公開鍵W1を用いてW4(ボブのターゲット匿名ウォレットとして彼によって所有および定義されるウォレットの公開鍵)を暗号化し、対応する(アリスによって保持される)秘密鍵K1によってのみ復号することができる結果Bをもたらす。これにより、取引を閲覧している分散型データベースの他のインスタンスはいずれも、W1の所有者(この例ではアリス)を除き、W4を識別できないことが確実になる。
[1114] 取引匿名化2(N,W3,B)_K3は、プロセスまたは会話Nの一部として、ボブがW3から、Bによって識別される匿名ウォレットへC個のコインを譲渡しようとしていることを示す。この取引は、秘密鍵K3を用いてデジタル署名される。アリスはその後、ボブのターゲット匿名ウォレットをW4と識別するために秘密鍵K1を用いてBを復号してよい。
[1115] アリスは、関数暗号(W2,W3)を実行してよい。これは、公開鍵W3(ボブの最初のウォレット)を用いてW2(アリスのターゲット匿名ウォレットとして彼女によって所有および定義されるウォレットの公開鍵)を暗号化する。アリスはその後、取引匿名化3(N,A)_K1を発行してよい。ボブは、秘密鍵K3を用いてAを復号することによって、W2をアリスのターゲット匿名ウォレットと識別してよい。
[1116] 関数min(W2,W4)は、2つの公開鍵W3およびW4のどちらが辞書順(アルファベット順)で最初であるかを戻す。関数max(W2,W4)は、2つの公開鍵W3およびW4のどちらが辞書順(アルファベット順)で最後であるかを戻す。したがって、MINはW2またはW4のいずれかであってよく、MAXはW2またはW4のいずれかであってよい。minおよびmax関数は、アリスおよびボブの両者が識別できるが他者が識別できないウォレットW2およびW4の順序付けを可能にする。他の例において、たとえばハッシュ関数、ランキングなど、アリスおよびボブが匿名ウォレットW2およびW4をどのように順序付けるかを識別するために、他の任意の決定関数が用いられ得る。
[1117] TRANSFER_DOUBLE取引は、ボブおよびアリスの両者によって発行され、それぞれのデジタルシグネチャK1およびK3によって署名され得る。ボブおよびアリスの両者は、それぞれの匿名ウォレットの各々へ同じ数のコインCを譲渡しているので、どちらのソースウォレットW1またはW3がどちらの宛先ウォレットW2またはW4へコインを譲渡するかは問題にならない。したがって、いくつかの例において、アリスは、C個のコインを自身の所有する匿名ウォレットへ譲渡し、ボブは、C個のコインを自身の所有する匿名ウォレットへ譲渡する。他の例において、アリスはボブの匿名ウォレットへC個のコインを譲渡し、ボブはアリスの匿名ウォレットへC個のコインを譲渡する。これは、MINおよびMAX関数によって決定される。またこれにより、観察者はW2およびW4の両方を識別できるが、どちらのウォレットがW1の所有者によって定義され、どちらのウォレットがW3の所有者によって定義されたかを識別できないことが確実になる。取引が発行された後、観察者は、ウォレットW1およびW3の所有者が共同して各々C個のコインをウォレットW2およびW4へ譲渡していることを知るが、どちらの送付者がどちらの受取ウォレットを所有するかを知ることはないので、ウォレットW2およびW4は、ウォレットW1およびW3よりもわずかに匿名性が高い。
[1118] いくつかの例において、取引は「代理取引」であってよく、これは、ネットワーク内のノードが他者の代わりに取引を提起することを意味する。上の例において、アリスはウォレットW1およびW2を所有し、いくつかの取引を発行しようとしている。キャロルが、全権を有する分散型データベースのメンバである場合、アリスは、アリスの代わりに分散型データベースに提起するキャロルへ取引を送信してよい。いくつかの例において、代理取引は、そのサービスに対して支払うためにウォレットW1からキャロルへ少額の料金を譲渡する権限を与えることを含んでよい。いくつかの例において、アリスは、たとえばTORオニオンルーティングネットワークなど、通信を匿名化するネットワークを介してキャロルと通信してよい。
[1119] いくつかの例において、アリスはその後、上述したデイブとの匿名プロトコルを繰り返してよく、ボブは、エドとのプロトコルを繰り返してよい。その時点で、分散型データベースの他のインスタンスは、アリスが4つのウォレットの1つを所有することを識別できるが、どれであるかを知ることはない。10回のそのような動作後、アリスは、210である1024のうち1つのウォレットを所有する。20回の動作後、セットは100万を超える。30回の後、セットは10億を超える。40回の後、セットは1兆を超える。プロトコルを実行するためには何分の1秒かしか要さない。しかし、各プロトコルが実行するのに1秒を要する場合でも、自身のウォレットを匿名化しようと試みる誰もが、1分を大幅に下回る時間でランダムに互いにスワップされる。観察者は、結果として生じるウォレットの1つをアリスが所有することを知るが、どの1つであるかを知ることはない。
[1120] このシステムは、自身のウォレットを匿名化しようと試みる人間が少ない場合に限り、安全性が低い。追加の安全性のために、アリスは、ある期間(たとえば1日、1時間、1週間など)待機し、その後、彼女の最終的なウォレットを更に匿名化してよい。このようにすると、アリスは最終的に、非常に長期間にわたり匿名化を試みた分散型データベースの他のインスタンスを含む群衆の中に隠れることができる。システムを用いる分散型データベースのインスタンスが多いほど、アリスは迅速に目標に到達することができる。
[1121] システムは、アリスが分散型データベースを実装するネットワーク(たとえばインターネット)と通信する時に攻撃者が彼女のIPアドレスを識別することができる場合、損なわれる可能性がある。アリスが所与のIPアドレスからプロトコルを実行していることを攻撃者が識別し、即時に、同じアドレスからウォレットW2にプロトコルを実行している何者かを目撃した場合、彼らは、アリスがウォレットW2を所有するという結論を下し得る。いくつかの例において、IPアドレスは匿名化され得る。たとえば、匿名通信を実現するために匿名通信ネットワーク(たとえばTorネットワーク)が用いられ得る。その場合、分散型データベースの残りのインスタンスは、W2がプロトコルを実行し取引に署名したことを識別できるが、W2がアリスのコンピュータを用いるかボブのコンピュータを用いるかを識別することはできない。
[1122] 管轄区によっては、政府は、人民が(たとえば隣人、犯罪者、外国政府などによる)スパイから匿名であることを可能にしながらも、たとえばマネーロンダリングおよび脱税などの犯罪を防止するために、法律制定によって確実に通貨の流れを監視することができるようにしたいと所望し得る。いくつかの例において、上述した匿名方式およびシステムは、そのような法律制定に対応し得る。そのような例において、政府は、ウォレットが特定の人間に関連することを証明する暗号化証明書を作成および/または定義するために特定の認証局(CA)または複数のCAを作成または承認してよい。暗号は、政府のみが(場合によっては裁判所命令がある場合のみ)それを復号できるようなものであってよい。アリスがウォレットを作成および/または定義した場合、彼女は任意選択的に、そのような証明書をウォレットに添付することができ、これは、ウォレットがアリスに属することを隣人が知ることはできないが、政府は証明書を復号し、アリスをウォレットの所有者と識別できることを意味する。政府は、そのような証明書を有するウォレットに自国内の雇用主のみが預金できること、およびそのような証明書を有するウォレットからの支払いを自国内の店舗のみが受領できることを主張してよい。よってアリスは、ウォレットの連鎖を作成および/または定義するために上記プロトコルを繰り返し実行し、連鎖内の最初および最後のウォレットの適切な証明書を取得することができる。
[1123] 各ウォレットデータ構造は単一の公開秘密鍵ペアを有するものとして上述されたが、他の例において、ウォレットデータ構造は、1つが署名用であり1つが暗号用である2つの公開秘密鍵ペアを含んでよい。そのような例において、上述した方法は、署名のために署名鍵を用い、暗号化のために暗号鍵を用いるように修正され得る。
[1124] ハッシュグラフを用いてイベント内で取引を格納および交換することが上述されたが、他の例において、安全かつ匿名性の取引を容易にするための上記方法を実行するために他の任意の適当な分散型データベースおよび/または分散型台帳技術が用いられ得る。たとえば、そのような方法を実行するために、ブロックチェーン、PAXOS、RAFT、ビットコイン、イーサリアムなどの技術が用いられ得る。いくつかの例において、安全かつ匿名性の取引を容易にするための上記方法を実行するために、これらの技術に安全タイムスタンプが追加(たとえばそれらの上に構築)され得る。他の例において、上述したようにタイムスタンプは使用されない。
[1125] 匿名化方法は、分散型データベースの2つの異なるインスタンス間で実行されるものとして上述されたが、他の例において、分散型データベースの2より多い数のインスタンスによって実行され得る。たとえば他の例において、「TRANSFER_DOUBLE」取引は、追加の数の取引に対応し得る。たとえば、3つの異なるウォレットデータ構造間でのデータの譲渡をサポートするために、TRANSFER_TRIPLE取引が定義され得る。
[1126] 暗号通貨を実装することが上述されたが、他の例において、他の任意の種類の分散型データベース内での取引が匿名化され得る。たとえば、商品の交換のレコード、個人のアイデンティティの認証、特定のリソースを使用するための承認などが匿名化され得る。そのような例において、分散型データベース内での取引の安全性が高められ得る。
[1127] 図3〜図6は、実施形態に係るハッシュグラフの例を示す。5人のメンバが存在し、各々が黒い縦線によって表される。各円は、イベントを表す。イベントから2本の下り線は、2つの過去イベントのハッシュを表す。この例において、各メンバの第1のイベントを除き、全てのイベントが2本の下り線(1つが同じメンバへの太線、1つが他のメンバへの細線)を有する。時間は上向きに進む。図3〜6において、分散型データベースのコンピュータデバイスは、アリス、ボブ、キャロル、デイブ、およびエドと示される。理解すべき点として、そのような指標は、コンピュータデバイスが、図1に関して図示および説明されたコンピュータデバイス110、120、130、および140と構造的かつ機能的に同様であることを示す。
[1128] 図7は、実施形態に係る、イベントを同期する2つのコンピュータデバイスの信号フロー図を示す。具体的には、いくつかの実施形態において、分散型データベースインスタンス703および803は、収束を得るためにイベントを交換してよい。コンピュータデバイス700は、コンピュータデバイス700との関係、コンピュータデバイス700との近接度、コンピュータデバイス700に関連する順序付きリストなどに基づいて、コンピュータデバイス800とランダムに同期することを選択してよい。いくつかの実施形態において、コンピュータデバイス800は、分散型データベースシステムに属するコンピュータデバイスのセットからコンピュータデバイス700によって選択されてよく、コンピュータデバイス700は、コンピュータデバイス800を複数回連続的に選択してよく、あるいは一時コンピュータデバイス800を選択しなくてもよい。他の実施形態において、過去に選択されたコンピュータデバイスの指標がコンピュータデバイス700に格納され得る。そのような実施形態において、コンピュータデバイス700は、コンピュータデバイス800を再び選択することができるようになる前に、所定の回数の選択の間待機してよい。上述したように、分散型データベースインスタンス703および803は、それぞれコンピュータデバイス700のメモリおよびコンピュータデバイス800のメモリに実装され得る。
[1129] 上記の用語、定義、およびアルゴリズムは、図8〜12において説明される実施形態および概念を説明するために用いられる。図13Aおよび図13Bは、数学形式で示されるコンセンサス方式および/またはプロセスの第1の応用例を示す。図14Aおよび図14Bは、数学形式で示されるコンセンサス方式および/またはプロセスの第2の応用例を示す。
[1130] システム例1:コンピュータデバイス700がアリスと呼称され、コンピュータデバイス800がボブと呼称される場合、それらの間の同期は図7に示すとおりであってよい。アリスとボブとの間の同期は、以下のとおりであってよい。
[1131] アリスはボブに、分散型データベース703に格納されたイベントを送信する。
[1132] ボブは、以下を含む新たなイベントを作成および/または定義する。
[1133] ボブが作成および/または定義した最後のイベントのハッシュ
[1134] アリスが作成および/または定義した最後のイベントのハッシュ
[1135] ボブによる上記のデジタルシグネチャ
[1136] ボブはアリスに、分散型データベース803に格納されたイベントを送信する。
[1137] アリスは、新たなイベントを作成および/または定義する。
[1138] アリスはボブに、そのイベントを送信する。
[1139] アリスは、イベントの全順序をハッシュグラフの関数として計算する。
[1140] ボブは、イベントの全順序をハッシュグラフの関数として計算する。
[1141] 所与の時間に、メンバは、これまでに受信したイベントを、各イベントを作成および/または定義したコンピュータデバイスおよび/または分散型データベースインスタンスに関連する識別子とともに格納してよい。各イベントは、(親ハッシュを有さない)最初のイベントおよび新たなメンバごとの(彼らを招待し参加させた既存メンバのイベントを表す、単一の親イベントハッシュを有する)第1のイベントを除き、2つの先行イベントのハッシュを含む。このイベントセットを表す図が描かれ得る。図は、各メンバに関する縦線、およびそのメンバによって作成および/または定義された各イベントに関する線上の点模様を示し得る。イベント(上側の点模様)が先行イベント(下側の点模様)のハッシュを含む場合常に、2つの点模様間に対角線が描かれる。イベントは、そのイベントがそのイベントのハッシュを介して(直接、または中間イベントを介してのいずれかで)他のイベントを参照し得る場合、他のイベントにリンクされると言える。
[1142] たとえば、図3は、ハッシュグラフ600の例を示す。イベント602は、キャロルとの同期の結果として同期後にボブによって作成および/または定義される。イベント602は、イベント604(ボブによって作成および/または定義された過去のイベント)のハッシュおよびイベント606(キャロルによって作成および/または定義された過去のイベント)のハッシュを含む。いくつかの実施形態において、たとえば、イベント602内に含まれるイベント604のハッシュは、直近の祖先イベントであるイベント608および610へのポインタを含む。このように、ボブは、イベント608および610を参照するためにイベント602を用い、先行イベントへのポインタを用いてハッシュグラフを再構成してよい。いくつかの例において、イベント602は、先行する祖先イベントを介してハッシュグラフ600内のイベントの各々を参照することができるので、ハッシュグラフ600内の他のイベントにリンクされると言える。たとえばイベント602は、イベント604を介してイベント608にリンクされる。他の例として、イベント602は、イベント606およびイベント612を介してイベント616にリンクされる。
[1143] システム例2:イベントが、記録するために取引の「ペイロード」または他の情報も含む、システム例1に基づくシステム。そのようなペイロードは、コンピュータデバイスの直近の先行イベントから、発生し、および/または定義された任意の取引および/または情報によってイベントを更新するために用いられ得る。たとえばイベント602は、イベント604が作成および/または定義されてからボブによって行われた任意の取引を含んでよい。したがって、他のコンピュータデバイスとイベント602を同期する時、ボブはこの情報を共有することができる。その結果、ボブによって行われた取引は、イベントに関連し、イベントを用いる他のメンバと共有され得る。
[1144] システム例3:イベントが、デバッギング、診断、および/または他の目的のために役立つ現在時間および/または日付も含む、システム例1に基づくシステム。時間および/または日付は、コンピュータデバイス(たとえばボブ)がイベントを作成および/または定義するローカル時間および/または日付であってよい。そのような実施形態において、そのようなローカル時間および/または日付は、その他のデバイスと同期されない。他の実施形態において、時間および/または日付は、デバイス間で(たとえばイベントの交換時に)同期され得る。また他の実施形態において、時間および/または日付を決定するためにグローバルタイマが用いられ得る。
[1145] システム例4:アリスがボブに、ボブによって作成および/または定義されたイベントまたはそのようなイベントの祖先イベントを送信しない、システム例1に基づくシステム。yがxのハッシュを含む場合、またはxの祖先であるイベントのハッシュをyが含む場合、イベントxはイベントyの祖先である。同様に述べると、そのような実施形態において、ボブはアリスに、アリスによって未だ格納されていないイベントを送信し、アリスによって既に格納されたイベントを送信しない。
[1146] たとえば図4は、イベント622(黒い円)の祖先イベント(点模様の円)および子孫イベント(縞模様の円)を示すハッシュグラフ例620を示す。直線は、イベントにおける半順序を確立するものであり、ここで祖先は黒色イベントより前にあり、子孫は黒色イベントより後にある。半順序は、白色イベントが黒色イベントの前であるか後であるかを示さないので、それらの順序を決定するために全順序が用いられる。他の例として、図5は、1つの特定のイベント(塗りつぶされた円)および各メンバがそのイベントの指標を受信する最初の時間(線模様の円)を示すハッシュグラフ例を示す。キャロルがイベント624を作成および/または定義するためにデイブと同期する時、キャロルはイベント622の祖先イベントを既に知っており受信しているので、デイブはキャロルにそのようなイベントを送信しない。代わりにデイブはキャロルに、キャロルがキャロルの分散型データベースインスタンスに未だ受信および/または格納していないイベントを送信する。いくつかの実施形態において、デイブは、キャロルが過去に受信したイベントに関してデイブのハッシュグラフが何を示すかに基づいて、どのイベントをキャロルへ送信するかを識別してよい。イベント622は、イベント626の祖先である。したがって、イベント626の時点で、デイブは既にイベント622を受信している。図4が示すように、デイブは、キャロルからイベント622を受信したボブからイベント622を受信したエドからイベント622を受信した。また、イベント624の時点で、イベント622は、キャロルによって作成および/または定義されたデイブが受信している最後のイベントである。したがってデイブはキャロルに、デイブがイベント622以外に格納しているイベントおよびその祖先を送信してよい。また、デイブからイベント626を受信すると、キャロルは、キャロルの分散型データベースインスタンスに格納されたイベント内のポインタに基づいて、ハッシュグラフを再構成してよい。他の実施形態において、デイブは、キャロルがデイブにイベント622を送信していること(図4には不図示)およびキャロルが既に受信しているイベントを識別するためにデイブがイベント622(およびその中の参照)を用いて識別することに基づいて、どのイベントをキャロルへ送信するかを識別してよい。
[1147] システム例5:イベントが、そのイベントの祖先を受信者が受信および/または格納する後まで送信されないように、両方のメンバが他方へイベントを送信する、システム例1に基づくシステム。したがって送信者は、2つのハッシュと既に受信された2つの祖先イベントとを比較することによって、イベントが受信されると同時に受信者が各イベントにおける2つのハッシュを確認できるように、最も古いものから最も新しいものまでイベントを送信する。送信者は、送信者のハッシュグラフの現在状態(たとえば、送信者によって定義されたデータベース状態変数)およびそのハッシュグラフが、受信者が既に受信していることを示すことに基づいて、どのイベントを受信者へ送信するかを識別してよい。図3を参照すると、たとえば、イベント602を定義するためにボブがキャロルと同期する時、キャロルは、イベント619が、ボブによって作成および/または定義されキャロルが受信している最後のイベントであることを識別してよい。その結果キャロルは、ボブがそのイベントおよびその祖先を知っていることを決定してよい。よってキャロルはボブに、イベント618およびイベント616(すなわち、キャロルが受信しておりボブが未だ受信していない最も古いイベント)を送信してよい。キャロルはその後、イベント612、次にイベント606をボブへ送信してよい。これによりボブは、イベントを容易にリンクさせ、ボブのハッシュグラフを再構成することができる。ボブが未だ受信していないイベントがどれかを識別するためにキャロルのハッシュグラフを用いることにより、同期の効率性が高くなり、ボブがキャロルからのイベントを要求しないため、ネットワークトラフィックが低減され得る。
[1148] 他の実施形態において、最も新しいイベントが最初に送信され得る。受信者が、2つの過去イベントのうちの1つを未だ受信していないことを(最も新しいイベントにおける2つの過去イベントのハッシュおよび/または最も新しいイベントにおける過去イベントへのポインタに基づいて)決定した場合、受信者は送信者に、そのようなイベントを送信することを要求してよい。これは、受信者が最も新しいイベントの祖先を受信および/または格納するまで発生し得る。図3を参照すると、そのような実施形態において、たとえばボブがキャロルからイベント606を受信すると、ボブは、イベント606におけるイベント612およびイベント614のハッシュを識別してよい。ボブは、イベント604の作成および/または定義時にアリスからイベント614を過去に受信されたことを決定してよい。したがってボブは、キャロルからのイベント614を要求する必要はない。ボブは、イベント612が未だ受信されていないことも決定してよい。よってボブは、キャロルからのイベント612を要求してよい。ボブはその後、イベント612内のハッシュに基づいて、ボブがイベント616または618を受信していないことを決定し、それに従ってキャロルからのこれらのイベントを要求してよい。イベント616および618に基づいて、ボブはその後、彼がイベント606の祖先を受信していることを決定することができる。
[1149] システム例6:メンバが、いくつかのイベントの中で次に送信するイベントの選択肢を有する場合、イベントは、そのメンバによって作成および/または定義されこれまでに送信された総バイト数を最小にするように選択されるという追加の制約を有する、システム例5に基づくシステム。たとえば、アリスがボブへ送信するために残っている2つのイベントのみを有し、1つが100バイトであってキャロルによって作成および/または定義されたものであり、1つが10バイトであってデイブによって作成および/または定義されたものであり、この同期においてこれまでにアリスは既にキャロルによるイベントを200バイト、デイブによるイベントを210バイト送信している場合、アリスはデイブのイベントを最初に送信し、その後キャロルのイベントを送信しなければならない。なぜならば、210+10<100+200であるためである。これは、単一のメンバが単一の巨大なイベントまたは大量の小さなイベントを送信する攻撃に対処するために用いられ得る。トラフィックが多くのメンバのバイト制限を超える場合(システム例7に関して説明するように)、システム例6の方法は、正当なユーザのイベントではなく攻撃者のイベントが無視されることを確実にすることができる。同様に述べると、(接続を提携させる1つの巨大イベントに対して防御するために)大きなイベントより前に小さなイベントを送信することによって攻撃が緩和され得る。また、メンバが単一の同期において(たとえばネットワーク制限、メンバのバイト制限などによって)イベントの各々を送信することができない場合、そのメンバは、攻撃者によって定義および/または作成されたイベントのみを送信し、他のメンバによって作成および/または定義されたイベントを全く(ほとんど)送信しないのではなく、各メンバからの少数のイベントを送信してよい。
[1150] システム例7:ボブがアリスに、自身がこの同期中に受信する気のある最大バイト数を示す数を送信し、アリスが自身の制限について返答するという追加の第1のステップを有する、システム例1に基づくシステム。アリスはその後、次のイベントがこの制限を超える場合、送信を停止する。ボブも同様である。そのような実施形態において、送信されるベイト数が制限される。これにより、収束にかかる時間が増加し得るが、同期ごとのネットワークトラフィック量が低減される。
[1151] システム例8:同期プロセスの最初に以下のステップが追加される、システム例1に基づくシステム。
[1152] アリスは、ボブによって作成および/または定義されたイベントまたはボブによって作成および/または定義されたイベントの祖先であるイベントを抜いて、自身が受信および/または格納したイベントのセットであるSを識別する。
[1153] アリスは、S内の各イベントを作成および/または定義したメンバを識別し、メンバのID番号のリストをボブへ送信する。またアリスは、各メンバによって作成および/または定義され自身が既に受信および/または格納したイベントの数も送信する。
[1154] ボブは、他のメンバによって作成および/または定義されたイベントを彼がいくつ受信したかのリストを用いて返答する。
[1155] その後アリスはボブに、ボブが未だ受信していないイベントのみを送信する。たとえば、アリスがボブに、キャロルによって作成および/または定義された100のイベントを受信したことを示し、ボブが、キャロルによって作成および/または定義された95のイベントを受信したことを返答した場合、アリスは、キャロルによって作成および/または定義された最新の5つのイベントのみを送信する。
[1156] システム例9:不正人物を識別および/または処理するための追加のメカニズムを有する、システム例1に基づくシステム。各イベントは2つのハッシュを含み、1つはそのメンバによって作成および/または定義された最後のイベントから得られ(「自己ハッシュ」)、1つは他のメンバによって作成および/または定義された最後のイベントから得られる(「対外ハッシュ」)。メンバが、同じ自己ハッシュを有する2つの異なるイベントを作成および/または定義した場合、そのメンバは「不正人物」である。アリスが、デイブによって作成および/または定義された同じ自己ハッシュを有する2つの異なるイベントを受信することによってデイブが不正人物であることを知った場合、彼女は、デイブが不正人物であるという指標を格納し、今後、彼との同期を差し控える。デイブが不正人物であることをアリスが知り、それでもなお再びデイブと同期し、その事実を記録する新たなイベントを作成および/または定義した場合、アリスもまた不正人物となり、アリスがデイブと更に同期していることを知る他のメンバは、アリスとの同期を中断する。いくつかの実施形態において、これは一方向への同期にしか影響を及ぼさない。たとえばアリスが、自身が各メンバに関して受信したイベントの数および識別子のリストを送信する時、彼女は、不正人物に関するIDまたは数を送信しないので、ボブは、任意の対応する数を用いて返答しない。その後アリスはボブに、彼女が受信した不正人物のイベントを送信し、これに関してアリスは、ボブがそのようなイベントを受信したという指標を受信していない。その同期が完了した後、ボブもまた、(デイブが不正人物であることを既に識別していなければ)デイブが不正人物であることを決定することができ、ボブも不正人物との同期を拒絶する。
[1157] システム例10:アリスが、自身が識別した不正者のリスト、および彼女が未だ格納している不正者のイベントのリストをボブへ送信することによって同期プロセスを開始し、ボブは、アリスが識別した不正人物に加えて自身が識別した任意の不正人物で応答することが追加された、システム例9におけるシステム。その後、彼らが通常どおりに継続するが、互いに同期する際に不正人物を数に入れない。
[1158] システム例11:同期中に受信された任意の新たなイベント内での取引に基づいて、(たとえば、システムのメンバによって定義されたデータベース状態変数によって捕捉されたように)現在状態を繰り返し更新するプロセスを有する、システム例1におけるシステム。これは、以前の状態のコピーに遡ること、および新たな順序でイベントを処理することにより現在状態を再計算することによって、イベントのシーケンスが変化した場合常に、その状態(たとえばイベントの順序)を繰り返し再構築する第2のプロセスも含んでよい。いくつかの実施形態において、現在状態は、取引の結果に関連する状態、残高、条件などである。同様に述べると、状態は、取引によって修正されたデータ構造および/または変数を含んでよい。たとえば、取引が銀行口座間での振替である場合、現在状態は、口座の現在の残高であってよい。他の例として、取引が多人数参加型ゲームに関連する場合、現在状態は、ゲームに関連する位置、生存者の数、獲得アイテム、ゲーム状態などであってよい。
[1159] システム例12:状態(たとえば、銀行口座残高、ゲーム状態など)を維持するために「高速クローン」アレイリストを使用することによって高速化された、システム例11におけるシステム。高速クローンアレイリストは、1つの追加の特徴を有するアレイとして機能するデータ構造であり、オリジナルのコピーである新たなオブジェクトを作成および/または定義するために出現する「クローン」動作をサポートする。クローンに対する変更はオリジナルに影響を及ぼさないので、クローンは、真正コピーであるかのように機能する。しかし、クローンの作成は、1つのアレイリストのコンテンツ全体を他のアレイリストへコピーおよび/または更新することを実際に伴わないので、クローン化動作は真正コピーの作成よりも高速である。オリジナルリストの2つのクローンおよび/またはコピーを有する代わりに、各々がオリジナルリストに対するハッシュテーブルおよびポインタを有する2つの小オブジェクトが用いられ得る。クローンに書込みが行われると、ハッシュテーブルは、どの要素が修正されたかおよび新たな値を記憶する。ある位置で読取りが行われると、ハッシュテーブルが最初に確認され、その要素が修正されていた場合、ハッシュテーブルから新たな値が戻される。そうでない場合、オリジナルアレイリストからの要素が戻される。このように、2つの「クローン」は最初、オリジナルアレイリストに対するポインタにすぎない。しかし、各々が繰り返し修正されると、それ自体とオリジナルリストとの差を格納する大きなハッシュテーブルを有するものへと成長する。クローンはそれ自体がクローン化されてよく、データ構造を、各々が自身のハッシュテーブルおよび親に対するポインタを有するオブジェクトのツリーに拡大させる。したがって要求されたデータを有する頂点が発見されるまで、または根に到達するまで、読取りによってツリーを登ることになる。頂点が過度に大きくまたは複雑になると、それは親の真正コピーと交換されてよく、ハッシュテーブル内の変更がコピーに行われてよく、ハッシュテーブルは破棄される。また、クローンが必要でなくなった場合、ごみ回収中にクローンはツリーから消去されてよく、ツリーは崩壊し得る。
[1160] システム例13:状態(たとえば、銀行口座残高、ゲーム状態など)を維持するために「高速クローン」ハッシュテーブルを使用することによって高速化された、システム例11におけるシステム。これは、ツリーの根がアレイリストではなくハッシュテーブルである点を除き、システム12と同じである。
[1161] システム例14:状態(たとえば銀行口座残高、ゲーム状態など)を維持するために「高速クローン」リレーショナルデータベースを使用することによって高速化された、システム例11におけるシステム。これは、既存のリレーショナルデータベースマネージメントシステム(RDBMS)の周囲のラッパーとして機能するオブジェクトである。各見かけ上の「クローン」は、実際には、ID番号およびデータベースを含むオブジェクトへのポインタを有するオブジェクトである。ユーザのコードが、構造化照会言語(SQL)照会をデータベースに行おうと試みる場合、その照会は最初に修正され、次に実データベースへ送信される。実データベースは、各テーブルがクローンIDに関する追加の1フィールドを有する点を除き、クライアントコードが見るデータベースと同一である。たとえば、クローンID1を有するオリジナルデータベースが存在するものとすると、ID2および3を有する、データベースの2つのクローンが作られる。各テーブルにおける各行は、クローンIDフィールド内に1、2、または3を有する。ユーザコードからクローン2に照会が到来すると、照会は、そのフィールド内の2または1を有する行からしか読み取られないように修正される。同様に、3への読取りは、3または1のIDを有する行を探し求める。構造化照会言語(SQL)コマンドがクローン2へ向かい、行を削除するように述べ、その行が1を有する場合、コマンドは、1を3に変更しなければならず、それによってその行は、クローン2および3によって共有されなくなり、3にのみ可視であるようにマークされる。動作内にいくつかのクローンが存在する場合、その行のいくつかのコピーが挿入されてよく、各々は、異なるクローンのIDに変更されてよく、新たな行は、行を「削除」したばかりのクローン以外のクローンに可視である。同様に、クローン2に行が追加された場合、その行は、2のIDを有するテーブルに追加される。行の修正は、削除およびその後の挿入に等しい。前述のとおり、いくつかのクローンはごみ回収され、ツリーは単純化され得る。そのツリーの構造は、クローンがアクセス不可能であり完全に内部で使用される追加のテーブルに格納される。
[1162] システム例15:状態を維持するために「高速クローン」ファイルシステムを使用することによって高速化された、システム例11におけるシステム。これは、ファイルシステムの周囲のラッパーとして機能するオブジェクトである。ファイルシステムは、様々なバージョンのファイルシステムを管理するために高速クローンリレーショナルデータベースを用いて、既存のファイルシステムの上に構築される。基礎となるファイルシステムは、大量のファイルを一方向に、または(ディレクトリを小さく保つために)ファイル名に従って分割して格納する。ディレクトリツリーは、データベースに格納され、ホストファイルシステムには提供されなくてよい。ファイルまたはディレクトリのクローンが作られると、「クローン」は単にID番号を有するオブジェクトであり、データベースは、このクローンが現在存在することを反映するように修正される。高速クローンファイルシステムのクローンが作られた場合、これはユーザには、完全な新しいハードドライブが作成および/または定義され、既存のハードドライブのコピーによって初期化されたものとして出現する。1つのコピーに対する変更は、他のコピーに影響を及ぼし得ない。実際は、各ファイルまたはディレクトリの1つのコピーが存在するだけであり、1つのクローンによってファイルが修正されると、コピーが発生する。
[1163] システム例16:高速クローンファイルシステムにおけるファイルの各Nバイト部分に関してホストオペレーティングシステムにおいて個別ファイルが作成および/または定義される、システム例15におけるシステム。Nは、たとえば4096または1024など、何らかの適当なサイズであってよい。この方法では、大きなファイルにおいて1バイトが変更されると、大きなファイルの1チャンクのみがコピーされ修正される。またこれにより、数バイトしか異ならないドライブ上の多数のファイルを分類する時の効率性が高められる。
[1164] システム例17:各メンバが、自身が作成および/または定義するイベントの一部または全部において、イベントの順序におけるコンセンサスが現在存在することをメンバが認識および/または識別することを示す、過去の何らかの時点における状態のハッシュを、その時点までに発生したイベントの数とともに含む、システム例11におけるシステム。メンバが、所与の状態に関してユーザの過半数からそのようなハッシュを含む署名付きイベントを収集した後、メンバは、その時点におけるコンセンサス状態の証拠としてそれを格納し、その時点より前のイベントおよび取引をメモリから消去してよい。
[1165] システム例18:中央値または過半数を計算する動作の代わりに重み付き中央値または重み付き過半数が用いられ、メンバが自身の「ステーク」によって重み付けされる、システム例1におけるシステム。ステークは、メンバの投票がどの程度重視されるかを示す数である。ステークは、暗号通貨の持ち分、あるいは単にメンバが最初に招待され参加した時に割り当てられ、そのメンバが参加を招待する新たなメンバに分配された任意の数であってよい。十分なメンバがコンセンサス状態に合意し、彼らの合計ステークが既存のステークの過半数である場合、古いイベントは破棄され得る。メンバによって寄与されたランクの中央値を用いて全順序が計算される場合、その結果は、メンバの半数が高い方のランクを有し、半分が低い方のランクを有する数である。一方、重み付き中央値を用いて全順序が計算される場合、その結果は、合計ステークの約半分がそれより低いランクに関連し、半分がそれより高いランクに関連する数である。重み付き投票および中央値は、1人のメンバが、各々が招待するメンバによって制御される偽名にすぎない多数の「自作自演」ユーザを招待して参加させるシビル攻撃の防止に役立ち得る。招待するメンバが、招待された人に自身のステークを分配することを強いられる場合、自作自演は、コンセンサス結果を制御しようとする試みる攻撃者にとって役に立たない。したがって、いくつかの状況において、プルーフオブステークが役立ち得る。
[1166] システム例19:単一の分散型データベースの代わりに、階層内に複数のデータベースが存在する、システム例1におけるシステム。たとえば、ユーザがそのメンバである単一のデータベースが存在し、次にいくつかのより小さなデータベース、または「チャンク」が存在してよく、その各々がメンバのサブセットを有する。イベントがチャンク内で発生すると、イベントはチャンクのメンバにわたり同期され、チャンク外のメンバには同期されない。その後、チャンク内でコンセンサス順序が決定された後、随時、その結果生じる状態(またはコンセンサス全順序を有するイベント)が大きいデータベースのメンバシップ全体に共有され得る。
[1167] システム例20:状態を(たとえば、システムのメンバによって定義されたデータベース状態変数によって捕捉されたように)更新するためにソフトウェアを更新するイベントを有する能力を備えた、システム例11におけるシステム。たとえばイベントXおよびYは、それらのイベントにおける取引を読み取るソフトウェアコードに従って状態を修正し、その後、状態を適切に更新する取引を含んでよい。次にイベントZは、新たなバージョンのソフトウェアが利用可能であるという通知を含んでよい。全順序が、X、Z、Yの順序でイベントが発生することを述べる場合、状態は、Xにおける取引を古いソフトウェアによって処理し、Yにおける取引を新たなソフトウェアによって処理することによって更新され得る。しかしコンセンサス順序がX、Y、Zである場合、XおよびYは古いソフトウェアによって更新され、それによって異なる最終状態がもたらされ得る。したがって、そのような実施形態において、コミュニティが、いつ古いバージョンから新しいバージョンへ切り換えるかに関するコンセンサスを実現し得るように、コードをアップグレードする通知がイベント内で発生してよい。これにより、メンバが同期状態を維持することが確実になる。また、アップグレード中も、プロセスを再起動または再開する必要なく、システムが実行し続け得ることも確実になる。
[1168] システム例21:上述したシステムは、最終的なコンセンサスをもたらす、分散型コンセンサスに関する効率的な収束メカニズムを作成および/または実現することが予想される。これに関していくつかの定理が、以下に示すように証明され得る。
[1169] 図10は、第1のデータベースレコード(たとえばウォレット1002A)および第2のデータベースレコード(たとえばウォレット1002B)を有するメンバのアリス、および第1のデータベースレコード(たとえばウォレット1004A)および第2のデータベースレコード(たとえばウォレット1004B)を有するメンバのボブを示す。上述したように、アリスおよびボブは、コンピュータデバイスを介して、たとえばパラメータとして公開秘密鍵ペアを有するウォレット(W,K)(たとえば、Wは新たなレコードに論理的に関連付けられた公開鍵であり、Kは新たなレコードに論理的に関連付けられた秘密鍵である)などのコマンドをポストすることによって、新たなデータベースレコードを作成または定義することができる。分散型データベースは、たとえばアリスの第1のウォレット1002Aおよびボブの第1のウォレット1004Aに格納されたデジタル資産(たとえば暗号通貨)の金額に対応する値のレコードを追跡および/または維持することができる。いくつかの例において、分散型データベースのメンバまたはユーザは、ウォレット1002Aがアリスに属すること、およびウォレット1004Aがボブに属することを識別してよい。そのような場合、アリスは、分散型データベースの他のメンバまたはユーザが、ウォレット1002Bがアリスに属することを識別できないように、第2のウォレット(たとえばウォレット1002B)を作成および/または定義してよい。言い換えると、アリスは、ウォレット1002Bに行われる取引を分散型データベースの他のメンバまたはユーザに対して匿名に保つように匿名ウォレット1002Bを定義または作成することができる。同様にボブは、匿名ウォレット1004Bを作成し、ウォレット1004Bに行われる取引を匿名に保つことができる。
[1170] アリスの第2のウォレット1002Bおよびボブの第2のウォレット1004Bは、インスタンス作成後は空であり、未だ分散型データベースの一部ではない。アリスは、自身の第1のウォレット1002Aから自身の第2のウォレット1002Bへの直接暗号通貨譲渡をポストし、そのような直接譲渡は、分散型データベースの他のメンバまたはユーザに対し可視である。同様に、ボブの第1のウォレット1004Aから彼の第2のウォレット1004Bへの暗号通貨の直接譲渡は、分散型データベースの他のメンバまたはユーザに対し可視である。
[1171] 有利には、いくつかの例において、アリスおよびボブは、図10に示す譲渡プロトコルまたは動作のシーケンスを実行して、自身の第1のウォレットから自身の第2のウォレットへ匿名の譲渡を行うことができる。図10に示す動作のいくつかは上述される(たとえば、上述したTRANSFER_DOUBLEは、図10に示すTRANSFER2と機能的に同様である)。そのような例において、アリスは、ボブにスワップ要求1001を送信してよい。スワップ要求1001は、アリスの第1のウォレット1002Aの公開鍵A1、アリスが自身の第2のウォレット1002Bへ譲渡しようとするデジタル資産(たとえば暗号通貨)の金額を示す値C、(たとえば、匿名の譲渡に関連する一連の関連取引を識別するための)乱数識別子N、および満了タイムスタンプTを含んでよい。スワップ要求1001は、ボブへのプライベートメッセージを介して、および/または、公開フォーラム、公開台帳、分散型データベース、または他の適当な通信媒体へのスワップ要求のポストによって、アリスによって行われ得る。いくつかの例において、アリスは、自身の第1のウォレット1002Aに対応する秘密鍵A1’を用いてスワップ要求に署名してよく、それによってボブは、アリスの公開鍵A1を用いて、たとえばアリスがスワップ要求を行っていることを検証することができる。
[1172] いくつかの例において、ボブは、スワップ応答1003によってスワップ要求1001に返答してよい。スワップ応答1003は、ボブの公開鍵B1、(1001で受信された)乱数N、およびアリスの第1のウォレットの公開鍵A1によって暗号化されたボブの第2のウォレット1004Bの公開鍵B2を含んでよい。したがって、アリスは自身の第1のウォレットの公開鍵(すなわちA1)とペアである秘密鍵A1’を有するので、アリスのみが、ボブの第2のウォレット1004Bの公開鍵を復号することができる。同様にボブは、彼の第1のウォレット1004Aの公開鍵(すなわちB1)とペアである秘密鍵B1’を用いてスワップ応答1003に署名してよい。ボブは、アリスがスワップ要求1001を送信するために用いたのと同じ通信媒体を用いて、または、たとえばアリスによって示されたユニバーサルリソースロケータのアドレスなどのアドレスへ、スワップ応答1003をポストまたは送信してよい。いくつかの例において、アリスは、ボブがアリスの第2のウォレット1002Bの公開鍵A2を非公開に識別することができるように、ボブの第1のウォレット1002Aの公開鍵によって暗号化されたアリスの第2のウォレット1002Bの公開鍵A2もボブへ送信してよい。
[1173] アリスは、スワップ応答1003を受信すると、自身の第1のウォレット1002Aに対応する秘密鍵A1’によって署名された譲渡コマンド1005を分散型データベースにポストしてよい。譲渡コマンド1005は、アリスの第1のウォレット1002Aの公開鍵A1およびボブの第1のウォレット1004Aの公開鍵B1、譲渡される予定のデジタル資産を表す金額または値C、乱数N、および満了タイムスタンプTを含んでよい。上述したように、タイムスタンプTは、Tより前にコンセンサスプロトコルを介して分散型データベース内で収束が実現しなかった場合、譲渡コマンド1005が却下または破棄されるように調整する時間閾値を示す。譲渡コマンド1005は、第1のレコードまたはウォレット1102Aおよび第2のレコードまたはウォレット1104Aが少なくとも値Cのデジタル資産を有するかを識別または決定するように構成される。デジタル資産の値Cは、譲渡コマンド1005の実行時にソースレコード(たとえばウォレット1002Aまたは1004A)から差し引かれ、宛先レコード(たとえばウォレット1002Bまたは1004B)に合計される数値であってよい。譲渡コマンド1005は、アリスの第2のウォレット1002Bの公開鍵A2およびボブの第2のウォレット1004Bの公開鍵B2も含んでよい。
[1174] アリスの第2のウォレット1002Bの公開鍵A2およびボブの第2のウォレット1004Bの公開鍵B2の各々は、文字列として表され得る。各文字列は、関連する辞書値を有してよい。譲渡コマンド1005をポストする前に、アリスは、公開鍵A2およびB2を辞書順に分類してよい。譲渡コマンドがmin(A2,B2)を示す場合、アリスは、2つの文字列の最小値を含んでよい。したがって、アリスが、文字列A2が文字列B2よりも辞書順で前に来ることを決定した場合、アリスは、譲渡コマンド1005に(すなわち、図10内でmin(A2,B2)が示される場所に)A2を含める。同様に、譲渡コマンド1005をポストする前に、アリスは、2つの文字列の最大値を求めるために公開鍵A2およびB2を辞書順に分類してよい。譲渡コマンドがmax(A2,B2)を示す場合、アリスは、2つの文字列の最大値を含んでよい。したがって、アリスが、文字列B2が文字列A2よりも辞書順で後に来ることを決定した場合、アリスは、譲渡コマンド1005に(すなわち、図10内でmax(A2,B2)が示される場所に)B2を含める。言い換えると、関数minおよびmaxは、パラメータとして受信された公開鍵の辞書的比較を実行する。したがって、A2およびB2の両方が譲渡コマンド1005に含まれる場合、譲渡コマンド内でA2およびB2を記載する順序は、A2およびB2に関連するウォレットの所有権または関連付けに基づくものではない。
[1175] したがって、譲渡コマンド1005は、金額Cのデジタル資産が2つのソースレコード(たとえばアリスの第1のウォレット1002Aおよびボブの第1のウォレット1002A)の各々から差し引かれ、金額Cのデジタル資産が2つの宛先レコード(たとえばアリスの第2のウォレット1002Bおよびボブの第2のウォレット1004B)の各々へ記入されるように、分散型データベースに譲渡を命令してよい。公開鍵A2およびB2の最小および最大の決定は、宛先ウォレット1002Bまたは1004Bのどちらがソースウォレット1002Aまたは1004Aのどちらに関連するか(および/または、宛先ウォレット1002Bまたは1004Bのどちらがアリスに関連し、どちらがボブに関連するか)を隠しながら、金額Cのデジタル資産がアリスの第2のウォレット1002Bおよびボブの第2のウォレット1004Bの各々へ譲渡されることを保証する。minおよびmax関数によって求められる分類順序は、各ウォレットを誰が所有するかに無関係であることにより、その情報を分散型データベースの他のメンバまたはユーザから隠す。よって、アリスが譲渡コマンド1005をポストした後、分散型データベースの他のメンバまたはユーザは、最大でも、デジタル資産金額Cが譲渡される宛先ウォレットの1つ(すなわち1002Bまたは1004B)をアリスが所有することしか推測できず、2つの宛先ウォレット1002Bまたは1004Bのどちらが実際にアリス(またはアリスによって表されるコンピュータデバイスに関連するユーザ)によって所有されるかを知ることはない。言い換えると、宛先レコード(たとえば1002Bまたは1004B)に論理的に関連付けられた公開鍵(たとえばA2またはB2)とペアである秘密鍵(たとえばA2’またはB2’)に関連するコンピュータデバイスのアイデンティティ(たとえばアリスまたはボブ)は、アリスおよびボブを含むコンピュータデバイスのセットの中で隠される。
[1176] ボブは、アリスによってポストされた譲渡コマンド1005に対応するおよび/または同一であり、かつボブの第1のウォレットに対応する秘密鍵B1’を用いて署名された譲渡コマンド1007をポストしてよい。具体的には、ボブは、アリスと同じ取引をポストするためにアリスと同じ分類(たとえば、公開鍵A2およびB2の辞書的分類)を実行してよい。あるいは、アリスは、譲渡コマンド1005をボブに送信するだけであってよく、ボブが、両方のシグネチャとともに単一の譲渡コマンド1007を分散型データベースにポストしてよい。その後、両方のシグネチャが有効であった場合、分散型データベースは、コンセンサスに至った時点で、ポストされた譲渡コマンドを実行してよい。よって、譲渡プロトコルのいくつかの例において、譲渡コマンド1005および1007の両方が分散型データベースにポストされ得るが、他の例において、譲渡コマンド1007のみが、両方のシグネチャとともに分散型データベースにポストされる。
[1177] アリスおよびボブは、第2のウォレットの公開鍵A2およびB2の最小値および最大値を決定するものとして上述されたが、他の実装において、宛先レコードに関連する公開鍵A2およびB2を提示する順序を識別するために他の任意の決定論的分類が用いられ得る。したがって、アリスおよびボブの両者が以下を実行することができる。
S={A1,B1}
D=sortList({A2,B2})
Post/Send:Transfer2(S,D,C,N,T)
[1178] 他のいくつかの例において、アリスおよびボブは、第三者(たとえば図10には示されないキャロル)へメッセージを送信してよく、それによってキャロルは、ボブおよび/またはアリスの代わりに分散型データベースに譲渡コマンドをポストする。また他の例において、第三者は、アリスとボブとの間の匿名性の譲渡に関連する通信のための仲介者として機能する。したがって、アリスおよび/またはボブが仲介者として第三者を用いる場合、彼らのレコード(すなわちウォレット)は、分散型データベースに含まれてよく、それらに関連する公開鍵は、アリスおよびボブに対応するコンピュータデバイスが分散型データベースを実装していない(または分散型データベースのサブセットおよび/または一部しか実装していない)場合でも、分散型データベースによって用いられ得る。そのような場合、分散型データベースの他のメンバ(たとえばキャロル)は、データベース動作の指標、たとえばアリスからの(デジタル資産の金額を示す)値Cの(スワップ要求1001と同様の)譲渡要求を受信し、キャロルがこの要求をボブへ受け渡してよい。その後ボブは、キャロルを介してアリスへ(スワップ応答1003と同様の)スワップ応答を送信することによってアリスに返答してよい。その後アリスおよびボブは、たとえば(譲渡コマンド1005および1007と同様の)彼らの譲渡コマンドなどのデータベース動作の指標をキャロルに提供してよく、キャロルは、要求されたデータベース動作(たとえば譲渡コマンド)を分散型データベースにポストしてよい。
[1179] 他の例として、いくつかの例において、アリスに対応するコンピュータデバイスは分散型データベースを実装していないが、ボブに対応するコンピュータデバイスは実装している。そのような場合、アリスは、データベース動作の指標をキャロルへ送信してよく、キャロルは、対応する譲渡コマンドをアリスの代わりに分散型データベースにポストしてよい。言い換えると、分散型データベースは、分散型データベースを実装していないコンピュータデバイスによって所有されるレコード(すなわちウォレット)を含み、分散型データベースを実装するおよび/または分散型データベースのメンバである第三者コンピュータデバイスを介して、これらのレコードを用いる譲渡プロトコルを実行してよい。
[1180] また他の例として、いくつかの例において、アリスおよび/またはボブは、分散型データベースの一部を実装および/または格納してよい。具体的には、第三者コンピュータデバイス(キャロル)が分散型データベースのメンバである、および/または分散型データベース全体を実装および/または格納する場合、アリスおよび/またはボブは、キャロルが格納しているものの一部を格納および/または保持してよい。例として、アリスは、自身の公開鍵に関連するレコードを格納することができるが、分散型データベースの他のユーザに関連するレコードを格納することができない。同様にボブは、自身の公開鍵に関連するレコードを格納することができるが、分散型データベースの他のユーザに関連するレコードを格納することができない。そのような例において、アリスおよびボが、分散型データベースの一部を格納するのに対し、キャロルは、分散型データベース全体にアクセスするためにアリスおよびボブの代理として機能してよい。
[1181] いくつかの実装において、分散型データベースは、所与のウォレットがその中に隠されるウォレットのセット内のウォレットの数を表す、各ウォレットの整数「プールサイズ」を格納してよい。よって、観察者が、ウォレットXがN人の異なるメンバの1人によって所有されることしか知らない場合、どの程度強力に匿名化されているかを示すプールサイズNがそのウォレットに添付され得る。たとえば1002Aおよび1004Aなどの非匿名化ウォレットは、所有者が知られているので1のプールを有してよく、よって観察者は、ただ1人の個人のセットにアイデンティティを絞ることができる。他のウォレットは、そのようなウォレットに関してプロトコルが複数回実行された場合、より高度に匿名化され得る。たとえば、観察者が、ウォレットA1がPA1人の個人のうち1人によって所有されること、およびB1がPB1人の個人のうち1人によって所有されることを識別することができる場合、整数PA1はA1に関連し、整数PB1はB1に関連し得る。
[1182] いくつかの例において、メッセージ1001、1003、1005、および/または1007の1または複数は、PA1およびPB1を含んでよい。アリスおよびボブは、デジタル資産の譲渡を継続するかを決定するために、PA1およびPB1を用いてよい。たとえば、アリスがこのプロセスを既に10回行っている場合、PA1は1024であり得る。ボブがこのプロセスを未だ行っていない場合、PB1は1であり得る。したがってアリスは、自身の匿名性が1024のウォレットのプールに隠された状態から1025のウォレットのプールに隠された状態へとわずかな増加しかもたらされないため、ボブとのプロトコルを実行することを拒絶し得る。アリスは、一度の反復によりPA1を1024から2048まで増加させ得るように、1024のプールサイズを有するウォレットとの連動を好み得る。いくつかの例において、ウォレットは、整数ではなくウォレットのセットに関連し得る。これは、観察者が、セット内のウォレットの1つを所与のメンバが所有することを知るが、どの1つであるかを知ることがないようなウォレットのセットである。後述の例において、PA1は1024のウォレットのセットであり、PB1は、1024のウォレットのセットである。プロトコルが完了した後、PA1は、PA1およびPB1のセットのユニオンに拡大される。アリスは、彼女の匿名性を少量しか増加させないプロセスに時間を割くことがないように、このユニオンがPA1よりも大幅に大きくなるようなウォレットとの連動のみに同意し得る。
[1183] いくつかの例において、メッセージ1001は、たとえばアリスが受諾する意思があるPB2の最小閾値を示すパラメータを含んでよい。したがってアリスは、たとえばPB1が最小閾値未満である場合、ボブとのスワップを継続しないことを決定してよい。
[1184] いくつかの実装において、メッセージ1001、1003、1005、および/または1007の1または複数は、(1)ユーザコメントを表す文字列値、(2)メッセージが提出された日付および時間、(3)ユーザのウォレット(複数も可)から、メッセージまたは取引を提起またはポストするコンピュータデバイスのウォレットへ料金を移転する承認、(4)ユーザのウォレットから、コンピュータデバイスインターネットプロトコル(IP)アドレス(たとえば、TORネットワーク内のコンピュータデバイス)の匿名化に寄与するコンピュータデバイス(複数も可)への料金の移転の承認、および/または他の任意の適当なメタデータを含んでよい。
[1185] 他の実装において、譲渡コマンドは、たとえば
TRANSFER2(S,W,R,D,N,T)
などの譲渡取引を用いて実行されてよく、ここで、
K=送付側ウォレットの数
S=公開鍵{S1,S2,...,SK}を有する送付側ウォレットのリスト
W=各ウォレット{W1,W2,...,WK)から差し引かれるデジタル資産の金額またはコインの数
M=受取り側ウォレットの数
R=公開鍵{R1,R2,...,RM}を有する受取り側ウォレットのリスト
D=各ウォレット{D1,D2,...,WM}に預金されるデジタル資産の金額またはコインの数
N=乱数
T=満了タイムスタンプ
であり、差し引かれるコインの数またはデジタル資産金額Wの合計は、各ウォレットDに預金されるコインの数またはデジタル資産金額の合計に対応し、S内の公開鍵に関連する秘密鍵によるシグネチャが存在する。単一の取引TRANSFER2(S,W,R,D,N,T)は、そのような秘密鍵によって署名された添付ファイルを含んでよい。いくつかの例において、複数の(同じNを有する)同一取引が存在してよく、その各々がシグネチャの1または複数を有し、必要なシグネチャを集合的に有する。TRANSFER2コマンドに含まれ得る他のパラメータは、(1)コメントを通信するための文字列、(2)譲渡コマンドがポストされた時間を示す日付/時間、(3)レコード(すなわちウォレット)から、譲渡コマンドをポストするための第三者として用いられたコンピュータデバイスのレコード(すなわちウォレット)へ料金を移転する承認を示すパラメータ、および他の適当なメタデータを含んでよい。
[1186] 他の実装において、譲渡コマンド1005および1007は、図10に示すパラメータよりも少ない数のパラメータを含むように修正され得る。たとえば譲渡コマンド1005は、TRANSFER2(min(A2,B2),max(A2,B2),N,T)A1’として分散型データベースにポストされ、譲渡コマンド1007は、TRANSFER2(N,T)B1’としてポストされ得る。そのような場合、匿名譲渡に伴う一連の関連取引を独自に識別する乱数Nの独自性に頼ることによって、余分なパラメータによって消費される帯域幅が低減される。
[1187] 図11は、ウォレット間の譲渡を匿名化するための、図10を参照して説明された譲渡プロトコルの反復応用によって生成される4レベルツリー構造を示す。上述したように、図10の譲渡プロトコルの4つのメッセージを実行した後、ウォレット1002Aおよび1004A内のコインは、ウォレット1002Bおよび1004Bへ譲渡される。分散型データベースのメンバまたはユーザは、分散型データベースに記録された取引の履歴から、たとえばアリスの第1のウォレット1101からボブの第2のウォレット1104またはアリスの第2のウォレット1105のいずれかへの譲渡が実行されたことを推測し得る。同様に、ボブの第1のウォレット1103からボブの第2のウォレット1104またはアリスの第2のウォレット1105のいずれかへの譲渡が実行されたことが推測され得る。したがって、ツリー構造のレベル1において、アリスの第2のウォレット1105は、2つのウォレット(すなわちウォレット1104および1105)のプールの中で、分散型データベースの他のメンバまたはユーザから隠されている。
[1188] レベル2において、アリスは、図10を参照して説明された譲渡プロトコルをデイブと繰り返す。ボブは、譲渡プロトコルをキャロルと繰り返す。したがってレベル2において、アリスの第2のウォレット1105からウォレット1107または1109の1つへ複数のコインまたはデジタル資産額が譲渡され、アリスのウォレットは、4つのウォレット、すなわちウォレット1107、1109、1111、および1113の中で、分散型データベースの他のメンバまたはユーザから隠されている。アリスは、図10を参照して説明された譲渡プロトコルを繰り返し続けてよい。各レベルにおいて、アリスのウォレットは、指数関数的に増加するウォレットのプール内で隠される。たとえばレベル3において、アリスは、ハンクと譲渡プロトコルを繰り返し、アリスのウォレット1115は、8つのウォレットのプールに隠される。レベル4において、アリスは、オスカーと譲渡プロトコルを繰り返し、アリスのウォレット1117は、16のウォレットのプールに隠される。レベル40(図11には不図示)において、アリスのウォレットは、1兆を超えるウォレットのプールに隠される。
[1189] 図11に示す譲渡プロトコルは、図12に示すように並列で同様に実行され得る。たとえばアリスは、譲渡が同時またはほぼ同時に実行されるように、ボブ、デイブ、ハンク、およびオスカーとの譲渡プロトコルを実行してよい。したがってアリスは、1201、1203、1205、および1207に示される譲渡プロトコルの動作を同時に実行および/またはポストしてよい。コンセンサス順序に至った時点で、金額Cのデジタル資産を譲渡するように設定されたウォレットの全てが少なくともそのような金額を有する場合、全ての譲渡が並列で実行される。金額Cのデジタル資産を譲渡するように設定されたウォレットの少なくとも1つがそのような金額を有さない場合、1201、1203、1205、および1207に示す譲渡プロトコルの動作の1または複数が、「アクティブ」状態で分散型データベースに格納され得る。したがって、「アクティブ」状態で格納された1201、1203、1205、および1207に示す譲渡プロトコルの動作は、金額Cのデジタル資産を有さなかったウォレットが少なくともそのような金額を有する、コンセンサス履歴内の最初の時点で実行され得る。
[1190] 上述したように、分散型データベースにポストされた譲渡コマンドは、満了時間を示すパラメータTを含んでよい。1201、1203、1205、および/または1207に示す譲渡プロトコルの動作が実行される前に時間Tに到達した場合、そのような動作は却下され、実行されない。何らかの時点で、1201、1203、1205、および/または1207に示す譲渡プロトコルの動作が分散型データベース内で「アクティブ」であり、ウォレットが十分な金額のデジタル資産(たとえば金額C)を有するまで実行されることを待機している場合、そのようなウォレットに十分な金額のデジタル資産が投入されると、1201、1203、1205、および/または1207に示す譲渡プロトコルの動作の1または複数は、それらのコンセンサス順序でトリガされる。そのような場合、1201、1203、1205、および/または1207に示す譲渡プロトコルの動作のコンセンサス順序は、そのような譲渡プロトコルの動作に含まれる署名付き動作のコンセンサス順序の最後であってよい。したがって、譲渡プロトコルの動作は遅延され、または時間Tに到達するまで「アクティブ」状態に保たれ得る。「アクティブ」状態の動作を実行するために十分な金額のデジタル資産が時間Tまでにレコードに投入されない場合、1201、1203、1205、および/または1207に示す譲渡プロトコルの動作は却下される。
[1191] 図12に示す例において、アリスは、1201、1203、1205、および/または1207に示す譲渡プロトコルの動作を、実質的に並行して実質的に同時に分散型データベースにポストする。そのような動作は、コンセンサス順序に到達すると、ソースレコードまたはウォレットが、ポストされた譲渡コマンドにおいて明示されたように期間T以内に少なくとも金額Cのデジタル資産を有した後、実行される。言い換えると、1201における公開鍵(A1,B1)、1203における(A2,D2)、1205における(O4,A4)、および1207における(A3,H3)に関連するレコードが、期間T内の任意の時点で少なくとも金額Cのデジタル資産に関連する場合、譲渡プロトコル1201、1203、1205、および1207の動作は、公開鍵が金額Cに関連付けられると実行される。しかし、取引に関与する公開鍵に関連するレコードの1つが、期間T内の時点で少なくとも金額Cのデジタル資産を含まない場合、その譲渡は(期間Tの満了後に)取り消されるが、他の任意の取引は、その取引の公開鍵に関連するレコードが期間T内の時点で金額Cに関連付けられさえすれば実行される。したがって、1201、1203、1205、1207に示す譲渡プロトコルの動作の実行は、ソースレコードまたはウォレットが譲渡を設定された金額Cを有するか、および有さない場合は、ソースレコードまたはウォレットは時間Tが経過する前に金額Cのデジタル資産を取得するかに基づいてよい。これにより、取引が連続的に実行されることが可能でありながら、メンバ(たとえばアリス)は、複数の連続取引を分散型データベースに同時にポストすることができる。
[1192] たとえば、アリスが1201、1203、1205、1207に示す譲渡プロトコルの動作を実質的に並行して実質的に同時に分散型データベースにポストするが、ポスト時、レコードA1およびB1のみが金額Cを含む場合、取引1201のみが実行する。これは、A2およびB2に関連するレコードへの金額Cの譲渡である。D2に関連するレコードもまた期間T内に金額Cを取得した場合、(A2に関連するレコードが取引1201につき金額Cを受け取ってから)取引1203が実行する。同様に、取引1207、次に取引1205が実行してよい。したがって、取引1201、1203、1205、および1207の各々は、同時に分散型データベースにポストされ得るが、金額Cがレコードに受け取られた(期間T内の)時間に基づいて連続的順序で実行する。
[1193] 定理例1:半順序においてイベントxがイベントyよりも先行する場合、所与の時間における所与のメンバの他のメンバに関する知識において、他のメンバの各々は、yより前にxの指標を受信するか、あるいはyの指標を未だ受信していない。
[1194] 証明:半順序においてイベントxがイベントyよりも先行する場合、xはyの祖先である。メンバがyの指標を最初に受信する時、そのメンバは、先にxの指標を既に受信しているか(この場合、彼らはyより前にxを認識している)、あるいは同期がそのメンバにxおよびyの両方を提供する場合がある(この場合、単一の同期中に受信されるイベントは、システム例5に関して説明したように祖先関係と一致する順序で受信されていると考えられるので、彼らはその同期中にyより前にxを認識する)。証明終了。
[1195] 定理例2:任意の所与のハッシュグラフに関して、半順序においてxがyよりも先行する場合、xは、そのハッシュグラフに関して計算された全順序においてyよりも先行する。
[1196] 証明:半順序においてxがyに先行する場合、定理1によって、
[1197] 全てのiに関し、rank(i,x)<rank(i,y)であり、
[1198] ここでrank(i,x)は、メンバiによってイベントxに割り当てられたランクであり、xがメンバiによって受信された第1のイベントである場合、1であり、第2のイベントである場合、2であり、以下同様である。med(x)は全てのiにわたるrank(i,x)の中央値であり、med(y)についても同様であるものとする。
[1199] 所与のkについて、rank(i1,x)がk番目に小さいxランクであり、rank(i2,y)がk番目に小さいyランクであるように、i1およびi2を選択する。すると、
[1200] rank(i1,x)<rank(i2,y)である。
[1201] これは、rank(i2,y)が、各々が対応するxランクよりも厳密に大きいyランクのk以上であるためである。したがって、rank(i2,y)はxランクの少なくともkよりも厳密に大きいので、k番目に小さいxランクよりも厳密に大きい。この論証は、あらゆるkに関して成り立つ。
[1202] 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つのzランクの平均は、2つのyランクの平均よりも小さい。よって、med(x)<med(y)である。したがって両方の場合において、xランクの中央値は、yランクの中央値よりも厳密に小さい。よって、中央値ランクによってアクションを分類することにより全順序が定義される場合、xは全順序においてyよりも先行する。証明終了。
[1203] 定理例3:「ゴシップ期間」が、既存のイベントが同期を通して全てのメンバに伝搬する時間である場合、
[1204] 1ゴシップ期間後:全てのメンバがイベントを受信する。
[1205] 2ゴシップ期間後:全てのメンバが、これらのイベントの順序において合意する。
[1206] 3ゴシップ期間後:全てのメンバが、合意に至ったことを知る。
[1207] 4ゴシップ期間後:全てのメンバが、このコンセンサス順序を是認する、他の全てのメンバからのデジタルシグネチャを取得する。
[1208] 証明:S0が、所与の時間T0までに作成および/または定義されたイベントのセットであるものとする。全てのメンバが最終的に他の全てのメンバと何度でも同期するものとすると、確率1の場合、最終的に、S0内のイベントが全てのメンバに拡散され全てのメンバがイベントを認識する時間T1が存在する。これは、第1のゴシップ期間の終了である。S1が、時間T1に存在し、T0には未だ存在しないイベントのセットであるものとする。確率1の場合、最終的に、時間T1に存在したセットS1内の全てのイベントを全てのメンバが受信する時間T2が存在する。これは、第2のゴシップ期間の終了である。同様に、T3は、T2までに存在するがT1以前には存在しないS2内の全イベントが全メンバに拡散される時間である。ただし、各ゴシップ期間は最終的に、確率1で終了する。平均して、n人のメンバがいる場合、各々は、Log2(n)回の同期を実行する限り継続する。
[1209] 時間T1までに、全てのメンバがS0内の全てのイベントを受信する。
[1210] 時間T2までに、所与のメンバであるアリスは、S0内の全てのイベントを受信している他のメンバの各々のレコードを受信する。したがってアリスは、全てのメンバに関するS0内の全てのアクションの(そのメンバがそのアクションを受信した順序である)ランクを計算し、ランクの中央値によってイベントを分類する。その結果生じる全順序は、S0内のイベントに関して変化しない。なぜなら、結果である順序は、これらのイベントの各々の指標を各メンバが最初に受信した順序の関数であり、これは変わることがないためである。アリスが計算した順序は、S0イベントの中に散在するS1からのいくつかのイベントを有する。これらのS1イベントは、S0イベントのシーケンス内のどこに含まれるかが変わることがある。しかし、S0内のイベントの相対的順序は変化しない。
[1211] 時間T3までに、アリスは、S0およびS1のユニオンにおける全順序、およびそのユニオン内のイベントの相対的順序が変化しないことを学ぶ。彼女は更に、このシーケンス内でS1からの最先イベントを知ることができ、S0外の新たなイベントの挿入による場合でも、S1より前のイベントのシーケンスは変化しないと結論を下すことができる。したがって時間T3までに、アリスは、第1のS1イベントより前の履歴におけるイベントの順序に関してコンセンサスが実現されたと決定することができる。彼女は、この順序で発生するこれらのイベントの結果生じる(たとえばアリスによって定義されたデータベース状態変数によって捕捉された)状態のハッシュにデジタル署名し、彼女が作成および/または定義する次のイベントの一部としてシグネチャを送信することができる。
[1212] 時間T4までに、アリスは、他のメンバから同様のシグネチャを受信する。その時点で、彼女は、シグネチャが証明する状態とともにそのシグネチャリストを保持するだけでよく、彼女が第1のS1イベントより前に格納したイベントを破棄してよい。証明終了。
[1213] 本明細書で説明されるシステムは、迅速かつ安全にコンセンサスを実現する分散型データベースを説明する。これは、多数の応用例のための有用な構成ブロックであり得る。たとえば、取引が、1つの暗号通貨ウォレットから別のウォレットへの暗号通貨の譲渡を表す場合、かつ状態が単純に各ウォレット内の通貨額の記述である場合、このシステムは、既存のシステムにおける高費用のプルーフオブワークを回避する暗号通貨システムを継続する。現在の暗号通貨において一般的ではない機能を追加するための自動規則の実施がこれを可能にする。たとえば、ウォレットが特定の期間暗号通貨を送付も受取りもしない場合、そのウォレットは削除され、その価値が、現在持っている額に比例して他の既存のウォレットへ分配される規則を実施することによって、失われたコインが回復し、デフレーションが回避され得る。このような場合、ウォレットの秘密鍵が失われた場合でも、貨幣供給が膨張または収縮することはない。
[1214] 他の例は、サーバ上でプレイされている多人数参加型オンライン(MMO)ゲームのように機能するが中央サーバを用いずに実現する分散型ゲームである。コンセンサスは、制御される任意の中央サーバがなくとも実現され得る。
[1215] 他の例は、そのようなデータベースの上に構築されるソーシャルメディアのためのシステムである。取引はデジタル署名され、メンバが他のメンバに関する情報を受信することにより、現在のシステムに優る安全性および利便性の利点が提供される。たとえば、電子メールが偽造返信アドレスを有し得ないことにより、強力なスパム対策ポリシを有する電子メールシステムが実装され得る。そのようなシステムは、電子メール、ツイート、テキスト、フォーラム、ウィキ、および/または他のソーシャルメディアによって現在行われている機能を単一の分散型データベースに結合する統合ソーシャルシステムにもなり得る。
[1216] 他のアプリケーションは、たとえばグループが全体として約定または文書に署名するグループデジタルシグネチャなど、より高度な暗号関数を含んでよい。この形式および他の形式の他者同時計算は、そのような分散型コンセンサスシステムを用いて有用に実装され得る。
[1217] 他の例は、公開台帳システムである。誰でも金銭を支払ってシステム内に何らかの情報を格納することができ、システムに情報を格納するために年ごとにバイト当たり少額の暗号通貨(または実際の通貨)を支払う。これらの資金はその後、そのデータを格納するメンバ、およびコンセンサスを実現するために繰り返し同期して働くメンバに自動的に分配され得る。メンバが同期する度に、それらのメンバへ少額の暗号通貨を自動的に譲渡することができる。
[1218] これらの例が示すように、分散型コンセンサスデータベースは、多数の応用例の構成要素として有用である。データベースは、高費用のプルーフオブワークを用いず、代わりにより安価なプルーフオブステークを用いるので、より小さなコンピュータまたはモバイルおよび埋込型デバイス上で動作するフルノードによって動作することができる。
[1219] イベントは、前の2つのイベントのハッシュ(1つの自己ハッシュおよび1つの対外ハッシュ)を含むものとして上述されたが、他の実施形態において、メンバは、前の3つのイベントのハッシュ(1つの自己ハッシュおよび2つの対外ハッシュ)を含むイベントを作成および/または定義するために2人の他メンバと同期してよい。また他の実施形態において、任意の数のメンバからの前のイベントの任意の数のイベントハッシュがイベント内に含まれ得る。いくつかの実施形態において、異なるイベントは、前のイベントの異なる数のハッシュを含んでよい。たとえば、第1のイベントは2つのイベントハッシュを含んでよく、第2のイベントは3つのイベントハッシュを含んでよい。
[1220] イベントは、前のイベントのハッシュ(または暗号ハッシュ値)を含むものとして上述されたが、他の実施形態において、イベントは、ポインタ、識別子、および/または前のイベントへの他の任意の適当な参照を含むように作成および/または定義されてよい。たとえばイベントは、前のイベントに関連し前のイベントを識別するために用いられるシリアル番号を含むことによってイベントをリンクさせるように作成および/または定義され得る。いくつかの実施形態において、そのようなシリアル番号はたとえば、イベントを作成および/または定義したメンバに関連する識別子(たとえば、メディアアクセス制御(MAC)アドレス、インターネットプロトコル(IP)アドレス、割当てアドレスなど)およびそのメンバによって定義されたイベントの順序を含んでよい。たとえば、識別子10を有するメンバは、そのメンバによって作成および/または定義された15番目のイベントの場合、そのイベントに識別子1015を割り当ててよい。他の実施形態において、イベントに識別子を割り当てるために他の任意の適当なフォーマットが用いられ得る。
[1221] 他の実施形態において、イベントは、暗号ハッシュ全部を含んでよいが、それらのハッシュの一部のみが同期中に伝送される。たとえば、ハッシュHを含むイベントをアリスがボブへ送信し、JがHの第1の3バイトであり、アリスが、自身が格納しているイベントおよびハッシュのうち、HはJから始まる唯一のハッシュであることを決定すると、アリスは、同期中に、HではなくJを送信してよい。その後ボブが、Jから始まる他のハッシュを自身が有することを決定すると、ボブはアリスに応答し、H全部を要求する。このように、ハッシュは伝送中に圧縮され得る。
[1222] 図示され上述されたシステム例は、他のシステムに関して説明されるが、他の実施形態において、システム例およびそれらの関連機能の任意の組み合わせが、分散型データベースを作成および/または定義するために実装され得る。たとえば、システム例1、システム例2、およびシステム例3は、分散型データベースを作成および/または定義するために組み合わせられ得る。他の例として、いくつかの実施形態において、システム例10は、システム例1を伴うがシステム例9を伴わずに実装され得る。また他の例として、システム例7は、システム例6と組み合わせられ、実装され得る。また他の実施形態において、他の任意の適当なシステム例の組み合わせが実装され得る。
[1223] 様々な実施形態が上述されたが、それらは限定ではなく例示的に提示されたものにすぎないことを理解すべきである。上述した方法が、特定の順序で発生する特定のイベントを含む場合、特定のイベントの順序は変更され得る。また、いくつかのイベントは、上述したように連続的に実行されるのと同様に、可能であれば並列プロセスで同時に実行されてよい。
[1224] 本明細書で説明される実施形態のいくつかは、様々なコンピュータ実装動作を実行するための命令またはコンピュータコードを有する(非一時的プロセッサ可読媒体とも称され得る)非一時的コンピュータ可読媒体を備えるコンピュータストレージ製品に関する。コンピュータ可読媒体(またはプロセッサ可読媒体)は、一時的な伝搬信号(たとえば、空間またはケーブルなどの伝送媒体において情報を搬送する伝搬電磁波)自体を含むものではないという意味で、非一時的である。媒体および(コードとも称され得る)コンピュータコードは、特定の1または複数の目的のために設計および構成されたものであってよい。非一時的コンピュータ可読媒体の例は、たとえばハードディスク、フロッピーディスク、および磁気テープなどの磁気記憶媒体、たとえばコンパクトディスク/デジタルビデオディスク(CD/DVD)、コンパクトディスク読取専用メモリ(CD−ROM)、およびホログラフィックデバイスなどの光記憶媒体、たとえば光ディスクなどの光磁気記憶媒体、モジュールを処理する搬送波信号、および、たとえば特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、読取専用メモリ(ROM)、およびランダムアクセスメモリ(RAM)デバイスなど、プログラムコードを格納および実行するように特に構成されたハードウェアデバイスを含むが、これに限定されない。本明細書で説明される他の実施形態は、たとえば本明細書で説明される命令および/またはコンピュータコードを含むことができるコンピュータプログラム製品に関する。
[1225] コンピュータコードの例は、マイクロコードまたはマイクロ命令、たとえばコンパイラによって生成されるような機械命令、ウェブサービスを生成するために用いられるコード、およびインタープリタを用いてコンピュータによって実行される高レベル命令を含むファイルを含むが、これに限定されない。たとえば実施形態は、命令型プログラミング言語(たとえばC、Fortranなど)、関数型プログラミング言語(たとえばHaskell、Erlangなど)、論理型プログラミング言語(たとえばProlog)、オブジェクト指向プログラミング言語(たとえばJava、C++など)、または他の適当なプログラミング言語および/または開発ツールを用いて実装され得る。コンピュータコードの追加の例は、制御信号、暗号化コード、および圧縮コードを含むが、これに限定されない。
[1226] 様々な実施形態が上述されたが、それらは限定ではなく例示的に提示されたものにすぎず、形式および細部における様々な変更がなされ得ることを理解すべきである。本明細書で説明される装置および/または方法の任意の一部は、相互排他的な組み合わせを除き、任意の組み合わせで組み合わせられてよい。本明細書で説明される実施形態は、説明された様々な実施形態の機能、構成要素、および/または特徴の様々な組み合わせおよび/または部分的組み合わせを含んでよい。

Claims (21)

  1. 複数のコンピュータデバイスに動作可能に結合されたネットワークを介して、第1のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられた第1のレコードを含む分散型データベースを実装する前記複数のコンピュータデバイスに含まれるように構成された前記第1のコンピュータデバイスにおける前記分散型データベースのインスタンスの第1の部分と、
    前記分散型データベースの前記インスタンスの前記第1の部分に動作可能に結合された前記第1のコンピュータデバイスのプロセッサと
    を備え、前記プロセッサは、
    前記複数のコンピュータデバイスのうちの第2のコンピュータデバイスから、(1)前記第1のコンピュータデバイスに関連する第1の公開鍵で暗号化され、(2)前記分散型データベースの第2のレコードに論理的に関連付けられた、前記第2のコンピュータデバイスに関連する第1の公開鍵を受信し、
    前記第1のコンピュータデバイスにおいて、前記第1のコンピュータデバイスに関連する前記第1の公開鍵とペアである秘密鍵によって、前記第2のコンピュータデバイスに関連する前記第1の公開鍵を復号し、
    前記第2のコンピュータデバイスへ、(1)前記第1のコンピュータデバイスに関連し、(2)前記分散型データベースの第3のレコードに論理的に関連付けられ、(3)前記第2のコンピュータデバイスに関連する第2の公開鍵で暗号化され、前記分散型データベースの第4のレコードに論理的に関連付けられた第2の公開鍵を送信し、
    前記第1のレコードおよび前記第4のレコードを含むソースレコードから、前記第2のレコードおよび前記第3のレコードを含む宛先レコードへ値を譲渡するように構成された譲渡コマンドを分散型データベースにポストするための信号を送信するように構成され、前記譲渡コマンドは、前記秘密鍵によって署名され、前記宛先レコードに関連するコンピュータデバイスのアイデンティティが、前記第1のコンピュータデバイスおよび前記第2のコンピュータデバイスを含むコンピュータデバイスのセットの中で隠されるように実行されるように構成される、装置。
  2. 前記複数のコンピュータデバイスのうちの第3のコンピュータデバイスにおける前記分散型データベースの第3のインスタンスは、前記第1のレコード、前記第2のレコード、前記第3のレコード、および前記第4のレコードを含む複数のレコードを含み、
    前記分散型データベースの前記第1のインスタンスは、前記複数のレコードのうち全てのレコードを含むのではない、請求項1に記載の装置。
  3. 前記譲渡コマンドは、前記ソースレコードから前記宛先レコードへ前記値を譲渡する前に、前記ソースレコードが少なくとも前記値を有することを識別するように構成される、請求項1に記載の装置。
  4. 前記譲渡コマンドは、第1の時間に前記分散型データベースにポストされ、
    前記ソースレコードが前記第1の時間に少なくとも前記値を有さない場合、前記譲渡コマンドは、前記ソースレコードが少なくとも前記値を有するまで前記譲渡を遅延させるように構成される、請求項1に記載の装置。
  5. 前記譲渡コマンドは期間に関連し、前記期間内の時間に前記ソースレコードが少なくとも前記値を有する場合、前記ソースレコードから前記宛先レコードへ前記値を譲渡するように構成される、請求項1に記載の装置。
  6. 前記譲渡コマンドは第1の譲渡コマンドであり、前記第2のレコードは第1の宛先レコードであり、前記コンピュータデバイスのセットはコンピュータデバイスの第1のセットであり、
    前記プロセッサは、前記第1の譲渡コマンドが実行される前に前記分散型データベースにポストされる信号を送信するように構成され、第2の譲渡コマンドは、第2の宛先レコードに論理的に関連付けられた公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティが前記コンピュータデバイスの第1のセットを含むコンピュータデバイスの第2のセットの中で隠されるように、前記第1の宛先レコードから前記第2の宛先レコードへ前記値を譲渡するように構成され、
    前記第2の譲渡コマンドは、前記第1の宛先レコードが期間内の時間に前記値を有する場合、前記第1の宛先レコードから前記第2の宛先レコードへ前記値を譲渡するように構成される、請求項1に記載の装置。
  7. 前記プロセッサは更に、
    前記第1の公開鍵と、前記第1のレコードから差し引かれ前記譲渡コマンドの実行によって前記宛先レコードの各々に合計される数値とを前記第2のコンピュータデバイスへ送信するように構成される、請求項1に記載の装置。
  8. 前記譲渡コマンドは更に、
    時間閾値より前にコンセンサスプロトコルによって収束に至らなかった場合、前記譲渡コマンドが破棄されるように調整する前記時間閾値を含むように構成される、請求項1に記載の装置。
  9. 前記プロセッサは、
    前記第1のコンピュータデバイスに関連する前記第2の公開鍵と前記第2のコンピュータデバイスに関連する前記第1の公開鍵との辞書的比較を実行することによって、前記譲渡コマンドを定義するように構成される、請求項1に記載の装置。
  10. 前記値は、デジタル資産の金額に対応する、請求項1に記載の装置。
  11. 複数のコンピュータデバイスに動作可能に結合されたネットワークを介して、第1のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられた第1のレコードを含む分散型データベースを実装する前記複数のコンピュータデバイスに含まれるように構成された前記第1のコンピュータデバイスにおける前記分散型データベースのインスタンスの第1の部分と、
    前記分散型データベースの前記第1のインスタンスに動作可能に結合された前記第1のコンピュータデバイスのプロセッサと
    を備え、前記プロセッサは、
    前記複数のコンピュータデバイスのうちの第2のコンピュータデバイスから、前記第2のコンピュータデバイスに関連する第1の公開鍵、および前記第2のコンピュータデバイスに関連する前記第1の公開鍵に論理的に関連付けられた第2のレコードから譲渡するように要求された値を受信し、
    前記第1のコンピュータデバイスに関連する暗号化された第2の公開鍵を定義するために、前記第2のコンピュータデバイスに関連する前記第1の公開鍵によって、前記第1のコンピュータデバイスに関連する第2の公開鍵を暗号化し、
    前記第2のコンピュータデバイスへ、前記第1のコンピュータデバイスに関連する前記暗号化された第2の公開鍵を送信し、
    前記第1のレコードおよび前記第2のレコードを含むソースレコードから、前記第1のコンピュータデバイスに関連する前記第2の公開鍵に論理的に関連付けられた第3のレコードおよび前記第2のコンピュータデバイスに関連する第2の公開鍵に論理的に関連付けられた第4のレコードを含む宛先レコードへ前記値を譲渡するように構成された譲渡コマンドであって、前記第1のコンピュータデバイスに関連する前記第1の公開鍵とペアである秘密鍵によって署名され、前記宛先レコードに論理的に関連付けられた公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティが、前記第1のコンピュータデバイスおよび前記第2のコンピュータデバイスを含むコンピュータデバイスのセットの中で隠されるように実行されるように構成された前記譲渡コマンドを、前記分散型データベースにポストするための信号を送信するように構成される、装置。
  12. 前記複数のコンピュータデバイスのうちの第3のコンピュータデバイスにおける前記分散型データベースの第3のインスタンスは、前記第1のレコード、前記第2のレコード、前記第3のレコード、および前記第4のレコードを含む複数のレコードを含み、
    前記分散型データベースの前記第1のインスタンスは、前記複数のレコードのうち全てのレコードを含むのではない、請求項11に記載の装置。
  13. 前記譲渡コマンドは、期間に関連し、前記期間内の時間に前記ソースレコードの各々が少なくとも前記値を有する場合、前記ソースレコードから前記宛先レコードへ前記値を譲渡するように構成される、請求項11に記載の装置。
  14. 前記譲渡コマンドは第1の譲渡コマンドであり、前記第3のレコードは第1の宛先レコードであり、前記コンピュータデバイスのセットはコンピュータデバイスの第1のセットであり、
    前記プロセッサは、前記第1の譲渡コマンドが実行される前に前記分散型データベースにポストされる信号を送信するように構成され、第2の譲渡コマンドは、第2の宛先レコードに論理的に関連付けられた公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティが前記コンピュータデバイスの第1のセットを含むコンピュータデバイスの第2のセットの中で隠されるように、前記第1の宛先レコードから前記第2の宛先レコードへ前記値を譲渡するように構成され、
    前記第2の譲渡コマンドは、前記第1の宛先レコードが期間内の時間に前記値を有する場合、前記第1の宛先レコードから前記第2の宛先レコードへ前記値を譲渡するように構成される、請求項11に記載の装置。
  15. 前記譲渡コマンドは更に、
    時間閾値より前にコンセンサスプロトコルによって収束に至らなかった場合、前記譲渡コマンドが破棄されるように調整する前記時間閾値を含むように構成される、請求項11に記載の装置。
  16. 前記プロセッサは、
    前記第1のコンピュータデバイスに関連する前記第2の公開鍵と前記第2のコンピュータデバイスに関連する前記第2の公開鍵との辞書的比較を実行することによって、前記譲渡コマンドを定義するように構成される、請求項11に記載の装置。
  17. 前記値は、デジタル資産の金額に対応する、請求項11に記載の装置。
  18. 複数のコンピュータデバイスに動作可能に結合されたネットワークを介して、第1の公開鍵に論理的に関連付けられた第1のレコード、第2の公開鍵に論理的に関連付けられた第2のレコード、第3の公開鍵に論理的に関連付けられた第3のレコード、および第4の公開鍵に論理的に関連付けられた第4のレコードを含む分散型データベースを実装する前記複数のコンピュータデバイスに含まれるように構成された第1のコンピュータデバイスにおける前記分散型データベースの第1のインスタンスと、
    前記分散型データベースの前記第1のインスタンスに動作可能に結合された前記第1のコンピュータデバイスのプロセッサと
    を備え、前記プロセッサは、
    前記第1のレコードからの値および前記第2のレコードからの値を、前記値が第1の宛先レコードへ提供され、前記値が第2の宛先レコードへ提供されるように譲渡する要求を含むデータベース動作の指標を受信し、
    前記第1のレコードおよび前記第2のレコードから前記第1の宛先レコードおよび前記第2の宛先レコードへ前記値を譲渡するように構成され、前記第3の公開鍵に対応する秘密鍵に関連する第2のコンピュータデバイスのアイデンティティおよび前記第4の公開鍵に対応する秘密鍵に関連する第3のコンピュータデバイスのアイデンティティを隠すように実行されるように構成された譲渡コマンドを、前記分散型データベースの前記第1のインスタンスにおいて実行するように構成される、装置。
  19. 前記データベース動作の前記指標は、前記第2のコンピュータデバイスから受信され、
    前記第2のコンピュータデバイスおよび前記第3のコンピュータデバイスは、前記複数のコンピュータデバイスに含まれない、請求項18に記載の装置。
  20. 前記データベース動作の前記指標は、前記第2のコンピュータデバイスから受信され、
    前記第2のコンピュータデバイスは、前記複数のコンピュータデバイスに含まれない、請求項18に記載の装置。
  21. 前記値は、デジタル資産の金額を示す、請求項18に記載の装置。
JP2019520639A 2016-11-10 2017-11-10 匿名エントリを含む分散型データベースのための方法および装置 Active JP6966544B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2021172145A JP7221355B2 (ja) 2016-11-10 2021-10-21 匿名エントリを含む分散型データベースのための方法および装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201662420147P 2016-11-10 2016-11-10
US62/420,147 2016-11-10
PCT/US2017/061135 WO2018089815A1 (en) 2016-11-10 2017-11-10 Methods and apparatus for a distributed database including anonymous entries

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2021172145A Division JP7221355B2 (ja) 2016-11-10 2021-10-21 匿名エントリを含む分散型データベースのための方法および装置

Publications (2)

Publication Number Publication Date
JP2020504916A true JP2020504916A (ja) 2020-02-13
JP6966544B2 JP6966544B2 (ja) 2021-11-17

Family

ID=62110079

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019520639A Active JP6966544B2 (ja) 2016-11-10 2017-11-10 匿名エントリを含む分散型データベースのための方法および装置
JP2021172145A Active JP7221355B2 (ja) 2016-11-10 2021-10-21 匿名エントリを含む分散型データベースのための方法および装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2021172145A Active JP7221355B2 (ja) 2016-11-10 2021-10-21 匿名エントリを含む分散型データベースのための方法および装置

Country Status (13)

Country Link
US (2) US10887096B2 (ja)
EP (2) EP3539026B1 (ja)
JP (2) JP6966544B2 (ja)
KR (1) KR102443888B1 (ja)
CN (2) CN117033488A (ja)
AU (2) AU2017357770B2 (ja)
CA (1) CA3042255A1 (ja)
LT (1) LT3539026T (ja)
PT (1) PT3539026T (ja)
RU (1) RU2746446C2 (ja)
SG (1) SG11201903278YA (ja)
SI (1) SI3539026T1 (ja)
WO (1) WO2018089815A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020509445A (ja) * 2017-03-28 2020-03-26 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited ブロックチェーンコンセンサス形成の方法およびデバイス
JP2022029453A (ja) * 2020-08-04 2022-02-17 株式会社三菱Ufj銀行 ノード

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9529923B1 (en) 2015-08-28 2016-12-27 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
US10747753B2 (en) 2015-08-28 2020-08-18 Swirlds, Inc. Methods and apparatus for a distributed database within a network
PT3539026T (pt) * 2016-11-10 2022-03-08 Swirlds Inc Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas
KR102433285B1 (ko) 2016-12-19 2022-08-16 스월즈, 인크. 이벤트들의 삭제를 가능하게 하는 분산 데이터베이스를 위한 방법 및 장치
US11488144B2 (en) 2017-06-20 2022-11-01 nChain Holdings Limited System and method of multi-round token distribution using a blockchain network
KR102348418B1 (ko) 2017-07-11 2022-01-07 스월즈, 인크. 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치
US10425335B2 (en) * 2017-09-19 2019-09-24 Sap Se Reconstructing message flows based on hash values
CA3076257A1 (en) 2017-11-01 2019-05-09 Swirlds, Inc. Methods and apparatus for efficiently implementing a fast-copyable database
CN108416675A (zh) * 2018-02-14 2018-08-17 阿里巴巴集团控股有限公司 资产管理方法及装置、电子设备
US11341467B2 (en) * 2018-05-15 2022-05-24 Comcast Cable Communications, Llc Systems and methods for monitoring content consumption
US10671370B2 (en) * 2018-05-30 2020-06-02 Red Hat, Inc. Distributing file system states
US10754693B2 (en) * 2018-07-05 2020-08-25 Vmware, Inc. Secure transfer of control over computational entities in a distributed computing environment
JP7389114B2 (ja) 2018-10-23 2023-11-29 ティーゼロ・アイピー,エルエルシー 取引システムを実施するネットワークノードのサブセット内の文脈ベースのフィルタリング
US11899817B2 (en) 2019-01-31 2024-02-13 Salesforce, Inc. Systems, methods, and apparatuses for storing PII information via a metadata driven blockchain using distributed and decentralized storage for sensitive user information
US11811769B2 (en) 2019-01-31 2023-11-07 Salesforce, Inc. Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger
US11824864B2 (en) 2019-01-31 2023-11-21 Salesforce, Inc. Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT)
US11803537B2 (en) * 2019-01-31 2023-10-31 Salesforce, Inc. Systems, methods, and apparatuses for implementing an SQL query and filter mechanism for blockchain stored data using distributed ledger technology (DLT)
EP3948573A1 (en) * 2019-03-23 2022-02-09 British Telecommunications public limited company Distributed sequential transactional database selection
WO2020193337A1 (en) * 2019-03-23 2020-10-01 British Telecommunications Public Limited Company Configuring distributed sequential transactional databases
WO2020212784A1 (en) 2019-04-15 2020-10-22 nChain Holdings Limited Destination addressing associated with a distributed ledger
US11995647B2 (en) 2019-04-30 2024-05-28 Salesforce, Inc. System and method of providing interoperable distributed and decentralized ledgers using consensus on consensus and delegated consensus
US11296867B2 (en) * 2019-05-01 2022-04-05 Intuit Inc. Systems and methods for hash chain migration
KR20220011161A (ko) 2019-05-22 2022-01-27 스월즈, 인크. 분산 데이터베이스에서 상태 증명들 및 원장 식별자들을 구현하기 위한 방법들 및 장치
CN110674110B (zh) * 2019-09-09 2022-07-05 中国建设银行股份有限公司 银行分布式数据库的构建方法及装置
KR102097651B1 (ko) * 2019-11-06 2020-04-06 주식회사엔클라우드 멀티캐스트를 이용한 암호화 영상 전송 장치
US12099997B1 (en) 2020-01-31 2024-09-24 Steven Mark Hoffberg Tokenized fungible liabilities
US11722589B2 (en) 2020-04-08 2023-08-08 Huawei Technologies Co., Ltd. Rapid ledger consensus system and method for distributed wireless networks
CN111930847B (zh) * 2020-09-16 2021-01-08 深圳壹账通智能科技有限公司 基于区块链的数据处理方法、装置及存储介质
JP2023544422A (ja) * 2020-10-06 2023-10-23 ヘデラ ハッシュグラフ,エルエルシー ネットワーク内の分散データベースのための方法及び装置
US11756117B2 (en) * 2021-07-20 2023-09-12 Progrexion IP, Inc. Electronic certification data structures for verifying resource integrity
CN114844891B (zh) * 2022-04-21 2024-04-12 浪潮云信息技术股份公司 基于Raft算法的区块链共识方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160140548A1 (en) * 2014-11-13 2016-05-19 Lg Cns Co., Ltd. Method for performing non-repudiation, and payment managing server and user device therefor
US20160241392A1 (en) * 2015-02-12 2016-08-18 Xerox Corporation Method for enhancing security in distributed systems

Family Cites Families (154)

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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160140548A1 (en) * 2014-11-13 2016-05-19 Lg Cns Co., Ltd. Method for performing non-repudiation, and payment managing server and user device therefor
JP2016096547A (ja) * 2014-11-13 2016-05-26 エルジー シーエヌエス カンパニー リミテッドLG CNS Co., Ltd. 否認防止方法、このための決済管理サーバおよび使用者端末
US20160241392A1 (en) * 2015-02-12 2016-08-18 Xerox Corporation Method for enhancing security in distributed systems

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020509445A (ja) * 2017-03-28 2020-03-26 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited ブロックチェーンコンセンサス形成の方法およびデバイス
JP2022029453A (ja) * 2020-08-04 2022-02-17 株式会社三菱Ufj銀行 ノード

Also Published As

Publication number Publication date
RU2019115233A3 (ja) 2020-11-17
AU2017357770A1 (en) 2019-05-09
CN109923536A (zh) 2019-06-21
KR20190079671A (ko) 2019-07-05
LT3539026T (lt) 2022-03-25
US11677550B2 (en) 2023-06-13
SG11201903278YA (en) 2019-05-30
EP3539026A4 (en) 2020-06-24
US10887096B2 (en) 2021-01-05
RU2019115233A (ru) 2020-11-17
RU2021109425A3 (ja) 2022-03-10
RU2021109425A (ru) 2021-04-29
US20210126780A1 (en) 2021-04-29
US20190268147A1 (en) 2019-08-29
AU2017357770B2 (en) 2020-12-24
CN109923536B (zh) 2023-08-18
JP6966544B2 (ja) 2021-11-17
PT3539026T (pt) 2022-03-08
AU2021200222A1 (en) 2021-03-18
JP2022020684A (ja) 2022-02-01
CA3042255A1 (en) 2018-05-17
RU2746446C2 (ru) 2021-04-14
EP4027251A1 (en) 2022-07-13
SI3539026T1 (sl) 2022-05-31
AU2021200222B2 (en) 2022-11-17
EP3539026B1 (en) 2021-12-08
CN117033488A (zh) 2023-11-10
JP7221355B2 (ja) 2023-02-13
EP3539026A1 (en) 2019-09-18
KR102443888B1 (ko) 2022-09-16
WO2018089815A1 (en) 2018-05-17

Similar Documents

Publication Publication Date Title
JP7221355B2 (ja) 匿名エントリを含む分散型データベースのための方法および装置
JP6745004B1 (ja) ネットワーク内に分散データベースを効率的に実装するための方法及び機器
JP6686209B2 (ja) ネットワーク内の分散データベースのための方法及び装置
RU2775263C2 (ru) Способы и устройство для распределенной базы данных, содержащей анонимные входные данные
RU2775994C2 (ru) Способы и устройство эффективной реализации распределенной базы данных в сети

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200511

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210528

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210611

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210913

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211004

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211021

R150 Certificate of patent or registration of utility model

Ref document number: 6966544

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250