(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-28
(45)【発行日】2023-07-06
(54)【発明の名称】ブロックチェーン上のプロキシ・エージェントおよびプロキシ台帳
(51)【国際特許分類】
G06F 9/46 20060101AFI20230629BHJP
G06F 9/52 20060101ALI20230629BHJP
G06F 9/48 20060101ALI20230629BHJP
【FI】
G06F9/46 430
G06F9/52 150B
G06F9/48 370
(21)【出願番号】P 2020562132
(86)(22)【出願日】2019-05-28
(86)【国際出願番号】 EP2019063875
(87)【国際公開番号】W WO2019233833
(87)【国際公開日】2019-12-12
【審査請求日】2021-09-27
(32)【優先日】2018-06-06
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】クリシュナアワミー、ディリップ
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2017/0126802(US,A1)
【文献】米国特許出願公開第2018/0219676(US,A1)
【文献】米国特許出願公開第2018/0020324(US,A1)
【文献】Elli Androulaki,Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains,Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains,2018年01月30日,https://arxiv.org/pdf/1801.10228.pdf#:~:text=Fabric%20is%20a%20modular%20and,system%20for%20running%20distributed%20applications.,2022年7月27日検索
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/46
G06F 9/52
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
方法であって、
他のブロックチェーン・ノードを含むブロックチェーン・ネットワークにおける第1のブロックチェーン・ノード
で、処理を必要とするブロックチェーン・トランザクションを特定することと、
前記第1のブロックチェーン・ノードによって、および、前記第1のブロックチェーン・ノード
に近接して配置され、前記他のブロックチェーン・ノードを代理して動作するプロキシ・エージェントによって、前記ブロックチェーン・トランザクションに関連付けられるスマート・コントラクトを実行することであって、
前記プロキシ・エージェントは、
前記第1のブロックチェーン・ノードにサブミットされた複数のトランザクションのプロキシ台帳を格納する、前記実行することと、
前記ブロックチェーン・トランザクションをコミットするよう決定することと、
前記ブロックチェーン・トランザクションを、前記第1のブロックチェーン・ノードによって維持される台帳に記憶することと
を含む、方法。
【請求項2】
前記第1のブロックチェーン・ノードにおいて、
前記プロキシ・エージェントからエンドースメントを受信すること
を含む、請求項1に記載の方法。
【請求項3】
前記ブロックチェーン・ネットワークにおける1つまたは複数の他のブロックチェーン・ノード
によって前記スマート・コントラクト・
コードを実行することと、
前記1つまたは複数の他のブロックチェーン・ノードによって前記ブロックチェーン・トランザクションをコミットするよう決定することと、
前記コミットされたブロックチェーン・トランザクションを、前記1つまたは複数の他のブロックチェーン・ノードのそれぞれによって維持される他の台帳に記憶することと
をさらに含む、請求項1に記載の方法。
【請求項4】
前記プロキシ・エージェントが、前記第1のブロックチェーン・ノードにインストールされるか、または、前記第1のブロックチェーン・ノードの一定の近接内
の場所に配置される、請求項1に記載の方法。
【請求項5】
前記
場所が、前記第1のブロックチェーン・ノード
と前記プロキシ・エージェントとの通信について、レイテンシの上限しきい値を超えない、決定されたレイテンシに基づいているか、または、前記
場所が、前記第1のブロックチェーン・ノードと、
前記プロキシ・エージェントのために使用される処理プラットフォームへの物理的な距離との間の地理学的距離に基づいている、請求項4に記載の方法。
【請求項6】
前記プロキシ・エージェントから前記他のブロックチェーン・ノードへ更新を送信して前記他のブロックチェーン・ノードにおいて他の台帳の複製を更新すること
をさらに含む、請求項1に記載の方法。
【請求項7】
前記
プロキシ・エージェントに関連付けられる
前記プロキシ台帳において前記ブロックチェーン・トランザクションを記憶すること
をさらに含む、請求項1に記載の方法。
【請求項8】
前記ブロックチェーン・トランザクションを
前記他のブロックチェーン・ノードに送信した後、前記プロキシ台帳において前記ブロックチェーン・トランザクションをキャッシュすることと、
前記ブロックチェーン・トランザクションを前記他のブロックチェーン・ノードに送信した後で、かつ、前記他のブロックチェーン・ノードからの前記ブロックチェーン・トランザクションの受領の確認を受信した後、前記プロキシ台帳において前記ブロックチェーン・トランザクションを削除することと
をさらに含む、請求項7に記載の方法。
【請求項9】
システムであって、
他のブロックチェーン・ノードを含むブロックチェーン・ネットワークにおける第1のブロックチェーン・ノードであって、
コミットを必要とするブロックチェーン・トランザクションを特定することと、
前記第1のブロックチェーン・ノードによって前記ブロックチェーン・トランザクションに関連付けられるスマート・コントラクトを実行することとを行うように構成される、前記第1のブロックチェーン・ノードと、
前記第1のブロックチェーン・ノード
に近接して配置され、前記他のブロックチェーン・ノードを代理して動作するプロキシ・エージェントであって、
前記プロキシ・エージェントは、
前記第1のブロックチェーン・ノードにサブミットされた複数のトランザクションのプロキシ台帳を格納する、前記プロキシ・エージェントと
を含み、前記第1のブロックチェーン・ノードは、
前記ブロックチェーン・トランザクションをコミットすることと、
前記ブロックチェーン・トランザクションを、前記第1のブロックチェーン・ノードによって維持される台帳に記憶することと
を行うように構成される、システム。
【請求項10】
前記第1のブロックチェーン・ノードが、
前記プロキシ・エージェントからエンドースメントを受信するようにさらに構成される、請求項9に記載のシステム。
【請求項11】
前記ブロックチェーン・ネットワークにおける1つまたは複数の他のブロックチェーン・ノードが、前記ブロックチェーン・トランザクションを前記1つまたは複数の他のブロックチェーン・ノードへコミットする決定により、前記スマート・コントラクト・
コードを実行することと、前記コミットされたブロックチェーン・トランザクションを前記1つまたは複数の他のブロックチェーン・ノードのそれぞれによって維持される他の台帳に記憶することとを行うように構成される、請求項9に記載のシステム。
【請求項12】
前記プロキシ・エージェントが、前記第1のブロックチェーン・ノードにインストールされるか、または、前記第1のブロックチェーン・ノードの一定の近接内の場所
に配置される、請求項9に記載のシステム。
【請求項13】
前記
場所が、前記第1のブロックチェーン・ノードと
前記プロキシ・エージェントとの通信についてレイテンシの上限しきい値を超えない、決定されたレイテンシに基づいているか、または前記
場所が、前記第1のブロックチェーン・ノードと、前記1つまたは複数のプロキシ・エージェントのために使用される処理プラットフォームへの物理的な距離との間の地理学的距離に基づいている、請求項12に記載のシステム。
【請求項14】
前記プロキシ・エージェントが、前記他のブロックチェーン・ノードにおいて前記他の台帳の複製を更新するために前記他のブロックチェーン・ノードへ更新を送信するように構成される、請求項9に記載のシステム。
【請求項15】
前記プロキシ・エージェントが、
前記複数のプロキシ・エージェントに関連付けられるプロキシ台帳において前記ブロックチェーン・トランザクションを記憶することと、前記ブロックチェーン・トランザクションが
前記他のブロックチェーン・ノードに送信された後、前記プロキシ台帳において前記ブロックチェーン・トランザクションをキャッシュすることと、前記ブロックチェーン・トランザクションが前記他のブロックチェーン・ノードに送信された後で、かつ、前記他のブロックチェーン・ノードからの前記ブロックチェーン・トランザクションの受領の確認が受信された後、前記プロキシ台帳において前記ブロックチェーン・トランザクションを削除することとを行うように構成される、請求項9に記載のシステム。
【請求項16】
非一過性のコンピュータ可読記憶媒体であって、実行されるとプロセッサに
他のブロックチェーン・ノードを含むブロックチェーン・ネットワークにおける第1のブロックチェーン・ノードにおいて、処理を必要とするブロックチェーン・トランザクションを特定することと、
前記第1のブロックチェーン・ノードによって、および、前記第1のブロックチェーン・ノード
に近接して配置され、前記他のブロックチェーン・ノードを代理して動作するプロキシ・エージェントによって、前記ブロックチェーン・トランザクションに関連付けられるスマート・コントラクトを実行することであって、
前記プロキシ・エージェントは、
前記第1のブロックチェーン・ノードにサブミットされた複数のトランザクションのプロキシ台帳を格納する、前記実行することと、
前記ブロックチェーン・トランザクションをコミットするよう決定することと、
前記ブロックチェーン・トランザクションを、前記第1のブロックチェーン・ノードによって維持される台帳に記憶することと
を実施させる命令を記憶するように構成される、非一過性のコンピュータ可読記憶媒体。
【請求項17】
前記プロセッサが、
前記第1のブロックチェーン・ノードにおいて、
前記プロキシ・エージェントからエンドースメントを受信することと、
前記ブロックチェーン・ネットワークにおける1つまたは複数の他のブロックチェーン・ノード
によって前記スマート・コントラクト・
コードを実行することと、
前記1つまたは複数の他のブロックチェーン・ノードによって前記ブロックチェーン・トランザクションをコミットするよう決定することと、
前記コミットされたブロックチェーン・トランザクションを前記1つまたは複数の他のブロックチェーン・ノードのそれぞれによって維持される他の台帳に記憶することと
を実施するようにさらに構成される、請求項16に記載の非一過性のコンピュータ可読記憶媒体。
【請求項18】
前記プロキシ・エージェントが、前記第1のブロックチェーン・ノードにインストールされるか、または前記第1のブロックチェーン・ノードの一定の
近接内の場所に配置され、前記場所が、前記第1のブロックチェーン・ノードと前記1つまたは複数のプロキシ・エージェントとの通信についてレイテンシの上限しきい値を超えない、決定されたレイテンシに基づいているか、または前記
場所が、前記第1のブロックチェーン・ノードと、前記1つまたは複数のプロキシ・エージェントのために使用される処理プラットフォームへの物理的な距離との間の地理学的距離に基づいている、請求項16に記載の非一過性のコンピュータ可読記憶媒体。
【請求項19】
前記プロセッサが、
前記プロキシ・エージェントから前記他のブロックチェーン・ノードへ更新を送信して前記他のブロックチェーン・ノードにおいて前記他の台帳の複製を更新することと、
前記プロキシ・エージェントに関連付けられるプロキシ台帳において前記ブロックチェーン・トランザクションを記憶することと
を実施するようにさらに構成される、請求項16に記載の非一過性のコンピュータ可読記憶媒体。
【請求項20】
前記プロセッサが、
前記ブロックチェーン・トランザクションを
前記他のブロックチェーン・ノードに送信した後、前記プロキシ台帳において前記ブロックチェーン・トランザクションをキャッシュすることと、
前記ブロックチェーン・トランザクションを前記他のブロックチェーン・ノードに送信した後で、かつ、前記他のブロックチェーン・ノードからの前記ブロックチェーン・トランザクションの受領の確認を受信した後、前記プロキシ台帳において前記ブロックチェーン・トランザクションを削除することと
を実施するようにさらに構成される、請求項19に記載の非一過性のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、一般的に、ブロックチェーンへのピア参加に関し、より詳細には、ブロックチェーン上のプロキシ・エージェントおよびプロキシ台帳に関する。
【背景技術】
【0002】
台帳は、一般的にトランザクションが記録される勘定台帳として定義される。分散台帳は、全体または一部が複数のコンピュータに複製される台帳である。暗号化台帳(CDL)は、次の性質:不可逆性(いったんトランザクションが記録されると、元に戻すことができない)、アクセス性(任意の関係者が、CDLに全体または一部アクセスすることができる)、時系列的かつタイムスタンプを有する(すべての関係者が、トランザクションがいつ台帳に追加されたかを知っている)、合意ベースである(トランザクションは、ネットワーク上の関係者によって、典型的には満場一致で、認められた場合のみ追加される)、検証可能性(すべてのトランザクションは暗号法的に検証することができる)のうちの少なくともいくつかを有することができる。ブロックチェーンは、CDLの一例である。本明細書における説明および図面は、ブロックチェーンに関して説明されるが、当該出願はあらゆるCDLに等しく適用する。
【0003】
分散台帳は、継続的に増大するレコードのリストであり、典型的には、他のブロックに関連する暗号法的ハッシュを記憶するなど、暗号法的技法を適用する。ブロックチェーンは、分散台帳の一般的な一例であり、情報を記憶するためのパブリックな台帳として使用することができる。主に金融取引用に使用されるが、ブロックチェーンは、商品およびサービスに関連する様々な情報(すなわち、製品、パッケージ、状態など)を記憶することができる。非中央集権化されたスキームは、非中央集権化されたネットワークに権限および信頼性を与え、そのノードが連続的にかつ順次にそれらのトランザクションをパブリックな「ブロック」に記録することを可能にし、ブロックチェーンと参照される一意な「チェーン」を作成する。ハッシュ・コードを介する暗号法を使用して、トランザクション・ソースの認証をセキュアにして、中心となる仲介者を不要とする。ブロックチェーンは、継続的に増大するレコードのリストをブロックチェーンのブロック内に維持する分散データベースであり、その不変な性質により改竄および改版されることからセキュアになされている。それぞれのブロックは、タイムスタンプおよび先行するブロックに対するリンクを含んでいる。ブロックチェーンを使用して、情報の保持、追跡、移送、および検証をすることができる。ブロックチェーンは、分散システムであるため、トランザクションをブロックチェーン台帳に追加する前に、すべてのピアが合意状態に達する必要がある。
【0004】
従来、許可型のブロックチェーン(permissioned blockchain)のシステムは、ノード間で分散される合意を提供する際、有意なレイテンシを被っていた。ブロックチェーン・ネットワークに参加するノードの場所およびこれらのノード間の通信に関与するレイテンシに依存して、既存のブロックチェーン・ネットワークのパフォーマンスは、例えば、1秒当たり数10トランザクションまたはそれよりも多いオーダーとなる場合がある。主流となるブロックチェーン・トランザクションのプロセッサは、時には1秒当たり50000トランザクションを超える速度をピークとして、平均して1秒当たり数千トランザクションをサポートすることができる。ほとんどのブロックチェーン・システムは、現在の能力を有意に超えて増大するようパフォーマンスの向上を必要とするより大きなスケールのキャパシティへ拡張する傾向がある。従来型のブロックチェーン・ネットワークでは、ネットワークに参加しているノードは、台帳のノードの複製に結合されるスマート・コントラクト・レイヤでプログラムされたロジックを処理する。システム内でコミットされるトランザクションについて、合意メカニズムを介して検証ノード(ノードを選択する)により様々なトランザクションが合意され、トランザクションは、さらに検証リーダーノードによって順序付けられ、それぞれのノードは、トランザクションを台帳のその複製にコミットする。
【0005】
ある構成では、エンドーシング・ノードのセットがトランザクションをエンドースし、その後、トランザクションは、順序付けられ、個々の台帳にコミットされる。これらのエンドーシング・ノード間の相互作用に伴うレイテンシに応じて、システムのスループット・パフォーマンスが限定要因となり得、遅延および他のシステム構成の懸念事項をもたらす場合がある。
【発明の概要】
【0006】
例示的な一実施形態は、ブロックチェーン・ノードによるエンドースメントを必要とするブロックチェーン・トランザクションを特定することと、他のブロックチェーン・ノードのうちの1つまたは複数に関連付けられるプロキシ・エージェントから1つのブロックチェーン・ノードにおいてエンドースメントを受信することと、ブロックチェーン・トランザクションをコミットするよう決定することと、コミットされたブロックチェーン・トランザクションを、1つのブロックチェーン・ノードによって維持される台帳に記憶することと、のうちの1つまたは複数を含む方法を提供することができる。
【0007】
さらに別の例示的な実施形態は、第1のブロックチェーン・ノードであって、コミットを必要とするブロックチェーン・トランザクションを特定することと、第1のブロックチェーン・ノードによってブロックチェーン・トランザクションに関連付けられるスマート・コントラクトを実行することとのうちの1つまたは複数を行うように構成された第1のブロックチェーン・ノードと、第1のブロックチェーン・ノードとコロケートされる1つまたは複数のプロキシ・エージェントであって、1つまたは複数のプロキシ・エージェントは、ブロックチェーン・ネットワーク上の他のブロックチェーン・ノードにも関連付けられる、1つまたは複数のプロキシ・エージェントとを含み、第1のブロックチェーン・ノードは、また、ブロックチェーン・トランザクションをコミットすることと、ブロックチェーン・トランザクションを、第1のブロックチェーン・ノードによって維持される台帳に記憶することを行うように構成される、システムを含むことができる。
【0008】
なお別の例示的な実施形態は、実行されるとプロセッサに、第1のブロックチェーン・ノードにおいて、処理を必要とするブロックチェーン・トランザクションを特定することと、第1のブロックチェーン・ノードによって、および、前記第1のブロックチェーン・ノードとコロケートされる1つまたは複数のプロキシ・エージェントによって、ブロックチェーン・トランザクションに関連付けられるスマート・コントラクトを実行することであって、1つまたは複数のプロキシ・エージェントはブロックチェーン・ネットワーク上の他のブロックチェーン・ノードにも関連付けられる、実行することと、ブロックチェーン・トランザクションをコミットするよう決定することと、ブロックチェーン・トランザクションを、第1のブロックチェーン・ノードによって維持される台帳に記憶することとを実施させる命令を記憶するように構成される、非一過性のコンピュータ可読記憶媒体を含むことができる。
【図面の簡単な説明】
【0009】
【
図1A】例示的な実施形態による、プロキシ・ノードを伴うプロキシ台帳およびエンドースメント管理のシステム・ネットワーク構成の図である。
【
図1B】例示的な実施形態による、プロキシ台帳およびエンドースメント管理のシステム・ネットワーク構成の図である。
【
図2A】例示的な実施形態による、プロキシ・エージェントのトランザクション・エンドースメントについての例示的なピア・ノードのブロックチェーン・アーキテクチャ構成の図である。
【
図2B】例示的な実施形態による、例示的なピア・ノードのブロックチェーン構成の図である。
【
図3】例示的な実施形態による、許可型のブロックチェーンのネットワークの図である。
【
図4】例示的な実施形態による、プロキシ・エージェントを介するピア・ノード管理を実施するためのシステム・メッセージング図である。
【
図5A】例示的な実施形態による、ブロックチェーン内でのプロキシ・エージェント管理の例示の方法のフロー図である。
【
図5B】例示的な実施形態による、ブロックチェーン内でのプロキシ・エージェント管理の別の例示の方法のフロー図である。
【
図5C】例示的な実施形態による、ブロックチェーン内でのプロキシ・エージェント管理の別の例示の方法のフロー図である。
【
図6A】例示的な実施形態による、本明細書において説明される1つまたは複数の動作にしたがう、ブロックチェーン上で様々な動作を実施するように構成される例示的な物理的インフラストラクチャの図である。
【
図6B】例示的な実施形態による、契約当事者間の例示的なスマート・コントラクト構成およびブロックチェーン上でスマート・コントラクト条項を執行するように構成された仲介サーバを示す図である。
【
図7】例示的な実施形態のうちの1つまたは複数をサポートするように構成される例示的なコンピュータ・システムの図である。
【発明を実施するための形態】
【0010】
本明細書の図面において一般的に説明され図示される当該コンポーネントは、多様な構成で配置構成され、設計される可能性があることが容易に理解されよう。したがって、添付の図面に表現される方法、装置、非一過性のコンピュータ可読媒体、およびシステムのうち少なくとも1つの実施形態の以下の詳細な説明は、特許請求される本出願の範囲を限定するよう意図されておらず、選択された実施形態の単なる典型例である。
【0011】
本明細書を通じて説明される当該特徴、構造、または特性は、1つまたは複数の実施形態において、任意の適切なやり方で組み合わせることができる。例えば、本明細書を通じて、句「例示的な実施形態」、「いくつかの実施形態」または他の同様の言い回しの使用は、実施形態に関連して説明される特定の特徴、構造または特性が少なくとも1つの実施形態に含まれ得る事実に言及している。したがって、本明細書を通じて、句「例示的な実施形態」、「いくつかの実施形態」、「他の実施形態において」または他の同様の言い回しの登場は、必ずしもすべてが実施形態の同一の群を指しておらず、説明される特徴、構造、または特性は1つまたは複数の実施形態において任意の適切なやり方で組み合わせることができる。
【0012】
加えて、用語「メッセージ」が実施形態の説明に使用されている場合があるが、その適用はパケット、フレーム、図などの多くのタイプのネットワーク・データに適用され得る。用語「メッセージ」はまた、パケット、フレーム、データグラム、およびそのあらゆる等価物を含む。さらには、例示的な実施形態において特定のタイプのメッセージおよびシグナリングが描かれる場合がある一方、これらは特定のタイプのメッセージに限定されず、また本出願は特定のタイプのシグナリングに限定されない。
【0013】
例示的な実施形態は、様々な場所におけるノードにわたって分散台帳(ブロックチェーン)を維持するためのプロキシベースの手法を提供する方法、デバイス、ネットワーク、またはシステムあるいはその組合せを提供する。プロキシ・スマート・コントラクト・エージェントおよびプロキシ台帳は、ブロックチェーン・ネットワーク上のそれぞれのノードにおいてデプロイされてもよい。トランザクションに必要なリソースは、ノードを代表するエージェントをまたいで分割することができる。集約台帳(aggregate ledger)は、それぞれのノードにサブミットされたトランザクションに基づいて別個の台帳のセットとして維持される。システムは、プロキシ・ノードにおいてトランザクションをキャッシュする柔軟性を与え、高速のトランザクション処理を可能にして、それぞれのノードをまたいで必要に応じてアクセス制御を与えられて利用されるスマート・コントラクト・ロジックにおける柔軟性を与えることができる。システムのスケーラビリティは、それぞれのノードが、他のノードからのプロキシ・エージェントと相互作用をしてその台帳をローカルに更新する能力によって実現される。ノード、ひいては合意に関するプロキシ・エージェントの数が増加するにつれ、1ノード当たりのスループットは低下する可能性がある。しかしながら、他のプロキシ・ノード・エージェントが単に非検証エージェントとして機能することから、システムは、ノード当たりのスループット・スケーラビリティを確実にするために、合意決定に関与するノードの数を制限するように構成することができる。システム全体のスループットは、それぞれのノードにおける台帳のスループットの合計に基づくことになる。結果として、それぞれのノードにおける処理が比較的独立的であることに起因して、このシステムは、それぞれのノードにおいてプロキシ・エージェントによって可能にされる、トランザクションの局所化された処理に高度にスケーラブルなスループットを提供することができる。
【0014】
ブロックチェーンは、互いに通信する複数のノードを含む分散システムである。ブロックチェーンは、チェーンコード(例えば、スマート・コントラクトなど)と呼ばれるプログラムを動作させ、状態および台帳データを保持し、トランザクションを実行する。いくつかのトランザクションは、チェーンコードで呼び出される動作である。一般的に、ブロックチェーン・トランザクションは、典型的には一定のブロックチェーン・メンバによって「エンドース」されなければならず、エンドースされたトランザクションだけがブロックチェーンにコミットすることができ、ブロックチェーンの状態に影響を与えることができる。エンドースされない他のトランザクションは、無視される。管理機能およびパラメータのための1つまたは複数の特殊なチェーンコードが存在する場合があり、システム・チェーンコードと総称される。
【0015】
ノードは、ブロックチェーン・システムの通信エンティティである。「ノード」は、異なるタイプの複数のノードが同一の物理サーバ上で実行することができるという意味で、論理的な機能を実施することができる。ノードは、信頼されるドメインにグループ化され、それらを様々な方法で制御する論理的なエンティティに関連付けられる。ノードは、エンドーサ(例えば、ピア)にトランザクション呼び出しをサブミットして順序付けサービス(例えば、順序付けノード)にトランザクション・プロポーザルをブロードキャストするクライアントまたはサブミット・クライアント・ノードなどの様々なタイプを含むことができる。別のタイプのノードは、クライアントがサブミットしたトランザクションを受信し、そのトランザクションをコミットして、ブロックチェーン・トランザクションの台帳の状態および複製を維持することができる、ピア・ノードである。ピアはまたエンドーサの役割を有することができるが、これは必要事項ではない。順序付けサービス・ノード、すなわちオーダラ―(orderer)は、すべてのノードについて通信サービスを実行中のノードであり、トランザクションをコミットしてブロックチェーンのワールド・ステートを変更する際、システム内のピア・ノードのそれぞれへのブロードキャストなどの配信保証を実装し、これは通常制御およびセットアップ情報を含む初期のブロックチェーン・トランザクション用の別名である。
【0016】
台帳は、ブロックチェーンのすべての状態遷移の、順序付けられた、耐改竄性のレコードである。状態遷移は、参加している関係者(例えば、クライアント・ノード、順序付けノード、エンドーサ・ノード、ピア・ノードなど)によってサブミットされたチェーンコード呼び出し(すなわち、トランザクション)から生じる場合がある。トランザクションは、作成、更新、削除など、1つまたは複数のオペランドとして台帳にコミットされるアセットのキー-バリューの対のセットとなる可能性がある。台帳は、不変で、ブロック内の順序付けられるレコードを記憶するために使用されるブロックチェーン(チェーンとも称される)を含む。台帳は、ブロックチェーンの現在の状態を維持するステート・データベースをさらに含む。典型的には1チャネルあたり1台帳である。それぞれのピア・ノードは、それらがメンバであるそれぞれのチャネルごとの台帳の複製を維持する。
【0017】
チェーンは、ハッシュでリンクされたブロックとして構造化されるトランザクション・ログであり、それぞれのブロックは、一連のN個のトランザクションを含み、ここでNは1以上である。ブロックのヘッダは、ブロックのトランザクションのハッシュ、ならびにそれに先行ブロックのヘッダのハッシュを含む。この方法で、台帳のすべてのトランザクションを順序付け、ともに暗号法的にリンクさせることができる。したがって、ハッシュ・リンクを壊さずに台帳データを改竄することは不可能である。最も最近追加されたブロックチェーンのブロックのハッシュは、チェーン上のそれまでに生じたすべてのトランザクションを代表しており、すべてのピア・ノードが、一貫しており、信頼できる状態にあることを確実にすることを可能にしている。チェーンは、ピア・ノードのファイル・システム(すなわち、ローカル、付属ストレージ、クラウドなど)に記憶することができ、ブロックチェーン・ワークロードの追記のみの性質を効率的にサポートしている。
【0018】
不変な台帳の現在の状態は、チェーン・トランザクション・ログに含まれるすべてのキーに対する最新のバリューを表している。現在の状態は、チャネルに既知である最新のキーバリューを表しているため、ときにはワールド・ステートと称される。チェーンコード呼び出しは、台帳の現在の状態データに対するトランザクションを実行する。これらのチェーンコード相互作用を効率的にするために、キーの最新のバリューをステート・データベースに記憶することができる。ステート・データベースは、単純にチェーンのトランザクション・ログにインデックス付けされたビューであるため、いつでもチェーンから再生成することができる。ステート・データベースは、ピア・ノードのスタートアップ時、またトランザクションが受理されるより前に、自動的にリカバリすることができる(または必要であれば生成される)。
【0019】
例では、図面の要素に対応するよう定義される特定の変数および識別子を与える。例えば、「N」は、ネットワークにおけるブロックチェーン・ノードのセットであり、「SC(n,m)」は、ノード「m」においてサブミットされたトランザクションで実行されるNノードのうちの1つ「n」についてのスマート・コントラクト・コードであり、proxy(n,m)は、ノード「m」で実行中のノード「n」用のプロキシ・エージェントであり、ledger(m,n)はノード「n」において維持されるノード「m」用の台帳であり、ledger(m,m)は、ノード「m」において維持されるノード「m」用の台帳の複製であり、proxyledger(m,proxy(n,m))は台帳であり、Ag.ledger(m)はノード「m」において維持されるすべてのledger(ledger(i,m))の集約セットであり、ここでiεNである。
【0020】
例示の実施形態によると、ブロックチェーン・ネットワーク内のそれぞれのノードにおいて、他のノードに対応するプロキシ・スマート・コントラクト・エージェントは、特定のノードとコロケートされるか、または一定程度のサービスを維持するためにピアが十分近くない場合にピア・ノード動作に支援を与えるために特定のノードに極近接して位置付けられるか、あるいはその両方であるプロキシ・ノード・エージェントにおいてデプロイされる。ブロックチェーン・トランザクションの要求の何らかの合意もしくはエンドースメント、または他の通信、あるいはその両方が必要とされる場合、第1のノード「A」において、ノード「A」においてサブミットされたトランザクションを処理するために、ノード「A」にインストールされたか、または他のピアよりもノード「A」の近くにインストールされたプロキシ・スマート・コントラクト・エージェントは、他のノードを代理して実行し、トランザクションを処理して必要な入力を与える。トランザクションを成功裏に処理した後、処理されたトランザクションは、ノード「A」において維持される台帳「A」にコミットされる。プロキシ・スマート・コントラクト・エージェントはさらに台帳を維持し、トランザクションをledger(A,A)のそれ自身の複製にコミットする。ノード「B」を代理するプロキシ・エージェントは、台帳「A」のその複製を作成して更新し、これはledger(A,proxy(B,A))と呼ばれる。周期的に、プロキシ・スマート・コントラクトは、別のノード「B」を代理して、ノード「B」にブロックの更新されたセットを送信する。ノード「B」において、ノード「A」についての台帳の複製が維持され(ledger(A,B))て、ledger(A,proxy(B,A))への更新に基づいてノード「B」がproxy(B,A)から更新を受信するとledger(A,B)が更新されるようにする。
【0021】
図1Aは、例示的な実施形態による、プロキシ・ノードを伴うプロキシ台帳およびエンドースメント管理のシステム・ネットワーク構成を図示している。
図1Aを参照すると、それぞれのノードは、そのノードにおいてサブミットされたトランザクションに基づいて台帳の複製、ならびに、他のノードからの台帳の複製を有し、これは、これらのノードに対してサブミットされたトランザクションに基づく。この例100Aでは、プロキシ・ノード108および110は、ノード「A」102と相互作用してノード「A」用の台帳を維持している。ノードB104およびノードC106は、それら自身の個々のプロキシ・ノードからの更新に基づいて、ノードA上の台帳への更新を同期する。
【0022】
一例において、トランザクションは、ノードCによって供給される商品に基づいてノードAにおいて行うことができ、これらはノードBを介して出荷される。商品がノードAに到達すると、ノードAによってノードCおよびBに対してトランザクションが作られ、ノードAにおいてノードA用の台帳によって、ならびにノードAにおいてコロケートされるノードCおよびB用のプロキシ・エージェントによって管理されるプロキシ台帳によって記録され、プロキシ台帳はノードAにおいてノードA用の台帳に記憶されているトランザクションの記録を複製する。コロケートされる態様は、同一のノードにインストールすることができるか、またはノードで動作している管理プラットフォーム・ノードにインストールすることができるか、あるいはその両方である。時間的に後に、個々のノードCおよびBは、ノードAにおいてコロケートされるそれらの個々のプロキシ・エージェントを介してトランザクションに関する情報を受信する。あるいは、移送が行われるのではなく、ノードAの台帳は単に商品がノードAに到着したというイベントを記録することができ、この情報はノードCおよびB用のプロキシ・エージェントによって管理されるプロキシ台帳において複製され、やはりこれらはノードAとコロケートされる。時間的に後に、個々のノードCおよびBは、それらの個々のプロキシ・エージェントからトランザクションに関する情報を受信し、それら自身のカスタム台帳をそれらの記録手順に適切なあらゆるやり方で更新することができるが、これはトランザクション自身と同時的に起こらなくてもよい。
【0023】
図1Bは、例示的な実施形態による、プロキシ台帳およびエンドースメント管理のシステム・ネットワーク構成100Bの図である。
図1Bを参照すると、集約台帳(Ag.ledger(A))は、ledger(A,A)124および他のノードのledger(B,A)、ledger(C,A)などからの台帳の複製を含む場合がある。集約台帳(Ag.ledger(B))は、ledger(B,B)、ならびにledger(A,B)116およびledger(C,B)などの他のノードからの台帳の複製を含む場合がある。集約台帳(Ag.ledger(C))は、ledger(C,C)、ならびにledger(A,C)128およびledger(B,C)などの他のノードからの台帳の複製を含む場合がある。したがって、全体的なブロックチェーン台帳システムは、ノードのそれぞれにおいてサブミットされたトランザクションに基づく台帳の集約に基づいている。簡潔さの理由から、
図100Aには、上で特定されたすべての台帳複製は含まれていない。
【0024】
受け取った商品についての移送に関連付けられるトランザクションの例について、ノードAについてのスマート・コントラクトSC(A,A)122、あるいはSC(B)114に基づいている、ProxySC(B,A)118として示される、プロキシ・ノードにおけるノードBについてのプロキシ・スマート・コントラクト、もしくはSC(C)126に基づいている、ProxySC(C,A)132として示される、ノードAに位置する、ノードCについてのプロキシ・スマート・コントラクトまたはその両方を使用して、ノードA用のトランザクション残高が商品についてトランザクションの必要事項をカバーするために妥当かどうかを判断することができる。ノードAは、また、それ自身のスマート・コントラクトSC(A,A)122を有する。ノードAにおいて商品の受け取りを単に記録することの例については、そのようなスマート・コントラクトは、受け取った商品の量がトランザクション注文を反映して妥当だったかどうか、または受け取った商品のタイプが正しかったかどうか、または商品が期日前に受け取ったかどうか、などの制約をチェックすることができる。
【0025】
ledger(A,proxy(B,A))120などのそれぞれのプロキシ台帳は、ledger(A,A)124全体を表してはいない。ledger(A,proxy(C,A))134についても、同様のシナリオである。ノードBにおいてledger(A,B)をコミットした後、プロキシ台帳はそれが含むブロックを削除することができる。しかしながら、過去のトランザクションについてのブロックチェーン・システムからの読み出しが、すべてのノードにわたる合意を必要とする場合、データ検証時間が増大する可能性がある。あるいは、ノードBにおいてledger(A,B)をコミットした後、プロキシ台帳はすべての最近のトランザクションのキャッシュを維持し続けることができる。使われてから最も時間が経過した(Least Recently Used:LRU)トランザクションを無効にするキャッシュベースの手法は、過去のトランザクションについてのノードにわたるデータ検証が高速で起こり、他のノードからの参加とともにそれぞれのノードにおいてローカルに実施されることを保証にすることができる。ノードのプロキシ・エージェントとその親ノードとの間の更新の頻度は、利用可能なキャッシュのサイズにより、変わる可能性がある。あるいは、キャッシュのサイズは、ノードにわたるネットワーク内の動的な負荷およびキャッシュ記憶空間可用性に基づくノードのプロキシ・エージェントとその親ノードとの間の更新の頻度に基づいて、変わる可能性がある。すべてのノードにわたる単一の台帳、また1つの台帳ですべてのノードにわたって合意を維持するようと試みる代わりに、このタイプのシステムは、台帳のセットを維持し、このセットはそれぞれのノードごとに1つの台帳を含む。プロキシ・スマート・コントラクト・エージェントを含むプロキシ・ノード・エージェント、およびプロキシ台帳は、それぞれのノードにデプロイされる。プロキシ・スマート・コントラクト・エージェントを使用して、それぞれのノードにおいて、高速の処理およびトランザクションの台帳へのコミットが可能となる。エージェントは、別個のデバイスであってもよいが、ピア・ノード・コンピュータで動作するソフトウェア・モジュールとして実装されることが好ましい。プロキシ・ノードは、別のノードから台帳についてバルクの更新を実施することによって、それらが代表するよう割り振られているノードと同期する。複数のチャネルが、それぞれ個々の台帳ごとにサポートされ得る。アクセス制御を利用して、特定のノードにおいてそれぞれのプロキシ・エージェントに対してアクセスを与えることができる。アクセス制御は、必要であればチャネルごとに異なっていてよい。ノードBが、ノードAにおいてそのプロキシを介して、ノードAで実行しようとしているスマート・コントラクトは、ノードBがそれ自身の台帳用の、それ自身のノードで実行するスマート・コントラクトとは異なっている可能性がある。この手法は、それぞれのノードにおける個々の台帳の必要性をカスタマイズすることができ、システム内にさらなる柔軟性を提供することができる。プロキシ・エージェントは、それらが代表するよう割り振られている他のピアに対して更新を送信することにより動作するブロックチェーン・ピアであり得る。
【0026】
プロキシ・エージェントは、ブロックのトランザクションの実際の内容の、さらに非緊急/受動的な更新を伴う、コミットされブロックに関連付けられた、マークル・ツリー・ハッシュなどメタデータのみのプロアクティブな更新およびトランザクションのリストを提供することができる。プロキシ・ノードと、それらが代表するノードとの間の通信は、ネットワーク利用が低い時間帯、例えば、米国、またはアジア、または高いトランザクション・トラフィックを生じさせる世界の他の地域の夜間など、ネットワークのトラフィックが少ないと特定されるときに、実施することができる。最終的に、情報はプロキシ台帳に更新される。サプライ(supplies)などのリソースは、また予測的に、二重払いを避け、トランザクションがローカルで進むことを可能にするために、ノードを代表するエージェントに渡って、分散して分割することができる。
【0027】
グローバル・リソース全体は、様々な地域に渡って分割することができる。例えば、リソース「A」を、シンガポール(リージョン1)、オーストラリア(リージョン2)およびニュージーランド(リージョン3)にわたる「A」=A1+A2+A3として分割すると仮定する。次に、オーストラリアとニュージーランドにおいて、それぞれA2がA2Newに変更され、A3がA3Newに変更され、それにしたがってコミットされるが、シンガポールはまだ更新情報を受信していないと仮定する。ここで、A1の最新のバリューは「SG」において既知であり、A2の最新のバリューは、「Aus」において所有されており、A3はニュージーランドにおいて所有されている。グローバル・リソース全体は、様々な地域に渡って分割することができる。例えば、シンガポール(SG)からのリソース「A」を、シンガポール(SG)(リージョン1)、オーストラリア(AUS)(リージョン2)、およびニュージーランド(NZ)(リージョン3)にわたるA=A1+A2+A3として分割する。量「A2」および「A3」は、SGからAUSおよびNZに割り当てられる。これにより、リソースAを伴うAUSおよびNZにおけるトランザクションを、リソースAのローカルな可用性に基づいて、ローカルでコミットさせることができる。将来的な時点において、リソースAの部分が、必要に応じて異なる地域に再割り振りすることができる一方で、続行中のトランザクションについてそれぞれのリージョンにおいてリソースAの妥当な量を利用可能にすることができる。予測エンジンを使用して、将来的な所与の時間に所与のリージョンにおいて必要とされるリソースの量を予測することができる。
【0028】
グローバルなピア・ノード分散シナリオでは、ピアにサブミットされた複雑なクエリを、リソース可用性全体を決定するために遠い地域に送信しなければならず、分散ネットワークの従来的なレイテンシ・コストを被ることになる。しかしながら、そのようなクエリの頻度は、少なく、ほとんどのクエリがローカルのリソースに対してむけられ、ローカルで管理されることが期待される。一例では、SG/AUS/NZの例では、AUSとNZにおいて、それぞれA2がA2Newに変更され、A3がA3Newに変更され、それにしたがってコミットされるが、SGはまだトランザクションを認識していないと仮定する。ここで、A1の最新のバリューは「SG」において既知であり、A2の最新のバリューは、AUSにおいて所有されており、A3はNZにおいて所有されている。「A」に対するグローバルなクエリがサブミットされると、それぞれ3つの地域から、A1が取得され、A1が変わっていない場合は、A2Newが取得され、A3Newも取得される。グローバルな状態は、リソース「A」についてANew=A1+A2New+A3Newとして得られる。しかしながら、このクエリは、3つの異なる遠い地域を横断しなければならず、そのリージョン間で従来ネットワークの高レイテンシを被ることになる。
【0029】
例示の実施形態によると、それぞれの地域の場所におけるクラウド・デプロイメントは、リモートの組織のプロキシ・ノードに対するローカルな組織用のローカル・ノードなど、異なる組織を代表するノード用に仮想マシン/コンテナ・パーティションを使用することができそれらは同一のクラウド・インフラストラクチャ内にコロケートされ、それによって、インフラストラクチャは、仮想マシン(VM)/コンテナ・パーティションに信頼できる分離を与えながら、コロケーションの機能性によりレイテンシを最小化する。ノードまたはプロキシ・ノードの機能は、複製されて、トランザクションをロード・バランスするための高可用性を提供することができる。エンドースメント・リクエストは、ロード・バランスのために複製されたノード間で分散することができるが、しかしながら、所与の場所でノードまたはプロキシ・ノードのすべての複製されたバージョンによってコミット・トランザクションを実行しなければならない。リソースおよび地域にわたる台帳分割を含み、およびプロキシ台帳との受動的な協調を含むシステム全体は、集約台帳の特徴がノードによって維持される個々の台帳の「スーパーセット(superset)」であることに起因して、「スーパー台帳(superledger)」と呼ぶことができる。
【0030】
図2Aは、例示の実施形態によるブロックチェーン・アーキテクチャ構成200Aを図示している。
図2Aを参照すると、ブロックチェーン・アーキテクチャ200Aは、特定のブロックチェーン要素、例えば、ブロックチェーン・ノード202のグループを含むことができる。ブロックチェーン・ノード202は、1つまたは複数のノード204~210を含むことができる。(単なる例示として4ノードが描かれている)。これらのノードは、ブロックチェーン・トランザクションの追加、および検証プロセス(合意)などの、複数のアクティビティに参加している。ブロックチェーン・ノード204~210のうちの1つまたは複数は、トランザクションをエンドースすることができ、またアーキテクチャ200A内のすべてのブロックチェーン・ノード用の順序付けサービスを提供することもできる。ブロックチェーン・ノードは、ブロックチェーン認証を開始し、ブロックチェーン・レイヤ216に記憶される不変な台帳であるブロックチェーンへの書き込みを試みることができ、その複製もまた基礎となっている物理的なインフラストラクチャ214に記憶することができる。ブロックチェーン構成は、記憶されたプログラム/アプリケーション・コード220(例えば、チェーンコード、スマート・コントラクトなど)にアクセスして実行するための、アプリケーション・プログラミング・インターフェース(API)222にリンクされる1つまたは複数のアプリケーション224を含むことができ、これらは参加者によって求められるカスタマイズされた構成にしたがって作成することができ、それら自身の状態を維持し、それら自身のアセットを制御し、そして外部情報を受信することができる。これは、すべてのブロックチェーン・ノード204~210上で、分散台帳への追記を介して、トランザクションとしてデプロイして、インストールすることができる。
【0031】
ブロックチェーン・ベースまたはプラットフォーム212は、ブロックチェーンのデータ、サービス(例えば、暗号法的なトラスト・サービス、仮想実行環境など)、基礎となっている物理的なコンピュータ・インフラストラクチャといった、様々なレイヤを含み、これらは、新しいトランザクションを受信して記憶し、データ・エントリへのアクセスを試みる監査にアクセスを提供するために使用することができる。ブロックチェーン・レイヤ216は、プログラム・コードを処理するために必要な仮想実行環境へのアクセスを与えるインターフェースを公開し、物理的なインフラストラクチャ214に繋がることができる。暗号法的なトラスト・サービス218を使用して、アセット交換トランザクションなどのトランザクションを検証して、情報を秘密にしておくことができる。
【0032】
図2Aのブロックチェーン・アーキテクチャ構成は、ブロックチェーン・プラットフォーム212により、1つまたは複数の公開されるインターフェース、および提供されるサービスを介してプログラム/アプリケーション・コード220を処理して実行することができる。コード220は、ブロックチェーンアセットを制御することができる。例えば、コード220は、データを記憶して移送することができ、また、スマート・コントラクトおよびその実行の対象となる条件または他のコード要素に関連付けられるチェーンコードの形態でノード204~210によって実行され得る。非限定的な例として、スマート・コントラクトは、リマインダ、更新、または変更、更新などを対象とする他の通知あるいはその組合せを実行するために作成することができる。スマート・コントラクトは、それ自身を使用して権限に関連付けられる規則を特定し、台帳の必要事項および使用にアクセスすることができる。
【0033】
チェーンコード内で、スマート・コントラクトは、高水準のアプリケーションおよびプログラミング言語を介して作成することができ、ブロックチェーン内のブロックに書き込まれる。スマート・コントラクトは、ブロックチェーン(例えば、ブロックチェーン・ピアの分散ネットワーク)に登録される、記憶される、または複製される、あるいはその組合せである、実行可能コードを含むことができる。トランザクションは、スマート・コントラクト・コードの実行であり、これは、スマート・コントラクトに関連付けられる条件が満足されたことに応じて実施され得る。スマート・コントラクトの実行は、デジタルなブロックチェーン台帳の状態に対し、信頼される修正をトリガする場合がある。スマート・コントラクトの実行によって生じるブロックチェーン台帳への修正は、1つまたは複数の合意プロトコルによりブロックチェーン・ピアの分散ネットワーク全体に渡って自動的に複製され得る。
【0034】
スマート・コントラクトは、データをキー-バリュー対のフォーマットで、ブロックチェーンに書き込むことができる。さらには、スマート・コントラクト・コードは、ブロックチェーンに記憶されるバリューを読み出し、アプリケーションの動作においてそれらを使用することができる。スマート・コントラクト・コードは、様々な論理演算の出力をブロックチェーンに書き込むことができる。コードを使用して、仮想マシンまたは他のコンピューティング・プラットフォーム上で、一時的なデータ構造を作成することができる。ブロックチェーンに書き込まれたデータは、パブリックであり得るか、または暗号化されて秘密として維持され得るか、あるいはその両方である。スマート・コントラクトによって使用される/生成される一時的なデータは、与えられた実行環境によってメモリ内に保持され、次いでブロックチェーンに必要なデータが特定されると削除される。
【0035】
チェーンコードは、スマート・コントラクトのコード解釈を、さらなる特徴とともに、含むことができる。本明細書に記載されるように、チェーンコードは、コンピューティング・ネットワークにデプロイされるプログラム・コードであり得、そこで合意プロセスの間にチェーン・バリデータによって実行および検証される。チェーンコードは、ハッシュを受信し、以前に記憶された特徴抽出器の使用によって作成されたデータ・テンプレートに関連付けられるハッシュをブロックチェーンから取り出す。ハッシュ識別子のハッシュ、および記憶された識別子テンプレート・データから作成されたハッシュが一致する場合、チェーンコードは認可キー(authorization key)をリクエストされたサービスに送信する。チェーンコードはブロックチェーンに暗号法的な詳細に関連付けられるデータを書き込むことができる。
図2Aにおいて、一例では、あるブロックチェーン・トランザクションが、エンドースメントまたは他のブロックチェーン・ピア・サービスを要求する潜在的なトランザクションとして特定される(226)。ブロックチェーン・ピア・ノードのうちの1つまたは複数によってトランザクションがエンドースされると、トランザクションはプロキシ・エージェントを介してピアによって維持される台帳に更新することができる(228)。プロキシ・エージェントは、トランザクションをコミットするために必要なエンドースメントを与える担当となっている場合がある。
【0036】
図2Bは、例示の実施形態によるブロックチェーンのノード同士のトランザクション・フロー200Bの例を図示している。
図2Bを参照すると、トランザクション・フローは、アプリケーション・クライアント・ノード260によってエンドーシング・ピア・ノード281に送信されたトランザクション・プロポーザル291を含む場合がある。エンドーシング・ピア281は、クライアント署名を検証し、チェーンコード関数を実行してトランザクションを開始することができる。出力には、チェーンコードの結果、チェーンコードで読み出されたキー/バリューのセット(読み出しセット(read set))バージョンおよびチェーンコードに書き込まれたキー/バリューのセット(書き込みセット(write set))が含まれる場合がある。プロポーザル・レスポンス292は、承認されている場合はエンドースメント署名とともに、クライアント260に送信し戻される。クライアント260は、エンドースメントをトランザクション・ペイロード293にまとめて、それを順序付けサービス・ノード284にブロードキャストする。順序付けサービス・ノード284は、次いで順序付けられたトランザクションをブロックとして、チャネル上のすべてのピア281~283に配信する。ブロックチェーンへのコミットの前に、それぞれのピア281~283は、トランザクションを検証することができる。例えば、ピアはエンドースメント・ポリシをチェックして、指定されたピアの正しい割り当てが結果に署名してあり、トランザクション・ペイロード293に対して署名を認証してあることを確認することができる。
【0037】
再度、
図2Bを参照すると、クライアント・ノード260は、リクエストを構築してエンドーサであるピア・ノード281に送信することによって、トランザクション291を開始する。クライアント260は、トランザクション・プロポーザルを生成するために利用可能なAPIを利用するNODE、JAVA(登録商標)、PYTHONなどのサポートされるソフトウェア開発キット(SDK)を活用するアプリケーションを含むことができる。プロポーザルは、データの台帳からの読み出しまたは台帳への書き込み(すなわち、アセットについての新しいキーバリュー対を書き込む)あるいはその両方を行うことができるよう、チェーンコード関数を呼び出すためのリクエストである。SDKは、トランザクション・プロポーザルを適切に設計されたフォーマット(例えば、リモート・プロシージャ・コール(RPC)上のプロトコル・バッファ)にパッケージするためのシム(shim)として機能し、クライアントの暗号法的クレデンシャル情報を得てトランザクション・プロポーザル用の一意な署名を作成することができる。
【0038】
それに応じて、エンドーシング・ピア・ノード281は、(a)トランザクション・プロポーザルが正しく形成されたこと、(b)過去においてトランザクションがまだサブミットされていないこと(リプレイ攻撃保護)、(c)署名が有効であること、(d)チャネル上で提案された操作を実行するための適切な権限がサブミッタ(例では、クライアント260)に与えられていること、を検証することができる。エンドーシング・ピア・ノード281は、トランザクション・プロポーザルの入力を呼び出されたチェーンコード関数への引数とすることができる。次いで、チェーンコードは、現在の状態データベースに対して実行され、レスポンス値、読み出しセット、および書き込みセットを含むトランザクションの結果を作りだす。しかしながら、この時点では、台帳への更新はなされていない。292において、バリューのセットは、エンドーシング・ピア・ノード281の署名とともに、プロポーザル・レスポンス292としてクライアント260のSDKに戻され、クライアント260はそのアプリケーションが使用するためのペイロードを構文解析する。
【0039】
それに応じて、クライアント260のアプリケーションは、エンドーシング・ピアの署名を検査/検証して、プロポーザル・レスポンスを比較してプロポーザル・レスポンスが同一かどうかを判断する。チェーンコードが台帳にクエリしただけである場合、アプリケーションは、クエリ・レスポンスを検査し、典型的にはトランザクションを順序付けノード・サービス284にサブミットしない。クライアント・アプリケーションが、台帳を更新するためにトランザクションを順序付けノード・サービス284にトランザクションをサブミットするよう意図する場合、アプリケーションは、指定されたエンドースメント・ポリシがサブミットの前に遂行されているかどうか(すなわち、トランザクションに必要なすべてのピア・ノードが、そのトランザクションをエンドースしたか)を判断する。ここで、クライアントはトランザクションへの複数の関係者のうち1つだけを含むことができる。この場合、それぞれのクライアントは、それら自身のエンドーシング・ノードを有することができ、それぞれのエンドーシング・ノードはトランザクションをエンドースする必要がある。アーキテクチャは、アプリケーションがレスポンスを検査しないよう選択した場合、またはそうではなく、エンドースされなかったトランザクションを転送する場合であっても、やはりエンドースメント・ポリシがピアによって施行され、コミット検証フェーズにおいて維持されるものである。
【0040】
検査が成功した後、ステップ293において、クライアント260は、エンドースメントをトランザクションにまとめて、トランザクション・プロポーザルおよびトランザクション・メッセージ内のレスポンスを順序付けノード284にブロードキャストする。トランザクションは、読み出し/書き込みセット、エンドーシング・ピアの署名、およびチャネルIDを含む場合がある。順序付けノード284は、その動作を実施するためにトランザクションの内容全体を検査する必要はなく、代わりに順序付けノード284は、単にトランザクションをネットワーク内のすべてのチャネルから受信し、チャネルでそれらを時系列的に順序付け、チャネルごとにトランザクションのブロックを作成することができる。
【0041】
トランザクションのブロックは、順序付けノード284から、チャネル上のすべてのピア・ノード281~283に提供される。ブロック内のトランザクション294は、あらゆるエンドースメント・ポリシが遂行されることを保証にするため、および、読み出しセットがトランザクション実行により生成されてから、読み出しセット変数について台帳状態に変更がなかったことを保証にするために、検証される。ブロック内のトランザクションは、有効または無効としてタグ付けされる。さらには、ステップ295において、それぞれのピア・ノード281~283は、ブロックをチャネルのチェーンに追加し、それぞれ有効なトランザクションごとに書き込みセットが現在の状態データベースにコミットされる。トランザクション(呼び出し)がチェーンに不変に追加されたことをクライアント・アプリケーションに通知するため、ならびにトランザクションが有効化されたかまたは無効化されたかを通知するために、イベントが発生する。
【0042】
図3は、許可型のブロックチェーンのネットワーク300の例を図示しており、分散型の、非中央集権型のピアツーピアのアーキテクチャを特徴としており、認証局318が、ユーザ・ロールおよび権限を管理している。この例では、ブロックチェーン・ユーザ302は、許可型のブロックチェーンのネットワーク310にトランザクションをサブミットすることができる。この例では、トランザクションは、デプロイ、呼び出し、またはクエリである可能性があり、またSDKを活用するクライアント・サイドのアプリケーションを通じて、直接REST APIを通じて、などで発行することができる。信頼されるビジネス・ネットワークは、監査(例えば、米国株式市場における証券取引委員会)などの規制者システム314にアクセスを与えることができる。一方で、ブロックチェーン・ネットワーク運用者ノード308は、規制者システム314を「監査」として、またブロックチェーン・ユーザ302を「クライアント」としてエンロールするなど、メンバの権限を管理している。監査は、台帳を照会することだけに制限される可能性がある一方で、クライアントは、特定のタイプのチェーンコードをデプロイ、呼び出し、およびクエリするよう認可され得る。
【0043】
ブロックチェーン開発者システム316は、チェーンコードおよびクライアント・サイドのアプリケーションを書き込む。ブロックチェーン開発者システム316は、チェーンコードを、RESTインターフェースを介して直接ネットワークにデプロイすることができる。従来的なデータ・ソース330からのクレデンシャル情報をチェーンコード内に含めるために、開発者システム316は、データにアクセスするためにアウトオブバンド接続を使用することができる。この例では、ブロックチェーン・ユーザ302は、ピア・ノード312を通じてネットワークに接続する。いずれかのトランザクションに進む前に、ピア・ノード312は、ユーザのエンロールメントおよびトランザクション証明書を認証局318から取り出す。場合によっては、ブロックチェーン・ユーザは、許可型のブロックチェーンのネットワーク310上で取引するために、これらのデジタル証明書を所有しなければならない。一方で、チェーンコードを動かそうと試みるユーザは、彼らのクレデンシャル情報を従来的なデータ・ソース330上で検証するよう要求される場合がある。ユーザの認可を確認するために、チェーンコードは従来的な処理プラットフォーム320を通じて、このデータに対してアウトオブバンド接続を使用することができる。
【0044】
図4は、例示的な実施形態による、プロキシ・エージェントを介するピア・ノード管理を実施するためのシステム・メッセージング図を図示している。
図4を参照すると、例示の構成400は、1つまたは複数のピア410、およびピア410に対応する1つまたは複数のプロキシ420を含む。また、ブロックチェーン430は、ピア410およびプロキシ420によって維持される台帳のうちの1つまたは複数を表すことができる。動作中、エンドースメントを必要とするブロックチェーン・トランザクションがピア410のうちの1つまたは複数によって特定され(412)、トランザクションは、エンドースする1つまたは複数のプロキシに転送される(414)。プロキシは、トランザクションをエンドースするために必要なエンドースメント動作を実施することにより、ピアのように作用することができる(416)。エンドースメントが特定され(418)、ブロックチェーン430にコミットされる(422)。トランザクションは、他の台帳に、それらの個々の台帳へのコミットのために転送される(424)。指定された時間、またはネットワークしきい値条件(例えば、時刻、ネットワーク・パフォーマンス・メトリクスなど)あるいはその両方など、更新ポリシに基づいて、適当な時期に、他のピアによって維持される他の台帳の複製は更新される(426)。
【0045】
図5Aは、例示的な実施形態による、ブロックチェーン内でのプロキシ・エージェント管理の例示の方法のフロー図を図示している。
図5Aを参照すると、方法500Aは、ブロックチェーン・ノードによるエンドースメントを必要とするブロックチェーン・トランザクションを特定すること(512)と、他のブロックチェーン・ノードのうちの1つまたは複数に関連付けられるプロキシ・エージェントから、1つのブロックチェーン・ノードにおいてエンドースメントを受信すること(514)と、必要なエンドースメントが特定されるとブロックチェーン・トランザクションをコミットするよう決定すること(516)と、コミットされたブロックチェーン・トランザクションを、1つのブロックチェーン・ノードによって維持される台帳に記憶すること(518)とを提供することができる。この例では、1つのピア・ノードは、コミットメント合意特徴を実施する主要ピア・ノードである。他のノードは、それらのプロキシを使用して、必要なエンドースメント・リクエストに対するタイムリーなレスポンスを維持する。ノードおよびプロキシのそれぞれは、すべてのトランザクションの集約台帳の一部で有り得る台帳を維持することができる。プロキシ・エージェントは、1つのブロックチェーン・ノードにソフトウェア・モジュールとしてインストールされるか、またはノードに極近接して動作するスタンドアロンのデバイスであってもよい。
【0046】
方法はまた、台帳の更新を中継する最適な時間を決定するために、ネットワーク・レイテンシが低い期間を決定することを含むことができる。方法は、また、ネットワーク・レイテンシが低い期間の間に、更新をプロキシ・エージェントから他のブロックチェーン・ノードのうちの1つまたは複数に送信して、他のブロックチェーン・ノードに関連付けられる台帳を更新することと、プロキシ・エージェントに関連付けられるプロキシ台帳においてブロックチェーン・トランザクションを記憶することと、他のブロックチェーン・ノードのうちの1つまたは複数に更新を送信した後、プロキシ台帳においてブロックチェーン・トランザクションを削除することと、または代わりに、他のブロックチェーン・ノードのうちの1つまたは複数に更新を送信した後、プロキシ台帳においてブロックチェーン・トランザクションをキャッシュすることとを含むことができる。
【0047】
図5Bは例示的な実施形態による、ブロックチェーン内でのプロキシ・エージェント管理の別の例示の方法のフロー図を示している。
図5Bを参照すると、方法500Bは、ブロックチェーン・ノードによるエンドースメントを必要とするブロックチェーン・トランザクションを特定すること(552)と、1つのブロックチェーン・ノードにおいて他のブロックチェーン・ノードのうちの1つまたは複数に関連付けられるプロキシ・オブジェクトからエンドースメントを受信すること(554)と、ブロックチェーン・トランザクションをコミットするよう決定すること(556)と、コミットされたブロックチェーン・トランザクションを、1つのブロックチェーン・ノードによって維持される台帳に記憶すること(558)と、プロキシ・オブジェクトを介して、台帳のバックアップ複製を、1つまたは複数の他のブロックチェーン・ノードに記憶される台帳の他の複製に転送すること(562)とを提供する。
【0048】
第1のブロックチェーン・ノードにおいて台帳の複製を維持することに加えて、台帳の複製または台帳への更新あるいはその両方は、ネットワーク・レイテンシが最適なネットワーク使用時間よりも低いと判断される時間の間に、他のブロックチェーン・ノード/ピアに受動的に転送される場合がある。プロキシ・オブジェクトは、最近のトランザクションを他のブロックチェーン・ノードに転送するために存在する。プロキシ・オブジェクトは、初期の台帳更新プロセスの間に作成され定義される場合があり、更新されるトランザクションを、適当な時間に共有するようにトリガすることができる。プロキシ・オブジェクトは、ネットワーク・レイテンシ、時刻、または更新がさらなるネットワーク・レイテンシを招くことなく転送され得ると判断される他の時間、などのしきい値によって定義され得る。
【0049】
図5Cは、例示的な実施形態による、ブロックチェーン内でのプロキシ・エージェント管理の別の例示の方法のフロー図を図示している。
図5Cを参照すると、例は、第1のブロックチェーン・ノードにおいて処理を必要とするブロックチェーン・トランザクションを特定すること(572)と、第1のブロックチェーン・ノードによって、および、第1のブロックチェーン・ノードとコロケートされる1つまたは複数のプロキシ・エージェントによって、ブロックチェーン・トランザクションに関連付けられるスマート・コントラクトを実行することであって、1つまたは複数のプロキシ・エージェントは、ブロックチェーン・ネットワーク上の他のブロックチェーン・ノードにも関連付けられる、実行すること(574)と、ブロックチェーン・トランザクションをコミットするよう決定すること(576)と、コミットされたブロックチェーン・トランザクションを、第1のブロックチェーン・ノードによって維持される台帳に記憶すること(578)とを含む、方法570を提供する。
【0050】
方法はまた、第1のブロックチェーン・ノードにおいて1つまたは複数のプロキシ・エージェントからエンドースメントを受信することと、他のブロックチェーン・ノードのうちの1つまたは複数によってスマート・コントラクト・ノードを実行することと、他のブロックチェーン・ノードのうちの1つまたは複数によってブロックチェーン・トランザクションをコミットするよう決定することと、コミットされたブロックチェーン・トランザクションを、1つまたは複数の他のブロックチェーン・ノードのそれぞれによって維持される他の台帳に記憶することとを含む。1つまたは複数のプロキシ・エージェントは、第1のブロックチェーン・ノードにインストールすることができるか、または第1のブロックチェーン・ノードの一定の近接内のコロケートされる場所にある。コロケートされる場所は、第1のブロックチェーン・ノードと1つまたは複数のプロキシ・エージェントとの通信についてレイテンシ上限しきい値を超えないように決定されたレイテンシに基づいているか、またはコロケーション場所は、第1のブロックチェーン・ノードと、1つまたは複数のプロキシ・エージェントのために使用される処理プラットフォーム間の物理的な距離との間の地理学的距離に基づいている。方法はまた、1つまたは複数のプロキシ・エージェントから他のブロックチェーン・ノードへ更新を送信して他のブロックチェーン・ノードにおいて台帳の複製を更新することと、1つまたは複数のプロキシ・エージェントに関連付けられるプロキシ台帳においてブロックチェーン・トランザクションを記憶することと、ブロックチェーン・トランザクションを他のブロックチェーン・ノードのうちの1つまたは複数に送信した後、プロキシ台帳においてブロックチェーン・トランザクションをキャッシュすることと、トランザクションを他のブロックチェーン・ノードに送信した後で、、かつ、他のブロックチェーン・ノードからのトランザクションの受領の確認を受信した後、プロキシ台帳においてブロックチェーン・トランザクションを削除することとを提供することができる。他の特徴は、トランザクションを、プロキシ・エージェントによる個々のノードへのその送信に先立って、1つのノードにおいてローカルにコミットできるようにするために、ノードにわたってリソースを分割できるようにすることを提供することができる。キャッシュすることは、キャッシュ用の空間可用性、もしくはキャッシュ用の事前指定のタイム・ホライズンに基づいて、またはキャッシュ用のLRUポリシなどのキャッシュ・ポリシに基づいてなど、1つまたは複数の制約に基づいて実施され得る。プロキシ・エージェントは、ブロックチェーン・ネットワーク上で個々のピアのローカルな代表として機能し、コミットされるトランザクションの個々のピアへの送信に先立って、トランザクションがローカルでコミットできるようにしている。ブロックチェーン・ネットワーク上のそれぞれのノードは、そのノードの台帳を、ブロックチェーン・ネットワーク上の他のピアの台帳の複製されたバージョンとともに含む集約台帳を維持する。集約台帳の一部である台帳のそれぞれは、ソースおよび由来情報の異なるセットを特定する異なるジェネシス・ブロックを有する。
【0051】
図6Aは、例示的な実施形態による、動作の例示的な方法のうちの1つまたは複数にしたがうブロックチェーン上で様々な動作を実施するように構成される例示的な物理的インフラストラクチャを図示している。
図6Aを参照すると、例示的な構成600Aは、ブロックチェーン620およびスマート・コントラクト640を伴う物理的なインフラストラクチャ610を含み、例示的な実施形態のうちのいずれかに含まれる動作ステップ612のいずれかを実行することができる。ステップ/動作612は、1つまたは複数のフロー図または論理図あるいはその両方において説明されるか、または描かれるステップのうちの1つまたは複数を含むことができる。ステップは、システム構成の物理的なインフラストラクチャ610に常駐する1つもしくは複数のスマート・コントラクト640またはコンピュータ・ブロックチェーン620あるいはその両方に書き込まれたか、または読み出された出力または書き込み情報を表すことができる。データは、実行されたスマート・コントラクト640またはブロックチェーン620あるいはその両方から出力され得る。物理的なインフラストラクチャ610は、1つまたは複数のコンピュータ、サーバ、プロセッサ、メモリ、またはワイヤレス通信デバイスあるいはその組合せを含むことができる。
【0052】
図6Bは、例示的な実施形態による、契約当事者間の例示的なスマート・コントラクト構成およびブロックチェーン上でスマート・コントラクト条項を執行する構成される仲介するサーバを図示している。
図6Bを参照すると、構成650Bは、通信セッション、1つまたは複数のユーザ・デバイス652または656あるいはその両方を明示的に特定するスマート・コントラクト640によって進められるアセット移送セッションまたはプロセスまたはプロシージャを表すことができる。スマート・コントラクト実行の実行、動作および結果は、サーバ654によって管理することができる。スマート・コントラクト640の内容は、スマート・コントラクト・トランザクションの関係者であるエンティティ652および656のうちの1つまたは複数によるデジタル署名を必要とする場合がある。スマート・コントラクト実行の結果は、ブロックチェーン・トランザクションとしてブロックチェーンに書き込むことができる。
【0053】
上記実施形態は、ハードウェア、プロセッサによって実行されるコンピュータ・プログラム、ファームウェア、またはこれらの組合せにおいて実装され得る。コンピュータ・プログラムは、記憶媒体などコンピュータ可読媒体に具体化することができる。例えば、コンピュータ・プログラムは、ランダム・アクセス・メモリ(「RAM」)、フラッシュ・メモリ、読み出し専用メモリ(「ROM」)、消去可能プログラム可能読み出し専用メモリ(「EPROM」)、電気的消去可能プログラム可能読み出し専用メモリ(「EEPROM」)、レジスタ、ハードディスク、リムーバブル・ディスク、コンパクト・ディスク読み出し専用メモリ(「CD-ROM」)、または当分野で既知の記憶媒体のあらゆる他の形態で存在することができる。
【0054】
例示の記憶媒体は、プロセッサが記憶媒体から情報を読み出すこと、および情報を記憶媒体に書き込むことができるように、プロセッサに結合することができる。代替として、記憶媒体はプロセッサに統合することもできる。プロセッサおよび記憶媒体は、特定用途向け集積回路(「ASIC」)に存在することができる。代替として、プロセッサおよび記憶媒体は、個別部品として存在することができる。例えば、
図7は、上述のコンポーネントなどのいずれかを代表することができるか、または上述のコンポーネントなどのいずれかに統合することができる、例のコンピュータ・システム・アーキテクチャ700を図示している。
【0055】
図7は、本明細書で説明される本出願の実施形態の使用または機能性の範囲に関して、いかなる制限をも示唆するように意図されていない。とにかく、コンピューティング・ノード700は、本明細書で上述の機能性のいずれかを実装または実施あるいはその両方を行うことができる。
【0056】
コンピューティング・ノード700には、多くの他の汎用または特殊目的の、コンピューティング・システム環境または構成で動作可能である、コンピュータ・システム/サーバ702が存在する。コンピュータ・システム/サーバ702での使用に適切であり得る周知のコンピューティング・システム、環境、または構成あるいはそれらの組合せの例としては、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップのデバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサベースのシステム、セット・トップ・ボックス、プログラマブル・コンシューマ・エレクトロニクス、ネットワークPC、ミニ・コンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散クラウド・コンピューティング環境などが挙げられるがそれに限定しない。
【0057】
コンピュータ・システム/サーバ702は、コンピュータ・システムによって実行されているプログラム・モジュールなどのコンピュータ・システム-実行可能命令の一般的なコンテキストで説明され得る。一般的に、プログラム・モジュールは、特定のタスクを実施するか、または特定の抽象的なデータ・タイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含むことができる。コンピュータ・システム/サーバ702、タスクが通信ネットワークを通じてリンクされたリモート処理デバイスによって実施される分散クラウド・コンピューティング環境において実践することができる。分散クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ記憶デバイスを含む、ローカルおよびリモートの両方のコンピュータ・システム記憶媒体に配置することができる。
【0058】
図7において示されるように、クラウド・コンピューティング・ノード700におけるコンピュータ・システム/サーバ702が汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ702のコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット704、システム・メモリ706、および、システム・メモリ706を含む様々なシステム・コンポーネントをプロセッサ704に連結するバスを含むことができるが、それに限定されない。
【0059】
バスは、バス構造のいくつかのタイプのいずれかのうちの1つまたは複数を表しており、メモリ・バスまたはメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、およびプロセッサまたは様々なバス・アーキテクチャの任意のものを使用するローカル・バスを含む。限定ではなく例として、そのようなアーキテクチャはインダストリ・スタンダード・アーキテクチャ(ISA)バス、マイクロ・チャネル・アーキテクチャ(MCA)バス、エンハンストISA(EISA)バス、Video Electronics Standards Association(VESA)ローカル・バス、およびPeripheral Component Interconnect(PCI)バスを含む。
【0060】
コンピュータ・システム/サーバ702は、典型的には様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ702によってアクセス可能なあらゆる利用可能な媒体であることができ、揮発性および非揮発性の媒体、ならびにリムーバブルおよび非リムーバブルの媒体の両方を含む。一実施形態において、システム・メモリ706は、他の図面のフロー図を実装する。システム・メモリ706は、ランダム・-アクセス・メモリ(RAM)710またはキャッシュ・メモリ712あるいはその両方などの揮発性メモリの形態のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ702は、他のリムーバブル/非リムーバブルの、揮発性/非揮発性のコンピュータ・システム記憶媒体をさらに含むことができる。単なる例として、非リムーバブル、非揮発性の磁気媒体(典型的には「ハード・ドライブ」と称され、図示せず)からの読み出しおよびそれへの書き込みのためのストレージ・システム714を設けることができる。図示していないが、リムーバブル、非揮発性の磁気ディスク(例えば、「フロッピー(登録商標)・ディスク」)からの読み出しおよびそれへの書き込みのための磁気ディスク・ドライブ、CD-ROM、DVD-ROMまたは他の光学媒体などのリムーバブル、非揮発性の光学ディスクからの読み出しまたはそれへの書き込みのための光学ディスク・ドライブを設けることができる。そのような事例において、それぞれは1つまたは複数のデータ媒体インターフェースによってバスへ接続することができる。以下でさらに描写され説明されるように、メモリ706は、本出願の様々な実施形態の機能を実行するように構成されるプログラム・モジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含むことができる。
【0061】
プログラム・モジュール718のセット(少なくとも1つ)を有するプログラム/ユーティリティ716は、限定ではなく例として、メモリ706に記憶することができ、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データも同様である。オペレーティング・システムのそれぞれ、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データまたはそのいくつかの組合せは、ネットワーキング環境の実装を含むことができる。プログラム・モジュール718は、一般的に本明細書において説明されるような本出願の様々な実施形態の、機能または方法あるいはその両方を実行する。
【0062】
当業者であれば理解されるように、本出願の態様は、システム、方法、またはコンピュータ・プログラム製品として具体化することができる。したがって、本出願の態様は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または本明細書においてすべて一般的に「回路」、「モジュール」または「システム」と称され得るソフトウェアとハードウェアの態様を組み合わせた実施形態の形態を取ることができる。さらには、本出願の態様は、コンピュータ可読プログラム・コードを具体化して有する1つまたは複数のコンピュータ可読媒体において具体化されるコンピュータ・プログラム製品の形態を取ることができる。
【0063】
コンピュータ・システム/サーバ702は、また、キーボード、ポインティング・デバイス、ディスプレイ722、などの1つもしくは複数の外部デバイス720、ユーザがコンピュータ・システム/サーバ702と対話できるようにする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ702が1つもしくは複数の他のコンピューティング・デバイスと通信できるようにするあらゆるデバイス(例えば、ネットワーク・カード、モデムなど)あるいはその組合せと通信することができる。そのような通信はI/Oインターフェース724を介して行うことができる。さらになお、コンピュータ・システム/サーバ702は、ローカル・エリア・ネットワーク(LAN)、一般的なワイド・エリア・ネットワーク(WAN)、またはネットワーク・アダプタ726を介するパブリック・ネットワーク(例えば、インターネット)あるいはその組合せなどの1つまたは複数のネットワークと通信することができる。描写されるように、ネットワーク・アダプタ726は、バスを介してコンピュータ・システム/サーバ702の他のコンポーネントと通信する。図示していないが、他のハードウェアまたはソフトウェアあるいはその両方のコンポーネントが、コンピュータ・システム/サーバ702と併せて使用することができることが理解されるべきである。例として、マイクロコード、デバイス・ドライバ、冗長化処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、それに限定されない。
【0064】
システム、方法、および非一過性のコンピュータ可読媒体のうちの少なくとも1つの例の実施形態が添付の図面に図示され、また先の詳細な説明において説明されてきたが、本出願は、開示される実施形態に限定されず、以下の特許請求の範囲によって説明され定義されるように、多数の再構成、修正、および置換が可能であることを理解されたい。例えば、様々な図面のシステムの機能は、本明細書において説明されるモジュールまたはコンポーネントのうちの1つまたは複数によって実施することができるか、または分散アーキテクチャにおいて実施される場合があり、送信機、受信機またはその両方の対を含む場合もある。例えば、個々のモジュールによって実施される機能性のすべてまたは一部は、これらのモジュールのうちの1つまたは複数によって実施することができる。さらには、本明細書において説明される機能性は、様々な時間に、また様々なイベントに関連して、モジュールまたはコンポーネントに対して内部的にまたは外部的に実施することができる。さらに、様々なモジュール間で送信される情報は、データ・ネットワーク、インターネット、音声ネットワーク、インターネット・プロトコル・ネットワーク、ワイヤレス・デバイス、ワイヤード・デバイス、または複数のプロトコル、あるいはその組合せのうちの少なくとも1つを介してモジュール間で送信することができる。さらに、モジュールのいずれかによって送信または受信されるメッセージは、直接的に、または他のモジュールのうちの1つもしくは複数を介して、あるいはその両方で、送信または受信することができる。
【0065】
当業者であれば、「システム」は、パーソナル・コンピュータ、サーバ、コンソール、携帯情報端末(PDA)、携帯電話、タブレット・コンピューティング・デバイス、スマートフォン、またはあらゆる他の適切なコンピューティング・デバイス、またはデバイスの組合せとして具体化され得ることを理解できるであろう。上述の機能を「システム」によって実施されるとして提示することは、いかなる方法でも本出願の範囲を限定するよう意図しておらず、多くの実施形態のうちの一例を与えるよう意図されている。実際、本明細書において開示される方法、システム、および装置は、コンピューティング技術に一貫して局所化および分散された形態で実施される場合がある。
【0066】
本明細書において説明されるシステム特徴のうちの一部は、その実装形態の独立性をより強調するためにモジュールとして提示されていることに留意されたい。例えば、モジュールは、カスタムの超大規模集積(VLSI)回路またはゲート・アレイ、論理チップなどの市販の半導体、トランジスタ、または他の個別部品を備えるハードウェア回路として実装される場合がある。モジュールはまた、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ・ロジック、プログラマブル・ロジック・デバイス、グラフィック・プロセシング・ユニットなどのプログラマブルなハードウェア・デバイスに実装される場合もある。
【0067】
モジュールはまた、様々なタイプのプロセッサによる実行のために、少なくとも部分的にソフトウェアで実装することができる。実行可能なコードの特定されたユニットは、例えば、1つまたは複数の物理的または論理的な、例えば、オブジェクト、プロシージャ、または関数として組織化することができる、コンピュータ命令のブロックを含む場合がある。特定されるモジュールの実行可能物は、物理的に一緒に配置される必要はないが、論理的に一緒に結合されるとモジュールを構成してモジュールの明記される目的を達成する異なる場所に記憶される別の命令を含むことができる。さらには、モジュールは、例えば、ハード・ディスク・ドライブ、フラッシュ・デバイス、ランダム・アクセス・メモリ(RAM)、テープ、またはデータを記憶するために使用されるあらゆる他のそのような媒体であり得るコンピュータ可読媒体に記憶される場合がある。
【0068】
実際、実行可能なコードのモジュールは、単一の命令、または複数の命令であることができ、様々なプログラム間で、いくつかのメモリ・デバイスに渡って、いくつかの異なるコード・セグメントに分散されることさえあり得る。同様に、動作可能なデータが、本明細書においてモジュール内に特定されて図示され、あらゆる適切なタイプのデータ構造においてあらゆる適切な形態で具体化され、組織化される可能性がある。動作可能なデータは、単一のデータ・セットとして収集することができるか、または様々なストレージ・デバイス上を含む異なる場所に分散されてもよく、また少なくとも部分的に、システムまたはネットワーク上の単なる電子的な信号として存在する場合がある。
【0069】
本明細書の図面において一般的に説明され図示される本出願のコンポーネントは、多様な構成で配置構成され、設計される可能性があることが容易に理解されよう。したがって、実施形態の詳細な説明は、特許請求される出願の範囲を限定するよう意図されておらず、本出願の選択された実施形態の単なる代表である。
【0070】
当業者であれば、上記が異なる順のステップで、または開示されるのとは異なる構成のハードウェア要素で、あるいはその両方で、実践され得ることを容易に理解するであろう。したがって、本出願はこれらの好ましい実施形態に基づいて説明されてきたが、特定の修正形態、変形形態、および代替構築物が明らかであることは、当業者にとって明らかとなろう。
【0071】
本出願の好ましい実施形態が説明されてきたが、説明された実施形態は例示に過ぎず、本出願の範囲は、添付の特許請求の範囲によってのみ、それに対する等価物および修正形態の全範囲(例えば、プロトコル、ハードウェア・デバイス、ソフトウェア・プラットフォームなど)を考慮して、定義されることを理解されたい。