(57)【特許請求の範囲】
【請求項１】
ブロックチェーンネットワーク内のワールド状態マークルパトリシアトライ木(MPT)のサブツリーを提供するためのコンピュータで実行される方法であって、
前記ブロックチェーンネットワークのコンセンサスクライアントによって、ワールド状態MPTと、前記ブロックチェーンネットワーク内のノードのアドレスを記憶するためのアドレスリストとを提供するステップであって、前記アドレスリストが、最初は空である、ステップと、
前記コンセンサスクライアントによって、複数の反復で前記ワールド状態MPTの少なくとも一部のトラバーサルを実行し、各反復で前記ワールド状態MPTの前記少なくとも一部の現在のノードについて、
前記現在のノードをアカウントノードとしてマークし、前記現在のノードのアドレスを前記アドレスリスト内に記憶すること、
前記現在のノードが拡張ノードであると判定し、前記現在のノードを前記拡張ノードによって参照されるノードに設定する前記トラバーサルの次の反復に移動すること、および、
前記現在のノードを遷移ノードとしてマークし、前記現在のノードのアドレスを前記アドレスリスト内に記憶すること
のうちの1つを実行するステップと、
前記コンセンサスクライアントによって、前記アドレスリストに基づいて前記ワールド状態MPTのサブツリーを作成するステップであって、前記サブツリーのルートノードが、前記ワールド状態MPTのルートノードを備え、前記サブツリーの1つまたは複数の子ノードが、前記アドレスリスト内に記憶されたアドレスを有する前記ワールド状態MPTのノードに対応する、ステップと、
前記コンセンサスクライアントによって、前記ワールド状態MPTの前記サブツリーを前記ブロックチェーンネットワークの非コンセンサスクライアントに送信するステップであって、前記サブツリーが、前記非コンセンサスクライアントに関連付けられたアカウントの状態を提供する、ステップとを備える、
方法。
【請求項２】
前記現在のノードが、リーフノード、およびnull値がないブランチノードのうちの1つであるとの判定に応答して、前記現在のノードがアカウントノードとしてマークされる、
請求項１に記載の方法。
【請求項３】
前記現在のノードがブランチノードでありかつ前記ブランチノードのすべての子ノードがトラバースされたとの判定に応答して、前記現在のノードが遷移ノードとしてマークされる、
請求項１に記載の方法。
【請求項４】
前記現在のノードをアカウントノードとしてマークした後、前記トラバーサルの次の反復の前記現在のノードが、前記アカウントノードの親ノードを備える、
請求項１に記載の方法。
【請求項５】
前記現在のノードをアカウントノードおよび遷移ノードのうちの1つとしてマークした後、前記トラバーサルの次の反復の前記現在のノードが、前記アカウントノードおよび前記遷移ノードのうちの1つの子ノードを備える、
請求項１に記載の方法。
【請求項６】
前記アドレスリストに基づいて前記ワールド状態MPTのサブツリーを作成するステップが、
前記アドレスリスト内のアカウントノードとしてマークされたアドレスについて、前記ワールド状態MPT内のパスを決定し、前記サブツリーに前記パスを追加するステップを備える、
請求項１に記載の方法。
【請求項７】
前記トラバーサルが、深さ優先の前順序トラバーサルを備える、
請求項１に記載の方法。
【請求項８】
1つまたは複数のコンピュータに結合され、ブロックチェーンネットワーク内のワールド状態マークルパトリシアトライ木(MPT)のサブツリーを提供するために実行可能な命令が記憶されたコンピュータ可読記憶媒体であって、前記命令が、
前記ブロックチェーンネットワークのコンセンサスクライアントによって、ワールド状態MPTと、前記ブロックチェーンネットワーク内のノードのアドレスを記憶するためのアドレスリストとを提供することであって、前記アドレスリストが、最初は空である、ことと、
前記コンセンサスクライアントによって、複数の反復で前記ワールド状態MPTの少なくとも一部のトラバーサルを実行し、各反復で前記ワールド状態MPTの前記少なくとも一部の現在のノードについて、
前記現在のノードをアカウントノードとしてマークし、前記現在のノードのアドレスを前記アドレスリスト内に記憶すること、
前記現在のノードが拡張ノードであると判定し、前記現在のノードを前記拡張ノードによって参照されるノードに設定する前記トラバーサルの次の反復に移動すること、および、
前記現在のノードを遷移ノードとしてマークし、前記現在のノードのアドレスを前記アドレスリスト内に記憶すること
のうちの1つを実行することと、
前記コンセンサスクライアントによって、前記アドレスリストに基づいて前記ワールド状態MPTのサブツリーを作成することであって、前記サブツリーのルートノードが、前記ワールド状態MPTのルートノードを備え、前記サブツリーの1つまたは複数の子ノードが、前記アドレスリスト内に記憶されたアドレスを有する前記ワールド状態MPTのノードに対応する、ことと、
前記コンセンサスクライアントによって、前記ワールド状態MPTの前記サブツリーを前記ブロックチェーンネットワークの非コンセンサスクライアントに送信することであって、前記サブツリーが、前記非コンセンサスクライアントに関連付けられたアカウントの状態を提供する、こととを行うために前記1つまたは複数のコンピュータによって実行可能である、
コンピュータ可読記憶媒体。
【請求項９】
前記現在のノードが、リーフノード、およびnull値がないブランチノードのうちの1つであるとの判定に応答して、前記現在のノードが、アカウントノードとしてマークされる、
請求項８に記載のコンピュータ可読記憶媒体。
【請求項１０】
前記現在のノードがブランチノードでありかつ前記ブランチノードのすべての子ノードがトラバースされたとの判定に応答して、前記現在のノードが遷移ノードとしてマークされる、
請求項８に記載のコンピュータ可読記憶媒体。
【請求項１１】
前記現在のノードをアカウントノードとしてマークした後、前記トラバーサルの次の反復の前記現在のノードが、前記アカウントノードの親ノードを備える、
請求項８に記載のコンピュータ可読記憶媒体。
【請求項１２】
前記現在のノードをアカウントノードおよび遷移ノードのうちの1つとしてマークした後、前記トラバーサルの次の反復の前記現在のノードが、前記アカウントノードおよび前記遷移ノードのうちの1つの子ノードを備える、
請求項８に記載のコンピュータ可読記憶媒体。
【請求項１３】
前記アドレスリストに基づいて前記ワールド状態MPTのサブツリーを作成することが、
前記アドレスリスト内のアカウントノードとしてマークされたアドレスについて、前記ワールド状態MPT内のパスを決定し、前記サブツリーに前記パスを追加することを含む、
請求項８に記載のコンピュータ可読記憶媒体。
【請求項１４】
前記トラバーサルが深さ優先の前順序トラバーサルを備える、
請求項８に記載のコンピュータ可読記憶媒体。
【請求項１５】
1つまたは複数のコンピュータと、
前記1つまたは複数のコンピュータに結合され、ブロックチェーンネットワーク内のワールド状態マークルパトリシアトライ木(MPT)のサブツリーを提供するために実行可能な命令が記憶された1つまたは複数のコンピュータ可読メモリとを備えるシステムであって、前記命令が、
前記ブロックチェーンネットワークのコンセンサスクライアントによって、ワールド状態MPTと、前記ブロックチェーンネットワーク内のノードのアドレスを記憶するためのアドレスリストとを提供することであって、前記アドレスリストが、最初は空である、ことと、
前記コンセンサスクライアントによって、複数の反復で前記ワールド状態MPTの少なくとも一部のトラバーサルを実行し、各反復で前記ワールド状態MPTの前記少なくとも一部の現在のノードについて、
前記現在のノードをアカウントノードとしてマークし、前記現在のノードのアドレスを前記アドレスリスト内に記憶すること、
前記現在のノードが拡張ノードであると判定し、前記現在のノードを前記拡張ノードによって参照されるノードに設定する前記トラバーサルの次の反復に移動すること、および、
前記現在のノードを遷移ノードとしてマークし、前記現在のノードのアドレスを前記アドレスリスト内に記憶すること
のうちの1つを実行することと、
前記コンセンサスクライアントによって、前記アドレスリストに基づいて前記ワールド状態MPTのサブツリーを作成することであって、前記サブツリーのルートノードが、前記ワールド状態MPTのルートノードを備え、前記サブツリーの1つまたは複数の子ノードが、前記アドレスリスト内に記憶されたアドレスを有する前記ワールド状態MPTのノードに対応する、ことと、
前記コンセンサスクライアントによって、前記ワールド状態MPTの前記サブツリーを前記ブロックチェーンネットワークの非コンセンサスクライアントに送信することであって、前記サブツリーが、前記非コンセンサスクライアントに関連付けられたアカウントの状態を提供する、こととを行うために前記1つまたは複数のコンピュータによって実行可能である、
システム。
【請求項１６】
前記現在のノードが、リーフノード、およびnull値がないブランチノードのうちの1つであるとの判定に応答して、前記現在のノードがアカウントノードとしてマークされる、
請求項１５に記載のシステム。
【請求項１７】
前記現在のノードがブランチノードでありかつ前記ブランチノードのすべての子ノードがトラバースされたとの判定に応答して、前記現在のノードが、遷移ノードとしてマークされる、
請求項１５に記載のシステム。
【請求項１８】
前記現在のノードをアカウントノードとしてマークした後、前記トラバーサルの次の反復の前記現在のノードが、前記アカウントノードの親ノードを備える、
請求項１５に記載のシステム。
【請求項１９】
前記現在のノードをアカウントノードおよび遷移ノードのうちの1つとしてマークした後、前記トラバーサルの次の反復の前記現在のノードが、前記アカウントノードおよび前記遷移ノードのうちの1つの子ノードを備える、
請求項１５に記載のシステム。
【請求項２０】
前記アドレスリストに基づいて前記ワールド状態MPTのサブツリーを作成することが、
前記アドレスリスト内のアカウントノードとしてマークされたアドレスについて、前記ワールド状態MPT内のパスを決定し、前記サブツリーに前記パスを追加することを含む、  請求項１５に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ブロックチェーンワールド状態マークルパトリシアトライ木サブツリーの構築に関する。
【背景技術】
【０００２】
コンセンサスネットワークおよび/またはブロックチェーンネットワークと呼ばれる場合もある分散型台帳システム(DLS)は、参加しているエンティティが安全かつ不変にデータを記憶することを可能にする。DLSは、いかなる特定のユースケースも参照することなく、ブロックチェーンネットワークと通常呼ばれる。ブロックチェーンネットワークの例示的なタイプは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、およびコンソーシアムブロックチェーンネットワークを含むことができる。パブリックブロックチェーンネットワークは、すべてのエンティティがDLSを使用し、コンセンサスプロセスに参加するために公開されている。プライベートブロックチェーンネットワークは、読み取り権限および書き込み権限を集中的に制御する特定のエンティティに提供される。コンソーシアムブロックチェーンネットワークは、コンセンサスプロセスを制御するエンティティの選択グループに提供され、アクセス制御層を含む。
【０００３】
ハッシュツリーは、情報を記憶するためにブロックチェーンネットワークに使用することができる。例えば、ブロックチェーンネットワークのワールド状態(例えば、ブロックチェーンネットワーク内のノード(アカウント)の状態)は、ハッシュツリー内に記憶することができる。ハッシュツリーの例は、ブロックチェーンネットワーク内のすべてのノード(アカウント)のワールド状態を維持するワールド状態マークルパトリシアトライ木(MPT)を含む。ブロックチェーンネットワークが成長するにつれて、ワールド状態情報は、それに応じて成長し、結果として複雑でデータ集約型のハッシュツリーをもたらす。
【０００４】
ブロックチェーンネットワーク内のすべてのノードがブロックチェーンのワールド状態を維持する必要があるとは限らない。例えば、ブロックチェーンネットワーク内のブロックチェーンにトランザクションを追加することに参加するいわゆるコンセンサスノード(フルクライアント)は、コンセンサスプロセスへの参加を可能にするためにワールド状態ハッシュツリーを維持する。ブロックチェーンネットワーク内のトランザクションを実行するのみの他のノード(ライトクライアント)は、ワールド状態を維持する必要はなく、またはワールド状態を認識する必要さえない。しかしながら、そのようなノードは、それら自体の状態と、それらがブロックチェーン内で取引を行う他のノードの状態(例えば、部分状態)とを認識するべきである。ワールド状態ハッシュツリーのサイズおよび複雑さと、ライトクライアントによって使用されるデバイスのリソース制限とを考慮すると、リソースおよび帯域幅の効率的なデータ構造、ならびに、ブロックチェーンネットワークの部分状態を維持するためのデータ構造を更新するプロセスが必要とされる。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書の実装形態は、ワールド状態マークルパトリシアトライ木(MPT)のサブツリーを生成し、サブツリーを更新するためのコンピュータで実行される方法を含む。
【０００６】
いくつかの実装形態では、アクションは、ブロックチェーンネットワークのコンセンサスクライアントによって、ワールド状態MPTと、ブロックチェーンネットワーク内のノードのアドレスを記憶するためのアドレスリストとを提供するアクションであって、アドレスリストが最初は空である、アクションと、コンセンサスクライアントによって、複数の反復でワールド状態MPTの少なくとも一部のトラバーサルを実行し、各反復でワールド状態MPTの少なくとも一部の現在のノードについて、現在のノードをアカウントノードとしてマークし、現在のノードのアドレスをアドレスリスト内に記憶すること、現在のノードが拡張ノードであると判定し、現在のノードを拡張ノードによって参照されるノードに設定するトラバーサルの次の反復に移動すること、および、現在のノードを遷移ノードとしてマークし、現在のノードのアドレスをアドレスリスト内に記憶することのうちの1つを実行するアクションと、コンセンサスクライアントによって、アドレスリストに基づいてワールド状態MPTのサブツリーを作成するアクションであって、サブツリーのルートノードがワールド状態MPTのルートノードを含み、サブツリーの1つまたは複数の子ノードが、アドレスリスト内に記憶されたアドレスを有するワールド状態MPTのノードに対応する、アクションと、コンセンサスクライアントによって、ワールド状態MPTのサブツリーをブロックチェーンネットワークの非コンセンサスクライアントに送信するアクションであって、サブツリーが、非コンセンサスクライアントに関連付けられたアカウントの状態を提供する、アクションとを含む。他の実装形態は、コンピュータ記憶媒体上に符号化された方法のアクションを実行するように構成された対応するシステム、装置、およびコンピュータプログラムを含む。
【０００７】
これらおよび他の実装形態は、以下の特徴、すなわち、現在のノードがリーフノード、およびnull値のないブランチノードのうちの1つであるとの判定に応答して、現在のノードがアカウントノードとしてマークされること、現在のノードがブランチノードであり、ブランチノードのすべての子ノードがトラバースされたとの判定に応答して、現在のノードが遷移ノードしてマークされること、現在のノードをアカウントノードとしてマークした後、トラバーサルの次の反復の現在のノードがアカウントノードの親ノードを含むこと、現在のノードをアカウントノードおよび遷移ノードのうちの1つとしてマークした後、トラバーサルの次の反復の現在のノードがアカウントノードおよび遷移ノードのうちの1つの子ノードを含むこと、アドレスリストに基づいてワールド状態MPTのサブツリーを作成することが、アドレスリスト内のアカウントノードとしてマークされたアドレスについて、ワールド状態MPT内のパスを決定し、サブツリーにパスを追加することを少なくとも部分的に含むこと、ならびに、トラバーサルが深さ優先の前順序トラバーサルを含むこと、のうちの1つまたは複数を各々オプションで含んでもよい。
【０００８】
本明細書は、1つまたは複数のプロセッサに結合され、1つまたは複数のプロセッサによって実行されると、本明細書で提供される方法の実装形態に従って1つまたは複数のプロセッサに動作を実行させる命令を記憶した1つまたは複数の非一時的コンピュータ可読記憶媒体も提供する。
【０００９】
本明細書は、本明細書で提供される方法を実施するためのシステムをさらに提供する。システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されると、本明細書で提供される方法の実装形態に従って1つまたは複数のプロセッサに動作を実行させる命令を記憶した、1つまたは複数のプロセッサに結合されたコンピュータ可読記憶媒体とを含む。
【００１０】
本明細書による方法は、本明細書で説明される態様および特徴の任意の組合せを含んでもよいことが理解される。すなわち、本明細書による方法は、本明細書で具体的に説明される態様および特徴の組合せに限定されず、提供される態様および特徴の任意の組合せも含む。
【００１１】
本明細書の1つまたは複数の実装形態の詳細は、添付図面および以下の説明に記載されている。本明細書の他の特徴および利点は、説明および図面から、ならびに特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１２】
【図１】本明細書の実装形態を実行するために使用することができる環境の例を示す図である。
【図２】本明細書の実装形態による概念的アーキテクチャの例を示す図である。
【図３】ワールド状態マークルパトリシアトライ木(MPT)の例を示す図である。
【図４】本明細書の実装形態による図3の例示的なワールド状態MPTに基づいて生成されたサブツリーの例を示す図である。
【図５Ａ】本明細書の実装形態に従って実行することができるプロセスの例を示す図である。
【図５Ｂ】本明細書の実装形態に従って実行することができるプロセスの例を示す図である。
【図６】更新を含む図3の例示的なワールド状態MPTを示す図である。
【図７】本明細書の実装形態による図6の例示的なワールド状態MPTに基づく更新を含む図4の例示的なサブツリーを示す図である。
【図８Ａ】本明細書の実装形態に従って実行することができるプロセスの例を示す図である。
【図８Ｂ】本明細書の実装形態に従って実行することができるプロセスの例を示す図である。
【図９】本明細書の実装形態による装置のモジュールの例を示す図である。
【図１０】本明細書の実装形態による装置のモジュールの例を示す図である。
【発明を実施するための形態】
【００１３】
様々な図面における同様の参照記号は、同様の要素を示す。
【００１４】
本明細書の実装形態は、ワールド状態マークルパトリシアトライ木(MPT)のサブツリーを生成し、サブツリーを更新するためのコンピュータで実行される方法を含む。本明細書でさらに詳細に説明するように、本明細書の実装形態は、複数の反復でワールド状態MPTをトラバースし、各反復でワールド状態MPTの現在のノードについて、現在のノードをアカウントノードとしてマークし、現在のノードのアドレスをアドレスリスト内に記憶すること、現在のノードが拡張ノードであると判定し、現在のノードを拡張ノードによって参照されるノードに設定するトラバーサルの次の反復に移動すること、および、現在のノードを遷移ノードとしてマークし、現在のノードのアドレスをアドレスリスト内に記憶することのうちの1つを実行するアクションと、アドレスリストに基づいてワールド状態MPTのサブツリーを作成するアクションであって、サブツリーのルートノードがワールド状態MPTのルートノードを含み、サブツリーの1つまたは複数の子ノードが、アドレスリスト内に記憶されたアドレスを有するワールド状態MPTのノードに対応する、アクションとを含む。
【００１５】
本明細書の実装形態に関するさらなる文脈を提供するため、上記で紹介したように、(例えば、ピアツーピアノードで構成された)コンセンサスネットワーク、およびブロックチェーンネットワークと呼ばれる場合もある分散型台帳システム(DLS)は、参加しているエンティティが安全かつ不変にトランザクションを実行し、データを記憶することを可能にする。ブロックチェーンという用語は一般に、特定のネットワークおよび/またはユースケースに関連付けられているが、ブロックチェーンは、いかなる特定のユースケースも参照することなく、DLSを一般的に指すために本明細書で使用される。
【００１６】
ブロックチェーンは、トランザクションが不変である方法でトランザクションを記憶するデータ構造である。したがって、ブロックチェーン上に記録されたトランザクションは、確実で信頼できる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、チェーン内の直前のブロックの暗号化ハッシュを含めることによって、チェーン内の直前のブロックにリンクされる。各ブロックはまた、タイムスタンプと、それ自体の暗号化ハッシュと、1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによってすでに検証されたトランザクションは、ハッシュされ、マークルツリーに符号化される。マークルツリーは、ツリーのリーフノードにおけるデータがハッシュされ、ツリーの各ブランチ内のすべてのハッシュがブランチのルートにおいて連結されたデータ構造である。このプロセスは、ツリー内のすべてのデータを表すハッシュを記憶するツリー全体のルートまでツリーを続ける。ツリー内に記憶されたトランザクションであると称するハッシュは、ツリーの構造と一致しているかどうかを判定することによって、迅速に検証することができる。ブロックチェーンは、トランザクションを記憶するための分散型または少なくとも分散型のデータ構造であるが、ブロックチェーンネットワークは、トランザクションをブロードキャストし、検証し、確認することなどによって、1つまたは複数のブロックチェーンを管理し、更新し、維持するコンピューティングノードのネットワークである。
【００１７】
上記で紹介したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供される場合がある。本明細書の実装形態について、コンソーシアムブロックチェーンネットワークを参照して本明細書でさらに詳細に説明する。しかしながら、本明細書の実装形態は、任意の適切なタイプのブロックチェーンネットワークにおいて実現することができることが企図される。本明細書で説明される技法は、コンソーシアムブロックチェーンネットワークに関連するものとして示されるが、技法は、パブリックブロックチェーンネットワークとプライベートブロックチェーンネットワークとを含む他のタイプのブロックチェーンネットワークでも、変更の有無に関わらず使用することができる。
【００１８】
一般に、コンソーシアムブロックチェーンネットワークは、参加しているエンティティの間でプライベートである。コンソーシアムブロックチェーンネットワークでは、コンセンサスプロセスは、コンセンサスノードと呼ばれる場合があるノードの承認されたセットによって制御され、1つまたは複数のコンセンサスノードは、それぞれのエンティティ(例えば、金融機関、保険会社)によって操作される。例えば、10のエンティティ(例えば、金融機関、保険会社)のコンソーシアムがコンソーシアムブロックチェーンネットワークを操作することができ、その各々は、コンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを操作する。
【００１９】
いくつかの例では、コンソーシアムブロックチェーンネットワーク内で、すべてのノードにわたって複製されるブロックチェーンとしてグローバルブロックチェーンが提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関して完全な状態のコンセンサスにある。コンセンサス(例えば、ブロックチェーンへのブロックの追加に対する合意)を達成するために、コンソーシアムブロックチェーンネットワーク内でコンセンサスプロトコルが実装される。例示的なコンセンサスプロトコルは、限定はしないが、実用的ビザンチンフォールトトレランス(PBFT)、プルーフオブワーク(POW)、プルーフオブステーク(POS)、およびプルーフオブオーソリティ(POA)を含む。
【００２０】
本明細書の実装形態について、上記の文脈を考慮して本明細書でさらに詳細に説明する。より具体的には、本明細書でさらに詳細に説明するように、本明細書の実装形態は、MPTツリー内の検索アドレスの順序を改善するために深さ優先の前順序トラバーサルを実行し、2つのアカウントノード(リーフノード)の間で、本明細書では遷移ノードと呼ばれる特定のタイプのノードをトラバーサルプロセスで利用する。
【００２１】
さらなる詳細では、本明細書の実装形態は、ワールド状態MPT T0およびアドレスリストL0に基づいて、本明細書ではサブツリーT2と呼ばれるワールド状態サブツリーを提供する。本明細書の実装形態は、最初に、アドレスリストL0から本明細書ではサブツリーT1と呼ばれるサブツリーを構築し、次いで、サブツリー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を含む。各参加者(例えば、ユーザ、企業)は、そのうちの少なくともいくつかがブロックチェーン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と、またはそれを介して通信する。
【００２７】
ノード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と呼ばれるワールド状態サブツリーを提供する。本明細書の実装形態は、最初に、アドレスリストL0から本明細書ではサブツリーT1と呼ばれるサブツリーを構築し、次いで、サブツリーT1内で深さ優先の前順序トラバーサルを実行することによって、各アドレスについてルートノードからリーフノードまでのパスを見つけることを回避する。アカウントノードアドレスおよび遷移ノードアドレスは、深さ優先の前順序トラバーサルを通して順番に見つかる。2つのアカウントノード間に遷移ノードが存在する場合、第1のアカウントノードは、遷移ノードに返され、他のアカウントノードは、遷移ノードから見つかる。このようにして、第2のアカウントノードの検索は、ルートノードから開始する必要はなく、代わりに遷移ノードから開始する。
【００４６】
本明細書でさらに詳細に説明するように、本明細書の実装形態は、プロセッサ要件とストレージ要件とを低減する。例えば、各アドレスについて、ルートノードからその対応するリーフノードまでのパスは、保存され、これらのパス内の重複するノードは、マージされる。より具体的には、ルートノードから各アカウントノード(すなわち、アカウントアドレスに対応する各リーフノード)までの完全なパスを記憶する代わりに、2つのアカウントノード間に遷移ノードが存在する場合、遷移ノードから次のアカウントノードまでのパスのみが保存される。このようにして、複数のアカウントノードへのパスがマージされ、それは、効率を改善し、重複するパスによって引き起こされる動作およびストレージの浪費を回避する。
【００４７】
いくつかの実装形態では、本明細書でさらに詳細に説明するように、ワールド状態MPT内のアカウントアドレスのリストがあるとすれば、アドレスリストのサブツリーが提供される。本明細書の実装形態は、MPT内の検索アドレスの順序と、ノードの効率とを改善するために、深さ優先の前順序トラバーサルアルゴリズムを採用する。さらに、本明細書の実装形態は、2つのアカウントノード間に遷移ノードを含むノードトラバーサルプロセスを提供する。ルートノードから各アカウントノードを検索することによって引き起こされる検索の浪費を回避するために、実装形態は、2つのアカウントノードのパスへのルートノードの重複を考慮して、遷移ノードから次のアカウントノードまでのパスを保存することを含む。本明細書で説明するように、本明細書の実装形態は、効率を改善し、重複するパスによって引き起こされる動作およびストレージの浪費を回避する。
【００４８】
本明細書の実装形態について、例示的なワールド状態MPTを参照してさらに詳細に説明する。例示的なワールド状態MPTは、スイスのツークのEthereum Foundationによって提供されるEthereum Blockchain Application Platformに基づく。Ethereumは、Ether(ETH)と呼ばれるデジタル資産を提供し、その最小単位は、Wei(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は、図3のワールド状態MPT300のルートノード302、ブランチノード304、306、拡張ノード308、およびリーフノード310、312に対応するルートノード402、ブランチノード404、406、拡張ノード408、およびリーフノード410、412を含む。リーフノード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のノードにわたって検索するために、深さ優先の前順序トラバーサルアルゴリズムが使用される。
【００５８】
MPTツリーT1がアドレスリストL0から提供される(502)。いくつかの例では、アドレスリストL0は、特定のライトクライアントがアクセスを許可されているアドレスのリストを表すACLに基づく。いくつかの例では、アドレスリストL0は、作成されるべきサブツリーT2内に含まれるべきアドレスを提供する。いくつかの例では、アドレスリストL0内の各アドレスの値は、デフォルトで空の文字列(例えば、nullと呼ばれる)とみなされ、T1内の各ノードの値を計算することができる。空のアドレスリストL1が作成される(504)。T1のルートノードから開始し、深さ優先の前順序トラバーサルでT1をトラバーサルして、ノードトラバーサルが実行される(506)。本明細書でさらに詳細に説明するように、例示的なプロセス500は、対応するアドレスリストL0内のアドレスのノードと、アドレスリストL1内のそれらの間の遷移ノードとを再帰的に記録する。
【００５９】
現在のノードがリーフノードであるかどうかが判定される(508)。現在のノードがリーフノードである場合、ノードは、アドレスリスト内のノードに対応する。ノードは、(例えば、「アカウントノード」)としてマークされ、ノードのアドレスおよびマークは、アドレスL1に保存される(510)。トラバーサルは、リーフノードの親ノードに戻る(512)。現在のノードがリーフノードではない場合、現在のノードが拡張ノードであるかどうかが判定される(514)。現在のノードが拡張ノードである場合、ノードの値は、別のノードへの参照を示し、トラバーサルは、参照されたノードに移動する(516)。
【００６０】
現在のノードが拡張ノードではない場合、現在のノードは、ブランチノードであり、それがノードにとって初めてであるかどうかが判定される(520)。初めてではない場合、現在のノードのすべての子がトラバースされたかどうかが判定される(522)。すべての子がトラバースされた場合、トラバーサルは、ブランチノードの親ノードに戻る(512)。すべての子がトラバースされていない場合、ノードは、「遷移ノード」としてマークされ、ノードのアドレスおよびマークは、L1内に保存され(524)、トラバーサルは、トラバースされていない子ノードに移動する(526)。それが現在のノード(ブランチノード)にとって初めてである場合、その値が空(例えば、nullとも呼ばれる空の文字列)であるかどうかが判定される(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の例示的なワールド状態MPT300を示す。図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は、ライトクライアントのためにフルクライアントによって提供される更新のセットに基づいて更新することができる。例えば、ライトクライアントは、更新されたサブツリーについてブロックチェーンネットワークに要求を提出することができる。要求に応答して、フルクライアントは、フルクライアントによって維持される(例えば、図6に示す)ワールド状態MPT300の現在の状態に基づいてサブツリー400への更新を決定することができる。いくつかの例では、フルクライアントは、(例えば、新しいサブツリーとは対照的に)更新のセットを生成し、更新のセットをライトクライアントに送信する。ライトクライアントは、サブツリー400を更新するために更新のセットを処理する。
【００６８】
図7は、本明細書の実装形態による図6の例示的なワールド状態MPT300に基づく更新を含む図4の例示的なサブツリー400を示す。図7の例示的なサブツリー400は、図3のワールド状態MPT300のルートノード302、ブランチノード304、306、拡張ノード308、およびリーフノード310、312に対応するルートノード402、ブランチノード404、406、拡張ノード408、およびリーフノード410、412を含む。リーフノード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の対応するノード(現在のノード)との間のペアワイズノード比較を行い、異なるワールド状態MPT T0の任意のノードを更新ツリーT2'に追加する。
【００７２】
T0のルートノードの値およびT2のルートノードの値が決定され(802)、値が比較される(804)。値が同じである場合、サブツリーT2は、MPT T0と一致した状態にあり、そのように示される(806)。例えば、サブツリーT2がワールド状態と一致していることを示すために、フルクライアントから、更新を要求したライトクライアントに応答を送信することができる。値が異なる場合、ワールド状態MPT T0は、サブツリーT2が作成されてから更新されている。その結果、更新ツリーT2'は、MPT T0のルートノードを用いて作成され、現在のノードは、サブツリー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の現在のノードは、スロットが指すノードに移動する。すなわち、その値がNULLではない場合であっても、そのようなスロットは、T2内にないT0内のノードを指すので、T2内の別のノードを指さない任意のスロットは、考慮されない。したがって、例示的なプロセス800は、第1のスロットから開始して、異なる値を有するスロットに遭遇するまで、スロット比較を提供し、T2内の現在のノードは、このスロットによって指されたノードに移動し(836)、例示的なプロセス800は、ループバックする。
【００７６】
T2の現在のノードにとってそれが初めてではない場合(832)、T2の現在のノードとT0の現在のノードとの間のすべてのスロットが比較されたかどうかが判定される(838)。すべてのスロットが比較された場合、例示的なプロセス800は、親ノードに移動するためにループバックする(826)。すべてのスロットが比較されていない場合、NULLではない残りのスロットは、残りのスロットにおける異なる値に遭遇するまで、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をローカルに更新するために更新ツリーT2'を受信すると、例示的なプロセス850を実行する。
【００７９】
更新ツリーT1のルートノードで開始し、例示的なプロセス850は、各ノードを(現在のノードとして)考慮するために深さ優先の順序トラバーサルを実行する。現在のノードが考慮されたかどうかが判定される(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と、サブツリーの更新ツリーをブロックチェーンネットワークの非コンセンサスノードに送信するための送信機または送信ユニット1006とを含み、非コンセンサスクライアントは、非コンセンサスクライアントに関連付けられたアカウントの状態を提供する更新されたサブツリーを提供するために、更新ツリーを使用して、ローカルに記憶されたサブツリーを更新する。
【００８２】
前述の実装形態に示されたシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用して実装することができ、または、特定の機能を有する製品を使用することによって実装することができる。典型的な実装形態のデバイスは、コンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、セルラー電話、カメラ付き携帯電話、スマートフォン、携帯情報端末、メディアプレーヤー、ナビゲーションデバイス、電子メール受信および送信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せとすることができる。
【００８３】
装置内の各ユニットの機能および役割の実装形態のプロセスについて、前述の方法における対応するステップの実装形態のプロセスへの参照を行うことができる。簡単化のため、ここでは詳細を省略する。
【００８４】
装置の実装形態は、基本的に方法の実装形態に対応するので、関連する部分について、方法の実装形態における関連する説明への参照を行うことができる。前述で説明した装置の実装形態は、単なる例である。別々の部分として説明したユニットは、物理的に別々であってもなくてもよく、ユニットとして示した部分は、物理的ユニットであってもなくてもよく、1つの位置に配置されてもよく、いくつかのネットワークユニット上に分散されてもよい。モジュールのうちのいくつかまたはすべては、本明細書の解決策の目的を達成するために実際の要求に基づいて選択することができる。当業者は、創造的な努力なしに、本出願の実装形態を理解し実施することができる。
【００８５】
再び図9を参照すると、ワールド状態MPT生成装置のサブツリーの内部機能モジュールおよび構造を示していると解釈することができる。ワールド状態MPT生成装置のサブツリーは、ブロックチェーンネットワーク内のワールド状態MPTのサブツリーを生成するように構成されたブロックチェーンノードの例とすることができる。再び図10を参照すると、ワールド状態MPT更新装置のサブツリーの内部機能モジュールおよび構造を示していると解釈することができる。ワールド状態MPT更新装置のサブツリーは、ブロックチェーンネットワーク内のワールド状態MPTのサブツリーを更新するように構成されたブロックチェーンノードの例とすることができる。本質的に実行体は、電子デバイスとすることができ、電子デバイスは、以下、すなわち、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するメモリとを含む。
【００８６】
主題の説明した実装形態は、単独でまたは組み合わせて1つまたは複数の特徴を含むことができる。例えば、第1の実装形態では、ワールド状態MPTと、ブロックチェーンネットワーク内のノードのアドレスを記憶するためのアドレスリストとを提供するアクションであって、アドレスリストが最初は空である、アクションと、複数の反復でワールド状態MPTの少なくとも一部のトラバーサルを実行し、各反復でワールド状態MPTの少なくとも一部の現在のノードについて、現在のノードをアカウントノードとしてマークし、現在のノードのアドレスをアドレスリスト内に記憶すること、現在のノードが拡張ノードであると判定し、現在のノードを拡張ノードによって参照されるノードに設定するトラバーサルの次の反復に移動すること、および、現在のノードを遷移ノードとしてマークし、現在のノードのアドレスをアドレスリスト内に記憶することのうちの1つを実行するアクションと、アドレスリストに基づいてワールド状態MPTのサブツリーを作成するアクションであって、サブツリーのルートノードがワールド状態MPTのルートノードを含み、サブツリーの1つまたは複数の子ノードが、アドレスリスト内に記憶されたアドレスを有するワールド状態MPTのノードに対応する、アクションと、ワールド状態MPTのサブツリーをブロックチェーンネットワークの非コンセンサスクライアントに送信するアクションであって、サブツリーが、非コンセンサスクライアントに関連付けられたアカウントの状態を提供する、アクションとを実行することができる。
【００８７】
前述のおよび他の説明された実装形態は、各々、オプションで、以下の特徴のうちの1つまたは複数を含む。
【００８８】
以下の特徴のいずれかと組合せ可能な第1の特徴では、現在のノードは、現在のノードがリーフノード、およびnull値がないブランチノードのうちの1つであるとの判定に応答して、アカウントノードとしてマークされる。
【００８９】
以下の特徴のいずれかと組合せ可能な第2の特徴では、現在のノードは、現在のノードがブランチノードであり、ブランチノードのすべての子ノードがトラバーサルされたとの判定に応答して、遷移ノードとしてマークされる。
【００９０】
以下の特徴のいずれかと組合せ可能な第3の特徴では、現在のノードをアカウントノードとしてマークした後、トラバーサルの次の反復の現在のノードは、アカウントノードの親ノードを含む。
【００９１】
以下の特徴のいずれかと組合せ可能な第4の特徴では、現在のノードをアカウントノードおよび遷移ノードのうちの1つとしてマークした後、トラバーサルの次の反復の現在のノードは、アカウントノードおよび遷移ノードのうちの1つの子ノードを含む。
【００９２】
以下の特徴のいずれかと組合せ可能な第5の特徴では、少なくとも部分的にアドレスリストに基づいてワールド状態MPTのサブツリーを作成することは、アドレスリスト内のアカウントノードとしてマークされたアドレスについて、ワールド状態MPT内のパスを決定することと、パスをサブツリーに追加することとを含む。
【００９３】
以下の特徴のいずれかと組合せ可能な第6の特徴では、トラバーサルは、深さ優先の前順序トラバーサルを含む。
【００９４】
本明細書で説明する主題の実装形態ならびにアクションおよび動作は、本明細書で開示された構造およびそれらの構造的等価物を含む、デジタル電子回路において、有形に具体化されたコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらのうちの1つもしくは複数の組合せにおいて実施することができる。本明細書で説明する主題の実装形態は、データ処理装置による実行のための、またはデータ処理装置の動作を制御するための、コンピュータプログラムキャリア上に符号化された1つまたは複数のコンピュータプログラム、例えば、コンピュータプログラム命令の1つまたは複数のモジュールとして実装することができる。キャリアは、有形の非一時的コンピュータ記憶媒体であってもよい。代替的には、または加えて、キャリアは、データ処理装置による実行のために適切な受信機装置への送信のための情報を符号化するように生成された、人工的に生成された伝播信号、例えば、機械生成された電気信号、光信号、または電磁信号であってもよい。コンピュータ記憶媒体は、機械可読記憶デバイス、機械可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つもしくは複数の組合せとすることができ、またはその一部とすることができる。
【００９５】
「データ処理装置」という用語は、例として、プログラム可能プロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。データ処理装置は、専用論理回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィック処理ユニット)を含むことができる。装置は、ハードウェアに加えて、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つもしくは複数の組合せを構成するコンピュータプログラムのための実行環境を作成するコードも含むことができる。
【００９６】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも呼ばれるまたはそれらとして説明される場合があるコンピュータプログラムは、コンパイル言語もしくはインタープリター言語、または宣言型言語もしくは手続き型言語を含む、任意の形式のプログラミング言語で書くことができ、スタンドアロンプログラムもしくはモジュール、構成要素、エンジン、サブルーチン、または、コンピューティング環境内で実行するのに適した他のユニットとしてを含む、任意の形式で展開することができ、環境は、1つまたは複数の場所における、データ通信ネットワークによって相互接続された1つまたは複数のコンピュータを含んでもよい。
【００９７】
コンピュータプログラムは、ファイルシステム内のファイルに対応してもよいが、必ずしもそうする必要はない。コンピュータプログラムは、他のプログラムまたはデータ、例えば、マークアップ言語ドキュメント内に記憶された1つまたは複数のスクリプトを保持するファイルの一部内、例えば、問題のプログラム専用の単一のファイル内、または、複数の協調ファイル、例えば、1つもしくは複数のモジュール、サブプログラム、もしくはコードの一部を記憶するファイル内に記憶することができる。
【００９８】
本明細書で説明するプロセスおよび論理フローは、入力データに対して動作し、出力を生成することによって動作を実行するために1つまたは複数のコンピュータプログラムを実行する1つまたは複数のコンピュータによって実行することができる。プロセスおよび論理フローは、専用論理回路、例えば、FPGA、ASIC、もしくはGPUによって、または、専用論理回路と1つもしくは複数のプログラムされたコンピュータとの組合せによって実行することもできる。
【００９９】
コンピュータプログラムの実行に適したコンピュータは、専用もしくは汎用のマイクロプロセッサ、もしくはその両方、または任意の他の種類の中央処理装置に基づくことができる。一般に、中央処理装置は、読み取り専用メモリまたはランダムアクセスメモリまたその両方から命令とデータとを受信する。コンピュータの要素は、命令を実行するための中央処理装置と、命令とデータとを記憶するための1つまたは複数のメモリデバイスとを含むことができる。中央処理装置およびメモリは、専用論理回路によって補完することができ、またはその中に組み込むことができる。
【０１００】
一般に、コンピュータはまた、1つもしくは複数の大容量記憶デバイスを含むか、または、1つもしくは複数の大容量記憶デバイスからデータを受信するか、もしくはそこにデータを転送するように動作可能に結合される。大容量記憶デバイスは、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスク、またはソリッドステートドライブとすることができる。しかしながら、コンピュータは、そのようなデバイスを有する必要はない。さらに、コンピュータは、別のデバイス、例えば、2〜3例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤー、ゲームコンソール、全地球測位システム(GPS)受信機、またはポータブル記憶デバイス、例えば、ユニバーサルシリアルバス(USB)フラッシュドライブに組み込むことができる。
【０１０１】
ユーザとの対話を提供するために、本明細書で説明する主題の実装形態は、ユーザに情報を表示するためのディスプレイデバイス、例えば、LCD(液晶ディスプレイ)モニタと、ユーザがコンピュータに入力を提供することができる入力デバイス、例えば、キーボードおよびポインティングデバイス、例えば、マウス、トラックボール、またはタッチパッドとを有するコンピュータ上に実装することができ、またはコンピュータと通信するように構成することができる。同様にユーザとの対話を提供するために他の種類のデバイスを使用することができ、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックとすることができ、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受信することができる。加えて、コンピュータは、ユーザによって使用されるデバイスとの間でドキュメントを送受信することによって、例えば、ウェブブラウザから受信した要求に応答してユーザのデバイス上のウェブブラウザにウェブページを送信することによって、または、ユーザデバイス、例えば、スマートフォンもしくは電子タブレット上で実行されているアプリと対話することによって、ユーザと対話することができる。また、コンピュータは、テキストメッセージまたは他の形式のメッセージをパーソナルデバイス、例えば、メッセージングアプリケーションを実行しているスマートフォンに送信し、引き換えにユーザから応答メッセージを受信することによってユーザと対話することができる。
【０１０２】
本明細書は、システム、装置、およびコンピュータプログラム構成要素に関連して「するように構成された」という用語を使用する。1つまたは複数のコンピュータのシステムについて、特定の動作またはアクションを実行するように構成されていることは、動作時にシステムに動作またはアクションを実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがシステムにインストールされていることを意味する。1つまたは複数のコンピュータプログラムについて、特定の動作またはアクションを実行するように構成されていることは、1つまたは複数のプログラムが、データ処理装置によって実行されると、装置に動作またはアクションを実行させる命令を含むことを意味する。専用論理回路について、特定の動作またはアクションを実行するように構成されていることは、回路が動作またはアクションを実行する電子ロジックを有することを意味する。
【０１０３】
本明細書は、多くの特定の実装形態の詳細を含むが、これは、特許請求の範囲自体によって定義される特許請求されているものの範囲に対する制限として解釈されるべきではなく、特定の実装形態に固有であり得る特徴の説明として解釈されるべきである。別々の実装形態の文脈において本明細書で説明されている特定の特徴は、単一の実装形態において組み合わせて実現することもできる。逆に、単一の実装形態の文脈において説明されている様々な特徴は、複数の実装形態で別々に、または任意の適切な部分的組合せで実現することもできる。さらに、特徴は、特定の組合せで機能するように上記で説明されている場合があり、当初はそのように特許請求さえされている場合があるが、特許請求された組合せからの1つまたは複数の特徴は、場合によっては、組合せから削除することができ、請求項は、部分的組合せまたは部分的組合せの変形例に向けられる場合がある。
【０１０４】
同様に、動作は、特定の順序で図面内に示され、特許請求の範囲内に列挙されているが、これは、所望の結果を達成するために、そのような動作が図示された特定の順序もしくは連続した順序で実行されること、または、すべての示された動作が実行されることを必要とするものとして理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合がある。さらに、上記で説明した実装形態における様々なシステムモジュールおよび構成要素の分離は、すべての実装形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されているプログラム構成要素およびシステムを、一般に、単一のソフトウェア製品に一緒に統合することができ、または、複数のソフトウェア製品にパッケージ化することができることが理解されるべきである。
【０１０５】
主題の特定の実装形態について説明した。他の実装形態は、以下の特許請求の範囲内にある。例えば、特許請求の範囲内に列挙されたアクションは、異なる順序で実行することができ、依然として所望の結果を達成することができる。一例として、添付図面内に描かれたプロセスは、所望の結果を達成するために、示された特定の順序、または連続的な順序を必ずしも必要としない。場合によっては、マルチタスクおよび並列処理が有利である場合がある。
【符号の説明】
【０１０６】
100  環境
102  コンソーシアムブロックチェーンネットワーク
106  コンピューティングデバイス、コンピューティングシステム
108  コンピューティングデバイス、コンピューティングシステム
110  ネットワーク
200  概念的アーキテクチャ
202  参加者システム
204  参加者システム
206  参加者システム
212  ブロックチェーンネットワーク
214  ノード
216  ブロックチェーン
216'  コピー
216"  コピー
300  ワールド状態MPT、MPT、ワールド状態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  鍵値対
900  装置
902  生成器または生成ユニット
904  実行器または実行ユニット
906  作成器または作成ユニット
908  送信機または送信ユニット
1000  装置
1002  生成器または生成ユニット
1004  実行器または実行ユニット
1006  送信機または送信ユニット
【図１】
0006865851.tif 000002
【図２】
0006865851.tif 000003
【図３】
0006865851.tif 000004
【図４】
0006865851.tif 000005
【図５Ａ】
0006865851.tif 000006
【図５Ｂ】
0006865851.tif 000007
【図６】
0006865851.tif 000008
【図７】
0006865851.tif 000009
【図８Ａ】
0006865851.tif 000010
【図８Ｂ】
0006865851.tif 000011
【図９】
0006865851.tif 000012
【図１０】
0006865851.tif 000013