(57)【特許請求の範囲】
【請求項１】
ブロックチェーンネットワークにおいて複数のトランザクションを実行するための方法であって、前記ブロックチェーンネットワークは、複数のネットワークノードを含み、前記方法は、
前記ブロックチェーンネットワークのネットワークノードによって、ブロックチェーンネットワークにおいて実行されることになる複数のトランザクションを受信するステップと、
前記複数のトランザクションの各々について、前記トランザクションが第1のタイプのトランザクションであるかまたは第2のタイプのトランザクションであるかを決定するステップと、
前記トランザクションが第1のタイプのトランザクションであると決定したことに応答して、
前記ネットワークノードによって、前記第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定するステップと、
前記トランザクションが第2のタイプのトランザクションであると決定したことに応答して、
前記ネットワークノードによって、前記ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態に基づいて前記第2のタイプのトランザクションを事前実行するステップと、
前記ネットワークノードによって、前記第2のタイプのトランザクションの前記事前実行による影響を受ける1つまたは複数のアカウントを決定するステップと、
前記複数のトランザクションと各第2のタイプのトランザクションについての前記第2のタイプのトランザクションの前記事前実行による影響を受ける前記1つまたは複数のアカウントとのコンセンサスプロセスを行うステップと、
前記ネットワークノードによって、各第1のタイプのトランザクションについての前記第1のタイプのトランザクションの実行による影響を受ける前記1つまたは複数のアカウントと各第2のタイプのトランザクションについての前記第2のタイプのトランザクションの前記事前実行による影響を受ける前記1つまたは複数のアカウントとに基づいて、前記複数のトランザクションを1つまたは複数のトランザクションのグループに分割するステップと、
パラレルに1つまたは複数のトランザクションのグループを実行することによって前記複数のトランザクションを実行するステップと
を含む、方法。
【請求項２】
各第1のタイプのトランザクションについて、前記第1のタイプのトランザクションの前記実行をコミットするステップと、
各第2のタイプのトランザクションについて、
前記ブロックチェーンネットワーク内のブロックチェーンの第2の現在の状態に基づいて前記第2のタイプのトランザクションの前記実行による影響を受ける1つまたは複数のアカウントを決定するステップと、
前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントが前記第2のタイプのトランザクションの前記事前実行による影響を受ける前記1つまたは複数のアカウントと同一であるか、および、前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントが前記複数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないかを決定するステップと、
前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントの前記各々が前記第2のタイプのトランザクションの前記事前実行による影響を受ける1つまたは複数のアカウントと同一である、および、前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントが前記複数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないと決定したことに応答して、前記第2のタイプのトランザクションの前記実行をコミットするステップと
をさらに含む、請求項1に記載の方法。
【請求項３】
ある第2のタイプのトランザクションについて、前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントが前記第2のタイプのトランザクションの前記事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントが前記複数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けると決定したことに応答して、
前記第2のタイプのトランザクションの前記実行をロールバックするステップと、
パラレルに前記1つまたは複数のトランザクションのグループを実行した後に前記第2のタイプのトランザクションを実行するステップと
をさらに含む、請求項1から2のいずれか一項に記載の方法。
【請求項４】
各第2のタイプのトランザクションについて、前記第2のタイプのトランザクションの前記事前実行による影響を受ける前記1つまたは複数のアカウントのコンセンサスを行うために前記第2のタイプのトランザクションの前記事前実行による影響を受ける前記1つまたは複数のアカウントを記録するステップをさらに含む、請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記複数のトランザクションは、前記ブロックチェーンネットワークの前記複数のネットワークノードのうちの任意の他のネットワークノードによって実行される前記複数のトランザクションと同一の順序で前記ネットワークノードによって実行される、請求項1から4のいずれか一項に記載の方法。
【請求項６】
1つまたは複数の失敗した第2のタイプのトランザクションを識別するステップであって、前記1つまたは複数の失敗した第2のタイプのトランザクションの各々について、前記失敗した第2のタイプのトランザクションの前記実行による影響を受ける1つまたは複数のアカウントは前記失敗した第2のタイプのトランザクションの前記事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、前記第2のタイプのトランザクションの前記実行による影響を受ける前記1つまたは複数のアカウントは前記複数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けない、ステップと、
パラレルに前記1つまたは複数のトランザクションのグループを実行した後に前記1つまたは複数の失敗した第2のタイプのトランザクションを実行するステップと
をさらに含む、請求項1から5のいずれか一項に記載の方法。
【請求項７】
前記ブロックチェーンネットワークの前記複数のネットワークノードの各々によって使用されるプロトコルに従って、
前記1つまたは複数のグループの各々内で1つまたは複数のトランザクションを実行するシーケンシャルな順序を決定するステップと、
パラレルに前記1つまたは複数のトランザクションのグループを実行した後に前記1つまたは複数の失敗した第2のタイプのトランザクションを実行するシーケンシャルな順序を決定するステップと
をさらに含む、請求項5に記載の方法。
【請求項８】
トランザクションのグループの各々は、共通のトランザクションエンティティに影響を及ぼす1つまたは複数のトランザクションを含み、
それぞれの2つの異なるトランザクションのグループの間では、一方のグループ内の任意のトランザクションは、他方のグループ内の任意のトランザクションとはいかなる共通のトランザクションエンティティにも影響を及ぼさない、請求項1から7のいずれか一項に記載の方法。
【請求項９】
前記共通のトランザクションエンティティは、トランザクションに関連付けられた、送金先、送金元、送金先のアカウント、または送金元のアカウントを含む、請求項8に記載の方法。
【請求項１０】
前記トランザクションの実行による影響を受けるすべてのアカウントが前記トランザクションを実行する前に確定的に決まるトランザクションは、第1のタイプのトランザクションであり、
前記トランザクションの実行による影響を受ける1つまたは複数のアカウントが前記トランザクションを実行する前に確定的に決まらないトランザクションは、第2のタイプのトランザクションである、請求項1から9のいずれか一項に記載の方法。
【請求項１１】
非スマートコントラクトトランザクションは、第1のタイプのトランザクションであり、スマートコントラクトトランザクションは、第2のタイプのトランザクションである、請求項1から10のいずれか一項に記載の方法。
【請求項１２】
前記ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップは、前記ネットワークノードの1つまたは複数のプロセッサがアイドルであるときに、前記ネットワークノードによって、前記第2のタイプのトランザクションを事前実行するステップを含む、請求項1から11のいずれか一項に記載の方法。
【請求項１３】
1つまたは複数のプロセッサと、
前記1つまたは複数のプロセッサに結合されるとともに、命令を記憶している、1つまたは複数のコンピュータ可読メモリとを含み、前記命令は、請求項1から12のいずれか一項に記載の方法を行うように前記1つまたは複数のプロセッサによって実行可能である、システム。
【請求項１４】
ブロックチェーンネットワークにおいて複数のトランザクションを実行するための装置であって、前記装置は、請求項1から12のいずれか一項に記載の方法を行うための複数のモジュールを含む、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、分散型台帳システムにおけるトランザクション実行に関する。
【背景技術】
【０００２】
コンセンサスネットワーク、例えば、ブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でデータを記憶することを可能にする。ブロックチェーンネットワークの例としては、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、およびコンソーシアムブロックチェーンネットワークを含み得る。パブリックブロックチェーンネットワークは、DLSを使用し、コンセンサスプロセスに関与するように、すべてのエンティティに対してオープンとなっている。プライベートブロックチェーンネットワークは、特定のエンティティに提供されており、読込みパーミッションおよび書込みパーミッションを中央集権的に制御する。コンソーシアムブロックチェーンネットワークは、コンセンサスプロセスを制御する、限定されたエンティティのグループに提供されており、アクセス制御レイヤを含む。
【０００３】
ブロックチェーンネットワークは、1つまたは複数のブロックチェーン構造を管理、更新、およびメンテナンスするコンピューティングノードのネットワークである。ブロックチェーンは、チェーンに記憶されているすべての以前のトランザクションとの整合性について今後のトランザクションを検証することを可能にする方法でトランザクションを記憶するデータ構造である。トランザクションは、ブロックチェーンネットワークのネットワークノードの各々によって実行されブロックチェーンに記録される。
【０００４】
ブロックチェーンネットワークにおいて直面する1つの問題が、トランザクションを処理する速度である。一般的に、ブロックチェーンネットワーク内のネットワークノードは、トランザクションをそれらが送信された順にシリアルに処理する。このことが、低いトランザクションスループットの原因であり得るし、トランザクションが送信されてからそれが片付くまでの間に遅延を生じることになる。
【０００５】
ブロックチェーンシステムのネットワークノード間でトランザクションを実行するために多くの既存の技法を使用することが可能であるが、トランザクションを実行するより効率的なソリューションが有利なものとなるであろう。
【発明の概要】
【課題を解決するための手段】
【０００６】
本明細書は、分散型台帳システム(例えば、ブロックチェーンネットワーク)におけるトランザクション実行のための技術を説明している。本技術は、一般的に、分散型台帳システムにおけるネットワークノードによるトランザクションのパラレル実行を実施することに関する。説明した技術は、ブロックチェーンネットワークにおけるトランザクションの処理速度を改善し、ブロックチェーンネットワークのトランザクションスループットを増大することを可能にしている。
【０００７】
本明細書はまた、1つまたは複数のプロセッサに結合されるとともに命令を記憶している1つまたは複数の非一時的コンピュータ可読記憶媒体を提供しており、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供した方法の実施形態による動作を行わせる。
【０００８】
本明細書は、本明細書で提供している方法を実施するためのシステムをさらに提供している。システムは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサに結合されるとともに命令を記憶しているコンピュータ可読記憶媒体とを含み、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに本明細書で提供した方法の実施形態による動作を行わせる。
【０００９】
本明細書による方法が本明細書に記載の態様と特徴との任意の組合せを含み得ることは諒解されよう。すなわち、本明細書による方法は、特に本明細書に記載の態様と特徴との組合せに限定されるわけではなく、提供した態様と特徴との任意の組合せも含む。
【００１０】
本明細書の1つまたは複数の実施形態の詳細を添付の図面および以下の説明に記載している。本明細書の他の特徴および利点が、説明および図面から、および特許請求の範囲から明らかとなるであろう。
【図面の簡単な説明】
【００１１】
【図１】本明細書の実施形態を実行するために使用され得る環境の例を示す図である。
【図２】本明細書の実施形態による、機構の例を図示している図である。
【図３Ａ】本明細書の実施形態による、ブロックチェーンネットワークにおけるトランザクションについてのシリアル実行順序の例を図示している図である。
【図３Ｂ】本明細書の実施形態による、ブロックチェーンネットワークにおけるトランザクションについてのパラレル実行順序の例を図示している図である。
【図３Ｃ】本明細書の実施形態による、ブロックチェーンネットワークにおける失敗した第2のタイプのトランザクションについての実行順序の例を図示している図である。
【図４】本明細書の実施形態により実行され得るプロセスの例を示す図である。
【図５】本明細書の実施形態による、装置のモジュールの例を図示している図である。
【発明を実施するための形態】
【００１２】
様々な図面における類似の参照記号は類似の要素を示す。
【００１３】
本明細書は、分散型台帳システム(例えば、ブロックチェーンネットワーク)におけるトランザクション実行のための技術を説明している。本技術は、一般的に、分散型台帳システムにおけるネットワークノードによるトランザクションのパラレル実行を実施することに関する。説明した技術は、ブロックチェーンネットワークにおけるトランザクションの処理速度を改善し、ブロックチェーンネットワークのトランザクションスループットを増大することを可能にしている。
【００１４】
本明細書の実施形態についてのさらなる状況をあげるとすれば、上述したように、コンセンサスネットワーク(例えば、ピア・ツー・ピアノードで構成される)およびブロックチェーンネットワークとも称し得る、分散型台帳システム(DLS)は、関与エンティティが安全かつ変更不可能な形でトランザクションを実施しデータを記憶することを可能にする。ブロックチェーンという用語は、特定のネットワークおよび/またはユースケースに一般的に関連付けられているが、ブロックチェーンは、任意の特定のユースケースを指すわけではなくDLSを一般的に指すために本明細書では使用している。
【００１５】
ブロックチェーンは、トランザクションが変更不可能となる方法でトランザクションを記憶するデータ構造である。そのため、ブロックチェーン上に記録されるトランザクションは、信頼性のあるものおよび信頼できるものとなる。ブロックチェーンは、1つまたは複数のブロックを含む。チェーン内の各ブロックは、前のブロックの暗号ハッシュを含めることによって、チェーン内のその直前にある前のブロックに連結される。各ブロックはまた、タイムスタンプ、それ自身の暗号ハッシュ、および1つまたは複数のトランザクションを含む。ブロックチェーンネットワークのノードによって既に検証されているトランザクションは、ハッシュ化され、Merkleツリーに符号化される。Merkleツリーは、ツリーのリーフノードにおけるデータがハッシュ化され、ツリーの各ブランチにおけるすべてのハッシュがブランチのルートにおいて連結されるデータ構造である。このプロセスは、ツリー全体のルートまでツリーの上方へと進行し続け、ツリー全体のルートは、ツリー内のすべてのデータを表すハッシュを記憶している。ツリーに記憶されているトランザクションであることを意味するハッシュは、それがツリーの構造と整合性を有しているかどうかを決定することによって素早く検証され得る。
【００１６】
ブロックチェーンは、トランザクションを記憶するための分散化されたまたは少なくとも部分的に分散化されたデータ構造である一方で、ブロックチェーンネットワークは、トランザクションをブロードキャストすること、検証すること、および有効性を確認することなどによって、1つまたは複数のブロックチェーンを管理、更新、およびメンテナンスするコンピューティングノードのネットワークである。上述したように、ブロックチェーンネットワークは、パブリックブロックチェーンネットワーク、プライベートブロックチェーンネットワーク、またはコンソーシアムブロックチェーンネットワークとして提供され得る。コンソーシアムブロックチェーンネットワークを参照して、本明細書の実施形態をここではさらに詳細に説明している。しかしながら、本明細書の実施形態が任意の適切なタイプのブロックチェーンネットワークにおいて実現され得ることも考えられる。
【００１７】
一般に、コンソーシアムブロックチェーンネットワークは、関与エンティティの間でプライベートなものとなっている。コンソーシアムブロックチェーンネットワークにおいては、コンセンサスプロセスは、コンセンサスノードとも称し得る、権限を与えられたノードのセットによって制御され、1つまたは複数のコンセンサスノードがそれぞれのエンティティ(例えば、金融機関、保険会社)に管理される。例えば、十(10)のコンソーシアムエンティティ(例えば、金融機関、保険会社)がコンソーシアムブロックチェーンネットワークを管理してもよく、その各々がコンソーシアムブロックチェーンネットワーク内の少なくとも1つのノードを管理する。
【００１８】
いくつかの例においては、コンソーシアムブロックチェーンネットワーク内で、グローバルブロックチェーンが、すべてのノードにわたって複製されるブロックチェーンとして提供される。すなわち、すべてのコンセンサスノードは、グローバルブロックチェーンに関する完全状態コンセンサスにある。コンセンサス(例えば、ブロックチェーンへのブロックの追加に対する合意)を得るために、コンセンサスプロトコルがコンソーシアムブロックチェーンネットワーク内で実施される。例えば、コンソーシアムブロックチェーンネットワークは、以下でさらに詳細に説明している、実用的Byzantineフォールトトレランス(PBFT)コンセンサスを実施し得る。
【００１９】
図1は、本明細書の実施形態を実行するために使用され得る環境100の例を図示している図である。いくつかの例においては、例示的な環境100は、エンティティがコンソーシアムブロックチェーンネットワーク102に参加することを可能にする。例示的な環境100は、コンピューティングデバイス106、108、およびネットワーク110を含む。いくつかの例においては、ネットワーク110は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはその組合せを含み、ウェブサイト、ユーザデバイス(例えば、コンピューティングデバイス)、およびバックエンドシステムを接続する。いくつかの例においては、ネットワーク110は、有線および/または無線通信リンクを介してアクセスされ得る。いくつかの例においては、ネットワーク110は、コンソーシアムブロックチェーンネットワーク102との通信およびコンソーシアムブロックチェーンネットワーク102内の通信を可能にする。一般に、ネットワーク110は、1つまたは複数の通信ネットワークを表す。いくつかのケースにおいては、コンピューティングデバイス106、108は、クラウドコンピューティングシステムのノード(図示せず)であり得る、または、コンピューティングデバイス106、108の各々は、ネットワークによって相互接続された多数のコンピュータを含み、分散処理システムとして機能する、独立したクラウドコンピューティングシステムであり得る。
【００２０】
図示した例においては、コンピューティングシステム106、108の各々は、コンソーシアムブロックチェーンネットワーク102内のノードとしての参加を可能にする任意の適切なコンピューティングシステムを含み得る。例示的なコンピューティングデバイスは、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピューティングデバイス、およびスマートフォンを含むがこれらに限定されない。いくつかの例においては、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102とやりとりするための1つまたは複数のコンピュータ実施サービスをホストする。例えば、コンピューティングシステム106は、第1のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどといった、第1のエンティティ(例えば、ユーザA)のコンピュータ実施サービスをホストすることができる。コンピューティングシステム108は、第2のエンティティが1つまたは複数の他のエンティティ(例えば、他のユーザ)とのトランザクションを管理するために使用するトランザクション管理システムなどといった、第2のエンティティ(例えば、ユーザB)のコンピュータ実施サービスをホストすることができる。図1の例においては、コンソーシアムブロックチェーンネットワーク102を、ノードからなるピア・ツー・ピアネットワークとして表しており、コンピューティングシステム106、108は、コンソーシアムブロックチェーンネットワーク102に参加する、第1のエンティティおよび第2のエンティティのノードをそれぞれ提供する。
【００２１】
図2は、本明細書の実施形態による、機構200の例を図示している。機構200の例は、エンティティレイヤ202を、ホステッドサービスレイヤ204、およびブロックチェーンネットワークレイヤ206含む。図示した例においては、エンティティレイヤ202は、関与者A、関与者B、および関与者Cの3つの関与者を含み、各関与者は、それぞれのトランザクション管理システム208を有する。
【００２２】
図示した例においては、ホステッドサービスレイヤ204は、各トランザクション管理システム210のためのインターフェース210を含む。いくつかの例においては、それぞれのトランザクション管理システム208は、プロトコル(例えば、ハイパーテキスト・トランスファー・プロトコル・セキュア(HTTPS))を使用してネットワーク(例えば、図1のネットワーク110)を介してそれぞれのインターフェース210と通信する。いくつかの例においては、各インターフェース210は、それぞれのトランザクション管理システム208とブロックチェーンネットワークレイヤ206との間の通信接続を提供する。より詳細には、インターフェース210は、ブロックチェーンネットワークレイヤ206のブロックチェーンネットワーク212と通信する。いくつかの例においては、インターフェース210とブロックチェーンネットワークレイヤ206との間の通信は、リモートプロシージャコール(RPC)を使用して実施される。いくつかの例においては、インターフェース210は、それぞれのトランザクション管理システム208のためのブロックチェーンネットワークノードを「ホスト」する。例えば、インターフェース210は、ブロックチェーンネットワーク212へのアクセスのためのアプリケーションプログラミングインターフェース(API)を提供する。
【００２３】
本明細書に記載しているように、ブロックチェーンネットワーク212は、ブロックチェーン216に情報を変更不可能な形で記録する多数のノード214を含むピア・ツー・ピアネットワークとして提供される。単一のブロックチェーン216を概略的に図示しているが、ブロックチェーン216の複数のコピーが、提供され、ブロックチェーンネットワーク212にわたって維持管理される。例えば、各ノード214は、ブロックチェーンのコピーを記憶する。いくつかの実施形態においては、ブロックチェーン216は、コンソーシアムブロックチェーンネットワークに参加する2つ以上のエンティティの間で行われるトランザクションに関連付けられた情報を記憶する。
【００２４】
ブロックチェーン(例えば、図2のブロックチェーン216)は、各ブロックがデータを記憶しているブロックのチェーンで構成される。データの例としては、2つ以上の関与者間のトランザクションを表すトランザクションデータを含む。トランザクションを非限定的な例として本明細書では使用しているが、任意の適切なデータがブロックチェーンに記憶され得ること(例えば、ドキュメント、画像、ビデオ、オーディオ)も考えられる。トランザクションの例は、価値のあるもの(例えば、資産、製品、サービス、通貨)の交換を含み得るがこれに限定されない。トランザクションデータは、ブロックチェーン内に変更不可能な形で記憶される。すなわち、トランザクションデータを変更することはできない。
【００２５】
ブロックに記憶する前に、トランザクションデータはハッシュ化される。ハッシュ化は、トランザクションデータ(文字列データとして提供される)を固定長のハッシュ値(文字列データとしても提供される)に変換するプロセスである。ハッシュ値を逆ハッシュ化してトランザクションデータを取得することはできない。ハッシュ化は、トランザクションデータにおけるわずかな変化でさえも完全に異なるハッシュ値という結果になることを保証している。さらに、上述したように、ハッシュ値は固定長である。すなわち、トランザクションデータのサイズに関係なく、ハッシュ値の長さは固定される。ハッシュ化は、ハッシュ関数によってトランザクションデータを処理してハッシュ値を生成することを含む。ハッシュ関数の例は、256ビットハッシュ値を出力するセキュアなハッシュアルゴリズム(SHA)-256を含むがこれに限定されない。
【００２６】
複数のトランザクションのトランザクションデータがハッシュ化されブロックに記憶される。例えば、2つのトランザクションのハッシュ値が提供されると、それら自身がハッシュ化され別のハッシュを提供する。このプロセスは、すべてのトランザクションがブロックに記憶されるように、単一のハッシュ値が提供されるまで繰り返される。このようなハッシュ値は、Merkleルートハッシュと称され、ブロックのヘッダに記憶される。トランザクションについての何らかの変化は、そのハッシュ値における変化、最終的に、Merkleルートハッシュにおける変化をもたらすことになる。
【００２７】
ブロックは、コンセンサスプロトコルを介してブロックチェーンに追加される。ブロックチェーンネットワーク内の複数のノードは、コンセンサスプロトコルに関与し、ブロックがブロックチェーンに追加されるようにする作業を行う。そのようなノードをコンセンサスノードと称する。上述したように、PBFTは、コンセンサスプロトコルの非限定的な例として使用される。コンセンサスノードは、コンセンサスプロトコルを実行してトランザクションをブロックチェーンに追加し、ブロックチェーンネットワークの総合的な状態を更新する。
【００２８】
さらに詳細には、コンセンサスノードは、ブロックヘッダを生成し、ブロック内のトランザクションのすべてをハッシュ化し、単一のハッシュ値がブロック内のすべてのトランザクションに対して提供される(Merkleルートハッシュ)まで、ハッシュ値がペアになるように組み合わせてさらなるハッシュ値を生成する。このハッシュがブロックヘッダに追加される。コンセンサスノードはまた、ブロックチェーン内の最新ブロック(すなわち、ブロックチェーンに追加された最終ブロック)のハッシュ値を決定する。コンセンサスノードはまた、ノンス値およびタイムスタンプをブロックヘッダに追加する。
【００２９】
一般に、PBFTは、Byzantine障害(例えば、正常に動作していないノード、不正ノード)に耐性がある実用的Byzantineステートマシンの複製を提供する。このことは、障害が生じるであろうことを想定すること(例えば、独立したノードの故障の存在および/またはコンセンサスノードによって送信される操作メッセージを想定すること)によってPBFTでは実現される。PBFTでは、コンセンサスノードは、プライマリコンセンサスノードおよびバックアップコンセンサスノードを含むシーケンスにおいて提供される。プライマリコンセンサスノードは、周期的に変更され、トランザクションは、ブロックチェーンネットワークの系全体状態に関して合意に至ったブロックチェーンネットワーク内のすべてのコンセンサスノードによってブロックチェーンに追加される。このプロセスにおいては、メッセージは、コンセンサスノード間で送信され、各コンセンサスノードは、メッセージが指定のピアノードから受信されたことを証明し、メッセージが送信中に変更されなかったことを検証する。
【００３０】
PBFTでは、多様な局面において、コンセンサスプロトコルが、同じ状態で開始するすべてのコンセンサスノードに提供される。はじめに、クライアントは、サービス動作を発動する(例えば、ブロックチェーンネットワーク内のトランザクションを実行する)ためにプライマリコンセンサスノードに要求を送信する。要求を受信したことに応答して、プライマリコンセンサスノードは、バックアップコンセンサスノードに要求をマルチキャストする。バックアップコンセンサスノードが要求を実行し、各々がクライアントに応答を送信する。クライアントは、閾値数の応答が受信されるまで待機する。いくつかの例においては、クライアントは、f+1個の応答が受信されるまで待機する、ここで、fは、ブロックチェーンネットワークにおいて許容され得る、障害のあるコンセンサスノードの最大数である。目標達成は、ブロックチェーンに追加されることになるレコードの順で十分な数のコンセンサスノードが合意に至ることであり、レコードは、受理されるか拒否される。
【００３１】
いくつかのブロックチェーンネットワークにおいては、暗号化がトランザクションのプライバシーを保持するために実施される。例えば、ブロックチェーンネットワーク内の他のノードがトランザクションの詳細を理解することができないように、2つのノードがトランザクションをプライベートな状態を維持することを望む場合には、ノードはトランザクションデータを暗号化し得る。暗号化の例は、対称暗号化および非対称暗号化を含むがこれらに限定されない。対称暗号化とは、暗号化(平文から暗号文を生成すること)および復号(暗号文から平文を生成すること)の両方に関して単一の鍵を使用する暗号化プロセスを指す。対称暗号化においては、同一の鍵が複数のノードで利用可能であるため、各ノードがトランザクションデータを暗号化/復号し得る。
【００３２】
非対称暗号化は、各々が秘密鍵と公開鍵とを含む鍵ペアを使用しており、秘密鍵はそれぞれのノードにのみに対して既知となっており、公開鍵はブロックチェーンネットワーク内の他のノードのいずれかまたはすべてに対して既知となっている。あるノードは、別のノードの公開鍵を使用してデータを暗号化し、暗号化されたデータは、他のノードの秘密鍵を使用して復号され得る。例えば、図2を再び参照すれば、関与者Aは、関与者Bの公開鍵を使用してデータを暗号化し、暗号化されたデータを関与者Bに送信し得る。関与者Bは、その秘密鍵を使用して、暗号化されたデータ(暗号文)を復号し、元のデータ(平文)を抽出し得る。ノードの公開鍵で暗号化されたメッセージのみが、ノードの秘密鍵を使用して復号され得る。
【００３３】
非対称暗号化は、トランザクション内の関与者がトランザクション内の他の関与者だけでなくトランザクションの有効性を確認することを可能にするデジタル署名を提供するために使用される。例えば、あるノードは、メッセージをデジタル的に署名し得るし、別のノードは、関与者Aのデジタル署名に基づいてメッセージがそのノードによって送信されたことを確認し得る。デジタル署名はまた、メッセージが送信中に改竄されていないことを保証するために使用され得る。例えば、図2を再び参照すれば、関与者Aは、メッセージを関与者Bに送信しようとしている。関与者Aは、メッセージのハッシュを生成し、その後、その秘密鍵を使用して、ハッシュを暗号化して、暗号化したハッシュとしてデジタル署名を提供する。関与者Aは、デジタル署名をメッセージに付け加え、デジタル署名付きのメッセージを関与者Bに送信する。関与者Bは、関与者Aの公開鍵を使用してデジタル署名を復号し、ハッシュを抽出する。関与者Bは、メッセージをハッシュ化し、ハッシュを比較する。ハッシュが同一である場合には、関与者Bは、メッセージが確かに関与者Aからのものであり改竄されていないことを確認することができる。
【００３４】
ブロックチェーンのコンセンサスバージョンは、ブロックチェーンネットワークのノードとのインタラクションに基づいて決定され得る。例えば、ブロックチェーンネットワークのノードであるウェブサーバは、最長チェーンおよび/または最重チェーン基準を使用して、複数の候補経路からブロックチェーンのコンセンサスバージョンとしてブロックのチェーンを選択し得る。複数の候補経路は、ブロックチェーンネットワークの異なるノードから異なる時点において受信された異なるブロックを含み得る。
【００３５】
上述したように、ブロックチェーンネットワークは、関与者がトランザクションを実施すること、例えば、商品および/またはサービスを売買することを可能にする。いくつかの実施形態においては、各関与者は、1つまたは複数のアカウントに関連付けられる。トランザクションは1つまたは複数の関与者に関与し得るし、トランザクションの実行は1つまたは複数の関与者の1つまたは複数のアカウントに影響を及ぼし得る。例として、関与者Aから関与者Bへの資産送金トランザクションは、関与者AのアカウントAにおける資産の減少と関与者BのアカウントBにおける資産の増大とをもたらし得る。
【００３６】
いくつかの実施形態においては、レコードキーピングモデルがトランザクションと関与者間の対応するアカウントとを記録するために使用される。レコードキーピングモデルの例は、未使用トランザクションアウトプット(UTXO)モデルとアカウントモデル(アカウントベースモデルまたはアカウント/残高モデルとも称する)とを含む。
【００３７】
UTXOモデルにおいては、チェーン上のアセットは、トランザクションの形式となっている。各トランザクションは、以前のトランザクションからのアウトプットを使用し、以後のトランザクションにおいて使用され得る新規アウトプットを生成する。関与者の未使用トランザクションは追跡され、関与者が使用する必要に迫られる残高は未使用トランザクションの合計として計算される。各トランザクションは、インプットとして1つまたは複数の未使用アウトプット(且つ未使用アウトプットのみ)を取り込み、1つまたは複数のアウトプットを有することができる。未使用アウトプットのみがさらなるトランザクションにおいて使用され得るという要件は、二重支払および不正行為を防ぐために必要である。
【００３８】
アカウントモデルは、レコードキーピングを行い、従来の銀行のようにアカウント残高を管理する。このモデルの下では、アカウントは、アドレスおよび対応するアカウント残高を有し得る。チェーン上のアセットは、アカウントの残高として表される。各送金トランザクションは、送金されたアセットのアカウントアドレスおよび着金したアセットのアカウントアドレスを有し得る。トランザクション金額は、アカウントの残高に関して直接更新される。送金アカウントがトランザクションに対する支払いをするのに十分な残高を有していることを各トランザクションが確認するだけでよいため、アカウントモデルは効率的である。トランザクションの検証および証明機能をサポートすることに加えて、アカウントモデルは、スマートコントラクト、特に、状態情報を必要とするまたは複数の関係者が関与するスマートコントラクトを完全にサポートし得る。
【００３９】
いくつかの実施形態においては、トランザクションは、ブロックチェーン上の別のアカウントへ外部アカウントによって送信されたメッセージパケットを含む。トランザクションは、送信側の署名、受信側のアドレス、および送信側が受信側に送るトークンを含み得る。トランザクションは、スマートコントラクトに関する情報も含み得る。すべてのトランザクションをブロックチェーン上に記録し得る。
【００４０】
いくつかの実施形態においては、スマートコントラクトは、データ処理システム、例えば、ブロックチェーンコンセンサスネットワークによって、コントラクトを拡散、検証、および/または実行するように設計されたコンピュータプログラムである。スマートコントラクトは、第三者が関与することなく信頼できるトランザクションを可能としている。トランザクションは追跡可能かつ不可逆的である。
【００４１】
いくつかの実施形態においては、ブロックチェーンシステムにおけるトランザクションは、送金、コントラクトデプロイメント、コントラクトコール、コントラクト更新、デポジットなどの、複数のタイプを含み得る。いくつかの実施形態においては、トランザクションのタイプにかかわらず、トランザクションは、送信側、受信側、送金の額、コントラクトに必要なデータ、トランザクションのハッシュ、および署名を含み得る。
【００４２】
いくつかの実施形態においては、トランザクションの実行による影響を受けるアカウントのすべてをトランザクションの実行前に事前決定または確定することができるかどうかに応じて、トランザクションは、第1のタイプのトランザクションまたは第2のタイプのトランザクションとしてカテゴライズされ得る。第1のタイプのトランザクションについては、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを第1のタイプのトランザクションの実行前に事前決定することができる。第1のタイプのトランザクションの例は上述したように資産送金トランザクションを含み得る、ここで、資産送金トランザクションによる影響を受けるアカウント(例えば、関与者AのアカウントAおよび関与者BのアカウントB)を関与者Aと関与者Bとの間の資産送金トランザクションの実行の前に決定することができる。
【００４３】
第2のタイプのトランザクションについては、第2のタイプのトランザクションの実行による影響を受けるアカウントのうちの1つまたは複数を第2のタイプのトランザクションの実行前に事前決定または確定することはできない。第2のタイプのトランザクションの例は、スマートコントラクトのコールなどのスマートコントラクトトランザクションを含み得る。スマートコントラクトトランザクションは、スマートコントラクトの実行において1つまたは複数の関与者を含み得る。スマートコントラクトトランザクションの実行による影響を受けるアカウントは、実行の時点におけるブロックチェーンの現在の状態に依存し得るため、スマートコントラクトトランザクションの実際の実行前に確定することはできない。そのため、2つ以上のスマートコントラクトトランザクションをパラレルに実行し得ない。スマートコントラクトコールはスマートコントラクトを構成する命令の実行につながるため、特定のコントラクトコールが影響を及ぼすことになるアカウントの範囲を決定することができない場合がある。例えば、特定のアカウントおよびパラメータとして支払額を受け取るスマートコントラクトを考慮すること、およびいくつかの条件が当てはまる場合に支払額を特定のアカウントに適用することである。このスマートコントラクトのコール元が特定のアカウントを指定しており、スマートコントラクトが実行される際のブロックチェーンの状態に条件が依存しているため、スマートコントラクトそのもの(例えば、そのソースコード)の定義から、スマートコントラクトに対する特定のコールがどのアカウントに影響を及ぼすことになるかを確定することができない場合がある。いくつかの実施形態においては、コントラクトコールは、ブロックチェーンネットワーク内のすべてのアカウントに影響を及ぼす可能性のあるトランザクションであり得る。したがって、コントラクトコールは、任意の他のトランザクションとともにパラレルに実行することはできない。
【００４４】
本明細書の実施形態についてのさらなる状況をあげるとすれば、図3Aは、本明細書の実施形態による、ブロックチェーンネットワークにおけるトランザクションについてのシリアル実行順序300の例を図示している。図示しているように、実行順序300は、それらがブロックチェーンネットワークのネットワークノードによって実行されることになるシーケンシャルな順序に従う多数のトランザクション(302a〜d、304a〜c、306a〜c、308a〜b、および310a〜b)を含む。実行順序300は、トランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bのそれぞれの個々のトランザクションが1つずつ実行されるシリアル実行順序である。実行順序300は、ブロックチェーンネットワークのすべてのコンセンサスノード(例えば、コンセンサスプロトコルに関与するネットワークノード)間で同一の実行順序であり得る。例えば、実行順序300は、ブロックチェーンネットワークのすべてのコンセンサスノードによって行われるコンセンサスプロセス後の多数のトランザクションの合意された実行順序であり得る。シリアル実行順序300は、異なるブロックチェーンノードの最終的な実行結果に整合性があることを保証するために使用され得る。
【００４５】
多数のトランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bの間で、トランザクション302a〜dおよび304a〜cの各々は、第1のタイプのトランザクションを含み、トランザクション308a〜bおよび310a〜bの各々は、スマートコントラクトトランザクションなどの第2のタイプのトランザクションを含む。上述したように、第2のタイプのトランザクションの実行がブロックチェーンネットワーク内のブロックチェーンの現在または最新の状態に依存し得るため、第2のタイプのトランザクションの実行による影響を受けるアカウントを第2のタイプのトランザクションの実行前に事前決定または確定することはできない。いくつかの実施形態においては、第2のタイプのトランザクションの実行による影響を受けるアカウントを推定するために、第2のタイプのトランザクションは、例えば、それが多数のトランザクションにおける実行についての第2のタイプのトランザクションの順番となる前に、ネットワークノードによって事前実行され得る。
【００４６】
例えば、スマートコントラクトトランザクションを受信した後に、ネットワークノードは、スマートコントラクトトランザクションをキャッシュ内のトランザクションリストに追加する。ネットワークノードのCPUまたはプロセッサもしくはコアの1つがアイドルであるときに、ネットワークノードは、キャッシュ内のトランザクションリストからスマートコントラクトトランザクションを除去し、ネットワークノードのブロックチェーンの最新の状態に基づいてスマートコントラクトトランザクションを事前実行し得る。そのため、スマートコントラクトトランザクションの事前実行による影響を受ける1つまたは複数のアカウントが事前実行後に決定され得る。スマートコントラクトトランザクションの事前実行による影響を受ける1つまたは複数のアカウントは、スマートコントラクトトランザクションの実際の実行による影響を受ける1つまたは複数のアカウントの推定または予測として使用され得る。いくつかの実施形態においては、スマートコントラクトトランザクションの事前実行による影響を受ける1つまたは複数のアカウントがスマートコントラクトトランザクションの実際の実行による影響を受ける1つまたは複数のアカウントと同一ではない場合には、スマートコントラクトトランザクションの事前実行は、事前実行によるアカウントに対するあらゆる変更をロールバックまたは取り消し得る。そのため、アカウント状態は影響を受けない。
【００４７】
いくつかの実施形態においては、ネットワークノード(例えば、クライアントからスマートコントラクトトランザクションを受信し、スマートコントラクトトランザクションを事前実行する、ネットワークノード)は、例えば、追加のファイルとしてまたはスマートコントラクトトランザクションメッセージのデータ構造内の追加の要素としてスマートコントラクトトランザクションメッセージに書き込むことによって、スマートコントラクトトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを記録し得る。スマートコントラクトトランザクションとスマートコントラクトトランザクションの事前実行による影響を受ける対応する1つまたは複数のアカウントとの両方は、ネットワークノードのすべてによって行われるコンセンサスプロセスの対象となり得る。これにより、他のネットワークノードによってスマートコントラクトトランザクションの事前実行動作が繰り返されることを回避することができ、そのため、計算リソースを節約することができる。
【００４８】
いくつかの実施形態においては、多数のトランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bは、コンセンサスプロセスのエポック中に受信されるトランザクションである。いくつかの実施形態においては、コンセンサスプロセスまたは機構は、複数のノードを含むネットワークにおいて信頼性を達成するように設計される。例えば、ブロックチェーンネットワークは、コンセンサス機構を頼りにしてブロックチェーンネットワークのネットワークノード間で合意に至る。コンセンサスのエポックは、ブロックチェーンネットワークの多数のネットワークノード間でのコンセンサスの期間を表す。例えば、各ネットワークノードは、保留中のトランザクションを周期的に収集し、ブロックチェーンネットワーク内の各ネットワークノードによって実行されることになるトランザクションのリストを取得するためにそれらのそれぞれ受信した保留中のトランザクションをコンセンサスプロセスに送信し得る。
【００４９】
いくつかの実施形態においては、トランザクションが各ノードによって受信される順序は、トランザクションが関与者によって送信される順序とは異なり得る。いくつかの実施形態においては、トランザクションに対する各ノードのコンセンサス動作は、コンセンサスを行った後のトランザクションのリストのトランザクション順序の不確実性をさらに引き起こすことになる。いくつかの実施形態においては、各ネットワークノードは、多数のトランザクションを実行する前に、あるルールに従って多数のトランザクションをソートまたは順序付けしているため、ノードの順序付けルールまたはプロトコルがブロックチェーンネットワークのネットワークノード間で同一である限り、各ノードの最終的な実行結果は整合性があり得る。
【００５０】
いくつかの実施形態においては、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントと第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウント(例えば、スマートコントラクトトランザクションの実行による影響を受ける推定アカウント)とに基づいて、多数のトランザクションを1つまたは複数のグループに分割し得る、ここで、一方のグループ内のトランザクションによる影響を受けるアカウントは、他方のグループ内のトランザクションによる影響を受けるアカウントと重複しない。例えば、トランザクション1がアカウントAおよびアカウントBに影響を及ぼし、トランザクション2がアカウントBおよびアカウントCに影響を及ぼし、トランザクション3がアカウントDおよびアカウントEに影響を及ぼすと仮定すると、トランザクション1およびトランザクション2は、共通のアカウントであるアカウントBに影響を及ぼすため、同時に実行することはできない。そのため、トランザクション1、2、および3を、グループIが共通のアカウントであるアカウントBに影響を及ぼすトランザクション1および2を含み、グループIIがトランザクション3を含む、2つのグループに分割することができる。いくつかの実施形態においては、トランザクション1およびトランザクション2の2つのトランザクションの相対的な実行順序は任意であり得る。しかしながら、グループIおよびグループIIは、それらがいかなる共通のアカウントにも影響を及ぼさないため、パラレルに実行することができる。いくつかの実施形態においては、各ネットワークノードが同一の方法でグループを分割しているため、グループ内のトランザクションの実行順序が同一である限り、各ノードの整合性のある最終的な実行結果を保証することができる。
【００５１】
別の例としては、図3Bに示しているように、例えば、トランザクションの事前実行が1つまたは複数の共通のトランザクションエンティティ(例えば、送金元もしくは送信側、送金先もしくは受信側、またはそれらの対応するアカウント)に影響を及ぼすかどうか、または、例えば、1つまたは複数の同一または共通のアカウントに影響を及ぼすといった依存関係を有しているかどうかに基づいて、図3Aに示しているようなトランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bを4つのグループに分割し得る。各グループは、第1のタイプのトランザクション、第2のタイプのトランザクション、または両方の組合せのうちの1つまたは複数を含み得る。図3Bに示しているように、トランザクションの第1のグループ340aは、第1の共通のトランザクションエンティティに影響を及ぼす、第1のタイプのトランザクション302a〜dを含み、第2のグループ340bは、第2の共通のトランザクションエンティティに影響を及ぼす、第1のタイプのトランザクション304a〜cおよび第2のタイプのトランザクション310bを含み、第3のグループ340cは、第3の共通のトランザクションエンティティに影響を及ぼす、第1のタイプのトランザクション306a〜cを含み、第4のグループ340dは、トランザクション308a〜bおよび310aの事前実行結果に従って第4の共通のトランザクションエンティティに影響を及ぼす、第2のタイプのトランザクション308a〜bおよび310aを含む。グループ340a、340b、340c、および340dのうちのそれぞれ2つの間では、一方のグループ内のトランザクションは、他方のグループ内のトランザクションがトランザクションの事前実行結果を行っているため、同一のアカウントに影響を及ぼさない。
【００５２】
2つ以上のトランザクションが1つまたは複数の共通のアカウントに影響を及ぼし得る場合には、2つ以上のトランザクションを同時にパラレルに実行し得ないし、2つ以上のトランザクションは単一のグループにグループ化され得る。換言すれば、単一のグループ内にあるならば、単一のグループ内のトランザクションの実行は、1つまたは複数の同一のアカウントに影響を及ぼし、それに対して、2つの異なるグループ間では、一方のグループ内のトランザクションの実行による影響を受ける1つまたは複数のアカウントは、他のグループ内のトランザクションの実行による影響を受ける1つまたは複数のアカウントと重複しない。結果として、単一のグループ内のトランザクションはシリアルに実行されることになるのに対して、異なるグループ内のトランザクションはパラレルに実行することができる。2つ以上のトランザクション間の相対的な実行順序は、任意であり得る、例えば、ブロックチェーンネットワーク内のネットワークノードのすべてによって合意されたあるプロトコルまたは順序付けルールに従って決定されてもよい。いくつかの実施形態においては、各ネットワークノードが同一の方法でグループを分割しているため、グループ内のトランザクションの実行順序が同一である限り、各ノードの整合性のある最終的な事前実行結果を保証することができる。
【００５３】
図3Bは、本明細書の実施形態による、ブロックチェーンネットワークにおけるトランザクションについてのパラレル実行順序350の例を図示している。パラレル実行順序350に従って、トランザクションのグループ340a、340b、340c、および340dがブロックチェーンネットワークのネットワークノードによってパラレルに実行され得る。パラレルにトランザクショングループ340a、340b、340c、および304dを実行することは、すべてのトランザクションがシリアルに実行された場合のように単に1つというのではなくパラレルにどの時点においても4つのトランザクションをネットワークが今まさに実行しているため、各ネットワークノードのマルチコアまたはマルチスレッド処理能力を活用して、処理速度およびブロックチェーンネットワークにおけるトランザクションスループットにおける増大をもたらし得る。
【００５４】
いくつかの実施形態においては、ブロックチェーンネットワークの各ネットワークノードは、例えば、パラレル実行順序350に従って、パラレルに各グループのトランザクションを実行する。第2のタイプのトランザクションが、例えば、ブロックチェーンネットワークのブロックチェーンの現在または最新の状態に基づいて、実行され得る。いくつかの実施形態においては、実際の実行の時点におけるブロックチェーンの最新の状態が事前実行の時点におけるブロックチェーンネットワークのブロックチェーンの最新の状態とは異なり得るため、または、前回のトランザクションの実行が現在の第2のタイプのトランザクションの実行と現在のトランザクションの実行による影響を受ける1つまたは複数のアカウントとに影響を及ぼし得るため、第2のタイプのトランザクションの実際の実行による影響を受ける1つまたは複数のアカウントは、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとは異なり得る。この場合には、第2のタイプのトランザクションの実行はロールバックまたは取り消され得る。そのような第2のタイプのトランザクションは、失敗した第2のタイプのトランザクションと称して、失敗した第2のタイプのトランザクションのリストに追加され得る。失敗した第2のタイプのトランザクションのリストは、他のトランザクションのすべてのパラレル実行後にシリアルに再実行され得る。いくつかの実施形態においては、失敗した第2のタイプのトランザクションのリスト内の第2のタイプのトランザクションは、ブロックチェーンネットワークのすべてにわたる整合性のある実行結果を保証するために、ブロックチェーンネットワーク内のネットワークノードのすべてによって合意されたあるルールに従ってソートされ得る。
【００５５】
図3Cは、本明細書の実施形態による、ブロックチェーンネットワークにおける失敗した第2のタイプのトランザクションについての実行順序390の例を図示している。この例においては、第2のタイプのトランザクション310aおよび308bの実際の実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクション310aおよび308bの事前実行による影響を受ける1つまたは複数のアカウントとはそれぞれ異なるため、パラレル実行順序350によるグループ340a、340b、340c、および340dの第2のタイプのトランザクションの実際の実行後に、第2のタイプのアクショントランザクション310aおよび308bが失敗した第2のタイプのトランザクションであると決定され得る。この場合には、第2のタイプのトランザクション310aおよび308bの実際の実行はロールバックされる。第2のタイプのトランザクション310aおよび308bは、失敗した第2のタイプのトランザクションのリストに入れられ、パラレル実行順序350によるグループ340a、340b、340c、および340dのトランザクションの実際の実行のパラレル実行後に再実行される。
【００５６】
いくつかの実施形態においては、ブロックチェーンネットワーク内の各ネットワークノードについて、トランザクションが同一のルールに従って(例えば、トランザクションの実行による影響を受ける確定または推定アカウントに基づいて)グループ化される限り、グループ内のトランザクションの順序には整合性があり、失敗した340cおよび340dのトランザクションは、他のトランザクションの実際の実行後に同一のルールに従ってロールバックされシリアルに再実行されるため、ブロックチェーンネットワーク内のネットワークノードのすべての間で整合性のある最終的な実行結果を得ることができる。
【００５７】
図4は、本明細書の実施形態により実行され得るプロセス400の例を示している。いくつかの実施形態においては、プロセス400は、1つまたは複数のコンピューティングデバイスを使用して実行される1つまたは複数のコンピュータ実行可能プログラムを使用して行われ得る。例えば、プロセス400は、ブロックチェーンネットワーク内の各ネットワークノードによって行われ得る。提示を明確にするために、以下の説明は、本説明における他の図に即して方法400を一般的に説明している。方法400が、例えば、任意の適切なシステム、環境、ソフトウェア、およびハードウェアによって、または、必要に応じて、システム、環境、ソフトウェア、およびハードウェアの組合せによって、行われ得ることは理解されよう。いくつかの実施形態においては、方法400の様々なステップは、並列して、組み合わせて、ループして、または任意の順序で処理され得る。
【００５８】
402において、ブロックチェーンネットワークにおいて実行されることになる多数のトランザクションをブロックチェーンネットワークのネットワークノードによって受信する。ネットワークノードは、ブロックチェーンネットワークの多数のネットワークノードのうちの1つである。多数のトランザクションは、例えば、図3Aに示しているような、トランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bを含み得る。
【００５９】
いくつかの実施形態においては、ブロックチェーンネットワークのネットワークノードの各々は、例えば、ブロックチェーンネットワークのそれぞれのネットワークノードに接続されている1つまたは複数のクライアントから、ブロックチェーンネットワークにおいて実行されることになるそれぞれの多数のトランザクションを受信し得る。いくつかの実施形態においては、多数のトランザクションは、例えば、ある期間(例えば、コンセンサスプロセスのエポック)中に、ブロックチェーンネットワークのすべてのネットワークノードから受信されるすべてのトランザクションを含む。多数のトランザクションは、ブロックチェーンネットワークのすべてのネットワークノードによって行われるコンセンサスプロセスの対象となるトランザクションリストを形成し得る。
【００６０】
403において、多数のトランザクションの各々について、トランザクションが第1のタイプのトランザクションであるかまたは第2のタイプのトランザクションであるかを決定する。いくつかの実施形態においては、第1のタイプのトランザクションは、トランザクションの実行による影響を受ける1つまたは複数のアカウントがトランザクションを実行する前に確定的に決まる(すなわち、確定することができる)トランザクションを含むのに対して、第2のタイプのトランザクションは、トランザクションの実行による影響を受ける1つまたは複数のアカウントがトランザクションを実行する前に確定的に決まらない(すなわち、確定することができない)トランザクションを含む。換言すれば、第2のタイプのトランザクションの各々の実行は1つまたは複数のアカウントを及ぼし得るが、1つまたは複数のアカウントを記第2のタイプのトランザクションの各々の実行前に(例えば、トランザクションのコンテンツに基づいて)事前決定または確定することはできない。いくつかの実施形態においては、多数のトランザクションの各々の事前実行は、多数のトランザクションの各々の実際の実行による影響を受ける1つまたは複数のアカウントを予測または推定するために使用され得る。例えば、第1のタイプのトランザクションは、非スマートコントラクトトランザクション(例えば、資産送金トランザクションまたはアカウント作成トランザクション)を含み、第2のタイプのトランザクションは、スマートコントラクトトランザクション(例えば、スマートコントラクトに対するコール)を含む。
【００６１】
いくつかの実施形態においては、多数のトランザクションは、事前決定されたまたは必須の順序に従って、ネットワークノードによって実行される必要はない。換言すれば、多数のトランザクション間での相対的な実行順序は、ブロックチェーンネットワーク内のネットワークノードのすべてが同一の順序に従って多数のトランザクションを実行する限り、絶対必要なものではない。
【００６２】
404において、トランザクションが第1のタイプのトランザクションであると決定したことに応答して、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントをネットワークノードによって決定する。いくつかの実施形態においては、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは、例えば、第1のタイプのトランザクションのコンテンツまたはデータに基づいて、第1のタイプのトランザクションの実行前に事前決定または確定され得る。例えば、第1のタイプのトランザクションは、資産送金トランザクションまたはアカウント作成トランザクションなどの非スマートコントラクトトランザクションを含む。そのような第1のタイプのトランザクションによる影響を受ける1つまたは複数のアカウントを、例えば、ネットワークノードによって受信したトランザクションのデータを解析することによって、決定し得る。
【００６３】
406において、トランザクションが第2のタイプのトランザクションであると決定したことに応答して、第2のタイプのトランザクションをブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態に基づいてネットワークノードによって事前決定し、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを決定する。いくつかの実施形態においては、ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態は、第2のタイプのトランザクションの事前実行の時点におけるブロックチェーンの現在または最新の状態であり得る。いくつかの実施形態においては、第2のタイプのトランザクションは、ネットワークノードの1つまたは複数のプロセッサがアイドルであるときに、ネットワークノードによって事前実行される。いくつかの実施形態においては、第2のタイプのトランザクションは、例えば、ネットワークノードのマルチコアまたはパラレル処理能力を活用することによって、ネットワークノードが別の第2のタイプのトランザクションを受信している間にまたは他の動作を行う間に、ネットワークノードによって事前実行され得る。いくつかの実施形態においては、第2のタイプのトランザクションの事前実行は、追加の遅延またはレイテンシを生じることなくネットワークノードの計算リソースの利用または処理能力をより望ましいものにし得る。
【００６４】
いくつかの実施形態においては、事前実行した第2のタイプのトランザクションは、ブロックチェーンネットワーク内のブロックチェーンの第1の状態に対するいかなる変更も回避するためにロールバックされ得る。いくつかの実施形態においては、事前実行した第2のタイプのトランザクションは、多数のトランザクションのコンセンサスプロセスを行う前にロールバックされ得る。いくつかの実施形態においては、第2のタイプのトランザクションの事前実行は、ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態が第2のタイプのトランザクションの事前実行に起因した変更がないままとなるように、ブロックチェーンの第1の現在の状態(例えば、系全体の状態またはグローバルステートMerkle Patricia Tree(MPT)ツリー)を記憶しているデータ構造のコピーに対して行われ得る。
【００６５】
いくつかの実施形態においては、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントは、例えば、リストまたは別のデータ構造として、第2のタイプのトランザクションと一緒に記録または保存され得る。いくつかの実施形態においては、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントは、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントのコンセンサスを行うために、ブロックチェーンネットワークのすべてのネットワークノードによって行われるコンセンサスプロセスの対象となり得る。第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを記録し、ネットワークノードによってコンセンサスプロセスのためにそれらを送信することによって、他のネットワークノードによって第2のタイプのトランザクションの事前実行動作が繰り返されることを回避することができ、そのため、計算リソースを節約することができる。
【００６６】
407において、多数のトランザクション(第1のタイプおよび第2のタイプのトランザクションの両方を含む)と各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとのコンセンサスプロセスをネットワークノードによって行う。コンセンサスプロセスを、例えば、ブロックチェーンネットワークによって採用されたコンセンサスアルゴリズムまたはプロトコルに従って、行い得る。例えば、図3Aに示しているように、ブロックチェーンネットワーク内の各ネットワークノードは、トランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bのすべてと第2のタイプのトランザクション308a〜bおよび310a〜bの各々についての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとのコンセンサスプロセスを行い得る。
【００６７】
408において、各第1のタイプのトランザクションについての第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとに基づいて、ネットワークノードによって1つまたは複数のトランザクションのグループに多数のトランザクションを分割する。トランザクションのグループの各々は、1つまたは複数の共通のトランザクションエンティティに影響を及ぼす1つまたは複数のトランザクションを含む。それぞれの2つの異なるトランザクションのグループの間では、一方のグループ内の任意のトランザクションは、他方のグループ内の任意の第2のタイプのトランザクションとはいかなる共通のトランザクションエンティティにも影響を及ぼさない。共通の第2のタイプのトランザクションエンティティは、例えば、トランザクションに関連付けられた、送金先、送金元、送金先のアカウント、または送金元のアカウントを含み得る。
【００６８】
例えば、図3Bは、第1のタイプのトランザクション302a〜d、304a〜c、および306a〜cの実行による影響を受ける1つまたは複数のアカウントと、第2のタイプのトランザクション308a〜bおよび310a〜bの事前実行による影響を受ける1つまたは複数のアカウントとに基づいた、トランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bの4つのグループ340a〜dへの分割の例を示している。
【００６９】
410において、パラレルに1つまたは複数のトランザクションのグループを実行することによって多数のトランザクションを実行する。例えば、図3Bは、トランザクション302a〜d、304a〜c、306a〜c、308a〜b、および310a〜bがパラレル実行順序350に従ってパラレルに4つのトランザクションのグループ340a〜dを実行することによって実行される例を示している。
【００７０】
411において、多数のトランザクションを実行した後に、多数のトランザクションの各々について、トランザクションが第1のタイプのトランザクションであるかまたは第2のタイプのトランザクションであるかを決定する。
【００７１】
450において、各第1のタイプのトランザクションについて、多数の第1のタイプのトランザクションの実行をコミットする。いくつかの実施形態においては、第1のタイプのトランザクションの実行をコミットすることは、多数の第1のタイプのトランザクションの実行結果をブロックチェーンネットワークのブロックチェーンに書き込むこと、または、多数の第1のタイプのトランザクションの実行結果をブロックチェーンネットワークの1つまたは複数のクライアントに返信することのうちの1つまたは複数を含み得る。
【００７２】
412において、各第2のタイプのトランザクションについて、ブロックチェーンネットワーク内のブロックチェーンの第2の現在の状態に基づいて第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定する。例えば、第2のタイプのトランザクションがブロックチェーンネットワーク内のブロックチェーンの第2の現在の状態に基づいて実行されると、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを確定することができる。いくつかの実施形態においては、第2のタイプのトランザクションの4つのグループ340a〜dがパラレルに実行される。例えば、第2のタイプのトランザクション308a〜bおよび310a〜bの各々は、それぞれの第2のタイプのトランザクションの実際の実行の時点における(例えば、第2のタイプのトランザクション308a〜bおよび310a〜bの各々のパラレル実行の時点における)ブロックチェーンの現在または最新の状態などのブロックチェーンネットワーク内のブロックチェーンのそれぞれの第2の現在の状態に基づいて実行される。いくつかの実施形態においては、ブロックチェーンの第2の現在の状態は、ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態とは異なる。
【００７３】
414において、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一であるか、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数の第2のタイプのトランザクションのうちの任意の以前実行した第2のタイプのトランザクションによる影響を受けないかを決定する。
【００７４】
450において、多数の第2のタイプのトランザクションの各々について、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントの各々が第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一である、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数の第2のタイプのトランザクションのうちの任意の以前実行した第2のタイプのトランザクションによる影響を受けないと決定したことに応答して、多数の第2のタイプのトランザクションの実行をコミットする。いくつかの実施形態においては、多数の第2のタイプのトランザクションの実行をコミットすることは、多数の第2のタイプのトランザクションの実行結果をブロックチェーンネットワークのブロックチェーンに書き込むこと、または、多数の第2のタイプのトランザクションの実行結果をブロックチェーンネットワークの1つまたは複数のクライアントに返信することのうちの1つまたは複数を含み得る。
【００７５】
418において、多数の第2のタイプのトランザクションの1つについて、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数の第2のタイプのトランザクションのうちの任意の以前実行した第2のタイプのトランザクションによる影響を受けると決定したことに応答して、第2のタイプのトランザクションの実行をロールバックする。
【００７６】
420において、そのような第2のタイプのトランザクションを、パラレルに1つまたは複数のトランザクションのグループを実行した後に、再実行する。いくつかの実施形態においては、そのような第2のタイプのトランザクションは、失敗した第2のタイプのトランザクションとして識別され得る(例えば、図3Cに示しているような第2のタイプのトランザクション310aまたは308b)。
【００７７】
いくつかの実施形態においては、多数の第2のタイプのトランザクションに起因した1つまたは複数の失敗した第2のタイプのトランザクションを識別し得る、ここで、1つまたは複数の失敗した第2のタイプのトランザクションの各々について、失敗した第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは失敗した第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは多数の第2のタイプのトランザクションのうちの任意の以前実行した第2のタイプのトランザクションによる影響を受ける。1つまたは複数の失敗した第2のタイプのトランザクションは、パラレルに1つまたは複数のグループの第2のタイプのトランザクションを実行した後に再実行され得る。いくつかの実施形態においては、失敗した第2のタイプのトランザクションはすべて、失敗した第2のタイプのトランザクションリストに追加され得る。失敗した第2のタイプのトランザクションリスト内の失敗した第2のタイプのトランザクションはすべて、パラレルに1つまたは複数のグループの第2のタイプのトランザクションを実行した後にシリアルに再実行され得る。
【００７８】
いくつかの実施形態においては、失敗した第2のタイプのトランザクションの再実行後に、プロセス400は、失敗した第2のタイプのトランザクションの再実行をコミットする450に進む。
【００７９】
いくつかの実施形態においては、多数のトランザクションは、ブロックチェーンネットワークの多数のネットワークノードのうちの任意の他のネットワークノードによって実行される多数のトランザクションと同一の順序でネットワークノードによって実行される。例えば、各ネットワークノードは、ブロックチェーンネットワークの複数のネットワークノードの各々によって使用されるプロトコルに従って、1つまたは複数のグループの各々のうちの1つまたは複数のトランザクションを実行するシーケンシャルな順序を決定し得るし、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを実行するシーケンシャルな順序を決定し得る。いくつかの実施形態においては、多数のトランザクションが同一のルールに従って(例えば、トランザクションによる影響を受けるアカウントに基づいて)グループ化される限り、グループ内のトランザクションの実行順序には整合性があり、失敗した第2のタイプのトランザクションは、他のトランザクションの実際の実行後に、例えば、同一のルールに従って、ロールバックされシリアルに再実行されるため、ブロックチェーンネットワーク内のネットワークノードのすべての間で整合性のある最終的な実行結果を得ることができる。
【００８０】
図5は、本明細書の実施形態による、装置500のモジュールの例の図である。装置500は、スマートコントラクトトランザクションのパラレル実行を実施するように構成されたブロックチェーンネットワークノードの例示的な実施形態であり得るし、ここで、ブロックチェーンネットワークは、コンソーシアムブロックチェーンネットワークである。装置500は、上述した実施形態に対応し得るし、装置500は、多数のトランザクションを受信するように構成される、受信部または受信モジュール501と、トランザクションが第1のタイプのトランザクションであるかまたは第2のタイプのトランザクションであるかを決定するように構成される、第1の決定モジュール502と、トランザクションが第1のタイプのトランザクションであると決定したことに応答して、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定するように構成される、第2の決定モジュール503と、トランザクションが第2のタイプのトランザクションであると決定したことに応答して、ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態に基づいて多数の第2のタイプのトランザクションの各々を事前実行するように構成される、事前実行モジュール504と、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを決定するように構成される、第3の決定モジュール506と、多数のトランザクションと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとのコンセンサスプロセスを行うように構成される、コンセンサスモジュール508と、各第1のタイプのトランザクションについての第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとに基づいて、多数のトランザクションを1つまたは複数のトランザクションのグループに分割するように構成される、分割部または分割モジュール510と、パラレルに1つまたは複数のトランザクションのグループを実行することによって多数のトランザクションを実行するように構成される、実行モジュール512と、各第1のタイプのトランザクションについて、第1のタイプのトランザクションの実行をコミットするように構成される、第1のコミットモジュール513と、各第2のタイプのトランザクションについて、多数の第2のタイプのトランザクションの各々の実行による影響を受ける1つまたは複数のアカウントを決定し、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一であるか、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないかを決定するように構成される、第4の決定モジュール514と、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントの各々が第2のタイプのトランザクションの事前���行による影響を受ける1つまたは複数のアカウントと同一である、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないと決定したことに応答して、第2のタイプのトランザクションの実行をコミットするように構成される、第2のコミットモジュール516とを含む。
【００８１】
随意的な実施形態においては、装置500は、ある第2のタイプのトランザクションについて、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けると決定したことに応答して、多数の第2のタイプのトランザクションの1つの実行をロールバックするように構成される、ロールバックモジュール518と、パラレルに1つまたは複数のトランザクションのグループを実行した後に第2のタイプのトランザクションを再実行するように構成される、再実行モジュール520とをさらに含む。
【００８２】
随意的な実施形態においては、装置500は、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントのコンセンサスを行うために多数の第2のタイプのトランザクションの各々の事前実行による影響を受ける1つまたは複数のアカウントを記録するように構成される、記録モジュール522をさらに含む。
【００８３】
随意的な実施形態においては、多数のトランザクションは、ブロックチェーンネットワークの多数のネットワークノードのうちの任意の他のネットワークノードによって実行される多数のトランザクションと同一の順序でネットワークノードによって実行される。
【００８４】
随意的な実施形態においては、装置500は、1つまたは複数の失敗した第2のタイプのトランザクションを識別するように構成される、識別モジュール524であって、1つまたは複数の失敗した第2のタイプのトランザクションの各々について、失敗した第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは失敗した第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けない、識別モジュール524と、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを再実行するように構成される、再実行モジュール520とをさらに含む。
【００８５】
随意的な実施形態においては、装置500は、1つまたは複数のグループの各々内で1つまたは複数のトランザクションを実行するシーケンシャルな順序を決定するように構成される、第5の決定モジュール526と、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを実行するシーケンシャルな順序を決定するように構成される、第6の決定モジュール528とをさらに含む。
【００８６】
随意的な実施形態においては、トランザクションのグループの各々は、共通のトランザクションエンティティを共有する1つまたは複数のトランザクションを含み、それぞれの2つの異なるトランザクションのグループの間では、一方のグループ内の任意のトランザクションは、他方のグループ内の任意のトランザクションとはいかなる共通のトランザクションエンティティも共有しない。
【００８７】
随意的な実施形態においては、共通の第2のタイプのトランザクションエンティティは、トランザクションに関連付けられた、送金先、送金元、送金先のアカウント、または送金元のアカウントを含む。
【００８８】
随意的な実施形態においては、トランザクションの実行による影響を受けるすべてのアカウントがトランザクションを実行する前に確定的に決まるトランザクションは、第1のタイプのトランザクションであり、トランザクションの実行による影響を受ける1つまたは複数のアカウントがトランザクションを実行する前に確定的に決まらないトランザクションは、第2のタイプのトランザクションである。
【００８９】
随意的な実施形態においては、非スマートコントラクトトランザクションは、第1のタイプのトランザクションであり、スマートコントラクトトランザクションは、第2のタイプのトランザクションである。
【００９０】
随意的な実施形態においては、ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップは、ネットワークノードの1つまたは複数のプロセッサがアイドルであるときに、ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップを含む。
【００９１】
上記の実施形態において示したシステム、装置、モジュール、またはユニットは、コンピュータチップまたはエンティティを使用して実装され得る、または、ある機能を有する製品を使用して実装され得る。典型的な実施形態デバイスは、コンピュータであり、コンピュータは、パーソナルコンピュータ、ラップトップコンピュータ、セルラ電話、カメラ電話、スマートフォン、携帯情報端末、メディアプレーヤ、ナビゲーションデバイス、電子メール送受信デバイス、ゲームコンソール、タブレットコンピュータ、ウェアラブルデバイス、またはこれらのデバイスの任意の組合せであり得る。
【００９２】
装置内の各ユニットの機能および役割の実施プロセスについては、前回の方法における対応するステップの実施プロセスを参照することが可能である。簡潔にするために詳細はここでは省略する。
【００９３】
装置の実施形態が方法の実施形態に基本的に対応するため、関連する部分については、方法の実施形態における関連する説明を参照されたい。上記で説明した装置の実施形態は一例に過ぎない。別個の部分として説明したユニットは、物理的に分離され得るしまたはされ得ない。ユニットとして図示した部分は、物理ユニットであり得るしまたはあり得ないし、1つの位置にあり得るし、または多数のネットワークユニットに分散され得る。モジュールの一部またはすべては、本明細書のソリューションの目的を達成するための実際の要求に基づいて選択され得る。当業者は、創造的努力無しで本出願の実施形態を理解および実施できよう。
【００９４】
図5を再び参照すれば、内部機能モジュールおよびトランザクション実行装置の構造を図示しているものとして解釈できよう。トランザクション実行装置は、スマートコントラクトトランザクションのパラレル実行を実施するように構成されたブロックチェーンネットワークノードの例であり得る。トランザクション実行装置は、スマートコントラクトトランザクションのパラレル実行を実施するように構成されたブロックチェーンネットワークノードの例であり得る。本質的な実行の主体は、電子デバイスであり得るし、電子デバイスは、1つまたは複数のプロセッサと、1つまたは複数のプロセッサの実行可能命令を記憶するように構成される、メモリとを含む。
【００９５】
1つまたは複数のプロセッサは、ブロックチェーンネットワークにおいて実行されることになる多数のトランザクションを受信することと、多数のトランザクションの各々について、トランザクションが第1のタイプのトランザクションであるかまたは第2のタイプのトランザクションであるかを決定することと、トランザクションが第1のタイプのトランザクションであると決定したことに応答して、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定することと、トランザクションが第2のタイプのトランザクションであると決定したことに応答して、ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態に基づいて第2のタイプのトランザクションを実行することと、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを決定することと、多数のトランザクションと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとのコンセンサスプロセスを行うことと、各第1のタイプのトランザクションについての第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとに基づいて、多数のトランザクションを1つまたは複数のトランザクションのグループに分割することと、パラレルに1つまたは複数のトランザクションのグループを実行することによって多数のトランザクションを実行することと、各第1のタイプのトランザクションについて、第1のタイプのトランザクションの実行をコミットすることと、各第2のタイプのトランザクションについて、ブロックチェーンネットワーク内のブロックチェーンの第2の現在の状態に基づいて第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定することと、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一であるか、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないかを決定することと、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントの各々が第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一である、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないと決定したことに応答して、第2のタイプのトランザクションの実行をコミットすることとをするように構成される。
【００９６】
必要に応じて、1つまたは複数のプロセッサは、ある第2のタイプのトランザクションについて、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けると決定したことに応答して、第2のタイプのトランザクションの実行をロールバックすることと、パラレルに1つまたは複数のトランザクションのグループを実行した後に第2のタイプのトランザクションを実行することとをするように構成される。
【００９７】
必要に応じて、1つまたは複数のプロセッサは、各第2のタイプのトランザクションについて、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントのコンセンサスを行うために第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを記録するように構成される。
【００９８】
必要に応じて、多数のトランザクションは、ブロックチェーンネットワークの多数のネットワークノードのうちの任意の他のネットワークノードによって実行される多数のトランザクションと同一の順序でネットワークノードによって実行される。
【００９９】
必要に応じて、1つまたは複数のプロセッサは、1つまたは複数の失敗した第2のタイプのトランザクションを識別することであって、1つまたは複数の失敗した第2のタイプのトランザクションの各々について、失敗した第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは失敗した第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けない、ことと、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを実行することとをするように構成される。
【０１００】
必要に応じて、1つまたは複数のプロセッサは、ブロックチェーンネットワークの複数のネットワークノードの各々によって使用されるプロトコルに従って、1つまたは複数のグループの各々内で1つまたは複数のトランザクションを実行するシーケンシャルな順序を決定することと、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを実行するシーケンシャルな順序を決定することとするように構成される。
【０１０１】
必要に応じて、トランザクションのグループの各々は、共通のトランザクションエンティティに影響を及ぼす1つまたは複数のトランザクションを含み、それぞれの2つの異なるトランザクションのグループの間では、一方のグループ内の任意のトランザクションは、他方のグループ内の任意のトランザクションとはいかなる共通のトランザクションエンティティにも影響を及ぼさない。
【０１０２】
必要に応じて、共通のトランザクションエンティティは、トランザクションに関連付けられた、送金先、送金元、送金先のアカウント、または送金元のアカウントを含む。
【０１０３】
必要に応じて、トランザクションの実行による影響を受けるすべてのアカウントがトランザクションを実行する前に確定的に決まるトランザクションは、第1のタイプのトランザクションであり、トランザクションの実行による影響を受ける1つまたは複数のアカウントがトランザクションを実行する前に確定的に決まらないトランザクションは、第2のタイプのトランザクションである。
【０１０４】
必要に応じて、非スマートコントラクトトランザクションは、第1のタイプのトランザクションであり、スマートコントラクトトランザクションは、第2のタイプのトランザクションである。
【０１０５】
必要に応じて、ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップは、ネットワークノードの1つまたは複数のプロセッサがアイドルであるときに、ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップを含む。
【０１０６】
本明細書において説明した技法は、いくつかの技術的効果生み出す。例えば、本明細書は、分散型台帳システムにおけるトランザクションのパラレル実行が、分散型台帳システムの各ネットワークノードによって行われるトランザクションの同一の実行順序を保証しつつ、分散型台帳システムにおけるトランザクションの実行結果の整合性を保証することを可能にする技法を開示している。例えば、パラレルに実行され得るスマートコントラクトトランザクションを、例えば、スマートコントラクトトランザクションの事前実行結果に基づいて、共にグループ化する。技術的効果および利点を、とりわけ、いかなる共通のトランザクションエンティティにも影響を及ぼさない、または、互いに対して依存関係を有していない(例えば、ブロックチェーンネットワーク内の同一のアカウントに影響を及ぼさない)異なるグループトランザクションにおいて実施することによって、達成している。そのため、技法は、複数のトランザクションのグループを互いにパラレルに実行することができることを特定している。スマートコントラクトトランザクションのケースにおいては、1つまたは複数のスマートコントラクトトランザクションの実際の実行が1つまたは複数のスマートコントラクトトランザクションの事前実行によって特定された異なるアカウントに影響を及ぼす場合には、1つまたは複数のスマートコントラクトトランザクションの実行は、ロールバックまたは取り消され、その後、残りのスマートコントラクトトランザクションのパラレル実行後にシリアルに再実行しており、それによって、一般的なパラレル実行の恩恵と比較して適度な計算コストで結果の正確性を保証している。
【０１０７】
そのため、説明した技法は、トランザクションの処理速度を改善し、ブロックチェーンネットワークにおけるトランザクションスループットを増大することを可能にしている。例えば、スマートコントラクトトランザクションの事前実行は、ネットワークノードの1つまたは複数のプロセッサがアイドルであるときに、ネットワークノードによってなされ得る、このことは、追加の遅延またはレイテンシを生じることなくネットワークノードの計算リソースの利用または処理能力をより望ましいものにしている。コンセンサスプロセスを行うことによってコンセンサスを達成した後かつトランザクションを実行する前に、トランザクションを異なるグループに分割することによって、複数のトランザクションのグループは、ネットワークノードの実行速度および総合的なブロックチェーンネットワークの効率を増大するために、マルチプロセッサもしくはマルチコアネットワークノードまたはコンピュータのクラスタ内の複数のコンピュータを活用することによって、独立してパラレルに実行され得る。さらに、説明した技法は、スマートコントラクトトランザクションの実行による影響を受けるアカウントのリストの(例えば、手動での)エントリを必要としないため、エントリエラーの可能性またはあるスマートコントラクトトランザクションについての影響を受けるアカウントの予測不可能性に依存しない。
【０１０８】
発明特定事項の説明した実施形態は、単独または組合せで1つまたは複数の特徴を含み得る。
【０１０９】
例えば、第1の実施形態においては、ブロックチェーンネットワークにおいて多数のトランザクションを実行するための方法であって、ブロックチェーンネットワークは、多数のネットワークノードを含む、方法は、ブロックチェーンネットワークのネットワークノードによって、ブロックチェーンネットワークにおいて実行されることになる多数のトランザクションを受信するステップと、多数のトランザクションの各々について、トランザクションが第1のタイプのトランザクションであるかまたは第2のタイプのトランザクションであるかを決定するステップと、トランザクションが第1のタイプのトランザクションであると決定したことに応答して、ネットワークノードによって、第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定するステップと、トランザクションが第2のタイプのトランザクションであると決定したことに応答して、ネットワークノードによって、ブロックチェーンネットワーク内のブロックチェーンの第1の現在の状態に基づいて第2のタイプのトランザクションを事前実行するステップと、ネットワークノードによって、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを決定するステップと、多数のトランザクションと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとのコンセンサスプロセスを行うステップと、ネットワークノードによって、各第1のタイプのトランザクションについての第1のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントと各第2のタイプのトランザクションについての第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントとに基づいて、多数のトランザクションを1つまたは複数のトランザクションのグループに分割するステップと、パラレルに1つまたは複数のトランザクションのグループを実行することによって多数のトランザクションを実行するステップとを含む。
【０１１０】
上記および他の説明した実施形態は各々、必要に応じて、以下の特徴のうちの1つまたは複数を含み得る。
【０１１１】
下記の特徴のいずれかと組み合わせることが可能な第1の特徴としては、各第1のタイプのトランザクションについて、第1のタイプのトランザクションの実行をコミットするステップと、各第2のタイプのトランザクションについて、ブロックチェーンネットワーク内のブロックチェーンの第2の現在の状態に基づいて第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントを決定するステップと、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一であるか、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないかを決定するステップと、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントの各々が第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一である、および、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けないと決定したことに応答して、第2のタイプのトランザクションの実行をコミットするステップとをさらに含む。
【０１１２】
下記の特徴のいずれかと組み合わせることが可能な第2の特徴としては、ある第2のタイプのトランザクションについて、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントが多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けると決定したことに応答して、第2のタイプのトランザクションの実行をロールバックするステップと、パラレルに1つまたは複数のトランザクションのグループを実行した後に第2のタイプのトランザクションを実行するステップとをさらに含む。
【０１１３】
下記の特徴のいずれかと組み合わせることが可能な第3の特徴としては、各第2のタイプのトランザクションについて、第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントのコンセンサスを行うために第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントを記録するステップをさらに含む。
【０１１４】
下記の特徴のいずれかと組み合わせることが可能な第4の特徴としては、多数のトランザクションは、ブロックチェーンネットワークの多数のネットワークノードのうちの任意の他のネットワークノードによって実行される多数のトランザクションと同一の順序でネットワークノードによって実行される。
【０１１５】
下記の特徴のいずれかと組み合わせることが可能な第5の特徴としては、1つまたは複数の失敗した第2のタイプのトランザクションを識別するステップであって、1つまたは複数の失敗した第2のタイプのトランザクションの各々について、失敗した第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは失敗した第2のタイプのトランザクションの事前実行による影響を受ける1つまたは複数のアカウントと同一ではない、または、第2のタイプのトランザクションの実行による影響を受ける1つまたは複数のアカウントは多数のトランザクションのうちの任意の以前実行したトランザクションによる影響を受けない、ステップと、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを実行するステップとをさらに含む。
【０１１６】
下記の特徴のいずれかと組み合わせることが可能な第6の特徴としては、ブロックチェーンネットワークの複数のネットワークノードの各々によって使用されるプロトコルに従って、1つまたは複数のグループの各々内で1つまたは複数のトランザクションを実行するシーケンシャルな順序を決定するステップと、パラレルに1つまたは複数のトランザクションのグループを実行した後に1つまたは複数の失敗した第2のタイプのトランザクションを実行するシーケンシャルな順序を決定するステップとをさらに含む。
【０１１７】
下記の特徴のいずれかと組み合わせることが可能な第7の特徴としては、トランザクションのグループの各々は、共通のトランザクションエンティティに影響を及ぼす1つまたは複数のトランザクションを含み、それぞれの2つの異なるトランザクションのグループの間では、一方のグループ内の任意のトランザクションは、他方のグループ内の任意のトランザクションとはいかなる共通のトランザクションエンティティにも影響を及ぼさない。
【０１１８】
下記の特徴のいずれかと組み合わせることが可能な第8の特徴としては、共通のトランザクションエンティティは、トランザクションに関連付けられた、送金先、送金元、送金先のアカウント、または送金元のアカウントを含む。
【０１１９】
下記の特徴のいずれかと組み合わせることが可能な第9の特徴としては、トランザクションの実行による影響を受けるすべてのアカウントがトランザクションを実行する前に確定的に決まるトランザクションは、第1のタイプのトランザクションであり、トランザクションの実行による影響を受ける1つまたは複数のアカウントがトランザクションを実行する前に確定的に決まらないトランザクションは、第2のタイプのトランザクションである。
【０１２０】
下記の特徴のいずれかと組み合わせることが可能な第10の特徴としては、非スマートコントラクトトランザクションは、第1のタイプのトランザクションであり、スマートコントラクトトランザクションは、第2のタイプのトランザクションである。
【０１２１】
下記の特徴のいずれかと組み合わせることが可能な第11の特徴としては、ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップは、ネットワークノードの1つまたは複数のプロセッサがアイドルであるときに、ネットワークノードによって、第2のタイプのトランザクションを事前実行するステップを含む。
【０１２２】
本明細書において説明した発明特定事項ならびにアクションおよび処理の実施形態は、本明細書において開示した構造およびそれらの構造的均等物を含む、デジタル電子回路の形で、有形に具現化されたコンピュータソフトウェアまたはファームウェアの形で、コンピュータハードウェアの形で、またはそれらの組合せのうちの1つまたは複数で実装され得る。本明細書において説明した発明特定事項の実施形態は、データ処理装置による実行のためにまたはデータ処理装置の処理を制御するために、コンピュータプログラムキャリア上に符号化された、例えばコンピュータプログラム命令の1つまたは複数のモジュールといった1つまたは複数のコンピュータプログラムとして実装され得る。例えば、コンピュータプログラムキャリアは、そこに符号化または記憶されている命令を有する1つまたは複数のコンピュータ可読記憶媒体を含み得る。キャリアは、磁気ディスク、光磁気ディスク、もしくは光ディスク、ソリッドステートドライブ、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、または他のタイプの媒体などといった、有形非一時的コンピュータ可読媒体であり得る。あるいはまたは加えて、キャリアは、データ処理装置による実行に適した受信機装置への伝送のために情報を符号化するために生成された、人為的に生成した伝搬信号、例えば、機械生成された電気信号、光信号、または電磁気信号であり得る。コンピュータ記憶媒体は、機械可読ストレージデバイス、機械可読ストレージ回路基板、ランダムもしくはシリアルアクセスメモリデバイス、またはそれらのうちの1つまたは複数の組合せであり得るもしくは一部であり得る。コンピュータ記憶媒体は伝搬信号ではない。
【０１２３】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、またはコードとも称し得るまたは記述し得る、コンピュータプログラムは、コンパイル型もしくはインタプリタ型言語、または宣言型もしくは手続き型言語を含む、任意の形式のプログラミング言語で書かれ得るし、スタンドアロンプログラムとして、またはモジュール、コンポーネント、エンジン、サブルーチン、もしくはコンピューティング環境における実行に適した他のユニットとして、といったことを含む任意の形式で、デプロイされ得る。環境は、1つまたは複数のロケーションにおいてデータ通信ネットワークによって相互接続される1つまたは複数のコンピュータを含み得る。
【０１２４】
コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、必ずしも必要ではない。コンピュータプログラムは、例えば、マークアップ言語ドキュメントに記憶されている1つまたは複数のスクリプトといった、他のプログラムまたはデータを保持するファイルの一部に、当該プログラム専用の単一のファイルに、または、例えば、1つまたは複数のモジュール、サブプログラム、またはコードの一部を記憶するファイルといった、複数の協調ファイルに、記憶され得る。
【０１２５】
コンピュータプログラムの実行のためのプロセッサは、例として、汎用および特殊用途マイクロプロセッサの両方、ならびに任意の種類のデジタルコンピュータの任意の1つまたは複数のプロセッサを含む。一般的に、プロセッサは、プロセッサに結合されている非一時的コンピュータ可読媒体からデータだけでなく実行のためのコンピュータプログラムの命令も受信することになる。
【０１２６】
「データ処理装置」という用語は、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのあらゆる種類の装置、デバイス、およびマシンを含む。データ処理装置は、特殊用途ロジック回路、例えば、FPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、またはGPU(グラフィック処理ユニット)を含み得る。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つまたは複数の組合せを構成するコードを含み得る。
【０１２７】
本明細書において説明したプロセスおよびロジックフローは、1つまたは複数のコンピュータプログラムを実行し、入力データを処理して出力を生成することによって処理を行う、1つまたは複数のコンピュータもしくはプロセッサによって行われ得る。プロセスおよびロジックフローはまた、例えばFPGA、ASIC、またはGPUといった特殊用途ロジック回路によって、または、特殊用途ロジック回路と1つまたは複数のプログラマブルコンピュータとの組合せによって、実装され得る。
【０１２８】
コンピュータプログラムの実行に適したコンピュータは、汎用もしくは特殊用途マイクロプロセッサもしくはその両方、または任意の他の種類の中央処理ユニットに基づき得る。一般的に、中央処理ユニットは、リードオンリーメモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信することになる。コンピュータの要素は、命令を実行するための中央処理ユニットと、命令およびデータを記憶するための1つまたは複数のメモリデバイスとを含み得る。中央処理ユニットおよびメモリは、特殊用途ロジック回路によって補完され得る、またはそれに組み込まれ得る。
【０１２９】
一般的に、コンピュータは、1つまたは複数の記憶デバイスを含むことになる、または、1つまたは複数の記憶デバイスからデータを受信もしくは1つまたは複数の記憶デバイスにデータを送信することが動作可能なように結合されることになる。記憶デバイスは、例えば、磁気ディスク、光磁気ディスク、もしくは光ディスク、ソリッドステートドライブ、または任意の他のタイプの非一時的コンピュータ可読媒体であり得る。しかしながら、コンピュータは、そのようなデバイスを必ずしも有する必要はない。そのため、コンピュータは、ローカルおよび/またはリモートにある1つまたは複数のメモリなどといった、1つまたは複数の記憶デバイスに結合され得る。例えば、コンピュータは、コンピュータの統合コンポーネントである1つまたは複数のローカルメモリを含み得る、または、コンピュータは、クラウドネットワークにある1つまたは複数のリモートメモリに結合され得る。さらに、コンピュータは、数例挙げるとすれば、例えば、モバイル電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤ、ゲームコンソール、Global Positioning System(GPS)受信機、または例えばユニバーサルシリアルバス(USB)フラッシュドライブなどのポータブルストレージデバイスといった別のデバイスに組み込まれ得る。
【０１３０】
コンポーネントは、直接または1つまたは複数の中間コンポーネントを介して互いに電気的または光学的などといった通信可能なように接続することによって互いに「結合」され得る。コンポーネントは、コンポーネントの1つが他のものに統合されている場合も互いに「結合」され得る。例えば、プロセッサ(例えば、L2キャッシュコンポーネント)に統合されている記憶コンポーネントは、プロセッサに「結合」される。
【０１３１】
ユーザとのインタラクションを提供するために、本明細書において説明した発明特定事項の実施形態は、ユーザに情報を表示するための、例えばLCD(液晶ディスプレイ)モニタといった、表示デバイスと、コンピュータに入力を提供することを可能にする、例えば、キーボード、および例えば、マウス、トラックボール、またはタッチパッドなどのポインティングデバイスといった、入力デバイスとを有するコンピュータ上で実装され得る、または、そのようなコンピュータと通信するように構成され得る。同様に、他の種類のデバイスがユーザとのインタラクションを提供するために使用され得る。例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックといった任意の形式の感覚フィードバックであり得るし、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形式で受信され得る。加えて、コンピュータは、ユーザによって使用されるデバイスにドキュメントを送信することおよびユーザによって使用されるデバイスからドキュメントを受信することによって、例えば、ユーザのデバイス上のウェブブラウザから受信した要求に応答してウェブブラウザにウェブページを送信することによって、または、例えばスマートフォンもしくは電子タブレットといったユーザデバイス上で動作するアプリとのインタラクションを行うことによって、ユーザとのインタラクションを行い得る。また、コンピュータは、メッセージングアプリケーションを動作する例えばスマートフォンといったパーソナルデバイスにテキストメッセージまたは他の形式のメッセージを送信し、その返信としてユーザから応答メッセージを受信することによって、ユーザとのインタラクションを行い得る。
【０１３２】
本明細書は、システム、装置、およびコンピュータプログラムコンポーネントに関連して「ように構成される」という用語を使用している。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータのシステムとは、処理においてシステムに処理またはアクションを行わせるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せがインストールされているシステムを意味する。特定の処理またはアクションを行うように構成される1つまたは複数のコンピュータプログラムとは、データ処理装置によって実行されると装置に処理またはアクションを行わせる命令を含む1つまたは複数のプログラムを意味する。特定の処理またはアクションを行うように構成される特殊用途ロジック回路とは、処理またはアクションを行う電子ロジックを有する回路を意味する。
【０１３３】
本明細書は多くの特定の実施形態の詳細を含んでいるが、これらを、特許請求の範囲そのものによって定義される、主張しているものについての範囲に対する限定として解釈すべきではなく、むしろ特定の実施形態に固有のものであり得る特徴の説明として解釈すべきである。別個の実施形態に即して本明細書において説明したある特徴もまた、組み合わせることで単一の実施形態で実現され得る。反対に、単一の実施形態に即して説明した様々な特徴もまた、別々に複数の実施形態でまたは任意のサブコンビネーションで実現され得る。さらに、ある組合せで動作するものとして特徴を上記で説明している場合があるが、たとえ最初はそのように主張していたとしても、いくつかのケースにおいては、主張した組合せのうちの1つまたは複数の特徴をその組合せから削除し得るし、主張したものをサブコンビネーションまたはサブコンビネーションの変形とし得る。
【０１３４】
同様に、処理を特定の順序で図面に図示するとともに特許請求の範囲に記載しているが、このことを、示した特定の順序でもしくは一連の順序でそのような処理を行う必要があると理解すべきではないし、または、望ましい結果を達成するために図示した処理のすべてを行う必要があると理解すべきではない。ある環境においては、マルチタスク処理および並行処理が有利となり得る。さらに、上記で説明した実施形態における様々なシステムモジュールおよびコンポーネントの分離がすべての実施形態においてそのような分離を必要とすると理解すべきではなく、説明したプログラムコンポーネントおよびシステムは一般的に単一のソフトウェア製品に一緒に統合され得るまたは複数のソフトウェア製品にパッケージ化され得ると理解されたい。
【０１３５】
発明特定事項の特定の実施形態を説明してきた。他の実施形態も以下の特許請求の範囲の範囲内にある。例えば、特許請求の範囲に記載のアクションは、異なる順序で行われ得るし、それでも望ましい結果を達成し得る。一例として、添付の図面に図示したプロセスは、望ましい結果を達成するために示した特定の順序または一連の順序を必ずしも必要とするわけではない。いくつかのケースにおいては、マルチタスク処理およびパラレル処理が有利となり得る。
【符号の説明】
【０１３６】
501  受信部
502  第1の決定モジュール
503  第2の決定モジュール
504  事前実行モジュール
506  第3の決定モジュール
508  コンセンサスモジュール
510  分割部
512  実行モジュール
513  第1のコミットモジュール
514  第4の決定モジュール
516  第2のコミットモジュール
518  ロールバックモジュール
520  再実行モジュール
522  記録モジュール
524  識別モジュール
526  第5の決定モジュール
528  第6の決定モジュール
【図１】
0006827564.tif 000002
【図２】
0006827564.tif 000003
【図３Ａ】
0006827564.tif 000004
【図３Ｂ】
0006827564.tif 000005
【図３Ｃ】
0006827564.tif 000006
【図４】
0006827564.tif 000007
【図５】
0006827564.tif 000008