(57)【要約】  ストレージのためにブロックチェーンデータをインデックス化するための、コンピュータ記憶媒体に符号化されたコンピュータプログラムを含む、方法、システム、および装置を本明細書では開示している。方法の1つは、ブロックチェーンの複数のブロックに対して誤り訂正符号(ECC)を行うことに基づいて複数の符号化ブロックを生成するステップと、複数の符号化ブロックの各符号化ブロックについて、複数のブロックに関連付けられたデータストレージスキームに基づいて複数のデータセットに符号化ブロックを分割するステップであって、データストレージスキームは、複数のブロックチェーンノードに複数のデータセットの割り当てを提供する、ステップと、データストレージスキームにおいて提供された割り当てに基づいて複数のデータセットの少なくとも1つを記憶するステップと、それぞれのデータセットが記憶されている複数のブロックチェーンノードの各々に、複数のデータセットの各々をインデックス化するインデックスを提供するステップとを含む。
2021528883.tif 000002
【特許請求の範囲】
【請求項１】
ストレージのためにブロックチェーンデータをインデックス化するためのコンピュータ実施方法であって、前記方法は、
ブロックチェーンの複数のブロックに対して誤り訂正符号(ECC)を行うことに基づいて複数の符号化ブロックを生成するステップと、
前記複数の符号化ブロックの各符号化ブロックについて、
前記複数のブロックに関連付けられたデータストレージスキームに基づいて複数のデータセットに前記符号化ブロックを分割するステップであって、前記データストレージスキームは、複数のブロックチェーンノードに前記複数のデータセットの割り当てを提供する、ステップと、
前記データストレージスキームにおいて提供された前記割り当てに基づいて前記複数のデータセットの少なくとも1つを記憶するステップと、
それぞれのデータセットが記憶されている前記複数のブロックチェーンノードの各々に、前記複数のデータセットの各々をインデックス化するインデックスを提供するステップと
を含む、方法。
【請求項２】
前記インデックスは、データセットのデータセット識別子(ID)と前記データセットが記憶されているブロックチェーンノードのノードIDとの間の対応付けを提供する、請求項1に記載の方法。
【請求項３】
前記インデックスは、前記データストレージスキームが関連付けられている前記複数のブロックに対応する複数のブロックIDを提供する、請求項1から2のいずれか一項に記載の方法。
【請求項４】
前記複数のデータセットの前記少なくとも1つ以外の前記複数のデータセットの残余をハッシュ化して前記複数のデータセットの前記残余に対応するハッシュ値を生成するステップと、
前記ハッシュ値を記憶するステップと、
前記1つまたは複数のブロックを削除するステップと
をさらに含む、請求項1から3のいずれか一項に記載の方法。
【請求項５】
コンピューティングデバイスからブロックチェーンデータについての要求を受信するステップと、
前記ブロックチェーンデータが前記1つまたは複数のブロックに含まれていることを決定するステップと、
前記複数のデータセットの前記残余を取り出すために、前記インデックスに基づいて、前記ブロックチェーンネットワークの前記ブロックチェーンノードの残余にハッシュ値を送信するステップと
をさらに含む、請求項4に記載の方法。
【請求項６】
前記ブロックチェーンノードの前記残余の各々から少なくとも1つのデータセットを受信するステップと、
前記少なくとも1つのデータセットをハッシュ化して前記ブロックチェーンノードの前記残余の各々に対応する少なくとも1つのハッシュ値を生成するステップと、
前記少なくとも1つのハッシュ値が前記ブロックチェーンノードに記憶されているかどうかを決定するステップと
をさらに含む、請求項5に記載の方法。
【請求項７】
前記少なくとも1つのハッシュ値が前記ブロックチェーンノードに記憶されていないと決定したことに応答して、前記少なくとも1つのハッシュ値に対応する前記少なくとも1つのデータセットが受信されるブロックチェーンノードを決定するステップと、
不良ノードとして前記ブロックチェーンノードを報告するステップと
をさらに含む、請求項6に記載の方法。
【請求項８】
前記ブロックチェーンノードの前記残余の各々に対応する前記少なくとも1つのハッシュ値が前記ブロックチェーンノードに記憶されていると決定したことに応答して、前記ブロックチェーンノードに記憶されている前記複数のデータセットの前記少なくとも1つと、前記ブロックチェーンノードの前記残余の各々から受信した前記少なくとも1つのデータセットとに基づいて、前記1つまたは複数のブロックを復号するステップをさらに含む、請求項6に記載の方法。
【請求項９】
前記1つまたは複数のブロックは、所定の時間量の間に作成されたヒストリックなブロックである、請求項1から8のいずれか一項に記載の方法。
【請求項１０】
前記ECCは、前記ブロックチェーンノードの計算リソースの利用率が所定の値以下であるまたは前記ブロックチェーンノードのストレージ領域の使用量が所定の割合以上である場合に、行われる、請求項1から9のいずれか一項に記載の方法。
【請求項１１】
前記ECCは、前記複数のブロックに冗長ビットを追加することによって行われる消失訂正符号である、請求項1から10のいずれか一項に記載の方法。
【請求項１２】
前記複数のブロックは、所定の時間量の間に前記ブロックチェーンに付加される、アクセス頻度の低いブロックである、請求項1から11のいずれか一項に記載の方法。
【請求項１３】
共有ブロックチェーンデータを通信するシステムであって、
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合されるとともに、請求項1から12のいずれか一項に記載の方法を行うように前記1つまたは複数のプロセッサによって実行可能な命令を記憶している、1つまたは複数のコンピュータ可読メモリとを含む、システム。
【請求項１４】
共有ブロックチェーンデータを通信するための装置であって、前記装置は、請求項1から12のいずれか一項に記載の方法を行うための複数のモジュールを含む、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、誤り訂正符号に基づいて符号化されたブロックチェーンデータのインデックス化および復元に関する。
【背景技術】
【０００２】
コンセンサスネットワークおよび/またはブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でデータを記憶することを可能にする。DLSは、任意の特定のユーザケースを指すわけではなく、ブロックチェーンネットワークを一般には指す。ブロックチェーンネットワークのタイプの例は、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、およびコンソーシアムブロックチェーンネットワークを含み得る。コンソーシアムブロックチェーンネットワークは、コンセンサスプロセスを制御する、限定されたエンティティのグループに提供されており、アクセス制御レイヤを含む。
【０００３】
ブロックチェーンベースのプログラムは、分散コンピューティングプラットフォームによって実行され得る。例えば、分散コンピューティングプラットフォームは、スマートコントラクトを実行するためのランタイム環境を提供する仮想マシンを含み得る。ブロックチェーンコンピューティングプラットフォームは、トランザクションベースのステートマシンとしてみなされ得る。プラットフォームにおける状態データは、ワールドステートと称される広域共有状態にまとめられ得る。ワールドステートは、アカウントアドレスとアカウント状態との間のマッピングを含む。ワールドステートは、Merkle Patriciaツリー(MPT)などのデータ構造に記憶され得る。
【０００４】
状態データに加えて、ブロックチェーンネットワークは、ブロックデータおよびインデックスデータなどの他のタイプのデータも記憶し得る。ブロックデータは、ブロックヘッダとブロック本体とを含み得る。ブロックヘッダは、特定のブロックの識別情報を含み得るし、ブロック本体は、ブロックで確認されるトランザクションを含み得る。トランザクションのブロックチェーンへの組み込みが進むにつれて、状態データおよびブロックデータのサイズは非常に大きなものとなる。いくつかのDLSにおいては、すべてのノードが、ブロックチェーンのコピーのすべてを記憶するため、多大なストレージ領域が必要となり得る。これは、すべてのブロックデータおよび状態データがブロックチェーンに記録されている第1のトランザクションに遡って記憶されるためである。いくつかのDLSにおいては、少数の共有ノードが、ブロックチェーンのコピーのすべてを記憶し、他のブロックチェーンノードとブロックチェーンデータを共有しているため、「データ不均衡」が生じ得る。すなわち、データが異なるノードにわたって不均一に分散されていると、データの大部分を記憶しているノードが故障した際にはデータセキュリティのリスクが高くなり得る。
【０００５】
それゆえ、データ均一性およびデータ処理効率を維持する形でそのようなストレージを可能とすることが望ましいであろう。また、必要に応じて、元のデータの効率的な復元と取り出しを可能としつつ、計算リソースまたはメモリの消費を低減する形で、DLS内のノードへのデータの記憶を可能とすることも望ましいであろう。
【発明の概要】
【課題を解決するための手段】
【０００６】
発明特定事項の説明した実施形態は、単独または組合せで1つまたは複数の特徴を含み得る。
【０００７】
例えば、コンピュータ実施方法は、ストレージのためにブロックチェーンデータをインデックス化するために提供される。方法は、ブロックチェーンの複数のブロックに対して誤り訂正符号(ECC)を行うことに基づいて複数の符号化ブロックを生成するステップと、複数の符号化ブロックの各符号化ブロックについて、複数のブロックに関連付けられたデータストレージスキームに基づいて複数のデータセットに符号化ブロックを分割するステップであって、データストレージスキームは、複数のブロックチェーンノードに複数のデータセットの割り当てを提供する、ステップと、データストレージスキームにおいて提供された割り当てに基づいて複数のデータセットの少なくとも1つを記憶するステップと、それぞれのデータセットが記憶されている複数のブロックチェーンノードの各々に、複数のデータセットの各々をインデックス化するインデックスを提供するステップとを含む。
【０００８】
いくつかの実施形態においては、これらの一般的な態様および特定の態様は、システム、方法、もしくはコンピュータプログラム、または、システムと、方法と、コンピュータプログラムとの任意の組合せを使用して実装され得る。上記のおよび他の説明した実施形態の各々は、必要に応じて、以下の特徴の1つまたは複数を含む。
【０００９】
下記の特徴のいずれかと組み合わせることが可能な第1の特徴は、インデックスが、データセットのデータセット識別子(ID)とデータセットが記憶されているブロックチェーンノードのノードIDとの間の対応付けを提供することを規定している。
【００１０】
上記または下記の特徴のいずれかと組み合わせることが可能な第2の特徴は、インデックスが、データストレージスキームが関連付けられている複数のブロックに対応する複数のブロックIDを提供することを規定している。
【００１１】
上記または下記の特徴のいずれかと組み合わせることが可能な第3の特徴は、複数のデータセットの少なくとも1つ以外の複数のデータセットの残余をハッシュ化して複数のデータセットの残余に対応するハッシュ値を生成するステップと、ハッシュ値を記憶するステップと、1つまたは複数のブロックを削除するステップとをさらに含む。
【００１２】
上記または下記の特徴のいずれかと組み合わせることが可能な第4の特徴は、コンピューティングデバイスからブロックチェーンデータについての要求を受信するステップと、ブロックチェーンデータが1つまたは複数のブロックに含まれていることを決定するステップと、複数のデータセットの残余を取り出すために、インデックスに基づいて、ブロックチェーンネットワークのブロックチェーンノードの残余にハッシュ値を送信するステップとをさらに含む。
【００１３】
上記または下記の特徴のいずれかと組み合わせることが可能な第5の特徴は、ブロックチェーンノードの残余の各々から少なくとも1つのデータセットを受信するステップと、少なくとも1つのデータセットをハッシュ化してブロックチェーンノードの残余の各々に対応する少なくとも1つのハッシュ値を生成するステップと、少なくとも1つのハッシュ値がブロックチェーンノードに記憶されているかどうかを決定するステップとをさらに含む。
【００１４】
上記または下記の特徴のいずれかと組み合わせることが可能な第6の特徴は、少なくとも1つのハッシュ値がブロックチェーンノードに記憶されていないと決定したことに応答して、少なくとも1つのハッシュ値に対応する少なくとも1つのデータセットが受信されるブロックチェーンノードを決定するステップと、不良ノードとしてブロックチェーンノードを報告するステップとをさらに含む。
【００１５】
上記または下記の特徴のいずれかと組み合わせることが可能な第7の特徴は、ブロックチェーンノードの残余の各々に対応する少なくとも1つのハッシュ値がブロックチェーンノードに記憶されていると決定したことに応答して、ブロックチェーンノードに記憶されている複数のデータセットの少なくとも1つと、ブロックチェーンノードの残余の各々から受信した少なくとも1つのデータセットとに基づいて、1つまたは複数のブロックを復号するステップをさらに含む。
【００１６】
上記または下記の特徴のいずれかと組み合わせることが可能な第8の特徴は、1つまたは複数のブロックが、所定の時間量の間に作成されたヒストリックなブロックであることを規定している。
【００１７】
上記または下記の特徴のいずれかと組み合わせることが可能な第9の特徴は、ECCが、ブロックチェーンノードの計算リソースの利用率が所定の値以下であるまたはブロックチェーンノードのストレージ領域の使用量が所定の割合以上である場合に、行われることを規定している。
【００１８】
上記または下記の特徴のいずれかと組み合わせることが可能な第10の特徴は、ECCが、複数のブロックに冗長ビットを追加することによって行われる消失訂正符号であることを規定している。
【００１９】
上記または下記の特徴のいずれかと組み合わせることが可能な第11の特徴は、複数のブロックが、所定の時間量の間にブロックチェーンに付加される、アクセス頻度の低いブロックであることを規定している。
【００２０】
本明細書による方法が本明細書に記載の態様と特徴との任意の組合せを含み得ることは諒解されよう。すなわち、本明細書による方法は、特に本明細書に記載の態様と特徴との組合せに限定されるわけではなく、提供した態様と特徴との任意の組合せも含む。
【００２１】
本明細書の1つまたは複数の実施形態の詳細を添付の図面および以下の説明に記載している。本明細書の他の特徴および利点が、説明および図面から、および特許請求の範囲から明らかとなるであろう。
【図面の簡単な説明】
【００２２】
【図１】本明細書の実施形態を実行するために使用され得る環境の例を示す図である。
【図２】本明細書の実施形態による、アーキテクチャの例を示す図である。
【図３】本明細書の実施形態による、ブロックデータ符号化及びハッシュ化プロセスの例を示す図である。
【図４】本明細書の実施形態による、データストレージスキームの例を示す図である。
【図５】本明細書の実施形態による、ブロックデータ符号化及びハッシュ化プロセスの別の例を示す図である。
【図６】本明細書の実施形態による、符号化データセットをインデックス化するためのプロセスの例を示す図である。
【図７】本明細書の実施形態による、データの取り出しおよび復元のためのプロセスの例を示す図である。
【図８】本明細書の実施形態において実行されるプロセスの例を示す図である。
【図９】本明細書の実施形態による、装置のモジュールの例を示す図である。
【発明を実施するための形態】
【００２３】
類似の参照番号および様々な図面内の記号は類似の要素を示す。
【００２４】
本明細書は、ストレージのためにブロックチェーンデータをインデックス化するための技術を説明している。これらの技術は、一般的に、ブロックチェーンの1つまたは複数のブロックに対して誤り訂正符号(ECC)を実行することによって1つまたは複数の符号化ブロックを生成するステップと、1つまたは複数の符号化ブロックの各々を複数のデータセットに分割するステップと、それぞれのデータセットが記憶されているブロックチェーンノードに、1つまたは複数のブロックのためのインデックスを提供するステップであって、インデックスは、複数のデータセットの各々をインデックス化する、ステップとを含む。
【００２５】
本明細書に記載しているように、ブロックチェーンネットワークは、状態データ、ブロックデータ、およびインデックスデータなどの異なるタイプのデータを記憶し得る。ブロックデータは、ブロックチェーンネットワークにおけるすべてのトランザクションを含み、このことは、新規ブロックがブロックチェーンに継続的に追加されるため多大なストレージ領域が必要となり得る。ブロックチェーンノードの各々がブロックデータ、特に、アクセス頻度の低いブロック(例えば、ずっと以前にブロックチェーンに追加されたブロック)のデータのコピーのすべてを記憶する非効率なものとなり得る。それゆえ、本明細書の実施形態は、各ブロックチェーンノードが、アクセス頻度の低いブロックの一部を記憶し、必要に応じて他のブロックチェーンノードからブロックデータの残りを取り出すことを提供しており、ストレージ消費を低減している。しかしながら、不良ノードまたは信頼できないノードがブロックチェーンネットワークに存在している場合には、取り出したデータを信頼することはできないし、データロスを引き起こし得る。
【００２６】
いくつかの実施形態においては、ブロックチェーンノードは、消失訂正符号などのECCを行って、アクセス頻度の低いブロックを符号化し得る。ECC符号化ブロックは、その後、複数のデータセットに分割され得る。複数のデータセットは、インデックス化され、データストレージスキームに基づいて記憶するために異なるブロックチェーンノードに割り当てられ得る。スマートコントラクトを実行するためにアクセス頻度の低いブロックからデータがブロックチェーンノードによって必要とされた際には、ブロックチェーンノードは、インデックスに基づいて他のブロックチェーンノードから対応するデータセットを取り出して、ECC符号化ブロックを形成し元のブロックを復元し得る。ECC符号化ブロックを共有することによって、信頼のおけないデータが存在するまたはデータロスが生じている場合でさえ、正当なブロックチェーンノードの割合がECCのコードレート以上である限り、元のブロックデータを復元することができる。
【００２７】
本明細書において説明した技法は、いくつかの技術的効果を生み出す。例えば、発明特定事項の実施形態は、ブロックチェーンノードの計算効率およびデータ均一性を維持しつつ、ブロックチェーンノードのストレージリソース対する負担を軽減している。いくつかのブロックはアクセス頻度が低い(例えば、より時間の経過したブロックである)ため、各ブロックチェーンノードに対するECC符号化ブロック(本明細書では符号化ブロックとも称する)の一部のみを保存し、他のブロックチェーンノードとデータの残余を共有することによって、ブロックチェーンノードのストレージリソースが保たれている。
【００２８】
いくつかの実施形態においては、ECC符号化ブロックは、複数のデータセットに分割され得る。ブロックチェーンノードは、複数のデータセットの選択した一部およびデータセットの残余に対応するハッシュ値を記憶し得る。選択は、ブロックチェーンネットワークのブロックチェーンノードによって合意されたデータストレージスキームに基づき得る。複数のデータセットと、ハッシュ値とは、ECC符号化ブロックに関連付けられたブロックIDと、それぞれのデータセットおよびハッシュ値が記憶されているブロックチェーンノードに関連付けられたノードIDとに対してインデックス化され得る。インデックスは、ブロックチェーンネットワークのブロックチェーンノードと共有され得る。元のブロックチェーンデータをブロックチェーンノードによって復元する必要がある場合には、ブロックチェーンノードは、どこにデータセットが記憶されているか迅速に見つけ出すためにインデックスを参照し、データセットを取り出し、データセットに基づいてブロックチェーンデータを含む元のブロックを復号し得る。
【００２９】
データセットを復号するために、ブロックチェーンノードは、対応するデータセットを記憶している他のブロックチェーンノードにデータセットのハッシュ値を送信し得る。ハッシュ値は不可逆的なものであるため、ブロックチェーンノードは、受信したデータセットをハッシュ化し、そのハッシュ値をローカルに記憶していたハッシュ値と比較することによって、取り出したデータセットが信頼のおけるものであるかどうかを検証し得る。そのため、データセキュリティを保証し得るし、不良ノードを特定し得る。
【００３０】
本明細書の実施形態についてのさらなる状況をあげるとすれば、上述したように、コンセンサスネットワーク(例えば、ピア・ツー・ピアノードで構成される)およびブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でトランザクションを実施しデータを記憶することを可能にする。ブロックチェーンという用語は、特定のネットワークおよび/またはユースケースに一般的に関連付けられているが、ブロックチェーンは、任意の特定のユースケースを指すわけではなくDLSを一般的に指すために本明細書では使用している。
【００３１】
ブロックチェーンは、トランザクションが変更不可能となる方法でトランザクションを記憶するデータ構造である。そのため、ブロックチェーン上に記録されるトランザクションは、信頼性のあるものおよび信頼できるものとなる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、前段のブロックの暗号ハッシュを含めることによって、チェーン内のその直前にある前段のブロックに連結される。各ブロックはまた、タイムスタンプ、それ自身の暗号ハッシュ、および1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによって既に検証されているトランザクションは、ハッシュ化され、Merkleツリーに符号化される。Merkleツリーは、ツリーのリーフノードにおけるデータがハッシュ化され、ツリーの各ブランチにおけるすべてのハッシュがブランチのルートにおいて連結されるデータ構造である。このプロセスは、ツリー全体のルートまでツリーの上方へと進行し続け、ツリー全体のルートは、ツリー内のすべてのデータを表すハッシュを記憶している。ツリーに記憶されているトランザクションであることを意味するハッシュは、それがツリーの構造と整合性を有しているかどうかを決定することによって素早く検証され得る。
【００３２】
ブロックチェーンは、トランザクションを記憶するための分散化されたまたは少なくとも部分的に分散化されたデータ構造である一方で、ブロックチェーンネットワークは、トランザクションをブロードキャストすること、検証すること、および有効性を確認することなどによって、1つまたは複数のブロックチェーンを管理、更新、およびメンテナンスするコンピューティングノードのネットワークである。上述したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供され得る。コンソーシアムブロックチェーンネットワークを参照して、本明細書の実施形態をここではさらに詳細に説明している。しかしながら、本明細書の実施形態が任意の適切なタイプのブロックチェーンネットワークにおいて実現され得ることも考えられる。
【００３３】
一般に、コンソーシアムブロックチェーンネットワークは、関与エンティティの間でプライベートなものとなっている。コンソーシアムブロックチェーンネットワークにおいては、コンセンサスプロセスは、コンセンサスノードとも称し得る、権限を与えられたノードのセットによって制御され、1つまたは複数のコンセンサスノードがそれぞれのエンティティ(例えば、金融機関、保険会社)に管理される。例えば、十(10)のコンソーシアムエンティティ(例えば、金融機関、保険会社)がコンソーシアムブロックチェーンネットワークを管理してもよく、その各々がコンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを管理する。
【００３４】
いくつかの例においては、コンソーシアムブロックチェーンネットワーク内で、グローバルブロックチェーンが、すべてのノードにわたって複製されるブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関する完全状態コンセンサスにある。コンセンサス(例えば、ブロックチェーンへのブロックの追加に対する合意)を得るために、コンセンサスプロトコルがコンソーシアムブロックチェーンネットワーク内で実施される。例えば、コンソーシアムブロックチェーンネットワークは、以下でさらに詳細に説明している、実用的Byzantineフォールトトレランス(PBFT)コンセンサスを実施し得る。
【００３５】
図1は、本明細書の実施形態を実行するために使用され得る環境100の例を示している図である。いくつかの例においては、環境100は、エンティティがコンソーシアムブロックチェーンネットワーク102に関与することを可能にする。環境100は、コンピューティングシステム106、108、およびネットワーク110を含む。いくつかの例においては、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはその組合せを含み、ウェブサイト、ユーザデバイス(例えば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例においては、ネットワーク110は、有線および/または無線通信リンクを介してアクセスされ得る。いくつかの例においては、ネットワーク110は、コンソーシアムブロックチェーンネットワーク102との通信およびコンソーシアムブロックチェーンネットワーク102内の通信を可能にする。一般に、ネットワーク110は、1つまたは複数の通信ネットワークを表す。いくつかのケースにおいては、コンピューティングシステム106、108は、クラウドコンピューティングシステムのノード(図示せず)であり得る、または、コンピューティングシステム106、108の各々は、ネットワークによって相互接続された多数のコンピュータを含むとともに分散処理システムとして機能する別個のクラウドコンピューティングシステムであり得る。
【００３６】
図示した例においては、コンピューティングシステム106、108は各々、コンソーシアムブロックチェーンネットワーク102内のノードとしての関与を可能とする任意の適切なコンピューティングデバイスを含み得る。コンピューティングデバイスの例は、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピューティングデバイス、およびスマートフォンを含むがこれらに限定されない。いくつかの例においては、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102とやりとりするための1つまたは複数のコンピュータ実施サービスをホストする。例えば、コンピューティングシステム106は、第1のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどといった、第1のエンティティ(例えば、ユーザA)のコンピュータ実施サービスをホストすることができる。コンピューティングシステム108は、第2のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどといった、第2のエンティティ(例えば、ユーザB)のコンピュータ実施サービスをホストすることができる。図1の例においては、コンソーシアムブロックチェーンネットワーク102を、ノードからなるピア・ツー・ピアネットワークとして表しており、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102に参加する、第1のエンティティおよび第2のエンティティのノードをそれぞれ提供する。
【００３７】
図2は、本明細書の実施形態による、アーキテクチャ200の例を図示している。例示的な概念的アーキテクチャ200は、関与者A、関与者B、および関与者Cにそれぞれ対応する関与者システム202、204、206を含む。各関与者(例えば、ユーザ、企業)は、少なくとも一部がブロックチェーン216に情報を変更不可能な形で記録する複数のノード214を含むピア・ツー・ピアネットワークとして提供されたブロックチェーンネットワーク212に関与する。単一のブロックチェーン216をブロックチェーンネットワーク212内に概略的に図示しているが、本明細書でさらに詳細に説明しているように、ブロックチェーン216の複数のコピーが、提供され、ブロックチェーンネットワーク212にわたってメンテナンスされる。
【００３８】
図示した例においては、関与者システム202、204、206の各々は、関与者A、関与者B、および関与者Cによってまたはそれらの代わりにそれぞれ提供され、ブロックチェーンネットワーク内のそれぞれのノード214として機能する。本明細書で使用されており、ノードは、ブロックチェーンネットワーク212に接続されている個々のシステム(例えば、コンピュータ、サーバ)を一般的に指し、それぞれの関与者がブロックチェーンネットワークに関与することを可能にする。図2の例においては、関与者は、各ノード214に対応する。しかしながら、関与者がブロックチェーンネットワーク212内の複数のノード214を処理し得ることおよび/または複数の関与者がノード214を共有し得ることも考えられる。いくつかの例においては、関与者システム202、204、206は、あるプロトコル(例えば、ハイパーテキスト・トランスファー・プロトコル・セキュア(HTTPS))を使用して、および/またはリモートプロシージャコール(RPC)を使用して、ブロックチェーンネットワーク212と通信するまたはブロックチェーンネットワーク212を介して通信する。
【００３９】
ノード214は、ブロックチェーンネットワーク212内の関与についての様々な度合いを有し得る。例えば、いくつかのノード214が(例えば、ブロックチェーン216にブロックを追加するマイナーノードとして)コンセンサスプロセスに関与し得る一方で、他のノード214は、コンセンサスプロセスには関与することはない。別の例としては、いくつかのノード214がブロックチェーン216の完全なコピーを記憶する一方で、他のノード214はブロックチェーン216の一部のコピーのみを記憶する。例えば、データアクセス権は、それぞれの関与者がそのそれぞれのシステムに記憶しているブロックチェーンデータに制限し得る。図2の例においては、関与者システム202、204、および206は、それぞれ、ブロックチェーン216の全体のコピー216'、216''、および216'''を記憶し得る。
【００４０】
ブロックチェーン(例えば、図2のブロックチェーン216)は、各ブロックがデータを記憶しているブロックのチェーンで構成される。データの例としては、2つ以上の関与者間のトランザクションを表すトランザクションデータを含む。トランザクションを非限定的な例として本明細書では使用しているが、任意の適切なデータがブロックチェーンに記憶され得ること(例えば、ドキュメント、画像、ビデオ、オーディオ)も考えられる。トランザクションの例は、価値のあるもの(例えば、資産、製品、サービス、通貨)の交換を含み得るがこれに限定されない。トランザクションデータは、ブロックチェーン内に変更不可能な形で記憶される。すなわち、トランザクションデータを変更することはできない。
【００４１】
ブロックに記憶する前に、トランザクションデータはハッシュ化される。ハッシュ化は、トランザクションデータ(文字列データとして提供される)を固定長のハッシュ値(文字列データとしても提供される)に変換するプロセスである。ハッシュ値を逆ハッシュ化してトランザクションデータを取得することはできない。ハッシュ化は、トランザクションデータにおけるわずかな変化でさえも完全に異なるハッシュ値という結果になることを保証している。さらに、上述したように、ハッシュ値は固定長である。すなわち、トランザクションデータのサイズに関係なく、ハッシュ値の長さは固定される。ハッシュ化は、ハッシュ関数によってトランザクションデータを処理してハッシュ値を生成することを含む。ハッシュ関数の例は、256ビットハッシュ値を出力するセキュアなハッシュアルゴリズム(SHA)-256を含むがこれに限定されない。
【００４２】
複数のトランザクションのトランザクションデータがハッシュ化されブロックに記憶される。例えば、2つのトランザクションのハッシュ値が提供されると、それら自身がハッシュ化され別のハッシュを提供する。このプロセスは、すべてのトランザクションがブロックに記憶されるように、単一のハッシュ値が提供されるまで繰り返される。このようなハッシュ値は、Merkleルートハッシュと称され、ブロックのヘッダに記憶される。トランザクションについての何らかの変化は、そのハッシュ値における変化、最終的に、Merkleルートハッシュにおける変化をもたらすことになる。
【００４３】
ブロックは、コンセンサスプロトコルを介してブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードは、コンセンサスプロトコルに関与し、ブロックがブロックチェーンに追加されるようにする作業を行う。そのようなノードをコンセンサスノードと称する。上述したように、PBFTは、コンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行してトランザクションをブロックチェーンに追加し、ブロックチェーンネットワークの総合的な状態を更新する。
【００４４】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内のトランザクションのすべてをハッシュ化し、単一のハッシュ値がブロック内のすべてのトランザクションに対して提供される(Merkleルートハッシュ)まで、ハッシュ値がペアになるように組み合わせてさらなるハッシュ値を生成する。このハッシュがブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーン内の最新ブロック(すなわち、ブロックチェーンに追加された最終ブロック)のハッシュ値を決定する。コンセンサスノードはまた、ノンス値およびタイムスタンプをブロックヘッダに追加する。
【００４５】
一般に、PBFTは、Byzantine障害(例えば、正常に動作していないノード、不正ノード)に耐性がある実用的Byzantineステートマシンの複製を提供する。このことは、障害が生じるであろうことを想定すること(例えば、独立したノードの故障の存在および/またはコンセンサスノードによって送信される操作メッセージを想定すること)によってPBFTでは実現される。PBFTでは、コンセンサスノードは、プライマリコンセンサスノードおよびバックアップコンセンサスノードを含むシーケンスにおいて提供される。プライマリコンセンサスノードは、周期的に変更される。トランザクションは、ブロックチェーンネットワークのワールドステートに関して合意に至ったブロックチェーンネットワーク内のすべてのコンセンサスノードによって、ブロックチェーンに追加される。このプロセスにおいては、メッセージは、コンセンサスノード間で送信され、各コンセンサスノードは、メッセージが指定のピアノードから受信されたことを証明し、メッセージが送信中に変更されなかったことを検証する。
【００４６】
PBFTでは、多様な局面において、コンセンサスプロトコルが、同じ状態で開始するすべてのコンセンサスノードに提供される。はじめに、クライアントは、サービス動作を発動する(例えば、ブロックチェーンネットワーク内のトランザクションを実行する)ためにプライマリコンセンサスノードに要求を送信する。要求を受信したことに応答して、プライマリコンセンサスノードは、バックアップコンセンサスノードに要求をマルチキャストする。バックアップコンセンサスノードが要求を実行し、各々がクライアントに応答を送信する。クライアントは、閾値数の応答が受信されるまで待機する。いくつかの例においては、クライアントは、f+1個の応答が受信されるまで待機する、ここで、fは、ブロックチェーンネットワークにおいて許容され得る、障害のあるコンセンサスノードの最大数である。目標達成は、ブロックチェーンに追加されることになるレコードの順で十分な数のコンセンサスノードが合意に至ることであり、レコードは、受理されるか拒否される。
【００４７】
いくつかのブロックチェーンネットワークにおいては、暗号化がトランザクションのプライバシーを保持するために実施される。例えば、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を理解することができないように、2つのノードがトランザクションをプライベートな状態を維持することを望む場合には、ノードはトランザクションデータを暗号化し得る。暗号化の例は、対称暗号化および非対称暗号化を含むがこれらに限定されない。対称暗号化とは、暗号化(平文から暗号文を生成すること)および復号(暗号文から平文を生成すること)の両方に関して単一の鍵を使用する暗号化プロセスを指す。対称暗号化においては、同一の鍵が複数のノードで利用可能であるため、各ノードがトランザクションデータを暗号化/復号し得る。
【００４８】
非対称暗号化は、各々が秘密鍵と公開鍵とを含む鍵ペアを使用しており、秘密鍵はそれぞれのノードにのみに対して既知となっており、公開鍵はブロックチェーンネットワーク内の他のノードのいずれかまたはすべてに対して既知となっている。あるノードは、別のノードの公開鍵を使用してデータを暗号化し、暗号化されたデータは、他のノードの秘密鍵を使用して復号され得る。例えば、図2を再び参照すれば、関与者Aは、関与者Bの公開鍵を使用してデータを暗号化し、暗号化されたデータを関与者Bに送信し得る。関与者Bは、その秘密鍵を使用して、暗号化されたデータ(暗号文)を復号し、元のデータ(平文)を抽出し得る。ノードの公開鍵で暗号化されたメッセージのみが、ノードの秘密鍵を使用して復号され得る。
【００４９】
非対称暗号化は、トランザクション内の関与者がトランザクション内の他の関与者だけでなくトランザクションの有効性を確認することを可能にするデジタル署名を提供するために使用される。例えば、あるノードは、メッセージをデジタル的に署名し得るし、別のノードは、関与者Aのデジタル署名に基づいてメッセージがそのノードによって送信されたことを確認し得る。デジタル署名はまた、メッセージが送信中に改竄されていないことを保証するために使用され得る。例えば、図2を再び参照すれば、関与者Aは、メッセージを関与者Bに送信しようとしている。関与者Aは、メッセージのハッシュを生成し、その後、その秘密鍵を使用して、ハッシュを暗号化して、暗号化したハッシュとしてデジタル署名を提供する。関与者Aは、デジタル署名をメッセージに付け加え、デジタル署名付きのメッセージを関与者Bに送信する。関与者Bは、関与者Aの公開鍵を使用してデジタル署名を復号し、ハッシュを抽出する。関与者Bは、メッセージをハッシュ化し、ハッシュを比較する。ハッシュが同一である場合には、関与者Bは、メッセージが確かに関与者Aからのものであり改竄されていないことを確認することができる。
【００５０】
図3は、本明細書の実施形態による、ブロックデータ符号化及びハッシュ化プロセス300の例を図示している。この例においては、ブロックチェーンノード302、304、306、および308の4つのブロックチェーンノードのブロックチェーンネットワークを記載している。符号化及びハッシュ化プロセス300を説明する一例としてブロックチェーンノード302を使用すれば、ブロックチェーンノード302は、ブロック312のブロック本体にブロックチェーンネットワークのブロックデータを記憶し得る。図示した例においては、ブロックデータをブロック100に記憶する。その後、ブロックチェーンノード302は、他のブロックチェーンノード304、306、および308とともにコンセンサスプロセスに関与し得る。コンセンサスプロセス中に、ブロックチェーンノード302は、プルーフ・オブ・ワーク(PoW)またはプルーフ・オブ・ステーク(PoS)などのコンセンサスアルゴリズムを行って、ブロックチェーン上に対応するブロックを作成し得る。
【００５１】
いくつかの実施形態においては、ブロックチェーンノード302は、1つまたは複数のアクセス頻度の低いブロックを特定し得る。実際には、作成され続けたブロックが長くなればなるほど、対応するブロックデータがスマートコントラクトの実行などのオペレーションに必要となる可能性はより低くなる。ブロックチェーンノード302は、ローカルに保存されているブロックはアクセス頻度が低いと、それらが所定の時間量の間にブロックチェーン上に作成されたヒストリックなブロックである場合に決定し得る。例えば、所定の時間量は、ブロックが生成される平均時間の1または2倍であり得る。いくつかの例においては、スマートコントラクトを実行するために所定の時間量の間にブロック内のブロックデータが取り出されなかった場合も、ブロックは、アクセス頻度が低いと決定され得る。
【００５２】
アクセス頻度の低いブロックを特定した後に、ブロックチェーンノード302は、アクセス頻度の低いブロックの各々のブロック本体においてブロックデータのECC 314を行い得る。ECCは、データに冗長ビット(冗長性とも称する)を追加することによって、信頼できない伝送を介したデータのエラーまたはロスを制御するために使用され得る。冗長ビットは、多くの元の情報ビットの複雑な関数であり得る。冗長性は、データの再送信を行うことなくデータのエラーまたはロスを訂正することを可能とし得る。元の情報が、符号化された出力に文字通り現れる場合もあれば現れない場合もある。符号化された出力に変更されていない元の情報を含んでいるECCコードを、システマティックECCコードと称する一方で、含まないものを、非システマティックECCコードと称する。ECCによって訂正することができるエラーまたは欠損ビットの最大比率は、ECCコードの設計によって決定される。したがって、異なる誤り訂正コードは、異なる状況に適したものとなる。一般に、より強いECCコードは、より多くの冗長性を含むため、コードのストレージ消費を増大することになり、符号化情報が送信される場合には通信効率を低減することになる。
【００５３】
一例として、ECCは、消失訂正符号であり得る。消失訂正符号を使用すれば、k個のシンボルのメッセージがn個のシンボルを有するコードワードに符号化され得る、ここで、kおよびnは自然数であり、k<nである。メッセージは、nシンボルのコードワードのサブセットから復元され得る。比率r=k/nは、消去コードのコードレートである。
【００５４】
ECCを使用することによって、ブロックチェーンノードの各々は、符号化ブロックデータの一部を記憶し、必要に応じて他のブロックチェーンノードから符号化ブロックデータの残りを取り出し得る。いくつかの実施形態においては、ECCは、ブロックチェーンノード302の計算リソースの利用率が所定の値(例えば、40%)未満である場合に行われ得る。そのため、ブロックチェーンノード302における他の計算演算との干渉を低減し得る。いくつかの実施形態においては、ECCは、ブロックチェーンノード302のストレージ領域の使用量が所定の割合以上である場合に行われ得る、その結果、ECCの後に、ストレージ領域から解放するために符号化ブロックデータのいくつかの一部が削除され得る。
【００５５】
再び、例としてブロック100を使用すれば、ブロックチェーンノード302がブロック100をアクセス頻度の低いブロックとして決定してECC 314を行ったと仮定すると、ECC符号化データは、データストレージスキームに基づいて複数のデータセットに分割され得る。データストレージスキームは、データがどこにおよび/またはどのようにしてブロックチェーンネットワーク内に記憶されることになるかを決定するコンピュータ実行可能命令のセットとして提供され得る。いくつかの例においては、データストレージスキームは、プルーフ・オブ・オーソリティを有する信頼できるノードによって提供され、ブロックチェーンノードによって合意され得る。いくつかの例においては、データストレージスキームは、コンセンサスを経てブロックチェーンノードによって合意され得る。一般的に、データストレージスキームは、ブロックチェーンネットワーク内のブロックチェーンノードの数に基づいて複数のデータセットに符号化データを分割するための1つまたは複数の所定のルールを含み得る。データストレージスキームはまた、ブロックチェーンノードの各々によって記憶またはハッシュ化されることになる複数のデータセットの1つまたは複数のデータセットの割り当てを含み得る。データ均一性を保証するために、データストレージスキームは、ブロックチェーンネットワークの各ブロックチェーンノードによって記憶されることになる少なくとも1つのデータセットの割り当てを含み得る。
【００５６】
図3に示した例においては、ブロック100の符号化ブロックデータを、Data1、Data2、Data3、およびVdata1の4つのデータセットに分割し、各々は、ブロックチェーンノード302、304、306、および308のうちの1つによって記憶されることになる。Vdata1は、誤り訂正のためのECCの冗長ビットを表し得る。Data1は、データストレージスキームに従って、ブロックチェーンノード302によって記憶されるように選択される。ハッシュ値Dhash2、Dhash3、およびVhash1をそれぞれ生成するために、Data2、Data3、およびVdata1を選択して別々にハッシュ化する316。本明細書の実施形態によれば、符号化データは、ブロックチェーンネットワークが5つ以上のノードを有している場合には、5つ以上のデータセットに分割され得る。いくつかの例においては、ブロックチェーンノードの各々は、2つ以上のデータセットを記憶し、他のノードによって記憶されるように割り当てられたデータセットの残りをハッシュ化し得る。
【００５７】
ここで図4を参照すれば、図4は、本明細書の実施形態による、データストレージスキーム400の例を図示している。上記で説明したように、Data1は、データストレージスキーム400に従って、ブロックチェーンノード302によって記憶されるように選択される。データストレージスキーム400に基づいて、ブロックチェーンノード304は、Data2を記憶し、Data1、Data3、およびVdata1を別々にハッシュ化して、ハッシュ値Dhash1、Dhash3、およびVhash1をそれぞれ生成する。ブロックチェーンノード306は、Data3を記憶し、Data1、Data2、およびVdata1を別々にハッシュ化して、ハッシュ値Dhash1、Dhash2およびVhash1をそれぞれ生成する。ブロックチェーンノード308は、Vdata1を記憶し、Data1、Data2、およびVdata3を別々にハッシュ化して、ハッシュ値Dhash1、Dhash2およびDhash3をそれぞれ生成する。
【００５８】
図3に戻って参照すれば、ハッシュ値が同一のブロックの符号化データセットに対応するため、それらはブロックのブロックIDによってインデックス化され得る。例えば、ブロックチェーンノード302は、ブロックIDが100であるブロック100に関連付けられたData1、Dhash1、Dhash2、およびVhash1をインデックス化し得る。そのため、ブロックチェーンノード302は、インデックス化されたブロックIDを使用して、ハッシュ値をそれらの対応するブロックにマッピングし得る。データセットおよびハッシュ値をインデックス化するより詳細な例については、図6の説明において述べる。
【００５９】
データストレージスキームに従って、ブロックチェーンノード302、304、306、および308に対して他のデータストレージスキームがなされ得ることは理解されよう。いくつかの例においては、ブロック100の符号化ブロックデータは、5つ以上のデータセットに分割され得る。データストレージスキームに従って、ブロックチェーンノード502、504、506、および508に対して他のデータストレージスキームがなされ得ることは理解されよう。
【００６０】
Dhash2、Dhash3、およびVhash1を生成および記憶した後に、ブロックチェーンノード302は、ストレージ領域を節約するためにストレージからData2、Data3、およびVdata1を削除し得る。そのため、各ブロックについて、ブロックチェーンノード302は、ブロックのすべての代わりに、1つのECC符号化データセット(すなわち、Data1)と3つのハッシュ値(すなわち、Dhash2、Dhash3、およびVhash1)とを記憶するだけである。そのため、ストレージ領域を大幅に低減することができる。ブロック100と同様に、符号化及びハッシュ化プロセスは、ブロックチェーンノード304、306、および308によって記憶されている他のアクセス頻度の低いブロックに対しても行われ得る。
【００６１】
スマートコントラクトを実行するためにブロック100のブロックデータが必要であるとブロックチェーンノード302が決定すると、データストレージスキームに従って、ブロックチェーンノード304、306、および308からData2、Data3、およびVdata1をそれぞれ取り出し得る。他のブロックチェーンノード304、306、および308からデータセットを取り出すために、ブロックチェーンノード302は、データストレージスキームに従って取り出されることになるデータセットに対応するハッシュ値を送信し得る。
【００６２】
例えば、Data2を取り出すために、ブロックチェーンノード302は、Dhash2をブロックチェーンノード304に送信し得る。記憶されたData2をブロックチェーンノード304が有している場合には、Dhash2を受信したことに応答してブロックチェーンノード302にData2を返送し得る。ブロックチェーンノード304からData2を受信した後に、ブロックチェーンノード302は、受信したデータセットをハッシュ化し、ハッシュ値をDhash2と比較し得る。ハッシュ値がDhash2と同一である場合には、受信したデータセットが信頼のおけるものであるとブロックチェーンノード302は決定し得る。さもなければ、受信したデータセットを信頼のおけないものとして決定する。受信したデータセットを信頼のおけないものとして決定すると、ブロックチェーンノード302は、不良ノード(またはByzantineノード)としてブロックチェーンノード304を報告し得る。ブロックチェーンノード302によって受信された信頼のおけないデータの割合がECCによって訂正することができるエラービットまたは欠損ビットの最大比率以下である場合には、ブロック100を、ローカルに記憶しているデータセットおよび受信したデータセットから復元し得る。
【００６３】
上記で説明したように、ブロックチェーンネットワークは、状態データ、ブロックデータ、およびインデックスデータなどの異なるタイプのデータを記憶し得る。状態データは、MPTまたは固定深度Merkleツリー(FDMT)などの連想状態ツリーとして記憶されることが多い。連想状態ツリーは、当然ながら、漸進的である。すなわち、既存の状態ツリーの値を更新するだけの代わりに新たなツリー構造を追加することによってアカウント状態の変更を反映している。したがって、ブロックがブロックチェーンに継続的に追加されると、連想状態ツリーのサイズは非常に大きくなり得る。FDMTストレージスキームの下では、状態データは、現在のブロックに関連付けられたカレント状態データおよびブロックチェーンのすべてのブロックに関連付けられたヒストリック状態データに分離され得る。FDMT内の大部分のデータは、使用頻度の低いヒストリック状態データである。コンセンサスノードごとにすべてのヒストリック状態データを記憶することは、ストレージリソース使用量の観点から全くもって非効率であり得る。
【００６４】
いくつかの実施形態においては、ブロックデータを符号化および共有することと同様に、消失訂正符号などのECCは、ヒストリック状態データを符号化するために使用され得る。ブロックチェーンネットワーク内の各コンセンサスノードは、ヒストリック状態データの一部のみを記憶し、他のノードからヒストリック状態データの残りを取り出して、ストレージ消費を低減している。元のヒストリック状態データの代わりにECC符号化ヒストリック状態データを共有することによって、信頼のおけないデータが存在するまたはデータロスが生じている場合でさえ、信頼のおけないデータまたはデータロスの割合がECCによって訂正することができるエラービットまたは欠損ビットの最大比率以下である限り、元のヒストリック状態データを復元することができる。
【００６５】
図5は、本明細書の実施形態による、ブロックデータ符号化及びハッシュ化プロセス500の別の例を図示している。この例においては、ブロックチェーンノード502、504、506、および508の4つのブロックチェーンノードのブロックチェーンネットワークを記載している。符号化及びハッシュ化プロセス500を説明する一例としてブロックチェーンノード502を使用すれば、新規ブロックデータがブロック512に追加されると、ブロックチェーンノード502は、ECC 514を行って、ブロックデータを符号化し得る。図3の説明において述べた符号化及びハッシュ化プロセス300と比較すると、ブロックチェーンノード502は、ブロックデータに対して、ブロックに書き込まれるときに、ECCを行っている。そのため、ブロックチェーンノード502は、ブロックのすべてを記憶する必要はないが、代わりに、ECC符号化ブロックデータの選択した一部を記憶し、データストレージスキームに基づいて符号化ブロックデータの残りに対応する値をハッシュ化し得る。この符号化及びハッシュ化プロセス500は、ブロックチェーンノード502が少ないディスク領域を有する場合のシナリオに特に適切したものとなり得る。
【００６６】
いくつかの実施形態においては、ブロックとしてデータを記憶する代わりに、ブロックチェーンノード502は、ログ先行書き込み(WAL)ファイルまたは他の同様のロールフォワードジャーナルファイルを記憶し得る。WALファイルは、ブロックチェーンノード502によってコミットされたがまだ記憶されていないブロックデータを記録し得る。WALファイルを使用すれば、ブロックチェーンデータの変更を別個のWALファイルに書き込むことを可能にしつつ、元のブロックチェーンデータをデータベースファイルに保存し得る。元のブロックチェーンデータに全く書き込むことなく、変更をロールフォワードするコミットは発生し得る。変更をWALファイルにコミットしつつ、このアレンジメントがブロックチェーンデータの継続したオペレーションを可能にする。符号化及びハッシュ化プロセス500を介してなされる変更を記憶するためにWALファイルを使用することによって、ブロックチェーンノード502は、適宜バックグラウンドにおいてECCを行いつつ、コンセンサスのためのブロックデータを有していることを示し得る。そのため、ECCは、コンセンサスプロセスの計算効率またはレイテンシの影響を低減するために、ブロックチェーンノード302の計算リソースの利用率が低いときに行われ得る。
【００６７】
いくつかの実施形態においては、ブロックチェーンノード502は、バッファにブロックデータを記憶し得る。ブロックチェーンノード502は、データのサイズが所定の閾値より大きい場合またはバッファがフルである場合に、バッファに記憶されているブロックデータに対してECCを行い得る。ECCを行った後に、ブロックチェーンノード502は、以下の説明で記載しているように、符号化及びハッシュ化プロセス500に続いて、符号化ブロックデータおよびハッシュ値を記憶し得る。
【００６８】
再び例としてブロック100を使用すれば、ECCを行った後に、符号化ブロックデータをデータストレージスキームに基づいて複数のデータセットに分割し得る。図3の説明において述べた例と同様に、ブロック100の符号化ブロックデータを、Data1、Data2、Data3、およびVdata1の4つのデータセットに分割し得るし、各々は、ブロックチェーンノード502、504、506、および508のうちの1つによって記憶されることになる。Vdata1は、ECCの冗長ビットを表し得る。Data1は、データストレージスキームに従って、ブロックチェーンノード502によって記憶されるように選択される。ハッシュ値Dhash2、Dhash3、およびVhash1をそれぞれ生成するために、Data2、Data3、およびVdata1を選択して別々にハッシュ化516する。
【００６９】
ハッシュ値は、ハッシュ値の対応するブロックのブロックIDによってインデックス化され得る。例えば、ブロックチェーンノード502は、ブロックIDが100であるブロック100に関連付けられたData1、Dhash1、Dhash2、およびVhash1をインデックス化し得る。そのため、ブロックチェーンノード502は、インデックス化されたブロックIDを使用して、ハッシュ値をそれらの対応するブロックにマッピングし得る。データセットおよびハッシュ値をインデックス化するより詳細な例については、図6の説明において述べる。
【００７０】
データストレージスキームに従って、1つまたは複数のブロックチェーンノード502、504、506、および508に対して他のデータストレージスキームがなされ得ることは理解されよう。例えば、ブロック100の符号化ブロックデータは、5つ以上のデータセットに分割され得る。ブロックチェーンノード502、504、506、および508の各々は、2つ以上のデータセットを記憶し、他のノードによって記憶されているデータセットの残りをハッシュ化し得る。
【００７１】
Dhash2、Dhash3、およびVhash1を生成した後に、ブロックチェーンノード502は、Data1、Dhash2、Dhash3、およびVhash1を記憶し、ストレージ領域を節約するためにストレージからData2、Data3、およびVdata1を削除し得る。そのため、ブロックチェーンの各ブロックについて、ブロックチェーンノード502は、ストレージ領域を節約するために、元のブロックデータの代わりに、ECC符号化ブロックデータの1つのデータセット(すなわち、Data1)と3つのハッシュ値(すなわち、Dhash2、Dhash3、およびVhash1)とを記憶するだけである。スマートコントラクトを実行するためにブロック100のブロックデータが必要であるとブロックチェーンノード502が決定すると、データストレージスキームに従って、ブロックチェーンノード504、506、および508からData2、Data3、およびVdata1をそれぞれ取り出し得る。
【００７２】
他のブロックチェーンノード504、506、および508からデータセットを取り出すために、ブロックチェーンノード502は、データストレージスキームに従って取り出すことになるデータセットに対応するハッシュ値を送信し得る。例えば、Data2を取り出すために、ブロックチェーンノード502は、Dhash2をブロックチェーンノード504に送信し得る。記憶されたData2をブロックチェーンノード504が有している場合には、Dhash2を受信したことに応答してブロックチェーンノード502にData2を返送し得る。ブロックチェーンノード504からData2を受信した後に、ブロックチェーンノード502は、受信したデータセットをハッシュ化し、ハッシュ値をDhash2と比較し得る。ハッシュ値がDhash2と同一である場合には、受信したデータセットが信頼のおけるものであるとブロックチェーンノード502は決定し得る。さもなければ、受信したデータセットを信頼のおけないものとして決定し得る。受信したデータセットを信頼のおけないものとして決定すると、ブロックチェーンノード502は、不良ノード(またはByzantineノード)としてブロックチェーンノード504を報告し得る。ブロックチェーンノード502によって受信された信頼のおけないデータの割合がECCによって訂正することができるエラービットまたは欠損ビットの最大比率以下である場合には、ブロック100を、ローカルに記憶しているデータセットおよび受信したデータセットから復元し得る。
【００７３】
上記で説明したように、符号化及びハッシュ化プロセスを行うことによって、ブロックチェーンデータをECC符号化し、複数のデータセットに分割し得る。ストレージ領域を節約するために、各ブロックチェーンノードは、データストレージスキームに基づいて、複数のデータセットのうちの1つまたは複数を記憶し、データセットの残りの値をハッシュ化し得る。保存されているデータセットおよびハッシュ値は、ブロックチェーンノードが元のデータを復元するべく他のノードからデータセットを取り出すために、ブロックIDでインデックス化され得る。
【００７４】
図6は、本明細書の実施形態による、符号化データセットをインデックス化するためのプロセス600の例を図示している。プロセス600は、ブロックチェーンネットワークのブロックチェーンノードによって行われ得る。ブロックチェーンネットワークは、Node1、Node2、Node3、およびNode4で示した、4つのブロックチェーンノードを含み得る。図示した例においては、ブロック91〜100は、ECC符号化データセットをインデックス化するためのプロセス699を図示するために使用している。ブロック91〜100は、図3の説明において述べたように、アクセス頻度の低いブロックであり得る。いくつかのケースにおいては、ブロック91〜100はまた、ブロック91〜100に対応するFDMT構造下でヒストリックな状態データを表し得る。そのようなケースにおいては、プロセス600は、符号化されたヒストリックな状態データから分割されたデータセットをインデックス化するために行われ得る。
【００７５】
いくつかの実施形態においては、ブロックチェーンノードは、ブロック91〜100の各々に対してECC 604を行って、ECC符号化ブロック602を生成し得る。ブロックチェーンノードは、その後、ECC符号化ブロック602の各々を、Data1、Data2、Data3、およびVdata1の4つのデータセット608に分割し得るし、ここで、Vdata1は、誤り訂正のための冗長ビットに対応する。ECC符号化ブロック602の各々の分割は、図3および図4の説明において述べたように、データストレージスキームに基づいて行われ得る。データストレージスキームは、どのようにしてECC符号化ブロック602をデータセットに分割すべきかを提供し得る。データストレージスキームはまた、ブロックチェーンノードにデータセットの割り当てを提供し得る。
【００７６】
データセット608がブロック91〜100の各々に対して生成された後に、ブロックチェーンノードは、インデックステーブル610を作成することによって、データセット608のインデックス化606を行い得る。インデックステーブル610は、ブロックチェーンネットワークのブロックチェーンノードによって合意されたデータストレージスキームに基づいて生成され得る。
【００７７】
インデックステーブルは、データストレージスキームの影響を受けるブロックのブロックIDおよびブロックチェーンノードの各々によって記憶されることになるデータセットを含み得る。例えば、インデックステーブル610は、ブロック91〜100のデータストレージスキームを示し得る。ECC符号化データは、Data1、Data2、Data3、およびVdata1を含む4つのデータセットに分割される。ブロック91〜100の各々について、Node1は、Data1を記憶し、Node2は、Data2を記憶し、Node3は、Data3を記憶し、Node4は、Vdata1を記憶している。したがって、ブロックのすべてを記憶する代わりに、各ブロックチェーンノードは、インデックステーブル610に従って各符号化ブロックの1つのデータセットだけを記憶することになる。
【００７８】
図7は、本明細書の実施形態による、データの取り出しおよび復元のためのプロセス700の例を図示している。スマートコントラクトを実行するためにブロックまたは状態データをクライアントデバイス710が取得する必要がある場合には、ブロックチェーンからブロックデータまたは状態データを取得するためにブロックチェーンノード(例えば、Node1 720a)に要求を送信し得る。要求を受信すると、Node1は、要求されたデータを含む1つまたは複数のブロックを特定し得る。要求されたデータがブロック100に含まれていると仮定すれば、Node1 720aは、ブロック91〜100のためのデータストレージスキームを示すインデックステーブル714を読み込み得る。インデックステーブル714によれば、Node1は、Data1およびVhash1を記憶している。Node2 720bは、Data2を記憶し、Node3 720cは、Data3を記憶し、Node4 720dは、Vdata1を記憶している。ECC符号化ブロック100全体を収集するために、Node1は、その後、Node2 720bからData2、Node3 720cからData3、およびNode4 720dからVdata1を取得し得る。Data2、Data3、およびVdata1を取得するために、Node1 720aは、対応するブロックチェーンノードにデータセットのハッシュ値を含む要求を送信し得る。例えば、Node1 720aからData2のハッシュ値を受信することによって、Node2 720bは、Data2が要求されていると決定し、Node1 720aにそれを返信し得る。
【００７９】
Node2 720b、Node3 720c、およびNode4 720dからデータセットを受信した後に、Node1 720aは、受信したデータセットのハッシュ値を生成し、それらをハッシュテーブル716に記憶されているハッシュ値と比較することによって受信したデータセットを検証し得る。ハッシュテーブル716は、データセットとそれらのハッシュ値との間のマッピング関係、すなわち、Data2とそのハッシュ値Dhash2との間のマッピング関係、Data3とそのハッシュ値Dhash3との間のマッピング関係、およびVdata1とそのハッシュ値Vhash1との間のマッピング関係を示している。Node2 720bから受信したデータセットのハッシュ値がDhash2と一致し、Node3 720cから受信したデータセットのハッシュ値がDhash3と一致し、Node4から受信したデータセットのハッシュ値がVhash1と一致している場合には、Node1 720aは、受信データが信頼のおけるものであると決定し得る。Node1 720aは、それが記憶しているData1と受信データ(すなわち、Data2、Data3、およびVdata1)を結合して、ECC符号化ブロック100を形成し得る。Node1 720は、その後、ECC符号化ブロックを復号して、ブロック100を復元し得る。ハッシュ値のいずれかが一致しなかった場合には、Node1 720aは、データセットを送信した対応するブロックチェーンノードが不良ノードであると報告し得る。ブロック100を復元した後に、Node1 720aは、要求されたブロックまたはブロック100における状態データをクライアントデバイス710に返信し得る。
【００８０】
図8は、ブロックチェーンデータの通信および共有をするためのプロセス800の例のフローチャートである。便宜上、プロセス800は、ブロックチェーンノードによって行われるものとして説明することにする。ブロックチェーンノードは、コンピュータまたは1つまたは複数のロケーションに位置する1つまたは複数のコンピュータのシステムであり、本明細書に従って適切にプログラムされ得る。例えば、適切にプログラムされた、コンピューティングシステム内のコンピューティングデバイス、例えば、図1のコンピューティングシステム106、108は、プロセス800を行うブロックチェーンノードであり得る。
【００８１】
802において、ブロックチェーンノードが、ブロックチェーンの複数のブロックに対してECCを行うことに基づいて複数の符号化ブロックを生成する。いくつかの例においては、1つまたは複数のブロックは、所定の時間量の間にブロックチェーンに付加されたアクセス頻度の低いブロックである。いくつかの例においては、ECCは、ブロックチェーンノードの計算リソースの利用率が所定の値以下であるまたはブロックチェーンノードのストレージ領域の使用量が所定の割合以上である場合に、行われる。いくつかの例においては、ECCは、冗長ビットを1つまたは複数のブロックに追加することによって行われる。いくつかの例においては、ECCは、消失訂正符号である。
【００８２】
804において、複数の符号化ブロックの各符号化ブロックについて、ブロックチェーンノードが、複数のブロックに関連付けられたデータストレージスキームに基づいて複数のデータセットに符号化ブロックを分割する、ここで、データストレージスキームは、複数のブロックチェーンノードに複数のデータセットの割り当てを提供する。
【００８３】
806において、ブロックチェーンノードが、データストレージスキームにおいて提供された割り当てに基づいて複数のデータセットの少なくとも1つを記憶する。
【００８４】
808において、ブロックチェーンノードが、それぞれのデータセットが記憶されている複数のブロックチェーンノードの各々に、複数のデータセットの各々をインデックス化するインデックスを提供する。いくつかの例においては、インデックスは、データセットのデータセットIDとデータセットが記憶されているブロックチェーンノードのノードIDとの間の対応付けを提供する。いくつかの例においては、インデックスは、データストレージスキームが関連付けられている複数のブロックに対応する複数のブロックIDを提供する。
【００８５】
いくつかの例においては、プロセス800は、複数のデータセットの少なくとも1つ以外の複数のデータセットの残余をハッシュ化して複数のデータセットの残余に対応するハッシュ値を生成するステップと、ハッシュ値を記憶するステップと、1つまたは複数のブロックを削除するステップとをさらに含む。
【００８６】
いくつかの例においては、プロセス800は、コンピューティングデバイスからブロックチェーンデータについての要求を受信するステップと、ブロックチェーンデータが1つまたは複数のブロックに含まれていることを決定するステップと、複数のデータセットの残余を取り出すために、インデックスに基づいて、ブロックチェーンネットワークのブロックチェーンノードの残余にハッシュ値を送信するステップとをさらに含む。
【００８７】
いくつかの例においては、プロセス800は、ブロックチェーンノードの残余の各々から少なくとも1つのデータセットを受信するステップと、少なくとも1つのデータセットをハッシュ化してブロックチェーンノードの残余の各々に対応する少なくとも1つのハッシュ値を生成するステップと、少なくとも1つのハッシュ値がブロックチェーンノードに記憶されているかどうかを決定するステップとをさらに含む。
【００８８】
いくつかの例においては、プロセス800は、少なくとも1つのハッシュ値がブロックチェーンノードに記憶されていないと決定したことに応答して、少なくとも1つのハッシュ値に対応する少なくとも1つのデータセットが受信されるブロックチェーンノードを決定するステップと、不良ノードとしてブロックチェーンノードを報告するステップとをさらに含む。
【００８９】
いくつかの例においては、プロセス800は、ブロックチェーンノードの残余の各々に対応する少なくとも1つのハッシュ値がブロックチェーンノードに記憶されていると決定したことに応答して、ブロックチェーンノードに記憶されている複数のデータセットの少なくとも1つと、ブロックチェーンノードの残余の各々から受信した少なくとも1つのデータセットとに基づいて、1つまたは複数のブロックを復号するステップをさらに含む。
【００９０】
図9は、本明細書の実施形態による、装置900のモジュールの例の図である。
【００９１】
装置900は、ブロックチェーンデータを通信および共有するように構成されたブロックチェーンノードの実施形態の一例であり得る。装置900は、上記で説明した実施形態に対応するものであり、装置900は、ブロックチェーンの1つまたは複数のブロックに対してECCを実行することによって1つまたは複数の符号化ブロックを生成する、生成モジュール902と、複数のブロックに関連付けられたデータストレージスキームに基づいて複数のデータセットに符号化ブロックを分割する、分割モジュール904であって、データストレージスキームは、複数のブロックチェーンノードに複数のデータセットの割り当てを提供する、分割モジュール904と、データストレージスキームにおいて提供された割り当てに基づいて複数のデータセットのうちの少なくとも1つを記憶する、記憶モジュール906と、1つまたは複数のブロックのためのインデックスを提供する、インデックス化モジュール908であって、インデックスは、それぞれのデータセットが記憶されているブロックチェーンノードに対する複数のデータセットの各々をインデックス化する、インデックス化モジュール908とを含む。
【００９２】
随意的な実施形態においては、インデックスは、データセットのデータセットIDとデータセットが記憶されているブロックチェーンノードのノードIDとの間の対応付けを提供する。
【００９３】
随意的な実施形態においては、インデックスは、データストレージスキームが関連付けられている複数のブロックに対応する複数のブロックIDを提供する。
【００９４】
随意的な実施形態においては、装置900は、複数のデータセットの少なくとも1つ以外の複数のデータセットの残余をハッシュ化して複数のデータセットの残余に対応するハッシュ値を生成するステップと、ハッシュ値を記憶するステップと、1つまたは複数のブロックを削除するステップとをさらに含む。
【００９５】
随意的な実施形態においては、装置900は、コンピューティングデバイスからブロックチェーンデータについての要求を受信するステップと、ブロックチェーンデータが1つまたは複数のブロックに含まれていることを決定するステップと、複数のデータセットの残余を取り出すために、インデックスに基づいて、ブロックチェーンネットワークのブロックチェーンノードの残余にハッシュ値を送信するステップとをさらに含む。
【００９６】
随意的な実施形態においては、装置900は、ブロックチェーンノードの残余の各々から少なくとも1つのデータセットを受信するステップと、少なくとも1つのデータセットをハッシュ化してブロックチェーンノードの残余の各々に対応する少なくとも1つのハッシュ値を生成するステップと、少なくとも1つのハッシュ値がブロックチェーンノードに記憶されているかどうかを決定するステップとをさらに含む。
【００９７】
随意的な実施形態においては、装置900は、少なくとも1つのハッシュ値がブロックチェーンノードに記憶されていないと決定したことに応答して、少なくとも1つのハッシュ値に対応する少なくとも1つのデータセットが受信されるブロックチェーンノードを決定するステップと、不良ノードとしてブロックチェーンノードを報告するステップとをさらに含む。
【００９８】
随意的な実施形態においては、装置900は、ブロックチェーンノードの残余の各々に対応する少なくとも1つのハッシュ値がブロックチェーンノードに記憶されていると決定したことに応答して、ブロックチェーンノードに記憶されている複数のデータセットの少なくとも1つと、ブロックチェーンノードの残余の各々から受信した少なくとも1つのデータセットとに基づいて、1つまたは複数のブロックを復号するステップとをさらに含む。
【００９９】
随意的な実施形態においては、1つまたは複数のブロックは、所定の時間量の間に作成されたヒストリックなブロックである。
【０１００】
随意的な実施形態においては、ECCは、ブロックチェーンノードの計算リソースの利用率が所定の値以下であるまたはブロックチェーンノードのストレージ領域の使用量が所定の割合以上である場合に、行われる。
【０１０１】
随意的な実施形態においては、ECCは、複数のブロックに冗長ビットを追加することによって行われる消失訂正符号である。
【０１０２】
随意的な実施形態においては、複数のブロックは、所定の時間量の間にブロックチェーンに付加される、アクセス頻度の低いブロックである。
【０１０３】
上記の実施形態において示したシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用して実装され得る、または、ある機能を有する製品を使用して実装され得る。典型的な実施デバイスは、コンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、セルラ電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであり得る。
【０１０４】
装置内の各モジュールの機能およびロールについての実施プロセスについては、上記の方法における対応するステップについての実施プロセスを参照されたい。簡潔にするために詳細はここでは省略する。
【０１０５】
装置の実施形態は方法の実施形態に基本的に対応しているため、関連する部分については、方法の実施形態における関連する説明を参照されたい。上記で説明した装置の実施形態は一例に過ぎない。別個の部分として説明したモジュールは、物理的に分離され得るしまたはされ得ない。モジュールとして図示した部分は、物理ユニットであり得るしまたはあり得ないし、1つの位置にあり得るし、または多数のネットワークモジュールに分散され得る。モジュールの一部またはすべては、本明細書のソリューションの目的を達成するための実際の要求に基づいて選択され得る。当業者は、創造的努力無しで本出願の実施形態を理解および実施できよう。
【０１０６】
図9を再び参照すれば、内部機能モジュールおよびブロックチェーンノードの構造を図示しているものとして解釈できよう。本質的な実行の主体は、電子デバイスであり得るし、電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するように構成される、1つまたは複数のコンピュータ可読メモリとを含む。いくつかの実施形態においては、1つまたは複数のコンピュータ可読メモリは、1つまたは複数のプロセッサに結合されるとともに、本明細書において説明しているようなアルゴリズム、方法、関数、プロセス、フロー、およびプロシージャを行うように1つまたは複数のプロセッサによって実行可能なプログラミング命令を記憶している。本明細書はまた、1つまたは複数のプロセッサに結合されるとともに命令を記憶している1つまたは複数の非一時的コンピュータ可読記憶媒体を提供しており、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供した方法の実施形態による動作を行わせる。
【０１０７】
本明細書は、本明細書で提供している方法を実施するためのシステムをさらに提供している。システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合されるとともに命令を記憶しているコンピュータ可読記憶媒体とを含み、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供した方法の実施形態による動作を行わせる。
【０１０８】
本明細書において説明した発明特定事項ならびにアクションおよび動作の実施形態は、本明細書において開示した構造およびそれらの構造的均等物を含む、デジタル電子回路の形で、有形に具現化されたコンピュータソフトウェアまたはファームウェアの形で、ハードウェアの形で、または、それらのうちの1つまたは複数の組合せの形で実装され得る。本明細書において説明した発明特定事項の実施形態は、データ処理装置による実行のためにまたはデータ処理装置の処理を制御するために、コンピュータプログラムキャリア上に符号化された、例えばコンピュータプログラム命令の1つまたは複数のモジュールといった1つまたは複数のコンピュータプログラムとして実装され得る。例えば、コンピュータプログラムキャリアは、そこに符号化または記憶されている命令を有する1つまたは複数のコンピュータ可読記憶媒体を含み得る。キャリアは、磁気ディスク、光磁気ディスク、もしくは光ディスク、ソリッドステートドライブ、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、または他のタイプの媒体などといった、有形非一時的コンピュータ可読媒体であり得る。あるいはまたは加えて、キャリアは、データ処理装置による実行に適した受信機装置への伝送のために情報を符号化するために生成された、人為的に生成した伝搬信号、例えば、機械生成された電気信号、光信号、または電磁気信号であり得る。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ回路基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つまたは複数の組合せであり得るもしくは一部であり得る。コンピュータ記憶媒体は伝搬信号ではない。
【０１０９】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも称し得るまたは記述し得る、コンピュータプログラムは、コンパイル型もしくはインタプリタ型言語、または宣言型もしくは手続き型言語を含む、任意の形式のプログラミング言語で書かれ得るし、スタンドアロンプログラムとして、またはモジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境における実行に適した他のユニットとして、といったことを含む任意の形式で、デプロイされ得る。環境は、1つまたは複数のロケーションにおいてデータ通信ネットワークによって相互接続される1つまたは複数のコンピュータを含み得る。
【０１１０】
コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、必ずしも必要ではない。コンピュータプログラムは、例えば、マークアップ言語ドキュメントに記憶されている1つまたは複数のスクリプトといった、他のプログラムまたはデータを保持するファイルの一部に、当該プログラム専用の単一のファイルに、または、例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイルといった、複数の協調ファイルに、記憶され得る。
【０１１１】
コンピュータプログラムの実行のためのプロセッサは、例として、汎用および特殊用途マイクロプロセッサの両方、ならびに任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般的に、プロセッサは、プロセッサに結合されている非一時的コンピュータ可読媒体からデータだけでなく実行のためのコンピュータプログラムの命令も受信することになる。
【０１１２】
「データ処理装置」という用語は、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、およびマシンを含む。データ処理装置は、特殊用途ロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィック処理ユニット)を含み得る。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組合せを構成するコードを含み得る。
【０１１３】
本明細書において説明したプロセスおよびロジックフローは、1つまたは複数のコンピュータプログラムを実行し、入力データを処理して出力を生成することによって処理を行う、1つまたは複数のコンピュータもしくはプロセッサによって行われ得る。プロセスおよびロジックフローはまた、例えばFPGA、ASIC、またはGPUといった特殊用途ロジック回路によって、または、特殊用途ロジック回路と1つまたは複数のプログラマブルコンピュータとの組合せによって、実装され得る。
【０１１４】
コンピュータプログラムの実行に適したコンピュータは、汎用もしくは特殊用途マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理ユニットに基づき得る。一般的に、中央処理ユニットは、リードオンリーメモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信することになる。コンピュータの要素は、命令を実行するための中央処理ユニットと、命令およびデータを記憶するための1つまたは複数のメモリデバイスとを含み得る。中央処理ユニットおよびメモリは、特殊用途ロジック回路によって補完され得る、またはそれに組み込まれ得る。
【０１１５】
一般的に、コンピュータは、1つまたは複数の記憶デバイスを含むことになる、または、1つまたは複数の記憶デバイスからデータを受信もしくは1つまたは複数の記憶デバイスにデータを送信することが動作可能なように結合されることになる。記憶デバイスは、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスク、ソリッドステートドライブ、または任意の他のタイプの非一時的コンピュータ可読媒体であり得る。しかしながら、コンピュータは、そのようなデバイスを必ずしも有する必要はない。そのため、コンピュータは、ローカルおよび/またはリモートにある1つまたは複数のメモリなどといった、1つまたは複数の記憶デバイスに結合され得る。例えば、コンピュータは、コンピュータの統合コンポーネントである1つまたは複数のローカルメモリを含み得る、または、コンピュータは、クラウドネットワークにある1つまたは複数のリモートメモリに結合され得る。さらに、コンピュータは、数例挙げるとすれば、例えば、モバイル電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、Global Positioning System(GPS)受信機、または例えばユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスといった別のデバイスに組み込まれ得る。
【０１１６】
コンポーネントは、直接または1つまたは複数の中間コンポーネントを介して互いに電気的または光学的などといった通信可能なように接続することによって互いに「結合」され得る。コンポーネントは、コンポーネントの1つが他のものに統合されている場合も互いに「結合」され得る。例えば、プロセッサ(例えば、L2キャッシュコンポーネント)に統合されている記憶コンポーネントは、プロセッサに「結合」される。
【０１１７】
ユーザとのインタラクションを提供するために、本明細書において説明した発明特定事項の実施形態は、ユーザに情報を表示するための、例えば、LCD(液晶ディスプレイ)モニタといった、表示デバイスと、例えば、キーボード、および例えば、マウス、トラックボールまたはタッチパッドなどのポインティングデバイスといった、ユーザがコンピュータに入力を提供することができる、入力デバイスとを有するコンピュータ上で実装され得る、または、そのようなコンピュータと通信するように構成され得る。同様に、他の種類のデバイスがユーザとのインタラクションを提供するために使用され得る。例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックといった任意の形式の感覚フィードバックであり得るし、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスにドキュメントを送信することおよびユーザによって使用されるデバイスからドキュメントを受信することによって、例えば、ユーザのデバイス上のウェブブラウザから受信した要求に応答してウェブブラウザにウェブページを送信することによって、または、例えばスマートフォンもしくは電子タブレットといったユーザデバイス上で動作するアプリとのインタラクションを行うことによって、ユーザとのインタラクションを行い得る。また、コンピュータは、メッセージングアプリケーションを動作する例えばスマートフォンといったパーソナルデバイスにテキストメッセージまたは他の形式のメッセージを送信し、その返信としてユーザから応答メッセージを受信することによって、ユーザとのインタラクションを行い得る。
【０１１８】
本明細書は、システム、装置、およびコンピュータプログラムコンポーネントに関連して「ように構成される」という用語を使用している。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータのシステムとは、処理においてシステムに処理またはアクションを行わせるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがインストールされているシステムを意味する。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータプログラムとは、データ処理装置によって実行されると装置に処理またはアクションを行わせる命令を含む1つまたは複数のプログラムを意味する。特定の処理またはアクションを行うように構成される特殊用途ロジック回路とは、処理またはアクションを行う電子ロジックを有する回路を意味する。
【０１１９】
本明細書は多くの特定の実施形態の詳細を含んでいるが、これらを、特許請求の範囲そのものによって定義される、請求しているものについての範囲に対する限定として解釈すべきではなく、むしろ特定の実施形態に固有であり得る特徴の説明として解釈すべきである。別個の実施形態に即して本明細書において説明したある特徴もまた、組み合わせることで単一の実施形態で実現され得る。反対に、単一の実施形態に即して説明した様々な特徴もまた、別々に複数の実施形態でまたは任意の適切なサブコンビネーションで実現され得る。さらに、ある組合せで動作するものとして特徴を上記で説明している場合があるが、たとえ最初にそのように主張していたとしても、いくつかの例においては、主張した組み合わせのうちの1つまたは複数の特徴を組合せから削除し得るし、主張したものをサブコンビネーションまたはサブコンビネーションの変形とし得る。
【０１２０】
同様に、処理を特定の順序で図面に図示するとともに特許請求の範囲に記載しているが、このことを、示した特定の順序でもしくは一連の順序でそのような処理を行う必要があると理解すべきではないし、または、望ましい結果を達成するために図示した処理のすべてを行う必要があると理解すべきではない。ある環境においては、マルチタスク処理および並行処理が有利となり得る。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離がすべての実施形態においてそのような分離を必要とすると理解すべきではなく、説明したプログラムコンポーネントおよびシステムは一般的に単一のソフトウェア製品に一緒に統合され得るまたは複数のソフトウェア製品にパッケージ化され得ると理解されたい。
【０１２１】
発明特定事項の特定の実施形態を説明してきた。他の実施形態も以下の特許請求の範囲の範囲内にある。例えば、特許請求の範囲に記載のアクションは、異なる順序で行われ得るし、それでも望ましい結果を達成し得る。一例として、添付の図面に図示したプロセスは、望ましい結果を達成するために示した特定の順序または一連の順序を必ずしも必要とするわけではない。いくつかの例においては、マルチタスク処理およびパラレル処理が有利となり得る。
【符号の説明】
【０１２２】
110  ネットワーク
202  関与者A
204  関与者B
206  関与者C
302  ブロックチェーンノード
304  ブロックチェーンノード
306  ブロックチェーンノード
308  ブロックチェーンノード
314  誤り訂正符号
316  選択的データハッシュ化
502  ブロックチェーンノード
504  ブロックチェーンノード
506  ブロックチェーンノード
508  ブロックチェーンノード
514  誤り訂正符号
516  選択的データハッシュ化
604  ECC
606  データ分割
610  インデックステーブル
710  クライアントデバイス
714  インデックステーブル
716  ハッシュテーブル
720a  Node1
720c  Node3
720d  Node2
720d  Node4
902  生成モジュール
904  分割モジュール
906  記憶モジュール
908  インデックス化モジュール
【図１】
2021528883.tif 000003
【図２】
2021528883.tif 000004
【図３】
2021528883.tif 000005
【図４】
2021528883.tif 000006
【図５】
2021528883.tif 000007
【図６】
2021528883.tif 000008
【図７】
2021528883.tif 000009
【図８】
2021528883.tif 000010
【図９】
2021528883.tif 000011
【国際調査報告】
2021528883.tif 000012
2021528883.tif 000013