IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ スワールズ,インコーポレイテッドの特許一覧

特開2022-20684匿名エントリを含む分散型データベースのための方法および装置
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022020684
(43)【公開日】2022-02-01
(54)【発明の名称】匿名エントリを含む分散型データベースのための方法および装置
(51)【国際特許分類】
   H04L 9/32 20060101AFI20220125BHJP
   H04L 9/08 20060101ALI20220125BHJP
   G06F 21/64 20130101ALI20220125BHJP
【FI】
H04L9/32 200B
H04L9/08 F
G06F21/64
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2021172145
(22)【出願日】2021-10-21
(62)【分割の表示】P 2019520639の分割
【原出願日】2017-11-10
(31)【優先権主張番号】62/420,147
(32)【優先日】2016-11-10
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
(71)【出願人】
【識別番号】518066035
【氏名又は名称】スワールズ,インコーポレイテッド
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ベアード,リーモン シー.,3世
(57)【要約】
【課題】コンピュータデバイス間でのデジタル資産の匿名譲渡を可能にする。
【解決手段】いくつかの実施形態において、第1のコンピュータデバイスにおいて分散型データベースの第1のインスタンスの少なくとも一部を有する装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成される。分散型データベースは、宛先レコードに論理的に関連付けられた公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティが、第1のコンピュータデバイスおよび少なくとも1つの第2のコンピュータデバイスを含むコンピュータデバイスのセットの中で隠されるような譲渡プロトコルによって、コンピュータデバイス間でのデジタル資産の匿名譲渡を可能にする。
【選択図】図1
【特許請求の範囲】
【請求項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に記載の装置。
【発明の詳細な説明】
【技術分野】
【0001】
[1001] 本出願は、参照によってその全体が本明細書に組み込まれる、2016年11月10日に出願された、“METHODS AND APPARATUS FOR A DISTRIBUTED DATABASE INCLUDING ANONYMOUS ENTRIES”と題された米国仮特許出願第62/420,147号に対する優先権を主張するものである。
【背景技術】
【0002】
[1002] 本明細書において説明される実施形態は、一般にデータベースシステムに関し、より具体的には、ネットワーク内の複数のデバイスにわたるデータベースシステムを実装するための方法および装置に関する。
【0003】
[1003] いくつかの既知の分散型データベースシステムは、分散型データベースシステム内で(たとえば、取引が発生する順序に関する)値に関するコンセンサスを実現しようと試みる。たとえば、多人数参加型オンラインゲームは、ゲームをプレイするためにユーザがアクセスすることができる多数のコンピュータサーバを有し得る。2人のユーザが同時にゲーム内の特定のアイテムを獲得しようとした場合、分散型データベースシステム内のサーバが最終的に、2人のユーザのどちらが最初にアイテムを獲得したかに関する合意に至ることが重要である。
【0004】
[1004] そのような分散型コンセンサスは、たとえばPaxosアルゴリズムまたはその変形などの方法および/またはプロセスによって処理され得る。そのような方法および/またはプロセスの下で、データベースシステムのサーバの1つが「リーダ」として設定され、リーダがイベントの順序を決定する。(たとえば多人数参加型ゲーム内の)イベントはリーダに転送され、リーダは、イベントに関する順序付けを選択し、データベースシステムの他のサーバへ順序付けを広める。
【0005】
[1005] しかし、そのような既知のアプローチは、データベースシステムのユーザ(たとえばゲームのプレーヤ)によって信頼された関係者(たとえば中央管理サーバ)によって操作されるサーバを用いる。したがって、データベースシステムを操作するためのリーダまたは信頼された第三者を必要としない分散型データベースシステムのための方法および装置へのニーズがある。
【0006】
[1006] 他の分散型データベースは、リーダを有さないように設計されるが、そのような分散型データベース内の取引は公開である。したがって、分散型データベースの他の例は、分散型データベースのどのインスタンスが特定の取引を開始したかを識別することができる。
【0007】
[1007] したがって、リーダがなくともコンセンサスを実現し、かつ取引の匿名性を維持することが可能な分散型データベースシステムへのニーズがある。
【発明の概要】
【課題を解決するための手段】
【0008】
[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つの宛先レコードへ値を譲渡する。
【図面の簡単な説明】
【0009】
図1】[1009]実施形態に係る、分散型データベースシステムを示す高レベルブロック図である。
図2】[1010]実施形態に係る、分散型データベースシステムのコンピュータデバイスを示すブロック図である。
図3-6】[1011]実施形態に係る、ハッシュグラフの例を示す。
図7】[1012]実施形態に係る、第1のコンピュータデバイスと第2のコンピュータデバイスとの間の通信フローを示すフロー図である。
図8】[1013]実施形態に係る、ハッシュグラフの例である。
図9】[1014]実施形態に係る、ハッシュグラフの例である。
図10】[1015]実施形態に係る、2つのコンピュータデバイス間での匿名データベース取引のグラフィカル表現の例である。
図11】[1016]実施形態に係る、様々なコンピュータデバイス間での匿名データベース取引を表すツリーの複数のレベルにわたる匿名データベース取引のグラフィカル表現を示す。
図12】[1017]実施形態に係る、様々なコンピュータデバイス間で並行して実行される匿名データベース取引のグラフィカル表現を示す。
図13A-13B】[1018]実施形態に係る、ハッシュグラフと併用するためのコンセンサス方式の例を示す。
図14A-14B】[1019]他の実施形態に係る、ハッシュグラフと併用するためのコンセンサス方式の例を示す。
【発明を実施するための形態】
【0010】
[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つの宛先レコードへ値を譲渡する。
【0011】
[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のコンピュータデバイスを含むコンピュータデバイスのセットの中で隠されるように実行されるように構成される。
【0012】
[1022] いくつかの実施形態において、装置は、コンピュータデバイスのグループに動作可能に結合されたネットワークを介して分散型データベースを実装するコンピュータデバイスのグループに含まれるように構成された第1のコンピュータデバイスにおける分散型データベースの少なくとも一部の第1のインスタンスを含む。分散型データベースは、第1の公開鍵に論理的に関連付けられた第1のレコード、第2の公開鍵に論理的に関連付けられた第2のレコード、第3の公開鍵に論理的に関連付けられた第3のレコード、および第4の公開鍵に論理的に関連付けられた第4のレコードを含む。第1のコンピュータデバイスのプロセッサは、分散型データベースの少なくとも一部の第1のインスタンスに動作可能に結合される。プロセッサは、第1のレコードに関連する値および第2のレコードに関連する値を第3のレコードおよび第4のレコードの両方へ譲渡する要求を含むデータベース動作のインジケーションを受信するように構成される。譲渡コマンドは、第3の公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティおよび第4の公開鍵に対応する秘密鍵に関連するコンピュータデバイスのアイデンティティを隠すように実行されるように構成される。
【0013】
[1023] 本明細書で用いられる場合、モジュールはたとえば、特定の機能の実行に関連する動作可能に結合された電気部品の任意のアセンブリおよび/またはセットであってよく、たとえばメモリ、プロセッサ、電気トレース、光コネクタ、(ハードウェア内で実行する)ソフトウェアなどを含んでよい。
【0014】
[1024] 本明細書で用いられる場合、単数形の「a」、「an」、および「the」は、文脈が特に明示しない限り、複数形への言及を含む。よって、たとえば「モジュール」という用語は、単一のモジュールまたはモジュールの組み合わせを意味することが意図される。たとえば「ネットワーク」は、単一のネットワークまたはネットワークの組み合わせを意味することが意図される。
【0015】
[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つとの間に確立され得る。
【0016】
[1026] いくつかの実施形態において、コンピュータデバイス110、120、130、140は、中間ネットワークおよび/または交換ネットワーク(図1に不図示)を介して互いに通信(たとえばデータを送信および/または受信)し、かつネットワークと通信してよい。そのような中間ネットワークおよび/または交換ネットワークは、ネットワーク105と同じ種類および/または異なる種類のネットワークであってよい。
【0017】
[1027] 各コンピュータデバイス110、120、130、140は、他のコンピュータデバイスの1または複数からのデータを送信および/または受信するためにネットワーク105を介してデータを送信するように構成された任意の種類のデバイスであってよい。コンピュータデバイスの例は、図1に示される。コンピュータデバイス110は、メモリ112、プロセッサ111、および出力デバイス113を含む。メモリ112は、たとえばランダムアクセスメモリ(RAM)、メモリバッファ、ハードドライブ、データベース、消去可能プログラマブル読取専用メモリ(EPROM)、電気的消去可能読取専用メモリ(EEPROM)、読取専用メモリ(ROM)などであってよい。いくつかの実施形態において、コンピュータデバイス110のメモリ112は、分散型データベースのインスタンス(たとえば分散型データベースインスタンス114)に関連するデータを含む。いくつかの実施形態において、メモリ112は、プロセッサに、分散型データベースの他のインスタンス(たとえば、コンピュータデバイス120における分散型データベースインスタンス124)との間で、同期イベントのレコード、他のコンピュータデバイスとの以前の同期イベントのレコード、同期イベントの順序、パラメータに関する値(たとえば取引を定量化するデータベースフィールド、イベントが発生する順序を定量化するデータベースフィールド、および/またはデータベースに値が格納され得る他の任意の適当なフィールド)を送信および/または受信することに関連するモジュール、プロセス、および/または機能を実行させるための命令を格納する。
【0018】
[1028] 分散型データベースはたとえば、データの格納、修正、および/または削除を含む、データの操作を行うように構成され得る。いくつかの実施形態において、分散型データベースインスタンス114は、リレーショナルデータベース、オブジェクトデータベース、ポストリレーショナルデータベース、および/または他の任意の適当な種類のデータベースであってよい。たとえば分散型データベースインスタンス114は、任意の特定の機能および/または業種に関連するデータを格納してよい。たとえば分散型データベースインスタンス114は、特定の金融商品の所有権の履歴に関連する値および/または値のベクトルを含む、(たとえばコンピュータデバイス110のユーザの)金融取引を格納してよい。一般に、ベクトルは、パラメータの値の任意のセットであってよく、パラメータは、様々な値をとることができる任意のデータオブジェクトおよび/またはデータベースフィールドであってよい。よって、分散型データベースインスタンス114は、複数のパラメータおよび/またはフィールドを有してよく、その各々が値のベクトルに関連付けられる。値のベクトルは、そのデータベースインスタンス114内のパラメータおよび/またはフィールドに関する実際の値を決定するために用いられる。
【0019】
[1029] いくつかの例において、分散型データベースインスタンス114は、たとえば(鍵、値)ペアのセットなど、他のデータ構造を実装するために用いられてもよい。分散型データベースインスタンス114によって記録された取引は、たとえば、(鍵、値)ペアのセットにおける(鍵、値)ペアの追加、削除、または修正であってよい。
【0020】
[1030] いくつかの例において、分散型データベースシステム100または分散型データベースインスタンス114、124、134、144のいずれかが照会され得る。たとえば、照会は鍵で構成されてよく、分散型データベースシステム100または分散型データベースインスタンス114、124、134、144から返信された結果は、鍵に関連付けられた値であってよい。いくつかの例において、分散型データベースシステム100または分散型データベースインスタンス114、124、134、144のいずれかは、取引を通して修正されてもよい。たとえば、データベースを修正する取引は、修正取引を承認する関係者によるデジタルシグネチャを含んでよい。
【0021】
[1031] 分散型データベースシステム100は、たとえば様々なユーザに関連付けられた属性を分散型アイデンティティシステムに格納することなど、多数の目的で用いられ得る。たとえばそのようなシステムは、ユーザのアイデンティティを「鍵」として用い、ユーザに関連付けられた属性のリストを「値」として用いてよい。いくつかの例において、アイデンティティは、そのユーザが知っている対応する秘密鍵を有する暗号公開鍵であってよい。各属性はたとえば、その属性を主張する権利を有する当局によってデジタル署名され得る。また各属性は、たとえば、属性を読み取る権利を有する個人または個人のグループに関連付けられた公開鍵で暗号化されてもよい。いくつかの鍵または値は、その鍵または値を修正または削除することが許可された関係者の公開鍵のリストを添付されてもよい。
【0022】
[1032] 他の例において、分散型データベースインスタンス114は、たとえばゲームプレイアイテムの現在のステータスおよび所有権など、多人数同時参加型ゲーム(MMG)に関連するデータを格納してよい。いくつかの例において、分散型データベースインスタンス114は、図1に示すように、コンピュータデバイス110内に実装され得る。他の例において、分散型データベースのインスタンスは、コンピュータデバイスによって(たとえばネットワークを介して)アクセス可能であるが、コンピュータデバイスには実装されない(図1には不図示)。
【0023】
[1033] コンピュータデバイス110のプロセッサ111は、分散型データベースインスタンス114を作動および/または実行するように構成された任意の適当な処理デバイスであってよい。たとえばプロセッサ111は、本明細書で更に詳しく説明するように、コンピュータデバイス120からの信号の受信に応答して分散型データベースインスタンス114を更新し、および/またはコンピュータデバイス120へ信号を送信させるように構成され得る。より具体的には、本明細書で更に詳しく説明するように、プロセッサ111は、他のコンピュータデバイスからの取引に関連する同期イベント、同期イベントの順序に関連するレコードなどの受信に応答して、分散型データベースインスタンス114を更新するためのモジュール、機能、および/またはプロセスを実行するように構成され得る。他の実施形態において、プロセッサ111は、分散型データベースの他のインスタンス(たとえばコンピュータデバイス120における分散型データベースインスタンス124)に格納されたパラメータの値の受信に応答して分散型データベースインスタンス114を更新し、および/またはコンピュータデバイス110における分散型データベースインスタンス114に格納されたパラメータの値をコンピュータデバイス120へ送信させるためのモジュール、機能、および/またはプロセスを実行するように構成され得る。いくつかの実施形態において、プロセッサ111は、汎用プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)などであってよい。
【0024】
[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つは、キーボード、マウスなどを含んでよい。
【0025】
[1035] コンピュータデバイス120は、それぞれプロセッサ111、メモリ112、およびディスプレイ113と構造的および/または機能的に同様であってよいプロセッサ121、メモリ122、およびディスプレイ123を有する。また、分散型データベースインスタンス124は、分散型データベースインスタンス114と構造的および/または機能的に同様であってよい。
【0026】
[1036] コンピュータデバイス130は、それぞれプロセッサ111、メモリ112、およびディスプレイ113と構造的および/または機能的に同様であってよいプロセッサ131、メモリ132、およびディスプレイ133を有する。また、分散型データベースインスタンス134は、分散型データベースインスタンス114と構造的および/または機能的に同様であってよい。
【0027】
[1037] コンピュータデバイス140は、それぞれプロセッサ111、メモリ112、およびディスプレイ113と構造的および/または機能的に同様であってよいプロセッサ141、メモリ142、およびディスプレイ143を有する。また、分散型データベースインスタンス144は、分散型データベースインスタンス114と構造的および/または機能的に同様であってよい。
【0028】
[1038] コンピュータデバイス110、120、130、140は、互いに同様であるものとして示されるが、分散型データベースシステム100の各コンピュータデバイスは、他のコンピュータデバイスと異なってもよい。分散型データベースシステム100の各コンピュータデバイス110、120、130、140は、たとえばコンピューティングエンティティ(たとえばデスクトップコンピュータ、ラップトップコンピュータなどのパーソナルコンピューティングデバイス)、モバイルフォン、パーソナルデジタルアシスタント(PDA)などのいずれかであってよい。たとえば、コンピュータデバイス110はデスクトップコンピュータであってよく、コンピュータデバイス120はスマートフォンであってよく、コンピュータデバイス130はサーバであってよい。
【0029】
[1039] いくつかの実施形態において、コンピュータデバイス110、120、130、140の1または複数の部分は、ハードウェアベースのモジュール(たとえばデジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA))および/またはソフトウェアベースのモジュール(たとえば、メモリに格納されおよび/またはプロセッサで実行されるコンピュータコードのモジュール)を含んでよい。いくつかの実施形態において、コンピュータデバイス110、120、130、140に関連する機能(たとえば、プロセッサ111、121、131、141に関連する機能)の1または複数は、1または複数のモジュールに含まれ得る(たとえば図2を参照)。
【0030】
[1040] コンピュータデバイス(たとえばコンピュータデバイス110、120、130、140)のプロパティを含む分散型データベースシステム100のプロパティ、コンピュータデバイスの数、およびネットワーク105は、任意の数の方法で選択され得る。いくつかの例において、分散型データベースシステム100のプロパティは、分散型データベースシステム100の管理者によって選択され得る。他の例において、分散型データベースシステム100のプロパティは、分散型データベースシステム100のユーザによって集合的に選択され得る。
【0031】
[1041] 分散型データベースシステム100が用いられることにより、コンピュータデバイス110、120、130、および140の中からリーダが指名されることはない。具体的には、コンピュータデバイス110、120、130、または140のいずれも、コンピュータデバイス110、120、130、140の分散型データベースインスタンス111、12、131、141に格納された値間での論議を解決するためのリーダとして識別および/または選択されない。代わりに、本明細書で説明されるイベント同期プロセス、投票プロセスおよび/または方法を用いて、コンピュータデバイス110、120、130、140は集合的にパラメータの値に収束してよい。
【0032】
[1042] 分散型データベースシステム内にリーダを有さないことにより、分散型データベースシステムの安全性が高まる。具体的には、リーダがいる場合、攻撃および/または故障の単一ポイントが存在する。悪意のあるソフトウェアがリーダに侵入し、および/またはリーダの分散型データベースインスタンスにおけるパラメータの値が悪意的に変更された場合、故障および/または不正値が他の分散型データベースインスタンス全体に伝搬する。しかしリーダレスシステムにおいて、攻撃および/または故障の単一ポイントは存在しない。具体的には、本明細書で更に詳しく説明するように、リーダレスシステムの分散型データベースインスタンスにおけるパラメータが値を含む場合、その値は、その分散型データベースインスタンスがシステム内の他の分散型データベースインスタンスと値を交換した後、変更される。また、本明細書で説明されるリーダレス分散型データベースシステムは、本明細書で更に詳しく説明するように、デバイス間で送信されるデータの量を低減するとともに収束の速度を増加させる。
【0033】
[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が他のデバイスとの間でデータを送信および/または受信することを可能にしてよい。
【0034】
[1044] いくつかの例において、データベース収束モジュール211は、他のコンピューティングデバイスとイベントおよび/または取引を交換し、データベース収束モジュール211が受信するイベントおよび/または取引を格納し、イベント間の参照のパターンによって定められた半順序に基づいてイベントおよび/または取引の順序付けを計算することができる。各イベントは、2つの先行イベントの(そのイベントを2つの先行イベントおよびそれらの祖先イベントに結び付ける、またはその逆の)暗号ハッシュ、(たとえば記録すべき取引などの)ペイロードデータ、たとえば現在時間、作成者が主張する、イベントが最初に定義された時間であるタイムスタンプ(たとえばデータおよびUTC時間)といった他の情報などを含むレコードであってよい。いくつかの例において、メンバによって定義された第1イベントは、他のメンバによって定義された単一イベントのハッシュしか含まない。そのような例において、メンバは、以前の自己ハッシュ(たとえば、そのメンバによって過去に定義されたイベントのハッシュ)を未だ有さない。いくつかの例において、分散型データベース内の第1イベントは、(その分散型データベースに関する先行イベントが存在しないために)任意の先行イベントのハッシュを含まない。
【0035】
[1045] いくつかの実施形態において、そのような2つの先行イベントの暗号ハッシュは、イベントを入力として用いる暗号ハッシュ関数に基づいて定義されたハッシュ値であってよい。具体的には、そのような実施形態において、イベントは、(そのイベントの情報を表す)特定のバイトシーケンスまたはストリングを含む。イベントのハッシュは、そのイベントに関するバイトシーケンスを入力として用いるハッシュ関数からの戻り値であってよい。他の実施形態において、イベントに関連する他の任意の適当なデータ(たとえば識別子、シリアル番号、イベントの特定の部分を表すバイトなど)が、そのイベントのハッシュを計算するためのハッシュ関数への入力として用いられ得る。任意の適当なハッシュ関数が、ハッシュを定義するために用いられ得る。いくつかの実施形態において、各メンバは、所与のイベントに関して各メンバにおいて同じハッシュが生成されるように、同じハッシュ関数を用いる。イベントはその後、イベントを定義および/または作成するメンバによってデジタル署名され得る。
【0036】
[1046] いくつかの例において、イベントのセットおよびそれらの相互接続は、有向非巡回グラフ(DAG)を形成してよい。いくつかの例において、DAG内の各イベントは、2つの先行イベントを参照し(そのイベントを2つの先行イベントおよびそれらの祖先イベントに結び付け、またはその逆であり)、各参照は、厳密に1つに対するものであり、ループは存在しない。いくつかの実施形態において、DAGは、暗号ハッシュに基づくので、データ構造は、(本明細書において「ハッシュDAG」とも称される)ハッシュグラフと呼ばれ得る。ハッシュグラフは、半順序を直接符号化し、すなわち、YがXのハッシュを含む場合、またはXのハッシュを含むイベントのハッシュをYが含む場合、または任意の長さのそのような経路に関して、イベントXはイベントYより前に来ることが知られる。ただし、XからYへの、またはYからXへの経路が存在しない場合、半順序は、どのイベントが最初になるかを定義しない。したがって、データベース収束モジュールは、半順序から全順序を計算することができる。これは、コンピュータデバイスが同じ順序を計算するように、コンピュータデバイスによって用いられる任意の適当な確定関数によって行われ得る。いくつかの実施形態において、各メンバは、各同期後にこの順序を再計算してよく、最終的にコンセンサスが現れるようにこれらの順序は収束してよい。
【0037】
[1047] コンセンサスアルゴリズムは、ハッシュグラフ内のイベントの順序および/またはイベント内に格納された取引の順序を決定するために用いられ得る。一方、取引の順序は、順序に従ってこれらの取引を行った結果としてデータベースの状態を定義してよい。定義されたデータベースの状態は、データベース状態変数として格納され得る。
【0038】
[1048] いくつかの例において、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するために以下の関数を用いてよい。(「メンバ」と呼ばれる)他のコンピュータデバイスの各々について、データベース収束モジュールは、そのメンバによってイベント(および/またはこれらのイベントの指標)が受信された順序を知るために、ハッシュグラフを調査してよい。データベース収束モジュールはその後、そのメンバが各イベントに数値「ランク」を割り当てたように計算してよく、ランクは、メンバが受信した第1イベントに対して1であり、メンバが受信した第2イベントに対して2であり、以下同様である。データベース収束モジュールは、ハッシュグラフ内の各メンバにこれを行ってよい。その後、各イベントについて、データベース収束モジュールは、割り当てられたランクの中央値を計算し、それらの中央値によってイベントを分類してよい。分類は、2つの同順位イベントをそれらのハッシュの番号順に分類することなど決定的方法で、または他の何らかの方法によって同順位を打破してよく、各メンバのデータベース収束モジュールは同じ方法を用いる。この分類の結果が全順序である。
【0039】
[1049] 図6は、全順序を決定するための一例のハッシュグラフ640を示す。ハッシュグラフ640は、2つのイベント(最も下の縞模様の円および最も下の点模様の円)、および各メンバがこれらのイベントの指標を受信する最初の時間(他の縞模様および点模様の円)を示す。上部における各メンバの名前は、遅い順でどのイベントが最初であるかによって色分けされる。点模様よりも縞模様の初期投票が多いので、メンバの各々に関するコンセンサス投票は縞模様である。すなわち、メンバは最終的に、縞模様のイベントが点模様のイベントより先に発生したという合意に収束する。
【0040】
[1050] この例において、メンバ(アリス、ボブ、キャロル、デイブ、およびエドと表示されたコンピュータデバイス)は、イベント642またはイベント644のどちらが最初に発生したかのコンセンサスを定めるために働く。各縞模様の円は、メンバがイベント644(および/またはイベント644の指標)を最初に受信したイベントを示す。同様に、各点模様の円は、メンバがイベント642(および/またはイベント642の指標)を最初に受信したイベントを示す。ハッシュグラフ640に示すように、アリス、ボブ、およびキャロルの各々は、イベント642より先にイベント644(および/またはイベント644の指標)を受信した。デイブおよびエドの両者は、イベント644(および/またはイベント644の指標)より先にイベント642(および/またはイベント642の指標)を受信した。したがって、イベント642より先にイベント644を受信したメンバの数が多いため、各メンバによって、イベント644がイベント642より先に発生したことを示すように全順序が決定され得る。
【0041】
[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))}
【数1】


fast(x,y)=要素z∈anc(x)が中央値slow(w,z)によって分類され、各イベントのハッシュw∈last(x)によって引き分けが解消された、分類されたリスト内でのyの位置
【0042】
[1052] この実施形態において、fast(x,y)は、xが作成および/または定義されたほぼ直後の、creator(x)の意見における、イベントの全順序におけるyの位置を与える。Qが無限である場合、上記は、先述した実施形態における全順序と同じ全順序を計算する。Qが有限であり、全てのメンバがオンラインである場合、上記は、先述した実施形態における全順序と同じ全順序を計算する。Qが有限であり、所与の時間にメンバの半数以下がオンラインである場合、この関数により、オンラインメンバは、新しいメンバが緩慢に1人ずつオンラインになる際に変わらず保たれるオンラインメンバ間でのコンセンサスに至ることができる。ただし、ネットワークのパーティションが存在する場合、各パーティションのメンバは、彼ら自身のコンセンサスに至ることができる。その後、パーティションが解消すると、より小さいパーティションのメンバは、より大きいパーティションのコンセンサスを採択する。
【0043】
[1053] また他の例において、図8図9、および図13A~14Bに関して説明するように、データベース収束モジュールは、ハッシュグラフ内の半順序から全順序を計算するために、また異なる関数を用いてよい。図8~9に示すように、各メンバ(アリス、ボブ、キャロル、デイブ、およびエド)は、イベント(図8に示す1401~1413、図9に示す1501~1506)を作成および/または定義する。図8図9、および図13A~14Bに関して説明される関数およびサブ関数を用いて、イベントに関する全順序は、本明細書で更に詳しく説明するように、イベントをそれらの受信ラウンドによって分類すること、それらの受信タイムスタンプによって同順位を打破すること、およびそれらの署名によってこれらの同順位を打破することによって計算され得る。他の例において、イベントに関する全順序は、それらの受信ラウンドによってイベントを分類すること、それらの(受信タイムスタンプの代わりに)受信世代によって同順位を打破すること、およびそれらの署名によってこれらの同順位を打破することによって計算され得る。以下の段落は、イベントに関する順序を決定するためにイベントの受信ラウンドおよび受信世代を作成および/または定義するために用いられる関数を明示するものである。
【0044】
[1054] 「親」:YがXのハッシュを含む場合、イベントXはイベントYの親である。たとえば図8において、イベント1412の親は、イベント1406およびイベント1408を含む。
【0045】
[1055] 「祖先」:イベントXの祖先は、X、Xの親、Xの親の親、と続く。たとえば図8において、イベント1412の祖先は、イベント1401、1402、1403、1406、1408、および1412である。イベントの祖先は、そのイベントにリンクされると言ってよく、逆もしかりである。
【0046】
[1056] 「子孫」:イベントXの子孫は、X、Xの子、Xの子の子、と続く。たとえば図8において、イベント1401の子孫は、図に示される全てのイベントである。また他の例として、イベント1403の子孫は、イベント1403、1404、1406、1407、1409、1410、1411、1412、および1413である。イベントの子孫は、そのイベントにリンクされると言ってよく、逆もしかりである。
【0047】
[1057] 「N」:母集団におけるメンバの総数である。たとえば図8において、メンバは、アリス、ボブ、キャロル、デイブ、およびエドと表示されたコンピュータであり、Nは5に等しい。
【0048】
[1058] 「M」:Nの特定の割合より大きい(たとえばNの2/3より大きい)最小の整数である。たとえば図8において、割合が2/3に定められた場合、Mは4に等しい。他の例において、Mはたとえば、Nの異なる割合(たとえば1/3、1/2など)、特定の所定の数、および/または他の任意の適当な方法で定められてよい。
【0049】
[1059] 「自己親」:イベントXの自己親は、同じ方法によって作成および/または定義された親イベントYである。たとえば図8において、イベント1405の自己親は1401である。
【0050】
[1060] 「自己祖先」:イベントXの自己祖先は、X、Xの自己親、Xの自己親の自己親、と続く。
【0051】
[1061] 「シーケンス番号」(または「SN」):イベントの自己親のシーケンス番号足す1として定義される、イベントの整数属性である。たとえば図8において、イベント1405の自己親は1401である。イベント1401のシーケンス番号は1であるので、イベント1405のシーケンス番号は2(すなわち、1足す1)である。
【0052】
[1062] 「世代番号」(または「GN」):イベントの親の世代番号の最大値足す1として定義される、イベントの整数属性である。たとえば図8において、イベント1412は、それぞれ世代番号4および2を有する2つの親、イベント1406および1408を有する。したがってイベント1412の世代番号は5(すなわち、4足す1)である。
【0053】
[1063] 「ラウンドインクリメント」(または「RI」):0または1のいずれかであり得るイベントの属性である。
【0054】
[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または他の任意の適当な番号を含んでよい。
【0055】
[1065] 「分岐」:イベントXおよびイベントYが同じメンバによって定義および/または作成され、どちらも他方の自己祖先ではない場合、イベントXはイベントYの分岐である。たとえば図9において、メンバのデイブは、イベント1503および1504を生成および/または定義することによって分岐し、両方のイベントが同じ自己親(すなわちイベント1501)を有するので、イベント1503はイベント1504の自己祖先ではなく、イベント1504はイベント1503の自己祖先ではない。
【0056】
[1066] 分岐の「識別」:分岐は、互いに分岐する2つのイベントがいずれもこれら2つのイベントの後に作成および/または定義された第3イベントの祖先である場合、第3イベントによって「識別」され得る。たとえば図9において、メンバのデイブは、どちらも他方の自己祖先ではないイベント1503および1504を作成することによって分岐する。この分岐は、イベント1503および1504がいずれもイベント1506の祖先であるため、後のイベント1506によって識別され得る。いくつかの例において、分岐の識別は、特定のメンバ(たとえばデイブ)が不正をしたことを示してよい。
【0057】
[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は分岐を識別することができ、そのメンバによる任意のイベントを識別しない。
【0058】
[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)を「強く目撃」することができる。
【0059】
[1069] 「ラウンドR第1」イベント(本明細書において「目撃者」とも称される):イベントが(1)ラウンド番号Rを有し、(2)Rよりも小さいラウンド番号を有する自己親を有するか、または自己親を有さない場合、そのイベントは「ラウンドR第1」イベント(または「目撃者」)である。たとえば図8において、イベント1412は、ラウンド番号2を有し、その自己親が(2よりも小さい)ラウンド番号1を有するイベント1408であるため、「ラウンド2第1」イベントである。
【0060】
[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である。
【0061】
[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を強く識別する。
【0062】
[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ビットより大きいワードを用いて高速で実行され得る。
【0063】
[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について繰り返される。
【0064】
[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つのコインラウンド、といったように合意に達するまでの間繰り返されることが既定され得る。
【0065】
[1075] いくつかの例において、ラウンドGが多数決ラウンドである場合、投票は、以下のように計算され得る。Vを投票する少なくともM個のラウンドG-1第1を強く識別するラウンドGイベントが存在する場合(ここでVは「YES」または「NO」のいずれかである)、コンセンサス決定はVであり、ビザンチン合意プロトコルは終了する。他の場合、各ラウンドG第1イベントは、各ラウンドG第1イベントが強く識別し得るラウンドG-1第1の過半数である新たな投票を計算する。過半数ではなく引き分けが存在する例において、投票は、「YES」と指定され得る。
【0066】
[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個の票を有さない場合、選挙は次のラウンドに継続する。
【0067】
[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を投票することにより引き分けを解消する)。その投票はその後、次のラウンドで用いられ、合意に至るまで継続する。
【0068】
[1078] いくつかの例において、ラウンドGがコインラウンドである場合、投票結果は以下のように計算され得る。イベントXが、V(Vは「YES」または「NO」のいずれかである)を投票するM個以上のラウンドG-1第1を識別することができる場合、イベントXは自身の投票をVに変更する。そうでない場合、ラウンドGがコインラウンドである場合、各ラウンドG第1イベントXは、自身の投票を、イベントXのシグネチャの最下位ビットと定義される、(いくつかの例におけるコインフリップと同様の)疑似ランダム決定の結果に変更する。
【0069】
[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が作成される前に予測不可能であるので、イベントおよび合意プロトコルの安全性を高めることができる。
【0070】
[1080] たとえば図8において、ラウンド2がコインラウンドであり、ラウンド1より前の何らかのイベントが有名であったかに関して投票する場合、イベント1412は最初に、{1401、1402、1408}のうちM個以上がYESと投票したかNOと投票したかを確かめる。そのような場合、1412は同様に投票をする。どちらにもM個以上が投票していない場合、1412は、(たとえば、エドがイベント1412を作成および/または定義した時、これに署名した時にイベント1412のために作成したデジタルシグネチャの最下位ビットに基づいて)ランダムまたは疑似ランダム投票をする。
【0071】
[1081] いくつかの例において、疑似ランダム決定の結果は、たとえばラウンド番号の閾値シグネチャの最下位ビットとして実装され得る暗号共有コインプロトコルの結果であってよい。
【0072】
[1082] システムは、上述した疑似ランダム決定の結果を計算するための方法のいずれか1つによって構築され得る。いくつかの例において、システムは、様々な方法を何らかの順序でサイクルする。他の例において、システムは、既定のパターンに従って様々な方法の中から選択してよい。
【0073】
[1083] 「受信ラウンド」:イベントXは、Rが、ラウンド番号Rを有する有名なラウンドRの第1イベント(または有名な目撃者)の少なくとも半分がXの子孫である、および/またはXを目撃できるような最小整数である場合、Rの「受信ラウンド」を有する。他の例において、他の任意の適当な割合が用いられ得る。たとえば他の例において、イベントXは、Rが、ラウンド番号Rを有する有名なラウンドR第1イベント(または有名な目撃者)の所定の割合(たとえば40%、60%、80%など)以上がXの子孫である、および/またはXを目撃できる場合、イベントXはRの「受信ラウンド」を有する。
【0074】
[1084] いくつかの例において、イベントXの「受信世代」は、以下のように計算され得る。イベントXを識別できる各ラウンドRの第1イベントをどのメンバが作成および/または定義したかを求める。次に、Xを識別できるそのメンバによる最初のイベントの世代番号を決定する。次に、Xの「受信世代」を、そのリストの中央値として定義する。
【0075】
[1085] いくつかの例において、イベントXの「受信タイムスタンプ」Tは、Xを識別および/または目撃する、各メンバによる第1イベントを含むイベントにおけるタイムスタンプの中央値であってよい。たとえば、イベント1401の受信タイムスタンプは、イベント1402、1403、1403、および1408に関するタイムスタンプの値の中央値であってよい。いくつかの例において、イベント1401のタイムスタンプが中央値の計算に含まれ得る。他の例において、Xに関する受信タイムスタンプは、Xを識別または目撃する各メンバによる第1イベントであるイベントにおけるタイムスタンプの値の組み合わせ、または他の任意の値であってよい。たとえばXに関する受信タイムスタンプは、タイムスタンプの平均、タイムスタンプの標準偏差、(たとえば計算から最初および最後のタイムスタンプを取り除くことによって)修正された平均などに基づいてよい。また他の例において、拡張中央値が用いられ得る。
【0076】
[1086] いくつかの例において、イベントに関する全順序および/またはコンセンサス順序は、それらの受信ラウンドによってイベントを分類すること、それらの受信タイムスタンプによって引き分けを解消すること、それらのシグネチャによってそれらの引き分けを解消することによって計算される。他の例において、イベントに関する全順序は、それらの受信ラウンドによってイベントを分類すること、それらの受信世代によって引き分けを解消すること、およびそれらのシグネチャによってそれらの引き分けを解消することによって計算され得る。以下の段落は、イベントの受信ラウンド、受信タイムスタンプ、および/または受信世代を計算および/または定義するために用いられる関数を明示する。
【0077】
[1087] 他の例において、各イベントのシグネチャを用いる代わりに、同じ受信ラウンドおよび/またはそのラウンド内の受信世代を有する有名なイベントまたは有名な目撃者のシグネチャを有するイベントXORedのシグネチャが用いられ得る。他の例において、イベントシグネチャの他の任意の適当な組み合わせが、引き分けを解消してイベントのコンセンサス順序を定めるために用いられ得る。
【0078】
[1088] また他の例において、リストの中央値として「受信世代」を定義する代わりに、「受信世代」がリスト自体として定義され得る。よって、受信世代によって分類する場合、2つの受信世代がそれらのリストの中央要素によって比較されてよく、中央値の直前の要素によって引き分けを解消し、中央値の直後の要素によってこれらの引き分けを解消し、引き分けが解消されるまで、これまで用いられた要素より前の要素と後の要素とを交互に繰り返すことによって継続する。
【0079】
[1089] いくつかの例において、中央タイムスタンプの代わりに「拡張中央値」が用いられ得る。そのような例において、単一の受信タイムスタンプではなく、タイムスタンプのリストが各イベントに関して定義され得る。イベントXに関するタイムスタンプのリストは、Xを識別および/または目撃する各メンバによる第1イベントを含んでよい。たとえば図8において、イベント1401に関するタイムスタンプのリストは、イベント1402、1403、1403、および1408のタイムスタンプを含んでよい。いくつかの例において、イベント1401のタイムスタンプも含まれ得る。タイムスタンプのリストを用いて引き分けを解消する(すなわち、2つのイベントが同じ受信ラウンドを有する)場合、各イベントのリストの中央タイムスタンプ(または二等分できる長さの場合、2つの中央タイムスタンプの所定の第1または第2のタイムスタンプ)が比較され得る。これらのタイムスタンプが同じである場合、中央タイムスタンプの直後のタイムスタンプが比較され得る。これらのタイムスタンプが同じである場合、中央タイムスタンプの直前のタイムスタンプが比較され得る。これらのタイムスタンプもまた同じである場合、3つの既に比較されたタイムスタンプより後のタイムスタンプが比較される。これを、引き分けが解消されるまで交互に繰り返し続けてよい。上記と同様に、2つのリストが同じである場合、2つの要素のシグネチャによって引き分けが解消され得る。
【0080】
[1090] また他の例において、「拡張中央値」の代わりに「短縮された拡張中央値」が用いられ得る。そのような例において、タイムスタンプのリスト全体が各イベントについて格納されるのではない。代わりに、リストの中央付近のいくつかの値のみが格納され、比較のために用いられる。
【0081】
[1091] 受信された中央タイムスタンプは、イベントの全順序の計算に加えて他の目的に用いられる可能性がある。たとえば、ボブは、彼がその契約により結ばれることに同意すると述べる契約に、アリスが同じ契約に署名した取引を含むイベントXが存在する場合かつその場合に限り、特定のデッドライン上またはその前にあるXに関する受信タイムスタンプによって署名し得る。そのような場合、ボブは、上述したように「受信中央タイムスタンプ」によって示されたようなデッドラインより後にアリスが署名した場合、契約によって結ばれない。
【0082】
[1092] いくつかの例において、分散型データベースの状態は、コンセンサスが実現された後に定義され得る。たとえば、S(R)が、ラウンドRにおける有名な目撃者によって目撃され得るイベントのセットである場合、S(R)内の全てのイベントが最終的に、既知の受信ラウンドおよび受信タイムスタンプを有する。その時点で、S(R)内のイベントのコンセンサス順序は既知であり、変化しない。この時点に到達すると、メンバは、イベントおよびそれらの順序の表現を計算および/または定義してよい。たとえばメンバは、S(R)内のイベントのハッシュ値をそれらのコンセンサス順序において計算してよい。メンバはその後、ハッシュ値にデジタル署名し、そのメンバが定義する次のイベントにハッシュ値を含めてよい。これは、そのメンバが、S(R)内のイベントが変化しない所与の順序を有すると決定したことを、他のメンバに通知するために用いられ得る。メンバのM人以上(または他の任意の適当な数またはパーセンテージのメンバ)がS(R)のハッシュ値に署名(かつ、それに伴いハッシュ値によって表される順序に合意)した後、メンバのシグネチャのリストとともにイベントのコンセンサスリストは、コンセンサス順序がS(R)内のイベントに関して主張されるものであったことを証明するために用いられ得る単一のファイル(または他のデータ構造)を形成してよい。他の例において、イベントが、(本明細書で説明されるような)分散型データベースシステムの状態を更新する取引を含む場合、ハッシュ値は、S(R)内のイベントの取引をコンセンサス順序で適用した後の分散型データベースシステムの状態に関するものであってよい。
【0083】
[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号において説明される。
【0084】
[1094] 図2において、データベース収束モジュール211および通信モジュール212は、プロセッサ210内に実装されるものとして示される。他の実施形態において、データベース収束モジュール211および/または通信モジュール212は、メモリ220内に実装され得る。また他の例において、データベース収束モジュール211および/または通信モジュール212は、ハードウェアベース(たとえばASIC、FPGAなど)であってよい。
【0085】
[1095] いくつかの例において、(たとえば図1に関して図示および説明される)分散型データベースは、「代理取引」の処理を可能にしてよい。いくつかの例において、そのような代理取引は、分散型データベースの非メンバ(たとえば、分散型データベースのインスタンスを有さないコンピュータデバイス)の代理となる分散型データベースのメンバ(たとえば、分散型データベースの少なくとも一部のインスタンスを有するコンピュータデバイス)、全権利未満を有する(たとえば、読取権利を有するが書込み権利を有さない、コンセンサス決定に関与しないなどの)分散型データベースのメンバなどによって実行され得る。たとえば、アリスが分散型データベースに取引TRを提起したいが、彼女は分散型データベースの完全メンバではない(たとえば、アリスはメンバではない、または限られた権利を有する)ものとする。ボブは完全メンバであり、分散型データベースにおける全権利を有するものとする。この場合、アリスは取引TRをボブへ送信し、ボブが、分散型データベースに影響するように取引TRをネットワークに提起してよい。いくつかの例において、アリスはTRにデジタル署名してよい。いくつかの例において、TRはたとえば、ボブへの支払い(たとえば、分散型データベースにTRを提起するボブのサービスに対する料金)を含んでよい。いくつかの例においてアリスは、ボブまたは他の観察者が、TRがアリスから到来したことを決定することができないように、たとえばTORオニオンルーティングネットワークなどの匿名化ネットワークを介してボブへTRを通信してよい。
【0086】
[1096] いくつかの例において、(たとえば、図1に関して図示および説明された)分散型データベースは、暗号通貨を実装するために用いられ得る。そのような例において、各分散型データベースインスタンス114、124、134、144は、暗号通貨を格納するための1または複数の(本明細書においてウォレットとも称される)ウォレットデータ構造を定義してよい。ウォレットデータ構造は、鍵ペア(公開鍵および秘密鍵)を含んでよい。いくつかの例において、ウォレットの鍵ペアは、そのウォレットが発祥するコンピュータデバイスによって生成され得る。たとえばアリスがウォレット(W,K)を定義し、Wが(ウォレットの識別子としても機能し得る)公開鍵であり、Kが秘密鍵である場合、アリスは、分散型データベースの他のインスタンス(またはそれらのユーザ)が、ウォレットWがアリスに関連することを識別できないように、分散型データベースの残りのインスタンスへWを(たとえばイベント内で)公開しながらも自身のアイデンティティ匿名性を維持することができる。ただしいくつかの例において、暗号通貨の譲渡は公開である。したがって、アリスの雇用主が(たとえばイベント内の取引を用いて)Wへ金銭を譲渡し、後にアリスが(たとえば異なるイベント内の異なる取引を用いて)Wから店舗へ金銭を譲渡することによって購買を行う場合、雇用主および店舗は、Wがアリスに属すること、および購買を行ったのがアリスであることを、結託して決定することができる。したがって、これを回避するために、アリスにとって、自身の取引匿名性を維持するために新たな匿名ウォレットへ金銭を譲渡することが有利であり得る。
【0087】
[1097] いくつかの実装において、WALLET_ADD動作は、分散型データベースにペア(W,D)を格納するために用いられ、WALLET_DELは、ウォレットを削除するために用いられ得る。いくつかの例において、ユーザは、料金を支払うことによって分散型データベースにウォレットを追加することができ、そのようなウォレットは、支払われた料金によって保証される時間、分散型データベース内でアクティブに保たれ得る。ペア(W,D)内のパラメータWは、ウォレットの公開鍵に対応し、パラメータDは、各々が秘密鍵に対応する公開鍵のリストを含み得るデータ構造であり、そのような秘密鍵のいずれかは、たとえばWALLET_DEL動作に署名するために用いられ得る。他の例において、そのような秘密鍵の任意の十分大きいセットが、WALLET_DEL動作に署名するために用いられ得る。たとえばそのような例において、WALLET_DELに署名するそのような秘密鍵の数は、所定の閾値を上回らなければならない。
【0088】
[1098] 他の実装において、WALLET_ADD(W,D)は、公開鍵Wにデジタル証明書を追加および/または結合する動作または機能であってよい。デジタル証明書は、証明書の主体および証明書を使用できるアプリケーションおよびサービスに関する情報を提供することによって、ユーザ、コンピュータ、またはサービスのアイデンティティを公開鍵に結合する電子クレデンシャルである。したがっていくつかの例において、データ構造Dは、Wの公開鍵証明書(たとえばX.509証明書)、および公開鍵Wからの証明書を解くことが許可される公開鍵のリストを含んでよい。そのようなリスト内の公開鍵は、Wと、公開鍵証明書の連鎖内の鍵との両方を含み得る。
【0089】
[1099] メンバ、たとえばアリスは、WALLET_ADD(W,D)動作によって新たなウォレットを作成および/または定義することができる。そのようなウォレットは、公開鍵Wを含む。デフォルトで、新たに作成されたウォレットは、ウォレットをメンバのアリス(すなわち、アリスと表されるコンピュータデバイス)にリンクするものがウォレット内にないため匿名である。また分散型データベースによってメンバは、たとえばマネーロンダリング動作、脱税を防止し、顧客熟知(KYC)法または他の適当なポリシや慣例に準拠するために非匿名ウォレットを作成することもできる。したがって、アリスおよび分散型データベースの他のメンバは、(1)メンバのアイデンティティ(たとえばアリスのアイデンティティ)を検証し、ウォレットWにメンバを結び付ける証明書(たとえばX.509証明書)を取得するために、信頼された認証局(CA)を用いる、および/または(2)メンバのアイデンティ(たとえばアリス)を検証し、そのようなメンバによって作成されたアイデンティティエスクローファイル(IEF)のブラインドシグネチャを実行し、IEAの署名鍵の証明書(たとえばX.059証明書)を取得するために、信頼されたアイデンティティエスクロー局(IEA)を用いることができる。
【0090】
[1100] いくつかの例において、分散型データベースのメンバは、たとえば動作WALLET_ADD(A,D)を用いて、CAまたはIEFによって作成された証明書Dをウォレットに添付し、動作WALLET_DEL(A,D)を用いて、そのような証明書を最終的に削除することができる。そのような場合、証明書連鎖は、証明書を発行したCAまたはIEAまで拡大し、および/または、CAまたはIEAが分散型データベース内で用いられることを承認する機関、たとえば政府機関または他の適当な機関までさらに拡大し得る。
【0091】
[1101] いくつかの例において、分散型データベースを通して実行される取引がKYC法またはポリシに準拠する必要がある場合、ウォレット、銀行口座、および/または商品およびサービスの個人販売者の間の取引は、CAによって発行される証明書の検証後に実行され得る。そのような場合、証明書連鎖は、CAを承認した機関(たとえば政府機関)まで拡大し得る。したがって、そのような取引は、その機関によって追跡され得る。いくつかの例において、ユーザは、料金を支払うことによってウォレットに証明書を結合してよく、そのようなウォレットは、支払った料金によって保証される時間、分散型データベース内でアクティブに保たれ得る。
【0092】
[1102] いくつかの例において、分散型データベースを通して実行される取引は、KYC法またはポリシおよびプライバシー法またはポリシに準拠してよい。そのような例において、たとえば、商品およびサービスの個人販売者と取引とは、IEAによって発行される証明書の検証後に実行され得る。そのような場合、証明書連鎖は、IEAを承認した機関まで拡大し得る。たとえばIEFは、IEAを承認した機関によって所有される公開鍵によって暗号化された、Wおよびユーザの氏名および住所を含んでよい。したがって、そのような機関は、Wおよびユーザの氏名および住所に対応するフィールドを復号し、ウォレットの所有者を識別することができる。ただしユーザのアイデンティティは、分散型データベースまたは他の機関の他のメンバおよび/またはユーザにはアクセス不可能である。
【0093】
[1103] いくつかの例において、たとえばメンバは、複数のランダムなウォレット(たとえば100のランダムなウォレット)を作成および/または定義し、それらが対応するアイデンティティエスクローファイル(たとえば100のファイル)のブライドバージョンをIEAへ送信し、その後、IEAによってランダムに選択されたそれらのファイル(たとえば99のファイル)のサブセットのブラインドをはずし復号するためにIEAへ情報を送信してよい。そのようなメンバは、99のファイルに関連付けられた99のウォレットを破棄し、残りのアイデンティティエスクローファイルのブラインドシグネチャをIEAから受信してよい。メンバはその後、残りのアイデンティティエスクローファイルのブラインドをはずし、それを残りのウォレットに添付してよい。したがって、IEAは、そのようなメンバが、預託されたアイデンティティを残りのウォレットに添付していることを請け負ってよい。このようにメンバは、IEAからのプライバシーを有してよく、IEAを承認する機関のみが、預託された情報へのアクセス権を有してよい。
【0094】
[1104] いくつかの例において、たとえば国または他の団体がプライバシー法的枠組みを有する場合、アイデンティティエスクローファイルを復号するための単一の鍵を有するのではなく、政府または他の団体が、メンバのアイデンティティを復号するために協働するいくつかの機関を有し得る(たとえば、各機関および/または団体が、アイデンティティエスクローファイルを復号するために鍵の他の部分と組み合わせられる鍵の一部を有する)ように、システムは更に強化され得る。したがって、合意または協働動作は、メンバのアイデンティティを開示するために複数の機関にわたり行われ得る。よって、分散型データベースは、分散型データベースのメンバまたはユーザのプライバシーと、分散型データベースを介して実行される取引の透明性との間で均衡のとれたトレードオフを等しく提供し得るツールとして働く。また、アイデンティティエスクローファイルを復号するための単一の鍵を分割することにより、分散型データベースを実装するコンピュータデバイスの安全性およびプライバシーが向上する。
【0095】
[1105] 以下の例は、次の取引が(たとえばイベント内で)発行された場合、C個の暗号通貨コインがウォレットWからウォレットRへ譲渡されることを想定し、ここで、最後の_Kは、取引が秘密鍵Kによってデジタル署名されることを意味する。次の表記が用いられ得る。
TRANSFER(C,W,R)_K
【0096】
[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
【0097】
[1107] いくつかの例において、これらの取引は、一方が(公開鍵W1に関連する秘密鍵を用いて)K1によって署名され、他方が(公開鍵W2に関連する秘密鍵を用いて)K2によって署名された2つの同一コピーが発行され、分散型データベースの他のインスタンスへ(たとえば1または複数のイベント内で)拡散されない限り、効果を有さない。いくつかの例において、各取引は、上述したように安全タイムスタンプも含んでよい。この安全タイムスタンプは、取引が関連するイベントの安全タイムスタンプまたは取引の個別の安全タイムスタンプであってよい。両方の取引が互いのT秒以内のタイムスタンプを有して発行された(たとえば、取引の安全タイムスタンプが互いの所定の期間内である)場合、両方の通貨譲渡が発生する。そうでない場合、どちらの譲渡も発生しない。
【0098】
[1108] 他の例において、Tは用いられず、いずれかの関係者が譲渡を取り消す取引をポストする前に両方の取引が発生した場合のみ、通貨譲渡が発生する。たとえば、アリスは、自身の署名付き取引(たとえばアリスのTRANSFER_DOUBLE取引)を発行し、その後、第1の取引に関する取消メッセージを含む別の署名付き取引を発行し、次にボブが、自身の署名付き取引を発行する。ボブの取引がアリスの取消メッセージよりも後であった場合、取引は発生しないが、ボブの取引がアリスの取消メッセージよりも先であった場合、取引が発生する。このようにシステムは、取引の順序付けるコンセンサスを用いて、Tおよびタイムスタンプを用いずに作動してよい。他の例において、Tおよび取消メッセージの両方がサポートされ得る。
【0099】
[1109] 以下の例は、データ(たとえば通貨など)の譲渡を匿名的かつ安全に開始するために「TRANSFER_DOUBLE」取引タイプおよび/または分散型データベース機能がどのように用いられ得るかを示す。以下の例において、アリスは、彼女の雇用主が金銭を譲渡したウォレットW1を有する。アリスは、W1から、彼女が作成し、後に購買のために用いられる匿名ウォレットW2へC個のコインを譲渡したいと所望する。しかしアリスは、取引を見ている者が匿名ウォレットW2にW1が関連することを知ることがないように、匿名性を保護したいと所望する。アリスの雇用主が店舗と結託して匿名性を攻撃した場合でも、匿名性が安全でなくてはならない。また、たとえばボブは、自身のウォレットW3から、彼が作成する匿名ウォレットW4へコインを譲渡する際、同じく安全な匿名性を所望する。
【0100】
[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
【0101】
[1111] この例において、アリスは、ウォレットW1からW2へC個のコインを譲渡しようとし、ボブは、ウォレットW3からW4へC個のコインを譲渡しようとする。アリスおよびボブの各々は、各ウォレットの(公開鍵、秘密鍵)鍵ペアを生成することによって自身の所有するウォレットを生成する。ここでは、ウォレットの公開鍵は、ウォレットの名前としても用いられる(他の例において、ウォレットを識別するために別の識別子が用いられ得る)。アリスおよびボブは、観察者が、ウォレットW1の所有者がW2またはW4のいずれかの所有者でもあることを識別できるが、そのどちらであるかを識別できないような方法で、これらの譲渡を遂行したいと所望する。同様に、アリスおよびボブは、観察者が、ウォレットW3の所有者がW2またはW4のいずれかの所有者でもあることを識別できるが、そのどちらであるかを識別できないような方法で、これらの譲渡を遂行したいと所望する。公開鍵W1を有するウォレットは、秘密鍵K1を有する。同様に、ウォレットW2、W3、およびW4は、それぞれ秘密鍵K2、K3、およびK4を有する。上述した各取引または命令は、最後に記載された秘密鍵によって署名される。たとえば、最初の取引または命令は、秘密鍵K1によってデジタル署名される。
【0102】
[1112] 第1の取引(Anonymize1(N,C,W1)_K1)は、アリスがC個のコインをW1から匿名ウォレットへ譲渡しようとしていることを通知するために用いられる。この取引は、取引のハッシュ、取引に含まれる乱数、および/または他の任意の適当な識別子であってよい識別子番号Nを含む。このN(たとえば会話識別子および/またはプロセス識別子)は、一度に発生するいくつかの類似したプロセスおよび/または会話が存在する場合、混同を回避する(およびプロセスまたは会話を識別することができる)ように、プロセスを開始した取引を再び参照するために後続の取引において用いられ得る。いくつかの例において、Nはタイムアウトデッドライン(たとえばT)を含んでよく、その後、Nを含む取引は無視される。この取引は、K1によってデジタル署名される。
【0103】
[1113] 関数暗号(W4、W1)は、公開鍵W1を用いてW4(ボブのターゲット匿名ウォレットとして彼によって所有および定義されるウォレットの公開鍵)を暗号化し、対応する(アリスによって保持される)秘密鍵K1によってのみ復号することができる結果Bをもたらす。これにより、取引を閲覧している分散型データベースの他のインスタンスはいずれも、W1の所有者(この例ではアリス)を除き、W4を識別できないことが確実になる。
【0104】
[1114] 取引匿名化2(N,W3,B)_K3は、プロセスまたは会話Nの一部として、ボブがW3から、Bによって識別される匿名ウォレットへC個のコインを譲渡しようとしていることを示す。この取引は、秘密鍵K3を用いてデジタル署名される。アリスはその後、ボブのターゲット匿名ウォレットをW4と識別するために秘密鍵K1を用いてBを復号してよい。
【0105】
[1115] アリスは、関数暗号(W2,W3)を実行してよい。これは、公開鍵W3(ボブの最初のウォレット)を用いてW2(アリスのターゲット匿名ウォレットとして彼女によって所有および定義されるウォレットの公開鍵)を暗号化する。アリスはその後、取引匿名化3(N,A)_K1を発行してよい。ボブは、秘密鍵K3を用いてAを復号することによって、W2をアリスのターゲット匿名ウォレットと識別してよい。
【0106】
[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をどのように順序付けるかを識別するために、他の任意の決定関数が用いられ得る。
【0107】
[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よりもわずかに匿名性が高い。
【0108】
[1118] いくつかの例において、取引は「代理取引」であってよく、これは、ネットワーク内のノードが他者の代わりに取引を提起することを意味する。上の例において、アリスはウォレットW1およびW2を所有し、いくつかの取引を発行しようとしている。キャロルが、全権を有する分散型データベースのメンバである場合、アリスは、アリスの代わりに分散型データベースに提起するキャロルへ取引を送信してよい。いくつかの例において、代理取引は、そのサービスに対して支払うためにウォレットW1からキャロルへ少額の料金を譲渡する権限を与えることを含んでよい。いくつかの例において、アリスは、たとえばTORオニオンルーティングネットワークなど、通信を匿名化するネットワークを介してキャロルと通信してよい。
【0109】
[1119] いくつかの例において、アリスはその後、上述したデイブとの匿名プロトコルを繰り返してよく、ボブは、エドとのプロトコルを繰り返してよい。その時点で、分散型データベースの他のインスタンスは、アリスが4つのウォレットの1つを所有することを識別できるが、どれであるかを知ることはない。10回のそのような動作後、アリスは、210である1024のうち1つのウォレットを所有する。20回の動作後、セットは100万を超える。30回の後、セットは10億を超える。40回の後、セットは1兆を超える。プロトコルを実行するためには何分の1秒かしか要さない。しかし、各プロトコルが実行するのに1秒を要する場合でも、自身のウォレットを匿名化しようと試みる誰もが、1分を大幅に下回る時間でランダムに互いにスワップされる。観察者は、結果として生じるウォレットの1つをアリスが所有することを知るが、どの1つであるかを知ることはない。
【0110】
[1120] このシステムは、自身のウォレットを匿名化しようと試みる人間が少ない場合に限り、安全性が低い。追加の安全性のために、アリスは、ある期間(たとえば1日、1時間、1週間など)待機し、その後、彼女の最終的なウォレットを更に匿名化してよい。このようにすると、アリスは最終的に、非常に長期間にわたり匿名化を試みた分散型データベースの他のインスタンスを含む群衆の中に隠れることができる。システムを用いる分散型データベースのインスタンスが多いほど、アリスは迅速に目標に到達することができる。
【0111】
[1121] システムは、アリスが分散型データベースを実装するネットワーク(たとえばインターネット)と通信する時に攻撃者が彼女のIPアドレスを識別することができる場合、損なわれる可能性がある。アリスが所与のIPアドレスからプロトコルを実行していることを攻撃者が識別し、即時に、同じアドレスからウォレットW2にプロトコルを実行している何者かを目撃した場合、彼らは、アリスがウォレットW2を所有するという結論を下し得る。いくつかの例において、IPアドレスは匿名化され得る。たとえば、匿名通信を実現するために匿名通信ネットワーク(たとえばTorネットワーク)が用いられ得る。その場合、分散型データベースの残りのインスタンスは、W2がプロトコルを実行し取引に署名したことを識別できるが、W2がアリスのコンピュータを用いるかボブのコンピュータを用いるかを識別することはできない。
【0112】
[1122] 管轄区によっては、政府は、人民が(たとえば隣人、犯罪者、外国政府などによる)スパイから匿名であることを可能にしながらも、たとえばマネーロンダリングおよび脱税などの犯罪を防止するために、法律制定によって確実に通貨の流れを監視することができるようにしたいと所望し得る。いくつかの例において、上述した匿名方式およびシステムは、そのような法律制定に対応し得る。そのような例において、政府は、ウォレットが特定の人間に関連することを証明する暗号化証明書を作成および/または定義するために特定の認証局(CA)または複数のCAを作成または承認してよい。暗号は、政府のみが(場合によっては裁判所命令がある場合のみ)それを復号できるようなものであってよい。アリスがウォレットを作成および/または定義した場合、彼女は任意選択的に、そのような証明書をウォレットに添付することができ、これは、ウォレットがアリスに属することを隣人が知ることはできないが、政府は証明書を復号し、アリスをウォレットの所有者と識別できることを意味する。政府は、そのような証明書を有するウォレットに自国内の雇用主のみが預金できること、およびそのような証明書を有するウォレットからの支払いを自国内の店舗のみが受領できることを主張してよい。よってアリスは、ウォレットの連鎖を作成および/または定義するために上記プロトコルを繰り返し実行し、連鎖内の最初および最後のウォレットの適切な証明書を取得することができる。
【0113】
[1123] 各ウォレットデータ構造は単一の公開秘密鍵ペアを有するものとして上述されたが、他の例において、ウォレットデータ構造は、1つが署名用であり1つが暗号用である2つの公開秘密鍵ペアを含んでよい。そのような例において、上述した方法は、署名のために署名鍵を用い、暗号化のために暗号鍵を用いるように修正され得る。
【0114】
[1124] ハッシュグラフを用いてイベント内で取引を格納および交換することが上述されたが、他の例において、安全かつ匿名性の取引を容易にするための上記方法を実行するために他の任意の適当な分散型データベースおよび/または分散型台帳技術が用いられ得る。たとえば、そのような方法を実行するために、ブロックチェーン、PAXOS、RAFT、ビットコイン、イーサリアムなどの技術が用いられ得る。いくつかの例において、安全かつ匿名性の取引を容易にするための上記方法を実行するために、これらの技術に安全タイムスタンプが追加(たとえばそれらの上に構築)され得る。他の例において、上述したようにタイムスタンプは使用されない。
【0115】
[1125] 匿名化方法は、分散型データベースの2つの異なるインスタンス間で実行されるものとして上述されたが、他の例において、分散型データベースの2より多い数のインスタンスによって実行され得る。たとえば他の例において、「TRANSFER_DOUBLE」取引は、追加の数の取引に対応し得る。たとえば、3つの異なるウォレットデータ構造間でのデータの譲渡をサポートするために、TRANSFER_TRIPLE取引が定義され得る。
【0116】
[1126] 暗号通貨を実装することが上述されたが、他の例において、他の任意の種類の分散型データベース内での取引が匿名化され得る。たとえば、商品の交換のレコード、個人のアイデンティティの認証、特定のリソースを使用するための承認などが匿名化され得る。そのような例において、分散型データベース内での取引の安全性が高められ得る。
【0117】
[1127] 図3図6は、実施形態に係るハッシュグラフの例を示す。5人のメンバが存在し、各々が黒い縦線によって表される。各円は、イベントを表す。イベントから2本の下り線は、2つの過去イベントのハッシュを表す。この例において、各メンバの第1のイベントを除き、全てのイベントが2本の下り線(1つが同じメンバへの太線、1つが他のメンバへの細線)を有する。時間は上向きに進む。図3~6において、分散型データベースのコンピュータデバイスは、アリス、ボブ、キャロル、デイブ、およびエドと示される。理解すべき点として、そのような指標は、コンピュータデバイスが、図1に関して図示および説明されたコンピュータデバイス110、120、130、および140と構造的かつ機能的に同様であることを示す。
【0118】
[1128] 図7は、実施形態に係る、イベントを同期する2つのコンピュータデバイスの信号フロー図を示す。具体的には、いくつかの実施形態において、分散型データベースインスタンス703および803は、収束を得るためにイベントを交換してよい。コンピュータデバイス700は、コンピュータデバイス700との関係、コンピュータデバイス700との近接度、コンピュータデバイス700に関連する順序付きリストなどに基づいて、コンピュータデバイス800とランダムに同期することを選択してよい。いくつかの実施形態において、コンピュータデバイス800は、分散型データベースシステムに属するコンピュータデバイスのセットからコンピュータデバイス700によって選択されてよく、コンピュータデバイス700は、コンピュータデバイス800を複数回連続的に選択してよく、あるいは一時コンピュータデバイス800を選択しなくてもよい。他の実施形態において、過去に選択されたコンピュータデバイスの指標がコンピュータデバイス700に格納され得る。そのような実施形態において、コンピュータデバイス700は、コンピュータデバイス800を再び選択することができるようになる前に、所定の回数の選択の間待機してよい。上述したように、分散型データベースインスタンス703および803は、それぞれコンピュータデバイス700のメモリおよびコンピュータデバイス800のメモリに実装され得る。
【0119】
[1129] 上記の用語、定義、およびアルゴリズムは、図8~12において説明される実施形態および概念を説明するために用いられる。図13Aおよび図13Bは、数学形式で示されるコンセンサス方式および/またはプロセスの第1の応用例を示す。図14Aおよび図14Bは、数学形式で示されるコンセンサス方式および/またはプロセスの第2の応用例を示す。
【0120】
[1130] システム例1:コンピュータデバイス700がアリスと呼称され、コンピュータデバイス800がボブと呼称される場合、それらの間の同期は図7に示すとおりであってよい。アリスとボブとの間の同期は、以下のとおりであってよい。
【0121】
[1131] アリスはボブに、分散型データベース703に格納されたイベントを送信する。
【0122】
[1132] ボブは、以下を含む新たなイベントを作成および/または定義する。
【0123】
[1133] ボブが作成および/または定義した最後のイベントのハッシュ
【0124】
[1134] アリスが作成および/または定義した最後のイベントのハッシュ
【0125】
[1135] ボブによる上記のデジタルシグネチャ
【0126】
[1136] ボブはアリスに、分散型データベース803に格納されたイベントを送信する。
【0127】
[1137] アリスは、新たなイベントを作成および/または定義する。
【0128】
[1138] アリスはボブに、そのイベントを送信する。
【0129】
[1139] アリスは、イベントの全順序をハッシュグラフの関数として計算する。
【0130】
[1140] ボブは、イベントの全順序をハッシュグラフの関数として計算する。
【0131】
[1141] 所与の時間に、メンバは、これまでに受信したイベントを、各イベントを作成および/または定義したコンピュータデバイスおよび/または分散型データベースインスタンスに関連する識別子とともに格納してよい。各イベントは、(親ハッシュを有さない)最初のイベントおよび新たなメンバごとの(彼らを招待し参加させた既存メンバのイベントを表す、単一の親イベントハッシュを有する)第1のイベントを除き、2つの先行イベントのハッシュを含む。このイベントセットを表す図が描かれ得る。図は、各メンバに関する縦線、およびそのメンバによって作成および/または定義された各イベントに関する線上の点模様を示し得る。イベント(上側の点模様)が先行イベント(下側の点模様)のハッシュを含む場合常に、2つの点模様間に対角線が描かれる。イベントは、そのイベントがそのイベントのハッシュを介して(直接、または中間イベントを介してのいずれかで)他のイベントを参照し得る場合、他のイベントにリンクされると言える。
【0132】
[1142] たとえば、図3は、ハッシュグラフ600の例を示す。イベント602は、キャロルとの同期の結果として同期後にボブによって作成および/または定義される。イベント602は、イベント604(ボブによって作成および/または定義された過去のイベント)のハッシュおよびイベント606(キャロルによって作成および/または定義された過去のイベント)のハッシュを含む。いくつかの実施形態において、たとえば、イベント602内に含まれるイベント604のハッシュは、直近の祖先イベントであるイベント608および610へのポインタを含む。このように、ボブは、イベント608および610を参照するためにイベント602を用い、先行イベントへのポインタを用いてハッシュグラフを再構成してよい。いくつかの例において、イベント602は、先行する祖先イベントを介してハッシュグラフ600内のイベントの各々を参照することができるので、ハッシュグラフ600内の他のイベントにリンクされると言える。たとえばイベント602は、イベント604を介してイベント608にリンクされる。他の例として、イベント602は、イベント606およびイベント612を介してイベント616にリンクされる。
【0133】
[1143] システム例2:イベントが、記録するために取引の「ペイロード」または他の情報も含む、システム例1に基づくシステム。そのようなペイロードは、コンピュータデバイスの直近の先行イベントから、発生し、および/または定義された任意の取引および/または情報によってイベントを更新するために用いられ得る。たとえばイベント602は、イベント604が作成および/または定義されてからボブによって行われた任意の取引を含んでよい。したがって、他のコンピュータデバイスとイベント602を同期する時、ボブはこの情報を共有することができる。その結果、ボブによって行われた取引は、イベントに関連し、イベントを用いる他のメンバと共有され得る。
【0134】
[1144] システム例3:イベントが、デバッギング、診断、および/または他の目的のために役立つ現在時間および/または日付も含む、システム例1に基づくシステム。時間および/または日付は、コンピュータデバイス(たとえばボブ)がイベントを作成および/または定義するローカル時間および/または日付であってよい。そのような実施形態において、そのようなローカル時間および/または日付は、その他のデバイスと同期されない。他の実施形態において、時間および/または日付は、デバイス間で(たとえばイベントの交換時に)同期され得る。また他の実施形態において、時間および/または日付を決定するためにグローバルタイマが用いられ得る。
【0135】
[1145] システム例4:アリスがボブに、ボブによって作成および/または定義されたイベントまたはそのようなイベントの祖先イベントを送信しない、システム例1に基づくシステム。yがxのハッシュを含む場合、またはxの祖先であるイベントのハッシュをyが含む場合、イベントxはイベントyの祖先である。同様に述べると、そのような実施形態において、ボブはアリスに、アリスによって未だ格納されていないイベントを送信し、アリスによって既に格納されたイベントを送信しない。
【0136】
[1146] たとえば図4は、イベント622(黒い円)の祖先イベント(点模様の円)および子孫イベント(縞模様の円)を示すハッシュグラフ例620を示す。直線は、イベントにおける半順序を確立するものであり、ここで祖先は黒色イベントより前にあり、子孫は黒色イベントより後にある。半順序は、白色イベントが黒色イベントの前であるか後であるかを示さないので、それらの順序を決定するために全順序が用いられる。他の例として、図5は、1つの特定のイベント(塗りつぶされた円)および各メンバがそのイベントの指標を受信する最初の時間(線模様の円)を示すハッシュグラフ例を示す。キャロルがイベント624を作成および/または定義するためにデイブと同期する時、キャロルはイベント622の祖先イベントを既に知っており受信しているので、デイブはキャロルにそのようなイベントを送信しない。代わりにデイブはキャロルに、キャロルがキャロルの分散型データベースインスタンスに未だ受信および/または格納していないイベントを送信する。いくつかの実施形態において、デイブは、キャロルが過去に受信したイベントに関してデイブのハッシュグラフが何を示すかに基づいて、どのイベントをキャロルへ送信するかを識別してよい。イベント622は、イベント626の祖先である。したがって、イベント626の時点で、デイブは既にイベント622を受信している。図4が示すように、デイブは、キャロルからイベント622を受信したボブからイベント622を受信したエドからイベント622を受信した。また、イベント624の時点で、イベント622は、キャロルによって作成および/または定義されたデイブが受信している最後のイベントである。したがってデイブはキャロルに、デイブがイベント622以外に格納しているイベントおよびその祖先を送信してよい。また、デイブからイベント626を受信すると、キャロルは、キャロルの分散型データベースインスタンスに格納されたイベント内のポインタに基づいて、ハッシュグラフを再構成してよい。他の実施形態において、デイブは、キャロルがデイブにイベント622を送信していること(図4には不図示)およびキャロルが既に受信しているイベントを識別するためにデイブがイベント622(およびその中の参照)を用いて識別することに基づいて、どのイベントをキャロルへ送信するかを識別してよい。
【0137】
[1147] システム例5:イベントが、そのイベントの祖先を受信者が受信および/または格納する後まで送信されないように、両方のメンバが他方へイベントを送信する、システム例1に基づくシステム。したがって送信者は、2つのハッシュと既に受信された2つの祖先イベントとを比較することによって、イベントが受信されると同時に受信者が各イベントにおける2つのハッシュを確認できるように、最も古いものから最も新しいものまでイベントを送信する。送信者は、送信者のハッシュグラフの現在状態(たとえば、送信者によって定義されたデータベース状態変数)およびそのハッシュグラフが、受信者が既に受信していることを示すことに基づいて、どのイベントを受信者へ送信するかを識別してよい。図3を参照すると、たとえば、イベント602を定義するためにボブがキャロルと同期する時、キャロルは、イベント619が、ボブによって作成および/または定義されキャロルが受信している最後のイベントであることを識別してよい。その結果キャロルは、ボブがそのイベントおよびその祖先を知っていることを決定してよい。よってキャロルはボブに、イベント618およびイベント616(すなわち、キャロルが受信しておりボブが未だ受信していない最も古いイベント)を送信してよい。キャロルはその後、イベント612、次にイベント606をボブへ送信してよい。これによりボブは、イベントを容易にリンクさせ、ボブのハッシュグラフを再構成することができる。ボブが未だ受信していないイベントがどれかを識別するためにキャロルのハッシュグラフを用いることにより、同期の効率性が高くなり、ボブがキャロルからのイベントを要求しないため、ネットワークトラフィックが低減され得る。
【0138】
[1148] 他の実施形態において、最も新しいイベントが最初に送信され得る。受信者が、2つの過去イベントのうちの1つを未だ受信していないことを(最も新しいイベントにおける2つの過去イベントのハッシュおよび/または最も新しいイベントにおける過去イベントへのポインタに基づいて)決定した場合、受信者は送信者に、そのようなイベントを送信することを要求してよい。これは、受信者が最も新しいイベントの祖先を受信および/または格納するまで発生し得る。図3を参照すると、そのような実施形態において、たとえばボブがキャロルからイベント606を受信すると、ボブは、イベント606におけるイベント612およびイベント614のハッシュを識別してよい。ボブは、イベント604の作成および/または定義時にアリスからイベント614を過去に受信されたことを決定してよい。したがってボブは、キャロルからのイベント614を要求する必要はない。ボブは、イベント612が未だ受信されていないことも決定してよい。よってボブは、キャロルからのイベント612を要求してよい。ボブはその後、イベント612内のハッシュに基づいて、ボブがイベント616または618を受信していないことを決定し、それに従ってキャロルからのこれらのイベントを要求してよい。イベント616および618に基づいて、ボブはその後、彼がイベント606の祖先を受信していることを決定することができる。
【0139】
[1149] システム例6:メンバが、いくつかのイベントの中で次に送信するイベントの選択肢を有する場合、イベントは、そのメンバによって作成および/または定義されこれまでに送信された総バイト数を最小にするように選択されるという追加の制約を有する、システム例5に基づくシステム。たとえば、アリスがボブへ送信するために残っている2つのイベントのみを有し、1つが100バイトであってキャロルによって作成および/または定義されたものであり、1つが10バイトであってデイブによって作成および/または定義されたものであり、この同期においてこれまでにアリスは既にキャロルによるイベントを200バイト、デイブによるイベントを210バイト送信している場合、アリスはデイブのイベントを最初に送信し、その後キャロルのイベントを送信しなければならない。なぜならば、210+10<100+200であるためである。これは、単一のメンバが単一の巨大なイベントまたは大量の小さなイベントを送信する攻撃に対処するために用いられ得る。トラフィックが多くのメンバのバイト制限を超える場合(システム例7に関して説明するように)、システム例6の方法は、正当なユーザのイベントではなく攻撃者のイベントが無視されることを確実にすることができる。同様に述べると、(接続を提携させる1つの巨大イベントに対して防御するために)大きなイベントより前に小さなイベントを送信することによって攻撃が緩和され得る。また、メンバが単一の同期において(たとえばネットワーク制限、メンバのバイト制限などによって)イベントの各々を送信することができない場合、そのメンバは、攻撃者によって定義および/または作成されたイベントのみを送信し、他のメンバによって作成および/または定義されたイベントを全く(ほとんど)送信しないのではなく、各メンバからの少数のイベントを送信してよい。
【0140】
[1150] システム例7:ボブがアリスに、自身がこの同期中に受信する気のある最大バイト数を示す数を送信し、アリスが自身の制限について返答するという追加の第1のステップを有する、システム例1に基づくシステム。アリスはその後、次のイベントがこの制限を超える場合、送信を停止する。ボブも同様である。そのような実施形態において、送信されるベイト数が制限される。これにより、収束にかかる時間が増加し得るが、同期ごとのネットワークトラフィック量が低減される。
【0141】
[1151] システム例8:同期プロセスの最初に以下のステップが追加される、システム例1に基づくシステム。
【0142】
[1152] アリスは、ボブによって作成および/または定義されたイベントまたはボブによって作成および/または定義されたイベントの祖先であるイベントを抜いて、自身が受信および/または格納したイベントのセットであるSを識別する。
【0143】
[1153] アリスは、S内の各イベントを作成および/または定義したメンバを識別し、メンバのID番号のリストをボブへ送信する。またアリスは、各メンバによって作成および/または定義され自身が既に受信および/または格納したイベントの数も送信する。
【0144】
[1154] ボブは、他のメンバによって作成および/または定義されたイベントを彼がいくつ受信したかのリストを用いて返答する。
【0145】
[1155] その後アリスはボブに、ボブが未だ受信していないイベントのみを送信する。たとえば、アリスがボブに、キャロルによって作成および/または定義された100のイベントを受信したことを示し、ボブが、キャロルによって作成および/または定義された95のイベントを受信したことを返答した場合、アリスは、キャロルによって作成および/または定義された最新の5つのイベントのみを送信する。
【0146】
[1156] システム例9:不正人物を識別および/または処理するための追加のメカニズムを有する、システム例1に基づくシステム。各イベントは2つのハッシュを含み、1つはそのメンバによって作成および/または定義された最後のイベントから得られ(「自己ハッシュ」)、1つは他のメンバによって作成および/または定義された最後のイベントから得られる(「対外ハッシュ」)。メンバが、同じ自己ハッシュを有する2つの異なるイベントを作成および/または定義した場合、そのメンバは「不正人物」である。アリスが、デイブによって作成および/または定義された同じ自己ハッシュを有する2つの異なるイベントを受信することによってデイブが不正人物であることを知った場合、彼女は、デイブが不正人物であるという指標を格納し、今後、彼との同期を差し控える。デイブが不正人物であることをアリスが知り、それでもなお再びデイブと同期し、その事実を記録する新たなイベントを作成および/または定義した場合、アリスもまた不正人物となり、アリスがデイブと更に同期していることを知る他のメンバは、アリスとの同期を中断する。いくつかの実施形態において、これは一方向への同期にしか影響を及ぼさない。たとえばアリスが、自身が各メンバに関して受信したイベントの数および識別子のリストを送信する時、彼女は、不正人物に関するIDまたは数を送信しないので、ボブは、任意の対応する数を用いて返答しない。その後アリスはボブに、彼女が受信した不正人物のイベントを送信し、これに関してアリスは、ボブがそのようなイベントを受信したという指標を受信していない。その同期が完了した後、ボブもまた、(デイブが不正人物であることを既に識別していなければ)デイブが不正人物であることを決定することができ、ボブも不正人物との同期を拒絶する。
【0147】
[1157] システム例10:アリスが、自身が識別した不正者のリスト、および彼女が未だ格納している不正者のイベントのリストをボブへ送信することによって同期プロセスを開始し、ボブは、アリスが識別した不正人物に加えて自身が識別した任意の不正人物で応答することが追加された、システム例9におけるシステム。その後、彼らが通常どおりに継続するが、互いに同期する際に不正人物を数に入れない。
【0148】
[1158] システム例11:同期中に受信された任意の新たなイベント内での取引に基づいて、(たとえば、システムのメンバによって定義されたデータベース状態変数によって捕捉されたように)現在状態を繰り返し更新するプロセスを有する、システム例1におけるシステム。これは、以前の状態のコピーに遡ること、および新たな順序でイベントを処理することにより現在状態を再計算することによって、イベントのシーケンスが変化した場合常に、その状態(たとえばイベントの順序)を繰り返し再構築する第2のプロセスも含んでよい。いくつかの実施形態において、現在状態は、取引の結果に関連する状態、残高、条件などである。同様に述べると、状態は、取引によって修正されたデータ構造および/または変数を含んでよい。たとえば、取引が銀行口座間での振替である場合、現在状態は、口座の現在の残高であってよい。他の例として、取引が多人数参加型ゲームに関連する場合、現在状態は、ゲームに関連する位置、生存者の数、獲得アイテム、ゲーム状態などであってよい。
【0149】
[1159] システム例12:状態(たとえば、銀行口座残高、ゲーム状態など)を維持するために「高速クローン」アレイリストを使用することによって高速化された、システム例11におけるシステム。高速クローンアレイリストは、1つの追加の特徴を有するアレイとして機能するデータ構造であり、オリジナルのコピーである新たなオブジェクトを作成および/または定義するために出現する「クローン」動作をサポートする。クローンに対する変更はオリジナルに影響を及ぼさないので、クローンは、真正コピーであるかのように機能する。しかし、クローンの作成は、1つのアレイリストのコンテンツ全体を他のアレイリストへコピーおよび/または更新することを実際に伴わないので、クローン化動作は真正コピーの作成よりも高速である。オリジナルリストの2つのクローンおよび/またはコピーを有する代わりに、各々がオリジナルリストに対するハッシュテーブルおよびポインタを有する2つの小オブジェクトが用いられ得る。クローンに書込みが行われると、ハッシュテーブルは、どの要素が修正されたかおよび新たな値を記憶する。ある位置で読取りが行われると、ハッシュテーブルが最初に確認され、その要素が修正されていた場合、ハッシュテーブルから新たな値が戻される。そうでない場合、オリジナルアレイリストからの要素が戻される。このように、2つの「クローン」は最初、オリジナルアレイリストに対するポインタにすぎない。しかし、各々が繰り返し修正されると、それ自体とオリジナルリストとの差を格納する大きなハッシュテーブルを有するものへと成長する。クローンはそれ自体がクローン化されてよく、データ構造を、各々が自身のハッシュテーブルおよび親に対するポインタを有するオブジェクトのツリーに拡大させる。したがって要求されたデータを有する頂点が発見されるまで、または根に到達するまで、読取りによってツリーを登ることになる。頂点が過度に大きくまたは複雑になると、それは親の真正コピーと交換されてよく、ハッシュテーブル内の変更がコピーに行われてよく、ハッシュテーブルは破棄される。また、クローンが必要でなくなった場合、ごみ回収中にクローンはツリーから消去されてよく、ツリーは崩壊し得る。
【0150】
[1160] システム例13:状態(たとえば、銀行口座残高、ゲーム状態など)を維持するために「高速クローン」ハッシュテーブルを使用することによって高速化された、システム例11におけるシステム。これは、ツリーの根がアレイリストではなくハッシュテーブルである点を除き、システム12と同じである。
【0151】
[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を有するテーブルに追加される。行の修正は、削除およびその後の挿入に等しい。前述のとおり、いくつかのクローンはごみ回収され、ツリーは単純化され得る。そのツリーの構造は、クローンがアクセス不可能であり完全に内部で使用される追加のテーブルに格納される。
【0152】
[1162] システム例15:状態を維持するために「高速クローン」ファイルシステムを使用することによって高速化された、システム例11におけるシステム。これは、ファイルシステムの周囲のラッパーとして機能するオブジェクトである。ファイルシステムは、様々なバージョンのファイルシステムを管理するために高速クローンリレーショナルデータベースを用いて、既存のファイルシステムの上に構築される。基礎となるファイルシステムは、大量のファイルを一方向に、または(ディレクトリを小さく保つために)ファイル名に従って分割して格納する。ディレクトリツリーは、データベースに格納され、ホストファイルシステムには提供されなくてよい。ファイルまたはディレクトリのクローンが作られると、「クローン」は単にID番号を有するオブジェクトであり、データベースは、このクローンが現在存在することを反映するように修正される。高速クローンファイルシステムのクローンが作られた場合、これはユーザには、完全な新しいハードドライブが作成および/または定義され、既存のハードドライブのコピーによって初期化されたものとして出現する。1つのコピーに対する変更は、他のコピーに影響を及ぼし得ない。実際は、各ファイルまたはディレクトリの1つのコピーが存在するだけであり、1つのクローンによってファイルが修正されると、コピーが発生する。
【0153】
[1163] システム例16:高速クローンファイルシステムにおけるファイルの各Nバイト部分に関してホストオペレーティングシステムにおいて個別ファイルが作成および/または定義される、システム例15におけるシステム。Nは、たとえば4096または1024など、何らかの適当なサイズであってよい。この方法では、大きなファイルにおいて1バイトが変更されると、大きなファイルの1チャンクのみがコピーされ修正される。またこれにより、数バイトしか異ならないドライブ上の多数のファイルを分類する時の効率性が高められる。
【0154】
[1164] システム例17:各メンバが、自身が作成および/または定義するイベントの一部または全部において、イベントの順序におけるコンセンサスが現在存在することをメンバが認識および/または識別することを示す、過去の何らかの時点における状態のハッシュを、その時点までに発生したイベントの数とともに含む、システム例11におけるシステム。メンバが、所与の状態に関してユーザの過半数からそのようなハッシュを含む署名付きイベントを収集した後、メンバは、その時点におけるコンセンサス状態の証拠としてそれを格納し、その時点より前のイベントおよび取引をメモリから消去してよい。
【0155】
[1165] システム例18:中央値または過半数を計算する動作の代わりに重み付き中央値または重み付き過半数が用いられ、メンバが自身の「ステーク」によって重み付けされる、システム例1におけるシステム。ステークは、メンバの投票がどの程度重視されるかを示す数である。ステークは、暗号通貨の持ち分、あるいは単にメンバが最初に招待され参加した時に割り当てられ、そのメンバが参加を招待する新たなメンバに分配された任意の数であってよい。十分なメンバがコンセンサス状態に合意し、彼らの合計ステークが既存のステークの過半数である場合、古いイベントは破棄され得る。メンバによって寄与されたランクの中央値を用いて全順序が計算される場合、その結果は、メンバの半数が高い方のランクを有し、半分が低い方のランクを有する数である。一方、重み付き中央値を用いて全順序が計算される場合、その結果は、合計ステークの約半分がそれより低いランクに関連し、半分がそれより高いランクに関連する数である。重み付き投票および中央値は、1人のメンバが、各々が招待するメンバによって制御される偽名にすぎない多数の「自作自演」ユーザを招待して参加させるシビル攻撃の防止に役立ち得る。招待するメンバが、招待された人に自身のステークを分配することを強いられる場合、自作自演は、コンセンサス結果を制御しようとする試みる攻撃者にとって役に立たない。したがって、いくつかの状況において、プルーフオブステークが役立ち得る。
【0156】
[1166] システム例19:単一の分散型データベースの代わりに、階層内に複数のデータベースが存在する、システム例1におけるシステム。たとえば、ユーザがそのメンバである単一のデータベースが存在し、次にいくつかのより小さなデータベース、または「チャンク」が存在してよく、その各々がメンバのサブセットを有する。イベントがチャンク内で発生すると、イベントはチャンクのメンバにわたり同期され、チャンク外のメンバには同期されない。その後、チャンク内でコンセンサス順序が決定された後、随時、その結果生じる状態(またはコンセンサス全順序を有するイベント)が大きいデータベースのメンバシップ全体に共有され得る。
【0157】
[1167] システム例20:状態を(たとえば、システムのメンバによって定義されたデータベース状態変数によって捕捉されたように)更新するためにソフトウェアを更新するイベントを有する能力を備えた、システム例11におけるシステム。たとえばイベントXおよびYは、それらのイベントにおける取引を読み取るソフトウェアコードに従って状態を修正し、その後、状態を適切に更新する取引を含んでよい。次にイベントZは、新たなバージョンのソフトウェアが利用可能であるという通知を含んでよい。全順序が、X、Z、Yの順序でイベントが発生することを述べる場合、状態は、Xにおける取引を古いソフトウェアによって処理し、Yにおける取引を新たなソフトウェアによって処理することによって更新され得る。しかしコンセンサス順序がX、Y、Zである場合、XおよびYは古いソフトウェアによって更新され、それによって異なる最終状態がもたらされ得る。したがって、そのような実施形態において、コミュニティが、いつ古いバージョンから新しいバージョンへ切り換えるかに関するコンセンサスを実現し得るように、コードをアップグレードする通知がイベント内で発生してよい。これにより、メンバが同期状態を維持することが確実になる。また、アップグレード中も、プロセスを再起動または再開する必要なく、システムが実行し続け得ることも確実になる。
【0158】
[1168] システム例21:上述したシステムは、最終的なコンセンサスをもたらす、分散型コンセンサスに関する効率的な収束メカニズムを作成および/または実現することが予想される。これに関していくつかの定理が、以下に示すように証明され得る。
【0159】
[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に行われる取引を匿名に保つことができる。
【0160】
[1170] アリスの第2のウォレット1002Bおよびボブの第2のウォレット1004Bは、インスタンス作成後は空であり、未だ分散型データベースの一部ではない。アリスは、自身の第1のウォレット1002Aから自身の第2のウォレット1002Bへの直接暗号通貨譲渡をポストし、そのような直接譲渡は、分散型データベースの他のメンバまたはユーザに対し可視である。同様に、ボブの第1のウォレット1004Aから彼の第2のウォレット1004Bへの暗号通貨の直接譲渡は、分散型データベースの他のメンバまたはユーザに対し可視である。
【0161】
[1171] 有利には、いくつかの例において、アリスおよびボブは、図10に示す譲渡プロトコルまたは動作のシーケンスを実行して、自身の第1のウォレットから自身の第2のウォレットへ匿名の譲渡を行うことができる。図10に示す動作のいくつかは上述される(たとえば、上述したTRANSFER_DOUBLEは、図10に示すTRANSFER2と機能的に同様である)。そのような例において、アリスは、ボブにスワップ要求1001を送信してよい。スワップ要求1001は、アリスの第1のウォレット1002Aの公開鍵A1、アリスが自身の第2のウォレット1002Bへ譲渡しようとするデジタル資産(たとえば暗号通貨)の金額を示す値C、(たとえば、匿名の譲渡に関連する一連の関連取引を識別するための)乱数識別子N、および満了タイムスタンプTを含んでよい。スワップ要求1001は、ボブへのプライベートメッセージを介して、および/または、公開フォーラム、公開台帳、分散型データベース、または他の適当な通信媒体へのスワップ要求のポストによって、アリスによって行われ得る。いくつかの例において、アリスは、自身の第1のウォレット1002Aに対応する秘密鍵A1’を用いてスワップ要求に署名してよく、それによってボブは、アリスの公開鍵A1を用いて、たとえばアリスがスワップ要求を行っていることを検証することができる。
【0162】
[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もボブへ送信してよい。
【0163】
[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も含んでよい。
【0164】
[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に関連するウォレットの所有権または関連付けに基づくものではない。
【0165】
[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’)に関連するコンピュータデバイスのアイデンティティ(たとえばアリスまたはボブ)は、アリスおよびボブを含むコンピュータデバイスのセットの中で隠される。
【0166】
[1176] ボブは、アリスによってポストされた譲渡コマンド1005に対応するおよび/または同一であり、かつボブの第1のウォレットに対応する秘密鍵B1’を用いて署名された譲渡コマンド1007をポストしてよい。具体的には、ボブは、アリスと同じ取引をポストするためにアリスと同じ分類(たとえば、公開鍵A2およびB2の辞書的分類)を実行してよい。あるいは、アリスは、譲渡コマンド1005をボブに送信するだけであってよく、ボブが、両方のシグネチャとともに単一の譲渡コマンド1007を分散型データベースにポストしてよい。その後、両方のシグネチャが有効であった場合、分散型データベースは、コンセンサスに至った時点で、ポストされた譲渡コマンドを実行してよい。よって、譲渡プロトコルのいくつかの例において、譲渡コマンド1005および1007の両方が分散型データベースにポストされ得るが、他の例において、譲渡コマンド1007のみが、両方のシグネチャとともに分散型データベースにポストされる。
【0167】
[1177] アリスおよびボブは、第2のウォレットの公開鍵A2およびB2の最小値および最大値を決定するものとして上述されたが、他の実装において、宛先レコードに関連する公開鍵A2およびB2を提示する順序を識別するために他の任意の決定論的分類が用いられ得る。したがって、アリスおよびボブの両者が以下を実行することができる。
S={A1,B1}
D=sortList({A2,B2})
Post/Send:Transfer2(S,D,C,N,T)
【0168】
[1178] 他のいくつかの例において、アリスおよびボブは、第三者(たとえば図10には示されないキャロル)へメッセージを送信してよく、それによってキャロルは、ボブおよび/またはアリスの代わりに分散型データベースに譲渡コマンドをポストする。また他の例において、第三者は、アリスとボブとの間の匿名性の譲渡に関連する通信のための仲介者として機能する。したがって、アリスおよび/またはボブが仲介者として第三者を用いる場合、彼らのレコード(すなわちウォレット)は、分散型データベースに含まれてよく、それらに関連する公開鍵は、アリスおよびボブに対応するコンピュータデバイスが分散型データベースを実装していない(または分散型データベースのサブセットおよび/または一部しか実装していない)場合でも、分散型データベースによって用いられ得る。そのような場合、分散型データベースの他のメンバ(たとえばキャロル)は、データベース動作の指標、たとえばアリスからの(デジタル資産の金額を示す)値Cの(スワップ要求1001と同様の)譲渡要求を受信し、キャロルがこの要求をボブへ受け渡してよい。その後ボブは、キャロルを介してアリスへ(スワップ応答1003と同様の)スワップ応答を送信することによってアリスに返答してよい。その後アリスおよびボブは、たとえば(譲渡コマンド1005および1007と同様の)彼らの譲渡コマンドなどのデータベース動作の指標をキャロルに提供してよく、キャロルは、要求されたデータベース動作(たとえば譲渡コマンド)を分散型データベースにポストしてよい。
【0169】
[1179] 他の例として、いくつかの例において、アリスに対応するコンピュータデバイスは分散型データベースを実装していないが、ボブに対応するコンピュータデバイスは実装している。そのような場合、アリスは、データベース動作の指標をキャロルへ送信してよく、キャロルは、対応する譲渡コマンドをアリスの代わりに分散型データベースにポストしてよい。言い換えると、分散型データベースは、分散型データベースを実装していないコンピュータデバイスによって所有されるレコード(すなわちウォレット)を含み、分散型データベースを実装するおよび/または分散型データベースのメンバである第三者コンピュータデバイスを介して、これらのレコードを用いる譲渡プロトコルを実行してよい。
【0170】
[1180] また他の例として、いくつかの例において、アリスおよび/またはボブは、分散型データベースの一部を実装および/または格納してよい。具体的には、第三者コンピュータデバイス(キャロル)が分散型データベースのメンバである、および/または分散型データベース全体を実装および/または格納する場合、アリスおよび/またはボブは、キャロルが格納しているものの一部を格納および/または保持してよい。例として、アリスは、自身の公開鍵に関連するレコードを格納することができるが、分散型データベースの他のユーザに関連するレコードを格納することができない。同様にボブは、自身の公開鍵に関連するレコードを格納することができるが、分散型データベースの他のユーザに関連するレコードを格納することができない。そのような例において、アリスおよびボが、分散型データベースの一部を格納するのに対し、キャロルは、分散型データベース全体にアクセスするためにアリスおよびボブの代理として機能してよい。
【0171】
[1181] いくつかの実装において、分散型データベースは、所与のウォレットがその中に隠されるウォレットのセット内のウォレットの数を表す、各ウォレットの整数「プールサイズ」を格納してよい。よって、観察者が、ウォレットXがN人の異なるメンバの1人によって所有されることしか知らない場合、どの程度強力に匿名化されているかを示すプールサイズNがそのウォレットに添付され得る。たとえば1002Aおよび1004Aなどの非匿名化ウォレットは、所有者が知られているので1のプールを有してよく、よって観察者は、ただ1人の個人のセットにアイデンティティを絞ることができる。他のウォレットは、そのようなウォレットに関してプロトコルが複数回実行された場合、より高度に匿名化され得る。たとえば、観察者が、ウォレットA1がPA1人の個人のうち1人によって所有されること、およびB1がPB1人の個人のうち1人によって所有されることを識別することができる場合、整数PA1はA1に関連し、整数PB1はB1に関連し得る。
【0172】
[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よりも大幅に大きくなるようなウォレットとの連動のみに同意し得る。
【0173】
[1183] いくつかの例において、メッセージ1001は、たとえばアリスが受諾する意思があるPB2の最小閾値を示すパラメータを含んでよい。したがってアリスは、たとえばPB1が最小閾値未満である場合、ボブとのスワップを継続しないことを決定してよい。
【0174】
[1184] いくつかの実装において、メッセージ1001、1003、1005、および/または1007の1または複数は、(1)ユーザコメントを表す文字列値、(2)メッセージが提出された日付および時間、(3)ユーザのウォレット(複数も可)から、メッセージまたは取引を提起またはポストするコンピュータデバイスのウォレットへ料金を移転する承認、(4)ユーザのウォレットから、コンピュータデバイスインターネットプロトコル(IP)アドレス(たとえば、TORネットワーク内のコンピュータデバイス)の匿名化に寄与するコンピュータデバイス(複数も可)への料金の移転の承認、および/または他の任意の適当なメタデータを含んでよい。
【0175】
[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)レコード(すなわちウォレット)から、譲渡コマンドをポストするための第三者として用いられたコンピュータデバイスのレコード(すなわちウォレット)へ料金を移転する承認を示すパラメータ、および他の適当なメタデータを含んでよい。
【0176】
[1186] 他の実装において、譲渡コマンド1005および1007は、図10に示すパラメータよりも少ない数のパラメータを含むように修正され得る。たとえば譲渡コマンド1005は、TRANSFER2(min(A2,B2),max(A2,B2),N,T)A1’として分散型データベースにポストされ、譲渡コマンド1007は、TRANSFER2(N,T)B1’としてポストされ得る。そのような場合、匿名譲渡に伴う一連の関連取引を独自に識別する乱数Nの独自性に頼ることによって、余分なパラメータによって消費される帯域幅が低減される。
【0177】
[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)のプールの中で、分散型データベースの他のメンバまたはユーザから隠されている。
【0178】
[1188] レベル2において、アリスは、図10を参照して説明された譲渡プロトコルをデイブと繰り返す。ボブは、譲渡プロトコルをキャロルと繰り返す。したがってレベル2において、アリスの第2のウォレット1105からウォレット1107または1109の1つへ複数のコインまたはデジタル資産額が譲渡され、アリスのウォレットは、4つのウォレット、すなわちウォレット1107、1109、1111、および1113の中で、分散型データベースの他のメンバまたはユーザから隠されている。アリスは、図10を参照して説明された譲渡プロトコルを繰り返し続けてよい。各レベルにおいて、アリスのウォレットは、指数関数的に増加するウォレットのプール内で隠される。たとえばレベル3において、アリスは、ハンクと譲渡プロトコルを繰り返し、アリスのウォレット1115は、8つのウォレットのプールに隠される。レベル4において、アリスは、オスカーと譲渡プロトコルを繰り返し、アリスのウォレット1117は、16のウォレットのプールに隠される。レベル40(図11には不図示)において、アリスのウォレットは、1兆を超えるウォレットのプールに隠される。
【0179】
[1189] 図11に示す譲渡プロトコルは、図12に示すように並列で同様に実行され得る。たとえばアリスは、譲渡が同時またはほぼ同時に実行されるように、ボブ、デイブ、ハンク、およびオスカーとの譲渡プロトコルを実行してよい。したがってアリスは、1201、1203、1205、および1207に示される譲渡プロトコルの動作を同時に実行および/またはポストしてよい。コンセンサス順序に至った時点で、金額Cのデジタル資産を譲渡するように設定されたウォレットの全てが少なくともそのような金額を有する場合、全ての譲渡が並列で実行される。金額Cのデジタル資産を譲渡するように設定されたウォレットの少なくとも1つがそのような金額を有さない場合、1201、1203、1205、および1207に示す譲渡プロトコルの動作の1または複数が、「アクティブ」状態で分散型データベースに格納され得る。したがって、「アクティブ」状態で格納された1201、1203、1205、および1207に示す譲渡プロトコルの動作は、金額Cのデジタル資産を有さなかったウォレットが少なくともそのような金額を有する、コンセンサス履歴内の最初の時点で実行され得る。
【0180】
[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に示す譲渡プロトコルの動作は却下される。
【0181】
[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のデジタル資産を取得するかに基づいてよい。これにより、取引が連続的に実行されることが可能でありながら、メンバ(たとえばアリス)は、複数の連続取引を分散型データベースに同時にポストすることができる。
【0182】
[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内の)時間に基づいて連続的順序で実行する。
【0183】
[1193] 定理例1:半順序においてイベントxがイベントyよりも先行する場合、所与の時間における所与のメンバの他のメンバに関する知識において、他のメンバの各々は、yより前にxの指標を受信するか、あるいはyの指標を未だ受信していない。
【0184】
[1194] 証明:半順序においてイベントxがイベントyよりも先行する場合、xはyの祖先である。メンバがyの指標を最初に受信する時、そのメンバは、先にxの指標を既に受信しているか(この場合、彼らはyより前にxを認識している)、あるいは同期がそのメンバにxおよびyの両方を提供する場合がある(この場合、単一の同期中に受信されるイベントは、システム例5に関して説明したように祖先関係と一致する順序で受信されていると考えられるので、彼らはその同期中にyより前にxを認識する)。証明終了。
【0185】
[1195] 定理例2:任意の所与のハッシュグラフに関して、半順序においてxがyよりも先行する場合、xは、そのハッシュグラフに関して計算された全順序においてyよりも先行する。
【0186】
[1196] 証明:半順序においてxがyに先行する場合、定理1によって、
【0187】
[1197] 全てのiに関し、rank(i,x)<rank(i,y)であり、
【0188】
[1198] ここでrank(i,x)は、メンバiによってイベントxに割り当てられたランクであり、xがメンバiによって受信された第1のイベントである場合、1であり、第2のイベントである場合、2であり、以下同様である。med(x)は全てのiにわたるrank(i,x)の中央値であり、med(y)についても同様であるものとする。
【0189】
[1199] 所与のkについて、rank(i1,x)がk番目に小さいxランクであり、rank(i2,y)がk番目に小さいyランクであるように、i1およびi2を選択する。すると、
【0190】
[1200] rank(i1,x)<rank(i2,y)である。
【0191】
[1201] これは、rank(i2,y)が、各々が対応するxランクよりも厳密に大きいyランクのk以上であるためである。したがって、rank(i2,y)はxランクの少なくともkよりも厳密に大きいので、k番目に小さいxランクよりも厳密に大きい。この論証は、あらゆるkに関して成り立つ。
【0192】
[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よりも先行する。証明終了。
【0193】
[1203] 定理例3:「ゴシップ期間」が、既存のイベントが同期を通して全てのメンバに伝搬する時間である場合、
【0194】
[1204] 1ゴシップ期間後:全てのメンバがイベントを受信する。
【0195】
[1205] 2ゴシップ期間後:全てのメンバが、これらのイベントの順序において合意する。
【0196】
[1206] 3ゴシップ期間後:全てのメンバが、合意に至ったことを知る。
【0197】
[1207] 4ゴシップ期間後:全てのメンバが、このコンセンサス順序を是認する、他の全てのメンバからのデジタルシグネチャを取得する。
【0198】
[1208] 証明:S0が、所与の時間T0までに作成および/または定義されたイベントのセットであるものとする。全てのメンバが最終的に他の全てのメンバと何度でも同期するものとすると、確率1の場合、最終的に、S0内のイベントが全てのメンバに拡散され全てのメンバがイベントを認識する時間T1が存在する。これは、第1のゴシップ期間の終了である。S1が、時間T1に存在し、T0には未だ存在しないイベントのセットであるものとする。確率1の場合、最終的に、時間T1に存在したセットS1内の全てのイベントを全てのメンバが受信する時間T2が存在する。これは、第2のゴシップ期間の終了である。同様に、T3は、T2までに存在するがT1以前には存在しないS2内の全イベントが全メンバに拡散される時間である。ただし、各ゴシップ期間は最終的に、確率1で終了する。平均して、n人のメンバがいる場合、各々は、Log2(n)回の同期を実行する限り継続する。
【0199】
[1209] 時間T1までに、全てのメンバがS0内の全てのイベントを受信する。
【0200】
[1210] 時間T2までに、所与のメンバであるアリスは、S0内の全てのイベントを受信している他のメンバの各々のレコードを受信する。したがってアリスは、全てのメンバに関するS0内の全てのアクションの(そのメンバがそのアクションを受信した順序である)ランクを計算し、ランクの中央値によってイベントを分類する。その結果生じる全順序は、S0内のイベントに関して変化しない。なぜなら、結果である順序は、これらのイベントの各々の指標を各メンバが最初に受信した順序の関数であり、これは変わることがないためである。アリスが計算した順序は、S0イベントの中に散在するS1からのいくつかのイベントを有する。これらのS1イベントは、S0イベントのシーケンス内のどこに含まれるかが変わることがある。しかし、S0内のイベントの相対的順序は変化しない。
【0201】
[1211] 時間T3までに、アリスは、S0およびS1のユニオンにおける全順序、およびそのユニオン内のイベントの相対的順序が変化しないことを学ぶ。彼女は更に、このシーケンス内でS1からの最先イベントを知ることができ、S0外の新たなイベントの挿入による場合でも、S1より前のイベントのシーケンスは変化しないと結論を下すことができる。したがって時間T3までに、アリスは、第1のS1イベントより前の履歴におけるイベントの順序に関してコンセンサスが実現されたと決定することができる。彼女は、この順序で発生するこれらのイベントの結果生じる(たとえばアリスによって定義されたデータベース状態変数によって捕捉された)状態のハッシュにデジタル署名し、彼女が作成および/または定義する次のイベントの一部としてシグネチャを送信することができる。
【0202】
[1212] 時間T4までに、アリスは、他のメンバから同様のシグネチャを受信する。その時点で、彼女は、シグネチャが証明する状態とともにそのシグネチャリストを保持するだけでよく、彼女が第1のS1イベントより前に格納したイベントを破棄してよい。証明終了。
【0203】
[1213] 本明細書で説明されるシステムは、迅速かつ安全にコンセンサスを実現する分散型データベースを説明する。これは、多数の応用例のための有用な構成ブロックであり得る。たとえば、取引が、1つの暗号通貨ウォレットから別のウォレットへの暗号通貨の譲渡を表す場合、かつ状態が単純に各ウォレット内の通貨額の記述である場合、このシステムは、既存のシステムにおける高費用のプルーフオブワークを回避する暗号通貨システムを継続する。現在の暗号通貨において一般的ではない機能を追加するための自動規則の実施がこれを可能にする。たとえば、ウォレットが特定の期間暗号通貨を送付も受取りもしない場合、そのウォレットは削除され、その価値が、現在持っている額に比例して他の既存のウォレットへ分配される規則を実施することによって、失われたコインが回復し、デフレーションが回避され得る。このような場合、ウォレットの秘密鍵が失われた場合でも、貨幣供給が膨張または収縮することはない。
【0204】
[1214] 他の例は、サーバ上でプレイされている多人数参加型オンライン(MMO)ゲームのように機能するが中央サーバを用いずに実現する分散型ゲームである。コンセンサスは、制御される任意の中央サーバがなくとも実現され得る。
【0205】
[1215] 他の例は、そのようなデータベースの上に構築されるソーシャルメディアのためのシステムである。取引はデジタル署名され、メンバが他のメンバに関する情報を受信することにより、現在のシステムに優る安全性および利便性の利点が提供される。たとえば、電子メールが偽造返信アドレスを有し得ないことにより、強力なスパム対策ポリシを有する電子メールシステムが実装され得る。そのようなシステムは、電子メール、ツイート、テキスト、フォーラム、ウィキ、および/または他のソーシャルメディアによって現在行われている機能を単一の分散型データベースに結合する統合ソーシャルシステムにもなり得る。
【0206】
[1216] 他のアプリケーションは、たとえばグループが全体として約定または文書に署名するグループデジタルシグネチャなど、より高度な暗号関数を含んでよい。この形式および他の形式の他者同時計算は、そのような分散型コンセンサスシステムを用いて有用に実装され得る。
【0207】
[1217] 他の例は、公開台帳システムである。誰でも金銭を支払ってシステム内に何らかの情報を格納することができ、システムに情報を格納するために年ごとにバイト当たり少額の暗号通貨(または実際の通貨)を支払う。これらの資金はその後、そのデータを格納するメンバ、およびコンセンサスを実現するために繰り返し同期して働くメンバに自動的に分配され得る。メンバが同期する度に、それらのメンバへ少額の暗号通貨を自動的に譲渡することができる。
【0208】
[1218] これらの例が示すように、分散型コンセンサスデータベースは、多数の応用例の構成要素として有用である。データベースは、高費用のプルーフオブワークを用いず、代わりにより安価なプルーフオブステークを用いるので、より小さなコンピュータまたはモバイルおよび埋込型デバイス上で動作するフルノードによって動作することができる。
【0209】
[1219] イベントは、前の2つのイベントのハッシュ(1つの自己ハッシュおよび1つの対外ハッシュ)を含むものとして上述されたが、他の実施形態において、メンバは、前の3つのイベントのハッシュ(1つの自己ハッシュおよび2つの対外ハッシュ)を含むイベントを作成および/または定義するために2人の他メンバと同期してよい。また他の実施形態において、任意の数のメンバからの前のイベントの任意の数のイベントハッシュがイベント内に含まれ得る。いくつかの実施形態において、異なるイベントは、前のイベントの異なる数のハッシュを含んでよい。たとえば、第1のイベントは2つのイベントハッシュを含んでよく、第2のイベントは3つのイベントハッシュを含んでよい。
【0210】
[1220] イベントは、前のイベントのハッシュ(または暗号ハッシュ値)を含むものとして上述されたが、他の実施形態において、イベントは、ポインタ、識別子、および/または前のイベントへの他の任意の適当な参照を含むように作成および/または定義されてよい。たとえばイベントは、前のイベントに関連し前のイベントを識別するために用いられるシリアル番号を含むことによってイベントをリンクさせるように作成および/または定義され得る。いくつかの実施形態において、そのようなシリアル番号はたとえば、イベントを作成および/または定義したメンバに関連する識別子(たとえば、メディアアクセス制御(MAC)アドレス、インターネットプロトコル(IP)アドレス、割当てアドレスなど)およびそのメンバによって定義されたイベントの順序を含んでよい。たとえば、識別子10を有するメンバは、そのメンバによって作成および/または定義された15番目のイベントの場合、そのイベントに識別子1015を割り当ててよい。他の実施形態において、イベントに識別子を割り当てるために他の任意の適当なフォーマットが用いられ得る。
【0211】
[1221] 他の実施形態において、イベントは、暗号ハッシュ全部を含んでよいが、それらのハッシュの一部のみが同期中に伝送される。たとえば、ハッシュHを含むイベントをアリスがボブへ送信し、JがHの第1の3バイトであり、アリスが、自身が格納しているイベントおよびハッシュのうち、HはJから始まる唯一のハッシュであることを決定すると、アリスは、同期中に、HではなくJを送信してよい。その後ボブが、Jから始まる他のハッシュを自身が有することを決定すると、ボブはアリスに応答し、H全部を要求する。このように、ハッシュは伝送中に圧縮され得る。
【0212】
[1222] 図示され上述されたシステム例は、他のシステムに関して説明されるが、他の実施形態において、システム例およびそれらの関連機能の任意の組み合わせが、分散型データベースを作成および/または定義するために実装され得る。たとえば、システム例1、システム例2、およびシステム例3は、分散型データベースを作成および/または定義するために組み合わせられ得る。他の例として、いくつかの実施形態において、システム例10は、システム例1を伴うがシステム例9を伴わずに実装され得る。また他の例として、システム例7は、システム例6と組み合わせられ、実装され得る。また他の実施形態において、他の任意の適当なシステム例の組み合わせが実装され得る。
【0213】
[1223] 様々な実施形態が上述されたが、それらは限定ではなく例示的に提示されたものにすぎないことを理解すべきである。上述した方法が、特定の順序で発生する特定のイベントを含む場合、特定のイベントの順序は変更され得る。また、いくつかのイベントは、上述したように連続的に実行されるのと同様に、可能であれば並列プロセスで同時に実行されてよい。
【0214】
[1224] 本明細書で説明される実施形態のいくつかは、様々なコンピュータ実装動作を実行するための命令またはコンピュータコードを有する(非一時的プロセッサ可読媒体とも称され得る)非一時的コンピュータ可読媒体を備えるコンピュータストレージ製品に関する。コンピュータ可読媒体(またはプロセッサ可読媒体)は、一時的な伝搬信号(たとえば、空間またはケーブルなどの伝送媒体において情報を搬送する伝搬電磁波)自体を含むものではないという意味で、非一時的である。媒体および(コードとも称され得る)コンピュータコードは、特定の1または複数の目的のために設計および構成されたものであってよい。非一時的コンピュータ可読媒体の例は、たとえばハードディスク、フロッピーディスク、および磁気テープなどの磁気記憶媒体、たとえばコンパクトディスク/デジタルビデオディスク(CD/DVD)、コンパクトディスク読取専用メモリ(CD-ROM)、およびホログラフィックデバイスなどの光記憶媒体、たとえば光ディスクなどの光磁気記憶媒体、モジュールを処理する搬送波信号、および、たとえば特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、読取専用メモリ(ROM)、およびランダムアクセスメモリ(RAM)デバイスなど、プログラムコードを格納および実行するように特に構成されたハードウェアデバイスを含むが、これに限定されない。本明細書で説明される他の実施形態は、たとえば本明細書で説明される命令および/またはコンピュータコードを含むことができるコンピュータプログラム製品に関する。
【0215】
[1225] コンピュータコードの例は、マイクロコードまたはマイクロ命令、たとえばコンパイラによって生成されるような機械命令、ウェブサービスを生成するために用いられるコード、およびインタープリタを用いてコンピュータによって実行される高レベル命令を含むファイルを含むが、これに限定されない。たとえば実施形態は、命令型プログラミング言語(たとえばC、Fortranなど)、関数型プログラミング言語(たとえばHaskell、Erlangなど)、論理型プログラミング言語(たとえばProlog)、オブジェクト指向プログラミング言語(たとえばJava、C++など)、または他の適当なプログラミング言語および/または開発ツールを用いて実装され得る。コンピュータコードの追加の例は、制御信号、暗号化コード、および圧縮コードを含むが、これに限定されない。
【0216】
[1226] 様々な実施形態が上述されたが、それらは限定ではなく例示的に提示されたものにすぎず、形式および細部における様々な変更がなされ得ることを理解すべきである。本明細書で説明される装置および/または方法の任意の一部は、相互排他的な組み合わせを除き、任意の組み合わせで組み合わせられてよい。本明細書で説明される実施形態は、説明された様々な実施形態の機能、構成要素、および/または特徴の様々な組み合わせおよび/または部分的組み合わせを含んでよい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13A
図13B
図14A
図14B
【手続補正書】
【提出日】2021-11-18
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のコンピュータデバイスに動作可能に結合されたネットワークを介して、分散型データベースを実装する前記複数のコンピュータデバイスに含まれるように構成された第1のコンピュータデバイスにおける前記分散型データベースのインスタンスの部分であって、前記分散型データベースは、前記第1のコンピュータデバイスに関連する第1の公開鍵に論理的に関連付けられた第1のソースレコードと、前記第1のコンピュータデバイスに関連する第2の公開鍵に論理的に関連付けられた第1の宛先レコードとを含む、部分と、
前記分散型データベースの前記インスタンスの前記部分に動作可能に結合された前記第1のコンピュータデバイスのプロセッサと
を備え、前記プロセッサは、
第2のコンピュータデバイスから、前記第2のコンピュータデバイスに関連する第1の公開鍵であって、第2のソースレコードに論理的に関連付けられた第1の公開鍵と、前記第2のコンピュータデバイスに関連する第2の公開鍵であって、第2の宛先レコードに論理的に関連付けられた第2の公開鍵とを受信し、
前記第1のコンピュータデバイスに関連する前記第2の公開鍵と前記第2のコンピュータデバイスに関連する前記第2の公開鍵との間に決定論的分類を実行することによって譲渡コマンドを定義し、
前記決定論的分類に基づいて、前記第1のソースレコードから、前記第1の宛先レコードまたは前記第2の宛先レコードのうちの一方へ値を譲渡し、かつ、前記決定論的分類に基づいて、前記第2のソースレコードから、前記第1の宛先レコードまたは前記第2の宛先レコードのうちの他方へ前記値を譲渡するように構成された前記譲渡コマンドを前記分散型データベースにポストするための信号を送信するように構成される、装置。
【請求項2】
前記決定論的分類は、辞書的分類である、請求項1に記載の装置。
【請求項3】
前記プロセッサは、時間閾値より前にコンセンサスプロトコルによって前記分散型データベースが収束に至らなかった場合、前記譲渡コマンドが破棄されるように調整する前記時間閾値の指標を含むように前記譲渡コマンドを定義するように構成される、請求項1に記載の装置。
【請求項4】
前記プロセッサは、前記値の指標を含むように前記譲渡コマンドを定義するように構成される、請求項1に記載の装置。
【請求項5】
前記値は、デジタル資産の金額に対応する、請求項1に記載の装置。
【請求項6】
前記プロセッサは、前記譲渡コマンドを実行する前に、前記第1のソースレコードおよび前記第2のソースレコードの各々が少なくとも前記値を有することを検証するように構成される、請求項1に記載の装置。
【請求項7】
前記譲渡コマンドは、、前記第1のコンピュータデバイスに関連する前記第1の公開鍵とペアである秘密鍵と、前記第2のコンピュータデバイスに関連する前記第1の公開鍵とペアである秘密鍵とによって署名される、請求項1に記載の装置。
【請求項8】
前記プロセッサは、前記第1のコンピュータデバイスに関連する前記第1の公開鍵で暗号化された暗号化公開鍵として、前記第2のコンピュータデバイスに関連する前記第2の公開鍵を受信するように構成される、請求項1に記載の装置。
【請求項9】
複数のコンピュータデバイスに動作可能に結合されたネットワークを介して、第1の公開鍵に論理的に関連付けられた第1のソースレコードと、第2の公開鍵に論理的に関連付けられた第1の宛先レコードと、第3の公開鍵に論理的に関連付けられた第2のソースレコードと、第4の公開鍵に論理的に関連付けられた第2の宛先レコードとを含む分散型データベースを実装する前記複数のコンピュータデバイスに含まれるように構成されたコンピュータデバイスにおける前記分散型データベースのインスタンスと、
前記分散型データベースの前記インスタンスに動作可能に結合された前記コンピュータデバイスのプロセッサと
を備え、前記プロセッサは、
前記第3の公開鍵および前記第4の公開鍵の決定論的分類に基づいて、前記第1のソースレコードから、前記第1の宛先レコードまたは前記第2の宛先レコードのうちの一方へ値を譲渡し、かつ、前記決定論的分類に基づいて、前記第2のソースレコードから、前記第1の宛先レコードまたは前記第2の宛先レコードのうちの他方へ前記値を譲渡するために譲渡コマンドを含むデータベース動作の指標を受信し、
前記値が前記第1のソースレコードおよび前記第2のソースレコードから減少され、かつ、前記値が前記第1の宛先レコードおよび前記第2の宛先レコードに追加されるように前記譲渡コマンドを、前記分散型データベースの前記インスタンスにおいて実行するように構成される、装置。
【請求項10】
前記コンピュータデバイスは第1のコンピュータデバイスであり、前記第1の公開鍵は第2のコンピュータデバイスの第1の公開鍵とペアであり、前記第2の公開鍵は前記第2のコンピュータデバイスの第2の公開鍵とペアであり、前記第3の公開鍵は第3のコンピュータデバイスの第1の公開鍵とペアであり、前記第4の公開鍵は前記第3のコンピュータデバイスの第2の公開鍵とペアである、請求項9に記載の装置。
【請求項11】
前記決定論的分類は、辞書的分類である、請求項9に記載の装置。
【請求項12】
前記譲渡コマンドは、前記値の指標を含む、請求項9に記載の装置。
【請求項13】
前記値は、デジタル資産の金額に対応する、請求項9に記載の装置。
【請求項14】
前記譲渡コマンドは、時間閾値より前にコンセンサスプロトコルによって前記分散型データベースが収束に至らなかった場合、前記譲渡コマンドが破棄されるように調整する前記時間閾値の指標を含む、請求項9に記載の装置。
【請求項15】
分散型データベースのインスタンスの部分を有する第1のコンピュータデバイスであって、複数のコンピュータデバイスに動作可能に結合されたネットワークを介して、前記分散型データベースを実装する前記複数のコンピュータデバイスに含まれるように構成された第1のコンピュータデバイスのプロセッサにおいて、複数のコンピュータデバイスのうちの第2のコンピュータデバイスから、前記第2のコンピュータデバイスの第1の公開鍵と、前記第2のコンピュータデバイスの前記第1の公開鍵に論理的に関連付けられた第1のソースレコードから譲渡されるように要求された値の指標とを受信することであって、前記分散型データベースは、前記第1のコンピュータデバイスの第1の公開鍵に論理的に関連付けられた第2のソースレコードを含む、受信することと、
前記第1のコンピュータデバイスの暗号化された第2の公開鍵を定義するために前記第2のコンピュータデバイスの前記第1の公開鍵で前記第1のコンピュータデバイスの第2の公開鍵を暗号化することであって、前記第1のコンピュータデバイスの前記第2の公開鍵は第1の宛先レコードに論理的に関連付けられる、暗号化することと、
前記第2のコンピュータデバイスに前記第1のコンピュータデバイスの前記暗号化された第2の公開鍵を送信することと、
前記値の前記指標と、前記第1のコンピュータデバイスの前記第1の公開鍵と、前記第2のコンピュータデバイスの前記第1の公開鍵と、前記第1のコンピュータデバイスの前記第2の公開鍵と、前記第2のコンピュータデバイスの第2の公開鍵と、第2の宛先レコードに論理的に関連付けられた前記第2のコンピュータデバイスの前記第2の公開鍵とを含む譲渡コマンドを定義することと、
前記譲渡コマンドを前記分散型データベースにポストするための信号を送信することであって、前記譲渡コマンドは、前記第1のソースレコードから、前記第1の宛先レコードまたは前記第2の宛先レコードのうちの一方へ前記値を譲渡し、かつ、前記第2のソースレコードから、前記第1の宛先レコードまたは前記第2の宛先レコードのうちの他方へ前記値を譲渡するように構成される、送信することと、を含む方法。
【請求項16】
前記譲渡コマンドを定義することは、前記第1のコンピュータデバイスの前記第2の公開鍵と前記第2のコンピュータデバイスの前記第2の公開鍵との間に辞書的分類を実行することを含む、請求項15に記載の方法。
【請求項17】
前記定義することは、時間閾値より前にコンセンサスプロトコルによって前記分散型データベースが収束に至らなかった場合、前記譲渡コマンドが破棄されるように調整する前記時間閾値の指標を含むように前記譲渡コマンドを定義することを含む、請求項15に記載の方法。
【請求項18】
前記定義することは、前記値の指標を含むように前記譲渡コマンドを定義することを含む、請求項15に記載の方法。
【請求項19】
前記値は、デジタル資産の金額に対応する、請求項15に記載の方法。
【請求項20】
前記譲渡コマンドは、実行される前に、前記第1のコンピュータデバイスに関連する前記第1の公開鍵とペアである秘密鍵と、前記第2のコンピュータデバイスに関連する前記第1の公開鍵とペアである秘密鍵とによって署名される、請求項15に記載の方法。
【外国語明細書】