JP2022521915A - 分散型台帳技術(dlt)を使用したリレーショナルデータの管理と編成 - Google Patents

分散型台帳技術(dlt)を使用したリレーショナルデータの管理と編成 Download PDF

Info

Publication number
JP2022521915A
JP2022521915A JP2021549147A JP2021549147A JP2022521915A JP 2022521915 A JP2022521915 A JP 2022521915A JP 2021549147 A JP2021549147 A JP 2021549147A JP 2021549147 A JP2021549147 A JP 2021549147A JP 2022521915 A JP2022521915 A JP 2022521915A
Authority
JP
Japan
Prior art keywords
distributed ledger
database
sql
query
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2021549147A
Other languages
English (en)
Other versions
JP7500589B2 (ja
Inventor
スリバスタバ、ニーラジ
Original Assignee
ディーエルティー グローバル インク.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ディーエルティー グローバル インク. filed Critical ディーエルティー グローバル インク.
Publication of JP2022521915A publication Critical patent/JP2022521915A/ja
Application granted granted Critical
Publication of JP7500589B2 publication Critical patent/JP7500589B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1834Distributed file systems implemented based on peer-to-peer networks, e.g. gnutella
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

【要約】【解決手段】リレーショナルデータベースの原則に従って分散型台帳にデータを保存できるように、データの管理と編成を可能にするスマートコントラクトツールとオフチェーンツールの両方のセットについて説明する。相互分散型台帳プラットフォームの仕様と再利用可能なコアコンポーネントを組み合わせることで、分散型台帳プラットフォームに実装できるシステムが作成され、リレーショナル原則に準拠した分散型台帳との間のデータの保存と取得が可能になる。このシステムを実現すると、Hyperledger(登録商標)Fabricにシステムチェーンコードを追加でき、JSONとして表されるスキーマとデータを使用できる。使用中、ユーザーは、コード、コンソール、またはすべての更新が分散型台帳トランザクションであるスマートコントラクトからデータを作成、更新、およびクエリを行うことができる。【選択図】 図1

Description

本出願は、リレーショナルデータベースの原則に従って、分散型台帳との間でデータを保存および取得できるようにするデータの管理と整理を対象とする。
最初のリレーショナルデータベースシステムは、1960年代後半のコンピューティングにおける主要な新しい開発に対応して開発された。システムがより大きく、より複雑になるにつれて、新しくまた更新されたプログラムが、古いプログラムによって作成されたデータを処理する必要があることが明らかになった。プログラムはデータをそれぞれ独自の方法で保存することが多いため、既存のシステムではこれが困難であった。リレーショナルモデルは、ストレージと検索の重要な側面を標準化し、それを採用した人々は、より安価なアップグレードやベンダー固定化の削減など、さまざまなメリットを享受した。
逆に、コンピューターベンダーによってプログラム固有のストレージアプローチに導かれた人々は、特にリレーショナルデータベース管理システム(RDBMS)プラットフォームに移行するという大幅に遅れた意思決定が最終的になされたときに、より高いメンテナンスコストとより大きな労力に持ちこたえた。1970年代に、非リレーショナルのHoneywell FACT言語を最終的に廃止するという、長年にわたるオーストラリア国防省のプロジェクトは、これらのコストの証である。
それ以来、コンピューティングの他の分野の進歩は、既存のリレーショナルデータベースツールに互換性がなくしたり、不便にしたりすることがある。同様に、オブジェクト指向プログラミングの台頭は、プログラマーがリレーショナルデータモデルを使用してデータを表現することを一時的に自然でなくした。オブジェクトにカプセル化されたデータは、RDBMSテーブルに分割することは困難であった。ただし、リレーショナル表現の利点は、十分に重要であったため、オブジェクトリレーショナルマッピング(ORM)は、オブジェクト指向プログラミングが引き続き使用される場合には一般的なアプローチである。
一方、分散型台帳技術(DLT)は、今世紀の情報技術革命に相当するものに火をつけ、可能にする可能性を秘めている。分散型台帳技術は、インターネットの最大かつ最も厄介な課題の1つである信頼の欠如に取り組み、解決している。分散型台帳技術は、初期のしかし強力な分散コンピューティングパラダイムであり、実用的な目的でデータを変更不可能にすることでインターネットに信頼をもたらす可能性がある、これまでで唯一のテクノロジーである。残念ながら、既存のRDBMSプラットフォームとツールは、分散型台帳技術の制約と互換性がない。その結果、データがプログラムに密接にリンクされているプログラム/データの固定化は、1960年代のリレーショナルデータベース以前のプログラムよりも、分散型台帳のスマートコントラクトの方がさらに大きくなる。分散型台帳のデータが、開発者の特定の意図である場合にのみ、展開されたスマートコントラクトの詳細に固定されるシステムと方法が望まれる。
本明細書に記載のシステムおよび方法は、分散型台帳に保存する前にリレーショナルデータの管理と統合を可能にするスマートコントラクトツールとオフチェーンツールの両方のセットを提供し、前記分散型台帳の利点を損なうことなくリレーショナルデータベースに関する既存の開発者の知識を活用することを可能とすることによって、当技術分野の前記ニーズに対応するものである。サンプルの実施形態では、データは、リレーショナル原理に従って管理および統合され、選択された分散型台帳プラットフォームに格納され、開発者にすでに馴染みのある構造化照会言語(SQL)などのプログラミング言語を使用してアクセスされる。その結果、分散型台帳に高度にセキュアで監査可能なリレーショナルデータベースが作成される。また、本明細書に記載のシステムおよび方法は、スマートコントラクトとともに使用することで、それらのスマートコントラクトのデータストレージの側面をより扱いやすくすることができる。
サンプルの実施形態では、相互分散型台帳プラットフォーム仕様と再利用可能なコアコンポーネントが一緒になって、Hyperledger(登録商標)などの一般的な分散型台帳技術プラットフォームに実装され、Node.js(登録商標)などの一般的なプログラミングプラットフォームからアクセスできるリレーショナルデータ管理および編成システムを作成する。前記リレーショナルデータ管理および編成システムにより、Hyperledger(登録商標)Fabricで使用するシステムチェーンコードを追加し、JavaScriptObject Notation(JSON)として表されるスキーマとデータを使用できる。また、Fabricのワールドステートデータベースは、データストレージに使用され、FabricのIDプロバイダーは、たとえば、データベースの作成、データベースアクセスのユーザーの承認、テーブルの追加とスキーマの変更、データの書き込み、およびクエリのみを含む5つのレベルのデータアクセス制御に使用される。使用にあたって、前記ユーザーは、コード、コンソール、またはすべての更新が分散型台帳トランザクションであるスマートコントラクトからテーブルを作成、更新、およびクエリできる。
サンプルの実施形態では、システムおよび方法が、リレーショナルデータベース管理クエリを用いて前記分散型台帳のトランザクションデータを含む分散型台帳を実装する分散型台帳プラットフォームをクエリするために提供される。前記方法は、データベースを作成し、前記分散型台帳のデータベースに関する情報を記録し、受信したリレーショナルデータベース管理クエリを前記分散型台帳プラットフォームによって処理できるクエリ操作に変換することを含む。前記クエリ操作は、前記分散型台帳プラットフォームで実行され、クエリ結果が生成され、前記クエリ結果は、前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理される形式で前記分散型台帳のデータベースに記録される。サンプルの実施形態では、前記リレーショナルデータベース管理クエリは、(1)ユーザインターフェースを介してユーザから構造化照会言語(SQL)クエリを受信する、(2)アプリケーションプログラムインターフェイスを介してユーザーアプリケーションからSQLクエリを受信する、 または(3)SQLクエリを実行するスマートコントラクトによって、生成される。
サンプルの実施形態では、リレーショナルデータ管理および編成システムは、SQLクエリを、データ操作言語(DML)書き込み操作、DML読み取り操作、またはデータ定義言語(DDL)操作のいずれか1つであるSQL操作に解析するように適合されている。前記SQL操作のJavaScriptObject Notation(JSON)表現と、前記SQL操作に含まれるすべてのリレーショナルデータは、前記分散型台帳プラットフォームによって処理するために作成される。
他のサンプルの実施形態では、前記SQL操作の実行から生じるトランザクションが、プラットフォーム関連の範囲で分散型台帳への受け入れに向かって進行したかどうかは、例えば、対応するトランザクションのより明確なステータスをフェッチするためにDML書き込み操作の最後にoperation broadcast status(OPSTAT)命令を追加することによって判断する。前記分散型台帳プラットフォームで前記クエリ操作を実行することには、さらに、前記SQLクエリを呼び出すエンティティが前記要求されたSQL操作を実行する権限を持っていることを確認することを含めることができる。前記分散型台帳プラットフォームで前記クエリ操作を実行することには、前記クエリ操作とその結果のJSON表現として前記分散型台帳プラットフォームによって処理および保存できるクエリ操作を作成することを含めることができる。
前記SQL操作がSQL DML書き込み操作である場合、前記方法には、前記SQL DML書き込み操作を実行するために必要に応じて前記分散型台帳プラットフォームからデータを取得すること、前記取得したデータを含むSQL DML書き込み操作を実行する、前記クエリ結果にすべての新規または更新されたレコードのJSON表現を準備すること、および前記SQL DML書き込み操作と更新されたレコードを、前記分散型台帳に含めるために前記分散型台帳プラットフォームによって処理されることができる前記形式で前記分散型台帳プラットフォームに収容すること含めることができる。前記方法はまた、前記分散型台帳への前記SQL DML書き込み操作の受け入れについて前記分散型台帳を監視し、前記SQL DML書き込み操作が成功したかどうかを前記SQLクエリを呼び出すエンティティに通知することを含めることができる。
一方、前記SQL操作がSQL DML読み取り操作である場合、前記方法は、前記SQL DML読み取り操作を実行するために必要に応じて前記分散型台帳プラットフォームからデータを取得すること、前記取得したデータを含む前記SQL DML読み取り操作を実行すること、前記クエリ結果のJSON表現を準備すること、および前記クエリ結果の前記JSON表現を前記分散型台帳に含めるために前記分散型台帳プラットフォームによって処理されることができる前記形式で前記分散型台帳プラットフォームに記録することを含めることができる。前記方法には、前記クエリ結果のJSON表現を前記SQLクエリを呼び出すエンティティに返すことも含めることができる。
サンプルの実施形態では、前記分散型台帳プラットフォームは、Hyperledger(登録商標)Fabricプラットフォームである。このような実施形態では、前記データベースは、チャネルを作成し、前記データベースのコピーを維持するピアコンピュータと前記リレーショナルデータベースに関するメタデータを書き込む通常のトランザクションを定義する構成トランザクションを実行することにより、前記Hyperledger(登録商標)Fabricプラットフォームの前記分散型台帳のワールドステートデータベースとして作成できる。また、前記分散型台帳のトランザクションデータと前記トランザクションデータを変更するためのトランザクション命令を定義するチェーンコードを作成することもできる。前記サンプルの実施形態では、前記チェーンコードは、前記分散元帳プラットフォームのトランザクションデータとして、JavaScriptObject Notation(JSON)でリレーショナルデータベース属性を定義することができる。前記操作の終了時に、前記ワールドステートデータベースは、前記リレーショナルデータベース属性で更新される。また、前記方法は、前記分散型台帳に含めるために前記分散型台帳プラットフォームによって処理されることができる前記形式を説明する、解析および翻訳された構構造化照会言語(SQL)クエリを作成することを含めることができる。例えば、前記SQLクエリは、前記Hyperledger(登録商標)Fabricプラットフォームの前記リレーショナル管理および編成システム仕様のJSON要素を構成することができる。
他のサンプルの実施形態では、トランザクションデータ、およびデータベースの作成や前記分散型台帳への前記データベースに関する情報の記録を含む操作を実行するリレーショナルデータ管理および編成システムを実装するための命令を実行する少なくとも1つのプロセッサを含み、受信したリレーショナルデータベース管理クエリを前記分散型台帳プラットフォームによって処理できるクエリ操作に変換し、クエリ結果を生成するために前記分散型台帳プラットフォームで前記クエリ操作を実行し、および前記分散型台帳に含めるために前記分散型台帳プラットフォームによって処理されることができる形式で前記分散型台帳プラットフォームに記録する、分散型台帳を実装する分散型台帳プラットフォームを含むシステムが提供される。前記システムは、さらに、(1)ユーザーが、構造化照会言語(SQL)クエリを提供するための前記リレーショナルデータ管理および編成システムへのユーザーインターフェース、(2)SQLクエリを前記リレーショナルデータ管理および編成システムへのアプリケーションプログラムインターフェイスを介して前記リレーショナルデータ管理および編成システムに渡すユーザーアプリケーション、または(3)SQLクエリを実行するスマートコントラクトを、含む前記リレーショナルデータベース管理クエリを生成するための手段を含めることができる。
前記システムのサンプルの実施形態では、前記少なくとも1つのプロセッサが、さらに、前記SQLクエリを代替としてデータ操作言語(DML)書き込み操作、DML読み取り操作、またはデータ定義言語(DDL)操作を含むSQL操作に解析する、および前記SQL操作および前記SQL操作に含まれるすべてのリレーショナルデータのJavaScriptObject Notation(JSON)表現を作成する、命令を実行する。前記少なくとも1つのプロセッサは、さらに、前記SQL操作の実行から生じるトランザクションがプラットフォームに関連する範囲まで前記分散型台帳への受け入れに向かって進行したかどうかを決定するために命令を実行することができる。例えば、OPSTAT命令は、対応するトランザクションのより明確なステータスをフェッチするために、前記DML書き込み操作の最後に追加されることができる。
さらなるサンプル実施形態では、前記分散型台帳プラットフォームは、Hyperledger(登録商標)Fabricプラットフォームであり、前記少なくとも1つのプロセッサは、チャネルを作成し、どのピアコンピューターが、前記データベースのコピーおよび前記リレーショナルデータベースに関するメタデータを書き込む通常のトランザクションを維持するかを定義する構成トランザクションを実行することによって、および前記分散型台帳のトランザクションデータを定義するチェーンコードと、前記トランザクションデータを変更するためのトランザクション命令を作成することによって、前記Hyperledger(登録商標)Fabricプラットフォームの前記分散型台帳のためのワールドステートデータベースとして前記データベースを作成する命令を実行する。前記少なくとも1つのプロセッサは、さらに、JavaScriptObject Notation(JSON)のリレーショナルデータベース属性を前記分散型台帳プラットフォーム上の前記分散型台帳の前記トランザクションデータとして定義するチェーンコードおよび前記リレーショナルデータベース属性で前記ワールドステートデータベースの更新情報に対応する命令を実行することができる。前記少なくとも1つのプロセッサはまた、前記分散型台帳に含めるために前記分散型台帳プラットフォームによって処理されることができる前記形式を説明する解析および変換された構造化照会言語(SQL)クエリを作成するための命令を実行することができる。
本明細書で説明される実施形態はまた、本開示全体を通して説明される前記方法を実装するための命令でコード化されたコンピュータシステムおよびコンピュータ可読媒体を包含する。例えば、本明細書に記載の前記システムおよび方法は、本明細書に記載の分散型台帳プラットフォームに実装されたデータベースにデータにアクセスして格納するための機能を提供するために、前記クラウド内のコンピューティングプラットフォームに実装されることができる。
前記本開示は、添付の図面の図に限定ではなく例として示され、同様の参照は類似の要素を示し、以下のようなものである。
図1は、サンプル実施形態における前記リレーショナルデータ管理および編成システムのブロック図である。 図2は、Node.js(登録商標)がプログラミング言語であり、Hyperledger(登録商標)Fabricがサンプル実施形態で使用される前記分散型台帳プラットフォームである具現化における前記リレーショナルデータ管理および編成システムの実装のブロック図である。 図3は、サンプル実施形態における前記リレーショナルデータ管理および編成システムのためのデータベース作成に関与するアクティビティ、コンポーネント、およびデータを示すブロック図である。 図4は、サンプル実施形態における、前記リレーショナルデータ管理および編成システムの既存のデータベースにリレーショナルデータを書き込むための動作を示すブロック図である。 図5は、サンプル実施形態における、前記リレーショナルデータ管理および編成システムの前記ユーザインターフェースによって、または前記リレーショナルデータ管理および編成システムの言語固有SKDおよびアプリケーションプログラムインターフェースを介してユーザのアプリケーションによって要求されたデータ操作言語(DML)読み取りクエリの前記実行を示すブロック図である。 図6は、サンプル実施形態における、スーパーアドミニストレータレベルより下のアクセスのためのユーザを追加するためのリレーショナルデータアクセス制御の第1の部分に含まれるコンポーネントおよびデータを示すブロック図である。 図7は、サンプル実施形態において、ユーザアプリケーションノードとしてモデル化されている、ELEMENT Farbic-Nod.js(登録商標)SKDとユーザのアプリケーションとの相互作用およびそれらが両方ともホストされる実行環境を示すブロック図である。 図8は、サンプル実施形態において、前記リレーショナルデータ管理および編成システムを使用して、分散型台帳への成功したSQL DML書き込み操作の例の論理フロー図である。 図9は、サンプルの実施形態における、前記リレーショナルデータ管理および編成システムを使用して、分散型台帳から成功したSQl DML読み取り操作の例の論理フロー図である。 図10は、サンプルの実施形態における、データ定義言語(DDL)書き込みの正常な実行を示すブロック図である。 図11は、本明細書に開示される前記リレーショナルデータ管理および組織の1つまたは複数の実施形態を実装するために適した専用コンピュータにプログラムされることができる典型的な汎用コンピュータのブロック図である。 図12は、「最初に実行し、次に注文する」設計を示している。 図13は、ピアノードで構成されるブロックチェーンネットワークを示しており、各ノードは、台帳のコピーおよびスマートコントラクトのコピーを保持することができる。 図14は、台帳のインスタンスおよびチェーンコードのインスタンスをホストしているピアを示している。 図15は、複数の台帳をホストしているピアを示している。 図16は、複数のチェーンコードをホストするピアの例を示している。 図17は、前記台帳がすべてのピアで最新に保たれることを保証する、注文者と連携したピアを示している。 図18は、特定のピアおよびアプリケーションのセットが、ブロックチェーンネットワーク内で互いに通信することを可能にするチャネルを示している。 図19は、複数の組織を有するブロックチェーンネットワーク内のピアを示している。 図20は、ピアがチャネルに接続するとき、そのデジタル証明書がチャネルMSPを介してそれ自身の組織を識別することを示している。 図21は、承認された提案応答を返すピアによって独立して実行されるトランザクション提案を示している。 図22は、ブロックをピアに配布することである、注文ノードの第2の役割を示している。 図23は、2つの状態を含む台帳ワールドステイトを示している。 図24は、有効なクレジットカードを持っているだけでは不十分であることを示している-それはまた店によって受け入れられなければならない。 図25は、公開鍵インフラストラクチャ(PKI)の要素を示している。 図26は、Mary Morrisと呼ばれる当事者を説明するデジタル証明書を示している。 図27は、Maryが、自分の秘密鍵を使用してメッセージに署名する例を示している。 図28は、異なるアクターに証明書を分配する証明機関(Certificate Authority:CA)を示している。 図29は、これらの各中間CAの証明書の発行CAがルートCA自体であるか、またはルートCAへの信頼の鎖を有する限り、ルートCAと一連の中間CAとの間に信頼の鎖が確立されることを示す。 図30は、CRLを使用して、証明書がまだ有効であることを確認することを示している。 図31は、アクセスレベルおよびパーミッションの決定を示している。 図32は、データおよび操作オブジェクトの概要を示している。
図1~図32に関する以下の説明は、当業者がそれらを実践できるようにするための特定の実施形態を十分に示している。他の実施形態は、構造的、論理的、プロセス、および他の変更を組み込むことができる。いくつかの実施形態の部分および特徴は、他の実施形態のものに含まれるか、またはそれらの代わりになることができる。請求項に記載の実施形態は、それらの請求項の利用可能なすべての同等物を包含する。
分散型台帳技術(DLT):ネットワークに参加している複数のコンピューター間で複製、共有、および同期されたデジタルデータを可能にする多数の技術のいずれか。分散型台帳技術は、同期されると「分散型台帳」と総称される前記デジタルデータの変更に対して本質的に耐性があるように設計されている。分散型台帳は通常、新しい情報を検証するためのプロトコルに集合的に準拠するピアツーピアネットワークによって管理される。分散型台帳を作成および保守できるシステムは、分散型台帳プラットフォームと呼ばれる。「分散型台帳プラットフォーム」には、Aion、ArcBlock、Cardano(商標)、Enigma、EOS、Ethereum、Hyperledger(登録商標)Fabric、Hyperledger(登録商標)Iroha、Hyperledger(登録商標)Sawtooth、ICON、IOTA、Komodo、Lisk(商標)、MultiChain、Nebilo、NEM、NEO、NxT、Qtum、Smilo、Stella、Straitis、Tezos、Wanchain、Waves、およびZilliqa、に加えて前述の派生物その他などの既知のプラットフォームが含まれる。これらのプラットフォームの多くは、分散型台帳技術プラットフォームのサブセットである「ブロックチェーン技術」または「ブロックチェーン」プラットフォームでもある。
スマートコントラクト:前記分散型台帳プラットフォームで行われる汎用計算を提供するコンピュータープロトコル。スマートコントラクトトランザクションは、単純な場合もあれば、高度なロジックを実装する場合もある。結果として生じるトランザクションは、通常、台帳の参加者に対して透過的であり、追跡可能で不可逆的である。
JSON:JavaScriptObject Notationは、軽量でテキストベースの人間が読めるデータ交換形式である。
SQL:構造化照会言語は、リレーショナルデータベース管理システムにアクセスして操作するための標準言語である。
Node.js(登録商標):ブラウザの外部でJavaScriptコードを実行する無料のオープンソースサーバー環境。Node.js(登録商標)は、ChromeブラウザのJavaScriptランタイム上に構築された非同期プログラミングプラットフォームである。Node.js(登録商標)の詳細については、「Node.js(登録商標)について」 Node.js、Node.js Foundation、https://nodejs.org/en/about/を参照可能。
Hyperledger(登録商標)Fabric:幅広い業界のユースケースにモジュール性と汎用性を提供する、エンタープライズグレードの許諾された分散型台帳プラットフォーム。ファブリックのアーキテクチャには、IDプロバイダー、チャネル、ワールドスケールデータベース、およびユーザーとシステムのチェーンコードが含まれる。Hyperledger(登録商標)Fabricの詳細については、添付の付録Aを参照のこと。
チェーンコード:ファブリックでは、ソフトウェアは、次のいずれかを行う。(a)1つまたは複数の資産、および前記資産を変更するためのトランザクション命令、 言い換えると、ビジネスロジックを定義する。(b)前者の実行を管理するルールとアクティビティを含むプラットフォームを拡張または変更する。チェーンコードは、キーと値のペアまたはその他の状態データベース情報を読み取ったり変更したりするためのルールを適用する。チェーンコード関数は、前記台帳の現在の状態データベースに対して実行され、トランザクション提案を通じて開始される。チェーンコードを実行すると、ネットワークに送信され、すべてのピアの前記台帳に適用される一連のkeyーvalue書き込み(書き込みセット)が発生する。チェーンコードは、プラットフォームに依存しないスマートコントラクトの概念と同等と見なすことができる。
Apache CouchDB(登録商標):Hyperledger(登録商標)Fabricに組み込まれているワールドステートデータベースのオプション。Apache CouchDB(登録商標)は、チェーンコードデータ値がJSONとしてモデル化されている場合、リッチクエリをサポートする。CouchDB(登録商標)のインデックス作成とクエリは、ここで説明する前記リレーショナルデータ管理および編成システムのサンプルの実施形態で使用するためのオプションである。CouchDB(登録商標)の詳細については、添付の付録Aを参照のこと。
リレーショナルモデルの価値は、データの表現とそれを読み書きするプログラムとの間に独立性を確立することから生まれる。データ管理のための再利用可能なフレームワークを奨励することに加えて、リレーショナルデータベース管理システム(RDBMSs)は、前記データの書き込みに関するルールを適用し、あるプログラムのデータ操作が他のプログラムのそのデータを見つけてアクセスする能力を壊すことを不可能にする。これらの原則の第1番目は、「順序依存」の非合法化である。あるプログラムが、特定の順序で物理的に維持されているデータに依存している場合、この要件を知らない別のプログラムが最初のプログラムを壊す可能性がある。第2番目の原則は、「インデックス依存」の防止である。インデックス作成は、おそらく他の操作を犠牲にして、一部の操作のパフォーマンスを向上させるためのデータの冗長ストレージである。すべてのプログラムのパフォーマンス設定に対応することは不可能であるが、前記リレーショナルモデルは、少なくとも、データセットのインデックスが変更された場合にプログラムが破損しないことを保証する。第3番目の原則は、「アクセスパスの依存」を防ぐことである。前記リレーショナルモデルでは、プログラムは読み取りと書き込みを行うデータを知るだけでよく、前記データがストレージ内でどのように編成されているかについての追加情報は必要ない。RDBMSsが登場する前は、データが階層構造に編成されていたため、後で再配置され、そのデータを見つけて操作するプログラムの機能が不必要に損なわれることがよくあった。
ここで説明する前記リレーショナルデータ管理および編成システムは、これら3つの原則を実現する。ただし、これら3つの原則を実現する、分散型台帳で使用するリレーショナルデータ管理および編成システムの作成に伴う課題を理解するには、分散型台帳プラットフォームに固有の考慮事項をまず初めに理解する必要がある。
分散型台帳技術は、2009年に発明された用途である暗号通貨と一般の人々の心の中で密接に関連している。しかし、ピアツーピアマネーの作成は、他の目的のための分散型計算方式へのまったく新しいアプローチの発明でもあった。保証されたデータの可用性、集中制御からの解放、または暗号化された改ざん防止などの機能を活用するために、さまざまな用途が検討されている。
分散型台帳の採用に関する現在の取り組みは、インターネットの早期採用を彷彿とさせる。Webサイトが成熟するにつれて、Webサイトを圧迫したデータ管理に関する同じ失敗を再現するか、回避する可能性がある。初期のWebサイトと同様に、分散型台帳の暗号通貨使用は、比較的単純なデータ構造とそれらを管理するためのハードコードされたビジネスロジックを特徴としていた。しかし、その後のスマートコントラクトの発明により、任意の複雑さのデータとルールへの扉が開かれた。
サプライチェーンロジスティクスのような企業の使用事例は、分散型台帳に情報とロジックを競争相手の量で加えており、すぐに従来のソリューションを大幅に上回るだろうが、既存の標準化されたデータ管理ツールの利点はない。すべてのプログラマーが独自のストレージを設計すると、その結果、データは、それを書き込むプログラム(スマートコントラクト)と緊密に結合される。この結合を減らすには、ここで説明するようなリレーショナルデータ管理および編成システムが必要である。
残念ながら、分散型台帳でその接続を切断することは、リレーショナルデータベースを実装するときに直面する状況よりも複雑である。元の完全に分散化された形式において、分散型台帳は、実際には、参加者間のコンセンサスと信頼を形成するために、ロジックとデータ間の緊密な接続に依存している。すべての参加者は、まったく同じロジックを実行し、まったく同じ結果を受け取ることを確認する。これは、これらの分散型台帳プラットフォームでのデータ管理にいくつかの大きな影響をもたらす。たとえば、分散型台帳へのデータの書き込みに影響を与えるデータ管理システムの任意の部分は、前記データを管理する前記スマートコントラクト内およびその制御下に配置され、本質的に前記スマートコントラクト自体の一部になる。また、前記スマートコントラクトの一部として、前記データは前記ネットワーク内のすべての参加者に伝播されるため、前記参加者は同じデータ作成ロジックを実行できる。
ただし、ロジックとデータ間のこの結合により、制約のある分散型台帳プラットフォームの場合であっても、前記リレーショナルモデルの利点が無関係になることはない。まず、団体協約によってデータを更新できるようにする同じコンセンサスメカニズムを構成して、参加者が既存のスマートコントラクトのアップグレードまたは追加に同意できるようにすることができる。ただし、これらの契約が既存の分散型台帳データを読み取って使用できない場合、それらは役に立たない。スマートコントラクトは、一般的に今日それを行うことができず、その結果、そのようなアップグレードは、その有用性にもかかわらず、製作物としての分散型台帳システムでは一般的に見られない。
個々のスマートコントラクトプログラム内でさえ、前記契約の範囲と複雑さが増すにつれて、ストレージへの一貫したアプローチがますます重要になってきている。今日の電子通貨と取引可能な資産の比較的単純なルールは、多くの開発者、再利用可能なコンポーネント、および進化する要件を含む、完全に分散された台帳ベースのサプライチェーンとソーシャルプラットフォームに取って代わられている。これらの開発者は、大規模な従来のプログラムの場合と同様に、データストレージへの予測可能なアプローチを望んでおり、前記リレーショナルモデルはその予測可能なアプローチを提供する。
前記リレーショナルモデルの有用性は、一部のプラットフォームでのデータ自体へのアクセス許可を除いて、コンセンサスによって管理されていないため、純粋な読み取り操作の場合にさらに大きくなる。これにより、新しい理由で既存のデータを使用する価値がある状況が増える。前記分散型台帳のデータがリレーショナルルールに従って保存されている場合、前記元のスマートコントラクトプログラマーが想定していた以上の目的で、前記分散型台帳の内部または外部で実行されているRDBMSシステムによって効率的に読み取られて処理される可能性がある。
分散型台帳技術のすべての実装がすべての分散型台帳技術機能を利用しているわけではなく、暗号通貨のようなパブリックネットワークで見られる相互不信のレベルを想定することを余儀なくされている。特に企業環境では、さまざまな理由から、部分的な採用が実際に一般的である。一般的な状況には、暗号化された改ざん防止やデータ複製などの機能を実現するための便利な方法として、分散型台帳プラットフォームを使用することが含まれる。企業はまた、おそらく将来のより分散されたアプリケーションへの第一歩として、緩和されたコンセンサスルールまたは一元化されたフロントエンドを使用して、完全な制御下で分散型台帳ネットワークを実装する。また、信頼度の高いコンソーシアムは、サポートスタッフに対する厳格なスマートコントラクトの実施とともに分散型台帳ネットワークを設定するが、管理者と内部監査人は、分散型台帳データを自分の権限で直接更新できる。いずれの場合も、分散型台帳データは、読み取り専用操作の場合と同様に、読み取りと書き込みの両方で従来のデータベースとまったく同じように管理されることができる。
サンプル実施形態
本明細書に記載されるリレーショナルデータ管理及び編成システムは、上述した利点を届け、異なる分散型台帳プラットフォーム及びプログラミング言語にわたるリレーショナルデータ管理及び編成システムの実装を標準化する1組の仕様を提供する。本明細書に記載されるリレーショナルデータ管理及び編成は、分散型台帳に向けてのリレーショナルデータの管理及び編成を指示するに当たり使用されるSQL(ストラクチャード・クエリ・ランゲージ)の標準ダイアレクトのサブセットも提供する。本明細書に記載されるリレーショナルデータ管理及び編成システムは、多種多様なプラットフォーム及び言語にわたる実装に向けて更に設計されてきた。サンプル実施形態では、リレーショナルデータ管理及び編成システムは、Hyperledger(登録商標)ファブリック分散型台帳ネットワーク及びNode.js(登録商標)プログラミング言語で実装され、Node.js(登録商標)で書かれたユーザプログラムをサポートするメカニズムを有する。しかしながら、他の分散型台帳プラットフォーム及びプログラミング言語が、そのようなプラットフォーム及び言語の付随する利点及び欠点と共に使用されてもよいことが理解されよう。
リレーショナルデータ管理及び編成システムの説明は、全ての実装をガイドすることが意図される1組の仕様、インターフェース、及びコアコンポーネントから始まる。図1は、サンプル実施形態のリレーショナルデータ管理及び編成システム100のブロック図である。図1に図示されるリレーショナルデータ管理及び編成システム100の部分は、全ての実装で共通であり、一方、他の部分はカスタマイズされるが、1組の共通仕様に従う。図1は、これらのコンポーネント及び仕様を示すのに適合されたコンポーネント図である。この説明全体を通して、リレーショナルデータ管理及び編成システム100は、説明のために「ELEMENT」とも呼ばれる。
共通仕様は、概念要件を示す<<仕様>>ステレオタイプのオブジェクト要素として表される。仕様は、リレーショナルデータ管理及び編成システムの全ての実装の中で共通の方法で実装されることが予期される態様である。<<抽象>>ステレオタイプは、提示される必要があるが、各実現で別様に実装される実際のソフトウェアコンポーネントを表す。示されるインターフェースもまた、全ての実装に共通する仕様である。
言語固有ソフトウェア開発キット(Language Specific Software Development Kit:SDK)コンポーネント102は、ユーザアプリケーションと統合し、コマンドをリレーショナルデータ管理及び編成システム(ELEMENT)API104に中継する。言語固有SDK仕様102は、異なるユーザプログラミング言語にわたり共通の経験を生み出すことを目的とする。サポートされるコマンドの中には、SQLのサブセットがあり、これはELEMENT SQL105として本明細書では指定される。言語固有SDK102からの他の全ての呼び出し及びELEMENTユーザインターフェース(UI)106からの入力と共に、受信したコマンドは、ELEMENTコンソール108によりパーズ、妥当性確認、且つ対処され、ELEMENTコンソール108はELEMENTデータ定義言語(Data Definition Language:DDL)パーサ110への依存性を有する。ELEMENT UI106は、管理タスク及び報告タスクについての直接人間対話に対処する。ELEMENT UI106は、有効な入力クエリを構築するのにユーザを支援し、システムレスポンスを編成フォーマットで表すグラフィカル・ウェブ・プラットフォームである。
サンプル実施形態では、DDL演算のみが、ELEMENT DDLパーサ110を介してELEMENTコンソール108により扱われる。データ操作言語(Data Manipulation Language:DML)演算は、サービス・レイヤ・インターフェース114を経由して分散型台帳プラットフォーム固有コンポーネント112に沿って渡され、分散型台帳プラットフォーム固有コンポーネント112による対処に向けてELEMENT SQL DMLパーサ116によりパーズされる。上述されていない機能は、一連の分散型台帳プラットフォーム固有コンポーネント112により実現される。サービス・レイヤ・インターフェース114は、ELEMENTコンソール108と、これらのコンポーネント及びそれらの機能のエントリポイントである分散型台帳プラットフォーム固有サービスレイヤ118との間のリンクとして働く。サービス・レイヤ・インターフェース114は、恐らくはユーザのスマートコントラクトにより開始される演算を除き、全てのアクションで呼び出される。
分散型台帳プラットフォーム固有サービスレイヤ118は、リレーショナルデータ管理及び編成システム100の主要演算論理を形成し、全てのユーザ及びデータ管理演算の達成を担当する。そのような演算は、分散型台帳プラットフォーム固有サービスレイヤ118自体とELEMENT特徴120が追加された分散型台帳プラットフォームとの間で分割される。作業の厳密な分割は、分散型台帳プラットフォームの性能に依存する。機能は3つのサブ仕様により提供される。
1.リレーショナル・データ・アクセス制御仕様122は、リレーショナルデータ管理及び編成システム100の全ての実装が続く5つのレベルの粒度の粗いアクセス制御モデルを指定する。この仕様は、ユーザの役割及びユーザが、データへのアクセスを含め、リレーショナルデータ管理及び編成システム100のシステム機能へのアクセスにいかに影響するかを文書化する。アクセス制御は、異なるプラットフォームで大きく異なる手法を使用する。仕様は付録Bは共通の態様を文書化する。
2.分散型台帳仕様上のリレーショナルデータ124は、データ表現の要件(JSONスキーマ)及びサポートされるデータ演算を定義する。この仕様は、付録Cにおいてリレーショナル・データ・ストレージについての要件を文書化する。
3.スマートコントラクト統合仕様126は、どのリレーショナルデータ特徴がスマートコントラクトからアクセス可能かを示す。
言語固有SDK102はそれぞれ、分散型台帳アプリケーション実装で人気のあるプログラミング言語からELEMENT API104の全機能にアクセスするインターフェースを提供する。これらのSDKの仕様は、関数名、パラメータの順序及び意味、戻り値、及びエラー等に関して一貫性を最大化する。ファブリック及びNode.js(登録商標)を使用して実装される実現について以下説明する。
サンプル実施形態では、ELEMENT API104は、データベース演算を呼び出す共通のエントリポイントとしてリレーショナルデータ管理及び編成システム100内で使用されるインターフェースである。ELEMENT UI106及び言語固有SDK102が何であれ、使用中の実現に存在する言語固有SDK102の両方により呼び出される。「REST API」と呼ばれることもあるウェブインターフェースの形態で指定される。ELEMENT API104は、ELEMENTDB_コンソール108により実装され、リレーショナルデータ管理及び編成システム100の全ての実現で再使用される。ELEMENT API104の更なる詳細は付録Dに提供される。
ELEMENT UI106は、ユーザが、リレーショナルデータ管理及び編成システム100により実装されるデータベースを用いて手動で作用できるようにするユーザ・インターフェース・コンポーネントである。ELEMENT UI106は、ユーザを追加し、ユーザ・アクセス・レベルを調整し、内蔵テキストエディタを使用してSQLクエリを利用可能なデータベースに対して実行し、クエリ例及びELEMENT固有SQL言語拡張のシンタックスを含むユーザドキュメントにアクセスし、提出されたクエリのステータス情報を閲覧し、実行が首尾よく完了したクエリからの戻り値を閲覧する能力をユーザに提供する。
ELEMENTコンソール108及びELEMENT SQL DDLパーサ110は、リレーショナルデータ管理及び編成システム100の全ての実現に存在するコアコンポーネントである。ELEMENTコンソール108は、言語固有SDK102を発端とするデータベースコマンドをELEMENT API104(代表的状態転送(representational state transfer:REST)APIである)を介して又はこれもまたELEMENTコンソール108がサービングするユーザからELEMENT UI106を介して直接、受け入れる。ELEMENTコンソール108は、それらのコマンドを、リレーショナルデータ管理及び編成システム100の分散型台帳プラットフォーム固有コンポーネント112にリンクするサービス・レイヤ・インターフェース114に渡すことができる形態に変換する。
サンプル実施形態では、リレーショナルデータ管理及び編成システム100の共通の構成要素(104、106、108、110)は、Node.js(登録商標)ではウェブサービスとして実装され、デプロイ柔軟性及び必要であれば水平スケーリングを可能にする。
ELEMENT SQL105は、典型的なSQL演算を幾つかのELEMENT固有拡張と共に含み、開発者に最も馴染みがあるRDBMS演算を記述するためのグラマーである。サンプル実施形態では、リレーショナルデータ管理及び編成システム100のSQLシンタックスは、ISO/IEC9075(現在はSQL:2016)のサブセットと互換性があるように設計された。アクセス管理及び実装のために、ELEMENT SQLでの演算は、DDLクエリ、DML書き込みクエリ、及びDML読み出しクエリに分類されてきた。
SQLへのELEMENT拡張は、分散型台帳データ環境で作業するための適合及び簡易関数を含む。これらの拡張は、SQLシンタックスと併せて使用されて、ELEMENTシステムに有意なクエリを形成するELEMENT固有キーワードである。サンプル実施形態における拡張キーワードは、以下を含む:
1.OPSTAT(Operation Broadcast Status:演算ブロードキャストステータス)-この演算は、特定の演算のトランザクションが、利用される特定の分散型台帳プラットフォームに関連する程度まで分散型台帳に進入したか否かをチェックする。DDL演算のOPSTATは、リレーショナルデータ管理及び編成システム100に向けてデフォルトにより設定されるが、OPSTATは、DML書き込み演算の終わりに追加して、そのトランザクションのより確定的なステータスをフェッチすることができる。OPSTATが使用されている間、予期される可能な3つのレスポンスがある-成功、失敗、又は時間切れ。
2.クエリレベル-クエリレベル特徴は、DML読み出し演算(例えば、SELECT)と共に専ら機能して、リレーショナルデータ管理及び編成システム100の特定のレコードについてのメタデータ情報をフェッチする。クエリレベルを使用することにより得られる2つのレベルの情報がある-第1のレベルの情報はレコードについての基本情報であり、第2のレベルの情報は、レコード作成日、最終変更日、ユーザによる変更、及び他の詳細等の粒度の細かい情報を提供するより深いクエリである。
3.ブックマーク-この特徴は、リレーショナルデータ管理及び編成システム100におけるレコードカウントにより定義されるページにおけるテーブルデータの検索に関連する。デフォルトにより、ローカウントに限度を有して実行されるあらゆるクエリは、同じ基準に基づいてデータの次の等サイズページへのリファレンスとして働くブックマーク値により達成される。ブックマークキーワードが提供される場合(SELECTクエリのみが該当する)、クエリ結果と共に含まれることになる。
4.ELEMENTカラムデフォルト(ELEMENT_COLUMN_DEFAULT)-このキーワードは、更新又は挿入SQL演算と併用されて、リレーショナルデータ管理及び編成システム100におけるテーブルカラムにデフォルト値が使用されるべきであることを示す。デフォルト値は、テーブル作成中、カラムに割り当てることができる。デフォルト値なしで構成されたカラムは、このキーワードにより影響されない。
付録EにおけるELEMENT SQL仕様は、リレーショナルデータ管理及び編成システム100による処理のためのクエリ及びコマンドを表すのに使用することができるSQLシンタックスの変形を形成するために、SQLシンタックスと組み合わせてこれらの各キーワードの追加詳細を提供する。
サービス・レイヤ・インターフェース114は、分散型台帳プラットフォームに向けてリレーショナルデータ管理及び編成システム100のあらゆる実現でサポートされるべき機能を含む。サービス・レイヤ・インターフェース114の仕様は、インターフェース全体に、このサービスレイヤ又は分散型台帳プラットフォーム自体の何れかで実現される機能のサブセットを加えたものを包含する。これらの機能は、
データベースの作成及びドロップ、
テーブルの作成、変更、及びドロップ、
データベース・オブジェクト・メタデータの検索、
DML演算、例えば、レコードの挿入及び選択、
インデックスの作成、変更、及びドロップ等の更なるDDL演算、
ユーザ特権管理
を含む。
なお、分散型台帳コンテキストでの変更及び削除は常に、分散型台帳データ履歴の不変性により、変更又は削除インジケータの添付により行われる。リレーショナルデータ管理及び編成システム100は、バルク・トランザクション・サポートを提供し、少なくともレコードレベル変更を包含することも求められる。
サンプル実施形態では、サービス・レイヤ・インターフェース114は、Node.js(登録商標)で実装され、標的とされるSDK言語又は分散型台帳プラットフォームに関係なく再使用される。インターフェースを介して受け取ったリクエストのサービスは、分散型台帳固有コンポーネント112により実行され、幾つかの関数は、スマートコントラクト統合の達成に必要とされるため、分散型台帳プラットフォーム自体でのみ実現可能である。
ELEMENT特徴仕様120が追加された分散型台帳プラットフォームは、リレーショナル機能がそのプラットフォームのスマートコントラクトにより使用可能であるために、分散型台帳プラットフォームで直接実装されるべき機能を記述する。プラットフォーム自体のように、これらの実装の手法は大きく異なることになる。これらの仕様は、リレーショナルデータ及びスキーマの共通JSONベスデータフォーマットを含め、何がなお共通であるかを記載する。仕様は3つのカテゴリに分割される:分散型台帳でのリレーショナルデータ、アクセス制御、及びスマートコントラクト統合。
1.分散型台帳でのリレーショナルデータ(Relational Data On Distributed Ledger:RDODL)仕様
5つの馴染みのある抽象化が、リレーショナルデータ管理及び編成システム100でのリレーショナルデータ及び関連する機能の指定に使用される。それらはデータベース、テーブル、フィールド、インデックス、及びレコードである。これらの概念が異なる分散型台帳プラットフォームで実装される方法には大きな違いがあるが、以下はあらゆるプラットフォームで該当する:
1.5つの各要素タイプの各インスタンスは、標準ELEMENTフォーマットでスタンドアロンJSONドキュメントにより表され、
2.これらのドキュメントは、他の分散型台帳トランザクションと同じ方法及びコンセンサスを使用して分散型台帳に書き込まれ、
3.これらの要素の1つへの状態の各変更又は変化は、JSONドキュメントの完全な更新されたバージョンを分散型台帳に添付することにより表される。
5つのオブジェクトのJSONスキーマ定義及び索引付けの最小要件は、リレーショナルデータ管理及び編成システム100の設計において正式に指定される。
2.リレーショナル・データ・アクセス制御仕様
リレーショナルデータ管理及び編成システム100の実装は、データベースレベルで個々の分散型台帳アイデンティティに定義される粒度の粗いアクセス制御をサポートする。5つのアクセスレベルに認められた特権は以下である:
-SuperAdimn-作成及びドロップ等のデータベース管理に、Adimnアクセスレベルの全ての特権を加えたもの。
-Admin-特権管理機能へのアクセスに、DDLアクセスレベルの全ての特権を加えたもの。
-DDL-テーブル及びインデックスのスキーマを変える関数を含む(例えば)DDL等として分類される機能へのアクセスに、DML書き込みアクセスレベルの全ての特権を加えたもの。
-DML書き込み-挿入等のデータ書き込みを含むDML書き込みとして分類される機能へのアクセスに、DML読み出しアクセスレベルの特権を加えたもの。
-DML読み出し-DML読み出しとして分類される機能へのアクセス。リレーショナルデータの選択クエリ、スキーマ検索、統計の閲覧等を含む。
データ定義言語(Data Definition Language:DDL)は、リレーショナルデータの構造、編成、又は記述を変える演算を指す。データ操作言語(Data Manipulation Language:DML)は、リレーショナルデータ自体が関わる演算を指す。
リレーショナルデータ管理及び編成システム100の実装では、及びリレーショナルデータが分散型台帳に格納された他のデータと同等の分散型台帳特性を有するという要件のために、アクセスは、分散型台帳演算に使用されるものと同じアイデンティティに基づき、スマートコントラクトの統合を可能にする。
3.スマートコントラクト統合仕様
述べたように、リレーショナルデータ管理及び編成システム100の主要態様は、スマートコントラクトから直接、リレーショナルデータ機能の大半にアクセスする能力である。スマートコントラクト統合では、スマートコントラクトは、DDLデータベース演算を除き、言語固有SDK102に指定された関数と同等の関数を実行する能力を有する。これらの呼び出しの分散型台帳考慮事項は、例えば、コンセンサス並びに入力及び結果の不変記録は、ネイティブのスマートコントラクト実行と同等である。また、これらの関数の呼び出しは、リレーショナルデータ管理及び編成システム100が実現されている分散型台帳プラットフォームで可能な程度まで、言語固有SDK102で記述される形態、ネーミング、及びセマンティクスに準拠すべきである。スキーマ変更等のDDL動作は、1つの分散型台帳トランザクション内での実行がサポート可能ではないような、リレーショナルストレージへの広範囲の更新を含むことが多いため、スマートコントラクト統合から除外される。
ELEMENT特徴仕様120が追加された分散型台帳プラットフォームは、実装に関係なく、非分散型台帳プログラマにとって既に馴染みがあるシンタックス及びセマンティクスを使用して分散型台帳でのリレーショナル・データ・ストレージ及び演算を可能にし、分散型台帳プラットフォームにわたり同一である1組の共通インターフェース、シンタックス、及び要件、特に、リレーショナルデータ管理及び編成システム100の全ての実装で共通であるSQLシンタックスを使用する能力を記述することが理解されよう。ストレージは、分散型台帳プラットフォーム実装にわたる将来のデータ可搬性を容易にする標準化JSONデータフォーマットを使用して実装される。1組の必要とされる機能はプラットフォームにわたり標準化され、したがって、分散型台帳プラットフォームの選択は、リレーショナルデータ管理及び編成システム100のようなRDODLプラットフォームを使用する判断とは別個の考慮事項であることができる。そのような機能は、言語固有SDK102、ユーザコンソール及びAPI、又はスマートコントラクトを介した一貫するリレーショナル・データ・ストレージ・アクセスを可能にする。
Hyperledger(登録商標)ファブリックでのリレーショナルデータ管理及び編成システム100
サンプル実施形態では、分散型台帳プラットフォームにHyperledger(登録商標)ファブリックを使用するNode.js(登録商標)アプリケーションのソフトウェア開発キットが提供される。
図2は、ファブリック実装がいかに、本明細書に記載されるリレーショナルデータ管理及び編成システム100の仕様及び追加の機能を実現するかの視覚的概説を提供する。サンプル実施形態では、ファブリックでのリレーショナルデータ管理及び編成システム100のRDODL実現は以下の態様を含む。リレーショナルデータ管理及び編成システム100のデータベースは、ファブリックの「チャネル」概念を利用する。リレーショナルデータ管理及び編成システム100のファブリック・サービス・レイヤは、新しいデータベースが要求される都度、ファブリックSDK(分散型台帳プラットフォームと共に含まれる)を使用して、ファブリックチャネルを作成する。システムチェーンコードは、リレーショナルデータ管理及び編成システム100の機能を含み、ピアノードに既に存在し、新たに作成されたチャネルにアクセス可能になる。チャネル作成はまた、新しい分散型台帳及び「ワールドステート」データベースを参加している全てのピアノードに自動的にセットアップする。また、スクリプトは、リレーショナルデータ管理及び編成システム100のシステムチェーンコードを呼び出すトランザクションを開始して、分散型台帳にデータベースについての高レベル情報を記録する。続く全てのデータベース書き込み演算は、同様のトランザクションと、RDODL仕様に準拠するJSONフォーマットでデータオブジェクトを分散型台帳に添付することとを含む。台帳へのデータベース情報のそのような各添付は、ワールド・ステート・データベースにおける各ピアによっても反映される。これは、各データオブジェクトの現在バージョンを読み出し演算に利用できるようにする。
リレーショナルデータ管理及び編成システム100のコアコンポーネント及び仕様に加えて、図2は、Node.js(登録商標)がプログラミング言語であり、Hyperledger(登録商標)ファブリックが使用される分散型台帳プラットフォームである実現でのリレーショナルデータ管理及び編成システムの実装のブロック図である。図2は、ファブリック/Node.js(登録商標)実装がいかに、図1に概説された仕様を幾つかの追加の機能と共に実現するかにフォーカスしている。
図2に示されるように、Node.js(登録商標)SDKコンポーネント200は、言語固有SDK102のユーザ言語固有機能を実現し、開発者が、開発者のアプリケーションコードから直接、リレーショナルデータ管理及び編成システム100と対話できるようにする。Node.js(登録商標)アプリケーションと併用されるように開発されたNode.js(登録商標)SDKコンポーネント200のバージョンの詳細は付録Fに提供される。ELEMENTDBコンソール108、ELEMENT API104、ELEMENT UI106、及びサービス・レイヤ・インターフェース114は、全ての実装に共通であり、図1と同一である。それらの下で、ELEMENTファブリックサービス202は、全てのプラットフォーム演算への間口を実現する。ELEMENTファブリックサービス202は、APIレイヤと分散型台帳との間の対話の仲介者として働くサービス・レイヤ・インターフェース114を実装する。そのサービスは、付録Gにより詳細に説明されるように、RDBMS関連演算の実行に役立つ。ELEMENT SQLパーズの実現は、ファブリック実現に2回出現するElementパーサ204と呼ばれるコンポーネントにより実現される。まず、Elementパーサ204は、ELEMENTDBコンソール108に依存するものとして出現し、DDLパーサを実現する。これは全ての実現にとって共通する。次に、Elementパーサ204は、Elementチェーンコード206に依存するものとして出現し、DMLパーズを提供し、DML SQLをユーザ・チェーンコード・スマート・コントラクトでサポート可能にする。Elementパーサ204の仕様は付録Hに提供される。
分散型台帳プラットフォーム+ELEMENT特徴仕様への依存性を通して直接、ファブリックサービス202をサポートするのは、ユーザが登録し、アクセス特権が記録されたアイデンティティプロバイダ(例えば、ファブリック証明機関208)、特定の索引付け機能のために直接アクセスされるワールド・ステート・データベース(例えば、ファブリック・ワールド・ステート・データベース210)、及びリレーショナルデータ管理及び編成システム100に向けてカスタマイズされたHyperledger(登録商標)ファブリック214のコアコンポーネントであるELEMENTファブリック・ピア・イメージ212である。
Elementチェーンコード206は、ファブリックに対して全てのデータベース関連演算を実行し、アイデンティティプロバイダ(例えば証明機関208)及びワールド・ステート・データベース(例えば、ファブリック・ワールド・ステート・データベース210)への依存性も有するELEMENTファブリック・ピア・イメージ212に追加される更に作成されたシステムチェーンコードである。ピア自体内の台帳ストレージと組み合わせて、これらは、ELEMENTファブリックピア214がアクセス制御を有するリレーショナルデータを実現できるようにする。また、ユーザのスマートコントラクトはシステムチェーンコードを呼び出すこともあるため、これはスマートコントラクト統合も同様に実現する。Elementチェーンコード206の仕様は付録Iに提供される。
図3は、リレーショナルデータ管理及び編成システム100でのデータベース作成に関わるアクティビティ、コンポーネント、及びデータを示すブロック図である。データ毎のデータベース作成は2つのファブリックトランザクションを含む。第1のものは、チャネルを作成し、どのピアがデータベースのコピーを維持するかを定義する「構成トランザクション」である。第2のものは、リレーショナルデータベース自体についてのメタデータを書き込む通常のトランザクションである。
図3は、左に図示される統合モデリング言語(unified modeling language:UML)アクティビティモデルと、ELEMENTファブリック・サービス・レイヤ202(右側)のトポロジに重ねられたUMLオブジェクト図及びこれらのオブジェクトをホストする、デプロイされたファブリックネットワークとの組合せである。図3は、一連の演算を左側に図示し、システムがファブリックにおけるリレーショナルデータ管理及び編成システム100で新しいデータベースを作成するように求められている間又は求められた直後に存在する関連データを右側に図示する。データベースの作成は、ファブリックのチャネル(分散型台帳データ分離)作成メカニズムに追加の機能を加えたものを利用する。
図3の左半分のブロックは、データベース作成に関連するコンポーネント、すなわち、ファブリックサービス202及びファブリックピア214である。データベース作成リクエストを最初に処理するとき、3つのデータオブジェクトがサービスレイヤにより作成される。示されるように、ファブリックチャネル構成ファイル準備アクティビティ300は、ネットワークにより使用される<<チャネル構成ファイル>>チャネル.tx302を作成する。ジェネシスブロックアクティビティ304との生成構成トランザクションは、ジェネシスブロックを含み、チャネルを開始する特別なファブリックトランザクション<<ファブリック構成tx>>306を作成する。ジェネシスブロックは、初期構成を含む、分散型台帳に記録されるべき提案される第1のデータである。<データベース名>ブロックはジェネシスブロックそれ自体である。それとチャネルの両方には、リレーショナルデータ管理及び編成システム100のデータベースの名前と一貫する名前が与えられる。チャネル作成及び承認ピアノードのチャネルアクティビティへの参加308は、<<ファブリック構成tx>>306からチャネル構成データ310を作成する。チャネル作成及び承認ピアノードのチャネルアクティビティへの参加308は、ジェネシスブロック314及び対応する空のワールド・ステート・データベース322を含む台帳313も作成する。リレーショナルデータ管理及び編成システム100のデータベース属性のデータ表現を含むファブリックトランザクション準備アクティビティ312は、リレーショナルスキーマと、リレーショナルデータ管理及び編成システム100のこのデータベースに格納されるデータを支配する他の属性とを表すJSONオブジェクトを含むファブリック分散型台帳トランザクション<<ファブリックtx>>316を作成する。初期データベーススキーマと共にファブリックトランザクション提出318は、ファブリック分散型台帳トランザクション<<ファブリックtx>>316をファブリックブロック320に組み込む。最後に、ファブリックピア214は、324において、リレーショナルデータ管理及び編成システム100のデータベースの属性でワールド・ステート・データベース322を自動的に更新する。
チャネルは、内部でデータがファブリック分散型台帳ネットワークで共有される境界である。エリア326外のピアノードは、スキーマ情報又はデータを受け取らない。ノード間のネットワーク接続も示される。それらは、ファブリックノード間の通常の相互接続と、ファブリック・サービス・レイヤ内のファブリックSDKライブラリ(図示せず)がピアノードと交信するHTTPパス328とを含む。なお、ファブリックSDKは、Hyperledger(登録商標)ファブリックにより供給されるコンポーネントであり、クライアントプログラムが基本分散型台帳演算をファブリックプラットフォームに対して開始できるようにする、リレーショナルデータ管理及び編成システム100のファブリックサービスに依存するものとして含まれる。
ファブリックネットワークにおいてチャネルが作成され、トランザクションが処理される全プロセスはモデリングされず、上記オブジェクトは、それらのステップ中、ネットワークに通信され、残りのオブジェクトは作成される。まず、チャネル作成時、そのプロセスではファブリックで普通の3つの項目が取得される:
1.構成txからのチャネル構成-順序付けサービスは、チャネル構成ファイルからの情報を保持し、特に、チャネルデータが参加ノードに制限されることを保証するのにそれを使用する。
2.<<台帳>><データベース名>-チャネル/データベースの添付のみデータストレージが作成され、あらゆる参加ピアノードに複製される。
3.<<ワールドステート>><データベース名>-台帳における各項目の最新値のみを含む台帳へのコンパニオンストレージ(companion storage)が、はるかに効率的にクエリされる形態で提供される。リレーショナルデータ管理及び編成システム100では、このデータベースはCouchDB(登録商標)インスタンスであることができ、これは、ファブリックへの標準選択の1つである。
チャネルが作成された後、データベーススキーマ(リレーショナルデータ属性)のJSON表現を含む通常のファブリックトランザクションが処理される。
続くリレーショナルデータベース演算は、更なる添付ファブリックトランザクション(台帳へのコミットが明示的に除外される読み出しクエリを除く)ではJSONオブジェクトとして表される。図4は、DML書き込み演算の実行を示す。このプロセスは、ワールド・ステート・データベースに入ると、クエリ及び他のリクエストへ応答するためにリレーショナル・データ・レイヤ100のシステムチェーンコードにより使用されるJSONリレーショナル・データ・オブジェクトを作成する。図5はこれを示し、ELEMENT UI106又はユーザのアプリケーションにより言語固有SDK102及びELEMENT API104を介して要求されたDML読み出しクエリの実行を示す。
図4は、リレーショナルデータ管理及び編成システム100の既存のデータベースにリレーショナルデータを書き込む演算を示すブロック図である。左側のスイムレーンは2つの参加コンポーネントであるファブリックサービス及びリレーショナルデータ管理及び編成システム100システムチェーンコードを表す。各スイムレーン内部のUMLアクティビティは、コンポーネントが実行する主要アクティビティを表す。太字の矢印はアクティビティを順に結び、追加の矢印は、アクティビティによる影響を受けるデータオブジェクトに接続する。
更新演算に向き合うと、定義されたチャネルにおけるファブリック・ピア・ノード402内の<<台帳>><データベース名>オブジェクト400は、各ピアノードで複製される図3で作成されたものと同じ台帳である。追加の<<ファブリックブロック>>404は内部に添付されており、リレーショナルデータベース演算を指定する<<ファブリックトランザクション>>406を含む。この特定の演算は、図4の左半分に配置されたアクティビティセクション下で図示されるように、<<ファブリックtx>>を作成する所望の演算を含むファブリックトランザクションの準備408を含む上流プロセスにおいてユーザから受け取られ、412において、演算を含むファブリックトランザクションをピアノードに提出し、414において、トランザクションが実行され、結果データが生成される。トランザクションは、トランザクションがブロックに処理された場合、リレーショナルデータ管理及び編成システム100のシステムチェーンコードにより実行されたであろうその演算の結果も含む。幾つかの場合、この実行は、ワールド・ステート・データベースからデータを読み出すチェーンコードも含む。このフローは示されていないが、図5におけるDML読み出し演算から理解することができる。
その結果生成されたELEMENTリレーショナルデータJSON416は、新しい又は変更されたテーブル、レコード、ユーザ、及びデータベース属性を表すオブジェクトを含む。これらのそれぞれは、影響を受けるデータを識別する一意のキーを有する。ファブリックネットワークは、418において、トランザクション及び結果データを処理して、ファブリックブロックにし、ファブリックブロックを台帳400に添付する。トランザクションの一環として台帳400に永続的に記録されることに加えて、システムチェーンコードは、422において、現在のリレーショナルデータでワールド・ステート・データベース420を更新し、ここで、データは、図3において作成されたのと同じワールド・ステート・データベースである<<ワールドステート>>データベース420に流れる。ここで、ワールド・ステート・データベースはリレーショナルデータ管理及び編成システム100のデータベースの現在状態のみを含むため、同じキーを有するより古いエントリはリレーショナルデータで上書きされ、一方、台帳400はその履歴を保持する。1つのそのようなオブジェクト424がワールド・ステート・データベース420内に示されるが、実際には、多くのキー及びオブジェクトがある。
図5は図4と同様の前提であり、全てのコンポーネント及びデータオブジェクトは変わらないままである。唯一の違いは、DML読み出し演算を処理している間にデータオブジェクトが経るアクティビティ及びプロセスである。ファブリック・サービス・コンポーネントにおけるアクティビティセクションは図4にかなり類似するが、DML読み出し演算の実行に成功した後、サービスレイヤは、500においてクエリレスポンスを受け取る。
サンプル実施形態では、システムチェーンコードは、502において、ワールド・ステート・インスタンス504と突き合わせてクエリを実行し、それと引き換えに、関連するELEMENTデータJSONが流れる。システムチェーンコードはこのデータを更に処理して、クエリ結果500を生成し、クエリの開始者に返す。読み出しはワールド・ステート・データに対して行われ、したがって、続けて、更新シナリオのようにワールドステートへの変更は行われない。DML読み出しはピア台帳400にアクセスしない。しかしながら、ファブリックトランザクションは、デフォルト「OPSTAT」選択肢がオーバーライドされない限り、トランザクションが行われたピアノードの台帳にログされて、演算の記録を保持する。506において「OPSTAT」選択肢が選択された場合、ファブリックネットワークはトランザクションを処理してブロックにし、ブロックを台帳400に添付する。記録されたトランザクションは入力を含み、入力は、クエリを表すJSONであるが、結果レコードではない。
ユーザチェーンコード(スマートコントラクト)から開始されるDML読み出し演算は図5と同様に動作するが、クエリ結果は、更なる処理に向けてスマートコントラクトに直接返される。
5つの必要とされるデータベースアクセス許可レベルを実現するために、2つのファブリックメカニズムが再使用される。第1に、データベース作成はファブリックチャネルの作成に前提要件を必要とするため、ファブリックネットワーク管理者のみがその許可にふさわしい。残りの4つのアクセスレベルでは、ELEMENTファブリックは、ファブリックの既存のアイデンティティプロバイダ機能の上に乗る。したがって、ファブリックでのELEMENTファブリック・リレーショナル・データ・アクセス制御実現は、アイデンティティプロバイダに登録している間、あらゆるユーザに添付されるデータベース固有の属性を含む。また、ユーザの登録に付加される属性は、そのデータベースへのユーザの特定のアクセスに関する。続けて、ELEMENTシステムチェーンコードへのトランザクションが開始されて、ユーザをデータベースメタデータに追加する。
図6は、SuperAdminレベルよりも低いアクセスにユーザを追加するリレーショナル・データ・アクセス制御の第1の部分に関わるコンポーネント及びデータを図示するブロック図である。制御プロセスは2つのプロセスを含む。第1のプロセスは、600において、ユーザ追加演算を記録するファブリックトランザクションを準備し、ユーザ追加演算602を作成することにより、ファブリック証明機関等のアイデンティティプロバイダに、データベース固有属性を有するユーザを参加登録することである。第2のプロセスは、608において、要求側エンティティの機関を使用して、新しいユーザ・アクセス・レベルのJSON表現604をアイデンティティプロバイダ606におけるユーザのアイデンティティカードに添付することにより、ユーザをデータベース自体に追加する通常のトランザクションである。
図3のように、図6は、ELEMENTファブリック・サービス・レイヤ及び関連するファブリックネットワークを実行するトポロジに重ねられたUMLオブジェクトモデルである。UMLオブジェクトは、ユーザをリレーショナルデータ管理及び編成システム100に追加することについて、ファブリック・サービス・コンポーネント、モデルの左セクションで述べられる関連するシーケンシャルアクティビティ、及び右側の関連付けられたデータの表現をモデリングする。図3からのモデルの説明及び演算前提はここでも該当し、特に、ファブリック証明機関ノード606等のアイデンティティプロバイダが追加されるが、影響を受けるセクションのみがモデルに表示されている。UMLモデルは、サービスレイヤ、ファブリック・ピア・ノード、及び順序付けサービスノードと接続し、分散型台帳アイデンティティについての情報をそれらに供する。順序付けサービス及びその接続は、ファブリックトランザクション処理において普通であることを超えた特別な役割をこのプロセスで持たないため、このモデルに示されていない。なお、順序付けサービスノード及びアイデンティティプロバイダ(例えば証明機関)は同時に、他のピアノード、チャネル、及び恐らくはリレーショナルデータ管理及び編成システム100のデータベースにサービングしている可能性が高い。
図6のデータオブジェクトは、新しいユーザを1つのELEMENTデータベースに追加する間に作成される。ユーザの追加は、データベース自体がいかにファブリックチャネル及びその台帳上に構築されるかと同様に、ファブリックの既存のアイデンティティ管理の上に構築される。実際には、最高レベルのアクセスであるSuperAdminはまさに、ファブリックの管理者役割の再使用である。図6は、4つのより低いELEMENTアクセスレベルの1つを有するユーザを追加することに関連する。モデルは、プロセスへの大まかな関与順に3つの部分に分けられる:
1.ELEMENTファブリック・サービス・レイヤ・ノード、
2.アイデンティティ・プロバイダ・ノード、例えば証明書プロバイダ(CA)、
3.Elementファブリック・ピア・ノード及び順序付けサービスノード。
プロセスの初期部分は3つのうちの最初の2つを含む:ELEMENTファブリック・サービス・レイヤは、アイデンティティプロバイダ(例えばファブリック証明機関606)がユーザアイデンティティを参加登録し、又は既に存在する場合、関連するアイデンティティを見つけ、ELEMENT特権属性をそのアイデンティティに追加するようにアレンジする。なお、複数のアイデンティティ・プロバイダ・ノードが所与のチャネル及びそのELEMENTデータベースをサポートすることが可能であるが、それは示されていない。この場合、プロセスは、どの機関が関わるかを指定することを除き、基本的に同じである。
<<ユーザ>>オブジェクト604は、「身分証明書」と呼ばれることがあるアイデンティティプロバイダ(例えば証明機関606)におけるそのアイデンティティの表現である。カスタム属性で拡張可能であり、リレーショナルデータ管理及び編成システム100は、ELEMENTデータベースへのアイデンティティのアクセス特権レベルを表す属性を追加することによりこれを利用する。属性は、モデルにおいてユーザ・アクセス・レベル属性604と記されるJSONオブジェクトの形態をとる。
プロセスの他の部分は、アクセスレベル変更を分散型台帳612にログする、対応するファブリックトランザクション610である。このトランザクション610は、サービスレイヤ(ユーザ演算JSONを含む<<ファブリックtx>>614)で準備され、616において、まず、台帳612に添付されるブロックの一部として、1つのピアノードに渡し、次に、順序付けサービスに渡し、そして最後に全てのピアノードに渡すプロセスで<<台帳>>612に追加される。
台帳612は、図3~図5に図示されたものと同じである。モデルは、ユーザ追加演算JSON614を含む新しい<<ファブリックブロック>>にフォーカスするが、そのブロック614は実際には、図3のジェネシスブロック及び構成ブロック(このモデルで除外される)並びに図4及び図5に図示される関連演算の任意の数のブロック後に添付される。
ユーザ・アクセス・レベルが定義された後、分散型台帳固有コンポーネントは、各リレーショナルデータベース演算中、ユーザ・アクセス・レベルを読み出して、演算が承認されているか否かを判断する。リレーショナルデータベース演算は2つのステップで行われる。アイデンティティがアイデンティティプロバイダにより確認され、アクセスレベルがチェックされる。呼び出したユーザのアクセスレベルがその関数の呼び出しに適切であることが分かった場合のみ、対応する関数へのアクセスが認められ、それに続き、実際の関数が、図3に関して上述したように実行される。
必要とされるユーザ・スマート・コントラクトとの統合の達成は、ファブリック実現では簡単である。ユーザチェーンコードは、ELEMENTシステムチェーンコードを直接呼び出すことが可能であり、バルク演算を除く全てのDML特徴へのアクセスを与える。
しかしながら、デフォルト・ファブリック・セットアップは常にシステム・チェーンコード・プラグインであるわけではない。プライマリ変更は、ELEMENTシステムチェーンコードをデプロイできるようにするビルドタグを用いてファブリックピアを再構築することを含む。この後、ピアのベース構成ファイルは、コンパイルされたELEMENTシステム・チェーンコード・バイナリへのパスの変更を必要とする。これにより、ファブリックピアは、再開時にELEMENTシステムチェーンコードを読み出し開始することができる。
ファブリック固有サービスレイヤは、共通コンソール/パーサ/APIコンポーネントからのデータベースコマンドを受け入れ、上述したようにELEMENTシステムチェーンコード、ファブリック証明機関等のアイデンティティプロバイダ、及びワールド・ステート・データベースの組合せを呼び出すことにより、それらをアクションに変換する。
ELEMENT Node.js(登録商標)SDKは主に、共通コンソール/パーサ/APIコンポーネントを開発者のNode.js(登録商標)アプリケーションから呼び出すラッパー関数を含む。特に、ELEMENT Node.js(登録商標)SDKは、リレーショナルデータ管理及び編成システム100との接続を作成し、DDL演算を実行してテーブル及びインデックスを定義し、DML演算を実行してデータを書き込みクエリし、カスタム・スマート・コントラクトをチャネルに追加するラッパー関数を提供する。
図7は、ユーザのアプリケーション702とのELEMENTファブリックNode.js(登録商標)SDKの対話と、ユーザ・アプリケーション・ノード700としてモデリングされる、それらが両方ともホストされる実行環境とを図示するブロック図である。このノード700は、示されるように、Node.js(登録商標)に必要とされるサポートによる制約される広範囲の潜在的な実装及び残りのELEMENT API104を介してELEMENTコンソール108の実行中のインスタンスとのHTTPSを経由して通信するように構成される能力をカバーする。
図7のユーザ・アプリケーション・ノード700を掘り下げると、Node.js(登録商標)におけるユーザアプリケーション702は、これもまたインストールされるファブリック/Node.js(登録商標)ELEMENT SDK704に依存するコンポーネントとしてモデリングされる。Node.js(登録商標)ラッパー関数インターフェース706は、ユーザのアプリケーションコード702に直接提供される関数を定義する。これらのインターフェース706は、t、図1に関して説明された言語固有SDK<<仕様>>102に準拠する。しかしながら、追加のファブリック固有特徴をサポートする少数の方法で仕様を超える。これは、SDKの名前に「ファブリック」が含まれることによりモデリングに反映される。ELEMENT_SDK704におけるコードはそのインターフェースを実装し、SDK関数呼び出しをELEMENT API104への呼び出しに翻訳する。
ELEMENT仕様により必要とされる関数を超えて、ファブリック/Node.js(登録商標)実現は、ELEMENTDBコンソール108又は言語固有SDK102を介してスマートコントラクト(ユーザチェーンコード)をデプロイし、作成されたデータベース間の物理的分離(物理的意味vs論理的意味で)を維持する能力も含む。
ファブリック/Node.js(登録商標)実施形態が、データベース間に物理的な分離を有した状態で、分散型台帳上にリレーショナルデータを提供するとともに、ファブリックプラットフォームの内蔵プロパティの再使用を最大にするファブリックへのリレーショナルデータ実装を提供し、したがって、性能を改善し、プラットフォーム変更が互換性を破る変更を導入する危険性を低減することが理解されよう。プログラマフレンドリSDKはまた、分散型台帳上のリレーショナルデータの構造化を、そのデータを使用するスマートコントラクトのデプロイと統合する。
全てのANSI SQL言語仕様がサポートされるわけではなく、それ自体がストアドプロシージャでもないことが当業者には理解されよう。しかしながら、ユーザチェーンコードは、所望であれば)、論理及びリレーショナルデータを結合する同様の能力を提供する。例として、図8及び図9は、SQL DML書き込み及び読み出し演算を実装するためのリレーショナルデータ管理及び編成システム100の使用を図示する。本明細書に記載された技法が、本明細書に記載される分散型台帳で実装されるデータベースに格納されたデータと対話する他のSQLアクティビティを実装するのに使用することも可能なことを当業者は理解しよう。
図8は、サンプル実施形態におけるリレーショナルデータ管理及び編成システムを使用した分散型台帳へのSQL DML書き込み演算の成功の一例の論理流れ図である。図示のように、SQLクエリは、少なくとも3つの方法でリレーショナルデータ管理及び編成システム100により受け取られる:800において、ユーザがSQLクエリをELEMENT UI106に入力する;802において、ユーザアプリケーションがELEMENT SDK200を介してSQLクエリを渡す;又は804において、スマートコントラクトがSQLクエリを実行する。806において、受け取られたSQLクエリはDML書き込み演算にパーズされる。リレーショナルデータ管理及び編成システム100は次に、808において、SQL演算のJSON表現を作成し、任意の包含されるリレーショナルデータのJSON表現を組み込む。次に、JSON表現(ELEMENT SQL)は、分散型台帳のアイデンティティ、プライバシー、及びコンセンサスプロビジョンを保存するファブリック/Node.js(登録商標)演算により処理される。そのような演算は、810において、呼び出し側アイデンティティが少なくともDML書き込み承認を有することを確認することを含む。リレーショナルデータ管理及び編成システム100は次に、812において、リレーショナル演算を実行するのに必要なデータを分散型台帳プラットフォームから検索し、814において、演算を実行し、その結果生成される新しいレコード又は変更されたレコードのJSON表現を準備する。816において、演算及び更新されたレコードは、任意の変更のレコードを保存するために、分散型台帳プラットフォームに適切な形態で分散型台帳プラットフォームにコミットされる。次に、818において、分散型台帳プラットフォームは、演算及びデータを分散型台帳に組み込む。また、要求される場合、リレーショナルデータ管理及び編成システム100は、820において、分散型台帳による受け入れへの演算の進行について分散型台帳ネットワークをモニタする。最後に、リレーショナルデータ管理及び編成システム100は、822において、呼び出し側(UI106、ユーザアプリケーション200、又はユーザ・スマート・コントラクト)に演算の成功を通知する。このプロセスは、新しい各SQL DML書き込み演算に対して繰り返すことができる。
他方、図9は、サンプル実施形態におけるリレーショナルデータ管理及び編成システム100を使用した分散型台帳へのSQL DML読み出し演算の成功の一例の論理流れ図である。図示のように、SQLクエリは、少なくとも3つの方法でリレーショナルデータ管理及び編成システム100により受け取られる:900において、ユーザがSQLクエリをELEMENT UI106に入力する;902において、ユーザアプリケーションがELEMENT SDK200を介してSQLクエリを渡す;又は904において、スマートコントラクトがSQLクエリを実行する。906において、受け取られたSQLクエリはDML読み出し演算にパーズされる。リレーショナルデータ管理及び編成システム100は次に、908において、SQL演算のJSON表現を作成する。次に、JSON表現(ELEMENT SQL)は、分散型台帳のアイデンティティ、プライバシー、及びコンセンサスプロビジョンを保存するファブリック/Node.js(登録商標)演算により処理される。そのような演算は、910において、呼び出し側アイデンティティが少なくともDML読み出し承認を有することを確認することを含む。リレーショナルデータ管理及び編成システム100は次に、912において、読み出し演算を実行するのに必要なデータを分散型台帳プラットフォームから検索し、914において、要求された演算を実行し、クエリ結果のJSON表現を作成する。意図的に抑圧されない限り、916において、リレーショナルデータ管理及び編成システム100は、レコードを保存するために、分散型台帳プラットフォームに適切な形態で演算のJSON表現を分散型台帳プラットフォームにログする。次に、918において、分散型台帳プラットフォームは、演算のログを分散型台帳に組み込む。最後に、920において、リレーショナルデータ管理及び編成システム100は、クエリ結果のJSON表現を呼び出し側(UI106、ユーザアプリケーション200、又はユーザ・スマート・コントラクト)に返す。このプロセスは、新しい各SQL DML読み出し演算に繰り返すことができる。
図10は、ファブリック実現におけるデータ定義言語(DDL)書き込みの実行成功を図示するブロック図である。そのような演算は、既存のリレーショナルデータ管理及び編成システムデータベースのスキーマを変更又は拡張する。図の左部のスイムレーンは、DDL演算を担当するコンポーネントを表す。各レーン内のアクティビティは、記されたコンポーネントに固有であり、プロセスへのコンポーネントの可能な寄与を記述する。前の図のように、プロセスの流れは、因果的に接続されたステップ間の太字の矢印で示される。さらに、通常の矢印は、アクティビティを、右側のオブジェクトモデル(データにより示される)で示される、アクティビティが作成又は変更するデータオブジェクトに結び付ける。
DML書き込み演算は、ELEMENTDBコンソール108により識別され対処される。例えば、1000において、ELEMENTDBコンソール108は、SQLコマンドを受け取り、それをDDLとして識別する。SQLコマンドの対処は、1002において、Element SQL DDLパーサ110によりパーズして、演算のSQL記述を、分散型台帳プラットフォームで処理し表すことができる形態に変換することを含む。1004において、変換された形態は、ファブリック・サービス・コンポーネントにより更に処理されて、デプロイされるファブリック・サービス・レイヤ内のデータとして存在することができるデータベース属性(スキーマ)の更新されたJSON表現1005を含む所望の演算を含むファブリックトランザクションになる。1006において、ファブリック・サービス・コンポーネントはまた、ネットワーク接続を介して、生成されたファブリックトランザクションをリレーショナルデータ管理及び編成システムデータベースに関連付けられたチャネルにおけるファブリック・ピア・ノードに提出させもする。次に、ファブリックネットワークによる通常処理が、そのトランザクションをブロックに組み込み、そのブロックをそのチャネルの台帳1020における前のもの1007に添付する。そのような添付において、ブロックがチャネルにおける他のピアノードにも同一に添付されることが暗示される。変更されたリレーショナルデータ属性は、キー値対(piece key-value-pair)分散型台帳データとして表されるため、1008において、ファブリック・システム・チェーンコードは続けて、ワールド・ステート・データベースを更新し、ここではより最近のリレーショナルデータベース属性で、同じキー下に格納されていたであろう前の属性を上書きする。DDL演算により示されるインデックス変更がある場合、1010において、リレーショナル管理及び編成システムは実際に、ワールド・ステート・データベースの索引付け、例えば、CouchDB(登録商標)インスタンスのインデックスコレクション1030の直接変更によりインデックスに影響を及ぼすことができる。インデックスコレクション1030は、演算が実行中であるリレーショナルデータ管理及び編成システムデータベースに定義されたインデックスを含む。1012において、これらの変更は、ファブリックサービスにより要求され、ワールド・ステート・データベースの索引付け実装により受け取られ、続けて<<ワールドステート>>データベースに適用され、更新された索引付けを、ワールド・ステート・データベースを含む続くクエリ演算に適用させる。
コンピュータ実施形態
図11は、本明細書に開示されるリレーショナルデータ管理及び編成システム100の1若しくはそれ以上の実施形態の実装に適した専用コンピュータにプログラムすることができる典型的な汎用コンピュータ1100のブロック図である。上述したリレーショナルデータ管理及び編成システム100は、課される必要な作業負荷に対処するのに十分な処理能力、メモリリソース、及び通信スループット能力を有するコンピュータ等の任意の汎用処理コンポーネントに実装することができる。コンピュータ1100は、セカンダリストレージ1104、読み取り専用メモリ(ROM)1106、ランダム・アクセス・メモリ(RAM)1108を含むメモリと通信するプロセッサ1102(中央演算処理装置又はCPUと呼ばれることもある)、入出力(I/O)デバイス1110、及びネットワーク接続デバイス1112を含む。プロセッサ1102は、1若しくはそれ以上のCPUチップとして実装されてもよく、又は1若しくはそれ以上の特定用途向け集積回路(ASIC)の一部であってもよい。
セカンダリストレージ1104は通常、1若しくはそれ以上のディスクドライブ又はテープドライブで構成され、データの不揮発性記憶及びRAM1108が全ての作業データを保持するのに十分な大きさを有さない場合、オーバーフローデータ記憶装置として使用される。セカンダリストレージ1104は、実行に選択された場合、RAM1108にロードされるプログラムの記憶に使用することもできる。ROM1106は、命令及び恐らくプログラム実行中に読み出されるデータを記憶するのに使用される。ROM1106は、通常、セカンダリストレージ1104のより大きなメモリ容量と比較して小さなメモリ容量を有する不揮発性メモリデバイスである。RAM1108は、揮発性データの記憶及び恐らくは命令の記憶に使用される。ROM1106及びRAM1108への両方のアクセスは通常、セカンダリストレージ1104へのアクセスよりも高速である。
本明細書に記載されるデバイスは、コンピュータ可読命令を記憶するコンピュータ可読非一時的媒体と、メモリに結合され、コンピュータ可読命令を実行すると、図1~図10を参照して上述した方法ステップ及び演算を実行するようにコンピュータ1100を構成する1若しくはそれ以上のプロセッサとを含むように構成される。コンピュータ可読非一時的媒体は、磁気記憶媒体、光学記憶媒体、フラッシュメディア、及び固体状態記憶媒体を含め、全てのタイプのコンピュータ可読媒体を含む。
本開示のステップの何れか1つ又は全てを参照して上述した処理及び演算を促進する1若しくはそれ以上のコンピュータ実行可能命令を含むソフトウェアが、本開示と一貫して、1若しくはそれ以上のサーバ、及び/又は1若しくはそれ以上のルータ、及び/又は消費者及び/又は生産者ドメイン内の1若しくはそれ以上のデバイスにインストールすることができ、それ(ら)と共に販売することができることを更に理解されたい。代替的には、本開示と一貫して、ソフトウェアは、例えば、ソフトウェア作成者により所有されるサーバから又はソフトウェア作成者により所有されないが使用されるサーバからを含めて物理媒体又は配信システムを通してソフトウェアを取得することを含め、取得され、1若しくはそれ以上のサーバ、及び/又は1若しくはそれ以上のルータ、及び/又は消費者及び/又は生産者ドメイン内の1若しくはそれ以上のデバイスにロードすることができる。ソフトウェアは、例えば、インターネットを経由した配信に向けてサーバに記憶されることもある。
また、本開示の適用用途が、説明が記載され、又は図面に図示されるコンポーネントの構築及び配置の詳細に限定されないことが当業者により理解されよう。本明細書における実施形態は、他の実施形態が可能であり、種々の方法で実施又は実行することが可能である。また、本明細書で使用される表現及び用語が説明を目的としており、限定として見なされるべきではないことが理解されよう。本明細書における「含む(including)」、「含む(comprising)」、又は「有する」、及びそれらの変形の使用は、後に列記される項目及びそれらの均等物並びに追加の項目の包含を意味する。限定される場合を除き、本明細書における「接続される」、「結合される」、及び「搭載される」という用語並びのそれらの変形は、広義で使用され、直接及び間接的な接続、結合、及び搭載を包含する。加えて、「接続される」及び「結合される」という用語並びにそれらの変形は、物理的又は機械的な接続又は結合に制限されない。さらに、上、下、ボトム、及びトップ等の用語は相対的であり、例示を目的として利用されており、限定ではない。
図示の実施形態により利用される例示的なデバイス、システム、及び方法のコンポーネントは、少なくとも部分的にデジタル電子回路、アナログ電子回路、又はコンピュータハードウェア、ファームウェア、ソフトウェア、又はそれらの組合せで実装することができる。これらのコンポーネントは、例えば、コンピュータプログラム、プログラムコード、又は情報キャリア若しくは機械可読記憶装置で有形に実施されるコンピュータ命令等のコンピュータプログラム製品として実装することができ、プログラマブルプロセッサ、コンピュータ、又は複数のコンピュータ等のデータ処理装置により実行され、又はデータ処理装置の動作を制御する。
コンピュータプログラムは、コンパイル型又はインタープリタ型言語を含め、任意の形態のプログラミング言語で書くことができ、スタンドアロンプログラム又はモジュール、コンポーネント、サブルーチン、若しくは計算環境での使用に適した他のユニットを含め、任意の形態でデプロイすることができる。コンピュータプログラムは、1台のコンピュータで、一箇所にある複数のコンピュータで、又は複数の場所にわたり分散し、通信ネットワークにより相互接続された複数のコンピュータで実行されるようにデプロイされる。また、本明細書に記載される技法を達成する機能プログラム、コード、及びコードセグメントは、当技術分野の当業者であるプログラマにより本開示の範囲内として容易に解釈される。例示的な実施形態に関連付けられた方法ステップは、コンピュータプログラム、コード、又は命令を実行して、機能を実行する(例えば、入力データに対して動作し、及び/又は出力を生成することにより)1若しくはそれ以上のプログラマブルプロセッサにより実行することができる。方法ステップはまた、専用論理回路、例えば、FPGA(field programmable gate array:フィールド・プログラマブル・ゲート・アレイ)又はASIC(application-specific-integrated circuit:特定用途向け集積回路)により実行されてもよく、装置は専用論理回路として実装されてもよい。
本明細書に開示される実施形態に関連して説明された種々の例示的な論理ブロック、モジュール、及び回路は、汎用プロセッサ、デジタル信号プロセッサ(digital signal processor:DSP)、ASIC、FPGA、又は他のプログラマブル論理デバイス、離散ゲート若しくはトランジスタ論理、離散ハードウェアコンポーネント、又は本明細書に記載された機能を実行するように設計されたそれらの任意の組合せを用いて実装又は実行することができる。汎用プロセッサはマイクロプロセッサであってもよく、代替では、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、又は状態機械であってもよい。プロセッサはまた、計算デバイスの組合せとして、例えば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサの組合せ、DSPコアと併せた1若しくはそれ以上のマイクロプロセッサの組合せ、又は任意の他のそのような構成で実装されてもよい。
コンピュータプログラムの実行に適したプロセッサには、例として、汎用及び専用マイクロプロセッサの両方並びに任意の種類のデジタルコンピュータの任意の1若しくはそれ以上のプロセッサがある。一般に、プロセッサは、読み取り専用メモリ、ランダム・アクセス・メモリ、又は両方から命令及びデータを受け取る。コンピュータの基本要素は、命令を実行するプロセッサと、命令及びデータを記憶する1若しくはそれ以上のメモリデバイスとである。一般に、コンピュータはまた、データを記憶する1若しくはそれ以上の大容量記憶装置、例えば、磁気ディスク、磁気光学ディスク、又は光ディスクも含み、又はそれ(ら)と動作可能に結合されて、データを受け取り又はデータを転送もする。コンピュータプログラム命令及びデータの実施に適した情報キャリアには、例として、半導体メモリデバイス、例えば、電子的プログラマブル読み取り専用メモリ若しくはROM(EPROM)、電子的消去可能プログラマブルROM(EEPROM)、フラッシュメモリデバイス、及びデータ記憶ディスク(例えば、磁気ディスク、内部ハードディスク、又はリムーバブルディスク、磁気光学ディスク、及びCD-ROM及びDVDーROMディスク)を含め、全ての形態の不揮発性メモリがある。プロセッサ及びメモリは、専用論理回路により補足し、又は専用論理回路に組み込むことができる。
情報及び信号を多種多様な異なる技術及び技法の何れかを使用して表すことができることを当業者は理解する。例えば、上記説明全体を通して言及したデータ、命令、コマンド、情報、信号、ビット、記号、及びチップは、電圧、電流、電磁波、磁場若しくは磁粒子、光場若しくは光粒子、又はそれらの任意の組合せにより表すことができる。
本明細書に開示される実施形態に関連して説明された種々の例示的な論理ブロック、モジュール、回路、及びアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、又は両方の組合せとして実装することができることを当業者は更に理解する。ハードウェア及びソフトウェアのこの相互交換性を明確に示すために、種々の例示的なコンポーネント、ブロック、モジュール、回路、及びステップは一般に、機能に関して上述されてきた。そのような機能がハードウェアとして又はソフトウェアとして実装されるかは、特定の用途及びシステム全体に課される設計制約に依存する。当業者は、記載された機能を特定の各用途に向けて様々な方法で実装することができるが、そのような実装判断は、本開示の範囲からの逸脱を生じさせるものとして解釈されるべきではない。ソフトウェアモジュールは、ランダム・アクセス・メモリ(RAM)、フラッシュメモリ、ROM、EPROM、EEPROM、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、又は当技術分野で既知の任意の他の形態の記憶媒体に常駐することができる。例示的な記憶媒体は、プロセッサに結合され、そのようなプロセッサは、記憶媒体から情報を読み取り、及び記憶媒体に情報を書き込むことができる。代替では、記憶媒体はプロセッサに統合することができる。換言すれば、プロセッサ及び記憶媒体は、集積回路に常駐してもよく、又は離散コンポーネントとして実装されてもよい。
本明細書で使用される場合、「機械可読媒体」は、命令及びデータを一時的又は永続的に記憶することが可能なデバイスを意味し、これに限定されるものではないが、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、バッファメモリ、フラッシュメモリ、光学媒体、磁気媒体、キャッシュメモリ、他のタイプのストレージ(例えば、消去可能プログラマブル読み取り専用メモリ(EEPROM))、及び/又はそれらの任意の適した組合せを含む。「機械可読媒体」という用語は、1つの媒体又は複数の媒体(例えば、プロセッサ命令を記憶することが可能な中央若しくは分散データベース又は関連付けられたキャッシュ及びサーバ)を含むものと解釈されるべきである。「機械可読媒体」という用語はまた、命令が、1若しくはそれ以上のプロセッサにより実行されると、1若しくはそれ以上のプロセッサに本明細書に記載される方法論の任意の1若しくはそれ以上を実行させるように、1若しくはそれ以上のプロセッサによる実行に向けて命令を記憶することが可能な任意の媒体又は複数の媒体の組合せを含むものとしても解釈されるものとする。したがって、「機械可読媒体」は、1つの記憶装置又はデバイス及び複数の記憶装置又はデバイスを含む「クラウドベース」の記憶システム又は記憶ネットワークを指す。「機械可読媒体」という用語は、本明細書では信号それ自体を除外する。
上記例示した説明及び図は、単なる例として意図され、添付の特許請求の範囲への記載を除き、例示的な実施形態の限定を決して意図しない。なお、上述した種々の例示的な実施形態の種々の要素の種々の技術的態様は、多くの他の方法で組み合わせることが可能であり、その全ては本開示の範囲内であると見なされる。
したがって、例示的な実施形態が例示を目的として開示されたが、種々の変更、追加、及び置換が可能なことを当業者は理解しよう。したがって、本開示は上記実施形態に限定されず、添付の特許請求の範囲及びそれらの全範囲の均等物内で変更が可能である。
付録A
HYPERLEDGER(登録商標)ファブリック概説
Hyperledger(登録商標)ファブリックモデル
包括的でありながらカスタマイズ可能な企業分散型台帳解決策の約束を満たす、Hyperledger(登録商標)ファブリックに織り込まれた主要な設計特徴は以下を含む:
・アセット-アセット定義は、自然食品からアンティークカー、通貨先物まで略あらゆるものを、ネットワークを経由して金銭価値と交換できるようにする。
・チェーンコード-チェーンコード実行は、トランザクション順序付けから分割され、ノードタイプにわたり必要とされる信頼レベル及び確認を制限し、ネットワークのスケーラビリティ及び性能を最適化する。
・台帳特徴-不変の共有台帳は、各チャネルのトランザクション履歴全体を符号化し、効率的な監査及び紛争解決のためのSQLのようなクエリ機能を含む。
・プライバシー-チャネル及びプライベートデータ収集は、通常、競合するビジネス及びアセットを共通ネットワーク上で交換する規制産業により求められるプライベート及び機密マルチラテラルトランザクションを可能にする。
・セキュリティ&メンバーシップサービス-許可されたメンバーシップは、承認された規制者及び監査人により全てのトランザクションを検出しトレースすることができることを参加者が知る高信頼性分散型台帳ネットワークを提供する。
・コンセンサス-コンセンサスへの独自の手法は、企業に必要とされる柔軟性及びスケーラビリティを可能にする。
アセット
アセットは、有形(不動産及びハードウェア)から無形(契約及び知的財産)まで及ぶことができる。Hyperledger(登録商標)ファブリックは、チェーンコードトランザクションを使用してアセットを変更する能力を提供する。
アセットは、Hyperledger(登録商標)ファブリックでは、キー値対の集まりとして表され、状態変化は、チャネル台帳上のトランザクションとして記録される。アセットはバイナリ及び/又はJSON形態で表すことができる。
アセットは、Hyperledgerコンポーザツールを使用してHyperledger(登録商標)ファブリックアプリケーションにおいて定義され使用することができる。
チェーンコード
チェーンコードは、スマートコントラクトにおいて、1若しくはそれ以上のアセット及びアセットを変更するトランザクション命令を定義するソフトウェアであり、換言すれば、ビジネス論理である。チェーンコードは、キー値対又は他の状態データベース情報の読み出し又は変更についてのルールを施行する。チェーンコード関数は、台帳の現在状態データベースと突き合わせて実行され、トランザクション提案を通して開始される。チェーンコードが実行されると、1組のキー値書き込み(書き込みセット)が生成され、これはネットワークに提出され、全てのピアにおける台帳に適用することができる。
チェーンコードはアイデンティティから完全に自由である。チェーンコードはまた、別のチェーンコードを呼び出すこともできるが、トランザクションアイデンティティは、呼び出しチェイン全体を通してトランザクションを提出したトランザクション署名者として常に一定に保たれる。したがって、ファブリックネットワークでは、エスクローアカウントのセットアップは外部当事者の追加を含む。その結果として、エスクローを担当する外部アカウントは、中立性を残りの参加者に提供しなければならない。
チェーンコードのデプロイは2ステッププロセスである。チェーンコードの実行可能バイナリは実際には台帳に生き続けないため、まず、サポートを選択したあらゆる是認ピアにインストールされなければならない。次に、チャネル全体が、「チェーンコードインスタンス化」と呼ばれるステップにより、実行するチェーンコードの正確なバージョン及びトランザクションの是認ポリシーに同意しなければならない。インスタンス化トランザクションを提出しているユーザは、コンソーシアムが確立されたときに予め決定されたルールに従って、それを行うことが承認されていることを保証するために、「インスタンス化ポリシー」と突き合わせた妥当性確認に合格しなければならない。
チェーンコードはアップグレード可能である。チェーンコードには名前及びバージョンが割り当てられる。アップグレード時、新しいバージョンが割り当てられ、全ての既存の状態は自動的に継承される。
台帳特徴
台帳は、ファブリックにおける全ての状態遷移の順序付き耐改竄性レコードである。状態遷移は、参加当事者により提出されたチェーンコード呼び出し(「トランザクション)の結果である。各トランザクションは1組のアセットキー値対を生成し、これは、作成、更新、又は削除として台帳にコミットされる。
台帳は、不変性の順序付きレコードをブロックに格納するブロックチェーン(「チェイン」)及び現在のファブリック状態を維持する状態データベースで構成される。チャネル毎に1つの台帳がある。各ピアは、ピアがメンバである各チャネルの台帳のコピーを維持する。
ファブリック台帳の幾つかの特徴は以下である:
・キーベースの参照、範囲クエリ、及び合成キークエリを使用したクエリ及び更新台帳、
・リッチクエリ言語を使用した読み取り専用クエリ(CouchDB(登録商標)を状態データベースとして使用する場合)、
・読み取り専用履歴クエリ-キーのクエリ台帳履歴であり、データ出所シナリオを可能にする、
・トランザクションは、チェーンコードにおいて読み出されたキー/値のバージョン(読み出しセット)及びチェーンコードに書き込まれたキー/値(書き込みセット)から成り、
・トランザクションは、あらゆる是認ピアの署名を含み、順序付けサービスに提出され、
・トランザクションはブロックに並べられ、順序付けサービスからチャネル上のピアに「送られ」、
・ピアは、是認ポリシーと突き合わせてトランザクションを妥当性確認し、ポリシーを施行し、
・ブロックの添付に先立って、バージョンチェックが実行されて、チェーンコード実行時から、読み出されたアセットの状態が変わっていないことを保証し、
・トランザクションが妥当性確認されコミットされると、不変性があり、
・チャネルの台帳は、構成ブロック定義ポリシー、アクセス制御リスト、及び他の関連情報を含み、
・チャネルはメンバーシップ・サービス・プロバイダインスタンスを含み、暗号資料(crypto material)を異なる証明機関から送れるようにする。
データベース、ストレージ構造、及び「クエリ能力」についてのより深い洞察については台帳トピック参照のこと。
プライバシー
Hyperledger(登録商標)ファブリックは、チャネル毎の不変台帳と、アセットの現在状態を操作、変更(すなわち、キー値対を更新)することができるチェーンコードとを利用する。台帳はチャネルの範囲に存在し-ネットワーク全体にわたり共有することができる(あらゆる参加者が1つの共通チャネルで動作していると仮定して)-又は特定の組の参加者のみを含むようにプライベート化することができる。
後者のシナリオでは、これらの参加者は別個のチャネルを作成し、それにより、トランザクション及び台帳を分離/隔離する。完全透明性とプライバシーとの間のギャップを橋渡ししたいシナリオを解決するために、チェーンコードは、読み出し及び書き込みを実行するためにアセット状態にアクセスする必要があるピアのみにインストールすることができる(換言すれば、チェーンコードがピアにインストールされない場合、台帳と適宜インターフェースすることはできない)。
そのチャネル上の組織のサブセットが、トランザクションデータを機密に保つ必要がある場合、プライベート・データ・コレクション(コレクション)が使用されて、プライベートデータベースにこのデータを隔離し、チャネル台帳から論理的に分け、組織の承認されたサブセットのみがアクセス可能である。
したがって、チャネルは、より広いネットワークからトランザクションをプライベートに保ち、一方、コレクションは、チャネル上の組織のサブセット間でデータをプライベートに保つ。
データを更に難読化するために、チェーンコード内の値は、トランザクションを順序付けサービスに送り、ブロックを台帳に添付する前、AES等の一般的な暗号化アルゴリズムを使用して暗号化することができる(部分的に又は全体的に)。暗号化されたデータが台帳に書き込まれると、暗号文の生成に使用された対応するキーを保有するユーザしか復号化することができない。チェーンコード暗号化についての更なる詳細については、開発者用チェーンコードトピックを参照のこと。
ファブリックでは、プライベート状態は、ピアの実行による是認フェーズ中、プライベートトランザクション、計算され、生成されたプライベート状態は、入力とともにハッシュで表される。その結果、コンセンサス後の全てのノードでの一貫したハッシュは、プライベートトランザクションの参加ノードが常に、プライベート状態に一致することを保証する。
ファブリックはまた、「チャネル」の概念を用いて別のプライバシー技法として完全なデータ分離も提供する。ファブリックチャネルは、各チャネルが、そのチャネルの参加ノードにより共有される、台帳の完全に別個のインスタンスを維持するため、別個のブロックチェーンと考えることができる。大半の金融機関での場合のように、コンソーシアムが主にバイラテラルトランザクションを考慮する場合、チャネル数はかなり大きくなる:O(N∧2)、Nはコンソーシアムへの参加者数である。
ブロックチェーンネットワークでプライバシーをいかに達成するかについてのより詳細については、プライベート・データトピックを参照のこと。
セキュリティ&メンバーシップサービス
Hyperledger(登録商標)ファブリックは、全ての参加者がアイデンティティを知っているトランザクションネットワークを支える。公開鍵基盤を使用して、組織、ネットワークコンポーネント、及びエンドユーザ又はクライアントアプリケーションに結ばれた暗号証明書を生成する。その結果、データアクセス制御をより広いネットワーク及びチャネルレベルで維持し、支配することができる。チャネルの存在及び機能と併せたHyperledger(登録商標)ファブリックの「許可された」という表記は、プライバシー及び機密性が最高の考慮事項であるシナリオへの対処に役立つ。
暗号実装並びにHyperledger(登録商標)ファブリックで使用される符号、確認、認証手法をよりよく理解するには、メンバーシップ・サービス・プロバイダ(Membership Service Providers:MPS)トピックを参照のこと。
コンセンサス
分散型台帳技術では、コンセンサスは近年、1つの関数内の特定のアルゴリズムと同義になっている。しかしながら、コンセンサスは、トランザクションの順序への単なる合意よりも多くを包含し、この区別は、提案及び是認から順序付け、妥当性確認、及びコミットメントまでの全体トランザクションフローにおけるその基本的な役割を通してHyperledger(登録商標)ファブリックにおいて強調されている。極めて簡潔に言えば、コンセンサスは、ブロックを含む1組のトランザクションの正確性の全周(full-circle)確認として定義される。
ファブリックは、コンセンサスモデルにおいて非決定性をなくす代わりに非決定性に耐える。ファブリックは、設計原理としてスマートコントラクトに上位水準言語を提供する。ファブリックチェーンコードは、3つの上位水準言語ランタイムで書くことができる:Go言語、Node.js(登録商標)、及びJava(登録商標)。これは、実行-順序付け-妥当性確認コンセンサス設計を利用することにより可能になり、したがって、ブロックチェーンシステムは、非決定性チェーンコードにより生じる不良トランザクションに耐えることができ、その間、開発者は論理及び実装を完全なものにし続ける。
12に図示される「最初に実行し、次に順序付ける」設計は、何らかの種類の同時バージョン制御が必要であり、同時バージョン制御がない場合、複数のトランザクションが同じ状態値を並列して変更しようとしているとき、後のトランザクションが先のトランザクションを上書きし、先のトランザクションの結果の上に構築する代わりに、先のトランザクションからの状態遷移を拭い去ることを暗示する。ファブリックは、データベース設計から借りたマルチバージョン同時制御(multiversion concurrency control:MVCC)技法を利用する。チェーンコードエンジンは、スマートコントラクトが実行されるとき、どの状態値が閲覧されているか(読み取りセットにおいて)及びその値が更新されているか(書き込みセットにおいて)を追跡する。妥当性確認フェーズ中、ブロック内部に含まれる各トランザクションが妥当性確認され、状態遷移が適用される場合、通常、ブロック中の先のトランザクションにより更新されたため、その読み出しセット内のトランザクションの状態値バージョンが現在バージョンに一致しないとき、トランザクションは無効とマークされる。
意味合いは、一連のトランザクションが同じ状態値を変更する必要がある場合、2つ以上のトランザクションが1つのブロック内部にないように調整されなければならないことである。そうしなければ、アプリケーションは、同時変更に起因して多くの無効トランザクションを見ることになる。
基礎となる同じ状態変数を標的としたキーを一緒にグループ化する能力を有しながら、各トランザクションに一意のキーを組み立てる複合キー機能を利用する等のこの制限を迂回してプログラムする技法が存在する。
コンセンサスは最終的に、ブロックのトランザクションの順序及び結果が明示的なポリシー基準チェックに合致した場合、達成される。これらのチェック及びバランスは、トランザクションのライフサイクル中に行われ、是認ポリシーを使用して、どの特定のメンバが特定のトランザクションクラスを是認しなければならないかを指定し、システムチェーンコードを使用して、これらのポリシーが施行され展開されることを保証することを含む。コミットメントに先立ち、ピアはこれらのシステムチェーンコードを利用して、十分な是認が存在すること及び是認が適切なエンティティから導出されたことを確かめる。さらに、トランザクションを含むいかなるブロックも台帳に添付される前、バージョニングチェックが行われ、その間、台帳の正確な状態は一致又は同意される。この最終チェックは、演算の二重消費及びデータ保全性を損なう恐れがある他の脅威からの保護を提供し、関数を非静的変数に対して実行できるようにする。
行われる多数の是認、有効性チェック、及びバージョニングチェックに加えて、トランザクションフローの全方向に行われている進行中のアイデンティティ妥当性確認もある。アクセス制御リストは、ネットワークの階層レイヤで実装され(順序付けサービスからチャネルまで)、トランザクション提案が異なるアーキテクチャコンポーネントを通る際、ペイロードは繰り返し署名され、確認され、認証される。結論として、コンセンサスは、単にトランザクションのバッチの順序への同意に限定されず、むしろ、提案からコミットメントまでのトランザクションの旅程中に行われる進行中の妥当性確認の副産物として達成される包括的な特徴付けである。
運営ガバナンス
ガバナンスは、コンソーシアムメンバ組織が意思決定プロセスに適切に参加していることを保証する、プロトコル実行時前後のプロセス及びポリシーである。
ファブリックは、アーキテクチャのあらゆるレイヤに内蔵された許可ガバナンスを有する。新しいコンソーシアムの開始、メンバの追加又は退去、新しいチャネルの定義、チャネルの参加者の追加及び退去のような動作は全て、適切な組織からの承認署名を収集する必要がある。包括的なポリシーモデルはシステム全体を通して施行される。
ファブリックは、2つのレベルの許可及びガバナンスサポートを有する:コンソーシアム及びチャネル。オーダラーは、ポリシー及び構成をコンソーシアムレベルで管理する。あらゆるファブリックブロックチェーンネットワークは、組織及びコンソーシアムを定義するジェネシスブロック構成からのオーダラーブートストラップで開始される。ピアは、ポリシー及び構成をチャネルレベルで管理する。新しいメンバ組織をコンソーシアム又はチャネルに追加する等の構成変更は、変更ポリシーに従って署名の収集を必要とする:既存のメンバのいずれか、全て、又は過半数。
ファブリックアーキテクチャ自体は、分散オーダラー実装を可能にする。実際に、バージョン1.4におけるRaftベースのオーダラー実装の導入に伴い、オーダラーノードを中央順序付けエンジンと対にする必要はもはやない。各オーダラーノード自体がRaftピアであり、現在の台帳がクラッシュ又は到達不可能になった場合、台帳選挙に参加することができる。これにより、2つ以上の組織がオーダラーノードを運営し、コンセンサス及び提案ブロックに参加することができるより分散したデプロイが可能になる。
ピア
ブロックチェーンネットワークは主に、1組のピアノード(又は単にピア)で構成される。ピアは、台帳及びスマートコントラクトをホストするため、ネットワークの基本要素である。台帳は、スマートコントラクト(Hyperledger(登録商標)ファブリックでは、チェーンコードに含まれる)により生成される全てのトランザクションを不変に記録する。スマートコントラクト及び台帳は、ネットワークにおいて共有プロセス及び共有情報をそれぞれカプセル化するのに使用される。ピアのこれらの態様は、ピアを、ファブリックネットワークを理解する良好な開始点にする。
ブロックチェーンネットワークの他の要素も当然ながら重要である:台帳及びスマートコントラクト、オーダラー、ポリシー、チャネル、アプリケーション、組織、アイデンティティ、及びメンバーシップ。このセクションは、ピア及びファブリックネットワークにおけるそれらの他の要素へのピアの関係にフォーカスする。
図13は、それぞれが台帳のコピー及びスマートコントラクトのコピーを保持することができるピアノードで構成されるブロックチェーンネットワークを示す。この例では、ネットワークNはピアP1、P2、及びP3から成り、各ピアは分散型台帳L1のそれ自体のインスタンスを維持する。P1、P2、及びP3は同じチェーンコードS1を使用して、その分散型台帳の各自コピーにアクセスする。
ピアは、作成、開始、停止、再構成、更には削除することができる。ピアは、管理者及びアプリケーションが、ピアが提供するサービスと対話できるようにする1組のAPIを露出する。
専門用語における単語
ファブリックは、チェーンコード-サポートされるプログラミング言語の1つで書かれた、台帳にアクセスする単なるコード片-を用いてスマートコントラクトを実装する。
台帳及びチェーンコード
台帳及びチェーンコードの両方をホストするのはピアである。より正確には、ピアは実際には、台帳のインスタンス及びチェーンコードのインスタンスをホストする。なお、これは、ファブリックネットワークに意図的な冗長を提供する-これは単一障害点を回避する。
図14は、台帳のインスタンス及びチェーンコードのインスタンスをホストするピアを図示する。この例では、P1は、台帳L1のインスタンス及びチェーンコードのS1のインスタンスをホストする。個々のピアにホストされる多くの台帳及びチェーンコードがあることができる。
ピアは台帳及びチェーンコードのホストであるため、アプリケーション及び管理者は、これらのリソースと対話したい場合、ピアと対話しなければならない。これは、ピアがファブリックネットワークの最も基本的な構築ブロックと見なされることの理由である。ピアが最初に作成されたとき、ピアは台帳もチェーンコードも有さない。
複数の台帳
ピアは2つ以上の台帳をホストすることが可能であり、これは、柔軟なシステム設計を可能にするため、有用である。最も単純な構成は、ピアが1つの台帳を管理することであるが、必要な場合、ピアが2つ以上の台帳をホストすることは極めて適切である。
図15は、複数の台帳をホストするピアを図示する。ピアは1若しくはそれ以上の台帳をホストし、各台帳は、台帳に適用されるゼロ若しくはそれ以上のチェーンコードを有する。この例では、ピアP1が台帳L1及びL2をホストすることを見て取ることができる。台帳L1はチェーンコードS1を使用してアクセスされる。他方、台帳L2はチェーンコードS1及びS2を使用してアクセスすることができる。
ピアが、台帳にアクセスするいかなるチェーンコードもホストせずにその台帳インスタンスをホストすることは完全に可能であるが、ピアがこのように構成されることは稀である。ピアの圧倒的多数は、ピアの台帳インスタンスをクエリ又は更新することができる少なくとも1つのチェーンコードがインストールされることになる。ついでながら、ユーザが外部アプリケーションによる使用に向けてチェーンコードをインストールしているか否かに関係なく、ピアが、常に存在する特殊なシステムチェーンコードも有することを言及する価値がある。
複数のチェーンコード
ピアが有する台帳数と、その台帳にアクセスすることができるチェーンコード数との間に一定の関係はない。ピアは、多くのチェーンコードを有してもよく、多くの台帳がピアに提供されてもよい。
図16は、複数のチェーンコードをホストするピアの一例を図示する。各台帳は、台帳にアクセスする多くのチェーンコードを有することができる。この例では、ピアP1が台帳L1及びL2をホストし、L1がチェーンコードS1及びS2によりアクセスされ、L2がS1及びS3によりアクセスされることを見て取ることができる。S1はL1及びL2の両方にアクセスすることができる。
アプリケーション及びピア
台帳-クエリ対話は、アプリケーションとピアとの間の単純な3ステップ会話を含み、台帳更新対話はわずかに関わる度合いが深く、2つの追加ステップを必要とする。
アプリケーションは、台帳及びチェーンコードにアクセスする必要がある場合、常にピアに接続する。ファブリックソフトウェア開発キット(Fabric Software Development Kit:SDK)は、プログラマにとってこれを容易にする-APIは、アプリケーションがピアに接続すること、チェーンコードを呼び出してトランザクションを生成すること、トランザクションをネットワークに提出することであって、トランザクションは順序付けられて分散型台帳にコミットされる、提出すること、及びこのプロセスが完了したとき、イベントを受け取ることを行えるようにする。
ピア接続を通して、アプリケーションは、台帳をクエリ又は更新するチェーンコードを実行することができる。台帳クエリトランザクションの結果は即座に返され、一方、台帳更新は、アプリケーション、ピア、及びオーダラーの間でのより複雑な対話を含む。
図17は、台帳があらゆるピアで最新に保たれることを保証するピアをオーダラーと併せて図示する。この例では、アプリケーションAはP1に接続し、チェーンコードS1を呼び出して台帳L1をクエリ又は更新する。P1はS1を呼び出して、クエリ結果又は提案された台帳更新を含む提案レスポンスを生成する。アプリケーションAは提案レスポンスを受け取り、クエリの場合、プロセスはここで完了する。更新の場合、Aは全てのレスポンスからトランザクションを構築し、トランザクションを順序付けのためにO1に送る。O1はネットワーク中からトランザクションを収集してブロックにし、P1を含む全てのピアにこれらを配信する。P1はトランザクションを妥当性確認してから、L1に適用する。L1が更新されると、P1は、完了を示すイベントを生成し、イベントはAにより受け取られる。
ピアは、クエリを満たすのに必要とされる全ての情報が、ピアの台帳のローカルコピーに集まると即座に、クエリの結果をアプリケーションに返すことができる。ピアは、アプリケーションからのクエリに応答するために他のピアと決して協議しない。しかしながら、アプリケーションは、1若しくはそれ以上のピアに接続して、クエリを発行することができ、例えば、情報が古いとの疑いがある場合、複数のピア間で結果を裏付け、又はより最新の結果を異なるピアから検索することができる。図中、台帳クエリが単純な3ステッププロセスであることを見て取ることができる。
更新トランザクションは、クエリトランザクションと同じように始まるが、2の追加ステップを有する。台帳更新アプリケーションもピアに接続して、チェーンコードを呼び出すが、台帳クエリアプリケーションと異なり、個々のピアはこのとき、台帳更新を実行することができず、その理由は、他のピアがまず変更に合意しなければならない-コンセンサスと呼ばれるプロセス-ためである。したがって、ピアはアプリケーションに更新提案-このピアが対象を他のピアの先の合意に適用するもの-を返す。第1の追加ステップ-ステップ4-では、アプリケーションは、各台帳へのコミットメントについてのトランザクションとして、ピアのネットワーク全体に適切な組の一致する更新提案を送る必要がある。これは、オーダラーを使用してトランザクションをブロックにパッケージングし、ピアのネットワーク全体に配信することによりアプリケーションにより達成され、ピアにおいて妥当性確認することができ、それから、各ピアの台帳のローカルコピーに適用される。この順序付け処理全体は完了までに幾らか時間が掛かる(数秒)ため、ステップ5に示されるように、アプリケーションには非同期で通知される。
ピア及びチャネル
ピアは、チャネル-ブロックチェーンネットワーク内の1組のコンポーネントがプライベートで通信し、取引できるようにするメカニズム-を介して互いと及びアプリケーションと対話する。
これらのコンポーネントは通常、ピアノード、オーダラーノード、及びアプリケーションであり、チャネルに参加することにより、協働して、そのチャネルに関連付けられた台帳の同一コピーをまとめて共有し管理することに合意する。概念上、チャネルは友人グループと同様のものとして考えることができる。1人は幾つかの友人グループを有することができ、各グループは、友人が一緒に行うアクティビティを有する。これらのグループは完全に別個であってもよく(趣味の友人グループと比較した職場の友人のグループ)、又はグループ間に幾らかの交差があってもよい。それにもかかわらず、各グループは、一種の「ルール」を有するそれ自体のエンティティである。
図18は、特定の組のピア及びアプリケーションがブロックチェーンネットワーク内で互いと通信できるようにするチャネルを図示する。この例では、アプリケーションAは、チャネルCを使用してピアP1及びP2と直接通信することができる。チャネルは、特定のアプリケーションとピアとの間の通信のパスウェイとして考えることができる。(簡潔にするために、オーダラーはこの図に図示されていないが、機能的なネットワークには存在しなければならない)。
チャネルは、ピアのようには存在しない-物理的なピアの集まりにより形成される論理構造としてチャネルを考えることがより適切である。ピアは、チャネルへのアクセス及びチャネルの管理の制御ポイントを提供する。
ピア及び組織
ブロックチェーンネットワークは、1つの組織ではなくむしろ組織の集まりにより管理される。ピアは、この種の分散ネットワークがいかに構築されるかの中心であり、その理由は、ピアがこれらの組織により所有される-且つこれらの組織のネットワークへの接続点である-ためである。
図19は、複数の組織を有するブロックチェーンネットワークにおけるピアを図示する。ブロックチェーンネットワークは、様々な組織により所有され寄与されるピアから構築される。この例では、ネットワークを形成する8つのピアに寄与する4つの組織が見られる。チャネルCは、ネットワークNにおけるこれらのピアのうちの5つ-P1、P3、P5、P7、及びP8-を接続する。これらの組織により所有されるその他のピアは、このチャネルに参加していないが、通常、少なくとも1つの他のチャネルに参加している。特定の組織により開発されたアプリケーションは、それ自体の組織のピア及び異なる組織のピアに接続する。ここでも、簡潔にするために、オーダラーノードはこの図に示されていない。
ネットワークは、リソースをネットワークに寄与する複数の組織により形成且つ管理される。ピアは、このトピックで考察しているリソースであるが、組織が提供するリソースはピアだけではない。ここで作用している原理がある-ネットワークは文字通り、集合的ネットワークに個々のリソースを寄与する組織なしでは存在しない。さらに、ネットワークは、これらの協働組織により提供されるリソースに伴って拡大縮小する。
順序付けサービス以外に、集中リソースはない-上記例では、組織がピアに寄与しなければ、ネットワークNは存在しない。これは、組織が、ネットワーク形成するリソースに寄与しなければ、及び寄与するまで、ネットワークがいかなる有意な意味でも存在しないことを反映する。さらに、ネットワークはいかなる個々の組織にも依存しない-1つの組織が残っている限り、他のどの組織が行き来しようが関係なく、存在し続ける。これは、ネットワークが分散されることが何を意味するのかの核心である。
上記例と同様に、異なる組織におけるアプリケーションは同じであってもよく、又は同じでなくてもよい。それは、アプリケーションがピアの台帳コピーをいかに処理するかについては全体的に組織次第であるためである。これは、各ピアが厳密に同じ台帳データをホストするにもかかわらず、アプリケーション及び提示論理の両方が組織毎に様々であることを意味する。
アプリケーションは、必要とされる台帳対話の性質に応じて、組織におけるピア又は別の組織におけるピアの何れかに接続する。台帳クエリ対話では、アプリケーションは通常、それら自体の組織のピアに接続する。台帳更新対話では、アプリケーションは、台帳更新を是認することが求められるあらゆる組織を表すピアに接続する必要がある。
ピア及びアイデンティティ
ピアは、特定の証明機関からデジタル証明書を介して割り当てられたアイデンティティを有する。デジタル証明書は、ピアについての多くの確認情報を提供するIDカードのようなものである。ネットワークにおけるありとあらゆるピアには、その所有組織からの管理者によりデジタル証明書が割り当てられる。
図20は、ピアがチャネルに接続する場合、そのデジタル証明書がチャネルMSPを介して所有組織を識別することを図示する。この例では、P1及びP2はCA1により発行されたアイデンティティを有する。チャネルCは、チャネル構成におけるポリシーから、CA1からのアイデンティティがORG1.MSPを使用してOrg1が関連付けられるべきであると決定する。同様に、P3及びP4は、Org2の一部としてORG2.MSPにより識別される。
ピアがチャネルを使用してブロックチェーンネットワークに接続するときは常に、チャネル構成におけるポリシーはピアのアイデンティティを使用してピアの権利を決定する。組織へのアイデンティティのマッピングは、メンバーシップ・サービス・プロバイダ(Membership Service Provider:MSP)と呼ばれるコンポーネントにより提供される-これは、ピアに特定の組織における特定の役割がいかに割り当てられるか及びそれに従ってピアがいかに、ブロックチェーンリソースへの適切なアクセスを獲得するかを決定する。さらに、ピアは1つの組織によってのみ所有することができ、したがって、1つのMSPが割り当てられる。MSPは、個々のアイデンティティと、ブロックチェーンネットワークにおける特定の組織的役割との間のリンクを提供する。
ピア及びブロックチェーンネットワークと対話するあらゆるものは、デジタル証明書及びMSPから組織アイデンティティを取得する。ピア、アプリケーション、エンドユーザ、管理者、及びオーダラーは、ブロックチェーンネットワークと対話したい場合、アイデンティティ及び関連付けられたMSPを有さなければならない。名前が、アイデンティティ-プリンシパルを使用して、ブロックチェーンネットワークと対話するあらゆるエンティティに与えられる。
ピアが物理的にどこに配置されるかはあまり重要ではない-ピアはクラウドに常駐してもよく、組織の1つにより所有されるデータセンタに常駐してもよく、又はローカルマシンに常駐してもよい-特定の組織により所有されているものとしてピアを識別するのは、ピアに関連付けられたアイデンティティである。上記例では、P3は、Org1のデータセンタにおいてホストすることができるが、関連付けられたデジタル証明書がCA2により発行される限り、Org2により所有される。
ピア及びオーダラー
アプリケーション及びピアが互いと対話して、あらゆるピアの台帳が一貫して保たれることを保証するメカニズムは、オーダラーと呼ばれる特別なノードにより仲介される。
更新トランザクションは、1つのピアがそれ自体で台帳を更新することができない-更新では、ネットワークにおける他のピアの同意が必要とされる-ため、クエリトランザクションとかなり異なる。ピアは、台帳更新をピアのローカル台帳に適用できるようにするには、先に、ネットワークにおける他のピアに台帳更新を承認するように求める。このプロセスはコンセンサスと呼ばれ、単純なクエリよりも完了までにはるかに長い時間が掛かる。しかし、トランザクションの承認が求められた全てのピアが承認し、トランザクションが台帳にコミットされる場合、ピアは、接続されたアプリケーションに、台帳が更新されたことを通知する。
特に、台帳を更新したいアプリケーションは、ブロックチェーンネットワークにおける全てのピアが、台帳を互いと一貫した状態を保つことを保証する3フェーズプロセスに関わる。第1のフェーズでは、アプリケーションは、それぞれが、アプリケーションへの台帳更新提案の是認を提供するが、台帳の各自のコピーへの更新提案を適用しない是認ピアのサブセットと共に作業する。第2のフェーズでは、これらの別個の是認は、トランザクションとして一緒に収集され、ブロックにパッケージされる。最終フェーズでは、これらのブロックはあらゆるピアに配信され、ピアにおいて、各トランザクションは、台帳のピアのコピーに適用される前、妥当性確認される。
オーダラーノードは、このプロセスの中心である。アプリケーション及びピアはオーダラーを使用して、分散した複製台帳に一貫して適用することができる台帳更新を生成する。
フェーズ1:
トランザクションワークフローのフェーズ1は、アプリケーションと1組のピアとの間の対話を含む-オーダラーを含まない。フェーズ1は、異なる組織の是認ピアに、提案されたチェーンコード呼び出しの結果への合意を求めているアプリケーションのみに関わる。
フェーズ1を開始するために、アプリケーションはトランザクション提案を生成し、トランザクション提案は、是認のために必要とされる組のピアのそれぞれに送られる。これらの是認ピアのそれぞれは次に、トランザクション提案を使用してチェーンコードを独立して実行して、トランザクション提案レスポンスを生成する。ピアはこの更新を台帳に適用せず、むしろ単に更新に署名し、アプリケーションに返す。アプリケーションが十分な数の署名付き提案レスポンスを受け取ると、トランザクションフローの第1のフェーズは完了する。
図21は、是認された提案レスポンスを返すピアにより独立して実行されるトランザクション提案を図示する。この例では、アプリケーションA1はトランザクションT1の提案Pを生成し、チャネルCでピアP1及びピアP2の両方に送る。P1は、トランザクションT1の提案Pを使用してS1を実行して、E1を有する、是認するトランザクションT1のレスポンスR1を生成する。独立して、P2はトランザクションT1の提案Pを使用してS1を実行して、E2を有する、是認するトランザクションT1のレスポンスR2を生成する。アプリケーションA1は、トランザクションT1の2つの是認レスポンス、すなわち、E1及びE2を受け取る。
最初に、1組のピアがアプリケーションにより選ばれて、1組の台帳更新提案が生成される。アプリケーションにより選ばれるピアは、ネットワークによる受け入れが可能になるには、先に、提案された台帳変更を是認する必要がある1組の組織を定義する是認ポリシー(チェーンコードに定義される)に依存する。これは文字通り、コンセンサスの達成が意味するものである-提案された台帳変更が任意のピアの台帳に受け入れられるには、先に、該当するあらゆる組織が提案された台帳変更を是認しなければならない。
ピアは、デジタル署名を追加し、秘密鍵を使用してペイロード全体に署名することにより提案レスポンスを是認する。この是認は続けて、この組織のピアが特定のレスポンスを生成したことを証明するのに使用することができる。上記例では、ピアP1が組織Org1により所有される場合、是認E1は、「台帳L1についてのトランザクションT1のレスポンスR1がOrg1のピアP1により提供された」ことのデジタル証明に対応する。
フェーズ1は、アプリケーションが署名付き提案レスポンスを十分なピアから受け取ったとき、終わる。異なるピアは、同じトランザクション提案に対してアプリケーションに異なるトランザクションレスポンス、ひいては一貫しないトランザクションレスポンスを返すことができる。単に、結果が、台帳が異なる状態である異なるピアで異なるときに生成されたかもしれず、その場合、アプリケーションは単により最新の提案レスポンスを要求することができる。可能性は低いが、はるかに深刻なことに、チェーンコードが非決定的であるため、結果が異なることもある。非決定性は、チェーンコード及び台帳の敵であり、非決定性が生じる場合、明らかなことに、矛盾した結果を台帳に適用することはできないため、提案されたトランザクションに伴う深刻な問題を示す。個々のピアは、各自のトランザクション結果が非決定的であることを知ることができない-トランザクションレスポンスは、非決定性を検出することができる前、比較のために一緒に収集されなければならない。
フェーズ1の終了時、アプリケーションは、一貫しないトランザクションレスポンスを破棄したい場合、自由にそうすることができ、トランザクションワークフローを早期に終わらせる。アプリケーションが一貫しない組のトランザクションレスポンスを使用して、台帳を更新しようとする場合、拒絶される。
フェーズ2:トランザクションの順序付け及びブロックへのパッケージング
トランザクションワークフローの第2のフェーズは、パッケージングフェーズである。オーダラーはこのプロセスの中心である-多くのアプリケーションから是認されたトランザクション提案レスポンスを含むトランザクションを受け取り、トランザクションを順序付けてブロックにする。順序付け及びパッケージングフェーズについての更なる詳細については、順序付けフェーズについての概念情報をチェックされたい。
フェーズ3:妥当性確認及びコミット
フェーズ2の終了時、オーダラーは、トランザクション更新提案を収集し、それらを順序付け、ブロックにパッケージングし、ピアに配信できる状態にするという単純であるが重要なプロセスを受け持つ。
トランザクションワークフローの最終フェーズは、オーダラーから、台帳に適用することができるピアへのブロックの配信及び続く妥当性確認を含む。特に、各ピアにおいて、ブロック内のあらゆるトランザクションは妥当性確認されて、台帳に適用される前、全ての関連する組織により一貫して是認されたことを保証する。失敗したトランザクションは、監査のために保持されるが、台帳に適用されない。
図22は、ブロックをピアに配信することであるオーダラーノードの第2の役割を図示する。この例では、オーダラーO1はブロックB2をピアP1及びピアP2に配信する。ピアP1はブロックB2を処理し、その結果、新しいブロックがP1における台帳L1に追加される。平行して、ピアP2はブロックB2を処理し、その結果、新しいブロックがP2における台帳L1に追加される。このプロセスが完了すると、台帳L1はピアP1及びP2で一貫して更新されており、各ピアは、接続されたアプリケーションに、トランザクションが処理されたことを通知する。
フェーズ3は、オーダラーが、接続された全てのピアにブロックを配信することで始まる。ピアは、新しいブロックが生成された場合、オーダラーに接続された全てのピアに新しいブロックのコピーが送られるように、チャネル上でオーダラーに接続される。各ピアはこのブロックを独立して、しかしチャネル上の他のあらゆるピアと厳密に同じ方法で処理する。このようにして、台帳を一貫した状態に保つことができる。また、あらゆるピアノードがオーダラーに接続される必要があるわけではない-ピアは、ゴシッププロトコルを使用して、独立して処理することもできる他のピアにブロックを転送することができる。
ブロックを受信すると、ピアは、ブロックに出現する順に各トランザクションを処理する。あらゆるトランザクションについて、各ピアは、トランザクションが、トランザクションを生成したチェーンコードの是認ポリシーに従って求められる組織により是認されたことを確認する。例えば、トランザクションによっては、有効であると見なされるには、1つの組織によって是認されるだけでよいものもあれば、複数の是認が必要なものもある。妥当性確認のこのプロセスは、全ての関連組織が同じ成果又は結果を生成したことを確認する。また、この妥当性確認が、是認ピアからレスポンスを受け取り、提案トランザクションを送る判断を行うのがアプリケーションであるフェーズ1での是認チェックと異なることに留意する。アプリケーションが、誤ったトランザクションを送ることにより是認ポリシーに違反する場合、ピアはなお、フェーズ3の妥当性確認プロセスでトランザクションを拒絶することが可能である。
トランザクションが正しく是認された場合、ピアはトランザクションを台帳に適用しようとする。これを行うために、ピアは台帳一貫性チェックを実行して、台帳の現在状態が、提案された更新が生成されたときの台帳の状態と互換性を有するか否かを確認する。トランザクションが完全に是認された場合であっても、これは常に可能であるわけではない。例えば、別のトランザクションが、トランザクション更新がもはや有効ではなく、したがって、もはや適用することができないように台帳における同じアセットを更新したかもしれない。このようにして、各ピアの台帳コピーは、それぞれ妥当性確認に同じルールに従うため、ネットワークにわたり一貫した状態に保たれる。
ピアは、個々の各トランザクションの妥当性確認に成功した後、台帳を更新する。失敗したトランザクションは台帳に適用されず、成功したトランザクションと同様に監査目的で保持される。これは、ピアブロックが、ブロック内の各トランザクションでの有効又は無効インジケータを除き、オーダラーから受け取ったブロックと略同じであることを意味する。
フェーズ3は、チェーンコードの実行を必要としない-これはフェーズ1中のみ行われ、それは重要である。チェーンコードは、ブロックチェーンネットワーク全体を通してではなく、是認ノードのみで利用可能であるだけでよいことを意味する。チェーンコードの論理を是認組織に対して機密に保つため、これは多くの場合、有用である。これは、トランザクションを是認するか否かに関係なく、チャネルにおけるあらゆるピアと共有されるチェーンコードの出力(トランザクション提案レスポンス)とは対照的である。是認ピアのこの特化はスケーラビリティに役立つように設計される。
最後に、ブロックがピアの台帳にコミットされる都度、そのピアは適切なイベントを生成する。ブロックイベントは全ブロック内容を含み、一方、ブロックトランザクションイベントは、ブロックにおける各トランザクションが有効化されたか、それとも無効化されたか等の概要情報のみを含む。チェーンコード実行が生成されたチェーンコードイベントもこのときに公開することができる。アプリケーションは、発生時に通知することができるように、これらのイベントタイプを記録することができる。これらの通知は、トランザクションワークフローの第3の最終フェーズを完結する。
まとめると、フェーズ3は、オーダラーにより生成され、台帳に一貫して適用されるブロックを見る。ブロックへのトランザクションの厳密な順序付けにより、各ピアは、トランザクション更新がブロックチェーンネットワーク全体にわたり一貫して適用されることの妥当性確認を行うことができる。
オーダラー及びコンセンサス
この全体トランザクション・ワークフロー・プロセスは、全てのピアが、オーダラーにより仲介されるプロセスにおいて、トランザクションの順序及び内容について合意に達したため、コンセンサスと呼ばれる。コンセンサスはマルチステッププロセスであり、アプリケーションには、プロセス完了時-異なるピアでわずかに異なる時間に生じる、台帳更新のみが通知される。
したがって、オーダラーは、ピアが妥当性確認し台帳に含めるために、提案された台帳更新をアプリケーションから収集し、配信するノードであると見なすことができる。他方、ネットワークからのピア、ホストチェーンコード、及び台帳は、トランザクション提案に対処して応答し、トランザクション更新を一貫して台帳に適用することにより台帳を最新に保つ。
ワールドステート
ワールドステートは、1組の台帳状態の現在値のキャッシュを保持するデータベースである。ワールドステートは、プログラムが、トランザクションログ全体を巡回することにより状態の現在値を計算する必要があるのではなく、状態の現在値に直接アクセスするのを容易にする。台帳状態は、デフォルトにより、キー値対として表される。状態が作成、更新、且つ削除されることができるため、ワールド状態は頻繁に変わることができる。
ワールドステートは、一意の台帳状態としてビジネスオブジェクトの属性の現在値を保持する。プログラムは通常、オブジェクトの現在値を必要とするため、これは有用である;ブロックチェーン全体を巡回して、オブジェクトの現在値を計算するのは面倒である-現在値はただ、ワールドステートから直接取得される。
図23は、2つの状態を含む台帳ワールドステートを図示する。第1の状態は:キー=CAR1及び値=アウディである。第2の状態はより複雑な値を有する:キー=CAR2及び値={モデル:BMW,色=赤,所有者=ジェーン}。両状態ともバージョン0である。
台帳状態は、特定のビジネスオブジェクトについての1組の事実を記録する。上記例は、それぞれキー及び値を有する2台の車CAR1及びCAR2の台帳状態を示す。アプリケーションプログラムは、単純な台帳APIを使用して状態を取得し、配置し、削除するスマートコントラクトを呼び出すことができる。状態値がいかに単純(アウディ・・・)又は複合(タイプ:BMW・・・)であることができるかに留意する。ワールドステートは多くの場合、特定の属性を有するオブジェクトを検索し、例えば、赤いBMWを全て見つけるのにクエリされる。
ワールドステートはデータベースとして実装される。データベースは、状態の効率的な格納及び検索に演算子の豊富なセットを提供する。Hyperledger(登録商標)ファブリックは、異なるワールド・ステート・データベースを使用して、例えば複雑なクエリでアプリケーションにより必要とされる異なるタイプの状態値及びアクセスパターンの必要性に対処するように構成することができる。
アプリケーションは、ワールドステートへの変更を捕捉するトランザクションを提出し、これらのトランザクションは、台帳ブロックチェーンにコミットされることになる。アプリケーションは、Hyperledger(登録商標)ファブリックSDKによりこのコンセンサスメカニズムの詳細から絶縁され、単にスマートコントラクトを呼び出し、トランザクションがブロックチェーンに含まれたとき(有効又は無効に関係なく)、通知されるだけである。主要な設計ポイントは、必要とされる組の是認組織によって署名されたトランザクションのみが、ワールドステートへの更新になることである。トランザクションが十分な是認者により署名されない場合、ワールドステートの変更にはならない。
状態はバージョン番号を有し、上記図では、状態CAR1及びCAR2は開始バージョン0である。バージョン番号は、Hyperledger(登録商標)ファブリックによる内部使用のためであり、状態が変更される都度、インクリメントされる。状態が更新されるときは常にバージョンがチェックされて、現在の状態が是認時のバージョンに一致することを確かめる。これは、ワールドステートが予期されるように変更されており、同時更新が行われなかったことを保証する。
最後に、台帳が最初に作成されたとき、ワールドステートは空である。ワールドステートへの有効な変更を表すいかなるトランザクションもブロックチェーンに記録されるため、ワールドステートを随時、ブロックチェーンから再生成することができることを意味する。これは非常に好都合であることができる-例えば、ワールドステートは、ピア作成時、自動的に生成される。さらに、ピアが異常に機能停止(fail)した場合、トランザクションが受け入れられる前、ピア再開時にワールドステートを再生成することができる。
ワールドステートは物理的にデータベースとして実装されて、台帳状態の単純で効率的な格納及び検索を提供する。台帳状態は単純値又は複合値を有することができ、これに対応するために、ワールド・ステート・データベース実装は様々であることができ、これらの値を効率的に実装できるようにする。ワールド・ステート・データベースの選択肢には現在、LevelDB及びCouchDB(登録商標)がある。
LevelDBはデフォルトであり、台帳状態が単純なキー値対である場合、特に適切である。LevelDBデータベースは、ネットワークノードと接近して同じ場所に配置される-同じオペレーティング・システム・プロセス内に組み込まれる。
CouchDB(登録商標)は、台帳状態がJSONドキュメントとして構造化される場合、特に適切な選択肢であり、その理由は、CouchDB(登録商標)がビジネストランザクションで見られることが多いよりリッチなデータ型のリッチクエリ及び更新をサポートするためである。実装毎に、CouchDB(登録商標)は別個のオペレーティング・システム・プロセスで実行されるが、それでもなお、ピアノードとCouchDB(登録商標)インスタンスとの間には1:1関係がある。この全てはスマートコントラクトからは不可視である。
LevelDB及びCouchDB(登録商標)では、Hyperledger(登録商標)ファブリックの重要な態様が見られる-それはプラガブルである。ワールド・ステート・データベースは、リレーショナル・データ・ストア、グラフストア、又は一時的データベースであることができる。これは、効率的にアクセスすることができる台帳状態のタイプに大きな柔軟性を提供し、Hyperledger(登録商標)ファブリックが多くの異なるタイプの問題に対処できるようにする。
Hyperledger(登録商標)ファブリックでは、各チャネルは完全に別個の台帳を有する。これは完全に別個のブロックチェーン及び名前空間を含めて完全に別個のワールドステートを意味する。チャネル間で台帳情報にアクセスすることができるように、アプリケーション及びスマートコントラクトがチャネル間で通信することが可能である。
状態データベースとしてのCouchDB(登録商標)
CouchDB(登録商標)は、任意選択の代替の外部状態データベースである。CouchDB(登録商標)は、チェーンコードでモデリングされた任意のバイナリデータを格納することができる(CouchDB(登録商標)付属機能は、非JSONバイナリデータに内部で使用される)。しかし、JSONドキュメントストアとして、CouchDB(登録商標)はさらに、チェーンコード値(例えばアセット)がJSONデータとしてモデリングされる場合、チェーンコードデータと突き合わせたリッチクエリを可能にする。
CouchDB(登録商標)は、キー(アセット)の取得及び設定並びにキーに基づくクエリ等のコアチェーンコード演算をサポートする。キーは範囲によりクエリすることができ、複合キーをモデリングして、複数のパラメータと突き合わせた等価性クエリを可能にすることができる。例えば、所有者、アセットIDの複合キーを使用して、特定のエンティティにより所有される全てのアセットをクエリすることができる。これらのキーベースのクエリは、台帳と突き合わせた読み取り専用クエリ及び台帳を更新するトランザクションに使用することができる。
アセットをJSONとしてモデリングし、CouchDB(登録商標)を使用する場合、チェーンコード内のCouchDB(登録商標)JSONクエリ言語を使用して、チェーンコードデータ値と突き合わせて複雑なリッチクエリを実行することもできる。これらのタイプのクエリは、台帳に何かがあるかの理解に優れている。これらのタイプのクエリの提案レスポンスは通常、クライアントアプリケーションにとって有用であるが、通常、トランザクションとして順序付けサービスに提出されない。実際には、結果セットがチェーンコード実行とリッチクエリのコミット時間との間で安定している保証はなく、したがって、リッチクエリは、結果セットがチェーンコード実行とコミット時間との間で安定していることをアプリケーションが保証することができる場合又はアプリケーションが続くトランザクションにおける潜在的な変更に対処することができる場合を除き、更新トランザクションでの使用には適切ではない。例えば、アリスにより所有される全てのアセットについてのリッチクエリを実行し、ボブに転送する場合、チェーンコード実行時間とコミット時間との間に別のトランザクションにより新しいアセットがアリスに割り当てられることがあり、この「幻の」項目を見逃すであろう。
CouchDB(登録商標)は、ピアと共に別個のデータベースプロセスとして実行され、したがって、セットアップ、管理、及び動作に関して追加の考慮事項がある。将来必要な場合、複雑なリッチクエリを実行する選択肢を有するように、チェーンコード・アセット・データをJSONとしてモデリングすることは優れた実施である。
チェーンコードからのCouchDB(登録商標)の使用
チェーンコードクエリ
チェーンコードシムAPIの大半、例えば、GetState、PutState、GetStateByRange、GetStateByPartialCompositeKeyは、CouchDB(登録商標)状態データベースと共に利用することができる。さらに、CouchDB(登録商標)を状態データベースとして利用し、モデルアセットをチェーンコードにおけるJSONとして利用する場合、GetQueryResult APIを使用し、CouchDB(登録商標)クエリ文字列を渡すことにより、リッチクエリを状態データベース中のJSONと突き合わせて実行することができる。クエリ文字列はCouchDB JSONクエリシンタックスに従う。
marbles02ファブリックサンプルは、チェーンコードからのCouchDB(登録商標)クエリの使用を示す。所有者IDをチェーンコードに渡すことによりパラメータ化されたクエリを示すqueryMarblesByOwner()関数を含む。次に、JSONクエリシンタックス:
{"selector":{"docType":"marble","owner":}}
を使用して、ドキュメントタイプ「marble」及び所有者IDに一致するJSONドキュメントについて状態データをクエリする。
CouchDB(登録商標)ページネーション
ファブリックは、リッチクエリ及び範囲ベースクエリのクエリ結果のページングをサポートする。ページネーションをサポートするAPIは、範囲クエリ及びリッチクエリの両方でページサイズの使用を可能にするとともに、ブックマークを使用できるようにする。効率的なページネーションをサポートするためには、ファブリックページネーションAPIを使用しなければならない。特に、ファブリック自体がクエリ結果のページネーションを管理し、CouchDB(登録商標)に渡されたページサイズ限度を暗黙的に設定するため、CouchDB(登録商標)のlimitキーワードは、CouchDB(登録商標)クエリでは尊重されない。
ページサイズがページネーションクエリAPI(GetStateByRangeWithPagination()、GetStateByPartialCompositeKeyWithPagination()、及びGetQueryResultWithPagination())を使用して指定される場合、1組の結果(ページサイズによって区切られる)は、ブックマークと共にチェーンコードに返される。ブックマークは、チェーンコードから呼び出し側クライアントに返すことができ、呼び出し側クライアントは、続くクエリでブックマークを使用して、結果の次の「ページ」を受け取ることができる。
ページネーションAPIは、読み取りトランザクションでの使用のみであり、クエリ結果はクライアントのページング要件をサポートすることが意図される。読み出し及び書き込みが必要なトランザクションの場合、非ページネーション・チェーンコード・クエリAPIを使用する。チェーンコード内で、結果セットを通して所望の深さまで反復する。
ページネーションAPIが利用されるか否かに関係なく、全てのチェーンコードクエリは、core.yamlからのtotalQueryLimit(デフォルト100000)によって区切られる。これは、非意図的又は悪意のある長期実行クエリを回避するために、チェーンコードが反復し、クライアントに返す悔過の最大数である。
CouchDB(登録商標)インデックス
CouchDB(登録商標)におけるインデックスは、JSONクエリを効率的にするために必要であり、ソートを有する任意のJSONクエリに必要とされる。インデックスは、/META-INF/statedb/couchdb/indexesディレクトリでチェーンコードと共にパッケージングすることができる。各インデックスは、それ自体のテキストファイルにおいて、CouchDBインデックスJSONシンタックスに従ってJSONでフォーマットされたインデックス定義を用いて拡張*.jsonを用いて定義されなければならない。例えば、上記marbleクエリをサポートするために、ドキュメントタイプ及び所有者フィールドでのサンプルインデックスが提供される:
{"index":{"fields":["docType","owner"]},"ddoc":"indexOwnerDoc","name":"indexOwner","type":"json"}
チェーンコードのMETA-INF/statedb/couchdb/indexesディレクトにおける任意のインデックスは、デプロイ用のチェーンコードと共にパッケージされる。チェーンコードがピアにインストールされ、且つピアのチャネルの1つでインスタンス化される場合、インデックスはピアのチャネル及びチェーンコード固有状態データベース(CouchDB(登録商標)を使用するように構成されていた場合)に自動的にデプロイされる。まずチェーンコードをインストールし、次にチャネルでチェーンコードをインスタンス化する場合、インデックスはチェーンコードインスタンス化時にデプロイされる。チェーンコードがチャネルで既にインスタンス化されており、後にチェーンコードをピアにインストールする場合、インデックスはチェーンコードインストール時にデプロイされる。
デプロイされると、インデックスはチェーンコードクエリにより自動的に利用される。CouchDB(登録商標)は、クエリで使用されているフィールドに基づいてどのインデックスを使用するか自動的に決定することができる。代替的には、セレクタクエリにおいて、インデックスはuse_indexキーワードを使用して指定することができる。
同じインデックスが、インストールされたチェーンコードの続くバージョンに存在することができる。インデックスを変更するには、同じインデックス名を使用するが、インデックス定義を変更する。インストール/インスタンス化されると、インデックス定義はピアの状態データベースに再デプロイされる。
大量のデータを既に有し、後にチェーンコードをインストールする場合、インスタンス化時のインデックス作成は幾らか時間が掛かることがある。同様に、大量のデータを既に有し、チェーンコードの後続バージョンをインスタンス化する場合、インデックス作成は幾らかの時間が掛かることがある。インデックスが初期化されている間、チェーンコードクエリが時間切れする可能性があるため、状態データベースにこの時間クエリするチェーンコード関数を呼び出すことを回避する。トランザクション処理中、ブロックが台帳にコミットされる場合、インデックスは自動的にリフレッシュされる。
CouchDB(登録商標)構成
CouchDB(登録商標)は、goleveldbからCouchDB(登録商標)に状態データベース構成選択肢を変えることにより状態データベースとしてイネーブルされる。さらに、couchDBAddressは、ピアにより使用されるCouchDB(登録商標)を指すように構成される必要がある。CouchDB(登録商標)にユーザ名及びパスワードが構成されている場合、ユーザ名及びパスワードプロパティには、adminユーザ名及びパスワードが記入されるべきである。追加の選択肢がcouchDBConfigセクションに提供され、適所に文書化される。core.yamlへの変更は、ピアの再開後、即座に有効になる。
core.yaml値をオーバーライドするドッカー環境変数、例えば、CORE_LEDGER_STATE_STATEDATABASE、及びCORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESSを渡すこともできる。
以下はcore.yamlからのステート・データベース・セクションである:
状態:
# stateDatabase-選択肢は"goleveldb"、"CouchDB"
# goleveldb-goleveldbに格納されるデフォルト状態データベース。
# CouchDB-CouchDBに状態データベースを格納する
stateDatabase: goleveldb
# クエリ毎に返すレコード数への限度
totalQueryLimit: 10000
couchDBConfig:
# ピアと同じサーバでCouchDBを実行することが推奨され、
# ドッカーコンポーズにおいてCouchDBコンテナポートをサーバポートにマッピングせず、
# その他の場合、適切なセキュリティをCouchDBクライアント(ピア上)とサーバとの間に提供しなければならず、
couchDBAddress: couchdb:5984
# このユーザ名は、CouchDBユーザ名で読み出し及び書き込み権限を有さなければならず、
# スタートアップ中、パスワードは、環境変数として渡されることが推奨され(例えば、LEDGER_COUCHDBCONFIG_PASSWORD)、
# ここに格納される場合、意図されないユーザがパスワードを発見するのを阻止するために、ファイルにはアクセス制御保護付きでアクセスしなければならない。
パスワード:
# CouchDBエラーの場合の再試行数
最大再試行:3
# ピアスタートアップ中のCouchDBエラーお場合の再試行数
スタートアップ時の最大再試行:10
# CouchDBリクエスト時間切れ(単位:持続時間、例えば20秒)
リクエスト時間切れ:35秒
# 各CouchDBクエリ当たりのレコード数の限度
# なお、チェーンコードクエリはtotalQueryLimitによってのみ制限される。
# 内部的にチェーンコードは複数のCouchDBクエリを実行することができる
# サイズのinternalQueryLimitのそれぞれ
internalQueryLimit: 1000
# CouchDBバルク更新バッチ当たりのレコード数限度
maxBatchUpdateSize: 1000
# あらゆるNブロック後にウォームインデックス。
# この選択肢は、あらゆるNブロック後にCouchDBにデプロイされた任意のインデックスをウォームする。
# 高速セレクタクエリを保証するために、あらゆるブロックコミット後、値1がインデックスをウォームする。
# 値の増大は、ピア及びCouchDBの書き込み効率を改善する可能性があるが、クエリレスポンス時間を低下させる恐れがある。
warmIndexesAfterNBlocks: 1
Hyperledger(登録商標)ファブリックを用いて供給されるドッカーコンテナにおいてホストされるCouchDB(登録商標)は、ドッカー・コンポーズ・スクリプトを使用してCOUCHDB_USER及びCOUCHDB_PASSWORD環境変数を用いて渡される環境変数を用いてCouchDB(登録商標)ユーザ名及びパスワードを設定する能力を有する。
ファブリックを用いて供給されるドッカーイメージ外部のCouchDB(登録商標)インストールの場合、そのインストールのlocal.iniファイルは、adminユーザ名及びパスワードを設定するように編集されなければならない。
ドッカー・コンポーズ・スクリプトは、コンテナ作成時のみ、ユーザ名及びパスワードを設定する。コンテナ作成後、ユーザ名又はパスワードが変更されるべき場合、local.iniファイルは編集されなければならない。
CouchDB(登録商標)ピア選択肢は、各ピアスタートアップ時に読み出される。
アイデンティティ
ブロックチェーンネットワークにおける異なるアクターは、ピア、オーダラー、クライアントアプリケーション、管理者等を含む。これらのアクターのそれぞれ-サービスを消費することができるネットワーク内又は外の能動要素-は、X.509デジタル証明書にカプセル化されたデジタルアイデンティティを有する。これらのアイデンティティは、アクターがブロックチェーンネットワークにおいて有するリソースにわたる厳密な許可及び情報へのアクセスを決めるため、実に重要である。
デジタルアイデンティティは、ファブリックが許可を決定するのに使用する幾つかの追加の属性を更に有し、アイデンティティと関連付けられた属性との結合体に特別な名前-プリンシパルを与える。プリンシパルはまるでユーザID又はグループIDのようであるが、アクターの組織、組織ユニット、役割、又はアクターの特定のアイデンティティ等の広範囲のプロパティのアクターアイデンティティを含むことができるため、わずかにより柔軟性が高い。プリンシパルを語る場合、プリンシパルは、許可を決めるプロパティである。
アイデンティティが確認可能であるためには、アイデンティティは高信頼性機関からのものでなければならない。メンバーシップ・サービス・プロバイダ(MSP)は、これがファブリックでいかに達成されるかである。より具体的には、MSPは、この組織の有効アイデンティティを支配するルールを定義するコンポーネントである。ファブリックにおけるデフォルトMSP実装は、X.509証明書をアイデンティティとして使用し、従来の公開鍵基盤(Public Key Infrastructure:PKI)階層モデルを採用する(PKIについては更に後述する)。
アイデンティティの使用を説明するための単純なシナリオ
スーパーマーケットに行き、幾つかの食料品を購入すると想像する。チェックアウト時、Visa、Mastercard、及びAMEXカードのみが許容されるという貼り紙を見る。別のカードで支払おうとする場合-これを「イマジンカード」と呼ぶことにする-そのカードが真正であるか否か及び口座に十分な資金があるか否かは重要ではない。そのカードが許容されることはない。
図24は、有効なクレジットカードを有することが十分ではない-カードはまた、店により許容されなければならない-ことを図示する。PKI及びMSPは同じように一緒に機能する-PKIはアイデンティティのリストを提供し、MSPはこれらのアイデンティティのどれが、ネットワークに参加する所与の組織のメンバであるかを語る。
PKI証明機関及びMSPは、機能の同様の組合せを提供する。PKIはカードプロバイダのようなものである-多くの異なるタイプの確認可能なアイデンティティを分配する。他方、MSPは、店により許容されるカードプロバイダのリストのようなものであり、どのアイデンティティが、店の支払いネットワークの高信頼性メンバ(アクター)であるかを特定する。MSPは、確認可能なアイデンティティをブロックチェーンネットワークのメンバに変える。
PKI
公開鍵基板(PKI)は、ネットワークにおいて安全な通信を提供するインターネット技術の集まりである。
図25は、公開鍵基盤(PKI)の要素を図示する。PKIは、デジタル証明書を当事者(例えば、サービスのユーザ、サービスプロバイダ)に発行する証明機関で構成され、当事者は次に、デジタル証明書を使用して、当事者の環境と交換するメッセージにおいて自身を認証する。CAの証明書失効リスト(Certificate Revocation List:CRL)は、もはや有効ではない証明書のリファレンスを構成する。証明書の失効は幾つかの理由で発生することがある。例えば、証明書は、証明書に関連付けられた暗号プライベート資料が露出されたため、失効することがある。
ブロックチェーンネットワークは通信ネットワークを超えるものであるが、種々のネットワーク参加者間の安全な通信を保証し、ブロックチェーンに掲示されたメッセージが適宜認証されることを保証するのにPKI規格に頼る。したがって、PKIの基本を理解し、そしてMSPが何故それ程重要であるかを理解することが重要である。
PKIには4つの主要要素がある:
・デジタル証明書、
・公開鍵及び秘密鍵、
・証明機関、
・証明書失効リスト。
デジタル証明書
デジタル証明書は、証明書の所持人に関連する1組の属性を保持するドキュメントである。最も一般的なタイプの証明書は、X.509規格に準拠するものであり、当事者の識別情報詳細をその構造に符号化できるようにする。
例えば、ミシガン州デトロイトにおけるMitchell Carsの製造部門のMary Morrisは、C=US、ST=ミシガン、L=デトロイト、O=Mitchell Cars、OU=製造、CN=Mary Morris/UID=123456というサブジェクト属性を有するデジタル証明書を有する。Maryの証明書は、政府識別カードと同様である-自身についての鍵となる事実を証明するのに使用することができる、Maryについての情報を提供する。
図26は、Mary Morrisと呼ばれる当事者を記述するデジタル証明書を示す。Maryは証明書のサブジェクトであり、強調表示されたサブジェクトテキストは、Maryについての鍵となる事実を示す。証明書は、見て取ることができるように、より多くの情報も保持する。最も重要なことには、Maryの公開鍵はMaryの証明書内で分配され、一方、Maryの秘密署名鍵はMaryの証明書内で分配されない。この署名鍵はプライベートに保たれなければならない。
重要なことは、暗号法(文字取り「シークレットライティング」)と呼ばれる数学的技法を使用して、改竄が証明書を無効化するようにMaryの全ての属性を記録することができることである。暗号法により、他の当事者が証明機関(Certificate Authority:CA)として知られる証明書発行者を信頼する限り、Maryは自身の証明書を他人に提示して、自身の身元を証明することができる。CAが特定の暗号情報(それ自体の秘密署名鍵を意味する)を秘密に保つ限り、証明書を読んだ誰であっても、Maryについての情報が改竄されていない-Mary Morrisについての特定の属性を常に有する-ことを信じることができる。MaryのX.509証明書を、変更不可能なデジタルIDカードとして考える。
認証、公開鍵、及び秘密鍵
認証及びメッセージ保全性は、安全な通信において重要な概念である。認証は、メッセージを交換する当事者が、特定のメッセージを作成したことのアイデンティティが保証されることを要求する。メッセージが「保全性」を有することは、伝送中に変更されたはずがないことを意味する。例えば、あなたが、なりすましではなく実際のMary Morrisと通信していることを確かめたいことがある。又はMaryがあなたにメッセージを送信した場合、送信中、そのメッセージが誰によっても改竄されなかったことを確かめたいことがある。
従来の認証メカニズムは、名前が示唆するように、当事者がメッセージにデジタル署名することができるデジタル署名に頼っている。デジタル署名は、署名されたメッセージの保全性についての保証も提供する。
技術的に言えば、デジタル署名メカニズムでは、各当事者が2つの暗号的に結ばれた鍵を保持する必要がある:広範囲で利用可能であり、認証の頼みの綱として働く公開鍵及びメッセージのデジタル署名を生成するのに使用される秘密鍵。デジタル署名されたメッセージの受信者は、添付された署名が、予期された送信者の公開鍵下で有効であることをチェックすることにより、受信したメッセージの出所及び保全性を確認することができる。
秘密鍵と各公開鍵との間の一意の関係は、安全な通信を可能にする暗号魔法である。鍵間の一意の数学的関係は、秘密鍵を使用して、対応する公開鍵のみが、同じメッセージでのみ一致することができるメッセージ上の署名を生成することができるようなものである。
図27に図示される例では、Maryは秘密鍵を使用してメッセージに署名する。署名は、Maryの公開鍵を使用して署名付きメッセージを見る誰によっても確認することができる。
証明機関
アクター又はノードは、システムにより信頼される機関により発行されたデジタルアイデンティティの手段により、ブロックチェーンネットワークに参加することが可能である。最も一般的な事例では、デジタルアイデンティティ(又は単にアイデンティティ)は、X.509規格に準拠する暗号的に妥当性確認されたデジタル証明書の形態を有し、証明機関(CA)により発行される。
CAは、特に、Symantec(元々はVerisign)、GeoTrust、DigiCert、GoDaddy、及びComodo等のインターネット・セキュリティ・プロトコルの共通部分である。
図28は、異なるアクターに証明書を分配する証明機関を図示する。これらの証明書は、CAによりデジタル署名され、アクターをアクターの公開鍵(及び任意選択でプロパティの包括的リスト)に一緒にバインドする。その結果、CAを信頼する(そしてその公開鍵を知る)場合、アクターの証明書のCAの署名を妥当性確認することにより、特定のアクターが、証明書に含まれる公開鍵にバインドされ、証明書に含まれる属性を所有することを信用することができる。
証明書は、アクターの秘密鍵もCAの秘密鍵も含まないため、広く広めることができる。したがって、証明書は、異なるアクターから来たメッセージを認証する信用の頼みの綱として使用することができる。
CAは証明書も有し、これは広く利用可能である。これにより、所与のCAにより発行されたアイデンティティの消費者は、証明書が対応する秘密鍵(CA)の保有者によってのみ生成されたはずであることをチェックすることにより確認することができる。
ブロックチェーン設定では、ネットワークとの対話を望むあらゆるアクターは、アイデンティティを必要とする。この設定では、1若しくはそれ以上のCAを使用して、デジタルの観点から組織のメンバを定義することができると言える。組織のアクターが確認可能なデジタルアイデンティティを有することの基本を提供するのは、CAである。
ルートCA、中間CA、及び信頼チェイン
CAには2つの特色がある:ルートCA及び中間CA。ルートCA(Symantec、Geotrust等)は、何億もの証明書をインターネットユーザに安全に分配する必要があるため、このプロセスを中間CAと呼ばれるものにわたり拡散させることは道理に適う。これらの中間CAは、ルートCA又は別の中間期間により発行された証明書を有し、チェイン中の任意のCAにより発行された任意の証明書に「信頼チェイン」を確立できるようにする。ルートCAまで追跡して遡るこの能力は、セキュリティをなお提供しながらCAの機能をスケーリングできるようにするのみならず-証明書を消費する組織が、自信を持って中間CAを使用できるようにする-、損なわれた場合、信頼チェイン全体が危険に曝されるルートCAの露出を制限もする。他方、中間CAが損なわれた場合、露出ははるかに少ない。
図29は、1組の中間CAのそれぞれの証明書を発行するCAがルートCA自体であるか、又はルートCAへの信頼チェインを有する限り、ルートCAとこれらの中間CAとの間に確立される信頼チェインを図示する。
中間CAは、複数の組織にわたり証明書を発行することになった場合、膨大な量の柔軟性を提供し、それは許可されたブロックチェーンシステム(ファブリックのように)において非常に有用である。例えば、異なる組織は異なるルートCAを使用してもよく、又は異なる中間CAを有する同じルートCAを使用してもよい-実際にはネットワークのニーズに依存する。
ファブリックCA
ファブリックは、ユーザが、形成されたブロックチェーンネットワークでCAを作成できるようにする内蔵CAコンポーネントを提供する。このコンポーネント-ファブリックCAとして知られるのは、X.509証明書の形態を有するファブリック参加者のデジタルアイデンティティを管理可能なプライベートルートCAプロバイダである。ファブリックCAはファブリックのルートCAニーズに的を絞ったカスタムCAであるため、本質的に、ブラウザで一般的/自動的に使用されるSSL証明書を提供することができない。しかしながら、何らかのCAはアイデンティティの管理に使用しなければならない(テスト環境であってさえも)ため、ファブリックCAは、証明書の提供及び管理に使用される。公開/商用ルート又は中間CAを使用して識別を提供することも可能である-そして完全に適切である。
証明書失効リスト
証明書失効リスト(CRL)は、CAが何らかの理由で失効したことが分かっている証明書への参照のリストである。店のシナリオでは、CRLは、盗まれたクレジットカードのリストのようなものである。
第三者が別の当事者の身元を確認したい場合、まず、発行CAのCRLをチェックして、証明書が施行していないことを確かめる。確認者はCRLをチェックする必要はないが、チェックしない場合には、損なわれたアイデンティティを受け入れるリスクを負う。
図30は、CRLを使用して、証明書がなお有効であることをチェックすることを図示する。なりすましが、損なわれたデジタル証明書を妥当性確認当事者に渡そうとする場合、まず、発行CAのCRLと突き合わせてチェックされて、もはや有効ではないものとして列記されていないことを確かめることができる。
なお、失効中の証明書は、証明書の期限切れとはかなり異なる。失効した証明書は期限切れしていない-他のあらゆる基準では完全に有効な証明書である。
リファレンス:
ファブリック及びCouchDB(登録商標)に関する上記情報は、以下のリンクで入手可能なソースから公に採用された。
https://hyperledger-fabric.readthedocs.io/en/release-1.4/fabric_model.html#
https://kaleido.io/enterprise-blockchain-protocols-ethereum-vs-fa
https://hyperledger-fabric.readthedocs.io/en/release-1.4/peers/peers.html#applications-and-peers
https://hyperledger-fabric.readthedocs.io/en/release-1.4/ledger/ledger.html#world-state-database-options
https://hyperledger-fabric.readthedocs.io/en/release-1.4/couchdb_as_state_database.html
https://hyperledger-fabric.readthedocs.io/en/release-1.4/identity/identity.html#identity
https://hyperledger-fabric.readthedocs.io/en/release-1.4/identity/identity.html#fabric-ca
付録B
リレーショナル・データ・アクセス制御
Super Admin:ルート許可
ELEMENTにおける他の全てのアクティビティの前提条件は、データベースの作成及びそのデータベースに対して演算を実行する少なくとも1つのアイデンティティの承認である。「Super Admin」アクセスレベルは、これを行う許可を認める。
データベースの実装は高度にプラットフォーム固有であるため、その存在以外のこの許可レベルについてのプラットフォーム独立仕様はない。
エレメント・アクセス・レベル
ELEMENTシステムにおける残りのユーザ・アクセス・レベルは、データベース毎に認められる。
リレーショナル・データ・アクセス制御管理は、ELEMENTへの登録成功時に分散型台帳アイデンティティに有り当てられる特定の一意の属性に基づく。ELEMENTを使用する全ての分散型台帳アイデンティティは、これらの属性に基づいてカテゴライズされ確認される。特定のデータベースでのアイデンティティに基づくユーザの分類により、ELEMENTにより認められる演算範囲が決まる。
図31は、アクセスレベル及び許可決定を図示する。
ELEMENTには5つのアクセスレベルがあり、それらのレベルの各特権について以下説明する。
Super Admin
考察したように、Super AdminはELEMENTのルート許可レベルであり、データベースの作成を含む全ての演算の許可を有する:
- データベースの作成/ドロップ
- 特定/複数のデータベースへのAdminユーザの選任/選任解除
- 特定/複数のデータベースからのユーザの追加/除去
- ネットワークにわたる全てのユーザ及びユーザ情報の閲覧
- DDL演算の実行
- DML読み出し/書き込み演算の実行
Admin
Adminアクセスレベルは、指定されたデータベース内で最高特権を有するユーザである。Adminは、Super AdminユーザによりELEMENTデータベースに選任/登録される。Adminアクセスレベルの特権は:
- 割り当てられたデータベースでのユーザの追加/除去
- 割り当てられたデータベースにわたる全てのユーザ及びユーザ情報の閲覧
- DDL演算の実行
- DML読み出し/書き込み演算の実行
備考: Adminユーザは、指定されたデータベースにより多くのAdminを追加/除去することができる。
DDL
このアクセスレベルは、ユーザがDML演算と共に特定のDDL演算を実行できるようにする(より詳細についてはELEMENT SQL仕様参照)。しかし、このアクセスレベルからのユーザの追加は許可されない及び以下。
- 指定されたデータベース内のELEMENTテーブル、スキーマ、及びカラム(インデックス)の作成/変更/ドロップ等のDDL演算の実行
- DML読み出し/書き込み演算の実行
DML Write
このアクセスレベルのユーザは、以下等の特定のDML機能を実行することができる:
- ELEMENTテーブルでのレコードの挿入/更新/削除
- LIMIT及びOPSTAT等のELEMENT SQL拡張は、DML Write演算と併せて使用することができる(ELEMENT SQL仕様参照)。
DML Read
DML Readアクセスレベルは、ユーザがデータを読み出せるようにする最もベーシックなアクセスである。このレベルのユーザは、データベースのいかなるデータも変更するアクセスを有さない。このアクセスレベルにおいて以下の演算を行うことができる:
- 指定されたデータベースから種々のレコードを選択し、昇順又は降順にデータを配置する
- BOOKMARK、QUERYLEVEL、及びLIMIT等のELEMENT SQL拡張は、DML Read演算と併せて使用することができる(ELEMENT SQL仕様参照)
- 指定されたデータベース内のテーブル及びテーブル詳細の閲覧。
備考:CREATE及びDROPデータベースDDL演算は、Adminアクセスレベル及びAdminよりも下の全てのアクセスレベルではディセーブルされる。ユーザがこれらの演算の何れかを実行しようとする場合、ELEMENTシステムはエラーを返すべきである-403:Access Denied
ユーザ登録
ELEMENTシステム(v1.0)は、招待者限定参加登録システムを有する。登録プロセスは公開されない:Super Adminのみが、ELEMENTデータベースを使用する新しいユーザを追加する特権を有する。続けて、super adminはデータベースオーナー(Admin)を割り当てることができ、データベースオーナーはその特定のデータベースに他のユーザを更に追加することができる。ELEMENT演算は分散型台帳ネットワーク機能を基礎とするため、ELEMENTユーザは必ず、分散型台帳ネットワークにおけるアイデンティティの既存のプールから構築される。
ユーザ登録は、これもまたELEMENTユーザインターフェースを介してアクセス可能であることが指定される*Register User ELEMENT APIにより対処され、Super Admin及びAdminアクセスレベルは、データベースへの手動アクセスを認めることができる。
Endpoint: http://:3000/api/user/register
APIへのリクエストボディは3つの必須パラメータを含む:
1.username:メンバの一意/非既存の名前
2.database_id:既存のデータベースの名前
3.access_level:メンバのアクセス特権、このフィールドは以下の許された値を有することができる-"DDL"、"DML_WRITE"、"DML_READ"、"ADMIN"
ユーザ登録リクエストボディのサンプル:

