(57)【要約】  （情報または値の変形、変換または転送を含む）多数のトランザクションがスケーラブルで信頼性があり、安全且つ効率的な方法で同時に処理される高性能分散型台帳およびトランザクション・コンピューティング・ネットワーク・ファブリックである。一実施形態では、コンピューティング・ネットワーク・ファブリックまたは「コア」は、チェーンのブロックの通信、処理および記憶が、トランザクション自体が遠く離れたソースから発生している場合であっても、ほとんど同期せずに、非常に高い性能および低いレイテンシで、同時に実行されることを可能にするように、データを編成する分散型ブロックチェーンネットワークをサポートするように構成される。このデータ編成は、処理メッシュとして構成された自律的で協調的なコンピューティングノード内のトランザクション空間のセグメント化に依存している。各コンピューティングノードは、通常、コア内の他の全てのノードと機能的に同等である。ノードは、全体としてブロックチェーンの一貫した論理的に完全なビューを維持しながら、互いに独立してブロックを操作する。他の特徴によれば、安全で高性能なトランザクション処理は、衝突検出および取り消し機構を含む楽観的同時制御を使用して提供される。
2021508876.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のトランザクションハンドラのセットを含むトランザクション処理レイヤを提供することと、
ＵＴＸＯハンドラのセットから構成される、前記トランザクション処理レイヤとは異なるＵＴＸＯ処理レイヤを提供することと、
１つ以上のトランザクションハンドラがメッセージを受信し、それらのメッセージをブロックチェーンの１つ以上のブロックに加工する処理を行うことを備え、
メッセージが前記ブロックチェーンに含まれるトランザクションと関連付けられ、前記トランザクションが未使用トランザクション出力（ＵＴＸＯ）のセットと関連付けられており、
更に、前記ブロックチェーン内のブロックの所与のセグメントの処理時に、所与のトランザクションハンドラが第１および第２のＵＴＸＯハンドラと同時に相互作用することと、
前記トランザクションの第２の部分に関連付けられている第２のＵＴＸＯ動作が前記第２のＵＴＸＯハンドラにおいて失敗したことを検出すると、前記第１のＵＴＸＯハンドラにおいて首尾よく完了した前記トランザクションの第１の部分に関連付けられた第１のＵＴＸＯ動作を特定して逆行することとを備える、方法。
【請求項２】
前記ＵＴＸＯハンドラのセットにわたってＵＴＸＯ空間をパーティション化することをさらに含む、請求項１に記載の方法。
【請求項３】
前記所与のトランザクションハンドラが、前記ＵＴＸＯハンドラへの要求に固有に関連付けられたトランザクションハンドラが提供するハンドルを用いて各ＵＴＸＯハンドラと相互作用する、請求項１に記載の方法。
【請求項４】
前記第２のＵＴＸＯ動作に関連付けられた前記ＵＴＸＯ動作が、他のトランザクションによって既に使用済みのＵＴＸＯを使用する要求に関連付けられていることから失敗する、請求項１に記載の方法。
【請求項５】
前記第２のＵＴＸＯ動作に関連付けられた前記ＵＴＸＯ動作が、存在する前かまたは確定される前のＵＴＸＯを使用する要求に関連付けられていることから失敗する、請求項１に記載の方法。
【請求項６】
ＵＴＸＯの使用を前記ブロックチェーンの前のブロックにマイニングされた後でのみ可能にするというポリシーを実施することをさらに含む、請求項５に記載の方法。
【請求項７】
前記第１のＵＴＸＯ動作を前記所与のトランザクションハンドラからのメッセージの受信時に前記第１のＵＴＸＯハンドラによって逆行することによって、前記トランザクションについての関連する使用動作を取り消す、請求項１に記載の方法。
【請求項８】
首尾よく完了した前記第１のＵＴＸＯ動作を逆行することによって、前記第１のＵＴＸＯハンドラのロックを取得することを回避し、それにより、前記ＵＴＸＯ使用動作の処理に関連付けられるレイテンシを低減する、請求項１に記載の方法。
【請求項９】
前記所与のトランザクションハンドラと各ＵＴＸＯハンドラとの間の相互作用がタイムアウトを伴う、請求項１に記載の方法。
【請求項１０】
メッセージを受信してブロックチェーンに加工する処理を行うコンピューティング要素のセットを含むトランザクション処理システムに関連付けられて実行される方法であって、メッセージが前記ブロックチェーンに含まれるトランザクションに関連付けられ、前記トランザクションが１つ以上の未使用トランザクション出力（ＵＴＸＯ）のセットに関連付けられる、方法において、
ＵＴＸＯ処理からのトランザクション処理を分岐させることと、
ＵＴＸＯハンドラのセットにわたってＵＴＸＯ空間をパーティション化することと、
前記ブロックチェーンへのメッセージの処理時に、競合を検出し、部分的に完了したトランザクションのＵＴＸＯ動作を逆行することとを備える、方法。
【請求項１１】
前記ＵＴＸＯ空間が、前記コンピューティング要素のセットに配置されたロックフリーの分散型ＵＴＸＯデータベースを含む、請求項１０に記載の方法。
【請求項１２】
トランザクション処理が、トランザクションハンドラのセットによって実行される、請求項１０に記載の方法。
【請求項１３】
所与のトランザクションハンドラが、前記ＵＴＸＯハンドラへの要求に固有に関連付けられたトランザクションハンドラが提供するハンドルを使用して、各ＵＴＸＯハンドラと相互作用する、請求項１２に記載の方法。
【請求項１４】
メッセージを受信してブロックチェーンに加工する処理を行うトランザクション処理コンピューティング要素のセットであって、メッセージが前記ブロックチェーンに含まれるトランザクションに関連付けられ、トランザクションが１つ以上の未使用トランザクション出力（ＵＴＸＯ）のセットに関連付けられる、コンピューティング要素のセットと、
前記コンピューティング要素のセットにわたってサポートされるロックフリーの分散型ＵＴＸＯデータベースとを備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本特許出願は、一般に、分散型ネットワークにおけるコンピューティングリソースのセットにわたる分散型記録システムを管理することに関する。
【背景技術】
【０００２】
分散型コンピュータシステムは、従来技術においてよく知られている。そのような分散型コンピュータシステムの１つは、サービスプロバイダによって運用および管理される「コンテンツ配信ネットワーク」（ＣＤＮ）または「オーバーレイネットワーク」である。サービスプロバイダは、通常、サービスプロバイダの共有インフラストラクチャを使用するサードパーティ（顧客）に代わってコンテンツ配信サービスを提供する。この種の分散型システムは、通常、コンテンツ配信、ウェブ・アプリケーション・アクセラレーション、または外部委託元サイトのインフラストラクチャの他のサポートなどの様々なサービスを容易にするように設計されたソフトウェア、システム、プロトコルおよび技術とともに、ネットワークまたは複数のネットワークによってリンクされた自律型コンピュータの集まりを指す。ＣＤＮサービスプロバイダは、通常、顧客ポータルに用意された後にネットワークに展開されるデジタルプロパティ（ウェブサイトなど）を介してサービス配信を提供する。
【０００３】
ブロックチェーンは、暗号化を使用してリンクおよび保護されるブロックと呼ばれる継続的に増加するレコードのリストである。各ブロックは、通常、前のブロックにそれをリンクする暗号化ハッシュとトランザクションデータとを含む。分散型台帳として使用する場合、ブロックチェーンは、通常、新たなブロックを有効化するためのプロトコルに集合的に準拠するピアツーピアネットワークによって管理される。記録されると、任意の所与のブロックのデータは、ネットワークの大多数の結託を必要とする後続の全てのブロックを変更せずに遡及的に変更されることはできない。ブロックチェーンは、イベントの記録、様々なレコード管理アクティビティ（識別子管理、トランザクション処理、出所の文書化など）およびその他に適している。一般化すると、ブロックチェーンは、後続の全てのブロックの変更およびネットワークの結託なしにはレコードを遡及的に変更することができないように、多くのコンピュータにわたるトランザクションを記録するために使用される非中央集権化された分散型デジタル台帳である。典型的なブロックチェーンでは、ブロックは、ハッシュされてデータ構造に符号化される有効なトランザクションのバッチを保持する。この構造では、前述のように、各ブロックは、ブロックチェーン内の前のブロックにそれをリンクする暗号化ハッシュを含む。リンクされたブロックは、チェーンを形成する。この反復プロセスは、元の起源（または最初の）ブロックに遡って、前のブロックの整合性を確認する。
【０００４】
従来のブロックチェーンの実装では、ブロックチェーンを単純なブロックのシーケンスとして扱う。そのようなアプローチは、通常、処理のボトルネックを形成し、ブロックチェーンをその集約形式で通信および記憶することによって、ブロックチェーン実装の達成可能な性能を厳しく制限する。
【発明の概要】
【０００５】
本開示は、（情報または値の変形、変換または転送を含む）多数のトランザクションがスケーラブルで信頼性があり、安全且つ効率的な方法で同時に処理される高性能分散型台帳およびトランザクション・コンピューティング・ネットワーク・ファブリックを提供する。一実施形態では、コンピューティング・ネットワーク・ファブリックまたは「コア」は、チェーンのブロックの通信、処理および記憶が、トランザクション自体がリモートソースから発生している場合であっても、ほとんど同期せずに、非常に高い性能および低いレイテンシで、同時に実行されることを可能にするように、ブロックチェーンのデータを編成する分散型ブロックチェーンネットワークをサポートするように構成される。このデータ編成は、処理メッシュとして構成された自律的で協調的なコンピューティングノード内のトランザクション空間のセグメント化に依存している。各コンピューティングノードは、通常、コア内の他の全てのノードと機能的に同等であり、各ノードは、システムの全負荷を負担できることが好ましい。コンピューティングノードは、通常、コンピューティング、通信および記憶要素のクラスタを備える。より一般的には、コアネットワークを構成する全てのコンピューティングノードは、互いに等しいと見なされることが好ましく、スタンドアロンの個々のノードは、信頼できると見なされない。さらに、互いに関して、ノードは、自律的に動作し、好ましくは、いずれのノードも他のノードを制御することができない。ノードは、全体としてブロックチェーンの一貫した論理的に完全なビューを維持しながら、互いに独立してブロックを操作する。
【０００６】
性能分散型記録システムは、未使用トランザクション出力（ＵＴＸＯ）空間が複数のＵＴＸＯハンドラにわたってパーティション化され、ＵＴＸＯデータベースをトランザクション処理から分離することが好ましい。結果として得られるデータ編成は、同期を減らしつつ同時処理の増加を促進し、それにより、より高いトランザクションスループットおよびより短いトランザクション処理時間を有するシステムをもたらす。他の特徴によれば、この同時処理構造が与えられた安全で高性能なトランザクション処理は、衝突検出および取り消し機構を含む楽観的同時制御を使用して提供される。
【０００７】
上記は、主題のより適切な特徴のいくつかを概説している。これらの特徴は、単なる例示であると解釈されるべきである。開示された主題を異なる方法で適用することによって、または説明されるように主題を変更することによって、多くの他の有益な結果を得ることができる。
【図面の簡単な説明】
【０００８】
主題およびその利点をより完全に理解するために、ここで添付の図面と併せて以下の説明を参照する。
【図１】本開示にかかる、トランザクションがブロックチェーンに編成された分散型記録システムを提供するネットワーキングアーキテクチャを示すブロック図である。
【図２】本明細書の技術にかかるブロックセグメンテーションを示している。
【図３】セグメント化されたブロックチェーンを示している。
【図４】セグメントの移行および再割り当てプロセスを示している。
【図５】本開示のノード間セグメント処理プロセスを示している。
【図６Ａ】トランザクション有効化を実行しているときの代表的なコンピューティングノードのブロック図およびその動作を示している。
【図６Ｂ】ブロックマイニングおよび検証を実行しているときの図６Ａのコンピューティングノードおよびその動作を示している。
【図７】本開示の同時処理技術の高レベル描写である。
【図８】本開示にかかるストリーミングブロックの生成、送信および有効化を提供するために様々なノードおよびノード要素の間で実行される動作の詳細な描写である。
【図９】コンピューティング・ネットワーク・ファブリックに関連付けられることができるコンテンツ配信ネットワーク（ＣＤＮ）アーキテクチャを示している。
【図１０】代表的なマシン構成を示している。
【図１１】本開示にかかる同時トランザクション処理を容易にするためのトランザクションおよびＵＴＸＯハンドラの代表的な構成を示している。
【図１２】トランザクションハンドラとＵＴＸＯハンドラとの間の代表的なトランザクションダイアログを示している。
【図１３】失敗したトランザクションの代表的なダイアログを示している。
【図１４】競合状態の代表的なダイアログを示している。
【図１５】本開示の技術にかかる、失敗したトランザクションを元に戻す代表的なダイアログを示している。
【発明を実施するための形態】
【０００９】
全体的な高レベル設計
図１は、トランザクションがブロックチェーンに編成された分散型記録システムを実装するためのスケーラブルな高性能アーキテクチャを示している。高レベルでは、システムは、示されているように複数の機能領域、すなわち、周辺１００ａ、エッジ１００ｂ、およびコア１００ｃに分割されている。システムは、配信、管理、運用、管理、構成、分析などを容易にするために他の機能領域を備えることができるが、簡単にするために、これらの領域は示されていない。本明細書において使用される場合、周辺１００ａは、一般に、境界１０１に関連付けられた要素を指す。これらの要素は、通常、クライアントサーバベースの電子ウォレットまたはウォレットデバイス、端末および販売時点管理デバイス、レガシー金融ネットワーク要素および関連するアダプタを含む。一般に、本明細書において使用される場合、限定されるものではないが、金融トランザクションを含む、トランザクションの作成および消費に関与する任意の要素は、周辺１０１内の要素とすることができる。周辺は、グローバルに広がることができる。エッジ１００ｂは、通常、境界１０２に関連付けられたオーバーレイネットワークの要素を指す。代表的な要素は、これらに限定されるものではないが、オーバーレイ・エッジ・ネットワーク（例えば、Ａｋａｍａｉ（登録商標）などのＣＤＮ）で実行される処理、通信および記憶要素（エッジサーバ、スイッチ／ルータ、ディスク／ＳＳＤ）を含む。上述したようなＣＤＮは、有利には、要求されたトランザクションおよびそれらに関連する結果を集約し、（周辺機器における要素との間で）後述するように効率的にルーティングする、（エンドユーザ／デバイスと比べて）低レイテンシのプレゼンスポイントを提供する。ウォレットサービスは、エッジ内に配置されることができる。エッジ要素はまた、個別に、集合的に、および他のサービスと連携して、攻撃および他の敵対的な活動からコア１００ｃを保護するセキュリティ境界として機能する。ＣＤＮ固有の実装が好ましいが、本明細書のシステムにおける典型的なエッジネットワークは、ＣＤＮエッジネットワークに限定される必要はない。これに限定されるものではないが、クラウドベースのシステムを含む新規なまたは既存の任意の適切なネットワークが使用されることができる。
【００１０】
コア１００ｃは、境界１０３に関連付けられた要素を指す。後述するように、コア１００ｃは、これらに限定されるものではないが、スループット、応答時間、セキュリティおよびデータの整合性を含む特定の性能要件を満たすトランザクションブロックチェーンの処理および記憶をともにサポートするノードの高性能ネットワークであることが好ましい。この文脈におけるノード（「コンピューティングノード」と呼ばれることもある）は、通常、コンピューティング、通信および記憶要素のクラスタである。より一般的には、本明細書において使用されるクラスタは、１つ以上の、そしておそらく多くのコンピューティング、通信および記憶要素を指す。一実施形態では、コア１００ｃは、オーバーレイネットワークノードを備えるが、コア１００ｃは、ＣＤＮとは異なり且つ（説明されるように）コア動作専用のノードのセットを備えることができるため、これは要件ではない。通常、コンピューティングノードは、ネットワークトランジットによって相互接続され、トポロジ的なボトルネックを軽減または排除する高度な相互接続性を有する。
【００１１】
高性能を促進するために、好ましくは、コアネットワークは、高品質、大容量、および多様な相互接続を使用して構築される。コアネットワークの特定の構成は、通常、ブロックチェーンに実装されているコンセンサスプロトコルの性質に少なくとも部分的に基づく実装に依存している。使用されるコンセンサスプロトコルに応じて、コアネットワーク全体のレイテンシが十分に低いネットワーク通信を確保するために、必要に応じて、コアネットワークのサイズ（および／またはその中の様々なコンピューティングノードの分布）が制限されることもできる。
【００１２】
非限定的な一実装では、ＣＤＮエッジ１００ｂは、（例えば、所与の地理における複数のネットワーク化されたデータセンタにわたって配置される）コアネットワーク１００ｃに関連付けられたグローバルベースのサービスをサポートする。
【００１３】
再び図１を参照すると、メッセージ１０４は、トランザクション要求をエッジサーバ（例えば、ＣＤＮエッジサーバなど）に送信するデバイス（例えば、エンドユーザデバイス、電子ウォレットなど）の例である。多数のそのようなメッセージ（そして本明細書で説明するようにコアネットワークに送信されてコアネットワークによって処理されるものである）は、世界中のサーバ、デバイス、およびウォレットから発信されると予想されることを理解されたい。メッセージは、永続的な接続または一時的な接続を介して送信されるだけでなく、それらのネットワークが本明細書で説明するシステム機能をネイティブにサポートするために構築されたレガシーまたはネットワークインフラストラクチャの目的の一部とすることができる新たなまたは既存のネットワークを介して送信されることができる。さらに、メッセージは、システムへの任意の単一の進入ポイントへの依存を減らすために１つ以上のエッジサーバに送信されることができる。
【００１４】
メッセージ１０５は、トランザクション（おそらくメッセージ１０４に含まれるものを含む）をコアノード１１０（ノード１１０のセットが描かれている）の適切な要素にルーティングするエッジ要素の例である。所与のトランザクションの場合、同じトランザクションまたは同じトランザクションのハッシュ（または他のダイジェスト）を他のコアノードの適切な要素にルーティングする複数のメッセージ１０５が存在することができる。全てのメッセージ１０５がトランザクションの完全な表現を含む必要はない。トランザクションのダイジェストが送信され、（１）コア要素にトランザクションの存在を認識させ、（２）完全なトランザクションを含むメッセージの整合性をチェックする堅牢な方法を提供することができる。これは、全てのコアノードの適切な要素に対する到来トランザクションメッセージの完全な、さらに効率的な伝播を可能にする。また、従来のゴシッププロトコルに関連するネットワーク負荷を大幅に削減し、さらに、例えば侵害されたエッジエレメントのトランザクションの検閲や破損からの保護を提供する。
【００１５】
メッセージ１０６は、トランザクションを他のコアノードの適切な要素にルーティングするコアノード要素の例である。コアノード要素がシステムのコアノードにわたるトランザクションまたはトランザクションダイジェストの伝播に参加するように、複数のメッセージ１０６が存在することができる。メッセージ１０６を受信するコアノードは、次に、他のメッセージ１０６を生成し、システムのコアノード全体にメッセージをさらに伝播することができる。
【００１６】
トポロジ認識データ伝播
任意のデータ伝播プロトコルが使用されることができるが、本明細書の１つの好ましいアプローチは、基盤となるネットワークトポロジへの伝播を形成することにより、従来のランダム化ピアツーピアゴシッププロトコルのコストとレイテンシを改善することである。協調して、メッセージ１０４、１０５、および１０６は、トポロジ的に最も近い要素から始まり、トポロジ的に少ないまたは最も近くない要素に到達する伝播の経路を含む。他のエッジ要素にメッセージ１０４を送信するデバイスは、通常、ネットワーク全体の様々な伝播経路をたどる。これは、異なる方向に伝播するメッセージ１０７、１０８、および１０９によって示されている。さらに、所与のデバイスから始まる伝播の経路は、一般に、適切な負荷バランシングとセキュリティを実現するために時間とともに変化することがある。
【００１７】
サービス発見および高性能マッピング
再び図１を参照すると、メッセージが送信される前に、メッセージを発信する各要素は、通常、受信要素のアドレスを発見しなければならない。アドレスは、インターネットプロトコル（ＩＰ）アドレス、またはいくつかの種類のネットワーク（例えば、ピアツーピアネットワークまたはオーバーレイネットワーク）のアドレス空間における他の名称もしくは番号とすることができる。他の要素のアドレスの発見は、様々な方法で実現されることができるが、一般に、一連の要素属性を発見サービスに送信することと、返信としてアドレス情報を受信することとを含む。好ましい一実施形態では、発見されるシステム要素の属性は、ドメイン名として符号化され、それにより、システムがＣＤＮの高性能ドメイン名ルックアップサービスを使用して必要なアドレス情報を返信することを可能にする。オーバーレイネットワークのマッピング技術を使用することは、いくつかの利点を提供する。それは、最大規模の展開さえも可能とするように大規模なドメイン名空間をサポートする。これは、例えば、エッジ要素が、トランザクションをコアノードだけでなく、トランザクションの識別子空間の関連部分を処理するコアノード内の特定の要素にさえもルーティングすることを可能にする。これと同じ種類の細粒度ルーティングは、コアノード要素間の通信のために行うことができ、特に、ＣＤＮ  ＤＮＳサービスを使用すると、セグメントのセット、パーティション、またはトランザクション情報の他のグループを処理する１つのノードの要素は、同じセグメント、パーティション、またはトランザクション情報の他のグループを処理する他のコアノードの要素にメッセージを直接送信することができる。トラフィックは、低レベルのネットワークルータ／スイッチの一般的なセットを通過することができるが、コアノードは、各トランザクションを個別に検査してルーティングする必要がないことから、これは有利である。この方法でＣＤＮネームサービスを使用すると、再構成もサポートする。特に、ノードの構成が変化した場合、例えば、トランザクション空間の一部の責任が１つのサーバから他のサーバに移行されることから、変化は、ネームサービスのマッピングシステムを介して迅速に且つ効率的に伝達される。ＣＤＮネームサービスを使用する他の利点は、一時停止の概念をサポートすることである。したがって、エッジ要素またはコアノード要素が正常に機能しなくなったり、動作不能になったりした場合、マッピングシステムは、問題から遠ざけるようにトラフィックをマッピングすることができる。ＣＤＮネームサービスを使用するさらなる利点は、高解像度の容量消費測定に基づいてトラフィックの負荷バランシングをサポートするためのそのようなシステムの能力である。このアプローチはまた、周辺のデバイスが最小限の基盤となるサービスおよびネットワークコンポーネントを共有するエッジ要素のアドレス情報を受信することができるように、ルートと領域の多様性もサポートする。ＣＤＮ  ＤＮＳサービスはまた、レイテンシの最適化もサポートする。例えば、コアノード要素は、いくつかの近接基準を満たす他のコアノード要素のアドレスを受信することができる。
【００１８】
代替の実施形態は、位置または方向認識マッピングを利用する。したがって、例えば、コアノード要素は、所望の位置もしくは方向にあるまたは方向性グラフを構成するノード要素に応答がアドレスを提供するように、位置または方向情報（地理的またはトポロジ方向のいずれか）によって符号化されたドメイン名を使用することができる。この機能は、マッピングシステムに固有とすることができるかまたはマッピングシステムに付属することができる。この方法でのトポロジ的マッピングは、低レイテンシのトポロジ認識データ伝播機構を提供する。
【００１９】
一般化
本明細書において使用される場合、ブロックは、一般に、トランザクションデータの任意の集約または関連付けを指す。特定のフォーマットは必要ない。ブロックチェーンは、暗号化を使用してリンクおよび保護されるブロックと呼ばれる継続的に拡大するレコードのリストである。ブロックチェーンの各ブロックは、通常、前のブロックにリンクする暗号化ハッシュとトランザクションデータとを含む。分散型台帳として使用する場合、ブロックチェーンは、通常、ノード間通信と新たなブロックの有効化のためのプロトコルに集合的に準拠するピアツーピアネットワークによって管理される。記録されると、任意の所与のブロックのデータは、ネットワークの大多数の結託を必要とする後続の全てのブロックを変更せずに遡及的に変更されることはできない。
【００２０】
本明細書の技術は、ブロックチェーンを使用してトランザクションデータを記録することができるが、本開示のシステムのアーキテクチャおよび関連するトランスポート機構は、トランザクションデータの他の編成にも適用することができるため、これは限定されるものではない。さらに、ブロックのチェーンまたはシーケンスにおけるようなブロックチェーンの概念は、これらに限定されるものではないが、ブロックツリー、ブロックグラフなどを含むブロックの任意の編成とすることができる。
【００２１】
マイニングは、ブロックチェーンにおける前のブロックを参照するヘッダを有する順序付けられたトランザクションのブロックを生成する行為である。公の（無許可の）ブロックチェーンコンセンサスシステムでは、マイニングは、一般に、競争として構成され、生成されたブロック（およびその祖先）がマイニング競争およびその後のコンセンサスプロセスに耐えた場合、それは確定され、永続的な記録の一部と見なされる。理想的なシステムでは、あるラウンドから次のラウンドへの（すなわち、あるブロックから次のブロックへの）マイニング責任は、参加者間でランダムに分散される。正式には、理想的なシステムでは、マイニングの決定は、予測可能ではなく、影響を与えることができず、検証可能である。しかしながら、現実世界の用途では、分散は、完全にランダムである必要はない。例えば、作業証明システムでは、マイニング能力が高いエンティティほど競争に勝つ確率が高いため、分散は、実際にはランダムではない。
【００２２】
セグメンテーション
従来のブロックチェーンの実装では、ブロックチェーンを単純なブロックのシーケンスとして扱う。そのようなアプローチは、通常、処理のボトルネックを形成し、ブロックチェーンをその集約形式で通信および記憶することによって、ブロックチェーン実装の達成可能な性能を厳しく制限する。
【００２３】
対照的に、本明細書で説明するアプローチは、その通信、処理および記憶が非常に高い性能でほとんど同期せずに同時に実行されることを可能にするように単一チェーンのデータを編成することにより、公知の技術から逸脱している。理解されるように、このデータ編成は、ブロックチェーンの一貫した論理的に完全なビューを維持しながら、各ノード内のトランザクション空間のセグメント化に依存することが好ましい。このアプローチはまた、連合またはシャーディングされたブロックチェーンのセットを構成する複数のチェーンのそれぞれにも適用されることができ、ブロックチェーン操作の性能を改善し、それにより、作業を減らし、オフチェーン（いわゆる「レイヤ２」）システムの性能を向上させる。
【００２４】
このアプローチでは、ネットワークにまたがるコンセンサスアルゴリズムが使用され、システムが正しい最終結果を生成することを確実にする。使用できる特定のコンセンサスアルゴリズムは、限定されるものではない。しかしながら、各ノード内の操作では、ノードの要素が正しく信頼できると想定している。ノードに障害が発生したり、攻撃者によって破壊された場合、システムは、ネットワークの残りの部分に依存して、サービスの整合性と可用性を維持するとともに、障害および侵入検出機能をサポートする。見てわかるように、この設計アーキテクチャは、システム要素がブロックチェーンデータ編成と整合するように、ノードの内部が、高性能、低レイテンシの通信ファブリックで実行される疎結合分散型システムとして編成されることを可能にする。結果として得られるアーキテクチャは、公知の技術と比較してはるかに高い性能の実装を提供する。
【００２５】
ブロックセグメンテーション
図２を参照すると、ブロック２００は、トランザクションｉｄ（Ｔｘｉ）によって、いくつかのセグメント２０２ａ−ｎ（ここで、ｎ＝１０００）と、ヘッダ（Ｈｄｒ）２０４とにセグメント化される。セグメント２０２およびヘッダ２０４は、ブロックチェーンのブロックを表すが、それらは、（多くの場合）個別に処理、送信および記憶されることができる。図２に１０００として示されるセグメント２０２の数は、数がより多くても少なくてもよく、時間とともにまたは動的に変化してもよい。好ましくは、十分な数のセグメントが選択されて、データのセグメンテーション（編成）を変更する必要なしに、基礎となるリソースの実質的な将来の成長を可能にするのに十分な大きさの空間を形成する。
【００２６】
この実施形態では、ブロックセグメンテーションは、通常、ネットワークの全てのノードによって共有される外部から見える属性である。見てわかるように、セグメントによってブロックデータを編成することにより、ブロック情報を交換するノードの性能と効率を大幅に向上させる。特に、本明細書のアプローチは、所与のセグメントの処理を担当するノードのコンポーネントが、所与のセグメントの処理を担当する他のノードのコンポーネントと直接通信することを可能にする。さらに、コンポーネントへのセグメントのマッピングは、ノード間で異なることができ、それにより、例えば、トランザクションデータの総量を処理する際にノードが異なる数のリソースを使用することを可能にすることによるなど、スケールアップ（またはスケールダウン）展開を可能にする。
【００２７】
代替の実施形態では、セグメンテーションの詳細は、厳密にノードの内部属性のままであってもよい。そのような実施形態では、ノードのコンポーネントへのセグメントのマッピングは、任意とすることができる。この代替手段は、ノードの構成の独立性を高めることができるが、一般に、ノード内のトランザクションレイヤルーティングのいくつかの形式を含む、ノード間のより詳細な（例えば、トランザクションごとの）データ交換を必要とする。
【００２８】
本明細書で使用される場合、セグメンテーションという用語は、暗黙的であれ明示的であれ、１つのノードの要素が他のノードの要素と相互作用して一度に複数のトランザクションのデータを交換することができるように、トランザクションデータの任意のグループ化、パーティション化、シャーディングなどを意味するために使用される。
【００２９】
ヘッダ２０４は、いくつかの必須要素、すなわち、前のブロックヘッダのハッシュ２１０、ブロックのコンテンツのマークルルート２０８、およびブロックのマイナーが実際に正当なマイナーであったことを示す証明２０６を含む。他の情報が含まれてもよい。
【００３０】
ブロックチェーンセグメンテーション
図３を参照すると、セグメント化されたブロックは、一時的に、セグメント化されたブロックチェーンを形成し、そのいくつかのブロックは保留されている（すなわち、まだ確定されていない）が、その他のブロックは確定されている（すなわち、ブロックチェーンに追加されている）。この例では、図示されている各マシン３００は、保留中のブロックと確定されたブロックとの双方をサポートするが、これは要件ではない。この分散型の編成は、このアプローチがブロックツリーまたはブロックグラフ構造などに関して、他のシナリオにも適用可能とすることができるため、ブロック「チェーン」に限定されるものではない。ブロックはまだ全体であるが、そのセグメントは、ブロックをモノリシックに処理するよりも効率的に処理されることから、このアプローチは有利である。図３に示されるように、様々な数のセグメントが異なるマシンリソースに割り当てられ、組み合わせられることができる。この種の編成は、仮想化およびコンテナ化された環境に特に適用可能であるが、いずれも恩恵を達成するために必要ではない。
【００３１】
図４を参照すると、システムリソースへのセグメントの割り当ては、例えば、アップグレード、メンテナンスおよび障害回復をサポートするために、時間とともに変化することができる。この場合、１つのマシン４０２が故障したかまたはオフラインになり、それが処理していたセグメントが他のマシンに移行される。このアプローチは、日常的および緊急の理由の双方で、仮想またはコンテナ化されたコンピューティング要素を移行するという確立された概念によく適合する。
【００３２】
セグメンテーションおよびノード間通信
図５を参照すると、セグメンテーションをノードの公開された属性にすることにより、ノード内の要素は、他のノードの要素と直接通信して、セグメントの細分性に関する情報を交換することができる。ノードへのセグメントのマッピングは、全てのノードにわたって同じである必要はない。
【００３３】
後述するように、好ましい実施形態では、システムのコンピューティングノードは、それぞれ、トランザクション有効化、ならびにブロックマイニングおよび検証などの複数の別個の機能またはモード（動作役割）を実行することができる（多くの場合に実行する）。実際、所与のコンピューティングノードは、多くの場合、同時に複数のそのようなモードで動作する。典型的な動作シナリオでは、特定のノードは、マイニングに使用されることができるが、通常、全てのコンピューティングノードは、何がマイニングされるかを検証する。
【００３４】
図５は、ブロックマイニングおよびブロック検証の編成が好ましくはセグメンテーションの存在下で達成される方法を示している。この例では、他のコンピューティングノード５００ｂ、５００ｃおよび５００ｄがブロックを検証する（本明細書では「検証」と呼ぶ）マシンを備える一方で、コンピューティングノード５００ａにおけるブロックの生成／マイニングのために使用される多数のマシンが存在すると想定している。図示のように、ブロック・マイニング・イベントは、ブロックのマイニングまたは生成を開始しようとしていることを通知する、マイニングノード５００ａによって（一般に、生成および有効化ブロックヘッダを処理する要素によって）ネットワークの他のノード（この例では、ノード５００ｂ、５００ｃおよび５００ｄ）に送信されるメッセージ５０２によって開始される。ノード５００ｂ、５００ｃおよび５００ｄの対応する要素は、このメッセージを受信し、マイニングノードの要素からのマイニングされたブロックデータを予期するようにそれらのノードの処理要素に通知する。同時に、５０３などの複数のメッセージシーケンスが、生成されたセグメントごとに、それらのセグメントを処理するマイニングノードの要素によって、リモート検証ノードの各セグメントを処理する要素に（それぞれ）送信される。
【００３５】
マイニングされたセグメントが終了すると、そのセグメントを担当する要素からブロックヘッダを担当する要素にメッセージ５０４が送信される。メッセージは、とりわけ、生成されたセグメントのマークルルートを含む。全てのメッセージ５０４が送受信されると、ブロックヘッダを担当する要素は、ブロック・マークル・ツリーの上部を作成し、ヘッダにマークルルートを保存する。そして、ヘッダの生成および検証の処理を担当する他のノードの要素にメッセージ５０５を送信する。有効化を実行する際、セグメントのメッセージ５０３を受信すると、セグメントを処理する受信ノード要素は、受信したトランザクションを有効化し、セグメントのマークルツリーを計算し、完了すると、ヘッダを処理するノードの要素にメッセージ５０６を送信する。その要素は、全てのセグメントのメッセージ５０６からブロックヘッダを再構築し、それをメッセージ５０５内のマイニングノードから受信したヘッダと比較する。ヘッダがマッチする場合、ブロックは受け入れられ、そのノードの事前に確定されたブロックのセットに追加される。
【００３６】
一実施形態では、トランザクションが検証に失敗するかまたは再構築されたヘッダがマイニングノードから送信されたヘッダとマッチしない場合、ブロックは拒否され、全ての変更が逆行されてノードから消去される。
【００３７】
他の実施形態では、有効化ノードは、同じセグメントについてメッセージ５０６の異なる値にマイニングするマシンにフラグを立てることができ、それにより、１つ以上の故障または悪意のあるマシンからシステムを保護する。
【００３８】
上述した処理を以下により詳細に説明する。
【００３９】
セグメンテーションおよびノード編成
図６Ａおよび図６Ｂは、システムのコンピューティングノードの動作を示し、図６Ａは、初期トランザクション有効化に関与するノード要素の動作を示し、図６Ｂは、ブロックマイニングおよび検証に関与するノード要素の動作を示している。
【００４０】
図６Ａおよび図６Ｂに示されるように、ノードは、トランザクション有効化ならびにブロックマイニングおよび検証に関連する個別にスケーラブルなタスクを実行するためにともに機能するいくつかの要素またはコンポーネントを含む。これらのコンポーネントは、ノードコーディネータ６０１、１組のセグメントハンドラ６０４、１組のトランザクションハンドラ６０９、１組のＵＴＸＯ（未使用トランザクション出力、Ｕｎｓｐｅｎｔ  Ｔｒａｎｓａｃｔｉｏｎ  Ｏｕｔｐｕｔ）ハンドラ６１４、および１組の署名検証部６１７を含む。セグメントハンドラおよびトランザクションハンドラは、別個のものとして示されているが（これが好ましい）、これらの機能は、後述するように双方の機能を実行する複合ハンドラに組み合わせられることができる。さらに、通常、各ハンドラには複数のインスタンスがあるが、その処理能力に応じて１つで十分な場合もある。
【００４１】
背景として、そして上記のように、好ましくは、各ノードは、システムにおける他の全てのノードと機能的に同等であり、各ノードは、システムの全負荷を担う。より一般的には、システムにおける全てのノードは、互いに等しいと見なされ、スタンドアロンの個々のノードは、信頼できると見なされない。さらに、互いに関して、ノードは、自律的に動作し、いずれのノードも、別のノードを制御することができない。
【００４２】
ノードは、一般に、以下のように動作する。トランザクション有効化においては、図６Ａを参照すると、通常、未処理のトランザクションがエッジマシン（または他のノード）から転送されるときに、６１２においてそれら未処理のトランザクションがノードにおいて継続的に受信され、最初にトランザクションハンドラ６０９によって処理される。トランザクションは、通常、（例えば、それに関連付けられたまたはそこで実行されているウォレットサービスによって）ウォレットまたはウォレットのセットに作成され、ウォレットは、通常、エッジマシンと相互作用し、周辺からトランザクション要求を受信するか、または６１２において受信されてトランザクションハンドラ６０９によって処理される場合、ブロックチェーントランザクションをコアに転送する。一般に、トランザクションハンドラによる未処理のトランザクションの処理が「有効化」であり、未処理のトランザクションがトランザクションハンドラによって「有効化」されると、トランザクションは、トランザクションハンドラのメモリプール（または「ｍｅｍプール」）に配置される。トランザクションハンドラによって有効であると見出されなかった未処理のトランザクションは拒否され、ハンドラのメモリプールに配置されない。
【００４３】
この目的のために、受信（すなわち、未処理のトランザクションがノードへ進入）すると、トランザクションハンドラ６０９は、通常、２つの基本的なアクションを実行する。図６Ａに示されるように、トランザクションハンドラ６０９は、（６１５において）ＵＴＸＯハンドラ６１４にクエリを出し、トランザクションへの入力が存在するかどうかを判定し、存在する場合、（６１６において）ＵＴＸＯハンドラ６１４によって管理されているＵＴＸＯ空間からそれらの入力を取得する。入力が存在しない場合、クエリを受信したＵＴＸＯハンドラは、トランザクションハンドラに通知し、トランザクションハンドラは、未処理のトランザクションを拒否する。ＵＴＸＯハンドラ６１４から入力を受信すると、トランザクションハンドラ６０９は、（６１８において）署名検証部６１７を参照して、各入力に関連付けられたロック解除スクリプト（デジタル署名）が有効かどうかを判定する。通常、各入力は、トランザクションのロック解除スクリプト（デジタル署名）を含むため、署名検証部によって実行される署名検証は、トランザクションによって使用される各ＵＴＸＯに関連付けられたロックスクリプト（公開鍵）と署名がマッチするかを確認する署名検証を含む。この動作の詳細については、以下に説明する。したがって、この確認は、暗号化動作を含み、計算集約的であり、したがって、署名検証部は、ＵＴＸＯハンドラから受信した有効な入力についてのみトランザクションハンドラによって参照されることが好ましい。署名検証部６１７は、６１９において入力（特に、入力署名）の有効性を確認する。トランザクションハンドラは、入力がトランザクションハンドラによって受信されると、ＵＴＸＯハンドラおよび署名検証部と同時に相互作用することができる。全ての入力署名が署名検証部６１７によって検証されると、未処理のトランザクションは、トランザクションハンドラによって「有効」または「有効化済み」と見なされ、６１５において、トランザクションハンドラ６０９は、新たなトランザクションに関連付けられたＵＴＸＯを担当するＵＴＸＯハンドラ６１４において新たなトランザクション出力（ＵＴＸＯ）を作成する。この動作では、作成要求は、１つのＵＴＸＯハンドラ、すなわち、トランザクションに関連付けられたトランザクションｉｄ空間の部分においてＵＴＸＯを処理する１つのハンドラにのみ送信される。また、図示されているように、（６１５において）作成呼び出しが送信され（クエリおよび署名検証が成功した後）、新たなトランザクション出力（ＵＴＸＯ）を開始する。
【００４４】
この方法で全ての入力が検証されると、未処理のトランザクションがトランザクションハンドラのメモリプールに配置される。そして、（有効化された）未処理のトランザクションは、６１３を介して全ての他のノードに出力（すなわち、伝播）され、未処理のトランザクションを受信する他の各ノードは、ここで説明したのと同様の一連の動作を実行する。これで未処理のトランザクションのローカル有効化動作を完了し、これは、結果としてトランザクションハンドラのメモリプールに入れられる。上述したプロセスは、未処理のトランザクションがノードにおいて（再度、エッジマシンまたは他のノードのいずれかから）受信されると継続する。
【００４５】
したがって、未処理のトランザクションを受信するトランザクションハンドラは、トランザクションへの入力が存在するかどうかを（ＵＴＸＯハンドラのクエリから）判定し、存在する場合は、それらの値とロックスクリプト（アドレスまたはウォレットアドレスと呼ばれることもある公開鍵を含む）が何であるかを判定する。それは、各入力のロック解除スクリプト（デジタル署名）を確認し、全ての署名が有効である場合、トランザクションハンドラは、未処理のトランザクションをその関連するメモリプールに収容（保存）する。このようにして、有効化済みの未処理のトランザクションは、各ハンドラのメモリプールに蓄積される。したがって、各トランザクションハンドラのメモリプールには、ブロックチェーンにおけるブロックセグメント（したがってブロック）に対してマイニングされる（すなわち、割り当てられる）ことを実質的に「待機している」トランザクションの集合（セット）が存在する。好ましくは、システムは、最小待機時間を強制して、新たなトランザクションが伝播してシステムの他のノードによって有効化されることを可能にする。
【００４６】
ここで、ノードコーディネータ６０１がブロックをブロックチェーンにマイニングするときだと判定したと想定する。ブロックをマイニングするという概念は、ブロックがシステムの所定のコンセンサスアルゴリズムにしたがって確定的であるとノードコーディネータが判断したときに生じる（以下により詳細に説明する）ものであり、実際にブロックをブロックチェーンに追加するという概念とは異なる。通常、「マイナー」として機能するノードのサブセットが常に存在する。本明細書の技術によれば、説明したように、ブロックをコンポジットとしてマイニングする代わりに、ブロックは、「セグメント」単位でマイニングされる。すなわち、ブロックの個々のセグメントは（同時か並列式であるかにかかわらず）別個に、具体的にはセグメントハンドラ６０４によってマイニングされる。
【００４７】
このために、ここで図６Ｂを参照すると、ノードコーディネータ６０１は、６０５を介してそれらのセグメントのマイニングを開始するように、その関連するセグメントハンドラ６０４に指示する。このコマンドは、通常、開始時刻、期間、および終了時刻を含む。ノードコーディネータはまた、マイニングされたブロックセグメントデータがマイニングノードのセグメントハンドラからシステムの他のノードのセグメントハンドラに直接（６０７を介して）送信されることを予期するように、（６０２を介して）システム内の他のノードコーディネータに通知する。セグメントハンドラのジョブは、トランザクションハンドラのメモリプールから有効化済みの未処理のトランザクションを取得および受信し、ブロックが確定されてブロックチェーンに追加される場合に、それらの有効化済みトランザクションをブロックセグメント（したがって、ブロック）で最終的に永続化するためにステージング（ｓｔａｇｅ）することである。代替の実施形態では、セグメントハンドラは、有効化済みのトランザクションのダイジェスト（ハッシュ）を取得および受信することができ、その場合、将来の永続化のためにトランザクションをステージングするジョブは、トランザクションハンドラにシフトする。
【００４８】
後述するように、好ましくは、ブロック内の各セグメントの実際の永続性（およびブロックチェーン自体でのブロックの永続性）は、セグメントハンドラがノードコーディネータによってブロックを確定するように指示されるまで発生しない。通常、これは限定されるものではないが、セグメントハンドラ６０４とトランザクションハンドラ６０９との間に１：１の関係がある。上記のように、これらの機能は、実装において組み合わせることができ、１：１の関係が示されているが、ノードは、任意数のいずれかの種類のハンドラによって構成されることができる。
【００４９】
マイニングを開始するコマンドを受信すると、６１０において、セグメントハンドラ６０４は、それぞれのメモリプール内のトランザクションをブロックに割り当て、未処理の各トランザクション（またはそのハッシュ）を返すように、（セグメントハンドラのためにセグメントを処理する）トランザクションハンドラに対して要求する。しかしながら、トランザクションハンドラは、そのメモリプールから要求元のセグメントハンドラに未処理のトランザクションを返す前に、マイニングされるブロックに関してトランザクション入力を最初に「使用する（ｓｐｅｎｄ）」（すなわち、実際のトランザクション値を入力に適用する）必要があり、それは（６２０を介して）使用要求をＵＴＸＯハンドラに送信することによって行われる。示されているように、ＵＴＸＯハンドラは、使用要求を適用し、それらのローカルデータを更新して、（６２１を介して）その結果（成功または失敗）をトランザクションハンドラに返す。
【００５０】
失敗の応答が発生した場合、トランザクションハンドラは、６２０を介してＵＴＸＯハンドラにトランザクションの全ての成功した使用動作を取り消すように指示する必要がある。この衝突検出およびロールバックは、ＵＴＸＯハンドラにおいてロック（または複数のＵＴＸＯハンドラを有するノードの場合には分散型ロック）を取得することを未然に防ぎ、したがって高コストを回避する楽観的同時並行処理制御機構を構成する。これは、ＵＴＸＯ使用動作の効率的な高スループットの低レイテンシ処理を可能にする。
【００５１】
全てのトランザクション入力の使用に成功すると、トランザクションハンドラは、６２０を介してＵＴＸＯハンドラにトランザクション出力（トランザクションのＵＴＸＯ）をブロックに割り当てるように指示し、６１１を介して未処理のトランザクション（および／またはそのダイジェスト）を要求元のセグメントハンドラに転送して戻す。
【００５２】
ここで説明したセグメントハンドラとトランザクションハンドラとの相互作用は、トランザクションハンドラが図６Ａに示され且つ上述したように未処理のトランザクションを受信して処理し続けるときに実行される。図６Ｂを再び参照すると、セグメントハンドラ６０４は、互いに対して並列に動作し、各セグメントハンドラは、関連するトランザクションハンドラに同様の要求を行う。したがって、通常、マイニングされるブロックの特定のセグメントに関連付けられたセグメントハンドラとトランザクションハンドラとのペアがある。トランザクションハンドラ６０９は、要求元のセグメントハンドラ６０４に、そのメモリプールからの未処理の各トランザクションを、未処理のトランザクションについて計算されたダイジェストとともに提供することによって応答する。セグメントハンドラ６０４は、各トランザクション（およびそのダイジェスト）を受信し、トランザクションを当該セグメントの論理シーケンスにシーケンス化する。各セグメントハンドラは、その関連付けられているトランザクションハンドラから受信する未処理のトランザクションに対しても同様に動作するため、ブロックのセグメントは、同時に（セグメントハンドラによって）マイニングされる。セグメントハンドラが未処理のトランザクションをシーケンス処理するときに、それは、（６０７を介して）トランザクションのダイジェストを取得し、それらを（好ましくはダイジェストのみ）他の全てのノードに出力する。ネットワークの他のノードは、セグメントハンドラから伝播されたダイジェストを使用して、ローカルにマイニングされているセグメントを有効化する。セグメントハンドラはまた、６０８を介して（他のノードの）他のセグメントハンドラからダイジェストを受信する。
【００５３】
セグメントハンドラ６０４は、セグメントが有効であると判定すると、その処理の結果、すなわち、セグメントに対して計算されたマークルツリーのルートを、６０６を介してノードコーディネータに返す。マイニング中、ノードコーディネータは、セグメントが有効であると信頼する。（同時に動作する）他のセグメントハンドラ６０４は、同様に機能し、それらのセグメントが同様に完了したことを示すそれらのマイニング結果を返す。
【００５４】
（全てのセグメントのマークルルートを使用して）全てのセグメントハンドラがノードコーディネータに応答すると、ノードコーディネータは、（全てのセグメントマークルルートから）全体的なブロック・マークル・ツリーを計算し、全体的なブロック・マークル・ルートおよびその他の情報を組み込んだブロックヘッダを生成する。次に、ノードコーディネータは、６０２を介してブロックヘッダを含むマイニング完了メッセージをネットワーク内の他のノードコーディネータに送信／伝播した後、それらの他のノードコーディネータは、ブロック・マークル・ルートを使用して、次に説明するようにそれらのブロック検証プロセスを完了する。
【００５５】
特に、ここで、ノードコーディネータ６０１が、６０３を介して、それ自体のブロックマイニング動作を開始する他のノードのノードコーディネータから送信されたマイニング開始メッセージを受信すると仮定する。これは、他のノードからマイニングおよび送信されたブロックデータのブロック検証プロセスを開始する。ブロック検証プロセスは、ブロックマイニングプロセスのバリエーションであるが、２つは異なり、多くの場合、ノードは、双方のプロセスに同時に関与する。実際、ノードは、通常、一度に１つのブロックのみをマイニングするが、同時に複数の到来ブロックを検証することもできる。マイニングと同様に、本明細書で説明する技術にしたがって、説明したように、ブロックをコンポジットとして検証する代わりに、好ましくは、ブロックは「セグメント」単位で検証される。すなわち、ブロックの個々のセグメントは（同時か並列式であるかにかかわらず）別個に、具体的にはセグメントハンドラ６０４によって検証される。
【００５６】
このために、６０５を介して、ノードコーディネータ６０１は、それらがマイニングプロセスにおいてブロックにトランザクションをマイニング／割り当てるため、６０８において他のノードからトランザクションハッシュを受信し、それに応答して、マイニングノードのセグメントハンドラによって行われた関連するトランザクションブロックの割り当てを検証するようにその関連するセグメントハンドラ６０４に指示する。好ましくは、セグメントデータの検証は、（データが受信されるのにともない）漸進的に、およびマイニングノード内のブロックセグメントへの追加のトランザクションのマイニング／割り当てと同時に実行される。
【００５７】
６０８を介して、トランザクションハッシュを受信すると、セグメントハンドラ６０４は、６１０を介してトランザクションハッシュをセグメントのトランザクションの処理を担当するトランザクションハンドラ６０９に転送する。セグメントハンドラからトランザクションハッシュを受信すると、トランザクションハンドラ６０９は、そのメモリプール内の関連するトランザクションレコードを調べる。
【００５８】
トランザクションがメモリプールから欠落している場合、トランザクションハンドラ６０９は、（６２２を介して）要求を送信し、（６２３を介して）好ましくはトランザクションのマイニングを担当するマイニングノードにおけるトランザクションハンドラから欠落した未処理のトランザクションを受信する。この要求／応答アクションは、優先度の高い方法で迅速に処理されることが好ましい。欠落した未処理のトランザクションを受信すると、トランザクションのブロック割り当ての検証を再開する前に、トランザクションハンドラ６０９は、トランザクションをメモリプールに追加する前に、上述したようにトランザクションを有効化する必要がある。
【００５９】
そのメモリプールからトランザクションを正常に取得すると、トランザクションハンドラは、上述したようにローカルにマイニングされているブロックにトランザクションを割り当てるのと同じように、検証されているブロックセグメントへのトランザクションの割り当てを実行する。しかしながら、割り当てが失敗した場合、セグメントおよびそれがその一部であるブロックの検証は失敗する（すなわち、ブロックは拒否される）。
【００６０】
その後、ノードコーディネータは、所定のコンセンサスアルゴリズムを適用して、ブロックを確定することを決定する。このため、ノードコーディネータは、ブロックヘッダを永続化し、ノードのセグメントハンドラにブロックを確定するように指示する。そうすることで、ノードコーディネータは、ブロック・マークル・ツリー全体を各セグメントハンドラに提供する。次に、各セグメントハンドラは、ブロックに関連付けられたセグメントのセットを永続化し、関連するトランザクションハンドラにブロックを確定するように指示する。そうすることで、セグメントハンドラは、各トランザクションハンドラがそのセグメントのセットに必要とするブロック全体のマークルツリーの一部を生成してトランザクションハンドラに提供する。次に、各トランザクションハンドラは、そのアクティブなメモリプールから確定されたトランザクションを削除し、特に、トランザクションハンドラがセグメントハンドラから受信したブロックの全体的なマークルツリーの一部から派生したマークル証明を使用して、確定されたトランザクションについてエッジ（またはウォレット）から受信した任意の未処理のトランザクション要求に応答する。そして、トランザクションハンドラは、トランザクションの処理に関してトランザクションハンドラが受信することができる後続のクエリをサポートするために使用されることができる場合、確定されたトランザクションをメモリに保存する。次に、トランザクションハンドラは、ブロックを確定するように全てのＵＴＸＯハンドラに指示する。それに応じて、ＵＴＸＯハンドラは、確定されたブロックにおいて使用されたＵＴＸＯを永続的に使用済みとしてマークし、確定されたブロックに割り当てられたＵＴＸＯを永続的に作成済みとしてマークする。したがって、このようにブロックヘッダおよびセグメントをディスクに永続化することは、ブロックチェーンにブロックを追加する。実装に応じて、ブロックチェーンにそのように書き込まれたブロックは、最終的なものと見なされることができる（したがって、実質的に不変である）。
【００６１】
要約すると、上述したノード処理では、トランザクションハンドラは、通常はエッジマシンから未処理のトランザクションを受信する。トランザクションハンドラが未処理のトランザクションを有効化（およびローカルメモリプールに配置）した後、トランザクションハンドラは、未処理のトランザクションを、その未処理のトランザクションの有効化も担当する他のノードの適切なトランザクションハンドラに伝播する。その後、ブロックセグメントのマイニングを開始するというノードコーディネータの決定に応じて、トランザクションハンドラは、そのメモリプールからブロックセグメントに未処理のトランザクションのセットをマイニングし（割り当て）、各セグメントを処理している要求元のセグメントハンドラにそれらの未処理のトランザクション（およびそれらの関連するダイジェスト）を送信する。セグメントハンドラは、受信したトランザクションをセグメントにシーケンス化し、その際、セグメントハンドラは、セグメントを構成するトランザクションのダイジェストのリストを、他のマイナーノードにおいてそれらのセグメントの処理を担当する他のセグメントハンドラに転送する。したがって、未処理のトランザクションは、全てのノードのトランザクションハンドラ全体に伝播するが、セグメントハンドラは、検証されることになるセグメントのトランザクションダイジェストのみを送信するのが好ましい。ブロックセグメントのマイニングおよび検証中に、トランザクションハンドラは、上述したように他のノードのセグメントハンドラと通信する、それらのローカルセグメントハンドラを参照する。したがって、異なるノードのトランザクションハンドラは、互いに通信して、（ＵＴＸＯおよび署名検証機能を使用して）それらの各メモリプールに有効化されたトランザクションを投入する。セグメントハンドラ（したがって、マイニングを処理するノードコーディネータ）は、互いに通信して、ブロックチェーンにセグメントを含むブロックを投入する。前述のように、トランザクションハンドラおよびセグメントハンドラは、別個のサービスである必要はない。
【００６２】
上述したように、ブロック検証は、ブロックマイニングと同様である。ただし、検証の場合は、セグメントハンドラがトランザクションハッシュをそのトランザクションハンドラに供給しており、そのトランザクションハンドラは「有効」（未処理のトランザクションに関して）または「無効」（受信したブロック全体に関して）の応答を示すが、後者の応答は、マイナーが誤ってまたは敵対的に行動している場合を除き発生してはならないことを除く。マークルツリーおよびルートを生成および処理する上述した技術は、トランザクションをそれらのブロックに結び付ける好ましい暗号化機構である。検証中、および完了時に、ノードコーディネータが全てのセグメントハンドラから結果を取得すると、コーディネータは、ブロック全体のマークルルートを再度計算するが、今回は、そのルートを、マイニングブロックコーディネータによって送信されたブロックヘッダに提供されるルートと比較する。それらがマッチしない場合、ブロックは、無効として破棄される。
【００６３】
本明細書で使用される用語は、限定を意図するものではない。本明細書において使用される場合、「有効化」という用語は、そのメモリプールに入れられる未処理のトランザクションを受信したときにトランザクションハンドラが実行する動作のために使用される。上記のように、トランザクションを有効化するために、トランザクションハンドラは、ＵＴＸＯハンドラにクエリを出して、参照されているＵＴＸＯの利用可能性を確認し、（入力の）署名を確認するために署名検証部と会話する。対照的に、「検証」という用語は、ノードコーディネータによって開始されたコンセンサスを同様に実行している他のノードから受信したブロックセグメントのコンテンツを検証する行為のために使用される。トランザクション有効化はまた、「ブロックセグメント検証」（コーディネータおよびセグメントハンドラが他のノードから受信したブロックセグメントデータに対して行う処理）との対比で、コーディネータが（ブロックセグメントを含む）ブロックに対してマイニング動作を開始したことに応答する、「初期トランザクション検証」と見なすこともできる。また、「マイニング」という用語は、「割り当て」と呼ばれることもあり、これは、トランザクションをブロックセグメントに割り当てまたは関連付けるようにセグメントハンドラによって指示されたときにトランザクションハンドラが実行すること、すなわち、セグメントハンドラによるブロックセグメントへのその組み込みに関するトランザクションのトランザクションハンドラによる検証を意味する。上記のように、これを達成するために、トランザクションハンドラは、そのＵＴＸＯハンドラと通信して、既存のＵＴＸＯを「使用」し、新たなＵＴＸＯをブロックセグメントに「割り当てる」。
【００６４】
また、「ハンドラ」の概念は、限定を意図するものではない。ハンドラは、本明細書では「コーディネータ」と呼ばれることがあり、ハンドラの基本的な動作または機能は、プロセス、プログラム、インスタンス、実行スレッド、プログラム命令セットなどとして実装することができる。
【００６５】
上記は好ましい動作を説明しているが、ハンドラがそのタスクを単数で処理する必要はない。したがって、セグメントハンドラは、ブロックを構成するセグメントの一部または全てを処理することができる。トランザクションハンドラは、特定の、または複数の（さらには全ての）セグメントに属するトランザクションを処理することができる。ＵＴＸＯハンドラは、ＵＴＸＯ空間内の一部または全てのパーティションを処理することができる。ここでの「パーティション」という用語は、セグメントから区別するために便宜上使用されているが、いずれの用語も限定とみなれるべきではない。
【００６６】
以下は、好ましい実装における上述したノードコンポーネントに関する追加の詳細を提供する。
【００６７】
ノードの調整（コーディネーション）
ノードコーディネータ６０１は、ネットワーク・コンセンサス・アルゴリズムに参加して、ノードがブロックをマイニングするかどうか、および他のどのノードからマイニングされたブロックデータを受信することを予期すべきかを決定する。ノードがブロックをマイニングする場合、ノードコーディネータ６０１は、メッセージを（６０２を介して）ネットワーク内の他のノードコーディネータに送信する。ノードコーディネータ６０１はまた、ブロックをマイニングしているノード内の他のノードコーディネータから（６０３を介して）メッセージを受信する。説明したように、ノードコーディネータ６０１は、（６０５を介して）ノードのセグメントハンドラ６０４に対してメッセージの形で、ブロックセグメントのマイニングを開始することと、他のいずれかのノードからマイニングされたブロックセグメントを受信して有効化するかを通知する。ノードのセグメントハンドラ６０４は、各ブロックセグメントを構成するトランザクションのマークルルートを（６０６を介して）メッセージの形でノードコーディネータ６０１に返す。
【００６８】
ノード調整の他の態様は、任意の所与の時点でネットワークにおいてアクティブになっている可能性がある１つ以上のチェーンブランチに対応するノードローカル表現を管理することである。通常、ブロックチェーンは、確定の時点までの単一のブロックシーケンスから構成される。確定は、多くの場合、チェーン内のいくつかの深いブロックに設定されるが、確定する内容とタイミングの決定は、ネットワーク全体のコンセンサスを管理するルールにしたがう。予め確定されるブロックチェーンの部分は、確定前に解決される可能性のある複数のブランチチェーンから構成される。上記のように、例えば、複数のノードが同時にマイニングする場合、それらは、いくつかの共通の祖先ブロックを有する複数のブランチにブロックチェーンをフォークする。ノードコーディネータ６０１は、アクティブなブランチを追跡し、ノードがマイニングしている場合、それらがマイニングしているブランチ、および各リモートマイナーがマイニングしているブランチを、セグメントハンドラ６０４に通知する責を担う。
【００６９】
セグメント処理
また説明されるように、セグメントハンドラ６０４は、ブロックセグメンテーション空間の一部を表すいくつかのブロックセグメントの生成および／または有効化を処理する。具体的には、セグメントハンドラは、（６０５を介して）メッセージの形でノードコーディネータ６０１によって指示されたようにブロックセグメントの生成を開始する。マイニングするとき、セグメントハンドラ６０４は、６０７を介して、マイニングされたブロックセグメントデータを、検証される他のノードのセグメントハンドラに送信する。セグメントハンドラ６０４は、（６０８を介して）メッセージの形でマイニングノードのセグメントハンドラからブロックセグメントデータを受信する。トランザクションのマイニングおよび有効化を実行するために、セグメントハンドラ６０４は、また前述したように、関連するトランザクションハンドラのセット６０９と相互作用する。
【００７０】
トランザクション処理
トランザクションハンドラ６０９は、メモリプールに追加されてネットワークに伝播されるトランザクションの有効化、マイニングされたブロックに含まれるトランザクションの生成、およびマイニングノードから受信したブロックの一部として含まれるトランザクションの検証を処理する。上記のように、トランザクションセグメンテーション空間の分布は、トランザクションハンドラ６０９とセグメントハンドラ６０４とで同じであってもよく、または異なっていてもよい。例えば、セグメントハンドラ機能によって必要とされる計算リソースは、ごく少数のそのようなハンドラが全てのブロックセグメントを処理するために使用される程度に十分に少なくてもよいのに対して、トランザクションハンドラ機能によって必要とされる計算リソースは、そのような各ハンドラが関連するセグメントハンドラ６０４よりも少ない数のセグメントのトランザクションを管理することが必要となる程度に十分多くなる可能性がある。
【００７１】
トランザクションハンドラ機能は、また前述したように、システムにおける他の重要な役割、すなわち、トランザクションアドミッション（「有効化」とも呼ばれる）および伝播を果たす。トランザクションハンドラ６０９は、エッジから直接的にまたはネットワーク内の他のトランザクションハンドラを介して間接的に（６１２を介して）メッセージの形でトランザクションを受信する。トランザクションハンドラ６０９は、受信した全てのトランザクションを有効化し、有効な場合、トランザクションを未処理のトランザクションのプール（そのメモリプール）に保存し、随意にトランザクションをメッセージの形でネットワーク内の他のノードに伝播する（６１３を介して）。このように、トランザクションハンドラ機能は、全てのノードが全ての到来トランザクションおよび関連する到来トランザクションダイジェストを適時に且つ効率的な方法で受信するように、トランザクションデータの伝播を編成する。
【００７２】
ＵＴＸＯの処理
好ましくは、ＵＴＸＯは、発信トランザクションのハッシュまたはダイジェストである識別子（ｔｘｉｄ）、および発信トランザクションにおける出力のインデックスによって識別される。ＵＴＸＯはまた、２つの他の情報部分（その識別には使用されない）、すなわち、値および「ロックスクリプト」を有する。一般に、ロックスクリプトは、指示のセットまたは単に出力に関連付けられた公開鍵である。公開鍵は、アドレスまたはウォレットアドレスと呼ばれることもある。ロックスクリプト（例えば、公開鍵）は、値とともにトランザクションの出力において伝達され、通常、ＵＴＸＯ識別情報およびその値とともにＵＴＸＯデータベースに記憶される。したがって、初期トランザクション有効化時にＵＴＸＯハンドラにクエリを出すと、値およびロックスクリプト（公開鍵）の双方を返す。ＵＴＸＯを新たなトランザクションへの入力として使用するために、新たなトランザクション（基本的にはその出力）は、使用されるＵＴＸＯの公開鍵と暗号的にマッチする秘密鍵によって署名される必要がある。この署名は、各トランザクション入力で提供され、一般に「ロック解除スクリプト」と呼ばれる。ロック解除スクリプトは、指示のセットまたは単にデジタル署名とすることができる。したがって、デジタル署名は、トランザクションの出力値を、値の受信者がおそらく対応する秘密鍵（後でロック解除スクリプトの作成に使用される）を有するロックスクリプト（公開鍵）にバインドする。署名検証部は、（ウォレットまたはその暗号化要素のみが秘密鍵を有するため）秘密鍵を有しない。署名検証部は、（ロックスクリプトからの）公開鍵および（ロック解除スクリプトからの）署名を受信し、署名検証部は、公開鍵に対して署名を検証し、それにより、マッチする秘密鍵によって署名が作成されたことを証明する。要約すると、所与のインデックスにおけるトランザクション出力は、ロックスクリプト（公開鍵）および値を有する。トランザクション入力は、発信元のｔｘｉｄ、インデックス、およびロック解除スクリプト（署名）を有する。
【００７３】
トランザクションを処理するために、上記のように、トランザクションハンドラは、（６１５および６２０を介して）メッセージによってＵＴＸＯハンドラ６１４のセットと相互作用し、各トランザクションに関連付けられた未使用のトランザクション出力（ＵＴＸＯ）を作成し、クエリを出し、使用し、および割り当てる。各ＵＴＸＯ動作はまた、（６２０を介して）メッセージの形の取り消し要求を用いて逆行することもできる。この可逆性は、トランザクションが全体として完了できなかった場合に、トランザクションハンドラ６０９が首尾よく完了することができたトランザクションの部分を取り消すことを可能にすることから、価値がある。同時並行性を可能にし且つ競合を防止するためにＵＴＸＯデータベースをロックする代わりに、ここでシステムは、競合の検出および部分的に完了したトランザクションのＵＴＸＯ動作の逆行に頼ることが好ましい。この文脈における競合は、これらに限定されるものではないが、（ポリシーが規定するところに応じて）それが存在するかまたは確定される前にＵＴＸＯを使用する試み、他のトランザクションによって既に使用されているＵＴＸＯの使用、またはトランザクションを不完全な状態にする任意の他のＵＴＸＯ動作の失敗を含む。
【００７４】
上記のように、各ＵＴＸＯは、有効化するためにトランザクションについて正常に実行される必要がある値およびロックスクリプトを有する。スクリプトは、他のトランザクションへの入力としてＵＴＸＯの使用をロックするために実行される必要がある指示のセットである。通常、スクリプトは、ＵＴＸＯを入力として使用するトランザクションに署名するために使用される必要がある秘密鍵に対応する公開鍵素材を含む。
【００７５】
累積するＵＴＸＯの数は大きくなる可能性があることから、ＵＴＸＯ空間はまた、ブロックがトランザクション識別子によってセグメント化されるのと同様の方法でトランザクション識別子によってパーティション化されることが好ましいが、パーティション化空間およびセグメンテーション空間は、独立してそれぞれのニーズに応じて分割されることが好ましい。ＵＴＸＯ処理は、ＵＴＸＯを生成するトランザクションハンドラによって実行されることができるが、ＵＴＸＯの処理は、以下の２つの理由のためにトランザクション処理から分離されることが好ましい：（１）リソース要求が異なるため、および（２）トランザクションハンドラ機能を分離することが、トランザクションおよびＵＴＸＯハンドラがより効率的に実行することを可能にするため。好ましくは、ＵＴＸＯ空間はまた、ノードの集約メモリおよび記憶リソースをより効率的に使用するためにパーティション化される。このセグメンテーションを適用することにより（すなわち、トランザクションセグメンテーション空間を介して）、高度にスケーラブルでタイミングが制約されたソリューションが提供される。
【００７６】
署名検証
図６Ａのブロック図の最後の要素は、署名検証部６１７のセットによって提供される署名検証機能である。上記のように、トランザクションは、トランザクションの入力に関連付けられた秘密鍵のセットによって署名されることが好ましい。ノードにおいて最も計算量の多いタスクは、トランザクションの署名を検証することである。そのため、重要な計算リソースは、好ましくは署名検証専用である。各署名検証部６１７は、署名検証負荷の一部をサポートするのに必要な計算リソースを利用することが好ましく、トランザクションハンドラ機能は、（６１８を介して）メッセージを使用して利用可能な署名検証部６１７のセット全体に署名検証負荷を分散させ、有効化されることになるデータを送信し、（６１９を介して）返信としてメッセージの形で肯定応答または否定応答を受信する。一実施形態では、これらの動作は、署名検証をいくつかの他の処理（例えば、トランザクション処理）と組み合わせることによって実行される。他の実施形態では、図示および説明されるように、より高いスケーラビリティを可能にするために、他の要素から分離した署名検証部６１７を有効にすることにより、処理要求に対応する。
【００７７】
ブロックの生成、送信、および検証のパイプライン化
図７を参照すると、従来のブロックチェーンベースのシステムは、ブロックの生成（マイニング）、送信、および検証をシリアル化する。そのようなシステムでは、マイナーによってブロックが生成され（７０１）、ブロックの生成が完了すると、ブロックは検証のために他のノードに送信され（７０２）、ノードがブロックの受信を完了すると、それらはブロックの検証を開始する（７０３）。そのようなシリアルベースの処理は、特に前述の動作文脈、すなわち、潜在的にグローバルベースのネットワークにわたってトランザクションメッセージが生成されている場合、非効率的であり、スケーリングしない。
【００７８】
例えば、１秒あたり数百万のリアルタイムトランザクションを処理することができるなど、高い性能要件を有するシステムを構築しようとする場合、そのような現在の実装アプローチは、完全に不十分である。このため、本明細書のアプローチでは（および上述したように）、これらの処理ステージは、同時並行性のためにパイプライン化される。したがって、本明細書の技術によれば、マイナーがブロックデータを生成する（７０４）一方で、以前に生成されたブロックデータは、検証のためにノードに送信される（７０５）。検証ノードは、完全なブロックを受信する前に、且つおそらくはマイナーがブロックのマイニングを完了するずっと前に、マイニングされたブロックデータを受信し、ブロックのトランザクションの検証を開始する（７０６）。
【００７９】
図５によれば、ブロックの生成、送信、および検証のパイプラインもまた、ブロックの各セグメント毎にインスタンス化され、したがって、ブロックセグメントが並列に動作されることを理解されたい。その結果、並列処理およびパイプライン処理を組み合わせることにより、同時並行性が向上する。
【００８０】
ブロック生成、送信、および有効化のストリーミング
図８を参照すると、パイプライン化されたブロックの生成、送信、および検証をサポートするために、ストリーミングされたブロックセグメントの生成、送信、および検証プロセスが、２つのノード、すなわち、マイナーノード８０１と検証ノード８０５との間で示されている。１つの検証ノード８０５が示されているが、上述したように、通常、ネットワーク内の全てのノードは、マイニングされたブロックを検証する。また説明したように、このプロセスはまた、通常、マイナーノード８０１によってマイニングされる他のブロックセグメントの同じプロセスと同時に実行される。上記のように、ネットワーク内で同時に動作する、複数のマイナーノード８０１と、複数のストリーミングされた生成、送信、および有効化プロセスが存在することができる。この例では、永続化のためにセグメントをステージングする責任は、前述のように、セグメントハンドラではなくトランザクションハンドラに関連付けられることに留意されたい。
【００８１】
生成
図８に示すように、プロセスは、マイニングノードコーディネータ８０２がネットワーク上のブロックをマイニングするための基準を満たしたときに開始される。一実施形態では、この基準は、それが満たすことをマイナーが証明することができる確率条件（例えば、ある閾値を下回る信頼できるあるいは検証可能な乱数）とすることができる。マイナー選択（リーダー選出）の任意の基準が適用可能である。ノードコーディネータ８０２は、メッセージ８０９を送信して、マイニングノードセグメントハンドラ８０３がブロックセグメントの生成を開始することを要求する。ノードコーディネータ８０２はまた、マイナーノードのセグメントハンドラ８０３からのマイニングされたブロックセグメントを予期するように有効化ノードのコーディネータ８０６に指示するメッセージ８１０を送信する。各マイニングセグメントハンドラ８０３は、トランザクションハンドラ８０４が各々に関連付けられて収集された未処理のトランザクションのプールからブロックへのトランザクションの割り当てを開始することを指示するメッセージ８１１を、関連するトランザクションハンドラ８０４に送信する。トランザクションハンドラ８０４は、（直接的にまたは他のノードのトランザクションハンドラを介して）エッジから受信した未処理のトランザクション（ブロックまたはその任意の祖先に対して以前に割り当てられていなかったトランザクション）を繰り返し検査する。トランザクション検証（上述したトランザクション有効化）のいくつかの態様は、トランザクションが最初に受信されたときに事前に実行されることができることを理解されたい。検証済みのトランザクション割り当てごとに、トランザクションハンドラ８０４は、（１）完全なトランザクションレコード８１３をブロックセグメント８３１に追加し、（２）ダイジェスト（例えば、ハッシュ）を含むメッセージ８１４をストリームの形でセグメントハンドラ８０３に送信する。
【００８２】
送信
セグメントハンドラ８０３は、メッセージのストリーム８１４から１つ以上のトランザクションダイジェストを収集し、メッセージのストリーム８１５の形でトランザクションダイジェストを、生成されたセグメントデータの有効化を担当する各有効化ノード８０５におけるセグメントハンドラ８０７に送信する。示されるように、メッセージのストリーム８１４におけるメッセージの数は、メッセージのストリーム８１５におけるメッセージの数とは異なることができるが、双方のストリームにおいて送信されるトランザクションダイジェストの総数は、通常同じである。
【００８３】
ノード８０５を有効化する際に、セグメントハンドラ８０７は、メッセージのストリーム８１５を受信し、トランザクションダイジェストを抽出し、１つ以上のメッセージ８１６をトランザクションハンドラ８０８に送信する。メッセージのストリーム８１５および８１６を構成するメッセージの数は、異なることができる。この実施形態では、送信されたメッセージ８１０、メッセージ８３３で終わるメッセージのストリーム８１５、およびメッセージ８２３は、ノード要素からノード要素に直接的にユニキャストまたはマルチキャストで送信され、他のノードの要素を介して間接的に伝播され、またはネットワーク要素を介してルーティングもしくは転送されることができる。データは、集約または分離されて移動することができる。
【００８４】
検証
検証トランザクションハンドラ８０８は、トランザクションダイジェストを受信し、（他のノードのトランザクションコーディネータを介して直接）エッジから受信した未処理のトランザクションを検索する。検索が成功すると、それは、トランザクションの割り当てを検証する。検証が成功すると、トランザクションハンドラ８０８は、（１）メッセージ８１８において検証確認をセグメントハンドラ８０７に送信し、（２）完全なトランザクションレコード８１７をブロックセグメント８３２に追加する。
【００８５】
ストリーム処理の終了
一実施形態では、ストリーミング生成、送信、および検証プロセスは、マイニングノードコーディネータ８０２が生成停止メッセージ８１９を全てのマイニングセグメントハンドラ８０３に送信すると終了する。このシナリオでは、ノードは、非同期で動作し、実行ラウンド間に明示的な時間境界がないものと仮定される。他の実施形態では、ノードは、同期して動作することができ、プロセスは、特定の時間に到達したときに終了する。
【００８６】
プロセスが終了すると、各セグメントハンドラ８０３は、生成停止メッセージ８２０をその関連するトランザクションハンドラ８０４に送信する。各トランザクションハンドラ８０４はまだ進行中の任意のトランザクション割り当てを終了または中止し、セグメントハンドラ８０３に対するメッセージ８２１の形で、ブロックセグメントに含まれる任意の残りの割り当てられたトランザクションとともにマイニングを停止したことを認める。
【００８７】
セグメントハンドラ８０３は、任意の未送信のトランザクションハッシュとストリームの終わりの指示とをメッセージ８３３の形で有効化ノードのセグメントハンドラ８０７に送信する。各セグメントハンドラ８０３は、各セグメントのトランザクションハッシュからマークルツリーを計算し、メッセージ８２２においてノードコーディネータ８０２にマークルツリールート（マークルルートまたはＭＲ）を送信する。ノードコーディネータ８０２は、ブロックの全てのセグメントのマークルルートを受信すると、セグメントのマークルルートからブロック全体のマークルツリーの上部を計算し、前のブロックヘッダのハッシュ、そのマイニング証明、およびブロック全体のマークルルート、ならびにその他のデータから構成されるブロックヘッダを生成する。失敗すると、ノードコーディネータ８０２はパージメッセージ８２７を各セグメントハンドラ８０３に送信し、次に、各セグメントハンドラがパージメッセージ８２８をその関連するトランザクションハンドラ８０４に送信し、次いでトランザクションハンドラがブロックセグメントを破棄する。成功すると、ノードコーディネータ８０２は、メッセージ８２３の形でブロックヘッダを全ての有効化ノードコーディネータ８０６に送信する。
【００８８】
各検証ノードのセグメントハンドラ８０７がメッセージ８３３の形でストリームの終わりの指示を受信すると、それらは、次に、それらの関連するトランザクションハンドラ８０８に、ストリームの終わりの検証を指示するメッセージ８３４を送信する。各セグメントハンドラ８０７は、その関連するトランザクションコーディネータ８０８から全ての未処理のトランザクション割り当て検証の確認を受信すると、そのセグメントのマークルツリーを計算し、メッセージ８２４における各セグメントのマークルルートを検証ノードコーディネータ８０６に送信する。検証ノードコーディネータが各セグメントのマークルルートを受信すると、ブロックヘッダを生成し、生成されたブロックヘッダがメッセージ８２３の形で受信したブロックヘッダとマッチすることを検証する。ブロックヘッダがマッチしない場合には、パージメッセージ８２５を各有効化セグメントハンドラ８０７に送信し、次に、各検証セグメントハンドラがパージメッセージ８２６をその関連するトランザクションハンドラ８０８に送信し、次いでトランザクションハンドラがブロックセグメントを破棄する。
【００８９】
ブロックの確定
上述のように、上述したシステムでは、ブロックは、それが確定されるまで永続化されていない。好ましくは、ブロックは、ノードコーディネータが規定されたコンセンサスアルゴリズムに準拠して確定されるべきだと結論付けるまでは、確定されない。対照的に、好ましくはマイニングの終わりでは、ブロックは永続化されていない。むしろ、マイニング後、ブロックは、（コンセンサスアルゴリズムにしたがって）確定されるまで、またはコンセンサスアルゴリズムの適用に耐えられなかったことから破棄（パージ）されるまで、追跡されるだけである。
【００９０】
本開示の技術は、重要な利点を提供する。特に、このアプローチは、ブロックセグメンテーションおよび他の上述した特徴（例えば、トポロジ認識データ伝播、非ブロッキングアーキテクチャ、楽観的同時並行制御、パーティション化、マルチキャストおよびその他の特徴）と組み合わせて、高品質、低レイテンシ、高度に相互接続されたコアネットワーク（メッシュ）を活用することにより、中央のいかなるトランザクションのルーティングまたはスイッチング（例えば、大量のトランザクションのルートを占める必要があるレイヤ７スイッチ）も用いることなく、計算効率の高いトランザクション処理システムを提供する。好ましくは、アーキテクチャは、グローバルＣＤＮネットワークと組み合わせて使用され、グローバルな範囲を提供し、このアプローチは、コアネットワークにおけるコンピューティング要素を発見して相互作用するために、ＣＤＮマッピング技術が（例えば、クライアントおよび他のトランザクションサービスにより）便利に活用されることを有利に可能にする。
【００９１】
同時トランザクション処理
上述した高性能分散型記録システムの設計は、ブロックのセグメント化、および未使用トランザクション出力（ＵＴＸＯ）データ構造のパーティション化の概念を導入する。説明したように、結果として得られるデータ編成は、同期を減らしつつ同時処理の増加を促進し、それにより、より高いトランザクションスループットおよびより短いトランザクション処理時間を有するシステムをもたらす。
【００９２】
以下のセクションでは、同時処理構造を前提として、安全で性能の高いトランザクション処理を実現する方法について説明する。特に、システムは、例えばＵＴＸＯを２回以上使用しようとする、誤ったまたは敵対的な行為に対して弾力性がある必要がある。これは、例えば、ウォレットの２つのインスタンスが、現在ウォレットに関連付けられているＵＴＸＯを同時に使用しようとした場合に発生する可能性がある。これは、意図的であることも、意図的ではないこともある。見てわかるように、以下の設計はまた、好ましくはノードのより広いネットワークに依存することによって、コンポーネントが故障した場合にも対処する。見てわかるように、本明細書の技術は、１つ以上の動作シナリオ、すなわち、（ａ）基盤となるコンポーネントが正しく動作している場合、（ｂ）壊れたコンポーネントが正しく動作しているように見えるように、基盤となるコンポーネントに冗長性がある場合、および／または（ｃ）基盤となるコンポーネントにある冗長性が影響を受ける関連システム要素（すなわち、トランザクションハンドラおよびＵＴＸＯハンドラ）によって明示的に管理されている場合において、同時処理を安全に行うことを容易にする。
【００９３】
図１１を参照し、上述した分散型アーキテクチャを背景にして、スイッチ１１０３などのネットワーク要素から構成される通信ネットワークを介していくつか（Ｋ）のＵＴＸＯハンドラ１１０２と通信するいくつか（Ｎ）のトランザクションハンドラ１１０１を備えた一般的な構成が示されている。上記で詳細に説明したように、トランザクションハンドラ１１０１は、セグメント化されたトランザクション空間内のセグメントのセットのトランザクションを処理し、ＵＴＸＯハンドラ１１０２は、パーティション化されたＵＴＸＯ空間内のトランザクションに関連付けられた未使用トランザクション出力（ＵＴＸＯ）を処理する。この文脈におけるセグメント化（セグメンテーション）およびパーティション化（パーティショニング）は、同様のこと、すなわち、空間の諸部分が別個に処理されることができるように空間を分割することを意味する。便宜上、これらの異なる用語を用いるのは、これらの空間が独立した方法でセットアップされることができることを強調するためである（ただし、これは、以下で説明するように必須ではない）。図１１に示されるように、例えば、トランザクションハンドラ１１０１は、入力ＵＴＸＯ１１０６と出力ＵＴＸＯ１１０７およびＵＴＸＯ１１０８から成るトランザクション１１０５を有効化している。この単に代表的なものである例では、ＵＴＸＯ１１０６はＵＴＸＯハンドラ１１０２によって処理される一方、ＵＴＸＯ１１０７およびＵＴＸＯ１１０８は異なるＵＴＸＯハンドラ１１０４によって処理される。
【００９４】
一般化
上記のように、通常、トランザクションセグメンテーションおよびＵＴＸＯパーティショニングの空間は異なる。代替の実施形態では、トランザクションセグメンテーション空間およびＵＴＸＯパーティショニング空間は、同じとすることができ、その場合、通常、ＵＴＸＯ処理はトランザクション処理に結合（フォールディング）される。例えば、このアプローチでは、特定のトランザクションハンドラは、一般に、他のトランザクションハンドラと通信して、当該特定のトランザクションハンドラが処理しないトランザクションセグメンテーション空間の部分に関連付けられたＵＴＸＯを使用する。
【００９５】
図１２を参照すると、図１１の使用例に関して、例示的なトランザクションハンドラおよびＵＴＸＯハンドラのダイアログが示されている。特に、描かれているように、トランザクションハンドラ１２０１は、ＵＴＸＯハンドラ１２０２およびＵＴＸＯハンドラ１２０３と通信する。この例では、トランザクションハンドラ１２０１は、（１２０４において）ＵＴＸＯハンドラ１２０２がＵＴＸＯ０を使用することを要求し、（１２０５および１２０６において）ＵＴＸＯハンドラ１２０３がＵＴＸＯ１およびＵＴＸＯ２を作成することを要求する。完了すると、ＵＴＸＯハンドラ１２０２は、（１２０７において）使用済みメッセージを返す。同様に、ＵＸＸハンドラ１２０３は、作成されたＵＴＸＯを（１２０８および１２０９において）返す。最適化として、要求１２０５および１２０６、ならびに応答１２０８および１２０９は、それぞれの方法で単一のメッセージに集約できることを理解されたい。トランザクションハンドラ１２０１は、どのＵＴＸＯパーティション化方式が使用されるかに基づいて、各場合においてどのＵＴＸＯハンドラを使用するかを認識している。例えば、ＵＴＸＯは、ＵＴＸＯトランザクションＩＤ（ＵＴＸＯを作成したトランザクションのハッシュ）の一部に基づいてＵＴＸＯパーティションにマッピング可能であり、ＵＴＸＯパーティションは、システムを駆動するメタデータに基づいてＵＴＸＯハンドラにマッピング可能である。
【００９６】
１つのＵＴＸＯを使用して結果として２つを作成することは、一般的なケースである（例えば、一方で請求書の支払いをし、他方でお釣りを収集する）が、本明細書の同時トランザクション処理設計における入力および出力の数に困難な限定はない。また、トランザクションの多くの入力が１つの出力を生成する場合や１つの入力が多くの出力を生成する場合、更にはマッピングが多対多の場合があることが想定される。
【００９７】
再び図１２を参照すると、トランザクションの入力および出力は、順次または同時に処理することができる。図１２は、それらが同時に処理されていることを示しており、一般に、ブロック生成および検証のために割り当てられた時間内で順次処理するには入力または出力が多すぎるいくつかのトランザクションが存在する。
【００９８】
衝突検出およびトランザクションの逆行
上述した同時処理を容易にするために複数のＵＴＸＯハンドラを使用することは必須ではない。実際、例えば、トランザクションの１つ以上の部分が失敗する一方で、１つ以上の他の部分が成功した場合、または２つ以上のトランザクションハンドラがもう１つのＵＴＸＯの使用によって衝突した場合などの特定の状況があり得て、その場合、このアプローチは、必ずしも最適ではない。以下のセクションは、これらの問題に対処し、図１３は、トランザクションが部分的に失敗するシナリオを示し、図１４は、トランザクションハンドラの衝突シナリオを示している。
【００９９】
図１３は、図１２のシナリオにおけるトランザクションハンドラとＵＴＸＯハンドラとの間の例示的な失敗例ダイアログを示している。ここでは、トランザクションハンドラ１３０１と、２つのＵＴＸＯハンドラ１３０２および１３０３がある。失敗の場合のダイアログは、図１２の場合と同様に（ステップ１３０４、１３０５および１３０６によって）開始するが、この場合（図１２とは異なり）、１つ以上の要求が失敗した。特に、ＵＴＸＯ０を使用する要求１３０４は失敗し、理由が応答１３０７の形で返される。例えば、ＵＴＸＯが見つからなかったか、または既に使用済みであることが知られている、という理由である。また、ＵＴＸＯ２を作成する要求１３０６は、いくつかのシステムの内部的な理由（リソースの枯渇または適時な態様での応答の失敗）のために失敗し、応答１３０９がその失敗を示している。しかしながら、ＵＴＸＯ１を作成する要求１３０５は、ＵＴＸＯが首尾よく作成されたことを示す通常の応答１３０８を返したことに留意されたい。トランザクションの成功が部分的であった、換言すれば、トランザクションが失敗したのにＵＴＸＯが作成されたことから、このダイアログの結果は影響を受けるハンドラにとって無効な状態である。
【０１００】
上記のように、図１４は、別の失敗ケースシナリオを示しており、このシナリオでは、第１のトランザクションハンドラ１４０１が要求１４０５ではＵＴＸＯ０を使用しようとし、且つ要求１４０７ではＵＴＸＯ１を使用しようとするが、ほぼ同時に、第２のトランザクションハンドラ１４０２が要求１４０６では同じＵＴＸＯ１を使用しようとし、且つ要求１４０８ではＵＴＸＯ０を使用しようとしている。そのような同時アクションの結果は、関連するトランザクションの一方または双方の部分的な成功となり得る。前の例と同様に、部分的な成功は、影響を受けるハンドラの状態を無効にする。これは、古典的な競合状態の失敗である。
【０１０１】
従来のトランザクションデータベースでは、上記失敗シナリオの双方において実行ロック（相互排除）が使用され、様々なコンポーネント動作が全て成功するかまたは全て失敗するかを確実にする。通常、この相互排除は、トランザクションプリミティブとして表現されるため、データベースサーバによって実行されることができる。しかしながら、この従来のアプローチの問題は、このロックが非常に高価であり、特に動作が分散されている場合に、非常に変動する応答時間を生み出すということである。オブジェクトのバージョン管理をサポートする非ＳＱＬデータベースであっても、失敗ケースに対処することができない。特に、後者のアプローチは、その予期される値を有しない場合にオブジェクトが更新されないように保護するが、そのような複数のオブジェクトにまたがる競合状態からは保護しない。
【０１０２】
この問題に対処するために、本明細書の同時処理の設計は、ＵＴＸＯの固有の特性を利用する。すなわち、それらは存在するかまたは存在しないかのいずれかである。（ＵＴＸＯが存在したが使用済みの場合、定義により、それはもはや存在しない）。この目的のために、好ましくは、必要な場合に動作を取り消すことができるように、各動作をトランザクションハンドラが提供するハンドルによってタグ付けすることが要求されるように設計する。そして、ある期間にわたって固有のハンドルを使用するかどうかは、トランザクションハンドラが共同で決定する。期間は、好ましくはシステムの性能パラメータに基づいて設定可能である。別の好ましい態様では、同じブロックにおいて作成されたＵＴＸＯ、または確定される前のＵＴＸＯの使用を禁止するという１つ以上のポリシーが適用される。
【０１０３】
ＵＸＴＯハンドラは、様々なコンピューティングノードに配置される。コンピューティングノード内で、ＵＸＴＯデータは、ＵＸＴＯハンドラと関連付けてメモリまたはその他のデータ記憶装置に記憶される。したがって、説明したように、本開示の技術は、ロックのない分散型ＵＴＸＯデータベースを提供する。
【０１０４】
図１５を参照すると、この動作は、図１４に示されるのと同じシナリオを使用して説明される。この実施形態では、図１４とは対照的に、ここでは、各動作に与えられる、トランザクションハンドラが提供するハンドルがある。したがって、第１のトランザクションハンドラ１５０１が要求１５０５においてＵＴＸＯ０を、そして要求１５０７においてＵＴＸＯ１を使用しようとすると、示されるように、トランザクションハンドラが提供するハンドル、例えば１１、１２をそれぞれに関連付ける。同様に、第２のトランザクションハンドラ１５０２が要求１５０６においてＵＴＸＯ０を、そして要求１５０８においてＵＴＸＯ１を使用しようとすると、トランザクションハンドラが提供するハンドル、例えば２１、２２をそれぞれに関連付ける。そして、トランザクションの一部が失敗すると、トランザクションハンドラは、関連付けられたハンドルを使用して、さもなければ成功した可能性のある全ての動作を取り消す。この例のシナリオでは、第１のトランザクションハンドラ１５０１がＵＴＸＯ１の使用に失敗したことを示す応答１５１０を受信した後、ハンドラｈ＝１１を用いて取り消し要求１５１２を発行し、さもなければ成功した可能性のある要求１５０５の動作を取り消す。同様に、第２のトランザクションハンドラ１５０２は、ｈ＝２１を用いて取り消し要求１５１５を発行して、要求１５０６の効果を取り消す。取り消し要求は、冪等であることに留意されたい。
【０１０５】
示されていないが、ＵＴＸＯハンドラによって返されたハンドル（すなわち、サーバ側のハンドル）を使用して同様の機構を構築することができる。この後者のアプローチは、要求のタイムアウト（この場合、サーバ側のハンドルが利用可能でない）のためにハンドラの状態を無効にすることが許容される限り機能する。トランザクションハンドラが提供するハンドル（すなわち、クライアント側のハンドル）を使用すると、タイムアウトした要求の影響さえも取り消すことができる。
【０１０６】
したがって、一時的なネットワーク遅延の場合、上述した機構は、影響を受けるハンドラの状態を再構築する必要がなくなる。
【０１０７】
したがって、説明した一般的な戦略は、ＵＴＸＯの使用における衝突を検出し、影響を受けたトランザクションを安全に逆行（バックアウトまたはバックオフ）することである。エラーによってトランザクションが拒否されなければならない場合もあれば、トランザクションが将来再試行される場合もある。後者の例は、ウォレットがＵＴＸＯを利用可能になる前に使用する場合である。
【０１０８】
上述した衝突検出および取り消し機構は、パーティション化されて同時に処理されるＵＴＸＯデータ全体で一貫性を実現する際に、楽観的同時並行制御を提供する。また、上述したように、好ましくは、システムは、前のブロックにマイニングされた後でのみＵＴＸＯの使用を可能にするというポリシーを実装する。このアプローチの結果として、ブロックセグメントの処理を順序付けて同期する必要はない（ただし、順序は、マークルツリーの作成に関して依然として重要である）。
【０１０９】
使用例
上記は、例えば（これに限定されるものではないが）決済ネットワークにおいて使用するための高性能コア分散型台帳およびトランザクションファブリックについて説明している。トランザクションは、ソースの値を宛先に移動するプリミティブに限定されず、むしろ、値または情報の変形、変換または転送を伴う任意の処理に限定される。性能コアは、限定されるものではないが、金融システムへの高性能トランザクション処理を含む無数の使用例をサポートするための基盤を提供する。
【０１１０】
本明細書において使用される場合、処理時間は、動作要求（例えば、金融動作要求）が受信されてから応答が利用可能になるまでの経過時間として定義される。特定の動作は、台帳において複数のトランザクションを必要とすることができる。必要な全てのトランザクションが台帳に安全に記憶され、関連する全てのビジネスロジックが実行された場合、動作は完全に処理されたと見なされる。好ましくは、処理時間は、それよりも短くない場合（例えば、サブ秒）、数秒程度である。この方法で処理時間を維持することに加えて、コアネットワークは、大量の動作をサポートする。動作スループットは、コアネットワークによって動作が処理される速度として定義される。これは限定されるものではないが、望ましいスループットは、１秒あたり最大１０６（以上）の動作とすることができる。
【０１１１】
一実施形態では、上述したアーキテクチャは、分散型台帳、すなわち、金融メッセージ台帳を提供する。台帳は、前述のブロックチェーン技術によって保護されたトランザクションの不滅のログを提供する。この文脈において使用される場合、ネットワークは、取得者（ＡＣＱ）および／または発行者（ＩＳＳ）への要求およびそれらからの応答を転送する既存の金融取引システムとインターフェース接続する機能を含む。代替の使用例は、管理値台帳であり、これは、管理された信用枠（または借方）に対するトランザクションの処理を可能にする。この使用例は、ＡＣＱ／ＩＳＳが、ＡＣＱ／ＩＳＳに連絡することなく後で貸方に記入／借方に記入されるネットワーク上のアカウント残高をプロビジョニングすることを可能にする。管理されたクレジットラインを超えるトランザクションは、ＡＣＱ／ＩＳＳにクエリを送信して承認を要求するためのフォールバックをトリガすることができる。典型的な使用では、トランザクションフローは、以下のとおりである。メッセージは、サイズが約１ＫＢと仮定される。そのメッセージは、エッジによって受信され、コアブロックチェーンネットワークにわたって（そこから）配信される。トランザクションが確定した後（およびブロックチェーン受信が受信されると）、エッジから応答が送信される。全体として、最大往復時間は、好ましくは２秒以下のオーダーである。さらに、決済ネットワークは、処理された全てのトランザクションについて追加の１ＫＢメッセージが決済のために決済ネットワークから送信される１日の終わりのバッチ決済プロセスを処理することができる。これらのバッチ処理されたトランザクションは、数時間以内に処理されてログに記録されることが予期される。
【０１１２】
トランザクションを高速且つ低レイテンシで処理する必要がある任意の他の使用例は、このアーキテクチャから恩恵を受けることができる。ロイヤルティポイントの管理は、非金銭的用途の１つの非限定的な例である。
【０１１３】
本明細書のアーキテクチャもまた非常に安全である。暗号化、認証、デジタル署名およびその他の技術が使用され、顧客のプライバシおよびデータの整合性を保証する。
【０１１４】
本明細書の技術は、データセキュリティを全て犠牲にすることなく、（処理されたトランザクションの数に関して）高性能および非常に低いレイテンシを示すグローバルな記録システムを提供する。
【０１１５】
本明細書の管理対象ネットワークは、非常に安全な許可ネットワークである。したがって、トランザクションの収集およびブロックの構築時間は、ネットワーク全体にブロックを伝播するのにかかる時間近くまで低減される。本明細書のアプローチは、ネットワークのレイテンシがインターネット上の任意のリモート位置間で一般に１秒未満であるという事実を利用しており、さらに、これらのレイテンシは、前述した方法で高度に分散されたエッジ周辺および分散性の低いコアを使用することによってさらに短縮される。
【０１１６】
説明されているアーキテクチャは、高性能であり、既知のブロックチェーンネットワーク環境に存在する多くの問題、すなわち、ネットワークレイテンシ、ネットワーク使用率、確認深度、クロックスキュー、トポロジ的ボトルネックおよびその他の要因を解消する。ソリューションを容易にするために、上記のように、コアネットワーク自体は、良好な地理的およびトポロジ的近接性を有することが好ましい。コンセンサスプロトコル（ブロックチェーンネットワークにおいて使用されるプロトコルなど）は、大容量のメッセージングに依存することが多いため、これは望ましいことである。これは、ブロックの伝播時間がシステムの応答時間要件に対して適時に留まることを保証するため、好ましくは、使用されるコンセンサスプロトコルに応じて、コアネットワークは、低いネットワークレイテンシおよび高い相互接続性を有する。オーバーレイの安全なエッジネットワークを活用して、非常に安全で高性能な完全にグローバルな決済ネットワークを確保します。
【０１１７】
ブロックチェーンシステムは、確認の概念を含む。トランザクションが確認され、ブロックチェーンのブロックに追加されると、１つの確認があると見なされる。ブロックチェーンに追加される後続の各ブロックは、そのトランザクションの確認レベルを上げる。トランザクションの確認が多いほど、トランザクションをブロックチェーンから削除することが困難になる。ほとんどのブロックチェーンシステムは、トランザクションが確定されて永続的であると見なされるまで、特定の数の確認を待機する規則を採用しており、これは、「確認深度」と呼ばれる。好ましくは、本明細書のソリューションは、構成可能または可変の確認深度を利用して、トランザクションの回復力要件をサポートする。
【０１１８】
コア内のコンピューティングノードは、好ましくはタイムサーバを使用して時間同期される。
【０１１９】
コアネットワークは、非ブロッキングフルメッシュ相互接続トポロジとして構成されることができる。１つの好ましいアプローチは、コアネットワークを高回復力の部分メッシュ相互接続トポロジとして実装する。しかしながら、（ネットワークの停止および攻撃に対する）回復力とブロック伝播時間のバランスをとるために、前述したように、効率的なトポロジ認識データ伝播プロトコルが実装されることが好ましい。プロトコルは、編成がネットワークレイヤにおいて行われるマルチキャストプロトコルに基づいて構築されることが好ましい。
【０１２０】
本明細書において使用される場合、ノードは、ネットワーク上のコンピューティングの高（上位）レベルユニットである。通常、ノードは、ノードの作業負荷を処理する１つ以上の物理マシン（サーバ）から構成される。好ましくは、ノードの実装は、他のノードから抽象化され、そのような他のノードに対して、各ピアノードは、ネットワーク上で単一のエンティティとして見える。トランザクションレート（例えば、１秒あたり１００万トランザクション）をサポートするために、ノードは、複数の物理マシンに構成されることが好ましい。上記のように、好ましくは、ノードはまた、ミリ秒未満の正確なタイムスタンプを生成するために使用されるタイムサーバも有する。さらに、ノードは、コンセンサスに必要な署名およびエントロピを生成するために使用される暗号化エンジンおよび乱数ジェネレータ（ＲＮＧ）サーバを含む。最後に、ノードは、到来トランザクションを処理し且つ上述した方法でブロックチェーンにそれらを追加するトランザクション処理サーバを含む。
【０１２１】
本明細書で説明した許可ベースのアプローチでは、ノードは、マイニング証明を提供することにより、それ自体がマイナーであることを証明する。マイニング証明は、ノードがブロック（またはそのセグメント）の正当なマイナーであることを数学的に証明するノードによって提示されるデータである。証明は、適切なブロックチェーンの構築（すなわち、信頼）が自己検証可能であるように、ブロックヘッダに記録される。限定を意図するものではないが、分散型検証可能ランダム機能（ＤＶＲＦ）が使用され、マイニング証明を容易にすることができる。代替のアプローチは、ハードウェアで生成された信頼できる乱数の使用を含む。
【０１２２】
実現技術
上記のように、本開示の技術は、コンテンツ配信ネットワーク（ＣＤＮ）などのオーバーレイネットワークの文脈内で実装されることができるが、これは限定ではない。図９に示すようなこの種の既知のシステムでは、分散型コンピュータシステム１００は、コンテンツ配信ネットワーク（ＣＤＮ）として構成され、インターネットの周りに分散された１組のマシン１０２ａ−ｎを有すると仮定される。通常、ほとんどのマシンは、インターネットのエッジの近く、すなわち、エンドユーザアクセスネットワークまたはその近くにあるサーバである。ネットワーク動作コマンドセンタ（ＮＯＣＣ）１０４は、システム内の様々なマシンの動作を管理する。ウェブサイト１０６などのサードパーティサイトは、コンテンツ（例えば、ＨＴＭＬ、埋め込みページオブジェクト、ストリーミングメディア、ソフトウェアダウンロードなど）の配信を、分散型コンピュータシステム１００、特に「エッジ」サーバにオフロードする。通常、コンテンツプロバイダは、コンテンツプロバイダのドメインまたはサブドメインをサービスプロバイダの権限のあるドメイン名サービスによって管理されるドメインに指定すると、エイリアスによって（例えば、ＤＮＳ  ＣＮＡＭＥによって）それらのコンテンツ配信をオフロードする。コンテンツを希望するエンドユーザは、そのコンテンツをより確実に且つ効率的に取得するために分散型コンピュータシステムに誘導される。詳細は示していないが、分散型コンピュータシステムはまた、エッジサーバから使用状況やその他のデータを収集し、そのデータを領域または領域セットにわたって集約し、監視、ロギング、アラート、請求、管理およびその他の運用および管理機能を容易にするために他のバックエンドシステム１１０、１１２、１１４および１１６にそのデータを渡す分散型データ収集システム１０８などの他のインフラストラクチャを含むこともできる。分散型ネットワークエージェント１１８は、ネットワークならびにサーバの負荷を監視し、ネットワーク、トラフィックおよび負荷データを、ＣＤＮによって管理されるコンテンツドメインについて信頼できるＤＮＳクエリ処理機構１１５に提供する。分散型データ伝送機構１２０が使用され、制御情報（例えば、負荷バランシングを容易にするためにコンテンツを管理するためのメタデータなど）をエッジサーバに配信することができる。
【０１２３】
図１０に示すように、所与のマシン２００は、１つ以上のアプリケーション２０６ａ−ｎをサポートするオペレーティングシステムカーネル（Ｌｉｎｕｘまたはバリアントなど）２０４を実行するコモディティハードウェア（例えば、インテルペンティアムプロセッサ）２０２を備える。例えば、コンテンツ配信サービスを容易にするために、所与のマシンは、通常、ＨＴＴＰプロキシ２０７（「グローバルホスト」プロセスと呼ばれることもある）、ネームサーバ２０８、ローカル監視プロセス２１０、分散型データ収集プロセス２１２などのアプリケーションのセットを実行する。ストリーミングメディアの場合、マシンは、通常、サポートされるメディア形式によって要求される１つ以上のメディアサーバを含む。
【０１２４】
ＣＤＮエッジサーバは、好ましくは構成システムを使用してエッジサーバに配信される構成ファイルを使用して、好ましくはドメイン固有で顧客固有ベースで、１つ以上の拡張コンテンツ配信特徴を提供するように構成される。所与の構成ファイルは、好ましくはＸＭＬベースであり、１つ以上の高度なコンテンツ処理特徴を容易にするコンテンツ処理ルールおよびディレクティブのセットを含む。構成ファイルは、データ転送機構を介してＣＤＮエッジサーバに配信されることができる。米国特許第７，１１１，０５７号明細書は、エッジサーバのコンテンツ制御情報を配信および管理するための有用なインフラストラクチャを示しており、このおよび他のエッジサーバ制御情報は、ＣＤＮサービスプロバイダ自体、または（エクストラネットなどを介して）発信元サーバを動作させるコンテンツプロバイダの顧客によってプロビジョニングされることができる。
【０１２５】
ＣＤＮは、米国特許第７，４７２，１７８号明細書に記載されているような記憶サブシステムを含むことができ、その開示は、参照により本明細書に組み込まれる。
【０１２６】
ＣＤＮは、サーバキャッシュ階層を動作させて、顧客コンテンツの中間キャッシングを提供し、そのようなキャッシュ階層サブシステムの１つは、米国特許第７，３７６，７１６号明細書に記載されており、その開示は、参照により本明細書に組み込まれる。
【０１２７】
ＣＤＮは、米国特許出願公開第２００４００９３４１９号明細書に記載されている方法で、クライアントブラウザ、エッジサーバおよび顧客発信元サーバ間で安全なコンテンツ配信を提供することができる。そこで説明されているアプローチは、ＳＳＬで保護されたエッジネットワークと呼ばれることもある。一般的な運用シナリオでは、安全なコンテンツ配信は、一方ではクライアントとエッジサーバプロセスとの間、他方ではエッジサーバプロセスと発信元サーバプロセスとの間でＳＳＬベースのリンクを行使する。これは、ＳＳＬで保護されたウェブページおよび／またはそのコンポーネントを、エッジサーバを介して配信されることを可能にする。セキュリティを強化するために、サービスプロバイダは、エッジサーバに関連する追加のセキュリティを提供することができる。これは、セキュリティカメラによって監視されるロックされたケージに配置されたエッジサーバを備える安全なエッジ領域の動作と、鍵管理サービスの提供などを含むことができる。ここでの一実施形態では、ウォレットサービスは、ＳＳＬで保護されたエッジネットワークの前または後に配置されることができる。
【０１２８】
一般的な動作では、コンテンツプロバイダは、ＣＤＮによって提供したいコンテンツプロバイダのドメインまたはサブドメインを識別する。ＣＤＮサービスプロバイダは、コンテンツプロバイダドメインをエッジネットワーク（ＣＤＮ）ホスト名に（例えば、正規名またはＣＮＡＭＥを介して）関連付け、そして、ＣＤＮプロバイダは、そのエッジネットワークホスト名をコンテンツプロバイダに提供する。コンテンツプロバイダのドメインまたはサブドメインへのＤＮＳクエリがコンテンツプロバイダのドメイン名サーバにおいて受信されると、それらのサーバは、エッジネットワークのホスト名を返すことによって応答する。エッジネットワークのホスト名は、ＣＤＮを指し、そのエッジネットワークのホスト名は、その後にＣＤＮネームサービスを介して解決される。そのために、ＣＤＮネームサービスは、１つ以上のＩＰアドレスを返す。次に、要求元のクライアントブラウザは、ＩＰアドレスに関連付けられたエッジサーバに対して（例えば、ＨＴＴＰまたはＨＴＴＰＳを介して）コンテンツ要求を行う。要求は、発信元のコンテンツプロバイダのドメインまたはサブドメインを含むホストヘッダを含む。ホストヘッダを有する要求を受信すると、エッジサーバは、その構成ファイルを確認して、要求されたコンテンツドメインまたはサブドメインが実際にＣＤＮによって処理されているかどうかを判定する。その場合、エッジサーバは、構成において指定されるように、そのドメインまたはサブドメインのコンテンツ処理ルールおよびディレクティブを適用する。これらのコンテンツ処理ルールおよびディレクティブは、ＸＭＬベースの「メタデータ」構成ファイル内に配置されることができる。
【０１２９】
上述したクライアントからエッジサーバへのマッピング技術は、ウォレットまたはウォレットサービス（「クライアント」）をエッジサーバに関連付けるために使用されることができる。典型的な使用例では、そのウォレットまたはウォレットサービスから開始された、またはそれに関連付けられたトランザクションは、その後、本明細書で説明するようなさらなる処理のためにエッジサーバを通過してコアに進む。上記のように、ウォレットまたはウォレットサービス（またはその一部）はまた、ウォレット要求がエッジを介してウォレットまたはウォレットサービスに渡り、コアに進むように、エッジの内側に存在することもある。トランザクション処理の一部は、エッジサーバにおいて実行されることができる。
【０１３０】
上述した各プロセスは、好ましくは、専用マシンとして、１つ以上のプロセッサにおいて実行可能なプログラム命令のセットとしてコンピュータソフトウェアに実装される。
【０１３１】
本明細書の主題が提供される代表的なマシンは、ＬｉｎｕｘまたはＬｉｎｕｘバリアントオペレーティングシステムを実行するインテルハードウェアプロセッサベースのコンピュータと、説明した機能を実行するための１つ以上のアプリケーションである。上述したプロセスの１つ以上は、説明された機能を実行するためのコンピュータプログラムとして、すなわち、コンピュータ命令のセットとして実装される。
【０１３２】
上記は、本発明の特定の実施形態によって実行される特定の動作の順序を説明しているが、代替の実施形態は、異なる順序で動作を実行し、特定の動作を組み合わせ、特定の動作を重複することができるなどのため、そのような順序は例示であることを理解されたい。本明細書における所与の実施形態への言及は、記載された実施形態が特定の特徴、構造、または特性を含むことができることを示すが、全ての実施形態は、必ずしも特定の特徴、構造、または特性を含まなくてもよい。
【０１３３】
開示された主題は、方法またはプロセスの文脈において説明されてきたが、主題はまた、本明細書の動作を実行するための装置にも関する。この装置は、必要な目的のために特別に構築された特定のマシンであってもよく、またはコンピュータに記憶されたコンピュータプログラムによって選択的にアクティブ化または再構成されるコンピュータを備えてもよい。そのようなコンピュータプログラムは、これらに限定されるものではないが、光ディスク、ＣＤ−ＲＯＭ、および光磁気ディスクを含む任意の種類のディスク、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気もしくは光カード、または電子命令を記憶するのに適した任意の種類の媒体などの、それぞれがコンピュータシステムバスに接続されているコンピュータ可読記憶媒体に記憶されることができる。本発明の所与の実装は、Ｌｉｎｕｘなどのオペレーティングシステムを実行する標準のインテルハードウェアプラットフォーム上のＤＮＳ準拠ネームサーバ（例えば、ＢＩＮＤ）と連動して実行される所与のプログラミング言語で書かれたソフトウェアである。機能は、ネームサーバコードに組み込まれてもよく、またはそのコードの補助として実行されてもよい。本明細書における技術を実装するマシンは、プロセッサ、上述した方法を実行するためにプロセッサによって実行される命令を保持するコンピュータメモリを備える。
【０１３４】
システムの所与のコンポーネントは別個に説明されているが、当業者は、機能のいくつかが所与の命令、プログラムシーケンス、コード部分などにおいて組み合わされるまたは共有されることができることを理解するであろう。
【０１３５】
システムの所与のコンポーネントは別個に説明されているが、当業者は、機能のいくつかが所与の命令、プログラムシーケンス、コード部分などにおいて組み合わされるまたは共有されることができることを理解するであろう。本明細書で説明するアプリケーションまたは機能は、他のアプリケーションへのフックの提供、プラグインとしての機構の使用の促進、機構へのリンクなどによって、ネイティブコードとして実装されることができる。
【０１３６】
本明細書の技術は、一般に、技術または技術分野に対する上述した改善、ならびに様々な分野に対する特定の技術改善を提供する。
【０１３７】
上述した各プロセスは、好ましくは、専用マシンとして、１つ以上のプロセッサにおいて実行可能なプログラム命令のセットとしてコンピュータソフトウェアに実装される。
【０１３８】
エッジネットワークは、様々な技術を使用してコアと通信することができる。利用されることができる代表的なオーバーレイネットワーク技術は、米国特許出願公開第２０１５／０１８８９４３号明細書および同２０１７／０１９５１６１号明細書に記載されているものを含み、それらの開示は、参照により本明細書に組み入れられる。とりわけ、これらの公開は、一般にオーバーレイを介した、ならびに（非公開で管理されることができる）企業データセンタとサードパーティのソフトウェア・アズ・ア・サービス（ＳａａＳ）プロバイダとの間の広域ネットワーク（ＷＡＮ）アクセラレーションサービスを促進するために使用されるＣＤＮリソースを説明している。１つの典型的なシナリオでは、いわゆるルーティングオーバーレイは、既存のコンテンツ配信ネットワーク（ＣＤＮ）インフラストラクチャを活用して、ダウンリンクを迂回するかまたは最小レイテンシを有する経路を見つけることにより、トランスポートプロトコルとしてインターネットプロトコル（ＩＰ）を使用する任意のアプリケーションの大幅な性能向上を提供する。他のアプローチは、マルチキャスト、ユニキャスト、ブロードキャストまたはその他のパケット転送技術を使用して、エッジからコアにメッセージを提供することである。
【０１３９】
本明細書の技術は、一般に、技術または技術分野に対する上述した改善、ならびに全て上述したように、分散型ネットワーキング、分散型トランザクション処理、広域ネットワークにアクセス可能なトランザクション処理システム、高性能、低レイテンシのトランザクション処理システム、非ブロッキングフルメッシュ相互接続システムなどを含む様々な分野に対する特定の技術改善を提供する。
【０１４０】
我々の発明を説明してきたが、主張されているのは以下のとおりである。
【図１】
2021508876.tif 000003
【図２】
2021508876.tif 000004
【図３】
2021508876.tif 000005
【図４】
2021508876.tif 000006
【図５】
2021508876.tif 000007
【図６Ａ】
2021508876.tif 000008
【図６Ｂ】
2021508876.tif 000009
【図７】
2021508876.tif 000010
【図８】
2021508876.tif 000011
【図９】
2021508876.tif 000012
【図１０】
2021508876.tif 000013
【図１１】
2021508876.tif 000014
【図１２】
2021508876.tif 000015
【図１３】
2021508876.tif 000016
【図１４】
2021508876.tif 000017
【図１５】
2021508876.tif 000018
【国際調査報告】
2021508876.tif 000019
2021508876.tif 000020
2021508876.tif 000021
2021508876.tif 000022