(57)【要約】【課題】複数のシステムからのデータのブロックチェーンロギングを提供する。【解決手段】第１のノードは、コンセンサスシステムに参加するために１つまたは複数の第２のノードと通信できる。第１のノードは、複数のデータソースからシーケンシャルデータの複数の部分を受信できる。第１のノードは、ブロック内のシーケンシャルデータの複数の部分を含む第１のブロックチェーンのブロックを生成できる。少なくとも第１のブロックチェーンのブロックに入力されたシーケンシャルデータの最後の部分のデータソースがシーケンシャルデータの次の部分のデータソースと異なると判定することに基づいて、第１のノードは、シーケンシャルデータの次の部分を含む第２のブロックチェーンのブロックを生成でき、第１のブロックチェーンのブロックを示す第２のブロックチェーンについて生成されたブロックにインジケータをさらに関連付けられる。【選択図】図１
2019029019.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
ブロックチェーンを管理するコンセンサスシステムに参加するための１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードであって、前記第１のコンピューティングノードは、動作を実行するための実行可能な命令によって構成された１つまたは複数のプロセッサを含み、
前記動作は、
前記第１のコンピューティングノードによって、複数のデータソースから複数のシーケンシャルデータを受信するステップであって、ソース時間およびソース識別子がシーケンシャルデータの各部分に関連付けられている、ステップと、
第１のブロックチェーンのブロックを生成するために第１のスレッドを実行するステップであって、第１のブロックは複数の前記シーケンシャルデータの前記部分を含む、ステップと、
第２のブロックチェーンのブロックを生成するために第２のスレッドを実行するステップと、
前記第１のブロックチェーンの前記ブロックに入力されたシーケンシャルデータの最後の部分に関連する前記ソース識別子が、前記第２のブロックチェーンの前記ブロックに入力されたシーケンシャルデータの第１の部分に関連する前記ソース識別子と一致するかどうかを判定するステップと、
前記第１のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の前記ソース識別子が、前記第２のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記第１の部分に関連する前記ソース識別子と異なると判定することに基づいて、前記第１のブロックチェーンの前記ブロックを示すインジケータを、前記第２のブロックチェーンについて生成された前記ブロックと関連付けるステップと、
を含む、第１のコンピューティングノード
を含む、システム。
【請求項２】
前記インジケータを前記第２のブロックチェーンについて生成された前記ブロックと関連付けるステップは、前記第１のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の少なくとも一部を、前記第２のブロックチェーンについて生成された前記ブロックの第１のエントリとして複製するステップを含む、請求項１に記載のシステム。
【請求項３】
前記第１のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の少なくとも一部を、前記第２のブロックチェーンについて生成された前記ブロックの第１のエントリとして複製するステップは、前記シーケンシャルデータの前記最後の部分のソースによって、前記シーケンシャルデータの前記最後の部分に関連する少なくとも前記ソース識別子およびソース時間を複製するステップを含む、請求項２に記載のシステム。
【請求項４】
前記インジケータを前記第２のブロックチェーンについて生成された前記ブロックに関連付けるステップは、前記第２のブロックチェーンについて生成された前記ブロック内に、前記第１のブロックチェーンの識別子と、前記第１のブロックチェーンの前記ブロックのブロック高さと、を含むステップを含む、請求項１に記載のシステム。
【請求項５】
前記動作は、
第３のブロックチェーンのブロックを生成するために第３のスレッドを実行するステップと、
前記第２のブロックチェーンの前記ブロックに入力されたシーケンシャルデータの最後の部分に関連する前記ソース識別子が、前記第３のブロックチェーンの前記ブロックに入力されたシーケンシャルデータの第１の部分に関連する前記ソース識別子と一致するかどうかを判定するステップと、
前記第２のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の前記ソース識別子が、前記第２のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記第１の部分に関連する前記ソース識別子と一致すると判定することに少なくとも部分的に基づいて、前記第１のブロックチェーンについて生成された前記ブロックの第１のエントリとして前記シーケンシャルデータの前記第１の部分を使用するステップであって、前記シーケンシャルデータの前記第１の部分は、前記第２のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の直後にシーケンスに続く、ステップと、
をさらに含む、請求項１に記載のシステム。
【請求項６】
前記動作は、
前記受信したシーケンシャルデータをファーストインファーストアウトデータ構造に格納するステップと、
前記受信したシーケンシャルデータを外部システムコンピューティングデバイスに転送するステップと、
前記第１または第２のブロックチェーンの一方における前記シーケンシャルデータの部分を記録することに基づいて、前記ファーストインファーストアウトデータ構造から前記シーケンシャルデータの一部を削除するステップと、
をさらに含む、請求項１に記載のシステム。
【請求項７】
第１のコンピューティングノードが、前記第２のブロックチェーンについて前記ブロックを生成するために前記第２のスレッドを実行している間に、前記第１のブロックチェーンについて前記ブロックのコンセンサスを決定するために、前記１つまたは複数の第２のコンピューティングノードに１つまたは複数の通信を、前記第１のコンピューティングノードによって送信するステップと、
前記コンセンサスを決定すると、前記第１のブロックチェーンの前記ブロックを前記第１のブロックチェーンに記録するステップと、
をさらに含む、請求項１に記載のシステム。
【請求項８】
前記動作は、
他のコンピューティングデバイスから、前記第１のブロックチェーンおよび前記第２のブロックチェーンにアクセスする要求を受信するステップと、
前記他のコンピューティングデバイスに、前記第１のブロックチェーンおよび前記第２のブロックチェーンの複数のブロックを送信するステップと、をさらに含み、前記他のコンピューティングデバイスは、前記第１のブロックチェーンおよび前記第２のブロックチェーンに格納された前記シーケンシャルデータを、前記シーケンシャルデータをシーケンシャルな順序でリストするためのブロックリストにシリアル化するように構成され、前記シリアル化は、
前記第１のブロックチェーンおよび前記第２のブロックチェーンの前記複数のブロックを読み出すステップと、
前記第１のブロックチェーンの前記ブロックを示す前記第２のブロックチェーンについて生成された前記ブロックの前記インジケータに少なくとも部分的に基づいて、前記シーケンシャルデータを前記ブロックリストのどこに挿入するかを決定するステップと、
によって行われる、
請求項１に記載のシステム。
【請求項９】
方法であって、
コンセンサスシステムに参加するための１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードの１つまたは複数のプロセッサによって、複数のデータソースからのシーケンシャルデータの複数の部分を受信するステップと、
前記１つまたは複数のプロセッサによって、第１のブロックチェーンのブロックを生成するステップであって、前記第１のブロックチェーンの前記ブロックは、前記シーケンシャルデータの前記複数の部分を含む、ステップと、
前記１つまたは複数のプロセッサによって、前記第１のブロックチェーンの前記ブロックに入力されたシーケンシャルデータの最後の部分のデータソースが前記シーケンシャルデータの次の部分のデータソースと一致するかどうかを判定するステップと、
前記第１のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の前記データソースが前記シーケンシャルデータの前記次の部分のデータソースと異なると判定することに少なくとも部分的に基づいて、前記１つまたは複数のプロセッサによって、前記シーケンシャルデータの前記次の部分を含む第２のブロックチェーンのブロックを生成し、前記第１のブロックチェーンの前記ブロックを示す前記第２のブロックチェーンについて生成された前記ブロックにインジケータを関連付けるステップと、
を含む、方法。
【請求項１０】
前記インジケータを前記第２のブロックチェーンについて生成された前記ブロックと関連付けるステップは、前記第１のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の少なくとも一部を、前記第２のブロックチェーンについて生成された前記ブロックの第１のエントリとして複製するステップを含む、請求項９に記載の方法。
【請求項１１】
前記第１のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の少なくとも一部を、前記第２のブロックチェーンについて生成された前記ブロックの第１のエントリとして複製するステップは、前記シーケンシャルデータの前記最後の部分のソースによって、少なくとも前記シーケンシャルデータの前記最後の部分の前記ソースの識別子および前記シーケンシャルデータの前記最後の部分に関連するソース時間を複製するステップを含む、請求項９に記載の方法。
【請求項１２】
前記インジケータを、前記第２のブロックチェーンについて生成された前記ブロックと関連付けるステップは、前記第２のブロックチェーンについて生成された前記ブロックの前記第１のブロックチェーンの前記ブロックの識別子を含むステップを含む、請求項９に記載の方法。
【請求項１３】
前記第２のブロックチェーンの前記ブロックに入力されたシーケンシャルデータの最後の部分に関連する前記データソースが、前記第１のブロックチェーンの次のブロックに入力されたシーケンシャルデータの第１の部分に関連する前記ソース識別子と一致するかどうかを判定するステップと、
前記第２のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の前記データソースが、前記第１のブロックチェーンの前記次のブロックに入力された前記シーケンシャルデータの前記第１の部分の前記データソースと一致すると判定することに少なくとも部分的に基づいて、前記第１のブロックチェーンについて生成された前記ブロックの第１のエントリとして前記シーケンシャルデータの前記第１の部分を使用するステップであって、前記シーケンシャルデータの前記第１の部分は、前記第２のブロックチェーンの前記ブロックに入力された前記シーケンシャルデータの前記最後の部分の直後にシーケンスに続く、ステップと、
をさらに含む、請求項９に記載の方法。
【請求項１４】
前記１つまたは複数のプロセッサによって、前記第１のブロックチェーンの前記ブロックを生成するための第１のスレッドを実行するステップと、
前記１つまたは複数のプロセッサによって、前記第２のブロックチェーンの前記ブロックを生成するための第２のスレッドを実行するステップと、
前記１つまたは複数のプロセッサが前記第２のブロックチェーンの前記ブロックを生成するための前記第２のスレッドを実行している間に、前記第１のブロックチェーンについて前記ブロックのコンセンサスを決定するために、前記１つまたは複数の第２のコンピューティングノードに１つまたは複数の通信を、前記１つまたは複数のプロセッサによって、送信するステップと、
前記コンセンサスを決定すると、前記１つまたは複数のプロセッサによって、前記第１のブロックチェーンの前記ブロックを前記第１のブロックチェーンに記録するステップと、
をさらに含む、請求項９に記載の方法。
【請求項１５】
前記第１のコンピューティングノードまたは前記１つまたは複数の第２のコンピューティングノードのうちの少なくとも１つによって、他のコンピューティングデバイスから前記第１のブロックチェーンおよび前記第２のブロックチェーンにアクセスする要求を受信するステップと、
前記他のコンピューティングデバイスに、前記第１のブロックチェーンおよび前記第２のブロックチェーンの複数のブロックを送信するステップと、をさらに含み、前記他のコンピューティングデバイスは、前記第１のブロックチェーンおよび前記第２のブロックチェーンに格納された前記シーケンシャルデータを、前記シーケンシャルデータをシーケンシャルな順序でリストするためのブロックリストにシリアル化するように構成され、前記シリアル化は、
前記第１のブロックチェーンおよび前記第２のブロックチェーンの前記複数のブロックを読み出すステップと、
前記第１のブロックチェーンの前記ブロックを示す前記第２のブロックチェーンについて生成された前記ブロックの前記インジケータに少なくとも部分的に基づいて、前記シーケンシャルデータを前記ブロックリストのどこに挿入するかを決定するステップと、
によって行われる、
請求項９に記載の方法。
【請求項１６】
命令を格納する１つまたは複数の非一時的なコンピュータ可読媒体であって、コンセンサスシステムに参加するための１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードの１つまたは複数のプロセッサによって実行された場合に、前記１つまたは複数のプロセッサを、
複数のデータソースからシーケンシャルデータの複数の部分を受信し、
第１のブロックチェーンの第１のブロックを生成するために第１のスレッドを実行し、前記第１のブロックは前記シーケンシャルデータの第１の複数の部分を含み、
第２のブロックチェーンの第２のブロックを生成するために第２のスレッドを実行し、前記第２のブロックは、前記第１の複数の部分にシーケンシャルに続く前記シーケンシャルデータの第２の複数の部分を含み、
前記１つまたは複数のプロセッサが前記第２のブロックチェーンの前記第２のブロックを生成するために前記第２のスレッドを実行している間に、前記第１のブロックチェーンの前記第１のブロックのコンセンサスを決定するために、前記１つまたは複数の第２のコンピューティングノードに１つまたは複数の通信を送信する
ように構成する、１つまたは複数の非一時的なコンピュータ可読媒体。
【請求項１７】
前記プロセッサは、
前記第１のブロックチェーンの前記第１のブロックに入力されたシーケンシャルデータの最後の部分に関連するソース識別子が、前記第２のブロックチェーンの前記第２のブロックに入力されたシーケンシャルデータの第１の部分に関連するソース識別子と一致するかどうかを判定し、
前記第１のブロックチェーンの前記第１のブロックに入力された前記シーケンシャルデータの前記最後の部分の前記ソース識別子が、前記第２のブロックチェーンの前記第２のブロックに入力された前記シーケンシャルデータの前記第１の部分に関連する前記ソース識別子と異なると判定することに基づいて、前記第２のブロックチェーンについて生成された前記第２のブロックにインジケータを関連付け、前記インジケータは、前記第１のブロックチェーンの前記第１のブロックを示す
ようにさらに構成される、請求項１６に記載の１つまたは複数の非一時的なコンピュータ可読媒体。
【請求項１８】
前記プロセッサは、前記第１のブロックチェーンの前記第１のブロックに入力された前記シーケンシャルデータの前記最後の部分の少なくとも一部を、前記第２のブロックチェーンについて生成された前記第２のブロックの第１のエントリとして複製することによって、前記インジケータを前記第２のブロックチェーンについて生成された前記第２のブロックと関連付けるようにさらに構成される、請求項１７に記載の１つまたは複数の非一時的なコンピュータ可読媒体。
【請求項１９】
前記プロセッサは、前記第２のブロックチェーンについて生成された前記第２のブロック内に、前記第１のブロックチェーンの識別子と、前記第１のブロックチェーンの前記第１のブロックのブロック高さと、を含むことによって、前記インジケータを前記第２のブロックチェーンについて生成された前記第２のブロックに関連付けるようにさらに構成される、請求項１７に記載の１つまたは複数の非一時的なコンピュータ可読媒体。
【請求項２０】
前記プロセッサは、
第３のブロックチェーンの第３のブロックを生成するために第３のスレッドを実行し、前記第３のブロックは、前記第２の複数の部分にシーケンシャルに続く前記シーケンシャルデータの第３の複数の部分を含み、
前記１つまたは複数のプロセッサが前記第３のブロックチェーンの前記第３のブロックを生成するために前記第３のスレッドを実行している間に、前記第１のブロックチェーンの前記第１のブロックおよび前記第２のブロックチェーンの前記第２のブロックの少なくとも一方のコンセンサスを決定するために、前記１つまたは複数の第２のコンピューティングノードに１つまたは複数の通信を送信する
ようにさらに構成される、請求項１６に記載の１つまたは複数の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
ブロックチェーンは、ブロックと呼ばれるレコードの連続的に増加する系列（すなわちチェーン）を保持する分散データベースの１タイプである。各ブロックには、タイムスタンプと前のブロックへのリンクが含まれる。ブロックは、トランザクションまたは他のタイプの情報を格納することができる。ブロックの検証プロセスはかなり簡単に実行でき、それによって不正なトランザクションの可能性が低減される。ブロックチェーンは、ネットワーク上の複数の場所に分散されたデータを格納することにより、データが集中的に保持されることによるリスクを軽減または除去する。
【０００２】
さらに、ブロックチェーン技術は、チェーンの任意の単一のブロックを遡及的に変更することを非常に困難にする可能性がある。例えば、データベースは、分散される（すなわち、複数の異なるコンピュータ上に同時に格納される）ので、分散データベース内の任意の１つのコンピュータにアクセスするすべてのユーザに、ブロックチェーンへの新たな追加を直ちに通知することができる。
【０００３】
場合によっては、シーケンスに受信したデータをブロックチェーンを使用して記録することができる。さらに、シーケンスの順序を後で検証する必要がある場合には、シーケンスの順序が正確に記録されることが望ましい場合がある。従来のブロックチェーンコンセンサスシステムでは、データが頻繁に受信されるとバックログまたは他の問題が発生するおそれがあるブロックチェーン内のデータの記録を遅延させる可能性のあるシステムレイテンシが存在する場合がある。
【発明の概要】
【０００４】
本明細書におけるいくつかの例は、コンセンサスシステムに参加する複数のコンセンサスノードとして構成された複数のコンピューティングノードを含む。一例として、コンセンサスシステムに参加するための１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードは、複数のデータソースからのシーケンシャルデータの複数の部分を受信することができる。第１のノードは、第１のブロックチェーンのブロックがシーケンシャルデータの複数の部分を含むように、第１のブロックチェーンのブロックを生成することができる。第１のノードは、第１のブロックチェーンのブロックに入力されたシーケンシャルデータの最後の部分のデータソースがシーケンシャルデータの次の部分のデータソースと一致するかどうかを判定することができる。第１のブロックチェーンのブロックに入力されたシーケンシャルデータの最後の部分のデータソースがシーケンシャルデータの次の部分のデータソースと異なると判定することに少なくとも部分的に基づいて、第１のノードは、シーケンシャルデータの次の部分を含む第２のブロックチェーンのブロックを生成することができる。さらに、第１のノードは、第１のブロックチェーンのブロックを示す第２のブロックチェーンについて生成されたブロックにインジケータを関連付けることができる。
【０００５】
詳細な説明は、添付図面を参照して記載されている。図面では、符号の最も左の桁は、その符号が最初に現れる図面を特定する。異なる図面における同じ符号の使用は、類似または同一の項目または特徴を示す。
【図面の簡単な説明】
【０００６】
【図１】いくつかの実施態様によるデータのブロックチェーンロギングのためのシステムの例示的なアーキテクチャを示す図である。
【図２】いくつかの実施態様によるコンセンサスノードの一例を示す図である。
【図３】いくつかの実施態様による例示的なブロックチェーンデータ構造を示す図である。
【図４】いくつかの実施態様によるシーケンシャルデータ記憶装置の例示的なデータ構造を示す図である。
【図５】いくつかの実施態様によるブロックチェーンのブロックの例示的な単純化された構造を示す図である。
【図６】いくつかの実施態様によるリーダーコンセンサスノードによって実行される例示的プロセスを示す流れ図である。
【図７】いくつかの実施態様によるリーダーノードによるスレッド実行タイミングの一例を示す図である。
【図８】いくつかの実施態様による複数のブロックチェーンの例示的な論理構成を示す図である。
【図９】いくつかの実施態様による複数のブロックチェーンの例示的な論理構成を示す図である。
【図１０】いくつかの実施態様による複数のブロックチェーンの例示的な論理構成を示す図である。
【図１１】いくつかの実施態様によるシーケンシャルデータを格納するためのブロックを生成する例示的なプロセスを示す流れ図である。
【図１２】いくつかの実施態様による、ブロックチェーンを監査し、および／または複数のブロックチェーンに保持されたシーケンシャルデータをシリアル化するための例示的なプロセスを示す流れ図である。
【図１３】いくつかの実施態様による監査コンピューティングデバイスによって出力され得るブロックリストの例示的なデータ構造を示す図である。
【図１４】いくつかの実施態様によるデータのブロックチェーンロギングのためのシステムの例示的なアーキテクチャを示す図である。
【発明を実施するための形態】
【０００７】
本明細書のいくつかの実施態様は、ブロックチェーンを使用してシーケンシャルデータを格納するための技術および構成を対象とする。いくつかの例として、シーケンシャルデータは、タイミングに関連する一連のイベント、一連のメッセージ、一連のログエントリなどを含むことができる。本明細書のいくつかの例は、複数のコンセンサスノードコンピューティングデバイス（以下、「コンセンサスノード」）を含むブロックチェーンシステムの環境に適用される。コンセンサスノードは、コンセンサスノードによって決定された時間で、またはそのいずれか１つではなく、データのソースによって示されるタイミングシーケンスに基づいてシーケンシャルデータをブロックチェーンに追加するように構成することができる。それぞれの新しいブロックが生成されると、ブロックが対応するブロックチェーンに追加される前に、そのコンセンサスノード間でブロックに関するコンセンサスが決定される。シーケンシャルデータが高速で受信されている場合には、シーケンシャルデータのバックログを回避するために、以前に生成された１つまたは複数のブロックについてコンセンサスが決定されている間に、２つ以上のブロックチェーンを同時に生成して、１つまたは複数のブロックを生成することができる。
【０００８】
いくつかの例では、異なるブロックチェーン内の異なるブロックに含まれるブロックおよび／またはデータの順序は、次のブロックの最初のデータとして最後のブロックからの最後のデータの少なくとも一部を使用することによって決定することができる。一例として、１つのブロックチェーンのブロックの最後のエントリとして入力された最後のデータの完全な複製が、別のブロックチェーンの新しいブロックのデータの最初のエントリとして使用されてもよい。別の例として、データは、最後のブロックの最後のエントリからのデータの一部のみを含めるなどして、新しいブロックに部分的に複製することのみができる。例えば、ソース識別子（ＩＤ）（例えば、ソースコンピューティングデバイスまたは他のタイプのデータのソースを示す）、および送信者によって提供されたソースローカル時間のみが複製されてもよく、データ内容およびデータの他の部分は、複製されたデータに含まれない可能性がある。この代替案は、データ内容が大きい場合に有用であり得る。さらに、他の例では、データを複製するのではなく、最後のエントリのデータを複製する代わりに、別のタイプのインジケータなどを使用することができる。例えば、インジケータは、ブロックＩＤおよびブロックチェーンＩＤ、スレッドＩＤなどの、他のブロックチェーン内の先行するブロックに関する情報を識別することを含むことができる。
【０００９】
複数のブロックチェーンを同時に生成することにより、本明細書の実施態様は、単一のブロックチェーンのみが使用される場合よりも迅速に複数のブロックチェーン上のデータシーケンスを記録することができる。例えば、本明細書のコンセンサスシステムは、コンセンサスに達するために複数のコンセンサスノード間の通信を使用する。コンセンサスノードおよび／またはコンセンサスノード自体の間のネットワークのレイテンシにより、単一のブロックチェーンの作成が遅すぎて、いくつかのタイプのアプリケーションで受信され得る大量のシーケンシャルデータを記録できないことがある。したがって、ここでの例は、受信したシーケンシャルデータを複数のブロックチェーンに記録するために、複数のブロックチェーンを同時に採用することによりコンセンサスノードのスループットを向上させることができ、それによってコンセンサスノードおよびコンセンサスシステムの動作を向上させる。例えば、複数のブロックチェーンを同時に生成することによって、受信したシーケンシャルデータを記録するために同時に生成されるブロックチェーンの数を制御することによって、シーケンシャルデータを受信するストレージバッファ内のバックログを管理あるいは制御することができる。
【００１０】
さらに、いくつかの例では、受信したデータのシーケンスを記録するときに、シーケンシャルデータのソースによって既に定義されているシーケンスを使用することができる。例えば、複数のブロックチェーンの複数のブロックのうちの次のブロックを決定するためのデータソースＩＤと共に、データソースによってデータに関連付けられたローカル時間を使用することができる。さらに、システム内のコンセンサスノードと複数のブロックチェーンとの間のコンセンサスを使用することによって、コンセンサス順序シーケンスを記録することができ、後で他のエンティティによってそれを検証することができる。
【００１１】
複数のコンセンサスおよび複数のブロックチェーンを使用することによって、本明細書の実施態様は、シーケンシャルデータの総スループットを増加させる。いくつかの例では、複数のコンセンサスを得ることは、リーダーコンセンサスノードの使用を含み、それは、受信したシーケンシャルデータの一部を使用してコンセンサスのための新しいブロックを構築または生成する。次に、リーダーコンセンサスノードは、新しいブロックに関するコンセンサスを得るために、新しいブロックまたは少なくとも新しいブロックに関する情報を他のコンセンサスノードに配信することができる。さらに、リーダーコンセンサスノードは、複数のコンセンサスプロセスにおいて順序情報を配信するか、あるいは含めることができる。後で完全なシーケンスを再構築するために、リーダーノードは、シーケンスがコンセンサスによって各ブロックに定着することを確立する。特定のブロックについてコンセンサスに到達すると、リーダーコンセンサスノードおよび他のコンセンサスノードの各々は、そのブロックを対応するブロックチェーンに記録することができる。したがって、コンセンサスノードの各々は、受信したシーケンシャルデータから複数のブロックチェーンを生成するために複数のブロックチェーンスレッドを同時に実行することができる。
【００１２】
いくつかの例では、監査コンピューティングデバイスは、１つまたは複数のコンセンサスノードと通信して、複数のブロックチェーンに含まれる情報の監査を行うための複数のブロックチェーンを取得することができる。例えば、監査コンピューティングデバイスは、１つまたは複数のコンセンサスノードによって保持されるブロックチェーンを読み取りまたはアクセスし、ブロックチェーンに含まれるデータをシリアル化することができる。例えば、監査コンピューティングデバイスは、ブロックデータをシリアル化するためのブロックリストを初期化することができる。場合によっては、ブロックリストは、ブロックデータをシリアル化された順序で格納することができる。ブロックリストを作成するために、監査コンピューティングデバイスは、各ブロックチェーン内の各ブロックからの情報をブロックリストに追加することができ、ブロックチェーン内のブロックの順序、ならびにシーケンシャルデータの各部分に関連するソースＩＤおよびローカル日時に基づいて、シーケンシャルデータのブロックリスト内の位置を確立することができる。監査コンピューティングデバイスは、監査人、ユーザ、クライアント、または他の宛先などにブロックリストおよび／またはブロックリストの解析を出力することができる。
【００１３】
議論の目的のために、いくつかの例示的な実施態様を、システムログエントリ、有価証券取引などの特定のタイプのデータに関連して使用されるブロックチェーンの環境で説明する。しかし、本明細書の実施態様は、提供される特定の例に限定されず、他のブロックチェーンアプリケーション、他のタイプのデータ、他のタイプのコンピューティングシステム、その他のシステムアーキテクチャなどに拡張することができ、それは本明細書の開示内容に照らして当業者には明らかであろう。
【００１４】
図１は、いくつかの実施態様によるデータのブロックチェーンロギングのためのシステム１００の例示的なアーキテクチャを示す。システム１００は、複数のコンセンサスノードコンピューティングデバイス１０２（１）、１０２（２）、…、１０２（Ｎ）を含み、これらは以下でコンセンサスノード１０２と呼ばれ、１つまたは複数のネットワーク１０４を介して互いに通信することができる。さらに、コンセンサスノード１０２は、１つまたは複数のネットワーク１０４を通して、１つもしくは複数の監査コンピューティングデバイス１０６、ソースコンピューティングデバイス１０８（１）、１０８（２）、１０８（３）、および／または１つもしくは複数の外部システムコンピューティングデバイス１１０と通信することができる。
【００１５】
本明細書のいくつかの例では、システム１００は、ブロックチェーン記憶装置１１３内のブロックチェーン１１２を生成し保持することができるスケーラブルな分散型ピアツーピアシステムである。したがって、ブロックチェーン１１２内に保持されるデータの完全性は、例えば単なる信頼ベースのインフラストラクチャではなく、コンセンサスメカニズムに基づいている。本明細書での例では、「コンセンサス」は、真か偽であるかに関する集合的な意思決定プロセスまたは合意を指すことができる。例えば、システム１００は、システム１００に参加する様々なコンセンサスノード１０２が合意に至ることができる、参加するコンセンサスノード１０２から構成される分散コンセンサスネットワークを提供する。場合によっては、個々のコンセンサスノード１０２がそれ自体のデータを提供して、コンセンサスネットワーク全体が合意した決定を集団的に達成できるようにすることができる。
【００１６】
システム１００は、ソースコンピューティングデバイス１０８のうちの１つまたは複数を含むことができ、そのうちの１つまたは複数は、シーケンシャルデータ１２２を生成する１つまたは複数のデータ生成プログラム１２０を含むことができる。例えば、この例では、第１のソースコンピューティングデバイス１０８（１）は、それが第１のコンセンサスノード１０２（１）に送信するシーケンシャルデータ１２２（１）を生成し、第２のソースコンピューティングデバイス１０８（２）は、それが第２のコンセンサスノード１０２（２）に送信するシーケンシャルデータ１２２（２）を生成し、第３のソースコンピューティングデバイス１０８（３）は、それが第２のコンセンサスノード１０２にも送信するシーケンシャルデータ１２２（３）を生成すると仮定する。さらに、この例では、３つのソースコンピューティングデバイス１０８が示されているが、他の例では、より多くのまたはより少ないソースコンピューティングデバイス１０８が使用されてもよい。さらに、場合によっては、ソースコンピューティングデバイスは、シーケンシャルデータ１２２をすべてのコンセンサスノード１０２またはコンセンサスノード１０２の他のものなどに送信することができる。さらに、いくつかの例では、コンセンサスノード１０２は、シーケンシャルデータ１２２を受信すると、コンセンサスシステム１００内の他のコンセンサスノード１０２とシーケンシャルデータ１２２を共有することができる。
【００１７】
システム１００は、イベント、取引、ログエントリ、メッセージ、または他のタイプのシーケンシャルデータ１２２の時間順序またはシーケンシャルな順序を、対応するシーケンシャルデータの分散データベースとして機能するブロックチェーン１１２内の連続するブロックとして記録するように構成される。その結果、シーケンシャルデータ１２２はブロックチェーン内に確実に記録され、実質的に変更不能である。システム１００内のすべてのコンセンサスノード１０２は、同じシーケンシャルデータに対して同じノードプログラム１１４および同じコンセンサスプログラム１１６を実行することができる。
【００１８】
本明細書のいくつかの例では、コンセンサスノード１０２のうちの１つが、コンセンサスシステムのリーダーコンセンサスノードとして働くことができる。この例では、コンセンサスノード１０２（１）がリーダーコンセンサスノードであると仮定する。リーダーコンセンサスノードは、ランダム選択、ラウンドロビン選択、システム管理者による指定などの任意の所望の技術を使用して選択することができる。リーダーコンセンサスノードは、受信したシーケンシャルデータ１２２の一部を使用して新しいブロックを構築するか、または生成することができる。次に、リーダーコンセンサスノードは、新しいブロックに関するコンセンサスを得るために、新しいブロックまたは少なくとも新しいブロックに関する情報を他のコンセンサスノードに配信することができる。さらに、リーダーコンセンサスノードは、複数のコンセンサスプロセスまたはスレッドに順序情報を配信するか、あるいは含めることができる。後で完全なシーケンスを再構築するために、リーダーコンセンサスノードは、各ブロックのコンセンサスによって定着されるシーケンスを確立することができる。特定のブロックについてコンセンサスに到達すると、リーダーコンセンサスノードおよび他のコンセンサスノードの各々は、そのブロックをそのブロックが対応するブロックチェーンに記録することができる。したがって、場合によっては、コンセンサスノード１０２の各々は、複数のブロックチェーン１１２の各ブロックチェーン１１２の完全なコピーを保持することができる。
【００１９】
本明細書の例では、コンセンサスは、コンセンサスノード１０２（１）〜１０２（Ｎ）のグループのうちの１つの結果に合意するプロセスを含む。実用ビザンチンフォールトトレランス（ＰＢＦＴ）、パクソスコンセンサスプロトコル、およびラフトコンセンサスアルゴリズムなど、合意を決定するいくつかの手法がある。例えば、ＰＢＦＴは、一般に、取引が有効であるという合意に達するために同一な十分な数の応答を受信することに基づいている。さらに、パクソスコンセンサスシステムでは、コーディネータがすべてのノードに値を提示し、ノードがその値に合意するか否かに関するノードの応答を収集することができる。すべてのノードが合意する場合（またはいくつかの例では十分な数が合意する場合）には、その値が受け入れられ、コーディネータはすべてのノードに連絡して、その値が最終であることを知らせる。別の例として、パクソスと同様に、ラフトアルゴリズムは選出されたリーダーを介してコンセンサスを達成する。例えば、ラフトクラスター内のサーバーは、リーダーまたはフォロワーのいずれかである。リーダーは、コンセンサスがフォロワーにデータを転送するためのデータを受け入れる。リーダーが多数のフォロワーからの合意を受信した後に、要求はコミットされたとみなされる。さらに、コンセンサスに到達するためのいくつかの例示的な技術について本明細書で説明しているが、本明細書の開示の利益を有する当業者には、他の可能な技術が明らかであろう。
【００２０】
いくつかの例では、本明細書のシステム１００の分散型ピアツーピアの性質は、単一のユーザまたはユーザグループが、基礎となるインフラストラクチャを制御すること、またはシステム１００の完全性を損なうことを防止するのに役立つ。例えば、ユーザは、個人、企業、国家主体、組織など、またはこれらのエンティティの組み合わせであってもよい。本明細書のいくつかの例では、システム１００はプライベート（すなわち、一般にパブリックにアクセスできない）であってもよく、コンセンサスノード１０２は、通常、一人または複数のユーザによって所有され、操作され、あるいは関連付けられてもよい。他の場合には、コンセンサスノード１０２の一部またはすべてが、コンセンサスシステムをサービスとして提供する第三者と関連付けられてもよい。多くの他の変形が、本明細書の開示の利益を有する当業者には明らかであろう。
【００２１】
コンセンサスノード１０２は、それぞれ、ブロックチェーン１１２のコピーを保持することができ、受信したシーケンシャルデータのシーケンスおよびブロックチェーン１１２の対応するブロックの検証に参加することができる。場合によっては、ソースコンピューティングデバイス１０８は、証券取引の実行、システム内のイベントのロギング、物のインターネット（ＩｏＴ）デバイスの管理、データの管理、銀行取引の追跡、またはその他多くのアプリケーションのいずれかなどの様々な異なるアプリケーションのためのデータ生成プログラム１２０の一部として１つまたは複数のスマートコントラクトを実行するために使用することができる。
【００２２】
外部システムコンピューティングデバイス１１０は、１つまたは複数の外部プログラム１２４を含むことができる。場合によっては、外部プログラム１２４は、コンセンサスノード１０２および／またはソースコンピューティングデバイス１０８からシーケンシャルデータ１２２を受信してもよく、シーケンシャルデータ１２２に基づいて１つまたは複数のアクションを実行してもよい。一例として、外部システムコンピューティングデバイス１１０は証券取引サーバーなどであってもよく、シーケンシャルデータは証券の複数の売買注文であってもよい。証券取引では、証券取引サーバーは、証券取引サーバーが受信した注文のシーケンスで取引を実行することができる。例えば、ソースコンピューティングデバイス１０８は、証券会社、投資銀行などによって制御されてもよい。会社は、証券会社の顧客または自社の内部トレーダーのコンピューティングデバイスから証券取引の注文を受け取ることができる。これに応答して、ソースコンピューティングデバイス１０８は、１つまたは複数のコンセンサスノード１０２に注文を送信することができる。いくつかの例では、コンセンサスノードは、証券取引サーバー（この例では外部システムコンピューティングデバイス１１０）に注文を転送することができ、他の例では、ソースコンピューティングデバイス１０８は、注文をコンセンサスノードおよび証券取引サーバーの両方に同時に注文を転送することができる。
【００２３】
証券取引サーバーは、後に検証するために注文のシーケンスを記録するためのそれ自体のシステム（図示せず）を有することができる。しかし、証券取引サーバーでのみ注文が記録されている場合には、証券取引サーバーの不具合や詐欺行為をチェックするのが難しい場合がある。一方、本明細書に記載されているように、ブロックチェーンを使用し、コンセンサスノード間でコンセンサスに達することによって、同意された注文シーケンスを記録し、他のエンティティによって検証することができる。あるいは、他の例では、証券取引サーバーは、受け取った買い注文／売り注文を記録するためにコンセンサスシステム１００を使用することができる。
【００２４】
別の例として、外部システムコンピューティングデバイス１１０は、１つまたは複数の銀行サーバーであってもよく、シーケンシャルデータ１２２は、複数の場所からの銀行取引であってもよい。さらに別の例として、外部システムコンピューティングデバイス１１０は管理コンピュータであってもよく、シーケンシャルデータ１２２は複数のサブシステムからのログのシーケンスを含んでもよい。さらに他の例では、外部システムコンピューティングデバイス１１０は含まれない。多くの他の用途および変形が、本明細書の開示の利益を有する当業者には明らかであろう。
【００２５】
さらに、監査コンピューティングデバイス１０６は、監査プログラム１２６を実行することができる。例えば、監査プログラム１２６は、定期的に、ユーザまたは監査人１２８の要求または指示で、あるいは何らかの他のトリガに基づいて実行されてもよい。監査プログラム１２６は、１つまたは複数のコンセンサスノード１０２によって保持されているブロックチェーン１１２を読み取るかまたはアクセスするように監査コンピューティングデバイス１０６を構成することができ、ブロックチェーンに含まれるデータをシリアル化することができる。例えば、監査プログラム１２６は、ブロックデータをシリアル化するためのブロックリスト（図１には示さず）を初期化することができる。場合によっては、ブロックリストは、ブロックデータをシリアル化された順序で格納することができる。ブロックリストを作成するために、監査プログラム１２６は、各ブロックチェーン１１２内の各ブロックからの情報をブロックリストに追加することができ、ブロックチェーン１１２内のブロックの順序、ならびにシーケンシャルデータ１２２の各部分に関連するソースＩＤおよびローカル日時に基づいて、シーケンシャルデータ１２２のブロックリスト内の位置を確立することができる。監査プログラム１２６は、監査人１２８および／またはユーザ、クライアント、または他の宛先などにブロックリストおよび／またはブロックリストの解析を出力することができる。さらに、監査コンピューティングデバイス１０６はこの例では別個のコンピューティングデバイスとして示されているが、他の例では、監査コンピューティングデバイス１０６をコンセンサスノード１０２と組み合わせて、コンセンサスノード１０２の１つまたは複数が監査コンピューティングデバイス１０６の機能を提供することができる。
【００２６】
図２は、いくつかの実施態様によるコンセンサスノード１０２の一例を示す。場合によっては、コンセンサスノード１０２は、複数の物理サーバー、またはいくつかの方法のいずれかで具体化することができる他のタイプのコンピューティングデバイスを含むことができる。例えば、サーバーの場合では、モジュール、プログラム、他の機能コンポーネント、およびデータ記憶装置の一部は、例えば１つまたは複数のサーバーファームまたはデータセンター、クラウドホストコンピューティングサービスなどのサーバーに実装することができるが、他のコンピュータアーキテクチャをそれに加えてまたはその代わりに使用してもよい。
【００２７】
図示する例では、コンセンサスノード１０２は、１つまたは複数のプロセッサ２０２、１つまたは複数の通信インターフェース２０４、１つまたは複数のコンピュータ可読媒体２０６、ならびに１つまたは複数の入力／出力（Ｉ／Ｏ）デバイス２０８を含むか、あるいはそれらと関連付けてあってもよい。例えば、コンピュータ可読媒体は、ローカル記憶装置２１０およびメモリ２１２を含むことができる。さらに、１つのコンセンサスノード１０２の説明が提供されているが、他のコンセンサスノード１０２は、同じまたは類似のハードウェアおよびソフトウェア構成ならびにコンポーネントを有することができる。さらに、監査コンピューティングデバイス１０６、ソースコンピューティングデバイス１０８、および外部システムコンピューティングデバイス１１０は、異なるプログラム、ソフトウェア、および他の機能コンポーネントを有する同様のハードウェア構成を有することができる。
【００２８】
各プロセッサ２０２は、単一の処理ユニットまたはいくつかの処理ユニットであってもよいし、単一または複数の計算ユニットまたは複数の処理コアを含んでもよい。プロセッサ２０２は、１つまたは複数の中央処理装置、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシン、論理回路、グラフィックプロセッサ、および／または動作命令に基づいて信号を操作する任意のデバイスとして実現することができる。例えば、プロセッサ２０２は、本明細書で説明するアルゴリズムおよびプロセスを実行するように特にプログラムまたは構成された任意の適切なタイプの１つまたは複数のハードウェアプロセッサおよび／または論理回路であってもよい。プロセッサ２０２は、本明細書に記載の機能を実行するようにプロセッサ２０２をプログラムする、コンピュータ可読媒体２０６に格納されたコンピュータ可読命令をフェッチして実行するように構成することができる。
【００２９】
コンピュータ可読媒体２０６は、コンピュータ可読命令、データ構造、プログラムコード、または他のデータなどの情報を格納するための任意のタイプの技術で実現される揮発性メモリおよび不揮発性メモリならびに／あるいは取り外し可能な媒体および取り外し不能な媒体を含むことができる。例えば、コンピュータ可読媒体２０６は、限定はしないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、光学記憶装置、ソリッドステート記憶装置、磁気テープ、磁気ディスク記憶装置、ＲＡＩＤ記憶システム、ストレージアレイ、ネットワーク接続ストレージ、ストレージエリアネットワーク、クラウドストレージ、または所望の情報を格納するために使用することができ、コンピューティングデバイスによってアクセスすることができる任意の他の媒体を含むことができる。コンセンサスノード１０２の構成に応じて、コンピュータ可読媒体２０６は、言及すると、非一時的なコンピュータ可読媒体が、エネルギー、搬送波信号、電磁波、および／または信号それ自体などの媒体を除外する程度の、有形の非一時的な媒体であってもよい。場合によっては、コンピュータ可読媒体２０６はコンセンサスノード１０２と同じ場所にあってもよく、他の例では、コンピュータ可読媒体２０６はコンセンサスノード１０２とは別個であっても、または部分的に離れていてもよい。
【００３０】
コンピュータ可読媒体２０６は、プロセッサ２０２によって実行可能な任意の数の機能コンポーネントを格納するために使用されてもよい。多くの実施形態では、これらの機能コンポーネントは、プロセッサ２０２によって実行可能であり、実行されると、ここでコンセンサスノード１０２に帰属するアクションを実行するようにプロセッサ２０２を具体的にプログラムする命令、モジュール、またはプログラムを含む。コンピュータ可読媒体２０６に格納された機能コンポーネントは、ノードプログラム１１４およびコンセンサスプログラム１１６を含むことができる。いくつかの例では、ノードプログラム１１４は、リーダーノードプログラム２１６を含むことができる。上述したように、場合によっては、コンセンサスノードのうちの１つがリーダーコンセンサスノードとして機能し、他のコンセンサスノードはフォロワーコンセンサスノードであってもよい。したがって、リーダーコンセンサスノードは、リーダーノードプログラム２１６を実行することができ、リーダーノードプログラム２１６は、シーケンシャルデータ受信器２１８、ブロック生成器２２０、およびシーケンシャルデータ転送器２２２を含むことができ、これらの各々は、本明細書に記載の機能を実行するためにプロセッサ２０２によって実行可能な実行可能命令であってもよい。
【００３１】
例えば、シーケンシャルデータ受信器２１８は、ソースコンピューティングデバイス１０８および／または他のコンセンサスノードからシーケンシャルデータ１２２を受信し、受信したシーケンシャルデータ１２２をシーケンシャルデータ記憶装置２２４に格納するようにプロセッサ２０２を構成することができる。例えば、シーケンシャルデータ記憶装置２２４は、シーケンシャルデータ１２２がブロックチェーン１１２に記録されるまで格納されるファーストインファーストアウト（ＦＩＦＯ）キューとして構成されるような記憶バッファなどであってもよい。さらに、ブロック生成器１１８は、以下にさらに説明するように、リーダーノードプログラム２１６によって使用されて、ブロックチェーンの新しいブロックを生成することができる。さらに、シーケンシャルデータ転送器２２２は、シーケンシャルデータ１２２を、外部システムコンピューティングデバイス１１０などの別のデバイスに送信することができる。例えば、シーケンシャルデータを最初にコンセンサスシステムに送信して、シーケンシャルデータが記録されることを確実にすることができ、次にコンセンサスシステムが外部システムコンピューティングデバイス１１０にシーケンシャルデータを送信することができる。具体的な一例として、外部システムコンピューティングデバイス１１０が証券取引サーバーである場合には、ソースコンピューティングデバイス１０８によって生成された複数の売買注文は、ブロックチェーン１１２に記録するために、最初にコンセンサスノード１０２の１つまたは複数に送信され、次に証券取引サーバーに転送されてもよい。さらに、いくつかの例では、シーケンシャルデータ１２２がブロックチェーン１１２の１つに記録されるまで待つのではなく、すぐに外部システムコンピューティングデバイス１１０に転送されてもよい。
【００３２】
さらなる機能コンポーネントは、ブロックチェーンプログラム２２６およびオペレーティングシステム（ＯＳ）２１４を含む。例えば、ブロックチェーンプログラム２２６は、ブロックチェーン記憶装置１１３に格納されたブロックチェーン１１２を記録および／または読み取るようにプロセッサ２０２を構成するために実行されてもよい。さらに、オペレーティングシステム２１４は、コンセンサスノード１０２の様々な機能を制御および管理することができる。
【００３３】
機能コンポーネントの各々は、１つまたは複数のコンピュータプログラム、アプリケーション、実行可能コード、プロセッサ実行可能命令、またはこれらの一部を含むことができる。これらの機能コンポーネントのいずれも、他の任意のコンポーネントと組み合わせることができ、またはそこから分離することができる。例えば、この例では、リーダーノードプログラム２１６、シーケンシャルデータ受信器２１８、ブロック生成器２２０、およびシーケンシャルデータ転送器２２２がノードプログラム１１４の一部として示されているが、他の例では、これらのプログラムは別個でもよいし、それぞれが複数の別個のプログラムを含んでもよいし、単一のプログラムに組み合わされるなどしてもよい。場合によっては、機能コンポーネントは、コンピュータ可読媒体２０６のローカル記憶装置２１０に格納され、コンピュータ可読媒体２０６のメモリ２１２にロードされ、１つまたは複数のプロセッサ２０２によって実行されてもよい。多数の他のソフトウェアおよび／またはハードウェア構成が、本明細書の開示の利益を有する当業者には明らかであろう。
【００３４】
さらに、コンピュータ可読媒体２０６は、本明細書で説明される機能およびサービスを実行するために使用されるデータおよびデータ構造を格納することができる。例えば、コンピュータ可読媒体２０６は、ノードプログラム１１４、コンセンサスプログラム１１６、ブロックチェーンプログラム２２６、および／またはオペレーティングシステム２１４によって使用されるデータ、メタデータ、データ構造、および／または他の情報を格納することができる。例えば、コンセンサスノード１０２の一部またはすべては、ブロックチェーン１１２の各々の別個のコピーを保持することができる。
【００３５】
さらに、リーダーコンセンサスノードは、リーダーコンセンサスノードによって最後に作成された最も最近に生成されたブロック内のシーケンシャルデータの最後の部分（すなわち、最後のエントリ）に対応するシーケンシャルデータ２２８の最後の部分をそのメモリ２１２に保持することができる。上述のように、いくつかの例では、これは、複数の異なるブロックチェーンにわたるシーケンシャルデータを格納するブロックのシーケンシャルな順序を決定するために使用することができる。
【００３６】
さらに、各コンセンサスノード１０２は、他の機能コンポーネントおよびデータを含むかまたは保持することもでき、これらは、プログラム、ドライバなど、および機能コンポーネントによって使用または生成された他のデータを含むことができる。さらに、コンセンサスノード１０２は、多くの他の論理的、プログラム的および物理的コンポーネントを含むことができ、そのうちの上記のものは、本明細書の説明に関連する単なる例にすぎない。
【００３７】
通信インターフェース２０４は、ネットワーク１０４などの様々な他の装置との通信を可能にするための１つまたは複数のインターフェースおよびハードウェアコンポーネントを含むことができる。したがって、通信インターフェース２０４は、他のコンセンサスノード１０２、ソースコンピューティングデバイス１０８、監査コンピューティングデバイス１０６、および外部システムコンピューティングデバイス１１０と通信するためにネットワーク１０４への接続を提供する１つまたは複数のポートを含むことができ、あるいはそれらに接続することができる。例えば、通信インターフェース２０４は、本明細書の他の箇所でさらに列挙されているように、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、インターネット、ケーブルネットワーク、セルラーネットワーク、無線ネットワーク（例えば、Ｗｉ−Ｆｉ（登録商標））および有線ネットワーク（例えば、ファイバーチャネル、光ファイバー、イーサネット（登録商標））、直接接続、ならびにＢＬＵＥＴＯＯＴＨ（登録商標）などの近距離通信などのうちの１つまたは複数を介して通信することができる。
【００３８】
１つまたは複数のネットワーク１０４は、インターネットなどのワイドエリアネットワーク、イントラネットなどのローカルエリアネットワーク、セルラーネットワークなどの無線ネットワーク、Ｗｉ−Ｆｉ（登録商標）などのローカル無線ネットワーク、ＢＬＵＥＴＯＯＴＨ（登録商標）などの短距離無線通信、ファイバーチャネル、光ファイバー、イーサネット（登録商標）、もしくは他のこのようなネットワークを含む有線ネットワーク、直接有線接続、またはこれらの任意の組み合わせを含む、任意の適切な通信技術を含むことができる。したがって、ネットワーク１０４は、有線通信技術および／または無線通信技術を含むことができる。そのようなネットワークを介して通信するために使用されるプロトコルは、当該技術分野において周知であり、本開示において詳細に説明しない。
【００３９】
Ｉ／Ｏデバイス２０８は、ディスプレイ、様々なユーザインターフェース制御（例えば、マウス、キーボード、タッチスクリーンなど）、オーディオスピーカ、接続ポートなどを含むことができる。多数の他のハードウェアおよびソフトウェア構成が、本明細書の開示の利益を有する当業者には明らかであろう。したがって、本明細書で開示される実施例の範囲は、ハードウェア、ソフトウェア、またはこれらの組み合わせの特定のセットに限定されない。
【００４０】
図３は、いくつかの実施態様による例示的なブロックチェーンデータ構造３００を示す。この例では、図３のブロックチェーン１１２の第５、第６、および第７のブロックが示されている。すなわち、ブロック３０２は第５のブロックであり、ブロック３０４は第６のブロックであり、ブロック３０６はブロックチェーン１１２の第７のブロックである。さらに、ブロックチェーン１１２は、図３には示していない他のブロックを含む。
【００４１】
ブロックチェーン内のブロックの主識別子は、そのブロックヘッダハッシュ３０８である。ブロックヘッダハッシュ３０８は、通常、例えばＳＨＡ２５６アルゴリズム、ＳＨＡ−２アルゴリズムなどを使用してブロックヘッダ３１０を２回ハッシュすることによって作成されるデジタルフィンガープリントであるが、他の技術および／またはアルゴリズムを使用することもできる。結果として得られたブロックヘッダハッシュ３０８は、対応するブロックのヘッダを一意的に表す３２バイトのハッシュ値である。ブロックヘッダハッシュ３０８は、特定のブロックのブロックヘッダ３１０を単純にハッシュすることによって、任意のコンセンサスノードまたはユーザによって独立して導出することができる。
【００４２】
通常、ブロックヘッダハッシュ３０８は、ブロックがブロックチェーンの一部として格納されているときは、ブロックデータ構造内に含まれない。むしろ、ブロックヘッダハッシュ３０８は、例えば、ブロックがノード上で生成されるか、または別のノードから受信されるときに、ノードによって計算されてもよい。一例として、ブロックチェーンを保持する各ノードは、各ブロックチェーン１１２内のすべてのブロックに対するブロックヘッダハッシュ３０８、ならびにブロックチェーン１１２の他のメタデータを含む対応するメタデータデータ構造（図３には示さず）を保持することができる。
【００４３】
さらに、ブロックチェーン内のブロックは、ブロックチェーン内のブロックのシーケンシャルな位置であるブロック高さ３１２によって識別することができる。例えば、ブロックチェーン内の最初のブロック（すなわち、「起源」ブロック）は、ブロック高さがゼロであってもよい。新しいブロックがブロックチェーン１１２に追加されると、新しいブロックは、増加する正の整数を使用してシーケンシャルに番号が付けられる。前のブロックに追加された後続の各ブロックは、ブロックチェーン内の１つ高い位置にある。また、ブロック高さ３１２は、通常、ブロックのデータ構造の一部ではない、すなわち、ブロック自体内に格納されていない。むしろ、各コンセンサスノード１０２または他のコンピューティングデバイスは、ブロックチェーン１１２内の各ブロックの位置（ブロック高さ３１２）を動的に識別することができる。あるいは、場合によっては、ブロック高さ情報は、コンセンサスノードによってメタデータとして格納されてもよい。したがって、図示する例では、ブロック３０２はブロック高さ値＝４を有し、ブロック３０４はブロック高さ値＝５を有し、ブロック３０６はブロック高さ値＝６を有する。ブロックヘッダ３１０に加えて、各ブロックはブロック本体３１４を含み、ブロック本体３１４は、シーケンシャルデータ１２２またはブロックによって格納される他の内容または情報を含むことができる。
【００４４】
各ブロックのブロックヘッダ３１０は、前のブロックの前のブロックヘッダハッシュ３１６を含む。例えば、ブロック３０４は、ブロック３０２のブロックヘッダハッシュである前のブロックヘッダハッシュ３１６を含み、ブロック３０６は、ブロック３０４のブロックヘッダハッシュである前のブロックヘッダハッシュ３１６を含む。結果として、ブロックチェーン１１２内のブロックの順序は、各ブロックの前のブロックヘッダハッシュ３１６を、各ブロックについて計算されたブロックヘッダハッシュ３０８と比較することによって決定することができる。
【００４５】
さらに、ブロックヘッダ３１０は、ブロック本体ハッシュ３１８およびこのブロックが作成された時刻に対応するタイムスタンプ３２０、ならびにこの例には示されていない他の可能な情報を含むことができる。場合によっては、ブロック本体ハッシュ３１８は、ブロックチェーン１１２が多数の取引を格納するために使用される場合など、Ｍｅｒｋｌｅツリーとして計算されてもよい。しかし、他の場合には、上述したＳＨＡ２５６ハッシュアルゴリズムを使用するなどして、ブロック本体３１４をハッシュするために他の技術を使用することができる。いずれの場合でも、ブロック本体３１４のハッシュ３１８がブロックヘッダ３１０に含まれ、ブロックヘッダ３１０のブロックヘッダハッシュ３０８がブロックを識別するために使用されるので、ブロックヘッダハッシュ３０８の値を変更することなくブロック本体３１４のデータを変更することができず、それによりブロックの識別子を変更し、ブロック内容が変更されたという証拠を提供する。
【００４６】
さらに、この例では、各ブロック３０２、３０４、３０６は、それに関連するスレッド識別子（ＩＤ）３２２を含む。いくつかの例では、スレッドＩＤ３２２は、ブロックチェーンＩＤとして機能するか、またはブロックチェーンＩＤに対応することができる。例えば、以下にさらに説明するように、第１のスレッドを実行して第１のブロックチェーンを生成し、第２のスレッドを実行して第２のブロックチェーンを生成する、などができる。したがって、いくつかの例では、同じブロックチェーン１１２内のすべてのブロックが同じスレッドＩＤ３２２を有することができる。この例では、スレッドＩＤ３２２は、ブロックヘッダハッシュ３０８などのような各ブロックチェーンに関連する別個のメタデータ内に保持されてもよい。あるいは、別の例として、スレッド識別子３２２を各ブロックのブロックヘッダ３１０に組み込むことができる。さらに、コンセンサスシステム内の対応するブロックチェーンを一意的に識別するか、あるいは個別に区別するために、スレッドＩＤ３２２に加えて、またはその代わりに、他の任意のタイプのブロックチェーン識別子を使用してもよい。
【００４７】
図４は、いくつかの実施態様によるシーケンシャルデータ記憶装置の例示的なデータ構造４００を示す。データ構造４００は、リーダーコンセンサスノードがシーケンシャルデータ１２２を受信したときに少なくともリーダーコンセンサスノードによって保持されてもよい。例えば、シーケンシャルデータ記憶装置２２４は、図１に関して上述したソースコンピューティングデバイス１０８から受信したメッセージおよびローカル時間情報を格納する。この例では、ソースＩＤ  Ａ〜Ｄを有する４つの個別のソースがある。各ソースはそれ自体のクロックを有することができるので、ソース時間は互いに同期されてもされなくてもよい。この例では、ソースクロックは互いに同期していない。しかし、各ソースからのメッセージのローカル時間は、そのソースのクロックに従って経時的である。上述したように、場合によってはデータ構造４００はＦＩＦＯキューであってもよく、シーケンシャルデータは、ブロックチェーンに記録された後にデータ構造４００から削除されてもよい。
【００４８】
データ構造４００はメッセージＩＤカラム４０２を含み、メッセージＩＤカラム４０２は、リーダーコンセンサスノードがソースコンピューティングデバイスから直接に、または別のコンセンサスノードからメッセージを受信したときに、リーダーコンセンサスノードによって受信した各メッセージに割り当てられた一意的な、または個別に識別可能なＩＤを示す。
【００４９】
さらに、データ構造４００は、ソースＩＤカラム４０４を含み、ソースＩＤカラム４０４は、コンセンサスシステムにメッセージを送信するソースコンピューティングデバイスの識別子を示す。各メッセージソースは、カラム４０４内の対応するソースＩＤに基づいて区別することができる。
【００５０】
データ構造４００のカラム４０６は、リーダー時間を含み、それは受信したシーケンシャルデータの各部分に対してリーダーコンセンサスノードによって適用されるタイムスタンプまたは他の時間情報であり、リーダーコンセンサスノードがシーケンシャルデータの部分を受信した日時を示す。この例では、リーダーコンセンサスノードは、カラム４０６で示されたリーダー時間に基づいて、すなわちメッセージがリーダーコンセンサスノードによって経時的に受信されるときに、受信したメッセージをデータ構造４００に配置する。
【００５１】
データ構造４００のカラム４０８は、ソースローカル時間を含み、これはシーケンシャルデータに関連する時間である。例えば、ソースローカル時間は、シーケンシャルがコンセンサスシステムに送信されたときに、ソースコンピューティングデバイスによってシーケンシャルデータに加えられた時間および日付であってもよい。したがって、ソースローカル時間４０８は、ソースコンピューティングデバイスから受信したメッセージに記録することができ、個々のメッセージがソースコンピューティングデバイスによって送信される時間などに対応することができる。リーダー時間４０６とは異なり、ソースローカル時間４０８は、リーダーコンセンサスノードがメッセージを受信した経時的順序で配列されていなくてもよい。例えば、各異なるソースコンピューティングデバイスは異なるクロックを有し、これらのクロックは互いに同期されなくてもよいので、メッセージは、経時的順序ではないソースローカル時間で受信されてもよい。
【００５２】
データ構造４００のカラム４１０は、シーケンシャルデータのデータ内容を含む。カラム４１０内のデータ内容は、ソースコンピューティングデバイスからのメッセージまたは他の電子通信に含まれてもよい。この例では、この内容は証券取引に関連し、買い注文または売り注文であってもよい。他のアプリケーションでは、例えば、ログエントリ、イベントの説明、取引情報などの、他のタイプのデータ内容をデータ構造４００に含めることができる。したがって、内容データは、取引注文などに限定されず、任意のタイプのシーケンシャルデータ内容であってもよい。
【００５３】
図５は、いくつかの実施態様によるブロックチェーンのブロック５００の例示的な単純化された構造を示す。例えば、図８〜図１０の例における説明を分かり易くするために、説明に関連するブロックの一部のみが示されている。図５の例では、ブロックチェーンのブロック５００は、符号５０２に示すように、図３に関して上述したように、ブロック５００に関連するスレッドＩＤおよびブロック高さ（ＢＨ）を含む。さらに、ブロック５００は、図３に関して上述したように、ブロックのブロック本体に格納されたシーケンシャルデータ５０４を含む。この例では、ブロック本体は、シーケンシャルデータの５つのエントリ、すなわちリーダーコンセンサスノードによって受信したシーケンシャルデータの５つのメッセージまたは５つの部分を含む。しかし、他の例では、例えば、シーケンシャルデータの各部分の内容データのサイズ、ブロックチェーン内の各ブロックの所望のサイズ、コンセンサスを決定するためのネットワークレイテンシなどに応じて、シーケンシャルデータのより多くのまたはより少ないエントリをブロック本体に含めることができる。さらに、ブロック５００は、図３に関して上述したように、ブロックチェーン内の直前のブロックを識別する、前のブロックヘッダハッシュ３１６を含む。
【００５４】
図６、図１１、および図１２は、いくつかの実施態様による例示的なプロセスを示す流れ図である。プロセスは、動作のシーケンスを表す論理流れ図におけるブロックの集合として示され、その一部または全部は、ハードウェア、ソフトウェア、またはそれらの組み合わせで実現されてもよい。ソフトウェアの文脈では、ブロックは、１つまたは複数のプロセッサによって実行されると、列挙された動作を実行するようにプロセッサをプログラムする、１つまたは複数のコンピュータ可読媒体に格納されたコンピュータ実行可能命令を表すことができる。一般に、コンピュータ実行可能命令は、特定の機能を実行する、または特定のデータ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。ブロックが記述されている順序は、限定として解釈するべきではない。記述されたブロックの任意の数は、プロセスまたは代替プロセスを実施するために任意の順序でおよび／または並列に組み合わせることができ、すべてのブロックを実行する必要はない。説明の目的のために、プロセスは、本明細書の例に記載された環境、フレームワーク、およびシステムを参照して説明されるが、プロセスは、多種多様な他の環境、フレームワークおよびシステムで実施されてもよい。
【００５５】
図６は、いくつかの実施態様によるリーダーコンセンサスノードによって実行される例示的なプロセス６００を示す流れ図である。プロセス６００は、コンセンサスシステムにおいてリーダーコンセンサスノード１０２または他の適切なコンピューティングデバイスによって実行されてもよい。
【００５６】
ブロック６０２では、コンセンサスシステムにおけるコンセンサスノードの１つがリーダーコンセンサスノードとして機能する。例えば、コンセンサスシステムには複数のコンセンサスノードが存在し、コンセンサスノードの１つは、コンセンサスシステムのリーダーコンセンサスノードとして機能することができる。リーダーコンセンサスノードを選択するための様々な技術は、例えば、図１に関して上述されている。リーダーノードに障害が発生した場合には、他のコンセンサスノードの１つが引き継ぎリーダーノードとしての役割を果たすことができる。さらに、コンセンサスシステムに参加している他のコンセンサスノードは、コンセンサスを形成し、各ブロックチェーンの新しいブロックにコンセンサスが達すると、それ自体のブロックチェーンを生成して格納する。
【００５７】
リーダーコンセンサスノードは、受信したシーケンシャルデータを管理するためのブロック６０４、６０６を含む第１のスレッド６０３、および受信したシーケンシャルデータからブロックチェーンを構築するためのブロック６０８〜６１２を含む複数の第２のスレッド６０７を含む複数のスレッド（すなわちプロセス）を同時に実行することができる。場合によっては、リーダーコンセンサスノードが、例えば図２に関して上述したリーダーノードプログラム２１６を開始するときに、リーダーノードプログラムは、最大数のスレッドを生成することができる。例えば、リーダーノードのメモリにスレッドの最大数が予め設定されていてもよい。非限定的な例として、スレッドの最大数は、８スレッド、１０スレッド、１２スレッドなどであってもよい。したがって、リーダーノードプログラムは、最大数のスレッドを作成することができ、その後に、必要になるまで一時的に少なくともいくつかのスレッドを中断することができる。さらに、各スレッドは、スレッドを互いに区別するために使用することができるスレッドＩＤと、ブロックチェーン記憶装置１１３に格納された他のブロックチェーンからの対応するブロックチェーンと、を有することができる。一例として、リーダーコンセンサスノードは、リーダーノードプログラムの起動中にスレッドを開始するときにスレッドＩＤをすべてのスレッドに設定することができる。例えば、スレッドＩＤは１から始まる自然数であってもよく、または他の適切なナンバリングシステムを使用してもよい。
【００５８】
さらに、リーダーコンセンサスノードのプロセッサが完全に利用されておらず、多数のシーケンシャルデータが受信されている場合、および／またはブロックチェーンに追加されるのを待っているシーケンシャルデータ記憶装置に既に存在する場合には、リーダーコンセンサスノードは、例えば、以前に中断されたスレッドを再開することによって利用されるスレッドの数を増加させることができる。例えば、コンセンサスに到達するには、コンセンサスノード間で多数の通信が必要となることがあり、そのため、コンセンサスの領域のために要する時間は、コンセンサスノード間の通信のレイテンシおよびノード自体内のレイテンシに依存する可能性がある。スレッドの数を増やすことによって、本明細書の実施態様に従って、ブロックを構築してコンセンサスを得る全体的なスループットを増加させることができる。
【００５９】
一方、リーダーコンセンサスノードのプロセッサが既に最大処理能力に近づいている場合には、またはシーケンシャルデータ記憶装置にバックログされたシーケンシャルデータの部分の数がしきい値未満である場合には、リーダーノードは、例えば、一時的に、かつそのスレッド内の次のブロックの生成を開始する前に、現在実行中の１つもしくは複数のスレッドを中断することができる。
【００６０】
ブロック６０４では、コンピューティングデバイスは、シーケンシャルデータを受信し格納することができる。例えば、上述したように、リーダーコンセンサスノードは、複数のデータソースコンピューティングデバイスから、および／またはデータソースコンピューティングデバイスからシーケンシャルデータを受信したコンセンサスシステム内の他のノードから、シーケンシャルデータを受信することができる。シーケンシャルデータを受信すると、リーダーコンセンサスノードは、シーケンシャルデータを、図４に関して上述したデータ構造４００などのシーケンシャルデータ記憶装置に格納することができる。いくつかの例では、受信したシーケンシャルデータの各部分は、シーケンシャルデータの部分に関連するデータのソースである時間情報（例えば、日付および時間）を含み、シーケンシャルデータのソースの識別子、およびデータ内容それ自体をさらに含むことができる。さらに、他の例では、シーケンシャルデータはさらなるメタデータおよび／または内容データなどを含むことができる。
【００６１】
ブロック６０６では、コンピューティングデバイスは、シーケンシャルデータを外部システムコンピューティングデバイスなどのシーケンシャルデータの宛先に転送することができる。いくつかの例では、リーダーコンセンサスノードは、さらなる処理のために、受信したシーケンシャルデータを別のコンピューティングデバイスに転送することができる。一例として、シーケンシャルデータが一連の証券取引注文などである場合は、コンセンサスシステムは、受け取った注文を記録する役目を果たし、受け取った注文を証券取引システムに転送して注文を処理することができる。しかし、他の多くの変形が可能であり、他の実施態様では、受信したシーケンシャルデータは、別のコンピューティングデバイスに転送されなくてもよい。シーケンシャルデータの受信、格納、および転送のプロセスは、シーケンシャルデータのソースによってシーケンシャルデータが送信されるときに、連続的に繰り返されてもよい。
【００６２】
ブロック６０７（１）およびブロック６０７（２）では、コンピューティングデバイスは、複数のスレッドを実行するか、または複数のスレッドに対応する複数のブロックチェーンを生成するための複数のプロセスを実行する。各スレッドはブロックチェーンを生成するときにブロック６０８〜６１２を実行することができる。さらに、この例では、２つのスレッド６０７が示されているが、同時に実行され得るスレッドの数は、それに限定されず、本明細書に記載の技術に従って３つ以上のブロックチェーンの作成を同時に含むことができる。
【００６３】
ブロック６０８では、コンピューティングデバイスは、対応するブロックチェーンのブロックを生成する。例えば、図１１に関して以下にさらに説明するように、リーダーコンセンサスノードは、例えば、図３および図５に関して上述したような構成を有するブロックなどの、受信したシーケンシャルデータからブロックチェーンのためのブロックを生成することができる。
【００６４】
ブロック６１０では、コンピューティングデバイスは、生成されたブロックについてコンセンサスを決定する。例えば、リーダーコンセンサスノードは、新しく生成されたブロック、または少なくとも生成されたブロックに関する情報を、コンセンサスシステムの他のコンセンサスノードに送信して、生成されたブロックについてコンセンサスを決定することができる。ラフトコンセンサスアルゴリズムなどのコンセンサスを決定するための技術の例は、図１に関して上述されている。
【００６５】
ブロック６１２では、コンセンサスに達した場合には、コンピューティングデバイスは、ブロックを対応するブロックチェーンに記録することができる。例えば、ブロック６０７（１）で示された第１のスレッドによって生成された第１のブロックは、第１のブロックチェーンに追加することができ、ブロック６０７（２）で示されたスレッドによって生成された第２のブロックは、対応する第２のブロックチェーンに追加することができる。さらに、上述のように、スレッドＩＤは、そのスレッドによって生成された対応するブロックチェーンに関連付けることができ、場合によっては、そのブロックチェーンのブロックチェーン識別子として後で使用することができる。
【００６６】
図７は、いくつかの実施態様によるリーダーノードによるスレッド実行タイミング７００の一例を示す。この例では、リーダーノードは、シーケンシャルデータを格納するための３つの別個のブロックチェーンを生成するために３つのスレッド６０７（１）〜６０７（３）を実行することができる。この例では、第１のスレッド６０７（１）のスレッド実行のタイミングは、第２のスレッド６０７（２）および第３のスレッド６０７（３）の実行のタイミングからオフセットされてもよく、そのようにして、リーダーコンセンサスノードのプロセッサは、第１のスレッドによって既に生成されたブロックについてコンセンサスが得られている間に、第２のスレッド６０７（２）および第３のスレッド６０７（３）でブロックを生成するために利用することができる。例えば、ブロック７０２に示すように、リーダーノードは、ＣＰＵを使用して、第１のスレッド６０７（１）内の第１のブロックを生成することができる。次に、リーダーノードは、コンセンサスシステム内の他のコンセンサスノードにメッセージを送ることによって、生成されたブロックのコンセンサス６１０を決定しようとすることができる。前に述べたように、このコンセンサス決定プロセス６１０は、ブロック７００で示すように、ネットワークおよび／またはシステムレイテンシのために比較的遅い可能性がある。したがって、第１のスレッド６０７（１）についてコンセンサス決定が進行中であるが、リーダーノードは、ブロック７０６に示すように、第２のスレッドでブロックを生成するためにＣＰＵを使用することができる。そのタスクが完了すると、リーダーノードは、ブロック７０８に示すように、第２のスレッドのブロックのコンセンサスを求めることができ、ブロック７１０に示すように、第３のスレッド６０７（３）でブロックを生成することができる。
【００６７】
その後に、第１のスレッド６０７（１）で、コンセンサスが決定されると、リーダーコンセンサスノードは、ブロック７１２に示すように、第１のスレッド６０７（１）に対応するブロックチェーンにブロックを記録することができる。次に、リーダーコンセンサスノードは、ブロック７１４に示すように、第１のスレッドにおいて次のブロックの生成を開始することができる。したがって、この例は、多数のスレッドの使用によって、リーダーコンセンサスノードの効率および大量のシーケンシャルデータをブロックチェーンに記録するためのコンセンサスシステム全体の効率を改善し得ることを示す。
【００６８】
図８は、いくつかの実施態様による複数のブロックチェーンの例示的な論理構成８００を示す。この例では、複数のブロックチェーン１１２（１）、１１２（２）、１１２（３）が生成され、ブロックチェーン記憶装置１１３に格納されている。例えば、ブロックチェーン記憶装置１１３は、コンセンサスノードのそれぞれによって保持され、ファイルシステムおよび／またはデータベース管理システムを含むことができる。したがって、ブロックチェーン記憶装置１１３は、この例に示す３つを含む複数のブロックチェーンのデータを格納することができる。
【００６９】
この例では、第１のブロックチェーン１１２（１）は、少なくともブロック８０２（１）〜８０２（３）を含み、第２のブロックチェーン１１２は、少なくともブロック８０４（１）〜８０４（３）を含み、第３のブロックチェーン１１２は、少なくともブロック８０６（１）〜８０６（３）を含む。さらに、上述のように、同じブロックチェーン１１２内の各ブロックは、５０２で示すように、同じスレッドＩＤを有してもよく、シーケンシャルデータ５０２を含むことができ、矢印８０８で示すように、前のブロックヘッダハッシュ３１６によって直前のブロックに仮想的に接続することができる。
【００７０】
図９は、いくつかの実施態様による複数のブロックチェーンの例示的な論理構成９００を示す。この例は、図８に関して上述した例に対応することができ、ブロックチェーンに格納されたシーケンシャルデータを正しいシーケンスでどのように再構成し、ブロックチェーン１１２（１）〜１１２（３）に含まれる情報に基づいて関連付けることができるかを示す。例えば、上述したように、異なるブロックチェーン１１２（１）〜１１２（３）内の異なるブロック内に含まれるブロックおよび／またはシーケンシャルデータの順序は、ブロックを生成するときに、最後のブロックからの最後のデータの少なくとも一部を次のブロックの最初のデータとして使用することに基づいて決定されてもよい。さらに、最後のブロックの最後のデータと次のブロックの最初のデータとが同じソースＩＤを有する場合には、次のブロックの最初のデータとして次のブロックの最後のデータを複製する必要はない。
【００７１】
この例では、第１のブロックチェーン１１２（１）のスレッドＩＤは「１」であり、第２のブロックチェーン１１２（２）のスレッドＩＤは「２」であり、第３のブロックチェーン１１２（３）のスレッドＩＤは「３」である。第１のブロックチェーン１１２（１）の第１のブロック８０２（１）は、割り当てられたメッセージ識別子「２１０１」〜「２１０５」によって示されるように、図４のデータ構造４００からのシーケンシャルデータの最初の５つの部分についての５つのエントリを含む。さらに、第１のブロックチェーン１１２（１）の第２のブロック８０２（２）は、メッセージ識別子「２１１６」〜「２１２０」を有するシーケンシャルデータの５つの部分についての５つのエントリを含む。したがって、第２のブロック８０２の前のブロックヘッダハッシュ３１６は、第１のブロック８０１を指し示すが、第２のブロック８０２はブロックチェーン１１２（１）に含まれるシーケンシャルデータのシーケンスの次のブロックではないことが、第２のブロック８０２（２）の第１のエントリ（「２１１６」）から明らかである。したがって、監査などのためにデータのシーケンスを再構築するとき、プロセスは、第２のブロックチェーンを参照して、シーケンシャルデータの次の部分２１０６がブロック８０４（１）にあることを決定することができる。さらに、シーケンシャルデータの次の部分２１０６は、シーケンシャルデータの前の部分２１０５と同じソース（すなわち、ソースＩＤ「Ｄ」）からのものであるので、ブロック８０４（１）の第１のエントリとして２１０５のデータを複製する必要はない。
【００７２】
一方、監査人プログラムは、ブロック８０４（２）またはブロック８０２（２）ではなく、ブロック８０６（１）のデータがブロック８０４（１）のデータに続くと判定した場合には、ソース「Ｄ」からのブロック８０４（１）の最後のデータエントリ「２１１０」は、矢印９０２で示すように、ブロック８０６（１）の第１のデータ入力として複製されることを決定することができる。この複製は、ソース「Ｂ」からの次の部分のデータ「２１１１」がソース「Ｄ」とは異なるソース、すなわち直前の部分のデータ「２１１０」のソースであるために行われる。同様に、矢印９０４、９０６、９０８、９１０で示すように、ブロックチェーンの１つのブロック内の最後の部分のデータは、最後の部分のデータに連続して続くデータを有する異なるブロックチェーン内の別のブロック内の第１の部分のデータとして複製される。一例として、１つのブロックチェーンのブロックの最後のエントリとして入力された最後のデータの完全な複製が、別のブロックチェーンの新しいブロックのデータの最初のエントリとして使用されてもよい。別の例として、データは、最後のブロックの最後のエントリからのデータの一部のみを含めるなどして、次のブロックに部分的に複製することのみができる。例えば、ソース識別子（ＩＤ）（例えば、ソースコンピューティングデバイスまたは他のタイプのデータソースを示す）、および送信者によって提供されたソースローカル時間のみが複製されてもよく、データ内容およびデータの他の部分は、複製されたデータに含まれない可能性がある。この代替案は、データ内容が大きい場合に有用であり得る。
【００７３】
さらに、データがブロック８０４（２）から８０６（２）に進むときに、データ「２１２２」および「２１２３」は両方とも同じソース、すなわちソース「Ａ」からのものであるから、ブロック８０６（２）のデータの第１の部分の最初のエントリとしてデータの最後の部分が複製されなくてもよい。同様に、データ部分「２１２７」とデータ部分「２１２８」は両方ともデータソース「Ｃ」からのものであるから、ブロック８０６（２）からブロック８０２（３）への移行はデータの複製を含まない。したがって、これらのブロック間の次のブロックを決定するためにデータを複製する必要はないので、データが複製された場合に可能であるよりも多くのデータを格納することが可能である。
【００７４】
図１０は、いくつかの実施態様による複数のブロックチェーンの例示的な論理構成１０００を示す。この例は、３つではなく２つのブロックチェーン１１２（１）、１１２（２）を含む。さらに、この例では、最後のエントリのデータを複製する代わりに、別のタイプのインジケータなどを用いてもよい。例えば、インジケータは、ブロックＩＤおよびブロックチェーンＩＤ、またはスレッドＩＤなどの、他のブロックチェーン内の先行するブロックそれ自体に関する情報を識別することを含むことができる。
【００７５】
この例では、データは、第１のブロックチェーン１１２（１）のブロック８０２（１）からブロック８０２（２）に進む。矢印１００２で示すように、次に、シーケンシャルデータが第２のブロックチェーン１１２の第１のブロック８０４に入力される。したがって、第１のブロック８０４（１）の最初のエントリは、直前のデータシーケンシャルデータを有するブロックのスレッドＩＤ（ＴＩＤ）およびブロック高さ（ＢＨ）を含む。したがって、ブロック８０４における最初のエントリは、スレッドＩＤ「１」に対応する第１のブロックチェーンにおいて、ブロック高さが「１」であるブロックに直前のデータが存在することを示すために、「ＴＩＤ：１、ＢＨ：１」とすることができる。同様に、矢印１００４で示すように、ブロック８０２（３）の最初のエントリは「ＴＩＤ：２、ＢＨ：１」であり、それは、ブロック高さが「１」である第２のブロックチェーン１１２（２）のブロック（ＴＩＤ：２に対応する）に直前のシーケンシャルデータが位置していることを示す。同様に、矢印１００６で示すように、ブロック８０４（３）の最初のエントリは「ＴＩＤ：１、ＢＨ：２」であり、それは、ブロック高さが「２」である第１のブロックチェーン１１２（１）のブロック（ＴＩＤ：１に対応する）に直前のシーケンシャルデータが位置していることを示す。
【００７６】
図１１は、いくつかの実施態様によるシーケンシャルデータを格納するためのブロックを生成する例示的なプロセス１１００を示す流れ図である。いくつかの例では、プロセス１１００の少なくとも一部は、リーダーコンセンサスノードまたは他の適切なコンピューティングデバイスによって実行されて、図６に関して上述したブロック６０８の動作を実行することができる。
【００７７】
ブロック１１０２では、コンピューティングデバイスは、次のブロックを生成するためにプロセスを開始することができる。例えば、図６に関して上述したように、各スレッド６０７について、ブロックを対応するブロックチェーンに記録した後に、スレッド６０７は、ブロック６０８で次のブロックを生成するプロセスを開始するために戻ることができる。
【００７８】
ブロック１１０４では、コンピューティングデバイスは、シーケンシャルデータ記憶装置内の受信したシーケンシャルデータの量がしきい値最小量を満たすか否かを判定することができる。例えば、リーダーコンセンサスノードがブロックを生成し始める前に、リーダーコンセンサスノードは、ＦＩＦＯキュー内に最小量のデータがあると判定して、リソースを浪費することを避けるために、そこに格納された所望の量より少ないデータを有するブロックを生成しないようにすることができる。例えば、上記の例では、各ブロックは、シーケンシャルデータの５つの部分に対応する５つのデータエントリを含むが、しかし、他の例では、しきい値は、所望のブロックサイズ、シーケンシャルデータのデータ内容のサイズ、ネットワークの速度（例えば、帯域幅またはレイテンシ）、またはコンセンサスのスループットを最大化するための他の考慮事項に応じて異なる量であってもよい。シーケンシャルデータ記憶装置内のシーケンシャルデータの量がしきい値を満たさない場合には、プロセスは、シーケンシャルデータのしきい値量が受信されるまで待機することができる。一方、シーケンシャルデータ記憶装置に少なくともしきい値量のシーケンシャルデータがある場合には、プロセスはブロック１１０６に進むことができる。
【００７９】
ブロック１１０６では、コンピューティングデバイスは、別のスレッドなどの別のブロックを生成するために既にビジーであるかどうかを判定することができる。例えば、ＣＰＵ使用率が能力の８０％より大きい場合には、プロセスは、コンピューティングデバイスが他のブロックの生成を完了するまで、またはＣＰＵ使用量がより低いレベルに落とされるまで待つことができる。コンピューティングデバイスが現在他のブロックを生成していない場合には、プロセスはブロック１１０８に進むことができる。
【００８０】
ブロック１１０８では、コンピューティングデバイスは、最後のブロック、すなわち、現在のブロックの直前に作成されたブロックが、同じスレッドによって、すなわち同じブロックチェーンに対して、または異なるスレッドに対して生成されたかどうかを判定することができる。例えば、生成されるべきブロックが、最後に生成されたブロックと同じブロックチェーン内の次のブロックである場合には、新しいブロックにデータを複製する必要はない。
【００８１】
ブロック１１１０では、コンピューティングデバイスは、直前に生成されたブロックが同じスレッドを使用して生成されたものであるか、または異なるスレッドを使用して生成されたものであるかに関わらず、シーケンシャルデータの第１の部分が直前に生成されたブロックの最後の部分と同じソースからのものであるかどうかを判定することができる。例えば、リーダーコンセンサスノードは、新しいブロックに追加される最初のエントリのソースＩＤと、直前に生成されたブロック内の最後のエントリのソースＩＤと、をチェックして、一致するかどうかを調べることができる。シーケンシャルデータの２つの部分が同じソースからのものである場合には、プロセスはブロック１１１２に進む。一方、シーケンシャルデータのこれらの２つの部分が異なるソースからのものである場合には、プロセスはブロック１１１４に進む。
【００８２】
ブロック１１１２では、シーケンシャルデータの２つの部分が同じソースからのものである場合には、コンピューティングデバイスは、シーケンシャルデータ記憶装置２２４からシーケンシャルデータの所定数の部分をメモリ２１２（例えば図２を参照）に読み込み、以下のブロック１１１８の動作を実行する際に使用することができる。さらに、コンピューティングデバイスは、シーケンシャルデータの読み出した部分をシーケンシャルデータ記憶装置２２４から削除してもよい。
【００８３】
ブロック１１１４では、２つのシーケンシャルデータが異なるデータソースからのものである場合には、コンピューティングデバイスは、メモリ２１２（図２を参照）に格納されたシーケンシャルデータ２２８の前に格納された最後の部分を、ブロックが生成されるときに新しいブロックの最初のエントリとして用いることができる。さらに、コンピューティングデバイスは、シーケンシャルデータ記憶装置２２４からシーケンシャルデータの所定数−１個の部分をメモリ２１２に読み込んで、新しいブロックを構築する際に使用することができ、シーケンシャルデータ記憶装置２２４からシーケンシャルデータのこれらの部分を削除することができる。
【００８４】
ブロック１１１６では、コンピューティングデバイスは、例えば図２の２２８で上に示したように、シーケンシャルデータの前に格納された最後の部分の代わりに、読み出したシーケンシャルデータの最後の部分をメモリ２１２に格納することができる。例えば、新しいブロックが生成されるたびに、そのブロックに入力されたシーケンシャルデータの最後の部分が２２８でメモリに格納される。次に、シーケンシャルデータの最後の部分のソースＩＤが、生成される次のブロックの最初のエントリとなるシーケンシャルデータの最初の（すなわち次の）部分のソースＩＤと一致するかどうかを判定するときに、シーケンシャルデータのこの最後の部分をブロック１１０８で使用することができる。
【００８５】
ブロック１１１８では、コンピューティングデバイスは、ブロック１１１２またはブロック１１１４のいずれかで取得されたシーケンシャルデータの部分のいずれかに基づいて、ブロックチェーンのための新しいブロックを生成することができる。新しいブロックを構築するために、リーダーコンセンサスノードは、ブロック１１１２またはブロック１１１４のいずれかで決定されたメモリ２１２からシーケンシャルデータの部分を読み取る。新しいブロックでは、リーダーコンセンサスノードは、現在のスレッドのスレッドＩＤを新しいブロックに関連付け、シーケンシャルデータの各部分について、少なくともソースＩＤ、ローカルソース時間、およびデータ内容などのシーケンシャルデータの部分をコピーする。さらに、リーダーコンセンサスノードは、同じブロックチェーン内の直前のブロックの前のブロックヘッダハッシュを計算し、図３に関して上述した特徴を用いて、ブロックを作成するために上述したような他の機能を実行することができる。
【００８６】
一例として、シーケンシャルデータ記憶装置２２４の状態が図４のデータ構造４００に示されるものであり、所定数が５であると仮定する。したがって、ブロック１１０２〜１１１６の第１の実行中に、リーダーコンセンサスノードは、メッセージＩＤ２１０１〜２１０５を有するシーケンシャルデータの部分を読み取り、第１のブロックを生成し、メッセージＩＤ２１０５に対応するシーケンシャルデータの最後の部分を項目２２８として格納する。別のスレッド内のブロック１１０２〜１１１６の次の実行中に、シーケンシャルデータの第１の部分は、項目２２８として格納されたシーケンシャルデータの最後部分と同じメッセージソースからのものである（すなわち、両方ともソースＤからのものである）ので、ブロック１１１４ではなく、ブロック１１１２が実行され、メッセージＩＤ２１１０に対応するシーケンシャルデータの部分が、項目２２８としてメモリ２１２に格納される。ブロック１１０２〜１１１６の次の実行中に、別のスレッドにおいて、シーケンシャルデータの第１の部分は、項目２２８として格納されたシーケンシャルデータの最後の部分とは異なるメッセージソースからのものである（すなわち、メッセージＩＤ２１１０は、ソースＤからのものであり、メッセージＩＤ２１１１はソースＢからのものである）ので、ブロック１１１２ではなく、ブロック１１１４が実行され、シーケンシャルデータの４つの部分のみがデータ構造４００から読み出され、メッセージＩＤ２１１４に対応するシーケンシャルデータの部分は項目２２８としてメモリ２１２に格納される。プロセス１１００は、シーケンシャルデータ記憶装置２２４にしきい値量のデータが存在する限り、連続的に繰り返されてもよい。
【００８７】
さらに、リーダーコンセンサスノードは、十分なＣＰＵ能力があると仮定して、ブロック１１１８を複数のスレッドで同時に実行することができる。例えば、リーダーコンセンサスノードは、ブロック１１０２〜１１１６を連続的に実行してもよく、第１の実行スレッドがブロック１１１８に到達するまで、他のスレッドがブロック１１０２に入ることを中断してもよい。ブロック１１０２〜１１１６は比較的単純なステップなので、これらのブロックを実行するのに相対的に非常に短い時間ですむ。一方、ブロック１１１８に記載されているようなブロックを構築することは、より大きい処理能力と時間を利用することができるので、ブロック１１０６に関して上述したように最大処理能力がしきい値レベルを下回っている限り、複数のスレッドによるブロック１１１８の同時実行を使用して処理のスループットを向上させることができる。
【００８８】
図１２は、いくつかの実施態様による、ブロックチェーンを監査し、および／または複数のブロックチェーンに保持されたシーケンシャルデータをシリアル化するための例示的なプロセス１２００を示す流れ図である。いくつかの例では、プロセス１２００は、監査コンピューティングデバイスまたは他の適切なコンピューティングデバイス上で実行される監査プログラムによって実行されてもよい。
【００８９】
ブロック１２０２では、コンピューティングデバイスは、ブロックリストを初期化することができる。例えば、監査コンピューティングデバイスは、コンセンサスコンピューティングデバイス上の複数のブロックチェーンに保持されたシーケンシャルデータをシリアル化するためにブロックリストを初期化することができる。したがって、コンピューティングデバイスは、ブロックチェーンからデータを読み取ることによって、シーケンシャルな順序においてシーケンシャルデータの部分のリストを基本的に再作成することができる。
【００９０】
ブロック１２０４では、コンピューティングデバイスは、ブロックチェーンからブロックを読み取ることができる。例えば、監査コンピューティングデバイスは、コンセンサスコンピューティングデバイスによって格納された複数のブロックチェーンに保持されたシーケンシャルデータをシリアル化するために、コンセンサスコンピューティングデバイスのいずれかによって保持されるブロックチェーンにアクセスすることができる。いくつかの例では、コンセンサスコンピューティングデバイスの各々は、コンセンサスシステム内の他のコンセンサスコンピューティングデバイスによって格納されたブロックチェーンのすべての完全なコピーを格納することができる。
【００９１】
ブロック１２０６では、コンピューティングデバイスは、ブロックから読み出されたシーケンシャルデータをブロックリストに挿入することができる。例えば、上述の例では、各ブロックは、ブロックから読み取られ、監査コンピューティングデバイスによって生成されたブロックリストに追加され得るシーケンシャルデータの４つまたは５つの部分を含むことができる。場合によっては、監査コンピューティングデバイスは、前のブロックヘッドハッシュ、およびブロックのシーケンシャルデータの最初と最後の部分のソースＩＤおよびソースローカル時間を使用して、受信したブロックからのデータの部分を既存のブロックリストに挿入する場所を見つけることができる。例えば、任意の１つのソースのクロックは、そのソースに対して正確であると仮定され、したがって、特定のソースからのデータのシーケンシャルな順序は、コンセンサスシステムによっていつ受信されたかに関わらず、そのソースのクロックから決定することができる。したがって、ソースＩＤおよびソースローカル時間を使用して、データソースのいずれか１つから受信したシーケンシャルデータのシーケンス全体を決定することができる。
【００９２】
ブロック１２０８では、コンピューティングデバイスは、未処理のブロックがそれ以上存在するかどうかを判定することができる。例えば、監査コンピューティングデバイスが、シーケンシャルデータの特定のセットのすべてのブロックチェーンのすべてのブロックにまだアクセスしていない場合には、コンピューティングデバイスは、すべてのブロックがアクセスされるまでブロックチェーン内のブロックにアクセスし続け、ブロックリストに読み込むことができる。したがって、未処理のブロックがある場合には、プロセスは１２０４に戻ることができる。すべてのブロックが処理された場合には、プロセスはブロック１２１０に進むことができる。
【００９３】
ブロック１２１０では、コンピューティングデバイスはブロックリストを出力することができる。例えば、監査コンピューティングデバイスは、監査人などのユーザに、例えばディスプレイ上に出力してもよく、ブロックリストをユーザコンピューティングデバイスなどの別のコンピューティングデバイスまたは記憶場所に送信してもよい。
【００９４】
本明細書に記載される例示的なプロセスは、説明の目的で提供されるプロセスの単なる例にすぎない。多くの他の変形が、本明細書の開示に照らして当業者には明らかであろう。さらに、本明細書の開示は、プロセスを実行するための適切なフレームワーク、アーキテクチャおよび環境のいくつかの例を述べているが、本明細書の実施態様は、図示され説明される特定の例に限定されない。さらに、本開示は、記載され、図面に示されるような様々な例示的な実施態様を提供する。しかし、この開示は、本明細書に記載および図示された実施態様に限定されず、当業者に知られているように、または当業者に知られるであろうように、他の実施態様に拡張することができる。
【００９５】
図１３は、いくつかの実施態様による監査コンピューティングデバイスによって出力することができるブロックリストの例示的なデータ構造１３００を示す。この例では、データ構造１３００は、図４に関して上述したデータ構造４００と同様であり、メッセージをコンセンサスシステムに送信したソースコンピューティングデバイスの識別子を示すソースＩＤカラム１３０２を含む。さらに、データ構造１３００のカラム１３０４はリーダー時間を含み、カラム１３０６はシーケンシャルデータの各部分のソースローカル時間を含み、カラム１３０８はシーケンシャルデータのデータ内容を含む。さらに、カラム１３１０は、シーケンシャルデータが格納されるブロックチェーンおよびブロックを含む。したがって、ブロック１３１２に示すように、ブロックチェーンの生成中にシーケンシャルデータを第２のブロックに複製する場合に、複製されたシーケンシャルデータを含む第１のブロックと第２のブロックの両方の識別情報をブロックリストに含めることができる。
【００９６】
図１４は、いくつかの実施態様によるデータのブロックチェーンロギングのためのシステム１４００の例示的なアーキテクチャを示す。例えば、本明細書の実施態様は、様々な異なるタイプのアプリケーションのための様々な異なるタイプのシステムにおいて使用されてもよい。この例では、コンセンサスシステムを使用して、複数の異なるシステムから、例えば複数のサブシステムから受信したログのシーケンスを記録するなど、ログ管理などのシステムログを受信することができる。
【００９７】
システム１４００は、図１に関して上述したシステム１００と同様である。したがって、ここでは２つのシステム間の相違点のみを説明する。この例では、外部システムコンピューティングデバイスを省くことができ、ソースコンピューティングデバイス１０８と通信するか、ソースコンピューティングデバイス１０８の一部であってもよい、複数のサブシステムデバイス１４０２を含めることができる。例えば、サブシステムデバイス１４０２（１）はソースコンピューティングデバイス１０８（１）に関連付けることができ、サブシステムデバイス１４０２（２）はソースコンピューティングデバイス１０８（２）に関連付けることができ、サブシステムデバイス１４０２（３）はソースコンピューティングデバイス１０８（３）に関連付けることができる。各サブシステムデバイス１４０２は、複雑なシステムの一部であってもよく、ロギングプログラム１４０４を含んでもよい。
【００９８】
サブシステムデバイス１４０２（１）〜１４０２（３）は互いに通信することができ、システム全体の機能は、サブシステムデバイス１４０２を組み合わせることによって達成することができる。この状況では、各サブシステムのシステムログのシーケンスを明確にすることが望ましい場合がある。例えば、システムの誤動作が発生した場合に、同時に実行されている各サブシステムデバイス１４０２のシーケンスは、どのタイプの障害が発生したか、およびシステムのどの部分を修復する必要があるかを判断するのを助けることができる。
【００９９】
この例では、各サブシステムデバイス１４０２は、シーケンシャルデータ１２２としてコンセンサスノード１０２にソースコンピューティングデバイスデータ生成プログラム１２０によって送信されたアプリケーションプログラム、ミドルウェア、または他のロギングプログラム１４０４によって生成されたローカル時間（例えば、日付および時間）およびログメッセージを含むエントリを生成することができる。一例として、ロギングプログラム１４０４は、ログエントリを出力するための多くの命令を含むことができる。サブシステムデバイス１４０２がプログラムの実行中にそのような命令に遭遇すると、サブシステムデバイスは、ログエントリ（例えば、ロギングプログラム１４０４によって生成されたテキストデータ）を関連するソースコンピューティングデバイス１０８に送信することができる。
【０１００】
ソースコンピューティングデバイス１０８は、例えば図１に関して上述したように動作することができる。一例として、ソースコンピューティングデバイス１０８は、関連するサブシステムデバイス１４０２から独立したサーバーであってもよい。あるいは、ソースコンピューティングデバイス１０８は、サブシステムデバイス１４０２のロギングプログラム１４０４と同じサーバーまたは他のコンピューティングデバイス上で実行することができる。別の例として、コンセンサスノード１０２の１つは、サブシステムデバイス１４０２に存在してもよい。
【０１０１】
サブシステムデバイス１４０２からログを記録するためにブロックチェーンを使用することによって、監査コンピューティングデバイス１０６などは、サブシステムデバイス１４０２の各オペレータまたは開発者にログのシーケンスを定義することができる。したがって、このシーケンシャルデータは、どのようなタイプの障害が発生した可能性があり、それをどのように修正するかを判断するための証拠として使用することができる。同じサブシステムデバイス１４０２からのログは、サブシステムデバイス１４０２のクロックに従って設定された同じローカル時間を有することができる。その結果、ブロックチェーンは、複数の異なる証券会社から受け取った証券取引注文など、他のタイプのシーケンシャルデータについて上述したのと同様の方法で、異なるサブシステムデバイス１４０２からのログのシーケンスを記録することができる。
【０１０２】
本明細書で説明される様々な命令、プロセス、および技術は、コンピュータ可読媒体に格納され、本明細書のプロセッサによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈において考慮することができる。一般に、プログラムモジュールは、特定のタスクを実行するため、または特定の抽象データ型を実現するためのルーチン、プログラム、オブジェクト、コンポーネント、データ構造、実行可能コードなどを含む。これらのプログラムモジュールなどは、ネイティブコードとして実行することができ、または仮想マシンまたは他のジャストインタイムコンパイル実行環境などにダウンロードして実行することができる。通常、プログラムモジュールの機能は、様々な実施態様において所望されるように組み合わせるか、または分散させることができる。これらのモジュールおよび技術の実施態様は、コンピュータ記憶媒体に格納されてもよく、または何らかの形態の通信媒体を介して送信されてもよい。したがって、本明細書のインデックス構成は、物理ハードウェア上に実装されてもよく、仮想的な実装で使用されてもよく、物理または仮想マシン上の全体的な重複排除システムの一部として使用されてもよく、および／または他の重複排除実装（例えばＳＡＮ）または大規模メモリ索引付けなどの非重複排除環境のコンポーネントとして使用されてもよい。
【０１０３】
本主題は、構造的特徴および／または方法論的動作に特有の文言で記載されているが、添付の特許請求の範囲に定義された主題は必ずしも記載された特定の特徴または動作に限定されないことを理解されたい。むしろ、特定の特徴および動作は、特許請求の範囲を実施する例示的な形態として開示されている。
【符号の説明】
【０１０４】
１００  コンセンサスシステム
１０２  リーダーコンセンサスノード
１０４  ネットワーク
１０６  監査コンピューティングデバイス
１０８  ソースコンピューティングデバイス
１１０  外部システムコンピューティングデバイス
１１２  ブロックチェーン
１１３  ブロックチェーン記憶装置
１１４  ノードプログラム
１１６  コンセンサスプログラム
１１８  ブロック生成器
１２０  ソースコンピューティングデバイスデータ生成プログラム
１２２  シーケンシャルデータ
１２４  外部プログラム
１２６  監査プログラム
１２８  監査人
２０２  プロセッサ
２０４  通信インターフェース
２０６  コンピュータ可読媒体
２０８  Ｉ／Ｏデバイス
２１０  ローカル記憶装置
２１２  メモリ
２１４  オペレーティングシステム
２１６  リーダーノードプログラム
２１８  シーケンシャルデータ受信器
２２０  ブロック生成器
２２２  シーケンシャルデータ転送器
２２４  シーケンシャルデータ記憶装置
２２６  ブロックチェーンプログラム
２２８  シーケンシャルデータ、項目
３００  ブロックチェーンデータ構造
３０２  ブロック
３０４  ブロック
３０６  ブロック
３０８  ブロックヘッダハッシュ
３１０  ブロックヘッダ
３１２  ブロック高さ
３１４  ブロック本体
３１６  前のブロックヘッダハッシュ
３１８  ブロック本体ハッシュ
３２０  タイムスタンプ
３２２  スレッド識別子
４００  データ構造
４０２  メッセージＩＤカラム
４０４  ソースＩＤカラム
４０６  リーダー時間、カラム
４０８  ソースローカル時間、カラム
４１０  カラム
５００  ブロック
５０２  シーケンシャルデータ
５０４  シーケンシャルデータ
６００  プロセス
６０２  ブロック
６０３  スレッド
６０４  ブロック
６０６  ブロック
６０７  スレッド、ブロック
６０８  ブロック
６０９  ブロック
６１０  ブロック、コンセンサス決定プロセス、コンセンサス
６１１  ブロック
６１２  ブロック
７００  スレッド実行タイミング、ブロック
７０２  ブロック
７０６  ブロック
７０８  ブロック
７１０  ブロック
７１２  ブロック
７１４  ブロック
８００  論理構成
８０１  ブロック
８０２  ブロック
８０４  ブロック
８０６  ブロック
８０８  矢印
９００  論理構成
９０２  矢印
９０４  矢印
９０６  矢印
９０８  矢印
９１０  矢印
１０００  論理構成
１００２  矢印
１００４  矢印
１００６  矢印
１１００  プロセス
１１０２  ブロック
１１０３  ブロック
１１０４  ブロック
１１０５  ブロック
１１０６  ブロック
１１０７  ブロック
１１０８  ブロック
１１０９  ブロック
１１１０  ブロック
１１１１  ブロック
１１１２  ブロック
１１１３  ブロック
１１１４  ブロック
１１１５  ブロック
１１１６  ブロック
１１１８  ブロック
１２００  プロセス
１２０２  ブロック
１２０４  ブロック
１２０６  ブロック
１２０８  ブロック
１２１０  ブロック
１３００  データ構造
１３０２  ソースＩＤカラム
１３０４  カラム
１３０６  カラム
１３０８  カラム
１３１０  カラム
１３１２  ブロック
１４００  システム
１４０２  サブシステムデバイス
１４０４  ロギングプログラム
【図１】
2019029019.tif 000003
【図２】
2019029019.tif 000004
【図３】
2019029019.tif 000005
【図４】
2019029019.tif 000006
【図５】
2019029019.tif 000007
【図６】
2019029019.tif 000008
【図７】
2019029019.tif 000009
【図８】
2019029019.tif 000010
【図９】
2019029019.tif 000011
【図１０】
2019029019.tif 000012
【図１１】
2019029019.tif 000013
【図１２】
2019029019.tif 000014
【図１３】
2019029019.tif 000015
【図１４】
2019029019.tif 000016
【外国語明細書】
2019029019000001.pdf
2019029019000002.pdf
2019029019000003.pdf
2019029019000004.pdf