(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-31
(45)【発行日】2022-11-09
(54)【発明の名称】ハイパーレッジャファブリックブロックチェーンにおいてSQLベースのリッチクエリをサポートするためのシステムおよび方法
(51)【国際特許分類】
G06F 16/27 20190101AFI20221101BHJP
【FI】
G06F16/27
(21)【出願番号】P 2021504449
(86)(22)【出願日】2019-02-01
(86)【国際出願番号】 US2019016340
(87)【国際公開番号】W WO2020023079
(87)【国際公開日】2020-01-30
【審査請求日】2021-03-05
(32)【優先日】2018-07-27
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-01-29
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】イノチェンティ,カルロ
【審査官】鹿野 博嗣
(56)【参考文献】
【文献】hyperledger-fabricdocs Documentation,2018年07月03日
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/27
(57)【特許請求の範囲】
【請求項1】
ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムであって、
各々がマイクロプロセッサを含む1以上のコンピュータと、
エンタープライズ級の分散型元帳フレームワークと、
分散型元帳ファブリックとを備え、前記分散型元帳ファブリックは、少なくともトランザクションマネージャと、検証ツールとを含み、
前記システムは、さらに、
ブロックチェーンファブリックを備え、前記ブロックチェーンファブリックは、複数のブロックの元帳を含み、各ブロックは、複数のキー値の組を含み、
前記システムは、さらに、
ワールドデータベースのステートを備え、前記ワールドデータベースの前記ステートは、バージョン付きデータベースと、リレーショナルデータベースインターフェイスとを含
み、前記ワールドデータベースの前記ステートは、前記ブロックチェーンファブリックによってアクセス可能であり、
前記リレーショナルデータベースインターフェイスは、前記バージョン付きデータベースと、前記分散型元帳ファブリック上で実行されている1つ以上のトランザクションとの間にリレーショナルデータベースインターフェイス層を提供する、システム。
【請求項2】
前記1つ以上のトランザクションのうちの少なくとも1つは、少なくとも1つのリッチクエリを含む、請求項
1に記載のシステム。
【請求項3】
前記少なくとも1つのリッチクエリは、前記リレーショナルデータベースインターフェイスを介して前記バージョン付きデータベースにアクセスする、請求項
2に記載のシステム。
【請求項4】
前記少なくとも1つのリッチクエリは、チェーンコードを含む、請求項
2または
3に記載のシステム。
【請求項5】
前記ワールドデータベースの前記ステートは、同時読み出し/書き込みアクセスを提供する、請求項1~
4のいずれか一項に記載のシステム。
【請求項6】
前記分散型元帳ファブリックは、ブロックチェーンクラウドサービスとして提供され、
前記ブロックチェーンクラウドサービスは、
ピアコンテナと、
オーダリングコンテナと、
チェーンコードコンテナとを含む、請求項1~
5のいずれか一項に記載のシステム。
【請求項7】
ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするための方法であって、
マイクロプロセッサを含む1つ以上のコンピュータにおいて、エンタープライズ級の分散型元帳フレームワークと、
前記分散型元帳フレームワークでブロックチェーンファブリックとを提供すること
を備え、
、
前記ブロックチェーンファブリックは、複数のブロックの元帳を含み、各ブロックは、複数のキー値の組を含み、
前記方法は、
前記分散型元帳フレームワークにおいて、分散型元帳ファブリックを実行するこ
とを含み、前記分散型元帳ファブリックは、少なくともトランザクションマネージャと、検証ツールとを含み、
前記方法は、
ワールドデータベースのステートを前記分散型元帳ファブリックに関連付けることを含み、前記ワールドデータベースの前記ステートは、バージョン付きデータベースと、リレーショナルデータベースインターフェイスとを含み、
前記ワールドデータベースの前記ステートは、前記ブロックチェーンファブリックによってアクセス可能であり、
前記リレーショナルデータベースインターフェイスは、前記バージョン付きデータベースと、分散型元帳ファブリック上で実行される1つ以上のトランザクションとの間にリレーショナルデータベースインターフェイス層を提供する、方法。
【請求項8】
前記1つ以上のトランザクションのうちの少なくとも1つは、少なくとも1つのリッチクエリを含む、請求項
7に記載の方法。
【請求項9】
前記少なくとも1つのリッチクエリは、前記リレーショナルデータベースインターフェイスを介して前記バージョン付きデータベースにアクセスする、請求項
8に記載の方法。
【請求項10】
前記少なくとも1つのリッチクエリは、チェーンコードを含む、請求項
8または
9に記載の方法。
【請求項11】
前記ワールドデータベースの前記ステートは、同時読み出し/書き込みアクセスを提供する、請求項
7から
10のいずれか一項に記載の方法。
【請求項12】
前記分散型元帳ファブリックは、ブロックチェーンクラウドサービスとして提供され、
前記ブロックチェーンクラウドサービスは、
ピアコンテナと、
オーダリングコンテナと、
チェーンコードコンテナとを含む、請求項
7から
11のいずれか一項に記載の方法。
【請求項13】
ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするための命令を含むプログラムであって、これらの命令は、読み出されて実行されると、1つ以上のコンピュータに、請求項
7から
12のいずれか一項に記載の方法を実行させる、プログラム。
【請求項14】
前記ブロックチェーンファブリックは、チャネルを作成することによって、参加者グループが別々のトランザクション元帳を作成することを可能にする、請求項1記載のシステム。
【請求項15】
前記検証ツールは、スマートコントラクトがトランザクションをコミットしようとする時にデータが依然として一致していることを検証する、請求項1記載のシステム。
【請求項16】
前記ブロックチェーンファブリックは、検証ピアと非検証ピアとを識別し、前記検証ピアは、ネットワーク上で、コンセンサスの実行、トランザクションの検証、および元帳の管理に関与するノードであり、前記非検証ピアは、クライアントを前記検証ピアに接続するためのプロキシとして機能するノードである、請求項1記載のシステム。
【請求項17】
前記ブロックチェーンファブリックは、チャネルを作成することによって、参加者グループが別々のトランザクション元帳を作成することを可能にする、請求項7記載の方法。
【請求項18】
前記検証ツールは、スマートコントラクトがトランザクションをコミットしようとする時にデータが依然として一致していることを検証する、請求項7記載の方法。
【請求項19】
前記ブロックチェーンファブリックは、検証ピアと非検証ピアとを識別し、前記検証ピアは、ネットワーク上で、コンセンサスの実行、トランザクションの検証、および元帳の管理に関与するノードであり、前記非検証ピアは、クライアントを前記検証ピアに接続するためのプロキシとして機能するノードである、請求項7記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
著作権表示
この特許文献の開示の一部は、著作権によって保護される資料を含む。この特許文献または特許開示が特許商標庁の特許ファイルまたは記録に記載されているため、著作権保有者は、何人による複製に対して異議しないが、その他の場合には全ての著作権を保有する。
【0002】
優先権主張
本願は、2019年1月29日に出願され、「ハイパーレッジャファブリックブロックチェーンにおいてSQLベースのリッチクエリをサポートするためのシステムおよび方法」と題された米国特許出願第16/261363号、および2018年7月27日に出願され、「ハイパーレッジャファブリックブロックチェーンにおいてSQLベースのリッチクエリをサポートするためのシステムおよび方法」と題された米国仮特許出願第62/711385号に基づく優先権の利益を主張し、各々の出願の全体が参照により本明細書に組み込まれる。
【0003】
分野
本開示は、一般的に、分散型元帳(distributed ledger)を提供するためのシステムおよび方法に関する。より詳しくは、本開示は、ハイパーレッジャファブリック(hyperledger fabric)ブロックチェーンなどの許可型の分散型元帳においてSQLベース(またはSQLに類似する)リッチクエリをサポートするためのシステムおよび方法並びにそのコンポーネントを開示する。
【背景技術】
【0004】
背景
分散型元帳は、大まかに、資産所有権のデジタル記録として称される。元帳は、中央管理者を有しなく、中央データストアを有しない。代わりに、元帳は、コンピューティング環境において、複数の場所、複数の国、または複数の施設にわたって地理的に分布され得る多くの参加ノードにわたって複製される。コンセンサスプロトコルは、元帳の各ノードのコピーと他の全てのノードのコピーとの同一性を保証する。同様に、1組のコピーは、1つの共有元帳として見なされてもよい。資産所有者は、分散型元帳を用いて、例えば、暗号署名技術に基づいて、一部の資産所有者の口座の負債を記入し、別の資産所有者の口座の信用度を評価することができる。
【0005】
ブロックチェーンは、改ざん防止の分散型元帳を実装するために使用することができるデータ構造である。複数のノードは、クライアントからのトランザクションをブロックにパッケージ化する共通プロトコルに従い、ノードは、コンセンサスプロトコルを使用して、次のブロックに合意する。ブロックは、累積暗号ハッシュを有するため、元帳の改ざんが困難である。各ブロックは、時間的に前のブロックの参照値(ハッシュ値)を有する。また、各ブロックは、自身のハッシュ値を有する。ブロックチェーンは、後方(例えば、チェーンの上方)にトラバースすることができる。
【発明の概要】
【発明が解決しようとする課題】
【0006】
許可無し分散型元帳は、任意の単一のエンティティによる制御を回避しながら、匿名参加者が元帳を管理することを可能にする。しかしながら、匿名の場合、アイデンティティ(identity)、説明責任(accountability)および監査能力(auditability)は、困難である。対照的に、許可有り分散型元帳は、明示的に許可された当事者が元帳を管理することを可能にすることによって、信用レベルおよび説明責任を可能にする。許可型元帳は、より柔軟な管理およびコンセンサスメカニズムのより広い選択をサポートする。他のトランザクションよりも一部のトランザクションを好む参加者は、2種類の分散型元帳を容易に操作することができる。しかしながら、許可有り元帳の基礎となる説明責任は、参加者に制約を与える機会を提供する。
【0007】
概要
本明細書は、一実施形態に従って、ハイパーレッジャファブリック(hyperledger fabric)ブロックチェーンにおいてSQLベースのリッチクエリ(SQL-based rich query)をサポートするためのシステムおよび方法を記載する。
【0008】
本明細書は、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムおよび方法を記載する。一実施形態によれば、本明細書に記載されたシステムおよび方法は、SQLクエリを実行することによって、より容易およびより管理可能な方法で複雑なスマートコントラクトを作成することができる。また、データ選別を(スマートコントラクトレベルで実行するではなく)ストレージエンジンに戻すことおよびデータの同時読み出しおよび書き込みアクセスをサポートするリレーショナルエンジンに依存することによって、性能を改善することができる。また、ワールドデータベースのステートは、同時読み出し/書き込みアクセスを提供することができる。
【0009】
本開示のこれらの利点および他の利点は、添付の図面を参照して、以下の様々な実施形態の説明から当業者には明白となるであろう。
【0010】
ハイパーレッジャプロジェクトは、オープンソースのエンタープライズ級の分散型元帳フレームワークおよびコードベースを作成するように、Linux(登録商標)財団のプロジェクトとして達成された共同成果である。ハイパーレッジャファブリックは、スマートコントラクトを実行するための分散型元帳プラットフォームの実装である。ハイパーレッジャファブリックは、コンテナ技術を利用して、システムのアプリケーションロジックを含む「チェーンコード」と呼ばれるスマートコントラクトをホストする。
【0011】
一実施形態によれば、ハイパーレッジャの参加者は、元帳のコピーを複製する。元帳情報の共有に加えて、元帳を更新するプロセスも共有される。参加者のプライベートプログラムを用いて関連するプライベート元帳を更新する他のシステムとは異なり、ブロックチェーンシステムは、共有プログラムを用いて、共有元帳を更新する。共有元帳を介して参加者のビジネスネットワークを調整することによって、ブロックチェーンネットワークは、(信用性を増加しながら)プライベート情報を元帳に配布することに関連する時間、コストおよびリスク、並びに処理時間を低減することができる。ハイパーレッジャファブリックは、プライベートであり、許可型である。ハイパーレッジャファブリックネットワークのメンバが登録される。また、ハイパーレッジャファブリックは、チャネルを作成する機能を提供することができる。各チャネルは、特定のグループの参加者に可視である個別のトランザクション元帳を含むことができる。これによって、トランザクションプライバシを可能にする。
【0012】
一実施形態によれば、ファブリックの分散型元帳プロトコルは、ピア(peer)によって実行される。ファブリックは、2種類のピアを識別する。検証ピアは、ネットワーク上で、コンセンサスの実行、トランザクションの検証、および元帳の管理に関与するノードである。一方、非検証ピアは、(トランザクションを発行する)クライアントを検証ピアに接続するためのプロキシとして機能するノードである。非検証ピアは、トランザクションを実行しないが、トランザクションを検証することができる。ファブリックのいくつかの特徴は、即時最終性を有し、チェーンコードと呼ばれる任意のスマートコントラクトを実行する許可型ブロックチェーンを含む。ユーザによって定義されたチェーンコードのスマートコントラクトは、コンテナの中でカプセル化され、システムチェーンコードは、ピアと同様のプロセスに実行される。ネットワークの全体において元帳トランザクションを同期状態に保持する(例えば、適切な参加者がトランザクションを承認する場合のみ、元帳を更新し、元帳を更新する場合、同様のトランザクションと共に同様の順序で元帳を更新することを保証する)ためのプロセスは、コンセンサスと称されてもよい。ファブリックは、TLS(トランスポート層セキュリティ)証明書、登録証明書、およびトランザクション証明書を認証するための認証局(CA)をサポートすることによって、コンセンサスプロトコルおよびセキュリティを実装する。
【0013】
一実施形態によれば、ハイパーレッジャファブリックは、ワールドデータベースのステートを含むことができる。このデータベースは、通常、キー値(key-value)ストアである。ワールドデータベースのステートは、高速のキー値ストアに格納される。特定のラベル(キー)には、値が関連付けられる。例えば、キー値データベースは、残高をキーに関連付けることができ、または写真をキーに関連付けることができる。永続化エンジン(persistence engine)は、非常に速い。
【0014】
一実施形態によれば、ハイパーレッジャファブリックブロックチェーン内のスマートコントラクトは、非常に基本的な値ルックアップおよびデータ選別メカニズムしかアクセスできない。したがって、スマートコントラクトの作成および管理が困難であり、多くの場合、十分な性能を有しない。
【0015】
一実施形態によれば、サポートされる基礎の永続化エンジンは、同時R/WアクセスをサポートしないレベルDBおよびカウチDBのようなシステムのみと動作するため、エンドースメント動作(トランザクション)の実行中にブロックチェーンを書き込みアクセス(コミット)に強制的にロックしなければならない。このことは、特に、スマートコントラクトの実行が大量のコンピューティング能力を必要とする場合、性能に負の影響を直接に与える。
【図面の簡単な説明】
【0016】
【
図1A】一実施形態に従って、ブロックチェーンクラウドサービスシステムのファブリック内のトランザクションフローを示す図である。
【
図1B】一実施形態に従って、ブロックチェーンクラウドサービスシステムを示す図である。
【
図1C】一実施形態に従って、BCSシステムを示す図である。
【
図1D】一実施形態に従って、BCSシステムを示す図である。
【
図2】一実施形態に従って、ブロックチェーンクラウドサービスシステムのゲートウェイを示す図である。
【
図3】一実施形態に従って、ブロックチェーンクラウドサービスシステムの永続化を示す図である。
【
図4】BCS上のファブリックの例示的な配置を示す図である。
【
図5】一実施形態に従って、チェーンコードアーキテクチャを示す図である。
【
図6】一実施形態に従って、管理コンソールを提供するためのシステムを示す図である。
【
図7A】一実施形態に従って、BCSコンソールUI内のユーザインターフェイスの一例を示す図である。
【
図7B】一実施形態に従って、BCSコンソールUI内のユーザインターフェイスの一例を示す図である。
【
図8】一実施形態に従って、BCSインスタンスにおいてRESTプロキシを提供するためのシステムを示す図である。
【
図9A】一実施形態に従って、シングルサインオン用の典型的なIDCS使用ケースを示す図である。
【
図9B】一実施形態に従って、ファブリッククライアント認証用のIDCS使用ケースを示す図である。
【
図10】一実施形態に従って、ファブリックブロックチェーンにおいてワールドデータベースのステートをサポートするためのシステムを示す図である。
【
図11】一実施形態に従って、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムを示す図である。
【
図12】一実施形態に従って、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするための方法のフローチャートである。
【発明を実施するための形態】
【0017】
詳細な説明
一実施形態によれば、本明細書は、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムおよび方法を記載する。一実施形態によれば、本明細書に記載されたシステムおよび方法は、SQLクエリを実行することによって、より容易およびより管理可能な方法で複雑なスマートコントラクトを作成することができる。また、データ選別を(スマートコントラクトレベルで実行するではなく)ストレージエンジンに戻すことおよびデータの同時読み出しおよび書き込みアクセスをサポートするリレーショナルエンジンに依存することによって、性能を改善することができる。また、ワールドデータベースのステートは、同時読み出し/書き込みアクセスを提供することができる。
【0018】
一実施形態によれば、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートする例示的なブロックチェーンファブリックは、クラウドサービスとして提供することができる。一実施形態によれば、エンタープライズ級のフレームワークは、クラウド技術を使用する様々なクライアントアプリケーションの拡張性、管理、設定、永続化、および互換性を含む。特定の実施形態において、許可型ブロックチェーン元帳およびブロックチェーンファブリックは、ブロックチェーンクラウドサービス(BCS)として提供される。
【0019】
以下の説明では、本開示は、限定ではなく例示として添付の図面に示される。本開示に言及された様々な実施形態は、必ずしも同様の実施形態を指すものではなく、このような言及は、少なくとも1つを意味する。具体的な実装例を説明するが、これらの実装例は、例示という目的のために提供される。当業者は、本開示の範囲および精神から逸脱することなく、他のコンポーネントおよび構成を使用できることを認識できるであろう。本開示の説明は、請求される方法をサポートおよび開示する例示および実施形態を提供する。
【0020】
また、特定の場合に、多数の具体的な詳細を記載することによって、本開示の完全な説明を提供する。しかしながら、当業者なら、これらの具体的な詳細がなくても、本開示に教示された方法の結果および利点を達成することができ、本開示に教示された発想を実施することができることを理解するであろう。場合によって、本開示を曖昧にしないために、周知の特徴を詳細に記載しない。
【0021】
特定の機能の性能およびそれらの関係を示す機能的な構築ブロックを用いて、本開示の教示を説明する。これらの機能的な構築ブロックの境界は、説明の都合上、本開示において任意に定義されることが多い。したがって、代替的な実施形態において、同様の要素によって実行される機能は、異なる要素によって実行されてもよい。機能を実行する各々の要素は、1つの要素に合併されてもよい。特定の機能およびそれらの関係を適切に実行できる限り、代替的な境界を定義してもよい。したがって、これらの任意の代替的な境界は、本開示の範囲および精神に含まれる。
【0022】
図面および詳細な説明全体において、同様の参照番号を用いて、同様の要素を示す。したがって、要素が他の場所に記載されている場合、図面に使用された参照番号は、その図面に関連する詳細な説明において、言及されてもよく、言及されなくてもよい。
【0023】
ブロックチェーン技術は、利用者のエコシステムにおいてトランザクションをほぼリアルタイムで分散し、安全で改ざん防止データ共有を可能にすることによって、企業ビジネス価値を劇的に向上させることができる。ハイパーレッジャファブリックブロックチェーンは、モジュラアーキテクチャ、水平形/共通型産業技術サポート、および企業需要に対するサポートを組み込む。
【0024】
序論
一実施形態によれば、ハイパーレッジャファブリック(hyperledger fabric)は、高度の機密性、回復性、柔軟性、および拡張性を提供するモジュラアーキテクチャによって支持される分散型元帳ソリューションのプラットフォームである。ハイパーレッジャファブリックは、異なるコンポーネントのプラグ可能な実装をサポートし、実用のエコシステムに存在する複雑性および混雑性に適応するように設計される。
【0025】
一実施形態によれば、ハイパーレッジャファブリックは、代替的なブロックチェーン解決策と異なり、柔軟で拡張可能なアーキテクチャを提供する。
【0026】
ブロックチェーン-分散型元帳
一実施形態によれば、ブロックチェーンネットワークは、ネットワーク上で行われている全てのトランザクションを記録する分散型元帳を含むことができる。
【0027】
ブロックチェーン元帳は、多くのネットワーク参加者によって複製され、各々のネットワーク参加者の協働によって管理されるため、しばしば分散型元帳と称される。分散および協働は、企業が実世界において商品およびサービスを交換する方法を反映する属性である。
【0028】
分散および協働に加えて、ブロックチェーンに記録される情報は、暗号技術を用いて追加されるのみである。すなわち、いったんトランザクションを元帳に追加すると、このトランザクションは、変更できない。この不変性によって、情報の事後変更ができないため、参加者は、情報の出所を容易に決定することができる。したがって、ブロックチェーンは、証明システムとして考えられてもよい。
【0029】
ブロックチェーン-スマートコントラクト
一実施形態によれば、情報の一貫した更新および特定の元帳機能(トランザクション、クエリなど)をサポートするために、ブロックチェーンネットワークは、スマートコントラクトを使用することによって、元帳へのアクセスを制御する。
【0030】
一実施形態によれば、スマートコントラクトは、情報をカプセル化し、ネットワーク全体にわたってその情報を簡単に維持するための重要なメカニズムだけでなく、参加者がトランザクションの特定部分を自動的に実行できるように書かれてもよい。
【0031】
スマートコントラクトは、例えば、品物の到着時間に応じて出荷コストを変化するように書かれてもよい。両方の当事者によって合意され、元帳に記載された条件に基づいて、品物を受け取った時に、対応の資金が自動的に譲渡される。
【0032】
ブロックチェーン-コンセンサス
一実施形態によれば、ネットワークの全体において元帳トランザクションを同期状態に保持する(例えば、適切な参加者がトランザクションを承認する場合のみ、元帳を更新し、元帳を更新する場合、同様のトランザクションと共に同様の順序で元帳を更新することを保証する)ためのプロセスは、コンセンサスと称されてもよい。
【0033】
一実施形態によれば、ブロックチェーンは、共有且つ複製されたトランザクションシステムとして考えられてもよい。このトランザクションシステムは、スマートコントラクトを介して更新され、コンセンサスと呼ばれる協働プロセスを介して一貫して同期状態に保持される。
【0034】
ブロックチェーンの利点
一実施形態によれば、現在利用可能なトランザクションネットワークは、ビジネス記録を保持する時に存在していたバージョンのネットワークである。ビジネスネットワークのメンバが互いに取引をするが、各メンバは、各自の取引記録を管理する。同様に、品物を販売する企業がその品物の所有権を確認するための権原連鎖を保有することを保証するために、取引の対象物を販売する度に、出所を確認することができる。
【0035】
現在のビジネスネットワークがコンピューティングシステムによって近代化されているにも関わらず、ネットワーク参加者のアイデンティティを管理するための統一システムが存在しておらず、(数兆ドルにも昇る世界規模の)証券取引を決済するのに数日がかかり、契約を手動で署名し実行しなければないため、出所の確認は、困難である。また、システム内の各データベースが固有の情報を含むため、1つの欠点を表す。
【0036】
一実施形態によれば、ブロックチェーンは、ネットワーク上でアイデンティティを確立し、トランザクションを実行し、データを記憶するための標準方法を提供することによって、多くの非効率な標準トランザクションシステムの代替案を提供する。
【0037】
一実施形態によれば、ブロックチェーンネットワークの各参加者は、各自の元帳のコピーを有する。元帳情報の共有に加えて、元帳を更新するプロセスも共有される。参加者のプライベートプログラムを用いて関連するプライベート元帳を更新する他のシステムとは異なり、ブロックチェーンシステムは、共有プログラムを用いて、共有元帳を更新する。
【0038】
一実施形態によれば、共有元帳を介して参加者のビジネスネットワークを調整することによって、ブロックチェーンネットワークは、信用性および可視性を増加しながら、プライベート情報の配布に関連する時間、コストおよびリスク、並びに処理時間を低減することができる。
【0039】
ハイパーレッジャファブリック
ハイパーレッジャファブリックは、他のブロックチェーン技術と同様に、元帳を有し、スマートコントラクトを使用し、参加者がトランザクションを管理するシステムである。
【0040】
ハイパーレッジャファブリックは、プライベートであり許可型であるため、いくつかの他のブロックチェーンシステムとは異なる。いくつかのブロックチェーンネットワークは、「プルーフオブワーク」の代わりに、アイデンティティを使用して認証する(基準を満たす人がネットワークの参加を許可する)。ハイパーレッジャファブリックネットワークのメンバは、メンバシップサービスプロバイダを介して登録する。
【0041】
また、ハイパーレッジャファブリックは、いくつかのプラグ可能なオプションを提供する。元帳データを複数のフォーマットで格納することができ、コンセンサスメカニズムをインおよびアウトに切り替ることができ、異なるMSP(メンバシップサービスプロバイダ)をサポートすることができる。
【0042】
さらに、ハイパーレッジャファブリックは、チャネルを作成する機能を提供することによって、参加者グループが別々のトランザクション元帳を作成することを可能にする。これによって、ネットワーク上の一部の参加者が競合者であり、全てのトランザクションを参加者の全員に公開しないこと(例えば、一部の参加者に特別価格を提供し、他の参加者に提供していないこと)を可能にする。2人の参加者がチャネルを作成する場合、他の参加者を除き、この2人の参加者は、そのチャネルの元帳のコピーを有する。
【0043】
共有元帳
一実施形態によれば、ハイパーレッジャファブリックは、2つのコンポーネント、すなわち、ワールドステートおよびトランザクションログを含む元帳サブシステムを有する。各参加者は、所属する全てのハイパーレッジャファブリックネットワークの元帳のコピーを有する。
【0044】
ワールドステートというコンポーネントは、所定の時点における元帳の状態を記述する。ワールドステートは、元帳のデータベースである。トランザクションログというコンポーネントは、ワールドステートの現在値をもたらした全てのトランザクションを記録する。トランザクションログは、ワールドステートの更新履歴である。したがって、元帳は、ワールドステートデータベースとトランザクションログ履歴との組み合わせである。
【0045】
共有元帳は、ワールドステートの交換可能なデータストアを有する。デフォルトでは、共有元帳は、レベルDBキー値ストアデータベースである。トランザクションログは、プラグ可能ではなくてもよい。トランザクションログは、単に、ブロックチェーンネットワークによって使用される前後の元帳データベースの値を記録するものである。
【0046】
スマートコントラクト
ハイパーレッジャファブリックスマートコントラクトは、チェーンコードで書かれ、ブロックチェーンの外部のアプリケーションが元帳と対話する必要があるときに、そのアプリケーションによって呼び出される。殆どの場合、チェーンコードは、トランザクションログではなく、ワールドステートである元帳のデータベースコンポーネントのみと対話する(例えば、データベースを検索する)。
【0047】
コンセンサス
一実施形態によれば、トランザクションは、ネットワーク内の異なるセットの参加者の間に実行されても、実行される順序で元帳に書き込まれる。このため、トランザクションの順序が確立され、誤った(または悪意で)元帳に挿入される悪いトランザクションを拒否することができる。
【0048】
ハイパーレッジャファブリックによって、ネットワークエンティティ(例えば、ネットワークユーザ、ピア、スタータ)は、参加者の間の関係を最もよく表すコンセンサスメカニズムを選択することができる。プライバシと同様に、参加者の間の関係で高度に構造化されたネットワークからよりピアツーピアであるネットワークまでの広範囲のネットワークが必要である。
【0049】
チェーンコード
一実施形態によれば、チェーンコードは、1つ以上の資産と、資産を変更するためのトランザクション命令(ビジネスロジック)とを定義するソフトウェアを含むことができる。チェーンコードは、キー値対または他の状態データベース情報を読み取るまたは変更するための規則を実行する。チェーンコードの機能は、元帳の現在の状態データベースに対して実行され、トランザクション提案によって作動される。チェーンコードの実行は、ネットワークに提出され、全てのピア上の元帳に適用される一組のキー値の書き込み(書き込みセット)をもたらす。
【0050】
元帳の特徴
一実施形態によれば、元帳は、ファブリック内の全ての状態遷移のひと続きの耐タンパー性の記録である。状態遷移は、参加者がチェーンコードを実行すること(トランザクション)によってもたらした結果である。各トランザクションは、作成、更新、または削除として元帳にコミットする一組の資産キー値対を生成する。
【0051】
元帳は、変更できないひと続きの記録をブロックに格納するブロックチェーン、および現在のファブリック状態を保持するための状態データベースから構成される。各チャネルは、1つの元帳を含み、各チャネルは、特定の参加者グループに可視であるトランザクションの別個の元帳を含む。各ピアは、メンバとして所属する各チャネルの元帳のコピーを保持する。
【0052】
チャネルのプライバシ
一実施形態によれば、ハイパーレッジャファブリックは、チャネルごとに不変の元帳、および資産の現在の状態を処理および変更する(すなわち、キー値対を更新する)ことができるチェーンコードを利用する。元帳は、チャネルの範囲に存在する。元帳は、(全ての参加者が1つの共通チャネル上で動作している場合)ネットワーク全体にわたって共有されてもよく、または特定組の参加者のみを含むように私有化されてもよい。
【0053】
後者の場合、参加者は、別個のチャネルを作成することによって、トランザクションおよび元帳を分離/隔離することができる。完全な透明度とプライバシとの間のギャップを埋めることを可能にするために、チェーンコードは、読み取りおよび書き込みを実行するために資産状態にアクセスする必要があるピアのみにインストールされてもよい(すなわち、チェーンコードをピアにインストールしない場合、ピアは、元帳と適切にインターフェイスすることができない)。データをさらに不明瞭にするために、AES(高度暗号化標準)などの通常の暗号アルゴリズムを用いて、チェーンコード内の値を(部分的または全体的に)暗号化してから、元帳に追加する。
【0054】
一実施形態によれば、チャネルプライバシよりも小さい概念である「プライベートコレクション」を用いて、プライバシを改善することができる。
【0055】
セキュリティおよびメンバシップサービス
一実施形態によれば、ハイパーレッジャファブリックは、全ての参加者が既知のアイデンティティを有するトランザクションネットワークを提供する。パブリックキーインフラストラクチャを用いて、組織、ネットワークコンポーネント、およびエンドユーザまたはクライアントアプリケーションに関連付ける暗号化証明書を作成する。したがって、より広いネットワークおよびチャネル上でデータのアクセスを制御および管理することができる。ハイパーレッジャファブリックのこの「許可」概念は、チャネルの存在および特性と共に、プライバシおよび機密性が重要であるシナリオに対処することができる。
【0056】
コンセンサス
一実施形態によれば、分散型元帳において、コンセンサスは、単にトランザクションの順序に対する合意よりも多くのものを含むことができる。この区別は、提案およびエンドースメントから、順序付け、検証およびコミットメントまでのハイパーレッジャファブリックのトランザクションフロー全体における基本的な役割によって強調される。コンセンサスは、ブロックを含む一組のトランザクションの正当性の完全検証として定義される。
【0057】
トランザクションブロックの順序および結果が明示的なポリシ基準チェックを満たしたときに、コンセンサスが最終的に達成される。これらのチェックおよびバランスは、トランザクション中に行われ、特定のトランザクションに署名しなければならない特定のメンバを決定するためのエンドースメントポリシの使用、およびこれらのポリシを実行および遵守することを保証するためのシステムチェーンコードを含む。コミットメントの前に、ピアは、これらのシステムチェーンコードを利用して、エンドースメントが確実に存在し且つ適切なエンティティからのものであることを確認することができる。また、トランザクションを含む任意のブロックを元帳に付加する前に、元帳の現在の状態に合意または同意している間に、バージョンチェックを実行する。この最終チェックは、データの完全性を損なう可能性のある二重使用および他の脅威に対する保護を提供すると共に、非静的変数に対する関数の実行を可能にする。
【0058】
エンドースメント、検証およびバージョンチェックに加えて、トランザクションフローに行われる継続的なアイデンティティ検証を含む。アクセス制御リストは、ネットワークの(オーダリングサービスからチャネルまでの)階層上で実装され、トランザクション提案が異なるアーキテクチャコンポーネントを通過する際に、ペイロードは、繰り返して署名され、検証され、認証される。コンセンサスは、合意された一連のトランザクションの順序に限定されず、むしろ、提案からコミットメントまでのトランザクションフローに行われる継続的な検証の副産物として達成されたプロセスである。
【0059】
ブロックチェーンクラウドサービス-アーキテクチャ
一実施形態によれば、クラウドシステム(例えば、ブロックチェーンクラウドサービス(BCS))などのシステムは、上述したハイパーレッジャファブリックを出発点として利用することができる。このようなシステムは、高度に進歩した特異なエンタープライズ級の分散型元帳クラウドプラットフォームを提供することによって、新しいブロックチェーンベースのアプリケーションの作成および/または既存のSaaS、PaaSおよびIaaS並びにオンプレミスアプリケーションの拡張を可能にする。
【0060】
一実施形態によれば、システムは、拡張性、安全性、ロバスト性、統一性、およびパフォーマンスなどのミッションクリティカル企業需要をサポートすることによって、作成中ブロックチェーンアプリケーションの採択およびサポートに対する障壁を取り除くことができる。システムは、BCSをクラウドPaaS(Platform as a Service)として提供することによって、ユーザがブロックチェーンを配置、設定、管理および監視することおよびブロックチェーンを企業に配置するためのコストを低減することを可能にする。また、システムは、ブロックチェーンアプリケーションの開発および他のプラットフォームとの統合を加速する。このシステムによって、SaaSクラウド利用者は、ブロックチェーンクラウドプラットフォームを使用する第三者アプリケーションおよび外部分散型元帳技術を用いて、調達、支払、貿易金融、会計、HR、CXなどの企業プロセスのデータを安全に共有することができ、分散トランザクションを実行することができる。
【0061】
一実施形態によれば、システムは、PaaSマネージャ(例えば、オラクル(登録商標)PaaSサービスマネージャ(PSM)プラットフォーム)に基づくクラウドサービスである。通常、このようなシステムは、計算スペース(例えば、外部計算スペース)に動作するクラウド管理サービスである。一実施形態において、システムは、オラクルアイデンティティクラウドサービス(IDCS)、オラクルロードバランササービス(LBaaS)、オラクルイベントハブクラウドサービス、およびオラクルクラウドストレージを用いて、階層化したオラクルアプリケーションコンテナクラウドサービス(ACCS)を含むPSMプラットフォームの特徴を利用する。各クライアントのブロックチェーンを作成することができ、テナントとして実行することができる。システムは、複数のブロックチェーンをサポートすることができ、各ブロックチェーンは、マルチテナント環境内の各々のテナントとして作成され、動作する。
【0062】
したがって、このシステムによって、アプリケーションまたはクライアントアプリケーションは、スマートコントラクトを含む分散型元帳を実装することができる。このようなシステムのクライアントおよびユーザは、クラウド(ブロックチェーン信用)の内部であってもよく、または外部であってもよい。いくつかのブロックチェーンネットワークは、クラウド環境外部のコンポーネントを含んでもよく、または特定のクラウドに限定されてもよい。
【0063】
一実施形態によれば、このシステムは、多種多様な応用、特に信用およびアイデンティティを解決しなければならないマルチパーティトランザクションに有用である。他のブロックチェーンシステムとは異なり、本開示のシステムサービスは、匿名ではない。実際に、アイデンティティおよび監査能力は、基本的な統合要素である。したがって、BCSは、例えば、資本市場、越境トランザクション、金融サービス、資産トランザクション、法律規制、ヘルスケア記録、公開、ロジスティック、変更追跡、および偽造防止において応用されてもよい。
【0064】
上述したように、ブロックチェーン上の各当事者は、(元帳が特定の当事者に作成/私有化されない限り)全てのデータベースおよび全ての履歴にアクセスすることができる。各当事者は、データまたは情報を制御することができない。また、全ての当事者は、仲介人なしで、トランザクション相手の記録を直接に検証することができる。通信は、中心ノードを介せず、ピア間で直接に行われる。各ノードは、情報を記憶すると共に、情報を全ての他のノードに転送する。いったんトランザクションがデータベースに入力され、アカウントが更新されると、記録は、その前に入力された全てのトランザクションの記録にリンクされる(したがって、「チェーン」と呼ばれる)ため、変更することができない。トランザクションにエラーが存在する場合、新しいトランザクションを用いてエラーを訂正することができる。両方のトランザクションは、提供されたユーザに可視である。新しい有効なトランザクションを追加するために、参加者は、コンセンサスメカニズムを介してトランザクションの有効性に合意することができる。ブロックチェーンの参加者は、資産の出所、および資産所有権の時間的な変化を検証することができる。デジタル署名を用いて文書を認証することができ、デジタル署名をアクセス制御(許可レベルの変更)およびプログラマビリティ(実行可能なビジネスルール)に追加することができる。
【0065】
多くのマルチパーティトランザクションにおいて、当事者は、資産またはサービスを受け取った時に、金銭を交換する。通常、トランザクション時間によって、一方の当事者は、他方の当事者よりも先に商品または金銭を提供しなければならない。いくつかの環境では、信用は、仲介人が契約の条件が成立するまで資金を預託することによって解決される。この方法は、当事者間の信用を解決する。しかしながら、この方法は、信用しなければならない別の集権者を追加するため、複雑性を増加すると共に、トランザクションのコストを増加する。本開示のシステムの一部としてスマートコントラクトを使用することによって、仲介人を排除することができる。これによって、当事者は、仲介人を介することなく、ブロックチェーン上で信用できるトランザクションを行うことができる。
【0066】
一実施形態によれば、BCSなどの本開示のシステムの利点は、システム内の情報を分散することを含む。監査能力を利用できると共に、アクセスを制御することができ、いくつかのプライバシを管理することができる。また、ブロックチェーン元帳は、本質的に変更することができず、拒否することができない。元帳は、複数のブロックから構成される。各トランザクションブロックは、ブロックID、過去のハッシュ、データハッシュ、タイムスタンプ、トランザクションIDリスト、動作(1~n)、チェーンコードID、チェーンコード提案、応答(r/wセット、イベント、成功または失敗)、およびエンドーサを含む。各ブロックは、過去のハッシュおよびそれ自体のハッシュを含むため、いったん公開/配布されると、本質的に順序付けられ、不変である(なお、現在ブロックのハッシュは、過去ブロックのハッシュと現在ブロック内の他のデータとのハッシュであるため、チェーン内のブロックをリンクする)。コンセンサスは、矛盾を解消することができる。集中型データベースまたは仲介人と比較して、集中型権威者に過度の権限を与える必要はない。また、元帳の分散性質は、分散コピーおよびコンセンサスを使用することによって、(アルゴリズム的に可能であっても)変更が難しいため、ブロックチェーン記録技術の基本的な不変性を強化する。したがって、トランザクションの順序が一定であるため、誰かがチェーンの最新のブロックのコピーを有する場合、元帳のハッキングは、ほぼ不可能である。
【0067】
特定の実施形態において、以下で説明するように、本開示のシステムは、オラクルPaaSサービスマネージャ(PSM)プラットフォームに基づくことができ、ファブリックベースのブロックチェーンの作成、監視および設定を単純化/容易化/自動化する管理コンソールを含むこによって強化される。また、アプリケーションとブロックチェーンファブリックとの間の接触を簡単化するために、1つのREST APIを含むRESTプロキシサービスが提供される。開発者は、スマートコントラクトを構築し、管理コンソールを用いてスマートコントラクトを配置し、次いで、アプリケーションを用いて、ブロックチェーン上でスマートコントラクトを(デフォルトの場合)非同期的にまたは(即時応答が要求される場合)同期的に呼び出すことができる。RESTプロキシサービスおよびAPIは、プラットフォームの需要に応じて、同期および非同期の両方の能力を提供する。
【0068】
一実施形態によれば、ファブリックCAサーバは、ファブリックのメンバシップサービスを提供することができる。ファブリックCAサーバは、以下の3つの部分、すなわち、ユーザの認証、ブロックチェーン(ピアおよびオーダのグループ)にアクセスするための認可、並びにアプリケーションクライアント、ピア(peer)およびオーダ(order)に証明書を配信するCAサーバを含むことができる。ファブリックCAは、証明書を利用して、認証および許可を実施することができる。証明書は、以下の2つの種類、すなわち、認証用登録証明書および認可用トランザクション証明書を含む。一実施形態によれば、IDCSなどのアイデンティティサービスは、認証および認可を提供することもできる。
【0069】
ハイパーレッジャファブリック
上述したように、一実施形態において、本開示のシステムは、スマートコントラクトを実行するための分散型元帳プラットフォームを提供するハイパーレッジャファブリックを実装することができる。ハイパーレッジャファブリックは、コンテナ技術を利用して、システムのアプリケーションロジックを含む「チェーンコード」と呼ばれるスマートコントラクトをホストする。代替的な実施形態において、ブロックチェーンクラウドサービスは、例えば、2016年5月31日に出願され、参照により本明細書に組み込まれる米国特許出願第15/169622号「分散型元帳システムにおける説明責任および信用」に記載された「Tendermint」元帳システムを含む代替的な分散型元帳プラットフォームを実装する。
【0070】
ハイパーレッジャファブリックの分散型元帳プロトコルは、ピアによって実行される。従来のブロックチェーン技術の1つの欠点は、全てのピアが全てのトランザクションを記録する必要があることである。このことは、実質的にI/Oおよびプロセッサのオーバーヘッドを引き起こし、エンタープライズ級のシステムに応じて簡便に拡張することができない。ハイパーレッジャファブリックは、2種類のピアを識別する。コミッタピアは、エンドースメントを確認し、トランザクションをブロックチェーンにコミットする前にトランザクション結果を検証し、および元帳を管理するためのネットワーク上のノードである。一方、非検証ピアは、(トランザクションを発行する)クライアントを検証ピアに接続するためのプロキシとして機能するノードである。非検証ピア(またはエンドーサピア)は、トランザクションを実行しないが、トランザクションをシミュレートし、署名することができる。ピアの種類/機能の分離は、システムの拡張性を改善する。オーダリングサービスは、署名済みトランザクションを受信し、ブロックに順序付け、ブロックをコミッタピアに送信することができる。このような分散型元帳システムにおいて、コンセンサスは、元帳に追加される次のトランザクションセットの合意を形成するプロセスである。ハイパーレッジャファブリックにおいて、コンセンサスは、3つの別個のステップ、すなわち、トランザクションのエンドースメント、順序付け、並びに検証およびコミットメントを含む。
【0071】
一実施形態によれば、ハイパーレッジャの特徴は、即時最終性を有し、チェーンコードと呼ばれる任意のスマートコントラクトを実行する許可型ブロックチェーンである。ユーザによって定義されたチェーンコードのスマートコントラクトは、コンテナの中でカプセル化され、システムチェーンコードは、ピアと同様のプロセスに実行される。チェーンコードの実行は、トランザクションの順序で分割されるため、必要とされるノード間の信用レベルおよび検証レベルを制限し、ネットワークのオーバーヘッドを低減する。
【0072】
一実施形態によれば、ハイパーレッジャファブリック内のチャネルは、共通のネットワーク上で資産を交換する競合ビジネスおよび規制産業によって要求された高度なプライバシおよび機密性で、多者トランザクションを行うことを可能にする。変更できない共有元帳は、各チャネルの全てのトランザクション履歴を暗号化し、監査および紛争を効率的に解決するためのクエリ機能を含む。元帳は、チャネルの範囲に作成される。元帳は、(全ての参加者が1つの共通チャネル上で動作している場合)ネットワーク全体にわたって共有されてもよく、または特定組の参加者のみを含むように私有化されてもよい。
【0073】
一実施形態によれば、ハイパーレッジャファブリックは、TLS証明書、登録証明書およびトランザクション証明書を認証するための認証局(CA)をサポートすることによって、セキュリティを実装する。パブリックキーインフラストラクチャを用いて、組織、ネットワークコンポーネント、およびエンドユーザまたはクライアントアプリケーションに関連付ける暗号証明書を作成する。したがって、より広いネットワークおよびチャネル上でデータのアクセスを制御および管理することができる。ハイパーレッジャファブリックのこの「許可」特徴は、チャネルの存在および能力と共に、多者企業システムのプライバシおよび機密性の要求を満たす。
【0074】
一実施形態によれば、ハイパーレッジャファブリックは、チェーンコードトランザクションを用いて資産を変更することができる。上述したように、チェーンコードは、1つ以上の資産と、資産を変更するためのトランザクション命令とを定義するソフトウェアである。
【0075】
一体化コンセンサスメカニズムは、提案およびエンドースメントから、順序付け、検証およびコミットメントまでのハイパーレッジャファブリックのトランザクションフローにおいて、基本的な役割を有する。コンセンサスは、上述したように、ブロックを含むトランザクションセットの有効性の検証である。コンセンサスは、トランザクションブロックの順序および結果が明示的なポリシ基準チェックを満たしたときに最終的に達成される。
【0076】
図1Aは、ブロックチェーンサービスを提供するシステムのファブリックに行われたトランザクションフローを示す。より具体的には、
図1Aは、一実施形態に従って、ブロックチェーンクラウドサービス(BCS)システムを示す。1において、クライアント160は、ファブリックSDK162を用いて、ファブリック認証局170、172、174にアクセスして登録する。1.1において、ファブリックCAは、登録証明書をクライアント160に送付する。2において、クライアント160は、ファブリックSDK162を用いて、ピアコンテナ180にアクセスすることによって、エンドーサ182からの署名を要求する。2.1において、エンドーサ182は、署名済みRWセット(読み出し/書き込みセット)を返信する。3において、クライアント160のファブリックSDK162は、RWセットおよびエンドーサの署名を含む署名済みTX(トランザクション)を、オーダリングコンテナ190のオーダリングサービスに提出する。4において、オーダ(orderer)192は、TXバッチをピアコンテナ180内のコミッタ184に配信する。オーダは、トランザクションをブロックに順序付けるノードの所定集合である。オーダリングサービスは、ピアプロセスとは無関係に存在し、先着順でネットワーク上の全てのチャネルのトランザクションを順序付ける。コミッタ184は、5および5.1において、元帳186およびワールドステート188を変更する。ファブリック認証局170を用いて、ピアコンテナ180、スマートコントラクトコンテナ166およびスマートコントラクト168、並びにオーダ192の署名および認可を確認することができる。さらに、スマートコントラクト168は、エンドーサ182と通信することができる。
【0077】
一実施形態において、システムは、カフカ(Kafka)クラスタをオーダリングサービスとして利用することができる。カフカは、セマンティクスの公開および加入をサポートする分散型ストリーミングサービスである。カフカクラスタは、複数のサーバ上で動作し、一連の記録をトピックと呼ばれるカテゴリに記憶する。各記録は、キー、値およびタイムスタンプを含む。したがって、カフカは、オーダリングサービスノード(OSN-n)およびカフカクラスタを含むオーダリングサービスとして使用されてもよい。オーダリングサービスクライアントは、複数のOSNに接続されてもよい。OSNは、互いに直接に通信しない。これらのオーダリングサービスノード(OSN)は、(1)クライアント認証を行い、(2)クライアントが簡単なインターフェイスを用いてチェーン1に書き込むことまたはチェーン1から読み取ることを可能にし、および(3)既存のチェーンを再構成するまたは新しいチェーンを作成するための構成トランザクションに対してトランザクションの選別および検証を行う。カフカ内のメッセージ(記録)は、トピックパーティションに書き込まれる。カフカクラスタは、複数のトピックを有してもよく、各トピックは、複数のパーティションを有してもよい。各パーティションは、継続的に付加される、順序づけられた不変のひと続きの記録である。OSNは、クライアント認証およびトランザクション選別を実行した後、特定のチェーンに所属する入来クライアントトランザクションを対応するチェーンのパーティションに中継することができる。次いで、クライアントトランザクションは、そのパーティションで実行され、全てのオーダリングサービスノードに対して共通なトランザクションの順序づけられたリストを返信することができる。
【0078】
一実施形態によれば、各ピアは、エンドーサおよびコミッタになることができる。設定項目(例えば、CORE_PEER_ENDORSER_ENABLED)は、ピアをエンドーサにすることができる。ピアがチャネルに参加すると、このピアは、このチャネルのコミッタになる。チェーンコードがピアにインストールされると、このピアは、このチェーンコードのエンドーサ候補になる。クライアントがトランザクションを提案する場合、クライアントは、(エンドーサ候補から)エンドーサになるピアを選択することができる。
【0079】
一実施形態によれば、オーダがブロックをピアに配布するための順序付けメカニズムは、以下の通りである。まず、ピア(例えば、リーダピア)は、自身のバージョン(最後のブロック番号)を送信することによって、オーダから新しいブロックを要求する。次に、オーダは、ピアのバージョンをチェックする。a)ピアのバージョンがオーダのバージョンよりも大きい場合、オーダの元帳が無くしており、イベントハブ(EventHub)から回復することができないことを示すエラーをピアに返信する(このシナリオにおいて、オーダは、適切な動作を継続することができない)。b)ピアのバージョンがオーダのバージョンより小さい場合、オーダは、RAMまたはローカルファイル内のローカル元帳からブロックを取り出し、ピアに返信する。c)両者が同様のバージョンを有する場合、オーダは、新しいブロックが利用可能になるまで中止する。イベントハブから切り出した新しいブロックが利用可能になると、オーダは、このブロックをローカルブロックファイルまたはRAMに入れ、次に、元帳からこのブロックを読み出す配布スレッドをピアに返信する。ピアは、このブロックを入手し、ローカル元帳にコミットし、ブロックの最新バージョンを他のピアにブロードキャストすることができる。
【0080】
BCSシステムアーキテクチャ
図1Bは、ブロックチェーンサービスを提供するシステムのファブリックに行われたトランザクションフローを示す。より具体的には、
図1Bは、一実施形態に従って、ブロックチェーンクラウドサービス(BCS)システムを示す。図示のように、ブロックチェーンクラウドサービスコンポーネントは、例えば、オラクルPaaSサービスマネージャ(PSM)プラットフォーム上で、計算スペース120(例えば、外部計算スペース)に作成される。システムへのアクセスは、PSM API122およびブロックチェーンREST API124によって仲介される。外部計算スペース120は、負荷分散サービスLBaaS(load balancing as a service)126を利用して、入来トランザクションを利用可能なリソースに適切に分散する。
【0081】
一実施形態によれば、BCSは、アプリケーションコンテナクラウドサービス128上のPSMプラットフォームを用いて構築されたアプリケーションコンテナ階層サービスである。BCSエンティティの各々は、別個のコンテナ上で動作する。各BCSエンティティは、1対1でアプリケーションコンテナと対応する。ブロックチェーンクラウドサービスは、上述したハイパーレッジャファブリックの特徴を実装する。基本的なファブリックネットワークを構築するコンポーネントに加えて、ブロックチェーンクラウドサービスにおいてハイパーレッジャファブリックを活用するためのいくつかのコンポーネントが開発されている。別個の挙動およびバイナリを用いて、これらのコンポーネントを配置する必要がある。クラウドスタックマネージャを用いて、ユーザに権限を与えることによって、ブループリントによってスタックと呼ばれる単一のユニットとして定義された全てのサービスを自動的に作成することができる。
【0082】
一実施形態において、BCSは、スマートコントラクトを実行するための分散型元帳プラットフォームを実装するためのハイパーレッガファブリック実装を提供する。BCSは、コンテナ技術を利用して、システムのアプリケーションロジックを含む「チェーンコード」と呼ばれるスマートコントラクトをホストする。
【0083】
一実施形態によれば、ファブリックの分散型元帳プロトコルは、ピアによって実行される。ファブリックは、2種類のピアを識別する。検証ピアは、コンセンサスの実行、トランザクションの検証、および元帳の管理に関与するネットワーク上のノードである。一方、非検証ピアは、(トランザクションを発行する)クライアントを検証ピアに接続するためのプロキシとして機能するノードである。非検証ピアは、トランザクションを実行しないが、トランザクションを検証することができる。ファブリックのいくつかの重要な特徴は、即時最終性を有し、チェーンコードと呼ばれる任意のスマートコントラクトを実行する許可型ブロックチェーンを含む。ユーザによって定義されたチェーンコードのスマートコントラクトは、コンテナの中でカプセル化され、システムチェーンコードは、ピアと同様のプロセスに実行される。ファブリックは、TLS証明書、登録証明書、およびトランザクション証明書を認証するための認証局(CA)をサポートすることによって、コンセンサスプロトコルおよびセキュリティを実装する。
【0084】
一実施形態によれば、BCSエンティティは、ACCS128を用いて階層化されたコンテナインスタンスで動作する。コンテナは、PSMの作成動作によって作成および/または作動される。ファブリックCAコンテナ130は、BCSファブリックCA(認証局)コンポーネントを提供するコンテナである。BCSピアコンテナ132は、元帳コンポーネントに対して読み出し/書き込み動作を実行するために、元帳コンポーネントを管理し、チェーンコードコンテナを実行するためのBCSピアネットワークエンティティが動作するコンテナである。BCSオーダコンテナ134は、トランザクションを全てのチャネルのブロックチェーンに順序付けるためのBCSオーダが動作するコンテナである。BCSチェーンコード実行コンテナ139は、ピアエンティティによって作成され、作動されるコンテナである。コンテナにおいて、チェーンコード実行ユニットは、親ピアエンティティと通信し、資産とブロックチェーン内の資産を変更するためのトランザクション命令との符号化を実行する。
【0085】
一実施形態によれば、BCSチェーンコードビルダコンテナ140は、ピアエンティティによって作成され、作動されるコンテナである。チェーンコード構築環境は、コンテナに設置および展開され、チェーンコード実行ユニットは、コンテナに構築される。ファブリックSDKクライアント106は、BCSにアクセスするための機能を提供する。また、ブロックチェーンクラウドサービスは、イベントハブクラウドサービス150、クラウドストレージサービス152、およびアイデンティティサービス154を利用する。オラクル(登録商標)ストレージクラウドサービスは、BCSのストレージサービスとして使用される。
【0086】
一実施形態によれば、ドッカ/ウイーブ(Docker/Weave)141は、コンテナサービスである。コンテナは、共有オペレーティングシステム上で単独に実行できるフォーマットでソフトウェアをパッケージ化する方法である。VMとは異なり、コンテナは、完全なオペレーティングシステムをバンドルせず、その代わりに、ソフトウェアの動作に必要なライブラリおよび設定を使用してバンドルする。これによって、効率的且つ軽量な自己内蔵型システムを作成することができ、ソフトウェアが配置場所に関係なく常に同様に動作することができる。
【0087】
一実施形態によれば、各BCSインスタンスは、異なる種類のノードから構成される。BCSインスタンスは、少数(例えば、0以上)から多くのピアノードを含むことができ、少数(例えば、0)から多くのオーダノードを含むことができる。各VMは、1つのBCSインスタンスを含み、各BCSインスタンスは、1つから複数のファブリックCAノードを含む。BCSゲートウェイについて、BCSインスタンスは、少数(例えば、0)から多くのBCSゲートウェイを含むことができる。BCSコンソールは、BCSインスタンスのコンポーネントである。各BCSインスタンスは、1つのみのBCSコンソールを含む。
【0088】
一実施形態によれば、以下でより詳細に説明するように、BCS管理サーバ(コンソール)136は、多くの監視機能、管理機能および表示機能をBCSスタックインスタンスに提供するためのBCSコンポーネントである。以下でより詳細に説明するように、BCSゲートウェイ(RESTプロキシ)138は、新しいBCSコンポーネントであり、REST APIインターフェイスを利用者/クライアントに提供する。利用者/クライアントは、REST APIインターフェイスを用いて、ファブリックにアクセスすることによって、トランザクションを実行する。
【0089】
一実施形態によれば、公衆アクセスクライアント100のPSMコンソールUI102は、プラットフォームサービスマネージャの管理を可能にする。BCSコンソールUI104は、BCS管理サーバの制御を可能にする。ファブリックSDKクライアント106、BCS RESTクライアント108、およびファブリックメンバシップクライアント110を含む様々な異なる種類のクライアントは、BCSサービスにアクセスすることができる。
【0090】
一実施形態によれば、上記に列挙した各種類のコンテナに、ブループリントを独立サービスタイプとして定義することができる。オラクルクラウドスタックマネージャは、ブループリントを用いて、単一のスタックユニットで全ての独立サービタイプの作成を自動化する。各BCSエンティティをサービスタイプとして定義する利点は、様々な実行エンティティを容易に更新および管理することである。アプリケーションコンテナ階層サービスは、4種類の動作、すなわち、作成サービス(CREATE_SERVICE)、削除サービス(DELETE_SERVICE)、スケールサービス(SCALE_SERVICE)、起動/停止/再起動(Start/Stop/Restart)をサポートする。これらの動作は、サービスごとに適用することが可能である。
【0091】
一実施形態によれば、ハイパーレッガファブリックネットワークにおいて、オーダリングサービスコンポーネントは、アパッチカフカ(Apache Kafka)を用いて、クラッシュフォールトトレラント方法でオーダリングサービスを提供し、複数のチェーンをサポートする。したがって、BCSクラウドサービスにおいて、オーダリングサービスコンポーネントは、(カフカのパワーを処理済みストリーミングデータプラットフォームとして配布し、オラクルの残りのクラウドと一体化することができる)オラクルイベントハブクラウドサービス(OEHCS)を使用する。
【0092】
図1Cは、実施形態に従って、BCSシステムを示す。より具体的には、
図1Cは、BCSランタイムを示す。
【0093】
一実施形態によれば、ゲートウェイベースのアプリケーション103および/またはファブリックベースのアプリケーション105などのクライアントは、インターネット107などのネットワークおよび(後述する)クラウドゲートを含むロードバランサLBaaS126などのフロントエンドを介して、AACSインスタンス128と通信することができる。入来コールは、(図面において太い破線として示された)REST通信、または特定の状況では(図では淡い破線として示された)入来gRPC通信を含むことができる。入来REST通信は、(REST API/RESTプロキシを含み得る)ゲートウェイ138、コンソール136、または(上述した)エージェントファブリックCA130に転送されてもよい。内部コール(gRPC)に変形/変換されたREST通信は、(エージェント/ピア132、エージェント/オーダ134、チェーンコード142、およびチェーンコードビルダ140を含む)ブロックチェーンファブリック/ハイパーレッジャのインスタンスとインターフェイスすることができる。一方、入来gRPC通信は、例えば、エージェント/ピア132およびエージェント/オーダ134に直接に転送され、ブロックチェーン/ハイパーレッジャとインターフェイスすることができる。
【0094】
一実施形態によれば、ACCSインスタンスにトランザクションが行われると、ACCSインスタンスは、例えば、REST通信を介して元帳をクラウドストレージに永続化することができ、またはREST通信を介してイベントハブと通信することができる。
【0095】
一実施形態によれば、図面は、1つのACCSインスタンスのみを示しているが、当業者なら、(例えば、ゲートウェイベースのアプリケーション103および/またはファブリックベースのアプリケーション105などの)クライアントが上述したBCSランタイムを介して通信することができるACCSインスタンスが1つ以上であってもよいことを容易に理解するであろう。
【0096】
図1Dは、一実施形態に従って、BCSシステムを示す。より具体的には、
図1Dは、BCSシステム内のコンポーネント濃度、すなわち、各BCSインスタンスに対するコンポーネントの比を示す。
【0097】
一実施形態によれば、各BCSインスタンス100aに対して、オーダ101aは、1:Nの比で提供され、ファブリックCAメンバシップ102aは、1:Nの比で提供され、BCS RESTプロキシ103aは、1:Nの比で提供され、BCSコンソール104aは、1:1の比で提供され、ピアコンテナ105aは、1:Nの比で提供されてもよい。
【0098】
各ピアコンテナは、トランザクションをシミュレートすることができるエンドーサと、同一のピアコンテナに形成され、元帳に変更を適用することができるコミッタとを含むことができる。
【0099】
一実施形態によれば、チェーンコード109aは、ピアコンテナに対して1:Nの比で提供されてもよい。また、ストレージ106aは、ピアコンテナおよびオーダに対してN:1の比で提供されてもよい。同様に、イベントハブ107aは、ピアコンテナおよびオーダに対してN:1の比で提供されてもよい。IDCS108aは、ファブリックCAメンバシップに対してN:1の比で提供されてもよい。
【0100】
ブロックチェーンクラウドサービス(BCS)ゲートウェイ
一実施形態によれば、BCSゲートウェイ(BCSGW)は、ファブリックSDKを用いて、ファブリックネットワークと通信するネットワークノードを含む。BCSゲートウェイは、HTTPS REST APIをクライアント側利用者に提供することによって、クライアントアプリケーションとBCSのファブリック要素との対話を可能にする。
【0101】
図2は、一実施形態に従って、ブロックチェーンクラウドサービスシステムのゲートウェイを示す。
図2に示すように、エンドユーザ200は、HTTPSを用いてアプリケーションアダプタ202と対話することによって、認証および認可を行う。アプリケーションアダプタ202は、クラウドゲート212(すなわち、LBaaS)などのLBaaSへのHTTPSを用いて、パブリッククラウド210にアクセスする。負荷分散サービス(LBaaS)は、入来トランザクションに対して実行される。クラウドゲート212は、HTTPSを用いて、トランザクションをBCSゲートウェイ222に渡す。BCSゲートウェイは、BCSファブリック220へのインターフェイスを提供する。このインターフェイスは、gRPCリモートプロシージャコールプロトコルを使用して通信する。
【0102】
一実施形態によれば、クラウドゲート212は、例えばOAuth2およびOpenIDコネクト規格を用いてウェブブラウザおよびREST APIリソースを保護する逆方向プロキシ「アクセス強制モジュール」または「ポリシ強制ポイント」である。IDCSは、内部でクラウドゲートを使用することによって、自身の管理UIおよびREST API(「IDCSウェブ層」と呼ばれる)を保護する。別の応用として、クラウドゲートOTDは、非IDCSまたはスタンドアローンとして知られるセミサポート/暫定セットアップにおいて、追加のインスタンスとして配置される。
【0103】
一実施形態によれば、OAuth/OpenIDベースの認証は、HTTP要求が「ユーザエージェント」ヘッダを含む場合、すなわち、HTTP要求がブラウザまたはモバイルアプリのようなUIからの場合にトリガされる(UIクライアントの)ユーザブラウザフローをサポートする。クラウドゲートは、ユーザにクレデンシャル(ユーザ名/パスワード)を提示し、クレデンシャルを検証し、その後、ブラウザからの後続のHTTP要求によって使用され得るOAuthセッションクッキを作成してユーザに返送する。また、OAuth/OpenIDベースの認証は、(プログラムクライアントの)リソースサーバフローをサポートする。このフローは、HTTP要求が認証「ベアラ」トークンヘッダを含む場合にトリガされる。クラウドゲートは、認証のためにトークンを検証する。
【0104】
一実施形態によれば、HTTP基本認証のために、クレデンシャル(ユーザ名/パスワード)は、各HTTP要求のHTTP認証「基本」ヘッダに含まれなければならない。クラウドゲートは、各HTTP要求のクレデンシャルを検証する。この方法は、UIクライアントおよびプログラムクライアントの両方に適用される。
【0105】
一実施形態によれば、マルチトークンフローは、特定のHTTP要求をカバーする自己適応方法である。HTTP要求が認証「基本」ヘッダを含む場合、クラウドゲートは、HTTP基本挙動を行う。HTTP要求が認証「ベアラ」ヘッダを含む場合、クラウドゲートは、リソースサーバフローと同様の挙動を行う。
【0106】
一実施形態において、BCSコンソールブラウザクライアントは、ユーザブラウザフローを利用する。実施形態において、システムは、BCSコンソールおよびゲートウェイプログラムクライアントに対して、クラウドゲートマルチトークン認証方法を使用することができる。プログラムクライアントは、HTTP基本認証を介してBCS REST APIを呼び出すことができる。
【0107】
一実施形態によれば、BCSゲートウェイ222は、元帳への読み取り/書き込み動作を実行するために、元帳を管理し且つチェーンコードコンテナを実行するネットワークエンティティであるピア224と通信する。ピアは、メンバによって所有され、管理される。BCSゲートウェイ222およびピア224は、オーダ226と通信する。オーダは、オーダリングサービスを提供する。オーダは、トランザクションをブロックに順序付けるノードの所定の集合である。オーダリングサービスは、ピアプロセスとは無関係に存在し、先着順でネットワーク上の全てのチャネルのトランザクションを順序付ける。ピア224およびオーダ226は、ファブリック認証局228と通信する。また、BCSゲートウェイ222は、BCS管理サーバ/コンソール230へのアクセスを提供する。
【0108】
一実施形態によれば、BCSは、オラクルクラウドなどのクラウドシステムに配置される。ゲートウェイは、ACCSコンテナに動作することができる。ゲートウェイは、ステートレスである。古いゲートウェイを強制終了して、新しいゲートウェイを起動することによって、ゲートウェイを更新することができる。BCSゲートウェイは、クライアントクエリを許可することができ、またはRESTfulプロトコルを介してファブリックチェーンコードを呼び出すことができる。BCSゲートウェイは、クライアントがHTTPS/RESTfulサービスを介してオラクルクラウド内のファブリックネットワークにアクセスすることを可能にする。BCSゲートウェイは、ファブリックSDKを用いてファブリックネットワークと通信するネットワークノードである。ファブリック内の通信は、gRPCを通信プロトコルとして使用する。BCSゲートウェイは、HTTPS/RESTful APIをクライアント側のクライアントに提供する。REST APIは、クライアントがファブリックSDKを用いてファブリック内で関数を呼び出すことを可能にする。
【0109】
一実施形態によれば、ゲートウェイは、ファブリックユーザに対して1対1の関係で提供されてもよい。全てのゲートウェイユーザは、1つの組織に所属し、全てのゲートウェイユーザは、1つのゲートウェイ内の1つのファブリックユーザにマッピングされる。1つのゲートウェイは、1つのみのファブリックユーザを構成する。
【0110】
一実施形態によれば、IDCSは、ゲートウェイ証明書およびゲートウェイユーザ(「アプリアダプタ」)証明書を発行する。これらの証明書は、組織CAによって署名される。ゲートウェイおよびゲートウェイユーザは、組織CAと共に配置されるため、HTTPSを用いて互いに検証することができる。
【0111】
一実施形態によれば、各エンドユーザは、「アプリアダプタ」を介してBCSGWにアクセスする。認証は、3段階である。すなわち、エンドユーザ200は、アプリアダプタ202によって認証され、アプリアダプタ202は、BCSゲートウェイ222によって、クライアント証明書を用いて認証され、BCSゲートウェイは、ファブリックネットワーク220内のピア224およびオーダ226によって認証される。
【0112】
一実施形態によれば、1つのコンテナは、1つのトムキャット(tomcat)サーバを稼働し、1つのファブリックユーザにマッピングされる1つのBCSゲートウェイを配置する。複数のアプリアダプタは、1つのゲートウェイに接続することができる。
【0113】
一実施形態によれば、異なるゲートウェイは、異なるファブリックユーザに関連付けられてもよい。1つのゲートウェイに接続するアプリアダプタのエンドユーザは、1つのファブリックユーザにマッピングされてもよい。
【0114】
一実施形態によれば、BCSGWは、オラクルクラウドで実行され、設定は、JSONファイルを用いてBCSコンソールによって設定される。管理者ユーザは、ピア、チャネルおよびチェーンコードの一部をゲートウェイに公開することができる。管理者ユーザは、コンソールを介してゲートウェイを起動する。ゲートウェイは、起動後に設定をリフレッシュしない。管理者ユーザは、チェーンコードのエンドーサを設定することができる。エンドユーザは、ポリシを知らず、ゲートウェイは、チェーンコードポリシをチェックしない。
【0115】
一実施形態によれば、BCSGWは、BCSコンソールによって起動される。BCSコンソールは、BCSGW設定ファイルを作成し、BCSGWパッケージを用いて新しいゲートウェイを起動する。起動時に、起動スクリプトは、BCSGW設定ファイルをチェックし、トムキャット用の設定ファイル(例えば、トムキャット設定ファイル)を変更してから、トムキャットを起動する。トムキャットは、BCSGWのスレッドを起動し、このスレッドは、各チャネルの設定ファイルを読み出すことによって、チャネルオブジェクトを作成し、オーダ、ピアおよびイベントハブとの接続を作成する。異なるチャネルは、オーダ/ピア/イベントハブへの異なる接続を有する。イベントハブは、ピアの第2のポートである。ゲートウェイは、このポートに接続することによって、トランザクションの結果を取得する。トムキャットサーブレットコンテナは、クライアント要求をリッスンすることができる。チェーンコードクエリ方法の場合、BCSGWは、要求をチャネルの全てのピアに送信し、第1の結果のみを使用する。チェーンコード呼び出し方法の場合、BCSGWは、要求をチャネルの全てのエンドサに送信し、全てのエンドサのうちの1つが成功を返信する場合、BCSGWは、トランザクションをチャネルの全てのオーダに送信する。
【0116】
一実施形態によれば、非同期APIをサポートすることができる。ピアは、2つのポートを開放することができる。1つのポートは、イベントを交換するためのポートである。ゲートウェイは、ピアのイベントポートに接続することができる。ゲートウェイは、1つのチャネルの1つのイベントポートに接続すればよい。通常のクライアントAPIは、同期している。トランザクションは、数秒かかる場合があり、クライアントは、応答を待つ必要がある。非同期イベントをクライアントに送信することは、V1プランに含まれない。同期トランザクションAPIに加えて、ゲートウェイは、非同期トランザクションAPI「非同期呼び出し」を提供する。
【0117】
一実施形態において、非同期APIは、以下のように動作することができる。クライアント要求のパラメータをチェックした後、ゲートウェイは、トランザクションIDをクライアントに返信する。したがって、クライアントは、起動されたトランザクションが終了していないことを認識することができる。ゲートウェイは、トランザクションを継続して処理するために、バックグラウンドスレッドを起動する。クライアントは、未完了トランザクションを追跡することができる。ゲートウェイは、クライアントがトランザクションIDを用いてトランザクション状態をクエリするための「トランザクション」APIを提供することができる。
【0118】
一実施形態によれば、クライアントログインをサポートすることができる。BCSGWは、HTTPSプロトコルをサポートすることができ、安全でないHTTPアクセスを拒否することができる。BCSGWは、証明書を用いてアプリアダプタまたはSALTを認証する。アプリアダプタは、エンドユーザを認証することができる。HTTPSクライアント証明書認証を使用するように、トムキャットを設定する必要がある。キーストアファイルは、クライアントがBCSコンソールによって提供されることを検証するためのBCSGW証明書およびCA証明書を含む。BCSゲートウェイは、クライアントがアクセスするためのBCS RESTインターフェイスを提供する。
【0119】
永続化-ストレージクラウド
一実施形態によれば、ハイパーレッジャファブリックプロジェクトコードは、元帳をローカルファイルシステムに格納するためのブロック、および他のランタイムデータ、例えば、ブロックインデックス、ワールドステート、履歴、および(全ての元帳IDおよび回復ステータスを保持する)元帳プロバイダデータベースを同一のローカルファイルシステムに格納されているレベルDBに格納するためのブロック含む。ACCSにおいて、コンテナファイルシステムは、一過性である。これは、何らかのハードウェア障害によって、コンテナが停止され、新しいVM上で新しいコンテナが再起動される場合、ファイルシステムの内容が失われる可能性があることを意味する。全てのコンテナが失われた場合、元帳を回復することができない。したがって、元帳データをACCSコンテナの外部に格納しなければならない。このため、永続化ソリューションは、上述したハイパーレッジャファブリックのコンポーネントによって使用されるオブジェクト格納サービスとして提供される。
【0120】
一実施形態によれば、BCSにおいて、永続化ソリューションは、ストレージクラウドサービス、例えば、オラクルストレージクラウドサービスを利用する。元帳は、オブジェクトストアにバックアップされる。元帳は、コンテナファイルシステムに書き込まれないが、オブジェクトストレージにバックアップされる。インデックスおよびワールドステートは、コンテナファイルシステムを用いて記録され、コンテナを再起動する場合、ストレージクラウドサービスから回復されることができる。オラクルストレージクラウドは、インフラストラクチャサービス(IaaS)製品であり、ファイルおよび非構造化データを記憶するためのエンタープライズ級の大規模なオブジェクト記憶ソリューションを提供する。
【0121】
図3は、一実施形態に従って、ブロックチェーンクラウドサービスシステムの永続化を示す。
図3に示すように、ACCSインスタンス300は、複数のコンテナを含む。コンテナは、例えば、元帳/ブロックチェーン312、314を有するオーダコンテナ302、304を含む。元帳/ブロックチェーン312および314は、RESTインターフェイスを介してオブジェクトストレージ320にバックアップされる。オブジェクトストレージ320は、例えば、クラウドストレージサービスであってもよい。
【0122】
オブジェクトストレージは、各オーダの元帳を永続化するために使用される。オーダがブロックをピアに配布するための現行メカニズムは、以下の通りである。まず、ピアは、自身のバージョン(最後のブロック番号)を送信することによって、オーダから新しいブロックを要求する。次に、オーダは、ピアのバージョンをチェックする。a)ピアのバージョンがオーダのバージョンよりも大きい場合、オーダの元帳が無くしており、イベントハブ(EventHub)から回復することができないことを示すエラーをピアに返信する(このシナリオにおいて、オーダは、適切な動作を継続することができない)。b)ピアのバージョンがオーダのバージョンより小さい場合、オーダは、RAMまたはローカルファイル内のローカル元帳からブロックを取り出し、ピアに返信する。c)両者が同様のバージョンを有する場合、オーダは、新しいブロックが利用可能になるまで遮断する。イベントハブから切り出した新しいブロックが利用可能になると、オーダは、このブロックをローカルブロックファイルまたはRAMに入れ、次に、元帳からこのブロックを読み出す配布スレッドをピアに返送する。ピアは、このブロックを入手し、ローカル元帳にコミットし、ブロックの最新バージョンを他のピアにブロードキャストすることができる。
【0123】
一実施形態によれば、上記のプロセスによって、オーダまたはイベントハブのいずれかは、全てのブロックを永続化することができる。上述したように、イベントハブは、時間制限保持をサポートする。イベントハブがブロックの保存を実行することができる場合、オーダは、元帳タイプをRAMまたはファイルに設定することができる。オーダが再起動され、元帳が失われた場合、オーダは、イベントハブから記録を再生し、バッチメッセージをブロックに切断することによって、元帳を再構築することができる。イベントハブが時間制限保持のみをサポートする場合、いったんオーダが再起動され、元帳が失われると、イベントハブ内の最初の記録が元帳の真の記録ではないため、元帳を正しく再構築することはできない。この場合、オーダは、チャネル情報を含む最初のブロックが失われ、バージョン番号(最後のブロック番号)も正しくないため、古いチャネルを起動することができない。
【0124】
一実施形態によれば、各オーダは、全てのチャネルIDをオブジェクトストレージに永続化すると共に、各ブロックをオラクルストレージに保存することができる。ピアは、チャネル情報を有するジェネシスブロック(genesis block)のみを永続化する。他のブロックデータが失われると、ピアは、オーダから他のブロックデータを読み取ることができる。
【0125】
一実施形態によれば、ACCSインスタンス300は、元帳316およびインデックス326を含むピアコンテナ306と、元帳318およびインデックス328を含むピアコンテナ308とを含むことができる。ピアは、5種類のランタイムデータ、すなわち、トランザクションログ(ブロックファイル)、ブロックファイルインデックス(レベルDB)、元帳プロバイダDB(レベルDB)、状態データベース(レベルDBまたはカウチDB)、および履歴(レベルDB)を生成する。全てのトランザクションデータは、ローカルファイル内のリンク付きブロックとしてトランザクションログに格納され、オラクルストレージクラウドサービスに永続化される。元帳プロバイダDBは、全ての元帳IDおよびステータスをレベルDBに永続化する。元帳IDは、ピアが所属するチャネルを識別するための特有IDであり、オラクルストレージクラウドサービスに保存されなければならない。実行時に、ピアは、他のものを自動的に回復することができ、ローカルファイルシステムに保存することができる。
【0126】
一実施形態によれば、オラクルストレージクラウドサービスは、ファイルをオブジェクトにアップロードするまたはオブジェクトからファイルをダウンロードするためのREST APIを提供する。新しいブロックを作成する場合、まず、従来と同様にブロックをローカルブロックファイルに書き込むが、各ファイルに1つのみのブロックを書き込むことで異なる。次に、このブロックファイルをオブジェクトとしてオラクルストレージにアップロードする。アップロードが失敗した場合、ローカルファイルの変化は、ロールバックされ、エラーを発信者に返信する。
【0127】
一実施形態によれば、オーダがブロックファイルインデックスの最新チェックポイントを更新するときに、その情報をオラクルストレージに永続化してから、ローカルレベルDBを更新する。この操作が失敗した場合、エラーを発信者に返信することができる。この情報は、ブロックファイルインデックスの回復に使用される。オラクルストレージにおいて、各ピアおよびオーダは、MSP IDおよびノードIDの組み合わせからなる固有のコンテナ名を有する。オブジェクト名は、プレフィックスとしてのチャネル名とブロックファイル名との組み合わせである。さらなる詳細は、オラクルストレージの命名規則を参照する。
【0128】
一実施形態によれば、オプションとして、元帳プロバイダDBをオラクルストレージに保存することができる。元帳プロバイダDBが更新されると、レベルDBの全体をオラクルストレージクラウドサービスに複製することができる。このファイルが非常に小さく且つ更新が頻繁ではないため、複製によるオーバーヘッドを無視することができる。コンテナを再起動する場合、オラクルストレージクラウドサービスからコンテナをダウンロードすることができる。新しいコンテナからオーダを再起動する場合、まず、オーダは、ストレージオブジェクトからチャネルIDをダウンロードし、その後、オーダは、チャネルIDに従って、ストレージから最新のチェックポイントを取得する。次に、オーダは、最初のブロックから最後のブロックまでのブロックインデックスを回復する。この間、ブロックファイルは、1つずつダウンロードされる。その後、オーダは、状態DBおよび履歴DBを回復する。新しいコンテナからピアを再起動する場合、まず、ピアは、元帳プロバイダDBをダウンロードし、その後、全ての元帳IDを取得することができる。次に、ピアは、元帳IDに従って、ストレージから関連するジェネシスブロックを取得する。ピアは、ジェネシスブロック内の設定で開始し、クエストをオレンダに送信することによって、他のブロックデータを取得する。ピアは、これらのブロックを入手した後、ブロックインデックス、状態DBおよび履歴DBを回復する。
【0129】
一実施形態によれば、ローカルブロックファイルは、読み取りキャッシュとして機能する。クエリは、まずローカルからデータを読み取り、データがローカルに存在しない場合、オブジェクトストレージからデータをダウンロードする。元帳のほかに、チェーンコードのソースコードをオラクルストレージに永続化する必要がある。チェーンコードを現行のファブリックにインストールした後、ソースコードは、符号化され、ピアに格納される。ピアは、各呼び出しまたはインスタンスのチェーンコードコンテナをチェックし、コンテナが存在しない場合、ソースコードからコンテナを再構築する。したがって、各チェーンコードをインストールするたびに、ソースコードをオラクルストレージにアップロードすることができ、ディスク障害からピアを再起動するときに、オラクルストレージからソースコードをダウンロードすることができる。
【0130】
BCS:SDKベース設定ファイルの操作および作成後の配置
一実施形態によれば、設定ファイルおよび配置機能は、ピア、オーダ、CAサーバ、およびチェーンコードを含むアプリケーションを配置または更新するときに、アプリケーションに関する設定を配置、生成、更新、および取得する。これらの機能は、BCSコンソール(Node.js)およびファブリックコンテナ(ピア/オーダ/チェーンコードコンテナ)の両方に常駐する。UIから要求されると、これらの機能は、設定を取得/更新し、必要に応じてSDK APIを呼び出すことによって、設定を変更する。BCSコンソールバックエンドの一部としてのこのコンポーネントは、BCSコンソールUI、IDCSバックエンドSDK、および全てのBCSアプリケーションと対話することによって、UIを操作するためSDKを提供し、要求された設定を取得/更新する。また、このコンポーネントは、BCSアプリケーションの作成を補助する。BCS作成コンポーネントは、BCSアプリケーションを、PSMを用いて作成されたVMのドッカ(docker)コンテナに配置する。この特徴は、BCSコンソールUIのSDK APIを実装し、BCS作成コンポーネントは、後期作成段階において、BCSアプリケーション構成を取得または更新し、配置する。作成システムは、後期作成段階において、CAサーバ、オーダ、ピアなどのBCSアプリケーションをドッカ/スウォーム(swarm)に配置する。VMは、起動時に、起動スクリプトを呼び出すことによって、後期作成作業およびVM初期作業を行う。
【0131】
一実施形態によれば、設定ファイルは、ピア、オーダ、ファブリックCA、およびBCSゲートウェイを含むファブリックコンポーネントに提供される。BCSアプリケーションパッケージ、設定、およびチェーンコードは、クライアントのストレージクラウドサービスに保存される。
【0132】
一実施形態によれば、作成システムは、全てのリソースの割り当てを行う。リソースは、VM、ネットワーク、およびストレージを含む。
【0133】
一実施形態によれば、作成システムは、全てのリソース割り当て情報をストレージサービスに保存する。この情報は、VM番号および関連するネットワークアドレス/アカウント証明、各VM内のBCSアプリケーションの番号および種類、公衆IPおよび内部IPを含む。また、作成システムは、(VM間でアクセス可能な)コンテナ用の十分な内部IPアドレスを有する。
【0134】
一実施形態によれば、BCS作成コンポーネントが作成作業を完了した場合、VM起動スクリプトは、起動してスウォームを呼び出すことによってアプリケーションコンテナを配置し、コンテナ起動シェルスクリプトは、コンテナ内で初期動作を実行する。
【0135】
一実施形態によれば、BCSコンソールは、作動すると、ストレージサービスから設定を取得し、UIからのユーザ入力をストレージサービスに保存し、その後、再起動コマンドをスウォームに送信する。
【0136】
一実施形態によれば、必要なセキュリティ証明書は、IDCSに保存されてもよく、IDCSから取得されてもよい。
【0137】
一実施形態によれば、BCSコンソールバックエンドは、スウォームを用いて、BCSアプリケーションと通信することができる。
【0138】
一実施形態によれば、BCSアプリケーションコンテナが起動されると、BCSアプリケーションは、設定の詳細を収集することによって、アプリケーション種類(ピア、チェーンコードコンテナまたは他のもの)を判断し、必要な設定をロードすることができる。
【0139】
一実施形態によれば、このコンポーネントは、設定を更新し、BCSアプリケーション起動シェルコードを提供する。BCSによる設定ファイルの取得/更新動作は、いくつかのステップを含む。まず、BCSコンソールは、起動されると、ストレージから設定を取得し、更新を必要とする場合、設定(シェルおよびnode.js)をストレージに保存する。BCSアプリケーションコンテナが起動されると、まず、(各ドッカコンテナ内の)起動スクリプトが起動し、その後、アプリケーションの種類に関する設定を取得し、IDCS(シェル)からアプリ証明書を取得する。BCSコンソールUIは、BCSアプリケーションを再起動する場合、コンテナ内のアプリケーションを再起動するためのメッセージをドッカ/スウォームに送信する。
【0140】
一実施形態によれば、BCSコンソールは、ステートレスであり、起動されると、全てのBCSインスタンス設定を収集し、BCSアプリケーションに接続すると共に、BCSアプリケーションを監視することができる。設定は、バックエンドAPIを介してストレージサービスから取得される。設定が変更されると、BCSコンソールは、バックエンドAPIを呼び出すことによって、設定をストレージサービスに保存し、関連するアプリケーションを再起動する。クライアントがBCSコンソールUIを介して設定項目を変更すると、UIは、設定をキー/値データにエンコードし、バックエンドコードは、それをファイルに変換し、ストレージサービスに保存する。BCSコンソールは、BCSアプリケーションを監視、起動および停止することができる。起動コマンドおよび停止コマンドは、ドッカ/スウォームAPIを用いて、この機能を実現する。
【0141】
ファブリックネットワークの配置
一実施形態によれば、ファブリックネットワークは、以下のエンティティ、すなわち、ピア、クライアント、オーダリングサービス、およびこれらのエンティティ間の通信を容易にするためのプロトコルセットを含む。組織は、ファブリックネットワークの関係者を構成する論理エンティティまたは企業である。ファブリックネットワークは、複数の参加組織を有する。メンバは、ネットワークの固有のルート証明書を所有する法的に独立するエンティティである。ピアノードおよびアプリケーションクライアントなどのネットワークコンポーネントは、メンバにリンクされる。各組織は、1つ以上のメンバを有してもよい。1つの組織は、オーダおよびピアの両方を構成することができ、オーダのみまたはピアのみを構成することができる。
【0142】
ファブリックネットワークを配置するための第1のステップは、参加者を定義することである。このステップは、ファブリックネットワークの帯域外で行われる。ファブリックネットワークの全ての参加組織は、ネットワークの構成、例えば、オーダノードを構成する組織またはピアノードを構成する組織を協議し、決定する。オーダノードを構成する各組織は、オーダサーバのルート証明書を公開する。ピアノードを構成する各組織は、ピアサーバのルート証明書を公開する。クライアントを含む各組織は、クライアントのルート証明書を公開する。クライアントは、1つの組織においてピアから異なるメンバに分けることができる。
【0143】
一例として、4つのバンク(バンク1、バンク2、バンク3、およびバンク4)は、バンク1およびバンク2によって所有されているオーダノードを含むオーダリングサービスを用いて、ブロックチェーンネットワークを配置するとする。バンク1は、このネットワークのオーダのみを構成する。各バンクは、ファブリックネットワークの組織である。すなわち、バンク1は、1つのメンバ、オーダ(ルート証明書1)を有する。バンク2は、3つのメンバ、すなわち、クライアント(ルート証明書21)、ピア(ルート証明書22)、およびオーダ(ルート証明書23)を有する。バンク3は、2つのメンバ、すなわち、クライアント(ルート証明書31)およびピア(ルート証明書32)を有する。バンク4は、2つのメンバ、すなわち、クライアント(ルート証明書41)およびピア(ルート証明書42)を有する。
【0144】
参加者を定義した後、オーダおよびピアの証明書を作成する。各オーダまたはピアは、それ自体を識別するための(秘密キーおよび署名証明書)対を必要とする。各メンバは、ルート証明書を用いて、それ自体のファブリックCAサーバを構成および起動し、CLIまたはSDKを用いて、CAサーバに要求することによって、当該メンバの各オーダ/ピアサーバの(秘密キーおよび署名証明書)を作成することができる。BCSは、証明書を作成することができるファブリックCAサーバを提供する。しかしながら、ファブリックCAサーバは、証明書を作成するための唯一の手段ではない。ユーザは、他のCAシステムを用いて、証明書を作成することができる。したがって、ファブリックCAサーバは、ファブリックネットワークの必須コンポーネントではない。
【0145】
オーダおよびピアの証明書を作成した後、システムチャネルを作成することによって、ファブリックネットワークを起動する。オーダリングサービス(従って1つのファブリックネットワーク)のためにシステムチャネルが1つのみであるため、作成される(より正確には起動される)システムチャネルは、第1のチャネルである。システムチャネルは、ファブリックネットワークの以下の構成、すなわち、1つのオーダリングサービスと、1つ以上のコンソーシアムとを定義する。1つのオーダリングサービスは、1つ以上のオーダ組織(各組織は、MSP IDおよび証明書を含む)と、オーダリングサービスの属性(例えば、ソロまたはカフカなどの種類、オーダのアドレス、バッチサイズ/タイムアウト)と、(チャネルを作成するための)ポリシとを含む。各コンソーシアムは、1つ以上のピア組織を含み、このファブリックネットワークに参加することを望む各ピア組織は、コンソーシアムのうちの1つにおいて定義されなければならない。各組織は、MSP ID、証明書およびアンカーピアを含む。
【0146】
ファブリックネットワークのシステムチャネルが起動された後、システムチャネルのジェネシスブロック(チェーン内の第1のブロック)が作成される。オーダリングサービスの管理者は、システムチャネル用のジェネシスブロックを作成する。ジェネシスブロックは、設定ファイル生成(configtxgen)ツールによって(ファイルとして)作成されてもよく、またはオーダ起動時に(一時的に)作成されてもよい。設定ファイル生成ツールを用いてジェネシスブロックを作成する場合、入力としての設定ファイルconfigtx.yamlを作成しなければならない。このファイルは、以下の情報、すなわち、ファブリックネットワーク内の全てのオーダ組織のルート証明書と、全てのピア組織のルート証明書と、オーダの種類、アドレス、バッチタイムアウト、バッチサイズおよびカフカを含むオーダリングサービスの属性と、ポリシと、チャネル配信要求を認証および検証するためのチャネルリーダと、チャネルブロードキャスト要求を認証および検証するチャネルライタと、チェーン作成要求を評価するためのチェーン作成者と、チャネル再構成要求を認証および検証するための管理者とを含む。
【0147】
オーダリングサービスの管理者は、設定ファイルおよびジェネシスブロックを用いて、オーダサーバを起動する。換言すれば、ジェネシスブロックを用いて、システムチャネルを作成する。オーダサーバを起動するために、リッスンアドレス/ポート、元帳種類、ローカルMSP(秘密キー、署名証明書)を含む設定ファイルorderer.yamlが必要である。オーダリングサービスを提供する各組織は、(ジェネシスブロックを指定することなく)自身のオーダサーバを起動する。
【0148】
ピアノードを構成する各組織は、ピアを識別するためのローカルMSP(秘密キー、署名証明書)、およびリッスンアドレス/ポート、ブートストラップピア、ゴシップ属性などのピア属性を特定するための各ピアの設定ファイル(default location/etc/hyperledger/fabric/core.yaml)を用意して、ピアサーバを起動する。
【0149】
オーダおよびピアを起動した後、(チャネルを作成する権利を有する)チャネル管理者は、ファブリックCLIまたはSDKを用いて、次の入力、すなわち、(システムチャネルに既に定義された)1つのコンソーシアム、およびコンソーシアム内の1つ以上のピア組織を含むチャネルを作成するようにオーダに要求する。各参加組織は、ファブリックCLIまたはSDKを用いて、ピアの一部を新しく作成されたチャネルに参加させる。
【0150】
実施例:BCS上のファブリックネットワークの配置
図4は、BCS上のファブリックの例示的な配置を示す。
【0151】
より具体的には、図面および説明は、BCS上でファブリックネットワークを配置するためのステップを説明する。この例において、4つのエンティティA、B、C、およびDがファブリックネットワークを作成および参加することを望んでいる。4つのエンティティは、オフラインで議論し、様々なエンティティの責任を決定する。各エンティティは、OPC上で1つ以上のBCSインスタンスを作成する。
【0152】
一実施形態によれば、エンティティAは、オーダとピアの両方を提供する。エンティティAは、2つのインスタンス、すなわち、オーダのオーダ_組織1 401と、ピアのピア_組織1 421とを作成する。エンティティAは、ファブリックネットワークの作成にも関与する(なお、オーダのみは、ファブリックネットワークを作成することができる)。オーダリングサービス400は、オーダ_組織1 401と、オーダ_組織2 402と、カフカクラスタ410とを含む。
【0153】
一実施形態によれば、エンティティBは、オーダとピアの両方を提供する。エンティティBは、2つのインスタンス、すなわち、オーダのオーダ_組織2 402と、ピアのピア_組織2 422とを作成する。
【0154】
一実施形態によれば、エンティティCは、ピアのみを提供する。エンティティCは、インスタンスピア_組織3 423を作成する。
【0155】
一実施形態によれば、エンティティDは、ピアのみを提供する。エンティティDは、インスタンスピア_組織4 424を作成する。
【0156】
一実施形態によれば、各BCSインスタンスの管理者は、BCSコンソールから、現在の組織のCA証明書および管理者証明書を収集する。各ピア組織の管理者は、現在のピア組織のアンカーピアを特定し、アンカーピアのIP/ポートを収集する。4つのエンティティは、オフラインで、収集された全ての情報を互いに交換する。
【0157】
一実施形態によれば、オーダ_組織1の管理者は、BCSコンソールから、前のステップで収集された情報、すなわち、各組織のCA証明書および管理者証明書書、および各ピア組織のアンカーピアを用いてシステムチャネルを作成することによって、ファブリックネットワークを作成する。バックエンド作業は、ファブリックツールを呼び出すことによって、ジェネシスブロックを作成するステップと、ジェネシスブロックを用いてオーダを設定することによって、システムチャネルを作成するステップとを含む。
【0158】
一実施形態によれば、各ピア組織の管理者は、BCSコンソールから、収集された他の組織のCA/管理者証明書を追加するように全てのピアノードの設定を更新し、全てのピアノードを再起動することによって、ファブリックネットワークに参加する。
【0159】
一実施形態によれば、新しい組織がシステム内の既存のファブリックネットワークに参加することを可能にする方法が提供される。また、ファブリックネットワークを作成/参加するため、例えばファブリックを形成する前のオフラインアクションを保護するために、参加者間の通信を容易にし且つユーザが取り扱い簡単な方法を提供することができる。
【0160】
チェーンコード(スマートコントラクト)コンテナ
一実施形態によれば、上述したように、チェーンコードは、1つ以上の資産と、資産を変更するためのトランザクション命令(ビジネスロジック)とを定義するソフトウェアを含むことができる。チェーンコードは、キー値対または他の状態データベース情報を読み取るまたは変更するための規則を実行する。チェーンコードの機能は、元帳の現在の状態データベースに対して実行され、トランザクション提案によって作動される。チェーンコードの実行は、ネットワークに提出され、全てのピア上の元帳に適用される一組のキー値の書き込み(書き込みセット)をもたらす。
【0161】
一実施形態によれば、情報の一貫した更新をサポートするためおよび特定の元帳機能(トランザクション、クエリなど)を可能にするために、ブロックチェーンネットワークは、スマートコントラクトを使用して、制御された元帳アクセスを提供する。スマートコントラクトは、情報をカプセル化し、ネットワーク全体にわたってその情報を簡単に複製することだけでなく、参加者がトランザクションの特定部分を自動的に実行できるように書かれてもよい。
【0162】
一実施形態によれば、ハイパーレッジャファブリックスマートコントラクトは、チェーンコードで書かれ、ブロックチェーンの外部のアプリケーションが元帳と対話する必要があるときに、そのアプリケーションによって呼び出される。殆どの場合、チェーンコードは、トランザクションログではなく、ワールドステートである元帳のデータベースコンポーネントのみと対話する(例えば、データベースを検索する)。
【0163】
一実施形態によれば、ハイパーレッジャファブリックは、ドッカエンジンを用いてチェーンコードを構築し、チェーンコードを配置し、チェーンコードを実行する。本節は、ファブリックのアーキテクチャ、およびBCSのACCS階層化モデルに統合する方法を説明する。
【0164】
一実施形態によれば、ファブリックは、以下のようにユーザチェーンコードを配置し、管理する。まず、一過性CC環境コンテナにおいてチェーンコードを構築する。次に、チェーンコードをソースコードとしてビルダコンテナに転送し、静的にリンクされた必要なライブラリ(「Java(登録商標)ビルド」)でコンパイルし、バイナリとしてピアに返送する。静的なリンクは、実際のチェーンコードコンテナをできる限り小さくすることを可能にする。その後、チェーンコードイメージおよびコンテナを構築し、起動する。チェーンコードコンテナは、ピアが停止するまたはチャネルが終了するまで、動作し続ける。チェーンコードコンテナがクラッシュするまたは強制終了される場合、イメージが存在すれば、次の呼び出しで再起動される。この設計の場合、1つのピアおよびチャネルは、1つのチェーンコードドッカコンテナを有する。チェーンコードは、ピアに明示的にインストールされる。すなわち、チェーンコードは、必ずしも、チャネルに参加している全てのピアにインストールされなくてもよい。
【0165】
一実施形態によれば、ユーザは、ピア、オーダ、およびチェーンコードなどのコンポーネントを容易に配信することができるファブリックネットワークをACCS階層コンテナに配置することができる。ローカルブロックストレージが信用できる回復方法ではなく、ACLSコンテナのチェーンコードバイナリをクラウドストレージに保存する必要があるため、チェーンコードランタイム環境コンテナ(ccenv)は、動的に作動される。チェーンコードバイナリは、構築されると、コンテナクラッシュの場合に回復するためにクラウドストレージにアップロードされる。
【0166】
一実施形態によれば、各チェーンコードの相互作用は、チェーンコードの様々な機能に対応する。唯一の制約は、チェーンコードをインスタンス化するまで、呼び出すまたはクエリすることができないことである。また、呼び出されると、動作していないチェーンコードコンテナは、再起動される。
【0167】
図5は、一実施形態に従って、チェーンコードアーキテクチャを示す。より具体的には、
図5は、一実施形態に従って、クライアント530が、ACCS環境500において、チェーンコードをインストールし、トランザクションを実行することを可能にするチェーンコードアーキテクチャを示す。ステップ1において、クライアント530は、チェーンコードのソースコードをピア1 510にインストールする。まず、一過性CC環境コンテナにおいてチェーンコードを構築する。クライアント530が「インストール」を実行するときに、クライアント530は、ビルダエージェントを自動的に起動するビルダコンテナを起動し、ビルダコンテナが初期化を終了するのを待って、ピアを介してチェーンコードのソースコードをビルダコンテナに送信する(ステップ2)。ビルダエージェントは、チェーンコード(Javaビルド)を構築する。チェーンコードをソースコードとしてビルダコンテナに転送し、静的にリンクされた必要なライブラリ(「Javaビルド」)でコンパイルし、バイナリとしてピアに返送する。静的なリンクは、実際のチェーンコードコンテナをできる限り小さくすることを可能にする。チェーンコードパッケージ(tgzファイル)は、いったん構築されると、クラウドストレージ560にアップロードされる(ステップ3)。ビルダエージェントは、後で参照するために、クラウド記憶位置をピアに送信する(ステップ4.2)。
【0168】
一実施形態によれば、ピア510は、次いで、PSM REST APIを用いて、CC環境をACLS(アクセス制御リスト)コンテナ520として起動する。チェーンコードイメージおよびコンテナを構築し、起動する。チェーンコードコンテナは、ピアが停止するまたはチャネルが終了するまで、動作し続ける。ピア510は、チェーンコードID、(チェーンコード登録用)セルフIPおよびクラウドストレージロケーションをACLSコンテナに渡し開始する(ステップ4.1)。ピアは、チェーンコードの起動または設定期間の後のタイムアウトを待つ。CC環境は、チェーンコードを起動する。起動されると、チェーンコードは、それ自体をピアに登録する(ステップ4.3)。これによって、登録時に確立された接続を用いて、トランザクションにおいてチェーンコードを呼び出すことができる(ステップ5)。
【0169】
一実施形態によれば、ビルダコンテナ550は、単純なREST型サーバを含む。ビルダコンテナ550は、ビルダエージェント553を含む。ビルダコンテナ550は、起動されると、チェーンコードを構築するための要求をリッスンする。ビルダコンテナ550が構築リスト、例えば、ベース64で符号化したソースコードをボディとするPOST呼び出しを受信すると、ベース64は、ソースコードを復号し、チェーンコードソースコードをローカルファイルシステムに保存する。ビルダエージェント553は、ソースコードに対して「Javaビルド」を行う。「Javaビルド」が成功した場合、ビルダエージェント553は、バイナリをパッケージ化し、クラウドストレージ560にアップロードする。また、ビルダエージェントは、チェーンコード位置をピアに送信する。「Javaビルド」が失敗した場合、エージェントは、エラーおよび理由をピアに送信する。
【0170】
BCS管理コンソール
上述したように、BCSの各インスタンスは、管理コンソールを含み、管理コンソールを用いて、BCSゲートウェイ、BCSノード、およびBCSチャネルを含むBCSインスタンスを管理および監視することができる。
【0171】
一実施形態によれば、管理コンソールを提供するためのシステムは、スクリプトランタイム環境、例えばNode.jsに動作するウェブアプリケーションを含むことができる。ウェブアプリケーションは、グラフィカルユーザインターフェイスフレームワークおよびウェブフレームワーク上で構築することができ、BCSインスタンス内の様々なノードまたはサービスと通信するための複数のカスタム機能またはAPIを含むことができる。ウェブアプリケーションは、BCSインスタンス内の様々なノードまたはサービスからの情報をビューオブジェクトに読み込み、コンソールユーザインターフェイスに表示することができる。また、管理コンソールは、BCSインスタンス内の1つ以上のノードを起動、停止、および更新するための機能を管理者に提供することができる。管理REST APIセットは、ウェブアプリケーションによって提供された機能と同様の機能をサポートするために、スクリプトランタイム環境によって提供されてもよく、またはスクリプトランタイム環境によってアクセスされてもよい。
【0172】
一実施形態によれば、システムは、ウェブアプリケーションによって提供されたウェブインターフェイスを介して、または管理REST APIセットを用いて書かれたカスタムRESTクライアントアプリケーションを介して、関連するBCSインスタンスを容易に監視および管理することができる。
【0173】
一実施形態によれば、BCS管理者は、管理コンソールを介して、1つ以上のピアノード、1つ以上のオーダノード、1つ以上のファブリックCAノード、1つ以上のBCSゲートウェイノード、チャネル、および1つ以上のチェーンコードを含む、BCSインスタンスの複数のコンポーネントを管理することができる。
【0174】
一実施形態によれば、BCSコンポーネントを管理することは、コンポーネントの起動、コンポーネントの停止、コンポーネントの追加、コンポーネントの除去、コンポーネント属性の閲覧/編集、コンポーネント性能メトリックの閲覧、コンポーネントログの閲覧を含む動作のうち、1つ以上の動作を実行することを含むことができる。
【0175】
図6は、一実施形態に従って、管理コンソールを提供するためのシステムを示す。
図示のように、BCS管理コンソール136は、アプリケーションコンテナクラウドサービス128内のBCSインスタンスのコンポーネントとして提供されてもよい。BCS管理コンソールは、Node.jsによって提供されるランタイム環境であるスクリプトランタイム環境605に動作するウェブアプリケーションであってもよい。
【0176】
一実施形態によれば、管理コンソールは、ファブリックノードSDK611、複数のファブリックカスタム機能613、および複数のACCS API615を含むことができる。SDK、カスタム機能、およびACCS APIを用いて、分散型ストリーミングサービス(例えば、カフカ)603を含み得るファブリックネットワーク601と通信することができる。管理コンソールは、ビューオブジェクト623をさらに含み、ビューオブジェクト623は、BCSコンソールUI104またはRESTクライアント604に表示される必要がある情報を含むことができ、またはBCSコンソールUIまたはRESTクライアントから管理コンソールに渡される必要がある情報を含むことができることができる。ファブリックノードSDK611は、ファブリックネットワークからの情報をBCSコンソールUIまたはRESTクライアントからの情報にマッピングするように動作することができる。
【0177】
一実施形態によれば、BCS管理コンソールは、GUIフレームワーク(例えば、JET)617およびウェブフレームワーク(例えば、express)619をさらに含むことができる。GUIフレームワークは、管理コンソールウェブアプリケーションにおいて使用され得る様々なユーザインターフェイス(UI)コンポーネントおよび要素を提供することができる。例えば、UIコンポーネントおよび要素を用いて、フォームを作成し、データを収集し、データを視覚化することができる。ウェブフレームワークは、JAVAスクリプト(登録商標)で書かれることができ、ウェブアプリケーションおよびモバイルアプリケーションを開発するための一組のロバストな特徴を含むウェブアプリケーションフレームワークを提供することができる。
【0178】
図7A~7Bは、一実施形態に従って、BCSコンソールUI内のユーザインターフェイスの例を示す。
【0179】
一実施形態によれば、
図7Aに示すように、BCS概要711をダッシュボード内に表示することができる。概要は、組織の数、ピアの数、オーダの数、チャネルの数、およびチェーンコードの数を含むことができる。
【0180】
一実施形態によれば、BCSインスタンスの健康情報713を表示することができる。健康情報は、視覚的に示され、数字で表示される。例示のUIは、トランザクションの実行714および元帳の概要715を表示することもできる。
【0181】
一実施形態によれば、
図7Bは、BCSインスタンス内の全てのノードの情報を示す。例えば、例示のUIは、2つのピア、1つのオーダ、1つのファブリックCA、および(BCSゲートウェイノード内の)1つのRESTプロキシを含む合計5つのノードを示す。概要UI717は、ノードの名前723、ノード725の経路情報、ノード729の種別、ノード731の状態情報を表示する。例示のUIは、管理者がノードを追加するためのボタン721と、ノードを選別するための1つ以上のドロップダウンリスト719とを含む。
【0182】
ノードの管理
一実施形態によれば、2つのエンティティ、すなわち、BCS管理者およびBCSユーザは、管理コンソールを用いて、BCSインスタンスを管理することができる。各BCSインスタンスに対してBCS管理者アカウントが1つのみである。BCS管理者アカウントは、BCSインスタンスを作成するときに作成されてもよい。BCS管理者は、ファブリックCA管理者にバンドルされてもよい(すなわち、BCS管理者は、ファブリックCA管理者IDを使用して、BCSコンソールからまたはBCS管理REST APIを介して、全ての動作を実行する)。BCSユーザアカウントが2つ以上であってもよい。BCSユーザアカウントは、BCS管理者によって、ファブリックCAアイデンティティを登録することによって作成されてもよい。
【0183】
一実施形態によれば、BCSインスタンス内のノードは、1つのウェブページに表示されてもよい。管理コンソールは、2つのモードをサポートすることができる。第1のモードは、各ノードの名前、種類、アクセスURL、および状態をリストとして提示することができる。第2のモードは、各ピアが参加しているチャネルを図形として提示することができる。
【0184】
さらに、一実施形態によれば、BCS管理者は、管理コンソールを介して、ピアノード、オーダノード、ファブリックCAノード、およびBCSゲートウェイノードを起動および停止することができ、ピアノード、オーダノード、およびBCSゲートウェイノードを追加および削除することができる。ファブリックCAノードを追加または削除することができない。
【0185】
一実施形態によれば、BCS管理者は、ノードを追加するときに、ノードの属性を設定することができる。新たに追加されたノードは、追加動作の一部として自動的に起動することができる。ノードを削除する場合、当該ノードは、停止され、BCSインスタンスから削除される。
【0186】
一実施形態によれば、BCSコンソールUIは、アクティブなピアノードが参加している全てのチャネル、およびアクティブなピアノードにインストールされている全てのチェーンコードをリストすることができる。
【0187】
一実施形態によれば、BCS管理者は、ピアノードを管理するときに、アクティブなピアノードを既存のチャネルに加え、アクティブなオーダノードの属性を閲覧および編集することができる。BCSユーザは、アクティブなピアノードの一部の属性を閲覧することができる。
【0188】
また、アクティブなピアノードの性能メトリック、例えば、メモリの使用率、CPUの使用率、ネットワークI/O、およびディスクI/Oのスナップショットは、BCSコンソールUIに表示されてもよい。
【0189】
一実施形態によれば、BCS管理者は、オーダノードを管理するときに、アクティブなオーダノードのログを閲覧することができ、アクティブなオーダノードの属性を閲覧および編集することができる。BCSユーザは、アクティブなオーダノードの一部の属性を閲覧することができる。ピアノードの管理と同様に、BCS管理者は、アクティブなオーダノードの性能メトリック、例えば、メモリの使用率、CPUの使用率、ネットワークI/O、およびディスクI/Oのスナップショットを閲覧することができる。
【0190】
一実施形態によれば、BCS管理者は、ファブリックCAノードを管理するときに、アクティブなファブリックCAノードの属性を閲覧および編集し、アクティブなファブリックCAノードからCA証明書を取得し、アクティブなファブリックCAノードのログを閲覧することができる。また、BCS管理者は、アクティブファブリックノードの性能メトリック、例えば、メモリの使用率、CPUの使用率、ネットワークI/O、およびディスクI/Oのスナップショットを閲覧することができる。
【0191】
上述したように、BCSゲートウェイノードの管理は、BCSゲートウェイノードを追加すること、またはBCSゲートウェイノードを削除することをさらに含むことができるBCSゲートウェイノードの最大許可数が特定のBCSインスタンスをインスタンス化するときに指定されるため、BCSインスタンスに追加され得るBCSゲートウェイノードの数は、設定されたBCSゲートウェイノードの最大許可数によって制限される。
【0192】
一実施形態によれば、各BCSゲートウェイノードは、ゲートウェイノードの全体に一意の識別である名前を有することができる。この名前は、BCSゲートウェイノードを構成するときに参照される。また、BCSゲートウェイノードを作成するときに、ネットワークアドレスを決定および表示することができる。
【0193】
一実施形態によれば、BCS管理者は、BCSゲートウェイノードを構成するときに、BCSゲートウェイ設定ファイルを定義し、BCSゲートウェイノードを起動することができる。BCSインスタンスを作成するときに、チャネルの作成またはチェーンコードの配置をしなくてもよい。したがって、BCSゲートウェイノードは、管理コンソールを介して1つ以上のチェーンコードを配置し且つ有効なBCSゲートウェイ設定を定義するまで、機能しない。
【0194】
各BCSゲートウェイノードは、設定ページを有する。特定の実施形態において、設定ページにおいて、以下の項目を設定することができる。
1)チャネル:現在のゲートウェイノードを介して公開するチャネルを選択する。
2)チェーンコード:各チャネルにインスタンス化された全てのチェーンコードのリストから、公開するインスタンス化チェーンコードを選択する。
3)エンドーサ:各チェーンコードのエンドーサピアを定義する。
4)上記の設定に従ってBCSゲートウェイ設定を作成する。BCSゲートウェイの有効な設定ファイルが作成されると、ゲートウェイを起動することができる。
【0195】
一実施形態によれば、BCSコンソールは、リスト閲覧機能を用いて、BCSゲートウェイプロパティの閲覧を可能にする。リスト閲覧は、各BCSゲートウェイの以下の情報を提供する。
1)名前:ゲートウェイを作成する時に指定されたグローバル固有名。
2)ファブリック識別名:各BCSゲートウェイは、BCSゲートウェイを作成するときに登録されるファブリッククライアントの識別情報に関連付けることができる。このファブリッククライアントは、BCSゲートウェイによって実行される全ての動作(例えば、呼び出し、クエリ)を実行することができる。
3)ネットワークアドレス:アクセスポイントは、公衆インターネットワークアドレスを有する。
4)状態:作動中または停止中。
【0196】
一実施形態によれば、BCS管理者は、管理コンソールを介して、アクティブなBCSゲートウェイノードのログを閲覧し、以下のBCSゲートウェイメトリックを閲覧することができる。
1)接続されているクライアント:クライアント名、アドレス、ログオン時間など。
2)現在のトランザクション情報:現在のトランザクション情報は、状態情報、すなわち、トランザクションの状態と共に利用可能である。現在のトランザクション情報は、フリーズしたトランザクションをデバッグするときに有用である。
3)トランザクション統計:トランザクション統計は、管理コンソールUIを介して利用可能である。例えば、トランザクション統計は、完了したトランザクションの数、受信したイベント通知の数、および送信したイベント通知の数を含むことができる。
4)メモリの使用率。
5)CPUの使用率。
6)ネットワークI/O。
7)ディスクI/O。
【0197】
チャネルの管理
一実施形態によれば、BCSユーザは、現在のBCSインスタンスが参加している全てのチャネルをリストすることができる。BCS管理者は、チャネル名、コンソーシアム名、および1つ以上の組織名を入力とするチャネルを作成することができる。また、チャネル作成の成功または失敗を示すように、出力を表示することができる。
【0198】
一実施形態によれば、BCSユーザは、チャネルに参加しているノードおよび組織を閲覧することができる。管理コンソールは、リストモードおよびトポロジモードを含むトウビューモードをサポートすることができる。リストモードにおいて、参加しているローカルノードおよび(アンカーピアによって示された)外部組織は、リストとして示されてもよい。トポロジモードにおいて、参加しているローカルノードおよび(アンカーピアによって示された)外部組織は、トポロジ図として示されてもよい。
【0199】
一実施形態によれば、BCS管理者は、チャネル内のピアの元帳にクエリすることができる。元帳は、複数のトランザクションブロックを含むことができる。各トランザクションブロックは、ブロックID、過去のハッシュ、データハッシュ、タイムスタンプ、トランザクションIDリスト、動作(1~n)、チェーンコードID、チェーンコード提案、応答(r/wセット、イベント、成功または失敗)、および1つ以上のエンドーサを含むことができる。また、以下の統計データ、すなわち、ブロックの数および呼び出しの数を表示することもできる。
【0200】
一実施形態によれば、BCS管理者は、チャネルにインスタンス化された全てのチェーンコードをリストすることができる。リストされた項目は、チェーンコードIDおよびバージョンを含むことができる。BCS管理者は、インスタンス化されたチェーンコードの以下の情報、すなわち、インスタンス化されたトランザクションによって特定されたパス、およびインスタンス引数を閲覧することもできる。
【0201】
一実施形態によれば、BCS管理者は、チャネルにインスタンス化されたチェーンコードを更新することができる。更新動作は、以下の入力、すなわち、新しいバージョンのインストール済みチェーンコードを含むターゲットエンドーサピア、1つ以上のオーダ、チェーンコードバージョン、およびチェーンコードに固有の文字列引数であり得る選択的な引数を使用することができる。更新動作の出力は、成功であってもよく、またはエラーメッセージを含む失敗であってもよい。
【0202】
チェーンコードの管理
一実施形態によれば、BCS管理者は、現在のBCSインスタンスの任意のピアにインストールされた全てのチェーンコードをリストすることができる。リストされた項目は、チェーンコードIDおよびバージョンを含む。また、BCS管理者は、インストール済みチェーンコードの以下の情報、すなわち、チェーンコードをインストールしたローカルピアノード、およびチェーンコードをインスタンス化したチャネルを閲覧することができる。
【0203】
一実施形態によれば、BCS管理者は、管理コンソールを介して、チェーンコードを1つ以上のローカルピアノードにインストールすることができる。インストールするための入力は、ターゲットピア、例えばGo言語/Javaなどのチェーンコード種類、チェーンコードの名前であり得るチェーンコードID、チェーンコードバージョン、チェーンコードのソースコードの位置であり得るチェーンコード経路、任意選択のチェーンコードパッケージを含むことができる。インストール操作の出力は、成功であってもよく、またはエラーメッセージを含む失敗であってもよい。
【0204】
一実施形態によれば、BCS管理者は、以下の情報、すなわち、チャネル名、新しいバージョンのインストール済みチェーンコードを含むターゲットエンドーサピア、オーダ、チェーンコードバージョン、およびチェーンコードに固有の文字列引数であり得る選択的な引数、特定のフォーマット、または特定のフォーマットがない場合にデフォルトフォーマットを有するエンドースメントポリシを入力として、インストール済みチェーンコードをチャネルにインスタンス化することができる。
【0205】
メンバシップの管理
一実施形態によれば、BCS管理者は、現在のBCSインスタンス内の全てのIDをリストすることができ、現在のBCSインスタンスに新しいユーザ/IDを登録することができ、登録したIDを解除することができ、現在のBCSインスタンスからユーザを削除することができる。また、BCS管理者は、表1に示すように、識別情報の以下の属性を閲覧/編集することができる。
【0206】
【0207】
一実施形態によれば、BCSユーザは、管理コンソールを介して、それ自体を登録するまたは再登録することを可能にする。これによって、ユーザの秘密キーおよび証明書を作成することができる。また、BCS管理者は、管理コンソールを介して、以前に登録されていたIDを無効化することができ、BCSユーザは、管理コンソールを介して、パスワードを変更することができる。
【0208】
一実施形態によれば、関連するBCSインスタンスを起動または停止すると共に、BCS管理コンソールを起動または停止することができる。
【0209】
一実施形態によれば、2つの方法でBCS管理コンソールのログレベルを設定することができる。すなわち、BCS管理コンソールまたは管理REST APIを用いて、実行時にログレベルを変更することができる。
【0210】
REST API
上述したように、ファブリックネットワーク内の異なるコンポーネントは、gRPCプロトコルに基づいて通信する。したがって、ファブリックネットワークに基づくBCSインスタンスの場合、クライアントアプリケーションは、ファブリックSDKを用いて、BCSインスタンス内のチェーンコードを呼び出す必要がある。
【0211】
クライアントアプリケーションがファブリックSDKを用いてブロックチェーンクラウドサービスと通信することは、ブロックチェーンフレームワークをクラウドサービスとして提供することによる利点を部分的に打ち消すことになる。例えば、利点の1つは、インターネット接続を用いて、任意の場所からクラウドサービスにアクセスできることである。
【0212】
一実施形態によれば、本明細書に記載のシステムおよび方法は、BCSインスタンスにおいてRESTプロキシを提供することができる。RESTプロキシは、RESTクライアントによって使用され、チェーンコードを介してクエリし、チェーンコードを介してトランザクションを同期的または非同期的に呼び出し、トランザクションステータスを取得し、BCSプロキシのバージョンを取得するための複数のREST APIを提供することができる。RESTプロキシは、RESTコールを認証し、RESTコールをGRPCコールに変換することができる。また、RESTプロキシは、BCS管理コンソールによって提供された機能と同様の機能をサポートするREST APIを提供することができる。
【0213】
一実施形態によれば、RESTプロキシは、クライアントアプリケーションがBCSインスタンスを消費するためのユーザインターフェイスを提供する。
【0214】
図8は、一実施形態に従って、BCSインスタンスにおいてRESTプロキシを提供するためのシステムを示す。
【0215】
図8に示すように、RESTプロキシ138は、REST認証ツール827およびプロトコル変換ツール829を含むことができる。BCS REST APIクライアント808がRESTコール815をRESTプロキシに送信すると、クラウドゲート811に接続されているLBaaS126は、RESTコールを認証することによって、RESTがBCSインスタンスにアクセスすることを可能にする有効なユーザ名および有効なパスワードがRESTコールに含まれているか否かを判断することができる。
【0216】
一実施形態によれば、LBaaSは、RESTコールを認証する場合、RESTコールをRESTプロキシに転送し、RESTプロキシは、RESTコール835をIDCS813に転送し、IDCS813は、クライアントアプリケーションがBCSによって適切に許可されたか否かを判断することができる。
【0217】
一実施形態によれば、クライアントアプリケーションが適切に許可された場合、RESTプロキシは、RESTコールをgRPCコール825に転換/変換し、gRPCコールをファブリックネットワーク601に送信することができる。RESTコールは、内部コール(gRPC)に転換/変換されると、ブロックチェーンファブリック/ハイパーレッジャのインスタンスとインターフェイスすることができる。
【0218】
一実施形態によれば、RESTコールは、gRPCライブラリ833を有するファブリックJava SDK831に基づくJavaアプリケーションであり得るプロトコル変換ツールによって変換されてもよい。
【0219】
さらに
図8に示すように、RESTプロキシは、上述したように、REST821を用いて管理コンソールと通信することによって、REST API823によって提供された1つ以上の機能を管理コンソールに公開することができる。
【0220】
例示的なREST API
一実施形態によれば、BCSインスタンスのREST APIを呼び出す前に、RESTプロキシを起動して、動作させる必要がある。管理コンソールを介して、RESTプロキシの状態をチェックすることができる。RESTプロキシが立ち上げられておらず、動作していない場合、管理コンソールからRESTプロキシを作動する必要がある。
【0221】
一実施形態によれば、REST APIを呼び出すことによって、BCSインスタンス内のピアノードに配置されたスマートコントラクト(チェーンコード)と対話することができる。配置プロセスは、管理コンソールを介して達成することができる。
【0222】
一実施形態によれば、例示の目的で、例示的なREST APIが提供される。本明細書に使用された例は、以下の例示的なチェーンコードがBCSネットワークに配置されると仮定する。
【0223】
【0224】
一実施形態によれば、例示は、管理コンソールを含む。RESTプロキシが立ち上げられておらず、動作していない場合、管理コンソールからRESTプロキシを作動することができる。
【0225】
一実施形態によれば、REST APIを呼び出すことによって、BCSインスタンス内のピアノードに配置されたスマートコントラクト(チェーンコード)と対話することができる。配置プロセスは、管理コンソールを介して達成することができる。
【0226】
一実施形態によれば、例示の目的で、例示的なREST APIが提供される。本明細書に使用された例は、以下の例示的なチェーンコードがBCSネットワークに配置されると仮定する。
【0227】
一実施形態によれば、REST APIは、以下の機能、すなわち、チェーンコードを介したクエリ、チェーンコードを介したトランザクションの呼び出し、チェーンコードを介したトランザクションの非同期呼び出し、トランザクションステータスの取得、BCSゲートウェイバージョンの取得を提供する。これらの機能を実行するために、クライアントは、HTTPSを用いてBCSゲートウェイにアクセスし、APIに従ってメッセージフォーマットを利用する。
【0228】
一実施形態によれば、チェーンコードを介したクエリ機能は、チェーンコードを呼び出すことによってクエリ動作を実行する。チェーンコードおよびクエリの引数は、REST APIを介して指定される。トランザクションステータスの取得というREST APIは、チャネルにクエリすることによって、トランザクションのステータスを取得する。チャネルおよびトランザクションIDは、REST APIを介して指定される。BCSゲートウェイバージョンの取得というREST APIは、ゲートウェイバージョン情報を返信する。
【0229】
一実施形態によれば、チェーンコードを介したトランザクションの呼び出しというREST APIは、チェーンコードを呼び出すことによってトランザクションを実行する。チェーンコードおよび呼び出しの引数は、REST APIを介して指定される。このREST APIは、同期モードでトランザクションを実行する。これは、トランザクションが成功である応答、トランザクションが失敗である応答、またはトランザクションがタイムアウトである応答のうち、いずれかを返信することを意味する。
【0230】
一実施形態によれば、チェーンコードを介したトランザクションの非同期呼び出しというREST APIは、チェーンコードを呼び出すことによってトランザクションを実行する。チェーンコードおよび呼び出しの引数は、REST APIを介して指定される。このREST APIは、非同期モードでトランザクションを実行する。これは、トランザクションの終了またはタイムアウトを待つことなく、トランザクションを投入した直後に、応答/承認を返信することを意味する。結果は、その後に提供される。BCSインスタンス管理REST APIは、BCSコンソール(後述)によって提供された機能と同様の機能をサポートする。
【0231】
アイデンティティクラウドサービス(IDCS)と一体化されたファブリック認証局(ファブリックCA)
一実施形態によれば、ファブリックCAサーバは、ファブリックメンバシップサービスを提供する。ファブリックメンバシップサービスは、以下の3つの部分、すなわち、ユーザの認証、ブロックチェーン(ピアおよびオーダのグループ)にアクセスするための許可、および証明書をアプリケーションクライアント、ピアおよびオーダに配信するためのCAサーバを含む。ファブリックCAは、証明書を使用して、認証および認可を実施する。証明書は、以下の2種類、すなわち、認証を行うための登録証明および認可を行うためのトランザクション証明を含む。また、IDCSも認証および認可を提供する。しかしながら、この認可は、OAuthによって実施される。すなわち、ピアは、オーダにアクセスしたい場合、IDCSからユーザのアクセストークンを取得し、このトークンを用いてオーダにアクセスする。
【0232】
一実施形態によれば、ファブリックCAは、データベースまたはLDAPを用いて、ファブリックCAの登録ユーザの情報、例えば、ユーザの名前/パスワード、ユーザの証明書、およびユーザの所属を保存する。パブリッククラウド(OPC)のエンドユーザは、従業員を管理するための1つの集中型IDCSインスタンスを利用して、従業員が利用した全てのパブリッククラウド(OPC)インスタンスにアクセスする。ブロックチェーンクラウドサービスBCSは、好ましくは、他のクラウドサービスに使用されるIDCSと一体化される。したがって、エンドユーザは、従業員を管理するための1つの集中型IDCSインスタンスを利用して、従業員が利用した(BCSを含む)全てのパブリッククラウド(OPC)インスタンスにアクセスすることができる。
【0233】
一実施形態において、ブロックチェーンクラウドサービス(BCS)は、オラクル識別クラウドサービス(IDCS)を用いて、ユーザ情報を集中的に保存する。BCSは、ファブリックCAユーザの情報をIDCSに記憶する。これによって、オラクルBCSは、IDCSを用いて、複数のパブリッククラウドサービスインスタンスにわたって集中化されたBCSユーザの情報を管理することができる。したがって、一実施形態において、BCSファブリックCAユーザの情報および証明書は、オラクルIDCSに格納される。ファブリック証明書認証フレームワークは、PKI秘密キー、署名済み証明書、CA証明書チェーンを含むファブリックメンバシッププロバイダ(MSP)であり、ファブリックCAクライアント/サーバによって設定される。
【0234】
一実施形態によれば、BCSは、OPCのユーザ管理を利用する。まず、BCSユーザは、(IDCS IDを有する)OPCユーザでなければならない。BCSインスタンスが作成されると、BCSコンソール、CAおよびRESTプロキシを含む数種類のアプリケーションが作成される。コンソールは、以下の2つのアプリ役割、すなわち、コンソール管理者およびコンソールユーザを有する。CAは、4つのアプリ役割、すなわち、ファブリック管理者、ファブリッククライアント、ファブリックピア、およびファブリックオーダを有する。RESTプロキシは、2つのアプリ役割、すなわち、ゲートウェイ管理者およびゲートウェイユーザを有する。
【0235】
一実施形態によれば、OPCユーザをBCSユーザにするために、OPCユーザ管理コンソールにおいて特定のBCSアプリ役割をOPCユーザに付与する必要がある。
【0236】
作成者は、BCSインスタンスを作成するときに、既存のOPCユーザ/パスワードを提供する必要があり、このユーザには、BCSコンソール管理役割およびファブリック管理役割が自動的に付与される。したがって、このユーザは、BCS管理者となる。
【0237】
BCSコンソール/CA/RESTプロキシの認証の場合、認証は、クラウドゲートで行われる。ピア/オーダの場合、認証は、署名に基づいて行われる。BCSコンソールの場合、認証後、コンソールは、(IDCSを呼び出すことによって)現在のユーザのアプリ役割を取得する。このユーザにはコンソール管理者またはコンソールユーザの役割が付与されていない場合、接続は、拒否される。そうでなければ、コンソールは、予め定義された規則に基づいてアクセス制御を行う。例えば、通常のユーザは、情報の読み取りのみを行うことができ、管理者は、何でも行うことができる。
【0238】
一実施形態によれば、CAの場合、認証後、CAは、現在のユーザのアプリ役割を取得する。ユーザにはファブリック役割が付与されていない場合、登録要求は、拒否される。
【0239】
一実施形態によれば、RESTプロキシの場合、認証後、RESTプロキシは、現在のユーザのアプリ役割を取得する。ユーザにはゲートウェイ管理者またはゲートウェイユーザ役割が付与されていない場合、要求は、拒否される。そうでなければ、コンソールは、予め定義された規則に基づいてアクセス制御を行う。例えば、通常のユーザは、呼び出し/クエリを行うことができ、管理者は、設定を変更し、メトリックを取得することができる。
【0240】
一実施形態によれば、ファブリックCAサーバは、ファブリックメンバシップサービスを提供する。ファブリックメンバシップサービスは、以下の3つの部分、すなわち、ユーザの認証、ブロックチェーン(ピアおよびオーダのグループ)にアクセスするための許可、および証明書をアプリケーションクライアント、ピアおよびオーダに配信することができるCAサーバを含む。
【0241】
一実施形態によれば、フファブリックCAは、証明書を使用して、認証および認可を実施する。証明書は、以下の2種類、すなわち、認証を行うための登録証明および認可を行うためのトランザクション証明を含む。
【0242】
一実施形態によれば、また、IDCSも認証および認可を提供する。しかしながら、この認可は、OAuthによって実施される。すなわち、ピアは、オーダにアクセスしたい場合、IDCSからユーザのアクセストークンを取得し、このトークンを用いてオーダにアクセスする。
【0243】
図9Aは、一実施形態に従って、シングルサインオン用の典型的なIDCS使用ケースを示す。
【0244】
一実施形態によれば、初期ステップにおいて、ウェブアプリケーション901をIDCS902に追加することができる。次いで、ウェブブラウザ900などのクライアントは、ウェブアプリケーションから、認証(例えば、ユーザ名およびパスワード)を要求することができる。ウェブアプリケーションは、既にIDCSに追加されているため、IDCSに認証要求を送信するようにウェブブラウザに指示することができる。ウェブブラウザは、ウェブアプリケーションから応答を受信した後、IDCSから認証(例えば、ユーザ名およびパスワード)を要求することができる。
【0245】
次いで、IDCSは、要求を認証し、認証が成功する場合、トークンをウェブブラウザに返信することができる。認証され、トークンを受信したウェブブラウザは、ウェブアプリケーションに要求を送信することができる。ウェブアプリケーションは、トークンを検証し、認証が成功したことをウェブブラウザに知らせることができる。
【0246】
図9Aに示すケースの場合、IDCSは、アプリケーションを識別するためのサービスを提供するIDプロバイダ(IdP)として機能する。全ての参加者間の全ての通信は、HTTPに基づいて行われる。この使用ケースは、設定駆動型であるが、HTTPベースのアプリケーションのみに応用される。
【0247】
図9Bは、一実施形態に従って、ファブリッククライアント認証用のIDCS使用ケースを示す。
【0248】
一実施形態によれば、既に登録され登記されている(ユーザの秘密キーおよび証明書が既にクライアント側のステートストアに格納されている)ファブリックユーザに関連するファブリッククライアント904は、新しいクライアントを要求することができ、クライアントのユーザ情報(ユーザ名)を取得することができる。ファブリックSDK905は、ステートストアからユーザをロードし、ファブリッククライアントにユーザオブジェクトを返信することができる。クライアントは、ユーザオブジェクトを受信すると、ファブリックSDKにトランザクション提案を送信することができ、ファブリックSDKは、同様の秘密キーを用いて提案に署名することができる。次いで、署名済み提案は、ピア906に送信され、ピア906は、メンバシップサービス907を用いて署名を検証することができる。メンバシップサービスは、IDCS902からユーザの証明書を取得することができ、IDCSからの証明書を用いてユーザの署名を検証することができる。次いで、メンバシップサービスは、署名が検証済みという証明をピアに返信することができる。
【0249】
ハイパーレッジャファブリックブロックチェーンにおけるSQLベースリッチクエリのサポート
一実施形態によれば、システムおよび方法は、ブロックチェーンのワールドステートを保存するためのリレーショナルエンジンをサポートすることができる。SQLを利用して、トランザクションペイロードに格納されたマークル木(Merkle tree)を計算することによって、キー/値対をクエリし、コミット時に結果を検証することができる。
【0250】
一実施形態によれば、本明細書に記載されたシステムおよび方法は、SQLクエリを実行することによって、より容易およびより管理可能な方法で複雑なスマートコントラクトを作成することができる。また、データ選別を(スマートコントラクトレベルで実行するではなく)ストレージエンジンに戻すことおよびデータの同時読み出しおよび書き込みアクセスをサポートするリレーショナルエンジンに依存することによって、性能を改善することができる。
【0251】
図10は、一実施形態に従って、ファブリックブロックチェーンにおいてワールドデータベースのステートをサポートするためのシステムを示す。
【0252】
一実施形態によれば、ワールドデータベース1000のステートは、バージョン付きデータベースプロバイダ1005と、バージョン付きデータベース1010とを含むことができる。典型的なハイパーレッジャブロックチェーンファブリックおよび他のブロックチェーンファブリックにおいて、ワールドデータベースのステートは、キー/値対のデータベースを含む。すなわち、データベース内の全ての「値」は、この値を検索するために使用される「キー」と対になる。
【0253】
一実施形態によれば、ワールドステートは、ブロックチェーンを変更する全てのトランザクションに応じて、バージョンを更新する。ワールドデータベースのステートへのアクセスは、トランザクションマネージャ1015によって制御される。すなわち、トランザクションマネージャは、ワールドデータベースのステートに応じて、書き込み/読み出し速度を調整する。検証ツール1020は、例えばスマートコントラクトがトランザクションをコミットしようとする時にデータが依然として一致していることを検証するためのエンティティである。トランザクションの実行は、エンドースメント(例えば、実行)と検証(コミットメント)との間に分けられる。実行(エンドースメント)は、トランザクションがコミットされた場合にトランザクションがどのようになるかのシミュレーションであり、これは、ワールドデータベースのステートにアクセスするトランザクションの一部である。検証は、コミット後に実行される。トランザクションは、複数のノードによるチェーンコードの実行によって多数のエンドースメントを収集する。トランザクションは、トランザクションが更新しようとする元帳上のポリシを満たすのに十分なエンドースメントを収集すると、コミットフェーズに移動する。一般的に、トランザクションの2つのフェーズの間に一定の期間がある。検証は、エンドースメントから情報を取り込み、情報が依然として有効であることを検証する。全ての情報が依然として有効である場合、トランザクションは、コミットされ、ワールドステートは、更新される。
【0254】
一実施形態によれば、ワールドデータベースのステートに関連して、いくつかの動作1030を実行することができる。これらの動作は、ステートの取得(GetState)、ステートの複数のキーの取得(GetStateMultipleKey)、ステート範囲の取得(GetStateRange)、クエリの実行(ExecuteQuery)、最新の保存ポイントの取得(GetLatestSavepoint)、更新の適用(ApplyUpdates)を含むが、これらに限定されない。同様に、トランザクションマネージャに関連して、いくつかの動作1035を実行することができる。これらの動作は、シミュレータ(Simulator)、クエリの実行(QueryExecutor)、検証および準備(ValidateAndPrepare)、およびコミット(Commit)を含むが、これらに限定されない。
【0255】
一例として、ワールドデータベースのステートは、全てのユーザのビットコインの現在の残高を示すことができる。この現在の残高は、ワールドデータベースの現在のステートと一致しているスナップショットである。
【0256】
一実施形態によれば、ハイパーレッジャにおいて、ワールドデータベースのステートは、永続化エンジンに取り込まれる。このエンジンは、外部からアクセスすることができないが、ブロックチェーンによって内部からアクセスすることができる。ブロックチェーン内のスマートコントラクト(トランザクション)は、ワールドデータベースのステートにアクセスすることができる。
【0257】
一実施形態によれば、例えば、スマートコントラクトは、一定の期間中に、当事者Aから当事者Bに一定の金銭を振り込むように書かれてもよい。また、スマートコントラクトは、金銭を振り込む前に、当事者Bが例えば財産の権利を当事者Aに譲渡するなど何らかの条件を満たすことを保証するように書かれてもよい。さらに、スマートコントラクトは、当事者Aから当事者Bに資金を振り込む前に、当事者Aが権利を受け取ったことを保証するように書かれてもよい。
【0258】
一実施形態によれば、スマートコントラクトは、ワールドデータベースのステートに依存する。スマートコントラクトは、口座Aの現在残高、口座Bの現在残高、および譲渡される財産の現在権利を調べることができる。これらの情報は、ワールドデータベースのステートをチェックすることによって得られる。スマートコントラクトは、格納された手順である。基礎データは、アクセスされるの基礎テーブルセットであってもよい。
【0259】
一実施形態によれば、ワールドデータベースのステートは、高速のキー値ストアに格納される。このようなデータベースは、ラベル(キー)が与えられると、そのキーに値を関連付けるように動作する。例えば、残高をキーに関連付けることができる。別の例として、写真(ビットマップ)をキーに関連付けることができる。一般的に、このような永続化エンジンは、非常に速い。
【0260】
しかしながら、一実施形態によれば、システムが検索メカニズムのみをサポートするため、このような永続化エンジンには制限がある。このような永続化エンジンは、例えば、複数の値間の比較などのリッチクエリを提供することができない。例えば、キー値永続化エンジンは、10000個の異なる口座の中で最も高い残高を有する口座の名前を要求するクエリを処理することができない。また、このような永続化エンジンは、内部に記憶された値、例えば、最大値、最小値、または平均値に対して機能を実行することができない。例えば、キー値永続化エンジンは、クエリに応答して、Xヶ月の期間中のユーザの平均残高を提供することができない。代わりに、スクリプトまたはスマートコントラクトは、キー値対から各値を引き出し、次いで引き出された各値に対してクエリを実行するように書かれなければならない。これらのキー値永続化エンジンの制限によって、スマートコントラクトがキー値ストアの固有の制限に対処しなければならないため、スマートコントラクトを書くことは、非常に困難である。
【0261】
また、一実施形態によれば、キー値永続化エンジンは、読み出しトランザクションおよび書き込みトランザクションを同時に実行するができない。読み出しトランザクション中に値が変化しないように、読み出し中に書き込みを適切にロックする。同様に、書き込み動作中に書き込み対象の値を誤って読み出さないように、書き込み中に読み出しを適切にロックする。このような読み出しロックおよび書き込みロックは、従来のキー値ストア永続化エンジンの一層の制限である。
【0262】
一実施形態によれば、システムおよび方法は、キー値永続化エンジンの代わりに、リッチクエリ(例えば、SQL)を可能にするリレーショナルデータベースまたは他の永続化エンジンを提供することができる。
【0263】
一実施形態によれば、ハイパーレッジャブロックチェーンファブリックなどのブロックチェーンファブリックにリレーショナルデータベースへのアクセスを提供すると、ユーザおよびスマートコントラクトは、キー値ストアの制限を超える。このようなデータベースは、MVCC(複数バージョンの同時制御)、スナップショット(ユーザ/動作がデータベースへの書き込みを中止することなく、データのスナップショットの作成を可能にする)をサポートすることができる。これは、性能および操作性を高め、永続化エンジンにクエリする必要があるスマートコントラクトおよび他のトランザクションプロセスの符号化/書き込みを簡略化することができる。
【0264】
図11は、一実施形態に従って、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムを示す。
【0265】
一実施形態によれば、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムは、リレーショナルデータベースインターフェイス1102、バージョン付きデータベースプロバイダ1105、およびバージョン付きデータベース1110を含むことができるワールドデータベース1100のステートを含むことができる。また、トランザクションマネージャ1115および検証ツール1120を設けることができる。従来のシステムと同様に、ワールドインターフェイスのステート、トランザクションマネージャ、および検証エンジンは、それぞれ更新される。
【0266】
一実施形態によれば、トランザクションマネージャおよび検証エンジン(例えば、検証ツール112)は、ハイパーレッジャファブリックによってサポートされる同じインターフェイスに対して構築されるが、内部でリレーショナルトランザクションの作成およびコミットに依存する。同様に、バージョン付きデータベースプロバイダおよびバージョン付きデータベースは、トランザクションが認識するバージョン付きデータベースを含む。これは、バージョン付きデータベースと同様であるが、トランザクションごとに保存される。これによって、読み出し/書き込みモードでトランザクションを作成することができ、データベースは、読み出し/書き込みをロックする必要なく、内部でこのような状況を処理することができる。
【0267】
また、一実施形態によれば、リレーショナルデータベースインターフェイス1102が提供される。インターフェイスは、ユーザ(例えば、スマートコントラクト)が所望のリレーショナルエンジンを差し込むことを可能にする抽象概念を含むことができる。例示として、オラクル、SQL、またはSQLおよびトランザクションをサポートする任意の他のデータベース(例えば、SQLite)を含む。一実施形態において、それは、契約が関係方式でバージョン付きデータベースと対話することを可能にする関係層を可能にするバークリDB(Berkeley DB)をサポートする。一実施形態によれば、バークリDBは、性能を改善することができる埋込みデータベースである。
【0268】
一実施形態によれば、トランザクションマネージャは、レベルDBおよび/またはカウチDBなどのデータベースに使用されるロックアプローチとは異なり、データベーストランザクションを認識することができる。
【0269】
一実施形態によれば、各チャネルは、同様のバージョン付きデータベース(例えば、SQLite)を共有することができる。各データベースは、多数のテーブルを含み、各テーブルは、バージョン付きデータベース(例えば、バークリDB)にマッピングされる。ファイルシステム上で複数のデータベースを1つのファイルとして永続化するように、BDBを構成することができる。
【0270】
一実施形態によれば、チャネルは、全てのチャネルの現在の高さ/保存ポイントを含む1つのテーブル(チャネル_高さ)を共有することができる。テーブルは、キー、値、ブロック番号、およびトランザクション番号を含む4列を有する。キーは、チャネル名を記述する。ブロック番号およびトランザクション番号は、チャネルの現在の高さを記述する。
【0271】
一実施形態によれば、各チャネルは、そのチャネル上でインスタンス化された各(システムおよびユーザ)チェーンコードの「ステート」テーブルにも関連付けられる。テーブル名は、<チャネル名>_<チェーンコード名>である。テーブルは、キー、値、Json値、ブロック番号、およびトランザクション番号を含む5列を有する。「キー」は、ワールドステートに設定されるキーの名前である。「値」は、有効なJson値がとして解析できない場合のキーの値である。「Json値」は、有効なJson値として解析できる場合のキーの値である。「ブロック番号」および「トランザクション番号」は、格納されたキーに対応する高さを表す。
【0272】
一実施形態によれば、テーブルは、チャネルが作成されおよびチェーンコードが配置されると、すぐに作成される。
【0273】
一実施形態によれば、BDBのワールドステートに対してリッチクエリを実行することは、シム(shim)APIを使用してチェーンコードによって実行される。クエリ結果取得関数(GetQueryResult())で指定された表現は、有効なSQL選択(SELECT SQL)表現であってもよい。
【0274】
一実施形態によれば、指定されたSQL選択表現は、その表現によってアクセスされ得るテーブルが、現在実行されているチェーンコードがバインドされるチャネル/チェーンコードの組み合せに関連するワールドデータベースのステートを表すテーブルであれば、制限されない。
【0275】
一実施形態によれば、ユーザは、特定のチャネル/チェーンコード対に関連するワールドデータベースのステートを表すために使用される内部名を知る必要がない。その代わりに、ユーザは、プレースホルダ「STATE」(大小文字を区別しない)を用いて、テーブル名を参照する。例えば、SELECT * FROM <STATE> WHERE key = 'key1'とい表現(SQL表現内のキーワードは、大小文字を区別しない)は、「キー1」に関連する値を検索する。
【0276】
一実施形態によれば、選択表現ではないリッチクエリを実行する試み、または現在実行中のチェーンコードにバインドされているチャネル/チェーンコードに関連するテーブル以外のテーブルにアクセスしようとする試みは、エラーを返信する。
【0277】
一実施形態によれば、カウチDBに対して実行されるクエリをサポートするファブリックと同様に、結果は、クエリ結果取得関数(GetQueryResult())によって返される。この結果は、実行された各反復がキーおよびJsonペイロードを含む反復子である。BDBリッチクエリ結果の場合、キー名は、「_sqlresult_X」(Xは、戻された反復のゼロベースのインデックスである)の形であってもよい。Jsonペイロードは、クエリ反復によって戻された結果セットのJson式バージョンである。換言すれば、各属性名が戻されたSQL結果セット中の各列名に対応し、各属性値が現在の反復における列の戻された値に対応するjsonマップである。
【0278】
一実施形態によれば、以下、返された全ての所定色のマルブルIDを反復する(エラー処理を省略した)例を提供する。
【0279】
【0280】
一実施形態によれば、システムおよび方法は、コミット時にリッチクエリ結果の完全検証を実行することができる。エンドースメント時に、マークル木は、GetQueryresult()呼び出しから消費された全ての結果に対して計算され、トランザクションペイロードの一部として全てのSQL表現と共に格納される。コミット時に、エンドースメント時に実行されたリッチクエリに関連するSQL表現が再実行され、そのマークル木ハッシュがエンドースメント時に計算されたマークル木ハッシュに対して漸次にチェックされる。検証ツールは、エンドースメント時に消費されたインデックスと同様のインデックスに達するまでまたは反復子が消耗されるまで、クエリ結果を消費する。マークル木ハッシュが一致する場合、およびクエリの終了時に反復子の消耗ステートが一致する場合、リッチクエリが有効である。そうでなければ、ファントム読み取りエラーによって無効であるというフラグがトランザクションに付けられる。
【0281】
一実施形態によれば、BDBは、MVCC(複数バージョンの同時制御)およびトランザクションのスナップショット分離レベルをサポートする。このため、システムおよび方法は、この能力を活用して、同時読み出し/書き込みトランザクションを実行することができる。
【0282】
図12は、一実施形態に従って、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするための方法を示すフローチャートである。
【0283】
ステップ1201において、方法は、マイクロプロセッサを含む1つ以上のコンピュータにおいて、エンタープライズ級の分散型元帳フレームワークを提供することができる。
【0284】
ステップ1202において、方法は、分散型元帳フレームワークにおいて、分散型元帳ファブリックを実行することができ、分散型元帳ファブリックは、少なくともトランザクションマネージャと、検証ツールとを含む。
【0285】
ステップ1203において、方法は、ワールドデータベースのステートを分散型元帳布に関連付けることができ、ワールドデータベースのステートは、バージョン付きデータベースと、リレーショナルデータベースインターフェイスとを含む。
【0286】
以上で様々な実施形態を説明したが、これらの実施形態は、例示として提示され、本開示を限定しない。これらの実施形態は、本開示の特徴および原理並びにその実用を説明するために選択され、説明された。実施形態は、システムおよび方法を例示する。これらの実施形態は、新しい機能および/または改善された機能を提供することによって、および/またはリソース利用率の減少、容量の増加、スループットの増加、効率の改善、待ち時間の減少、セキュリティの強化、および/または使用の容易性の改善を含むがこれらに限定されない性能利点を提供することによって、様々な特徴を用いて、システムおよび方法の性能を改善する。
【0287】
本明細書において、いくつかの実施形態は、アーキテクチャ、機能、プロセスおよび/または動作を示す方法のフローチャートおよび/またはブロック図、装置(システム)およびコンピュータプログラム製品を参照して説明される。フローチャートまたはブロック図の各ブロックは、指定された機能を実装するための1つ以上の実行可能な命令を含む要素、機能、プロセス、モジュール、セグメント、または命令の一部を表す。いくつかの代替的な実施形態において、ブロック図またはフローチャートに示された機能は、図示された順序と異なる順序で実行される。例えば、連続して示された2つのブロックは、関与する機能に応じて、実質的に同時に実行されてもよく、または逆の順序で実行されてもよい。フローチャートおよび/またはブロック図の各ブロック、またはフローチャートおよび/またはブロック図のブロックの組み合わせは、指定された機能を実行するコンピュータプログラム命令、および/または専用ハードウェア、および/またはハードウェアとコンピュータプログラム命令との組み合わせによって実装されてもよい。
【0288】
いくつかの実施形態において、特徴は、プロセッサと、コンピュータ可読媒体と、他のコンピュータと通信するためのネットワークカード/インターフェイスとを含むコンピュータに実装される。
【0289】
いくつかの実施形態において、特徴は、ネットワークによって相互接続されたパーソナルコンピュータ、ハンドヘルド装置、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な消費者電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ等を含む様々な種類のコンピュータ構成を含むコンピューティングシステムを備えるネットワークコンピューティング環境において実装される。ネットワークは、ローカルエリアネットワーク(LAN)、スイッチファブリックネットワーク(例えば、インフィニバンド)、ワイドエリアネットワーク(WAN)、および/またはインターネットであってもよい。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むことができる。
【0290】
いくつかの実施形態において、特徴は、バックエンドコンポーネント(例えば、データサーバ)を含むコンピューティングシステム、またはミドルウェアコンポーネント(例えば、アプリケーションサーバ)を含むコンピューティングシステム、またはフロントエンドコンポーネント(例えば、ユーザが本明細書に記載された主題の実装形態と対話するときに使用されるグラフィカルユーザインターフェイスまたはウェブブラウザを有するクライアントコンピュータ)を含むコンピューティングシステム、またはネットワークによって相互接続されたバックエンドコンポーネント、ミドルウェアコンポーネント、もしくはフロントエンドコンポーネントの任意の組み合せを含むコンピューティングシステムにおいて実装される。コンピューティングシステムは、互いにクライアント-サーバ関係を有するクライアントおよびサーバを含むことができる。いくつかの実施形態において、機能は、ネットワークを介して接続される1つ以上のコンピュータクラスタを含む分散型コンピューティング環境を備えるコンピューティングシステムにおいて実装される。分散型コンピューティング環境内の全てのコンピュータは、単一の場所に配置されてもよく、またはネットワークによって接続された異なる遠隔場所にコンピュータクラスタとして配置されてもよい。
【0291】
いくつかの実施形態において、特徴は、ウェブ技術を用いて共有された弾性リソースに基づいてセルフサービス供給方法でユーザに配布されたクラウドコンピューティングシステムの一部としてまたはサービスとしてクラウドに実装される。クラウドの特性は、例えば、オンデマンドセルフサービス、ブロードネットワークアクセス、リソースプール、急速順応性、および計数サービスを含んでもよい。クラウド配置モデルは、パブリック、プライベート、およびハイブリッドを含む。クラウドサービスモデルは、SaaS(Software as a Service)、PaaS(Platform as a Service)、DBaaS(Database as a Service)、およびIaaS(Infrastructure as a Service)を含む。クラウドは、一般的に、共有された弾性リソースをユーザに配布するハードウェア、ソフトウェア、ネットワーク、およびウェブ技術の組み合わせを指す。本明細書に使用されたクラウドは、パブリッククラウド、プライベートクラウド、および/またはハイブリッドクラウド実装を含むことができ、クラウドSaaS、クラウドDBaaS、クラウドPaaS、および/またはクラウドIaaS配置モデルを含むことができる。
【0292】
いくつかの実施形態において、特徴は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせを用いて実装される。いくつかの実施形態において、特徴は、教示されたアプローチの1つ以上の機能を実行するように構成されたまたはプログラムされたプロセッサを用いて実装される。いくつかの実施形態において、プロセッサは、本明細書に記載の機能を実行するように設計された、シングルチップまたはマルチチッププロセッサ、デジタル信号プロセッサ(DSP)、システムオンチップ(SOC)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または他のプログラマブル論理装置、ステートマシン、離散型ゲートまたはトランジスタロジック、離散型ハードウェアコンポーネント、またはそれらの任意の組合せである。いくつかの実装形態において、特徴は、特定の機能を有する回路によって実装される。他の実装形態において、特徴は、例えば、コンピュータ可読記憶媒体に記憶された命令を用いて、特定の機能を実行するように構成されたコンピュータ、コンピューティングシステム、プロセッサ、および/またはネットワークに実装される。
【0293】
いくつかの実施形態において、特徴は、本開示の特徴を用いて、処理システムおよび/またはネットワークシステムのハードウェアを制御するためのソフトウェアおよび/またはファームウェア、またはプロセッサおよび/またはネットワークと他のシステムとの対話を可能にするためのソフトウェアおよび/またはファームウェアに組み込まれる。このようなソフトウェアまたはファームウェアは、アプリケーションコード、装置ドライバ、オペレーティングシステム、仮想マシン、ハイパーバイザ、アプリケーションプログラミングインターフェイス、プログラミング言語、および実行環境/コンテナを含み得るが、これらに限定されない。適切なソフトウェアの符号化は、熟練したプログラマによって、本開示の教示に基づいて容易に作成することができる。
【0294】
いつかの実施形態において、本開示に教示されたアプローチは、ソフトウェアおよび/またはファームウェアを含む命令を格納または担持する機械可読またはコンピュータ可読媒体であるコンピュータプログラム製品を含む。これらの命令を用いて、本開示に教示されたアプローチのプロセスまたは機能を実行するように、コンピュータなどのシステムをプログラムするまたは構成することができる。機械可読またはコンピュータ可読媒体は、フロッピー(登録商標)ディスク、ハードドライブ、ソリッドステートドライブ、光ディスク、DVD、CD-ROM、マイクロドライブ、光磁気ディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリ装置、磁気カードまたは光カード、分子メモリ、ナノシステム、またはそれらの変形体およびそれらの組み合わせを含むがこれらに限定されない命令および/またはデータを記憶するのに適した任意の種類の媒体または装置を含むことができる記憶媒体を含むことができる。特定の実施形態において、記憶媒体またはコンピュータ可読媒体は、非一時的な機械可読記憶媒体または非一時的なコンピュータ可読記憶媒体である。また、機械可読媒体またはコンピュータ可読媒体は、搬送波または送信信号などの一過性媒体を含んでもよい。
【0295】
したがって、一観点から、本明細書は、ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムおよび方法を記載する。一実施形態によれば、本明細書に記載されたシステムおよび方法は、SQLクエリを実行することによって、より容易およびより管理可能な方法で複雑なスマートコントラクトを作成することができる。また、データ選別を(スマートコントラクトレベルで実行するではなく)ストレージエンジンに戻すことおよびデータの同時読み出しおよび書き込みアクセスをサポートするリレーショナルエンジンに依存することによって、性能を改善することができる。また、ワールドデータベースのステートは、同時読み出し/書き込みアクセスを提供することができる。
【0296】
本開示のさらなる例は、以下の番号付き項で説明される。
第1項
ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするためのシステムであって、
エンタープライズ級の分散型元帳フレームワークと、
分散型元帳ファブリックとを備え、分散型元帳ファブリックは、少なくともトランザクションマネージャと、検証ツールとを含み、
ワールドデータベースのステートを備え、ワールドデータベースのステートは、バージョン付きデータベースと、リレーショナルデータベースインターフェイスとを含む。
【0297】
第2項
リレーショナルデータベースインターフェイスは、バージョン付きデータベースと、分散型元帳ファブリック上で実行される1つ以上のトランザクションとの間にリレーショナルデータベースインターフェイス層を提供する、第1項に記載のシステム。
【0298】
第3項
1つ以上のトランザクションのうちの少なくとも1つは、少なくとも1つのリッチクエリを含む、第2項に記載のシステム。
【0299】
第4項
少なくとも1つのリッチクエリは、リレーショナルデータベースインターフェイスを介してバージョン付きデータベースにアクセスする、第3項に記載のシステム。
【0300】
第5項
少なくとも1つのリッチクエリは、チェーンコードを含む、第2項または第3項に記載のシステム。
【0301】
第6項
上ワールドデータベースのステートは、同時読み出し/書き込みアクセスを提供する、第3項に記載のシステム。
【0302】
第7項
分散型元帳ファブリックは、ブロックチェーンクラウドサービスとして提供され、
ブロックチェーンクラウドサービスは、
ピアコンテナと、
オーダリングコンテナと、
チェーンコードコンテナとを含む、第1項から第6項のいずれか1項に記載のシステム。
【0303】
第8項
ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするための方法であって、
マイクロプロセッサを含む1つ以上のコンピュータにおいて、エンタープライズ級の分散型元帳フレームワークを提供することと、
分散型元帳フレームワークにおいて、分散型元帳ファブリックを実行することとを含み、分散型元帳ファブリックは、少なくともトランザクションマネージャと、検証ツールとを含み、
ワールドデータベースのステートを分散型元帳ファブリックに関連付けることを含み、ワールドデータベースのステートは、バージョン付きデータベースと、リレーショナルデータベースインターフェイスとを含む。
【0304】
第9項
リレーショナルデータベースインターフェイスは、バージョン付きデータベースと、分散型元帳ファブリック上で実行される1つ以上のトランザクションとの間にリレーショナルデータベースインターフェイス層を提供する、第8項に記載の方法。
【0305】
第10項
1つ以上のトランザクションのうちの少なくとも1つは、少なくとも1つのリッチクエリを含む、第9項に記載の方法。
【0306】
第11項
少なくとも1つのリッチクエリは、リレーショナルデータベースインターフェイスを介してバージョン付きデータベースにアクセスする、第10項に記載の方法。
【0307】
第12項
ワールドデータベースのステートは、同時読み出し/書き込みアクセスを提供する、第9、10または11項に記載の方法。
【0308】
第13項
少なくとも1つのリッチクエリは、チェーンコードを含む、第10項またはそれに従属する任意の請求項に記載の方法。
【0309】
第14項
分散型元帳ファブリックは、ブロックチェーンクラウドサービスとして提供され、
ブロックチェーンクラウドサービスは、
ピアコンテナと、
オーダリングコンテナと、
チェーンコードコンテナとを含む、第8項から第13項のいずれか1項に記載の方法。
【0310】
第15項
ブロックチェーンファブリックにおいてSQLベースのリッチクエリをサポートするための命令を担持するコンピュータ可読媒体であって、これらの命令は、読み出されて実行されると、1つ以上のコンピュータに、以下を含むステップを実行させ、これらのステップは、
マイクロプロセッサを含む1つ以上のコンピュータにおいて、エンタープライズ級の分散型元帳フレームワークを提供することと、
分散型元帳フレームワークにおいて、分散型元帳ファブリックを実行することとを含み、分散型元帳ファブリックは、少なくともトランザクションマネージャと、検証ツールとを含み、
ワールドデータベースのステートを分散型元帳ファブリックに関連付けることを含み、ワールドデータベースのステートは、バージョン付きデータベースと、リレーショナルデータベースインターフェイスとを含む。
【0311】
第16項
リレーショナルデータベースインターフェイスは、バージョン付きデータベースと、分散型元帳ファブリック上で実行される1つ以上のトランザクションとの間にリレーショナルデータベースインターフェイス層を提供する、第15項に記載のコンピュータ可読媒体。
【0312】
第17項
1つ以上のトランザクションのうちの少なくとも1つは、少なくとも1つのリッチクエリを含む、第16項に記載のコンピュータ可読媒体。
【0313】
第18項
少なくとも1つのリッチクエリは、リレーショナルデータベースインターフェイスを介してバージョン付きデータベースにアクセスする、第17項に記載のコンピュータ可読媒体。
【0314】
第19項
ワールドデータベースのステートは、同時読み出し/書き込みアクセスを提供する、第16、17または18項に記載のコンピュータ可読媒体。
【0315】
第20項
分散型元帳ファブリックは、ブロックチェーンクラウドサービスとして提供され、
ブロックチェーンクラウドサービスは、
ピアコンテナと、
オーダリングコンテナと、
チェーンコードコンテナとを含む、第15~19項のいずれか1項に記載のコンピュータ可読媒体。
【0316】
上記の説明は、網羅的であることまたは範囲を開示された正確な形態に限定することを意図していない。また、特定の一連のトランザクションおよびステップを用いて実施形態を説明したが、明記しない限り、追加のトランザクションおよびステップの実行を排除しないことは、当業者には明白であろう。さらに、様々な実施形態において、特徴の特定の組み合わせを説明するが、特徴の異なる組み合わせが本開示の範囲に含まれることは、当業者には明白であろう。特に、特定の実施形態、変形例または図面に記載された(装置または方法のような)特徴は、教示および範囲から逸脱することなく、別の実施形態、変形例または図面に記載された別の特徴と組み合わせるまたは置き換えることができる。さらに、本開示の精神および範囲から逸脱することなく、様々な追加、減少、削除、変形、均等物による要素の置換、並びに形態、詳細、実装および用途における他の修正および変更を行うことができることは、当業者には明白であろう。より広い精神および保護範囲は、以下の特許請求の範囲およびその均等物によって定義される。