(58)【調査した分野】(Int.Cl.,DB名)
前記第2のセットのブロックチェーンブロックが、第1のブロックチェーンブロックおよび第2のブロックチェーンブロックを備え、前記第2のセットのスレッドが、第1のスレッドおよび第2のスレッドを含み、前記ブリッジデバイスの前記第2のセットのスレッドを使用して、前記ブロックチェーン・ネットワーク・ノードから第2のセットのブロックチェーンブロックを取り出すステップが、
前記ブリッジデバイスの前記第2のスレッドを使用して前記ブロックチェーン・ネットワーク・ノードから前記第2のブロックチェーンブロックを取り出すステップと並列に、前記ブリッジデバイスの前記第1のスレッドを使用して前記ブロックチェーン・ネットワーク・ノードから前記第1のブロックチェーンブロックを取り出すステップを含む、請求項1に記載のコンピュータ実施方法。
前記第1のセットのブロックチェーンブロックが、第3のブロックチェーンブロックおよび第4のブロックチェーンブロックを備え、前記第3のセットのスレッドが、第3のスレッドおよび第4のスレッドを含み、前記ブリッジデバイスの第3のセットのスレッドを使用して、前記ブリッジデバイスに格納された第1のセットのブロックチェーンブロックを検証するステップが、
前記ブリッジデバイスの前記第4のスレッドを使用して前記第4のブロックチェーンブロックを検証するステップと並列に、前記ブリッジデバイスの前記第3のスレッドを使用して前記第3のブロックチェーンブロックを検証するステップを含む、請求項1に記載のコンピュータ実施方法。
前記ブリッジデバイスに前記第1のセットのブロックチェーンブロックを格納したことに応答して、前記第1のセットのブロックチェーンブロックのアカウントに対して、前記ブリッジデバイスによって前記ローカル高さ値を更新するステップと、
前記ブリッジデバイスに前記第2のセットのブロックチェーンブロックを格納するステップと、
前記ブリッジデバイスに前記第2のセットのブロックチェーンブロックを格納したことに応答して、前記第2のセットのブロックチェーンブロックのアカウントに対して、前記ブリッジデバイスによって前記ローカル高さ値を更新するステップと
をさらに含む、請求項4に記載のコンピュータ実施方法。
前記ローカル高さ値が前記リモート高さ値以上であるとの決定に応答して、前記ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取得することを控えるステップ
をさらに含む、請求項4に記載のコンピュータ実施方法。
前記通知は、新しいブロックが前記ブロックチェーンネットワークのブロックチェーンに追加されたことを示す新しいブロック通知を含み、前記新しいブロック通知は、前記リモート高さ値が増加されたことを示す、請求項7に記載のコンピュータ実施方法。
前記ブリッジデバイスに格納され、かつ前記ブリッジデバイスによって検証されていないブロックチェーンブロックを検証するステップが、前記ブロックチェーンブロックの1つまたは複数のブロックチェーントランザクションとトランザクション要求との間の整合性を求めるステップを含む、請求項10に記載のコンピュータ実施方法。
前記ブリッジデバイスに格納され、かつ前記ブリッジデバイスによって検証されていないブロックチェーンブロックを検証したことに応答して、前記ブロックチェーンブロックが信頼できると決定するステップと、
前記ブリッジデバイスによって前記チェック高さ値を更新するステップと
をさらに含む、請求項10に記載のコンピュータ実施方法。
前記第2のセットのブロックチェーンブロックが、第1のブロックチェーンブロックおよび第2のブロックチェーンブロックを備え、前記第2のセットのスレッドが、第1のスレッドおよび第2のスレッドを含み、前記ブリッジデバイスの前記第2のセットのスレッドを使用して、前記ブロックチェーン・ネットワーク・ノードから第2のセットのブロックチェーンブロックを取り出すステップが、
前記ブリッジデバイスの前記第2のスレッドを使用して前記ブロックチェーン・ネットワーク・ノードから前記第2のブロックチェーンブロックを取り出すステップと並列に、前記ブリッジデバイスの前記第1のスレッドを使用して前記ブロックチェーン・ネットワーク・ノードから前記第1のブロックチェーンブロックを取り出すステップを含む、請求項15に記載の非一時的コンピュータ可読記憶媒体。
前記第1のセットのブロックチェーンブロックが、第3のブロックチェーンブロックおよび第4のブロックチェーンブロックを備え、前記第3のセットのスレッドが、第3のスレッドおよび第4のスレッドを含み、前記ブリッジデバイスの第3のセットのスレッドを使用して、前記ブリッジデバイスに格納された第1のセットのブロックチェーンブロックを検証するステップが、
前記ブリッジデバイスの前記第4のスレッドを使用して前記第4のブロックチェーンブロックを検証するステップと並列に、前記ブリッジデバイスの前記第3のスレッドを使用して前記第3のブロックチェーンブロックを検証するステップを含む、請求項15に記載の非一時的コンピュータ可読記憶媒体。
前記第2のセットのブロックチェーンブロックが、第1のブロックチェーンブロックおよび第2のブロックチェーンブロックを備え、前記第2のセットのスレッドが、第1のスレッドおよび第2のスレッドを含み、前記ブリッジデバイスの前記第2のセットのスレッドを使用して、前記ブロックチェーン・ネットワーク・ノードから第2のセットのブロックチェーンブロックを取り出すステップが、
前記ブリッジデバイスの前記第2のスレッドを使用して前記ブロックチェーン・ネットワーク・ノードから前記第2のブロックチェーンブロックを取り出すステップと並列に、前記ブリッジデバイスの前記第1のスレッドを使用して前記ブロックチェーン・ネットワーク・ノードから前記第1のブロックチェーンブロックを取り出すステップを含む、請求項18に記載のコンピュータ実施システム。
前記第1のセットのブロックチェーンブロックが、第3のブロックチェーンブロックおよび第4のブロックチェーンブロックを備え、前記第3のセットのスレッドが、第3のスレッドおよび第4のスレッドを含み、前記ブリッジデバイスの第3のセットのスレッドを使用して、前記ブリッジデバイスに格納された第1のセットのブロックチェーンブロックを検証するステップが、
前記ブリッジデバイスの前記第4のスレッドを使用して前記第4のブロックチェーンブロックを検証するステップと並列に、前記ブリッジデバイスの前記第3のスレッドを使用して前記第3のブロックチェーンブロックを検証するステップを含む、請求項18に記載のコンピュータ実施システム。
【発明を実施するための形態】
【0023】
本明細書は、例えば、ブロックチェーンベースのフォールトトレラントシステムを実装するために、ブロックチェーンブロックの非同期処理のための技術を説明する。これらの技術は一般に、例えば、調整された処理および制御能力を実現するために、ブリッジデバイスを使用してブロックチェーンシステムと第三者システムを接続することを伴う。
【0024】
本明細書に記載の技術は、いくつかの技術的効果を生む。いくつかの実施形態では、ブリッジデバイスは、クライアントデバイスおよびブロックチェーンネットワークのブロックチェーン・ネットワーク・ノードに(例えば、1つまたは複数のワイヤードまたはワイヤレス通信チャネルを介して)通信可能にリンクされる。いくつかの実施形態では、ブリッジデバイスは、クライアントデバイスがブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことを手伝うことができる。したがって、クライアントデバイスは、取り出したブロックチェーンブロックをローカルに格納し、検証し、そうでなければ処理することができ、ブロックチェーンネットワークのブロックチェーンに格納されたブロックチェーンブロックと同期され得る。
【0025】
いくつかの実施形態では、クライアントデバイス、ブリッジデバイス、およびブロックチェーンネットワークの調整された処理を実現しながら、ブリッジデバイスは、向上したスループットおよび処理効率を提供できる。例えば、ブリッジデバイスは、クライアントデバイスとブロックチェーンネットワークの間のブリッジ通信などの機能を実行し、ブロックチェーンネットワークからブロックチェーンブロックを取得し、ブリッジデバイスなどにおいて取得したブロックチェーンブロックを検証するために非同期処理を可能するように設計され得る。例えば、ブリッジデバイスは、システムによって処理されたブロックチェーンブロックに関連付けられたカーソル値を導出して維持することによって、ブロックチェーンブロックの検証動作と取り出し動作の間の処理依存を減らすことができる。結果として、ブリッジデバイスはこれらの動作を分離でき、取り出し動作が完了するまで待機するための処理遅延なく、非同期に該動作を実行できる。
【0026】
いくつかの実施形態では、ブリッジデバイスは、マルチスレッド処理能力を活用して、異なるいくつかのスレッドを使用してその機能を非同期に実行できる。ブリッジデバイスの1つまたは複数の独立したスレッドを使用して非同期にブリッジデバイスの機能を実行することは、ブリッジデバイスによって格納され、かつクライアントデバイスとブロックチェーン・ネットワーク・ノードの間で通信されるデータのデータセキュリティと信頼性を強化するためにブロック関連処理の順序付けられた実行を維持しながら、ブリッジデバイスの処理速度および柔軟性を向上でき、クライアントデバイスとブロックチェーン・ネットワーク・ノードの間の通信のスループットを増大できる。
【0027】
いくつかの実施形態では、ブリッジデバイスは、システム障害または誤動作によって引き起こされる、ブロックチェーンベースのフォールトトレラントシステムにおける異常の影響を軽減することにより、システム全体にフォールトトレランスを提供できる。いくつかの例では、システム障害または誤動作(例えば、通信接続がブロックチェーンシステムのデバイス間で失われることがある)により、ブロックチェーンシステム(例えば、クライアントデバイスおよびブリッジデバイス)に格納されたブロックチェーンデータ(例えば、ブロックチェーンブロック)は、エラーの影響を受けやすく、あるいは失われる。ブリッジデバイスは、例えば、システムによって処理されたブロックチェーンブロックに関連付けられたカーソル値に従って自身の機能を実行することによって、ブロックチェーンブロックを正しい順序で復元するのに役立つことができる。したがって、ブリッジデバイスはフォールトトレランスを提供して、ブリッジデバイスによって格納され、かつクライアントデバイスとブロックチェーン・ネットワーク・ノードの間で通信されるブロックチェーンブロックの信頼性を確保できる。
【0028】
本明細書の実施形態のさらなるコンテキストを提供するために、上に紹介したように、コンセンサスネットワーク(例えば、ピアツーピアノードで構成される)とも呼ばれ得る、分散台帳システム(DLS)およびブロックチェーンネットワークは、参加エンティティが安全かつ不変にトランザクションを実行し、データを格納できるようにする。ブロックチェーンという用語は、一般に特定のネットワークおよび/または使用例に関連付けられるが、ブロックチェーンは、特定の使用例を参照せずに、一般にDLSを指すために本明細書では使用される。
【0029】
ブロックチェーンは、トランザクションが不変であるようにトランザクションを格納するデータ構造である。したがって、ブロックチェーンに記録されたトランザクションは、確実であり、信頼できる。ブロックチェーンは1つまたは複数のブロックを含む。チェーン内の各ブロックは、前のブロックの暗号化ハッシュを含むことによって、チェーン内のその直前のブロックにリンクされる。各ブロックはまた、タイムスタンプ、自身の暗号化ハッシュ、および1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによって既に検証されたトランザクションは、ハッシュ化および符号化されてマークルツリーとなる。マークルツリーは、ツリーのリーフノードにおけるデータがハッシュ化されたデータ構造であり、ツリーの各ブランチのすべてのハッシュがブランチのルートにおいて連結される。このプロセスは、ツリー全体のルートまでツリーを上に進み、ツリー内のすべてのデータを表すハッシュを格納する。ツリーに格納されたトランザクションであるとされるハッシュは、ツリーの構造と一致するか否かを判定することによってすばやく検証され得る。
【0030】
ブロックチェーンはトランザクションを格納するための分散型または少なくとも部分的に分散型のデータ構造であるが、ブロックチェーンネットワークは、トランザクションをブロードキャストし、検証し、有効にするなどによって、1つまたは複数のブロックチェーンを管理、更新、維持するコンピューティングノードのネットワークである。上に紹介したように、ブロックチェーンネットワークは、パブリック・ブロックチェーン・ネットワーク、プライベート・ブロックチェーン・ネットワーク、またはコンソーシアム・ブロックチェーン・ネットワークとして提供され得る。本明細書の実施形態は、コンソーシアム・ブロックチェーン・ネットワークを参照して本明細書でさらに詳細に説明される。しかしながら、本明細書の実施形態は、任意の適切なタイプのブロックチェーンネットワークで実現できると考えられる。
【0031】
一般に、コンソーシアム・ブロックチェーン・ネットワークは、参加エンティティ間でプライベートである。コンソーシアム・ブロックチェーン・ネットワークでは、コンセンサスプロセスが、コンセンサスノードと呼ばれ得る、認証されたセットのノードによって制御され、1つまたは複数のコンセンサスノードがそれぞれのエンティティ(例えば、金融機関、保険会社)によって運用される。例えば、10個のエンティティ(例えば、金融機関、保険会社)のコンソーシアムは、コンソーシアム・ブロックチェーン・ネットワークを運用でき、各々が、コンソーシアム・ブロックチェーン・ネットワークの少なくとも1つのノードを運用する。
【0032】
いくつかの例では、コンソーシアム・ブロックチェーン・ネットワーク内で、グローバルブロックチェーンが、すべてのノードにわたって複製されたブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関して完全な状態のコンセンサスにある。コンセンサス(例えばブロックチェーンへのブロックの追加に対する合意)に達するために、コンセンサスプロトコルが、コンソーシアム・ブロックチェーン・ネットワーク内で実装される。例えば、コンソーシアム・ブロックチェーン・ネットワークは、以降にさらに詳細に記載される、プラクティカル・ビザンチン・フォールト・トレランス(PBFT)コンセンサスを実装できる。
【0033】
図1は、本明細書の実施形態を実行するために使用され得る環境100の例を示す図である。いくつかの例では、環境100では、エンティティがコンソーシアム・ブロックチェーン・ネットワーク102に参加できる。環境100は、コンピューティングデバイス106および108、およびネットワーク110を含む。いくつかの例では、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはそれらの組み合わせを含み、ウェブサイト、ユーザデバイス(例えば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例では、ネットワーク110は、ワイヤードおよびまたはワイヤレス通信リンクを介してアクセスされ得る。いくつかの例では、ネットワーク110は、コンソーシアム・ブロックチェーン・ネットワーク102との通信、およびコンソーシアム・ブロックチェーン・ネットワーク102内での通信を可能にする。一般に、ネットワーク110は、1つまたは複数の通信ネットワークを表す。いくつかのケースでは、コンピューティングデバイス106および108は、クラウド・コンピューティング・システム(図示せず)のノードであり得るか、または各コンピューティングデバイス106、108は、ネットワークによって相互接続され、分散処理システムとして機能する多数のコンピュータを含む個別のクラウド・コンピューティング・システムであり得る。
【0034】
図示の例では、コンピューティングデバイス106、108はそれぞれ、コンソーシアム・ブロックチェーン・ネットワーク102にノードとしての参加を可能にする任意の適切なコンピューティングシステムを含むことができる。コンピューティングデバイスの例は、限定ではなく、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピューティングデバイス、およびスマートフォンを含む。いくつかの例では、コンピューティングデバイス106、108は、コンソーシアム・ブロックチェーン・ネットワーク102と対話する1つまたは複数のコンピュータ実施サービスをホストする。例えば、コンピューティングデバイス106は、第1のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)との自身のトランザクションを管理するために使用するトランザクション管理システムなどの、第1のエンティティ(例えば、ユーザA)のコンピュータ実施サービスをホストできる。コンピューティングデバイス108は、第2のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)との自身のトランザクションを管理するために使用するトランザクション管理システムなどの、第2のエンティティ(例えば、ユーザB)のコンピュータ実施サービスをホストできる。
図1の例では、コンソーシアム・ブロックチェーン・ネットワーク102は、ノードのピアツーピアネットワークとして表され、コンピューティングデバイス106、108は、コンソーシアム・ブロックチェーン・ネットワーク102に参加する、第1のエンティティおよび第2のエンティティのノードをそれぞれ提供する。
【0035】
図2は、本明細書の実施形態によるアーキテクチャ200の例を示す図である。例示の概念的アーキテクチャ200は、参加者A、参加者B、参加者Cにそれぞれ対応する参加者システム202、204、206を含む。各参加者(例えば、ユーザ、企業)は、少なくともいくつかのノードがブロックチェーン216に不変に情報を記録する、複数のノード214を含むピアツーピアネットワークとして提供されるブロックチェーンネットワーク212に参加する。単一のブロックチェーン216がブロックチェーンネットワーク212内に概略的に示されているが、本明細書でさらに詳細に説明されるように、ブロックチェーン216の複数のコピーが提供され、ブロックチェーンネットワーク212にわたって維持される。
【0036】
例示では、各参加者システム202、204、206が、参加者A、参加者B、参加者Cによってそれぞれ提供されるか、参加者A、参加者B、参加者Cの代わりにそれぞれ提供され、ブロックチェーンネットワーク内でそれぞれノード214として機能する。本明細書で使用されるように、ノードは一般に、ブロックチェーンネットワーク212に接続された個々のシステム(例えば、コンピュータ、サーバ)を指し、それぞれの参加者がブロックチェーンネットワークに参加できるようにする。
図2の例では、参加者は各ノード214に対応する。しかしながら、参加者は、ブロックチェーンネットワーク212内で複数のノード214を運用できること、および/または複数の参加者が1つのノード214を供給できることが考えられる。いくつかの例では、参加者システム202、204、206は、プロトコル(例えば、ハイパーテキスト転送プロトコルセキュア(HTTPS))を使用して、および/またはリモートプロシージャコール(RPC)を使用して、ブロックチェーンネットワーク212と通信、あるいはブロックチェーンネットワーク212を介して通信する。
【0037】
ノード214はブロックチェーンネットワーク212内で様々な程度で参加できる。例えば、いくつかのノード214は、コンセンサスプロセスに参加(例えば、ブロックチェーン216にブロックを追加するマイナノードとして)するが、他のノード214は、コンセンサスプロセスに参加しない。別の例として、いくつかのノード214は、ブロックチェーン216の完全なコピーを格納するが、他のノード214はブロックチェーン216の部分的なコピーのみを格納する。例えば、データアクセス権限は、それぞれの参加者がそれぞれのシステム内に格納するブロックチェーンデータを制限できる。
図2の例では、参加者システム202、204、および206は、ブロックチェーン216の完全なコピー216’、216’’、および216’’’をそれぞれ格納する。
【0038】
ブロックチェーン(例えば、
図2のブロックチェーン216)は、各ブロックがデータを格納する、複数のブロックのチェーンで構成される。データの例は、2以上の参加者の間のトランザクションのトランザクションデータ表現を含む。トランザクションは、本明細書において非限定的例の意味で使用され、任意の適切なデータ(例えば、文書、画像、動画、音声)が、ブロックチェーンに格納され得ると考えられる。トランザクションの例は、限定ではなく、何らかの値(例えば、資産、商品、サービス、資金)の交換を含むことができる。トランザクションデータは、ブロックチェーンに不変に格納される。すなわち、トランザクションデータは変更不可である。
【0039】
ブロックに格納する前に、トランザクションデータはハッシュ化される。ハッシュ化は、トランザクションデータ(文字列データとして提供される)を固定長のハッシュ値(また文字列として提供される)に変換するプロセスである。ハッシュ値をハッシュ解除してトランザクションデータを取得することはできない。ハッシュ化は、トランザクションデータのわずかな変化でさえ、完全に異なるハッシュ値となることを保証する。さらに、上述したように、ハッシュ値は、固定長である。すなわち、トランザクションデータのサイズに関係なく、ハッシュ値の長さは一定である。ハッシュ化は、ハッシュ関数を介してトランザクションデータを処理して、ハッシュ値を生成することを含む。ハッシュ関数の例は、限定ではなく、256ビットのハッシュ値を出力する、セキュアハッシュアルゴリズム(SHA)-256を含む。
【0040】
複数のトランザクションのトランザクションデータがハッシュ化され、ブロックに格納される。例えば、2つのトランザクションのハッシュ値が提供され、別のハッシュを提供するためにそれらがハッシュ化される。このプロセスが、ブロックに格納されるべきすべてのトランザクションに対して、単一のハッシュ値が提供されるまで、繰り返される。このハッシュ値は、マークルルートハッシュと呼ばれ、ブロックのヘッダに格納される。任意のトランザクションの変化は、それのハッシュ値の変化を生じ、最終的にはマークルルートハッシュの変化が生じる。
【0041】
ブロックは、コンセンサスプロセスを介してブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードが、コンセンサスプロセスに参加し、ブロックチェーンにブロックを追加する作業を実行する。そのようなノードは、コンセンサスノードと呼ばれる。上に紹介した、PBFTは、コンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行して、トランザクションをブロックチェーンに追加し、ブロックチェーンネットワークの全体の状態を更新する。
【0042】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内の全トランザクションをハッシュ化し、単一のハッシュ値がブロック(マークルルートハッシュ)内のすべてのトランザクションについて提供されるまで、ペアのハッシュ値を組み合わせて、さらなるハッシュ値を生成する。このハッシュは、ブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーン内の直近のブロック(すなわち、ブロックチェーンに最後に追加されたブロック)のハッシュ値を決定する。コンセンサスノードはまた、ナンス値およびタイムスタンプをブロックヘッダに追加する。
【0043】
一般に、PBFTは、ビザンチン障害(例えば、誤動作しているノード、悪意のあるノード)に耐性のある実用的なビザンチン状態マシンレプリケーションを提供する。このことは、障害が発生すると仮定すること(例えば、独立ノード障害の存在および/またはコンセンサスノードによって送られた操作されたメッセージを仮定すること)によって、PBFTにおいて達成される。PBFTでは、コンセンサスノードが、プライマリ・コンセンサス・ノードおよびバックアップ・コンセンサス・ノードの順序で提供される。プライマリ・コンセンサス・ノードは、定期的に変化する。ブロックチェーンネットワーク内のすべてのコンセンサスノードがブロックチェーンネットワークのワールドステートについて合意に達することによって、トランザクションがブロックチェーンに追加される。このプロセスでは、メッセージがコンセンサスノード間で送られ、各コンセンサスノードは、メッセージが特定のピアノードから受け取られたことを証明し、メッセージが伝送の間に変更されなかったことを検証する。
【0044】
PBFTでは、コンセンサスプロトコルが、すべてのコンセンサスノードが同じ状態を開始することにより、マルチフェーズで提供される。初めに、クライアントは、プライマリ・コンセンサス・ノードに要求を送り、サービス動作を呼び出す(例えば、ブロックチェーンネットワーク内のトランザクションを実行する)。要求を受け取ることに応答して、プライマリ・コンセンサス・ノードは、バックアップ・コンセンサス・ノードに要求をマルチキャストする。バックアップ・コンセンサス・ノードは要求を実行し、各々がクライアントに返信する。クライアントは、しきい値数の返信が受信されるまで待機する。いくつかの例では、クライアントは、f+1個の返信が受信されるまで待機し、ここで、fはブロックチェーンネットワーク内で可能にし得る障害コンセンサスノードの最大数である。最終的な結果として、十分な数のコンセンサスノードが、ブロックチェーンに追加されるレコードの順序について合意に達し、レコードが受け入れられるか、拒否される。
【0045】
いくつかのブロックチェーンネットワークでは、トランザクションのプライバシーを維持するために暗号が実装される。例えば、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を識別できないように、2つのノードがトランザクションをプライベートのままにしたい場合、ノードはトランザクションデータを暗号化できる。暗号の例は、限定ではなく、対称暗号化と非対称暗号化を含む。対称暗号化は、暗号化(平文から暗号文を生成する)および復号(暗号文から平文を生成する)の両方に対して単一の鍵を使用する暗号化プロセスを指す。対称暗号化では、同じ鍵が複数のノードに対して有効にされ、各ノードはトランザクションデータを暗号化/復号できる。
【0046】
非対称暗号化は、各々が秘密鍵および公開鍵を含む鍵のペアを使用し、秘密鍵は、それぞれのノードに対してのみ知られており、公開鍵は、ブロックチェーンネットワークの任意のまたはすべてのノードに知られている。ノードは、別のノードの公開鍵を使用してデータを暗号化でき、暗号化されたデータは、他のノードの秘密鍵を使用して復号され得る。例えば、
図2を再度参照すると、参加者Aは参加者Bの公開鍵を使用してデータを暗号化でき、暗号化したデータを参加者Bに送ることができる。参加者Bは、自身の秘密鍵を使用して暗号化されたデータ(暗号文)を復号でき、元のデータ(平文)を抽出できる。ノードの公開鍵によって暗号化されたメッセージは、そのノードの秘密鍵を使用してのみ復号が可能である。
【0047】
非対称暗号化は、デジタル署名を提供するために使用され、デジタル署名により、トランザクションの参加者は、トランザクションの他の参加者およびトランザクションの有効性を確認できる。例えば、ノードは、メッセージにデジタルに署名でき、別のノードは、メッセージが参加者Aのデジタル署名に基づいてノードによって送られたことを確認できる。デジタル署名はまた、メッセージが伝送中に改ざんされていないことを保証するために使用され得る。例えば、再度
図2を参照し、参加者Aが参加者Bにメッセージを送るとする。参加者Aは、メッセージのハッシュを生成し、次いで、自身の秘密鍵を使用して、そのハッシュを暗号化し、暗号化ハッシュとしてデジタル署名を提供する。参加者Aは、デジタル署名をメッセージに付け加えて、デジタル署名付きのメッセージを参加者Bに送る。参加者Bは参加者Aの公開鍵を使用してデジタル署名を復号し、ハッシュを抽出する。参加者Bはメッセージをハッシュ化して、両ハッシュを比較する。両ハッシュが同じ場合、参加者Bはメッセージが確かに参加者Aからのもので、改ざんされていないことを確認できる。
【0048】
図3は、本明細書の実施形態によるシステム300の例を示す図である。システム300はブロックチェーンベースのフォールトトレラントシステムを実装する。示されるように、システム300はクライアントデバイス302、ブリッジデバイス304a-b、およびブロックチェーン・ネットワーク・ノード306を含む。
【0049】
クライアントデバイス302は、例えば、任意の適切なコンピュータ、モジュール、サーバ、あるいは、本明細書に記載の方法を実行するようにプログラムされたコンピューティング要素を含むことができる。いくつかの実施形態では、クライアントデバイス302は、電子デバイスを含むデジタルウォレットデバイスまたはシステムであってよく、または個人にコンピュータネットワークを介して電子トランザクションを行うことを可能にするオンラインサービスであってよい。例えば、個人の銀行口座は、デジタルウォレットデバイスにリンクされることができる。運転免許、健康保険カード、および暗号鍵など、他の識別情報がまた、デジタルウォレットデバイス上に格納されてよい。
【0050】
いくつかの実施形態では、クライアントデバイス302は、ブリッジデバイス(例えば、ブリッジデバイス304a)がクライアントデバイス302と通信することを可能にするインターフェースを含むことができる。いくつかの実施形態では、クライアントデバイス302のインターフェースは、クライアントデバイス302によって実装および/または拡張され、およびブリッジデバイス(例えば、ブリッジデバイス304a)がクライアントデバイス302にデータを送ることを可能にするサービスプロバイダインターフェース(SPI)であってよい。いくつかの実施形態では、SPIは、パブリックインターフェースのセットとブリッジデバイスが定義するアブストラクトクラスとを含むことができる。いくつかの実施形態では、SPIは、目標を達成するためにクライアントデバイス302が準拠する必要のある規格またはプロトコルを指定できる。いくつかの実施形態では、クライアントデバイス302は、ブリッジデバイスにトランザクション要求(例えば、資金移動の要求など)を送り、クライアントデバイス302のSPIを介してブリッジデバイスから要求結果を受け取ることができる。
【0051】
クライアントデバイス304a-bは、例えば、任意の適切なコンピュータ、モジュール、サーバ、あるいは、本明細書に記載の方法を実行するようにプログラムされたコンピューティング要素を含むことができる。一般に、クライアントデバイス304a-bは、ブリッジ機能を提供して、第三者システム(例えば、クライアントデバイス302)とブロックチェーンシステム(例えば、ブロックチェーン・ネットワーク・ノード306)の間の通信を可能にする。いくつかの例では、ブリッジデバイス304a-bは、ブロックチェーン・ネットワーク・ノード306にリソース(例えば、ブロックチェーンデータ)を求めるクライアントデバイス302からの要求をハンドリングするために仲介者として動作するプロキシサーバであってよい。示されるように、ブリッジデバイス304aは、クライアントデバイス302およびブロックチェーン・ネットワーク・ノード306に(例えば、1つまたは複数のワイヤードまたはワイヤレス通信チャネルを介して)通信可能にリンクされる。いくつかの実施形態では、ブリッジデバイスは、クライアントデバイス302の構成要素またはモジュールとして実装され得る。
【0052】
いくつかの実施形態では、ブリッジデバイス(例えば、ブリッジデバイス304a)は、クライアントデバイス302がブリッジデバイスと通信して、さらにブロックチェーンネットワークにアクセスすることを可能にするインターフェースを含むことができる。いくつかの実施形態では、ブリッジデバイス304aのインターフェースは、クライアントデバイス302に公開され、クライアントデバイス302がブリッジデバイス304aと通信し、さらにブロックチェーン・ネットワーク・ノード306を介してブロックチェーンネットワークアクセスするために使用できるアプリケーションプログラミングインターフェース(API)を含むことができる。ブリッジデバイスのAPIは、サブルーチンのセット、通信プロトコル、およびクライアントデバイス302がアクセスできるメソッドを含むことができる。いくつかの実施形態では、ブリッジデバイス(例えば、ブリッジデバイス304a)は、ブリッジデバイスのAPIを介してクライアントデバイス302からトランザクション要求を受け取り、クライアントデバイス302のSPIを介してクライアントデバイス302に要求応答を提供できる。
【0053】
いくつかの実施形態では、システム300は、複数のブリッジデバイス304a-bを含み、ブリッジデバイス304a-bは、事前定義された通信プロトコルに準拠することによって互いに通信できる。いくつかの実施形態では、ブリッジデバイス304a-bの各々は、それぞれのブロックチェーン・ネットワーク・ノードに通信可能にリンクできる。示されるように、ブリッジデバイス304aはブロックチェーン・ネットワーク・ノード306に通信可能にリンクされる。
【0054】
いくつかの実施形態では、ブロックチェーン・ネットワーク・ノード306は、ブロックチェーンネットワークのコンセンサスノードまたは非コンセンサスノードであり得る。いくつかの実施形態では、ブリッジデバイス304bは、ブロックチェーンネットワークの別のブロックチェーン・ネットワーク・ノード(図示せず)にリンクできる。いくつかの実施形態では、ブリッジデバイス304a-bの各々は、クライアントデバイス302からのトランザクション要求をブロックチェーントランザクションに変換し、ブロックチェーントランザクションを通信可能にリンクされたブロックチェーン・ネットワーク・ノードに提出できる。例えば、ブリッジデバイス(例えば、ブリッジデバイス304a)は、ブロックチェーン・ネットワーク・ノード306上で実行されるべきスマートコントラクトへのコントラクトコールを行い、クライアントデバイス302からのトランザクション要求に基づいてブロックチェーントランザクションを生成できる。
【0055】
いくつかの実施形態では、ブリッジデバイス304a-bの各々は、リンクされたブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことができる。いくつかの実施形態では、ブリッジデバイス(例えば、ブリッジデバイス304a)は、ブロックチェーン・ネットワーク・ノード(例えば、ブロックチェーン・ネットワーク・ノード306)によってブリッジデバイスにプッシュされたブロックチェーンブロックを受け取ることができる。例えば、ブロックチェーン・ネットワーク・ノード306は、ブリッジデバイス304aのサブスクリプションに基づいて、ブロックチェーンブロックをブリッジデバイス304aに定期的にプッシュできる。いくつかの実施形態では、ブリッジデバイス(例えば、ブリッジデバイス304a)は、例えば、オンデマンドで、ブロックチェーン・ネットワーク・ノード(例えば、ブロックチェーン・ネットワーク・ノード306)からブロックチェーンブロックをプルできる。例えば、ブリッジデバイス304aは、定期的にまたは時々、ブロックチェーン・ネットワーク・ノード306にブロックチェーンブロックを要求できる。
【0056】
いくつかの実施形態では、ブリッジデバイス304a-bは、ブロックチェーン・ネットワーク・ノードから取り出されたブロックチェーンブロックを検証して、ブロックチェーンブロックが信頼できるか否かを判定できる。いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロックに記録されたトランザクションデータを、クライアントデバイスによってブリッジデバイスに送られたトランザクション要求に含まれるデータと比較することによって、ブロックチェーンブロックを検証できる。いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロック内のブロックチェーントランザクションのハッシュ値に基づいてブロックチェーンブロックを検証できる。例えば、ブロックチェーンブロックは、ブロックチェーントランザクションとブロックチェーントランザクションの第1のハッシュ値を含むことができる。ブリッジデバイスは、ブロックチェーンブロックからブロックチェーントランザクションを取得し、ブロックチェーントランザクションの第2のハッシュ値を計算できる。ブリッジデバイスは、第2のハッシュ値を第1のハッシュ値と比較できる。2つのハッシュ値が一致すると決定された場合、ブリッジデバイスは、ブロックチェーンブロック内のブロックチェーントランザクションが改ざんされておらず、ブロックチェーンブロックが信頼できるブロックであると決定できる。
【0057】
いくつかの実施形態では、ブリッジデバイスは、システムによって処理されたブロックチェーンブロックに関連付けられた3つのカーソル値を維持できる。いくつかの実施形態では、これらのカーソル値は、3つのカウンタとして実装され、ブリッジデバイスのデータストア(例えば、メモリ)に格納される。いくつかの実施形態では、3つのカーソル値は、ブロックチェーン・ネットワーク・ノード(例えば、ブロックチェーン・ネットワーク・ノード306)上に格納されたブロックチェーンブロックの数を示す第1の値、ブリッジデバイス(例えば、ブリッジデバイス304a)上に格納されたブロックチェーンブロックの数を示す第2の値、およびブリッジデバイスによって検証されたブロックチェーンブロックの数を示す第3の値を含む。
【0058】
図4は、本明細書の実施形態による
図3のブロックチェーンベースのフォールトトレラントシステムに格納されたカーソル値の例を示す
図400である。示されるように、ブリッジデバイス(例えば、ブリッジデバイス304a)は、通信可能にリンクされたブロックチェーン・ネットワーク・ノード(例えば、ブロックチェーンブロック408a-d)上に格納されたブロックチェーンブロックの数を示すリモート高さ値402と、ブリッジデバイス(例えば、ブロックチェーンブロック408a-c)上に格納されたブロックチェーンブロックの数を示すローカル高さ値404と、ブリッジデバイス(例えば、ブロックチェーンブロック408a)によって検証されたブロックチェーンブロックの数を示すチェック高さ値406とを維持できる。
【0059】
いくつかの実施形態では、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからリモート高さ値402を示す通知を受け取ることができる。いつかの実施形態では、通知は、ブロックチェーン・ネットワーク・ノード上に格納されたブロックチェーンブロックの総数を示すリモート高さ値402を含むことができる。いくつかの実施形態では、通知は、ブロックチェーン・ネットワーク・ノードのブロックチェーンに追加された新しいブロックを示す新しいブロック通知を含むことができる。例えば、新しいブロック通知は、リモート高さ値402が1だけ増えたことを示すことができる。
【0060】
いくつかの実施形態では、ブリッジデバイスは、ローカル高さ値404がリモート高さ値402未満であるか否かを判定できる。いくつかの実施形態では、ローカル高さ値404がリモート高さ値402未満であると決定された場合、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことができる。いくつかの実施形態では、ブリッジデバイスは、ブリッジデバイス304a上に格納されていないブロックチェーン・ネットワーク・ノードから1つまたは複数のブロックチェーンブロックを取り出すことができる。例えば、
図4を参照すると、ブリッジデバイスは、ブロックチェーンブロック408a-cがブリッジデバイス上に格納されていること、かつローカル高さ値404が1だけリモート高さ値402より小さいことを決定できる。決定に応答して、ブリッジデバイスはブロックチェーン・ネットワーク・ノードからブロックチェーンブロック408dを取り出すことができる。いくつかの実施形態では、ブリッジデバイスは、例えば、上述したようなプルまたはプッシュモードで、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことができる。いくつかの実施形態では、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出した後、ローカル高さ値404を更新できる。例えば、ブリッジデバイスがブロックチェーン・ネットワーク・ノードから1つのブロックチェーンブロックを取得する場合、ブリッジデバイスは1だけローカル高さ値404を増加することによってローカル高さ値404を更新できる。いくつかの実施形態では、ブリッジデバイスは、ローカル高さ値404がリモート高さ値402と等しくなるまで、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出し、ローカル高さ値404を更新し続ける。
【0061】
いくつかの実施形態では、ローカル高さ値404がリモート高さ値402以上であると決定される場合、ブリッジデバイスはブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことをやめる、または控えることができる。例えば、ローカル高さ値404がリモート高さ値402と等しい場合、ブリッジデバイスはブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことを控えることができる。
【0062】
いくつかの実施形態では、ブリッジデバイスは、チェック高さ値406がローカル高さ値404未満であるか否かを判定できる。チェック高さ値406がローカル高さ値404未満であると決定された場合、ブリッジデバイスは、ブリッジデバイス上に格納され、かつブリッジデバイスによって検証されていないブロックチェーンブロックを検証できる。例えば、
図4に参照すると、ブリッジデバイスは、ブロックチェーンブロック408aが検証されたこと、かつチェック高さ値406が2だけローカル高さ値404より小さいことを決定できる。決定に応答して、ブリッジデバイスは、ブロックチェーンブロック408b-cを引き続き検証できる。
【0063】
いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロックを検証して、ブロックチェーンブロックが信頼できるか否かを判定する。いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロックに記録されたトランザクションデータを、クライアントによってブリッジデバイスに送られたトランザクション要求に含まれるデータと比較することによって、ブロックチェーンブロックを検証する。例えば、クライアントデバイス(例えば、
図3のクライアントデバイス302)は、トランザクション要求をブリッジデバイス(例えば、
図3のブリッジデバイス304a)に送ることができ、トランザクション要求は、あるアカウントから別のアカウントへの特定の金額の資金移動を識別する。ブリッジデバイスは、ブリッジデバイス上に格納され、かつ資金移動に関連するブロックチェーントランザクションを含むブロックチェーンブロックを識別できる。ブリッジデバイスは、ブロックチェーンブロックでの資金移動に関連するブロックチェーントランザクションを、トランザクション要求に含まれるデータと比較できる。ブリッジデバイスは、移動資金の金額とブロックチェーントランザクションのアカウント情報に関連するデータがトランザクション要求のデータと一致するか否かを判定できる。データが一致すると決定された場合、ブリッジデバイスは検証されたブロックチェーンブロックが信頼できるブロックであると決定できる。
【0064】
いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロック内のブロックチェーントランザクションのハッシュ値に基づいて、ブロックチェーンブロックを検証できる。例えば、ブロックチェーンブロックは、ブロックチェーントランザクションとブロックチェーントランザクションの第1のハッシュ値を記録できる。ブリッジデバイスは、ブロックチェーントランザクションを取得し、ブロックチェーントランザクションの第2のハッシュ値を計算できる。ブリッジデバイスは、第2のハッシュ値を第1のハッシュ値と比較できる。2つのハッシュ値が一致すると決定された場合、ブリッジデバイスは、ブロックチェーンブロック内のブロックチェーントランザクションが改ざんされておらず、ブロックチェーンブロックが信頼できるブロックであると決定できる。
【0065】
いくつかの実施形態では、ブロックチェーンブロックを検証した後、ブリッジデバイスは、チェック高さ値406を更新できる。例えば、ブリッジデバイスは、ブロックチェーンブロック408bが信頼できるブロックであることを確認した後、ブリッジデバイスはチェック高さ値406を1だけ増加できる。いくつかの実施形態では、ブリッジデバイスは、チェック高さ値406がローカル高さ値404と等しくなるまで、ブリッジデバイス上に格納されたブロックチェーンブロックを検証し、チェック高さ値406を更新し続けることができる。
【0066】
いくつかの実施形態では、チェック高さ値406がローカル高さ値404以上であると決定された場合、ブリッジデバイスは、ブロックチェーンブロックの検証を停止または控えることができる。例えば、チェック高さ値406がローカル高さ値404と等しい場合、ブリッジデバイスはブリッジデバイス上に格納されたブロックチェーンブロックの検証を控えることができる。
【0067】
いくつかの実施形態では、システムエラー、異常、障害、または誤動作が発生することがある。例えば、ブリッジデバイスとブロックチェーン・ネットワーク・ノードの間の通信接続が失われることがある。いくつかの例では、ブリッジデバイス上に格納されたブロックチェーンブロックは、システム障害または誤作動により失われることがある。いくつかの実施形態では、システム障害または誤作動の検出に応答して、ブリッジデバイスはリカバリ処理を実行できる。いくつかの実施形態では、ブリッジデバイスは、チェック高さ値406に基づいてリカバリ処理を実行できる。例えば、ブリッジデバイスはローカル高さ値404をチェック高さ値406に設定できる。チェック高さ値406は、ブリッジデバイスによって検証されたブロックチェーンブロックの総数を示しているため、これらのブロックチェーンブロックは、失われたとしても、必ずしもブリッジデバイスによって再取得される必要はない。ただし、チェック高さ値406の後であり、かつローカル高さ値404の前である番号のブロックチェーンブロックは、取得されているが、検証されていない。これらのブロックチェーンブロックは、例えばシステム障害や誤作動により、エラーの影響を受けやすい、または失われる。したがって、ブリッジデバイスが検証のためにブロックチェーン・ネットワーク・ノードから未検証のブロックチェーンブロックを再取得するために、ローカル高さ値404はチェック高さ値406に設定(または削減)される。例えば、ローカル高さ値404をチェック高さ値406に設定した後、ブリッジデバイスはローカル高さ値404をリモート高さ値402と比較し、ローカル高さ値404がリモート高さ値402未満であるか否かを判定できる。ローカル高さ値404がリモート高さ値402未満であると決定された場合、ブリッジデバイスは未検証のブロックチェーンブロックをブロックチェーン・ネットワーク・ノードから再取得できる。
【0068】
いくつかの実施形態では、ブリッジデバイスは、システム全体の効率およびスループットを改善するために非同期処理を実行できる。非同期処理は、2つ以上の動作の間に処理の依存関係や時間的順序を課すことなく、2つ以上の動作を実行する方法である。非同期処理では、実行中のタスクが完了する前に、保留中のタスクが開始され得る。つまり、2つの動作が非同期に実行される場合、一方の動作の実行によって、もう一方の動作の実行がブロックされる、または一時停止されることはない。一方の動作は、もう一方の動作が完了するのを待たずに開始でき、両方の動作を同時に実行できる。したがって、2つの動作が非同期に処理されている場合、一方の動作の実行をいつ開始するかの決定は、他方の動作の実行の現在の状態から独立しており、すなわち、依存しない。
【0069】
いくつかの実施形態では、非同期処理は、様々なワークフロープロセスを同時に実行することを可能にする。例えば、非同期処理では、要求や応答などの動作は異なるセッションで送られる。要求と応答の間に処理の依存関係は存在せず、応答のタイミングについて仮定されない。動作が完了するまでプロセスをブロックまたは一時停止する同期動作とは異なり、非同期動作は非ブロックであり、プロセスをブロックまたは一時停止せずに動作を開始する。実行中のタスクが完了した後に保留中のタスクが開始される同期処理と比較して、非同期処理では、実行中のタスクが完了する前に保留中のタスクを開始できる。
【0070】
いくつかの実施形態では、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出し、ブリッジデバイスに格納されたブロックチェーンブロックを検証する際に非同期処理を実行できる。いくつかの実施形態では、3つのカーソル値を導入および監視して、ブリッジデバイスにおいて、処理を調整または制御することにより、検証動作を取り出し動作と非同期に実行することができ、したがって、ブリッジは取り出し動作が完了するのを待つことから解放される。例えば、検証動作は、カーソル値のそれぞれの条件が満たされている限り、取り出し動作に対して独立して実行され得る。例えば、チェック高さ値がローカル高さ値未満の場合は検証動作を実行でき、ローカル高さ値がリモート高さ値未満の場合は取り出し動作を実行できる。2つの動作間の処理の依存関係をなくすことにより、ブリッジデバイスは2つの動作を分離し、より効率的に2つの動作を実行し、システムスループットを向上させることができる。
【0071】
いくつかの実施形態では、ブリッジデバイスは、マルチスレッド処理能力を活用して、ブリッジデバイスの機能を実行するために1つまたは複数の独立したスレッドを使用できる。スレッドは通常、プロセッサが命令のストリームを実行するために必要な情報を含む実行コンテキストである。例えば、スレッドには一連のプログラムされた命令を含めることができ、親プロセスとは独立してプロセッサによってスケジュールおよび実行されるように設計されている。1つのプロセスのコンテキスト内に複数のスレッドが存在できるようにする一方で、マルチスレッドにより、スレッドがプロセスのリソースを共有し、独立して実行できるようにすることもできる。例えば、1つのプロセス内に複数のスレッドが存在し、同時に実行され、メモリなどのリソースを共有できる。プロセスのスレッドは、実行可能コードと、動的に割り当てられた変数および非スレッドローカルグローバル変数の値を任意の所与の時間に共有する。マルチスレッドは、非同期処理と並列実行を可能にする方法の一例である。
【0072】
いくつかの実施形態では、ブリッジデバイスは、異なるスレッドのセットを使用して非同期動作および並列実行を実行して、ブロックチェーンブロックの取り出しおよび検証を別々に実行することができ、これにより、システム全体の効率およびスループットを向上させることができる。実施形態の例として、ブリッジデバイスは、ブリッジデバイスの第1のセットのスレッドを使用してブロックチェーン・ネットワーク・ノードから第1のセットのブロックチェーンブロックを取り出すことができる。第1のセットのスレッドは、複数のスレッドを含み、各スレッドが、ブロックチェーン・ネットワーク・ノードから第1のセットのブロックチェーンブロックの1つのブロックチェーンブロックを独立して取り出すために使用され得る。ブリッジデバイスは、ブリッジデバイスの第2のセットのスレッドを使用して、ブリッジデバイスに格納された第2のセットのブロックチェーンブロックを検証できる。第2のセットのスレッドは、複数のスレッドを含み、各スレッドが、ブリッジデバイスに格納された第2のセットのブロックチェーンブロックの1つのブロックチェーンブロックを独立して検証するために使用され得る。
【0073】
別の例として、ブリッジデバイスは、クライアントデバイスとブロックチェーンネットワークとの間の通信をブリッジするために第1のスレッドを使用できる。特定の例として、ブリッジデバイス(例えば、
図3のブリッジデバイス304a)は、第1のスレッドを使用して、クライアントデバイス(例えば、
図3のクライアントデバイス302)からトランザクション要求を受け取り、トランザクション要求をブロックチェーン・ネットワーク・ノード(例えば、
図3のブロックチェーン・ネットワーク・ノード306)に提出し、トランザクションを実行し得るブロックチェーン・ネットワーク・ノードから実行結果の通知を受け取ることができる。いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンネットワークから1つまたは複数のブロックチェーンブロックを取得するために第2のスレッドを使用できる。いくつかの実施形態では、ブリッジデバイスは、ブリッジデバイスで取得されたブロックチェーンブロックを検証するために第3のスレッドを使用できる。いくつかの実施形態では、ブリッジデバイスは、追加のまたは異なるスレッドを使用し、異なるタスクを複数のスレッドに割り当てることができる。いくつかの実施形態では、1つまたは複数の独立したスレッドは、ブリッジデバイスの1つまたは複数のプロセッサによって独立してまたは並列に実行できる。
【0074】
いくつかの実施形態では、1つまたは複数の独立したスレッドは、3つのカーソル値にアクセスおよび/または更新して、ブリッジデバイスの処理と、クライアントデバイスおよびブロックチェーンネットワークの間の通信とを調整または制御できる。いくつかの実施形態では、いくつかのスレッドは、3つのカーソル値のそれぞれにアクセスする権限を有し得るが、更新する権限はない。
【0075】
例えば、いくつかの実施形態では、第1のスレッドを使用して、例えば、ブロックチェーン・ネットワーク・ノードから受け取った通知(例えば、新しいブロック通知)に基づいて、リモート高さ値402を更新できる。他のスレッドは、リモート高さ値402にアクセスする権限はあるが、更新する権限はない。例えば、ブロックチェーンネットワークから1つまたは複数のブロックチェーンブロックを取得する前に、第2のスレッドはリモート高さ値402を取得し、ローカル高さ値404をリモート高さ値402と比較して、ローカル高さ値404がリモート高さ値402未満であるか否かを判定できる。ローカル高さ値404がリモート高さ値402未満である場合、第2のスレッドはブロックチェーンネットワークから1つまたは複数のブロックチェーンブロックを取得できる。いくつかの実施形態では、第2のスレッドを使用してローカル高さ値404を更新できるが、他のスレッドは、ローカル高さ値404にアクセスすることはできるが、更新することはできない。例えば、いくつかの実施形態では、ブリッジデバイスで得られたブロックチェーンブロックを検証する前に、ブリッジデバイスは、第3のスレッドを使用してローカル高さ値404にアクセスし、チェック高さ値406をローカル高さ値404と比較し、チェック高さ値406がローカル高さ値404未満であるか否かを判定できる。チェック高さ値406がローカル高さ値404未満である場合、第3のスレッドはブリッジデバイスで取得したブロックチェーンブロックの検証に進む。いくつかの実施形態では、第3のスレッドを使用してチェック高さ値406を更新できるが、他のスレッドは、チェック高さ値406にアクセスする権限はあるが、チェック高さ値406を更新する権限はない。
【0076】
図5は、本明細書の実施形態に従って実行できるプロセス500の例を示す信号フローである。信号フローは、ブロックチェーンブロックの非同期処理のためのプロセス500を表し、これは、例えば、ブロックチェーンベースのフォールトトレラントシステムを実装するために使用され得る。便宜上、このプロセスは、1つまたは複数のコンピュータのシステムによって実行され、1つまたは複数の位置に配置され、本明細書に従って適切にプログラムされるものとして説明される。例えば、適切にプログラムされたブロックチェーンデータ処理システム(例えば、
図3のシステム300)は、プロセスを実行できる。
【0077】
510において、ブリッジデバイス504(例えば、
図3のブリッジデバイス304a)は、ブリッジデバイス504のデータストア(例えば、メモリ)に3つのカーソル値を維持する。例えば、ブリッジデバイス504は、3つのカーソル値を3つのカウンタとして維持できる。いくつかの実施形態では、3つのカーソル値を維持することは、3つのカーソル値を格納および更新することを含み得る。いくつかの実施形態では、3つのカーソル値は、ブロックチェーン・ネットワーク・ノード506(例えば、
図3のブロックチェーン・ネットワーク・ノード306)上に格納されたブロックチェーンブロックの数を示すリモート高さ値(例えば、
図4のリモート高さ値402)、ブリッジデバイス504上に格納されたブロックチェーンブロックの数を示すローカル高さ値(
図4のローカル高さ値404)、およびにブリッジデバイス504によって検証されたブロックチェーンブロックの数を示すチェック高さ値(例えば、
図4のチェック高さ値406)を含むことができる。
【0078】
512において、クライアントデバイス502(例えば、
図3のクライアントデバイス302)は、トランザクション要求をブリッジデバイス504に送る。例えば、クライアントデバイス502は、ブリッジデバイス504のAPIを使用して、資金移動要求をブリッジデバイス504に送ることができる。資金移動要求は、第1のアカウント(例えば、クライアントデバイス502に関連付けられたブロックチェーンアカウント)から第2のアカウント(例えば、別のクライアントデバイスに関連付けられたブロックチェーンアカウント)に転送されるべき資金の量を識別できる。
【0079】
514において、ブリッジデバイス504は、トランザクション要求をブロックチェーン・ネットワーク・ノード506に転送する。例えば、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506上で実行されているスマートコントラクトにコントラクトコールを行い、トランザクション要求をブロックチェーントランザクションとしてブロックチェーン・ネットワーク・ノード506に提出できる。いくつかの実施形態では、ブリッジデバイス504は、クライアントデバイス502がブロックチェーン・ネットワーク・ノード506にアクセスする権限を有するか否かを判定できる。例えば、ブリッジデバイス504は、公開鍵を使用して、トランザクション要求に含まれるクライアントデバイス502のデジタル署名を検証できる。
【0080】
516において、ブリッジデバイス504からブロックチェーントランザクションを受け取った後、ブロックチェーン・ネットワーク・ノード506は、ブロックチェーントランザクションに基づいて新しいブロックチェーンブロックを生成してよい。例えば、ブロックチェーン・ネットワーク・ノード506は、ブロックチェーンネットワークの多数のコンセンサスノード間のブロックチェーントランザクションについてコンセンサス手順(例えば、PBFTコンセンサス)を開始できる。いくつかの実施形態では、コンセンサスノード間でコンセンサスに達したと決定された後、および/またはブロックチェーントランザクションが実行された後、新しいブロックチェーンブロックが生成され、ブロックチェーン・ネットワーク・ノード506上に格納されたブロックチェーンに追加され得る。
【0081】
518において、ブロックチェーン・ネットワーク・ノード506は、ブリッジデバイス504に通知を送る。いくつかの実施形態では、通知は、ブロックチェーン・ネットワーク・ノード506上に格納されたブロックチェーンブロックの数を示すリモート高さ値を示すことができる。例えば、通知がリモート高さ値を含むことができる。別の例として、通知は、新しいブロックがブロックチェーン・ネットワーク・ノード506のブロックチェーンに追加されたことを示す新しいブロック通知を含むことができる。
【0082】
いくつかの実施形態では、ブリッジデバイス504は、プッシュモードまたはプルモードでブロックチェーン・ネットワーク・ノード506から通知を受け取ることができる。例えば、ブリッジデバイス504またはクライアントデバイス502は、ブロックチェーン・ネットワーク・ノード506のブロックチェーンブロックを購読でき、ブロックチェーン・ネットワーク・ノード506はサブスクリプションに基づいて通知をブリッジデバイス504に定期的に、または新しいブロックがブロックチェーン・ネットワーク・ノード506のブロックチェーンに追加された後に動的にプッシュできる。いくつかの実施形態では、ブリッジデバイス504は、例えば、通知の要求をブロックチェーン・ネットワーク・ノード506に送ることによって、ブロックチェーンの情報をブロックチェーン・ネットワーク・ノード506からプルできる。
【0083】
520において、ブロックチェーン・ネットワーク・ノード506からの通知を受け取った後、ブリッジデバイス504は、ローカル高さ値をリモート高さ値と比較する。いくつかの実施形態では、通知がリモート高さ値を含む場合、ブリッジデバイス504は、ブリッジデバイス504のデータストアに格納されたリモート高さ値を更新できる。いくつかの実施形態では、通知が、新しいブロックがブロックチェーン・ネットワーク・ノード506のブロックチェーンに追加されたことを示す新しいブロック通知を含む場合、ブリッジデバイス504は、例えば、リモート高さ値を1だけまたは別の単位だけ増やすことによって、格納されたリモート高さ値を更新できる。
【0084】
いくつかの実施形態では、ブリッジデバイス504は、ローカル高さ値がリモート高さ値未満であるか否かを判定する。ローカル高さ値がリモート高さ値未満であると決定された場合、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506からブロックチェーンブロックを取り出すことができる。ローカル高さ値がリモート高さ値以上であると決定された場合、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506からのブロックチェーンブロックの取り出しを控えることができる。
【0085】
522において、ローカル高さ値がリモート高さ値未満であると決定した後、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506から1つまたは複数のブロックチェーンブロックを取り出す。いくつかの実施形態では、ブリッジデバイス504は、ブリッジデバイス504上に格納されていない1つまたは複数のブロックチェーンブロックをブロックチェーン・ネットワーク・ノード506から取り出すことができる。例えば、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506から1つまたは複数のブロックチェーンブロックを取り出すことができ、1つまたは複数のブロックチェーンブロックは、ブロックチェーン・ネットワーク・ノード506上に格納され、ブリッジデバイス504によって取得された最新のブロックチェーンブロックに続くものである。例えば、1つまたは複数のブロックチェーンブロックは、ローカル高さ値によって示される数のブロックチェーンブロックにおける最新のブロックチェーンブロックの後にある。いくつかの実施形態では、ブリッジデバイス504は、プッシュモードまたはプルモードでブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことができる。いくつかの実施形態では、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506からブロックチェーンブロックを取り出した後、ローカル高さ値を更新できる。いくつかの実施形態では、ブリッジデバイス504は、ローカル高さ値がリモート高さ値と等しくなるまで、ブロックチェーン・ネットワーク・ノード506からブロックチェーンブロックを取り出し続け、ローカル高さ値を更新し続けることができる。いくつかの実施形態では、ローカル高さ値がリモート高さ値に等しい場合、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506からのブロックチェーンブロックの取り出しを停止または控えることができる。
【0086】
524において、ブリッジデバイス504は、チェック高さ値をローカル高さ値と比較する。いくつかの実施形態では、ブリッジデバイス504は、チェック高さ値がローカル高さ値未満であるか否かを判定できる。チェック高さ値がローカル高さ値未満であると決定された場合、ブリッジデバイス504は、ブリッジデバイス上に格納され、ブリッジデバイス504によって検証されていないブロックチェーンブロックを検証できる。チェック高さ値がローカル高さ値以上であると決定された場合、ブリッジデバイス504は、ブリッジデバイス504上に格納されたブロックチェーンブロックの検証を控えることができる。
【0087】
526において、チェック高さ値がローカル高さ値未満であると決定した後、ブリッジデバイス504は、ブリッジデバイス504上に格納されたブロックチェーンブロックを検証して、ブロックチェーンブロックが信頼できるか否かを判定する。いくつかの実施形態では、ブリッジデバイス504は、ブリッジデバイス504上に格納され、かつブリッジデバイス504によって検証されていないブロックチェーンブロックを検証する。例えば、ブリッジデバイス504は、ブリッジデバイス504によって検証され、チェック高さ値によって示される数のブロックチェーンブロックに続くブロックチェーンブロックを検証できる。いくつかの実施形態では、ブリッジデバイス504は、ブロックチェーンブロックに記録されたトランザクションデータを、クライアントデバイス502によってブリッジデバイス504に送られたトランザクション要求に含まれるデータと比較することによって、ブロックチェーンブロックを検証できる。例えば、トランザクション要求は、あるブロックチェーンアカウントから別のブロックチェーンアカウントに移動されるべき特定の金額の資金を特定できる。ブリッジデバイス504は、ブリッジデバイス504上に格納され、かつ資金移動に関連するブロックチェーントランザクションを含むブロックチェーンブロックを識別できる。ブリッジデバイス504は、資金移動に関連するブロックチェーントランザクションデータを、トランザクション要求に含まれるデータと比較できる。ブリッジデバイスは、送金された資金の金額に関連するデータとブロックチェーンブロック内のアカウント情報が一致するか否か、またはトランザクション要求内のデータと一致するか否かを判定できる。それらが一致していると決定された場合、ブリッジデバイスは、検証されたブロックチェーンブロックが信頼できるブロックチェーンブロックであると決定できる。
【0088】
いくつかの実施形態では、ブリッジデバイス504は、ブロックチェーンブロック内のブロックチェーントランザクションのハッシュ値に基づいてブロックチェーンブロックを検証できる。例えば、ブロックチェーンブロックには、ブロックチェーントランザクションとブロックチェーントランザクションの第1のハッシュ値を含めることができる。ブリッジデバイス504は、ブロックチェーンブロックからブロックチェーントランザクションを取得し、ブロックチェーントランザクションの第2のハッシュ値を計算できる。ブリッジデバイス504は、第2のハッシュ値を第1のハッシュ値と比較できる。2つのハッシュ値が一致すると決定された場合、ブリッジデバイス504は、ブロックチェーンブロック内のブロックチェーントランザクションデータが改ざんされておらず、ブロックチェーンブロックが信頼できるブロックチェーンブロックであると決定できる。
【0089】
いくつかの実施形態では、ブロックチェーンブロックを検証した後、ブリッジデバイス504はチェック高さ値を更新できる。例えば、ブリッジデバイス504は、ブロックチェーンブロックが信頼できるブロックであることを確認した後、ブリッジデバイス504は、例えば、1だけまたは別の単位だけチェック高さ値を増加させることができる。いくつかの実施形態では、ブリッジデバイスは、チェック高さ値がローカル高さ値と等しくなるまで、ブリッジデバイス上に格納されたブロックチェーンブロックを検証し、チェック高さ値を更新し続けることができる。いくつかの実施形態では、チェック高さ値がローカル高さ値に等しい場合、ブリッジデバイス504は、ブリッジデバイス504上に格納されたブロックチェーンブロックを検証することを控えることができる。
【0090】
528において、ブリッジデバイス504は、システム障害を検出する。いくつかの実施形態では、システム障害は、ソフトウェアのバグおよびエラー、ハードディスク障害、入力または出力デバイス障害、または他の一時的または永続的な障害を含み得る。いくつかの実施形態では、システム障害により、ブリッジデバイス504とブロックチェーン・ネットワーク・ノード506との間の通信接続が失われるか、または中断される。いくつかの例では、ブリッジデバイス504上に格納されたブロックチェーンブロックは、システム障害のために危険にさらさる、または失われることがある。いくつかの実施形態では、リモート高さ値、ローカル高さ値、およびチェック高さ値は、システム障害にもかかわらずこれらのカーソル値が維持され得るように、ブリッジデバイス504の不揮発性記憶媒体に記憶される。
【0091】
530において、システム障害を検出した後、ブリッジデバイス504はリカバリ処理を実行する。いくつかの実施形態では、ブリッジデバイス504は、チェック高さ値に基づいてリカバリ処理を実行できる。いくつかの実施形態では、ブリッジデバイス504は、ローカル高さ値をチェック高さ値に設定できる。チェック高さ値は、ブリッジデバイス504によって検証されたブロックチェーンブロックの数を示しているため、これらのブロックチェーンブロックは、失われたとしても、必ずしもブリッジデバイス504によって再取得される必要はない。ただし、チェック高さ値406で示される最新のブロックチェーンブロックに続く、かつローカル高さ値404で示される最新のブロックチェーンブロックに先行するブロックチェーンブロックが取得されているが、ブリッジデバイス504によって検証されていない。これらのブロックチェーンブロックは、システム障害などが原因で、エラーの影響を受けやすいか失われる。したがって、検証のためにブロックチェーン・ネットワーク・ノード506から未検証のブロックチェーンブロックを再取得するために、ローカル高さ値はチェック高さ値に設定(または低減)され得る。例えば、ローカル高さ値をチェック高さ値に設定した後、ブリッジデバイス504はローカル高さ値をリモート高さ値と比較し、ローカル高さ値がリモート高さ値未満であるか否かを判定できる。ローカル高さ値がリモート高さ値未満であると決定された場合、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506から未検証のブロックチェーンブロックを再取得できる。ブリッジデバイス504は、チェック高さ値がローカル高さ値に達するまで、再取得された未検証のブロックチェーンブロックを検証し続けることができる。
【0092】
いくつかの実施形態では、上記のように、3つのカーソル値へのアクセスおよび/または更新、ブロックチェーンブロックの取得、取得されたブロックチェーンブロックの検証などにおいて、複数の独立したスレッドをブリッジデバイス504が使用できる。いくつかの実施形態では、プロセス500のいくつかの動作(例えば、動作522、526、および528)は、別の順序で、または並列に実行できる。例えば、526での検証動作は、カーソル値のそれぞれの条件が満たされている限り、524での取り出し動作に対して独立して実行できる。例えば、特定の時点で、チェック高さ値がローカル高さ値未満であると決定された場合、526での検証動作は、522での取り出し動作の前に開始できる。526での検証動作は、522での取り出し動作が完了するのを待たずに実行できる。同様に、ローカル高さ値がリモート高さ値未満であると決定される限り、522での取り出し動作は、526での検証動作が完了するのを待つことなく開始できる。プロセス500は継続でき、さらに追加のまたは異なる動作を含むことができる。例えば、ブリッジデバイス504は、トランザクション要求の実行結果をクライアントデバイス502、例えば、SPIに返すことができる。いくつかの実施形態では、プロセス500は、上述のプロセスの追加のまたは異なる反復を含むことができる。
【0093】
上述のように、ブリッジデバイス504は、リモート高さ値とブロックチェーンネットワークとの同期を維持するために、ブロックチェーン・ネットワーク・ノード506から受け取った新しいブロック通知を介してリモート高さ値を更新する。いくつかの実施形態では、ブリッジデバイス504は、ブロックチェーン・ネットワーク・ノード506からブロックチェーンブロックを取り出すことによってローカル高さ値を連続的に更新する。いくつかの実施形態では、ブリッジデバイス504は、ブロックチェーンブロックを検証し、チェック高さ値を更新する。いくつかの実施形態では、3つのカーソル値は、関係:チェック高さ値 ≦ ローカル高さ値 ≦ リモート高さ値を満たす。
【0094】
いくつかの実施形態では、リモート高さ値の更新は、ブリッジデバイス504がブロックチェーン・ネットワーク・ノード506から受け取る通知に関連する。いくつかの実施形態では、通知は、ブロックチェーン・ネットワーク・ノード506上に格納されたブロックチェーンに新しいブロックが追加されたことを示す新しいブロック通知を含む。リモート高さ値は新しいブロック通知に基づいてブリッジデバイス504で連続的にインクリメントされるので、リモート高さ値の更新と
ブロックチェーン・ネットワーク・ノード506の動作は同期が保たれる。いくつかの実施形態では、ブリッジデバイス504は、ローカル高さ値とリモート高さ値との間の比較に基づいてブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことによって、ブロックチェーンブロックをブロックチェーン・ネットワーク・ノード506と同期する。いくつかの実施形態では、ブリッジデバイス504によって同期され、ブリッジデバイス504上に格納されたブロックチェーンブロックが、ローカル高さ値によって示される。いくつかの実施形態では、ブロック同期プロセス中にブリッジデバイス504によって取得されたブロックチェーンブロック内のブロックチェーントランザクションデータは、ブリッジデバイス504の検証プロセスをトリガする。ブリッジデバイス504がブロックチェーンブロック内のブロックチェーントランザクションデータを検証した後、ブロックチェーンブロックは信頼できるブロックと見なされ得る。ブリッジデバイス504によって検証されたブロックチェーンブロックは、チェック高さ値によって示される。
【0095】
いくつかの実施形態では、チェック高さ値は連続的にインクリメントし(例えば、毎回1ずつ増加する)、これは、チェック高さ値未満である(またはより小さい)ブロックチェーンブロック内のブロックチェーントランザクションがブリッジデバイス504によって完全に処理されたことを保証する。いくつかの実施形態では、ブリッジデバイス504のリカバリ処理は、システム障害または誤作動が発生したときにチェック高さ値から開始できる。いくつかの実施形態では、ブリッジデバイス504内のブロックデータが失われるかまたは危険にさらされたとしても、失われたまたは危険にさらされたブロックデータは、ローカル高さ値をチェック高さ値にリセットし、ブロックチェーン・ネットワーク・ノード506からのブロック通知を監視してリモート高さ値を更新することによって、リカバリされ得る。
【0096】
図6Aは、本明細書の実施形態に従って実行され得るブロックチェーンベースのフォールトトレラントシステムを実装するためのプロセス600の例を示すフローチャートである。プロセス600は、
図5のプロセス500のコンテキストにおいて、ブロックチェーンベースのフォールトトレラントシステムによって実行されるプロセスであり得る。便宜上、プロセス600は、1つまたは複数のコンピュータのシステムによって実行され、1つまたは複数の位置に配置され、本明細書に従って適切にプログラムされるものとして説明される。例えば、適切にプログラムされたブロックチェーンデータ処理システム(例えば、
図3のシステム300)は、プロセス600を実行できる。
【0097】
602において、ブリッジデバイス(例えば、
図3のブリッジデバイス304a、または
図5のブリッジデバイス504)は、例えば、ブリッジデバイスの第1のセットのスレッドを使用して、ブロックチェーン・ネットワーク・ノード(例えば、
図3のブロックチェーン・ネットワーク・ノード306)から第1のセットのブロックチェーンブロックを取り出す。例えば、第1のセットのブロックチェーンブロックは、複数のブロックチェーンブロック(例えば、第1のブロックチェーンブロックおよび第2のブロックチェーンブロック)を含むことができ、第1のセットのスレッドは複数のスレッド(例えば、第1のスレッドおよび第2のスレッド)を含むことができる。ブリッジデバイスは、第1のスレッドと第2のスレッドを使用して、第1のブロックチェーンブロックと第2のブロックチェーンブロックをそれぞれ並列に取り出すことができる。
【0098】
604において、ブリッジデバイスは、第1のセットのブロックチェーンブロックをブリッジデバイスに格納する。例えば、ブリッジデバイスは、第1のブロックチェーンブロックおよび第2のブロックチェーンブロックをブリッジデバイスのメモリに格納できる。いくつかの実施形態では、ブリッジデバイスは、第1のセットのブロックチェーンブロックに加えて第2のセットのブロックチェーンブロックを格納できる。例えば、第2のセットのブロックチェーンブロックは、第1のセットのブロックチェーンブロックよりも早い時間にブロックチェーン・ネットワーク・ノードからブリッジデバイスによって取り出され得る。
【0099】
606において、ブリッジデバイスは、例えば、ブリッジデバイスの第2のセットのスレッドを使用して、ブリッジデバイスに格納された第2のセットのブロックチェーンブロックを検証する。いくつかの実施形態では、第2のセットのブロックチェーンブロックは、複数のブロックチェーンブロック(例えば、第3のブロックチェーンブロックおよび第4のブロックチェーンブロック)を含むことができ、第2のセットのスレッドは、複数のスレッド(例えば、第3のスレッドおよび第4のスレッド)を含むことができる。ブリッジデバイスは、第3のスレッドと第4のスレッドを使用して、第3のブロックチェーンブロックと第4のブロックチェーンブロックをそれぞれ並列に検証できる。
【0100】
いくつかの実施形態では、ブリッジデバイスは、第1のセットのスレッドおよび第2のセットのスレッドを使用して、第1のセットのブロックチェーンブロックを取り出すこと、および第2のセットのブロックチェーンブロックを検証することを非同期的に実行する。前述のように、2つの動作が非同期的に実行される場合、一方の動作の実行によって、もう一方の動作の実行がブロックまたは一時停止されることはない。一方の動作は、もう一方の動作が完了するのを待たずに開始でき、両方の動作を同時に実行できる。例えば、ブリッジデバイスは、第1のセットのブロックチェーンブロックを取り出し、並行して第2のセットのブロックチェーンブロックを検証できる。ブリッジデバイスは、第1のセットのスレッドを使用して第1のセットのブロックチェーンブロックを取り出す一方、第2のセットのスレッドを使用して第2のセットのブロックチェーンブロックを検証できる。
【0101】
図6Bは、ブロックチェーンブロックの非同期処理のためのプロセス650を示すフローチャートであり、これは、例えば、本明細書の実施形態に従って実行され得るブロックチェーンベースのフォールトトレラントシステムを実装するために使用され得る。プロセス650は、プロセス600の実施形態の一例であり得る。
【0102】
608において、ブリッジデバイス(例えば、
図3のブリッジデバイス304a、または
図5のブリッジデバイス504)は、ブリッジデバイスのデータストア(例えば、不揮発性記憶媒体)内に、リモート高さ値(例えば、
図4のリモート高さ値402)、ローカル高さ値(例えば、
図4のローカル高さ値404)、およびチェック高さ値(例えば、チェック高さ値406)を維持する。いくつかの実施形態では、リモート高さ値は、ブリッジデバイスに通信可能にリンクされたブロックチェーン・ネットワーク・ノード(例えば、
図3のブロックチェーン・ネットワーク・ノード306、または
図5のブロックチェーン・ネットワーク・ノード506)に格納されたブロックチェーンブロックの数を示す。ローカル高さ値は、ブリッジデバイスに格納されたブロックチェーンブロックの数を示す。チェック高さ値は、ブリッジデバイスによって検証されたブロックチェーンブロックの数を示す。いくつかの実施形態では、ブロックチェーン・ネットワーク・ノードは、ブロックチェーンネットワークのコンセンサスノードである。
【0103】
610において、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードから通知を受け取る。いくつかの実施形態では、通知はリモート高さ値を示す。いくつかの実施形態では、通知は、新しいブロックがブロックチェーンネットワークのブロックチェーンに追加されたことを示す新しいブロック通知を含む。いくつかの実施形態では、新しいブロック通知は、リモート高さ値が特定の値だけ増加された(例えば、1だけ増加された)ことを示す。
【0104】
いくつかの実施形態では、ブリッジデバイスは、プッシュモードまたはプルモードでブロックチェーン・ネットワーク・ノードから通知を受け取ることできる。例えば、ブロックチェーン・ネットワーク・ノードは、新しいブロックチェーンブロックの生成に応答して、ブリッジデバイスおよび/またはクライアントデバイスのサブスクリプションに基づいて、定期的または動的に通知をブリッジデバイスにプッシュできる。別の例として、ブリッジデバイスは、通知の要求をブロックチェーン・ネットワーク・ノードに送ることによって、ブロックチェーン・ネットワーク・ノードから通知をプルできる。
【0105】
いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンネットワーク上で実行されるべきトランザクションを要求するクライアントデバイス(例えば、
図3のクライアントデバイス302、または
図5のクライアントデバイス502)からトランザクション要求を受け取ることができる。ブリッジデバイスはトランザクション要求をブロックチェーン・ネットワーク・ノードに転送できる。ブロックチェーン・ネットワーク・ノードは第2の通知をブリッジデバイスに送ることができる。第2の通知は更新されたリモート高さ値を示すことができ、更新されたリモート高さ値は、トランザクションに基づいてブロックチェーン・ネットワーク・ノードに格納されたブロックチェーンブロックの数の増加を示すことができる。
【0106】
612において、ブリッジデバイスは、ローカル高さ値がリモート高さ値未満であるか否かを判定する。いくつかの実施形態では、ローカル高さ値がリモート高さ値未満であると決定された場合、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことができる。ローカル高さ値がリモート高さ値以上であると決定された場合、ブリッジデバイス504はブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことを控えることができる。
【0107】
614において、ローカル高さ値がリモート高さ値未満であるとの決定に応答して、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからブリッジデバイスに格納されていない少なくとも1つのブロックチェーンブロックを取得する。例えば、ブリッジデバイスはブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出すことができ、ブロックチェーンブロックは、ブリッジデバイスに格納され、ローカル高さ値によって示される数のブロックチェーンブロックにおける最新のブロックチェーンブロックに続くものである。いくつかの実施形態では、ブロックチェーン・ネットワーク・ノードから少なくとも1つのブロックチェーンブロックを取得したことに応答して、ブリッジデバイスは、少なくとも1つのブロックチェーンブロックをブリッジデバイスに格納し、ローカル高さ値を更新できる。いくつかの実施形態では、ブリッジデバイスは、ローカル高さ値がリモート高さ値と等しくなるまで、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取り出し、ローカル高さ値を更新し続けることができる。
【0108】
616において、ローカル高さ値がリモート高さ値以上であるとの決定に応答して、ブリッジデバイスは、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取得することを控える。例えば、ローカル高さ値がリモート高さ値と等しい場合、ブリッジデバイスはブロックチェーン・ネットワーク・ノードからのブロックチェーンブロックの取り出しを停止または控えることができる。
【0109】
618において、ブリッジデバイスは、チェック高さ値がローカル高さ値未満であるか否かを判定する。いくつかの実施形態では、チェック高さ値がローカル高さ値未満であると決定された場合、ブリッジデバイスは、ブリッジデバイスに格納された、ブリッジデバイスによって検証されていないブロックチェーンブロックを検証できる。チェック高さ値がローカル高さ値以上であると決定された場合、ブリッジデバイスは、ブリッジデバイスに格納されたブロックチェーンブロックの検証を控えることができる。
【0110】
620において、チェック高さ値がローカル高さ値未満であるとの決定に応答して、ブリッジデバイスは、ブリッジデバイスに格納された、ブリッジデバイスによって検証されていないブロックチェーンブロックを検証する。いくつかの実施形態では、検証は、ブロックチェーンブロック内の1つまたは複数のブロックチェーントランザクションとトランザクション要求との間の求めることを含むことができる。いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロックに記録されたトランザクションデータを、クライアントデバイスによってブリッジデバイスに送られたトランザクション要求に含まれるデータと比較することによって、ブロックチェーンブロックを検証できる。
【0111】
いくつかの実施形態では、ブリッジデバイスは、ブロックチェーンブロック内のブロックチェーントランザクションのハッシュ値に基づいて、ブロックチェーンブロックをさらに検証できる。例えば、ブロックチェーンブロックは、ブロックチェーントランザクションとブロックチェーントランザクションの第1のハッシュ値を記録できる。ブリッジデバイスは、ブロックチェーントランザクションを取得し、ブロックチェーントランザクションの第2のハッシュ値を計算できる。ブリッジデバイスは、第2のハッシュ値を第1のハッシュ値と比較できる。2つのハッシュ値が一致すると決定された場合、ブリッジデバイスは、ブロックチェーンブロック内のブロックチェーントランザクションが改ざんされておらず、ブロックチェーンブロックが信頼できるブロックであると決定できる。
【0112】
いくつかの実施形態では、ブロックチェーンブロックの検証に応答して、ブリッジデバイスは、ブロックチェーンブロックが信頼できると決定し、チェック高さ値を更新できる。いくつかの実施形態では、ブリッジデバイスは、チェック高さ値がローカル高さ値と等しくなるまで、ブリッジデバイスに格納されたブロックチェーンブロックを検証し、チェック高さ値を更新し続けることができる。
【0113】
622において、チェック高さ値がローカル高さ値以上であるとの決定に応答して、ブリッジデバイスは、ブリッジデバイスに格納されたブロックチェーンブロックを検証することを控える。例えば、チェック高さ値がローカル高さ値に等しい場合、ブリッジデバイス504は、ブリッジデバイス504に格納されたブロックチェーンブロックを検証することを控えることができる。
【0114】
624において、システム障害が検出される。いくつかの実施形態では、システム障害は、ソフトウェアのバグおよびエラー、ハードディスク障害、入力または出力デバイス障害、または他の一時的または永続的な障害を含み得る。いくつかの実施形態では、システム障害により、ブリッジデバイスとブロックチェーン・ネットワーク・ノードとの間の通信接続が失われることがある。いくつかの例では、ブリッジデバイスに格納されたブロックチェーンブロックは、システム障害のために危険にさらされるか、あるいは失われることがある。
【0115】
626において、ブリッジデバイスは、システム障害の検出に応答してリカバリ処理を実行する。いくつかの実施形態では、ブリッジデバイスは、ローカル高さ値をチェック高さ値に設定できる。ローカル高さ値がリモート高さ値未満であると決定した場合、ブリッジデバイスは、ブリッジデバイスによって検証され、チェック高さ値によって示された数のブロックチェーンブロックにおける最新のブロックチェーンブロックに続く少なくとも1つのブロックチェーンブロックを取得できる。
【0116】
いくつかの実施形態では、リカバリ処理中および/またはリカバリ処理後、ブリッジデバイスは、3つのカーソル値を維持するために
608に戻り、プロセス650を継続できる。いくつかの実施形態では、
図4および5に関して説明されたように、プロセス650は、ブリッジデバイスの1つまたは複数の独立したスレッドによって実行され得、これによりブリッジデバイスの処理速度および柔軟性を改善し、ブリッジデバイスによって格納され、かつクライアントデバイスとブロックチェーン・ネットワーク・ノードの間で通信されるデータのセキュリティと信頼性を高めるために、フォールトトレランスを提供するとともにブロック関連の処理の順序付けられた実行を維持しながら、クライアントデバイスとブロックチェーン・ネットワーク・ノードとの間の通信のスループットを向上させることができる。
【0117】
図7は、本明細書の実施形態による装置700のモジュールの例の図である。装置700は、ブリッジデバイス(例えば、
図3のブリッジデバイス304a、または
図5のブリッジデバイス504)の実施形態の一例であり得る。装置700は、上述の実施形態に対応することができ、装置700は、ブリッジデバイスの第1のセットのスレッドを使用してブロックチェーン・ネットワーク・ノードから第1のセットのブロックチェーンブロックを取り出す取り出しモジュール702と、第1のセットのブロックチェーンブロックをブリッジデバイスに格納する格納モジュール704と、ブリッジデバイスの第2のセットのスレッドを使用してブリッジデバイスに格納された第2のセットのブロックチェーンブロックを検証する検証モジュール706とを備え、第1のセットのスレッドは第2のセットのスレッドとは異なり、第1のセットのブロックチェーンブロックを取り出すことおよび第2のセットのブロックチェーンブロックを検証することは、第1のセットのスレッドおよび第2のセットのスレッドを使用して非同期的に実行される。
【0118】
いくつかの実施形態では、第1のセットのブロックチェーンブロックは第1のブロックチェーンブロックおよび第2のブロックチェーンブロックを含み、第1のセットのスレッドは第1のスレッドおよび第2のスレッドを含み、ブリッジデバイスの第1のセットのスレッドを使用してブロックチェーン・ネットワーク・ノードから第1のセットのブロックチェーンブロックを取り出すことは、ブリッジデバイスの第2のスレッドを使用してブロックチェーン・ネットワーク・ノードから第2のブロックチェーンブロックを取り出すのと並列に、ブリッジデバイスの第1のスレッドを使用してブロックチェーン・ネットワーク・ノードから第1のブロックチェーンブロックを取り出すことを含む。
【0119】
いくつかの実施形態では、第2のセットのブロックチェーンブロックは第3のブロックチェーンブロックおよび第4のブロックチェーンブロックを含み、第2のセットのスレッドは第3のスレッドおよび第4のスレッドを含み、ブリッジデバイスの第2のセットのスレッドを使用してブリッジデバイスに格納された第2のセットのブロックチェーンブロックを検証することは、ブリッジデバイスの第4のスレッドを使用して第4のブロックチェーンブロックを検証するのと並列に、ブリッジデバイスの第3のスレッドを使用して第3のブロックチェーンブロックを検証することを含む。
【0120】
いくつかの実施形態では、装置700は、ブリッジデバイスのデータストア内にリモート高さ値およびローカル高さ値を維持する維持サブモジュールをさらに含み、ここで、リモート高さ値は、ブロックチェーン・ネットワーク・ノード上に格納されたブロックチェーンブロックの数を示し、ローカル高さ値は、ブリッジデバイスに格納され、ブロックチェーン・ネットワーク・ノードから取得されたブロックチェーンブロックの数を示す。ブリッジデバイスの第1のセットのスレッドを使用してブロックチェーン・ネットワーク・ノードから第1のセットのブロックチェーンブロックを取り出すことは、ブリッジデバイスによってローカル高さ値がリモート高さ値未満であるか否かを判定することと、ローカル高さ値がリモート高さ値未満であるとの決定に応答して、ブロックチェーン・ネットワーク・ノードからブリッジデバイスに格納された少なくとも1つのブロックチェーンブロックを取得することとを含む。
【0121】
いくつかの実施形態では、装置700はさらに、ブロックチェーン・ネットワーク・ノードから少なくとも1つのブロックチェーンブロックを取得したことに応答して、ブリッジデバイス上に少なくとも1つのブロックチェーンブロックを格納する格納サブモジュールと、ブリッジデバイスによってローカル高さ値を更新する更新サブモジュールとを備える。
【0122】
いくつかの実施形態では、装置700はさらに、ローカル高さ値がリモート高さ値以上であるとの決定に応答して、ブロックチェーン・ネットワーク・ノードからブロックチェーンブロックを取得することを控えるリフレインサブモジュールを備える。
【0123】
いくつかの実施形態では、装置700はさらに、ブリッジデバイスによってブロックチェーン・ネットワーク・ノードから、リモート高さ値を示す通知を受け取る第1の受信サブモジュールと、ブリッジデバイスによってクライアントデバイスからトランザクション要求を受け取る第2の受信サブモジュールであって、トランザクション要求が、ブロックチェーンネットワーク上で実行されるべきトランザクションを要求する、第2の受信サブモジュールと、ブリッジデバイスによってトランザクション要求をブロックチェーン・ネットワーク・ノードに送る送信サブモジュールと、ブリッジデバイスによってブロックチェーン・ネットワーク・ノードから第2の通知を受け取る第3の受信サブモジュールであって、第2の通知は、更新されたリモート高さ値を示し、更新されたリモート高さ値は、少なくとも部分的にトランザクションに基づいてブロックチェーン・ネットワーク・ノードに格納されたブロックチェーンブロックの数の増加を示す、第3の受信サブモジュールとを備える。
【0124】
いくつかの実施形態では、通知は、新しいブロックがブロックチェーンネットワークのブロックチェーンに追加されたことを示す新しいブロック通知を含み、該新しいブロック通知はリモート高さ値が、例えば1だけ増加することを示す。
【0125】
いくつかの実施形態では、ブリッジデバイスによってブロックチェーン・ネットワーク・ノードから通知を受け取ることは、ブロックチェーン・ネットワーク・ノードによってブリッジデバイスにプッシュされた通知を受け取ること、またはブリッジデバイスによってブロックチェーン・ネットワーク・ノードから通知をプルすることの少なくとも1つを含む。
【0126】
いくつかの実施形態では、装置700はさらに、ブリッジデバイスのデータストア内にローカル高さ値およびチェック高さ値を維持する維持サブモジュールを備え、ここで、ローカル高さ値は、ブリッジデバイス上に格納され、かつブロックチェーン・ネットワーク・ノードから取得されたブロックチェーンブロックの数を示し、チェック高さ値は、ブリッジデバイスによって検証されたブロックチェーンブロックの数を示す。ブリッジデバイスの第2のセットのスレッドを使用してブリッジデバイスに格納された第2のセットのブロックチェーンブロックを検証することは、チェック高さ値がローカル高さ値未満であるか否かを判定することと、チェック高さ値がローカル高さ値未満であるとの決定に応答して、ブリッジデバイスに格納され、かつブリッジデバイスによって検証されていないブロックチェーンブロックを検証することとを含む。
【0127】
いくつかの実施形態では、ブリッジデバイスに格納され、かつブリッジデバイスによって検証されていないブロックチェーンブロックを検証することは、ブロックチェーンブロック内の1つまたは複数のブロックチェーントランザクションとトランザクション要求との間の整合性を求めることを含む。
【0128】
いくつかの実施形態では、装置700はさらに、ブリッジデバイスに格納され、かつブリッジデバイスによって検証されていないブロックチェーンブロックの検証に応答して、ブロックチェーンブロックが信頼できると決定する決定サブモジュールと、ブリッジデバイスによってチェック高さ値を更新する更新サブモジュールとを備える。
【0129】
いくつかの実施形態では、装置700はさらに、チェック高さ値がローカル高さ値以上であるとの決定に応答して、ブリッジデバイスに格納されたブロックチェーンブロックの検証を控えるリフレインサブモジュールを備える。
【0130】
いくつかの実施形態では、装置700はさらに、ブリッジデバイスおよびブリッジデバイスによるブロックチェーン・ネットワーク・ノードを含むシステムにおけるシステム障害を検出する検出サブモジュールと、チェック高さ値に基づいてリカバリ処理を実行する実行サブモジュールとを備える。リカバリ処理を実行することは、ローカル高さ値をチェック高さ値に等しく設定することと、ローカル高さ値がブロックチェーン・ネットワーク・ノードに格納されたブロックチェーンブロックの数を示すリモート高さ値未満であるとの決定に応答して、ブロックチェーン・ネットワーク・ノードからブリッジデバイスに格納されていない少なくとも1つのブロックチェーンブロックを取得することとを含む。
【0131】
前述の実施形態に示されるシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用することによって実装され得、または特定の機能を有する製品を使用することによって実装され得る。典型的な実施形態のデバイスは、コンピュータ(コンピュータはパーソナルコンピュータであり得る)、ラップトップコンピュータ、携帯電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤー、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピューター、ウェアラブルデバイス、またはこれらのデバイスの任意の組み合わせである。
【0132】
装置内の各モジュールの機能および役割の実施形態のプロセスについては、前述の方法における対応するステップの実施形態のプロセスを参照できる。簡単にするために、詳細を省略する。
【0133】
装置の実施形態は基本的に方法の実施形態に対応するので、関連する部分について、方法の実施形態における関連する説明を参照できる。前述の装置の実施形態は、単なる一例である。別個の部品として説明されるモジュールは、物理的に別個であってもなくてもよく、モジュールとして表示される部品は、物理モジュールであってもなくてもよく、1つの位置に配置されても、または複数のネットワークモジュールに分散されてもよい。モジュールの一部またはすべては、本明細書のソリューションの目的を達成するために、実際の要求に基づいて選択され得る。当業者は、創造的な努力なしに、本出願の実施形態を理解し、実施できる。
【0134】
再び
図7を参照すると、
図7は内部機能モジュールおよびフォールトトレラント・ブロックチェーン・データ処理装置の構造を示すものとして解釈され得る。フォールトトレラント・ブロックチェーン・データ処理装置は、クライアントデバイスとブロックチェーンネットワークのブロックチェーン・ネットワーク・ノードとを接続するように構成されたブリッジデバイス(例えば、
図3のブリッジデバイス304a、または
図5のブリッジデバイス504)の一例であり得る。本質的に実行本体は電子デバイスであり得、電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を格納するように構成された1つまたは複数のコンピュータ可読メモリとを備える。いくつかの実施形態では、1つまたは複数のコンピュータ可読メモリは、1つまたは複数のプロセッサに結合され、本明細書に記載のアルゴリズム、方法、機能、プロセス、フロー、および手順を実行するために1つまたは複数のプロセッサによって実行可能なプログラミング命令を格納する。本明細書はまた、1つまたは複数のプロセッサに結合され、その上に記憶された命令を有する1つまたは複数の非一時的コンピュータ可読記憶媒体を提供し、該命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、本明細書で提供される方法の実施形態による動作を実行させる。
【0135】
本明細書はさらに、本明細書で提供される方法を実施するためのシステムを提供する。このシステムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供される方法の実施形態による動作を実行させる命令が格納された1つまたは複数のプロセッサに結合されたコンピュータ可読記憶媒体を含む。
【0136】
本明細書に記載の主題および動作および動作の実施形態は、本明細書に開示される構造およびそれらの構造的同等物を含む、デジタル電子回路、有形に具体化されたコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、またはそれらの1つまたは複数の組み合わせで実装され得る。本明細書に記載の主題の実施形態は、1つまたは複数のコンピュータプログラム、例えば、データ処理装置による実行のために、またはデータ処理装置の動作を制御するために、コンピュータプログラムキャリア上に符号化されたコンピュータプログラム命令の1つまたは複数のモジュールとして実装され得る。例えば、コンピュータプログラムキャリアは、その上に符号化または格納された命令を有する1つまたは複数のコンピュータ可読記憶媒体を含むことができる。キャリアは、磁気、光磁気、または光ディスク、ソリッドステートドライブ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、または他のタイプの媒体など、有形の非一時的なコンピュータ可読媒体であってよい。代替として、または追加で、キャリアは、人工的に生成された伝搬信号、例えば、データ処理装置による実行のために適切な受信機装置に送信するための情報を符号化するために生成される機械生成の電気、光、または電磁信号であり得る。コンピュータ記憶媒体は、機械可読記憶装置、機械可読記憶基板、ランダムまたはシリアルアクセスメモリ装置、またはそれらの1つまたは複数の組み合わせであり得るか、またはそれらの一部であり得る。コンピュータの記憶媒体は、伝播された信号ではない。
【0137】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとしても参照または説明され得るコンピュータプログラムは、コンパイルされた言語または解釈された言語、あるいは宣言型または手続き型言語を含むプログラミング言語を含む、任意の形式で書くことができ、スタンドアロンプログラムとして、またはモジュール、コンポーネント、エンジン、サブルーチン、または、1つまたは複数の場所にある、データ通信ネットワークによって相互接続された1つまたは複数のコンピュータを含み得るコンピューティング環境での実行に適したその他のユニットとしてなどを含む、任意の形式で展開できる。
【0138】
コンピュータプログラムは、ファイルシステム内のファイルに対応できるが、必ずしもそうである必要はない。コンピュータプログラムは、他のプログラムまたはデータを保持するファイルの一部、例えば、マークアップ言語ドキュメントに格納された1つまたは複数のスクリプト、問題のプログラム専用の単一のファイル、または複数の調整されたファイル、例えばファイルに格納できる。1つまたは複数のモジュール、サブプログラム、またはコードの一部を格納する。
【0139】
コンピュータプログラムを実行するためのプロセッサには、例として、汎用および特殊目的のマイクロプロセッサの両方、ならびに任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサが含まれる。一般に、プロセッサは、実行のためのコンピュータプログラムの命令と、プロセッサに結合された非一時的なコンピュータ可読媒体からのデータを受信する。
【0140】
「データ処理装置」という用語は、例えば、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。データ処理装置は、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィックス処理ユニット)などの特別な目的の論理回路を含むことができる。装置はまた、ハードウェアに加えて、コンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの1つまたは複数の組み合わせを構成するコードを含むことができる。
【0141】
本明細書に記載のプロセスおよび論理フローは、1つまたは複数のコンピュータまたは1つまたは複数のコンピュータプログラムを実行するプロセッサによって実行され、入力データを動作し、出力を生成することによって動作を実行できる。プロセスとロジックフローは、FPGA、ASIC、GPUなどの専用ロジック回路によって、または専用ロジック回路と1つまたは複数のプログラムコンピュータの組み合わせによって実行することもできる。
【0142】
コンピュータプログラムの実行に適したコンピュータは、汎用または特殊目的のマイクロプロセッサ、あるいはその両方、または他の種類の中央処理装置に基づくことができる。一般に、中央処理装置は、読み取り専用メモリまたはランダムアクセスメモリ、あるいはその両方から命令とデータを受信する。コンピュータの要素には、命令を実行するための中央処理装置と、命令とデータを格納するための1つまたは複数のメモリデバイスを含めることができる。中央処理装置とメモリは、専用の論理回路によって補完または組み込むことができる。
【0143】
一般に、コンピュータはまた、1つまたは複数のストレージデバイスからデータを受信するか、または1つまたは複数のストレージデバイスにデータを転送することを含むか、または動作可能に結合される。ストレージデバイスは、例えば、磁気ディスク、光磁気ディスク、または光ディスク、ソリッドステートドライブ、または他のタイプの非一時的でコンピュータ可読な媒体であり得る。ただし、コンピュータにそのようなデバイスが必要なわけではない。したがって、コンピュータは、ローカルおよび/またはリモートの1つまたは複数のメモリなど、1つまたは複数のストレージデバイスに結合され得る。例えば、コンピュータは、コンピュータの不可欠なコンポーネントである1つまたは複数のローカルメモリを含むことができ、または、コンピュータをクラウドネットワーク内にある1つまたは複数のリモートメモリに結合することができる。さらに、コンピュータは、別のデバイス、例えば、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲームコンソール、全地球測位システム(GPS)受信機、または、例えば、ユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスに組み込むことができる。
【0144】
構成要素は、直接または1つまたは複数の中間構成要素を介して、互いに電気的または光学的に接続されるなど、可換的に接続されることによって、互いに「結合」され得る。構成要素の1つが他のコンポーネントに統合されている場合、構成要素はまた、互いに「結合」され得る。例えば、プロセッサに統合されているストレージ構成要素(L2キャッシュコンポーネントなど)は、プロセッサに「結合」されている。
【0145】
ユーザとの対話を提供するために、本明細書に記載の主題の実施形態は、ユーザに情報を表示するための、ディスプレイデバイス、例えばLCD(液晶ディスプレイ)モニタと、例えば、キーボード、およびマウス、トラックボールまたはタッチパッドなどのポインティングデバイスなどユーザがコンピュータに入力を提供できる入力デバイスとを有するコンピュータ上に実装されるか、または該コンピュータと通信するように構成される。他の種類のデバイスを使用して、ユーザとの対話を提供することもでき、例えば、ユーザに提供されるフィードバックは、視覚的フィードバック、聴覚的フィードバック、または触覚的フィードバックなど、任意の形態の感覚的フィードバックであり、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形式で受け取ることができる。さらに、コンピュータは、ユーザが使用するデバイスとの間でドキュメントを送受信すること、例えば、ウェブブラウザから受信したリクエストに応じて、ユーザのデバイス上のウェブブラウザにウェブページを送信すること、スマートフォンや電子タブレットなどのユーザデバイスで実行されているアプリとインタラクションすることによって、ユーザと対話できる。また、コンピュータは、テキストメッセージまたは他の形式のメッセージをパーソナルデバイス(メッセージングアプリケーションを実行しているスマートフォンなど)に送り、そのリターンとしてユーザから応答メッセージを受け取ることによって、ユーザと対話できる。
【0146】
本明細書は、システム、装置、およびコンピュータプログラムコンポーネントに関連して「構成された」という用語を使用する。特定の動作またはアクションを実行するように構成される1つまたは複数のコンピュータのシステムの場合、システムが、動作時にシステムに動作またはアクションを実行させる、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせがインストールされていることを意味する。特定の動作またはアクションを実行するように構成された1つまたは複数のコンピュータプログラムの場合、1つまたは複数のプログラムは、データ処理装置によって実行されると、装置に動作またはアクションを実行させる命令を含むことを意味する。特定の動作またはアクションを実行するように構成される特殊用途の論理回路の場合、回路が動さまたはアクションを実行する電子ロジックを備えていることを意味する。
【0147】
本明細書は多くの特定の実施形態の詳細を含むが、これらは、特許請求の範囲自体によって定義される請求対象の範囲に対する制限として解釈されるべきではなく、むしろ特定の実施形態に固有であり得る特徴の説明として解釈されるべきである。別個の実施形態の文脈で本明細書に記載されている特定の特徴はまた、単一の実施形態で組み合わせて実現できる。逆に、単一の実施形態の文脈で説明される様々な特徴はまた、複数の実施形態で別々に、または任意の適切なサブコンビネーションで実現できる。さらに、特徴は特定の組み合わせで作用するものとして上記に記載され、最初はそのように請求されても、請求された組み合わせからの1つまたは複数の特徴は、場合によっては組み合わせから切り出されてよく、特許請求の範囲は、サブコンビネーションまたはそのサブコンビネーションのバリエーションを対象にし得る。
【0148】
同様に、動作が図面に示され、特定の順序で特許請求の範囲に記載されているが、これは、そのような動作が示される特定の順序または連続した順序で実行されること、または図示されるすべての動作が望ましい結果を達成するために実行される。特定の状況では、マルチタスクと並列処理が有利な場合がある。さらに、上記の実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とするものとして理解されるべきではなく、説明されたプログラムコンポーネントおよびシステムは、一般に、単一のソフトウェア製品に一緒に統合され得る、または複数のソフトウェア製品にパッケージ化されている。
【0149】
主題の特定の実施形態が記載されている。他の実施形態は、以下の特許請求の範囲内にある。例えば、特許請求の範囲に記載されているアクションは、異なる順序で実行することができ、それでも望ましい結果を達成できる。一例として、添付の図に示されているプロセスは、望ましい結果を達成するために、示されている特定の順序または順序を必ずしも必要としない。場合によっては、マルチタスクと並列処理が有利な場合がある。