"username": "Matthew",
"database_id": "Customer",
"access_level": "DDL"
登録に成功すると(成功レスポンス及び生じ得るエラーについてはELEMENT(商標)API仕様ドキュメント参照)、演算を分散型台帳に記録するには、ELEMENT実現が必要とされる。このアクションは、ユーザ情報を指定されたデータベースのメタデータに追加する。(データベース内のユーザ名は「Users」と呼ばれるアレイに保存される)。
ユーザの無効化
Super Admin及びAdminアクセスレベルは、特定のユーザを特定のデータベース/複数のデータベースからディセーブルすることを選ぶことができる。これは、ネットワーク上の複数のデータベースへの選択的ユーザアクセスを可能にする。
適切な特権を有するアクセスレベルは、Revoke User ELEMENT APIを使用することによりユーザをディセーブルすることができる。
Endpoint: http://:3000/api/user/revoke
APIへのリクエストボディは2つの必須パラメータを含む:
1.username:メンバの正確な名前
2.database_id:メンバが属する既存のデータベースの名前
ユーザ無効化リクエスト・ボディ・サンプル:
{
"username": "Matthew",
"database_id": "Customer",
}
無効化リクエストが実行されると、revokeUser()関数がinvokeTransaction()関数を通して呼び出される。revokeUser()関数は標的データベースから該当ユーザのメタデータを除去する。(ユーザはデータベースの「Users」アレイから除去される)。
ユーザの削除
Super Adminアクセスレベルは、ユーザをネットワークから完全に除去する特権を有する。これは、Delete User ELEMENT APIを使用することにより達成することができる。
ユーザが削除された場合、関連するメタデータは、アイデンティティが属した全てのデータベースから除去される。メタデータの他に、ネットワーク上のユーザのデジタルアイデンティティも完全にクリアされる。
Endpoint: http://:3000/api/user/delete
APIへのリクエストボディは1つの必須パラメータを含む:
1.username:メンバの正確な名前
ユーザ削除リクエスト・ボディ・サンプル
{
"username":"Matthew",
}
付録C
分散型台帳におけるリレーショナルデータ-高レベル要件
分散型台帳得及びコンセンサス
リレーショナルデータは、スマートコントラクトにアクセス可能でなければならない。
リレーショナルデータに付加された更新は、通常の分散型台帳データに付加された更新に使用されるものと同等のコンセンサスメカニズムにより支配される。
データを変更するリレーショナルデータベース演算は、分散型台帳にログされなければならない。スキーマを変更するリレーショナル演算も分散型台帳にログされなければならない。
リレーショナルデータは、可能な場合、分散型台帳内に格納されるべきであり、分散型台帳データと同レベルの不変性及びタンパーエビデンスを達成しなければならない。
リレーショナルスキーマ情報は、可能な場合、分散型台帳内に格納されるべきである。
リレーショナルインデックスは、ローカル代替が利用可能な場合、分散型台帳内に格納されるべきではない。
スキーマ及び索引付け
テーブルスキーマは、シングルフィールド一意プライマリキーをサポートする。テーブルの現在状態のプライマリキーの非クラスタリング索引付けがサポートされるべきである。
データ可視性
データ、スキーマ、及びログされた演算は、静止時又はトランスポート中、仕様「リレーショナル・データ・アクセス制御」において承認されるアイデンティティを除き、非暗号化形態では可視ではない。
データ及び演算の表現
リレーショナルデータ及びログされたリレーショナルデータ演算は、指定されたフォーマットでJSONとして分散型台帳(又は上記と同等)で表される。
図32は、データ及び演算オブジェクトの概説を図示する。
ELEMENTリレーショナル・データ・オブジェクト
付録D
Figure 2022521915000002
Figure 2022521915000003
Figure 2022521915000004
Figure 2022521915000005
Figure 2022521915000006
Figure 2022521915000007
Figure 2022521915000008
Figure 2022521915000009
Figure 2022521915000010
Figure 2022521915000011
Figure 2022521915000012
Figure 2022521915000013
Figure 2022521915000014
Figure 2022521915000015
Figure 2022521915000016
Figure 2022521915000017
Figure 2022521915000018
Figure 2022521915000019
Figure 2022521915000020
Figure 2022521915000021
Figure 2022521915000022
Figure 2022521915000023
Figure 2022521915000024
Figure 2022521915000025
Figure 2022521915000026
Figure 2022521915000027
Figure 2022521915000028
Figure 2022521915000029
Figure 2022521915000030
Figure 2022521915000031
Figure 2022521915000032
Figure 2022521915000033
Figure 2022521915000034
Figure 2022521915000035
Figure 2022521915000036
Figure 2022521915000037
Figure 2022521915000038
Figure 2022521915000039
Figure 2022521915000040
Figure 2022521915000041
Figure 2022521915000042
Figure 2022521915000043
Figure 2022521915000044
Figure 2022521915000045
Figure 2022521915000046
Figure 2022521915000047
付録E
ELEMENT SQL:高レベル要件
SQLクエリ入力パスウェイ
ELEMENT1.0実現は、以下のテーブルに概説される3つのソースからのELEMENT SQLを受け入れる:
Figure 2022521915000048
ELEMENTでサポートされるSQL概念
この仕様の残りにおける暗示は、ELEMENT実装が、以下を含む幾つかの一般的なSQLコンストラクトの均等物をサポートすることである:
カラム
データ型
識別子
ヌル値
ロー(ここではレコードとも呼ばれる)
スキーマ定義
SQLスキーマステートメント
SQLステートメント
テーブル
データ型
ELEMENにおけるデータ型-背景
ELEMENTシステムにおけるレコードには、特定のテーブルが関連付けられる。あらゆるセル値は、ELEMENTテーブルにおいて定義されるカラムによって決まるデータ型に属する。
ELEMENT SQLでは、予め定義されるデータ型の名前は予約キーワードである。データ型は既存のSQLタイプから生じるが、ELEMENTシステムは、先のSQL実装と異なるネイティブの精度及び範囲尺度で構成される。
全てのELEMENTの予め定義されるデータ型は、原子的な性質のものであり、すなわち、値が他のデータ型の値で構成されないデータ型である。
ELEMENTシステムは現在、3つの予め定義されるデータ型をサポートしている:
1.Number
ELEMENTシステムの'Number'データ型は、全ての演算数タイプをサポートする。これは、十進値の精度もサポートするNUMERIC型、INTEGER型、及びDECIMAL型等の馴染みのあるSQLデータ型の組合せである。
'NUMBER'はデータ型であるとともに、SQLクエリを消費している間、任意の数値を示すキーワードでもある。Numberの最大長又は精度は厳密に、十進数小数のスケール又は桁を含む16桁である。
範囲:
-9999999999999998~9999999999999998
以下の例を考慮して、Numberデータ型の許容可能な範囲を決める。
Figure 2022521915000049
2.String
ELEMENTシステムのStringデータ型は、全てのstring関連値をサポートする。これは、可変長文字列型の組合せであり、SQLにおけるTEXTデータ型に類似する。
stringデータ型は、全ての可変長文字列を許容する'STRING'キーワードにより示される。ELEMENTv1.0は固定長stringをサポートしない。STRINGデータ型のELEMENT実装定義範囲は、設定されたハードリミットを有さず、動作ハードウェア、接続、及び分散型台帳プラットフォーム構成等の種々の要因により定義される物理的限度がある。
ELEMENTクエリの入力STRING値はUTF-8エンコードである。CESU-8及び修正UTF-8のような代替の符号化は有効なUTF-8として扱われない。
3.Boolean
Booleanデータ型の値はtrue又はfalseである。
未知のtruth値は、ヌル値で表されることもある。
booleanカラムが、イネーブルされたヌル値を有する場合、ヌルは未知のtruth値を表す。
表記上の規定
このドキュメンテーションは、以下の表記及びシンタックス規定を含むバッカスナウア記法(Backus-Naur Form:BNF)の単純な変形のテキスト記述から成る:
Figure 2022521915000050
ELEMENTのSQLシンタックス用語集
標準SQLからのキーワード
ELEMENT1.0は、以下の標準キーワードを含むSQL言語のサブセットに、本明細書において後述する少数のELEMENT固有のキーワードを加えたものをサポートする:
Figure 2022521915000051
ヌルキーワード
ヌルは、キーワード及び値として使用される。
ヌルは、以下の点で他の値と異なる:
ヌル値は、レコードにデータ型'null'を使用することにより特定のフィールドが空白又は値がないことを示すのに使用される。キーワードとしてのヌルは、空のレコードをチェックする妥当性確認としてNOT演算子と共に使用されることがある。ヌルは、カラムのデフォルト値をヌルとして設定するのにも使用される。
ヌルの値はいかなる他の値にも'等しく'なく、同様に、いかなる他の値にも'等しくない'-ヌルが任意の他の所与の値に等しいか否かは未知である。いかなる有意なデータ値もないことは、ヌルとして表すことができる。
識別子
ELEMENTv1.0は、ローカル言語として英語のみをサポートし、国際化(i18n)のサポートは将来のリリースで利用可能になる。2つのタイプの識別子がELEMENTにおいて定義される:
database_name identifiers match this regular expression:
/^(?=.{1,50}$)([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)$/
識別子は、以下の正規表現に合致するstringである:
/^(?=.{1,50}$)([a-zA-Z0-9]+((-|_)[a-zA-Z0-9]+)*)$/
全ての識別子は最大長50文字を有する。
識別子は以下のコンテキストで使用される:
table_name ::= identifier
column_name ::= identifier
old_column_name ::= identifier
new_column_name ::= identifier
ELEMENTシステムは、デフォルトの名前を含む、キーワードを保有するように識別子を制限する。
データ型及び値
ELEMENTv1.0は3つの予め定義されるデータ型をサポートする:上述したString、Number、及びBoolean。
データ型::=[NUMBER|STRING|BOOLEAN]
value::=
<value>(選択されたデータ型に対応)-Elementセクションでのデータ型を参照
比較演算子
ELEMENT SQLにおける比較演算子は、名前が示唆するように、2つの値を比較できるようにする。等式、大なり、又は小なり等の関係式のstring又はnumberに等しい。
比較演算子のリスト:
Figure 2022521915000052
比較演算子::=
[<|>|<>|!=|>=|<=|=]
組合せ表現
ELEMENT SQLは、一般にWHERE節と併用される条件キーワードを使用して2つ以上の状況データ又は選択の評価をサポートする。論理は幾つかの比較演算子と一緒に、ELEMENTシステムにおける組合せ演算子を形成する。サポートされる組合せ演算子を以下に述べる。
ALL
ALL演算子は、値をサブクエリにより返された値のリスト又は1組の値と比較することによりデータをクエリする。
all_expression::=
column_name comparision_operator ALL({subquery|,,...})
ANY
ANY演算子は、値をサブクエリにより返された値のリスト又は1組の値と比較する。
any_expression::=
column_name comparision_operator ANY({subquery|,,...})
IN
IN演算子は、WHERE節内で使用されて、値が値のリスト中の任意の値と一致するか否かをチェックする。
in_expression::=
column_name IN ({subquery|,,...})
AND、OR、及びNOTキーワードは、ELEMENT SQLの論理演算子である。これらのキーワードは大方、SQLステートメント、特にWHERE節において条件を結合又は反転させるのに使用される。論理演算子のシンタックスは、他のSQLコマンドの組合せを用いて更に説明される。
パターンマッチング
ELEMENT SQLは、正規表現ベースのstringパターンマッチングをサポートする。パターンは、LIKE演算子を使用してテーブルカラムに存在するレコード値について照合される。LIKE演算子は、stringパターンを一致させる'等号'(=)演算子のように働く。LIKE演算子と併せて使用されることが多い2つのワイルドカードがある:
%-パーセント符号はゼロ、1、又は複数の文字を表す。
_-下線は一文字を表す。
備考:アスターリスク(*)及びクエスチョンマーク(?)もサポートされる。
like_clause::=
column_name LIKE''
pattern::=
{|}[|][|}...
wildcard::=
{%|_|$|*|?}
サブクエリ
サブクエリは、より大きなSQLクエリの内部に入れ子され、通常はWHERE節内に組み込まれるSQLクエリである。
サブクエリは、SELECT、INSERT、UPDATE、若しくはDELETEステートメント内又は別のサブクエリ内に入れ子することができる。通常、別のSQL SELECTステートメントのWHERE節内に追加される。>、<、又は=等の比較演算子は、IN、ANY、又はALL等の組合せ演算子と共にサブクエリと併用することができる。
サブクエリは内部クエリ又は内部セレクトとも呼ばれ、一方、サブクエリを含むステートメントは外部クエリ又は外部セレクトとも呼ばれる。
サブクエリのルール
-サブクエリは、メインクエリの実行前に実行される。
-サブクエリ結果は、メインクエリの入力として処理される。
-サブクエリは括弧で囲まれるが、 INSERTの場合、サブクエリは通常のSELECTステートメントとして扱われる。
-サブクエリは、比較演算子の右側に配置される。
-サブクエリは、対応する結果を内部で操作することができず、したがって、ORDER BY節はサブクエリに追加することができない。ORDER BY節は、最後の節になるメインSELECTステートメントで使用することができる。
-SQL演算子は、サブクエリによる影響を受けるローの数に基づいて使用されるべきである。
-サブクエリがヌル値をメインクエリに返す場合、メインクエリは、WHERE節において特定の組合せ演算子を使用している間、いかなるローも返さない。
-ELEMENT固有のキーワード及び拡張は、サブクエリで使用できないことがある。
サブクエリのタイプ
-シングル・ロー・サブクエリ:ゼロ又は1つのローを返す
-マルチ・ロー・サブクエリ:1若しくはそれ以上のローを返す
-マルチ・カラム・サブクエリ:1若しくはそれ以上のローを返す
-入れ子サブクエリ:サブクエリは別のサブクエリ内に配置される

サブクエリ::=
SELECT { * | | , , ... }
FROM
WHERE search_condition
[ LIMIT ]

search_condition ::=
search_clause [{ AND | OR } search_clause [ { AND | OR }
search_clause ] ... ]
search_clause::=
[ NOT ]{ comparison_clause | combination_clause | between_clause | like_clause }
comparison_clause ::=
comparision_operator { | NULL }
combination_clause ::=
{ all_expression | any_expression | in_expression }
between_clause ::=
{ ( [ NOT ] BETWEEN AND ) }
DDLコマンド
データ定義言語(DDL)は、データベースにおいてデータベースオブジェクトの構造を作成及び変更するのに使用されるコンピュータ言語である。ELEMENT SQLでサポートされるデータベースオブジェクトには、スキーマ、テーブル、及びインデックスがある。以下のDDL SQLステートメントは、記載されたシンタックスを使用してELEMENT実装によりサポートされる。
高レベル要件で述べたように、DDL SQLステートメントは、スマートコントラクトによる呼び出しについてサポートすることができる。
データベース作成
システムにおいて新しいデータベースを作成する
create_database_statement ::=
CREATE DATABASE database_name [ ; ]

database_name ::= Identifier
作成するデータベースの名前
テーブル作成
現在尾データベースに新しいテーブルを作成する。テーブルは複数のカラムを有することができ、各カラム定義は、名前、データ型、及び任意選択のカラム定義から成る。
create_table_statement ::=
CREATE TABLE table_name
( {column_definition}, ... )[ ; ]

column_definition ::=
column_name [ DEFAULT | NULL | NOT NULL | PRIMARY KEY ] [ ; ]

table_name ::= identifier
作成するテーブルの名前

column_name ::= identifier
カラムの名前
テーブル変更
既存のテーブルのプロパティ、カラム、又は制約を変更する。
備考:テーブル変更についてのELEMENT SQLグラマーは、一度に2つ以上の演算をサポートしない。このシンタックスでは、アクションキーワードは、ユーザが利用可能なテーブル変更クエリのELEMENTによりサポートされる全ての変形を示す。
alter_table_statement ::=
ALTER TABLE table_name { action }

action ::=
{
ADD column_name [DEFAULT] |
DROP column_name |
ALTER column_name TYPE (Only applicable when table has no records) |
RENAME COLUMN old_column_name TO new_column_name
} [ ; ]

table_name ::= identifier
変更するテーブルの名前

column_name ::= identifier
変更するカラムの名前

old_column_name ::= identifier
名前変更するカラムの名前

new_column_name ::= identifier
変更後のカラムの新しい名前
テーブルドロップ
現在のデータベースからテーブルを除去する。
drop_table_statement ::=
DROP TABLE table_name [ ; ]

table_name ::= identifier
除去されるテーブルの名前
データベースドロップ
ELEMENTシステムからデータベースを除去する。
*備考:データベース上のデータはクリアされるが、データベースはネットワークから物理的に削除されない。データベース名は、データベースドロップ演算を使用した後であっても、一意であり、再使用することはできない。
drop_database_statement ::=
DROP DATABASE database_name [ ; ]

database_name ::= identifier
クリアするデータベースの名前
テーブル表示
ユーザがアクセス特権を有するテーブルを列挙する。コマンドは、現在/指定されたデータベースのテーブルを列挙するのに使用される。
出力は、テーブル名により辞書順に並べられたデータベースのリストを返す。
show_tables_statement ::=
SHOW TABLES [ ; ]
データベース表示
分散型台帳プラットフォームで可視であるドロップされたデータベースを含め、ユーザがアカウント全体にわたりアクセス特権を有するデータベースを列挙する。
出力は、データベース名により辞書順に並べられたデータベースのリストを返す。
show_databases_statement ::=
SHOW DATABASES [ ; ]
テーブル記述
テーブル中のカラム又は現在の値の何れか一方を記述する。クエリ記述は、選択されたテーブルの全ての詳細及びメタデータを返す。
describe_table_statement ::=
DESC [ RIBE ] [ TABLE ] table_name [ ; ]

table_name ::= identifier
記述が消されるテーブルの名前
DML(書き込み)コマンド
データ管理言語(DML)は、データベースにおいてデータを追加(挿入)、削除、及び変更(更新)するのに使用されるコンピュータプログラミング言語である。DMLは多くの場合、SQL等のより広いデータベース言語のサブ言語であり、DMLは、ここでの場合のように、言語に演算子の幾つかを含む。以下は、データの現在状態を変更することができ、ELEMENT実現によりサポートされるDML SQL書き込みコマンドである。
レコード挿入
1若しくはそれ以上のローをテーブルに挿入することによりテーブルを更新する。テーブルの各カラムに挿入された値は明示的に指定することができる。

insert_statement ::=
INSERT INTO table_name [ column_name, column_name, ... ]
[ select_statement | subquery ]
VALUES { DEFAULT | NULL | , , ... }
[OPSTAT][ ; ]

table_name ::= identifier
データが追加されるテーブルの名前

column_name ::= identifier
データが追加されるカラムの名前
備考:INSERTの値は必須であり、少なくとも1つのフィールド(プライマリ・キー・フィールド)は確定値を有する。残りの値は、記入されないままである場合、ELEMENTシステムによりヌルとして見なされる。
レコード削除
データをテーブルから除去する。特定のデータはWHERE節を使用して除去される。
delete_statement ::=
DELETE FROM table_name
WHERE search_condition
[ LIMIT | OPSTAT ] [ ; ]

table_name ::= identifier
レコードが除去されるテーブルの名前
レコード更新
標的テーブル中の指定されたローを新しい値で更新する。
update_statement ::=
UPDATE table_name
SET assignment
[ WHERE search_condition] [ ; ]
[ LIMIT | OPSTAT ] [ ; ]

assignment ::=
{ ( column_name = | NULL ,
[ column_name = | NULL ], ... ) }
table_name ::= identifier
変更されるテーブルの名前

column_name ::= identifier
特定のデータの比較又はサーチに使用されるカラムの名前
DML(読み出し)コマンド
データの読み取りのみの選択は時に、別個のデータクエリ言語(DQL)の一環として区別されることがあるが、密に関連しており、DMLのコンポーネントと見なされることもある。以下のQL DML読み出しコマンドは、ELEMENT実装によりサポートされており、シンタックスについては説明した。
SELECT

select_statement ::=
SELECT [ * | column_name | column_name , column_name ... ]
FROM table_name
WHERE search_condition
[ ORDER BY column_name ASC | DSC ]
[ LIMIT ]
[ QUERYLEVEL {INFO | SYSTEM }] | [ BOOKMARK ][ ; ]

table_name ::= identifier
データが読み出されるテーブルの名前

column_name ::= identifier
データが取り出されるカラム又は結果を並べるのに使用されるカラムの名前
備考:ORDER BY演算は索引付きカラムに対してのみ行うことができる。
SQLへのElement拡張
ELEMENT1.0実現は、標準SQLへの拡張として以下のキーワードもサポートする。
1.OPSTAT
OPSTATは、演算が台帳に組み込まれたことの指示を追跡するリクエストである。
OPSTATが、コンソール又はSDKから呼び出されたSQL DML書き込みクエリの末尾に追加される場合、呼び出し側は、予め構成された時間切れまでに3つのレスポンスのそれぞれ1つを受け取ることになる。3つの可能なレスポンスは以下である:

I.成功:成功レスポンスは、SQL演算の更新が成功し、データがプラットフォームに適切な程度まで分散型台帳に組み込まれたことを意味する。
II.失敗:失敗ステータスは、SQLコマンドが実行に成功せず、データが台帳で決して更新されなかったことを表す。
III.時間切れ:SQLコマンドが予め定義された時間切れ期間を過ぎた場合、ユーザには時間切れレスポンスが返される。その時点で、クエリ結果が台帳に組み込まれたことの確認はない。
OPSTATはまた、クエリに追加されるか否かに関係なく、全てのDDL演算で仮定される。スマートコントラクトから直接実行されるクエリの場合、OPSTATは、含まれる場合、無視され、正規クエリレスポンスが代わりに返される。これは、ELEMENT演算がより大きなトランザクション(スマートコントラクトの呼び出し)内の1ステップであり、そのため、演算の成功又は失敗が、スマート・コントラクト・トランザクション全体の実行成功の一環としてを除き、定義されないためである。
OPSTATのシンタックスルール:
OPSTATは、有効クエリの末尾で使用され、これは、演算又は節がOPSTATキーワード後に出現しないことを意味する。
OPSTATキーワードは、SELECT、UPDATE、INSERT、及びDELETE演算とのみ併用される。
例:
INSERT INTO sample_table[(`ABC`,`DEF`,123,false)] OPSTAT

DELETE FROM Task WHERE status = `Rejected LIMIT 50 OPSTAT
2.LIMIT
LIMITキーワードは、幾つかのELEMENT仕様ルールと併せて、従来のSQL LIMIT演算と同様である。限度は、クエリにより返されるローの最大数を制約する。
LIMITのシンタックスルール:
LIMITは、SELECT、UPDATE、及びDELETE演算と併用される。
LIMITは、更新及び削除クエリの場合、OPSTATキーワードの前に使用される。
選択クエリの場合、LIMITは、ブックマーク又はクエリレベルキーワードの前に使用される。
例:
SELECT contact_id, last_name, first_name FROM contacts WHERE city = `Vienna` ORDER BY last_name ASC LIMIT 400 QUERYLEVEL SYSTEM BOOKMARK tldg213sd45sa7fd

DELETE FROM Task WHERE status = `Rejected` LIMIT 50 OPSTAT
3.クエリレベル
クエリレベル特徴は、選択されたレコードについてのメタデータ情報を提供する。ユーザは、選択クエリを用いてクエリレベルコマンドを実行した後、クエリレスポンスにおいて情報を受け取る。
この機能には2つの情報レベルがある:
1.INFO:これは、ELEMENTにより設定されるデフォルト情報レベルである。このレベルでは、ユーザにはカラム名及びそれらの各値が提供される。
2.SYSTEM:SYS又はシステムクエリレベルは、選択されたレコードについての詳細情報を提供する。詳細なメタデータは以下等のフィールドを含む:
a.作成日
b.最後の変更日
c.作成者
d.一意のid:レコードid、テーブルid
e.バージョン詳細
クエリレベルのシンタックスルール:
-クエリレベルは、読み出し演算で使用され、すなわち、選択クエリとのみ使用される。
-限度キーワードの前で使用され、クエリの末尾に位置決めされる。
-クエリレベルの一はブックマークキーワードと相互交換することができる。
例:
SELECT * FROM data WHERE city = `LA` LIMIT 70 BOOKMARK nw1e83ge6ds43uia QUERYLEVEL INFO

SELECT id FROM data WHERE city = `Newark` QUERYLEVEL SYSTEM BOOKMARK erttnkel63ze9fs02vfe
4.ブックマーク
ブックマーククエリは、ELEMENTテーブルデータのページネーションに使用される。テーブルのページサイズは、ブックマークと共に限度キーワードを使用して設定される。デフォルトにより、全てのページは、ユーザがブックマーククエリを使用することによりアクセスすることができる指定された一意のマーカを有する。クエリは、ブックマーク及びクエリレスポンスを含むオブジェクトを返す。得られたブックマークを使用して、ユーザは続くページ上のデータを閲覧/アクセスすることができる。
ブックマークのシンタックスルール:
-ブックマークキーワードは、選択クエリとのみ使用される。
-ブックマークはクエリの末尾で使用され、したがって、限度キーワードの後で使用される。
-ブックマークの位置は、クエリレベルキーワードと相互交換することができる。
例:
SELECT * FROM data WHERE id = `j3` LIMIT 70 BOOKMARK nw1e83ge6ds43uia

SELECT * FROM data WHERE city = `LA` LIMIT 70 BOOKMARK nw1e83ge6ds43uia QUERYLEVEL INFO
Figure 2022521915000053
ブックマークを用いたクエリレスポンス
5.レコードのバルク挿入
ELEMENTは、バルク挿入特徴を使用してELEMENTへのレコードの複数
バルク挿入演算は、複数のローが影響受ける/変更される削除及び更新クエリと非常によく似たように機能する。したがって、これらの演算での続くクエリレスポンスにおける`影響を受けるローの数'(ELEMENT API使用-付録Dにおけるより詳細)フィールドは任意の数'n'であることができる。
これとは対照的に、挿入コマンドは1つのローのみに対処し、したがって、挿入クエリレスポンスにおける'影響を受けるローの数'値は1に固定される。
例:
BULK INSERT INTO EventLogs
[(799021, "saf89efuew099j", 78123.912341, "MINED", null), (235235, "wqknt32il23knafs", 43534.43523, "PENDING", true), (764654, "podn4bfjs24o45sa", null, "MINED", true),
(235354, "sdglmd49wtw32r3wq", 3554.34654, "MINED", false), (533246, "235oijasfsnsafioi", 457.47334, "FAILED", false)]
Figure 2022521915000054
バルク挿入でのクエリレスポンス
付録F
ELEMENT Node.js(登録商標)SDK関数ドキュメンテーション
序文
Elementの言語固有SDKは、開発者がアプリケーションコードから直接ELEMENT(商標)システムと対話できるようにするツールである。このドキュメントは、Node.js(登録商標)アプリケーションと併用されるのに開発されたSDKのバージョンを詳述する。
Node.js(登録商標)SDK(「ELEMENT_SDK」と呼ばれる)は、非常に単純であり、特定のユーザ及びELEMENTデータベースでの使用に向けて構成するコンストラクタと、SQLステートメントパラメータを受け入れる関数とを含む。データベース演算自体は、SQLパラメータのシンタックスを使用して呼び出される。詳細については付録E.を参照のこと。
Element_Chaincodeでの再使用
ファブリック実現では、Node.js(登録商標)はまた、分散型台帳プラットフォームを拡張するために許容される言語でもある(「システムチェーンコード」を介して)。このため、ファブリックプラットフォームでデプロイされるElement_ChaincodeにおいてNode.js(登録商標)ELEMENT_SDKへの作業を再使用する機会があった。その結果、ELEMENT_SDKは2つの類似するパッケージになった。第1のパッケージは、ELEMENT仕様に図示されるようにSDKとして使用される。パッケージの第2のバージョンは、ELEMENT特徴をファブリック・ピア・ノードに追加するElement_Chaincodeコンポーネントの一環としてデプロイされる。これは、executeQuery()関数を「ユーザチェーンコード」スマートコントラクトに提供し、ELEMENT仕様により求められるようなSQLの使用を可能にする。
Figure 2022521915000055
Figure 2022521915000056
Figure 2022521915000057
付録G
ファブリック・サービス・レイヤ・インターフェース仕様
序文
ファブリックサービスは、ELEMENT1.0仕様においてプラットフォーム固有のサービスレイヤ抽象コンポーネントを実現し、APIレイヤと分散型台帳プラットフォームとの間の対話の仲介者として働くサービス・レイヤ・インターフェースを実装する。そのサービスは、RDBMS関連演算の実行に役立つ。
この付録はファブリックサービスについて詳述し、その関数シグネチャ(バルク更新等の少数のファブリック固有関数を除く)は、サービス・レイヤ・インターフェースの仕様として解釈することができる。
前提条件
Element(商標)コンソールを用いてファブリックサービスをデプロイするには、以下の前提条件が要求される:
Node8.xがインストールされるべきである。
ファブリックセットアップが適宜構成されるべきである。
サービス及びメソッド
Figure 2022521915000058
Figure 2022521915000059
Figure 2022521915000060
Figure 2022521915000061
Figure 2022521915000062
Figure 2022521915000063
Figure 2022521915000064
Figure 2022521915000065
Figure 2022521915000066
Figure 2022521915000067
ファブリックサービス
これらのサービスは、ファブリック分散型台帳プラットフォーム固有のサービスである。以下はサービス及びサービスのメソッドである。
Figure 2022521915000068
Figure 2022521915000069
Figure 2022521915000070
Figure 2022521915000071
付録H
ELEMENT(商標)パーサ:序文
Elementパーサは、以下の方法でクエリ文字列に対処するELEMENT(商標)のコンポーネントである:
・有効シンタックスについてクエリをチェックする
・パーズされた抽象シンタックスツリーを返す
・クエリが無効である場合、エラーを返す
・データベースID、テーブルID、及びカラム名等の識別子が、Element SQL仕様で言及される指定されたシンタックスに従っているか否かをチェックする
・ELEMENT SQL(商標)として既知のElement固有キーワードと組み合わせて種々の既存のSQLキーワードに対処
パーサは、実際のPostgreSQLサーバソースを使用してSQLクエリをパーズし、内部PostgreSQLパーズツリーを返す'pg-parser-native'の上に実装される。
パーサは、SQLクエリをパーズして、ELEMENTによりネイティブ分散型台帳データとしてコミットすることができるオブジェクトにすることによりリレーショナルデータに対処する好都合な方法を提供する。SQLをパーズするELEMENTの能力により、開発者は、既に一般に理解されているシンタックスを仕様して分散型台帳においてリレーショナルデータを操作することができる。
ELEMENT(商標)パーサ:高レベル要件
ELEMENTファブリック実現においてパーサの首尾よい消費を保証するには、以下の要件を満たす必要がある:
・Elementシステムチェーンコードがアップされ、実行中であるべきである。
・Elementコンソールをデプロイする必要がある。
・パーサはElementコンソールにNode.js(登録商標)モジュールとしてインストールされるべきである。
・システムチェーンコードがインストールされる全てのファブリックピアに存在すべきでもある。これは、システムチェーンコードがパーサにローカルにアクセスすることが可能なことを保証する。
パーサ機能の分離
実装されるELEMENTパーサは1つの統合されたコンポーネントである。しかしながら、パーサ機能は、履行中のELEMENT仕様の部分に基づいて2つの部分に分割される。具体的には、DDL及びDMLコンポーネント。
ユーザクエリ/入力のDDLパーズは、DDLパーサが構成要素であるELEMENTコンソール内で実行される。コンソールは、DDLパーサの助けにより、全てのデータベース構造変更リクエストを管理する。DDL関数をファブリックネットワーク自体内全体で利用可能することは、相当な変更なしでは可能ではなく、したがって、これらの関数はファブリックノードJS実現ではアクセス可能ではない。
入力クエリのDMLパーズは、ELEMENT特徴が追加された分散型台帳プラットフォーム内で要求される。このノードJS/ファブリック実現のために、DMLパーサはELEMENTシステムチェーンコードから機能し、したがって、しマートコントラクト(ユーザチェーンコード)にアクセス可能である。
入力タイプ
Elementパーサは、文字列フォーマットのクエリ入力をとり、「parseQuery」と呼ばれるパーサに存在する関数を使用して呼び出される。クエリはPostgres SQLのクエリ仕様に従う。仕様は、ELEMENT(商標)1.0ELEMENT SQL(商標)ドキュメントに詳細に見出すことができる。クエリは、追加されたElement固有キーワードを有し、データのよりよいハンドリングを提供する。
ELEMENT(商標)パーサの組成
パーサは、ユーザ・アクセス・レベルと同じラインに沿って分類される4つの関数カテゴリから成る。以下の表はこれらの関数をまとめたものである:
Figure 2022521915000072
Figure 2022521915000073
Figure 2022521915000074
Figure 2022521915000075
Figure 2022521915000076
Figure 2022521915000077
Figure 2022521915000078
Figure 2022521915000079
ELEMENT(商標)システムチェーンコードでのパーズ
Element(商標)システムチェーンコードでのパーズは以下のステップを含む:
1.パーサはシステムチェーンコードに存在する'クエリ実行'関数により消費される。システムチェーンコード。関数がDMLクエリを用いて呼び出された後、パーサはクエリをパーズしてASTオブジェクトにする。
2.オブジェクトは、Element(商標)DML演算のビジネスルールに従って妥当性確認される。無効オブジェクトはエラーに繋がる。
3.次に、妥当性確認されたASTオブジェクトは、クエリが意図される演算に基づいてElement(商標)システムチェーンコードに存在する関数に固有のキーを含むオブジェクトに変換される。
4.これにより、Element(商標)システムチェーンコードは、入力データを更に処理し、全てのDML演算に対処できるようになる。
ELEMENT(商標)コンソールでのパーズ
Element(商標)コンソールでのパーズは以下のプロセスに従う:
1.Element(商標)コンソールに存在する'クエリ実行'関数は、呼び出された場合、パーサを利用して入力クエリをパーズする。
2.パーサがElement(商標)DDL及びDML演算のビジネスルールに従って妥当性確認すると、コンソール自体に存在する関数に固有のキーを含むオブジェクトをコンソールに返す。
3.次に、コンソールはクエリ関数に基づいてクエリを処理する。DDLの場合、コンソールの関数が呼び出され、DMLの場合、システムチェーンコードが呼び出される。
エラーへの対処
パーサは、それ自体の目的で入力クエリを妥当性確認することにより、不必要なELEMENT(商標)関数呼び出しを回避する。ELEMENT(商標)のビジネスルールを守らないデータはエラーを生じさせる。エラーは、エラーメッセージと、妥当性確認されたルールに関連するエラーコードとを含む。これは、クエリのデバッグの容易さを提供するとともに、システムがエラーに対処する方法も同様にクライアントに提供する。
Elementパーサにおけるエラー:
Figure 2022521915000080
Figure 2022521915000081
Figure 2022521915000082
リファレンス
[1] https://www.npmjs.com/package/pg-query-native
[2] https://github.com/lfittl/libpg_query
付録I
序文
エレメントチェーンコードは、ファブリックに対して全てのデータベース関連演算を実行するためのELEMENT(商標)の基本コンポーネントである。クエリの形態のユーザ入力は、エレメントチェーンコードを使用して分散型台帳で処理される。エレメントチェーンコードは、特定の機能を達成するために、アイデンティティプロバイダ及びワールド・ステート・データベースに依存する。
エレメントチェーンコードは、システムチェーンコードとしてデプロイされ、ピアプロセスの一環として実行される。ユーザチェーンコードと異なり、システムチェーンコードは、SDK又はCLIからの提案を使用してインストール及びインスタンス化されず、むしろ、スタートアップ時にピアにより登録されデプロイされる。この機能は、デフォルトによってイネーブルされず、その代わり、ピアが別個に構築されることがリクエストされる。
システムチェーンコードは、Goプラグインを使用してピアに静的又は動的にリンクすることができる。しかしながら、よりよい手法は、システムチェーンコードをプラグインとしてロードして、変更がシステムチェーンコードに対して行われるときは常に、再構築が必要になるといった状況を回避することである。プラグインのロードを可能にするためには、ピアを1回だけ構築するだけでよい。
チェーンコードへのあらゆる演算はトランザクションとして処理され、一方、幾つかの演算は1組のトランザクションとして処理される必要がある。.チェーンコードは、1つのトランザクションとして演算を処理し、バッチで処理される場合、ロールバックのメカニズムを使用してトランザクションをシミュレートする。
チェーンコードへのあらゆる演算は同様のフローを辿り、一方、その実装は異なることができる。初期ステップとして、一般チェックが入力に対して実行され、任意の不一致がある場合、リクエストは返され、その影響は台帳に示されない。次に、呼び出しエンティティが、その演算を処理するのに適切なアクセスを有する(アイデンティティプロバイダにより対処される)場合のみ、リクエストは転送される。
各呼び出しエンティティへのアクセスは、その証明書を使用してチェックされる。登録時、そのデータベースに関する適切な属性が証明書に追加される。続く各リクエスト時、チェックが実行される。エンティティがその演算へのアクセス特権を有する場合のみ、該当リクエストは処理され、エンティティにその演算を実行する許可が認められる。
大まかに、チェーンコードへの演算はデータ定義言語(Data Definition Language:DDL)及びデータ操作言語(Data Manipulation Language:DML)として分類することができる。DDL演算はチェーンコードでパーズされないため、チェーンコードは別のチェーンコードを介してDDL演算アクセスを制限する。したがって、あらゆるリクエストの開始時、ELEMENTシステムは、トランザクション提案を使用して、チェーンコードに対して直接呼び出しが行われるか否かをチェックする。トランザクションが別のソースからのものである場合、任意のチェーンコード演算(DDL)へのアクセスは阻止される。
DML演算では、クエリは入力として直接送ることができる。次に、あらゆるクエリはパーサに送られ、対応する演算はパーサからの応答に基づいて呼び出される。チェーンコードの各態様の実装についての更なる詳細情報は以下のセクションで与えられる。
前提条件
以下の前提条件が、エレメントチェーンコードの登録及びデプロイに必須である:
ファブリックネットワークが実行中であるべきである。
ピアは、「pluginsenabled」という名前のビルドタグを使用して構築される必要がある。
デプロイ
ユーザチェーンコードと異なり、システムチェーンコードは、SDK又はCLIの提案を使用してインストール及びインスタンス化されない。システムチェーンコードは、スタートアップ時にピアにより登録されデプロイされる。この機能は、デフォルトによりイネーブルされず、代わりに、ピアが「pluginsenabled」という名前のビルドタグを使用して構築されることがリクエストされる。
システムチェーンコードは、2つの方法でピアにリンクすることができる。
静的に-静的の場合、チェーンコードをピアプロセスの一環として構築するために、手法は、チェーンコードに`SelfDescribingSysCC`インターフェース[1]を実装させ、そのインスタンスをピア・スタートアップ・ファイルに登録する[2]。それに続き、ピアは、この変更されたコードを使用して構築される必要がある。
動的に-システムチェーンコードをプラグインとしてロードするほうがよい。この方法では、変更がチェーンコードに対して行われる津度、ピアを再構築する必要がない。プラグインをイネーブルするために、ピアは1回構築されるだけでよい。
デプロイステップ-
システムチェーンコードをgoに書き込む
-buildmode=pluginビルドフラグを使用してこのgoプラグインをコンパイルして、共有オブジェクト(.so)ライブラリファイルを生成する。
go build-buildmode=plugin-o.so.go
ピアを構築して、GOをロードできるようにする:
DOCKER_DYNAMIC_LINK=true GO_TAGS+="pluginsenabled"はピアドッカーを作成する
備考-goプラグインをファブリックバージョンのgoバージョンと同じgoバージョンに構築することを想起する。
形成されたドッカーイメージを使用してネットワークを開始する。
プラグインファイル及び.soファイルをドッカーピアにコピーする。
システムチェーンコード及びその情報をピアの構成ファイル(core.yaml)に追加する。
ピアを再起動する。
REFERENCES
https://github.com/hyperledger/fabric/blob/release-1.3/core/scc/sysccapi.go#L78
https://github.com/hyperledger/fabric/blob/release-1.3/peer/node/start.go#L549
メソッド
Init()
Initは、チェーンコード登録中に呼び出される。このメソッドは、configをロードし、他の全てのメソッドで使用されるグローバル変数を初期化するのに使用される。
New()
このメソッドは、チェーンコードインターフェースの実装を返すため、動的にリンクされたあらゆるチェーンコードに存在しなければならない。チェーンコードインターフェースは、全てのメソッドをカプセル化し、ピアプロセスの一環として実行されるようにそれらを転送する。
Invoke()
このメソッドは、チェーンコードにおいてトランザクションを実行するのに使用される。これは、チェーンコードのAPIとファブリックピアとの間の交信ポイントとして働く。呼び出しエンティティはinvokeメソッドを呼び出して、チェーンコードの任意の他のメソッドを処理する。呼び出しエンティティが適切なアクセスを有し、入力が文字列化JSONとして正しく形成されているか否かをチェックした後。リクエストは、invokeが呼び出すことが意図される対応するメソッドに中継される。
CreateDatabase()
このメソッドは、データベース作成開始時に呼び出される。リクエストは、その特定のデータベースに適切なメタデータを生成することにより処理される。このメタデータは、チェーンコードの他の全てのメソッドにより消費される。
DropDatabaseMeta()
このメソッドは、ユーザのバッチ演算として処理されるデータベースの削除を開始するのに呼び出される。このメソッドは、プロセスの開始をマークし、そのデータベースに存在する全てのテーブルのリストを返す。これに続き、テーブルのメタデータ及び全てのそのレコードを削除する特定の呼び出しが行われる。
DropDatabaseCommit()
このメソッドは、バッチ中の全てのリクエストの処理に成功した後、データベース削除の仕上げの呼び出しとして働く。
RegisterUser()
このメソッドは、新しいユーザをデータベースに追加するのに使用され、属性の証明書への追加に続く。
管理者特権を有するユーザのみが他のユーザを追加することができ、したがって、呼び出しエンティティの適切なアクセスをチェックした後、リクエストにおいて与えられたユーザアイデンティティはデータベースメタデータに追加される。
DeleteUser()
このメソッドはデータベースからユーザを削除するのに使用され、証明書からの属性の除去に続く。
管理者特権を有するユーザのみが他のユーザを削除することができ、したがって、呼び出しエンティティの適切なアクセスをチェックした後。リクエストにおいて与えられるユーザはデータベースメタデータから削除される。
CreateTable()
このメソッドは、新しいテーブルを作成し、既存のデータベースに追加するのに使用される。まず、チェックが実行されて、現在のデータベースがアイドル状態ではないことを確認する。それに続き、ELEMENTシステムは、テーブルがデータベースに既に存在するか否かをチェックする。これらの確認と共に、入力データが一貫している場合、テーブルメタデータが形成され、台帳に追加される。テーブル情報もデータベースメタデータに追加される。テーブルメタデータは、そのテーブルで実行された全ての演算の確認に使用される。
DropTableMeta()
このメソッドは、ユーザのバッチ演算として処理されるテーブルの削除を開始するのに呼び出される。このメソッドは、プロセスの開始をマークし、そのテーブルへの他の演算を制限するようにDDLフラグを設定する。
DropTableRecords()
このメソッドは、そのテーブルのレコードを削除するのに使用される。これは、指定されたテーブルレコードに対して削除演算を再帰的に実行する。削除はレコードのバッチに対して実行され、一方、バッチのサイズは構成可能である。これは、トランザクションの時間限度を超えるのを避けるために行われる。
DropTableCommit()
このメソッドは、バッチ中の全てのリクエストの処理に成功した後、テーブル削除の仕上げの呼び出しとして働く。呼び出しエンティティからのコールは、このプロセスの完了を示すために行われる。全ての中間トランザクションIDは、ユーザに1つのトランザクションIDを返すことができるように台帳に格納される。それに続き、そのテーブルのメタデータは削除され、テーブル名は、将来の演算での新しいテーブルの作成に再使用することができる。
AlterTableMeta()
このメソッドは、テーブルの構造の変更を開始するのに呼び出される。これはバッチ演算として処理される。このメソッドは、プロセスの開始をマークし、そのテーブルへの他の演算を制限するようにDDLフラグを設定する。リクエストにおいて与えられる入力を使用して、Elementシステムは、そのテーブルの全てのレコードの更新に使用されることになる更新テンプレートを形成する。その更新テンプレートは応答において返される。
AlterTableRecords()
このメソッドは、そのテーブルのレコードを変更するのに使用される。これは、テーブルに存在する全てのレコードを変更する。Alterはレコードのバッチに対して実行され、一方、バッチのサイズは構成可能である。これは、トランザクションの時間限度を超えるのを避けるために行われる。
AlterTableCommit()
このメソッドは、バッチ中の全てのリクエストの処理に成功した後、テーブル変更の仕上げの呼び出しとして働く。呼び出しエンティティからのコールは、このプロセスの完了を示すために行われる。全ての中間トランザクションIDは、ユーザに1つのトランザクションIDを返すことができるように台帳に格納される。それに続き、そのテーブルについてのリクエストを再び行うことができる。
InsertRecord()
このメソッドは、レコードをテーブルに追加するのに使用される。テーブルに追加されるあらゆるレコードは、そのテーブルを作成したときに設定されたルールに準拠しなければならない。したがって、各リクエスト時、まず、テーブルメタデータ中の制約に基づいてカラム値を追加することができるか否かがチェックされる。このメソッドには、呼び出しエンティティがカラムを渡す変形及びカラム名が省かれる変形という2つの変形がある。両変形の処理は同様であり、カラム名が省かれる場合のみ、カラム名がテーブルメタデータから取り出される。レコードが全てのチェック及び確認に合格した場合、レコードは台帳に追加され、プライマリキー値はレコードIDとして設定される。
UpdateRecord()
このメソッドは、テーブルの既存のカラムの値を更新するのに使用される。レコードに対して行われたあらゆる更新はなお、テーブルメタデータにおいて設定された制約に準拠しなければならない。したがって、各リクエスト時、前のレコードデータが台帳から取り出され、意図される変更がレコードに対して行われる。レコードが全てのチェック及び妥当性確認に合格した場合、レコードIDは変わらないままで台帳において更新される。
備考-レコードを更新している間、プライマリキー値を更新することはできない。
DeleteRecord()
このメソッドは、テーブルから先に存在していたレコードを削除するのに使用される。レコードが存在し、テーブルがいかなるDDLプロセス下でもない場合、レコードは台帳から削除される。その効果は、トランザクションがコミットされるとすぐに見られる。
CreateIndex()
このメソッドは、呼び出しエンティティが、インデックスを既存のカラムに追加したい場合、使用される。まず、リクエストが、索引付けを所与のカラムに対して実行することができるか否かについてチェックされる。それに続き、インデックスは状態データベースに追加される必要がある。この機能はファブリックには元々は存在せず、したがって、状態データベースにおいて、所与のカラムのインデックスを追加する別個のリクエストが行われる必要がある。
DeleteIndex()
このメソッドは、呼び出しエンティティが既存のカラムにおけるインデックスを削除したい場合、使用される。まず、リクエストが、索引付けを所与のカラムに対して実行することができるか否かについてチェックされる。それに続き、前に作成されたインデックスは状態データベースから削除される。
SelectQueryWithPagination()
このメソッドは、状態データベースで所与のクエリを実行するのに使用される。結果は、意図されるクエリレベルに基づいて呼び出しエンティティに返される。このメソッドは読み出し演算のみを実行し、したがって、台帳に影響しない。呼び出しエンティティが限度を指定しない場合、デフォルト限度が採用されて、トランザクションが時間を超えて実行されるのを回避する。
BulkInsertRecord()
このメソッドは、挿入演算をバッチに対して実行するのに使用される。挿入演算は全てのレコードに対して実行され、それらの何れか1つが失敗する場合、台帳に影響することなくバッチは返される。挿入された全てのレコードは、カラム値がテーブルメタデータにおいて設定された制約を満たす場合のみ、追加されるべきである。
BulkUpdateRecord()
このメソッドは、更新演算をバッチで実行するのに使用される。更新演算は、クエリを状態データベースに対して実行した後で取得されるバッチ中の全てのレコードに対して実行される。それらの何れか1つが失敗する場合、台帳に影響することなくバッチは返される。更新された全てのレコードは、テーブルメタデータにおいて設定される制約に準拠すべきである。
BulkDeleteRecord()
このメソッドは、削除演算をバッチで実行するのに使用される。再帰的に、削除演算は、クエリを状態データベースに対して実行した後で取得されるバッチ中の全てのレコードに対して実行される。それらの何れか1つが失敗する場合、台帳に影響はない。
RollbackTransaction()
幾つかの演算は、呼び出しエンティティには1つのトランザクションとして見える1組のトランザクションとして処理される必要がある。それらの何れか1つが処理されない場合、先の全てのトランザクションは元に戻る必要がある。したがって、各メソッドにおいて、ロールバックのメタデータがキュレートされ、このメソッドは、所与のトランザクションIDを有する先のあらゆるトランザクションを元に戻すのに使用される。
DeleteTransactionMeta()
幾つかの演算は、呼び出しエンティティには1つのトランザクションとして見える1組のトランザクションとして処理される必要がある。それらの何れか1つが処理されない場合、先の全てのトランザクションは元に戻る必要がある。したがって、各メソッドにおいて、ロールバックのメタデータがキュレートされる。全てのトランザクションの処理に成功した場合、このメソッドは、所与のトランザクションIDについてのメタデータを削除するのに使用される。
ExecuteQuery()
このメソッドは、チェーンコードでDMLクエリを実行するのに使用される。リクエスト中のクエリはパーサに送られ、パーサからの出力は、対応するメソッドの処理に使用される。そのメソッドへの呼び出しエンティティのアクセスをチェックした後。リクエストは適切なメソッドに中継される。
ShowDatabases()
このメソッドは、任意の呼び出しエンティティがアクセスすることができる全てのデータベースを列挙するのに使用される。全てのデータベースは、呼び出しエンティティの証明書において言及され、したがって、呼び出しエンティティの証明書を使用して、全てのデータベースの名前をフェッチして返す。
ShowTables()
このメソッドは、データベース中の全てのテーブルを列挙するのに使用される。全てのテーブルはデータベースメタデータにおいて言及され、したがって、データベースメタデータをフェッチし、全てのテーブルのリストを返す。
DescTable()
このメソッドは、テーブル作成時、全ての制約を取得するのに使用される。テーブルメタデータは、全てのカラムの制約を含む。したがって、リクエストが作成される場合、テーブルメタデータは、内部情報を削除した後、返される。
一方、分散型台帳技術(DLT)は、今世紀の情報技術革命に相当するものに火をつけ、可能にする可能性を秘めている。分散型台帳技術は、インターネットの最大かつ最も厄介な課題の1つである信頼の欠如に取り組み、解決している。分散型台帳技術は、初期のしかし強力な分散コンピューティングパラダイムであり、実用的な目的でデータを変更不可能にすることでインターネットに信頼をもたらす可能性がある、これまでで唯一のテクノロジーである。残念ながら、既存のRDBMSプラットフォームとツールは、分散型台帳技術の制約と互換性がない。その結果、データがプログラムに密接にリンクされているプログラム/データの固定化は、1960年代のリレーショナルデータベース以前のプログラムよりも、分散型台帳のスマートコントラクトの方がさらに大きくなる。分散型台帳のデータが、開発者の特定の意図である場合にのみ、展開されたスマートコントラクトの詳細に固定されるシステムと方法が望まれる。
この出願の発明に関連する先行技術文献情報としては、以下のものがある(国際出願日以降国際段階で引用された文献及び他国に国内移行した際に引用された文献を含む)。
(先行技術文献)
(特許文献)
(特許文献1) 米国特許出願公開第20l9/0238525号明細書
(特許文献2) 米国特許出願公開第20l9/0179939号明細書
(特許文献3) 米国特許出願公開第20l9/0158594号明細書
(特許文献4) 米国特許出願公開第20l9/0236081号明細書

Claims (43)

  1. リレーショナルデータベース管理クエリを使用して、トランザクションデータを含む分散型台帳を実装する分散型台帳プラットフォームをクエリする方法であって、
    前記分散型台帳プラットフォームの少なくとも1つのプロセッサにより、前記分散型台帳にデータベースを作成し、前記分散型台帳に前記データベースに関する情報を記録する工程と、
    前記少なくとも1つのプロセッサにより、受信したリレーショナルデータベース管理クエリを、前記分散型台帳のデータベースで処理可能なクエリ操作に変換する工程と、
    前記少なくとも1つのプロセッサにより、クエリ結果を生成するために、前記分散型台帳のデータベースに対して前記クエリ操作を実行する工程と、
    前記少なくとも1つのプロセッサにより、前記クエリ結果を、前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理可能な形式で当該データベースにログする工程と
    を有する方法。
  2. 請求項1記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、前記リレーショナルデータベース管理クエリを、(1)ユーザインターフェースを介したユーザ、(2)アプリケーションプログラムインターフェイスを介したユーザーアプリケーション、および(3)スマートコントラクトのうちの1つからの構造化照会言語(SQL)として生成する工程を有するものである方法。
  3. 請求項2記載の方法において、前記スマートコントラクトが、前記分散型台帳の前記データベースのリレーショナルデータベース管理クエリの少なくともサブセットのSQLクエリを実行するものである方法。
  4. 請求項2記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、SQLデータ操作言語(SQL DML)書き込み操作、SQLDML読み取り操作、およびSQLデータ定義言語(SQL DDL)操作のうちの1つを有するSQL操作に前記SQLクエリを解析する工程と、前記SQL操作および前記SQL操作に含まれる任意のリレーショナルデータのJava(登録商標)ScriptObject Notation(JSON)表現を作成する工程とを有するものである方法。
  5. 請求項4記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、前記SQL操作の実行から生じるトランザクションが、プラットフォームに関連する範囲で前記分散型台帳への受け入れに向かって進行したかどうかを決定する工程を有するものである方法。
  6. 請求項5記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、対応するトランザクションのより明確なステータスをフェッチするために、前記DML書き込み操作の最後にoperation broadcast status(OPSTAT)命令を追加する工程を有するものである方法。
  7. 請求項4記載の方法において、前記分散型台帳で前記クエリ操作を実行する工程は、前記少なくとも1つのプロセッサにより、前記SQLクエリを呼び出すエンティティが前記SQL操作を実行する権限を有することを確認する工程を有するものである方法。
  8. 請求項4記載の方法において、前記分散型台帳で前記SQLクエリ操作を実行する工程は、前記少なくとも1つのプロセッサにより、前記クエリ操作のJSON表現、および前記分散型台帳で処理および格納することができるクエリ操作の結果を作成する工程を有するものである方法。
  9. 請求項8記載の方法において、前記SQL操作はSQL DML書き込み操作であり、当該SQL操作は、さらに、
    前記少なくとも1つのプロセッサにより、前記SQL DML書き込み操作を実行するために必要に応じて前記分散型台帳からデータを取得する工程と、
    前記少なくとも1つのプロセッサにより、前記取得したデータを含む前記SQL DML書き込み操作を実行する工程と、
    前記少なくとも1つのプロセッサにより、前記クエリ結果における新規または更新された任意の記録のJSON表現を準備する工程と、
    前記少なくとも1つのプロセッサにより、前記SQL DML書き込み操作および前記任意の更新された記録を、前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理可能な形式で前記分散型台帳にコミットする工程と
    を有するものである方法。
  10. 請求項9記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、前記分散型台帳への受け入れに向けた前記SQL DML書き込み操作の進行状況に関して、前記分散型台帳を監視する工程と、
    前記少なくとも1つのプロセッサにより、前記SQLクエリを呼び出すエンティティに対して、前記SQL DML書き込み操作がプラットフォームに関連する範囲で前記分散型台帳への受け入れに向けて進行したかどうかを通知する工程と
    を有するものである方法。
  11. 請求項8記載の方法において、前記SQL操作はSQL DML読み取り操作であり、当該SQL操作は、さらに、
    前記少なくとも1つのプロセッサにより、前記SQL DML読み取り操作を実行するために必要に応じて前記分散型台帳からデータを取得する工程と、
    前記少なくとも1つのプロセッサにより、前記取得したデータを含む前記SQL DML読み取り操作を実行する工程と、
    前記少なくとも1つのプロセッサにより、前記クエリ結果のJSON表現を準備する工程と、
    前記少なくとも1つのプロセッサにより、前記クエリ結果の前記JSON表現を、前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理可能な形式で前記分散型台帳にログする工程と
    を有するものである方法。
  12. 請求項11記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、前記クエリ結果のJSON表現を前記SQLクエリを呼び出すエンティティに返す工程を有するものである方法。
  13. 請求項1記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、チャネルを作成し、前記データベースのコピーおよび前記データベースに関するメタデータを書き込む通常のトランザクションを維持するピアコンピューターを定義する構成トランザクションを実行して、前記分散型台帳内に前記データベースを作成する工程と、
    前記少なくとも1つのプロセッサにより、前記分散型台帳のトランザクションデータを定義するコードと、前記トランザクションデータを変更するためのトランザクション命令を作成する工程と
    を有するものである方法。
  14. 請求項13記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、前記分散型台帳の前記トランザクションデータとしてJava(登録商標)ScriptObject Notation(JSON)で前記データベースの属性を定義するコードを作成する工程と、
    前記少なくとも1つのプロセッサにより、前記データベースを前記データベースの属性で更新する工程と
    を有するものである方法。
  15. 請求項1記載の方法において、さらに、
    前記少なくとも1つのプロセッサにより、前記分散型台帳に含めるために、前記分散型台帳上のデータベースによって処理可能な形式を説明する、解析および変換された構造化照会言語(SQL)クエリを作成する工程を有するものである方法。
  16. 請求項1記載の方法において、前記リレーショナルデータベース管理クエリはスマートコントラクトから受信され、前記受信したリレーショナルデータベース管理クエリは、前記分散型台帳の前記データベースによって処理されることができる分散型台帳トランザクションに変換され、および前記分散型台帳の前記分散型台帳トランザクションがトランザクション結果を生成するために実行されるものであり、さらに、
    少なくとも1つのプロセッサにより、前記トランザクション結果を前記スマートコントラクトに返す工程を有するものである方法。
  17. 請求項16記載の方法において、さらに、前記スマートコントラクトは、DDLデータベース操作およびスキーマ変更を除く前記分散型台帳のデータ定義言語(DDL)操作を実行することにより前記スマートコントラクトを前記分散型台帳の前記データベースと統合するものである工程を有するものである方法。
  18. 請求項17記載の方法において、さらに、チェーンコードで前記分散型台帳の前記データベース、前記スマートコントラクトの少なくとも1つの資産を定義する前記チェーンコード、および少なくとも1つの資産を変更するための少なくとも1つのトランザクション命令、のデータベース関連操作を実装する工程を有するものである方法。
  19. 請求項18記載の方法において、前記スマートコントラクトを前記分散型台帳の前記データベースと統合することは、前記チェーンコードを呼び出す前記スマートコントラクトを有するものである方法。
  20. 請求項18記載の方法において、さらに、前記チェーンコードからデータ操作言語(DML)読み取り操作を開始する前記スマートコントラクトを有するものである方法。
  21. 請求項16記載の方法において、さらに、データ操作言語(DML)クエリの実行、前記分散型台帳への前記データベースの作成、前記分散型台帳の前記データベースへのアクセス権の更新、またはデータ定義言語(DDL)クエリの実行を含む少なくとも1つの操作を実行する前記スマートコントラクトを有するものである方法。
  22. システムであって、
    トランザクションデータを含む分散型台帳を実装する分散型台帳プラットフォームと、
    前記分散型台帳のデータベースと、
    リレーショナルデータ管理および編成システムを実装するための命令を実行する少なくとも1つのプロセッサであって、このリレーショナルデータ管理および編成システムは、
    前記分散型台帳のデータベースに関する情報を記録する工程と、
    受信したリレーショナルデータベース管理クエリを、前記分散型台帳のデータベースによって処理可能なクエリ操作に変換する工程と、
    クエリ結果を生成するために、前記分散型台帳のデータベースに対して前記クエリ操作を実行する工程と、
    前記クエリ結果を、前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理可能な形式で当該データベースにログする工程と
    を実行するものである、
    前記少なくとも1つのプロセッサと
    を有するシステム。
  23. 請求項22記載のシステムにおいて、さらに、
    構造化照会言語(SQL)クエリとして前記リレーショナルデータベース管理クエリを生成する手段を有し、この手段は、(1)ユーザーが前記SQLクエリを提供するための前記リレーショナルデータ管理および前記編成システムに対するユーザーインターフェイス、(2)前記リレーショナルデータ管理および前記編成システムのアプリケーションプログラムインターフェイスを介して前記リレーショナルデータ管理および前記編成システムに前記SQLクエリを渡すユーザーアプリケーション、および(3)スマートコントラクトのうちの1つを有するものであるシステム。
  24. 請求項23記載のシステムにおいて、前記スマートコントラクトは、前記分散型台帳の前記データベースのリレーショナルデータベース管理クエリのSQLクエリの少なくともサブセットを実行するものであるシステム。
  25. 請求項23記載のシステムにおいて、前記少なくとも1つのプロセッサは、さらに、
    SQLデータ操作言語(SQL DML)書き込み操作、SQLDML読み込み操作、およびデータ定義言語(SQL DDL)操作のうちの1つを有する前記SQLクエリをSQL操作に解析し、
    前記SQL操作および前記SQL操作に含まれる任意のリレーショナルデータのJava(登録商標)ScriptObject Notation(JSON)表現を作成するための、命令を実行するものであるシステム。
  26. 請求項25記載のシステムにおいて、さらに、前記少なくとも1つのプロセッサは、前記SQL操作の実行から生じるトランザクションがプラットフォームに関連する範囲で前記分散型台帳への受け入れに向かって進行したかどうかを決定するための命令を実行するものであるシステム。
  27. 請求項26記載のシステムにおいて、さらに、前記少なくとも1つのプロセッサは、対応するトランザクションのより明確なステータスをフェッチするために、前記DML書き込み操作の最後にoperation broadcast status(OPSTAT)命令を追加する命令を実行するものであるシステム。
  28. 請求項25記載のシステムにおいて、前記少なくとも1つのプロセッサは、前記SQLクエリを呼び出すエンティティが前記SQL操作を実行する権限を持っていることを確認する命令を実行することによって、前記分散型台帳で前記クエリ操作を実行するものであるシステム。
  29. 請求項25記載のシステムにおいて、前記少なくとも1つのプロセッサは、さらに、前記クエリ操作のJSON表現と、前記分散型台帳に処理および格納することができる前記クエリ操作の結果を作成するための命令を実行するものであるシステム。
  30. 請求項29記載のシステムにおいて、
    前記SQL操作はSQL DML書き込み操作であり、
    前記少なくとも1つのプロセッサは、さらに、
    前記SQL DML書き込み操作を実行するために必要に応じて前記分散型台帳からデータを取得し、
    前記取得したデータを含む前記SQL DML書き込み操作を実行し、
    前記クエリ結果における新規または更新された任意の記録のJSON表現を準備し、
    前記SQL DML書き込み操作および前記更新された任意の記録を前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理可能な形式で前記分散型台帳にコミットするための、命令を実行するものであるシステム。
  31. 請求項30記載のシステムにおいて、前記少なくとも1つのプロセッサは、さらに、
    前記分散型台帳への受け入れに向けた前記SQL DML書き込み操作の進行に関して前記分散型台帳を監視し、
    前記SQLクエリを呼び出すエンティティに対して、前記SQL DML書き込み操作がプラットフォームに関連する範囲で前記分散型台帳への受け入れに向けて進行したかどうかを通知するための、命令を実行するものであるシステム。
  32. 請求項29記載のシステムにおいて、
    前記SQL操作はSQL DML読み取り操作であり、
    前記少なくとも1つのプロセッサは、さらに、
    前記SQL DML読み取り操作を実行するために必要に応じて前記分散型台帳からデータを取得し、
    前記取得したデータを含む前記SQL DML読み取り操作を実行し、
    前記クエリ結果のJSON表現を準備し、
    前記分散型台帳への前記クエリ結果の前記JSON表現を、前記分散型台帳に含めるために前記分散型台帳のデータベースによって処理可能な形式でログするための、命令を実行するものであるシステム。
  33. 請求項32記載のシステムにおいて、前記少なくとも1つのプロセッサは、さらに、前記SQLクエリを呼び出すエンティティに前記クエリ結果の前記JSON表現を返すための命令を実行するものであるシステム。
  34. 請求項22記載のシステムにおいて、前記少なくとも1つのプロセッサは、
    チャネルを作成し、前記データベースのコピーおよび前記データベースに関するメタデータを書き込む通常のトランザクションを維持するピアコンピュータを定義する構成トランザクションを実行することにより前記分散型台帳内に前記データベースを作成し、
    前記分散型台帳にトランザクションデータおよび前記トランザクションデータを変更するためのトランザクション命令を定義するコード作成するための、命令を実行するものであるシステム。
  35. 請求項34記載のシステムにおいて、前記少なくとも1つのプロセッサは、さらに、
    前記分散型台帳の前記トランザクションデータとしてJava(登録商標)ScriptObject Notation(JSON)で前記データベースの属性を定義するコードに対応する命令、および前記データベースを前記データベースの属性で更新するための命令を実行するものであるシステム。
  36. 請求項22記載のシステムにおいて、さらに、前記少なくとも1つのプロセッサは、前記分散型台帳に含めるために、前記分散型台帳のデータベースによって処理可能な形式を説明する、解析および変換された構造化照会言語(SQL)クエリを作成するための命令を実行するものであるシステム。
  37. 請求項22記載のシステムにおいて、前記リレーショナルデータベース管理クエリはスマートコントラクトから受信され、前記受信したリレーショナルデータベース管理クエリは、前記分散型台帳の前記データベースによって処理されることができる分散型台帳トランザクションに変換され、および前記分散型台帳の前記分散型台帳トランザクションは、トランザクション結果を生成するために実行されるものであり、さらに前記トランザクション結果を前記スマートコントラクトに返すための命令を実行する少なくとも1つのプロセッサを有するものであるシステム。
  38. 請求項37記載のシステムにおいて、前記スマートコントラクトは、DDLデータベース操作とスキーマ変更を除く前記分散型台帳のデータ定義言語(DDL)操作を実行するものであるシステム。
  39. 請求項38記載のシステムにおいて、前記データベースのデータベース関連操作は、チェーンコードの前記分散型台帳、前記スマートコントラクトの少なくとも1つの資産および前記少なくとも1つの資産を変更するための少なくとも1つのトランザクション命令を定義する前記チェーンコード、を実装するものであるシステム。
  40. 請求項39記載のシステムにおいて、前記スマートコントラクトが実行のために前記チェーンコードを呼び出すものであるシステム。
  41. 請求項39記載のシステムにおいて、前記スマートコントラクトは、前記チェーンコードからデータ操作言語(DML)読み取り操作を開始するものであるシステム。
  42. 請求項37記載のシステムにおいて、前記スマートコントラクトは、データ操作言語(DML)クエリの実行、前記分散型台帳への前記データベースの作成、またはデータ定義言語(DDL)クエリの実行を含む少なくとも1つの操作を実行するものであるシステム。
  43. 請求項42記載のシステムにおいて、前記スマートコントラクトは、前記分散型台帳のデータ分離を作成する構成トランザクションを実行することによって前記分散型台帳に前記データベースを作成し、前記データベースのコピーを維持するピアコンピュータと前記データベースに関するメタデータを書き込む通常のトランザクションの実行を定義するものであり、前記少なくとも1つのプロセッサは、さらに、前記分散型台帳のトランザクションデータと、前記トランザクションデータを変更するためのトランザクション命令を定義するコードの作成を有する動作を実行するために命令を実行するものであるシステム。
JP2021549147A 2019-08-19 2020-08-19 分散型台帳技術(dlt)を使用したリレーショナルデータの管理と編成 Active JP7500589B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/544,538 2019-08-19
US16/544,538 US10726002B1 (en) 2019-08-19 2019-08-19 Relational data management and organization using DLT
US16/899,400 US11657039B2 (en) 2019-08-19 2020-06-11 Relational data management and organization using DLT
US16/899,400 2020-06-11
PCT/CA2020/051131 WO2021030910A1 (en) 2019-08-19 2020-08-19 Relational data management and organization using dlt

Publications (2)

Publication Number Publication Date
JP2022521915A true JP2022521915A (ja) 2022-04-13
JP7500589B2 JP7500589B2 (ja) 2024-06-17

Family

ID=71783562

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021549147A Active JP7500589B2 (ja) 2019-08-19 2020-08-19 分散型台帳技術(dlt)を使用したリレーショナルデータの管理と編成

Country Status (9)

Country Link
US (2) US10726002B1 (ja)
EP (1) EP3884397A4 (ja)
JP (1) JP7500589B2 (ja)
KR (2) KR102579802B1 (ja)
CN (1) CN113454619A (ja)
CA (1) CA3125065C (ja)
MX (1) MX2021009969A (ja)
SG (1) SG11202106858TA (ja)
WO (1) WO2021030910A1 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11436039B2 (en) * 2019-05-04 2022-09-06 Prasaga Foundation Systemic extensible blockchain object model comprising a first-class object model and a distributed ledger technology
US11606442B2 (en) 2019-06-07 2023-03-14 Microsoft Technology Licensing, Llc Subscription to edits of blockchain transaction
US20210042737A1 (en) * 2019-08-07 2021-02-11 Seatig Inc. Distributed computing architecture with settlement mechanism to enable traceability of credit tokenization, disbursement and repayment
US11461324B2 (en) * 2019-08-29 2022-10-04 Oracle International Corporation First futamura projection in the context of SQL expression evaluation
US11442957B2 (en) * 2019-09-03 2022-09-13 Sap Se Cloud-based fiscal year variant conversion
US11115804B2 (en) * 2019-10-04 2021-09-07 Microsoft Technology Licensing, Llc Subscription to dependencies in smart contracts
US11641364B2 (en) * 2020-03-03 2023-05-02 International Business Machines Corporation Cross-domain state synchronization
US20210279690A1 (en) * 2020-05-29 2021-09-09 II Darrell Thompson Pathfinder
US11630649B2 (en) * 2020-06-02 2023-04-18 International Business Machines Corporation Intelligent application library management
US20210406876A1 (en) * 2020-06-30 2021-12-30 International Business Machines Corporation Permissioned eventing in a decentralized database
US20220075877A1 (en) 2020-09-09 2022-03-10 Self Financial, Inc. Interface and system for updating isolated repositories
US11641665B2 (en) 2020-09-09 2023-05-02 Self Financial, Inc. Resource utilization retrieval and modification
US11470037B2 (en) 2020-09-09 2022-10-11 Self Financial, Inc. Navigation pathway generation
US11475010B2 (en) * 2020-09-09 2022-10-18 Self Financial, Inc. Asynchronous database caching
US11386053B2 (en) * 2020-10-15 2022-07-12 Google Llc Automatic generation of a data model from a structured query language (SQL) statement
US11960469B2 (en) 2020-12-07 2024-04-16 Deixis, PBC Heterogeneous integration with distributed ledger blockchain services
US20220368533A1 (en) * 2021-05-16 2022-11-17 CodeNotary Inc. System and method to cryptographically validate rich query results
US11599532B1 (en) * 2021-08-11 2023-03-07 Amdocs Development Limited System, method, and computer program for preventing user mistakes when making database changes
US11704312B2 (en) * 2021-08-19 2023-07-18 Microsoft Technology Licensing, Llc Conjunctive filtering with embedding models
US11972012B2 (en) * 2021-08-31 2024-04-30 Sap Se Authorization check for nested queries in database systems
US20230076875A1 (en) * 2021-09-03 2023-03-09 International Business Machines Corporation Avoiding data page updates after an insertion operation
CN113626850B (zh) * 2021-10-13 2022-03-11 北京百度网讯科技有限公司 基于联盟链的请求处理方法、装置、设备和存储介质
CN113918996B (zh) * 2021-11-24 2024-03-26 企查查科技股份有限公司 分布式数据处理方法、装置、计算机设备和存储介质
US20230283488A1 (en) * 2022-03-01 2023-09-07 DLT Global, Inc. Blockchain rules engine
US11641280B1 (en) * 2022-06-21 2023-05-02 Northern Trust Corporation Computing technologies for enabling blockchain-based digital tokens with asset-specific attributes
US12019642B2 (en) 2022-11-11 2024-06-25 Microsoft Technology Licensing, Llc Distributed query technique to efficiently retrieve and merge data from multiple shards

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005141280A (ja) * 2003-11-04 2005-06-02 Kureo:Kk データベース移行装置及びそのプログラム
WO2019152750A1 (en) * 2018-01-31 2019-08-08 Salesforce.Com.Inc. Systems, methods, and apparatuses for implementing super community and community sidechains with consent management for distributed ledger technologies in a cloud based computing environment

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10169439B2 (en) * 2015-06-19 2019-01-01 Sap Se Multi-source asynchronous table replication
US11042560B2 (en) * 2016-06-19 2021-06-22 data. world, Inc. Extended computerized query language syntax for analyzing multiple tabular data arrangements in data-driven collaborative projects
US10621233B2 (en) * 2016-11-09 2020-04-14 Cognitive Scale, Inc. Cognitive session graphs including blockchains
US10868865B2 (en) * 2017-11-20 2020-12-15 Moshe Shadmon System and apparatus to manage data using a peer-to-peer network and the blockchain
US10831764B2 (en) * 2017-12-02 2020-11-10 International Business Machines Corporation Query processing and access control in a blockchain network
US11243945B2 (en) * 2017-12-11 2022-02-08 International Business Machines Corporation Distributed database having blockchain attributes
US11257073B2 (en) * 2018-01-31 2022-02-22 Salesforce.Com, Inc. Systems, methods, and apparatuses for implementing machine learning models for smart contracts using distributed ledger technologies in a cloud based computing environment
US20190236606A1 (en) * 2018-01-31 2019-08-01 Salesforce.Com, Inc. Systems, methods, and apparatuses for implementing a virtual chain model for distributed ledger technologies in a cloud based computing environment
CN108616578A (zh) * 2018-04-09 2018-10-02 上海点融信息科技有限责任公司 跨区块链平台的业务处理方法、设备及计算机可读存储介质
CN108563796A (zh) * 2018-05-04 2018-09-21 蔷薇信息技术有限公司 区块链的数据压缩处理方法、装置及电子设备
CN109614823B (zh) * 2018-10-26 2022-05-13 蚂蚁双链科技(上海)有限公司 一种数据的处理方法、装置及设备
CN109492053B (zh) * 2018-11-08 2023-07-18 北京百度网讯科技有限公司 用于访问数据的方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005141280A (ja) * 2003-11-04 2005-06-02 Kureo:Kk データベース移行装置及びそのプログラム
WO2019152750A1 (en) * 2018-01-31 2019-08-08 Salesforce.Com.Inc. Systems, methods, and apparatuses for implementing super community and community sidechains with consent management for distributed ledger technologies in a cloud based computing environment

Also Published As

Publication number Publication date
KR102579802B1 (ko) 2023-09-19
KR20220025243A (ko) 2022-03-03
KR102364877B1 (ko) 2022-02-17
EP3884397A4 (en) 2022-01-19
JP7500589B2 (ja) 2024-06-17
CA3125065C (en) 2023-11-28
US11657039B2 (en) 2023-05-23
MX2021009969A (es) 2021-09-21
WO2021030910A1 (en) 2021-02-25
CN113454619A (zh) 2021-09-28
EP3884397A1 (en) 2021-09-29
US20210056095A1 (en) 2021-02-25
KR20210146890A (ko) 2021-12-06
US10726002B1 (en) 2020-07-28
SG11202106858TA (en) 2021-07-29
CA3125065A1 (en) 2021-02-25

Similar Documents

Publication Publication Date Title
JP7500589B2 (ja) 分散型台帳技術(dlt)を使用したリレーショナルデータの管理と編成
US11824970B2 (en) Systems, methods, and apparatuses for implementing user access controls in a metadata driven blockchain operating via distributed ledger technology (DLT) using granular access objects and ALFA/XACML visibility rules
US11899817B2 (en) Systems, methods, and apparatuses for storing PII information via a metadata driven blockchain using distributed and decentralized storage for sensitive user information
US11764950B2 (en) System or method to implement right to be forgotten on metadata driven blockchain using shared secrets and consensus on read
US11811769B2 (en) Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger
US11824864B2 (en) Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT)
US11743137B2 (en) Systems, methods, and apparatuses for implementing a metadata driven rules engine on blockchain using distributed ledger technology (DLT)
US11886421B2 (en) Systems, methods, and apparatuses for distributing a metadata driven application to customers and non-customers of a host organization using distributed ledger technology (DLT)
US11803537B2 (en) Systems, methods, and apparatuses for implementing an SQL query and filter mechanism for blockchain stored data using distributed ledger technology (DLT)
US11783024B2 (en) Systems, methods, and apparatuses for protecting consumer data privacy using solid, blockchain and IPFS integration
US11169985B2 (en) System and method for supporting SQL-based rich queries in hyperledger fabric blockchains
US11917066B1 (en) System for interacting objects as tokens on a blockchain using a class-based language
EP4071646A1 (en) Scalable, secure, efficient, and adaptable distributed digital ledger transaction network
US20230097203A1 (en) System and method for generating blockchain token support from a set of declarations

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210819

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210819

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220921

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221011

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230131

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20230418

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240605

R150 Certificate of patent or registration of utility model

Ref document number: 7500589

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150