(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-15
(45)【発行日】2023-09-26
(54)【発明の名称】ブロックチェーン・リソースを格納するブロックチェーン通知ボード
(51)【国際特許分類】
G06F 16/182 20190101AFI20230919BHJP
G06F 16/955 20190101ALI20230919BHJP
【FI】
G06F16/182
G06F16/955
(21)【出願番号】P 2021518757
(86)(22)【出願日】2019-10-03
(86)【国際出願番号】 EP2019076811
(87)【国際公開番号】W WO2020074358
(87)【国際公開日】2020-04-16
【審査請求日】2022-04-18
(32)【優先日】2018-10-09
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】岩間 太
(72)【発明者】
【氏名】立石 孝彰
(72)【発明者】
【氏名】天野 俊一
(72)【発明者】
【氏名】吉濱 佐知子
【審査官】和田 財太
(56)【参考文献】
【文献】米国特許出願公開第2017/0366348(US,A1)
【文献】特開2018-109994(JP,A)
【文献】国際公開第2017/170997(WO,A1)
【文献】米国特許出願公開第2017/0005804(US,A1)
【文献】特表2018-530175(JP,A)
【文献】特開2018-128723(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/182
G06F 16/955
(57)【特許請求の範囲】
【請求項1】
ストレージと、
複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI)を受信するように構成されたネットワーク・インターフェースと、
前記ブロックチェーンに関連する一意のチャネル名を特定するブロックチェーン・チャネル識別情報を特定し、前記ブロックチェーン・ピア・ノードの前記URIの識別および前記ブロックチェーンの前記チャネル名を含むブロックチェーン・ベースのURIを生成し、前記生成されたブロックチェーン・ベースのURIを前記ストレージの中の分散型台帳上に格納するように構成されたプロセッサとを含むコンピューティング・ノード。
【請求項2】
前記プロセッサは、前記ブロックチェーンのジェネシス情報を特定し、前記ブロックチェーンの前記ジェネシス情報の識別を含むように前記ブロックチェーン・ベースのURIを生成するように構成される、請求項1に記載のコンピューティング・ノード。
【請求項3】
前記ジェネシス情報は、前記ブロックチェーンのイニシエータの識別を含む、請求項2に記載のコンピューティング・ノード。
【請求項4】
前記プロセッサにより生成された前記ブロックチェーン・ベースのURIは、前記ブロックチェーン・ベースのURIが生成された時刻の識別をさらに含む、請求項1ないし請求項3のいずれかに記載のコンピューティング・ノード。
【請求項5】
前記プロセッサは、前記ブロックチェーンのチェーンコード情報を特定し、前記ブロックチェーンの前記チェーンコード情報の識別を含むように前記ブロックチェーン・ベースのURIを生成するようにさらに構成される、請求項1ないし請求項4のいずれかに記載のコンピューティング・ノード。
【請求項6】
前記チェーンコード情報は、チェーンコードIDと、チェーンコード・バージョンと、チェーンコードの中に含まれる、関数名を含む引数とのうちの1つ以上を含む、請求項5に記載のコンピューティング・ノード。
【請求項7】
前記プロセッサは、第2のブロックチェーン・ピア・ノードのURIの識別および前記ブロックチェーンの前記チャネル名の識別を含む第2のブロックチェーン・ベースのURIを生成し、前記第2のブロックチェーン・ベースのURIを前記ストレージの前記分散型台帳の中に格納するようにさらに構成される、請求項1ないし請求項6のいずれかに記載のコンピューティング・ノード。
【請求項8】
コンピューティング・ノードにより実行される方法であり、
複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI)を受信するステップと、
前記ブロックチェーンに関連する一意のチャネル名を特定するブロックチェーン・チャネル識別情報を特定するステップと、
前記ブロックチェーン・ピア・ノードの前記URIの識別および前記ブロックチェーンに関連する前記チャネル名を含むブロックチェーン・ベースのURIを生成するステップと、
前記生成されたブロックチェーン・ベースのURIを分散型台帳上に格納するステップと
を含む方法。
【請求項9】
前記特定するステップは、前記ブロックチェーンのジェネシス情報を特定するステップをさらに含み、前記生成するステップは、前記ブロックチェーンの前記ジェネシス情報の識別を含むように前記ブロックチェーン・ベースのURIを生成するステップをさらに含む、請求項
8に記載の方法。
【請求項10】
前記ジェネシス情報は、前記ブロックチェーンのイニシエータの識別を含む、請求項
9に記載の方法。
【請求項11】
前記生成するステップは、前記ブロックチェーン・ベースのURIが生成された時刻の識別を含むように前記ブロックチェーン・ベースのURIを生成するステップをさらに含む、請求項
8ないし請求項
10のいずれかに記載の方法。
【請求項12】
前記特定するステップは、前記ブロックチェーンのチェーンコード情報を特定するステップをさらに含み、前記生成するステップは、前記ブロックチェーンの前記チェーンコード情報の識別を含むように前記ブロックチェーン・ベースのURIを生成するステップをさらに含む、請求項
8ないし請求項
11のいずれかに記載の方法。
【請求項13】
前記チェーンコード情報は、チェーンコードIDと、チェーンコード・バージョンと、チェーンコードの中に含まれる、関数名を含む引数とのうちの1つ以上を含む、請求項
12に記載の方法。
【請求項14】
第2のブロックチェーン・ピア・ノードのURIの識別および前記ブロックチェーンの前記チャネル名の識別を含む第2のブロックチェーン・ベースのURIを生成するステップと、前記第2のブロックチェーン・ベースのURIを前記分散型台帳上に格納するステップとをさらに含む、請求項
8ないし請求項
13のいずれかに記載の方法。
【請求項15】
プロセッサにより読み取られると前記プロセッサに、
複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI)を受信するステップと、
前記ブロックチェーンに関連する一意のチャネル名を特定するブロックチェーン・チャネル識別情報を特定するステップと、
前記ブロックチェーン・ピア・ノードの前記URIの識別および前記ブロックチェーンの前記チャネル名を含むブロックチェーン・ベースのURIを生成するステップと、
前記生成されたブロックチェーン・ベースのURIを分散型台帳上に格納するステップと
を含む方法を実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願は、全般的にデータベース・ストレージ・システムに関し、特に、変更不可能な台帳の通知ボードを介してネットワーク位置情報およびその他ブロックチェーン・リソースが格納され得る、ブロックチェーンなどの非集中的データベースに関する。
【背景技術】
【0002】
集中的データベースは1つの位置にある1つの単一データベース(例えばデータベース・サーバ)にデータを格納し、維持する。この位置は、例としてデスクトップ中央処理ユニット(CPU:central processing unit)、サーバCPU、またはメインフレーム・コンピュータなどの中央コンピュータであることが多い。集中的データベースに格納される情報は、典型的に、異なる複数の地点からアクセス可能である。例として、クライアント/サーバ構成に基づき、複数のユーザまたはクライアント・ワークステーションが同時に集中的データベースで作業することができる。集中的データベースは、その単一の位置が理由で、特にセキュリティ目的に関わる管理、維持、および制御が容易である。全データを格納する場所が単一であるということは、所与のデータのセットが一次レコードを1つのみ有するということも意味するので、集中的データベースの中ではデータの完全性が最大化され、データの冗長性が最小化される。これは、可能な限り正確かつ一貫したデータの維持を支援し、データ信頼性を高める。
【0003】
しかしながら、集中的データベースには大きな欠点が伴う。例として、集中的データベースは単一障害点を有する。具体的には、フォールト・トレランス機構がない場合にハードウェア障害が発生すると、データベースの中のすべてのデータが失われ、全ユーザの作業が中断される。さらに、集中的データベースはネットワーク接続性への依存度が高い。結果として、インターネット接続が遅いほど、それぞれのデータベース・アクセスに必要な時間が長くなる。もう1つの欠点は、単一の位置が原因で集中的データベースが高トラフィックに直面するときのボトルネックである。さらに、集中的データベースが提供するデータへのアクセスは、データのコピーが1つしかデータベースにより維持されないことが理由で、限定的である。結果として、重大な問題をもたらしたり格納されたデータに上書きする危険を冒したりすることなく複数のユーザ・ステーションが同じ1つのデータに同時にアクセスすることはできない。さらに、中央データベース・システムが有するデータ冗長性は最低限か皆無であるため、データのセットが予期せず失われた場合、それをバックアップ・ディスク・ストレージから手動操作によって行う以外の形で取り戻すのは、非常に困難である。
【0004】
ブロックチェーン・システムなどの非集中的データベースは、集中的データベースの欠点に対処できるストレージ・システムを提供する。ブロックチェーン・システムでは、複数のピア・ノードがブロックチェーンを含む分散型台帳を格納する。クライアントは、ブロックチェーンにアクセスするためにピア・ノードと相互作用する。ピア・ノードは、互いに信頼していなくてもよく、しかも、異なる利害を有する異なるエンティティにより制御されてもよい。さらに、ブロックチェーンには中央機関がない。したがって、分散型台帳に対してデータの追加または変更がされるには、ピア・ノードのコンセンサスが発生しなければならない。コンセンサスは、信頼のないピア・ノードのブロックチェーン・システムにおいて、信頼が実現されるための方策を提供する。
【0005】
ブロックチェーンと通信するために、クライアントはピア・ノードにリクエストをサブミットし得る。リクエストを送信するために、クライアントはブロックチェーン・ピア・ノードの通信位置(例えばネットワーク・アドレス)を必要とする。ブロックチェーン・ピア・ノードのネットワーク・アドレス情報は、ピア・ノードまたはその他ブロックチェーン・エンティティからクライアントに伝達されて、クライアント・ノードにより内部に格納され得る。しかしながら、不正行為により問題が発生する可能性もある。ブロックチェーン・ピア・ノードは、ハイジャックされたり、完全に取って代わられたりする虞がある。別の例として、ブロックチェーン自体が取って代わられる虞もある。参照されるネットワーク・リソースの一意性および真正性は、現在の技術において不十分である。さらに、ネットワーク・アドレス情報に、ネットワーク・アドレスの変更、ピア・ノードの除去、ピア・ノードの追加、および同様のことなど正当な変更がある事態もある。よって、必要とされているのは、ブロックチェーン・システムの中での不正アクティビティを防止する、ブロックチェーン・リソースを管理するためのより信頼ある方策である。
【発明の概要】
【0006】
例示の一実施形態は、ストレージと、複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI:uniform resource indicator)を受信するように構成されたネットワーク・インターフェースと、ブロックチェーンに関連する一意のチャネル名を特定するブロックチェーン・チャネル識別情報を特定すること、ブロックチェーン・ピア・ノードのURIの識別およびブロックチェーンのチャネル名を含むブロックチェーン・ベースのURIを生成すること、ならびに生成されたブロックチェーン・ベースのURIをストレージの中の分散型台帳上に格納することのうちの1つ以上をするように構成されたプロセッサとのうちの1つ以上を含むシステムを提供し得る。
【0007】
別の例示の実施形態は、複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI)を受信するステップと、ブロックチェーンに関連する一意のチャネル名を特定するブロックチェーン・チャネル識別情報を特定するステップと、ブロックチェーン・ピア・ノードのURIの識別およびブロックチェーンに関連するチャネル名を含むブロックチェーン・ベースのURIを生成するステップと、生成されたブロックチェーン・ベースのURIを分散型台帳上に格納するステップとのうちの1つ以上を含む方法を提供し得る。
【0008】
さらなる例示の実施形態は、プロセッサにより読み取られるとプロセッサに、複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI)を受信することと、ブロックチェーンに関連する一意のチャネル名を特定するブロックチェーン・チャネル識別情報を特定することと、ブロックチェーン・ピア・ノードのURIの識別およびブロックチェーンに関連するチャネル名を含むブロックチェーン・ベースのURIを生成することと、生成されたブロックチェーン・ベースのURIを分散型台帳上に格納することとのうちの1つ以上を実行させる命令を含む非一時的コンピュータ可読媒体を提供し得る。
【0009】
別の例示の実施形態は、分散型台帳上に格納されたブロックチェーン・ベースの統一リソース・インジケータ(URI)を修正するリクエストを受信するように構成されたネットワーク・インターフェースと、ブロックチェーン・ベースのURIに対する修正の識別を含むデータ・ブロックを生成すること、およびブロックチェーン・ベースのURIに対する修正の識別を含む生成されたデータ・ブロックを、分散型台帳上のデータ・ブロックのハッシュ・リンク・チェーンの中に格納することのうちの1つ以上をするように構成されたプロセッサとのうちの1つ以上を含むコンピューティング・システムを提供し得る。
【0010】
別の例示の実施形態は、分散型台帳上に格納されたブロックチェーン・ベースの統一リソース・インジケータ(URI)を修正するリクエストを受信するステップと、ブロックチェーン・ベースのURIに対する修正の識別を含むデータ・ブロックを生成するステップと、ブロックチェーン・ベースのURIに対する修正の識別を含む生成されたデータ・ブロックを、分散型台帳上のデータ・ブロックのハッシュ・リンク・チェーンの中に格納するステップとのうちの1つ以上を含む方法を提供し得る。
【0011】
以下、添付の図面を参照しながら、単なる例として本発明の実施形態について記載する。
【図面の簡単な説明】
【0012】
【
図1】例示の実施形態による、ブロックチェーン通知ボードを実装するブロックチェーン・ネットワークを示す図である。
【
図2A】例示の実施形態による、アセット共有シナリオのためのピア・ノード・ブロックチェーン・アーキテクチャの構成を示す図である。
【
図2B】例示の実施形態による、ピア・ノード・ブロックチェーン構成を示す図である。
【
図3】例示の実施形態による、許可型ブロックチェーン・ネットワークを示す図である。
【
図4A】例示の実施形態による、ブロックチェーン台帳に新たなブロックが追加されるプロセスを示す図である。
【
図4B】例示の実施形態による、ブロックチェーンのデータ・ブロック構造のコンテンツを示す図である。
【
図4C】例示の実施形態による、ブロックチェーン・リソースを格納するブロックチェーン通知ボードの例を示す図である。
【
図4D】例示の実施形態による、ブロックチェーン・ベースの通知ボードからリソースを読み出す通信プロセスを示す図である。
【
図5A】例示の実施形態による、分散型台帳上にブロックチェーン・ベースの統一リソース・インジケータ(URI)を格納する方法を示す図である。
【
図5B】例示の実施形態による、分散型台帳を介してブロックチェーン・ベースのURIを修正する方法を示す図である。
【
図5C】例示の実施形態による、ブロックチェーン・リソース情報をブロックチェーン通知ボード上に格納する方法を示す図である。
【
図5D】例示の実施形態による、ブロックチェーン通知ボードにアクセスする方法を示す図である。
【
図5E】例示の実施形態による、リソース・リクエストを実行するためにチェーンコードを再インスタンス化する方法を示す図である。
【
図5F】例示の実施形態による、ブロックチェーンを検証する方法を示す図である。
【
図6A】例示の実施形態による、本願明細書に記載された1つ以上の動作に従いブロックチェーンに対して様々な動作を実行するように構成された、物理的インフラストラクチャを示す図である。
【
図6B】例示の実施形態による、コントラクトの関係者、およびブロックチェーンに対してスマート・コントラクトの条件を実施するように構成された仲介サーバの間の、スマート・コントラクトの構成を示す図である。
【
図6C】例示の実施形態による、コントラクトの関係者、およびブロックチェーンに対してスマート・コントラクトの条件を実施するように構成された仲介サーバの間の、スマート・コントラクトの構成を示す図である。
【
図6D】例示の実施形態による、別の例示のブロックチェーン・ベースのスマート・コントラクト・システムを示す図である。
【
図7】例示の実施形態のうちの1つ以上をサポートするように構成された例示のコンピュータ・システムを示す図である。
【発明を実施するための形態】
【0013】
当然のことながら、本願明細書において、全般的に記載され図面に示されている当該のコンポーネントは、幅広い種々の構成で配置および設計され得る。よって、添付の図面に表されている、方法、装置、非一時的コンピュータ可読媒体、およびシステムのうちの少なくとも1つの実施形態についての以下の詳細な記載は、特許請求される本願の範囲を限定することを意図したものではなく、選択された実施形態を代表するにすぎない。
【0014】
本明細書の全体にわたって記載される当該の機能、構造、または特徴は、1つ以上の実施形態において任意の適切な様式で組み合わせることができる。例として、語句「例示の実施形態」、「一部の実施形態」、またはその他類似の文言の使用は、本明細書の全体にわたって、実施形態に関連して記載された特定の機能、構造、または特徴が少なくとも1つの実施形態に含まれることを示す。よって、語句「例示の実施形態」、「一部の実施形態において」、「他の実施形態において」、またはその他類似の文言の出現は、本明細書の全体にわたって、すべてが必ずしも同じ実施形態のグループを参照するとは限らず、記載された機能、構造、または特徴は、1つ以上の実施形態において任意の適切な様式で組み合わせることができる。
【0015】
さらに、用語「メッセージ」が実施形態の記載の中で使用されていることがあるが、その用途はパケット、フレーム、データグラムなど多数のタイプのネットワーク・データに応用されてもよい。用語「メッセージ」は、パケット、フレーム、データグラム、およびその任意の等価物も含む。さらに、特定のタイプのメッセージおよびシグナリングが例示的な実施形態において示されることがあるが、それらは特定のタイプのメッセージに限定されず、用途は特定のタイプのシグナリングに限定されない。
【0016】
例示の実施形態は、ピア・ノードまたはその他エンティティの統一リソース・インジケータ(URI)、ジェネシス情報、タイミング情報(日付、時刻など)、チェーンコード情報、および同様のものなどのブロックチェーン・リソースを格納するブロックチェーン台帳の中の通知ボード(例えば告知板、掲示板など)を提供する、方法、システム、非一時的コンピュータ可読媒体、デバイス、もしくはネットワーク、またはそのいずれかの組み合わせを提供する。一部の実施形態において、ブロックチェーン・リソースは、新たに定義されたブロックチェーン・ベースのURIに従ってフォーマットされてもよく、これは本願明細書でBURI(blockchain-based URI:ブロックチェーン・ベースのURI)と呼ばれる。
【0017】
非集中的データベースは、相互通信する複数のノードを含む分散型ストレージ・システムである。ブロックチェーンは、相互に信頼されていない関係者間でレコードを維持できる分散型台帳に似た、追加のみ可能で変更不可能なデータ構造を含む非集中的データベースの例である。信頼されていない関係者を、本願明細書ではピアまたはピア・ノードと呼ぶ。各ピアは、データベース・レコードのコピーを維持し、分散したピア間でコンセンサスに達しなければ、いずれの単一のピアもデータベース・レコードを修正できない。例として、ピアは、コンセンサス・プロトコルを実行してブロックチェーン・ストレージ・トランザクションを検証し、ストレージ・トランザクションをブロックへとグループ化し、複数ブロックのハッシュ・チェーンを構築してもよい。このプロセスは、一貫性のために必要に応じストレージ・トランザクションを順序付けすることにより台帳を形成する。パブリックまたは自由参加型のブロックチェーンでは、誰でも特定のアイデンティティなしで参加できる。パブリック・ブロックチェーンは、多くの場合、ネイティブ暗号通貨を伴い、プルーフ・オブ・ワーク(PoW:proof of work)に基づくコンセンサスを使用する。他方、許可型ブロックチェーン・データベースは、資金、商品、情報、および同様のものを交換する企業など、共通の目的を共有するが互いを完全には信頼していないエンティティのグループの中での相互作用をセキュアにすることができるシステムを提供する。
【0018】
ブロックチェーンは、非集中的ストレージ・スキームに適合する、「スマート・コントラクト」または「チェーンコード」と呼ばれる任意プログラマブル論理を動作させる。一部の事例において、システム・チェーンコードと呼ばれる、管理機能およびパラメータのための特殊なチェーンコードが存在することもある。スマート・コントラクトは、ブロックチェーン・データベースの改ざん防止特性と、エンドースメントまたはエンドースメント・ポリシーと呼ばれるノード間の基礎的な合意とを活用する、信頼された分散型アプリケーションである。概して、ブロックチェーン・トランザクションは、ブロックチェーンにコミットされる前に典型的には「エンドース」されなければならず、エンドースされないトランザクションは無視される。典型的なエンドースメント・ポリシーでは、チェーンコードが、エンドースメントに必須のピア・ノードのセットの形でトランザクションのためのエンドーサを指定できる。クライアントが、エンドースメント・ポリシーにおいて指定されたピアにトランザクションを送信すると、トランザクションを検証するためにトランザクションが実行される。検証後、トランザクションは順序付け段階に入り、コンセンサス・プロトコルが使用されて、ブロックへとグループ化されたエンドース済みのトランザクションの順序付けされたシーケンスがもたらされる。
【0019】
ノードとは、ブロックチェーン・システムの通信エンティティである。「ノード」は、異なるタイプの複数のノードが同じ物理的サーバ上で実行され得るという意味で、論理機能を実行し得る。ノードは、信頼できるドメイン内でグループ化され、様々な形でそれらのノードを制御する論理エンティティに関連する。ノードには、トランザクション呼び出しをエンドーサ(例えばピア)にサブミットし、トランザクション提案を順序付けサービス(例えば順序付けノード)にブローキャストするクライアントまたはサブミット・クライアント・ノードなど、様々なタイプが含まれ得る。別のタイプのノードは、クライアントがサブミットしたトランザクションを受信し、トランザクションをコミットし、ブロックチェーン・トランザクションの台帳の状態およびコピーを維持することができるピア・ノードである。ピアはエンドーサの役割を持つこともできるが、これは必要条件ではない。順序付けサービス・ノードまたはオーダラは、すべてのノードのために通信サービスを実行するノードであり、トランザクションをコミットするとき、およびブロックチェーンのワールド状態を修正するときの、システム内のそれぞれのピア・ノードへのブロードキャストなどの配信保証を実装し、ワールド状態は、通常は制御情報および設定情報を含む初期ブロックチェーン・トランザクションの別の名前である。
【0020】
台帳は、ブロックチェーンのすべての状態遷移の、配列された改ざん防止機能付きのレコードである。状態遷移は、参加している関係者(例えばクライアント・ノード、順序付けノード、エンドーサ・ノード、ピア・ノードなど)によってサブミットされたチェーンコード呼び出し(すなわちトランザクション)から生じ得る。トランザクションは、作成、更新、削除、および同様のものなどの1つ以上のオペランドとして台帳にコミットされるアセットのキーと値のペアのセットをもたらし得る。台帳は、配列された変更不可能なレコードをブロックに格納するために使用されるブロックチェーン(チェーンとも呼ばれる)を含む。台帳は、ブロックチェーンの現在の状態を維持する状態データベースも含む。通常は、チャネルごとに1つの台帳がある。各ピア・ノードは、それらがメンバーになっている各チャネルに対して台帳のコピーを維持する。
【0021】
チェーンとは、ハッシュ・リンク・ブロックとして構造化されたトランザクション・ログであり、各ブロックはN個のトランザクションのシーケンスを含み、Nは1以上である。ブロック・ヘッダは、ブロックのトランザクションのハッシュ、および前のブロックのヘッダのハッシュを含む。このようにして、台帳に対するすべてのトランザクションが配列され、暗号で互いにリンクされ得る。したがって、ハッシュ・リンクを壊さずに台帳データを改ざんすることはできない。最も最近追加されたブロックチェーンのブロックのハッシュは、それ以前に発生したチェーンに対するすべてのトランザクションを表し、すべてのピア・ノードが一貫し、信頼された状態にあることを保証できるようになっている。チェーンは、ブロックチェーン・ワークロードの追加のみ可能な性質を効率的にサポートするピア・ノードのファイル・システム(すなわちローカル、接続型ストレージ、クラウドなど)に格納され得る。
【0022】
変更不可能な台帳の現在の状態は、チェーン・トランザクション・ログに含まれるすべてのキーの最新の値を表す。現在の状態は、チャネルに知られている最新のキーの値を表すため、ワールド状態と呼ばれることもある。チェーンコード呼び出しは、台帳の現在の状態のデータに対してトランザクションを実行する。このようなチェーンコードの相互作用を効率的にするために、キーの最新の値が状態データベースに格納され得る。状態データベースは、単にチェーンのトランザクション・ログへのインデックス付きビューとすることもでき、したがって、いつでもチェーンから再生成できる。状態データベースは、ピア・ノードの起動時、トランザクションが受け取られる前に自動的に回復(必要な場合は生成)され得る。
【0023】
本願は、ブロックチェーンを保持する分散型台帳上にブロックチェーン・リソースを格納することに関する。特に本願は、ブロックチェーン・ピア・ノード・リソースの情報の追加、修正、削除、および同様のことが可能な通知ボードを分散型台帳を介して実装する。通知ボードは、ブロックチェーンのピア・ノード間で複製されてもよい。本願明細書に記載された解決策の利点の一部として、変更不可能な台帳の中にブロックチェーンの各ピア・ノードのブロックチェーン・ベースのURI(BURI)を格納することによる、ブロックチェーン・ネットワークの信頼の向上が挙げられる。本願明細書における例は、リソース参照システムを改良する。
【0024】
関連するURIベースのリソース参照メカニズムでは、URIによりポイントされるリソースが、変更または削除されることがある。もう1つの問題として、URIは、リソース・サーバがダウンしている場合、またはリソースが他のサーバに移動された場合に、ダングリング参照となり得る。例示の実施形態により説明されるBURIベースのリソース参照メカニズムでは、メカニズムがブロックチェーンの分散型台帳を使用してリソースおよびリソースを参照するためのブロックチェーン・ベースのURI(ブロックチェーンの各ピア・ノードに格納されたリソースを特定できる)を格納するので、BURIによりポイントされるリソースは変更されない。例として、BURIは、ブロックチェーンを特定するジェネシス情報(例えば一意のストリングなど)、ピアURI、ブロックチェーン・チャネルID、チェーンコードID、チェーンコード・バージョン、BURIが通知ボードに追加された時刻、および同様のものを含んでもよい。各ピア・ノードが、それ自体のBURIを有してもよい。
【0025】
一般に、ブロックチェーンの各ピア・ノードは、その台帳上に同じコンテンツ・データを有する。したがって、ブロックチェーンのメンバーである各ピア・ノードがコンテンツにアクセスできる。例示の実施形態において、ブロックチェーンのピア・ノードのすべてのURIが、それぞれのピア・ノードの通知ボードの中にセットとして格納され得る。一部の実施形態において、通知ボードは、ワールド状態データベース(状態データベースとも呼ばれる)の中に生成および実装されてもよい。これは、リソース参照ネットワーク・システムの信頼を向上させることができ、ダングリング参照の問題を防ぐことができる。BURIは、すべてのピア・ノードに対して構築され、格納されてもよく、あらゆるピア・ノードにおいて格納されて、信頼できて一貫性があり、サーバ移行に対して堅固なリソース参照システムの構築を可能にし得る。システムはさらに、システムが所与のBURIのリソースを決定的な形で返すという意味で、決定的とされ得る。すべてのピア・ノードがダウンしているか、または改ざんされている場合は別であるが、ブロックチェーンにおいては、そのような場合が発生する可能性は比較的低い。したがって、一般に、ブロックチェーンにおいて実行されるすべてのスマート・コントラクト(またはチェーンコード)は決定的でなければならないので、BURIベースのリソース参照システムは、他のブロックチェーンのチェーンコードから呼び出されることが可能である。
【0026】
ブロックチェーンが従来のデータベースと異なるのは、ブロックチェーンが中央ストレージではなくむしろ非集中的、変更不可能、かつセキュアなストレージであり、ノードがストレージ内のレコードに対する変更を共有しなければならないという点にある。ブロックチェーンに内在し、ブロックチェーンの実装に役立つ一部の特性としては、変更不可能な台帳、スマート・コントラクト、セキュリティ、プライバシー、非集中、コンセンサス、エンドースメント、アクセス可能性、および同様のものが挙げられるが、これらに限定はされず、これらについては本願明細書にさらに記載される。様々な側面によれば、BURIを格納する通知ボードは、ブロックチェーンの変更不可能性、スマート・コントラクト、プライバシー、および非集中的かつ分散型の特性を含む、ブロックチェーンの様々な特性により実装される。通知ボードは、ブロックチェーンも格納する分散型台帳上に格納されてもよいが、通知ボードは、ブロックチェーンとは独立して格納されてもよい。
【0027】
分散型台帳は、変更不可能であるので、特定の時点にキーに格納されたBURIコンテンツを読み出すことができる。さらに、ブロックチェーン内のすべてのデータは高い説明可能性を有するので、通知ボードのあらゆるデータは説明可能なデータである。例として、各情報を誰がポストしたのかをチェックすることができる。スマート・コントラクトは、データをポストするため、データを修正(追加、削除、BURIを変更など)するため、およびデータを読み出すために、通知ボードと相互作用するべく使用され得る。一般に、ブロックチェーンに格納されるデータはバイト・データである。スマート・コントラクトは、参照されるバイト・データのエンコードおよびポストされたバイト・データのデコードを担当する必要がある。同じバイト・データが参照される場合でも、実際に参照されて読み出される値は、データ読み出しのためのスマート・コントラクトが変化するのに伴い変化し得る。したがって、BURIは、通知ボードにアクセスするために使用されるチェーンコードのチェーンコード・バージョン(スマート・コントラクト・バージョン)についての情報を含む。通知ボードを通して、ポストされた情報に誰がアクセスするかを制限することも可能である。通知ボードおよびBURIリソースは、各分散型ピア・ノードに格納され、各ピア・ノードは、リソースの証人となることができる。したがって、信頼を構築するため、または堅固な通知ボードを構築するために、集中的なデータ格納ノードは不要である。一部の事例において、情報が通知ボードにポストされる前に、情報は、指定されたピア・ノードによりチェックされることが可能である。このチェックは、ブロックチェーンのコンセンサスにより実装できる。ハイパーレッジャー・ファブリックでは、情報をポストすることの、スマート・コントラクトに関するエンドースメント・ポリシーを使用して、コンセンサスが実装される。
【0028】
例示の実施形態は、ブロックチェーンに特有である。言い換えれば、集中的データベースでは1つのエンティティがデータベースに追加および格納されるソフトウェアに対する制御権を有するので、例示の実施形態は集中的データベースを介して実行することはできない。対照的に、ブロックチェーンは非集中的であり、中央機関を有しない。したがって、信頼および説明可能性を保証するために追加の方策が実装されなければならない。従来のブロックチェーンの欠点の1つは、使用されているチェーンコードが正確であるという確証も、ブロックチェーン・ネットワーク・アドレスが正確であるという確証も持てないことである。本願明細書に記載されるBURIは、たとえネットワーク・アドレス、チェーンコードID、チェーンコード・バージョン、および同様のものが変化しても、ブロックチェーンがブロックチェーン台帳上の一意のリソースを指定できるようにする。
【0029】
図1は、例示の実施形態による、ブロックチェーン通知ボードを実装するブロックチェーン・ネットワーク100を示す。
図1を参照する。ブロックチェーン・ネットワーク100は、ネットワーク140を通して相互に接続された複数のピア・ノード120~123および順序付けノード130を含む。複数のピア・ノード120~123は、ブロックチェーンおよびワールド状態データベースを含む分散型台帳を格納する。各ピア・ノード120~123は、クライアントからデータを受信し、(例えばブロックチェーンのデータに対する読み取り、書き込み、修正、削除などのため)トランザクションを提案してもよい。ここで、順序付けノード130は、トランザクションをブロックへと順序付けして、各ピア・ノード120~123に格納されたブロックチェーン上での格納のためにそれぞれのピア・ノード120~123にブロックを送信し得る。このようにして、各ピア・ノード120~123がブロックチェーンの同じコピーを有するべきである。
【0030】
様々な実施形態によれば、それぞれのピア・ノード120~123は、ブロックチェーン通知ボード(BCNB:blockchain notification board)とも呼ばれる通知ボード120A~123Aを含んでもよい。各BCNBは、ブロックチェーンに関連するブロックチェーン・リソース情報を格納できる。例として、通知ボード120A~123Aは、ブロックチェーンも含む分散型台帳上に格納されてもよい。一例において、通知ボード120A~123Aは、ワールド状態データベースの中に実装されてもよいが、実施形態はそれに限定されない。通知ボードは、ピア・ノードURI、ジェネシス情報、チャネル情報、チェーンコード情報、時刻情報、および同様のものなどの情報が格納される掲示板として機能してもよい。さらに、通知ボード120A~123Aのコンテンツに対して加えられる任意の変更が、ブロックチェーンのデータ・ブロックの中に格納されることが可能であり、それにより、時間が経つにつれて、ブロックチェーン・リソースに対する変更の変更不可能なレコードが提供される。
【0031】
ブロックチェーンに対してトランザクションをするために、クライアント110は、ブロックチェーン・ピア・ノード120~123のいずれかにアクセスしてもよい。例として、クライアント110がブロックチェーンに登録するか、またはその他の形で情報をリクエストすると、初めにクライアントに、参加しているブロックチェーン・ピア・ノードのBURIのリストが提供されてもよい。ブロックチェーンから現在のブロックチェーン・ピア・ノード情報を読み出すために、クライアント110は、ブロックチェーン・ベースのURI(BURI)リクエストをブロックチェーン・ピア・ノードにサブミットしてもよい。この例では、クライアント110は、BURIリクエストをブロックチェーン・ピア・ノード122にサブミットする。それに応答して、ピア・ノード122は、通知ボード122Aにアクセスして、ブロックチェーン・ピアの現在のリストまたはセット(およびそれらのネットワーク位置情報)を読み出してもよい。通知ボード122Aにアクセスするために、ピア・ノード122は、通知ボード122Aから情報を読み出すチェーンコードを実行してもよい。ピア・ノード122は、通知ボード122Aから読み出されたブロックチェーン・ピア情報(例えば現在のピア・ノードのBURIのセット)をクライアント・ノード110に提供し、それによって、クライアント・ノード110がブロックチェーンのメンバーである現在のブロックチェーン・ピア(例えばピア・ノード120~123)と相互作用できるようにしてもよい。
【0032】
各ピア・ノード120~123は、フロント・エンド・システムとして通知ボード・アプリケーション/システムを有してもよい。通知ボード・アプリケーションは、RESTアクセスを通してBURIを受信することができる。通知ボード・システムにおいて、BURIを受信した後、分散型台帳上に格納された通知ボードからデータを読み出すためにスマート・コントラクト(チェーンコード)が実行される。ブロックチェーン・ベースの通知ボード・ネットワーク100に参加している各ピア・ノード120~123は、ネットワークに参加しているすべてのピア・ノードのBURIのセットを提供する機能性を有してもよい。各ピア・ノードは、他のピア・ノードがまだネットワークに参加していることを定期的にチェックしてもよい。ピア・ノードの変更が検出されると(例えばピアの除去、ピアの追加、ピアのURIの変更など)、変更情報が1つ以上のピア・ノードにより検出されて、通知ボード・ネットワーク100に参加している他のピア・ノードに通知されてもよい。通知が届いた後、各ピア・ノードは、変更に基づき、参加しているピア・ノードのBURIのセットを更新する。各ピア・ノードは、情報を通知ボード・ジェネシスCA(NBCA:notice-board-genesis-CA)にレポートしてもよい。
【0033】
一方、各クライアント・アプリケーション(例えばクライアント110)は、通知ボード・ネットワーク100に加わっている一部のピア・ノードのURIのセットを有することができる。クライアント・アプリケーションはさらに、オフチェーン・ストレージおよび同様のものなど、参照されるリソースのBURIのセットを格納することができる。クライアント・アプリケーションは、ピア・ノードの機能を呼び出すことにより、有効なピアURIを定期的に自動で更新することができ、この機能は、参加しているピア・ノードのURIを含むBURIのセットを返す。
【0034】
BURIは、たとえリソースの変更を表示/格納するスマート・コントラクト(チェーンコード)の時刻およびバージョンが後に変更された場合でも、システムがブロックチェーン上の一意のリソースを指定できるようにする。ブロックチェーン・ピア・ノードがBURIリクエストを受信すると、ブロックチェーン・ピア・ノードは、BURIが生成された時に使用されたピア・ノードのチェーンコードIDおよびチェーンコード・バージョンを特定してもよい。したがって、ピア・ノードは、BURIが生成された時のチェーンコード・バージョンを再インスタンス化して、BURIリクエストを実行し、通知ボードにアクセスしてもよい。さらに、ピア・ノードはさらに、BURIの時点で以前格納された値により、実行中にチェーンコードにより読み取られる読み取りセットのキーの値を置き換えてもよい。したがって、チェーンコードの後のバージョンが望まれない形で追加または操作されることからの不正またはエラーを防止できる。従来のブロックチェーンでは、システムは、ブロックチェーン・システムに格納されたリソースを参照するために、チェーンコードの時刻値またはバージョンを使用することができない。
【0035】
例示の実施形態において、ブロックチェーンのそれぞれのピア・ノードが、個別の通知ボードを介して、すべてのピア・ノードのピアURI情報を格納してもよい。各ピア・ノードはさらに、同じ情報を含むピア・ノードのBURIをクライアント・アプリケーションに提供する能力も有してもよい。これは、クライアント・アプリケーションが、有効な情報を参照するように有効なBURIを自動的に更新して、ダングリング参照を回避できるようにする。従来のブロックチェーンには、通常、通知ボードのコンテンツを参照するために、識別子を更新する情報をクライアント・アプリケーションに提供する機能がない。結果として、クライアント・アプリケーションは、そのような情報を自ら管理しなければならない。
【0036】
スマート・コントラクト機能性(および順序を表すRESTウェブ・ベースのシステム)を備えた従来のブロックチェーンは、通常、状態DB(またはワールド状態DB)を有し、これはブロックチェーンのキーの値の最新コンテンツを格納する。例として、状態DBがキーの値のストアである場合、各キーの各値は、時間が経つにつれて更新および変更されることが可能である。したがって、所与のキーのリソースの値は、時間によって変更される可能性がある。これは、順序を表す識別子(例えばURI)により特定される値が、時間が経つにつれて変更され得ることを意味する。ここで、BURIの中の「時刻」変数は、識別子(BURI)が、時間が経つにつれて一意のリソースを特定することを可能にする。順序を表すブロックチェーンは、一連のトランザクション・データ(ブロックチェーン・データ)を有し、これは通常、状態DBの各キーの読み取り・書き込みセット、およびトランザクション開始時刻を有する。したがって、例示の実施形態は、BURI(時刻情報を含む)を使用して、BURIにおける所与の時点それぞれでの、各キーの値を得ることができる。例として、ピア・ノードは、状態データベースに格納された現在の値を実行するのではなく、BURIに含まれるタイミング情報に基づき以前のキーの値に置き換え、それにより、チェーンコードの実行が正しいデータに対して実行されることを保証することができる。
【0037】
図2Aは、例示の実施形態によるブロックチェーン・アーキテクチャの構成200を示す。
図2Aを参照する。ブロックチェーン・アーキテクチャ200は、特定のブロックチェーン構成要素、例としてブロックチェーン・ノード202のグループを含んでもよい。ブロックチェーン・ノード202は、1つ以上のノード204~210を含んでもよい(これら4つのノードは例としてのみ示されている)。これらのノードは、ブロックチェーン・トランザクションの追加および検証プロセス(コンセンサス)など、いくつかのアクティビティに参加する。ブロックチェーン・ノード204~210の1つ以上は、エンドースメント・ポリシーに基づきトランザクションをエンドースしてもよく、アーキテクチャ200の中のすべてのブロックチェーン・ノードに対して順序付けサービスを提供してもよい。ブロックチェーン・ノードは、ブロックチェーン認証を開始して、ブロックチェーン・レイヤ216に格納されたブロックチェーンの変更不可能な台帳への書き込みをしようとすることができ、そのコピーは、基盤となる物理的インフラストラクチャ214にも格納されてもよい。ブロックチェーンの構成は、格納されたプログラム/アプリケーション・コード220(例えばチェーンコード、スマート・コントラクトなど)にアクセスして実行するためのアプリケーション・プログラミング・インターフェース(API:application programming interfaces)222にリンクされた1つ以上のアプリケーション224を含んでもよく、プログラム/アプリケーション・コード220は、参加者によって求められるカスタマイズされた構成に従って作成でき、それら自体の状態を維持し、それら自体のアセットを制御し、外部情報を受信することができる。これは、すべてのブロックチェーン・ノード204~210上で、分散型台帳に追加することによって、トランザクションとしてデプロイし、インストールすることができる。
【0038】
ブロックチェーン・ベースまたはプラットフォーム212は、新たなトランザクションの受信および格納、ならびにデータ・エントリにアクセスしようとしている監査人へのアクセス提供のために使用され得る、ブロックチェーン・データ、サービス(例えば暗号信用サービス、仮想実行環境など)、および基盤となる物理的コンピュータ・インフラストラクチャの様々なレイヤを含んでもよい。ブロックチェーン・レイヤ216は、プログラム・コードを処理して物理的インフラストラクチャ214を使うために必要な仮想実行環境へのアクセスを提供するインターフェースを公開してもよい。暗号信用サービス218は、アセット交換トランザクションなどのトランザクションを確認し、情報をプライベートに保つために使用されてもよい。
【0039】
図2Aのブロックチェーン・アーキテクチャの構成は、ブロックチェーン・プラットフォーム212によって公開される1つ以上のインターフェースおよび提供されるサービスを介して、プログラム/アプリケーション・コード220を処理および実行してもよい。コード220は、ブロックチェーンのアセットを制御してもよい。例として、コード220は、データを格納および転送することができ、スマート・コントラクトおよび条件を伴う関連するチェーンコードまたはその実行の対象になる他のコード要素の形態で、ノード204~210によって実行されてもよい。非限定的な例として、スマート・コントラクトは、リマインダ、更新、もしくはその他変更、更新などの対象となる通知、またはそのいずれかの組み合わせを実行するために作成されてもよい。スマート・コントラクト自体を、権限付与およびアクセスの要件ならびに台帳の使用に関連するルールを特定するために使用することができる。例として、読み取りセット226は、ブロックチェーン・レイヤ216に含まれる1つ以上の処理エンティティ(例えば仮想マシン)により処理されてもよい。書き込みセット228は、キーの値に対する変更を含んでもよい。物理的インフラストラクチャ214は、本願明細書に記載されたデータまたは情報のいずれかを読み出すために利用されてもよい。
【0040】
チェーンコードの中に、高水準のアプリケーションおよびプログラミング言語によりスマート・コントラクトが作成され、その後、ブロックチェーン内のブロックに書き込まれてもよい。スマート・コントラクトは、ブロックチェーン(例えばブロックチェーン・ピアの分散型ネットワーク)を用いて登録、格納、もしくは複製、またはそのいずれかの組み合わせをされる実行可能コードを含んでもよい。トランザクションは、スマート・コントラクトに関連する条件が満足されることに応答して実行可能な、スマート・コントラクト・コードの実行である。スマート・コントラクトの実行は、デジタル・ブロックチェーン台帳の状態に対する信頼される修正(単数または複数)をトリガしてもよい。スマート・コントラクトの実行によって生じたブロックチェーン台帳に対する修正(単数または複数)は、1つ以上のコンセンサス・プロトコルを通してブロックチェーン・ピアの分散型ネットワーク全体に自動的に複製されてもよい。
【0041】
スマート・コントラクトは、データをキーと値のペアの形式でブロックチェーンに書き込んでもよい。さらにスマート・コントラクト・コードは、ブロックチェーンに格納された値を読み取り、それらをアプリケーションの動作において使用することができる。スマート・コントラクト・コードは、様々な論理演算の出力をブロックチェーンに書き込むことができる。コードは、仮想マシンまたはその他コンピューティング・プラットフォーム内の一時的データ構造を作成するために使用されてもよい。ブロックチェーンに書き込まれるデータは、パブリックとされること、もしくは暗号化されてプライベートとして維持されること、またはその両方が可能である。スマート・コントラクトによって使用/生成される一時的データは、提供される実行環境によってメモリ内に保持され、その後、ブロックチェーンに必要なデータが特定されると削除される。
【0042】
チェーンコードは、追加機能とともに、スマート・コントラクトのコード解釈を含んでもよい。本明細書に記載されているように、チェーンコードは、コンピューティング・ネットワーク上にデプロイされるプログラム・コードとすることができ、コードはコンセンサス・プロセス中にチェーン・バリデータによって一緒に実行され、検証される。チェーンコードは、ハッシュを受信し、以前に格納された特徴の抽出器を使用することで作成されたデータ・テンプレートに関連するハッシュをブロックチェーンから読み出す。ハッシュ識別子のハッシュと、格納された識別子テンプレート・データから作成されたハッシュとが一致すれば、チェーンコードは、権限付与キーを、リクエストされたサービスに送信する。チェーンコードは、暗号の詳細に関連するデータをブロックチェーンに書き込んでもよい。
【0043】
図2Bは、例示の実施形態に従った、ブロックチェーンのノード間のトランザクション・フロー250の例を示す。
図2Bを参照する。トランザクション・フローは、アプリケーション・クライアント・ノード260によってエンドース・ピア・ノード281に送信されるトランザクション提案291を含んでもよい。エンドース・ピア281は、クライアントの署名を確認し、チェーンコード関数を実行してトランザクションを開始してもよい。出力は、チェーンコードの結果、チェーンコードにおいて読み取られたキー/値のバージョンのセット(読み取りセット)、およびチェーンコードにおいて書き込まれたキー/値のセット(書き込みセット)を含んでもよい。提案応答292が、承認される場合はエンドースメント署名とともに、クライアント260に返送される。クライアント260は、エンドースメントをトランザクションのペイロード293にまとめて、順序付けサービス・ノード284にブロードキャストする。次に順序付けサービス・ノード284は、順序付けしたトランザクションをブロックとしてチャネル上のすべてのピア281~283に配信する。ブロックチェーンへのコミットの前に、各ピア281~283はトランザクションを検証してもよい。例としてピアは、指定されたピアの正しい割り当てが結果に署名し、トランザクションのペイロード293に対する署名を認証したことを保証するために、エンドースメント・ポリシーをチェックしてもよい。
【0044】
クライアント・ノード260は、リクエストを構築してエンドーサであるピア・ノード281に送信することによって、トランザクション291を開始してもよい。エンドーサは複数であってもよいが、便宜上ここでは1つ示す。クライアント260は、NODE、JAVA(R)、PYTHON、および同様のものなどのサポートされているソフトウェア開発キット(SDK:software development kit)を利用するアプリケーションを含んでもよく、このアプリケーションは、利用可能なAPIを利用してトランザクション提案を生成する。トランザクション提案291は、台帳に対してデータの読み取りもしくは書き込み(すなわちアセットの新しいキーと値のペアを書き込むこと)、またはその両方をできるように、チェーンコード関数を呼び出すためのリクエストである。SDKは、トランザクション提案を、適切に設計された形式にパッケージ化するためのシムとして機能し(例えば遠隔手続呼び出し(RPC:remote procedure call)を経由するプロトコル・バッファ)、クライアントの暗号認証情報を得て、トランザクション提案のための一意の署名をもたらしてもよい。
【0045】
それに応答して、エンドース・ピア・ノード281は、(a)トランザクション提案が適切に形成されていること、(b)トランザクションが過去にすでにサブミットされていないこと(リプレイ・アタック保護)、(c)署名が有効であること、および(d)そのチャネルに対する提案された動作を実行するための適切な権限がサブミッタ(本例ではクライアント260)に付与されていることを確認してもよい。エンドース・ピア・ノード281は、トランザクション提案の入力を、呼び出されるチェーンコード関数への引数として得てもよい。次に、チェーンコードが現在の状態データベースに対して実行され、応答値、読み取りセット、および書き込みセットを含むトランザクション結果がもたらされる。ただしこの時点では、台帳に対する更新は行われない。292において、値のセットがエンドース・ピア・ノード281の署名とともに提案応答292としてクライアント260のSDKに返され、SDKが、アプリケーションが使用するためのペイロードを構文解析する。
【0046】
それに応答して、クライアント260のアプリケーションが、エンドース・ピアの署名を検査/確認し、提案応答を比較して、提案応答が同じであるかどうかを判断する。チェーンコードが単に台帳にクエリを行った場合は、アプリケーションはクエリ応答を検査し、通常は、トランザクションを順序付けサービス・ノード284にサブミットしないであろう。クライアント・アプリケーションが、台帳を更新するためにトランザクションを順序付けサービス・ノード284にサブミットしようとする場合、アプリケーションは、サブミットする前に、指定されたエンドースメント・ポリシーが満たされているかどうか(すなわちトランザクションに必要なすべてのピア・ノードがトランザクションをエンドースしたかどうか)を判断する。ここでクライアントは、トランザクションの複数の関係者のうちの1つのみを含んでもよい。この事例では、各クライアントは、それ自体のエンドース・ノードを有してもよく、各エンドース・ノードがトランザクションをエンドースする必要がある。このアーキテクチャでは、たとえアプリケーションが応答を検査しないことを選択するか、または別の形でエンドースされていないトランザクションを転送する場合でも、エンドースメント・ポリシーがピアによってなお実施され、コミット検証フェーズで確認されるようになっている。
【0047】
検査に成功した後、ステップ293で、クライアント260が、エンドースメントをトランザクションにまとめ、順序付けノード284へのトランザクション・メッセージの中でトランザクション提案および応答をブロードキャストする。トランザクションは、読み取り/書き込みセット、エンドース・ピアの署名、およびチャネルIDを含んでもよい。順序付けノード284は、その動作を実行するためにトランザクションのコンテンツ全体を検査する必要はなく、代わりに順序付けノード284は、単にトランザクションをネットワーク内のすべてのチャネルから受信して、チャネル別に時系列順に順序付けし、チャネルごとにトランザクションのブロックを作成すればよい。
【0048】
トランザクションのブロックは、順序付けノード284からチャネル上のすべてのピア・ノード281~283に配信される。任意のエンドースメント・ポリシーが満たされていることを保証するため、および読み取りセットがトランザクションの実行によって生成されて以来、読み取りセットの変数に関して台帳の状態に対する変更がないことを保証するために、ブロックの中のトランザクション294が検証される。ブロック内のトランザクションは、有効または無効としてタグ付けされる。さらにステップ295で、各ピア・ノード281~283は、ブロックをチャネルのチェーンに追加し、有効なトランザクションそれぞれについて、書き込みセットが現在の状態データベースにコミットされる。トランザクション(呼び出し)が変更不可能なようにチェーンに追加されたことをクライアント・アプリケーションに通知するため、ならびにトランザクションが有効にされたか、または無効にされたかを通知するために、イベントが発せられる。
【0049】
図3は、分散型の非集中的ピア・ツー・ピア・アーキテクチャ、ならびにユーザの役割および許可を管理する認証局318を特徴とする許可型ブロックチェーン・ネットワーク300の例を示す。本例では、ブロックチェーン・ユーザ302が、トランザクションを許可型ブロックチェーン・ネットワーク310にサブミットしてもよい。本例では、トランザクションは、デプロイ、呼び出し、またはクエリとすることができ、SDKを利用するクライアント側のアプリケーションを通して、またはREST APIを通して直接的に、または同様の形で発行されてもよい。信頼できるビジネス・ネットワークは、監査人(例として米国の株式市場における証券取引委員会)などの規制者システム314にアクセスを提供してもよい。一方、ノードのブロックチェーン・ネットワーク運用者システム308は、規制者システム314を「監査人」として登録し、ブロックチェーン・ユーザ302を「クライアント」として登録するなどの、メンバーの許可を管理する。監査人は、台帳のクエリのみに制限できる一方、クライアントには、特定のタイプのチェーンコードのデプロイ、呼び出し、およびクエリを行うための権限を付与できるであろう。
【0050】
ブロックチェーン開発者システム316は、チェーンコードおよびクライアント側アプリケーションを書く。ブロックチェーン開発者システム316は、RESTインターフェースを介してチェーンコードをネットワークに直接デプロイすることができる。従来のデータ・ソース330からの認証情報をチェーンコードに含めるために、開発者システム316は、アウト・オブ・バンド接続を使用してデータにアクセスすることができるであろう。本例では、ブロックチェーン・ユーザ302は、ピア・ノード312を介してネットワークに接続する。ピア・ノード312は、任意のトランザクションを開始する前に、ユーザの登録およびトランザクション証明書を認証局318から読み出す。一部の事例において、ブロックチェーン・ユーザは、許可型ブロックチェーン・ネットワーク310上でトランザクションを行うために、このようなデジタル証明書を所有していなければならない。一方、チェーンコードを駆動しようとするユーザは、従来のデータ・ソース330上の自身の認証情報の確認を行うよう要求されてもよい。ユーザの権限付与を確かめるために、チェーンコードは、従来の処理プラットフォーム320を介してこのデータへのアウト・オブ・バンド接続を使用することができる。
【0051】
図4Aは、例示の実施形態による、分散型台帳420に新たなブロックが追加されるプロセス400を示し、
図4Bは、例示の実施形態による、ブロックチェーンのブロック構造440のコンテンツを示す。
図4Aを参照する。クライアント(図示せず)は、トランザクションをブロックチェーン・ノード411、412、もしくは413、またはそのいずれかの組み合わせにサブミットしてもよい。クライアントは、ブロックチェーンに対するアクティビティを規定する、任意のソースから受信される命令であってもよい。例として、クライアントは、ブロックチェーンのトランザクションを提案するデバイス、人、またはエンティティなどのリクエスタに代わって動作するアプリケーション(SDKに基づく)であってもよい。複数のブロックチェーン・ピア(例えばブロックチェーン・ノード411、412、および413)は、ブロックチェーン・ネットワークの状態および分散型台帳420のコピーを維持してもよい。
【0052】
クライアントにより提案されたトランザクションをシミュレーションしてエンドースするエンドース・ピア、エンドースメントの確認、トランザクションの検証、および分散型台帳420へのトランザクションのコミットをするコミット・ピアを含む、種々のタイプのブロックチェーン・ノード/ピアが、ブロックチェーン・ネットワークに存在してもよい。本例において、ブロックチェーン・ノード411、412、および413は、エンドーサ・ノード、コミッタ・ノード、または両方の役割を実行してもよい。
【0053】
分散型台帳420は、配列された変更不可能なレコードをブロックに格納するブロックチェーン430、およびブロックチェーン430の現在の状態(キーの値)を維持する状態データベース450(現在のワールド状態)を含む。チャネルごとに1つの分散型台帳420が存在してもよく、各ピアは、それがメンバーである各チャネルの分散型台帳420の、自己のコピーを維持する。ブロックチェーン430は、ハッシュ・リンク・ブロックとして構造化されたトランザクション・ログであり、各ブロックはN個のトランザクションのシーケンスを含む。ブロック(例えばブロック440)は、
図4Bに示されているものなど、様々なコンポーネントを含んでもよい。ブロックのリンク(
図4Aでは矢印により示されている)は、前のブロックのヘッダのハッシュを現在のブロックのブロック・ヘッダの中に追加することにより生成されてもよい。このようにして、ブロックチェーン430に対するすべてのトランザクションが、配列され、暗号によって互いにリンクされ、ハッシュ・リンクを壊さずにブロックチェーン・データを改ざんすることが防止される。さらに、リンクにより、ブロックチェーン430の中の最新ブロックは、それに先行したあらゆるトランザクションを表す。ブロックチェーン430は、追加のみ可能なブロックチェーン・ワークロードをサポートするピア・ファイル・システム(ローカルまたは接続型ストレージ)上に格納されてもよい。
【0054】
ブロックチェーン430および分散型台帳420の現在の状態は、状態データベース450に格納されてもよい。ここで、現在の状態のデータは、ブロックチェーン430のチェーン・トランザクション・ログにこれまで含まれたすべてのキーの最新の値を表す。チェーンコード呼び出しは、状態データベース450の現在の状態に対してトランザクションを実行する。こうしたチェーンコードの相互作用を極めて効率的にするために、すべてのキーの最新の値が状態データベース450に格納されてもよい。状態データベース450は、ブロックチェーン430のトランザクション・ログへのインデックス付きビューを含んでもよく、したがって、いつでもチェーンから再生成できる。状態データベース450は、ピアの起動時、トランザクションが受け取られる前に、自動的に回復(必要な場合は生成)されてもよい。
【0055】
エンドース・ノードは、クライアントからトランザクションを受信して、シミュレーションされた結果に基づきトランザクションをエンドースする。エンドース・ノードは、トランザクションの提案をシミュレーションするスマート・コントラクトを保持する。トランザクションをエンドースする必要があるノードは、チェーンコードの中で指定され得るエンドースメント・ポリシーによって決まる。エンドースメント・ポリシーの例は、「エンドース・ピアの過半数がトランザクションをエンドースしなければならない」である。異なるチャネルは、異なるエンドースメント・ポリシーを有してもよい。エンドースされたトランザクションは、クライアント・アプリケーションから順序付けサービス410に転送される。
【0056】
順序付けサービス410は、エンドースされたトランザクションを受け取り、それらをブロックへと順序付け、ブロックをコミット・ピアに配信する。例として、順序付けサービス410は、トランザクションの閾値に達した場合、またはタイマがタイムアウトした場合、または別の条件で、新たなブロックを開始してもよい。
図4Aの例において、ブロックチェーン・ノード412は、ブロックチェーン430上に格納される新たなデータ・ブロック440を受信したコミット・ピアである。
【0057】
順序付けサービス410は、オーダラのクラスタで構成されてもよい。順序付けサービス410は、トランザクション、スマート・コントラクトを処理せず、共有台帳を維持しない。代わりに、順序付けサービス410は、エンドースされたトランザクションを受け取り、それらのトランザクションが分散型台帳420にコミットされる順序を指定してもよい。ブロックチェーン・ネットワークのアーキテクチャは、「順序付け」の特定の実装(例えばSolo、Kafka、BFTなど)がプラグイン可能なコンポーネントとなるように設計されてもよい。
【0058】
トランザクションは、一貫した順序で分散型台帳420に書き込まれる。トランザクションの順序は、状態データベース450に対する更新がネットワークにコミットされるときに有効であることを保証するように定められる。順序付けが暗号パズルを解くこと、またはマイニングにより発生する暗号通貨ブロックチェーン・システム(例えばビットコインなど)と異なり、本例では、分散型台帳420の関係者が、そのネットワークに最もふさわしい順序付けメカニズムを選べばよい。
【0059】
順序付けサービス410が新たなブロック440を初期設定すると、新たなブロック440は、コミット・ピア(例えばブロックチェーン・ノード411、412、および413)にブロードキャストされてもよい。それに応答して、各コミット・ピアは、読み取りセットおよび書き込みセットがなお状態データベース450における現在のワールド状態と一致することを確かめるためのチェックを行うことで、新たなブロック440の中のトランザクションを検証する。具体的には、コミット・ピアは、エンドーサがトランザクションをシミュレーションしたときに存在した読み取られたデータが、状態データベース450における現在のワールド状態と同一であるかどうかを判断することができる。コミット・ピアがトランザクションを検証すると、トランザクションは分散型台帳420上のブロックチェーン430に書き込まれ、状態データベース450は読み取り・書き込みセットからの書き込みデータを用いて更新される。トランザクションが失敗した場合、つまりコミット・ピアが、読み取り・書き込みセットが状態データベース450における現在のワールド状態と一致しないことを発見した場合、ブロックへと順序付けされたトランザクションはなおブロックに含められるが、無効とマークされて状態データベース450は更新されない。
【0060】
図4Bを参照する。分散型台帳420のブロックチェーン430上に格納されているブロック440(データ・ブロックとも呼ばれる)は、ブロック・ヘッダ442、ブロック・データ444、およびブロック・メタデータ446などの複数のデータ・セグメントを含んでもよい。当然のことながら、ブロック440およびそのコンテンツなど、
図4Bに示されている様々なブロックおよびそれらのコンテンツは、単に例示を目的としたものであり、例示の実施形態の範囲を限定する意図はない。一部の事例において、ブロック・ヘッダ442およびブロック・メタデータ446はどちらも、トランザクション・データを格納するブロック・データ444よりも小さくてもよいが、これは必須条件ではない。ブロック440は、ブロック・データ444の中にN個のトランザクション(例えば100、500、1000、2000、3000など)のトランザクション情報を格納してもよい。ブロック440はさらに、ブロック・ヘッダ442の中に(例えば
図4Aのブロックチェーン430上の)以前のブロックへのリンクを含んでもよい。具体的には、ブロック・ヘッダ442は、以前のブロックのヘッダのハッシュを含んでもよい。ブロック・ヘッダ442はさらに、一意のブロック番号、現在のブロック440のブロック・データ444のハッシュ、および同様のものを含んでもよい。ブロック440のブロック番号は、一意であり、ゼロから始まる昇順/連番で付与されてもよい。ブロックチェーンの中の第1のブロックは、ジェネシス・ブロックと呼ばれることもあり、ブロックチェーン、そのメンバー、その中に格納されたデータなどについての情報を含む。
【0061】
ブロック・データ444は、ブロック440の中に記録されている各トランザクションのトランザクション情報を格納してもよい。例として、ブロック・データ444の中に格納されたトランザクション・データは、トランザクションのタイプ、バージョン、タイムスタンプ、分散型台帳420のチャネルID、トランザクションID、エポック、ペイロードの可視性、チェーンコード・パス(デプロイtx)、チェーンコード名、チェーンコード・バージョン、入力(チェーンコードおよび関数)、公開鍵および証明書などのクライアント(作成者)アイデンティティ、クライアントの署名、エンドーサのアイデンティティ、エンドーサの署名、提案のハッシュ、チェーンコード・イベント、応答状態、名前空間、読み取りセット(トランザクションにより読み取られたキーおよびバージョンのリストなど)、書き込みセット(キーおよび値のリストなど)、開始キー、終了キー、キーのリスト、マークル・ツリー・クエリ・サマリ、および同様のもののうちの1つ以上を含んでもよい。トランザクション・データは、N個のトランザクションのそれぞれについて格納されてもよい。
【0062】
様々な実施形態によれば、ブロック440のブロック・データ444のセクションはさらに、ブロックチェーン通知ボードに対する修正、更新、削除、追加、またはその他変更についての情報を格納してもよい。例として、ブロック・データ444は、ピアURIに対する変更を特定する修正されたBURI情報445および同様のものを格納してもよい。さらに、BURI情報445は、ブロックチェーン・チャネルID情報、チェーンコード情報、ジェネシス情報、修正のタイミング、および同様のものを含んでもよい。したがって、BURI情報445に対する修正は、ブロックチェーンとは独立して、ただしブロックチェーンと同じ分散型台帳上に格納される通知ボードに加えて、ブロックチェーン(すなわちハッシュ・リンクされたブロックのチェーン)の中に格納されてもよい。
【0063】
ブロック・メタデータ446は、(例えばバイト・アレイなどとして)メタデータの複数のフィールドを格納してもよい。メタデータ・フィールドは、ブロック作成に対する署名、最後の構成ブロックへの参照、ブロックの中の有効および無効なトランザクションを特定するトランザクション・フィルタ、ブロックを順序付けした順序付けサービスの存在した最後のオフセット、および同様のものを含んでもよい。署名、最後の構成ブロック、およびオーダラのメタデータは、順序付けサービス410により追加されてもよい。一方、ブロックのコミット・ノード(ブロックチェーン・ノード412など)は、エンドースメント・ポリシー、読み取り/書き込みセットの確認、および同様のものに基づく有効性/無効性情報を追加してもよい。トランザクション・フィルタは、ブロック・データ444の中のトランザクションの数と等しいサイズのバイト・アレイ、およびトランザクションが有効/無効のいずれであったかを特定する検証コードを含んでもよい。
【0064】
図4Cは、例示の実施形態による、ブロックチェーン・リソースを格納するブロックチェーン通知ボード452の例を示す。本例では、ブロックチェーン通知ボード452は、
図4Aに示された分散型台帳420のワールド状態データベース450を介して実装される。ブロックチェーン430の現在のメンバーである各ピア・ノードに関する、複数の属性454(すなわちリソース)が格納されてもよい。本例では、ピアAのBURI456およびピアBのBURI458を含む2つのBURIレコードが示されているが、格納されているBURIの数および属性のタイプは単に例示を目的としたものである。
【0065】
図4Cの例では、属性454は、ジェネシス情報、ピアURI、チャネル名、チェーンコードID(CCID:chaincode ID)、チェーンコード・バージョン(CCVER:chaincode version)、チェーンコードに含まれる引数(ARGS:arguments)、およびBURIが通知ボード452に追加された時刻を含む。例として、ジェネシス情報は、例えば新たなブロックチェーン・ネットワークを作成した組織またはユーザのIDのハッシュ値、作成時刻、作成時の組織システムの地理的位置(経度、緯度など)などの、一意のストリング値を含んでもよい。ジェネシス情報は、ブロックチェーン・ネットワークを指定してもよい。
【0066】
ピアURIは、ブロックチェーンの一部であるブロックチェーン・ピア・ノードのネットワーク位置を含む。チャネル名は、ブロックチェーンのチャネル名である。ハイパーレッジャー・ファブリック・ブロックチェーンは、チャネルを有する。異なるチャネルは、異なるデータ・セットを格納する。各ピア・ノードは、複数のチャネルに属することができる。CCIDは、チェーンコードIDであり、スマート・コントラクトIDとも呼ばれる。チェーンコード(スマート・コントラクト)は、一意のIDを有する。CCVERは、時間が経つにつれて更新可能なチェーンコード・バージョンである。ARGは、チェーンコードの引数を表し、チェーンコードの関数名を含んでもよい。引数は、一連のバイト・データを含んでもよい。時刻は、リソース(例えばBURI)が通知ボード452に追加された時点である。通知ボード上のリソースは(ブロックチェーンに基づき)時間が経つにつれて変化する。
【0067】
図4Dは、例示の実施形態による、ブロックチェーン・ベースの通知ボードからリソースを読み出す通信プロセス480を示す。
図4Dを参照する。481において、クライアント・アプリケーション460が、ピア・ノード470のピアURIを(例えばブロックチェーンの以前に受信されたBURI情報から)選択し、ブロックチェーンのピア・ノードについての情報を求めるBURIリクエストをサブミットする。ピアURIセットは、ブロックチェーン・ベースの通知ボードに参加するピア・ノードのURIを含む。ここで、クライアント・アプリケーション460は、選択されたピアURIと、参照されるリソースの他の情報とを使用してBURIリクエストを構築してもよい。したがって、クライアント・アプリケーション460は、481のBURIリクエストに含まれるピアURIに基づき、ピア・ノード470の通知ボード・システム(通知ボード・アプリケーション472、通知ボード・ジェネシス認証局474、分散型台帳476など)にアクセスできる。選択されたピアURIのピア・ノードがない場合、クライアント・アプリケーション460は、別のピアURIを選択して、利用可能なピアURIが発見されるまで繰り返してもよい。しかし、ピア・ノードが機能しているピアURIがない場合、データ参照は失敗する。
【0068】
481においてリソース・リクエストを受信するのに応答して、通知ボード・アプリケーション472は、482において、通知ボード・ジェネシスCA(NBCA)にアクセスすることにより、BURIリソース・リクエストに含まれるジェネシス情報が一意かつ有効であることをチェックしてもよく、NBCAは、通知ボード・ジェネシス情報を管理し、現在ブロックチェーンに参加しているピア・ノードのピアURIの各セットを登録する。このチェックのリクエストに応答して、NBCA474は、483において、登録されたすべてのピア・ノードが参加ピア・ノードの一貫した履歴を有し、ピアURIが現在のピア・ノード参加者の登録されたセットに含まれることをチェックする。なお、NBCAは、データ・コンテンツの証明はしないが、代わりにブロックチェーン上のすべてのピア・ノードのジェネシス情報を証明する。特に、NBCA474は、ジェネシス情報が一意であり、ジェネシス情報を含む各ピア・ノードが有効な参加者セット(ピアURI)を有することを証明してもよい。成功すれば、484においてNBCAは、真正性の証明を通知ボード・アプリケーション472に返す。
【0069】
それに応答して、485~487において通知ボード・アプリケーション472は、BURIリクエストに含まれたバージョンCCVERのCIDのチェーンコード(スマート・コントラクト)を使用することで、BURIリクエストにより示された時刻の時点でのピア・ノードのチャネルに基づき、通知ボード(すなわち分散型台帳476上)に格納されたデータにアクセスしてもよい。この事例では、488においてチェーンコードは、BURIリクエストのリソースを、ジェネシス情報についての証明とともに返し、通知ボード・システムは、ブロックチェーン・ベースの通知ボードを含むブロックチェーンの中の、現在参加しているすべてのピア・ノードのピアURIの最新セットを含むとよいBURIのリソースを返す。したがって、クライアント・アプリケーション460は、通知システムを介して分散型台帳476からブロックチェーン・リソースを読み出し、その内部のピアURIのセットを、ピアURIの最新セットを使用して更新することができる。
【0070】
様々な実施形態によれば、485においてピア・ノード470の通知ボード・アプリケーション472は、BURIリクエスト481により示され、ピア・ノード470に格納されている、所与のチェーンコードID(CCID)およびチェーンコードの所与のバージョン(CCVER)に基づき、チェーンコードを再インスタンス化してもよい。一部の実施形態において、ピア・ノードの通知ボード・アプリケーション472はさらに、481において受信されたBURIリクエストに含まれる時刻に基づき、486において、再インスタンス化されたチェーンコードの読み取りセットを再計算して、再計算された読み取りセットに置き換えてもよい。本例において、読み取りセットは、チェーンコードの実行中に値が読み取られるキーのセットを含んでもよい。したがって、ピア・ノード470の通知ボード・アプリケーション472は、キーの値の現在の値を、BURIにより特定された時点からのキーの値に置き換えて、487においてチェーンコードを実行し、分散型台帳476上の通知ボードから返される値を得る。
【0071】
図5Aは、例示の実施形態による、分散型台帳上にブロックチェーン・ベースの統一リソース・インジケータ(URI)を格納する方法510を示す。例として、方法510は、ブロックチェーン通知ボードを実装し得るブロックチェーン・ピア・ノードにより実行されてもよい。
図5Aを参照する。511にて、方法は、複数のブロックチェーン・ピア・ノード間に分散されたブロックチェーンにアクセスできるブロックチェーン・ピア・ノードの統一リソース・インジケータ(URI)を受信することを含んでもよい。URIは、ブロックチェーン・ピア・ノードのネットワーク・アドレスを特定してもよい。一部の実施形態において、URIは、ブロックチェーンに関連するブロックチェーン・ピア・ノードのほか、オフチェーン・ストレージ、サードパーティ・サービス、または同様のものなど、別のリソースであってもよい。
【0072】
方法は、512において、ブロックチェーン・ピア・ノードがアクセス可能なブロックチェーンに関連する一意のチャネル名を特定する、ブロックチェーン・チャネル識別情報を特定することを含んでもよい。方法は、513において、ブロックチェーン・ピア・ノードのURIの識別およびブロックチェーンのチャネル名を含む、ブロックチェーン・ベースのURIを生成することと、514において、生成されたブロックチェーン・ベースのURIを分散型台帳上に格納することとを含んでもよい。チャネル識別情報は、ブロックチェーンに特有とされてもよい。
【0073】
一部の実施形態では、512において特定することは、ブロックチェーンのジェネシス情報を特定することをさらに含んでもよく、513において生成することは、ブロックチェーンのジェネシス情報の識別を含むようにブロックチェーン・ベースのURIを生成することをさらに含んでもよい。例として、ジェネシス情報は、ブロックチェーンのイニシエータの識別を含んでもよい。一部の実施形態では、512において特定することは、ブロックチェーンのチェーンコード情報を特定することをさらに含んでもよく、513において生成することは、ブロックチェーンのチェーンコード情報の識別を含むようにブロックチェーン・ベースのURIを生成することをさらに含んでもよい。例として、ブロックチェーンのチェーンコード情報は、チェーンコードID、チェーンコード・バージョン、およびチェーンコードの中に含まれる引数のうちの1つ以上を含んでもよい。チェーンコードは、(例えばワールド状態データベースの中など)分散型台帳上に格納されたブロックチェーン通知ボードにアクセスするために使用されてもよい。
【0074】
一部の実施形態では、513において生成することは、ブロックチェーン・ベースのURIが生成された時刻の識別を含むようにブロックチェーン・ベースのURIを生成することをさらに含んでもよい。一部の実施形態において、方法511は、第2のブロックチェーン・ピア・ノードのURIの識別およびブロックチェーンのチャネル名の識別を含む第2のブロックチェーン・ベースのURIを生成することと、第2のブロックチェーン・ベースのURIを分散型台帳上に格納することとをさらに含んでもよい。
【0075】
図5Bは、例示の実施形態による、分散型台帳を介してブロックチェーン・ベースのURIを修正する方法520を示す。例として、方法520は、ブロックチェーン通知ボードを実装するブロックチェーン・ピア・ノードにより実行されてもよい。
図5Bを参照する。方法は、521において、分散型台帳上に格納されたブロックチェーン・ベースの統一リソース・インジケータ(URI)を修正するリクエストを受信することを含んでもよい。リクエストは、定期的な間隔で、または無作為に、または同様の形で、ブロックチェーン・ピア・ノードに渡されてもよい。一部の例では、方法は、リクエストを受信しなくてもよいが、ブロックチェーン・ピアのセットに対して発生するブロックチェーン・ピアのURIの変更、ブロックチェーン・ピアの除去、ブロックチェーン・ピアの追加、または同様のことなどの検出に基づき自動的に修正をトリガしてもよい。
【0076】
方法は、522において、ブロックチェーン・ベースのURIに対する修正の識別を含むデータ・ブロックを生成することを含んでもよく、方法は、523において、ブロックチェーン・ベースのURIに対する修正の識別を含む生成されたデータ・ブロックを、分散型台帳上のデータ・ブロックのハッシュ・リンク・チェーンの中に格納することを含んでもよい。一部の実施形態において、方法は、ブロックチェーン・ベースのURIに対する修正に基づき、分散型台帳にアクセスできるブロックチェーン・ピアのセットを更新することをさらに含んでもよい。
【0077】
一部の実施形態において、データ・ブロックに格納されたブロックチェーン・ベースのURIは、分散型台帳のブロックチェーン、チェーンコード情報、チャネル情報、時刻値、ジェネシス情報、および同様のものにアクセスできる1つ以上のブロックチェーン・ピア・ノードのURIを含んでもよい。一部の実施形態において、ブロックチェーン・ベースのURIを修正するリクエストは、ブロックチェーン・ベースのURIを分散型台帳から削除するリクエストを含んでもよい。別の例として、ブロックチェーン・ベースのURIを修正するリクエストは、ブロックチェーン・ベースのURIの中に含まれるブロックチェーン・ピア・ノードのURIを修正するリクエストを含んでもよい。
【0078】
図5Cは、例示の実施形態による、ブロックチェーン・リソース情報をブロックチェーン通知ボード上に格納する方法530を示す。例として、方法530は、ブロックチェーン通知ボードを実装するブロックチェーン・ピア・ノードにより実行されてもよい。
図5Cを参照する。方法は、531において、ブロックチェーンに関連する複数のブロックチェーン・システム・リソースの中からの或るブロックチェーン・システム・リソースの、一意の識別子を受信することを含んでもよい。例として、ブロックチェーン・システム・リソースは、ブロックチェーンにアクセスできるブロックチェーン・ピア・ノードと、ブロックチェーンとともに使用されるデータを格納するオフチェーン・ストレージ・ノードとのうちの1つ以上を含んでもよい。一部の実施形態において、一意の識別子は、ブロックチェーン・システム・リソースの統一リソース・インジケータ(URI)、ブロックチェーンのジェネシス情報、チェーンコード情報、ブロックチェーンのチャネル情報、時刻情報、および同様のもののうちの1つ以上を含んでもよい。
【0079】
方法は、532において、ブロックチェーンを含む分散型台帳上に格納されブロックチェーンとは独立して実装される、ブロックチェーンの通知ボードを生成することを含んでもよい。例として、通知ボードは、ブロックチェーンのメンバーである各ブロックチェーン・ピア・ノードの間に分散される、分散型台帳上に格納されてもよい。通知ボードは、分散型台帳上のワールド状態データベースを介して実装されてもよい。方法は、533において、ブロックチェーン・リソースの一意の識別子およびブロックチェーンIDを分散型台帳上の通知ボードの中に格納することを含んでもよい。通知ボードは、ブロックチェーンのメンバーである複数のブロックチェーン・ピア・ノードの中の個々のピア・ノードそれぞれの一意の識別子(例えばBURIなど)を格納してもよい。
【0080】
図5Dは、例示の実施形態による、ブロックチェーン通知ボードにアクセスする方法540を示す。例として、方法540は、ブロックチェーン通知ボードを実装するブロックチェーン・ピア・ノードにより実行されてもよい。
図5Dを参照する。541において、方法は、ブロックチェーンに関連して、クライアント・ノードからブロックチェーン・システム・リソースについての情報のリクエストを受信することを含んでもよい。ここで、リクエストは、ブロックチェーン・ピア・ノード情報、もしくはそのほかオフチェーン・ストレージなどのブロックチェーンの一部であるデバイスおよびシステム、またはその両方、ならびに同様のもののリクエストを含んでもよい。
【0081】
方法は、542において、ブロックチェーンを含む分散型台帳上に格納されブロックチェーンとは独立して実装される、ブロックチェーンの通知ボードから、ブロックチェーン・システム・リソースの一意の識別子を読み出すことと、543において、通知ボードから読み出されたブロックチェーン・システム・リソースの一意の識別子をクライアント・ノードに送信することとを含んでもよい。例として、ブロックチェーン・システム・リソースは、ブロックチェーンにアクセスできるブロックチェーン・ピア・ノードと、ブロックチェーンとともに使用されるデータを格納するオフチェーン・ストレージ・ノードとのうちの1つ以上を含んでもよい。一部の実施形態において、一意の識別子は、ブロックチェーン・システム・リソースの統一リソース・インジケータ(URI)、ブロックチェーンのチャネル情報、ブロックチェーンのジェネシス情報、データを通知ボードから読み出すためのチェーンコード情報、通知ボード上の格納の時刻情報、および同様のものを含んでもよい。一部の実施形態において、通知ボードは、ブロックチェーンにアクセスする権限を付与された複数のブロックチェーン・ピア・ノードそれぞれの一意の識別子を格納してもよい。
【0082】
図5Eは、例示の実施形態による、リソース・リクエストを実行するためにチェーンコードを再インスタンス化する方法550を示す。例として、方法550は、ブロックチェーン通知ボードを実装するブロックチェーン・ピア・ノードにより実行されてもよい。
図5Eを参照する。551において、方法は、クライアントからリソース・リクエストを受信することを含んでもよい。例として、リソース・リクエストは、ブロックチェーンにアクセスするために利用可能なブロックチェーン・ピアのブロックチェーン・ネットワーク位置情報のリクエストであってもよい。方法は、552において、リソース・リクエストに関連する一意のチェーンコード識別子を特定することを含んでもよい。例として、一意のチェーンコード識別子は、ブロックチェーン・ピアのURI情報、ブロックチェーンのチャネル情報、チェーンコード情報、ジェネシス情報、時刻情報、および同様のものを含むBURIを含んでもよい。一部の実施形態において、特定することは、再インスタンス化するチェーンコードのバージョンを、一意のチェーンコード識別子に含まれたチェーンコードIDおよびチェーンコード・バージョンに基づき特定することを含んでもよい。
【0083】
553において、方法は、一意のチェーンコード識別子に基づくチェーンコードのバージョンを再インスタンス化することを含んでもよい。例として、再インスタンス化は、コンピューティング・ノードにおいて後に実装されたチェーンコードのいかなるバージョンも無視してよい。方法は、554において、結果を生成するために、チェーンコードの再インスタンス化されたバージョンに基づきリソース・リクエストを実行することと、555において、結果をクライアントに送信することとを含んでもよい。一部の実施形態において、実行することは、ブロックチェーン・ベースのURIに含まれた時刻に基づき、一意の識別子に含まれた時刻値に関連する以前のキーの値が現在の値と置き換えられた、チェーンコードにより読み取られ/実行される読み取りセットを生成することを、さらに含んでもよい。例として、結果は、ブロックチェーンのメンバーである複数のピア・ノードの現在のブロックチェーン・ベースのURIのセットを特定してもよい。
【0084】
図5Fは、例示の実施形態による、ブロックチェーンを検証する方法560を示す。例として、方法560は、ブロックチェーン通知ボードを実装するブロックチェーン・ピア・ノードにより実行されてもよい。
図5Fを参照する。方法は、561において、ブロックチェーンに関連するリクエストを受信することを含んでもよい。リクエストは、ブロックチェーンのメンバーであるブロックチェーン・ピア・ノードについての情報のリクエストを含んでもよい。
【0085】
方法は、562において、リクエストに関連する一意のブロックチェーン識別子を特定することを含んでもよく、一意のブロックチェーン識別子は、ブロックチェーンの一意のジェネシス値を含む。例として、ブロックチェーンの一意のジェネシス値は、ブロックチェーンのイニシエータの識別値、ブロックチェーンが作成された時刻値、およびブロックチェーンの作成に関連する地理的位置値のうちの1つ以上を含んでもよい。
【0086】
方法は、563において、分散型台帳の中に格納されたジェネシス情報に基づき、一意のジェネシス値が有効であるかどうかを判断することを含んでもよく、方法は、564において、一意のジェネシス値が有効であるとの判断に応答して、一意のジェネシス値の真正性の証明をアプリケーションに送信することをさらに含んでもよい。一部の実施形態において、判断することは、ブロックチェーン格納リクエストの一意のジェネシス値がブロックチェーン・ピア・ノードにより格納されたジェネシス値情報と同じであるかどうかをチェックすることを含んでもよい。例として、以前格納されたジェネシス値情報は、ブロックチェーンを含む分散型台帳の中に含まれる通知ボード上に格納されていてもよい。一部の実施形態において、方法は、ブロックチェーンの一意のジェネシス値が無効であると判断するのに応答して、格納リクエストが実行されるのを防止することを含んでもよい。
【0087】
図6Aは、例示の実施形態による例示の動作の方法のうちの1つ以上に従いブロックチェーンに対して様々な動作を実行するように構成された、例示の物理的インフラストラクチャを示す。
図6Aを参照する。例示の構成600は、ブロックチェーン620およびスマート・コントラクト630を備えた物理的インフラストラクチャ610を含み、物理的インフラストラクチャ610は、例示の実施形態のいずれかに含まれた動作ステップ612のいずれかを実行してもよい。ステップ/動作612は、1つ以上のフロー図もしくは論理図またはその両方に記載され、または示されたステップのうちの1つ以上を含んでもよい。各ステップは、コンピュータ・システム構成の物理的インフラストラクチャ610上に存在する1つ以上のスマート・コントラクト630もしくはブロックチェーン620またはその両方に書き込まれる、またはそこから読み取られる、出力された、または書き込まれた情報を表し得る。実行されたスマート・コントラクト630もしくはブロックチェーン620またはその両方から、データが出力されてもよい。物理的インフラストラクチャ610は、1つ以上のコンピュータ、サーバ、プロセッサ、メモリ、もしくは無線通信デバイス、またはそのいずれかの組み合わせを含んでもよい。一部の実施形態において、チェーンコードとも呼ばれるスマート・コントラクト630は、ブロックチェーン通知ボードからブロックチェーン・リソース情報を読み出すために実行されてもよい。
【0088】
図6Bは、例示の実施形態による、コントラクトの関係者、およびブロックチェーンに対してスマート・コントラクトの条件を実施するように構成された仲介サーバの間の、例示のスマート・コントラクトの構成を示す。
図6Bを参照する。構成650は、1つ以上のユーザ・デバイス652もしくは656またはその両方を明示的に特定するスマート・コントラクト630によって駆動される、通信セッション、アセット転送セッション、またはプロセスもしくは手順を表し得る。スマート・コントラクトの実行、動作、および実行結果は、サーバ654によって管理されてもよい。スマート・コントラクト630のコンテンツは、スマート・コントラクト・トランザクションの関係者であるエンティティ652および656のうちの1つ以上によるデジタル署名を要求してもよい。スマート・コントラクトの実行結果は、ブロックチェーン・トランザクションとしてブロックチェーンに書き込まれてもよい。様々な実施形態によれば、本願明細書に記載されたエンドースメント・プロセスの実行は、ブロックチェーン・ピアによる検証チェックの間にスマート・コントラクト630の1つ以上の関数(ビジネス・ルール)が満足されることを確認してもよい。
【0089】
図6Cは、例示の実施形態による、コントラクトの関係者、およびブロックチェーンに対してスマート・コントラクトの条件を実施するように構成された仲介サーバの間の、例示のスマート・コントラクトの構成を示す。
図6Cを参照する。構成650は、1つ以上のユーザ・デバイス652もしくは656またはその両方を明示的に特定するスマート・コントラクト630によって駆動される、通信セッション、アセット転送セッション、またはプロセスもしくは手順を表し得る。スマート・コントラクトの実行、動作、および実行結果は、サーバ654によって管理されてもよい。スマート・コントラクト630のコンテンツは、スマート・コントラクト・トランザクションの関係者であるエンティティ652および656のうちの1つ以上によるデジタル署名を要求してもよい。スマート・コントラクトの実行結果は、ブロックチェーン・トランザクションとしてブロックチェーン620に書き込まれてもよい。スマート・コントラクト630は、ブロックチェーン620上に存在し、ブロックチェーン620は、1つ以上のコンピュータ、サーバ、プロセッサ、メモリ、もしくは無線通信デバイス、またはそのいずれかの組み合わせに存在してもよい。
【0090】
図6Dは、例示の実施形態による、ブロックチェーンの論理およびデータにアクセスするための共通インターフェースを示す。
図6Dの例を参照する。アプリケーション・プログラミング・インターフェース(API)ゲートウェイ662は、ブロックチェーン論理(例えばスマート・コントラクト630またはその他チェーンコード)およびデータ(例えば分散型台帳など)にアクセスするための共通インターフェースを提供する。本例において、APIゲートウェイ662は、1つ以上のエンティティ652および656をブロックチェーン・ピア(すなわちサーバ654)に接続することによりブロックチェーンに対してトランザクション(呼び出し、クエリなど)を実行するための共通インターフェースである。一部の実施形態において、APIゲートウェイ662は、様々な実施形態により記載されたブロックチェーン通知ボード上に格納されるブロックチェーン・リソース・データへのアクセスを提供してもよい。サーバ654は、ワールド状態および分散型台帳のコピーを保持し、クライアント652および656が、ワールド状態に関するデータのクエリを行うこと、ならびにブロックチェーン・ネットワークへとトランザクションをサブミットすることを可能にする、ブロックチェーン・ネットワーク・ピア・コンポーネントであり、ブロックチェーン・ネットワークでは、スマート・コントラクト630およびエンドースメント・ポリシーに応じてエンドース・ピアがスマート・コントラクト630を実行する。一部の実施形態において、ワールド状態は、BURIなどのブロックチェーン・リソース情報を格納するブロックチェーン通知ボードを含んでもよい。ブロックチェーン通知ボードは、1つ以上のスマート・コントラクト630によりアクセスされてもよい。
【0091】
上記の実施形態は、ハードウェア、プロセッサによって実行されるコンピュータ・プログラム、ファームウェア、または上記のものの組み合わせにおいて実装されてもよい。コンピュータ・プログラムは、ストレージ媒体などのコンピュータ可読媒体上で具現化されてもよい。例として、コンピュータ・プログラムは、ランダム・アクセス・メモリ(RAM:random access memory)、フラッシュ・メモリ、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memory)、電子的消去可能プログラマブル読み取り専用メモリ(EEPROM:electrically erasable programmable read-only memory)、レジスタ、ハード・ディスク、リムーバブル・ディスク、コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disk read-only memory)、またはその他当該技術分野で既知の任意の形態のストレージ媒体に存在してもよい。
【0092】
例示のストレージ媒体は、プロセッサがストレージ媒体から情報を読み取り、ストレージ媒体に情報を書き込むことができるように、プロセッサに結合されてもよい。代案として、ストレージ媒体はプロセッサと一体とされてもよい。プロセッサおよびストレージ媒体は、特定用途向け集積回路(ASIC:application specific integrated circuit)に存在してもよい。代案として、プロセッサおよびストレージ媒体は、個別のコンポーネントとして存在してもよい。例として、
図7は、前述したコンポーネントのいずれかなどを表し得る、またはそれに統合され得る、例示のコンピュータ・システム・アーキテクチャ700を示す。
【0093】
図7は、本願明細書に記載された本願の実施形態の使用または機能性の範囲に関して、いかなる限定を示唆することも意図していない。いずれにせよ、コンピューティング・ノード700には、上記に記載された機能性のいずれかの実装もしくは実行またはその両方ができる。例として、コンピューティング・ノード700は、
図5A~
図5Fに示され、それらに関して記載された方法510~560のいずれを実行してもよい。
【0094】
コンピューティング・ノード700内には、コンピュータ・システム/サーバ702があり、これは、多数のほかの汎用または専用コンピューティング・システム環境もしくは構成とともに動作可能である。コンピュータ・システム/サーバ702とともに使用するのに適していると考えられる周知のコンピューティング・システム、環境、もしくは構成、またはそのいずれかの組み合わせの例としては、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドもしくはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル家庭用電化製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムもしくはデバイスのいずれかを含む分散型クラウド・コンピューティング環境、ならびに同様のものが挙げられるが、これらに限定はされない。
【0095】
コンピュータ・システム/サーバ702については、コンピュータ・システムによって実行されるプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的文脈において記載することができる。一般に、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含んでもよい。コンピュータ・システム/サーバ702は、通信ネットワークを介してリンクされているリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施されてもよい。分散型クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム・ストレージ媒体に位置してもよい。
【0096】
図7に示されているように、クラウド・コンピューティング・ノード700内のコンピュータ・システム/サーバ702は、汎用コンピューティング・デバイスの形態で示されている。コンピュータ・システム/サーバ702のコンポーネントは、1つ以上のプロセッサまたは処理ユニット704、システム・メモリ706、およびシステム・メモリ706を含む様々なシステム・コンポーネントをプロセッサ704に結合するバスを含み得るが、これらに限定はされない。
【0097】
バスは、メモリ・バスまたはメモリ・コントローラ、周辺機器用バス、アクセラレーテッド・グラフィックス・ポート、および様々なバス・アーキテクチャのいずれかを使用するプロセッサもしくはローカル・バスを含む、いくつかのタイプのバス構造のうち、任意のもの1つ以上を表す。限定ではなく例として、そのようなアーキテクチャには、業界標準アーキテクチャ(ISA:Industry Standard Architecture)バス、マイクロ・チャネル・アーキテクチャ(MCA:Micro Channel Architecture)バス、拡張ISA(EISA:Enhanced ISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA:Video Electronics Standards Association)ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト(PCI:Peripheral Component Interconnects)バスが含まれる。
【0098】
コンピュータ・システム/サーバ702は、典型的には、様々なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ702によってアクセス可能な任意の利用可能な媒体とされればよく、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体の両方を含む。一実施形態において、システム・メモリ706は、他の図面のフロー図を実装する。システム・メモリ706は、ランダム・アクセス・メモリ(RAM)710もしくはキャッシュ・メモリ712またはその両方など、揮発性メモリの形態のコンピュータ・システム可読媒体を含むことができる。このほか、コンピュータ・システム/サーバ702はさらに、リムーバブル/非リムーバブルの揮発性/不揮発性コンピュータ・システム・ストレージ媒体を含んでもよい。単なる例として、非リムーバブルの不揮発性磁気媒体(図示はしておらず、典型的には「ハード・ドライブ」と呼ばれる)からの読み取りおよびそれに対する書き込みのために、ストレージ・システム714を提供することができる。図示されてはいないが、リムーバブル不揮発性磁気ディスク(例えば「フレキシブル・ディスク」)からの読み取りおよびそれに対する書き込みのための磁気ディスク・ドライブ、およびCD-ROM、DVD-ROM、またはその他の光媒体などのリムーバブル不揮発性光ディスクからの読み取りまたはそれに対する書き込みのための光ディスク・ドライブを提供することができる。そのような場合には、それぞれを、1つ以上のデータ媒体インターフェースによってバスに接続できる。さらに図示し、後述するように、メモリ706は、本願の様々な実施形態の機能を実行するよう構成されたプログラム・モジュールのセット(例えば少なくとも1つ)を有する少なくとも1つのプログラム製品を含んでもよい。
【0099】
プログラム・モジュール718のセット(少なくとも1つ)を有するプログラム/ユーティリティ716は、限定ではなく例として、オペレーティング・システム、1つ以上のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様にメモリ706に格納されてもよい。オペレーティング・システム、1つ以上のアプリケーション・プログラム、その他プログラム・モジュール、およびプログラム・データ、またはその何らかの組み合わせはそれぞれ、ネットワーキング環境の実装を含んでもよい。プログラム・モジュール718は、概して、本願明細書に記載された本願の様々な実施形態の機能もしくは手順またはその両方を実行する。
【0100】
当業者には当然のことながら、本願の各側面は、システム、方法、またはコンピュータ・プログラム製品として具現化されてもよい。したがって、本願の各側面は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、または本願明細書においてすべて概して「回路」、「モジュール」、または「システム」と呼ばれ得る、ソフトウェアおよびハードウェアの側面を兼ね備えた実施形態の形態をとってもよい。さらに、本願の各側面は、コンピュータ可読プログラム・コードが具現化された1つ以上のコンピュータ可読媒体(単数または複数)において具現化された、コンピュータ・プログラム製品の形態をとることもできる。
【0101】
コンピュータ・システム/サーバ702はさらに、キーボード、ポインティング・デバイス、ディスプレイ722などの1つ以上の外部デバイス720、ユーザがコンピュータ・システム/サーバ702と相互作用できるようにする1つ以上のデバイス、もしくはコンピュータ・システム/サーバ702が1つ以上の他のコンピューティング・デバイスと通信できるようにする任意のデバイス(例えばネットワーク・カード、モデムなど)、またはそのいずれかの組み合わせと通信してもよい。そのような通信は、I/Oインターフェース724を介して生じてもよい。さらに、コンピュータ・システム/サーバ702は、ローカル・エリア・ネットワーク(LAN:local area network)、一般的な広域ネットワーク(WAN:wide area network)、もしくはパブリック・ネットワーク(例えばインターネット)、またはそのいずれかの組み合わせなどの1つ以上のネットワークと、ネットワーク・アダプタ726を介して通信できる。図示されているように、ネットワーク・アダプタ726は、コンピュータ・システム/サーバ702の他のコンポーネントとバスを介して通信する。図示されてはいないが、当然のことながら、他のハードウェアもしくはソフトウェアまたはその両方のコンポーネントが、コンピュータ・システム/サーバ702とともに使用され得るであろう。例としてはマイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定はされない。
【0102】
システム、方法、および非一時的コンピュータ可読媒体のうちの少なくとも1つの例示的な実施形態が添付の図面に示され、前述の詳細な説明の中に記載されたが、当然のことながら本願は、記載された実施形態に限定されず、添付の特許請求の範囲により記載および定義される多数の再構成、修正、および置き換えが可能である。例として、様々な図面のシステムの機能は、本願明細書に記載されたモジュールもしくはコンポーネントのうちの1つ以上によって、または分散型アーキテクチャにおいて実行することができ、送信器、受信器、またはその両方のペアを含んでもよい。例として、個々のモジュールによって実行される機能性の全部または一部は、それらのモジュールのうちの1つ以上によって実行されてもよい。さらに、本明細書に記載された機能性は、様々な時間に、様々なイベントに関して、モジュールまたはコンポーネントの内部または外部で実行されてもよい。さらに、様々なモジュール間で送信される情報は、データ・ネットワーク、インターネット、音声ネットワーク、インターネット・プロトコル・ネットワーク、無線デバイス、有線デバイスのうちの少なくとも1つを介して、もしくは複数のプロトコルを介して、またはそのいずれかの組み合わせを介して、モジュール間で送信できる。さらに、モジュールのいずれかによって送信または受信されるメッセージは、直接的に、もしくは他のモジュールのうちの1つ以上を介して、またはその両方によって、送信または受信されてもよい。
【0103】
当業者には当然のことながら、「システム」は、パーソナル・コンピュータ、サーバ、コンソール、携帯情報端末(PDA:personal digital assistant)、携帯電話、タブレット・コンピューティング・デバイス、スマートフォン、もしくはその他任意の適切なコンピューティング・デバイス、または複数デバイスの組み合わせとして具現化できるであろう。上述の機能を「システム」によって実行されているものとして提示することで、本願の範囲を限定する意図は決してなく、多数の実施形態の一例を示すことが意図されている。実際、本願明細書で開示された方法、システム、および装置は、コンピューティング技術と整合する局所的および分散型の形態で実装されてもよい。
【0104】
なお、本願明細書に記載されたシステムの特徴の一部は、それらの実装の独立性を特に強調するためにモジュールとして提示されている。例として、モジュールは、カスタム超大規模集積(VLSI:very large-scale integration)回路もしくはゲート・アレイ、論理チップなどの市販の半導体、トランジスタ、またはその他個別のコンポーネントを含むハードウェア回路として実装されてもよい。モジュールはさらに、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ論理、プログラマブル論理デバイス、グラフィックス処理ユニット、または同様のものなど、プログラマブル・ハードウェア・デバイスにおいて実装されてもよい。
【0105】
モジュールはさらに、様々なタイプのプロセッサによって実行されるソフトウェアにおいて少なくとも部分的に実装されてもよい。例えば、実行可能コードの特定されたユニットは、例えばオブジェクト、プロシージャ、または関数として編成され得るコンピュータ命令の1つ以上の物理的または論理的ブロックを含んでもよい。それでも、特定されたモジュールの実行ファイルは、物理的に一緒に配置される必要はなく、異なる位置に格納された異種の命令を含んでもよく、それらの命令は、論理的に一緒にされた場合にモジュールを構成し、モジュールの規定された目的を達成する。さらに、モジュールはコンピュータ可読媒体に格納されてもよく、このコンピュータ可読媒体は例えば、ハード・ディスク・ドライブ、フラッシュ・デバイス、ランダム・アクセス・メモリ(RAM)、テープ、またはその他データの格納に使用される任意の媒体とされてもよい。
【0106】
実際、実行可能コードのモジュールは、単一の命令または多数の命令とすることができ、いくつかの異なるコード・セグメントにわたり分散されても、異なるプログラム間に分散されても、いくつかのメモリ・デバイスにまたがって分散されてもよい。同様に、動作データは、本願明細書においてモジュールの中に特定されて示され得るが、任意の適切な形態で具現化されて任意の適切なタイプのデータ構造の中で編成されてもよい。動作データは、単一のデータ・セットとしてまとめられてもよく、または別々のストレージ・デバイスを含む別々の位置に分散されてもよく、さらに単にシステムまたはネットワーク上の電子信号として少なくとも部分的に存在してもよい。
【0107】
当然のことながら、本願明細書において、全般的に記載され図面に示されている本願のコンポーネントは、幅広い種々の構成で配置および設計され得る。よって、実施形態についての詳細な記載は、特許請求される本願の範囲を限定することを意図したものではなく、本願の選択された実施形態を代表するにすぎない。
【0108】
当業者には当然のことながら、上記は、他の順序のステップを用いて、もしくは開示されたものとは異なる構成のハードウェア構成要素を用いて、またはその両方の形で実施されてもよい。したがって、本願は、これらの好適な実施形態に基づいて記載されたが、当業者には当然のことながら、特定の変更、バリエーション、および代わりの構造は明らかであると考えられる。
【0109】
本願の好適な実施形態が説明されたが、当然のことながら、記載された実施形態は単なる例であり、あらゆる種類のそれらの等価物およびそれらに対する変更(例えばプロトコル、ハードウェア・デバイス、ソフトウェア・プラットフォームなど)とともに考えた場合の添付の特許請求の範囲のみによって本願の範囲は定義されるべきである。