(57)【要約】  ブロックチェーンデータを記憶するための方法、システム、およびコンピュータ記憶媒体上にエンコードされたコンピュータプログラムを含む装置が、本明細書において開示される。方法のうちの1つは、許可型ブロックチェーンネットワークに通信可能に結合されたクライアントノードによって発行されたトランザクションを受信することと、トランザクションの検証およびコンセンサスの実行のためにトランザクションを複数の検証ノードに送信することと、複数の検証ノードによるトランザクションの少なくとも一部分のコンセンサスに基づいて生成された、1つまたは複数のブロックを受信することと、1つまたは複数のブロックを、ECCを使用してエンコードして、1つまたは複数のエンコードブロックを生成することと、1つまたは複数のエンコードブロックの各エンコードブロックについて、エンコードブロックを1つまたは複数のブロックに関連するデータ記憶方式に基づいて複数のデータセットに分割することとを含む。
2021528885.tif 000002
【特許請求の範囲】
【請求項１】
許可型ブロックチェーンネットワークの非検証ノード(NVN)によってブロックチェーンデータを処理するための、コンピュータにより実施される方法であって、
許可型ブロックチェーンネットワークに通信可能に結合されたクライアントノードによって発行されたトランザクションを受信するステップと、
前記トランザクションの検証およびコンセンサスの実行のために前記トランザクションを複数の検証ノードに送信するステップと、
前記複数の検証ノードによる前記トランザクションの少なくとも一部分のコンセンサスに基づいて生成された、1つまたは複数のブロックを受信するステップと、
前記1つまたは複数のブロックを、誤り訂正コーディング(ECC)を使用してエンコードして、1つまたは複数のエンコードブロックを生成するステップと、
前記1つまたは複数のエンコードブロックの各エンコードブロックについて、
前記エンコードブロックを前記1つまたは複数のブロックに関連するデータ記憶方式に基づいて複数のデータセットに分割するステップであって、前記データ記憶方式が前記複数のデータセットの複数の非検証ノード(NVN)への割当てを規定する、ステップと、
前記データ記憶方式において規定された前記割当てに基づいて前記複数のデータセットのうちの少なくとも1つを記憶するステップと
を含む、方法。
【請求項２】
前記NVNを除く、前記複数のNVNのうちの残りから、前記データ記憶方式において規定された前記割当てに基づいて対応するNVNによって前記複数のデータセットのうちの少なくとも1つが記憶されている、という確認を受信するステップと、
前記複数の検証ノードに、前記1つまたは複数のブロックを削除するための通知を送信するステップと
をさらに含む、請求項1に記載の方法。
【請求項３】
前記NVNが、ブロックチェーンデータを階層化ストレージ内に記憶し、それによって、古いブロックが前記階層化ストレージのティア内に記憶されるのと比べて同じかまたは高速の前記階層化ストレージのティア内に新しいブロックが記憶される、請求項1に記載の方法。
【請求項４】
前記クライアントノードから、あるトランザクションが前記1つまたは複数のブロック内に含まれているかどうかを照合せよとの要求を受信するステップと、
インデックスに基づいて、前記複数のNVNのうちの残りから前記1つまたは複数のブロックに関連するデータセットを取り出すステップと、
前記データセットに基づいて、前記1つまたは複数のブロックをデコードするステップと、
前記1つまたは複数のブロック内に前記あるトランザクションが含まれている場合に、前記あるトランザクションが存在することを照合するステップと
をさらに含む、請求項1に記載の方法。
【請求項５】
検証ノードから、前記1つまたは複数のブロック内に含まれるあるトランザクションを取り出せとの要求を受信するステップと、
インデックスに基づいて、前記複数のNVNのうちの残りから前記1つまたは複数のブロックのうちの1つに関連するデータセットを取り出すステップと、
前記データセットに基づいて、前記1つまたは複数のブロックのうちの1つをデコードするステップと、
前記あるトランザクションを前記検証ノードに送信するステップと
をさらに含む、請求項1に記載の方法。
【請求項６】
前記ECCが、前記NVNの計算リソースの利用率が所定の値以下であるときに実施される、請求項1から5のいずれか一項に記載の方法。
【請求項７】
前記複数のエンコードブロックの各エンコードブロックについて、
前記複数のデータセットのうちの前記少なくとも1つを除く前記複数のデータセットのうちの残りをハッシュして、ハッシュ値を生成するステップと、
前記ハッシュ値を記憶するステップと、
前記1つまたは複数のブロック、および前記複数のデータセットのうちの前記残りを破棄するステップと
をさらに含む、請求項1から6のいずれか一項に記載の方法。
【請求項８】
前記ECCが、前記NVNの記憶空間の使用率が所定のパーセンテージ以上であるときに実施される、請求項1から7のいずれか一項に記載の方法。
【請求項９】
前記ECCが、前記複数のブロックに冗長ビットを付加することによって実施されるイレージャコーディングである、請求項1から8のいずれか一項に記載の方法。
【請求項１０】
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合され、前記1つまたは複数のプロセッサによって実行可能な、請求項1から9のいずれか一項に記載の方法を実施するための命令が記憶された、1つまたは複数のコンピュータ可読メモリと
を備える、ブロックチェーンデータを処理するためのシステム。
【請求項１１】
請求項1から9のいずれか一項に記載の方法を実施するための複数のモジュールを備える、ブロックチェーンデータを処理するための装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、許可型ブロックチェーンネットワークにおける、誤り訂正コードに基づくブロックチェーンデータ記憶に関する。
【背景技術】
【０００２】
コンセンサスネットワークおよび/またはブロックチェーンネットワークとも呼ばれることのある分散型台帳システム(DLS)は、参加エンティティがセキュアかつ変更不可能にデータを記憶することを可能にする。DLSは、どんな特定のユーザケースにも言及することなく、一般にブロックチェーンネットワークと呼ばれる。ブロックチェーンネットワークのタイプの例としては、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、およびコンソーシアムブロックチェーンネットワークがあり得る。コンソーシアムブロックチェーンネットワークは、選択されたエンティティグループのために設けられるものであり、これらのエンティティはコンセンサスプロセスを制御し、コンソーシアムブロックチェーンネットワークはまた、アクセス制御層を含む。
【０００３】
ブロックチェーンベースのプログラムは、分散コンピューティングプラットフォームによって実行され得る。例えば、分散コンピューティングプラットフォームは、スマートコントラクトを実行するための実行時環境を提供する仮想マシンを含むことができる。ブロックチェーンコンピューティングプラットフォームは、トランザクションベースのステートマシンと見なすことができる。プラットフォーム内のステートデータは、ワールドステートと呼ばれるグローバル共有ステート(global shared-state)へと組み立てられ得る。ワールドステートは、アカウントアドレスとアカウントステートとの間のマッピングを含む。ワールドステートは、マークルパトリシアツリー(MPT)などのデータ構造内に記憶され得る。
【０００４】
ステートデータに加えて、ブロックチェーンネットワークは、ブロックデータやインデックスデータなど、他のタイプのデータも記憶することができる。ブロックデータは、ブロックヘッダおよびブロックボディを含むことができる。ブロックヘッダは、特定のブロックの識別情報を含むことができ、ブロックボディは、ブロックとともに確認されるトランザクションを含むことができる。トランザクションがブロックチェーンにますます入力されるにつれて、ステートデータおよびブロックデータのサイズが非常に大きくなり得る。一部のDLSでは、どのノードもブロックチェーンの全体コピーを記憶しており、それにより、大量の記憶空間を占めることがある。これは、全てのブロックデータおよびステートデータが、ブロックチェーンに記録された最初のトランザクションまで遡って記憶されるためである。一部のDLSでは、少数の共有ノードが、ブロックチェーンの全体コピーを記憶し、ブロックチェーンデータを他のブロックチェーンノードと共有しているが、それにより「データ不均衡」が生じることがある。すなわち、異なるノードにわたってデータが不均一に分散されると、大多数のデータを記憶するノードが故障したときにデータセキュリティリスクが高まるおそれがある。
【０００５】
一部のコンソーシアムブロックチェーンネットワークまたはプライベートブロックチェーンネットワークでは、一部のノードがコンセンサスに参加しない。非コンセンサスノードの間でデータを記憶する方式を可能にすることによって、コンセンサスノードの記憶負担をいくらか移すことが望ましい。ブロックチェーンデータの均衡および完全性を維持しながら、ブロックチェーンデータを回復させる計算負担を非コンセンサスノードに移すことも望ましい。
【発明の概要】
【課題を解決するための手段】
【０００６】
ここで説明する本主題の実施形態は、1つまたは複数の特徴を単独で、または組み合わせて、含むことができる。
【０００７】
例えば、一実施形態では、許可型ブロックチェーンネットワークの非検証ノード(non-validating node)(NVN)によって実施されるブロックチェーンデータ記憶のための、コンピュータ実装方法が開示される。NVNは、許可型ブロックチェーンネットワークに通信可能に結合されたクライアントノードによって発行されたトランザクションを受信し、トランザクションの検証およびコンセンサスの実行のためにトランザクションを複数の検証ノード(validating node)に送信し、複数の検証ノードによるトランザクションの少なくとも一部分のコンセンサスに基づいて生成された、1つまたは複数のブロックを受信し、1つまたは複数のブロックを、ECCを使用してエンコードして、1つまたは複数のエンコードブロックを生成することができる。1つまたは複数のエンコードブロックの各エンコードブロックについて、NVNは、エンコードブロックを1つまたは複数のブロックに関連するデータ記憶方式に基づいて複数のデータセットに分割し、データ記憶方式において規定された割当てに基づいて複数のデータセットのうちの少なくとも1つを記憶することができる。
【０００８】
いくつかの実施形態では、これらの一般的な態様および具体的な態様は、システム、方法、もしくはコンピュータプログラム、またはシステムと方法とコンピュータプログラムとの任意の組合せを使用して、実行することができる。前述の実施形態および説明する他の実施形態は、それぞれが、以下の特徴のうちの1つまたは複数をオプションで含むことができる。
【０００９】
いくつかの実施形態では、NVNはさらに、そのNVNを除く、複数のNVNのうちの残りから、データ記憶方式において規定された割当てに基づいて対応するNVNによって複数のデータセットのうちの少なくとも1つが記憶されている、という確認を受信し、複数の検証ノードに、1つまたは複数のブロックを削除するための通知を送信する。
【００１０】
いくつかの実施形態では、NVNは、ブロックチェーンデータを階層化ストレージ(tiered storage)内に記憶し、それによって、古いブロックが階層化ストレージのティア(tier)内に記憶されるのと比べて同じかまたは高速の階層化ストレージのティア内に新しいブロックが記憶される。
【００１１】
いくつかの実施形態では、NVNはさらに、クライアントノードから、あるトランザクションが1つまたは複数のブロック内に含まれているかどうかを照合(verify)せよとの要求を受信し、インデックスに基づいて、複数のNVNのうちの残りから1つまたは複数のブロックに関連するデータセットを取り出し、そのデータセットに基づいて、1つまたは複数のブロックをデコードし、1つまたは複数のブロック内にそのトランザクションが含まれている場合に、そのトランザクションが存在することを照合する。
【００１２】
いくつかの実施形態では、NVNはさらに、検証ノードから、1つまたは複数のブロック内に含まれるあるトランザクションを取り出せとの要求を受信し、インデックスに基づいて、複数のNVNのうちの残りから1つまたは複数のブロックのうちの1つに関連するデータセットを取り出し、そのデータセットに基づいて、1つまたは複数のブロックのうちの1つをデコードし、そのトランザクションを検証ノードに送信する。
【００１３】
いくつかの実施形態では、ECCは、NVNの計算リソースの利用率が所定の値以下であるときに実施される。
【００１４】
いくつかの実施形態では、複数のエンコードブロックの各エンコードブロックについて、NVNはさらに、複数のデータセットのうちの少なくとも1つを除く複数のデータセットのうちの残りをハッシュして、ハッシュ値を生成し、そのハッシュ値を記憶し、1つまたは複数のブロック、および複数のデータセットのうちの残りを破棄する。
【００１５】
いくつかの実施形態では、ECCは、NVNの記憶空間の使用率が所定のパーセンテージ以上であるときに実施される。
【００１６】
いくつかの実施形態では、ECCは、複数のブロックに冗長ビットを付加することによって実施されるイレージャコーディング(erasure coding)である。
【００１７】
本明細書による方法が、本明細書において説明する態様および特徴のいかなる組合せも含み得る、ということが理解されよう。すなわち、本明細書による方法は、本明細書において具体的に説明する態様および特徴の組合せに限定されるのではなく、提供される態様および特徴のいかなる組合せも含む。
【００１８】
本明細書の1つまたは複数の実施形態の詳細については、添付の図面および下の説明中に記載される。本明細書の他の特徴および利点は、説明および図面から、また特許請求の範囲から、明らかとなろう。
【図面の簡単な説明】
【００１９】
【図１】本明細書の実施形態を実行するために使用することのできる例示的な環境を示す図である。
【図２】本明細書の実施形態による例示的なアーキテクチャを示す図である。
【図３】本明細書の実施形態による例示的なブロックデータエンコードおよびハッシュプロセスを示す図である。
【図４】本明細書の実施形態による例示的なデータ記憶方式を示す図である。
【図５】本明細書の実施形態による別の例示的なブロックデータエンコードおよびハッシュプロセスを示す図である。
【図６】本明細書の実施形態による、例示的な、非検証ノード(NVN)に基づくブロックチェーンデータ分担記憶プロセスを示す図である。
【図７】本明細書の実施形態に従って実行することのできる例示的なプロセスを示す図である。
【図８】本明細書の実施形態による装置の例示的なモジュールを示す図である。
【発明を実施するための形態】
【００２０】
さまざまな図面中の同様の参照番号および名称は、同様の要素を示す。
【００２１】
本明細書は、許可型ブロックチェーンネットワークにおいて誤り訂正コード(ECC)に基づいてブロックチェーンデータを記憶するための技術について説明する。これらの技術は一般に、許可型ブロックチェーンネットワークに通信可能に結合されたクライアントノードによって発行されたトランザクションを受信することと、トランザクションの検証およびコンセンサスの実行のためにトランザクションを複数の検証ノードに送信することと、複数の検証ノードによるトランザクションの少なくとも一部分のコンセンサスに基づいて生成された、1つまたは複数のブロックを受信することと、1つまたは複数のブロックを、ECCを使用してエンコードして、1つまたは複数のエンコードブロックを生成することと、1つまたは複数のエンコードブロックの各エンコードブロックについて、エンコードブロックを1つまたは複数のブロックに関連するデータ記憶方式に基づいて複数のデータセットに分割するものである。
【００２２】
本明細書において説明するように、ブロックチェーンネットワークは、ステートデータ、ブロックデータ、およびインデックスデータなど、異なるタイプのデータを記憶することができる。ブロックデータは、ブロックチェーンネットワーク内の全てのトランザクションを含み、それは、大量の記憶空間を占めるおそれがあり、というのも、ブロックチェーンには新たなブロックが絶えず追加されているためである。ブロックチェーンノードがそれぞれ、全てのブロックデータを記憶することは、特に、アクセス頻度が低いブロック(例えばずっと以前にブロックチェーンに追加されたブロック)のデータの場合、非効率となり得る。
【００２３】
プライベートブロックチェーンネットワークやコンソーシアムネットワークなどの許可型ブロックチェーンネットワークでは、分散型台帳プロトコルが検証ノード(VN)および非検証ノード(NVN)によって実行され得る。VNおよびNVNはピアとしても知られる。VNは、コンセンサスの実行、トランザクションの検証、および分散型台帳の維持を担う、コンセンサスノードとすることができる。NVNは、コンセンサスへの参加も、トランザクションの実行もしない。いくつかの実施形態では、VNは、コンセンサスを通じて生成されたブロックを記憶する代わりに、(一番最近のもの以外の)ブロックを記憶しておくためにNVNに送信することができる。さらに、NVNは、ブロックを受信した後で、ECCを実施してブロックをエンコードし、ECCエンコードブロックを、各NVNによって別々に記憶されるデータセットに分割することができる。したがって、本明細書のいくつかの実施形態は、VNおよびNVNを含む許可型ブロックチェーンネットワークにおいて、VNが最近作成されたブロックのみを記憶するとともにNVNがECCエンコードブロックの一部分を記憶することによって、VNとNVN双方の記憶コストの低下を実現する。
【００２４】
本明細書において説明する技法は、いくつかの技術的効果を生み出す。例えば、本主題の実施形態は、ブロックチェーンノードの計算効率およびデータの均衡を維持しながら、ブロックチェーンネットワークの記憶リソースにかかる負担を低減させる。アクセス頻度が低いブロック(例えば古いブロック)について、各ブロックチェーンノード上に(本明細書においてはエンコードブロックとも呼ばれる)ECCエンコードブロックの一部分のみを保存し、エンコードブロックの残りを必要なときに他のブロックチェーンノードから取り出すことによって、ブロックチェーンノードの記憶リソースは節約され得る。
【００２５】
別の例として、ブロックチェーンネットワークが、VNおよびNVNを含む許可型ブロックチェーンネットワークであるとき、VNは、コンセンサスに達してブロックを生成し、そのブロックを記憶しておくためにNVNに送信することができる。NVNは、ブロックを受信した後で、ECCを実施してブロックをエンコードし、エンコードブロックを、記憶空間を節減するために各NVNによって別々に記憶されるデータセットに分割することができる。したがって、本主題のいくつかの実施形態は、VNとNVN双方の記憶領域消費を低減させる。さらに、NVNはトランザクションのコンセンサスの実行に参加しないので、NVNによってECCを実施すると、記憶空間のコスト節減を達成しながら、VNからNVNに計算負担をいくらか移すことができる。同様に、古いブロック内のトランザクションがVNによってアクセスされる必要のあるとき、VNはNVNに、そのトランザクションを収容した対応するブロックを回復せよとの要求を送信することができる。VNがECCエンコードブロックをデコードするための計算リソース消費も、節減することができる。
【００２６】
本明細書の実施形態についてのさらなる背景を説明すると、また上で紹介したように、(例えばピアツーピアノードで構成される)コンセンサスネットワークとも、ブロックチェーンネットワークとも呼ばれることのある、分散型台帳システム(DLS)は、参加エンティティがセキュアかつ変更不可能にトランザクションを行い、データを記憶することを可能にする。ブロックチェーンという用語は一般に、特定のネットワークおよび/またはユースケースに関連付けられるが、ブロックチェーンという用語は、本明細書においては、いかなる特定のユースケースとも無関係に一般にDLSを指すために使用される。
【００２７】
ブロックチェーンは、トランザクションが変更不可能であるようにトランザクションを記憶するデータ構造である。したがって、ブロックチェーン上に記録されたトランザクションは、確実でありかつ信頼できる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、チェーン内でその直前にある先行するブロックの暗号ハッシュを含めることによって、先行するブロックに連結される。各ブロックは、タイムスタンプ、それ自体の暗号ハッシュ、および1つまたは複数のトランザクションも含む。ブロックチェーンネットワークのノードによってすでに照合されたトランザクションは、ハッシュされ、マークルツリーにエンコードされる。マークルツリーは、ツリーのリーフノードにあるデータがハッシュされ、ツリーの各ブランチにおける全てのハッシュがブランチのルートにおいて連結される、データ構造である。このプロセスがツリーの上方に、ツリー全体のルートに至るまで継続し、このルートがツリー内の全てのデータを表すハッシュを記憶する。ツリー内に記憶されたトランザクションのものだとされるハッシュは、それがツリーの構造と矛盾がないかどうかを判定することによって、迅速に照合することができる。
【００２８】
ブロックチェーンが、トランザクションを記憶するための非集中型または少なくとも部分的に非集中型のデータ構造であるのに対して、ブロックチェーンネットワークは、トランザクションをブロードキャストし、照合し、検証することなどによって1つまたは複数のブロックチェーンを管理し、更新し、維持するコンピューティングノードからなる、ネットワークである。上で紹介したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして設けることができる。本明細書の実施形態については、コンソーシアムブロックチェーンネットワークに即して、本明細書においてさらに詳細に説明する。しかし、本明細書の実施形態を任意の適切なタイプのブロックチェーンネットワークにおいて実現できることが、企図されている。
【００２９】
一般に、コンソーシアムブロックチェーンネットワークは、参加エンティティの間でプライベートである。コンソーシアムブロックチェーンネットワークでは、コンセンサスノードと呼ばれることのある認可されたノードのセットによってコンセンサスプロセスが制御され、1つまたは複数のコンセンサスノードは、それぞれに対応するエンティティ(例えば金融機関、保険会社)によって運営されている。例えば、十(10)のエンティティ(例えば金融機関、保険会社)からなるコンソーシアムが、コンソーシアムブロックチェーンネットワークを運営することができ、各エンティティが、コンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを運営する。
【００３０】
いくつかの例では、コンソーシアムブロックチェーンネットワーク内に、グローバルブロックチェーンが、全てのノードにわたって複製されるブロックチェーンとして設けられる。すなわち、全てのコンセンサスノードは、グローバルブロックチェーンに対して完全なステートコンセンサス状態にある。コンセンサス(例えばブロックチェーンにブロックを追加することへの合意)を得るために、コンソーシアムブロックチェーンネットワーク内でコンセンサスプロトコルが実施される。例えば、コンソーシアムブロックチェーンネットワークは、下でさらに詳細に説明する実用的なビザンチン障害耐性(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のエンティティ(例えばユーザA)の、トランザクション管理システムなどのコンピュータ実装サービスをホストすることができ、このトランザクション管理システムは、第1のエンティティが、1つまたは複数の他のエンティティ(例えば他のユーザ)とのそのトランザクションを管理するために使用するものである。コンピューティングシステム108は、第2のエンティティ(例えばユーザB)の、トランザクション管理システムなどのコンピュータ実装サービスをホストすることができ、このトランザクション管理システムは、第2のエンティティが、1つまたは複数の他のエンティティ(例えば他のユーザ)とのそのトランザクションを管理するために使用するものである。図1の例では、コンソーシアムブロックチェーンネットワーク102は、ノードのピアツーピアネットワークとして表されており、コンピューティングシステム106、108がそれぞれ、コンソーシアムブロックチェーンネットワーク102に参加する第1のエンティティのノード、第2のエンティティのノードとなっている。
【００３３】
図2は、本明細書の実施形態による例示的なアーキテクチャ200を示す。この例示的な概念アーキテクチャ200は、参加者システム202、204、206を含み、それらはそれぞれ、参加者A、参加者B、および参加者Cに対応する。各参加者(例えばユーザ、企業)は、ブロックチェーンネットワーク212に参加し、ブロックチェーンネットワーク212は、そのうちの少なくとも一部がブロックチェーン216内に情報を変更不可能に記録する複数のノード214を含む、ピアツーピアネットワークとして設けられている。ブロックチェーンネットワーク212内にはただ1つのブロックチェーン216が概略的に示されているが、本明細書においてさらに詳細に説明するように、ブロックチェーン216の複数コピーが設けられ、ブロックチェーンネットワーク212にわたって維持される。
【００３４】
図示の例では、各参加者システム202、204、206がそれぞれ、参加者A、参加者B、および参加者Cによって、またはそれらに代わって設けられ、ブロックチェーンネットワーク内のそれぞれに対応するノード214として機能する。本明細書では、ノードは一般に、ブロックチェーンネットワーク212に接続され、それぞれに対応する参加者がブロックチェーンネットワークに参加することを可能にする、個別のシステム(例えばコンピュータ、サーバ)を指す。図2の例では、参加者は各ノード214に対応する。しかし、参加者がブロックチェーンネットワーク212内の複数のノード214を運営できること、および/または複数の参加者がノード214を共有できることが、企図されている。いくつかの例では、参加者システム202、204、206は、プロトコル(例えばハイパーテキスト転送プロトコルセキュア(HTTPS))を使用して、かつ/またはリモートプロシージャコール(RPC)を使用して、ブロックチェーンネットワーク212と通信するかまたはブロックチェーンネットワーク212を通じて通信する。
【００３５】
ノード214は、ブロックチェーンネットワーク212内でさまざまな参加度を有することができる。例えば、(例えばブロックチェーン216にブロックを追加するマイナーノードとして)コンセンサスプロセスに参加することのできるノード214もあれば、コンセンサスプロセスに参加しないノード214もある。別の例として、ブロックチェーン216の完全なコピーを記憶するノード214もあれば、ブロックチェーン216の一部分のコピーのみを記憶するノード214もある。例えば、データアクセス権が、それぞれの参加者がそのそれぞれに対応するシステム内に記憶するブロックチェーンデータを制限することができる。図2の例では、参加者システム202、204、および206は、それぞれに対応するブロックチェーン216の完全なコピー216'、216''、および216'''を記憶する。
【００３６】
ブロックチェーン(例えば図2のブロックチェーン216)は、各ブロックがデータを記憶する、ブロックのチェーンで構成される。データの例としては、2つ以上の参加者間のトランザクションを表すトランザクションデータがある。本明細書においては非限定的な例としてトランザクションが使用されているが、ブロックチェーン内に任意の適切なデータを記憶できることが企図されている(例えばドキュメント、画像、ビデオ、オーディオ)。トランザクションの例としては、限定はしないが、価値あるもの(例えば資産、製品、サービス、通貨)の交換があり得る。トランザクションデータは、ブロックチェーン内に変更不可能に記憶される。すなわち、トランザクションデータを変更することはできない。
【００３７】
トランザクションデータは、ブロック内に記憶される前にハッシュされる。ハッシングは、(文字列データとして提供される)トランザクションデータを(やはり文字列データとして提供される)固定長のハッシュ値に変換するプロセスである。ハッシュ値をアンハッシュしてトランザクションデータを取得することは、不可能である。ハッシングでは、トランザクションデータがわずかでも変化すると、確実に全く異なるハッシュ値となる。さらに、上述したように、ハッシュ値は固定長のものである。すなわち、トランザクションデータのサイズがどうであれ、ハッシュ値の長さは固定である。ハッシングは、トランザクションデータを、ハッシュ関数を通じて処理して、ハッシュ値を生成することを含む。ハッシュ関数の一例としては、限定はしないが、256ビットのハッシュ値を出力するセキュアハッシュアルゴリズム(SHA)-256がある。
【００３８】
複数のトランザクションのトランザクションデータがハッシュされ、ブロック内に記憶される。例えば、2つのトランザクションのハッシュ値がもたらされ、それら自体がハッシュされて、別のハッシュがもたらされる。このプロセスが、ブロック内に記憶される全てのトランザクションにとってただ1つのハッシュ値がもたらされるまで、繰り返される。このハッシュ値は、マークルルートハッシュと呼ばれ、ブロックのヘッダ内に記憶される。トランザクションのいずれかが変化すると、そのハッシュ値が変化する結果となり、最終的にはマークルルートハッシュが変化する結果となる。
【００３９】
ブロックはブロックチェーンに、コンセンサスプロトコルを通じて追加される。ブロックチェーンネットワーク内の複数のノードが、コンセンサスプロトコルに参加し、ブロックがブロックチェーンに追加されるための仕事をする。そのようなノードは、コンセンサスノードと呼ばれる。上で紹介したPBFTが、コンセンサスプロトコルの非限定的な一例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行して、トランザクションをブロックチェーンに追加し、ブロックチェーンネットワークのステート全体を更新する。
【００４０】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内の全てのトランザクションをハッシュし、ブロック内の全てのトランザクションにとってただ1つのハッシュ値がもたらされるまで(マークルルートハッシュ)、ハッシュ値を2つずつ組み合わせてさらなるハッシュ値を生成する。このハッシュが、ブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーン内の一番最近のブロック(すなわちブロックチェーンに追加された最終ブロック)のハッシュ値を決定する。コンセンサスノードは、ブロックヘッダにナンス値およびタイムスタンプも追加する。
【００４１】
一般に、PBFTは、ビザンチン障害(例えば誤動作するノード、悪意あるノード)に耐性のある実用的なビザンチンステートマシンレプリケーションを提供する。PBFTにおいてこれは、障害が発生すると仮定する(例えば独立したノード故障の存在、および/またはコンセンサスノードによって送信される操作されたメッセージを仮定する)ことによって、達成される。PBFTでは、コンセンサスノードは、1つのプライマリコンセンサスノードと複数のバックアップコンセンサスノードを含むシーケンスの形で設けられる。プライマリコンセンサスノードは、周期的に変更される。トランザクションは、ブロックチェーンネットワーク内の全てのコンセンサスノードがブロックチェーンネットワークのワールドステートに関して合意に達することによって、ブロックチェーンに追加される。このプロセスにおいて、コンセンサスノード間でメッセージが伝達され、各コンセンサスノードは、メッセージが指定されたピアノードから受信されたことを証明し、そのメッセージが伝送中に変更されなかったことを照合する。
【００４２】
PBFTでは、コンセンサスプロトコルが複数フェーズの形で提供され、全てのコンセンサスノードは同じステートにおいて開始する。始めに、クライアントが、サービス動作を呼び出せ(例えばブロックチェーンネットワーク内でトランザクションを実行せよ)との要求をプライマリコンセンサスノードに送信する。要求を受信したことに応答して、プライマリコンセンサスノードは要求をバックアップコンセンサスノードにマルチキャストする。バックアップコンセンサスノードは要求を実行し、それぞれが応答をクライアントに送信する。クライアントは、しきい値数の応答が受信されるまで待つ。いくつかの例では、クライアントは、f+1個の応答が受信されるのを待ち、ここでfは、ブロックチェーンネットワーク内で許容され得る、障害のあるコンセンサスノードの最大数である。PBFTでは、障害のあるコンセンサスノードの最大数が、コンセンサスノードの合計数の1/3未満である必要がある。最終結果は、十分な数のコンセンサスノードが、ブロックチェーンに追加される記録の順序に関して合意に至るというものであり、記録は受容されるかまたは拒絶されるかのどちらかである。
【００４３】
一部のブロックチェーンネットワークでは、トランザクションのプライバシを維持するために、暗号技術が実装される。例えば、2つのノードが、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を識別することができないようにトランザクションをプライベートに保ちたい場合、それらのノードはトランザクションデータを暗号化することができる。暗号技術の例としては、限定はしないが、対称暗号化および非対称暗号化がある。対称暗号化は、(平文から暗号文を生成する)暗号化と(暗号文から平文を生成する)復号の双方にただ1つの鍵を使用する暗号化処理を指す。対称暗号化では、複数のノードが同じ鍵を入手でき、したがって、各ノードがトランザクションデータを暗号化/復号できる。
【００４４】
非対称暗号化は、秘密鍵および公開鍵をそれぞれが含む鍵ペアを使用するものであり、秘密鍵はそれぞれのノードにのみ知られており、公開鍵はブロックチェーンネットワーク内の他の任意のまたは全てのノードに知られている。あるノードが、別のノードの公開鍵を使用してデータを暗号化することができ、暗号化データは、他方のノードの秘密鍵を使用して復号することができる。例えば、図2を再度参照すると、参加者Aは、参加者Bの公開鍵を使用してデータを暗号化し、暗号化データを参加者Bに送信することができる。参加者Bは、暗号化データ(暗号文)をその秘密鍵を使用して復号し、元データ(平文)を抽出することができる。あるノードの公開鍵を用いて暗号化されたメッセージは、そのノードの秘密鍵を使用してしか復号することができない。
【００４５】
非対称暗号化は、トランザクションの参加者がそのトランザクションの他の参加者ならびにトランザクションの正当性を確認することを可能にするデジタル署名を形成するために使用される。例えば、あるノードが、メッセージにデジタル署名をすることができ、そのメッセージがそのノードによって送信されたことを、別のノードが参加者Aのデジタル署名に基づいて確認することができる。デジタル署名は、メッセージが伝送中に改ざんされていないことを保証するために使用することもできる。例えば、再度図2を参照すると、参加者Aが参加者Bにメッセージを送信することになっている。参加者Aは、メッセージのハッシュを生成し、次いで、その秘密鍵を使用してハッシュを暗号化し、それによって、暗号化ハッシュとしてのデジタル署名を形成する。参加者Aは、このデジタル署名をメッセージに添付し、デジタル署名付きメッセージを参加者Bに送信する。参加者Bは、このデジタル署名を、参加者Aの公開鍵を使用して復号し、ハッシュを抽出する。参加者Bは、メッセージをハッシュし、これらのハッシュを比較する。これらのハッシュが同じである場合、参加者Bは、メッセージが確かに参加者Aからのものであったこと、また改ざんされていなかったことを確認することができる。
【００４６】
図3は、本明細書の実施形態による例示的なブロックデータエンコードおよびハッシュプロセス300を示す。この例では、4つのブロックチェーンノードからなるブロックチェーンネットワークが示されており、4つのブロックチェーンノードは、ブロックチェーンノード302、304、306、および308である。ブロックチェーンノード302を、エンコードおよびハッシュプロセス300を示すための一例として使用すると、ブロックチェーンノード302は、ブロックチェーンネットワークのブロックデータを、ブロックのブロックボディに記憶する312ことができる。図示の例では、ブロックデータは、ブロック100内に記憶される。その後、ブロックチェーンノード302は、他のブロックチェーンノード304、306、および308とともにコンセンサスプロセスに携わることができる。コンセンサスプロセスの間、ブロックチェーンノード302は、プルーフオブワーク(PoW)やプルーフオブステーク(PoS)などのコンセンサスアルゴリズムを実施して、ブロックチェーン上に対応するブロックを作成することができる。
【００４７】
いくつかの実施形態では、ブロックチェーンノード302は、1つまたは複数のアクセス頻度が低いブロックを識別することができる。実際には、ブロックが作成されてから久しいほど、対応するブロックデータがスマートコントラクトの実行などの動作に必要になる可能性は低くなる。ブロックチェーンノード302は、ローカルに記憶されたブロックが、ブロックチェーン上に作成されてから所定の時間量を経た過去ブロックであるとき、ローカルに記憶されたブロックはアクセス頻度が低いと判定することができる。例えば、所定の時間量は、ブロックが作成される平均時間の1倍または2倍とすることができる。いくつかの例では、ブロックはまた、ブロック内のブロックデータがスマートコントラクトの実行のために所定の時間量にわたって取り出されないときに、アクセス頻度が低いと判定され得る。
【００４８】
ブロックチェーンノード302は、アクセス頻度が低いブロックを識別した後で、アクセス頻度が低いブロックそれぞれのブロックボディ内のブロックデータのECC314を実施することができる。ECCは、低信頼の伝送にわたるデータの誤りまたは損失を、データに(冗長性とも呼ばれる)冗長ビットを付加することによって制御するために使用することができる。冗長ビットは、多くの元情報ビットの複雑な関数(complex function)とすることができる。冗長性により、データを再伝送することなく、データの誤りおよび損失が訂正されることが可能となり得る。元情報は、エンコードされた出力内にそのまま現れることも、現れないこともある。エンコードされた出力内に無変更の元情報を含む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をアクセス頻度が低いブロックと判定してECC314を実施したと仮定すると、ECCエンコードデータがデータ記憶方式に基づいて複数のデータセットに分割され得る。データ記憶方式は、データがブロックチェーンネットワーク内のどこに、かつ/またはブロックチェーンネットワーク内にどのように記憶されるかを定めるコンピュータ実行可能命令のセットとして、提供することができる。いくつかの例では、データ記憶方式は、プルーフオブオーソリティによる高信頼のノードによって提供され、ブロックチェーンノードによって合意され得る。いくつかの例では、データ記憶方式は、コンセンサスを通じてブロックチェーンノードによって合意され得る。一般に、データ記憶方式は、エンコードデータをブロックチェーンネットワーク内のブロックチェーンノードの数に基づいて複数のデータセットに分割するための、1つまたは複数の所定のルールを含むことができる。データ記憶方式は、各ブロックチェーンノードによって記憶またはハッシュされる、複数のデータセットのうちの1つまたは複数のデータセットの割当てを含むこともできる。データの均衡を確実なものにするために、データ記憶方式は、ブロックチェーンネットワークの各ブロックチェーンノードによって記憶される、少なくとも1つのデータセットの割当てを含むことができる。
【００５２】
図3に示す例では、ブロック100のエンコードブロックデータが、それぞれブロックチェーンノード302、304、306、および308のうちの1つによって記憶されるData1、Data2、Data3、およびVdata1の4つのデータセットに分割される。Vdata1は、誤り訂正のためのECCの冗長ビットを表すことができる。Data1は、データ記憶方式に従って、ブロックチェーンノード302によって記憶されるように選択される。Data2、Data3、およびVdata1はそれぞれ、別々にハッシュされて316、ハッシュ値Dhash2、Dhash3、およびVhash1を生成するように選択される。本明細書の実施形態によれば、エンコードデータは、ブロックチェーンネットワークが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、およびData3をそれぞれ、別々にハッシュして、ハッシュ値Dhash1、Dhash2、およびDhash3を生成する。
【００５４】
図3を再度参照すると、ハッシュ値は、同じブロックのエンコードデータセットに対応するので、そのブロックのブロックIDによってインデックス付けすることができる。例えば、ブロックチェーンノード302は、ブロック100に関連するData1、Dhash2、Dhash3、およびVhash1を、ブロックID100によりインデックス付けすることができる。したがって、ブロックチェーンノード302は、インデックス化されたブロックIDを使用して、ハッシュ値をそれらの対応するブロックにマッピングすることができる。データセットおよびハッシュ値のインデックス付けのより詳細な例について、図6の説明の中で論じる。
【００５５】
このデータ記憶方式に従って、ブロックチェーンノード302、304、306、および308について、他のデータ記憶方式を作り出せることを理解されたい。いくつかの例では、ブロック100のエンコードブロックデータを、5つ以上のデータセットに分割することができる。このデータ記憶方式に従って、ブロックチェーンノード502、504、506、および508について、他のデータ記憶方式を作り出せることを理解されたい。
【００５６】
ブロックチェーンノード302は、Dhash2、Dhash3、およびVhash1を生成し記憶した後で、記憶空間を節減するために記憶領域からData2、Data3、およびVdata1を削除することができる。したがって、各ブロックについて、ブロックチェーンノード302は、ブロック全体の代わりに、1つのECCエンコードデータセット(すなわちData1)および3つのハッシュ値(すなわちDhash2、Dhash3、およびVhash1)のみを記憶する。したがって、記憶空間が著しく低減され得る。ブロック100と同様に、エンコードおよびハッシュプロセスは、ブロックチェーンノード304、306、および308によって記憶される他のアクセス頻度が低いブロックについても実施され得る。
【００５７】
ブロックチェーンノード302は、ブロック100のブロックデータがスマートコントラクトの実行に必要になるとの決定をすると、データ記憶方式に従って、Data2、Data3、およびVdata1をそれぞれ、ブロックチェーンノード304、306、および308から取り出すことができる。他のブロックチェーンノード304、306、および308からデータセットを取り出すために、ブロックチェーンノード302は、データ記憶方式に従って、取り出すべきデータセットに対応するハッシュ値を送信することができる。
【００５８】
例えば、Data2を取り出すために、ブロックチェーンノード302はブロックチェーンノード304にDhash2を送信することができる。ブロックチェーンノード304にData2が記憶されている場合、ブロックチェーンノード304は、Dhash2を受信したことに応答して、ブロックチェーンノード302にData2を送信し戻すことができる。ブロックチェーンノード302は、ブロックチェーンノード304からData2を受信した後で、受信したデータセットをハッシュし、ハッシュ値をDhash2と比較することができる。ハッシュ値がDhash2と同じである場合、ブロックチェーンノード302は、受信したデータセットが真正であると判定することができる。そうでない場合、受信したデータセットは真正ではないと判定される。受信したデータセットが真正ではないと判定されたとき、ブロックチェーンノード302は、ブロックチェーンノード304を障害のあるノード(またはビザンチンノード)として報告することができる。ブロックチェーンノード302によって受信された真正ではないデータのパーセンテージが、ECCによって訂正され得る誤りビットまたは欠落ビットの最大比率以下である場合、ローカルに記憶されたデータセットおよび受信したデータセットからブロック100を回復させることができる。
【００５９】
先に説明したように、ブロックチェーンネットワークは、ステートデータ、ブロックデータ、およびインデックスデータなど、異なるタイプのデータを記憶することができる。ステートデータはしばしば、MPTや固定深度マークルツリー(fixed depth Merkle tree)(FDMT)などの内容アドレスステートツリー(content-addressed state tree)として記憶される。内容アドレスステートツリーは、本質的にインクリメンタルである。すなわち、アカウントステートの変化は、既存のステートツリーの値を単に更新することではなく新たなツリー構造を追加することによって、反映される。したがって、ブロックチェーンにブロックが絶えず追加されるとき、内容アドレスステートツリーのサイズが非常に大きくなり得る。FDMT記憶方式下では、ステートデータは、現在のブロックに関連する現在のステートデータと、ブロックチェーンの全てのブロックに関連する過去ステートデータに分離され得る。FDMTにおける大半のデータは、使用頻度が低い過去ステートデータである。過去ステートデータを全て、どのコンセンサスノードにも記憶することは、記憶リソース使用率の点からかなり非効率となり得る。
【００６０】
いくつかの実施形態では、ブロックデータをエンコードして分担するのと同様に、イレージャコーディングなどのECCを使用して過去ステートデータをエンコードすることができる。記憶領域消費を低減させるために、ブロックチェーンネットワーク内の各コンセンサスノードが、過去ステートデータの一部分のみを記憶し、過去ステートデータの残りを他のノードから取り出す。元の過去ステートデータの代わりにECCエンコード過去ステートデータを分担することによって、真正ではないデータが存在するかまたはデータ損失が生じた場合でさえ、真正ではないデータまたはデータ損失のパーセンテージが、ECCによって訂正され得る誤りビットまたは欠落ビットの最大比率以下である限り、元の過去ステートデータを回復させることができる。
【００６１】
図5は、本明細書の実施形態による別の例示的なブロックデータエンコードおよびハッシュプロセス500を示す。この例では、4つのブロックチェーンノードからなるブロックチェーンネットワークが示されており、4つのブロックチェーンノードは、ブロックチェーンノード502、504、506、および508である。ブロックチェーンノード502を、エンコードおよびハッシュプロセス500を示すための一例として使用すると、ブロックチェーンノード502は、ブロックに新たなブロックデータが追加される512と、ECC514を実施して、ブロックデータをエンコードすることができる。図3の説明の中で論じたエンコードおよびハッシュプロセス300と比較して、ブロックチェーンノード502はECCを、ブロックにブロックデータが書き込まれるときにブロックデータに対して実施する。したがって、ブロックチェーンノード502は、ブロック全体を記憶する必要があるのではなく、その代わりに、データ記憶方式に基づいて、ECCエンコードブロックデータの選択された一部分、およびエンコードブロックデータの残りに対応するハッシュ値を記憶することができる。このエンコードおよびハッシュプロセス500は、ブロックチェーンノード502のディスク空間が少ないときのシナリオに特に適したものとなり得る。
【００６２】
いくつかの実施形態では、ブロックチェーンノード502は、ブロックとしてのデータを記憶する代わりに、ログ先行書込み(WAL)ファイルまたは他の類似のロールフォワードジャーナルファイルを記憶することができる。WALファイルは、ブロックチェーンノード502によってコミットされたがまだ記憶されていないブロックデータを記録することができる。WALファイルを使用すると、元のブロックチェーンデータをデータベースファイル内に保つことができるとともに、ブロックチェーンデータの変更を別のWALファイルに書き込むことができる。変更によるロールフォワードへのコミットは、元のブロックチェーンデータに一度も書き込むことなく行われ得る。この構成により、ブロックチェーンデータの操作を継続するとともに、変更がWALファイル内にコミットされることが可能である。エンコードおよびハッシュプロセス500を通じて行われた変更を記憶するためにWALファイルを使用することによって、ブロックチェーンノード502は、それがコンセンサスのためのブロックデータを有していることを示すとともに、適切なときにECCをバックグラウンドで実施することができる。したがって、ECCは、コンセンサスプロセスの計算効率またはレーテンシに及ぶ影響を低減させるために、ブロックチェーンノード502の計算リソースの利用率が低いときに実施され得る。
【００６３】
いくつかの実施形態では、ブロックチェーンノード502がブロックデータをバッファ内に記憶することができる。ブロックチェーンノード502は、データのサイズが所定のしきい値よりも大きいときか、またはバッファが一杯になったときに、バッファ内に記憶されたブロックデータに対してECCを実施することができる。ブロックチェーンノード502は、ECCを実施した後で、下の説明の中で論じるように、エンコードおよびハッシュプロセス500に従って、エンコードブロックデータおよびハッシュ値を記憶することができる。
【００６４】
再度ブロック100を一例として使用すると、ECCを実施した後で、エンコードブロックデータがデータ記憶方式に基づいて複数のデータセットに分割され得る。図3の説明の中で論じた例と同様に、ブロック100のエンコードブロックデータは、それぞれブロックチェーンノード502、504、506、および508のうちの1つによって記憶されるData1、Data2、Data3、およびVdata1の4つのデータセットに分割され得る。Vdata1は、ECCの冗長ビットを表すことができる。Data1は、データ記憶方式に従って、ブロックチェーンノード502によって記憶されるように選択される。Data2、Data3、およびVdata1はそれぞれ、別々にハッシュされて516、ハッシュ値Dhash2、Dhash3、およびVhash1を生成するように選択される。
【００６５】
ハッシュ値は、ハッシュ値の対応するブロックのブロックIDによってインデックス付けすることができる。例えば、ブロックチェーンノード502は、ブロック100に関連するData1、Dhash2、Dhash3、およびVhash1を、ブロックID100によりインデックス付けすることができる。したがって、ブロックチェーンノード502は、インデックス化されたブロックIDを使用して、ハッシュ値をそれらの対応するブロックにマッピングすることができる。データセットおよびハッシュ値のインデックス付けのより詳細な例について、図6の説明の中で論じる。
【００６６】
このデータ記憶方式に従って、1つまたは複数のブロックチェーンノード502、504、506、および508について、他のデータ記憶方式を作り出せることを理解されたい。例えば、ブロック100のエンコードブロックデータを、5つ以上のデータセットに分割することができる。各ブロックチェーンノード502、504、506、および508は、2つ以上のデータセットを記憶し、他のノードによって記憶されるデータセットの残りをハッシュすることができる。
【００６７】
ブロックチェーンノード502は、Dhash2、Dhash3、およびVhash1を生成した後で、Data1、Dhash2、Dhash3、およびVhash1を記憶し、記憶空間を節減するために記憶領域からData2、Data3、およびVdata1を削除することができる。したがって、ブロックチェーンの各ブロックについて、ブロックチェーンノード502は、記憶空間を節減するために、元のブロックデータの代わりに、ECCエンコードブロックデータの1つのデータセット(すなわちData1)および3つのハッシュ値(すなわちDhash2、Dhash3、およびVhash1)のみを記憶する。ブロックチェーンノード502は、ブロック100のブロックデータがスマートコントラクトの実行に必要になるとの決定をすると、データ記憶方式に従って、Data2、Data3、およびVdata1をそれぞれ、ブロックチェーンノード504、506、および508から取り出すことができる。
【００６８】
他のブロックチェーンノード504、506、および508からデータセットを取り出すために、ブロックチェーンノード502は、データ記憶方式に従って、取り出すべきデータセットに対応するハッシュ値を送信することができる。例えば、Data2を取り出すために、ブロックチェーンノード502はブロックチェーンノード504にDhash2を送信することができる。ブロックチェーンノード504にData2が記憶されている場合、ブロックチェーンノード504は、Dhash2を受信したことに応答して、ブロックチェーンノード502にData2を送信し戻すことができる。ブロックチェーンノード502は、ブロックチェーンノード504からData2を受信した後で、受信したデータセットをハッシュし、ハッシュ値をDhash2と比較することができる。ハッシュ値がDhash2と同じである場合、ブロックチェーンノード502は、受信したデータセットが真正であると判定することができる。そうでない場合、受信したデータセットは真正ではないと判定され得る。受信したデータセットが真正ではないと判定されたとき、ブロックチェーンノード502は、ブロックチェーンノード504を障害のあるノード(またはビザンチンノード)として報告することができる。ブロックチェーンノード502によって受信された真正ではないデータのパーセンテージが、ECCによって訂正され得る誤りビットまたは欠落ビットの最大比率以下である場合、ローカルに記憶されたデータセットおよび受信したデータセットからブロック100を回復させることができる。
【００６９】
先に論じたように、エンコードおよびハッシュプロセスを実施することによって、ブロックチェーンデータがECCエンコードされ、複数のデータセットに分割され得る。記憶空間を節減するために、各ブロックチェーンノードが、データ記憶方式に基づいて、複数のデータセットのうちの1つまたは複数、およびそれらのデータセットのうちの残りのデータセットのハッシュ値を記憶することができる。記憶されたデータセットおよびハッシュ値は、元データを回復させるためにブロックチェーンノードが他のノードからデータセットを取り出せるように、ブロックIDによりインデックス付けされ得る。
【００７０】
図6は、本明細書の実施形態による、例示的な、NVNに基づくブロックチェーンデータ分担記憶プロセス600を示す。Hyperledger fabricなどの許可型ブロックチェーンプラットフォームの分散型台帳プロトコルを実行する2タイプのピアが、(ここでは検証ピアと呼ばれる)VNおよび(ここでは非検証ピアと呼ばれる)NVNである。許可型ブロックチェーンネットワークは、プライベートブロックチェーンネットワークまたはコンソーシアムブロックチェーンネットワークとすることができ、その場合、どのメンバノードもネットワーク内での識別情報を維持する。エンドユーザまたはクライアントノードは、ネットワークを使用する前に、認可および認証される必要がある。換言すれば、許可型ブロックチェーンは、誰が検証および分散型台帳プロトコルに参加できるかを制御する。VNは、コンセンサスの実行、トランザクションの検証、および分散型台帳の維持を担うことができる。NVNは、(例えばトラザクションを発行する)クライアントノードをVNに接続するためのプロキシとして機能することができる。NVNは、トランザクションの実行をしないが、トランザクションを照合することはできる。
【００７１】
図示の例では、ブロックチェーンネットワーク610が、VN602、604、606、および608を含む許可型ブロックチェーンネットワークであると仮定される。ブロックチェーンネットワーク610は、NVN612、614、616、618によって形成されたNVNクラスタ610も含む。いくつかの実施形態では、トランザクションは、クライアントノード630から生成され得る。クライアントノード630は、1つのコンピュータハードウェアまたはソフトウェアとすることができる。いくつかの実施形態では、クライアントノード630は、NVNクラスタ610、またはNVN612、614、616、618のうちの1つに、トランザクションを送信する632ことができる。NVNクラスタ610は、トランザクションを受信した後で、コンセンサスの実行のためにVN602、604、606、および608にトランザクションを転送する622ことができる。VN602、604、606、および608は、トランザクションを受信した後で、コンセンサスプロセス(例えばPBFT)に携わることによってトランザクションを検証して、受信したトランザクションの少なくともサブセットに基づいてブロック(例えばブロック100)を生成し、それをブロックチェーンの末尾に追加することができる。
【００７２】
ブロック100が生成され、ブロックチェーンの末尾に追加された後で、VN602は、ブロック100を記憶しておくためにNVNクラスタ610に送信することができる。いくつかの実施形態では、NVNは、VNからブロックを自動的に引き出すこともできる。ブロックは周期的に、または所定のブロック数(例えば50ブロック)が生成された後で、引き出され得る。VN602から1つまたは複数のブロックを受信した後で、NVN612、614、616、および618は次いで、図3および図5の説明の中で論じたエンコードおよびハッシュプロセスに携わることができる。各NVNは、1つまたは複数のブロックを、ECC626(例えばイレージャコーディング)を使用してエンコードして、1つまたは複数のECCエンコードブロックを生成することができる。いくつかの実施形態では、ECCは、NVNの計算効率を維持するために、NVNの計算リソースの利用率が所定の値(例えば50%)以下であるときに実施され得る。いくつかの実施形態では、ECCは、NVNの記憶空間の使用率が所定のパーセンテージ(例えば80%)以上であるときに実施され得る。
【００７３】
NVN(この場合NVN612)は、ECCエンコードブロックを生成した後で、ECCエンコードブロックを、図4の説明の中で論じたデータ記憶方式400に基づいて、4つのデータセットData1、Data2、Data3、およびVdata1に分割することができる。次いで、NVN612は、データ記憶方式において規定された割当てに基づいてData1を記憶することができ、データセットの残りに対してハッシング628を実施して、ハッシュ値Dhash2、Dhash3、およびVhash1を生成することができる。NVN612は、データセット(Data1)およびハッシュ値(Dhash2、Dhash3、およびVhash1)を記憶した後で、記憶空間を節減するために、ECCエンコードブロック、およびデータセットの残り、すなわちData2、Data3、およびVdata1を破棄することができる。
【００７４】
いくつかの実施形態では、NVN612は、他のNVN614、616、および618と、データ記憶方式に従ってそれらに割り当てられたデータセットおよびハッシュ値をそれらが記憶しているかどうかを確認することができる。NVN612は、他のNVN614、616、および618からの確認を受信した後で、複数のVN602、604、606、および608に、NVN612、614、616、および618がエンコードおよびハッシュプロセスを完了したとの通知を送信することができる。その場合、VN602、604、606、および608が記憶空間を節減するためにブロック100を削除しても問題ない。
【００７５】
いくつかの実施形態では、クライアントノード630またはVNがNVN612に、あるトランザクションがブロックチェーン上に存在するかどうかを照合せよとの要求を送信することができる。要求を受信したNVN612は、インデックスに基づいて、他のNVN614、616、および618によって記憶されたデータセットを取り出し、そのデータセットをデコードして、対応するブロックを回復させることができる。ブロックが回復された後で、NVN612は、ブロック内にそのトランザクションが含まれているかどうかを照合することができる。
【００７６】
いくつかの実施形態では、VNはNVN612に、スマートコントラクトの実行のためにトランザクションを取り出せとの要求を送信することができる。要求を受信したNVN612は、NVNクラスタ610によってデータセットとして保存された1つまたは複数のブロック内にそのトランザクションが含まれているとの判定をすることができる。次いで、NVN612は、インデックスに基づいて、他のNVN614、616、および618によって記憶されたデータセットを取り出し、そのデータセットをデコードして、対応する1つまたは複数のブロックを回復させることができる。その後、NVNノード612は、トランザクションの位置を突き止め、そのトランザクションをVNに送信することができる。
【００７７】
いくつかの実施形態では、NVNは、ブロックチェーンデータを、階層化ストレージ内に記憶することができる。階層化ストレージでは、データは、その相対的事業価値に応じてティアの階層内に配置され得る。例えば、データの事業価値は、それがどれだけ頻繁にアクセスされるかに基づいて決まり得る。一般に、より価値のあるデータは、より高速なまたはより高価な記憶媒体(すなわちティア)内に保存され得る。新しいブロック内のブロックチェーンデータのほうが、古いブロック内のブロックチェーンデータよりもアクセスされる可能性があるので、記憶コストを下げるために、古いブロックは、新しいブロックが記憶媒体内に記憶され得るのに比べて低速の記憶媒体内に記憶され得る。
【００７８】
図7は、本明細書の実施形態に従って実行することのできる例示的なプロセス700を示す。簡単のため、プロセス700については、NVNによって実施されるものとして説明する。NVNは、1つまたは複数の位置にあり、本明細書に従って適切にプログラムされた、1つのコンピュータ、または1つもしくは複数のコンピュータからなるシステムとすることができる。例えば、NVNは、コンピューティングシステム、例えば図1のコンピューティングシステム106、108内にある、適切にプログラムされ、プロセス700を実施することのできる、コンピューティングデバイスとすることができる。
【００７９】
702において、NVNは、NVNを含む許可型ブロックチェーンネットワークに通信可能に結合されたクライアントノードによって発行されたトランザクションを受信する。704において、NVNは、トランザクションの検証およびコンセンサスの実行のためにトランザクションを複数の検証ノードに送信する。
【００８０】
706において、NVNは、複数の検証ノードによるトランザクションの少なくとも一部分のコンセンサスに基づいて生成された、1つまたは複数のブロックを受信する。708において、NVNは、1つまたは複数のブロックを、ECCを使用してエンコードして、1つまたは複数のエンコードブロックを生成する。場合によっては、ECCは、NVNの計算リソースの利用率が所定の値以下であるときに実施される。場合によっては、ECCは、NVNの記憶空間の使用率が所定のパーセンテージ以上であるときに実施される。場合によっては、ECCは、複数のブロックに冗長ビットを付加することによって実施されるイレージャコーディングである。
【００８１】
710において、1つまたは複数のエンコードブロックの各エンコードブロックについて、NVNは、エンコードブロックを1つまたは複数のブロックに関連するデータ記憶方式に基づいて複数のデータセットに分割し、データ記憶方式は、複数のデータセットの複数のNVNへの割当てを規定する。場合によっては、NVNは、ブロックチェーンデータを階層化ストレージ内に記憶し、それによって、古いブロックが階層化ストレージのティア内に記憶されるのと比べて同じかまたは高速の階層化ストレージのティア内に新しいブロックが記憶される。712において、NVNは、データ記憶方式において規定された割当てに基づいて複数のデータセットのうちの少なくとも1つを記憶する。
【００８２】
場合によっては、NVNは、そのNVNを除く、複数のNVNのうちの残りから、データ記憶方式において規定された割当てに基づいて対応するNVNによって複数のデータセットのうちの少なくとも1つが記憶されている、という確認を受信することと、複数の検証ノードに、1つまたは複数のブロックを削除するための通知を送信することとをさらに実施する。
【００８３】
場合によっては、NVNは、クライアントノードから、あるトランザクションが1つまたは複数のブロック内に含まれているかどうかを照合せよとの要求を受信することと、インデックスに基づいて、複数のNVNのうちの残りから1つまたは複数のブロックに関連するデータセットを取り出すことと、そのデータセットに基づいて、1つまたは複数のブロックをデコードすることと、1つまたは複数のブロック内にそのトランザクションが含まれている場合に、そのトランザクションが存在することを照合することとをさらに実施する。
【００８４】
場合によっては、NVNは、検証ノードから、1つまたは複数のブロック内に含まれるあるトランザクションを取り出せとの要求を受信することと、インデックスに基づいて、複数のNVNのうちの残りから1つまたは複数のブロックのうちの1つに関連するデータセットを取り出すことと、そのデータセットに基づいて、1つまたは複数のブロックのうちの1つをデコードすることと、そのトランザクションを検証ノードに送信することとをさらに実施する。
【００８５】
場合によっては、複数のエンコードブロックの各エンコードブロックについて、NVNは、複数のデータセットのうちの少なくとも1つを除く複数のデータセットのうちの残りをハッシュして、ハッシュ値を生成することと、そのハッシュ値を記憶することと、1つまたは複数のブロック、および複数のデータセットのうちの残りを破棄することとをさらに実施する。
【００８６】
図8は、本明細書の実施形態による装置800の例示的なモジュールの図である。装置800は、ブロックチェーンデータを記憶し処理するように構成されたNVNの一実施形態の一例とすることができる。装置800は、上で説明した実施形態に対応することができ、装置800は次の、許可型ブロックチェーンネットワークに通信可能に結合されたクライアントノードによって発行されたトランザクションを受信する、受信モジュール802と、トランザクションの検証およびコンセンサスの実行のためにトランザクションを複数の検証ノードに送信する、送信モジュール804と、複数の検証ノードによるトランザクションの少なくとも一部分のコンセンサスに基づいて生成された、1つまたは複数のブロックを受信する、受信モジュール802と、1つまたは複数のブロックを、ECCを使用してエンコードして、1つまたは複数のエンコードブロックを生成する、エンコードモジュール806と、1つまたは複数のエンコードブロックの各エンコードブロックについて、エンコードブロックを1つまたは複数のブロックに関連するデータ記憶方式に基づいて複数のデータセットに分割する、分割モジュール808であって、データ記憶方式が複数のデータセットの複数のNVNへの割当てを規定する、分割モジュール808と、データ記憶方式において規定された割当てに基づいて複数のデータセットのうちの少なくとも1つを記憶する、記憶モジュール810とを含む。
【００８７】
いくつかの実施形態では、受信モジュール802はさらに、そのNVNを除く、複数のNVNのうちの残りから、データ記憶方式において規定された割当てに基づいて対応するNVNによって複数のデータセットのうちの少なくとも1つが記憶されている、という確認を受信し、送信モジュール804はさらに、複数の検証ノードに、1つまたは複数のブロックを削除するための通知を送信する。
【００８８】
いくつかの実施形態では、NVNは、ブロックチェーンデータを階層化ストレージ内に記憶し、それによって、古いブロックが階層化ストレージのティア内に記憶されるのと比べて同じかまたは高速の階層化ストレージのティア内に新しいブロックが記憶される。
【００８９】
いくつかの実施形態では、受信モジュール802はさらに、クライアントノードから、あるトランザクションが1つまたは複数のブロック内に含まれているかどうかを照合せよとの要求を受信する。装置はさらに、インデックスに基づいて、複数のNVNのうちの残りから1つまたは複数のブロックに関連するデータセットを取り出すための、取出しサブモジュールと、そのデータセットに基づいて、1つまたは複数のブロックをデコードするための、デコードサブモジュールと、1つまたは複数のブロック内にそのトランザクションが含まれている場合に、そのトランザクションが存在することを照合するための、ベリフィケーションサブモジュールとを含む。
【００９０】
いくつかの実施形態では、受信モジュール802はさらに、検証ノードから、1つまたは複数のブロック内に含まれるあるトランザクションを取り出せとの要求を受信する。取出しサブモジュールはさらに、インデックスに基づいて、複数のNVNのうちの残りから1つまたは複数のブロックのうちの1つに関連するデータセットを取り出す。デコードサブモジュールはさらに、そのデータセットに基づいて、1つまたは複数のブロックのうちの1つをデコードし、送信モジュール804はさらに、そのトランザクションを検証ノードに送信する。
【００９１】
いくつかの実施形態では、ECCは、NVNの計算リソースの利用率が所定の値以下であるときに実施される。
【００９２】
いくつかの実施形態では、装置800は、ハッシュサブモジュールをさらに含む。複数のエンコードブロックの各エンコードブロックについて、ハッシュサブモジュールは、複数のデータセットのうちの少なくとも1つを除く複数のデータセットのうちの残りをハッシュして、ハッシュ値を生成する。記憶モジュール812はさらに、そのハッシュ値を記憶し、1つまたは複数のブロック、および複数のデータセットのうちの残りを破棄する。
【００９３】
いくつかの実施形態では、ECCは、NVNの記憶空間の使用率が所定のパーセンテージ以上であるときに実施される。
【００９４】
いくつかの実施形態では、ECCは、複数のブロックに冗長ビットを付加することによって実施されるイレージャコーディングである。
【００９５】
先の実施形態において示したシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用して実装することもでき、あるいはある特定の機能を有する製品を使用して実装することもできる。典型的な実施形態デバイスがコンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、セルラー電話、カメラ付き電話、スマートフォン、パーソナルデジタルアシスタント、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せとすることができる。
【００９６】
機能の実施形態プロセスおよび装置内の各モジュールの役割については、先の方法における対応するステップの実施形態プロセスを参照することができる。簡単のためここでは詳細は省略する。
【００９７】
装置実施形態は基本的に方法実施形態に対応するので、関係する部分については、方法実施形態における関係する説明を参照することができる。先に説明した装置実施形態は、単なる一例にすぎない。別々の部分として説明したモジュールは、物理的に別々であってもよく、そうでなくてもよく、モジュールとして表示された部分は、物理的なモジュールであってもよく、そうでなくてもよく、1つの位置に位置付けられていてもよく、いくつかのネットワークモジュール上に分散されていてもよい。モジュールの一部または全部を、本明細書の解決策の目的を達成すべく、実際の必要性に基づいて選択することができる。当業者なら、創造的な努力なしに、本出願の実施形態を理解し実装することができよう。
【００９８】
図8を再度参照すると、図8は、ブロックチェーンノードの内部機能モジュールおよび構造を示すものと解釈できよう。実行体は基本的には電子デバイスとすることができ、電子デバイスは次の、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つまたは複数のリモートメモリに結合することもできる。さらに、コンピュータは、別のデバイス、例えば、ほんのいくつか例を挙げると、モバイル電話、パーソナルデジタルアシスタント(PDA)、モバイルオーディオプレーヤもしくはモバイルビデオプレーヤ、ゲームコンソール、グローバルポジショニングシステム(GPS)レシーバ、またはポータブル記憶デバイス、例えばユニバーサルシリアルバス(USB)フラッシュドライブに組み込むこともできる。
【０１０８】
コンポーネント同士は、直接的に、または1つもしくは複数の中間コンポーネントを介して、電気的や光学的になど通信可能に互いに接続されることによって、互いに「結合され」得る。コンポーネント同士は、コンポーネントの一方が他方に統合される場合にも、互いに「結合され」得る。例えば、プロセッサに統合される記憶コンポーネント(例えばL2キャッシュコンポーネント)は、プロセッサに「結合される」。
【０１０９】
ユーザとの対話を可能にするために、本明細書において説明した本主題の実施形態は、ユーザに情報を表示するためのディスプレイデバイス、例えばLCD(液晶ディスプレイ)モニタと、ユーザがそれによってコンピュータに入力することのできる入力デバイス、例えばキーボードおよびポインティングデバイス、例えばマウス、トラックボール、またはタッチパッドとを有するコンピュータ上に実装するか、またはそれと通信するように構成することができる。他の種類のデバイスを使用してユーザとの対話を可能にすることもでき、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバック、または触覚フィードバックとすることができ、ユーザからの入力は、音響入力、音声入力、または触覚入力を含む、任意の形態で受領され得る。加えて、コンピュータはユーザと、ドキュメントをユーザによって使用されているデバイスに送信し、そこからドキュメントを受信することによって、例えば、ユーザのデバイス上のウェブブラウザに、そのウェブブラウザから受信した要求に応答してウェブページを送信することによって、またはユーザデバイス、例えばスマートフォンもしくは電子タブレット上で実行されているアプリと対話することによって、対話することができる。また、コンピュータはユーザと、テキストメッセージまたは他の形態のメッセージを、メッセージングアプリケーションを実行しているパーソナルデバイス、例えばスマートフォンに送信し、ユーザから返信として応答メッセージを受信することによって、対話することもできる。
【０１１０】
本明細書では、システム、装置、およびコンピュータプログラムコンポーネントに関連して、「ように構成される」という用語を使用している。1つまたは複数のコンピュータからなるシステムが、特定の動作またはアクションを実施するように構成されるとは、システム上に、動作の際にシステムにその動作またはアクションを実施させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがインストールされる、ということを意味する。1つまたは複数のコンピュータプログラムが、特定の動作またはアクションを実施するように構成されるとは、1つまたは複数のプログラムが、データ処理装置によって実行されると装置にその動作またはアクションを実施させる命令を含む、ということを意味する。専用論理回路が、特定の動作またはアクションを実施するように構成されるとは、回路が、その動作またはアクションを実施する電子論理回路を有する、ということを意味する。
【０１１１】
本明細書は、実施形態の多くの具体的詳細を含んでいるが、これらは、特許請求の範囲自体によって定められる特許請求されるものの範囲に対する限定と解釈するのではなく、特定の実施形態に特有であり得る特徴についての説明と解釈されたい。本明細書において別々の実施形態の文脈の中で説明されるいくつかの特徴は、単一の実施形態において組み合わせて実現することもできる。反対に、単一の実施形態の文脈の中で説明されるさまざまな特徴は、複数の実施形態において別々に、または任意の適切な部分組合せで、実現することもできる。さらに、特徴については上で、ある特定の組合せで作用するものと説明されていることがあり、そのようなものとして最初に特許請求されていることすらあるが、特許請求された組合せからの1つまたは複数の特徴を、場合によっては、その組合せから削除することができ、また請求項が、部分組合せまたは部分組合せの変形を対象としてよい。
【０１１２】
同様に、動作は特定の順序で図面中に示され、特許請求の範囲に記載されているが、これは、望ましい結果を達成するために、そのような動作が図示の特定の順序でもしくは順番に実施されること、または図示の全ての動作が実施されることを要求するものと理解すべきではない。ある特定の状況下では、マルチタスキングおよび並列処理が有利となることがある。さらに、上で説明した実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、全ての実施形態においてそのような分離を要求するものと理解すべきではなく、説明したプログラムコンポーネントおよびシステムは一般に、単一のソフトウェア製品に一緒に統合するか、または複数のソフトウェア製品にパッケージ化できる、ということを理解されたい。
【０１１３】
以上、本主題の特定の実施形態について説明してきた。他の実施形態が、添付の特許請求の範囲に記載の範囲に含まれる。例えば、特許請求の範囲に記載のアクションは、異なる順序で実施してもなお、望ましい結果を達成することができる。一例として、添付の図中に示されたプロセスは、望ましい結果を達成するために、図示の特定の順序、または順番を必ずしも要求とするとは限らない。場合によっては、マルチタスキングおよび並列処理が有利となることがある。
【符号の説明】
【０１１４】
100  環境
102  コンソーシアムブロックチェーンネットワーク
106  コンピューティングデバイス、コンピューティングシステム
108  コンピューティングデバイス、コンピューティングシステム
110  ネットワーク
200  概念アーキテクチャ
202  参加者システム
204  参加者システム
206  参加者システム
212  ブロックチェーンネットワーク
214  ノード
216  ブロックチェーン
216'  コピー
216''  コピー
216'''  コピー
300  ブロックデータエンコードおよびハッシュプロセス
302  ブロックチェーンノード
304  ブロックチェーンノード
306  ブロックチェーンノード
308  ブロックチェーンノード
312  ブロックチェーンネットワークのブロックチェーンデータを、あるブロックのブロックボディに記憶する
314  ECC
316  ハッシュされる
400  データ記憶方式
500  ブロックデータエンコードおよびハッシュプロセス
502  ブロックチェーンノード
504  ブロックチェーンノード
506  ブロックチェーンノード
508  ブロックチェーンノード
512  ブロックに新たなブロックデータが追加される
514  ECC
516  ハッシュされる
600  NVNに基づくブロックチェーンデータ分担記憶プロセス
602  VN
604  VN
606  VN
608  VN
610  ブロックチェーンネットワーク、NVNクラスタ
612  NVN、NVNノード
614  NVN
616  NVN
618  NVN
622  トランザクションを転送する
626  ECC
628  ハッシング
630  クライアントノード
632  トランザクションを送信する
700  プロセス
800  装置
802  受信モジュール
804  送信モジュール
806  エンコードモジュール
808  分割モジュール
810  記憶モジュール
【図１】
2021528885.tif 000003
【図２】
2021528885.tif 000004
【図３】
2021528885.tif 000005
【図４】
2021528885.tif 000006
【図５】
2021528885.tif 000007
【図６】
2021528885.tif 000008
【図７】
2021528885.tif 000009
【図８】
2021528885.tif 000010
【国際調査報告】
2021528885.tif 000011
2021528885.tif 000012