JP2023515369A - 分散型データベース - Google Patents
分散型データベース Download PDFInfo
- Publication number
- JP2023515369A JP2023515369A JP2022548673A JP2022548673A JP2023515369A JP 2023515369 A JP2023515369 A JP 2023515369A JP 2022548673 A JP2022548673 A JP 2022548673A JP 2022548673 A JP2022548673 A JP 2022548673A JP 2023515369 A JP2023515369 A JP 2023515369A
- Authority
- JP
- Japan
- Prior art keywords
- node
- nodes
- database
- transaction
- core
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000010410 layer Substances 0.000 claims abstract description 241
- 238000000034 method Methods 0.000 claims abstract description 143
- 239000012792 core layer Substances 0.000 claims abstract description 54
- 230000015654 memory Effects 0.000 claims description 54
- 238000005065 mining Methods 0.000 claims description 49
- 238000012545 processing Methods 0.000 claims description 44
- 238000004891 communication Methods 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 11
- 238000013479 data entry Methods 0.000 claims description 5
- 238000004590 computer program Methods 0.000 claims description 4
- 238000012360 testing method Methods 0.000 claims description 3
- 238000013515 script Methods 0.000 description 49
- 230000006870 function Effects 0.000 description 17
- 230000035772 mutation Effects 0.000 description 17
- 230000000644 propagated effect Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 11
- 235000008694 Humulus lupulus Nutrition 0.000 description 10
- 238000012217 deletion Methods 0.000 description 9
- 230000037430 deletion Effects 0.000 description 9
- 230000001010 compromised effect Effects 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 238000005192 partition Methods 0.000 description 8
- 230000009471 action Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 230000008520 organization Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 230000010076 replication Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000005056 compaction Methods 0.000 description 4
- 230000003993 interaction Effects 0.000 description 4
- 238000010200 validation analysis Methods 0.000 description 4
- 241000700566 Swinepox virus (STRAIN KASZA) Species 0.000 description 3
- 230000001902 propagating effect Effects 0.000 description 3
- 230000008439 repair process Effects 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 239000003550 marker Substances 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000000116 mitigating effect Effects 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000428 dust Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003012 network analysis Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3236—Cryptographic 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 using cryptographic hash functions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3247—Cryptographic 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic 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/3297—Cryptographic 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 time stamps, e.g. generation of time stamps
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/56—Financial cryptography, e.g. electronic payment or e-cash
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
階層化ネットワークにおいて実行される方法。階層化ネットワークは、1つまたは複数のコアノードを含むコア層と、各々が1つまたは複数の中間層ノードを含む1つまたは複数の中間層と、各々が1つまたは複数の外層ノードを含む1つまたは複数の外層とを含む。各コアノードは、ブロックチェーンネットワークのノードである。少なくともいくつかの中間層ノードはデータベースノードである。少なくともいくつかの外層ノードはクライアントノードである。各データベースノードは、分散型データベースの少なくとも一部を記憶する。方法は、データベースノードにおいて、データベースエントリを更新することを要求する1つまたは複数の更新要求を1つまたは複数のクライアントノードから受信すること、各更新要求について、ローカルに更新を適用すること、および/または別のデータベースノードにフォワードすることを含む。1つまたは複数の更新要求の指示を含む少なくとも1つのトランザクションも、ブロックチェーンネットワークのブロックチェーン上に記録される。
Description
本開示は、データベースに対する状態の変化を記録するためのブロックチェーンと共に実装される分散型データベースに関する。
ブロックチェーンは、分散型データ構造の形態を指し、ブロックチェーンの複製コピーが、ピアツーピア(P2P)ネットワーク内の複数のノードの各々において維持される。ブロックチェーンは、データブロックのチェーンを含み、各ブロックは1つまたは複数のトランザクションを含む。各トランザクションは、1つまたは複数のブロックにまたがり得るシーケンス内の先行トランザクションを指し示し得る。トランザクションは、新しいブロックに含まれるためにネットワークにサブミットされ得る。新しいブロックは、「マイニング」として知られるプロセスによって作成され、このプロセスは、複数のマイニングノードがそれぞれ、「プルーフオブワーク」を実行しようと競うこと、すなわち、ブロックに含まれるのを待っている保留中のトランザクションのプールに基づいて暗号パズルを解くことを伴う。
ネットワーク内の各ノードは、フォワード、マイニング、および記憶という3つの役割のうちのいずれか1つ、2つ、またはすべてを担うことができる。フォワーディングノードは、ネットワークのノード全体にトランザクションを伝搬する。マイニングノードは、ブロックへのトランザクションのマイニングを実行する。ストレージノードは各々が、ブロックチェーンのマイニングされたブロックのそれら自体のコピーを記憶する。ブロックチェーンにトランザクションを記録させるために、当事者は、伝搬されるべきネットワークのノードのうちの1つにトランザクションを送信する。トランザクションを受信するマイニングノードは、トランザクションを新しいブロックにマイニングしようと競い合い得る。各ノードは、同じノードプロトコルを尊重するように構成され、そのノードプロトコルには、トランザクションが有効であるための1つまたは複数の条件が含まれる。無効なトランザクションは、伝搬もブロックへのマイニングもされない。トランザクションが妥当性確認(validate)され、それによってブロックチェーン上に受け入れられたと仮定すると、トランザクション(任意のユーザデータを含む)は、不変の公開記録としてP2Pネットワーク内のノードの各々に記憶されたままになる。
プルーフオブワークパズルを解くのに成功して最新のブロックを作成したマイナーは、典型的に、新しい額のデジタル資産を生成する「生成トランザクション」と呼ばれる新しいトランザクションで報酬が与えられる。ブロックをマイニングするためには大量の計算リソースを必要とし、二重支出の試みを含むブロックは他のノードによって受け入れられない可能性が高いので、プルーフオブワークは、それらのブロックに二重支出トランザクションを含めることによって、マイナーがシステムで不正を行わないためのインセンティブを与える。
「出力ベース」のモデル(UTXOベースモデルと呼ばれることもある)では、所与のトランザクションのデータ構造は、1つまたは複数の入力と1つまたは複数の出力とを含む。任意の使用可能な出力は、デジタル資産の額を指定する要素を含み、これはUTXO(「未使用トランザクション出力」)と呼ばれることもある。出力は、出力を償還するための条件を指定するロックスクリプトをさらに含み得る。各入力は、先行トランザクションにおけるそのような出力へのポインタを含み、指し示された出力のロックスクリプトをロック解除するためのロック解除スクリプトをさらに含み得る。そのため、トランザクションのペアを考慮して、それらを第1のトランザクションおよび第2のトランザクション(または「ターゲット」トランザクション)と呼ぶ。第1のトランザクションは、デジタル資産の額を指定するとともに、出力をロック解除する1つまたは複数の条件を定義するロックスクリプトを含む少なくとも1つの出力を含む。第2のターゲットトランザクションは、第1のトランザクションの出力へのポインタを含むとともに、第1のトランザクションの出力をロック解除するためのロック解除スクリプトを含む少なくとも1つの入力を含む。
そのようなモデルでは、第2のターゲットトランザクションがP2Pネットワークに送られて伝搬されブロックチェーンに記録されるとき、各ノードで適用される有効性の基準のうちの1つは、ロック解除スクリプトが第1のトランザクションのロックスクリプトで定義された1つまたは複数の条件のすべてを満たすことである。もう1つは、第1のトランザクションの出力が別の先の有効なトランザクションによってまだ償還されていないということである。これらの条件のいずれかにしたがってターゲットトランザクションが無効であることを発見したノードは、それを伝搬することも、ブロックチェーンに記録されるブロックへとマイニングするために含めることもしない。
別のタイプのトランザクションモデルは、アカウントベースのモデルである。この場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行トランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって、転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって記憶され、絶えず更新される。
従来、ブロックチェーンにおけるトランザクションは、デジタル資産、すなわちいくつかのデジタルトークンを通信するために使用される。しかしながら、ブロックチェーンは、ブロックチェーンの上に追加の機能を重ねるために活用することもできる。例えば、ブロックチェーンプロトコルは、トランザクションの出力における追加のユーザデータの記憶を可能にし得る。最新のブロックチェーンでは、単一のトランザクション内に記憶可能な最大データ容量が増えており、より複雑なデータを組み込むことが可能である。例えば、これを使用して、ブロックチェーンに電子文書を記憶したり、さらにはオーディオまたはビデオデータを記憶したりすることができる。
本開示は、分散型データベースが、コアにブロックチェーンネットワークのノードを有する階層化ネットワークの複数のノードにわたって実装され、データベースに対する状態の変化がブロックチェーンネットワークのブロックチェーン上に記録される方式を提供する。
本明細書で開示される一態様によれば、階層化ネットワークにおいて実装される分散型データベースを動作させる方法が提供される。階層化ネットワークは、1つまたは複数のコアノードを含むコア層と、各々が1つまたは複数の中間層ノードを含む1つまたは複数の中間層と、各々が1つまたは複数の外層ノードを含む1つまたは複数の外層とを含む。コアノードの各々は、ブロックチェーンネットワークのノードであり、中間層ノードのうちの少なくともいくつかは、分散型データベースのデータベースノードであり、外層ノードのうちの少なくともいくつかは、分散型データベースのクライアントノードであり、各データベースノードは、分散型データベースの少なくとも一部を記憶する。方法は、データベースノードの第1のデータベースノードにおいて、各々が分散型データベース内のそれぞれのターゲットエントリを更新する要求である1つまたは複数の更新要求を、クライアントノードのうちの1つまたは複数から受信することと、受信された更新要求の各々について、上記第1のデータベースノードに記憶されたデータベースの一部においてそれぞれのターゲットエントリが見つかるかどうかを決定し、見つかった場合には、第1のデータベースノードに記憶されたデータベースの一部におけるそれぞれのターゲットエントリへの更新要求の更新を行い、見つからなかった場合には、それぞれのターゲットエントリを含むデータベースの一部を記憶するデータベースノードのうちの別のデータベースノードに要求をフォワードすることとを含む。加えて、1つまたは複数の更新要求の指示を含む少なくとも1つのトランザクションも、ブロックチェーンネットワークのブロックチェーン上に記録される。
本開示の実施形態の理解を助け、そのような実施形態がどのように実施され得るかを示すために、単なる例として添付の図面を参照する。
ブロックチェーンを実装するためのシステムの概略ブロック図である。
ブロックチェーンに記録され得るトランザクションのいくつかの例を概略的に示す。
階層化ネットワークの例の概略図である。
階層化ネットワークの例の別の概略図である。
階層化の例の別の概略図である。
階層化ネットワークの例の別の概略図である。
階層化ネットワークにおいて実装される例示的な証明サービスを概略的に示す。
ブロックチェーン上にデータ項目の順序を記録するための例示的なトランザクションの概略的なトランザクション図である。
トランザクション内のデータ項目のセットの順序を記録するための例示的なインデックス付きリストを概略的に示す。
トランザクション内のデータ項目のセットの順序を記録するためのインデックス付きリストの別の例を概略的に示す。
トランザクション内のデータ項目のセットの順序を記録するためのインデックス付きリストの別の例を概略的に示す。
階層化ネットワークにおいて実装された分散型データベースの例を概略的に示す。
比較としてカサンドラ(Cassandra)データベースクラスタのアーキテクチャの例を概略的に示す。
カサンドラクラスタグラフの異なる通信経路を概略的に示す。
書き込み要求中の単一のカサンドラノードの大まかな(high-level)アーキテクチャの概略ブロック図である。
完全なネットワークのクラスタ(左側)からブロックチェーン階層化ネットワーク(右側)への遷移を概略的に示す。
分散型データベースノードのクラスタと、データベースによって支えられるシステムのユーザとを含むブロックチェーン階層化ネットワーク(BLN)を概略的に示す。
PKIが少なくとも層i=2,3に実装されているBLN実装分散型データベースの例を概略的に示す。
ブロックチェーン上にデータベース更新の指示を記録するための読み取り/書き込みトランザクションの例を概略的に示す。
BLN実装分散型データベース(BLNiDD)の例示的アーキテクチャにおける読み取り/書き込みパスを概略的に示す。
ヒンテッドハンドオフトランザクションの例を概略的に示す。
例示的なシステムの概要
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイネットワーク106を形成するように構成された複数のノード104を含む。ブロックチェーンネットワーク106の各ノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるノードは異なるピアに属する。各ノード104は、1つまたは複数のプロセッサ、例えば1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を備える。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を使用する1つまたは複数のメモリユニットを含み得る。
図1は、ブロックチェーン150を実装するための例示的なシステム100を示す。システム100は、典型的にはインターネットなどの広域インターネットワークであるパケット交換ネットワーク101を含む。パケット交換ネットワーク101は、パケット交換ネットワーク101内にピアツーピア(P2P)オーバーレイネットワーク106を形成するように構成された複数のノード104を含む。ブロックチェーンネットワーク106の各ノード104は、ピアのコンピュータ機器を含み、ノード104のうちの異なるノードは異なるピアに属する。各ノード104は、1つまたは複数のプロセッサ、例えば1つまたは複数の中央処理装置(CPU)、アクセラレータプロセッサ、特定用途向けプロセッサおよび/またはフィールドプログラマブルゲートアレイ(FPGA)を含む処理装置を備える。各ノードはまた、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。メモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、ソリッドステートドライブ(SSD)、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を使用する1つまたは複数のメモリユニットを含み得る。
ブロックチェーン150は、データブロック151のチェーンを含み、ブロックチェーン150のそれぞれのコピーは、P2Pネットワーク160内の複数のノードの各々において維持される。チェーン内の各ブロック151は、1つまたは複数のトランザクション152を含み、この文脈におけるトランザクションは、データ構造の一種を指す。データ構造の性質は、トランザクションモデルまたは方式の一部として使用されるトランザクションプロトコルのタイプに依存する。所与のブロックチェーンは、典型的には、全体を通して1つの特定のトランザクションプロトコルを使用する。1つの一般的なタイプのトランザクションプロトコルでは、各トランザクション152のデータ構造は、少なくとも1つの入力と少なくとも1つの出力とを含む。各出力は、出力が暗号的にロックされている(ロック解除され、それによって償還または使用されるためにはそのユーザの署名を必要とする)ユーザ103に属するデジタル資産の量を表す額を指定する。各入力は、先行トランザクション152の出力を指し示し、それによってトランザクションをリンクする。
ノード104のうちの少なくともいくつかは、トランザクション152をフォワードし、それによって伝搬するフォワーディングノード104Fの役割を引き受ける。ノード104のうちの少なくともいくつかは、ブロック151をマイニングするマイナー104Mの役割を引き受ける。ノード104のうちの少なくともいくつかは、ストレージノード104S(「フルコピー」ノードと呼ばれることもある)の役割を引き受け、その各々が、同じブロックチェーン150のそれぞれのコピーをそれぞれのメモリに記憶する。各マイナーノード104Mはまた、ブロック151にマイニングされるのを待っているトランザクション152のプール154を維持する。所与のノード104は、フォワーディングノード104、マイナー104M、ストレージノード104S、またはこれらのうちの2つもしくはすべての任意の組合せであり得る。
所与の現在のトランザクション152jにおいて、入力(または各入力)は、トランザクションのシーケンスにおける先行トランザクション152iの出力を参照するポインタを含み、この出力が現在のトランザクション152jにおいて償還または「使用」されるべきであることを指定する。一般に、先行トランザクションは、プール154または任意のブロック151内の任意のトランザクションであり得る。先行トランザクション152iは、現在のトランザクションが有効となるために存在および妥当性確認される必要があるが、先行トランザクション152iは、現在のトランザクション152jが作成されるときまたはネットワーク106に送信されるときに必ずしも存在する必要はない。したがって、本明細書における「先行する(preceding)」は、ポインタによってリンクされた論理シーケンスにおける先行するものを指し、必ずしも時間シーケンスにおける作成または送信の時間を指すものではなく、したがって、トランザクション152i、152jが順不同に作成または送信されることを必ずしも除外するものではない(オーファントランザクションに関する以下の説明を参照)。先行トランザクション152iは、先のトランザクション(antecedent transaction)または先行したトランザクション(predecessor transaction)とも呼ばれる。
現在のトランザクション152jの入力はまた、先行トランザクション152iの出力がロックされるユーザ103aの署名を含む。次に、現在のトランザクション152jの出力は、新しいユーザ103bに暗号的にロックされ得る。したがって、現在のトランザクション152jは、先行トランザクション152iの入力において定義された額を、現在のトランザクション152jの出力において定義されたように、新しいユーザ103bに転送することができる。場合によっては、トランザクション152は、複数のユーザ(残り(change)を与えるためにそのうちの1人が元のユーザ103aであり得る)間で入力額を分割するために複数の出力を有し得る。場合によっては、トランザクションはまた、1つまたは複数の先行トランザクションの複数の出力からの額をまとめ、現在のトランザクションの1つまたは複数の出力に再分配するために複数の入力を有することができる。
上記は、「出力ベース」トランザクションプロトコルと呼ばれ得、未使用トランザクション出力(UTXO)タイププロトコルと呼ばれることもある(ここでは出力はUTXOと呼ばれる)。ユーザの総残高は、ブロックチェーンに記憶された任意の1つの数字で定義されるのではなく、代わりに、ユーザは、ブロックチェーン151内の多くの異なるトランザクション152全体に散在しているそのユーザのすべてのUTXOの値を照合するための特別な「ウォレット」アプリケーション105を必要とする。
別のタイプのトランザクションプロトコルは、アカウントベースのトランザクションモデルの一部として、「アカウントベース」プロトコルと呼ばれ得る。アカウントベースの場合、各トランザクションは、過去のトランザクションのシーケンスにおける先行トランザクションのUTXOを参照することによってではなく、絶対アカウント残高を参照することによって、転送されるべき額を定義する。すべてのアカウントの現在の状態は、ブロックチェーンとは別個のマイナーによって記憶され、絶えず更新される。このようなシステムでは、トランザクションは、アカウントの実行中のトランザクションタリー(「ポジション」とも呼ばれる)を使用して順序付けられる。この値は、送信者によってその暗号署名の一部として署名され、トランザクション参照計算の一部としてハッシュされる。加えて、任意選択のデータフィールドもトランザクションにおいて署名され得る。このデータフィールドは、例えば、前のトランザクションIDがデータフィールドに含まれている場合、前のトランザクションを指し示し得る。
いずれのタイプのモデルにおいても、ユーザ103が新しいトランザクション152jを成立させることを望む場合、ユーザは、新しいトランザクションをユーザのコンピュータ端末102からP2P妥当性確認ネットワーク106のノード104(これは、今日では典型的にはサーバまたはデータセンタであるが、原則として他のユーザ端末であってもよい)のうちの1つに送信する。このノード104は、ノード104の各々において適用されるノードプロトコルにしたがってトランザクションが有効であるかどうかをチェックする。ノードプロトコルの詳細は、当該ブロックチェーン150において使用されているトランザクションプロトコルのタイプに対応し、全体としてトランザクションモデルを形成する。ノードプロトコルは、典型的には、新しいトランザクション152j内の暗号署名が、トランザクション152の順序付けられたシーケンス内で前のトランザクション152iに依存する予想される署名と一致することをチェックするようにノード104に求める。出力ベースの場合、これは、新しいトランザクション152jの入力に含まれるユーザの暗号署名が、新しいトランザクションが使用する先行トランザクション152iの出力において定義される条件と一致することをチェックすることを含み得、この条件は、典型的には、新しいトランザクション152jの入力における暗号署名が、新しいトランザクションの入力が指し示す前のトランザクション152iの出力をロック解除することをチェックすることを少なくとも含む。いくつかのトランザクションプロトコルでは、条件は、入力および/または出力に含まれるカスタムスクリプトによって少なくとも部分的に定義され得る。代替的に、単にノードプロトコルのみによって固定されてもよく、またはこれらの組合せによるものであってもよい。いずれにしても、新しいトランザクション152jが有効である場合、現在のノードは、それをP2Pネットワーク106内のノード104のうちの1つまたは複数の他のノードにフォワードする。これらのノード104のうちの少なくともいくつかは、フォワーディングノード104Fとしても機能し、同じノードプロトコルにしたがって同じテストを適用し、そして、新しいトランザクション152jを1つまたは複数のさらなるノード104にフォワードし、以下同様である。このようにして、新しいトランザクションはノード104のネットワーク全体に伝搬される。
出力ベースのモデルでは、所与の出力(例えば、UTXO)が使用されたかどうかの定義は、それがノードプロトコルにしたがって別の前方のトランザクション152jの入力によって有効に償還されたかどうかかである。トランザクションが有効であるための別の条件は、それが使用または償還しようとする先行トランザクション152iの出力が、別の有効なトランザクションによってまだ使用/償還されていないことである。この場合も同様に、有効でない場合、トランザクション152jは、ブロックチェーンに伝搬も記録もされない。これは、使用者が同じトランザクションの出力を複数回使用しようとする二重支出を防止する。
妥当性確認に加えて、ノード104Mのうちの少なくともいくつかはまた、「プルーフオブワーク」に支えられるマイニングとして知られるプロセスにおいてトランザクションのブロックを最初に作成しようと競い合う。マイニングノード104Mにおいて、ブロック内にまだ現れていない有効なトランザクションのプールに新しいトランザクションが追加される。次いで、マイナーは、暗号パズルを解くことを試みることによって、トランザクションのプール154からトランザクション152の新しい有効ブロック151を組み立てようと競い合う。典型的には、これは、ノンスがトランザクションのプール154と連結されハッシュされたときにハッシュの出力が所定の条件を満たすような「ノンス」値を探索することを含む。例えば、所定の条件とは、ハッシュの出力が特定の所定の数の先行ゼロを有することであり得る。ハッシュ関数の特性は、その入力に対して予測不可能な出力を持つことである。したがって、この探索は、総当たりでしか実行することができないので、パズルを解こうとしている各ノード104Mでかなりの量の処理リソースを消費する。
最初にパズルを解いたマイナーノード104Mは、これをネットワーク106に公表し、後にネットワーク内の他のノード104によって容易にチェックすることができるその解をプルーフとして提供する(ハッシュに対する解が与えられると、ハッシュの出力が条件を満たすことをチェックすることは簡単である)。勝者がパズルを解いたトランザクションのプール154は、次いで、ストレージノード104Sとして機能するノード104のうちの少なくともいくつかによって、そのような各ノードにおいて勝者が公表した解をチェックしたことに基づいて、ブロックチェーン150内に新しいブロック151として記録されるようになる。ブロックポインタ155はまた、チェーン内の前に作成されたブロック151n-1を指し示す新しいブロック151nに割り当てられる。プルーフオブワークは、新たなブロック151を作成するのに多大な労力を要するので、二重支出のリスクを低減するのに役立ち、二重支出を含むブロックは他のノード104によって拒絶される可能性が高いので、マイニングノード104Mは、二重支出がそれらのブロックに含まれないようにするインセンティブが与えられる。ブロック151は、一旦作成されると、同じプロトコルにしたがってP2Pネットワーク106内の記憶ノード104Sの各々で認識および維持されるので、修正することができない。ブロックポインタ155はまた、ブロック151にシーケンシャル順序を付与する。トランザクション152は、P2Pネットワーク106内の各ストレージノード104Sにおいて順序付けられたブロックに記録されるので、これは、トランザクションの不変の公開台帳を提供する。
プール154は、「メムプール(mempool)」と呼ばれることがある。本明細書においてこの用語は、任意の特定のブロックチェーン、プロトコル、またはモデルに限定することを意図していない。これは、マイナーがマイニングのために受け入れ、かつ、同じ出力を使用しようとする他のトランザクションをマイナーが受け入れないことにコミットしたトランザクションのプールを指す。
任意の所与の時間にパズルを解こうと競い合う異なるマイナー104Mは、それらがいつ解を探索し始めたかに応じて、任意の所与の時間におけるマイニングされていないトランザクションプール154の異なるスナップショットに基づいてそうしている可能性があることに留意されたい。誰がそれぞれのパズルを最初に解いても、どのトランザクション152が次の新しいブロック151nに含まれるかを定義し、マイニングされていないトランザクションの現在のプール154が更新される。次いで、マイナー104Mは、新しく定義された未処理プール154からブロックを作成しようと競い合い続け、以下同様である。2人のマイナー104Mが互いに非常に短い時間内にパズルを解いて、ブロックチェーンの相反する見解が伝搬される場合に発生し得る任意の「フォーク」を解決するためのプロトコルも存在する。要するに、フォークのどちらのプロングが最も長く成長しても、確定的なブロックチェーン150となる。
ほとんどのブロックチェーンでは、勝利マイナー104Mには、(あるユーザから別のユーザにある額のデジタル資産を転送する通常のトランザクションとは対照的に)突如新しい量のデジタル資産を作成する特別なタイプの新しいトランザクションで自動的に報酬が与えられる。したがって、勝者ノードは、ある量のデジタル資産を「マイニング」したといわれる。この特別なタイプのトランザクションは、「生成」トランザクションと呼ばれることがある。それは自動的に新しいブロック151nの一部を形成する。この報酬は、マイナー104Mがプルーフオブワーク競争に参加するためのインセンティブを与える。多くの場合、通常の(非生成)トランザクション152はまた、そのトランザクションが含まれたブロック151nを作成した勝利マイナー104Mにさらに報酬を与えるために、その出力の1つにおいて追加のトランザクション手数料を指定する。
マイニングに関与する計算リソースに起因して、典型的には、マイナーノード104Mの少なくとも各々は、1つまたは複数の物理サーバユニットを含むサーバの形態をとるか、またはデータセンタ全体の形態をとる。各フォワーディングノード104Mおよび/またはストレージノード104Sもまた、サーバまたはデータセンタの形態をとり得る。しかしながら、原則として、任意の所与のノード104は、一緒にネットワーク化されたユーザ端末またはユーザ端末のグループの形態をとることができる。
各ノード104のメモリは、そのそれぞれの1つまたは複数の役割を実行し、ノードプロトコルにしたがってトランザクション152を処理するために、ノード104の処理装置上で実行ように構成されたソフトウェアを記憶する。本明細書においてノード104に帰する任意のアクションは、それぞれのコンピュータ機器の処理装置上で実行されるソフトウェアによって実行され得ることが理解されよう。ノードソフトウェアは、アプリケーション層、またはオペレーティングシステム層もしくはプロトコル層などの下位層、またはこれらの任意の組合せにおける1つまたは複数のアプリケーションにおいて実装され得る。また、本明細書で使用される「ブロックチェーン」という用語は、一般に、この種類の技術を指す総称であり、任意の特定の専有のブロックチェーン、プロトコルまたはサービスに限定されない。
消費ユーザの役割を果たす複数の当事者103の各々のコンピュータ機器102もネットワーク101に接続されている。これらは、トランザクションにおいて支払人および受取人として機能するが、他の当事者に代わってトランザクションのマイニングまたは伝搬に必ずしも参加するわけではない。それらは、マイニングプロトコルを必ずしも実行するわけではない。2つの当事者103およびそれらのそれぞれの機器102、すなわち、第1の当事者103aおよびそのそれぞれのコンピュータ機器102a、ならびに第2の当事者103bおよびそのそれぞれのコンピュータ機器102bは、例示の目的で示されている。はるかに多くのそのような当事者103およびそれらのそれぞれのコンピュータ機器102が存在し、システムに参加し得るが、便宜上、それらは図示されていないことが理解されよう。各当事者103は、個人または組織であり得る。純粋に例示として、第1の当事者103aは、本明細書ではアリスと呼ばれ、第2の当事者103bはボブと呼ばれるが、これは限定的なものではなく、本明細書におけるアリスまたはボブへのいかなる参照も、それぞれ「第1の当事者」および「第2の当事者」と置き換えられ得ることが理解されよう。
各当事者103のコンピュータ機器102は、1つまたは複数のプロセッサ、例えば、1つまたは複数のCPU、GPU、他のアクセラレータプロセッサ、特定用途向けプロセッサ、および/またはFPGAを含むそれぞれの処理装置を含む。各当事者103のコンピュータ機器102は、メモリ、すなわち、1つまたは複数の非一時的コンピュータ可読媒体の形態のコンピュータ可読ストレージを備える。このメモリは、1つまたは複数のメモリ媒体、例えば、ハードディスクなどの磁気媒体、SSD、フラッシュメモリもしくはEEPROMなどの電子媒体、および/または光ディスクドライブなどの光学媒体を使用する1つまたは複数のメモリユニットを含み得る。各当事者103のコンピュータ機器102上のメモリは、処理装置上で実行するように構成された少なくとも1つのクライアントアプリケーション105のそれぞれのインスタンスを含むソフトウェアを記憶する。本明細書において所与の当事者103に帰する任意のアクションは、それぞれのコンピュータ機器102の処理装置上で実行されるソフトウェアを使用して実行され得ることが理解されよう。各当事者103のコンピュータ機器102は、少なくとも1つのユーザ端末、例えば、デスクトップもしくはラップトップコンピュータ、タブレット、スマートフォン、またはスマートウォッチなどのウェアラブルデバイスを含む。所与の当事者103のコンピュータ機器102はまた、ユーザ端末を介してアクセスされるクラウドコンピューティングリソースなどの1つまたは複数の他のネットワーク化されたリソースを含み得る。
クライアントアプリケーション105は、最初に、適切な1つまたは複数のコンピュータ可読記憶媒体上で任意の所与の当事者103のコンピュータ機器102に提供され得、例えば、サーバからダウンロードされ得るか、またはリムーバブルSSD、フラッシュメモリキー、リムーバブルEEPROM、リムーバブル磁気ディスクドライブ、磁気フロッピーディスクもしくはテープ、CDもしくはDVD ROMなどの光ディスク、またはリムーバブル光学ドライブなどのリムーバブル記憶デバイス上で提供され得る。
クライアントアプリケーション105は、少なくとも「ウォレット」機能を含む。これは2つの主要な機能を有する。これらのうちの1つは、それぞれのユーザ当事者103が、ノード104のネットワーク全体に伝搬され、それによってブロックチェーン150に含まれることとなるトランザクション152を作成し、署名し、送信することを可能にすることである。もう1つは、それぞれの当事者に、その当事者が現在所有しているデジタル資産の額を報告することである。出力ベースのシステムでは、この第2の機能は、当該当事者に属するブロックチェーン150全体に散在している様々なトランザクション152の出力において定義された額を照合することを含む。
様々なクライアント機能が、所与のクライアントアプリケーション105に統合されるものとして説明され得るが、必ずしもこれに限定されず、代わりに、本明細書で説明される任意のクライアント機能は、代わりに、例えば、APIを介してインターフェースする、または一方が他方へのプラグインである2つ以上の別個のアプリケーション一式において実装され得ることに留意されたい。より一般的には、クライアント機能は、アプリケーション層もしくはオペレーティングシステムなどの下位層、またはこれらの任意の組合せにおいて実装され得る。以下では、クライアントアプリケーション105に関して説明するが、これに限定されないことが理解されよう。
各コンピュータ機器102上のクライアントアプリケーションまたはソフトウェア105のインスタンスは、P2Pネットワーク106のフォワーディングノード104Fのうちの少なくとも1つに動作可能に結合される。これにより、クライアント105のウォレット機能はトランザクション152をネットワーク106に送信することができる。クライアント105はまた、それぞれの当事者103が受信者である任意のトランザクションについてブロックチェーン150にクエリを行うために、ストレージノード104のうちの1つ、いくつか、またはすべてにコンタクトすることができる(または、実施形態では、ブロックチェーン150は、部分的にその公開可視性を通じてトランザクションにおける信頼を提供する公開施設であるので、実際にブロックチェーン150における他の当事者のトランザクションを検査する)。各コンピュータ機器102上のウォレット機能は、トランザクションプロトコルにしたがってトランザクション152を定式化し、送信するように構成される。各ノード104は、ノードプロトコルにしたがってトランザクション152を妥当性確認するように構成されたソフトウェアを実行し、フォワーディングノード104Fの場合には、トランザクション152をネットワーク106全体に伝搬させるためにそれらをフォワードするように構成される。トランザクションプロトコルおよびノードプロトコルは互いに対応し、所与のトランザクションプロトコルは所与のノードプロトコルと共に進行し、一緒に所与のトランザクションモデルを実装する。ブロックチェーン150内のすべてのトランザクション152に対して同じトランザクションプロトコルが使用される(ただし、トランザクションプロトコルは、その中のトランザクションの異なるサブタイプを可能にし得る)。ネットワーク106内のすべてのノード104によって同じノードプロトコルが使用される(ただし、これは、トランザクションの異なるサブタイプを、そのサブタイプに対して定義された規則にしたがって異なって処理し、また、異なるノードが異なる役割を担い、したがってプロトコルの異なる対応する態様を実装することができる)。
述べたように、ブロックチェーン150は、ブロック151のチェーンを含み、各ブロック151は、前述したようなプルーフオブワークプロセスによって作成された1つまたは複数のトランザクション152のセットを含む。各ブロック151はまた、ブロック151へのシーケンシャル順序を定義するために、チェーン内の前に作成されたブロック151を指し示すブロックポインタ155を含む。ブロックチェーン150は、プルーフオブワークプロセスによって新しいブロックに含まれるのを待っている有効なトランザクションのプール154も含む。各トランザクション152(生成トランザクション以外)は、トランザクションのシーケンスへの順序を定義するように、前のトランザクションへ戻るポインタを含む(注意:トランザクション152のシーケンスは分岐することが可能である)。ブロック151のチェーンは、チェーン内の最初のブロックであった発生ブロック(Gb)153までずっと戻る。チェーン150内の早期にある1つまたは複数の元のトランザクション152は、先行トランザクションではなく発生ブロック153を指し示していた。
所与の当事者103、例えばアリスが、ブロックチェーン150に含まれるべき新しいトランザクション152jを送信することを望むとき、アリスは、関連のあるトランザクションプロトコルにしたがって(アリスのクライアントアプリケーション105内のウォレット機能を使用して)新しいトランザクションを定式化する。次いで、アリスは、クライアントアプリケーション105から、アリスが接続されている1つまたは複数のフォワーディングノード104Fのうちの1つにトランザクション152を送信する。例えば、これは、アリスのコンピュータ102に最も近いまたは最良に接続されたフォワーディングノード104Fであり得る。任意の所与のノード104が新しいトランザクション152jを受信すると、それはノードプロトコルおよびそのそれぞれの役割にしたがってそれを処理する。これは、新たに受信されたトランザクション152jが「有効」であるための特定の条件を満たすか否かを最初にチェックすることを含み、その例については、以下でより詳細に説明する。いくつかのトランザクションプロトコルでは、妥当性確認のための条件は、トランザクション152に含まれるスクリプトによってトランザクションごとに構成可能であり得る。代替的に、条件は、単にノードプロトコルの組込み特徴であってもよく、またはスクリプトとノードプロトコルとの組合せによって定義されてもよい。
新たに受信されたトランザクション152jが有効であるとみなされるためのテストにパスすることを条件として(すなわち、それが「妥当性確認される」ことを条件として)、トランザクション152jを受信する任意のストレージノード104Sは、そのノード104Sにおいて維持されるブロックチェーン150のコピー内のプール154に新たな妥当性確認済みトランザクション152を追加する。さらに、トランザクション152jを受信する任意のフォワーディングノード104Fは、妥当性確認済みトランザクション152をP2Pネットワーク106内の1つまたは複数の他のノード104へと前方に伝搬する。各フォワーディングノード104Fは同じプロトコルを適用するので、トランザクション152jが有効であると仮定すると、これは、それがすぐにP2Pネットワーク106全体にわたって伝搬されることを意味する。
1つまたは複数のストレージノード104において維持されるブロックチェーン150のコピー内のプール154に認められると、マイナーノード104Mは、新しいトランザクション152を含むプール154の最新バージョンに対してプルーフオブワークパズルを解こうと競い始める(他のマイナー104Mは、プール154の古いビューに基づいてパズルを解こうと試みている可能性があるが、誰が最初に到達しても、次の新しいブロック151がどこで終わり新しいプール154がどこで開始するかを定義することとなり、最終的には、誰かが、アリスのトランザクション152jを含むプール154の一部についてパズルを解く)。新しいトランザクション152jを含むプール154に対してプルーフオブワークが行われると、それは不変的にブロックチェーン150内のブロック151のうちの1つの一部となる。各トランザクション152は、前のトランザクションへ戻るポインタを含むので、トランザクションの順序も不変的に記録される。
マイニングノードおよびストレージノードは両方とも、機能として妥当性確認を実行し得る。マイニングノードの場合、その機能はハッシングの補助であってもよく、ストレージノードの場合、その機能は記憶の補助であってもよい。
異なるノード104は、まず、所与のトランザクションの異なるインスタンスを受信し得るので、1つのインスタンスがブロック151にマイニングされる前に、どのインスタンスが「有効」であるかの矛盾する見解を有する可能性があり、この時点で、すべてのノード104は、マイニングされたインスタンスが唯一の有効なインスタンスであることに同意する。ノード104が1つのインスタンスを有効として受け入れ、次いで第2のインスタンスがブロックチェーン150に記録されていることを発見した場合、そのノード104はこれを受け入れなければならず、最初に受け入れたマイニングされていないインスタンスを破棄する(すなわち、無効として扱う)。
UTXOベースのモデル
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されない。
図2は、例示的なトランザクションプロトコルを示す。これは、UTXOベースのプロトコルの一例である。トランザクション152(「Tx」と略記される)は、ブロックチェーン150の基本的なデータ構造である(各ブロック151は1つまたは複数のトランザクション152を含む)。以下では、出力ベースまたは「UTXO」ベースのプロトコルを参照して説明する。しかしながら、これはすべての可能な実施形態に限定されない。
UTXOベースのモデルでは、各トランザクション(「Tx」)152は、1つまたは複数の入力202および1つまたは複数の出力203を含むデータ構造を含む。各出力203は、未使用トランザクション出力(UTXO)を含み得、これは、(UTXOがまだ償還されていない場合)別の新しいトランザクションの入力202のソースとして使用され得る。UTXOは、デジタル資産の額を指定する値を含む。これは、(分散型)台帳上のトークンの設定数を表す。UTXOはまた、他の情報の中でも、元となるトランザクションのトランザクションIDを含み得る。トランザクションデータ構造は、入力フィールド(複数可)202および出力フィールド(複数可)203のサイズを示すインジケータを含み得るヘッダ201も含み得る。ヘッダ201はまた、トランザクションのIDを含み得る。実施形態では、トランザクションIDは、(トランザクションID自体を除く)トランザクションデータのハッシュであり、マイナー104Mにサブミットされる生のトランザクション152のヘッダ201に記憶される。
アリス103aが、当該デジタル資産の額をボブ103bに転送するトランザクション152jを作成することを望むとする。図2では、アリスの新しいトランザクション152jは「Tx1」とラベル付けされている。これは、シーケンス内の先行トランザクション152iの出力203においてアリスにロックされたデジタル資産の額を取り、これのうちの少なくとも一部をボブに転送する。先行トランザクション152iは、図2では「Tx0」とラベル付けされている。Tx0およびTx1は、単なる任意のラベルである。それらは、Tx0がブロックチェーン151内の最初のトランザクションであることも、Tx1がプール154内のすぐ次のトランザクションであることも必ずしも意味するものではない。Tx1は、アリスにロックされた未使用の出力203を依然として有する任意の先行する(すなわち先の)トランザクションを指し示すことができる。
先行トランザクションTx0は、アリスが新しいトランザクションTx1を作成した時点では、または少なくともアリスがそれをネットワーク106に送信する時点までには、すでに妥当性確認されブロックチェーン150に含まれている可能性がある。それは、その時点でブロック151のうちの1つにすでに含まれていてもよいし、プール154で依然として待機していてもよく、この場合、すぐに新しいブロック151に含まれることになる。代替的に、Tx0およびTx1を作成してネットワーク102に一緒に送信することができるか、またはノードプロトコルが「オーファン」トランザクションのバッファリングを可能にする場合には、Tx0をTx1の後に送信することさえもできる。トランザクションのシーケンスの文脈において本明細書で使用される「先行する(preceding)」および「後の(subsequent)」という用語は、トランザクション内で指定されているトランザクションポインタ(どのトランザクションがどの他のトランザクションを指し示すかなど)によって定義されるシーケンス内のトランザクションの順序を指す。それらは、同様に、「先行するもの」および「後続するもの」、または「先の」および「後の」、「親」および「子」などと置き換えられ得る。これは、それらの作成、ネットワーク106への送信、または任意の所与のノード104への到着の順序を必ずしも意味するものではない。それにもかかわらず、先行トランザクション(先のトランザクションまたは「親」)を指し示す後のトランザクション(後のトランザクションまたは「子」)は、親トランザクションが妥当性確認されるまでおよび妥当性確認されない限り、妥当性確認されない。その親より前にノード104に到着する子は、オーファンとみなされる。それは、ノードプロトコルおよび/またはマイナー挙動に応じて、親を待つために特定の時間バッファされるかまたは破棄され得る。
先行トランザクションTx0の1つまたは複数の出力203のうちの1つは、本明細書ではUTXO0とラベル付けされた特定のUTXOを含む。各UTXOは、UTXOによって表されるデジタル資産の額を指定する値と、ロックスクリプトとを含み、ロックスクリプトは、後のトランザクションが妥当性確認され、したがってUTXOが正常に償還されるために、後のトランザクションの入力202内のロック解除スクリプトが満たさなければならない条件を定義する。典型的には、ロックスクリプトは、その額を特定の当事者(それが含まれるトランザクションの受益者)にロックする。すなわち、ロックスクリプトは、典型的には、後のトランザクションの入力内のロック解除スクリプトに、先行トランザクションがロックされる当事者の暗号署名が含まれるという条件を含むロック解除条件を定義する。
ロックスクリプト(通称scriptPubKey)は、ノードプロトコルによって認識されるドメイン固有言語で書かれたコードの一部分である。そのような言語の特定の例は、「スクリプト(Script)」(大文字S)と呼ばれる。ロックスクリプトは、トランザクション出力203を使用するためにどの情報が必要とされるか、例えばアリスの署名の要件を指定する。ロック解除スクリプトはトランザクションの出力に現れる。ロック解除スクリプト(通称scriptSig)は、ロックスクリプト基準を満たすのに必要な情報を提供するドメイン固有言語で書かれたコードの一部分である。例えば、ボブの署名を含み得る。ロック解除スクリプトは、トランザクションの入力202に現れる。
つまり、図示の例では、Tx0の出力203内のUTXO0は、UTXO0が償還されるために(厳密には、UTXO0を償還しようとする後のトランザクションが有効となるために)アリスの署名Sig PAを必要とするロックスクリプト[Checksig PA]を含む。[Checksig PA]は、アリスの公開鍵-秘密鍵ペアからの公開鍵PAを含む。Tx1の入力202は、(例えば、実施形態ではトランザクションTx0全体のハッシュであるそのトランザクションID、TxID0によって)Tx1を指し示すポインタを含む。Tx1の入力202は、Tx0の任意の他の可能な出力の中から、UTXO0を識別するために、Tx0内のそれを識別するインデックスを含む。Tx1の入力202は、アリスが鍵ペアからのアリスの秘密鍵をデータの所定の部分(暗号では「メッセージ」と呼ばれることもある)に適用することによって作成された、アリスの暗号署名を含むロック解除スクリプト<Sig PA>をさらに含む。有効な署名を提供するためにどのデータ(または「メッセージ」)がアリスによって署名される必要があるかは、ロックスクリプトによって、またはノードプロトコルによって、またはこれらの組合せによって定義され得る。
実装形態に応じて、必要とされる署名は、例えば、従来のECDSA(楕円曲線デジタル署名アルゴリズム)署名、DSA(Digital Signature Algorithm)署名、もしくはRSA(Rivest-Shamir-Adleman)署名、または任意の他の適切な形態の暗号署名であり得る。署名のためのチャレンジは、例えば、標準のpay-to-public key(P2PK)パズルまたはP2PKハッシュ(P2PKH)パズルとして実装され得るか、またはRパズルなどの代替手段が、署名のための手段として代わりに実装され得る。本例は、例示としてP2PKを使用する。
新しいトランザクションTx1がノード104に到着すると、ノードはノードプロトコルを適用する。これは、ロックスクリプトおよびロック解除スクリプトを一緒に実行して、ロック解除スクリプトがロックスクリプトで定義されている条件(この条件は1つまたは複数の基準を含み得る)を満たすかどうかをチェックすることを含む。実施形態では、これは2つのスクリプトを連結することを含む。
<Sig PA> <PA> || [Checksig PA]
ここで、「||」は連結を表し、「<…>」はデータをスタックに置くことを意味し、「[…]」はロック解除スクリプト(この例ではスタックベースの言語)で構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通スタックを用いて次々に実行され得る。いずれにしても、一緒に実行されるとき、スクリプトは、Tx0の出力内のロックスクリプトに含まれるようなアリスの公開鍵PAを使用して、Tx1の入力内のロックスクリプトが、データの予想される部分に署名したアリスの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)はまた、この認証を実行するためにTx0命令に含まれる必要がある。実施形態では、署名されたデータは、Tx0の全体を含む(つまり、平文のデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので、含まれる必要はない)。
<Sig PA> <PA> || [Checksig PA]
ここで、「||」は連結を表し、「<…>」はデータをスタックに置くことを意味し、「[…]」はロック解除スクリプト(この例ではスタックベースの言語)で構成される関数である。同等に、スクリプトは、スクリプトを連結するのではなく、共通スタックを用いて次々に実行され得る。いずれにしても、一緒に実行されるとき、スクリプトは、Tx0の出力内のロックスクリプトに含まれるようなアリスの公開鍵PAを使用して、Tx1の入力内のロックスクリプトが、データの予想される部分に署名したアリスの署名を含むことを認証する。データの予想される部分自体(「メッセージ」)はまた、この認証を実行するためにTx0命令に含まれる必要がある。実施形態では、署名されたデータは、Tx0の全体を含む(つまり、平文のデータの署名された部分を指定する別個の要素は、すでに本質的に存在するので、含まれる必要はない)。
公開-秘密暗号法による認証の詳細は、当業者によく知られている。基本的に、アリスが自身の秘密鍵でメッセージを暗号化することによってメッセージに署名した場合、アリスの公開鍵および平文のメッセージ(暗号化されていないメッセージ)が与えられると、ノード104などの別のエンティティは、メッセージの暗号化バージョンがアリスによって署名されたものに違いないことを認証することができる。署名は、典型的には、メッセージをハッシュし、ハッシュに署名し、これを署名としてメッセージの平文バージョンにタグ付けすることを含み、これにより、公開鍵の任意の保持者が署名を認証することができる。したがって、データの特定の部分またはトランザクションの一部などに署名することへの本明細書におけるいかなる参照も、実施形態では、データのその部分またはトランザクションの一部のハッシュに署名することを意味し得ることに留意されたい。
本明細書のどこかで参照されるハッシュは、例えば、SHA(Secure Hash Algorithm)ハッシュ関数もしくはHMAC(hash-based message authentication code)ハッシュ関数、または当技術分野で知られている任意の他の適切な形態の暗号学的ハッシュ関数によって実装されることを指し得る。
Tx1内のロック解除スクリプトが、Tx0のロックスクリプト内で指定されている1つまたは複数の条件を満たす場合(つまり、図示の例では、アリスの署名がTx1内で提供され、認証された場合)、ノード104は、Tx1が有効であるとみなす。それがマイニングノード104Mである場合、これは、ワークオブプルーフを待つトランザクションのプール154にそれを追加することを意味する。それがフォワーディングノード104Fである場合、トランザクションTx1をネットワーク106内の1つまたは複数の他のノード104にフォワードして、トランザクションTx1がネットワーク全体に伝搬されるようにする。Tx1が妥当性確認されてブロックチェーン150に含まれると、これは、Tx0からのUTXO0を使用済みとして定義する。Tx1は、未使用のトランザクション出力203を使用する場合にのみ有効であり得ることに留意されたい。別のトランザクション152によってすでに使用された出力を使用しようとする場合、Tx1は、他のすべての条件が満たされたとしても無効になる。したがって、ノード104はまた、先行トランザクションTx0内の参照されたUTXOがすでに使用済みである(別の有効なトランザクションへの有効な入力をすでに形成している)かどうかをチェックする必要がある。これは、ブロックチェーン150がトランザクション152に定義された順序を課すことが重要である1つの理由である。実際には、所与のノード104は、どのトランザクション152内のどのUTXO203が使用されたかをマーキングする別個のデータベースを維持し得るが、最終的には、UTXOが使用されたかどうかを定義するものは、ブロックチェーン150内の別の有効なトランザクションへの有効な入力をすでに形成しているかどうかである。
所与のトランザクション152のすべての出力203において指定された総額が、そのすべての入力202によって指し示された総額よりも大きい場合、これは、ほとんどのトランザクションモデルにおいて無効性の別の根拠となる。したがって、そのようなトランザクションは、ブロック151に伝搬もマイニングもされない。
UTXOベースのトランザクションモデルでは、所与のUTXOが全体として使用される必要があることに留意されたい。UTXOにおいて使用済みとして定義された額の一部を「後に残す」ことはできず、別の一部が使用される。しかしながら、次のトランザクションの複数の出力間でUTXOからの額を分割することはできる。例えば、Tx0内のUTXO0において定義された額は、Tx1内の複数のUTXO間で分割され得る。したがって、アリスが、UTXO0において定義された額のすべてをボブに与えたくない場合、アリスは、リマインダを使用して、Tx1の第2の出力において自分自身に残りを与えるか、または別の当事者に支払うことができる。
実際には、今日、生成トランザクションの報酬だけでは、典型的には、マイニングを動機付けるのに十分ではないので、アリスは通常、勝利マイナーに対する手数料を含む必要もある。アリスがマイナーに対する手数料を含めない場合、Tx0は、マイナーノード104Mによって拒否される可能性が高く、したがって、技術的に有効であっても、それは依然として伝搬されず、ブロックチェーン150に含まれない(マイナープロトコルは、マイナー104Mが望まない場合にトランザクション152を受け入れることを強制しない)。いくつかのプロトコルでは、マイニング手数料は、それ自体の別個の出力203を必要としない(すなわち、別個のUTXOを必要としない)。代わりに、所与のトランザクション152の入力(複数可)202によって指し示される総額と出力(複数可)203で指定されている総額との間の差が自動的に勝利マイナー104に与えられる。例えば、UTXO0へのポインタがTx1への唯一の入力であり、Tx1は1つの出力UTXO1のみを有するとする。UTXO0で指定されているデジタル資産の額がUTXO1で指定されている額より大きい場合、その差が自動的に勝利マイナー104Mに贈られる。しかしながら、代替的にまたは追加的に、マイナー手数料がトランザクション152のUTXO203のうちのそれ自体の1つにおいて明示的に指定され得ることが必ずしも除外されるものではなない。
アリスおよびボブのデジタル資産は、ブロックチェーン150内のどこにでもある任意のトランザクション152においてそれらにロックされた未使用UTXOから構成される。したがって、典型的には、所与の当事者103の資産は、ブロックチェーン150全体にわたる様々なトランザクション152のUTXO全体に散在している。ブロックチェーン150内のどこにも、所与の当事者103の総残高を定義する数字は記憶されない。クライアントアプリケーション105におけるウォレット機能の役割は、それぞれの当事者にロックされ、別の前方のトランザクションでまだ使用されていない様々なUTXOすべての値を一緒に照合することである。これは、ストレージノード104Sのいずれか、例えば、それぞれの当事者のコンピュータ機器102に最も近いまたは最良に接続されたストレージノード104Sに記憶されたブロックチェーン150のコピーにクエリを行うことによって行うことができる。
スクリプトコードは、しばしば、概略的に表される(すなわち、正確な言語ではない)ことに留意されたい。例えば、[Checksig PA]と書いて[Checksig PA] = OP_DUP OP_HASH160 <H(PA)> OP_EQUALVERIFY OP_CHECKSIGを意味し得る。「OP_...」は、スクリプト言語の特定のオペコードを指す。OP_CHECKSIG(「Checksig」とも呼ばれる)は、2つの入力(署名および公開鍵)を取り、楕円曲線デジタル署名アルゴリズム(ECDSA)を使用して署名の有効性を検証するスクリプトオペコードである。実行時に、署名(「sig」)の存在(occurrence)はスクリプトから除去されるが、ハッシュパズルなどの追加要件は、「sig」入力によって検証されたトランザクションに残る。別の例として、OP_RETURNは、トランザクション内にメタデータを記憶することができ、それによってメタデータをブロックチェーン150に不変に記録することができる、トランザクションの使用不可能な出力を作成するためのスクリプト言語のオペコードである。例えば、メタデータは、ブロックチェーンに記憶することが望まれる文書を含み得る。
署名PAはデジタル署名である。実施形態では、これは、楕円曲線secp256k1を使用するECDSAに基づく。デジタル署名は、特定のデータの一部分に署名する。実施形態では、所与のトランザクションについて、署名は、トランザクション入力の一部、およびトランザクション出力の全部または一部に署名する。署名された出力の特定の部分は、SIGHASHフラグに依存する。SIGHASHフラグは、どの出力が署名されるかを選択するために署名の最後に含まれる4バイトコードである(したがって、署名時に固定される)。
ロックスクリプトは、それぞれのトランザクションがロックされる当事者の公開鍵を含むという事実を指して、「scriptPubKey」と呼ばれることがある。ロック解除スクリプトは、それが対応する署名を供給するという事実を指して「scriptSig」と呼ばれることがある。しかしながら、より一般的には、UTXOが償還されるための条件が署名を認証することを含むことは、ブロックチェーン150のすべてのアプリケーションにおいて必須ではない。より一般的には、スクリプト言語を使用して、任意の1つまたは複数の条件を定義することができる。したがって、「ロックスクリプト」および「ロック解除スクリプト」というより一般的な用語が好まれ得る。
階層化ネットワーク
階層化ネットワーク構造:階層化ネットワークは、通信チャネルの上に階層化されたオーバーレイネットワークである。例えば、通信チャネルは、パーソナルエリアネットワーク、ローカルエリアネットワーク(例えば、企業間P2Pネットワーク)、またはインターネットなどの広域ネットワークなどの基礎となるインフラストラクチャネットワークであり得る。他の例では、階層化ネットワークは、ワイヤード接続を介して接続されたノードのネットワークであり得る。さらに他の例では、接続は、ワイヤレス接続、例えば、Bluetooth(登録商標)またはWi-Fi接続であり得る。いくつかの例では、階層化ネットワークを形成ために、上記の例示的な接続のうちのいくつかまたはすべてが使用され得る。
階層化ネットワーク構造:階層化ネットワークは、通信チャネルの上に階層化されたオーバーレイネットワークである。例えば、通信チャネルは、パーソナルエリアネットワーク、ローカルエリアネットワーク(例えば、企業間P2Pネットワーク)、またはインターネットなどの広域ネットワークなどの基礎となるインフラストラクチャネットワークであり得る。他の例では、階層化ネットワークは、ワイヤード接続を介して接続されたノードのネットワークであり得る。さらに他の例では、接続は、ワイヤレス接続、例えば、Bluetooth(登録商標)またはWi-Fi接続であり得る。いくつかの例では、階層化ネットワークを形成ために、上記の例示的な接続のうちのいくつかまたはすべてが使用され得る。
ノードのうちのいくつかまたはすべては、ネットワークであり、接続プロトコルにしたがって階層化ネットワークに接続する(すなわち、参加または再参加する)ように構成される。接続プロトコルは、接続ノードが接続している(すなわち、参加または再参加しようとしている)先のネットワークの特定の層に応じて変化し得る。接続プロトコルを詳細に説明する前に、接続プロトコルによって作成、すなわち強制され得る一連の例示的な階層化ネットワークについて説明する。しかしながら、これらは例示的な例にすぎず、一般に、接続プロトコルに従う任意の階層化ネットワークが作成され得ることが理解されよう。
図3は、階層化ネットワーク(LN)300の例の概略図を示す。一般に、LNは、コアノード301から構成されるコアネットワーク(またはコア層)と、一連の層(またはシェル)とを含む。コア層は、LNの第1の層とも呼ばれる。一連の層は、コア層の外側に向かって、第2のノード302から構成される第2の層から1つまたは複数の外層へと順に延在する。各外層は、外部ノード303のセットから構成される。図3には1つの外層のみが示されているが、LNは任意の数の外層を含み得ることが理解されよう。特定の例として、5つの層を含むLN500の例を図5に示し、4つの層を含むLN600の例を図6に示す。
図3の例示的なLN300は、5つのコアノード301と、6つの第2のノード302と、8つの外部ノード303とを含む。いくつかのLN300では、ノードの数は層ごとに増加し得、すなわち、コア層は最小数のノードから構成され、最外層は最大数のノードから構成される。他の例では、コア層と最外層との間の層のうちの1つまたは複数が最大数のノードから構成されてもよい。この例では、コア層はLN300の最内層であり、第2の層は中間層であり、唯一の外層である外層は最外層である。
この例におけるコア層(LN内のネットワーク)は、完全グラフを形成し、すなわち、各コアノード301は、他の各コアノード301に接続されている。5つのコアノード301のコア層の場合、所与の例では、コア層は、10個の別個のコア接続(すなわち、2つのコアノード間に1つの接続)を必要とする。他の例(例えば、図4)では、コア層は、完全グラフでないであろう。コア層は、「ほぼ完全グラフ」を形成し得る。ほぼ完全グラフでは、少なくとも1つのコアノード301が少なくとも1つの他のコアノード301に接続されていない。1つのコア接続のみが欠落しているかもしれない。ほぼ完全グラフの特定の例では、各コアノード301は、他のコアノード301のすべてではないが1つまたは複数に接続され得る。
第2の層は、第2のノード302を含む。「第2のノード」という用語は、構造上、LN300の第2の層内に位置するノード302のラベルとしてのみ使用されることに留意されたい。各第2のノード302は、少なくとも1つのコアノード301に接続されている。いくつかの例では、各第2のノード302は、1つのコアノード301のみに接続され得る。代替的に、第2のノード302のうちのいくつかまたはすべては、2つ以上のコアノード301に接続されてもよい。例えば、第2のノード302のうちのいくつかまたはすべては、コアノード301の1つ1つに接続し得る。図3の例示的なLN300では、各コアノード301は、2つの第2のノード302に接続されている。しかしながら、この例では、いくつかの第2のノード302(縞模様の円で示されるもの)は1つのコアノード301に接続され、いくつかの第2のノード302(白い円で示されるもの、および影付きの円で示されるもの)は2つのコアノード301に接続されている。同じコアノード301に接続された第2のノード302(および外層の外部ノード303)は、「コミュニティ」と呼ばれる。例えば、それぞれの白いノードが共に1つのコミュニティを形成し、それぞれの縞模様のノードが共に1つのコミュニティを形成し、それぞれ影付きのノードが共にさらに別のコミュニティを形成する。第2のノード302とコアノード301との間の接続は、「祖先接続(ancestor connection)」と呼ばれ、太い破線で示されている。
図3の例では、各第2のノード302は、2つの他の第2のノード302に接続されている。いくつかの例では、第2のノード302のうちのいくつかまたはすべては、他の第2のノードとの接続を形成しなくてもよく、例えば、いくつかの第2のノード302は他の第2のノード302に接続され得るが、いくつかの第2のノードは他の第2のノード302に接続され得る。これらの「層内」接続は、図3においてノード間の実線として示されている。
図3の外層は、外部ノード303を含む。ここでの「外層(outer layer)」の「外(outer)」という用語は、それ自体、必ずしもLNネットワーク全体の最外層に限定されるものではないが、それも1つの可能性であることに留意されたい。各外部ノード303は、少なくとも1つの第2のノード302に接続されている。いくつかの例では、各外部ノード303は、1つの第2のノード302のみに接続され得る。代替的に、外部ノード303のうちのいくつかまたはすべては、2つ以上の第2のノード302に接続されてもよい。例えば、外部ノード303のうちのいくつかまたはすべては、第2のノード301の1つ1つに接続し得る。図3の例示的なLN300では、各外部ノード303は、2つの第2のノード302に接続されている。いくつかの第2のノード302(すなわち、縞模様のノード)は、2つの外部ノード303に接続され、いくつかの第2のノード302(すなわち、白色のノードおよび影付きのノード)は、3つの外部ノード303に接続されている。
図3の例では、各外部ノード303は、同層の2つの他の外部ノード303に接続されている。いくつかの例では、外部ノード303のうちのいくつかまたはすべては、同層の他の外部ノード303との接続を形成しなくてもよい。外部ノード303のうちのいくつかまたはすべては、同層の別の外部ノード303と少なくとも1つの接続を形成し得る。
少なくとも1つの第2のノード302に接続されているとともに、各外部ノード303は、少なくとも1つのコアノード301にも接続されている。外部ノード303とコアノード301との間の接続は、「コア祖先接続(core ancestor connection)」と呼ばれ、細い破線で示されている。各外部ノード303は、それらの祖先の第2のノード(複数可)302が接続されているコアノード301の各々に接続され得る。図3に示されるように、各外部ノード303は、それらの祖先の第2のノード(複数可)302が接続されているコアノード301の各々に接続され得、他のコアノード301には接続されないであろう。この場合、各外部ノード303は、単一のコミュニティに属する。
図4は、LN400の別の例の概略図を示す。図3のLN300と同様に、例示的なLN400は、コア層と、第2の層と、外層とを含む。これらの例示的なLN300、400は、同じ数のノード(すなわち、5つのコアノード301、6つの第2のノード302、および8つの外部ノード303)を共有するが、異なる数の接続を含む。例えば、この例では、コアノード301間のいくつかの接続が存在しないので、コア層は完全グラフではない。別の違いは、2つのコミュニティ(白いノードおよび影付きのノード)が単一のコアノード301を含むのに対して、別のコミュニティ(影付きのノード)は3つのコアノード301を含むことである。さらに別の違いは、LN300の外シェル内のノードの次数が2であるのとは異なり、LN400の外シェル内のノードの次数がここでは1であることである。すなわち、この例示的なLN400では、各外部ノード303は、単一の他の外部ノード303に接続されている。したがって、異なる層のノードは異なる次数を有する。
図5は、LN500の別の例の概略図を示す。この例では、いくつかのコアノード301のみが第2のノードおよび外部ノード303に接続されている。すなわち、この例では、いくつかのコアノード301は、他のコアノード301との接続のみを形成する。したがって、この例では、LN500は、単一のコミュニティ(影付きノード)を含む。この例のLN500は、コア層、第2の層、および3つの外層という5つの層を含む。コア層は、ほぼ完全グラフを形成する5つのコアノード301から構成される。ほぼ完全グラフのこの例では、単一のコア接続のみが欠落している。第2の層は、2つのコアノード301に接続された単一の第2のノード302から構成される。第2の層は、2つのコアノード301に接続された単一の第2のノード302から構成される。第3の層は、祖先接続を介して第2のノード302に接続されている単一の外部ノード303から構成される。第3の層の外部ノード303はまた、第2のノード302が接続されている2つのコアノード301に接続されている。外部ノード303は、それぞれのコア祖先接続を介して2つのコアノード301に接続されている。第4の層も、単一の外部ノード304から構成される。第4の層の外部ノード304は、祖先接続を介して第3の層の外部ノード303に、そして祖先接続を介して第2のノード302に接続されている。第4の層の外部ノード304も、第2のノード302および第3の層の外部ノード303が接続されている2つのコアノード301に接続されている。外部ノード304は、それぞれのコア祖先接続を介して2つのコアノード301に接続されている。最後に、第5の層は、2つの外部ノード305から構成される。第5の層の2つの外部ノード305は、第4の層の外部ノード304に、第3の層の外部ノード303に、そして第2のノード302に接続され、それぞれの接続が祖先接続である。2つの外部ノード305もまた、コア祖先接続を介して2つのコアノード301に接続されている。この例示的なLN500では、第2の層のノードおよび外層のノードは、同層の他のどのノードにも接続されない。
図6は、LN600の別の例の概略図を示す。このLNは、白いノードおよび黒いノードによって示されるように、ノードの2つのコミュニティを含む。この例では、コア層は完全グラフ(すなわち、ノードのネットワーク)を形成する。各コミュニティは、3つのコアノード301の別個のセットを含む。この例示的なLN600は、4つの層(コア層、第2の層、および2つの外層)を含む。外層の各ノードは、先行する層の1つのノードに接続されている。図5の例示的なLN500と同様に、第2の層のノードおよび外層のノードは、同層の他のどのノードにも接続されない。
いくつかの実施形態では、LN300、400、500、600(以降、簡潔して「300」で示す)は、「ブロックチェーン階層化ネットワーク(BLN)」であり得る。BLNという用語は、本明細書では、ブロックチェーンネットワーク、またはブロックチェーンネットワークの少なくとも一部、例えば、図1を参照して説明されたブロックチェーンネットワーク106、を含む階層化ネットワークとして定義される。
BLNは、Mandalaネットワークから着想を得たものであり、いくつかの同様の特徴を共有するが、例えば、ブロックチェーンネットワーク106を利用するサービスおよびユーザネットワークのための、より柔軟で望ましい接続構造を可能にするように設計される。
BLN300は、そのコアにブロックチェーンネットワーク106の少なくとも一部を含み得る。一般に、階層化ネットワークのノードは、インターネット101などの基礎となるインフラストラクチャネットワーク上にオーバーレイされる。コアノードのうちのいくつかまたはすべては、ブロックチェーンネットワーク106のノード104である。それらは、マイニングノード104M、ストレージノード104S、またはそれらの組合せを含み得る。実施形態では、コアノードの各々は、マイニングノード104Mおよび/またはストレージノード104S(例えば、フルコピーノード)である。
外部ノード303の各々(または最外層の外部ノードの各々)は、ユーザのコンピュータ機器を含むエンドユーザノードであり得る。これは、個々のユーザ、または会社、学術機関、もしくは政府機関などの組織などであり得る。したがって、各外部ノード303は、1つまたは複数のユーザ端末、および/または1つまたは複数のサイトに1つまたは複数のサーバユニットを含むサーバを含み得る。各外部ノード303は、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置とを備える。これらは、例えば、他のネットワーク要素またはユーザ機器に関連して前述したようなメモリ媒体および/またはプロセッサの形態のいずれかをとり得る。メモリは、処理装置上で実行されるように構成されたクライアントソフトウェアを記憶し、クライアントソフトウェアは、実行されるときに、以下の実施形態または類似のもののいずれかによる接続プロトコルに従うプロトコルのクライアントとしてノードを動作させるように構成される。任意選択で、エンドユーザノードのうちの1つまたは複数は、ブロックチェーンネットワーク106のユーザ102のユーザ機器103を含み得、クライアントソフトウェアは、ブロックチェーンウォレットアプリケーション105などを含み得る。
各第2のノード302は、1つまたは複数の物理サーバユニットを含むサーバの形態をとり得る。そのような各ノードは、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置とを備える。これらは、例えば、他のネットワーク要素に関連して前述したようなメモリ媒体および/またはプロセッサの形態のいずれかをとり得る。メモリは、第2のノード302の処理装置上で動作されるように構成されたソフトウェアを記憶する。ソフトウェアは、実行されるとき、以下の実施形態または類似のもののいずれかによる接続プロトコルに従うように構成される。いくつかの実施形態では、ソフトウェアは、実行されるとき、以下で説明される実施形態または類似のもののいずれかにしたがって動作するサービスを提供するように構成される。
いくつかの例では、第2のノード302のうちのいくつかまたはすべては、スマートコントラクトサービスを動作し得る。スマートコントラクトサービスは、LN300の他のノードのうちの1つによって、例えば、外部ノード303によって、スマートコントラクトサービスに送信されたブロックチェーントランザクションに応答して、およびそれに基づいて、所定の動作を実行するように構成される。例えば、スマートコントラクトは、外部ノード303から特定のブロックチェーントランザクションを受信したことに応答して、ブロックチェーントランザクションをコアノード301に送信し得る。
他の例では、第2のノード302のうちのいくつかまたはすべては、それらの間で、分散型データベースを動作し得る。すなわち、分散型データベースを動作させる各第2のノード302は、LN300の別のノード、例えば外部ノード303から受信されたデータを記憶するように構成される。データを受信して記憶する第2のノード302は、同じく分散型データベースを動作している他の第2のノード302にデータを伝搬するように構成され得る。
ノード301、302、303は、オーバーレイネットワークレベルで互いの間に接続を形成するように構成される。すなわち、階層化ネットワークのノード301、302、303は、それらが階層化ネットワークの他のノード301、302、303とどのような接続は形成することができてどのような接続は形成することができないかを指定するオーバーレイネットワークプロトコルに従うように構成される。したがって、すべてのノードは、基礎となるインフラストラクチャ(例えば、インターネット)を介して互いに物理的に接続することが可能であるが(必ずしもそうではないが)、それらが、階層化ネットワーク300の関連のあるオーバーレイネットワークプロトコルにしたがって動作する階層化ネットワークのノード301、302、303として参加しているとき、そのようなノード301、302、303間の接続は、より制限される可能性がある。階層化ネットワーク300の2つのノード301、302、303間の接続は、これらのノードが直接通信可能であることを意味し、これは、この文脈では、階層化ネットワーク300の別のノード301、302、303を介してホップを実行する必要がないことを意味する。階層化ネットワークなどのオーバーレイネットワークの文脈では、「接続」は、階層化ネットワーク300のレベル(すなわち、階層化ネットワークのオーバーレイネットワークプロトコルのレベル)における接続(すなわち、エッジ)を意味する。
LN300がBLNである実施形態では、第2のノード302のうちのいくつかまたはすべては、それらの第2のノード302が接続されているコアノード301にブロックチェーントランザクションを送信するように構成され得る。いくつかの例では、第2のノード302は、ブロックチェーントランザクションを生成してから、ブロックチェーントランザクションをコアノード(複数可)301に送信し得る。他の例では、第2のノード302は、ブロックチェーントランザクションをコアノード(複数可)301にフォワードし得る。例えば、第2のノード302は、外部ノード303からブロックチェーントランザクションを受信し、次に、受信したブロックチェーントランザクションをコアノード(複数可)301に送信し得る。同様に、所与の第2のノード302(すなわち、第2のノードのうちのいくつかまたはすべて)は、所与の第2のノード302に接続されたコアノード(複数可)301および/または外部ノード303からブロックチェーントランザクションを取得するように構成され得る。
追加的または代替的に、外部ノード303のうちのいくつかまたはすべては、それらが接続されているコアノード(複数可)301にブロックチェーントランザクションを送信するように構成され得る。外部ノード303はまた、それらが接続されている第2のノード(複数可)302にブロックチェーントランザクションを送信するように構成され得る。いくつかの例では、外部ノード303は、ブロックチェーントランザクションを第2のノード302に、そしてコアノード301に送信し得る。
外部ノード303のうちのいくつかまたはすべては、他の外部ノード303、例えば、同層内の外部ノード、または順序付けられた層のセット内の前の層もしくは次の層の外部ノードにブロックチェーントランザクションを送信するように構成され得る。
BLN300のコアノード301がそれぞれブロックチェーンノード104の役割を果たす実施形態では、第2のノード302および/または外部ノード303のうちのいくつかまたはすべては、所与の第2のノード302または外部ノード303が接続されているマイニングノード104Mのトランザクションのプールにおいて所与のトランザクションが受け入れられたことの確認を要求するように構成され得る。プール154(メムプールと呼ばれることがある)は、ブロックチェーンネットワーク106のコンセンサスルールのセットにしたがって妥当性確認されたトランザクションを含む。トランザクション(例えば、「第1のトランザクション」)がプール154に含まれる場合、マイニングノード104Mは、第1のトランザクションの入力によって参照される出力を二重支出しようとする別のトランザクション(例えば、「第2のトランザクション」)を受け入れない。したがって、第2のノード302および/または外部ノード303は、トランザクション(例えば、ノード302、303によってブロックチェーンネットワーク106にサブミットされたトランザクション)が受け入れられたことをチェックするために、またはトランザクション(例えば、BLN300の別のノードから受信されたトランザクション)が二重支出試行であるかどうかをチェックするために、コアノード301にクエリを行うことができる。コアノード301は、要求に対する応答を要求側ノード302、303に送信するように構成される。
追加的または代替的に、第2のノード302および/または第3のノード303は、ブロックチェーン150のブロック151においてマイニングされたトランザクションのマークルプルーフに対する要求をコアノード301に送信するように構成され得る。マークルプルーフは、当業者によく知られている。マークルプルーフは、マークルルートまで遡るハッシュのシーケンスである。ブロック151においてトランザクションがマイニングされたかどうかを検証するために、ノード302、303は、トランザクションのハッシュを取り、それをマークルプルーフのハッシュのシーケンス内の最初のハッシュ(すなわち、トランザクションのハッシュと同じレベルのマークルツリーのハッシュパートナー)と連結し、結果をハッシングする。この連結およびハッシングのプロセスは、マークルプルーフ内のハッシュのすべてが利用されるまで繰り返される。得られたハッシュがマークルルートと同一である場合、トランザクションはマークルツリーに含まれなければならず、したがってブロック151に含まれなければならない。コアノード301は、マークルプルーフを要求側ノード302、303に送信するように構成される。
追加的または代替的に、第2のノード302および/または第3のノード303は、所与のブロック151のブロックヘッダに対する要求をコアノード301に送信するように構成され得る。他のデータの中でも、ブロックヘッダは、そのブロック151にマイニングされたトランザクションのマークルルートを含む。コアノード301は、マークルプルーフを要求側ノード302、303に送信するように構成される。
いくつかの実施形態では、コアノード301のうちのいくつかまたはすべては、トランザクションのセットを第2のノード(複数可)302のうちのいくつかまたはすべておよび/またはコアノード301に接続された外部ノード(複数可)のうちのいくつかまたはすべてに送信するように構成され得る。セット内のトランザクションは、共通の属性を共有し得る。例えば、コアノード301は、特定のプロトコルフラグを含むすべてのトランザクションを送信し得る。フラグは、トランザクションの出力、例えば、使用不可能な出力に含まれ得る。別の例として、トランザクションは、特定の(および同じ)ブロックチェーンアドレスを含み得、例えば、トランザクションは、同じブロックチェーンアドレスに対して支払い可能であり得る。外部ノード303は、コアノード301が、外部ノード303に関連付けられたアドレスに支払い可能な任意のトランザクションを送信することになることを、コアノード301と合意しているであろう。さらに別の例として、トランザクションは、二次的なコンセンサスルールセットを含み得る。すなわち、トランザクションは、出力において、2つ以上の制御分岐を含み得、各制御分岐は、それぞれのコンセンサスルールセットに固有である。出力は、第1のルールセットに固有の第1の制御分岐と、第2のルールセットに固有の第2の制御分岐とを含み得る(2つの制御分岐は、if-else条件に含まれ得る)。ノード302、303が第2のルールセットを実装するように構成される場合、コアノード301は、トランザクションをノード302、303に送信し得る。ノード302、303が第1のルールセットを実装するようにも第2のルールセットを実装するようにも構成されていない場合、コアノードは、トランザクションをノード302、303に送信しない。
マイニングノード104Mであるコアノード301は、そのマイニングノード104Mによってブロック151にマイニングされた生成トランザクション(「コインベース」トランザクションとも呼ばれる)において、そのマイニングノード104Mに固有の識別子(例えば、「Miner ID」)を含み得る。BLN300の他のノードは、識別子を使用して、ネットワーク上のマイニングノード104Mを識別し得る。
LN300のノード301、302、303を識別する別の方法は、デジタル証明書によるものである。ノード301、302、303のうちのいくつかまたはすべては、デジタル証明書に関連付けられ得る。デジタル証明書は、それぞれのノードの識別子、例えば、そのノードに関連付けられた公開鍵、ノードのネットワークアドレス(例えば、IPアドレス)などを含み、それらを証明する。LN300のノードは、異なるノードのデジタル証明書を使用して、そのノードに接続し得る。例えば、外部ノード303は、第2のノード302からデジタル証明書を取得し、デジタル証明書に含まれる第2のノードの識別情報を使用して第2のノード302に接続し得る。
所与の層のノードは、順序付けられた層のセット内の次の層のノードにデジタル証明書を発行し得、すなわち、コアノード301が第2のノード302にデジタル証明書を発行し得、第2のノード302が第1の外層の外部ノード303にデジタル証明書を発行し得、以下同様である。いくつかの例では、所与の層のノードは、同層のノードにデジタル証明書を発行し得、例えば、第2のノード302が、それぞれのデジタル証明書を1つまたは複数の他の第2のノード302に発行し得る。
接続プロトコル:上述したように、階層化ネットワーク300に接続している各ノードは、接続プロトコルにしたがって接続し得る。すなわち、接続ノードは、接続プロトコルのルールに従わなければならない。接続ノードは、接続プロトコルによって許可される接続のみを形成し得る。他の接続は形成されないであろう。例では、接続ノードは、コアノード301、第2のノード302、または外部ノード303であり得る。いくつかの例では、LN300の各ノードは、接続プロトコルに従わなければならない。他の例では、LN300に初めて接続するノード、またはLN300に再参加するノードのみが、接続プロトコルに従わなければならない。図3~図6は、接続プロトコルにしたがって確立される例示的なLN300、400、500、600を示す。
物理的にいえば、LN300のノードの各々は、いくつかの例では、例えばインターネットを介して、何らかの他のレベルで互いに接続され得るか、または接続することが可能であり得ることに留意されたい。接続プロトコルは、オーバーレイネットワークのレベルで、すなわち、階層化ネットワークのレベルで、どの接続を形成することができるかについて制限を課し、いくつかの接続は存在しないか、または許可されない。LN300の各接続ノードは、LN300のオーバーレイレベルプロトコル(接続プロトコルを含む)にしたがって動作するように構成され、オーバーレイレベルプロトコルは、ノードがどの接続をオーバーレイレベルで形成することができてどの接続を形成することができないかを決定する。言い換えれば、接続は、2つのノードがそれらのプロトコルによって形成することができるように構成された許可された通信チャネルである。あるノードが別のノードとの接続を有する場合、そのノードは、階層化ネットワークの別のノードを介してホップすることなくそのノードと通信することができるが、そうでない場合、通信することができず、それらの間に接続を有する1つまたは複数の他のノードを介してホップすることによってのみ通信し得る。
接続プロトコルは、いくつかの例ではコアノードが最内層であり得るので先行する層に接続することができない場合を除いて、接続ノードが、先行する(より内側の)層の少なくとも1つのノードと、少なくとも1つのコアノードとに接続することを要求する。接続ノードが第2のノードである例では、これら2つの要件は同等である。接続ノードが第1の外層の外部ノードである場合、接続ノードは、少なくとも第2のノード302およびコアノード301に接続する。
接続プロトコルは、接続ノードが2つ以上のコアノードに接続することを要求し得る。接続プロトコルは、接続ノードが、コアノードのすべてではないが2つ以上のコアノード、例えば1つを除くすべてのコアノードに接続することをさらに要求し得る。接続ノードは、2つ以上のコアノードに接続しなければならない第2のノードであり得る。すなわち、第2のノードのうちのいくつかまたはすべては、2つ以上のコアノード(いくつかの例では、すべてのコアノードではない)に接続しなければならない。
接続プロトコルは、接続ノードが1つまたは複数の第2のノードに接続することを要求し得る。接続ノードが第2のノードである場合、これは、接続(第2の)ノードが1つまたは複数の異なる第2のノードに接続しなければならないことを意味する。接続ノードが外部ノードである場合、接続(外部)ノードは、1つまたは複数の第2のノードに接続しなければならない。接続外部ノードは、第1の外層の外部ノード、または第2の層の外部ノードなどであり得る。
接続プロトコルは、先行する層のノードに接続された外部ノードが、先行する層のノードが接続されているコアノード(複数可)(上記では「コア祖先」と呼ばれる)のうちのいくつかまたはすべてに接続しなければならないことを要求し得る。例えば、外部ノードは第2のノードに接続され得る。その場合、外部ノードは、第2のノードが接続されているコアノード(複数可)にも接続しなければならない。外部ノードが2つ以上の第2のノードに接続されている場合、接続プロトコルは、外部ノードが、第2のノードの各々が接続されているコアノード(複数可)に接続しなければならないことを要求し得る。別の例として、第2の外層の外部ノードは、第1の外層の外部ノードに接続され得る。その例では、接続プロトコルは、第2の外層の外部ノードが、第1の外層の外部ノードが接続されているコアノード(複数可)に接続しなければならないことを要求する。
接続プロトコルは、外部ノードが同じ外層の1つまたは複数の(例えば、2つの)外部ノードに接続することを要求し得る。接続プロトコルは、各外部ノードが同層の1つまたは複数の外部ノードに接続することを要求し得る。代替的に、いくつかの外層は、1つまたは複数の同層接続を形成する外部ノードを含み得、いくつかの外層は、1つまたは複数の同層接続を形成しない外部ノードを含み得る。接続プロトコルは、同じ外層の各外部ノードが、その層の同じ数の異なる外部ノードに接続しなければならないことを要求し得る。例えば、第1の外層の各外部ノードは、2つの外部ノードに接続するように要求され得る。第2の外層の各外部ノードは、3つの外部ノードに接続するように要求され得る。すなわち、外部ノードが接続される同層の外部ノードの数は、外層間で変化し得る。
いくつかの実施形態では、第iの外層(例えば、第3の外層)の外部ノードは、先行する第(i-1)の層(例えば、第2の外層)の外部ノードに接続され得る。接続プロトコルは、後続の第(i+1)の外層の外部ノード(例えば、すべての外部ノード)が、第iの外層の外部ノードが接続されている第(i-1)の層の各ノードに接続しなければならないことを要求し得る。例えば、図5のLN500内の第5の層の外部ノード305は、第4の層の外部ノード304に、そして第3の層の外部ノード303に接続されている。いくつかの例では、接続プロトコルは、第(i+1)の外部ノードが、第iの外層の外部ノードが接続されている各先行する層の各外部ノードに接続しなければならないことを要求し得る。
LN300のノードのうちのいくつかまたはすべてがデジタル証明書に関連付けられている実施形態では、接続プロトコルは、接続ノードが、それぞれのデジタル証明書に関連付けられているノードに関連付けられているノードのみに接続しなければならないことを要求し得る。いくつかの実施形態では、接続プロトコルは、それぞれのノードに関連付けられたデジタル証明書が、それぞれのノードに先行する層のノード(例えば、コアノード)によって、またはいくつかの例では、それぞれのノードの同層のノード(例えば、異なる第2のノード)によって発行された場合にのみ、接続ノード(例えば、外部ノード)がそれぞれのノード(例えば、第2のノード)に接続しなければならないことを要求し得る。
いくつかの実施形態では、接続プロトコルは、接続ノードが、接続ノードにデジタル証明書を発行したノードのみに接続できることを要求し得る。すなわち、ノードに接続することは、そのノードからデジタル証明書を受信することを含む。
接続プロトコルは、BLNの構築を可能にする。Mandalaネットワークと同様に、BLNは層状に構築される。Mandalaネットワークとは異なり、第1の層は、不完全グラフ(例えば、ほぼ完全グラフ)を形成し得る。BLNとMandalaネットワークとの間の他の違いは、BLNでは、各後続層のノードが異なる次数を有し得ること、ノードが中央層の2つ以上のノードに接続され得ること、および/またはノードの次数が層間で異なり得ることである。
好ましくは、中心コアの外側のすべてのノードについて:
(i)各ノードは、中心コア内のn1個のノードのうちのm個に接続されている。
(ii)各ノードはすべての層のノードに接続され、ここでgは層の総数である。
(iii)各ノードは、厳密に1つのコミュニティのメンバである。最大でn2個のコミュニティが存在し、ここでn2は第2の層のノードの数である。
(iv)各ノードは、最大3つのホップで他のすべてのノードに接続されている。これはグラフの直径と呼ばれる。
(i)各ノードは、中心コア内のn1個のノードのうちのm個に接続されている。
(ii)各ノードはすべての層のノードに接続され、ここでgは層の総数である。
(iii)各ノードは、厳密に1つのコミュニティのメンバである。最大でn2個のコミュニティが存在し、ここでn2は第2の層のノードの数である。
(iv)各ノードは、最大3つのホップで他のすべてのノードに接続されている。これはグラフの直径と呼ばれる。
BLNでは、「コミュニティ」は、全く同じコア祖先のセットを共有するノードのセットとして定義される。図6は、ネットワークn1=6、m=3、およびg=4のBLNを示しており、黒色のノードコミュニティおよび白色のノードコミュニティのノードという2つの別個のコミュニティが描かれている。白色のノードコミュニティは、中心コアのLHS上の3つのノードにすべて接続されているノードを含み、黒色のノードコミュニティは、中心コアのRHS上の3つのノードにすべて接続されているノードを含む。
Mandalaネットワークの特徴は、コア層(i=1)の外側のすべてのノードが厳密に1つのコア祖先に接続されていることである(すなわち、どこでもci=1である)。これは、Mandalaネットワークの創発特性に大きく寄与する。
・ ネットワークサイズ(N=Σini)が大きくなるにつれて定数に漸近する平均最短パス長を有する。
・ ネットワークサイズ(N=Σini)が大きくなるにつれて非常に疎になる。
・ ランダムなノードの故障に対してロバストである。
・ ネットワークサイズ(N=Σini)が大きくなるにつれて定数に漸近する平均最短パス長を有する。
・ ネットワークサイズ(N=Σini)が大きくなるにつれて非常に疎になる。
・ ランダムなノードの故障に対してロバストである。
BLNの特徴は、すべての非コアノードが少なくとも1つの祖先に接続することである。しかしながら、BLNの定義は、コア祖先への最大m個の接続を有する非コアノードに対応する(すなわち、どこでも1≦ci≦mである)。BLN全体にわたるci=1から1≦ci≦mへの一般化の理由は、ブロックチェーンプロトコルのアーチファクトとして理解することができる。ブロックチェーンシステムを定義するプロトコルは、確率的セキュリティモデルに依存する。本質的に、これは、イベントがブロックチェーン150上に記録されることの既得権を有するBLN内の任意の参加者(ノード)が、ネットワークハッシュパワーの最小割合fに接続することによって確率的セキュリティモデルを考慮に入れなければならないことを意味し、ここで、総ハッシュパワーの100%は、BLNのコア層内のノード間に分散される。
コア層がそのn1個のコアノードの間でハッシュパワーの均一な平衡分布を示すと仮定すると、ノードの最小割合は以下の通りである:
f=m/n1
f=m/n1
ブロックチェーンプロトコルは、最小割合の下限がf=0.51であることを示すが、規模の大きいBLNのネットワーク参加者は、(例えば、二重支出への)耐性を高めるために、これよりも高い割合(例えば、f=0.67)を要求し得る。BLNは、パラメータmの選択によって特徴付けられ得るが、これは、BLN内の参加者のための動作の確率的セキュリティを規定するものであり、当該BLNのニーズの特定のユースケースに依存する。
コアに最も近い第2の層L2内のノードは、ブロックチェーンプロトコルの確率的セキュリティモデルに最も強く依存しており、この依存性は、層がLgに近づくほど減少し得る。接続プロトコルは、厳密にc2=m個のコア祖先に接続することをL2内のノードに求め得、一方、すべての後続の層i>2内のノードは、コア祖先の範囲1<<ci≦m内のどこにでも接続することができる。いくつかの例では、すべての後続の層のノードは、m個のコア祖先に接続しなければならない。
BLNの中心コアの外側のノードは、コアへの「SPVのような」接続を有し得る。これは、それらが以下を行うことができることを意味する。
a)トランザクションをコアノードに送信する。
b)トランザクションがそのメムプール/候補ブロックにおいて受け入れられたかどうかをコアノードに尋ねる。
c)ブロックにおいてマイニングされたトランザクションのマークルプルーフを求める。
d)ブロックヘッダの最新リストを求める。
a)トランザクションをコアノードに送信する。
b)トランザクションがそのメムプール/候補ブロックにおいて受け入れられたかどうかをコアノードに尋ねる。
c)ブロックにおいてマイニングされたトランザクションのマークルプルーフを求める。
d)ブロックヘッダの最新リストを求める。
これらの単純なターゲット化された要求は、BLNを使用して最も広い可能な範囲のスケーラブルなソリューションが上に構築されることを可能にしながら、コアノード301にできるだけ負担をかけないように設計される。多くのユースケースは、上述したタイプの接続しか必要としない。いくつかの例では、第2のノード302および/または外部ノード303は、上記のアクションa)~d)のみを実行することができるように構成される。しかしながら、他のソリューション、典型的には企業レベルでは、特定の基準を満たすトランザクションなど、より多くのデータを積極的に提出するようにコアに求め得る。したがって、アクションa)~d)は、BLNに対する最小要件であるが、いくつかの例では、それらのノードとコアとの間の追加のデータ転送も可能である。
スマートコントラクトを動作させるノードについては、SPVのようなアクションa)~d)のみを必要とするものもあれば、コアノードからより多くのデータを受信するための合意を必要とするものもある。
いくつかのBLNでは、ユーザは、層3以上のノードを動作させることができ、スマートコントラクトは、層2以上のノードによって動作され得る。特定のアドレスを含むトランザクションについてブロックチェーン150を絶えず監視する必要があるので」、ユーザは、現実的には、特定の出力アドレスを有するトランザクションについてブロックチェーンを継続的に「リッスン」することができない。期間ごとにブロックチェーンに送信可能なトランザクションの数が増え続けていることを考慮すると、そのような絶え間ない監視は、エンドユーザにとって現実的ではない。ブロックチェーンを絶えず監視することは、いくつかのブロックチェーンのウォレットアーキテクチャの間で一般的であるが、期間ごとにブロックチェーンにサブミットされるトランザクションの数、およびブロックチェーンのユーザの数の両方が将来劇的に増加すると予想されることを考慮すると、スケーラブルなソリューションではない。以下の例を考慮する:アリスはボブに支払いたい。アリスは、ボブに属することをアリスが知っている出力アドレスで、所望の額のトランザクションを作成する。次いで、アリスは、このトランザクションを、ボブに直接サブミットするのではなく、マイニングネットワークにサブミットする。トランザクションが受け入れられたことをボブが知るために、ボブは、ブロックチェーンを「リッスン」して、自身の出力アドレスを有するトランザクションがネットワーク上に現れたかどうか、およびいつ現れたかを確認しなければならない。ボブは、自身の代わりにこれを行うようマイニングノードに求めなければならない。これは、マイニングノードがボブのアドレスの記録を保持し、それが受信するすべてのトランザクションがこのアドレスに一致するかどうかをチェックしなければならないことを意味する。これをマイナーが行うための経済的インセンティブはないことに留意されたい。マイナーが毎秒100万回のトランザクションを処理しなければならず、それらが100万個のアドレスと一致するかどうかをチェックしなければならないと仮定すると、これはすぐに非現実的になることがわかる。
代わりに、BLNでは、アリスはボブに直接接続され得、トランザクションをボブに直接送信することができる。次いで、ボブは、トランザクションをコア内のマイナーに送信することができると同時に、それらがトランザクションを有効なものとして受け入れるかどうか尋ねることができる。トランザクションがマイナーの手数料を含むので、マイナーは、トランザクションを受け入れるためのインセンティブが与えられ、放棄されることとなるブロックを構築するリスクを下げるために、トランザクションを受け入れたかどうかを確認するためのインセンティブが与えられる。システムをより一層セキュアにするために、アリスは、アリスのトランザクションへの入力のマークルプルーフをボブに送信し得る。ボブは、ブロックヘッダのコピーを有するので、これらのマークルプルーフをチェックし得る。これは、アリスの入力がある時点でブロックチェーン150の一部であったことをボブに保証し、アリスがすでにそれらを使用していた場合、ボブは、アリスがボブに与えたトランザクションにおいてアリスから署名を受信しているので、二重支出のプルーフを有することとなる。ボブは、スマートコントラクト(第2のノード)であり得、Aliceは、そのスマートコントラクトと対話したいユーザ(外部ノード)であり得ることに留意されたい。スマートコントラクトオペレータがスマートコントラクトの処理を容易にするためにマイニングノードといかなる特定の合意も行っていないという意味でスマートコントラクトが「ライト」である場合、それは、状態の変化をトリガするトランザクションを受信するためにブロックチェーン150をリッスンすることに依存することもできない。アリスは、そのようなトランザクションをスマートコントラクトに直接送信しなければならない。
サービスプロバイダは、層2以上のノードを動作し得る。サービスプロバイダの場合は、ユーザまたは軽いスマートコントラクトの場合とは異なる。サービスプロバイダは、コアマイニングノードまたはコアノードの集合と商業的な合意を有し得、次いで、それらは、トランザクションの特定のサブセットをサービスプロバイダノードに伝搬する。そのようなトランザクションは、容易に識別可能であり、例えば以下の特定の基準を満たすべきである:
・ 特定のプロトコルフラグを有するOP_RETURNデータ。例えば、メタネットプロトコル、トークン化プロトコル、またはデジタル証明書プロトコル。
・ 出力アドレスは、小さい特定のセットに一致する。例えば、企業レベルのスマートコントラクトまたはアドレスホワイトリスト/ブラックリスト。
・ OP_VER制御分岐によって示される二次的なコンセンサスルールセット。
・ 特定のプロトコルフラグを有するOP_RETURNデータ。例えば、メタネットプロトコル、トークン化プロトコル、またはデジタル証明書プロトコル。
・ 出力アドレスは、小さい特定のセットに一致する。例えば、企業レベルのスマートコントラクトまたはアドレスホワイトリスト/ブラックリスト。
・ OP_VER制御分岐によって示される二次的なコンセンサスルールセット。
加えて、これらのルールに従うか、または他の方法でサービスレベル合意に関与するコミュニティの一部として識別される、コアに送信されるトランザクションは、トランザクション手数料が低くなり得る(または0ですらある)。不足分は、より高いトランザクション量によって、またはサービスレベル合意からの不換の収益によって埋め合わせられ得る。
BLN300のすべてのノードは、それらのアイデンティティに関連付けられた半永久的な公開鍵に関連付けられ得る。この公開鍵は、セキュアな通信を可能にし、ID鍵(identity key)の決定論的導出を通して、またはID鍵を使用してトランザクション鍵に署名もしくは暗号化することによって、ブロックチェーントランザクションで使用される公開鍵へのリンクを提供することができる。
マイニングコアノードを識別する2つの方法は、以下の通りである:
1)Miner ID。マイナーは、マイナーがマイニングする各ブロック内のコインベーストランザクションの入力に自身のID鍵を追加することによって自身を明らかにすることを選択し得る。
2)ネットワーク分析。一部のマイナーは、匿名のままであることを選択する。しかしながら、ネットワークの分析によって、例えば、新しいブロックがどこから来たかを見ることによって、どのノードがブロックを構成しているかを識別することは依然として可能である。
1)Miner ID。マイナーは、マイナーがマイニングする各ブロック内のコインベーストランザクションの入力に自身のID鍵を追加することによって自身を明らかにすることを選択し得る。
2)ネットワーク分析。一部のマイナーは、匿名のままであることを選択する。しかしながら、ネットワークの分析によって、例えば、新しいブロックがどこから来たかを見ることによって、どのノードがブロックを構成しているかを識別することは依然として可能である。
BLNのノードが、両方のタイプのマイナーを識別することができ、その結果、それらのトランザクションが受け入れられたかどうかに関して、できるだけ多くのマイナーをポーリングすることができることは重要である。
Miner IDを有するコアノードは、デジタル証明書を層2ノードに発行することができる。これは、それらがこれらのノードとのサービスレベルの合意を有するからであり得るか、またはこれらのノードが有償で証明書を要求したからであり得る。この意味で、コアノードは、認証局(CA)として機能することができる。
コアノードからの証明書の有無にかかわらず、層2ノードは、外部CAにデジタル証明書を発行するように求め得る。したがって、各層2ノードは、それらのアイデンティティを証明する少なくとも1つのデジタル証明書を有し得る。それらは、層2内の他のノードに証明書を発行し、それによって、それらの間に信用の輪(web of trust)を作成し得る。層2内のノードは、層3内のノードに証明書を発行し得、層3内のノードは、層4内のノードに証明書を発行し得、以下同様であり、公開鍵暗号基盤(PKI)と呼ばれる証明書の階層を作成する。
実際に、そのようなPKIは、BLN内のノードの識別のためだけでなく、正しいBLN構造が守られることを保証するためにも使用され得る。例えば、層3ノードがあまりにも多くの層4ノードに証明書を発行する場合、またはシステム内の他のノードへの適切な接続を有することを保証しない場合、層3ノードの証明書は無効にされ得る。
これらの証明書自体は、ブロックチェーン150上に記憶され得る。これにより、PKIが透明化され、容易に監査可能になる。
順序付けおよびタイムスタンプ付与
アプリケーションデータの順序が重要であるブロックチェーンを使用して実装可能なアプリケーションはいくつか存在し得る。これに対処するために、本開示の実施形態によれば、ネットワークの1つまたは複数のノードは、データ項目の確定的な順序を決定するために、サービスにサブミットされた異なるデータ項目間を仲裁し、次いでその順序をブロックチェーン上に不変に記録させる証明サービスとして機能するように構成され得る。
アプリケーションデータの順序が重要であるブロックチェーンを使用して実装可能なアプリケーションはいくつか存在し得る。これに対処するために、本開示の実施形態によれば、ネットワークの1つまたは複数のノードは、データ項目の確定的な順序を決定するために、サービスにサブミットされた異なるデータ項目間を仲裁し、次いでその順序をブロックチェーン上に不変に記録させる証明サービスとして機能するように構成され得る。
証明サービスは、1つまたは複数の証明ノードにおいて実装される。実施形態では、これらは、インターネットなどの基礎となるインフラストラクチャネットワーク上にオーバーレイされたオーバーレイネットワークのノードである。しかしながら、代替的に、それらが、それ自体のネットワーク、例えば組織内のプライベートネットワークのインフラストラクチャノードとなる可能性があることは除外されない。いずれにしても、1つまたは複数の証明ノードは、1つまたは複数のクライアントノードからデータ項目を受信し、受信されたデータ項目の順序を記録するトランザクションを形成し、これらのトランザクションをブロックチェーン150に記録するために1つまたは複数のコアノードにフォワードするように構成される。コアノードは、ブロックチェーンネットワーク106のノード104である。それらは、マイニングノード104M、ストレージノード104S、またはそれらの組合せを含み得る。実施形態では、コアノードの各々は、マイニングノード104Mおよび/またはストレージノード104S(例えば、フルコピーノード)である。
クライアントノードの各々は、サービスのユーザのコンピュータ機器を含むエンドユーザノードであり得る。これは、個々のユーザ、または会社、学術機関、もしくは政府機関などの組織などであり得る。したがって、各クライアントノードは、1つまたは複数のユーザ端末、および/または1つまたは複数のサイトに1つまたは複数のサーバユニットを含むサーバを含み得る。各クライアントノードは、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置とを備える。これらは、例えば、他のネットワーク要素またはユーザ機器に関連して前述したようなメモリ媒体および/またはプロセッサの形態のいずれかをとり得る。メモリは、処理装置上で実行されるように構成されたクライアントソフトウェアを記憶し、クライアントソフトウェアは、実行されるときに、以下の実施形態または類似のもののいずれかによる証明ノード(複数可)によって提供される証明サービスのクライアントとしてノードを動作させるように構成される。任意選択で、送信側エンドユーザノードのうちの1つまたは複数は、ブロックチェーンネットワーク106のユーザ102のユーザ機器103を含み得、クライアントソフトウェアは、ブロックチェーンウォレットアプリケーション105などを含み得る。しかしながら、証明サービスは、そのようなエンドユーザに代わって少なくともいくつかのトランザクションを定式化するように構成され得、そのようなトランザクションのすべてが必ずユーザのウォレット105において定式化されるのではない。
証明ノードは、クライアントノードとコアノードとの間を仲介する証明サービスを提供するように構成される。各証明ノードは、1つまたは複数の物理サーバユニットを含むサーバの形態をとり得る。そのような各ノードは、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置とを備える。これらは、例えば、他のネットワーク要素に関連して前述したようなメモリ媒体および/またはプロセッサの形態のいずれかをとり得る。メモリは、証明ノードの処理装置上で実行されるように構成された証明サービスソフトウェアを記憶する。このソフトウェアは、実行されたときに、以下で説明される実施形態のいずれかまたは類似のものにしたがって動作する証明サービスを提供するように構成される。実施形態では、クライアントノード、コアノード、および/または他の証明サービスノードが証明ノードのアイデンティティを検証することができるように、各証明ノードのアイデンティティが認証局によって証明され得る。証明サービスノード、コアノード、および/または他のクライアントノードがクライアントノードのアイデンティティを検証することができるように、各クライアントノードのアイデンティティが認証局によって証明され得る。証明サービスを提供または使用するためのそのようなノード間の対話は、検証を条件とし得る。代替的または追加的に、オーバーレイネットワークにおけるノード識別のための代替的な機構として、ノードバージョニングが使用され得る。
実施形態では、上記の構成は、図3~図6に関連して説明され、例として図7にも示されるタイプなどの階層化ネットワーク700の形態で実装され得る。すなわち、階層化ネットワークは、コアノード701を含むコアネットワークと、コアの周りの少なくとも1つの中間層であって、各中間層が1つまたは複数の中間層ノード702を含む少なくとも1つの中間層と、中間層の最も外側の周りの少なくとも1つの外層であって、各外層が1つまたは複数の外層ノード703を含む少なくとも1つの外層とを含む。ここでの「外層(outer layer)」の「外(outer)」という用語は、それ自体、必ずしも階層化ネットワーク700全体の最外層に限定されるものではないが、それも1つの可能性であることに留意されたい。実施形態では、図7の階層化ネットワーク700は、図3の階層化ネットワーク300であり得、この場合、図7の外層ノードは、図3または図4の第3の層ノードであり、図7の中間層ノード702は、図3または図4の第2の層ノード302であり、図7のコアノード701は、図3または図4のコアノード301であり得る。
図3~図6に関連して述べたように、階層化ネットワーク700は、インターネットなどの基礎となる物理またはインフラストラクチャネットワーク上にオーバーレイされたオーバーレイネットワークであり得る。そのような実施形態では、ノード701、702、703は、オーバーレイネットワークレベルで互いの間に接続を形成するように構成される。すなわち、階層化ネットワークのノード701、702、703は、それらが階層化ネットワークの他のノード701、702、703とどのような接続は形成することができてどのような接続は形成することができないかを指定するオーバーレイネットワークプロトコルに従うように構成される。したがって、すべてのノードは、基礎となるインフラストラクチャ(例えば、インターネット)を介して互いに物理的に接続することが可能であり得るが、それらが、階層化ネットワーク700の関連のあるオーバーレイネットワークプロトコルにしたがって動作する階層化ネットワークのノード701、702、703として参加しているとき、そのようなノード701、702、703間の接続は、より制限される可能性がある。階層化ネットワーク700の2つのノード701/702/703間の接続は、これらのノードが直接通信可能であることを意味し、これは、この文脈では、階層化ネットワーク700の別のノード701/702/703を介してホップを実行する必要がないことを意味する。オーバーレイネットワークの文脈では、「接続」は、オーバーレイネットワークのレベル(すなわち、階層化ネットワークのオーバーレイネットワークプロトコルのレベル)における接続(すなわち、エッジ)を意味する。
各中間層ノード702は、コアネットワーク内の少なくとも1つのコアノード701(ブロックチェーンネットワークノード104)に接続されている。コアネットワークは、ブロックチェーンネットワーク106の少なくとも一部を含む。実施形態では、コアネットワークは、それ自体、完全なネットワークであり得る。
場合によっては、中間層ノード702および/または外層ノード703のうちのいくつかは、ブロックチェーンネットワーク106の周辺ノード104、例えば、フォワーディングノード104Fなどの、マイニングノード104Mおよび/またはストレージノード104S以外のノードを含み得る。代替的に、それらは、ブロックチェーンネットワーク106のクライアントとして以外、ブロックチェーンネットワーク106においていかなる役割(マイニング、記憶、またはフォワード)も有さないノードを含み得る。
各外層ノード703は、少なくとも1つの中間層内の中間層ノードのうちの少なくとも1つに接続されている。実施形態では、各外層ノード703はまた、少なくとも1つのコアノード701への(すなわち、ブロックチェーンネットワーク106への)少なくとも1つの接続を有する。いくつかのそのような実施形態では、外層ノード703のうちの1つまたは複数はそれぞれ、コアノード701のすべてではないが2つ以上への接続を有する。実施形態では、階層化ネットワーク700は、全体として、非完全なネットワークであり得、すなわち、すべてのノード701、702、703が、オーバーレイネットワークレベルで、他のすべてとの接続を有するわけではない。実施形態では、所与の層内の各ノードは、同層内の少なくとも1つの他のノードに接続され得る。例えば、中間層内の各ノード702は、同じ中間層内の1つまたは複数の他のノードに接続され得、および/または、外層内の各ノード703は、同じ外層内の1つまたは複数の他のノードに接続され得る。実施形態では、接続はまた、異なる中間層内の異なる中間層ノード702間、および/または異なる外層内の異なる外層ノード703間に形成され得る。
実施形態では、階層化ネットワーク700は、図3~図6に関連して説明したプロトコルルールまたは構造的特徴のいずれかにしたがって構成され得、中間ノード702の各中間層は、コアと最外層との間の層であり、外部ノード703の各外層は、第2の層の外側の層である(ここで、中間層(複数可)がコアと外層(複数可)との間にある)。
以下の実施形態は、階層化ネットワークの文脈で例示されるが、これは限定ではなく、より一般的には、証明ノード(複数可)は、ブロックチェーンネットワーク106の1つまたは複数のクライアントノードと1つまたは複数のコアノード104との間を仲介する任意のタイプのオーバーレイネットワークの任意のノードであり得ることが理解されよう。
階層化ネットワーク700での実装では、少なくとも1つの中間層内の中間ノード702のうちの少なくとも1つが、証明サービスを提供する証明ノード702Aの役割を果たす。少なくとも1つの外層内の外層における外部ノード703のうちの少なくとも1つは、証明ノード(複数可)702Aによって提供される証明サービスのクライアントノード703Cである。各コアノード701は、ブロックチェーンネットワーク106のノード104のうちの1つ、好ましくはマイナー104Mおよび/またはストレージノード104S(例えば、フルコピーノード)である。説明を簡単にするために、2つのクライアントノード703Cおよび2つの証明ノード702Aのみが図7に示されているが、もっと多くてもよいことが理解されよう。実施形態では、クライアントノード703Cおよび証明ノード702Aは、互いに同じコミュニティの一部であり得る。
クライアントノード703Cは、少なくともそれらが証明サービスのクライアントであるという点でクライアントである。実施形態では、クライアントノード703Cのうちの1つまたは複数の上で実行されるクライアントソフトウェアは、そのノード703Cを、1つまたは複数の第2の層ノード702によって提供される1つまたは複数の追加サービス、例えば、データベースサービスまたはスマートコントラクトサービスのクライアントとして動作させるようにさらに構成され得る。および/または、ブロックチェーン150にクエリを行うことができるように、そのノード703Cを、ブロックチェーンネットワーク106の1つまたは複数のコアノード701(例えば、104M、104S)のクライアントとして動作させるように構成され得る。
また、クライアントノード703Cが証明サービス(および任意選択で1つまたは複数の他のサービス)のクライアントとして説明されるという事実は、これらのノード自体が1つまたは複数のさらなるエンティティ(図示せず)に対する1つまたは複数のさらなるサービスのサーバでもあり得る可能性を除外するものではない。例えば、クライアントノード703Cは、顧客にオンラインサービスを提供する会社のコンピュータ機器を含み得る。「エンドユーザ」は、本明細書では、当該の特定のサービスのエンドユーザを意味し、商業的サプライチェーンの終端にいる個々の消費者に必ずしも限定されない(ただし、それは確かに1つの可能性でもある)。
以下は、順序付けサービスエンティティ702Aがブロックチェーン150を使用して、データ要素が1つまたは複数のクライアントノード703Cから受信された時間および順序付けを記録し得る方法を説明する。任意選択で、順序付けサービスは、タイムスタンプ付与も実行し得る。
最初に、単一の信頼できる順序証明ノード702Aについて方法を説明する。これは、ブロックチェーンネットワークノード104/701のコアを有する階層化ネットワーク700内の単一の中間層(例えば、第2の層)ノードとしてモデル化され得る。この場合、このサービスのユーザは、サービス702Aに直接接続され、任意選択で(コア内の少なくとも1つのコアノード701への接続によって)ブロックチェーン150にも接続されている外層(例えば、第3の層)ノード703Cのユーザであり得る。
データ要素が外層のクライアントノード703Cから受信されると、中間層タイムスタンプ付与サービス702Aは、順序が確立されるようにそれらを集める。特定の期間、例えば0.1秒が経過すると、データ要素のこの順序付きリストは、トランザクションにカプセル化され、コア701を介してブロックチェーン150に送信され、したがって不変に記録される。タイムスタンプが記録に追加される場合、これはまた、順序だけでなく時間も記録する。
例示的なアプリケーションは、データベースなど内のエントリに対する更新の間で確定的な順序を定義することである。この場合、クライアントノード703Cから受信された各データ項目は、データベース内のエントリに対するそれぞれの状態の変化(すなわち更新)を表し得る。しかしながら、そのような更新は、必ずしも交換可能であるとは限らず、すなわち順序が重要である。例えば、データ要素の非可換演算、例えば左からの行列乗算を実行するよう求める2つの要求がある場合、順序は重要である。別の例では、一方の要求がファイルを削除することであり、他方がファイルを読み取ることであり得る。この場合も同様に、これらの要求が適用される順序によって結果が異なる。
別の例示的なアプリケーションは、出力ベースの(例えば、UTXOベースの)ブロックチェーンモデルにおいてスマートコントラクトを実装することである。UTXOベースのトランザクションなどは、本質的に、アカウントベースのモデルのトランザクションがサポートするのと同じ方法ではスマートコントラクトをサポートせず、したがって、スマートコントラクトがUTXOベースのモデルなどの出力ベースのモデルにおいて実装される場合、スマートコントラクトの機能は、基本のトランザクションモデルの上に階層化される必要がある。この場合、ブロックチェーン150上に記録されるべきデータ項目は、ここでも、状態の変化、例えば、所有権の変化などを表し得る。この場合も同様に、順序は、例えば、所有権の割当て試みが有効であるかどうかに影響を与える可能性があるので、重要である。
別の例示的なアプリケーションは、認証局(CA)からのデジタル証明書の順序付けおよびタイムスタンプ付与である。デジタル証明書は、アクセス権または他の電子許可を承認するために使用され、例えば、インターネットを支えるSSL/TLSおよびHTTPSセキュリティにおいて使用される。2011年、オランダのCAは、イランからと思われる攻撃者により不正アクセスされた。偽の証明書が有名なドメインに対して発行され、CAのサーバ上でログファイルが改ざんされた。これらのログファイルが、以下で説明されるような順序付けおよびタイムスタンプ付与サービスを使用してブロックチェーン上に記憶されていたら、プルーフオブワークによって提供されるセキュリティのためにログファイルを変更することは不可能であったであろう。企業のHSM内の秘密鍵がこの攻撃で不正アクセスされたことは注目に値する。このことは、古典的な暗号プロトコルのみで常に情報セキュリティを確保することができるわけではなく、プルーフオブワークなどの他の機構にも頼ることでそのような攻撃を極めて面倒にすることも有益であり得るという事実を浮き彫りにする。
動作中、証明ノード702Aは、中間層と外層との間のオーバーレイネットワーク接続上で、1つまたは複数のクライアントノード703Cから複数のデータ項目を受信するように構成される。データ項目は、本明細書では、任意の用語によってDとラベル付けされ得る。当該の複数のデータ項目は、同じクライアントノード703Cもしくは異なるクライアントノード703Cから受信され得るか、または一部が同じクライアントノード703Cから受信され、一部が異なるクライアントノード703Cから受信され得る。それらは、クライアントノード703Cと証明ノード702Aとの間の接続を介して直接受信され得るか、またはそれらの間の階層化ネットワークの1つまたは複数の他のノードを介してフォワードされ得る(すなわち、送信側クライアントノード703Cと証明ノード702Aとの間の2つ以上のホップを介して受信され得る)。
証明ノード702Aは、複数のデータ項目Dの順序を決定し、したがって、複数のデータ項目のシーケンスを決定するように構成される。実施形態では、決定された順序は、証明ノード702Aにおけるデータ項目の受信の順序である。しかしながら、いくつかの他のアービトレーションルールが適用され得ることは除外されない。例えば、データ項目が、それらを送信したクライアントノード(複数可)703Cによる送信または作成の時間でスタンプされ、証明ノード702Aがこれらのクライアントノードを信頼する場合、順序は、受信時間ではなく、報告された送信または作成の時間であり得る。別の例として、順序は、異なるデータ項目に異なる重み付けを与える優先順位方式に依存し得る。
決定された順序が何であれ、証明ノード702Aは、ブロックチェーン150に記録するための一連のブロックチェーントランザクション152を作成することによって、この順序を証明する。証明ノード702Aは、一連の2つ以上のそのようなトランザクションを生成し、それらは、本明細書では、任意の用語によってTx0、Tx1、Tx2…とラベル付けされ得る。証明ノード702Aは、一連のトランザクションにおけるトランザクションTxのうちの各後続トランザクションのペイロードに、データ項目Dのうちの1つまたは複数のデータ項目の異なるセットの指示を含める。ペイロードは、それぞれのトランザクションの使用不可能な出力に含まれ得る。そのような出力は、その出力のロックスクリプトを終了させるオペコード、例えば、OP_RETURNによって使用不可能にされ得る。しかしながら、他のトランザクションプロトコルでは、ペイロードは他の方法で含まれてもよい。各後続トランザクションにおいて示される1つまたは複数のデータ項目のセットは、証明ノード702Aによって決定されたデータ項目の順序にしたがって、一連のトランザクションにおいてそのトランザクションの直前にあるトランザクションにおいて示されるセットの後に来る。すなわち、一連のトランザクションにおけるトランザクションの順序は、決定されたデータ項目のシーケンスにおけるセットの順序と一致する。
証明ノード702Aは、以下の、一連のトランザクションのための対応する一連の公開鍵/秘密鍵ペアを作成するか、または他の方法で決定する:
P1,P2,P3,…
P1,P2,P3,…
証明ノード702Aは、各鍵ペアの秘密鍵を使用して、以下の、一連のトランザクション内の対応するトランザクションに署名する:
Tx0→Tx1→Tx2→Tx3→…
Tx0→Tx1→Tx2→Tx3→…
トランザクションTx1は、その入力中のロック解除スクリプトにP1の署名を含み、トランザクションTx2は、P2の署名を含み、以下同様である。各トランザクションはまた、それぞれのトランザクションによって証明された1つまたは複数のデータ項目Dのセットの指示を含むペイロードを、例えば、OP_RETURNフィールド内に含む。このペイロードは、各署名によって署名される(スクリプト言語を使用する実施形態では、適切なSIGHASHフラグが使用され得る)。初期ファンディングトランザクションTx0は、P1の署名によってロック解除可能なように構築される。それは、ダスト値を有するアウトポイント0を有し得る。例として、Tx1は、図8に示されるように構築され得る。後のトランザクションはすべて同じ構造を有する。すなわち、Tx2は、Tx1をロック解除するためにTx1を指し示す入力に、P2を使用した署名を含んでおり、P3の署名によってロック解除可能なロックスクリプトを出力に有する、などである。署名は、鍵ペアの対応する公開鍵に基づいて、ブロックチェーンネットワーク106によって検証され得る。ファンディングトランザクションTx0は、データ項目の第1のセットの指示を含んでも含まなくてもよい(シーケンス内のデータ項目の第1のセットは、Tx0またはTx1において示され得る)。
図8に示される形態は、簡略化のためにトランザクション手数料を無視することに留意されたい。これは、(例えば、証明サービスによって管理される)トランザクションに別の入力および出力を追加することによって説明され得る。
OP_RETURNステートメントは、data1と呼ばれるペイロードを含む。これは、Tx1によって証明されたセットの中で証明サービスによって証明された順序でユーザによってサブミットされたデータ要素D、またはその指示を含む(Tx2内のdata2などについても同様である)。各トランザクションは前のトランザクションのハッシュに署名するので、これは、ペイロードdata1、data2、data3などの順序付けも意味する。
ブロックチェーントランザクションは、ブロックチェーンネットワーク106によって受け入れられると、実行可能に二重支出することは不可能である。それはまた、証明ノード702Aによって提供される証明サービスに対して証明された順序を発行する形態として機能する。これにより、クライアントノード703のユーザは、自身のデータ要素がこの証明機関によって証明された順序で現れる位置が遡及的に変更され得ないという確信を持つことができる。そのようなトランザクションがブロック151においてマイニングされると、既存のブロックを置き換えるには計算コストが高いので、順序が変更される可能性はさらに低くなる。
いくつかの実施形態では、各トランザクションTx0、Tx1、Tx2…において示されるセットは、トランザクションごとにデータ項目Dのうちの単一のデータ項目のみで構成される(すなわち、各dataペイロードは、単一のそれぞれのDのみを示す)。代替的に、そのような各トランザクションにおいて示されるセットは、トランザクションごとに複数のデータ項目Dを含み得る(各dataペイロードは、複数の異なるデータ項目Dの異なるそれぞれのセットを示す)。後者の場合、ペイロード情報は、それぞれのトランザクションのローカルセット内のデータ項目Dの順序も指定する。これは、例えば、ペイロード(例えば、OP_RETURN出力)に含まれる順序付きリスト、および/または各Dの指示にマッピングされた順序を示すインデックスによって達成され得る。図9~図11に例を示し、後でより詳細に説明する。
複数のデータ項目Dがトランザクションごとに示されるとき、トランザクションごとにどのデータ項目が集められるべきかを決定するために何らかの基準が必要とされる。原則として、トランザクション間でデータ項目を分割するために任意の方式を使用することができるが、実施形態では、これは、規則的な時間間隔に基づいて行われ得る。すなわち、規則的な時間間隔の第1のインスタンス内の証明ノード702Aによって受信されたすべてのデータ項目Dが一連のトランザクションの第1のトランザクションに含まれ、次いで、規則的な時間間隔の次のインスタンスにおいて受信されたすべてのデータ項目Dが一連のトランザクションの次のトランザクションにおいて示され、以下同様である。
トランザクション間の間隔の正確なタイミングは、実装によって構成され得る。例えば、トランザクションは0.1秒間隔でサブミットされ得る。
データ項目のそれぞれのセットは、単に、そのセットのデータ項目(複数可)をそれぞれのトランザクションTxのペイロードに明示的に(「平文で」)含めることによって、トランザクションにおいて示され得る。代替的または追加的に、それらは、ハッシュ、暗号化形式、またはrパズルなどの変換形式で示され得る。図9~図11に関連して例をより詳細に説明する。順序付け証明サービスの文脈では、最低限、本明細書におけるデータ項目の「指示」は、トランザクションを検査するクエリノードがデータ項目の証明された順序を検証することを可能にする何らかの情報を意味する。データ項目Dの明示的な値がトランザクションに明示的に含まれないいくつかの場合では、クエリノードがデータ項目Dの値に関する所定の知識を有しており、それらの項目の予想される順序を確認するために、ブロックチェーンノード104のメムプール154内のまたはオンチェーンのトランザクションを単に検査していることが要求され得る。
実施形態では、証明ノード702Aは、一連のトランザクションの各トランザクションTx0、Tx1、Tx2…のペイロードに少なくとも1つのタイムスタンプを含めることもできる。タイムスタンプは、それぞれのデータ項目(複数可)が証明ノード702Aにおいて受信された時間を示す。トランザクションごとに単一のデータ項目Dがある場合、これは、単にそのデータ項目の受信時間であり得る。トランザクションTxごとにデータ項目Dが複数ある場合、各トランザクションペイロードは、セットの到着時刻(例えば、それらが受信された時間間隔)を示す単一のタイムスタンプ、またはセット内のデータ項目Dごとの個々のタイムスタンプを含むことができる。
証明サービスが、ユーザのデータを含むトランザクションをブロックチェーン150にサブミットするとき、いくつかの実施形態では、それは、このトランザクションを、データ項目Dをサブミットしたクライアントノード(複数可)703にも送信することとなる。これは、外層(例えば、層3)内のユーザが中間(例えば、層2)内の証明ノード702Aに直接接続されているので可能である。実施形態では、クライアントノード703は、コア内のブロックチェーンマイニングノード104Mおよび/またはストレージノード104Sにも直接接続されているので、トランザクションTx0、Tx1、Tx2…がブロックチェーンネットワーク106によって受け入れられたことを独立してチェックし得る。したがって、クライアントノード703Aは、予想される順序が証明されたことを確認するために、マイナー104Mのメムプール154、および/またはストレージノード104S上の実際のブロックチェーン150の記録にクエリを行うことができる。他の第三者ノードも、ブロックチェーンネットワーク106の任意の適切な接続を介して同様にこれを検証し得る。いくつかの実施形態では、クライアントノード703Aによるクエリは、図3~図6に関連して前述したSPVのような接続性のみを使用して、クライアントノード703Cとコアとの間の接続を介して実行され得る。
任意選択で、証明サービスは、データ項目をサブミットしたクライアントノード(複数可)703Cに、それらのデータを含むトランザクションに先行するトランザクションのチェーンを送信することもできる。これは、ユーザが、サービスによってブロックチェーンにサブミットされた異なる順序を有するトランザクションの2つの競合するチェーンが存在しないことを確かめることができるようにするためである。トランザクションのチェーンの長さは、ユーザによって必要とされる信頼のレベルに適切であるべきである。この信頼はアウトソーシングされてもよく、例えば、認証局が1時間ごとにトランザクションのチェーンの正確さを証明してもよい。
実施形態では、層内のクライアントノード703Cはまた、互いに接続され得、それらのおよび対応するマークルプルーフを含む(マイニングされた)トランザクションを互いに送信することができる。実施形態では、各外層(例えば、層3)ノードは、ブロックチェーン150に独立して接続されているので、それらは、マークルプルーフが正しいことを検証することができる。これにより、外層(例えば、層3)内のユーザは、ブロックチェーン上のプルーフオブワークに対する信頼が引き継がれる前に、タイムスタンプ付与サービスに対する最小量の一時的信頼のみを用いてデータの順序付けに同意することができる。
次に、OP_RETURNペイロードdata1をより詳細に検討する。目標は、時間間隔内においてデータ要素D1、D2、D3、…が受信された順序をサービスが証明することである。データ要素は、各ユーザに関連するデータのハッシュコミットを表し得ることに留意されたい。ユーザが自身のデータを公開することを選択するか、またはその代わりに自身のデータのハッシュコミットを記録することを選択するかは、ユーザの裁量に委ねられ得る。
データ項目Dのセットおよびそれらの相対的な順序をトランザクションTx内で示すことができるいくつかの異なる方法がある。最も単純なものは、単に各要素にインデックスを付けることであり、OP_RETURNが署名されるので、これはタイムスタンプ付与サービスによって証明される。しかしながら、順序付けの追加の証拠を提供し、分散型タイムスタンプ付与サービスへの一般化を可能にするよりスマートな方法がある。
方法1.1:ハッシュチェーン。一意のインデックスiが各データ要素Diに割り当てられ、ハッシュチェーン内のエントリHiが作成される。Hiの値は、ハッシュチェーンのデータ要素および前の要素に依存する。これは、ハッシュチェーンの各要素が前の要素の後に作成されていなければならず、順序が強制されることを意味する。ハッシュチェーンの例を図9の表に示す。この表は、トランザクションのペイロード(data)に含まれ、任意選択で、明示的なD列がトランザクションに含まれることも含まれないこともある。
Dの値が明示的に含まれない場合の1つの利点は、ハッシュがDよりも小さくなり得ることであり、したがって、チェーン上に記憶されるビットはより少なくて済む。また、これは、ユーザが公開を望まない場合、Dの実際の値を公開する必要がないことを意味する。いずれにしても、D値が明示的に含まれるか否かにかかわらず、ハッシュチェーンの別の利点は、順序を変更しにくくすることである。例えば、例として、トランザクションあたり1000個のデータ項目Dがあるとする。次いで、これらのデータ項目を再順序付けするためには、1000個のハッシュを実行する必要があり、これは、計算上負担が大きいであろう。したがって、証明ノード702Aが完全に信頼されていない場合であっても、これは、データ項目が再順序付けされていないという追加の確信をユーザに与える。
この場合、時間を含む列も図9の表に追加されることとなる。
OP_RETURNペイロードdata1は、図9に示されるような表から構成される。列「データ」は、スペースを節約するために、またはデータ要素をプライベートに保つために省略され得る。その場合、ハッシュチェーンの順序を証明する唯一の方法は、すべてのデータ要素を知ることであることに留意されたい。
ハッシュ関数をHMACに置き換えることによって、追加のセキュリティが与えられ得る。HMACは、RFC2104に記載されており、ハッシュ手順にシークレット対称鍵を導入する。これは、シークレット鍵を知っている者のみがデータの順序を証明することができることを意味する。
方法1.2:マークルツリーを用いたハッシュチェーン。この場合は、図9のハッシュチェーンと同様であるが、ハッシュチェーン全体を公開するのではなく、マークルツリーに変えてルートだけを公開する。この場合、セット内の各データ項目Dは、マークルツリーのリーフとしてモデル化され、マークルルートは、トランザクションにおいて指示として含まれる。データのインデックスは、それがマークルツリーのリーフに現れる順序によって暗示されることに留意されたい。ユーザがデータ項目の存在およびマークルツリーにおけるその位置をチェックすることができるように、マークルプルーフは後でユーザに提供され得る。この方法では、マークルルートのためのOP_RETURNペイロードにおいて256ビットしか必要とされないので、トランザクションにおけるスペースが節約される。
追加的または代替的に、各データ項目は、そのリーフに対する対応するマークルプルーフによってトランザクションにおいて示され得る。当業者によく知られているように、マークルツリーにより、マークルルートおよびデータ項目に対するマークルプルーフ(これは、ルートとリーフとの間のハッシュのチェーンである)が与えられると、所与のデータ項目がセットのメンバであることを証明することができる。
方法2.1:署名のチェーン。この方法では、各データ要素Dに対して新しい公開鍵が作成され、その要素は新しい公開鍵で署名される。これは、RFC3161に概説されているタイムスタンプ付与プロトコルにおける要件に準拠している。
図10に示される公開鍵および署名のシーケンスを考慮する。そのアイディアは、各公開鍵が先行するデータに基づいて生成されるということである。ハッシュチェーンと同様に、シーケンス内の各公開鍵(したがって署名)は、シーケンスにおける前の公開鍵の知識を用いてのみ作成され得、したがって、順序が強制される。
この方法の変形形態では、表内のエントリはそれぞれ、それら自体の権利におけるトランザクションであり得る。
方法2.2:rパズルのチェーン。Rパズルは、チャレンジおよびプルーフの最近開示された形態である。これは、ECDSA署名(S,R)のr部分に基づくものであり、シークレットを明らかにすることなくシークレットの知識を証明する方法を提供する。https://www.youtube.com/watch?v=9EHKvNuRc0A&t=978sおよびhttps://www.youtube.com/watch?v=CqqTCsLzbEAを参照されたい。
ECDSA(楕円曲線デジタル署名アルゴリズム)署名は、組合せ(S,R)から構成され、ここで、Rは、短期鍵ペアの公開部分のx座標である。各署名に対して同じ公開鍵を使用することが可能であるが、短期鍵を一緒に連鎖する。これにより、図11に示すシーケンスが得られるであろう。これは、上記の方法のいずれかの代替として、またはそれに加えて、トランザクションペイロード(data)に含められ得る。
ここで、R1はランダムな短期鍵であり、<S1,R1i>(H(Di))は、短期鍵R1iを使用してP1で署名されたデータH(Di)を意味する。
一般に、方法1.1、1.2、2.2および/または2.2および/または他のいずれかは、トランザクションのペイロード(data)内のデータ項目Dのセットの中の順序を示すために、個別にまたは併せて使用され得る。
分散ケース:上記は、順序証明サービスが個々のノード702Aによって提供されるシナリオで説明されている。複数の証明ノード702Aを通してそのようなサービスを提供することも可能である。
例えば、コンセンサスを得るために階層化ネットワーク700を使用する分散型証明サービスを有する状況を考慮する。この場合、図7の中間層ノード702(例えば、層2のノード)のうちの2つ以上が、証明ノードの役割を果たすこととなる。
大多数の証明ノード702Aが正直に動作し、証明サービスノード702Aおよびユーザ703Cから構成されるコミュニティ(先に定義されたような)中に(around)伝搬されるデータの順序付けおよびタイムスタンプ付与のためのコンセンサスを得ることを望むと仮定する。m個のコアマイニングノード701の同じサブセットに接続され、したがって階層化ネットワーク700のコミュニティを定義するN個の独立した証明サービスノード703Aがあると仮定する。複数の中間層(例えば、層2)証明ノード702Aが存在するという事実により、外層(複数可)(例えば、層3)内の多くのユーザは、中間層ノードにとって負荷が高くなりすぎる(接続が多くなりすぎる)ことなく中間層(例えば、層2)内のノード702に接続することができる。
次いで、対処すべき問題は、そのような分散型の場合、例えば、2つのユーザによってサブミットされた2つのデータ項目D1、D2が、別のものと比較して1つの証明ノード702Aに異なる順序で到着した場合であっても、中間層証明ノード702A(例えば、層2ノード)が、それらの順序付けにおけるコンセンサスにどのように同意することができるかである。
これに対処するための1つの方法は、閾値署名を使用することであり、すなわち、前述のように、トランザクションTxをロック解除するために、1つだけではなく、少なくともM個の異なる署名(M>1)が必要とされる。証明サービスノード702Aに適用される、説明されるようなM-of-N閾値署名システムを考慮する。これは、秘密鍵シェアa1,a2,…,aNを有するN個の参加ノードが存在することを意味する。M人の参加者の任意のサブグループは、組み合わせることで、一連のトランザクションにおける先行トランザクションをロック解除するメッセージの署名を与える署名シェアを生成することができる。
証明サービスノード702Aのうちの1つが、選択された期間内に受信したすべてのデータ要素Dの順序付きリストであるOP_REUTRNペイロードdata1を含む候補トランザクションTx1を生成すると仮定する。このノードは、他のすべての証明サービスノード702A(またはそれらのうちの少なくともいくつか)に候補トランザクションをブロードキャストし、トランザクションに署名するためにそれらの署名シェアを求め得る。それらが少なくともM個の署名シェア(自身のものを含む)を受信した場合、トランザクションはブロックチェーンネットワーク106にサブミットされ、ブロック151にマイニングされ得る。これは、データ要素の順序付けが、分散型ネットワークにおける少なくともM-of-Nタイムスタンプ付与サービスによって同意されることを確実にする。
トランザクションにおいて作成するために単一の証明ノード702Aはどのように選択されるのか?上記は、候補トランザクションTx1を作成した証明サービスノード702Aが1つのみ存在し、その他の証明ノード702Aがこれに対してOKであると仮定している。しかし、次の候補のトランザクションはどうであるか?少なくとも2つの選択肢がある:(i)候補トランザクションを作成する特権証明ノード702Aが常に1つ存在するか、または(ii)各トランザクションが作成された後、証明ノード702Aのうちの1つが、次のトランザクションを作成する次のノードとなるようにランダムに選択される。これは、事前に決定されたランダムシーケンスであってもよいし、サブミットされたばかりのトランザクションTx1に関するシードに基づく決定論的にランダムな選択であってもよい。例えば、シードは、Tx1であると解釈され得る。分散型コンピューティングのための他の分散型アービトレーションアルゴリズムも可能であり得る。
分散型データベース
図12は、本明細書に開示される実施形態による、階層化ネットワーク1200において実装された分散型データベースの例を示す。
図12は、本明細書に開示される実施形態による、階層化ネットワーク1200において実装された分散型データベースの例を示す。
階層化ネットワーク1200は、1つまたは複数のコアノード1201を含むコアネットワークと、コアの周りの少なくとも1つの中間層であって、各々が1つまたは複数の中間層ノード1202を含む少なくとも1つの中間層と、中間層の最も外側の周りの少なくとも1つの外層であって、各々が1つまたは複数の外層ノード1203を含む少なくとも1つの外層とを含む。この場合も同様に、ここでの「外層(outer layer)」の「外(outer)」という用語は、必ずしも最も外側に限定されるものではないが、それも1つの可能性である。階層化ネットワーク1200は、インターネットなどの基礎となる物理またはインフラストラクチャネットワーク上にオーバーレイされたオーバーレイネットワークであり得るか、または代替的に、組織内の専用ネットワークおよび/または内部(例えば、プライベート)ネットワークなどのスタンドアロンネットワークであり得る。
コアノード1201は、ブロックチェーンネットワーク106のノード104である。それらは、マイニングノード104M、ストレージノード104S、またはそれらの組合せを含み得る。実施形態では、コアノードの各々は、マイニングノード104Mおよび/またはストレージノード104S(例えば、フルコピーノード)である。
場合によっては、中間層ノード1202および/または外層ノード1203のうちのいくつかは、ブロックチェーンネットワーク106の周辺ノード104、例えば、フォワーディングノード104Fなどの、マイニングノード104Mおよび/またはストレージノード104S以外のノードを含み得る。代替的に、それらは、ブロックチェーンネットワーク106のクライアントとして以外、ブロックチェーンネットワーク106においていかなる役割(マイニング、記憶、またはフォワード)も有さないノードを含み得る。
中間ノード1202は、階層化ネットワーク1200の1つまたは複数の中間層にわたる複数のデータベースノード1202DBを含む。これらのデータベースノード1202DBは、各データベースノード1202DBが、1つまたは複数のデータベースエントリを含むデータベース全体の少なくとも一部を記憶する分散型データベースを記憶するように構成される。実施形態では、エントリは、少なくともいくつかのエントリが2つ以上のデータベースノード1202DBにわたって複製(duplicate)されるように、2つ以上のノードにわたって複製(replicate)される。場合によっては、各データベースノード1202DBは、データベース全体のコピーを記憶することができるが、他の実施形態では、各データベースノード1202DBは、データベースの一部のみを記憶し、各エントリは、データベースノード1202DBのすべてではなく一部のみにわたって複製されてもよい(それらの間のデータベースノード1202DBがデータベース全体を記憶するように分散される)。
各データベースノード1202DBは、1つまたは複数の物理サーバユニットを含むサーバの形態をとり得る。そのような各ノードは、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置とを備える。これらは、例えば、他のネットワーク要素に関連して前述したようなメモリ媒体および/またはプロセッサの形態のいずれかをとり得る。データベースエントリ自体と同様に、メモリは、証明ノードの処理装置上で実行されるように構成されたデータベースソフトウェアを記憶する。このソフトウェアは、実行されたときに、以下で説明される実施形態または類似のもののいずれかにしたがって動作するデータベースサービスを提供するように構成される。
実施形態では、クライアントノード(複数可)1203C、コアノード1201および/または他のデータベースノード1202DBまたは他の中間層ノード(例えば、証明サービスノード702Aまたはスマートコントラクトノード)が、データベースノード1202DBのアイデンティティを検証することができように、各データベースノード1202DBのアイデンティティが認証局によって証明され得る。そのようなノード間の対話は、検証を条件とし得る。例えば、クライアントノード1203Cは、証明に基づいてそのアイデンティティを検証することを条件としてのみ、データベースノード1202DBに更新要求を送信し得る。代替的または追加的に、オーバーレイネットワークにおけるノード識別のための代替的な機構として、ノードバージョニングが使用され得る。
クライアントノード1203Cの各々は、サービスのユーザのコンピュータ機器を備えるエンドユーザノードであってもよい。この場合も同様に、これは、個々のユーザ、または会社、学術機関、もしくは政府機関などの組織などであり得る。したがって、各クライアントノードは、1つまたは複数のユーザ端末、および/または1つまたは複数のサイトに1つまたは複数のサーバユニットを含むサーバを含み得る。各クライアントノードは、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置とを備える。これらは、例えば、他のネットワーク要素またはユーザ機器に関連して前述したようなメモリ媒体および/またはプロセッサの形態のいずれかをとり得る。メモリは、処理装置上で実行されるように構成されたクライアントソフトウェアを記憶し、クライアントソフトウェアは、実行されるときに、以下の実施形態または類似のもののいずれかによる、データベースノード1202DBによって提供されるデータベースサービスによって提供される分散型データベースのクライアントとしてノードを動作させるように構成される。任意選択で、送信側エンドユーザノードのうちの1つまたは複数は、ブロックチェーンネットワーク106のユーザ102のユーザ機器103を含み得、クライアントソフトウェアは、ブロックチェーンウォレットアプリケーション105などを含み得る。
実施形態では、データベースノード1202DB、他の中間層ノード(例えば、証明サービスノード702Aまたはスマートコントラクトノード)、コアノード1201および/または他のクライアントノード1203Cを有効にすること、またはクライアントノード1203Cのアイデンティティを検証することができるように、各クライアントノード1203Cのアイデンティティが認証局によって証明され得る。そのようなノード間の対話は、検証を条件とし得る。例えば、データベースノード1202DBは、証明に基づいてそのアイデンティティを検証することを条件としてのみ、クライアントノード1203Cから更新要求を受信し得る。代替的または追加的に、オーバーレイネットワークにおけるノード識別のための代替的な機構として、ノードバージョニングが使用され得る。
実施形態では、階層化ネットワーク1200は、図3~図6および/または図7に関連して説明したプロトコルルールまたは構造的特徴のいずれかにしたがって構成され得る。ノード1201、1202、1203は、階層化ネットワーク1200が、インターネットなどの基礎となるインフラストラクチャネットワーク上にオーバーレイされたオーバーレイネットワークである場合、オーバーレイネットワークレベルで互いの間に接続を形成するように構成される。すなわち、階層化ネットワークのノード1201、1202、1203は、それらが階層化ネットワークの他のノード1201、1202、1203とどのような接続は形成することができてどのような接続は形成することができないかを指定するオーバーレイネットワークプロトコルに従うように構成される。
例えば、実施形態では、各中間層ノード1202は、コアネットワーク内の少なくとも1つのコアノード1201(ブロックチェーンネットワークノード104)に接続される。コアネットワークは、ブロックチェーンネットワーク106の少なくとも一部を含む。実施形態では、コアネットワークは、それ自体、完全なネットワーク(すなわち、完全グラフ)であり得る。各外層ノード1203は、少なくとも1つの中間層内の中間層ノードのうちの少なくとも1つに接続され得る。実施形態では、各外層ノード1203はまた、少なくとも1つのコアノード1201(すなわち、ブロックチェーンネットワーク)への少なくとも1つの接続を有する。いくつかのそのような実施形態では、外層ノード1203のうちの1つまたは複数はそれぞれ、コアノード1201のうちのすべてではないが2つ以上への接続を有する。実施形態では、階層化ネットワーク1200は、全体として、非完全なネットワークであってもよく、すなわち、すべてのノード1201、1202、1203が、オーバーレイネットワークレベルにおいて、他のすべてへの接続を有するわけではない。実施形態では、所与の層内の各ノードは、同層内の少なくとも1つの他のノードに接続され得る。例えば、中間層内の各ノード1202は、同じ中間層内の1つまたは複数の他のノードに接続され得、および/または、外層内の各ノード1203は、同じ外層内の1つまたは複数の他のノードに接続され得る。実施形態では、接続はまた、異なる中間層における異なる中間層ノード1202間、および/または異なる外層における異なる外層ノード1203間に形成され得る。
階層化ネットワーク1200の2つのノード1201/1202/1203間の接続は、これらのノードが直接通信可能であることを意味し、これは、この文脈において、階層化ネットワーク1200の別のノード1201/1202/1203を介してホップを実行する必要がないことを意味する。オーバーレイネットワークの文脈では、「接続」は、オーバーレイネットワークのレベル(すなわち、階層化ネットワークのオーバーレイネットワークプロトコルのレベル)における接続(すなわち、エッジ)を意味する。
説明を簡単にするために、2つのクライアントノード1203Cおよび2つのデータベースノード1202DBのみが図12に示されているが、もっと多くてもよいことが理解されよう。実施形態では、クライアントノード1203Cおよびデータベースノード1202DBは、互いに同じコミュニティの一部であり得る。
クライアントノード1203Cは、少なくともそれらがデータベースサービスのクライアントであるという点でクライアントである。実施形態では、クライアントノード1203Cのうちの1つまたは複数の上で実行されるクライアントソフトウェアは、そのノード1203Cを、1つまたは複数の第2の層ノード1202によって提供される1つまたは複数の追加のサービス、例えば、順序付け証明サービスまたはスマートコントラクトサービスのクライアントとして動作させるようにさらに構成され得る。および/または、ブロックチェーン150にクエリを行うことができるように、そのノード1203Cを、ブロックチェーンネットワーク106の1つまたは複数のコアノード1201(例えば、104M、104S)のクライアントとして動作させるように構成され得る。また、クライアントノード1203Cがデータベースサービス(および任意選択で1つまたは複数の他のサービス)のクライアントとして説明されるという事実は、これらのノード自体が1つまたは複数のさらなるエンティティ(図示せず)に対する1つまたは複数のさらなるサービスのサーバでもあり得る可能性を除外するものではない。例えば、クライアントノード1203Cは、ウェブ上で顧客にオンラインサービスを提供する会社のコンピュータ機器を含み得る。
いくつかの実施形態では、図12の階層化ネットワーク1200は、図3または図4の階層化ネットワーク300であり得、この場合、図12の外層ノード1203は、図3または図4の第3の層ノード303であり、図12の中間層ノード1202は、図3または図4の第2の層ノード302であり、図12のコアノード1201は、図3または図4のコアノード401である。
いくつかの実施形態では、図12の階層化ネットワーク1200は、図7の階層化ネットワーク700であり得、この場合、図12の外層ノード1203は図7の外層ノード703であり、図12の中間層ノード1202は図7の中間層ノード702であり、図12のコアノード1201は図7のコアノード701である。そのような実施形態では、証明ノード702Aの証明サービスは、データベースノード1202DBと同じ中間層ノード702/1202のうちのいくつかまたはすべてに統合され得、および/または証明ノード702Aは、同じおよび/または異なるコミュニティ内の同じおよび/または異なる中間層内に別個の中間層ノード702/1202を含み得る。
動作中、データベースノード1202DBは、クライアントノード1203Cのうちの1つまたは複数から更新要求を受信する。複数の更新要求は、同じクライアントノード1203Cおよび/または異なるクライアントノード1203Cから受信されてもよい。実施形態では、各更新要求は、要求側クライアントノード1203Cと受信側データベースノード1202DBとの間の関連のある外層と中間層(例えば、層2と層3)との間の階層化ネットワーク接続のうちの1つ上で直接受信され得る。代替的に、更新要求は、発信元クライアントノード1203Cからの要求の対象受信者であったデータベースノード1202DBのうちの別のデータベースノードからフォワードされることなどによって、2つ以上のホップを介して間接的に受信され得る(以下を参照)。間接的な場合、メッセージは、(同じおよび/または異なる中間層内の)中間層ノード1202間の階層化ネットワーク1202内の接続を介して伝搬され得る。
各更新要求は、データベース内の特定のそれぞれのターゲットエントリを更新する要求である。そのような要求ごとに、受信側データベースノード1202DBは、要求が受信側データベースノード1202DB自体に宛てられているか、またはデータベースノード1202DBのうちの別のデータベースノードに宛てられているか、すなわち、受信側データベースノード1202DBまたは別のデータベースノード1202DBにローカルに記憶されたデータベースの一部において見つかる、要求が修正しようとするそれぞれのターゲットエントリであるかを決定する。データエントリが複数のデータベースノード1202DBにわたって複製される場合、ターゲットエントリは、受信側データベースノード1202DBおよび1つまたは複数の他のものの両方において見つかり得ることに留意されたい。要求が、受信側データベースノード以外の複数の他のデータベースノードに宛てられることも可能である。
各更新要求は、データコンテンツ、すなわち、行われるべき実際の更新を含む。これは、絶対項、すなわち、ターゲットエントリの既存のコンテンツの一部または全部を置き換えるための置換データで表され得る。代替的に、更新のコンテンツは、デルタ(差分)、すなわち、それぞれのターゲットエントリに適用する修正として、要求において表され得る。データコンテンツは、ユーザが記憶することを望む最終的なユーザデータのフルバージョンを含み得るか、または、フルバージョン自体ではなく、代わりに、ユーザデータの指紋または圧縮バージョンの形態を明示的にとり得る。いずれにしても、更新が受信側データベースノード1202DBに宛てられる場合には、受信側データベースノードは、要求された更新を、受信側ノード1202DB上にローカルに記憶された関連のあるターゲットエントリのコピーにローカルに適用してもよいし、更新がデータベースノード1202DBのうちの1つまたは複数の他のものに宛てられる場合には、受信側データベースノード1202DBは、更新要求を関連のあるデータベースノード(複数可)1202DBにフォワードして、そこに記憶されたターゲットエントリのコピーに適用する。この場合も同様に、エントリがデータベースノード1202DBにわたって複製される場合、両方が行われ得ることに留意されたい。必要に応じて、更新は、中間層内および/または異なる中間層間の接続上で、データベースノード1202DB間で伝搬され得る。
クライアントノード1203Cは、複数の受信側データベースノード1202DBの各々に更新要求を送信することができ、その場合、各受信側データベースノード1202DBは、上で説明したように挙動し得ることにも留意されたい。
1つまたは複数のデータベースノード1202DBに記録されることに加えて、本開示によれば、各更新要求の指示は、コア1201への接続のうちの1つを介してブロックチェーン150にも記録される。これは、データベースノード1202DB間の一貫性を向上させるようにネットワークのノード間でコンセンサスを構築するのに役立つ。
更新の指示は、トランザクション152において、コアノード1201のうちの1つに送信されて、ブロック151にマイニングされ、したがってブロックチェーン上に記録される。これは、要求側クライアントノード1203Cによって送信され得る。この場合、データベースノード1202DBのうちの1つまたは複数は、ブロックチェーン150(またはマイナーのメムプール154)にクエリを行い、要求された更新がチェーン上に記録されたこと(またはメムプール154に受け入れられたこと)をチェックし得る。例えば、データベースノード1202DBは、これを確認した場合にのみ更新を適用し得る。チェックは、データベースノード1202DBとコアノード1201のうちの1つまたは複数との間の階層化ネットワーク1200内の接続上で直接実行され得るか、または代替的に2つ以上のホップを介して代理で実行され得る。
代替的なシナリオでは、更新の指示を含むトランザクションは、更新要求の受信に応答して、データベースノード1202DBのうちの1つによってコア1201に送信され得る。この場合、要求側クライアントノード1203C(または第三者ノード)は、予想される更新がブロックチェーン上に記録されたこと(またはマイナーのメムプール154に受け入れられたこと)をチェックし得る。このチェックは、クライアントノード1203Cとコアノード1201のうちの1つまたは複数との間の階層化ネットワーク1200内の接続上で直接実行され得るか、または代替的に2つ以上のホップを介して代理で実行され得る。
さらなる代替形態では、更新の指示を含むトランザクションは、中間層のうちの1つにおける第三者サービス、例えば、証明サービス702Aなどによって、コア1201に送信され得る。これは、直接で送信されてもよいし、または代理で送信されてもよい。要求側クライアントノード1203Cおよび/またはデータベースノード1202DBのうちの1つまたは複数は、予期される更新がチェーン上に記録されたこと(またはメムプール154に受け入れられたこと)をチェックし得る。この場合も同様に、このチェックは、直接(単一ホップ)実行されてもよいし、または代理(2つ以上のホップ)で実行されてもよい。
チェーン上に記録されるべき更新の「指示」は、更新自体の実際のコンテンツを(絶対項またはデルタのいずれかで)明示的に含むことも含まないこともある。代替として、または加えて、それは、プレイメージのハッシュなどの更新の変換を含み得、プレイメージは更新を含む。これは、「ハッシュコミット」と呼ばれ得る。ハッシュコミットなどのみが記録される場合、これは、既知の更新がチェーン上に記録されたこと(またはマイナーのメムプール154に受け入れられたこと)をノードがチェックすることを可能にするが、更新の知識を有さない第三者は、それを見ることができないであろう。ハッシュはまた、コンテンツ自体よりも小さく記憶され得る。
1つの有利な構成では、データベースノード1202DBが階層化ネットワーク1200から一時的に切断された場合、ブロックチェーン150上に記憶された記録を使用して任意の関連のある更新をチェックし、オンラインに戻ったときにその/それらの更新を行うことができる。この場合も同様に、このチェックは、当該データベースノード1202DBとコアノード1201のうちの1つまたは複数との間の階層化ネットワーク1200内の接続上で直接実行されてもよいし、または2つ以上のホップを介して間接的に実行されてもよい。
例えば、これは、当技術分野で知られている用語である「ゾンビレコード」の潜在的な問題に対処するために使用され得る。いくつかの分散型データベースでは、ノードが切断されると、削除の形態の更新を見落とすことがある。切断されたノードが再接続するときまでに、他のすべてのノードが、削除されたエントリを完全に消去していた場合、そのノードは、削除されたデータを、それがデータベースに追加されるべき新しいエントリであるかのように再伝搬することができる。しかしながら、削除の記録をチェーン上に記憶しておくことによって、これを回避することができる。別の有利なシナリオでは、チェーン上の記録を使用して、「ヒンテッドハンドオフ(hinted handoff)」を提供することができる。ヒンテッドハンドオフは、専門用語である。ここでの「ハンドオフ」は、データベースノードが、ある期間切断された後に再接続するときに、データベースノードに更新を提供することを意味し、ヒントは、更新の対象である(すなわち、関連のある1つまたは複数のエントリを含むデータベースの部分を記憶する)1つまたは複数のデータベースノードのIDを含む。それはまた、他のフィールドを含んでもよい。データベースノード1202DBが、別のデータベースノード1202DBに伝搬される必要がある更新要求を受信するが、その別のデータベースノード1202DBは、現在、階層化ネットワーク1200から切断されているとする。従来、受信側データベースノード1202DBは、その別のデータベースノード1202DBがオンラインに戻るまで、ヒントを含む更新を記憶しなければならないであろう。しかしながら、代わりにオンチェーンでヒントを記録することによって、受信側データベースノード1202DBはこれを行う必要がない。
代替的または追加的に、チェーン上に記憶され得る指示の別の例は、順序付け情報である。いくつかのシナリオでは、同じターゲットエントリを更新することを要求する複数の更新要求が、そのエントリを記憶する同じデータベースノード1202DBにおいて受信され得る。これに対応するために、データベースノード1202DBは、指定された順序でターゲットエントリに更新を適用するように構成され得る。いくつかの実施形態では、指定された順序は、受信側データベースノード1202DBにおける受信時間、または送信側クライアントノード1203Cもしくはフォワーディングデータベースノード1202DBによって追加されたタイムスタンプ(例えば、送信側クライアント1203Cから直接要求を最初に受信したデータベースノード1202DBにおける受信時間)に基づき得る。代替的に、指定された順序は、クライアントからの更新要求のうちの1つまたは複数において、またはデータベースノード1202DBもしくは証明サービスノード702Aのうちの別のものなど、別の中間層ノード1202Aから、またはコア1201からのメッセージにおいて、アサートされ得る。例えば、順序は、複数の更新の順序付きリスト、または各更新要求にマッピングされた順序のインデックスの形態でアサートされ得る。
実施形態では、指定された順序は、例えば、前述した証明サービス702Aによってブロックチェーン150上に記録され得る。そのような実施形態では、要求を行うクライアントノード1203Cは、証明サービス702Aから順序を取得し、これをデータベースノード1202DBにサブミットし得る。この場合、順序証明サービス702は、ブロックチェーン150上に順序を記録するとともに、指定された順序を含むメッセージを要求側クライアントノード1203C(証明サービス702Aのクライアント703Cでもある)に返す。クライアント1203Cは、データベースノード1202DBに対して更新要求を行うとき、データベースノード1202DBへの更新要求のうちの少なくとも1つにおいて証明サービス702Aから取得した順序もサブミットする。データベースノード1202DBは、これを、ブロックチェーン上(またはマイナーのメムプール154内)に記録された順序と照らしてチェックし、次いで、クライアント1203Cによってサブミットされた順序がチェーン150上に記録された順序と一致することを条件として、指定された順序で更新を適用する。このチェックは、データベースノード1202DBとコア1201との間の接続を介して直接行われてもよいし、または代替的に2つ以上のホップを介して行われてもよい。
代替的に、更新を行うデータベースノード1202DBは、ブロックチェーン150から直接順序を読み取り、ブロックチェーン150(またはマイナーのメムプール154)から読み出された順序を適用することができる。
別の変形形態では、証明サービス702Aは、データベースノード1202DBのうちの1つまたは複数に統合され得る。この場合、データベースノード1202DBのうちの1つが、順序を決定し(そして、任意選択でタイムスタンプを追加し)、これをブロックチェーン150に記録することを担う。順序を担うデータベースノード1202DBは、指定された順序を、中間層(複数可)内のノード間の接続を巡って他のデータベースノード1202DBに伝搬し得る。他のデータベースノード1202DBは、これをブロックチェーンに記録された順序に照らしてチェックし得るか、または代替的に、ブロックチェーン150から(またはマイナーのメムプール154内で)直接順序を読み取り得る。これは、データベースノード1202DBとコア1202との間の接続を介して直接行われてもよいし、または代替的に、2つ以上のホップを介して行われてもよい。
順序付け情報は、特に、異なる更新要求が、階層化ネットワーク1200の中間層(複数可)全体に伝搬される際に異なる遅延を経験するシナリオにおいて有用である(だたし、排他的ではない)。例えば、第1の更新要求が、別のクライアントノード1203Cからの第2の更新要求よりも早く、そのそれぞれのクライアントノード1203Cによって発行されるが、第2の更新要求が、ターゲットエントリを記憶するデータベースノード1202DBに、第1の更新要求よりも遅く到着するシナリオを考慮する。例えば、これは、第1の更新要求が、第2の更新要求は通過しないファイアウォールを通過する必要があるため、および/または地理的にさらに離れたロケーションから送信されるために起こり得る。本明細書の実施形態による順序付け情報の使用は、そのような状況に対処して、更新が発行された順序で、または更新が最初にサブミットされた直接の(immediate)データベースノード1202DBによって更新が最初に受信された順序で、更新が適用されることを確実にするために使用され得る。
しかしながら、これは必須ではないことに留意されたい。より一般的には、何らかの確定的な順序に関するコンセンサスが得られる限り、順序が発行または最初の受信の順序であることは必須ではない。何らかの確定的な順序が合意されている限り、分散型データベースの任意の所与のエントリは(少なくとも最終的に)確定的な状態を有し、この順序は、データベースノード(またはクライアントノード)のいずれによっても一貫した方法で独立して再導出および検証され得る。
開示された方式の背後にある原理のいくつかを示すために、ここから、特定の実装形態を例として説明する。例として、層2に実装されているデータベースノードおよび層3内のクライアント(ユーザ)ノードを参照するが、これは、それぞれ任意の中間層および外層に一般化することができる。
階層化ネットワークを使用する1つの理由は、層2内のノードが、好ましくは一貫したデータを記憶すべきであるが、すべてが互いに直接接続されているわけではない可能性があることである。データの一貫性は、データおよびコマンドが送受信される順序に関係しており、したがって、データがデータストアでどのように変換されるかに関係している。例えば、データ要素に対して非可換演算、例えば左からの行列の乗算を実行する要求が2つある場合、順序は重要である。別の例では、一方の要求がファイルを削除することであり、他方がファイルを読み取ることであり得る。この場合も同様に、これらの要求が受信される順序が重要である。紛争を止めるために、データ挿入に対する順序付けを定義することが望ましいであろう。これは、ブロックチェーンが中央コーディネータとなることで達成され得る。
トランザクションおよびデータ伝搬に対するインセンティブは、サービスレベル合意によって提供され得る。データベースノードは、データおよびトランザクションを層2中に伝搬するようにトランザクションをコミュニティ中に伝搬させて、データベースが一貫性を有するようにするであろう。これは、それらのサービスレベル合意を尊重するための要件であり得る。データのユーザは、それを層3中に伝搬させ、トランザクションおよびマークルプルーフを真正性および不変性に対する証明として含め得る。
層2ノードは、デジタル証明書が発行され得る。層3ノード内のユーザにも、デジタル証明書が与えられ得る。層を下る全体のPKI(公開鍵暗号基盤)が存在し得、これは、PKI概念のためにUTXOを使用するブロックチェーン上にあり得る。
比較として、ブロックチェーンを採用せず、ブロックチェーンネットワークノードのコアも有さない、非階層化ネットワークにおいて実装される分散型データベースが参照される。そのような比較データベースの例は、既存のカサンドラデータベースである。
従来のデータベース理論では、CAP定理(またはブリュワーの定理)は、データベースシステムの3つの主要な望ましい特性のうちの2つのみを達成することが可能であると述べている:
・ 一貫性-データベースから読み取られたデータは常に最新の書き込みに対応する;
・ 可用性-要求に応じてデータベースからデータを常に読み取ることができる;および
・ 分断耐性-システムはネットワーク分断の場合でも動作し続ける。
・ 一貫性-データベースから読み取られたデータは常に最新の書き込みに対応する;
・ 可用性-要求に応じてデータベースからデータを常に読み取ることができる;および
・ 分断耐性-システムはネットワーク分断の場合でも動作し続ける。
現在開示されている方式を使用して、このトリレンマに対処することができる。
カサンドラデータベース管理システムは、CAP定理の3つの側面のうちの2つを満たすが、データの一貫性を犠牲にする、高可用性で分断耐性のあるデータベースアーキテクチャである。
カサンドラデータベースシステムの基本アーキテクチャは、インデックス付きデータをカサンドラノードクラスタの一部として記憶するノードの分散セットである。クラスタにおいて、すべてのノードは、同等であるとみなされ、他の分散システムにあるような「スレーブ」ノードと「マスタ」ノードとの間の区別はない。結果として、クラスタ内のカサンドラノードは、完全グラフを形成し、すべてのノードは、ネットワーク内の他のすべてのノードを識別し、それらと通信することができる。このアーキテクチャは図13(a)に示されている。これは、カサンドラノード1301のすべてのペアの間にカサンドラネットワーク接続1399を有するカサンドラノードクラスタ1300を示す。
データベースに記憶されるべきデータは、ノード間でパーティションされ、図13(b)に示されるように、高可用性およびノードのネットワークの分断に対する耐性を可能にするために、一般に複数のノードによって複製される。これは、データパーティション1(1301)、データパーティション2(1352)、およびデータパーティション3(1353)という3つの例示的なデータパーティションを示す。
データ項目が複製されるカサンドラノードの数は、クラスタの複製係数(replication factor)として知られている。複製係数3は、各データ項目がネットワーク上の3つのノードで複製されることを意味する。
カサンドラクラスタのノード間に記憶されたデータの一貫性は、事実上、読み取り要求に応答してノードによって返されたデータが、実際に、カサンドラクラスタに直近で書き込まれた要求データのバージョンである確率である。カサンドラクラスタの一貫性レベルは、読み取り動作および書き込み動作のために設定され得、特定のユースケースの要求を満たすように構成され得る。
本開示は、カサンドラデータベースにおいてより高い一貫性を達成するために使用されるプロセスを改善するための新しい方法を導入するが、これは通常、性能の一貫性を意図的に犠牲にする。
データセンタおよびクラスタ:カサンドラアーキテクチャは、ノードの多重度に関する2つの定義を使用する。
・ データセンタ-関連するノードの集合であり、これは、物理的または仮想的な集合であり得る。単一のデータセンタは、データベースの完全なコピーを維持するために使用され得、単一の地理的ロケーションに収容され得る。
・ クラスタ-クラスタは、カサンドラデータベースに関するデータセンタの集合である。クラスタは、複数の物理的ロケーションにまたがり得る。
・ データセンタ-関連するノードの集合であり、これは、物理的または仮想的な集合であり得る。単一のデータセンタは、データベースの完全なコピーを維持するために使用され得、単一の地理的ロケーションに収容され得る。
・ クラスタ-クラスタは、カサンドラデータベースに関するデータセンタの集合である。クラスタは、複数の物理的ロケーションにまたがり得る。
データセンタおよびクラスタは、ブロックチェーンネットワークノードのコアを有する階層化ネットワークのネットワーク構造を使用して複製され得ることが後でわかるであろう。
書き込みおよび読み取りパス:カサンドラデータベースシステムでは、ノード間通信と呼ばれる、ノードが通信し得る方法は、一般に、2つある。これらは以下の通りである:
・ 直接通信-一般に、カサンドラクラスタ内の各ノードは、他の各ノードと通信することが可能である。これは、カサンドラクラスタを完全グラフとみなすための根拠である。この方法で任意のペアのノード間で直接送信されるメッセージは、書き込み要求および読み取り要求に関する。
・ ゴシッププロトコル-状態メッセージを交換するためにカサンドラノードによって使用されるピアツーピア通信プロトコルである。メッセージは、ノードと、クラスタ内の最大3つの他のノードとの間で1秒に1回ゴシップされる。これは、ノード状態を通信するために使用され、その結果、危険にさらされている、または到達不可能なノードの故障検出(failure detection)を可能にする。
・ 直接通信-一般に、カサンドラクラスタ内の各ノードは、他の各ノードと通信することが可能である。これは、カサンドラクラスタを完全グラフとみなすための根拠である。この方法で任意のペアのノード間で直接送信されるメッセージは、書き込み要求および読み取り要求に関する。
・ ゴシッププロトコル-状態メッセージを交換するためにカサンドラノードによって使用されるピアツーピア通信プロトコルである。メッセージは、ノードと、クラスタ内の最大3つの他のノードとの間で1秒に1回ゴシップされる。これは、ノード状態を通信するために使用され、その結果、危険にさらされている、または到達不可能なノードの故障検出(failure detection)を可能にする。
クライアントがカサンドラクラスタを使用してデータを読み取るまたは書き込むとき、クライアントは、クラスタ内のノードが無差別に扱われるので、どのノードとの通信を選択してもよい。クライアントによって選択されたノードは、クライアントによって行われている特定の読み取り要求または書き込み要求を実行するためのコーディネータノードになる。
これは、コーディネータが、クライアントの要求を使用して、クラスタ内のどのノードが書き込まれる/読み取られる必要があるかを識別し、それに応じて、それらのノードからデータをフェッチするか、またはそれらのノードにデータを書き込むことを伴う。
図14は、カサンドラクラスタグラフの異なる通信経路を示す。ノードは、ゴシップ(破線1402)を介して状態メッセージを通信し、直接通信(太い実線1401)を介して書き込み/読み取り要求を通信する。図14は、クライアント1403が、読み取り要求または書き込み要求1404をコーディネータノード1301c(黒一色)に送信し、コーディネータ1301cから複数のレプリカノード1301r(クロスハッチング)にゴシップメッセージを送信することを示す。
データのロギングおよび書き込み:大まかに、カサンドラノード1301のハードウェアコンポーネントは、以下を含む:
・ ディスク:
- コミットログ(Commit Log)-カサンドラノードに対して行われたすべてのミューテーションのアペンド専用ログ。
- SSTable-カサンドラノード内のディスク上のデータを永続化させるために使用される不変データファイル。
・ メモリ:
- Memtable-カサンドラノードが書き込み要求からのデータをバッファするメモリ内構造。
・ ディスク:
- コミットログ(Commit Log)-カサンドラノードに対して行われたすべてのミューテーションのアペンド専用ログ。
- SSTable-カサンドラノード内のディスク上のデータを永続化させるために使用される不変データファイル。
・ メモリ:
- Memtable-カサンドラノードが書き込み要求からのデータをバッファするメモリ内構造。
カサンドラノードのこれらの構成要素は、図15に示されるように、ノードがコーディネータノードから書き込み要求を受信したときに実行される書き込みパスの間に対話する。カサンドラノード1301は、コミットログ1503およびSSTable1504を含むディスク1501と、Memtable1505を含むメモリ1502とを備える。
ノード1301によってサービスされる書き込み要求を詳述する図15のプロセスは、以下の通りである:
(S1) 書き込み要求(ミューテーション)をコミットログ1503に記録する。
(S2) 書き込みデータブロブおよびインデックスをメモリ1502に記憶する。
(S3) データおよびインデックスをメモリからディスク1501にフラッシュする。
(S1) 書き込み要求(ミューテーション)をコミットログ1503に記録する。
(S2) 書き込みデータブロブおよびインデックスをメモリ1502に記憶する。
(S3) データおよびインデックスをメモリからディスク1501にフラッシュする。
この対話の重要性は、カサンドラデータベースシステムがAP(可用性、分断耐性)データベースであり、CAP定理にしたがって一貫性を犠牲にするという事実に関する。
APシステムとして、カサンドラデータベースは、最終的な一貫性のモデルに依存する。これは、データベースが、ミューテーションが行われた後のある時点で最新のミューテーションを反映することを意味する。最終的な一貫性を達成する際の仮定は、クラスタ内のノードに対して行われる各ミューテーションに対する動作の順序が記録され、維持されることである。これは、SSTableに記憶されたデータへのミューテーションが正しい順序で行われることを保証するために、ディスク上のコミットログを使用して行われる。
本開示は、ブロックチェーンノードコアを有する階層化ネットワークの使用が最終的な一貫性に到達するための機構を改善することができるプロセスを改善するための方法を導入する。例については後でより詳細に説明する。
データの削除:カサンドラデータベースノードからのデータの削除は、以下の技術を併せて使用する:
・ アップサート(upsert)-カサンドラデータベースは、削除を一種の挿入(「アップサーション(upsertion)」)として扱い、データの新しいバージョンがより最近のタイムスタンプを伴って挿入される。
・ トゥームストーン(tombstone)-削除の場合、書き込まれる新しい記録はトゥームストーンと呼ばれ、これは単にそのデータの削除マーカである。トゥームストーンマーカには、満了時間が組み込まれており、それを過ぎると、コンパクションによってデータが削除される。
・ コンパクション(compaction)-コンパクションのプロセスは、トゥームストーンでマークされたデータを削除するための機構である。これは、当該データの行のすべての既存のバージョンを取り、直近でタイムスタンプ付与されたバージョンを除くすべてを削除することを伴う。
・ 生存時間(TTL:Time-to-live)-アップサートとしてデータに追加することができるマーカであり、データ行がトゥームストーンでマークされ、それに応じて削除されることとなる時間を示す。
・ アップサート(upsert)-カサンドラデータベースは、削除を一種の挿入(「アップサーション(upsertion)」)として扱い、データの新しいバージョンがより最近のタイムスタンプを伴って挿入される。
・ トゥームストーン(tombstone)-削除の場合、書き込まれる新しい記録はトゥームストーンと呼ばれ、これは単にそのデータの削除マーカである。トゥームストーンマーカには、満了時間が組み込まれており、それを過ぎると、コンパクションによってデータが削除される。
・ コンパクション(compaction)-コンパクションのプロセスは、トゥームストーンでマークされたデータを削除するための機構である。これは、当該データの行のすべての既存のバージョンを取り、直近でタイムスタンプ付与されたバージョンを除くすべてを削除することを伴う。
・ 生存時間(TTL:Time-to-live)-アップサートとしてデータに追加することができるマーカであり、データ行がトゥームストーンでマークされ、それに応じて削除されることとなる時間を示す。
ゾンビレコードとして知られる、カサンドラの分散型レプリケーションモデルに固有の既知の問題が存在する。ノードが、データの行の削除(すなわち、トゥームストーンおよびコンパクション)の間に到達不可能である場合、そのノードがクラスタに再参加するとき、その記録を新しいものとして扱い、それを他のレプリカノードにフォワードしようと試みる。記録の削除中オンラインであった他のレプリカノードはすでに記録を削除しているので、それはゾンビレコードして知られている。
本明細書で説明される実施形態は、分散型データベースシステムにおけるゾンビレコードの可能性を軽減するための方法を提供する。例については後でより詳細に説明する。
書き込み修復:書き込みパス中の修復(ヒンテッドハンドオフ)。データ書き込みが実行されるべきレプリカノードのうちの1つ(または複数)が到達不可能である場合、その書き込み要求のためのコーディネータノードは、見落とした書き込みデータのローカルコピーをヒンテッドハンドオフとして記憶し得る。ヒンテッドハンドオフは、以下を含む:
・ 到達不可能なノードのノードID;
・ データのタイムスタンプとして機能するヒントID;
・ カサンドラバージョンを識別するメッセージID;および
・ 書き込まれるべきデータのデータブロブ。
・ 到達不可能なノードのノードID;
・ データのタイムスタンプとして機能するヒントID;
・ カサンドラバージョンを識別するメッセージID;および
・ 書き込まれるべきデータのデータブロブ。
到達不可能なノード(ノードIDによって識別される)がオンラインに戻ると、コーディネータは、そのノードにヒントを再生し、事後に書き込み要求をそのノードに効果的にフォワードすることを担う。これは、到達不可能なノードがネットワークに再参加するときに到達不可能なノードを更新するために、ディスク空間および処理の両方の負担がコーディネータに必然的にかかることを意味する。
本明細書で開示される実施形態は、ブロックチェーンノードコアを有する階層化ネットワークを使用して、コーディネータへの負担の軽減によりこの修復プロセスを改善する。例については後でより詳細に説明する。
分散型データベースを階層化ネットワークに統合する:本開示は、分散型データベースが、コアにブロックチェーンネットワーク1201/104ノードのクラスタを有する階層化ネットワーク1200の一部になるように、カサンドラタイプのデータベースシステムなどに対する修正を提供する。この構造は、少なくとも以下の層を含む:
・ ブロックチェーンコア層(i=1)-階層化ネットワークの最内層であり、好ましくは、完全グラフを形成するブロックチェーンネットワークピア104を排他的に含む。
・ データベースノード層(i=2)-完全グラフを形成しない分散型データベースクラスタのノードを含む層(例えば、これはオーバーザトップ(OTT)コンテンツプロバイダのデータベースクラスタであり得る)。
・ ユーザ/クライアント層(i=3)-分散型データベースによって支えられるシステムまたはアプリケーションのユーザ(例えば、OTTサービスのユーザ)を含む層。
・ ブロックチェーンコア層(i=1)-階層化ネットワークの最内層であり、好ましくは、完全グラフを形成するブロックチェーンネットワークピア104を排他的に含む。
・ データベースノード層(i=2)-完全グラフを形成しない分散型データベースクラスタのノードを含む層(例えば、これはオーバーザトップ(OTT)コンテンツプロバイダのデータベースクラスタであり得る)。
・ ユーザ/クライアント層(i=3)-分散型データベースによって支えられるシステムまたはアプリケーションのユーザ(例えば、OTTサービスのユーザ)を含む層。
便宜上、このタイプのネットワークは、本明細書では「ブロックチェーン階層化ネットワーク」(BLN)と呼ばれ得る。
図16は、シェル内接続を除去し(シェル内グラフの完全性を破壊し)、データベースノードからブロックチェーンコア祖先ノードへの接続を導入することによって、他の従来のクラスタがどのように統合されてBLNを形成し得るかを示す。
図には、異なるサイズの2つの別個のクラスタに対するこの変換が示されており、簡略化のために外部ユーザ層は示されていない。
図16は、完全な(例えばカサンドラ)ノードクラスタ(左側)をBLN(右側)に統合した2つの例を示す。LHSでは、ノードは完全グラフを形成する。RHSでは、ノードは、データベースノードからそれらのBLNコア祖先のセットへの接続によって、ブロックチェーンネットワーク中心コア(i=1)によって調整されるより疎なグラフ層(i>1)を形成する。
ネットワークの3つの層すべてを含む完全なBLNの例が図17に示されている。BLN実装分散型データベース(BLNiDD)という語句は、本明細書では、一般に、分散型データベースノードのクラスタがコアの周りの中間層のうちの1つを構成するBLNを指すために使用され得る。
特定の実施形態では、BLNのi=2層におけるカサンドラノードの挙動について、以下の規定がなされ得る:
・ データベースノードは、状態メッセージに対して同じゴシッププロトコルまたは同様のものを使用することができる。
・ データベースノードはまた、同じゴシッププロトコルまたは同様のものを使用して、それらの間でトランザクションメッセージを伝搬し得る。
・ データベースノードは、i=2において直接接続されているノードのペアに対して書き込み要求および読み取り要求の直接通信を使用し得る。
・ データベースノードは、状態メッセージに対して同じゴシッププロトコルまたは同様のものを使用することができる。
・ データベースノードはまた、同じゴシッププロトコルまたは同様のものを使用して、それらの間でトランザクションメッセージを伝搬し得る。
・ データベースノードは、i=2において直接接続されているノードのペアに対して書き込み要求および読み取り要求の直接通信を使用し得る。
BLNiDDにおけるコミュニティ:カサンドラアーキテクチャにおけるデータセンタおよびクラスタの既存の定義がBLNiDDに適用され得る。データセンタは、単に、BLNiDDの単一のコミュニティに属するデータベースノードのセットであり、クラスタ自体は、BLNiDD内のすべてのコミュニティからのデータベースノードの層(i=2)全体である。
公開鍵暗号基盤:信頼性を向上させるために、データベースノードクラスタ内のノード(i=2)とユーザ(また、BLNグラフ内のノード、i=3)との間の通信が信頼されるものであることを保証することが望ましいであろう。これは、BLNに対してネットワーク規模の公開鍵暗号基盤(PKI)を実装することによって達成可能である。
データベースクラスタおよびそのユーザを含むBLNに対するPKI実装は、以下を含み得る:
・ ユーザPKI(i=3):
- データベースの管理者(すなわち、DBA)によって割り当てられ得る、データベースのn3個のユーザへのユーザ公開鍵
の割り当て。
- データベースのための信頼できる認証局(CA)としてのデータベース管理者によるユーザ公開鍵の証明。
・ カサンドラノードPKI(i=2):
- データベースノードクラスタを形成するn2個のノードに対するデータベースノード公開鍵
の割り当てであり、これもDBAによって発行され得る。
- データベースのための信頼できるCAとしてのデータベース管理者によるデータベースノード公開鍵の証明。
・ ビットコインコアPKI(i=1):
- 分散型データ記憶および取出しシステムのためのBLNは、MinerIDシステムなど、ブロックチェーンコアネットワークの既存の(擬似)PKIを活用し得る。
- データベースクラスタノードおよびデータベースのユーザの両方が接続されるブロックチェーンコアネットワークノードは、企業/サービスプロバイダとして識別および登録され得るパブリックエンティティであり得る。
・ ユーザPKI(i=3):
- データベースの管理者(すなわち、DBA)によって割り当てられ得る、データベースのn3個のユーザへのユーザ公開鍵
- データベースのための信頼できる認証局(CA)としてのデータベース管理者によるユーザ公開鍵の証明。
・ カサンドラノードPKI(i=2):
- データベースノードクラスタを形成するn2個のノードに対するデータベースノード公開鍵
- データベースのための信頼できるCAとしてのデータベース管理者によるデータベースノード公開鍵の証明。
・ ビットコインコアPKI(i=1):
- 分散型データ記憶および取出しシステムのためのBLNは、MinerIDシステムなど、ブロックチェーンコアネットワークの既存の(擬似)PKIを活用し得る。
- データベースクラスタノードおよびデータベースのユーザの両方が接続されるブロックチェーンコアネットワークノードは、企業/サービスプロバイダとして識別および登録され得るパブリックエンティティであり得る。
上記の拡張として、ユーザPKIおよびデータベースノードPKIの両方の態様を完全にオンチェーンで実装することも可能であり得る。MinerIDシステムを使用する、ブロックチェーンネットワークコアPKIもまた、オンチェーンであり、これは、このBLNアーキテクチャのためのPKI全体の実装がオンチェーンで実行可能に実装され得ることを意味するであろう。MinerIDシステムは、例えば、https://www.youtube.com/watch?v=ZSfT_WtBmyQ&feature=emb_titleに開示されている。
図18は、PKIが少なくとも層i=2,3に実装されているBLN実装分散型データベースの例を示す。
例示的な方法:ブロックチェーンは、カサンドラデータベースなどと比較して、最終的な一貫性に到達するための、よりロバストで監査可能で検証可能な機構を容易にするために使用され得る。これは、上述したように、データベースクラスタをBLNに統合することによって行われ得る。以下の方法のいずれについても、以下のものを使用することができる:
・ BLNの層のためのPKI、および/または
・ タイムスタンプ付与されたイベントを順序付けるための方法。
・ BLNの層のためのPKI、および/または
・ タイムスタンプ付与されたイベントを順序付けるための方法。
以下の方法では、ブロックチェーン、より具体的にはそのコアネットワーク上に構築されたBLNを使用して、いくつかの別個であるが関連する問題を解決することによって分散型データベースシステムを改善するいくつかの方法が概説される。
方法1-最終的な一貫性を改善し、および/またはゾンビを軽減するためのBLNの使用。カサンドラデータベースはAPシステムであり、これは、CAP定理にしたがってデータの一貫性を犠牲にし、代わりに最終的な一貫性機構を使用することを意味する。これを行う際、動作の順序が重要であり、失敗(failure)すると、ゾンビレコードがデータベースを伝搬することとなる。
マルチノードクラスタでは、異なるデータベースノードが、同じデータの複製を記憶し得る。ノードがローカルに記憶しているデータに対する削除要求を受信した場合、ノードは、指定されたデータベースエントリをトゥームストーンし、同じ記録の複製を含む他のノードにトゥームストーンをフォワードしようとする。しかしながら、1つのレプリカノードがその時点で到達不可能である場合、直ぐにはトゥームストーンを受信しないので、削除動作の前のバージョンの記録を依然として含む。そのノードが回復する前にクラスタの残りから「トゥームストーンされた」記録がすでに削除されている場合、現在回復しているノード上の当該エントリは、オンラインに戻ったときに新しいデータとして扱われ得るので、それらは新しい追加としてクラスタの残りに伝播される可能性がある。これはゾンビレコードと呼ばれる。
そのような問題などに対処するために、単純なカサンドラシステムの代わりにBLNiDDを使用して、最終的な一貫性につながる動作の順序を決定するための中央コーディネータとして、ブロックチェーンコアネットワークを活用し得る。順序は不変になり、公に検証可能になる。層i=2内のデータベースノードは、直接通信ではなくゴシップ(または他のそのようなプロトコル)を使用して、データブロブのハッシュですべての状態ミューテーションを伝搬する。
言い換えれば、動作の順序が重要であり得、最終的な一貫性の正確な状態に到達することが望まれ得る。これに対処するために、層i=2におけるデータベースクラスタ(不完全グラフ)は、i=1におけるブロックチェーンコアネットワークを使用して、イベントを順序付けし、最終的な一貫性を保証する。最終的な一貫性の概念は、いくつかの(例えば6つの)ブロックの後に(すなわち、最終的に)ブロックチェーンが不変状態に崩壊することとうまく結びついている。
これは、一時的にネットワークから離脱したノードのための再オンボーディングプロセスにも適用可能である。他のノードは、ゴシップなどを使用して状態変化を通信し、状態変化が実際に起こった/要求されたことをそのノードに証明するためにマークルプルーフを提供することができる。ここで、データベースノードはSPVのようなものであり得る。再オンボーディングに関して、これは、BLNのロバスト特性を実証する。
方法は以下のように動作し得る。
1.ユーザ/クライアントは、データベースノードに読み取り/書き込み要求を行う。ユーザ/クライアントは、読み取り/書き込み要求トランザクションを同時に作成およびブロードキャストし、ブロックチェーンコア層に直接送信する。ユーザ/クライアントはまた、このトランザクションのTxIDをコーディネータデータベースノードに送信する。
2.コーディネータは、通常通り、読み取り/書き込み要求が関係する関連のあるノードを識別することによって挙動する。要求タイプに応じて、コーディネータは以下を行う:
a.読み取り要求:状態ミューテーションがいずれのノードにも必要とされないので、コーディネータオペレータは、単に、ゴシップまたは直接通信(直接接続されている場合)を介して関連のあるノードに要求をフォワードする。
b.書き込み要求:書き込みのために状態ミューテーションが必要とされるので、コーディネータは、要求およびデータの両方を(ゴシップ接続または直接接続を介して)関連のあるレプリカノードに伝搬しなければならない。
c.いずれの場合も、コーディネータはまた、書き込み要求のTxIDを、動作の順序付けのプルーフとして関連のあるノードに伝搬する。
3.ピアから要求およびデータを受信すると、レプリカノードは、コアから、それらが受信した要求が要求トランザクション内の要求詳細と一致することを確認し、コーディネータに確認応答を返す。実施形態では、レプリカノードは、このチェックを条件として、それ自身のローカル記録に更新を適用するだけでよい。
4.コーディネータは以下を返す:
a.ユーザ/クライアントへの成功または失敗メッセージ。
b.任意選択:マイニングのためのブロックチェーンコア層への成功または失敗トランザクション。
1.ユーザ/クライアントは、データベースノードに読み取り/書き込み要求を行う。ユーザ/クライアントは、読み取り/書き込み要求トランザクションを同時に作成およびブロードキャストし、ブロックチェーンコア層に直接送信する。ユーザ/クライアントはまた、このトランザクションのTxIDをコーディネータデータベースノードに送信する。
2.コーディネータは、通常通り、読み取り/書き込み要求が関係する関連のあるノードを識別することによって挙動する。要求タイプに応じて、コーディネータは以下を行う:
a.読み取り要求:状態ミューテーションがいずれのノードにも必要とされないので、コーディネータオペレータは、単に、ゴシップまたは直接通信(直接接続されている場合)を介して関連のあるノードに要求をフォワードする。
b.書き込み要求:書き込みのために状態ミューテーションが必要とされるので、コーディネータは、要求およびデータの両方を(ゴシップ接続または直接接続を介して)関連のあるレプリカノードに伝搬しなければならない。
c.いずれの場合も、コーディネータはまた、書き込み要求のTxIDを、動作の順序付けのプルーフとして関連のあるノードに伝搬する。
3.ピアから要求およびデータを受信すると、レプリカノードは、コアから、それらが受信した要求が要求トランザクション内の要求詳細と一致することを確認し、コーディネータに確認応答を返す。実施形態では、レプリカノードは、このチェックを条件として、それ自身のローカル記録に更新を適用するだけでよい。
4.コーディネータは以下を返す:
a.ユーザ/クライアントへの成功または失敗メッセージ。
b.任意選択:マイニングのためのブロックチェーンコア層への成功または失敗トランザクション。
例示的な読み取り/書き込みトランザクションの詳細を以下の図19に示す。<request data>パケットは、一意の要求ID、その要求のためのコーディネータノードのID、および要求されているデータの行のための鍵を含み得る。
この方法の新しい読み取り/書き込みパスが図20に示されている。標準的なカサンドラ読み取り/書き込みパスとの主な違いは、以下の通りである:
・ ユーザ/クライアントは、それらの読み取り/書き込み要求をデータベースクラスタおよびブロックチェーンコア層に並行してサブミットする;および
・ データベースクラスタ内のノードは、コーディネータと要求に対する関連のあるレプリカノードとの間の距離に応じて、ゴシップ(またはそのようなもの、すなわち間接的に)または直接通信のいずれかを使用して要求およびデータを伝搬し得る。
・ ユーザ/クライアントは、それらの読み取り/書き込み要求をデータベースクラスタおよびブロックチェーンコア層に並行してサブミットする;および
・ データベースクラスタ内のノードは、コーディネータと要求に対する関連のあるレプリカノードとの間の距離に応じて、ゴシップ(またはそのようなもの、すなわち間接的に)または直接通信のいずれかを使用して要求およびデータを伝搬し得る。
1つの利点は、正しい順序の動作を繰り返すことによってレプリカノードが同じ最終的な一貫性に到達することを確実にするコーディネータの負担が低減されることである。これはビットコインネットワークにオフロードされる。別の利点は、オフライン中にノードが見落とす動作(削除を含む)の順序が記憶され、ブロックチェーンから回復可能であるので、ゾンビレコードの可能性を軽減することである。
方法2-ヒンテッドハンドオフ中のコーディネータノードの負荷を低減する。従来、カサンドラなどの分散型データベースでは、レプリカノードが書き込みパス中に到達不可能である場合、コーディネータノードにヒンテッドハンドオフが書き込まれる。これにより、ヒントをローカルに記憶し、再参加ノードにフォワードすることによって、レプリカがネットワークに再参加するのを助ける追加の負担がコーディネータにかかる。ヒンテッドハンドオフはまた、タイムアウトし、データの最終的な一貫性を破ることがある。
BLNiDDを使用してこれに対処するために、ヒンテッドハンドオフは、それらを不変の順序付けのためにブロックチェーンコア層に伝搬することによって、ブロックチェーンに書き込まれ得る。ノードがネットワークに再参加するとき、ノードは、(例えば、ノードIDおよび/またはPKIを使用して)それに関連するヒントについてブロックチェーンコア層にクエリを行うことができる。任意選択で、少なくとも1つのレプリカノードが書き込み要求のためのデータを書き込んでおり、再参加ノードは、それを使用して、(同じくブロックチェーン上にブロブを記憶するのではなく)書き込みデータブロブを取得することができる。
方法は以下のように動作し得る。
1.ユーザ/クライアントは、複製係数、例えば、複製係数3で、ノード(コーディネータ)に書き込み要求を行う。
a.任意選択:ユーザ/クライアントはまた、要求の記録をビットコインコア層に送信する。
2.コーディネータは、データを書き込むべき3つのノードを識別し、書き込み要求をフォワードする。
3.ノードのうちの2つは、データを書き込み、要求に肯定的に応答するが、3つ目は到達不可能である。
4.コーディネータは、肯定応答をユーザ/クライアントに返し、ヒンテッドハンドオフトランザクションを書き込み(図21参照)、マイニングのためにそれをブロックチェーンコア層にブロードキャストする。ヒンテッドハンドオフは、以下を含む:
a.到達不能ノードのノードID、ID3;
b.データにタイムスタンプ付与するヒントID;
c.メッセージID;
d.データが成功裏に書き込まれた2つの複製のノードID、ID1,ID2;
e.書き込まれるべきデータブロブのハッシュ。
f.任意選択:データ自体
5.到達不可能なノードは、ネットワークに再参加し、到来するヒンテッドハンドオフについて、ブロックチェーンコアネットワークにおけるその接続にクエリを行う。ヒンテッドハンドオフを取得すると、ノードは以下を行うこととなる:
a.ノードID1および/またはID2からデータブロブを取得する;
i.任意選択:ブロブがヒンテッドハンドオフに含まれる場合、単にブロブを取得する。
b.データブロブがヒンテッドハンドオフにおけるハッシュにハッシングすることを検証する;
c.他の動作が見落とされなかったと仮定して(これらは、それら自身のヒンテッドハンドオフによっても識別される)、データブロブをそのローカルディスクに書き込む。
1.ユーザ/クライアントは、複製係数、例えば、複製係数3で、ノード(コーディネータ)に書き込み要求を行う。
a.任意選択:ユーザ/クライアントはまた、要求の記録をビットコインコア層に送信する。
2.コーディネータは、データを書き込むべき3つのノードを識別し、書き込み要求をフォワードする。
3.ノードのうちの2つは、データを書き込み、要求に肯定的に応答するが、3つ目は到達不可能である。
4.コーディネータは、肯定応答をユーザ/クライアントに返し、ヒンテッドハンドオフトランザクションを書き込み(図21参照)、マイニングのためにそれをブロックチェーンコア層にブロードキャストする。ヒンテッドハンドオフは、以下を含む:
a.到達不能ノードのノードID、ID3;
b.データにタイムスタンプ付与するヒントID;
c.メッセージID;
d.データが成功裏に書き込まれた2つの複製のノードID、ID1,ID2;
e.書き込まれるべきデータブロブのハッシュ。
f.任意選択:データ自体
5.到達不可能なノードは、ネットワークに再参加し、到来するヒンテッドハンドオフについて、ブロックチェーンコアネットワークにおけるその接続にクエリを行う。ヒンテッドハンドオフを取得すると、ノードは以下を行うこととなる:
a.ノードID1および/またはID2からデータブロブを取得する;
i.任意選択:ブロブがヒンテッドハンドオフに含まれる場合、単にブロブを取得する。
b.データブロブがヒンテッドハンドオフにおけるハッシュにハッシングすることを検証する;
c.他の動作が見落とされなかったと仮定して(これらは、それら自身のヒンテッドハンドオフによっても識別される)、データブロブをそのローカルディスクに書き込む。
図21は、ヒンテッドハンドオフトランザクションの例を示す。
方法3-再オンボーディングデータベースノードのセキュリティを改善する。カサンドラノードがクラスタの残りの部分から危険にさらされ/パーティションされた場合、後に再オンボードされる必要がある。これは、そのノードが到達不能であった間にそのノードに対して要求されたすべてのローカルデータベースミューテーションを取得し、実装することを伴う。
典型的には、カサンドラクラスタは、クラスタ内のすべてのノードが互いに信頼して、これらの見逃されたミューテーション要求を伝搬および通信する信頼できる環境とみなされ得る。しかしながら、データベースノードのための再参加プロセスを改善して、正しい見逃されたミューテーション要求を他のノードに送信するために他のノードを信頼する必要がないことが望ましいであろう。
これは、危険にさらされたノードから誤ったミューテーションを伝播させることを望む精巧な攻撃者によって分散型データベース内の多くのノードが危険にさらされるのを防ぐ際に有利であり得る。
信頼への依存のこの有利な低減は、BLNiDDを使用すること、および、再参加ノードが、ブロックチェーンコアネットワークから取得された署名済みトランザクション(確認されたトランザクションまたは未確認のトランザクションが使用されてもよい)から、見落としたミューテーション要求を取得することを要求する再参加プロトコル(以下で説明される)を使用することによって、達成され得る。
トラストレスな再参加プロトコルは以下の通りであり得る:
1.ノードID1は、かなりの期間にわたってデータベースクラスタからパーティションされる。この時間中:
a.ID1によって複製されたデータに関して、いくつかの書き込み要求(アップサートを含む)が行われる。
b.ノードID1は、悪意のある攻撃に起因してパーティションされたか否かを確信することができず、これは、他のノードが同様に危険にさらされている可能性があり、攻撃者の制御下にある可能性があると仮定して、ノードがネットワークに再参加しなければならないことを意味する。
2.再参加するとき、再参加ノードは、ブロックチェーンコアネットワークから取得された署名済みトランザクションから、見落としたミューテーション要求を取得する。
1.ノードID1は、かなりの期間にわたってデータベースクラスタからパーティションされる。この時間中:
a.ID1によって複製されたデータに関して、いくつかの書き込み要求(アップサートを含む)が行われる。
b.ノードID1は、悪意のある攻撃に起因してパーティションされたか否かを確信することができず、これは、他のノードが同様に危険にさらされている可能性があり、攻撃者の制御下にある可能性があると仮定して、ノードがネットワークに再参加しなければならないことを意味する。
2.再参加するとき、再参加ノードは、ブロックチェーンコアネットワークから取得された署名済みトランザクションから、見落としたミューテーション要求を取得する。
これは、方法1と同様であるが、ブロックチェーンコアネットワークを使用して、イベントを時間順序付けすることで、最近危険にさらされたノードは、他のデータベースノードが正しい更新を与えてくれることを当てにせずに、データベースクラスタに再オンボードされるために直接クエリを行うことができるようにする。
いくつかの実施形態では、マークルプルーフが再オンボーディングのために使用され得る。
上記の利点は、正しい順序の動作を繰り返すことによってレプリカノードが同じ最終的な一貫性に到達することを確実にするコーディネータの負担が低減されることである。これはブロックチェーンネットワークにオフロードされる。
方法4-すべてのノードのコミットログを複製するかまたはトランザクションセットで置き換える。カサンドラクラスタ内のすべてのノードの要件は、それらが実行するように要求されるすべてのデータベースミューテーションのコミットログのローカルコピーを保持しなければならないことである。これにより、カサンドラノードにハードウェア負荷がかかり、その性能が制限される可能性がある。
本明細書に開示される実施形態では、ブロックチェーンは、コミットログを記憶する負担をデータベースノードからオフロードするために不変のタイムスタンプ付与台帳として使用されることができる。コミットログは、必要に応じてブロックチェーンから取り出すことができるので、データベースノード自体に一時的に記憶するだけでよい。
これにより、ブロックチェーン上に代わりに記録することによって、データベースクラスタ内のすべてのノードが、それ自体のローカルなコミットログを維持する負担を軽減することができる。
実施形態では、前述のデータタイムスタンプ付与方法は、リンクされたトランザクションのセットとしてブロックチェーン上にコミットログ全体を記憶するために使用され得、そのデータおよび動作順序の両方が、ブロックチェーンネットワークコア層ノードのアクションによってブロックチェーン上に不変に記録される。
カサンドラコミットログは、先に詳述したように、単一のカサンドラノードに対して行われたすべてのミューテーションのアペンド専用ログである。ブロックチェーンログは、ブロックチェーンにコミットされたトランザクションのアペンド専用イベントログであり得るという点で類似し得る。
結論
上記の実施形態は、単なる例として説明されていることが理解されよう。より一般的には、以下のステートメントのうちのいずれか1つまたは複数による方法、装置、またはプログラムが提供され得る。
上記の実施形態は、単なる例として説明されていることが理解されよう。より一般的には、以下のステートメントのうちのいずれか1つまたは複数による方法、装置、またはプログラムが提供され得る。
ステートメント1:階層化ネットワークにおいて実装される分散型データベースを動作させる方法であって、階層化ネットワークは、1つまたは複数のコアノードを含むコア層と、各々が1つまたは複数の中間層ノードを含む1つまたは複数の中間層と、各々が1つまたは複数の外層ノードを含む1つまたは複数の外層とを含み、コアノードの各々は、ブロックチェーンネットワークのノードであり、中間層ノードのうちの少なくともいくつかは、分散型データベースのデータベースノードであり、外層ノードのうちの少なくともいくつかは、分散型データベースのクライアントノードであり、各データベースノードは、分散型データベースの少なくとも一部を記憶し、方法は、データベースノードの第1のデータベースノードにおいて、各々が分散型データベース内のそれぞれのターゲットエントリを更新する要求である1つまたは複数の更新要求を、クライアントノードのうちの1つまたは複数から受信することと、受信された更新要求の各々について、上記第1のデータベースノードに記憶されたデータベースの一部においてそれぞれのターゲットエントリが見つかるかどうかを決定し、見つかった場合には、第1のデータベースノードに記憶されたデータベースの一部におけるそれぞれのターゲットエントリへの更新要求の更新を行い、見つからなかった場合には、それぞれのターゲットエントリを含むデータベースの一部を記憶するデータベースノードのうちの別のデータベースノードに要求をフォワードすることとを含み、1つまたは複数の更新要求の指示を含む少なくとも1つのトランザクションも、ブロックチェーンネットワークのブロックチェーン上に記録される、方法。
この文脈における「第1」は、データベースノードのうちの所与の1つに対する任意のラベルにすぎず、それ自体は、別のデータベースノードに対する何らかの特定のステータスを必ずしも意味しないことが理解されよう。
更新要求は、同じクライアントノードから受信されてもよいし、異なるクライアントノードから受信されてもよいし、一部が同じクライアントノードから、一部が異なるクライアントノードから受信されてもよい。
ステートメント2:各クライアントノードは、階層化ネットワーク内でデータベースノードのうちの少なくとも1つへの接続を有し、第1のデータベースノードは、クライアントノードとデータベースノードとの間の接続のうちの1つを介してクライアントノードから直接、更新要求のうちの少なくとも1つを受信する、ステートメント1に記載の方法。
ステートメント3:データベースノードの各々は、階層化ネットワーク内でデータベースノードのうちの少なくとも1つの他のデータベースノードへの接続を有し、更新要求のうちの少なくとも1つが、第1のデータベースノード以外のデータベースノードのうちの少なくとも1つの他のデータベースノードを介して、データベースノード間の接続のうちの少なくとも1つ上で間接的に受信されること、および/または更新要求のうちの少なくとも1つの更新要求のそれぞれのターゲットエントリが、他のデータベースノードのうちの1つに記憶されたデータベースの一部において見つかり、上記フォワードすることが、データベースノード間の上記接続のうちの少なくとも1つを介して他のデータベースノードにフォワードすることを含むことのうちの一方または両方である、ステートメント1または2に記載の方法。
ステートメント4:上記少なくとも1つのトランザクションは、クライアントノードのうちの少なくとも1つによって定式化され、ブロックチェーン上にマイニングされるために少なくとも1つのクライアントノードによってコア層に送信される、先行ステートメントのいずれかに記載の方法。
ステートメント5:各クライアントノードは、階層化ネットワーク内でコアノードのうちの少なくとも1つへの接続を有し、更新要求がブロックチェーンに記録されているかどうかをクライアントノードがチェックすることを可能にする、先行ステートメントのいずれかに記載の方法。
ステートメント6:各クライアントは、階層化ネットワーク内でコアノードのうちの2つ以上への接続を有する、ステートメント5に記載の方法。
ステートメント7:各クライアントは、階層化ネットワーク内でコアノードのすべてではないが2つ以上への接続を有する、ステートメント6に記載の方法。
ステートメント8:上記少なくとも1つのトランザクションは、クライアントノードのうちの少なくとも1つによって、クライアントノードとコアノードとの間の上記接続のうちの少なくとも1つを介してコア層に直接送信される、ステートメント5から7のいずれかに記載の方法。
代替的に、2つ以上のホップを介して間接的に送信され得る。
ステートメント9:上記少なくとも1つのトランザクションは、第1のデータベースノード以外のデータベースノードまたは中間層ノードのうちの少なくとも1つの他のノードによって定式化され、ブロックチェーン上にマイニングされるために少なくとも1つの他のノードによってコア層に送信される、ステートメント1から3のいずれかに記載の方法。
例えば、少なくとも1つのトランザクションは、コーディネータとして機能する他のデータベースノードのうちの1つによって、または証明サービスを提供する別のタイプの中間層ノードによって定式化され、送信され得る。
ステートメント10:上記少なくとも1つのトランザクションは、クライアントノードのうちの少なくとも1つ、または第1のデータベースノード以外のデータベースノードもしくは他の中間層ノードのうちの少なくとも1つの他のデータベースノードによって定式化され、コア層に送信され、方法は、第1のデータベースノードによって、ブロックチェーンを検査して、1つまたは複数の更新要求の指示がブロックチェーンに記録されていることをチェックすること、および/または、1つまたは複数のマイナーのメムプールを検査して、少なくとも1つのトランザクションが受け入れられていることをチェックすることをさらに含む、先行ステートメントのいずれかに記載の方法。
ステートメント11:上記更新を行うことは、上記チェックを条件とする、ステートメント10に記載の方法。
ステートメント12:第1のデータベースノードは、第1のノードとコアノードのうちの少なくとも1つとの間の階層化ネットワーク内の接続を介して直接、上記検査を実行するように構成される、ステートメント10または11に記載の方法。
ステートメント13:上記少なくとも1つのトランザクションは、第1のデータベースノードによって定式化され、ブロックチェーン上にマイニングされるために第1のデータベースノードによってコア層に送信される、ステートメント1から3のいずれかに記載の方法。
ステートメント14:データベースノードの各々は、階層化ネットワーク内でコアノードのうちの少なくとも1つへの接続を有する、先行ステートメントのいずれかに記載の方法。
ステートメント15:データベースノードの各々は、階層化ネットワーク内でコアノードのすべてではないが少なくとも1つへの接続を有する、ステートメント14に記載の方法。
ステートメント16:少なくとも1つのトランザクションは、データベースとコアノードとの間の接続のうちの少なくとも1つを介して直接、データベースノードのうちの少なくとも1つによってコア層に送信される、ステートメント14または15に記載の方法。
ステートメント17:少なくとも1つのトランザクションに含まれる1つまたは複数の更新要求の指示は、それぞれのデータエントリまたは複数のエントリのコンテンツに対して行われる更新である、1つまたは複数の更新のデータコンテンツを含む、先行ステートメントのいずれかに記載の方法。
データ更新のコンテンツは、それぞれのターゲットエントリ内の前の1つまたは複数の値を置き換える1つまたは複数の値、および/またはそれぞれのターゲットエントリの1つまたは複数の既存の値に適用するデルタの形態をとり得る。
ステートメント18:少なくとも1つのトランザクションに含まれる1つまたは複数の更新要求の指示は、1つまたは複数のハッシュを含み、各ハッシュは、更新のうちの少なくとも1つの更新のデータコンテンツを含むプレイメージのハッシュである、先行ステートメントのいずれかに記載の方法。
ステートメント19:少なくとも1つのトランザクションに含まれる1つまたは複数の更新要求の指示は、それぞれのターゲットエントリが見つかるデータベースの一部を記憶する1つまたは複数のデータベースノードのIDを含む、先行ステートメントのいずれかに記載の方法。
ステートメント20:上記1つまたは複数の更新要求は、複数の更新要求であり、更新要求のうちの少なくともいくつかの更新要求のそれぞれのターゲットエントリは、第1のデータベースノードに記憶されたデータベースの一部において見つかるデータベース内の同じエントリであり、上記更新を行うことは、指定された順序にしたがって更新を行うことを含む、先行ステートメントのいずれかに記載の方法。
ステートメント21:少なくとも1つのトランザクションに含まれる1つまたは複数の更新要求の指示は、複数の更新要求の指定された順序を含む、ステートメント20に記載の方法。
順序は、いくつかの異なる可能な形態、例えば、i)更新要求の順序付きリスト、ii)各更新要求にマッピングされたインデックス、iii)ハッシュチェーン、各キーがチェーン内の先行する更新要求に基づくキーのチェーン、iv)rパズルのチェーン、および/またはv)各更新要求に関連付けられたタイムスタンプのうちのいずれか1つまたは複数で示され得る。
ステートメント22:少なくとも1つのトランザクションは、クライアントノードのうちの少なくとも1つ、または第1のデータベースノード以外のデータベースノードもしくは他の中間層ノードのうちの少なくとも1つの他のデータベースノードから生じ、方法は、第1のデータベースノードが、ブロックチェーンまたはブロックチェーンネットワークのマイナーのメムプールから指定された順序を読み取ることを含み、上記更新を行うことは、ブロックチェーンまたはメムプールから決定された上記順序にしたがって更新を行うことを含む、ステートメント21に記載の方法。
例えば、指定された順序は、第1のデータベースノード以外の中間ノードのうちの1つまたは複数の他のノードにおいて実装される順序付けサービスによって決定され、チェーン上に記録され得る。
ステートメント23:順序は、クライアントノードのうちの少なくとも1つが、順序付けサービスにサブミットし、順序付けサービスから順序の指定を受信し、指定された順序を更新要求のうちの少なくとも1つに含めることによって決定される、ステートメント20または21に記載の方法。
順序付けサービスは、第1のデータベースノード以外の中間ノードのうちの1つまたは複数の他のノードにおいて実装され得る。
ステートメント24:指定された順序は、第1のデータベースノードにおいて実装される順序付けサービスによって決定される、ステートメント20または21に記載の方法。
ステートメント25:データベースの1つまたは複数のエントリは、複数のデータベースノードに記憶されたデータベースの一部にわたって複製される、先行ステートメントのいずれかに記載の方法。
ステートメント26:更新要求のうちの少なくとも1つの更新要求のターゲットエントリは、方法が、第1のデータベースノードにおいて更新を行うことと、要求をデータベースノードのうちの別のデータベースノードにフォワードすることとの両方を含むように、第1のデータベースノード上に記憶されたデータベースの一部と別のデータベースノードとの両方において見つかる、ステートメント25に記載の方法。
ステートメント27:更新要求のうちの少なくとも1つの更新要求のターゲットエントリは、第1のデータベースノード以外のデータベースノードのうちの別のデータベースノード上に記憶されたデータベースの一部において見つかり、上記フォワードすることは、別のデータベースノードが階層化ネットワーク上で現在到達可能であるかどうかを決定し、上記決定にしたがって到達可能であると決定されたことを条件として、更新要求を別のデータベースノードにフォワードすることを含む、先行ステートメントのいずれかに記載の方法。
ステートメント28:別のデータベースノードは、階層化ネットワークから一時的に切断され、少なくとも1つのトランザクションにおける上記指示は、別のデータベースノードが階層化ネットワークに再接続するとき、上記別のデータベースノードが少なくとも1つの更新要求の更新を行うことを可能にする、ステートメント27に記載の方法。
ステートメント29:第1のデータベースノードが階層化ネットワークから一時的に切断された状態になる期間の間、方法は、第1のデータベースノードが階層化ネットワークに再接続された状態になるとき、第1のノードが、ブロックチェーン、またはブロックチェーンネットワークのマイナーのメムプールを検査して、第1のデータベースノードによって記憶されたデータベースの一部内のそれぞれのターゲットエントリに関して、上記第1のデータベースノードが切断されていた間に1つまたは複数の他のデータベースノードによって受信された任意の更新要求を記録する1つまたは複数のさらなるトランザクションをチェックし、任意のそのような更新を行うことをさらに含む、先行ステートメントのいずれかに記載の方法。
指示は、少なくとも、更新が行われるべきエントリを含むデータベースの一部を記憶することを担う1つまたは複数のデータベースノードのIDを含み得る。更新のデータコンテンツは、トランザクションに記憶された指示に記憶され、そこから取り出され得るか、または代わりに、エントリの複製を記憶するデータベースノードのうちの別のデータベースノードから取り出され得る。例えば、複製を記憶するノードは、少なくとも1つのトランザクションにおいてIDから決定され得る。
ステートメント30:第1のノードは、第1のノードとコアノードのうちの少なくとも1つとの間の階層化ネットワーク内の接続を介して直接、上記検査を実行するように構成される、ステートメント10から12または請求項29のいずれかに記載の方法。
代替的に、これは、2つ以上のホップを介して行われ得る。
ステートメント31:コア層は完全である、先行ステートメントのいずれかに記載の方法。
すなわち、コア層内のすべてのコアノードは、階層化ネットワーク内で、コア層内の他のすべてのコアノードへの接続を有する。
ステートメント32:階層化ネットワークは全体として非完全である、先行ステートメントのいずれかに記載の方法。
すなわち、すべての層内のすべてのノードが、階層化ネットワーク内で、他のすべてのコア層内の他のすべてのノードへの接続を有するわけではない。いくつかのそのような実施形態では、所与の層内のすべてのノードは、必ずしも、同層内のすべての他のノードへの接続を有するとは限らない。
ステートメント33:クライアントノードおよび/またはデータベースノードの各々は、認証局によって証明される、先行請求項のいずれかに記載の方法。
ステートメント34:コンピュータ機器であって、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置と、1つまたは複数のネットワークインターフェースユニットを含むネットワークインターフェースとを備え、メモリは、処理装置上で実行されるように構成されたコードを記憶し、コードは、処理装置上で実行されるときに、ネットワークインターフェースを介して更新要求を受信することを含む先行請求項のいずれかに記載の方法を実行することによって、コンピュータ機器を上記第1のデータベースノードとして動作させるように構成される、コンピュータ機器。
ステートメント35:コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されるとき、ステートメント1から33のいずれかに記載の方法を実行するように構成されたコンピュータプログラム。
ステートメント36:分散型データベースを使用する方法であって、階層化ネットワークにおいて実装される分散型データベースを動作させる方法であり、階層化ネットワークは、1つまたは複数のコアノードを含むコア層と、各々が1つまたは複数の中間層ノードを含む1つまたは複数の中間層と、各々が1つまたは複数の外層ノードを含む1つまたは複数の外層とを含み、コアノードの各々は、ブロックチェーンネットワークのノードであり、中間層ノードのうちの少なくともいくつかは、分散型データベースのデータベースノードであり、外層ノードのうちの少なくともいくつかは、分散型データベースのクライアントノードであり、各データベースノードは、分散型データベースの少なくとも一部を記憶し、方法は、クライアントノードのうちの第1のクライアントノードにおいて、各々が分散型データベース内のそれぞれのターゲットエントリを更新する要求である1つまたは複数の更新要求をデータベースノードのうちの1つまたは複数に送信することと、第1のクライアントノードとコア層内のコアノードのうちの少なくとも1つとの間の階層化ネットワーク内の接続を使用して、直接:I)ブロックチェーンネットワークのブロックチェーン上に記録されるべき少なくとも1つのトランザクションを送信すること、ここで、少なくとも1つのトランザクションは、1つまたは複数の更新要求の指示を含む、および/またはII)1つまたは複数の更新要求の指示を含む少なくとも1つのトランザクションが、ブロックチェーン上に記録されているか、または少なくともブロックチェーンネットワークのマイナーのメムプールに受け入れられていることをチェックすることを行うこととを含む方法。
ステートメント37:第1のクライアントノードは、メッセージが以下の形態をとる通信プロトコルを使用して、上記少なくとも1つのトランザクションを送信すること、および/または上記チェックを実行することを含む、少なくとも1つのコアノードと通信することを行うように構成され、通信プロトコルにおいて、メッセージは、a)クライアントノードからコアノードに送信されるトランザクション、b)トランザクションがマイナーのメムプールに受け入れられたかどうかに関するクライアントノードからコアノードへのクエリと、コアノードからの対応する応答、c)トランザクションがブロックにマイニングされていることのマークルプルーフに対するクライアントノードからコアノードへの要求と、マークルプルーフを含むコアノードからの応答、および/またはd)ブロックヘッダのリストに対するクライアントノードからコアノードへの要求と、ブロックヘッダのリストを含むコアノードからの応答の形態をとる、ステートメント36に記載の方法。
実施形態では、第1のクライアントノードは、少なくとも1つのコアノードとの接続上で通信する際、a)~d)だけを使用しするように構成され得る。
実施形態では、上記プロトコルはSPVプロトコルであり得る。
ステートメント38:コンピュータ機器であって、1つまたは複数のメモリユニットを含むメモリと、1つまたは複数の処理ユニットを含む処理装置と、1つまたは複数のネットワークインターフェースユニットを含むネットワークインターフェースとを備え、メモリは、処理装置上で実行されるように構成されたコードを記憶し、コードは、処理装置上で実行されるとき、ネットワークインターフェースを介してIおよび/またはIIを行うことを含む、ステートメント36または37に記載の方法を実行することによって、コンピュータ機器を上記第1のクライアントノードとして動作させるように構成される、コンピュータ機器。
ステートメント39:コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されるとき、ステートメント36または37のいずれかに記載の方法を実行するように構成されたコンピュータプログラム。
開示された技法の他の変形形態またはユースケースは、本明細書の開示を与えられると、当業者には明らかになり得る。本開示の範囲は、説明された実施形態によって限定されるのではなく、添付の特許請求の範囲によってのみ限定される。
Claims (39)
- 階層化ネットワークにおいて実装される分散型データベースを動作させる方法であって、前記階層化ネットワークは、1つまたは複数のコアノードを含むコア層と、各々が1つまたは複数の中間層ノードを含む1つまたは複数の中間層と、各々が1つまたは複数の外層ノードを含む1つまたは複数の外層とを含み、前記コアノードの各々は、ブロックチェーンネットワークのノードであり、前記中間層ノードのうちの少なくともいくつかは、前記分散型データベースのデータベースノードであり、前記外層ノードのうちの少なくともいくつかは、前記分散型データベースのクライアントノードであり、各データベースノードは、前記分散型データベースの少なくとも一部を記憶し、前記方法は、前記データベースノードの第1のデータベースノードにおいて、
各々が前記分散型データベース内のそれぞれのターゲットエントリを更新する要求である1つまたは複数の更新要求を、前記クライアントノードのうちの1つまたは複数から受信することと、
前記受信された更新要求の各々について、前記第1のデータベースノードに記憶された前記データベースの前記一部において前記それぞれのターゲットエントリが見つかるかどうかを決定し、見つかった場合には、前記第1のデータベースノードに記憶された前記データベースの前記一部における前記それぞれのターゲットエントリへの前記更新要求の前記更新を行い、見つからなかった場合には、前記それぞれのターゲットエントリを含む前記データベースの一部を記憶する前記データベースノードのうちの別のデータベースノードに前記要求をフォワードすることと
を含み、
前記1つまたは複数の更新要求の指示を含む少なくとも1つのトランザクションも、前記ブロックチェーンネットワークのブロックチェーン上に記録される、
方法。 - 各クライアントノードは、前記階層化ネットワーク内で前記データベースノードのうちの少なくとも1つへの接続を有し、前記第1のデータベースノードは、クライアントノードとデータベースノードとの間の前記接続のうちの1つを介してクライアントノードから直接、前記更新要求のうちの少なくとも1つを受信する、請求項1に記載の方法。
- 前記データベースノードの各々は、前記階層化ネットワーク内で前記データベースノードのうちの少なくとも1つの他のデータベースノードへの接続を有し、
前記更新要求のうちの少なくとも1つが、前記第1のデータベースノード以外の前記データベースノードのうちの少なくとも1つの他のデータベースノードを介して、データベースノード間の前記接続のうちの少なくとも1つ上で間接的に受信されること、および/または
前記更新要求のうちの少なくとも1つの更新要求の前記それぞれのターゲットエントリが、前記他のデータベースノードのうちの1つに記憶された前記データベースの前記一部において見つかり、前記フォワードすることが、データベースノード間の前記接続のうちの少なくとも1つを介して前記他のデータベースノードにフォワードすることを含むこと
のうちの一方または両方である、請求項1または2に記載の方法。 - 前記少なくとも1つのトランザクションは、前記クライアントノードのうちの少なくとも1つによって定式化され、前記ブロックチェーン上にマイニングされるために前記少なくとも1つのクライアントノードによって前記コア層に送信される、請求項1から3のいずれか一項に記載の方法。
- 各クライアントノードは、前記階層化ネットワーク内で前記コアノードのうちの少なくとも1つへの接続を有し、更新要求が前記ブロックチェーンに記録されているかどうかを前記クライアントノードがチェックすることを可能にする、請求項1から4のいずれか一項に記載の方法。
- 各クライアントは、前記階層化ネットワーク内で前記コアノードのうちの2つ以上への接続を有する、請求項5に記載の方法。
- 各クライアントは、前記階層化ネットワーク内で前記コアノードのすべてではないが2つ以上への接続を有する、請求項6に記載の方法。
- 前記少なくとも1つのトランザクションは、前記クライアントノードのうちの少なくとも1つによって、クライアントノードとコアノードとの間の前記接続のうちの少なくとも1つを介して前記コア層に直接送信される、請求項5から7のいずれか一項に記載の方法。
- 前記少なくとも1つのトランザクションは、前記第1のデータベースノード以外の前記データベースノードまたは中間層ノードのうちの少なくとも1つの他のノードによって定式化され、前記ブロックチェーン上にマイニングされるために前記少なくとも1つの他のノードによって前記コア層に送信される、請求項1から3のいずれか一項に記載の方法。
- 前記少なくとも1つのトランザクションは、前記クライアントノードのうちの少なくとも1つ、または前記第1のデータベースノード以外の前記データベースノードもしくは他の中間層ノードのうちの少なくとも1つの他のデータベースノードによって定式化され、前記コア層に送信され、前記方法は、前記第1のデータベースノードによって、
前記ブロックチェーンを検査して、前記1つまたは複数の更新要求の前記指示が前記ブロックチェーンに記録されていることをチェックすること、および/または、1つまたは複数のマイナーのメムプールを検査して、前記少なくとも1つのトランザクションが受け入れられていることをチェックすること
をさらに含む、請求項1から9のいずれかに記載の方法。 - 前記更新を行うことは、前記チェックを条件とする、請求項10に記載の方法。
- 前記第1のデータベースノードは、前記第1のノードと前記コアノードのうちの少なくとも1つとの間の前記階層化ネットワーク内の接続を介して直接、前記検査を実行するように構成される、請求項10または11に記載の方法。
- 前記少なくとも1つのトランザクションは、前記第1のデータベースノードによって定式化され、前記ブロックチェーン上にマイニングされるために前記第1のデータベースノードによって前記コア層に送信される、請求項1から3のいずれか一項に記載の方法。
- 前記データベースノードの各々は、前記階層化ネットワーク内で前記コアノードのうちの少なくとも1つへの接続を有する、請求項1から13のいずれか一項に記載の方法。
- 前記データベースノードの各々は、前記階層化ネットワーク内で前記コアノードのすべてではないが少なくとも1つへの接続を有する、請求項14に記載の方法。
- 前記少なくとも1つのトランザクションは、データベースとコアノードとの間の前記接続のうちの少なくとも1つを介して直接、前記データベースノードのうちの少なくとも1つによって前記コア層に送信される、請求項14または15に記載の方法。
- 前記少なくとも1つのトランザクションに含まれる前記1つまたは複数の更新要求の前記指示は、それぞれのデータエントリまたは複数のエントリのコンテンツに対して行われる前記更新である、前記1つまたは複数の更新のデータコンテンツを含む、請求項1から16のいずれか一項に記載の方法。
- 前記少なくとも1つのトランザクションに含まれる前記1つまたは複数の更新要求の前記指示は、1つまたは複数のハッシュを含み、各ハッシュは、前記更新のうちの少なくとも1つの更新のデータコンテンツを含むプレイメージのハッシュである、請求項1から17のいずれか一項に記載の方法。
- 前記少なくとも1つのトランザクションに含まれる前記1つまたは複数の更新要求の前記指示は、前記それぞれのターゲットエントリが見つかる前記データベースの前記一部を記憶する前記1つまたは複数のデータベースノードのIDを含む、請求項1から18のいずれか一項に記載の方法。
- 前記1つまたは複数の更新要求は、複数の更新要求であり、前記更新要求のうちの少なくともいくつかの更新要求の前記それぞれのターゲットエントリは、前記第1のデータベースノードに記憶された前記データベースの前記一部において見つかる前記データベース内の同じエントリであり、前記更新を行うことは、指定された順序にしたがって前記更新を行うことを含む、請求項1から19のいずれか一項に記載の方法。
- 前記少なくとも1つのトランザクションに含まれる前記1つまたは複数の更新要求の前記指示は、前記複数の更新要求の前記指定された順序を含む、請求項20に記載の方法。
- 前記少なくとも1つのトランザクションは、前記クライアントノードのうちの少なくとも1つ、または前記第1のデータベースノード以外の前記データベースノードもしくは他の中間層ノードのうちの少なくとも1つの他のデータベースノードから生じ、前記方法は、
前記第1のデータベースノードが、前記ブロックチェーンまたは前記ブロックチェーンネットワークのマイナーのメムプールから前記指定された順序を読み取ることを含み、前記更新を行うことは、前記ブロックチェーンまたはメムプールから決定された前記順序にしたがって前記更新を行うことを含む、
請求項21に記載の方法。 - 前記順序は、前記クライアントノードのうちの少なくとも1つが、順序付けサービスにサブミットし、前記順序付けサービスから前記順序の指定を受信し、前記指定された順序を前記更新要求のうちの少なくとも1つに含めることによって決定される、請求項20または21に記載の方法。
- 前記指定された順序は、前記第1のデータベースノードにおいて実装される順序付けサービスによって決定される、請求項20または21に記載の方法。
- 前記データベースの1つまたは複数のエントリは、複数の前記データベースノードに記憶された前記データベースの前記一部にわたって複製される、請求項1から24のいずれか一項に記載の方法。
- 前記更新要求のうちの少なくとも1つの更新要求の前記ターゲットエントリは、前記方法が、前記第1のデータベースノードにおいて前記更新を行うことと、前記要求を前記データベースノードのうちの別のデータベースノードにフォワードすることとの両方を含むように、前記第1のデータベースノード上に記憶された前記データベースの前記一部と前記別のデータベースノードとの両方において見つかる、請求項25に記載の方法。
- 前記更新要求のうちの少なくとも1つの更新要求の前記ターゲットエントリは、前記第1のデータベースノード以外の前記データベースノードのうちの別のデータベースノード上に記憶された前記データベースの一部において見つかり、前記フォワードすることは、
前記別のデータベースノードが前記階層化ネットワーク上で現在到達可能であるかどうかを決定し、前記決定にしたがって到達可能であると決定されたことを条件として、前記更新要求を前記別のデータベースノードにフォワードすること
を含む、請求項1から26のいずれか一項に記載の方法。 - 前記別のデータベースノードは、前記階層化ネットワークから一時的に切断され、前記少なくとも1つのトランザクションにおける前記指示は、前記別のデータベースノードが前記階層化ネットワークに再接続するとき、前記別のデータベースノードが前記少なくとも1つの更新要求の前記更新を行うことを可能にする、請求項27に記載の方法。
- 前記第1のデータベースノードが前記階層化ネットワークから一時的に切断された状態になる期間の間、前記方法は、前記第1のデータベースノードが前記階層化ネットワークに再接続された状態になるとき、
前記第1のノードが、前記ブロックチェーン、または前記ブロックチェーンネットワークのマイナーのメムプールを検査して、前記第1のデータベースノードによって記憶された前記データベースの一部内のそれぞれのターゲットエントリに関して、前記第1のデータベースノードが切断されていた間に1つまたは複数の他のデータベースノードによって受信された任意の更新要求を記録する1つまたは複数のさらなるトランザクションをチェックし、任意のそのような更新を行うこと
をさらに含む、請求項1から28のいずれか一項に記載の方法。 - 前記第1のノードは、前記第1のノードと前記コアノードのうちの少なくとも1つとの間の前記階層化ネットワーク内の接続を介して直接、前記検査を実行するように構成される、請求項10から12または請求項29のいずれか一項に記載の方法。
- 前記コア層は完全である、請求項1から30のいずれか一項に記載の方法。
- 前記階層化ネットワークは全体として非完全である、請求項1から31のいずれか一項に記載の方法。
- 前記クライアントノードおよび/またはデータベースノードの各々は、認証局によって証明される、請求項1から32のいずれか一項に記載の方法。
- コンピュータ機器であって
1つまたは複数のメモリユニットを含むメモリと、
1つまたは複数の処理ユニットを含む処理装置と、
1つまたは複数のネットワークインターフェースユニットを含むネットワークインターフェースと
を備え、
前記メモリは、前記処理装置上で実行されるように構成されたコードを記憶し、前記コードは、前記処理装置上で実行されるときに、前記ネットワークインターフェースを介して前記更新要求を受信することを含む請求項1から33のいずれか一項に記載の方法を実行することによって、前記コンピュータ機器を前記第1のデータベースノードとして動作させるように構成される、
コンピュータ機器。 - コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されるとき、請求項1から33のいずれか一項に記載の方法を実行するように構成されたコンピュータプログラム。
- 分散型データベースを使用する方法であって、階層化ネットワークにおいて実装される分散型データベースを動作させる方法であり、前記階層化ネットワークは、1つまたは複数のコアノードを含むコア層と、各々が1つまたは複数の中間層ノードを含む1つまたは複数の中間層と、各々が1つまたは複数の外層ノードを含む1つまたは複数の外層とを含み、前記コアノードの各々は、ブロックチェーンネットワークのノードであり、前記中間層ノードのうちの少なくともいくつかは、前記分散型データベースのデータベースノードであり、前記外層ノードのうちの少なくともいくつかは、前記分散型データベースのクライアントノードであり、各データベースノードは、前記分散型データベースの少なくとも一部を記憶し、前記方法は、前記クライアントノードのうちの第1のクライアントノードにおいて、
各々が前記分散型データベース内のそれぞれのターゲットエントリを更新する要求である1つまたは複数の更新要求を前記データベースノードのうちの1つまたは複数に送信することと、
前記第1のクライアントノードと前記コア層内の前記コアノードのうちの少なくとも1つとの間の前記階層化ネットワーク内の接続を使用して、直接:
I)前記ブロックチェーンネットワークのブロックチェーン上に記録されるべき少なくとも1つのトランザクションを送信すること、ここで、前記少なくとも1つのトランザクションは、前記1つまたは複数の更新要求の指示を含む、および/または
II)前記1つまたは複数の更新要求の指示を含む少なくとも1つのトランザクションが、前記ブロックチェーン上に記録されているか、または少なくとも前記ブロックチェーンネットワークのマイナーのメムプールに受け入れられていることをチェックすること
を行うことと
を含む方法。 - 前記第1のクライアントノードは、メッセージが以下の形態をとる通信プロトコルを使用して、前記少なくとも1つのトランザクションを送信すること、および/または前記チェックを実行することを含む、前記少なくとも1つのコアノードと通信することを行うように構成され、前記通信プロトコルにおいて、メッセージは、
a)クライアントノードからコアノードに送信されるトランザクション、
b)トランザクションがマイナーのメムプールに受け入れられたかどうかに関するクライアントノードからコアノードへのクエリと、前記コアノードからの対応する応答、
c)トランザクションがブロックにマイニングされていることのマークルプルーフに対するクライアントノードからコアノードへの要求と、前記マークルプルーフを含む前記コアノードからの応答、および/または
d)ブロックヘッダのリストに対するクライアントノードからコアノードへの要求と、前記ブロックヘッダのリストを含む前記コアノードからの応答
の形態をとる、請求項36に記載の方法。 - コンピュータ機器であって、
1つまたは複数のメモリユニットを含むメモリと、
1つまたは複数の処理ユニットを含む処理装置と、
1つまたは複数のネットワークインターフェースユニットを含むネットワークインターフェースと
を備え、
前記メモリは、前記処理装置上で実行されるように構成されたコードを記憶し、前記コードは、前記処理装置上で実行されるとき、前記ネットワークインターフェースを介してI)および/またはII)を行うことを含む、請求項36または37に記載の方法を実行することによって、前記コンピュータ機器を前記第1のクライアントノードとして動作させるように構成される、
コンピュータ機器。 - コンピュータ可読ストレージ上に具現化され、1つまたは複数のプロセッサ上で実行されるとき、請求項36または37に記載の方法を実行するように構成されたコンピュータプログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2002303.2A GB2592222A (en) | 2020-02-19 | 2020-02-19 | Distributed database |
GB2002303.2 | 2020-02-19 | ||
PCT/IB2021/050365 WO2021165756A1 (en) | 2020-02-19 | 2021-01-19 | Distributed database |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2023515369A true JP2023515369A (ja) | 2023-04-13 |
JPWO2021165756A5 JPWO2021165756A5 (ja) | 2024-01-09 |
Family
ID=69956628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022548673A Pending JP2023515369A (ja) | 2020-02-19 | 2021-01-19 | 分散型データベース |
Country Status (7)
Country | Link |
---|---|
US (1) | US20230054245A1 (ja) |
EP (1) | EP4097917A1 (ja) |
JP (1) | JP2023515369A (ja) |
KR (1) | KR20220140775A (ja) |
CN (1) | CN115136566A (ja) |
GB (1) | GB2592222A (ja) |
WO (1) | WO2021165756A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210303633A1 (en) * | 2020-03-30 | 2021-09-30 | International Business Machines Corporation | Shard hashing |
US11669518B1 (en) * | 2021-12-14 | 2023-06-06 | Huawei Technologies Co., Ltd. | Method and system for processing database transactions in a distributed online transaction processing (OLTP) database |
US20220109581A1 (en) * | 2021-12-15 | 2022-04-07 | Intel Corporation | Distributed attestation in heterogenous computing clusters |
CN118035345A (zh) * | 2022-11-07 | 2024-05-14 | 腾讯科技(深圳)有限公司 | 一种基于区块链的数据处理方法、装置、设备及介质 |
WO2024182980A1 (zh) * | 2023-03-06 | 2024-09-12 | 北京小米移动软件有限公司 | 一种知识库管理方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109003078B (zh) * | 2018-06-27 | 2021-08-24 | 创新先进技术有限公司 | 基于区块链的智能合约调用方法及装置、电子设备 |
-
2020
- 2020-02-19 GB GB2002303.2A patent/GB2592222A/en active Pending
-
2021
- 2021-01-19 CN CN202180014958.4A patent/CN115136566A/zh active Pending
- 2021-01-19 WO PCT/IB2021/050365 patent/WO2021165756A1/en unknown
- 2021-01-19 US US17/796,619 patent/US20230054245A1/en active Pending
- 2021-01-19 JP JP2022548673A patent/JP2023515369A/ja active Pending
- 2021-01-19 EP EP21703311.7A patent/EP4097917A1/en active Pending
- 2021-01-19 KR KR1020227031122A patent/KR20220140775A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
GB2592222A (en) | 2021-08-25 |
GB202002303D0 (en) | 2020-04-01 |
US20230054245A1 (en) | 2023-02-23 |
KR20220140775A (ko) | 2022-10-18 |
CN115136566A (zh) | 2022-09-30 |
EP4097917A1 (en) | 2022-12-07 |
WO2021165756A1 (en) | 2021-08-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7408619B2 (ja) | ブロックチェーンネットワークにおいて大規模分散メモリプールを管理するためのコンピュータ実装されたシステム及び方法 | |
JP2023515369A (ja) | 分散型データベース | |
US20230066711A1 (en) | Attestation service for use with a blockchain network | |
CN114391241A (zh) | 具有可调整法定数量的区块链分片 | |
US20240305687A1 (en) | Layered network | |
CN115606150A (zh) | 多层通信网络 | |
US20240333790A1 (en) | Adapting connections of a layered network | |
CN118176694A (zh) | 用于分布式区块链功能的方法和系统 | |
KR20240100373A (ko) | 분산된 블록체인 기능들을 위한 방법들 및 시스템들 | |
US20240106670A1 (en) | Headers client for determining the best chain | |
WO2024156510A1 (en) | Proof and verification of data storage | |
CN118202613A (zh) | 用于分布式区块链功能的方法和系统 | |
CN118633258A (zh) | 用于分布式区块链功能的方法和系统 | |
CN118215919A (zh) | 用于分布式区块链功能的方法和系统 | |
CN118679708A (zh) | 基于区块链的隐私增强外包数据存储 | |
CN118696523A (zh) | 区块链事务 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20231225 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20231225 |