(57)【特許請求の範囲】
【請求項１】
ブロックチェーンネットワーク内のワールドステートマークルパトリシアトライ(MPT)のサブツリーを更新するためのコンピュータ実装方法であって、
前記ブロックチェーンネットワークのコンセンサスクライアントによって、前記ワールドステートMPTのルートノードを含み、最初は他のノードがない更新ツリーを作成するステップと、
前記コンセンサスクライアントによって、複数の反復で前記サブツリーの少なくとも一部の走査を実行し、各反復で、前記サブツリーの現在のノードごとに、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの現在のノードがリーフノードであり、値が等しくないと判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加するステップと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードが拡張ノードであると判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加し、前記サブツリーの前記現在のノードを前記拡張ノードによって参照されるノードに設定する前記走査の次の反復に移動するステップと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードがブランチノードであり、前記値が等しくないと判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加するステップと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードがブランチノードであり、前記値が等しいと判定し、それに応じて、前記サブツリーの前記現在のノードを、前記サブツリーの前記現在のノードのスロットが指すノードに設定する前記走査の次の反復に移動するステップと
のうちの1つを実行するステップと、
前記コンセンサスクライアントによって、前記サブツリーの前記更新ツリーを前記ブロックチェーンネットワークの非コンセンサスノードに送信するステップであり、前記非コンセンサスクライアントが、前記非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供するために、前記更新ツリーを使用してローカルに記憶されたサブツリーを更新する、ステップと
を含む方法。
【請求項２】
少なくとも1回の反復中に、前記ワールドステートMPTにおいて対応するノードを検出し、検索パスを提供するステップであり、前記検索パスにおける1つまたは複数のノードが、中間ノードとしてマークされ、前記サブツリーにないとしてマークされている、ステップをさらに含む請求項1に記載の方法。
【請求項３】
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの現在のノードがブランチノードであり、現在の反復が、前記サブツリーの前記現在のノードが考慮される最初の反復であると判定したことに応じて、前記サブツリーの前記現在のノードの値と前記ワールドステートMPTの現在のノードの値を比較することが実行される、請求項1に記載の方法。
【請求項４】
前記サブツリーの前記現在のノードが前記ルートノードであると判定されたことに応じて、前記走査が終了する、請求項1に記載の方法。
【請求項５】
前記サブツリーのノードを前記更新ツリーのノードで置き換えること、および前記更新ツリーのノードを前記サブツリーに挿入することのうちの1つまたは複数によって、前記ローカルに記憶されたサブツリーが更新される、請求項1に記載の方法。
【請求項６】
前記非コンセンサスクライアントから前記コンセンサスクライアントによって受信された要求に応じて、前記更新ツリーが作成される、請求項1に記載の方法。
【請求項７】
前記サブツリーのルートノードの値と前記ワールドステートMPTの前記ルートノードの値が異なると判定したことに応じて、前記更新ツリーが作成される、請求項1に記載の方法。
【請求項８】
1つまたは複数のコンピュータに結合され、ブロックチェーンネットワーク内のワールドステートマークルパトリシアトライ(MPT)のサブツリーを更新するように実行可能な命令を記憶した非一時的コンピュータ可読記憶媒体であって、前記命令が、
前記ブロックチェーンネットワークのコンセンサスクライアントによって、前記ワールドステートMPTのルートノードを含み、最初は他のノードがない更新ツリーを作成し、
前記コンセンサスクライアントによって、複数の反復で前記サブツリーの少なくとも一部の走査を実行し、各反復で、前記サブツリーの現在のノードごとに、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの現在のノードがリーフノードであり、値が等しくないと判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加することと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードが拡張ノードであると判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加し、前記サブツリーの前記現在のノードを前記拡張ノードによって参照されるノードに設定する前記走査の次の反復に移動することと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードがブランチノードであり、前記値が等しくないと判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加することと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードがブランチノードであり、前記値が等しいと判定し、それに応じて、前記サブツリーの前記現在のノードを、前記サブツリーの前記現在のノードのスロットが指すノードに設定する前記走査の次の反復に移動することと
のうちの1つを実行し、
前記コンセンサスクライアントによって、前記サブツリーの前記更新ツリーを前記ブロックチェーンネットワークの非コンセンサスノードに送信し、前記非コンセンサスクライアントが、前記非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供するために、前記更新ツリーを使用してローカルに記憶されたサブツリーを更新する
ように、前記1つまたは複数のコンピュータによって実行可能である、非一時的コンピュータ可読記憶媒体。
【請求項９】
少なくとも1回の反復中に、前記ワールドステートMPTにおいて対応するノードを検出し、検索パスを提供することであって、前記検索パスにおける1つまたは複数のノードが中間ノードとしてマークされ、前記サブツリーにないとしてマークされている、ことを行うように、前記1つまたは複数のコンピュータによって実行可能なさらなる命令で構成される、請求項8に記載のコンピュータ可読記憶媒体。
【請求項１０】
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの現在のノードがブランチノードであり、現在の反復が、前記サブツリーの前記現在のノードが考慮される最初の反復であると判定したことに応じて、前記サブツリーの前記現在のノードの値と前記ワールドステートMPTの現在のノードの値を比較することが実行される、請求項8に記載のコンピュータ可読記憶媒体。
【請求項１１】
前記サブツリーの前記現在のノードが前記ルートノードであると判定されたことに応じて、前記走査が終了する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項１２】
前記サブツリーのノードを前記更新ツリーのノードで置き換えること、および前記更新ツリーのノードを前記サブツリーに挿入することのうちの1つまたは複数によって、前記ローカルに記憶されたサブツリーが更新される、請求項8に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記非コンセンサスクライアントから前記コンセンサスクライアントによって受信された要求に応じて、前記更新ツリーが作成される、請求項8に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記サブツリーのルートノードの値と前記ワールドステートMPTの前記ルートノードの値が異なると判定したことに応じて、前記更新ツリーが作成される、請求項8に記載のコンピュータ可読記憶媒体。
【請求項１５】
1つまたは複数のコンピュータと、
前記1つまたは複数のコンピュータに結合され、ブロックチェーンネットワーク内のワールドステートマークルパトリシアトライ(MPT)のサブツリーを更新するように実行可能な命令を記憶した1つまたは複数のコンピュータ可読メモリと
を含むシステムであって、前記命令が、
前記ブロックチェーンネットワークのコンセンサスクライアントによって、前記ワールドステートMPTのルートノードを含み、最初は他のノードがない更新ツリーを作成し、
前記コンセンサスクライアントによって、複数の反復で前記サブツリーの少なくとも一部の走査を実行し、各反復で、前記サブツリーの現在のノードごとに、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの現在のノードがリーフノードであり、値が等しくないと判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加することと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードが拡張ノードであると判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加し、前記サブツリーの前記現在のノードを前記拡張ノードによって参照されるノードに設定する前記走査の次の反復に移動することと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードがブランチノードであり、前記値が等しくないと判定し、それに応じて、前記ワールドステートMPTの前記現在のノードを前記更新ツリーに追加することと、
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの前記現在のノードがブランチノードであり、前記値が等しいと判定し、それに応じて、前記サブツリーの前記現在のノードを、前記サブツリーの前記現在のノードのスロットが指すノードに設定する前記走査の次の反復に移動することと
のうちの1つを実行し、
前記コンセンサスクライアントによって、前記サブツリーの前記更新ツリーを前記ブロックチェーンネットワークの非コンセンサスノードに送信し、前記非コンセンサスクライアントが、前記非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供するために、前記更新ツリーを使用してローカルに記憶されたサブツリーを更新する
ように、前記1つまたは複数のコンピュータによって実行可能である
システム。
【請求項１６】
前記1つまたは複数のコンピュータ可読メモリが、少なくとも1回の反復中に、前記ワールドステートMPTにおいて対応するノードを検出し、検索パスを提供することであって、前記検索パスにおける1つまたは複数のノードが中間ノードとしてマークされ、前記サブツリーにないとしてマークされている、ことを行うように、前記1つまたは複数のコンピュータによって実行可能なさらなる命令で構成される、請求項15に記載のシステム。
【請求項１７】
前記サブツリーの前記現在のノードおよび前記ワールドステートMPTの現在のノードがブランチノードであり、現在の反復が、前記サブツリーの前記現在のノードが考慮される最初の反復であると判定したことに応じて、前記サブツリーの前記現在のノードの値と前記ワールドステートMPTの現在のノードの値を比較することが実行される、請求項15に記載のシステム。
【請求項１８】
前記サブツリーの前記現在のノードが前記ルートノードであると判定されたことに応じて、前記走査が終了する、請求項15に記載のシステム。
【請求項１９】
前記サブツリーのノードを前記更新ツリーのノードで置き換えること、および前記更新ツリーのノードを前記サブツリーに挿入することのうちの1つまたは複数によって、前記ローカルに記憶されたサブツリーが更新される、請求項15に記載のシステム。
【請求項２０】
前記非コンセンサスクライアントから前記コンセンサスクライアントによって受信された要求に応じて、前記更新ツリーが作成される、請求項15に記載のシステム。
【請求項２１】
前記サブツリーのルートノードの値と前記ワールドステートMPTの前記ルートノードの値が異なると判定したことに応じて、前記更新ツリーが作成される、請求項15に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックチェーンのワールドステートマークルパトリシアトライ（World State Merkle Patricia Trie）サブツリーの更新に関する。
【背景技術】
【０００２】
コンセンサスネットワークおよび/またはブロックチェーンネットワークと呼ばれることもある分散型台帳システム(distributed ledger system: DLS)によって、参加しているエンティティは、安全かつ不変にデータを記憶できる。DLSは、一般に、任意の特定の使用事例を参照せずにブロックチェーンネットワークと呼ばれる。ブロックチェーンネットワークのタイプの例には、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、およびコンソーシアムブロックチェーンネットワークがあり得る。パブリックブロックチェーンネットワークは、すべてのエンティティがDLSを使用し、コンセンサスプロセスに参加するために公開されている。プライベートブロックチェーンネットワークは、読取りおよび書込み許可を集中的に制御する特定のエンティティに提供されている。コンソーシアムブロックチェーンネットワークは、コンセンサスプロセスを制御するエンティティの選択グループに提供され、アクセス制御層を含む。
【０００３】
情報を記憶するために、ハッシュツリーをブロックチェーンネットワークに使用することができる。たとえば、ブロックチェーンネットワークのワールドステート(たとえば、ブロックチェーンネットワーク内のノード(アカウント)の状態)は、ハッシュツリーに記憶することができる。ハッシュツリーの例には、ブロックチェーンネットワーク内のすべてのノード(アカウント)のワールドステートを維持するワールドステートマークルパトリシアトライ(MPT)がある。ブロックチェーンネットワークが成長するにつれて、それに応じてワールドステート情報が成長し、その結果、複雑でデータ集約型のハッシュツリーになる。
【０００４】
ブロックチェーンネットワーク内のすべてのノードがブロックチェーンのワールドステートを維持する必要があるわけではない。たとえば、ブロックチェーンネットワーク内のブロックチェーンへのトランザクションの追加に参加する、いわゆるコンセンサスノード(フルクライアント)は、コンセンサスプロセスへの参加を可能にするために、ワールドステートハッシュツリーを維持する。ブロックチェーンネットワーク内でのみトランザクションを実行する他のノード(ライトクライアント)は、維持する必要はなく、ワールドステートを認識する必要さえない。しかしながら、そのようなノードは、それら自体の状態、およびブロックチェーン内でトランザクションを行う他のノードの状態(部分状態など)を認識している必要がある。ワールドステートのハッシュツリーのサイズおよび複雑さ、ならびにライトクライアントが使用するデバイスのリソース制限が与えられると、リソースおよび帯域幅効率の高いデータ構造、およびブロックチェーンネットワークの部分状態を維持するためにデータ構造を更新するためのプロセスが必要である。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書の実装形態は、ワールドステートマークルパトリシアトライ(MPT)のサブツリーを生成し、サブツリーを更新するためのコンピュータ実装方法を含む。
【０００６】
いくつかの実装形態では、アクションは、ブロックチェーンネットワークのコンセンサスクライアントによって、ワールドステートMPTのルートノードを含み、最初は他のノードがない更新ツリーを作成することと、コンセンサスクライアントによって、複数の反復でサブツリーの少なくとも一部の走査を実行し、各反復で、サブツリーの現在のノードごとに、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがリーフノードであり、値が等しくないと判定し、それに応じて、ワールドステートMPTの現在のノードを更新ツリーに追加することと、サブツリーの現在のノードおよびワールドステートMPTの現在のノードが拡張ノードであると判定し、それに応じて、ワールドステートMPTの現在のノードを更新ツリーに追加し、サブツリーの現在のノードを拡張ノードによって参照されるノードに設定する走査の次の反復に移動することと、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがブランチノードであり、値が等しくないと判定し、それに応じて、ワールドステートMPTの現在のノードを更新ツリーに追加することと、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがブランチノードであり、値が等しいと判定し、それに応じて、サブツリーの現在のノードを、サブツリーの現在のノードのスロットが指すノードに設定する走査の次の反復に移動することとのうちの1つを実行することと、コンセンサスクライアントによって、サブツリーの更新ツリーをブロックチェーンネットワークの非コンセンサスノードに送信することであり、非コンセンサスクライアントが、非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供するために、更新ツリーを使用してローカルに記憶されたサブツリーを更新する、こととを含む。他の実装形態は、コンピュータ記憶デバイス上に符号化された方法のアクションを実行するように構成された対応するシステム、装置、およびコンピュータプログラムを含む。
【０００７】
これらおよび他の実装形態は各々、以下の機能のうちの1つまたは複数を、随意に含んでいてもよく、アクションは、少なくとも1回の反復中に、ワールドステートMPTにおいて対応するノードを検出し、検索パスを提供することであり、検索パスにおける1つまたは複数のノードが中間ノードとしてマークされ、サブツリーにないとしてマークされる、ことをさらに含み、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがブランチノードであり、現在の反復が、サブツリーの現在のノードが考慮される最初の反復であると判定したことに応じて、サブツリーの現在のノードの値とワールドステートMPTの現在のノードの値を比較することが実行され、サブツリーの現在のノードがルートノードであると判定されたことに応じて、走査が終了し、サブツリーのノードを更新ツリーのノードで置き換えること、および更新ツリーのノードをサブツリーに挿入することのうちの1つまたは複数によって、ローカルに記憶されたサブツリーが更新され、非コンセンサスクライアントからコンセンサスクライアントによって受信された要求に応じて、更新ツリーが作成され、サブツリーのルートノードの値とワールドステートMPTのルートノードの値が異なると判定したことに応じて、更新ツリーが作成される。
【０００８】
本明細書は、1つまたは複数のプロセッサに結合され、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、本明細書で提供される方法の実装形態に従って動作を実行させる命令を記憶する1つまたは複数の非一時的コンピュータ可読記憶媒体も提供する。
【０００９】
本明細書は、本明細書で提供される方法を実装するためのシステムをさらに提供する。システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、本明細書で提供される方法の実装形態に従って動作を実行させる命令を記憶する1つまたは複数のプロセッサに結合されたコンピュータ可読記憶媒体とを含む。
【００１０】
本明細書による方法は、本明細書で説明される態様および機能の任意の組合せを含み得ることが理解される。すなわち、本明細書による方法は、本明細書で具体的に説明した態様および機能の組合せに限定されず、提供される態様および機能の任意の組合せも含む。
【００１１】
本明細書の1つまたは複数の実装形態の詳細は、添付の図面および以下の説明に記載されている。本明細書の他の機能および利点は、説明および図面、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】本明細書の実装形態を実行するために使用できる環境の一例を示す図である。
【図２】本明細書の実装形態による概念的アーキテクチャの一例を示す図である。
【図３】ワールドステートマークルパトリシアトライ(MPT)の一例を示す図である。
【図４】本明細書の実装形態による図3の例示的なワールドステートMPTに基づいて生成されたサブツリーの一例を示す図である。
【図５Ａ】本明細書の実装形態に従って実行できるプロセスの一例を示す図である。
【図５Ｂ】本明細書の実装形態に従って実行できるプロセスの一例を示す図である。
【図６】更新を含む図3の例示的なワールドステートMPTを示す図である。
【図７】本明細書の実装形態による図6の例示的なワールドステートMPTに基づく更新を含む図4の例示的なサブツリーを示す図である。
【図８Ａ】本明細書の実装形態に従って実行できるプロセスの一例を示す図である。
【図８Ｂ】本明細書の実装形態に従って実行できるプロセスの一例を示す図である。
【図９】本明細書の実装形態による装置のモジュールの例を示す図である。
【図１０】本明細書の実装形態による装置のモジュールの例を示す図である。
【発明を実施するための形態】
【００１３】
様々な図面における同様の参照符号は、同様の要素を示す。
【００１４】
本明細書の実装形態は、ワールドステートマークルパトリシアトライ(MPT)のサブツリーを生成し、サブツリーを更新するためのコンピュータ実装方法を含む。いくつかの実装形態では、アクションは、複数の反復でワールドステートMPTのサブツリーを走査し、各反復で、サブツリーの現在のノードごとに、ワールドステートMPTの現在のノードを更新ツリーに追加することと、ワールドステートMPTの現在のノードを更新ツリーに追加し、サブツリーの現在のノードを拡張ノードによって参照されるノードに設定する走査の次の反復に移動することと、ワールドステートMPTの現在のノードを更新ツリーに追加し、サブツリーの現在のノードをサブツリーの現在のノードのスロットが指すノードに設定する走査の次の反復に移動することとのうちの1つを実行することと、更新ツリーを使用してローカルに記憶されたサブツリーを更新するために、更新ツリーをクライアントに送信することとを含む。
【００１５】
本明細書の実装形態のさらなる内容を提供するために、上記で紹介したように、コンセンサスネットワーク(たとえば、ピアツーピアノードで構成される)およびブロックチェーンネットワークとも呼ばれ得る分散型台帳システム(DLS)によって、参加しているエンティティは、安全かつ不変にトランザクションを実行し、データを記憶できる。ブロックチェーンという用語は一般に、特定のネットワークおよび/または使用事例に関連付けられているが、本明細書では、任意の特定の使用事例を参照せずに、一般的にDLSを指すために、ブロックチェーンが使用される。
【００１６】
ブロックチェーンは、トランザクションが不変であるようにトランザクションを記憶するデータ構造である。したがって、ブロックチェーンに記録されたトランザクションは信頼でき、信用できる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、前のブロックの暗号化ハッシュを含めることによって、チェーン内のその直前の前のブロックにリンクされる。各ブロックは、タイムスタンプ、それ自体の暗号化ハッシュ、および1つまたは複数のトランザクションも含む。ブロックチェーンネットワークのノードによってすでに検証されたトランザクションは、ハッシュされ、マークルツリーに符号化される。マークルツリーは、ツリーのリーフノードのデータがハッシュされ、ツリーの各ブランチのすべてのハッシュがブランチのルートで連結されるデータ構造である。このプロセスは、ツリーをツリー全体のルートまで続け、これは、ツリー内のすべてのデータを表すハッシュを記憶する。ツリーに記憶されているトランザクションのものであるとされるハッシュは、ツリーの構造と一致しているかどうかを判定することによって、迅速に検証できる。ブロックチェーンは、トランザクションを記憶するための分散型または少なくとも部分的に分散型のデータ構造であるのに対して、ブロックチェーンネットワークは、トランザクションのブロードキャスト、検証、妥当性検査などによって1つまたは複数のブロックチェーンを管理、更新、および維持するコンピューティングノードのネットワークである。
【００１７】
上記で紹介したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供できる。本明細書の実装形態について、コンソーシアムブロックチェーンネットワークを参照して、本明細書でさらに詳細に説明する。しかしながら、本明細書の実装形態は、任意の適切なタイプのブロックチェーンネットワークで実現できると企図される。本明細書で説明される技法は、コンソーシアムブロックチェーンネットワークに関連するものとして示されているが、この技法は、変更の有無にかかわらず、パブリックブロックチェーンネットワークおよびプライベートブロックチェーンネットワークを含む他のタイプのブロックチェーンネットワークでも使用できる。
【００１８】
一般に、コンソーシアムブロックチェーンネットワークは、参加しているエンティティの間でプライベートである。コンソーシアムブロックチェーンネットワークでは、コンセンサスプロセスは、コンセンサスノードと呼ばれ得る認可されたノードのセットによって制御され、1つまたは複数のコンセンサスノードはそれぞれのエンティティ(たとえば、金融機関、保険会社など)によって動作される。たとえば、10のエンティティ(たとえば、金融機関、保険会社など)のコンソーシアムは、コンソーシアムブロックチェーンネットワークを動作させることができ、その各々は、コンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを動作させる。
【００１９】
いくつかの例では、コンソーシアムブロックチェーンネットワーク内で、グローバルブロックチェーンは、すべてのノードにわたって複製されるブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関して完全な状態のコンセンサスにある。コンセンサスを達成するために(ブロックチェーンへのブロックの追加の合意など)、コンセンサスプロトコルがコンソーシアムブロックチェーンネットワーク内に実装される。コンセンサスプロトコルの例には、限定はしないが、実用的ビザンチンフォールトトレラント性(practical Byzantine fault tolerance: PBFT)、プルーフオブワーク(proof-of-work: POW)、プルーフオブステーク(proof-of-stake: POS)、およびプルーフオブオーソリティ(proof-of-authority: POA)がある。
【００２０】
本明細書の実装形態は、上記の文脈を考慮して本明細書でさらに詳細に説明される。より詳細には、本明細書でさらに詳細に説明するように、本明細書の実装形態は、MPTツリー内の検索アドレスの順序を改善するために深さ優先の先行順走査(depth-first pre-order traversal)を実行し、走査プロセスで、本明細書では2つのアカウントノード(リーフノード)間の遷移ノードと呼ばれる特殊なタイプのノードを利用する。
【００２１】
さらに詳細には、本明細書の実装形態は、ワールドステートMPT T0およびアドレスリストL0に基づいて、本明細書ではサブツリーT2と呼ばれるワールドステートサブツリーを提供する。本明細書の実装形態は、最初に本明細書ではサブツリーT1と呼ばれるアドレスリストL0からサブツリーを構築し、次いで、サブツリーT1において深さ優先の先行順走査を実行することによって、アドレスごとにルートノードからリードノードへのパスを検出することを回避する。アカウントノードアドレス、および遷移ノードアドレスは、深さ優先の先行順走査を通じて順番に検出される。2つのアカウントノード間に遷移ノードがある場合、第1のアカウントノードは遷移ノードに返され、遷移ノードから他方のアカウントノードが検出される。このようにして、第2のアカウントノードの検索は、ルートノードで開始する必要はなく、代わりに遷移ノードで開始する。
【００２２】
同じく本明細書でさらに詳細に説明するように、本明細書の実装形態によって、プロセッサおよびストレージ要件が低減される。たとえば、アドレスごとに、ルートノードから対応するリーフノードへのパスが保存され、これらのパス内の重複するノードがマージされる。より詳細には、ルートノードから各アカウントノード(すなわち、アカウントアドレスに対応する各リーフノード)への完全なパスを記憶する代わりに、2つのアカウントノード間に遷移ノードがある場合、遷移ノードから次のアカウントノードへのパスのみが保存される。このようにして、複数のアカウントノードへのパスがマージされ、これによって、効率が向上し、パスの重複によってもたらされる動作およびストレージの無駄が回避される。
【００２３】
図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)が1つまたは複数の他のエンティティ(たとえば、他の参加者)とのトランザクションを管理するために使用するトランザクション管理システムなど、第2のエンティティのコンピュータ実装サービスをホストすることができる。図1の例では、コンソーシアムブロックチェーンネットワーク102は、ノードのピアツーピアネットワークとして表され、コンピューティングシステム106、108は、それぞれ、コンソーシアムブロックチェーンネットワーク102に参加する第1のエンティティおよび第2のエンティティのノードを提供する。
【００２５】
図2は、本明細書の実装形態による概念的アーキテクチャ200の一例を示す。例示的な概念的アーキテクチャ200は、参加者A、参加者B、および参加者Cにそれぞれ対応する参加者システム202、204、206を含む。各参加者(たとえば、ユーザ、企業)は、複数のノード214を含むピアツーピアネットワークとして提供されるブロックチェーンネットワーク212に参加し、その少なくとも一部は、ブロックチェーン216に情報を不変に記録する。単一のブロックチェーン216がブロックチェーンネットワーク212内に概略的に示されているが、ブロックチェーン216の複数のコピーが提供され、本明細書でさらに詳細に説明されるように、ブロックチェーンネットワーク212にわたって維持される。
【００２６】
図示された例では、各参加者システム202、204、206は、それぞれ参加者A、参加者B、および参加者Cによって、またはそれらに代わって提供され、ブロックチェーンネットワーク内のそれぞれのノード214として機能する。本明細書で使用されるように、ノードは一般に、ブロックチェーンネットワーク212に接続され、それぞれの参加者がブロックチェーンネットワークに参加することを可能にする個々のシステム(たとえば、コンピュータ、サーバ)を指す。図2の例では、参加者は、各ノード214に対応する。しかしながら、参加者は、ブロックチェーンネットワーク212内の複数のノード214を動作させることができ、および/または複数の参加者がノード214を共有できることが企図されている。いくつかの例では、参加者システム202、204、206は、プロトコル(たとえば、ハイパーテキスト転送プロトコルセキュア(HTTPS))を使用して、および/またはリモートプロシージャ呼出し(RPC)を使用して、ブロックチェーンネットワーク212と、またはそれを介して通信する。
【００２７】
ノード214は、ブロックチェーンネットワーク212内で異なる程度の参加を有することができる。たとえば、いくつかのノード214は、コンセンサスプロセスに参加することができ(たとえば、ブロックチェーン216にブロックを追加するマインダノードとして)、他のノード214は、コンセンサスプロセスに参加しない。別の例として、いくつかのノード214は、ブロックチェーン216の完全なコピーを記憶し、他のノード214は、ブロックチェーン216の一部のコピーのみを記憶する。たとえば、データアクセス権限は、それぞれの参加者が各システム内に記憶するブロックチェーンデータを制限できる。図2の例では、参加者システム202、204は、ブロックチェーン216のそれぞれの完全なコピー216'、216''を記憶する。
【００２８】
ブロックチェーンネットワークに参加しているノードはクライアントと呼ぶことができ、ピアツーピアの方法で他のクライアントに接続する。上述のように、クライアント(ノード)は、様々な程度でブロックチェーンネットワークに参加できる。たとえば、クライアントは、フルクライアントおよびライトクライアントを含み得る。
【００２９】
いくつかの例では、フルクライアントは、コンセンサス処理に参加し、ブロックチェーンの状態を維持する(たとえば、ブロックチェーンを記憶し、継続的に更新する)。したがって、各フルクライアントは、ブロックチェーンに追加されるすべてのブロック、および、したがって、各ブロック内のすべてのトランザクションをダウンロードし、検証する。図2の例では、参加者システム202、204は、フルクライアント(フルノード)と見なすことができる。
【００３０】
いくつかの例では、ライトクライアント(ライトノード)によって、ユーザは、ブロックチェーンシステムにアクセスし、対話することができる。ライトクライアントは、コンセンサス処理に参加せず、ブロックチェーン全体を同期しない。したがって、ライトクライアントは、非コンセンサスノードと呼ぶことができる。代わりに、ライトクライアントは、1つまたは複数のフルクライアントに接続し、それを介してライトクライアントはブロックチェーンと対話する。すなわち、ライトクライアントは、ブロックチェーンと直接対話せず、代わりに、フルノードを仲介者として使用する。したがって、ライトクライアントは、フルクライアントよりも必要なコンピューティングリソースおよびストレージがかなり少ない(たとえば、桁違いに少ない)。しかしながら、ライトクライアントは、ブロックチェーン全体にアクセスできない場合があり、代わりに、アクセスが許可されているデータのみを閲覧でき、またはそれにアクセスでき得る。図2の例では、参加者システム206は、ブロックチェーン216のコピーがないライトクライアントと見なすことができる。
【００３１】
ブロックチェーン(たとえば、図2のブロックチェーン216)は、ブロックのチェーンから構成され、各ブロックはデータを記憶する。データの例には、2人以上の参加者間のトランザクションを表すトランザクションデータがある。本明細書ではトランザクションを非限定的な例として使用しているが、(たとえば、文書、画像、ビデオ、音声など)任意の適切なデータをブロックチェーンに記憶できると企図される。トランザクションの例には、限定はしないが、価値のあるもの(資産、製品、サービス、通貨など)の交換があり得る。トランザクションデータは、ブロックチェーン内に不変に記憶される。すなわち、トランザクションデータは変更できない。
【００３２】
ブロックに記憶する前に、トランザクションデータがハッシュされる。ハッシングは、トランザクションデータ(文字列データとして提供される)を固定長のハッシュ値(同じく文字列データとして提供される)に変換するプロセスである。ハッシュ値をハッシュ解除してトランザクションデータを取得することはできない。ハッシングによって、トランザクションデータのわずかな変更でさえも、確実にまったく異なるハッシュ値が得られる。さらに、上述のように、ハッシュ値は固定長である。すなわち、トランザクションデータのサイズに関係なく、ハッシュ値の長さは固定されている。ハッシングは、ハッシュ関数を介してトランザクションデータを処理してハッシュ値を生成することを含む。例示的なハッシュ関数には、限定はしないが、256ビットのハッシュ値を出力するセキュアハッシュアルゴリズム(SHA)-256がある。
【００３３】
複数のトランザクションのトランザクションデータはハッシュされ、ブロックに記憶される。たとえば、2つのトランザクションのハッシュ値が提供され、それ自体がハッシュされて別のハッシュが提供される。このプロセスは、ブロックに記憶されるべきすべてのトランザクションについて、単一のハッシュ値が提供されるまで繰り返される。このハッシュ値は、マークルルートハッシュと呼ばれ、ブロックのヘッダに記憶される。トランザクションのうちのいずれかの変更によって、そのハッシュ値が変更され、最終的に、マークルルートハッシュが変更される。
【００３４】
ブロックは、コンセンサスプロトコルを介してブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードはコンセンサスプロトコルに参加し、ブロックチェーンにブロックを追加する作業を実行する。そのようなノードは、コンセンサスノードと呼ばれる。上記で紹介したPBFTは、コンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行して、ブロックチェーンにトランザクションを追加する。
【００３５】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内のすべてのトランザクションをハッシュし、ハッシュ値をペアで組み合わせて、ブロック内のすべてのトランザクションについて単一のハッシュ値が提供されるまで、さらなるハッシュ値を生成する(マークルルートハッシュ)。このハッシュは、ブロックヘッダに追加される。コンセンサスノードは、ブロックチェーン内の最も最近のブロック(すなわち、ブロックチェーンに追加された最後のブロック)のハッシュ値も決定する。コンセンサスノードはまた、ナンス値およびタイムスタンプをブロックヘッダに追加する。
【００３６】
一般に、PBFTは、ビザンチン障害(たとえば、誤動作しているノード、悪意のあるノード)を許容する実際のビザンチン状態機械の複製を提供する。これは、PBFTにおいて、障害が発生すると想定(たとえば、独立したノード障害の存在、および/またはコンセンサスノードによって送信された改ざんされたメッセージを想定)することによって実現される。PBFTでは、コンセンサスノードは、プライマリコンセンサスノードおよびバックアップコンセンサスノードを含むシーケンスで提供される。プライマリコンセンサスノードは定期的に変更され、ブロックチェーンネットワーク内のすべてのコンセンサスノードがブロックチェーンネットワークのワールドステートに関して合意に達することによって、トランザクションがブロックチェーンに追加される。このプロセスでは、コンセンサスノード間でメッセージが送信され、各コンセンサスノードは、指定されたピアノードからメッセージが受信されたことを証明し、送信中にメッセージが変更されなかったことを検証する。
【００３７】
PBFTでは、コンセンサスプロトコルは、複数の段階で提供され、すべてのコンセンサスノードが同じ状態で始まる。まず、クライアントは、(たとえば、ブロックチェーンネットワーク内でトランザクションを実行するなど)サービス動作を呼び出すように要求をプライマリコンセンサスノードに送信する。要求の受信に応じて、プライマリコンセンサスノードは、要求をバックアップコンセンサスノードにマルチキャストする。バックアップコンセンサスノードが要求を実行し、各々がクライアントに応答を送信する。クライアントは、しきい値数の応答が受信されるまで待つ。いくつかの例では、クライアントは、f+1の応答が受信されるのを待ち、ここで、fは、ブロックチェーンネットワーク内で許容できる障害のあるコンセンサスノードの最大数である。最終的な結果として、十分な数のコンセンサスノードがブロックチェーンに追加されるレコードの順序について合意に達し、そのレコードが受け入れられる、または拒否される。
【００３８】
いくつかのブロックチェーンネットワークでは、トランザクションのプライバシーを維持するために、暗号化が実装される。たとえば、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を識別できないように、2つのノードがトランザクションをプライベートに保ちたい場合、ノードは、トランザクションデータを暗号化できる。例示的な暗号方法には、限定はしないが、対称暗号化、非対称暗号化がある。対称暗号化とは、暗号化(プレーンテキストから暗号文を生成)と復号(暗号文からプレーンテキストを生成)の両方に単一のキーを使用する暗号化プロセスを指す。対称暗号化では、複数のノードが同じキーを利用可能であるため、各ノードは、トランザクションデータを暗号化/復号できる。
【００３９】
非対称暗号化は、各々秘密鍵および公開鍵を含む鍵ペアを使用し、秘密鍵はそれぞれのノードのみに知られており、公開鍵はブロックチェーンネットワーク内の任意のまたはすべての他のノードに知られている。ノードは、別のノードの公開鍵を使用してデータを暗号化し、暗号化されたデータは、他のノードの秘密鍵を使用して復号できる。たとえば、再び図2を参照すると、参加者Aは、参加者Bの公開鍵を使用してデータを暗号化し、暗号化されたデータを参加者Bに送信できる。参加者Bは、その秘密鍵を使用して暗号化されたデータ(暗号文)を復号し、元のデータ(プレーンテキスト)を抽出することができる。ノードの公開キーで暗号化されたメッセージは、ノードの秘密鍵を使用してのみ復号できる。
【００４０】
非対称暗号化は、デジタル署名を提供するために使用され、トランザクションの参加者がトランザクションの他の参加者、およびトランザクションの有効性を確認できるようにする。たとえば、ノードは、メッセージにデジタル署名することができ、別のノードは、参加者Aのデジタル署名に基づいて、ノードによってメッセージが送信されたことを確認することができる。デジタル署名を使用して、伝送途中にメッセージが改ざんされないようにすることもできる。たとえば、再び図2を参照すると、参加者Aは、メッセージを参加者Bに送信する。参加者Aはメッセージのハッシュを生成し、次いで、その秘密鍵を使用して、ハッシュを暗号化して、暗号化ハッシュとしてデジタル署名を提供する。参加者Aは、デジタル署名をメッセージに追加し、デジタル署名付きのメッセージを参加者Bに送信する。参加者Bは、参加者Aの公開鍵を使用してデジタル署名を復号し、ハッシュを抽出する。参加者Bは、メッセージをハッシュし、ハッシュを比較する。ハッシュが同じである場合、参加者Bは、メッセージが実際に参加者Aからのものであり、改ざんされていないことを確認することができる。
【００４１】
本明細書の実装形態についてのさらなるコンテキストを提供するために、ハッシュツリー(上記で紹介したマークルツリーとも呼ばれる)は、ノードのツリー、およびノード間のエッジである。マークルツリーは、ルートノード、子ノード、およびリーフノードを含む。ブロックチェーンネットワークにおいて、マークルツリーは、上述したようにハッシュ値を記憶する。マークルツリーでは、各リーフノードにデータブロックのハッシュのラベルが付けられ、すべての非リーフノードにその子ノードのラベルのハッシュのラベルが付けられる。マークルツリーは、ブロックチェーンなどの大きいデータ構造のコンテンツの効率的で安全な検証を可能にする。トライ(プレフィックスツリーとも呼ばれる)は、アルファベット上に文字列を記憶するために使用できる多方向ツリー構造である。パトリシアトライは、トライのコンパクトな表現であり、唯一の子である任意のノードがその親ノードとマージされる。マークルパトリシアトライ(マークルパトリシアトライ(ツリー)またはMPTとも呼ばれる)は、マークルツリーとパトリシアトライ(プレフィックスツリー)の両方を組み込むツリーであり、両方の利点を継承する。MPTは、データの迅速な比較および更新を提供する。
【００４２】
さらに詳細には、MPTは、256ビットのバイナリフラグメントと任意の長さのバイナリデータ(バイトアレイ)との間をマッピングする永続的なミュータブルなデータ構造として説明できる。いくつかの例では、MPTはデータベースとして実装できる。MPTは、キーと値のペアの所与のセットを識別する単一の値を提供し、これは、32バイトシーケンスまたは空のバイトシーケンスのいずれかであり得る。たとえば、MPTがルートノードからリーフノードに走査されると、対応するキーと値のペアが提供される。キーは走査を通じて蓄積され、以下で説明するように、各ブランチノードから単一のニブル(すなわち、単一の16進の数字(16進数字))を取得する。複数のキーが同じプレフィックスを共有する場合、または一意のサフィックスを有する単一のキーの場合、最適化ノードが提供される。結果として、MPTを走査する間、他の2つのノードタイプ、拡張ノード、およびリーフノードの各々から複数のニブルを取得できる。
【００４３】
MPTでは、リーフノードは各々、2アイテム構造として提供される。1つのアイテムは、キーの累積によってまだ考慮されていないキーのニブルに対応し、ルートから走査されるように分岐する。16進数のプレフィックス符号化が使用され、関数の第2のパラメータは、真である必要がある。リーフノードの例、およびそれぞれのアイテムについて、本明細書でさらに詳細に説明される。拡張ノードは各々、2アイテム構造として提供される。1つのアイテムは、ニブルキーの蓄積を超えて少なくとも2つの異なるキーによって共有されるサイズよりも大きいサイズの一連のニブルに対応し、ルートから走査されるように分岐する。16進数のプレフィックス符号化が使用され、関数の第2のパラメータは、偽である必要がある。拡張ノードの例、およびそれぞれのアイテムについて、本明細書でさらに詳細に説明される。ブランチノードは17アイテム構造として提供され、最初の16アイテムは、走査のこの時点でのキーの16の可能なニブル値の各々に対応する(たとえば、16進値0〜fなど)。第17のアイテムは、これがターミネータノードである場合に使用され、したがって、その走査のこの時点でキーが終了する。ブランチは、必要な場合にのみ使用され、ゼロ以外の単一のエントリのみを含むブランチノードは存在しない可能性がある。
【００４４】
ブロックチェーンネットワークでは、MPTは暗号認証および性能の平衡化を可能にし、ユーザのアカウントステータス(およびスマートコントラクト)を編成するためのワールドステートデータ編成に使用される。一部のブロックチェーンネットワークでは、いわゆるワールドステートMPTを介してアカウントの状態を照会するために、インターフェースが提供される。たとえば、アカウントアドレスは、インターフェースを介して入力でき、ブロックチェーンネットワークのノード(たとえばフルクライアントなど)は、アカウントのステータスを返す。多数のアカウントの状態を照会すると、インターフェースが繰り返し呼び出され、各アカウントのステータスが返される。返されるデータ(たとえば、アカウント、ステータスなど)は断片化されており、構造を有していないことに留意されたい。このデータはローカルでステータスツリーにアセンブルできるが、得られたステータスツリーおよびワールドステートMPTは、一般に一致しない。結果として、MPT自体の利点が失われ、動作およびストレージの性能が比較的低くなる。
【００４５】
本明細書でさらに詳細に説明するように、本明細書の実装形態は、MPTツリー内の検索アドレスの順序を改善するために深さ優先の先行順走査を実行し、走査プロセスで、本明細書では2つのアカウントノード(リーフノード)間の遷移ノードと呼ばれる特殊なタイプのノードを利用する。さらに詳細には、本明細書の実装形態は、ワールドステートMPT T0およびアドレスリストL0に基づいて、本明細書ではサブツリーT2と呼ばれるワールドステートサブツリーを提供する。本明細書の実装形態では、最初に本明細書ではサブツリーT1と呼ばれるアドレスリストL0からサブツリーを構築し、次いで、サブツリーT1において深さ優先の先行順走査を実行することによって、アドレスごとにルートノードからリーフノードへのパスを検出することを回避する。アカウントノードアドレス、および遷移ノードアドレスが、深さ優先の先行順走査を通じて順番に検出される。2つのアカウントノード間に遷移ノードがある場合、第1のアカウントノードは遷移ノードに返され、他方のアカウントノードは遷移ノードから検出される。このようにして、第2のアカウントノードの検索は、ルートノードで開始する必要はなく、代わりに遷移ノードで開始する。
【００４６】
本明細書でさらに詳細に説明するように、本明細書の実装形態によって、プロセッサおよびストレージ要件が低減される。たとえば、アドレスごとに、ルートノードから対応するリーフノードへのパスが保存され、これらのパス内の重複するノードがマージされる。より詳細には、ルートノードから各アカウントノード(すなわち、アカウントアドレスに対応する各リーフノード)への完全なパスを記憶する代わりに、2つのアカウントノード間に遷移ノードがある場合、遷移ノードから次のアカウントノードへのパスのみが保存される。このようにして、複数のアカウントノードへのパスがマージされ、これによって、効率が向上し、パスの重複によってもたらされる動作およびストレージの無駄が回避される。
【００４７】
いくつかの実装形態では、本明細書でさらに詳細に説明するように、ワールドステートMPTのアカウントアドレスのリストが与えられると、アドレスリストのサブツリーが提供される。本明細書の実装形態では、MPTの検索アドレスの順序およびノードの効率を改善するために、深さ優先の先行順走査アルゴリズムを採用している。さらに、本明細書の実装形態は、2つのアカウントノード間の遷移ノードを含むノード走査プロセスを提供する。ルートノードから各アカウントノードを検索することによってもたらされる検索の無駄を回避するために、実装形態は、ルートノードと2つのアカウントノードのパスの重複を考慮して、遷移ノードから次のアカウントノードへのパスを保存することを含む。本明細書で説明するように、本明細書の実装形態によって、効率が向上し、パスの重複によってもたらされる動作およびストレージの無駄が回避される。
【００４８】
本明細書の実装形態は、例示的なワールドステートMPTを参照してさらに詳細に説明される。例示的なワールドステートMPTは、The Ethereum Foundation of Zug, Switzerlandが提供するEthereum Blockchain Application Platformに基づく。Ethereumは、イーサ(ETH)と呼ばれるデジタルアセットを提供し、その最小単位はウェイ(WEI)と呼ばれる。しかしながら、本明細書の実装形態は、任意の適切なブロックチェーンネットワーク、および任意の適切なワールドステートMPTで実現できると企図される。
【００４９】
図3は、ワールドステートMPT300の例を示す。本明細書の実装形態の理解を容易にするために、図3の例示的なワールドステートMPT300は比較的単純であると諒解されよう。しかしながら、本明細書の実装形態は、様々な程度の複雑さ(たとえば、数百、数千のノード)のMPTで実現できると企図される。図3の例では、MPT300は、ルートノード302、ブランチノード304、306、拡張ノード308、およびリーフノード310、312、314を含む。いくつかの例では、リーフノード310、312、314は、ブロックチェーンネットワーク内のそれぞれのアカウント(Acct_1、Acct_2、Acct_3)に対応する。例示的なワールドステートMPT300は、キーと値のペアを記録するテーブル320も含む。図3の例では、テーブル320は、リーフノード310、312、314にそれぞれ対応するキーと値のペア322、324、326を含む。
【００５０】
いくつかの例では、図3のワールドステートMPT300は、ブロックチェーンネットワーク内の複数のクライアントによって維持(構築、更新など)される。たとえば、上記のフルクライアントは、コンセンサスプロセスに参加し、ブロックチェーンネットワーク内のブロックチェーンのワールドステートを維持できる。これは、たとえば、ブロックチェーンおよびワールドステートMPT300の完全なコピーの記憶を含み得る。例示的なフルクライアントは、上記のように、図2の参加者システム202、204を含む。
【００５１】
上記で説明したように、ブロックチェーンネットワークは、ブロックチェーンのワールドステートを維持せず、ブロックチェーンおよびワールドステートMPT300のいずれかの完全なコピーを記憶しないライトクライアントを含むことができる。非限定的な例として、ライトクライアントは、ブロックチェーンネットワーク内のアカウントのサブセット(たとえば、Acct_1、Acct_2)に興味がある、または単にアクセスできる可能性があり、他のアカウント(たとえば、Acct_3)に興味がない、または他のアカウントへのアクセスは許可されていない。本明細書の実装形態によれば、ライトクライアントは、ワールドステートMPT300で提供される状態と一致するアカウントのサブセットの状態を維持できる。本明細書でさらに詳細に説明するように、フルクライアントは、MPT300のサブツリーを生成し、サブツリーは、アカウントのサブセットに関連するワールドステートMPT300の一部を表す。サブツリーは、ライトクライアントに提供され、サブツリーの状態がワールドステートMPT300の状態と確実に一致するように、定期的に更新される。
【００５２】
図4は、本明細書の実装形態による図3の例示的なワールドステートMPT300に基づいて生成されたサブツリー400の一例を示す。図4では、例示的なサブツリー400は、ルートノード402、ブランチノード404、406、拡張ノード408、およびリーフノード410、412を含み、これらは、図3のワールドステートMPT300のルートノード302、ブランチノード304、306、拡張ノード308、およびリーフノード310、312に対応する。リーフノード410、412は、それぞれのクライアント(たとえば、ライトクライアント)がブロックチェーンネットワーク内でアクセスできるそれぞれのアカウント(Acct_1、Acct_2)に対応する。例示的なサブツリー400は、キーと値のペアを記録するテーブル420も含む。図4の例では、テーブル420は、リーフノード410、412にそれぞれ対応するキーと値のペア422、424を含む。
【００５３】
図4のサブツリー400は、図3のワールドステートMPTツリー300のリーフノード314に対応するリーフノードがない(たとえば、ライトクライアントは、リーフノード314によって表されるアカウント(Acct_3)にアクセスできない)。代わりに、ブランチノード406は、第10のアイテムにプレースホルダー文字(*)を含む。
【００５４】
本明細書の実装形態によれば、本明細書において詳細に説明されるように、サブツリー400は、ライトクライアントのために、フルクライアントによって生成され得る。たとえば、ライトクライアントは、サブツリーについて、要求をブロックチェーンネットワークにサブミットできる。要求に応じて、フルクライアントは、ライトクライアントがアクセスできるアカウント、およびフルクライアントによって保持されるワールドステートMPT300に基づいてサブツリー400を生成できる。いくつかの例では、ライトクライアントからの要求は、ライトクライアントがアクセスできるアカウントのサブセットに対応するアドレスリストを含む。いくつかの例では、ライトクライアントがアクセスできるアカウントのサブセットのアドレスリストは、フルクライアントによって決定される(たとえば、ブロックチェーンネットワーク内のライトクライアントの一意の識別子を使用してアクセス制御リスト(ACL)にインデックスを付ける)。本明細書でさらに詳細に説明するように、ワールドステートMPT300およびアドレスリストが与えられると、フルクライアントは、サブツリー400を生成し、サブツリー400を要求側のライトクライアントに返す。
【００５５】
図5Aおよび図5Bは、本明細書の実装形態に従って実行できるプロセス500、550の一例を示す。いくつかの実装形態では、例示的なプロセス500、550は、1つまたは複数のコンピューティングデバイスを使用して実行される1つまたは複数のコンピュータ実行可能プログラムを使用して実行され得る。たとえば、例示的なプロセス500、550は、ブロックチェーンネットワーク内のライトクライアントのためのサブツリーを生成するために、フルクライアントによって実行できる。
【００５６】
図5Aを特に参照すると、例示的なプロセス500を実行して、サブツリーT2の構築のためにワールドステートMPT T0からアドレスリストL1を提供することができる。
【００５７】
ワールドステートMPT T0およびアドレスリストL0が提供される(502)。たとえば、ワールドステートMPT T0(たとえば、図3のワールドステートMPT300)およびアドレスリストL0は、フルクライアントによってアドレスリストのサブツリーを生成するための入力として提供される(たとえば、フルクライアントは、ワールドステートMPT300を記憶し、アドレスリストを受信する)。いくつかの例では、アドレスリストL0内の各アドレスは、MPTツリーT0のリーフノード(たとえば、MPT300のリーフノード310、312、314)のアドレスである。アドレスリストL0内で、アカウントアドレスの任意の順序を提供することができる。いくつかの実装形態では、本明細書でさらに詳細に説明するように、深さ優先の先行順走査アルゴリズムを使用して、MPTツリーT0のノードを検索する。
【００５８】
アドレスリストL0からMPTツリーT1が提供される(502)。いくつかの例では、アドレスリストL0は、特定のライトクライアントがアクセスを許可されているアドレスのリストを表すACLに基づく。いくつかの例では、アドレスリストL0は、作成されるサブツリーT2に含まれるべきアドレスを提供する。いくつかの例では、アドレスリストL0内の各アドレスの値は、デフォルトで空の文字列(たとえば、ヌルと呼ばれる)と見なされ、T1の各ノードの値が計算され得る。空のアドレスリストL1が作成される(504)。T1のルートノードから開始し、深さ優先の先行順走査でT1を走査するノード走査が実行される(506)。本明細書でさらに詳細に説明するように、例示的なプロセス500は、対応するアドレスリストL0内のアドレスのノード、およびアドレスリストL1内のそれらの間の遷移ノードを再帰的に記録する。
【００５９】
現在のノードがリーフノードであるかどうかが判定される(508)。現在のノードがリーフノードである場合、そのノードはアドレスリスト内のノードに対応する。ノードはマークされ(たとえば、「アカウントノード」として)、ノードのアドレスおよびマークがアドレスL1に保存される(510)。走査は、リーフノードの親ノードに戻る(512)。現在のノードがリーフノードではない場合、現在のノードが拡張ノードであるかどうかが判定される(514)。現在のノードが拡張ノードである場合、ノードの値は別のノードへの参照を指し、走査は参照されたノードに移動する(516)。
【００６０】
現在のノードが拡張ノードではない場合、現在のノードは、ブランチノードであり、ノードに対して初めてであるかどうかが判定される(520)。初めてでない場合は、現在のノードのすべての子が走査されたかどうかが判定される(522)。すべての子が走査された場合、走査はブランチノードの親ノードに戻る(512)。すべての子が走査されていない場合、ノードは「遷移ノード」としてマークされ、ノードのアドレスおよびマークがL1に保存され(524)、走査は、走査されていない子ノードに移動する(526)。現在のノード(ブランチノード)に対して初めてである場合、その値が空(たとえば、ヌルとも呼ばれる空の文字列)であるかどうかが判定される(528)。値が空であり、ノードがアドレスリスト内のあるノードに対応することを示す場合、ノードは、「アカウントノード」としてマークされ、マークおよびアドレスがL1に保存され(530)、走査が第1の子ノードに移動する(526)。
【００６１】
図5Bを特に参照すると、例示的なプロセス550を実行して、アドレスリストL1およびワールドステートMPT T0からサブツリーT2を構築することができる。本明細書で説明するように、サブツリーT2は、ワールドステートMPT T0と同じルートノードを含み、サブツリーT2の残りは、以下を再帰的に実行することによってルートノードから構築される。
【００６２】
サブツリーT2にT0のルートノードが提供される(552)。「アカウントノード」とマークされたアドレスリストL1内の第1のアドレスが選択される(554)。T0において対応するノードが検出される(556)。したがって、ルートノードからT0の対応するノードに、検索パスが提供される。パス上の各ノードがT2に追加される(558)。アドレスリストL1の次のアドレスが選択される(560)。そのアドレスに対応するノードが「アカウントノード」としてマークされているかどうかが判定される(562)。ノードがT0内の現在のノードから始まる「アカウントノード」としてマークされている場合、T0においてアドレスに対応するノードが検出され、パス上の各ノードがT2に追加される(564)。
【００６３】
ノードが「アカウントノード」としてマークされていない場合、ノードが「遷移ノード」としてマークされているかどうかが判定される(566)。ノードがT0内の現在のノードから始まる「遷移ノード」としてマークされている場合、アドレスに対応するノードが決定され、T0内の(新しい)現在のノードとして提供される(568)。アカウントノードから遷移ノードへのパスは、T2に追加されない。アドレスリストL1内のすべてのアドレスを走査した後、得られたT2は、元のワールドステートMPT T0内のアドレスリストL0のサブツリーである。
【００６４】
上記で紹介したように、本明細書の実装形態は、ワールドステートMPTに基づいてサブツリーを更新することにも向けられている。より詳細には、ワールドステートは、すべてのノードのアカウントステータス(ユーザ、スマートコントラクトなど)を記録するので、ワールドステートMPTに記録されるデータの量は比較的多くなる可能性がある。ライトクライアントなどのクライアントでは、大量のデータは無関係であるか、アクセス不可能である(たとえば、アクセス特権がないなど)。結果として、上記で紹介したように、一部のクライアントは、ワールドステートでそれらに関連付けられたユーザ(およびスマートコントラクト)の一部のアカウントステータスをローカルで維持するだけであり得る。これは、本明細書で説明するように、クライアントがローカルに記憶するワールドステートMPTツリーのサブツリーをクライアント(ライトクライアント)に提供することによって実現される。
【００６５】
しかしながら、(たとえば、ワールドステートMPTにおいて)コンセンサスノードによって維持されているワールドステートは頻繁に更新される。結果として、クライアントによって保持されるサブツリーも定期的に更新する必要がある。一般に、サブツリーの更新は、サブツリーの最新のデータをコンセンサスノードのワールドステートMPTのデータと同期させることを含み得る。この点から見て、本明細書の実装形態は、帯域幅効率、プロセッサ効率、およびメモリ効率の高い方法でサブツリーを更新するために、更新されたワールドステートMPTツリーからサブツリーの更新された状態を決定することを提供する。
【００６６】
図6は、更新を含む図3の例示的なワールドステートMPTを示す。図6の例では、MPT300は、ルートノード302、ブランチノード304、306、拡張ノード308、リーフノード310、312、314、およびリーフノード318を含む。いくつかの例では、上記で説明したように、リーフノード310、312、314は、ブロックチェーンネットワーク内のそれぞれのアカウント(Acct_1、Acct_2、Acct_3)に対応する。リーフノード318は、(たとえば、図3のワールドステートMPT300が提供された後)ブロックチェーンネットワークに追加されたそれぞれのアカウント(Acct_4)に対応する。例示的なテーブル320は、リーフノード310、312、314にそれぞれ対応するキーと値のペア322、324、326、およびリーフノード318に対応するキーと値のペア328を記録する。したがって、ワールドステートMPT300への更新は、リーフノード318、およびそれぞれのキーと値のペア328を含む。
【００６７】
本明細書の実装形態によれば、本明細書で詳細に説明されるように、図4のサブツリー400は、ライトクライアントについてフルクライアントによって提供される更新のセットに基づいて更新できる。たとえば、ライトクライアントは、更新されたサブツリーについて、要求をブロックチェーンネットワークにサブミットできる。要求に応答して、フルクライアントは、フルクライアントによって維持されているワールドステートMPT300の現在の状態(たとえば、図6に示されている)に基づいてサブツリー400への更新を決定できる。いくつかの例では、フルクライアントが更新のセットを生成し(たとえば、新しいサブツリーとは対照的に)、更新のセットをライトクライアントに送信する。ライトクライアントは、サブツリー400を更新するように更新のセットを処理する。
【００６８】
図7は、本明細書の実装形態による図6の例示的なワールドステートMPT300に基づく更新を含む図4の例示的なサブツリー400を示す。図7の例示的なサブツリー400は、ルートノード402、ブランチノード404、406、拡張ノード408、およびリーフノード410、412を含み、これらは、図3のワールドステートMPT300のルートノード302、ブランチノード304、306、拡張ノード308、およびリーフノード310、312に対応する。リーフノード410、412は、それぞれのクライアント(たとえば、ライトクライアント)がブロックチェーンネットワーク内でアクセスできるそれぞれのアカウント(Acct_1、Acct_2)に対応する。例示的なサブツリー400は、キーと値のペアを記録するテーブル420も含む。図7の例では、テーブル420は、リーフノード410、412、414にそれぞれ対応するキーと値のペア422、424、426を含む。
【００６９】
図4の場合のように、図7のサブツリー400は、図3および図6のワールドステートMPTツリー300のリーフノード312に対応するリーフノードがない(たとえば、ライトクライアントは、リーフノード312によって表されるアカウント(Acct_3)にアクセスできない)。代わりに、ブランチノード406は、第10のアイテムにプレースホルダー文字(*)を含む。さらに、図7のサブツリー400は、図6のワールドステートMPTツリー300のリーフノード318に対応するリーフノードがない(たとえば、ライトクライアントは、リーフノード318によって表されるアカウント(Acct_4)にアクセスできない)。代わりに、ブランチノード404は、第16のアイテムにプレースホルダー文字(*)を含む。
【００７０】
図8Aおよび図8Bは、本明細書の実装形態に従って実行できるプロセス800、850の一例を示す。いくつかの実装形態では、例示的なプロセス800、850は、1つまたは複数のコンピューティングデバイスを使用して実行される1つまたは複数のコンピュータ実行可能プログラムを使用して実行され得る。たとえば、例示的なプロセス800は、ブロックチェーンネットワーク内のライトクライアントのサブツリーへの更新のセットを生成するために、フルクライアントによって実行され、例示的なプロセス850は、ローカルに維持されたサブツリーを更新するために、ライトクライアントによって実行され得る。
【００７１】
特に図8Aを参照すると、例示的なプロセス800は、ワールドステートMPT T0およびサブツリーT2からの更新のセット(たとえば、更新されたノードのサブツリーT2'として提供される)を提供するために実行できる。本明細書で説明するように、例示的なプロセス800は、サブツリーT2のノード(現在のノード)とワールドステートMPT T0の対応するノード(現在のノード)との間のペアワイズノード比較を行い、更新ツリーT2'とは異なるワールドステートMPT T0の任意のノードを追加する。
【００７２】
T0のルートノードの値およびT2のルートノードの値が決定され(802)、値が比較される(804)。値が同じ場合、サブツリーT2はMPT T0と一致した状態にあり、そのように示される(806)。たとえば、サブツリーT2がワールドステートと一致していることを示すために、フルクライアントから、更新を要求したライトクライアントに応答が送信され得る。値が異なる場合、サブツリーT2が作成されてから、ワールドステートMPT T0が更新されている。結果として、MPT T0のルートノードで更新ツリーT2'が作成され、現在のノードは、サブツリーT2のルートノードから値が参照されるノードに移動する(808)。すなわち、リーフノードの値は、(キーと値のペアを記憶する)データベースに記憶されている何らかのデータのキーである。結果として、リーフノードの値は、データベース内の実際のデータを参照する。非リーフノードの場合、その値は、別のノードのアドレスである。すなわち、非リーフノードは、別のノードを指す(参照する)。
【００７３】
サブツリーT2内の現在のノードに対して初めてであるかどうかが判定される(810)。サブツリーT2内の現在のノードに対して初めてである場合、MPT T0において現在のノードのアドレスに対応するノードが検出され、検索パスが提供される(812)。いくつかの例では、検索パスは、対応するノードへのMPT T0内の深さ走査である。検索パスに任意の中間ノードがあるかどうかが判定される(814)。検索パスに1つまたは複数の中間ノードがある場合、中間ノードは、ツリーT2'に追加され、サブツリーT2が含まないノードであることを示すために、各々タグ付け(マーク)される。いくつかの例では、タグは、本明細書で説明するように、ノードをマークするために使用されるメタデータとして提供される。
【００７４】
T2内の現在のノードがリーフノードであるかどうかが判定される(818)。T2内の現在のノードがリーフノードである場合、T0内の現在のノードがリーフノードであるかどうかが判定される(820)。T0内の現在のノードがリーフノードである場合、T2とT0の現在のノードの値が比較される(822)。値が異なる場合、T0内の現在のノードがT2'に追加される(824)。値が異なる場合、T2内の現在のノードは、親ノードに移動する(826)。このようにして、T0の現在のノードは、T2の現在のノードと異なるタイプのノードのものであるか、T2の現在のノードの異なる値のものである場合にのみ、更新ツリーT2'に追加される。それらが同じタイプおよび値のものである場合、T0の現在のノードは、更新ツリーT2'に追加されない。T2内の現在のノードがリーフノードではない場合、T2内の現在のノードが拡張ノードであるかどうかが判定される(828)。T2内の現在のノードが拡張ノードである場合、T0内の現在のノードはT2'に追加され、T2内の現在のノードは、スロットが指すノードに移動し、例示的なプロセス(800)がループバックする。
【００７５】
T2内の現在のノードが拡張ノードではない場合、T2内の現在のノードおよびT0内の現在のノードは各々、ブランチノードである。T2内の現在のノードが考慮されるのが初めてかどうかが判定される(832)。初めての場合、T2の現在のノードの値とT0の現在のノードの値が異なるかどうかが判定される(834)。値が異なる場合、T0の現在のノードが更新ツリーT2'に追加される(834)。値が同じ場合、T2内の別のノードを指すT2内の現在のノードにおける次のスロットが決定され、T2の現在のノードはスロットが指すノードに移動する。すなわち、その値がヌルでなくても、T2内の別のノードを指していない任意のスロットは、そのようなスロットがT2内にないT0内のノードを指すので、考慮されない。したがって、例示的なプロセス800は、異なる値を有するスロットに遭遇するまで、第1のスロットから開始して、スロット比較を提供し、T2内の現在のノードは、このスロットが指すノードに移動し(836)、例示的なプロセス800はループバックする。
【００７６】
T2の現在のノードに対して初めてでない場合(832)、T2の現在のノードとT0の現在のノードとの間のすべてのスロットが比較されたかどうかが判定される(838)。すべてのスロットが比較された場合、例示的なプロセス800は、ループバックして親ノードに移動する(826)。すべてのスロットが比較されていない場合、ヌルではない残りのスロットは、残りのスロットにおいて異なる値が見つかるまで、T0の現在のノードのものと反復的に比較される(840)。T0の現在のノードは、このスロットが指すノードに移動し(842)、例示的なプロセス800はループバックする。
【００７７】
例示的なプロセス800が再帰的に実行され、サブツリーT2の現在のノードが反復的に親ノードに移動すると(826)、親ノードがルートノードであるかどうかが判定される(844)。親ノードがルートノードでない場合、例示的なプロセス800は、ループバックして、MPT T0に関連するサブツリーT2の(新しい)現在のノードを考慮する。親ノードがルートノードである場合、更新ツリーT2'が返される(846)。更新サブツリーは、更新されたワールドステートMPT T0を鑑みて、サブツリーT2のすべての更新されたノードで構成される。すなわち、更新ツリーT2'は、更新されたMPT T0を鑑みて更新されたサブツリーT2のノードのみを含む。
【００７８】
特に図8Bを参照すると、例示的なプロセス850は、フルクライアントから提供された更新ツリーT2'に基づいて、ライトクライアントにおいてサブツリーT2を更新するために実行され得る。すなわち、まったく新しく作成されたサブツリーとは対照的に、フルクライアントが更新ツリーT2'をライトクライアントに送信するだけで済む。更新ツリーT2'は、更新されたノードのみを含むので、サブツリーT2よりも小さいデータ構造である。したがって、更新されたツリーT2'のみを送信することによって、コンピューティングリソースおよび帯域幅が節約される(たとえば、まったく新しいサブツリーT2をライトクライアントに送信する場合と比較して)。いくつかの例では、ライトクライアントは、更新ツリーT2'を受信すると、例示的なプロセス850を実行して、サブツリーT2をローカルに更新する。
【００７９】
更新ツリーT1のルートノードから始めて、例示的なプロセス800は、各ノードを(現在のノードとして)考慮するために、深さ優先の先行順走査を実行する。現在のノードが考慮されたかどうかが判定される(852)。現在のノードが考慮された場合、次のノードが現在のノードとして選択され(854)、例示的なプロセス850はループバックする。現在のノードが考慮されていない場合、現在のノードがタグを有する(マークされている)かどうかが判定される(856)。現在のノードがタグを有していない場合、アドレスが元のサブツリーT2にあるノードが決定され、古いノードが更新ツリーT2'からの新しいノードに置き換えられる(858)。現在のノードがタグを有する(すなわち、そのアドレスが元のサブツリーT2に対応するノードを有していない)場合、ノードは、サブツリーT2に挿入される(860)。更新ツリーT2'のすべてのノードを走査した後、サブツリーT2が更新されて、更新されたMPT T0の関連する更新が反映される。
【００８０】
図9は、本明細書の実装形態による装置900のモジュールの例を示す。装置900は、コンソーシアムブロックチェーンネットワークなどのブロックチェーンネットワーク内のワールドステートMPTのサブツリーを生成するように構成されたブロックチェーンノードの例示的な実装形態とすることができる。装置900は、上記で説明した実装形態に対応することができ、装置900は、ワールドステートMPTおよびブロックチェーンネットワーク内のノードのアドレスを記憶するためのアドレスリストを提供するためのジェネレータまたは生成ユニット902、ワールドステートMPTの走査のための実行器または実行ユニット904、ワールドステートMPTのサブツリーを生成するためのクリエータまたは作成ユニット906、およびワールドステートMPTのサブツリーをブロックチェーンネットワークの非コンセンサスクライアントに送信するための送信機または送信ユニット908を含む。
【００８１】
図10は、本明細書の実装形態による装置1000のモジュールの例を示す。装置1000は、コンソーシアムブロックチェーンネットワークなどのブロックチェーンネットワーク内のワールドステートMPTのサブツリーを更新するように構成されたブロックチェーンノードの例示的な実装形態とすることができる。装置1000は、上記で説明した実装形態に対応することができ、装置1000は、ワールドステートMPTのルートノードを含み、最初は他のノードが存在しない更新ツリーを作成するためのジェネレータまたは生成ユニット1002、複数の反復でサブツリーの少なくとも一部の走査を実行するための実行器または実行ユニット1004、およびサブツリーの更新ツリーをブロックチェーンネットワークの非コンセンサスノードに送信するための送信機または送信ユニットを含み、非コンセンサスクライアントは、更新ツリーを使用してローカルに記憶されたサブツリーを更新して、非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供する。
【００８２】
前の実装形態で示されたシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用することによって実装でき、あるいはある機能を有する製品を使用することによって実装できる。典型的な実装デバイスはコンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、携帯電話、カメラ付き携帯電話、スマートフォン、パーソナルデジタルアシスタント、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲーム機、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せとすることができる。
【００８３】
装置内の各ユニットの機能および役割の実装プロセスについては、以前の方法の対応するステップの実装プロセスを参照することができる。簡単のために、詳細はここでは省略する。
【００８４】
装置の実装は、基本的に、方法の実装に対応するので、関連する部分については、方法の実装の関連する説明を参照できる。前に説明した装置の実装は一例にすぎない。別々の部分として記載されているユニットは、物理的に別個であってもなくてもよく、ユニットとして表示されている部分は、物理ユニットであってもなくてもよく、1つの位置に配置されてもいくつかのネットワークユニットに分散されてもよい。本明細書の解決策の目的を達成するために、モジュールの一部または全部を、実際の要求に基づいて選択することができる。当業者は、創造的な取り組みなしに本出願の実装形態を理解し実装することができる。
【００８５】
再び図9を参照すると、ワールドステートMPT生成装置の内部機能モジュールおよびサブツリーの構造を示すと解釈できる。ワールドステートMPT生成装置のサブツリーは、ブロックチェーンネットワーク内でワールドステートMPTのサブツリーを生成するように構成されたブロックチェーンノードの一例であり得る。再び図10を参照すると、ワールドステートMPT更新装置の内部機能モジュールおよびサブツリーの構造を示すと解釈できる。ワールドステートMPT更新装置のサブツリーは、ブロックチェーンネットワーク内でワールドステートMPTのサブツリーを更新するように構成されたブロックチェーンノードの一例であり得る。本質的に実行主体は電子デバイスとすることができ、電子デバイスは、1つまたは複数のプロセッサ、および1つまたは複数のプロセッサの実行可能な命令を記憶するメモリを含む。
【００８６】
主題の記載された実装形態は、単独でまたは組み合わせて、1つまたは複数の機能を含むことができる。たとえば、第1の実装形態では、ワールドステートMPTのルートノードを含み、最初は他のノードがない更新ツリーを作成し、複数の反復でサブツリーの少なくとも一部の走査を実行し、各反復で、サブツリーの現在のノードごとに、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがリーフノードであり、値が等しくないと判定し、それに応じて、ワールドステートMPTの現在のノードを更新ツリーに追加することと、サブツリーの現在のノードおよびワールドステートMPTの現在のノードが拡張ノードであると判定し、それに応じて、ワールドステートMPTの現在のノードを更新ツリーに追加し、サブツリーの現在のノードを拡張ノードによって参照されるノードに設定する走査の次の反復に移動することと、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがブランチノードであり、値が等しくないと判定し、それに応じて、ワールドステートMPTの現在のノードを更新ツリーに追加することと、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがブランチノードであり、値が等しいと判定し、それに応じて、サブツリーの現在のノードを、サブツリーの現在のノードのスロットが指すノードに設定する走査の次の反復に移動することとのうちの1つを実行することと、サブツリーの更新ツリーをブロックチェーンネットワークの非コンセンサスノードに送信することであり、非コンセンサスクライアントが、非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供するために、更新ツリーを使用してローカルに記憶されたサブツリーを更新する、こととのためのアクションが実行され得る。
【００８７】
上記および他の記載された実装形態は各々、以下の機能のうちの1つまたは複数を随意に含み得る。
【００８８】
以下の機能のいずれかと組合せ可能な第1の機能において、アクションは、少なくとも1回の反復中に、ワールドステートMPTにおいて対応するノードを検出し、検索パスを提供することであり、検索パスにおける1つまたは複数のノードが中間ノードとしてマークされ、サブツリーにないとしてマークされている、ことをさらに含む。
【００８９】
以下の機能のいずれかと組合せ可能な第2の機能において、サブツリーの現在のノードおよびワールドステートMPTの現在のノードがブランチノードであり、現在の反復が、サブツリーの現在のノードが考慮される最初の反復であると判定したことに応じて、サブツリーの現在のノードの値とワールドステートMPTの現在のノードの値を比較することが実行される。
【００９０】
以下の機能のいずれかと組合せ可能な第3の機能において、サブツリーの現在のノードがルートノードであると判定したことに応じて、走査が終了する。
【００９１】
以下の機能のいずれかと組合せ可能な第4の機能において、サブツリーのノードを更新ツリーのノードで置き換えること、および更新ツリーのノードをサブツリーに挿入することのうちの1つまたは複数によって、ローカルに記憶されたサブツリーが更新される。
【００９２】
以下の機能のいずれかと組合せ可能な第5の機能において、非コンセンサスクライアントからコンセンサスクライアントによって受信された要求に応じて、更新ツリーが作成される。
【００９３】
以下の機能のいずれかと組合せ可能な第6の機能において、サブツリーのルートノードの値とワールドステートMPTのルートノードの値が異なると判定したことに応じて、更新ツリーが作成される。
【００９４】
本明細書に記載された主題およびアクションおよび動作の実装形態は、デジタル電子回路、有形に具現化されたコンピュータソフトウェアまたはファームウェア、本明細書に開示される構造およびそれらの構造的均等物を含むコンピュータハードウェア、またはそれらの1つもしくは複数の組合せに実装することができる。本明細書に記載される主題の実装形態は、1つまたは複数のコンピュータプログラム、たとえば、データ処理装置によって実行される、またはデータ処理装置の動作を制御するためのコンピュータプログラムキャリア上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装することができる。キャリアは、有形の非一時的コンピュータ記憶媒体であってもよい。代替的にまたは追加として、キャリアは、人工的に生成された伝搬信号、たとえば、データ処理装置によって実行するための適切な受信機装置への送信のために情報を符号化するために生成された機械生成電気、光学、または電磁信号とすることができる。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムまたはシリアルアクセスメモリデバイス、またはそれらの1つもしくは複数の組合せとすることができ、またはその一部とすることができる。コンピュータ記憶媒体は、伝搬信号ではない。
【００９５】
「データ処理装置」という用語は、たとえば、プログラム可能プロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイスおよび機械を包含する。データ処理装置は、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィックス処理ユニット)などの専用論理回路を含むことができる。装置は、ハードウェアに加えて、コンピュータプログラムの実行環境を生成するコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つまたは複数の組合せを構成するコードを含むこともできる。
【００９６】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも呼ばれるまたは記述されることもあるコンピュータプログラムは、コンパイルもしくはインタープリタ型言語、宣言型言語もしくは手続き型言語を含む、任意の形式のプログラミング言語で記述することができ、それは、スタンドアロンプログラムとして、またはモジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境での実行に適した他のユニットとしてなど、あらゆる形式で展開でき、環境は、1つまたは複数の場所にデータ通信ネットワークによって相互接続された1つまたは複数のコンピュータを含む場合がある。
【００９７】
コンピュータプログラムは、必ずしも必要はないが、ファイルシステム内のファイルに対応し得る。コンピュータプログラムは、問題のプログラム専用の単一のファイル、あるいは、たとえば、1つもしくは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイルなど、複数のコーディネートされたファイルに、たとえば、マークアップ言語文書に記憶された1つもしくは複数のスクリプトなど、他のプログラムまたはデータを保持するファイルの一部に記憶することができる。
【００９８】
本明細書で記述されたプロセスおよび論理フローは、入力データ上で動作し、出力を生成することによって動作を実行するために、1つまたは複数のコンピュータプログラムを実行する1つまたは複数のコンピュータによって実行することができる。プロセスおよび論理フローは、たとえばFPGA、ASICまたはGPUなどの専用論理回路によって、または専用論理回路と1つまたは複数のプログラムされたコンピュータとの組合せによっても実行することができる。
【００９９】
コンピュータプログラムの実行に適したコンピュータは、汎用マイクロプロセッサもしくは専用マイクロプロセッサ、またはその両方、あるいは任意の他の種類の中央処理装置に基づき得る。一般に、中央処理装置は、読取り専用メモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信する。コンピュータの要素は、命令を実行するための中央処理装置、ならびに命令およびデータを記憶するための1つまたは複数のメモリデバイスを含むことができる。中央処理装置およびメモリは、専用論理回路によって補うことができ、またはそれに組み込むことができる。
【０１００】
一般に、コンピュータは、1つまたは複数の大容量記憶デバイスを含むか、1つまたは複数の大容量記憶デバイスからデータを受信する、もしくそこにデータを転送するように動作可能に結合される。大容量記憶デバイスは、たとえば、磁気、光磁気、または光ディスク、またはソリッドステートドライブとすることができる。しかしながら、コンピュータはそのようなデバイスを有する必要はない。さらに、コンピュータは、別のデバイス、たとえば、ほんのいくつかの例を挙げれば、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、またはユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイス中に組み込むことができる。
【０１０１】
ユーザとの対話を提供するために、本明細書で説明する主題の実装は、情報をユーザに表示するためのディスプレイデバイス、たとえばLCD(液晶ディスプレイ)モニタ、およびユーザがコンピュータに入力を提供できる入力デバイス、たとえばキーボード、およびマウス、トラックボールまたはタッチパッドなどのポインティングデバイスを有するコンピュータ上に実装され、またはそれと通信するように構成され得る。他の種類のデバイスを使用して、ユーザとの対話を提供することもでき、たとえば、ユーザに提供されるフィードバックは、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックなど、任意の形態の感覚フィードバックとすることができ、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受信することができる。さらに、コンピュータは、たとえば、ウェブブラウザから受信された要求に応答して、ユーザのデバイス上のウェブブラウザにウェブページを送信することによってなど、ユーザによって使用されるデバイスとの間でドキュメントを送受信することによって、またはスマートフォンや電子タブレットなどのユーザデバイスで実行されているアプリと対話することによってユーザと対話することができる。また、コンピュータは、テキストメッセージまたは他の形態のメッセージをパーソナルデバイス、たとえば、メッセージングアプリケーションを実行しているスマートフォンに送信し、代わりに、ユーザから応答メッセージを受信することによって、ユーザと対話することができる。
【０１０２】
本明細書は、システム、装置、およびコンピュータプログラム構成要素に関して「構成される」という用語を使用する。1つまたは複数のコンピュータのシステムが特定の動作またはアクションを実行するように構成されるとは、システムが、動作中、システムに動作またはアクションを実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せをインストールしていることを意味する。1つまたは複数のコンピュータプログラムが特定の動作またはアクションを実行するように構成されるとは、1つまたは複数のプログラムが、データ処理装置によって実行されると、装置に動作またはアクションを実行させる命令を含むことを意味する。専用ロジック回路が特定の動作またはアクションを実行するように構成されるとは、その回路が動作またはアクションを実行する電子ロジックを有することを意味する。
【０１０３】
本明細書は、多くの具体的な実装の詳細を含むが、これらは、特許請求の範囲自体によって定義される特許請求の範囲に対する限定ではなく、むしろ特定の実装に固有であり得る機能の説明として解釈されるものとする。別個の実装形態の文脈において本明細書で説明されるいくつかの機能は、単一の実装形態において組み合わせて実現することもできる。逆に、単一の実装形態の文脈で記載されている様々な機能は、複数の実装形態で別々にまたは任意の適切な部分組合せで実現することもできる。さらに、機能は、いくつかの組合せで作用するものとして上述され、当初はそのように請求され得るが、いくつかの場合、請求された組合せからの1つまたは複数の機能を、組合せから削除することができ、特許請求の範囲は、部分組合せ、または部分組合せの変形を対象とし得る。
【０１０４】
同様に、動作が図面に示され、特許請求の範囲に特定の順序で記載されているが、これは、そのような動作が、示された特定の順序で、または順番に実行されること、あるいは望ましい結果を達成するために、図示されたすべての動作が実行されることを必要とするものとして理解されないものとする。いくつかの状況では、マルチタスキングおよび並列処理が有利であり得る。さらに、上述した実装形態における様々なシステムモジュールおよび構成要素の分離は、すべての実装形態においてそのような分離を必要とするものと理解されないものとし、記述されたプログラム構成要素およびシステムを、一般に、単一のソフトウェア製品に一緒に組み入れることができ、または複数のソフトウェア製品にパッケージ化することができることを理解されたい。
【０１０５】
主題の特定の実装形態が記載されている。他の実装形態は、以下の特許請求の範囲内にある。たとえば、特許請求の範囲に列挙されたアクションは、異なる順序で実行され、依然として望ましい結果を達成することができる。一例として、添付の図面に示されるプロセスは、望ましい結果を達成するために、示された特定の順序または逐次的な順序を必ずしも必要としない。いくつかの場合には、マルチタスキングおよび並列処理が有利であり得る。
【符号の説明】
【０１０６】
100  環境
102  コンソーシアムブロックチェーンネットワーク
106  コンピューティングデバイス
108  コンピューティングデバイス
110  ネットワーク
200  概念的アーキテクチャ
202  参加者システム
204  参加者システム
206  参加者システム
212  ブロックチェーンネットワーク
214  ノード
216  ブロックチェーン
300  ワールドステートMPT
302  ルートノード
304  ブランチノード
306  ブランチノード
308  拡張ノード
310  リーフノード
312  リーフノード
314  リーフノード
318  リーフノード
320  テーブル
322  キーと値のペア
324  キーと値のペア
326  キーと値のペア
328  キーと値のペア
400  サブツリー
402  ルートノード
404  ブランチノード
406  ブランチノード
408  拡張ノード
410  リーフノード
412  リーフノード
414  リーフノード
420  テーブル
422  キーと値のペア
424  キーと値のペア
426  キーと値のペア
500  プロセス
550  プロセス
800  プロセス
850  プロセス
900  装置
902  ジェネレータまたは生成ユニット
904  実行器または実行ユニット
906  クリエータまたは作成ユニット
908  送信機または送信ユニット
1000  装置
1002  ジェネレータまたは生成ユニット
1004  実行器または実行ユニット
【図１】
0006830549.tif 000002
【図２】
0006830549.tif 000003
【図３】
0006830549.tif 000004
【図４】
0006830549.tif 000005
【図５Ａ】
0006830549.tif 000006
【図５Ｂ】
0006830549.tif 000007
【図６】
0006830549.tif 000008
【図７】
0006830549.tif 000009
【図８Ａ】
0006830549.tif 000010
【図８Ｂ】
0006830549.tif 000011
【図９】
0006830549.tif 000012
【図１０】
0006830549.tif 000013