本明細書において一般的に説明され図に示されている本発明のコンポーネントは、様々な異なる構成で配置及び設計され得ることが容易に理解されるであろう。従って、添付図面に示される方法、装置、非一時的コンピュータ可読媒体、及びシステムのうちの少なくとも1つの実施形態の以下の詳細な説明は、特許請求されている本出願の範囲を限定することを意図するものではなく、選択された実施形態を表すに過ぎない。
本明細書の全体を通じて記載される本発明の特徴、構造、又は特性は、1つ又は複数の実施形態において任意の適切な手法で組み合わせること又は除去することが可能である。例えば、「例示的な実施形態(example embodiments)」、「幾つかの実施形態(some embodiments)」という句、又は他の類似の言葉の本明細書の全体を通じた使用は、その実施形態に関連して記載される特定の特徴、構造、又は特性が、少なくとも1つの実施形態に含まれ得るという事実を指している。従って、「例示的な実施形態」、「幾つかの実施形態において(in some embodiments)」、「他の実施形態において(in other embodiments)」という句、又は他の類似の言葉の本明細書を通じた出現は、必ずしも全てが実施形態の同じグループを指しているわけではなく、記載される特徴、構造、又は特性は、1つ又は複数の実施形態において任意の適切な手法で組み合わせること又は除去することが可能である。さらに、図において、要素間のいずれの接続も、示される接続が一方向又双方向の矢印であっても、一方向もしくは双方向又はその両方の通信が可能である。また、図に示されるいずれの出刃も、異なるデバイスとすることができる。例えば、モバイル機器が情報を送るように示される場合、有線デバイスを用いて情報を送ることもできる。
さらに、「メッセージ」という用語が実施形態の説明において使用されていることがあるが、本出願は、多くのタイプのネットワーク及びデータに適用することができる。さらに、特定のタイプの接続、メッセージ及び信号伝達(signaling)が例示的な実施形態に示されていることがあるが、本出願は、特定のタイプの接続、メッセージ及び信号伝達に限定されない。
例示的な実施形態は、ブロックチェーン・ネットワーク(ここでは、ブロックチェーンとも呼ばれる)を構成するためのセキュリティ層を提供する方法、システム、コンポーネント、非一時的コンピュータ可読媒体、デバイス、もしくはネットワーク、又はそれらの組み合わせを提供する。
一実施形態において、システムは、互いに通信する複数のノードを含む分散型ストレージ・システムである非集中型(decentralized)データベース(ブロックチェーンなど)をデプロイし、構成する。非集中型データベースは、互いに信頼できない当事者(untrusted party)間のレコードを維持することができる分散型台帳に似ている追記専用(append-only)の変更不能なデータ構造を含む。信頼できない当事者は、本明細書では、ピア又はピア・ノードと呼ばれる。各ピアは、データベース・レコードのコピーを維持し、どの単一のピアも、分散したピアの間でコンセンサスが得られない限り、データベース・レコードを修正することができない。例えば、ピアは、コンセンサス・プロトコルを実行して、ブロックチェーンのストレージ・トランザクションを検証し、ストレージ・トランザクションをブロックにグループ化し、ブロックに対してハッシュ・チェーンを構築することができる。このプロセスにより、一貫性を保つために、必要に応じてストレージ・トランザクションを順序付けることによって、台帳が形成される。種々の実施形態において、許可型ブロックチェーンもしくは自由参加型ブロックチェーン又はその両方を使用することができる。パブリック・ブロックチェーン又は自由参加型ブロックチェーンでは、誰もが、特定のアイデンティティを持たずに参加することができる。パブリック・ブロックチェーンは、ネイティブな暗号通貨を含むことができ、プルーフ・オブ・ワーク(Proof of Work、PoW)などの様々なプロトコルに基づいてコンセンサスを使用することができる。一方、許可型ブロックチェーン・データベースは、資金、商品、情報などを交換する企業など、共通の目的を共有するが互いに完全には信頼していないエンティティのグループ間の安全な相互作用を提供する。
ブロックチェーンは、非集中型ストレージ・スキームに合わせられた、「スマート・コントラクト」又は「チェーンコード」と呼ばれる任意のプログラム可能論理を動作させることができる。場合によっては、システム・チェーンコードと呼ばれる、管理機能及びパラメータのための専用チェーンコードが存在し得る。このアプリケーションは、ブロックチェーン・データベースの改ざん防止(tamper-proof)特性と、エンドースメント(endorsement)又はエンドースメント・ポリシーと呼ばれるノード間の基礎をなす合意を利用する、信頼できる分散型アプリケーションであるスマート・コントラクトをさらに利用することができる。このアプリケーションと関連付けられたブロックチェーン・トランザクションは、ブロックチェーンにコミットされる前に「エンドース」することができるが、エンドースされていないものは無視される。エンドースメント・ポリシーにより、チェーンコードが、エンドースメントに必要なピア・ノードのセットの形のトランザクションのためのエンドーサを指定することが可能になる。クライアントが、エンドースメント・ポリシーで指定されたピアにトランザクションを送ると、トランザクションを検証するためにそのトランザクションが実行される。検証後、トランザクションは、順序付け段階に入り、そこで、コンセンサス・プロトコルを用いて、ブロックにグループ化されたエンドースされたトランザクションの順序付けられたシーケンスが生成される。
ブロックチェーンは、ブロックチェーン・システムの通信エンティティである、内部に構成されたノードを含むことができる。「ノード」は、異なるタイプの複数のノードが同じ物理サーバ上で動作可能であるという意味で、論理機能を実行することができる。ノードは、信頼ドメインにグループ化され、それらのノードを様々な方法で制御する論理エンティティと関連付けられる。ノードは、トランザクション呼び出しをエンドーサ(例えば、ピア)にサブミットし、トランザクション提案を順序付けサービス(例えば、順序付けノード)にブロードキャストする、クライアント又はサブミット・クライアント・ノードなどの異なるタイプを含むことができる。別のタイプのノードは、クライアントがサブミットしたトランザクションを受け取り、トランザクションをコミットし、ブロックチェーン・トランザクションの台帳の状態及びコピーを維持することができるピア・ノードである。ピアは、エンドーサの役割を持つこともできるが、それは必須要件でない。順序付けサービス・ノード又はオーダラ(orderer)は、全てのノードに対する通信サービスを実行するノードであり、トランザクションをコミットし、通常制御及び設定情報を含む初期ブロックチェーン・トランザクションについての別名である、ブロックチェーンのワールド状態(world state)を修正する際に、システム内のピア・ノードの各々へのブロードキャストなどの配信保証を実施する。
ブロックチェーンは、ブロックチェーンの全ての状態遷移の順序付けられた耐改ざん性(tamper-resistant)レコードである台帳を含むことができる。状態遷移は、参加している当事者(例えば、クライアント・ノード、順序付けノード、エンドーサ・ノード、ピア・ノードなど)によってサブミットされたチェーンコード呼び出し(すなわち、トランザクション)から生じ得る。参加している当事者(ピア・ノードなど)の各々は、台帳のコピーを維持することができる。トランザクションは、作成、更新、削除などの1つ又は複数のオペランドとして台帳にコミットされているアセットのキー・値ペアのセットをもたらすことができる。台帳は、変更不能な順序付けられたレコードをブロックに格納するために使用されるブロックチェーン(チェーンとも呼ばれる)を含む。また、台帳は、ブロックチェーンの現在の状態を維持する状態データベースも含む。
(ブロックチェーンの)チェーンは、ハッシュ・リンクされたブロックとして構造化されるトランザクション・ログであり、各ブロックは、N個のトランザクション・シーケンスを含み、ここでNは1に等しいか又はそれより大きい。ブロック・ヘッダは、ブロックのトランザクションのハッシュ、並びに前のブロックのヘッダのハッシュを含む。別の例として、DAG構造では、ブロックは、親ブロックのヘッダのハッシュと、ソース・ブロックのヘッダのハッシュとを含む。このようにして、台帳上の全てのトランザクションを順序付け、暗号によって互いにリンクすることができる。従って、ハッシュ・リンクを壊さずに台帳データを改ざんすることは不可能である。直近に追加されたブロックチェーン内のブロックのハッシュは、それ以前に発生したチェーン上の全てのトランザクションを表し、全てのピア・ノードが、一貫性があり信頼できる状態にあることを保証することを可能にする。チェーンは、ピア・ノードのファイル・システム(すなわち、ローカルの取り付けられたストレージ、クラウドなど)に格納することができ、ブロックチェーン・ワークロードの追記専用の性質を効率的にサポートする。
変更不能な台帳の現在の状態は、チェーンのトランザクション・ログに含まれる全てのキーについての最新の値を表す。現在の状態は、チャネルに知られている最新のキーの値を表すため、ワールド状態と呼ばれることもある。チェーンコード呼び出しは、台帳の現在の状態データに対してトランザクションを実行する。これらのチェーンコードの相互作用を効率的にするために、最新のキーの値を状態データベースに格納することができる。状態データベースは、単にチェーンのトランザクション・ログへのインデックス付きビューであってもよく、従って、いつでもチェーンから再生成することができる。状態データベースは、ピア・ノードの起動時に、及びトランザクションが受け入れられる前に、自動的に回復すること(又は、必要に応じて、生成すること)が可能である。
例示的な実施形態は、有向非巡回グラフ(DAG)形式を有するブロックチェーンのためのコンセンサス・プロトコルに向けられる。特に、プロトコルは、DAG形式のブロックをアンタングルし(untangle)、ブロックチェーン・ネットワーク内のピア・ノード間のコンセンサスのために使用することができるブロックの連続的な線形順序を生成することができる。しかしながら、このプロトコルは、(偽造が容易な)タイムスタンプに依存するのではなく、DAGの構造を分析して、グラフ内の暗黙的な関係、冗長な関係、任意の関係を解決する。
この手法は、ブロックのDAG構造を、DAGの構造のみを調べることにより、線形構造に変換することができるため、特徴的なものである。ブロックは、従来のブロックチェーンにおけるように、互いにハッシュ・リンクされている。しかしながら、DAG構造では、複数のブロックのハッシュをブロック・ヘッダに含ませることによって、ブロックをより多くの複数のブロックに直接/独立してリンクさせることができる。本明細書で説明されるシステムは、DAGブロック構造を、ブロックがノードで表され、リンクがノード間のエッジで表される対応するグラフ(本明細書では、順序グラフと呼ぶ)に変換することができる。順序グラフを介して、ノードに対する変換を、様々な変換に基づいて行うことができる。
例示的な実施形態は、ブロックが最初から連続的な線形順序である従来のブロックチェーンよりも、ブロックチェーンへのブロックの追加をはるかに高速に行うことができる。これは、複数のピア・ノードが並列に何の障害もなくブロックを追加できるようにすることによって、達成される。障害がないということは、(ビットコインなどの従来型ブロックチェーンのように)、プロセスの速度を落とす余分な「プルーフ・オブ・ワーク」計算がプロセスに追加されないことを意味する。さらに、追加を行うことに対して、コンピュータが「投票」する必要もない。代わりに、並列に動作しているコンピュータのセットが、それらの間で「ゴシップ(gossip)」、つまりランダムなペアワイズ接続を互いの間で平行して行うことを意味する。こうした接続のたびに、1つのブロックが作成され、ブロックのDAGに追加される。このプロセスは、プルーフ・オブ・ワーク又はエンドースメント・プロトコルに依存するよりもはるかに高速であるが、最終的には、ブロックの「リボン」が完全にランダムな方法で織り込まれ、ブロックが作成された時間的な順序を決定することが困難になる。この順序は「コンセンサス全順序(consensus total order)」と呼ばれ、ブロックチェーンのコアにおけるトランザクション(ブロックに格納された)の順序を指定する。
DAG構造のブロックをアンタングルするプロセスに対処するための別の手法は、各ブロックのタイムスタンプを使用して時間的順序を把握することである。しかしながら、タイムスタンプは、不正に作成、偽造、操作することなどが容易である。従って、タイムスタンプの「良好な」セットを識別する追加の/複雑なプロセスを実施しない限り、タイムスタンプを完全に信頼することはできない。これに対して、例示的な実施形態は、DAG自体の構造のみを用いてブロックの連続的な順序を識別するものであり、これは偽造できるものではない。
例えば、ピア・ノードは、ブロックのDAGチェーンを格納することができる。コンセンサス要求を受け取ると、ピア・ノードは、DAGの最新構造を、ブロックがノードで表され、ハッシュ・リンクがノード間のエッジで表される順序グラフに変換することができる。順序グラフはDAGではなく、サイクルを含むことができかつサイクルを含むことに留意されたい。ピア・ノードは、ブロック/ノード間の対応する時間的関係を保持する順序グラフに対する変換(例えば、エッジの追加又は除去)を行うことができるが、これもまた、ノード間のエッジの数を体系的に削減する。DAG内のブロックは、2つの他のブロックへの2つのエッジ(1つは親ノードへ、1つは相互関係ノード/ソースへ)を含み得る。しかしながら、コンセンサス全順序では、それらの2つの状態の間には1つのエッジしか残らない。順序グラフ構造に対して変換を行って、そのノードの順序が、DAG内の各ノードの対応するブロックの時間的/線形順序を表す線形構造に変換することができる。さらに、これが確立されると、その時点で順序正しくなっているノードは、もはや目的を果たさないため、順序グラフから除去することができる。順序付けられたノードを除去することで、順序グラフが必要以上に大きくなることが防止される。
例示的な実施形態の利点の幾つかには、ブロックチェーンの処理速度を向上させることが含まれる。特に、ブロックチェーン(DAG)への新しいブロックの追加は、ブロックのコンセンサス全順序を決定するプロセス(すなわち、順序グラフを変換することによる)から分離することができる。特に、ブロックを必要に応じて(複数の異なるピアによって一度に)高速に追加することができ、順序付けプロセスは、順序グラフの構造の静的分析を用いて、別個に及び並行して行うことができる。この組み合わせは、ブロックをブロックチェーンに追加できる前に、プルーフ・オブ・ワーク又はエンドースメント・プロトコルを必要とするよりもはるかに高速である。
ピア・ノードは、ブロックチェーンを管理するプロセス全体を通して、コンセンサス・プロトコルを実行することができる。ピア・ノードは、トランザクションを受け入れる、トランザクションを束ねてブロックにする、全員が作成しているブロックの順序をどうすべきかについて、同じことを並行して行っている他のピアと合意(すなわち、コンセンサス)するなどの異なるジョブを含む。そのコンセンサスは、コンセンサス・プロトコルの実行を必要とする。実際に/実施において、新しいブロックがDAGに追加され、次に、それが順序グラフの新しい対応するブロックを直接もたらすときにのみ、何かが起こる。新しい順序グラフのブロックが変換を行う場合、その変換が適用され、順序グラフが変更される。変更の結果、そのノードに先行するノードがなく(つまり、時間的にその前に来るものがなく)、かつその後に来るノードが1つしかない場合、そのノードを順序グラフから除去することができ、除去されたノードのシーケンスにおけるその位置は、コンセンサス全順序におけるその位置となる(これは、コンセンサス全順序において、そのノードが表すDAGのブロックの位置に直接変換される)。
上述のように、ブロックチェーンは、一般的に、2つのタイプ、すなわち自由参加型及び許可型に分類することができる。最初に広く使用されたブロックチェーンでるBitcoin及びEthereumは、どちらも自由参加型であり、これは、ブロックチェーンを維持するピア・ツー・ピア・ネットワークを管理する中央機関がなく、事実上あらゆるピアがいつでもネットワークに参加してその維持に参加できることを意味する。これに対して、許可型ブロックチェーンでは、通常、ブロックチェーンを維持しているピアの数が非常に限られ、おそらく1ダース程度であり、特定の既知の当事者によって所有及び運営され、何らかの中央機関によって、ブロックチェーンを維持するための「許可」が与えられる。これらの2つのタイプのブロックチェーンは、コンセンサスの形成のための手法が非常に異なる傾向があり、その結果、性能プロファイルも大きく異なる。しかしながら、どちらのタイプのネットワークのコンセンサス・プロトコルも、新しいブロックが台帳に格納される前に、著しいオーバーヘッド作業を必要とする。
自由参加型及び許可型ブロックチェーンの両方に適用可能な、ブロックチェーンにおけるコンセンサスを判断するための第3の手法は、コンセンサスの決定からブロックチェーンの拡張を分離することである。この考えは、人為的な時間遅延又は制約があったとしても、殆どなく、「チェーン」へのブロックの並列追加を可能にすることによって、より高い性能を達成するというものである。この例では、コンセンサスは、ブロック間の関係を静的に分析することによって、並行して及び僅かに事後的に決定することができる。これは、ブロックを編成するために、純粋なブロックチェーンとは僅かに異なるデータ構造、すなわち、一般化された有向非巡回グラフ(DAG)を採用することによって容易になる。図1Aは、例示的な実施形態による、DAG形式のブロックチェーン台帳120を示す。
図1Aを参照すると、ブロックチェーン・ネットワーク100が、それぞれピアA、B、C、及びDで表される複数のピア・ノード111~114を含む。本明細書に説明されるコンセンサス・プロトコルを使用して、ブロックチェーン台帳120A上のDAG形式のブロックのチェーンをアンタングルすることができる。DAGプロトコルは、従来のブロックチェーンと同じように、ブロックを互いにリンクするために依然として暗号チェックサムを使用するが、直前のブロックへのリンクだけではなく、2つ又はそれより多いブロックへのリンクを組み込むことができる。例えば、新しいブロックをDAGの「最も外側」のブロックに追記し、静的分析を容易にする安定した不変のブロックの「コア」を作成することができる。図1Aの例では、各ピアは、自身のブロックをDAGに追加する。この例では、ピア114(ピアDとも呼ばれる)は、D1、D2、D3、及びD4を含む4つのブロックをブロックチェーン台帳120Aに追加する。同様に、ピア113(ピアC)は、ブロックC1、C2、及びC3を追加し、ピア112(ピアB)は、ブロックB1、B2、及びB3を追加し、ピア111(ピアA)は、ブロックA1、A2、及びA3を追加している。
ピア111~114は、非常に少ないオーバーヘッド、典型的にはプルーフ・オブ・ワークも、ピア111~114間のいかなる投票もなく、新しいブロックをDAGに追加することができる。限定されない例として、「最も単純な」アルゴリズムにおいて、ピア111~114は、その追加を追記し、ピア111~114の中の他のピアに伝搬することができる。この構成により、複数のピアによるDAGの同時並列拡張が可能となり、はるかに高い性能を発揮することができる。ここで、静的分析を使用して、DAGの安定部分をその「空き時間(leisure)」に処理し、拡張順序を分類して、コンセンサス全順序を生成することができる。この手法には、幾らかの待ち時間(秒単位の)があるが、非常に高い性能を可能にする。
ブロックの連続的なチェーンではなく、ブロックチェーン台帳120Aに対して制約のないDAGを使用することで、ピア111~114が、最適と考えられる場所に事実上ブロックを取り付けることが可能になる。また、DAGは、非常に高い、潜在的にさらに理論的な最大の拡張性能へのパスを提供する。しかしながら、この手法には、2つの著しい欠点があり、第1の欠点は、そのように作成されたDAGが非常に複雑なブロック関係のセットを有し得ることであり、第2の、より深刻な欠点は、そうした構造を利用する台帳を攻撃に対してより脆弱にする可能性があることである。DAGの複雑さが増すほど、静的分析を行うことも困難になる。これにより、DAGからコンセンサス順序を計算する際の待ち時間が長くなり得る。また、特にアルゴリズム自体の問題ではないが、複雑な静的分析アルゴリズムの正しい実装も大変な作業となる。最後に、複雑さが増すと、セキュリティ面で予期せぬ問題が発生する可能性が高くなる。
そうした問題の1つは、DAGを拡張するピアの間に何らかの種類の調整の強制がないことにより、悪意のあるピアが、気付かれることなく、それらのピアの間で協働する可能性が生じることである。危険なのは、ピアが各自の利益のためにDAGの一部の拡張に協力し合うことである(例えば、「二重支払い(double spend)」を永続させるために)。制約のないDAGでは、この拡張を残りのピアに直ちに伝搬する必要がないため、影響が最大化する際に悪意をもってキュレートし、導入する(つまり、ピア・ツー・ピア・ネットワークの残りの部分に伝搬させる)ことができる。これらのタイプの攻撃を軽減させようとする試みは、DAGの設計及びオペレーションに深い意味があり、一部の非集中型(すなわち、自由参加型)台帳を集中型(つまり、許可型)台帳に効果的に変換する。DAGがより多くの構造を含むようにしながらも自由な拡張を可能にするように、DAGの拡張を制限することは、これらの問題に対処するのに役立つ。
図1Bは、ブロックが、対応するブロックをブロックチェーン台帳120Bに追加したピアに対応して配置される、ブロックチェーン台帳120Bの別の視点を示す。図1Bに示すように、ゴシップDAGは、ゴシップ・プロトコルに参加しているピアA~Dのセットの間でなされたランダムな接続を記録する(すなわち、各ピアが別のピアをランダムに選択し、次いで、それらに連絡を取って、それぞれのデータ・セットを同期させる)。ゴシップDAGのブロックには、ブロックを作成するピアによってそこに配置されたトランザクションが含まれる。ピア間の接続は安全であり、交換されたデータ(すなわち、ブロック)は署名されている。DAGは、あたかも従来のブロックチェーンの並列セットで構成され、1つのブロックチェーンが、ピアA~Dのそれぞれにより「所有」されているように編成されたものとして見えるかもしれない。
ここで、ピアCはブロックC1、C2、及びC3からなる「チェーン」を所有する一方で、ピアAはブロックA1、A2、及びA3からなるチェーンを所有する。特定のピアのチェーン内のブロックの各々は、そのチェーン内の直前にあるブロックへのリンクを有する。このブロックはその親と呼ばれ、一方、該ブロックは該関係において子である。全てのブロックが親を持つわけではない。例えば、ブロックチェーン台帳120BのノードD1、C1、B1、及びA1に対応するブロックは、親ブロックを持たない。
各ブロックは、典型的には、異なるピアのチェーン内のブロックへの別のリンクを有する。他のチェーンのリンク・ブロックは、ソース・ブロックと呼ばれる。ブロックは、1つの他のブロックの親になることしかできないが、1つより多くのもののソース・ブロックになることもでき、例えば、ブロックチェーン台帳120BのブロックB2は、ブロックB3の親であり、ブロックA3及びC3のソース・ブロックである。上述したように、ゴシップDAG内のブロックは、1つのピアが別のピアに連絡を取ったときに作成され、例えば、ブロックD2は、ピアAがピアDに連絡を取ったときに作成された。その接続がなされたときに、ピアAは、ブロックA1(ソース・ブロック)の暗号ハッシュ値をピアDに送ることができ、次に、ピアDは、ブロックD2を作成し、ブロックD2内に、ブロックA1及びブロックD1(親ブロック)についての暗号ハッシュ値を含ませる。
2つのピアが通信する場合、これらは他のピアに欠落しているDAGのブロックを交換することができる。これは、開始ピアが、各ピアに属するブロックの最大インデックスを要約するブロック・カウント・ベクトル(BCV)のインスタンスを送ることによって達成することができる。受信側のピアは、値を自身の値と比較し、相手が持っていない、自身が持つ全てのブロック及び自身のBCV値で応答し、可能な場合は、欠落している適切なブロックで応答する。例として、ピアAからピアBへの最初の同期により送られた一番最初のBCVは、ゴシップDAGのピアAのビューを要約し、それは、ピアAが単一のブロック(A1、後述する作成されたばかりのジェネシス・ブロック)を持っており、知っている限りでは、他の3つのピアはブロックがゼロ(「0」)である(真)というものである。BCVに加えて、ピアAは、ソース・ブロックであるブロックA1をピアBにプロアクティブに送ることもできる。一般的に、受信側ピアがソース・ブロックを既に持っていることはあり得るが、まれであり、それは、自身が2回の交換の間に連絡を取らなかった同じピアにより続けて2回連絡を受けた場合であることに留意されたい。
ピアBは、ピアAからBCV及びブロックA1を受け取ると、ブロックA1をそのコレクションに追加し、次に、ブロックB1を作成する。次に、ピアBは、自身のBCVを作成し、ゴシップDAGのビューを要約し、それを、ピアAから受け取ったものと比較する。2つのBCVの間の差(基本的にはベクトル減算)により、ゴシップDAGにおいてピアBが持っていてピアAが持っていないブロック(答え:ブロックB1)を特定する。この例では、ピアBは、そのBCV及びブロックB1でピアAに返信する。ピアAがピアBから応答を受け取ると、ピアAは、ピアBから受け取るあらゆるブロックを統合し(今回はブロックB1のみ)、次に、新しいブロックでBCVを再計算する。その後、応答を準備するが、その目的は、ピアAが持っていてピアBが持っていないあらゆるゴシップDAGブロックをピアBに提供することである。この場合も、これは、2つのBCVベクトル間の差を計算することにより明らかになるが、この場合は差がないので、ピアBに送るブロックはない。転送するブロックがないことは、ピアAのアクションに影響を与えず、依然として、ピアAは、ブロックがないだけの状態でピアBに応答を送る。その応答の完了後、2つのピア間のゴシップ交換が完了する。
本明細書に説明されるブロックチェーン・コンセンサス・アルゴリズムは、ゴシップDAGの特性を利用するが、幾つかのカスタマイズが施されている。例えば、ゴシップDAG内のブロックの全ては、単一のジェネシス・ブロック(A1)へのパスを追跡することができる。このブロックは、指定された単一のピア(ピアA)による初期化プロセスの一部として作成される。一方、初期化後、他のピアは、依然として他のいずれのブロックも参照しない。ゴシップは、ジェネシス・ブロックを作成したピアから始まり、そのピアだけが別のピアにランダムに連絡を取る。そのピアは、ゴシップ・プロトコルに沿って、ジェネシス・ブロックをソースとして参照する新しいブロックを作成するが、親の参照は空のまま残す(参照する親ブロックがないため)。同期後、第2のピアはこの時点でそれ自身のブロックを持ち、他のピアへのゴシップ接続の開始において第1のピアを参加させることができる。各ピアに連絡を取り、その後、ソース・ブロックとして機能する新しいブロックを作成すると、他のピアをゴシップに参加させることができる。
ジェネシス・ブロックへのパスは、ゴシップDAGの構造から直接抽出することができるため、実際の第1のブロック、つまりコンセンサス全順序において全ての他のブロックよりも前に来るものが必要となる。ブロックが作成された実際の時間は、順序付けプロセスの一部ではないことに留意されたい。言い換えれば、ここでのプロトコルは、タイムスタンプ情報を必要としない。一見したところ、ゴシップDAGは、ランダムかつ未編成に見える。これは比較的正確な評価であり、各々の新しいブロックが常にその親ピア及びソース・ピアの両方の最新のブロックを参照することを除いて、ブロック及びその相互接続エッジはランダムに作成され、特定のパターンに従わない。この1つの特徴により、ゴシップDAG内のブロックの意味的に一貫性のある時間的順序を、その構造から直接抽出することが可能になる。これは、ゴシップDAG構造でエンコードされる相対的な時間的関係の全範囲を認識し、それを用いてそれらの相対的関係と一致する全てのブロックの全順序付けを生成することによって達成される。
ゴシップDAGでエンコードされる相対的な時間的順序関係には、明示的なもの、暗黙的なもの、任意のもの、冗長なものの4種類がある。明示的な関係とは、あるブロックから別のブロックへのエッジによって直接表わされる関係である。例えば、図1Bでは、ブロックD2は、ブロックD2から他の2つのブロックのそれぞれへの有向エッジがあるので、時間的にブロックD1及びA1の後にある。
暗黙的な時間的関係は、当然のことながら、より微妙であり、最も明白なものは推移的な時間的関係であり、例えば、ブロックAがブロックBへのエッジを有し、ブロックBがブロックCへのエッジを有する場合(すなわち、A→B→C)、ブロックAとブロックCとの間に暗黙的関係が存在する(ブロックAは、ブロックCの後に作成された)。一例として、図1Bでは、ブロックD3とブロックD1との間に暗黙的な時間的関係がある。また、ゴシップDAGは、親及びソースの両方として機能するブロックが果たす二重の役割に関連した別のタイプの暗黙的な時間的関係も含む。この関係は、親変換(parent transform)を議論する際に、図4A~図4Eを参照してさらに説明される。
ゴシップDAG内の2つのブロック間の任意の時間的関係とは、明示的又は暗黙的な時間的順序が表されていないものである。これらの任意の関係は、関係を単純化するために利用できるある程度の柔軟性を許容するので、ブロックの全順序を決定する際に有用である。任意の時間的関係は、ゴシップDAG内で直接見分けるのは困難であり、通常、それらがより明白になる前に、順序グラフにおける変換によって暗黙的な関係を明示的にする必要があり得る。
冗長な時間的関係とは、ブロック間に1つより多いパスが存在するものであり、例えば、ブロックAはブロックBへのエッジを有し、ブロックBはブロックCへのエッジを有し、さらに、ブロックAはブロックCへの(冗長な)エッジも有する(すなわち、A→B→C&A→C)。この例では、AとCとの間の冗長なエッジを除去することができる。全順序と比較すると、ゴシップDAGはエッジの数は大体ちょうど2倍となる(各ピアの第1のブロックは親ブロックを持たないため、削除されないエッジはそれぞれ1つだけなので、ちょうど2倍ではない)。特に、新しいブロックは、同じピアのチェーン内の親ブロックと、別のピアのチェーン内のソース・ブロックとを参照する。そのため、ブロックの連続的な順序を作成する際、コンセンサス全順序を作成する前に、エッジのほぼ半分を除去する必要がある。
協働するピアのセット間の記録されたゴシップ・プロトコル交換から、トランザクションのセットについてのコンセンサス全順序を効率的に抽出する問題に対する解決法は、ブロックのゴシップDAGを使用して、行われたゴシップ接続のレコードを作成し、次に、第2の修正可能なグラフ(本明細書では順序グラフと呼ぶ)を使用して、その中に含まれる時間的関係のセマティクスを保持しながら、そのレコードの構造を線形のものに変更することである。
図1Cは、例示的な実施形態による、図1Bのブロックチェーン上のDAG形式のブロックのブロックチェーン台帳120Bを、DAG形式の順序グラフ130Aに変換するプロセスを示す。この例では、順序グラフ130Aは、ノードをブロックに置き換える。さらに、ブロック間のリンクはエッジで表わされる。順序グラフ130Aは、本質的には、ブロックチェーン台帳120B上のブロックのDAG形式のクローンである。しかしながら、順序グラフ130Aは、ブロックチェーン上のブロックの位置とは異なり、変換を行うように操作することが可能である。順序グラフ130Aは、修正可能なグラフであり、そのコンテンツは、ゴシップDAGと、変換のアクセサリ・セットと、それらの変換を用いて順序グラフ130Aの構造を繰り返し変更し、第2のグラフのノードが、ゴシップDAG内のブロックのコンセンサス全順序に対応する、図1Dに示される順序グラフ130Bに示されるような線形シーケンスを形成するまで、順序グラフ130Aの構造を連続的により線形にする方法とから抽出される。
ゴシップDAGから全順序を抽出するプロセスは、ランダムに織られたリボンから単一の糸を引き出すことに類似しており、リボンはゴシップDAGであり、糸は、図1Dに示すような、順序グラフ130Bにおけるコンセンサス全順序である。図4A~図4Eに関して以下でさらに説明するように、順序グラフに多数の変換が行われ、ゴシップDAGのブロック及びエッジは、作成時に一方の端に入り、全順序が他方から出てくる「アンタングリング・パイプライン(untangling pipeline)」が作成される
このパイプラインの形式は、ゴシップDAG内のブロックのプロキシとして機能するノード(ブロックではない)で構成される、順序グラフと呼ばれる第2の派生グラフのものである。順序グラフの一方の「端」は、ゴシップDAGに各々の新しいブロックが追加されるごとに、新しいノード及び適切なエッジを作成することによって、ゴシップDAGの拡張を追跡する。順序グラフの他方の「端」は、ゴシップDAGの時間的関係と一致するコンセンサス全順序で配置されたノードの線形シーケンスである。その間において、順序グラフは、暗黙的な関係を明示的なものにし、任意の関係を利用し、冗長性を除去する、時間的関係を維持した体系的な変換を受ける。
実際には、コンセンサスの全順序は、順序グラフ130Bから完全なまま現れるように示されるような完全なリストとしては保持されない。代わりに、ノードが全順序に配置されると、ゴシップDAG内の対応するブロックの位置が決定されているので、対応する順序グラフのノードはそれ以上必要ない。従って、それを廃棄することができる。その結果、実際には、ひとたびコンセンサス全順序にノードが配置されるとノードを除去するので、順序グラフは、DAG内のブロックの数に対して少数のノードしか含まないことになる。
ゴシップ・プロトコルは、本質的に「許可型ブロックチェーン」であるピアの間で生じ得る。ゴシップDAGは、各ピアについて1つずつの、それらの間に(ランダムな)相互接続を有するブロックチェーンの並列セットと考えることができる。これらの並列ブロックチェーンの各々は、ピアの各々の1つによって排他的に拡張されるが、各ピアは並列ブロックチェーンの全てのコピーを有する(それがゴシップDAGを構成するものである)。ブロックは、別のピアがそのブロックへの(ランダムな)接続を行うと、その排他的変更でそのピアによって作成される。その際、ピアは、ピアがキャッシュに入れたトランザクションのセットを選択してブロックを作成し、ブロックのヘッダに2つのハッシュ値を入れ、1つは、ピアの排他的ブロックチェーンでこのブロックを進行させるブロックについてのハッシュ値(そのハッシュ値はブロックを効果的にチェーンでつなぐ)であり、もう1つは、(ランダムに)連絡を取ったピアからそれに送られたハッシュ値である。そのハッシュ値は、発信元ピアの排他的ブロックチェーンにおいて最も新しいブロックのものである。このように、ピアは、別のピアがそのピアに連絡を取るまで、ブロックを作成することができない。
このプロセスは、ピアの一方を「開始ピア」として指定することにより、「ブート・ストラップ」することができ、これは、連絡を取らずにそれ自身で最初のブロック(ジェネシス・ブロック)を作成し、その後、他のピアの1つをランダムに選択して他のピアに連絡を取り、そのプロセスにおいてジェネシス・ブロックのハッシュ値を提供することを意味する。他方のピアは、ブロックを作成し、必要に応じて、そのブロックに任意のトランザクションを追加し(全く追加しないことも含む)、排他的ブロックチェーン内の前のブロックについてのヌルのハッシュ値(ハッシュ値がないため)及び受け取ったジェネシス・ブロックのハッシュ値を格納することができる。この時点で、両方のピアは、このプロセスを繰り返すことができるが、まだその排他的ブロックチェーン内にブロックを持っていないピアは、その最初のブロックを作成するまで、連絡を取り得る何らかの他のピアにハッシュ値を提供できないため、連絡を取るのを待つことがある。
2つのピアが互いに連絡を取るときはいつでも、両者が同じブロックのセットを持つように、必要とされるだけのゴシップDAGも交換する。このようにして、ゴシップDAGはピアの間で伝播する。各ピアは、ゴシップDAGのそれ自身の進化した(evolving)コピーと、順序グラフのそれ自身の進化したコピーとを有することは明らかである。明らかではないかもしれないが、DAGは、全てのピアに瞬時に伝搬されるわけではない新しいブロックの追加で並行して拡張されるため、各ピアは、どの時点においても、ゴシップDAGの僅かに不完全なバージョンを有すると予想される。
図2は、例示的な実施形態による、ブロックチェーン・アーキテクチャ構成200を示す。図2を参照すると、ブロックチェーン・アーキテクチャ200は、特定のブロックチェーン要素、例えば、ブロックチェーン・ノード202のグループを含むことができる。ブロックチェーン・ノード202は、1つ又は複数のノード204~210を含むことができる(これらの4つのノードは、単なる例示として示される)。これらのノードは、ブロックチェーン・トランザクションの追加及び検証プロセス(コンセンサス)などの多数の活動に参加する。ブロックチェーン・ノード204~210のうちの1つ又は複数は、エンドースメント・ポリシーに基づいて、トランザクションをエンドースし、アーキテクチャ200内の全てのブロックチェーン・ノードに順序付けサービスを提供することができる。ブロックチェーン・ノードは、ブロックチェーン認証を開始し、ブロックチェーン層216に格納されたブロックチェーン変更不能台帳に書き込もうとすることができ、そのコピーを、基礎をなす物理インフラストラクチャ214上に格納することもできる。ブロックチェーン構成は、格納されたプログラム/アプリケーション・コード220(例えば、チェーンコード、スマート・コントラクトなど)にアクセス及び実行するためにアプリケーション・プログラム・インタフェース(API)222にリンクされた1つ又は複数のアプリケーション224を含むことができ、それは、参加者によって求められたカスタマイズ化構成に従って作成されてもよく、それ自身の状態を維持し、それ自身のアセットを制御し、外部情報を受け取ることもできる。これは、トランザクションとしてデプロイされ、分散型台帳への追記を介して、全てのブロックチェーン・ノード204~210上にインストールすることができる。
ブロックチェーン・ベース又はプラットフォーム212は、ブロックチェーンのデータ、サービス(例えば、暗号トラスト・サービス、仮想実行環境など)、及び基礎をなす物理コンピュータ・インフラストラクチャの種々の層を含むことができ、これらの層を使用して、新しいトランザクションを受け取って格納し、データ・エントリにアクセスしようとしている監査者(auditor)にアクセスを提供することができる。ブロックチェーン層216は、プログラム・コードを処理し、物理インフラストラクチャ214に関与するために必要な仮想実行環境へのアクセスを提供するインターフェースを公開することができる。暗号トラスト・サービス218を使用して、アセット交換取引などのトランザクションを検証して、情報を非公開にしておくことができる。
図2のブロックチェーン・アーキテクチャ構成は、ブロックチェーン・プラットフォーム212により、1つ又は複数の公開されるインターフェース及び提供されるサービスを介してプログラム/アプリケーション・コード220を処理し、実行することができる。コード220は、ブロックチェーン・アセットを制御することができる。例えば、コード220は、データを格納し、転送することができ、また、スマート・コントラクト及びその実行の対象となる条件又は他のコード要素と関連付けられたチェーンコードの形態で、ノード204~210によって実行することもできる。限定されない例として、スマート・コントラクトは、リマインダ、更新、もしくは変更、更新などを対象とする他の通知、又はそれらの組み合わせを実行するために作成することができる。スマート・コントラクトは、それ自身を使用して、権限付与及びアクセス要件、並びに台帳の使用と関連付けられた規則を特定することができる。例えば、読み出しセット226は、ブロックチェーン層216内に含まれる1つ又は複数の処理エンティティ(例えば、仮想マシン)によって処理することができる。書き込みセット228は、1つ又は複数のスマート・コントラクトを介して読み出しセット226を処理した結果を含むことができる。物理インフラストラクチャ214を利用して、本明細書に説明されるデータ又は情報のうちのいずれかを取り出すことができる。
スマート・コントラクトを、高レベル・アプリケーション及びプログラミング言語によって作成し、次いで、ブロックチェーン内のブロックに書き込むことができる。スマート・コントラクトは、ブロックチェーン(例えば、ブロックチェーン・ピアの分散型ネットワーク)により、登録、格納、もしくは複製、又はそれらの組み合わせを行う実行可能コードを含むことができる。トランザクションは、スマート・コントラクトと関連付けられた条件が満たされたことに応じて実行できるスマート・コントラクト・コードの実行である。スマート・コントラクトの実行は、デジタル・ブロックチェーン台帳の状態への信頼できる修正をトリガすることができる。スマート・コントラクトの実行によってもたらされたブロックチェーン台帳への修正は、1つ又は複数のコンセンサス・プロトコルを通してブロックチェーン・ピアの分散型ネットワークの全体にわたって自動的に複製され得る。
スマート・コントラクトは、キー値ペア(key-value pair)の形式でブロックチェーンにデータを書き込むことができる。さらに、スマート・コントラクトのコードは、ブロックチェーンに格納された値を読み出し、それをアプリケーション操作で使用することができる。スマート・コントラクトのコードは、様々な論理演算の出力をブロックチェーンに書き込むことができる。コードを使用して、仮想マシン又は他のコンピューティング・プラットフォーム内に一時的なデータ構造を作成することができる。ブロックチェーンに書き込まれたデータは、公開とすることができ、もしくは暗号化し非公開にしておくことができ、又はその組み合わせを行うことができる。スマート・コントラクトによって使用/生成された一時データは、与えられた実行環境によってメモリに保持され、次いで、ブロックチェーンで必要とされるデータが特定されると、削除される。
チェーンコードは、追加の機能とともに、スマート・コントラクトのコード解釈を含むことができる。本明細書で説明するように、チェーンコードは、コンセンサス・プロセスの間にチェーン検証ソフト(validator)によって一緒に実行及び検証される、コンピューティング・ネットワーク上にデプロイされたプログラム・コードとすることができる。チェーンコードは、ハッシュを受け取り、以前に格納された特徴抽出器の使用によって作成されたデータ・テンプレートと関連付けられたハッシュをブロックチェーンから取り出す。ハッシュ識別子のハッシュと、格納された識別子テンプレート・データから作成されたハッシュとが一致した場合、チェーンコードは、認証キーを要求されたサービスに送る。チェーンコードは、暗号の詳細と関連付けられたブロックチェーン・データに書き込むことができる。
図3Aは、分散型、非集中型ピア・ツー・ピア・アーキテクチャを特徴とする許可型ブロックチェーン・ネットワーク300の一例を示す。この例では、ブロックチェーン・ユーザ302が、許可型ブロックチェーン304に対するトランザクションを開始することができる。この例では、トランザクションは、デプロイ、呼び出し、又は照会とすることができ、SDKを利用するクライアント側アプリケーションを通じて、APIなどを介して直接、発行することができる。ネットワークは、監査者などのレギュレータ306へのアクセスを提供することができる。ブロックチェーン・ネットワーク・オペレータ308は、レギュレータ306を「監査者」として登録し、ブロックチェーン・ユーザ302を「クライアント」として登録するなど、メンバーの許可を管理する。監査者は台帳の照会のみに制限され得るのに対し、クライアントは、特定のタイプのチェーンコードをデプロイし、呼び出し、及び照会する権限が付与され得る。
ブロックチェーン開発者310は、チェーンコード及びクライアント側アプリケーションを書くことができる。ブロックチェーン開発者310は、インターフェースを通して、チェーンコードをネットワークに直接デプロイすることができる。従来のデータ・ソース312からの信任状(credential)をチェーンコード内に含ませるために、開発者310は、帯域外(out-of-band)接続を使用してデータにアクセスすることができる。この例では、ブロックチェーン・ユーザ302は、ピア・ノード314を通して、許可型ブロックチェーン304に接続する。ピア・ノード314は、任意のトランザクションを進める前に、ユーザの役割と許可を管理する認証局316から、ユーザの登録及びトランザクション証明書を取り出す。場合によっては、ブロックチェーン・ユーザは、許可型ブロックチェーン304上で取引を行うために、これらのデジタル証明書を所有しなければならない。一方、チェーンコードを利用しようとするユーザは、従来のデータ・ソース312上でその認証情報を検証することが求められる場合がある。ユーザの権限付与を確認するために、チェーンコードは、従来の処理プラットフォーム318を通して、このデータへの帯域外接続を使用することができる。
図3Bは、分散型、非集中型ピア・ツー・ピア・アーキテクチャを特徴とする、許可型ブロックチェーン・ネットワーク320の別の例を示す。この例では、ブロックチェーン・ユーザ322は、トランザクションを許可型ブロックチェーン324にサブミットすることができる。この例では、トランザクションは、デプロイ、呼び出し、又は照会とすることができ、SDKを利用するクライアント側アプリケーションを通じて、APIなどを介して直接、発行することができる。ネットワークは、監査者などのレギュレータ326へのアクセスを提供することができる。ブロックチェーン・ネットワーク・オペレータ328は、レギュレータ326を「監査者」として登録し、ブロックチェーン・ユーザ322を「クライアント」として登録するなど、メンバーの許可を管理する。監査者は台帳の照会のみに制限され得るのに対し、クライアントは、特定のタイプのチェーンコードをデプロイし、呼び出し、及び照会する権限が付与され得る。
ブロックチェーン開発者330は、チェーンコード及びクライアント側アプリケーションを書く。ブロックチェーン開発者330は、インターフェースを介してチェーンコードをネットワークに直接デプロイすることができる。従来のデータ・ソース332からの認証情報をチェーンコードに含ませるために、開発者330は、帯域外接続を使用してデータにアクセスすることができる。本例では、ブロックチェーン・ユーザ322は、ピア・ノード334を通してネットワークに接続する。ピア・ノード334は、任意のトランザクションを進める前に、認証局336からユーザの登録及びトランザクション証明書を取り出す。場合によっては、ブロックチェーン・ユーザは、許可型ブロックチェーン324上で取引を行うために、これらのデジタル証明書を所有していなければならない。一方、チェーンコードを利用しようとするユーザは、従来のデータ・ソース332上でその認証情報を検証することが求められる場合がある。ユーザの権限付与を確認するために、チェーンコードは、従来の処理プラットフォーム338を通して、このデータへの帯域外接続を使用することができる。
幾つかの実施形態において、本明細書でのブロックチェーンは、自由参加型ブロックチェーンとすることができる。参加するのに許可を必要とする許可型ブロックチェーンとは対照的に、誰でも自由参加型ブロックチェーンに参加することができる。例えば、自由参加型ブロックチェーンに参加するために、ユーザは個人アドレスを作成し、トランザクションをサブミットすることによって、従って、エントリを台帳に追加することによって、ネットワークとの対話を開始することができる。さらに、全ての当事者は、システム上でノードを実行し、トランザクションの検証を助けるために、マイニング・プロトコルを採用する選択肢をもつ。
図3Cは、トランザクションが、複数のノード354を含む自由参加型ブロックチェーン352によって処理されるプロセス350を示す。送信者(sender)356は、自由参加型ブロックチェーン352を介して、受信者358に支払い又は何らかの他の形の価値(例えば、証書、医療記録、契約、商品、サービス、又はデジタル記録にカプセル化することができる何らかの他のアセット)を送りたいと願う。一実施形態では、送信者デバイス356及び受信者デバイス358の各々は、ユーザ・インタフェース制御及びトランザクション・パラメータの表示を提供する(ブロックチェーン352と関連付けられた)デジタル・ウォレットを有することができる。これに応答して、トランザクションは、ブロックチェーン352全体にわたって、ノード354にブロードキャストされる。ブロックチェーン352のネットワーク・パラメータに応じて、ノードは、自由参加型ブロックチェーン352の作成者によって確立された規則(事前に定義されたものであっても、又は動的に割り当てられたものであってもよい)に基づいて、トランザクションを検証360する。例えば、これは、関与する当事者のアイデンティティを検証することなどを含むことができる。トランザクションは直ちに検証することができ、又は他のトランザクションと共にキューに入れてもよく、ノード354は、ネットワーク規則のセットに基づいてトランザクションが有効かどうかを判断することができる。
構造化362では、有効なトランザクションがブロックに形成され、ロック(ハッシュ)でシールされる。このプロセスは、ノード354の中のマイニング・ノードによって実行することができる。マイニング・ノードは、自由参加型ブロックチェーン352のためのブロックのマイニング及び作成専用の追加のソフトウェアを利用することができる。各ブロックは、ネットワークによってコンセンサスが得られたアルゴリズムを用いて作成されたハッシュ(例えば、256ビット数など)によって識別することができる。各ブロックは、ヘッダ、チェーン内の前のブロックのヘッダのハッシュへのポインタ又は参照、及び有効なトランザクションのグループを含むことができる。前のブロックのハッシュへの参照は、ブロックの安全な独立したチェーンの作成と関連付けられる。
ブロックをブロックチェーンに追加できる前に、ブロックを検証しなければならない。自由参加型ブロックチェーン352に対する検証は、ブロックのヘッダから得られるパズルに対する解決法であるプルーフ・オブ・ワーク(PoW)を含むことができる。図3Cの例では示されないが、ブロックを検証するための別のプロセスは、プルーフ・オブ・ステーク(proof-of stake)である。アルゴリズムが数学的問題を解決するマイナに報酬を与えるプルーフ・オブ・ワークとは異なり、プルーフ・オブ・ステークでは、新しいブロックの作成者は、「ステーク」としても定義される富に応じて、決定論的な方法で選ばれる。次いで、選択された/選ばれたノードにより、類似の証明が行われる。
マイニング364では、ノードは、解決法がネットワーク全体の目標を満たすまで、1つの変数にインクリメンタルな変更を加えることによって、ブロックを解決しようと試みる。これにより、PoWが作成され、それにより、正しい解答が保証される。言い換えれば、潜在的な解決法は、問題を解決する際にコンピューティング・リソースが消耗したことを証明しなければならない。幾つかのタイプの自由参加型ブロックチェーンでは、ブロックを正しくマイニングすることによって、マイナーに報酬(例えば、コインなど)を与えることができる。
ここで、PoWプロセスでは、ブロックの連鎖と比べて、攻撃者が1つのブロックの修正を受け入れるために、全ての後続のブロックを修正しなければならないため、ブロックチェーンの修正が極めて困難になる。さらに、新しいブロックがマイニングされると、ブロックを修正する困難さが増し、後続のブロックの数も増加する。配布366では、正常に検証されたブロックが、自由参加型ブロックチェーン352を通して配布され、全てのノード354は、自由参加型ブロックチェーン352の監査可能な台帳である大多数のチェーンにブロックを追加する。さらに、送信者356によってサブミットされたトランザクションの価値は、受信者デバイス358のデジタル・ウォレットに入金されるか、又は他の方法で転送される。
図4Aは、図1C及び図1Dに示される順序グラフ130Aに対応する順序グラフ400Aを示す。図4B~図4Eに関して説明される変換は、図4Aに示される順序グラフ400Aが、どのようにして図4Eに示されるような連続的な線形順序を有する順序グラフ400Eになるかを示す。変換は、それぞれDAGブロックチェーン内のブロック及びブロック間のハッシュ・リンクを表すノード402及びエッジ404を含む順序グラフ400Aの構造に基づいている。
順序グラフは、親変換、サイクル変換、及びパス変換を含む、相対的な時間的順序を保持する3つの変換を適用することによって修正することができる。親変換は、暗黙的関係を明示的にする役割を担う。サイクル変換は、ゴシップ・プロトコルによって引き起こされる任意の順序関係(例えば、2つのピアが互いに同時に連絡を取り、2つのブロックが作成された場合などに、どのブロックが最初に配置されるべきかを特定するなど)を除去する役割を担う。サイクル変換と同様に、パス変換は、グラフ内の無関係だが並行するパスから生じる任意の時間的関係を除去する役割を担う。また、パス変換は、ノード間の複数のパスを特定し、除去することにより、冗長エッジを除去する役割も担う。
図4Bは、例示的な実施形態による、順序グラフ400A内のノードに対して親変換を行って、修正された順序グラフ400Bを作成するプロセス410を示す。ゴシップDAGでは、ゴシップ・プロトコルの結果として作成されたブロック間の関係が明示的に表される。例えば、あるピアへのゴシップ接続を記録するために作成されたブロックは、その親ブロック(このピアへの以前の接続のために作成されたもの)へのエッジと、そのソース・ブロック(開始ピアが所有する)へのエッジとを有する。図4A及び図4Bを参照すると、1つのブロックが親ブロック及びソース・ブロックの両方として機能することができる。例えば、順序グラフ400A内のブロックB2は、ブロックB3の親であり、ブロックC3及びA3のソースである。この場合、親ブロックB2は、それを参照する他のノードよりも(明らかに)古い。しかしながら、子ブロック(B3)と、その子ブロックの親ブロック(B2)をソース・ブロックとして有するブロック(C3及びA3)の各々との間には、ゴシップDAGでは表わされない時間的関係が存在する。
ソース・ブロックであるブロックは、1つだけでなく、多くの別個のゴシップ接続のためのソース・ブロックとすることができる。しかしながら、別のピアが親ブロックのピアへの接続を開始したときにのみ、親ブロックになる。この接続により、その親の子ブロックが作成される。子ブロックが作成されると、親ブロックはもはや将来の接続のためのソース・ノードにはならず、作成されたばかりの子ブロックがその役割に置き換わる。つまり、全ての子ブロックは、親ブロックをソース・ブロックとして使用するブロックの後に暗黙的に作成される(すなわち、ブロックB3は、ブロックC3及びA3の後に作成される)。
図4Bに示される親変換は、この暗黙的な時間的関係を明示的なものにするように順序グラフを修正する。ここで、親変換は、各々の子ノードからのエッジ414を、子ノードの親ノードをそのソース・ノードとして参照する各々の他のノードに追加することができる。冗長性の導入を避けるために、親変換は、子ノードからその親ノードへのエッジ412を除去することによっても順序グラフを修正するが、それは、それらの時間的関係(子が親の後に来る)が、順序グラフにおいて、子から、新しいエッジを通って、親をそのソースとして使用するノード、そして親ノードへのパスによって依然として(暗黙的に)推移的に表されるからである。図4Bは、子ノードCが親ノードPと関係を有し、ノードXが親ノードPと関係を有する(Pはそのソース・ノードである)親変換を示す。親変換では、ノードCからノードPへのエッジ412が除去され、ノードCからノードXへのエッジ414に置き換えられる。さらに、親変換を、図4Aに示す元の順序グラフ400Aに適用した結果が、図4Bに示す修正された順序グラフ400Bに示される。ここでは、新たに追加された水平方向エッジが破線で表され、D2~D1間、C3~C2間、B3~B2間、A3~A2間、及びA2~A1間のような、親・子ノードのペア間のエッジが除去される。元の順序グラフ400Aに変更を加える際に、親変換は、ノードC3とB3との間にサイクル(すなわち、ループ)を作成/顕在化している。さらに、エッジのタングルの中であまり明白ではないが、ノードD2、C2、B2、及びA2をリンクする親変換によって作成された別のサイクルがある。
図4Cは、例示的な実施形態による、順序グラフ400Bにおけるノードにサイクル変換を行って修正された順序グラフ400Cを作成するプロセス420を示す。有向非巡回グラフであるゴシップDAGは、当然のことながらいずれのサイクルも含まず、ゴシップDAGの拡張に合わせて新しいノード及びエッジを順序グラフに作成しても、サイクルは順序グラフ内に直接的には導入されない。しかしながら、順序グラフは、変換プロセスの一部として作成されたサイクルを有することができる。順序グラフ内のサイクルは、暗黙的な時間的関係を明示的なものにする、前述の親変換の適用によってもたらされる。サイクルを形成する背景にある知識は、同時接続を行うピアによってもたらされる、DAG内のブロックの並行作成を捕捉することである。親変換の適用により、親/ソース・ノードと同じ相対関係を有する順序グラフ内のノード間に新しいエッジが作成され、従って、周期的な時間的依存関係を顕在化させる。
図4Cを参照すると、サイクルは、相対的順序が任意であるノードのセットから構成され、2つのピアが互いにゴシップ接続を同時に開始したとき(すなわち、A→B&B→A)、又は2つより多いピアが「循環」するように(in a "circular manner")ゴシップ接続を開始したときに生じ、4つのノードのサイクル、すなわちA→B→C→D→Aを有する後者のシナリオの例が、図4Cに示される。順序グラフ内のサイクルにおけるノードは、本質的には時間的に等しく、それは、互いに対してその順序が任意であることを意味する。サイクル変換は、サイクル内のノードを、順序グラフから「除去」し、単一のサイクル・ノード422に置き換えられるように集約することによって、この状況を処理する。サイクル内のノードのいずれか1つに対する順序グラフ内のエッジは、今や新しいサイクル・ノード422を参照するように変更される。
新しいサイクル・ノード422は、サイクルを形成するノードへの参照を維持するので、サイクル・ノードの位置が全順序で決定されるときに後で利用可能であり、その時点で、サイクル内のノードは、互いに対して相対的な順序で決定論的に配置され、その後、その順序において、全順序におけるサイクル・ノードに取って代わる。この例は、図4Cに示されており、ここでは、ノードC3及びB3がサイクル・ノード424に変換され、ノードD2、C2、B2、及びA2はサイクル・ノード426に変換されて、修正された順序グラフ400Cが作成される。これらのサイクル・ノード424及び426によってカプセル化されたノードの順序を最終的に解決する前に、ピアは、サイクル・ノード424及び426への冗長パスが除去されるまで、追加の変換を行うことができる。その時点で、サイクル・ノード424及び426によってカプセル化されたノードは、図4Eに関してさらに説明されるように、相対的順序に配置し、次いで、コンセンサス全順序に挿入することができる。
図4Dは、例示的な実施形態による、順序グラフ400C内のノードにパス変換を行って、修正された順序グラフ400Dを作成するプロセス430を示す。パス変換は、順序グラフから、冗長な時間的関係及び任意の時間的関係の両方を除去する役割を担う。冗長な時間的関係とは、2つのノードXとZとの間の時間的順序を明示的に指定し(すなわち、XからZへのエッジを有することによって)、ノードXとZとの間の順序グラフ内に存在するより長いパスによっても推移的に表されるものである(より長いパスは、最も多くの時間的関係情報を含むので保持される)。任意の時間的関係は、ゴシップ・ピアによってなされた接続のランダム性の結果生じるノード間のパラレル・パス(parallel path)によって表される。図4Dの例では、ノードXとZとの間に2つの冗長パスがある。特に、エッジ431を通るパスと、エッジ432、433、及びノードYを通る第2のパスとがある。
この例では、ノードXからノードZへのエッジ431は、ノードXが時間的にノードZの後にあることを示す。同様に、ノードYからノードZへのエッジ433は、ノードYも時間的にノードZの後であることを示し、ノードXからノードYへのエッジ432は、ノードXが時間的にノードYの後であることを示す。ノードXからノードZへのエッジ431は、時間的にXがZの後である(すなわち、X→Y→Z)という情報を失うことなく除去することができる。この変換は、基本的に、親ノードと子ノードとの間の冗長エッジを除去する親変換の半分であり、残りの半分は、子ノードとその親をそのソース・ノードとして参照するノードとの間のエッジを追加するので、見覚えがあるはずである。親変換は、後でパス変換が除去するように、子から親へのエッジを完全なまま残すことによって「単純化」することができるが、冗長性を再発見するために、パス変換で順序グラフを再処理するのではなく単にそれを除去することは、明らかな最適化である。
図4Dのプロセス430において、パス変換を適用して、順序グラフ400Cに示される全ての冗長パスを除去して、修正された順序グラフ400Dを作成することができる。特に、サイクル変換後、順序グラフ400Cは、パス変換が直接除去するかなりの数の冗長な関係を有していた。例えば、サイクル・ノード426→A1のエッジは、サイクル・ノード426→B1→A1のパスのために冗長であり、従って、除去することができる。同時に、サイクル・ノード426→B1も、サイクル・ノード426→C1→B1のパスのために冗長であり、従って、除去することができる。それだけでなく、サイクル・ノード426→C1の間のエッジも、サイクル・ノード426→D1→C1のパスのために冗長であり、同様に除去することができる。これにより、冗長でないサイクル・ノード426→D1から単一のエッジが残り、それらのノード間の時間的関係の全てを具体化するサイクル・ノード426→D1→C1→B1→A1のパスを保持する。同様の変換は、サイクル・ノード424及び他の冗長パスに対して行うことができ、その結果、修正された順序グラフ400Dが得られる。
順序グラフ400Dの結果は、ノードD4から開始し、ノードA1まで続くノードの線形シーケンスであり、これは、ほぼコンセンサス全順序である。残る唯一のステップは、2つのサイクル・ノード424及び426内のノードの順序を解決することである。例えば、サイクル・ノード426内のノードD2、C2、B2、A2の全てがノードD1の後にかつノードD3の前に来るので、システムは、それらを任意に相対的なチェックサムの番号順に並べて(最小のものが最初)、ノードをサイクル・ノード426の場所に戻すことができる。同様のことを、サイクル・ノード424内のノードC3及びB3に対しても行うことができる。結果は、図4Eに示されており、結果として、コンセンサス全順序を表す修正された順序グラフ400Eが得られる。
サイクル内のノードを任意に順序付けするアルゴリズムは、デフォルトで、単にブロックをそのハッシュ値で「ソート」するように指定することができる。これは、任意であり、操作が困難であり、全く同じ結果を得るために異なるピアによって再現可能であるが、他の技術を使用することもできる。幾つかの実施形態では、使用されるアルゴリズムは、任意のピアを実行する前に構成時に選択することができる(そして、全てのピアが同じ構成を有する)。これを行う1つの方法は、「依存性注入(dependency injection」をサポートするプログラミング・フレームワークを使用することである。この考えは、コードの実行開始時に、フレームワークからの初期化コードのビットを実行し、現在の構成を調べ、次いで、選択されたアルゴリズムのインスタンスを作成するというものである。その後、特別な技術を用いて、アルゴリズムを使用するコードを修正し、構成によって選択され、フレームワークによって作成されたアルゴリズムへの参照を得る。これは、「依存性」(アルゴリズム)が、それを使用するコードに「注入」されることから、依存性注入と呼ばれる。これは極めて柔軟で強力な技術である。
図4A~図4Eに示されないが、場合によっては、ゴシップ・プロトコルは、独立した並列の時間的依存関係を作成することができ、これは、ブロックのコレクションの間にいずれの関係も持たないブロックのシーケンスがゴシップDAGに存在することができ、従って、シーケンスの順序は任意であることを意味する。これは、基本的に、最終的に順序グラフ内のサイクルをもたらす同時並列ゴシップ接続のシナリオの拡張バージョンであるが、この場合を除いて、順序グラフ内に独立したパラレル・パスをもたらす。
順序グラフ内のパラレル・パスは冗長性を表し、最終的なコンセンサス全順序を決定するために解決する必要がある。パラレル・パスは時間的等価性を表すこともでき、これはゴシップDAGにブロックが実質的に「同時に」作成されることを意味する。2つの異なるパラレル・パス上のブロックは、それらの間にエッジがないため、コンセンサス全順序の相対的な位置のためにそれらを直接関連付ける方法がなく、時間的に同等であると考える必要がある。これは、サイクル内のブロックが、先に来た1つのブロックを選択することができない場合と同じ状況である。
パラレル・パスを処理する1つの方法は、順序グラフ内でそれらを積極的に検出し(すなわち、検索し)、次に、最も単純な場合には、最短のパスを表す単一のエッジを除去するか、又は、サイクルに対して行われるように、ノード/パスを抽出し、それらを単一の集約ノードに置き換えることである。しかしながら、これは、順序グラフ内に存在し得る異なるパスをトラバースして、たまたまパラレルであるパスを探すために、著しい処理サイクルを消費し、パラレル・パスがあった場合には、解決が複雑になることがある。別のより効率的な手法は、ブロックがコンセンサス全順序でグラフから放出される時点まで、パラレル・パスを順序グラフに残すことである。その時点で、パラレル・パスの性質に起因して、どのブロックが時間的に等価であり、どのブロックがそうでないかが単純化して明らかになる。同じ(不確定な)時間的位置にあるブロックを抽出し、単一の集約ブロックに置き換えることができる(サイクルに対して行われるように)。その集約ブロックが順序グラフから放出されると、それが表すブロックは、集約されたサイクル・ブロックと同じ方法で、コンセンサス全順序に入れられる。
ブロックを順序グラフからコンセンサス全順序における次のブロックとして放出するプロセスは、順序グラフにおいてそれに入るエッジのみを有する単一のブロックである指定されたコンセンサス候補を有することから始まり、これは、コンセンサス時間的順序において全ての他のブロックがそれの後に来ることを意味する。ブロックは、それへのエッジを有する順序グラフ内に単一のブロックだけがあるときに、順序グラフから放出することができる。次に、そのブロックは、新しいコンセンサス候補となる。順序グラフ内にパラレル・パスがある場合、複数の入力エッジを持つコンセンサス候補が存在することになる。この時点で、パラレル・パスを解決することができる。
単純な観察に基づいて行動することにより、解決を達成することができる。例えば、コンセンサス候補へのエッジを有するブロックは、1つの単一エッジ(コンセンサス候補へのもの)のみを有するものと、1つより多いエッジを有するものとの2つのグループに分割することができる。1つより多いブロックへのエッジを有するブロックも、(それらの他のエッジに従うことにより)コンセンサス候補ブロックへの1つより多いパスを有する。それらのエッジのうち、コンセンサス候補に直接入射するエッジは、最短のもの(長さ1)でなければならないので、それは冗長であり(より長いパスが好ましい)、それを順序グラフから除去することができる。前者のグループ内のブロック、つまりコンセンサス候補に入射する単一のエッジしかないブロックは、時間的に等価なブロックである。これらのブロックは、順序グラフから抽出され、サイクル内のブロックに利用されたのと同じ方法で集約される。
抽出及び置換が完了し、順序グラフ内の全てのエッジが変更を反映するように更新されると、その時点でコンセンサス候補ブロックの後には、単一のブロック、すなわち新しい集約ブロックだけが続き、それをグラフから放出することができる。そうなると、次に、新しい集約ブロックは新しいコンセンサス候補ブロックとなり、このプロセスが繰り返される。
図5は、例示的な実施形態による、DAG形式のブロックチェーンからコンセンサス順序を決定する方法500を示す。図5を参照すると、510において、方法は、ブロックが複数のブロックに独立してハッシュ・リンクされる有向非巡回グラフ(DAG)形式を含むブロックチェーンから、ブロックのチェーンを受け取ることを含むことができる。各ブロックは、親ブロックにリンクすることができる。さらに、ブロックは、DAG形式を有するブロックチェーン内の親ではない他のブロックにもリンクすることができる。ここで、ブロックは、親ブロックのハッシュ値と、他のブロックのハッシュ値とを含み、それにより、ブロックをチェーン内の複数の他のブロックに独立してリンクすることができる。ブロックの順序を操作するために、システムは、DAG形式で配置されたブロックを、対応するブロック間のリンクされた関係を表すようにエッジによりノードが接続されたDAG形式のノードの対応するグラフに変換することができる。幾つかの実施形態では、DAG形式のブロックのチェーンは、複数のピアのブロックの線形チェーンの複数のサブセットを含むことができ、ブロックの線形チェーンの複数のサブセットは、それらの間の相互接続を含む。
520において、方法は、DAG形式のブロックのチェーンの構造に基づいて、ブロックのチェーン内のブロック間の時間的関係を識別することを含むことができる。例えば、時間的関係は、ノード間の暗黙的な関係に基づいたノードのグラフ内の構造変換に基づいて決定することができる。暗黙的な関係は、一貫性に欠け、偽造されやすいタイムスタンプに頼るのではなく、ノード自体の構造から検出することができる。ノードのDAGグラフは、親変換、サイクル変換、及びパス変換を含む種々の変換に基づいて、ノードの線形グラフに変換することができる。
幾つかの実施形態において、識別することは、ブロックのチェーンをクローンすること、さもなければブロックのチェーンを、ノードがブロック間のハッシュ・リンクを表すエッジを間に有するDAG形式のグラフ上のノードのチェーンに変換することを含むことができる。この例では、時間的関係を識別することは、グラフ上のノード間のエッジの構造に基づいて時間的関係を識別することを含むことができる。幾つかの実施形態では、識別することは、子ノードからのエッジを、子ノードの親ノードにリンクされたノードに追加し、子ノードと親ノードとの間のエッジを除去することを介して、グラフ上の親関係を変換することを含むことができる。
幾つかの実施形態において、識別することは、同じ相対的な時間的関係を有するノードを集約して、集約されたノードを包含する単一のサイクル・ノードにすることを介して、グラフ上の巡回型ノード(cyclical node)(完全なループを作成するエッジを有する)を変換することを含むことができる。幾つかの実施形態において、サイクル・ノードを変換することは、予め定義されたプロトコルに基づいて、単一のサイクル・ノード内に包含される集約されたノードの中の順序を作成することを含むことができる。幾つかの実施形態では、識別することは、グラフ上のノードのペア間の2つの異なるパスを識別し、2つの異なるパスのうちノードのペア間のより短い方のパスを除去することとを含むことができる。
530において、方法は、識別された時間的関係に基づいて、DAG形式のブロックのチェーンの連続的な線形順序を決定することを含むことができ、540において、方法は、ブロックのチェーンの連続的な線形順序を格納することを含むことができる。従って、方法は、DAG形式を、ブロックチェーン上の従来のブロック・シーケンスにおけるような線形形式にアンタングルすることができる。幾つかの実施形態では、方法は、ブロックのチェーンの連続的な線形順序に基づいて、複数のピア・ノードでブロックチェーン・コンセンサス・プロセスを行うことをさらに含むことができる。例えば、方法500を行うブロックチェーン・ノードは、コンセンサス・プロセスを行い、ブロックのチェーンの線形順序を提供して、ブロックチェーン・ノードがブロックチェーンの一部であり、その台帳が完全性を有することを検証することができる。
図6Aは、例示的な実施形態による、種々のオペレーションを実行するように構成された物理インフラストラクチャ610を含む例示的なシステム600を示す。図6Aを参照すると、物理インフラストラクチャ610は、モジュール612及びモジュール614を含む。モジュール614は、ブロックチェーン620及びスマート・コントラクト630(ブロックチェーン620上に常駐してもよい)を含み、例示的な実施形態のいずれかに含まれる(モジュール612内の)動作ステップ608のいずれかを実行することができる。ステップ/オペレーション608は、説明される又は図示される実施形態のうちの1つ又は複数を含むことができ、1つ又は複数のスマート・コントラクト630もしくはブロックチェーン620又はその両方との間で読み書きされる出力又は書き込まれた情報を表すことができる。物理インフラストラクチャ610、モジュール612、及びモジュール614は、1つ又は複数のコンピュータ、サーバ、プロセッサ、メモリ、もしくは無線通信デバイス、又はそれらの組み合わせを含むことができる。さらに、モジュール612及びモジュール614は、同じモジュールとすることができる。
図6Bは、例示的な実施形態による、種々のオペレーションを実行するように構成された別の例示的なシステム640を示す。図6Bを参照すると、システム640は、モジュール612及びモジュール614を含む。モジュール614は、ブロックチェーン620及びスマート・コントラクト630(ブロックチェーン620上に常駐してもよい)を含み、例示的な実施形態のいずれかに含まれる(モジュール612内の)動作ステップ608のいずれかを実行することができる。ステップ/オペレーション608は、説明される又は示される実施形態のうちの1つ又は複数を含むことができ、1つ又は複数のスマート・コントラクト630もしくはブロックチェーン620又はその両方との間で読み書きされる出力又は書き込まれた情報を表すことができる。物理インフラストラクチャ610、モジュール612、及びモジュール614は、1つ又は複数のコンピュータ、サーバ、プロセッサ、メモリ、もしくは無線通信デバイス又はその組み合わせを含むことができる。さらに、モジュール612及びモジュール614は、同じモジュールとすることができる。
図6Cは、例示的な実施形態による、契約当事者間のスマート・コントラクト構成と、ブロックチェーン上でスマート・コントラクト条項を強制するように構成された調停サーバとを利用するように構成された例示的なシステムを示す。図6Cを参照すると、構成650は、通信セッション、アセット移転セッション、又は1つ又は複数のユーザ・デバイス652もしくは656又はその両方を明示的に特定するスマート・コントラクト630によって推進されるプロセス又は手順を表すことができる。スマート・コントラクト実行の実行、オペレーション、及び結果は、サーバ654によって管理することができる。スマート・コントラクト630のコンテンツは、スマート・コントラクト・トランザクションの関係者であるエンティティ652及び656の1又は複数によるデジタル署名を必要とすることがある。スマート・コントラクト実行の結果は、ブロックチェーン・トランザクションとしてブロックチェーン620に書き込むことができる。スマート・コントラクト630は、ブロックチェーン620上に常駐し、ブロックチェーン620は、1つ又は複数のコンピュータ、サーバ、プロセッサ、メモリ、もしくは無線通信デバイス又はそれらの組み合わせ上に常駐することができる。
図6Dは、例示的な実施形態による、ブロックチェーンを含むシステム660を示す。図6Dの例を参照すると、アプリケーション・プログラミング・インターフェース(API)ゲートウェイ662は、ブロックチェーン論理(例えば、スマート・コントラクト630又は他のチェーンコード)及びデータ(例えば、分散型台帳など)にアクセスするための共通のインターフェースを提供する。この例では、APIゲートウェイ662は、1つ又は複数のエンティティ652及び656をブロックチェーン・ピア(すなわち、サーバ654)に接続することによって、ブロックチェーン上でトランザクション(呼び出し、照会など)を行うための共通のインターフェースである。ここで、サーバ654は、ワールド状態のコピーと、クライアント652及び656がワールド状態のデータを照会することを可能にする分散型台帳とを保持するだけでなく、スマート・コントラクト630及びエンドースメント・ポリシーに応じて、エンドースメント・ピアがスマート・コントラクト630を実行するブロックチェーン・ネットワークにトランザクションをサブミットするブロックチェーン・ネットワーク・ピア・コンポーネントである。
上記の実施形態は、ハードウェアで、プロセッサによって実行されるコンピュータ・プログラムで、ファームウェアで、又は上記の組み合わせで実施することができる。コンピュータ・プログラムは、ストレージ媒体などのコンピュータ可読媒体上に具体化することができる。例えば、コンピュータ・プログラムは、ランダムア・アクセス・メモリ(「RAM」)、フラッシュ・メモリ、読み出し専用メモリ(「ROM」)、消去可能なプログラム可能読み出し専用メモリ(「EPROM」)、電気的に消去可能なプログラム可能読み出し専用メモリ(「EEPROM」)、レジスタ、ハードディスク、取り外し可能ディスク、コンパクト・ディスク読み出し専用メモリ(「CD-ROM」)、又は当技術分野で知られているいずれかの他の形態のストレージ媒体内に常駐することができる。
例示的なストレージ媒体は、プロセッサがストレージ媒体から情報を読み出し、ストレージ媒体に情報を書き込むことができるように、プロセッサに結合することができる。代案として、ストレージ媒体はプロセッサと一体であってもよい。プロセッサ及びストレージ媒体は、特定用途向け集積回路(ASIC)内に存在してもよい。代案として、プロセッサ及びストレージ媒体は、個別のコンポーネントとして存在してもよい。
図7Aは、例示的な実施形態による、新しいブロックが分散型台帳720に追加されるプロセス700を示し、図7Bは、例示的な実施形態による、ブロックチェーンのための新しいデータ・ブロック構造730のコンテンツを示す。図7Aを参照すると、クライアント(図示せず)は、ブロックチェーン・ノード711、712もしくは713又はそれらの組み合わせにトランザクションをサブミットすることができる。クライアントは、ブロックチェーン720上で活動を実行するために任意のソースから受け取った命令であってもよい。一例として、クライアントは、ブロックチェーンに対してトランザクションを提案するための、デバイス、人、又はエンティティなどの要求者の代わりに行動するアプリケーションであってもよい。複数のブロックチェーン・ピア(例えば、ブロックチェーン・ノード711、712、及び713)は、ブロックチェーン・ネットワークの状態及び分散型台帳720のコピーを保持することができる。クライアントによって提案されたトランザクションをシミュレートし、エンドースするエンドース・ピアと、エンドースメントを確認し、トランザクションを検証し、分散型台帳720にトランザクションをコミットするコミット・ピアとを含む、異なるタイプのブロックチェーン・ノード/ピアが、ブロックチェーン・ネットワーク内に存在し得る。この例では、ブロックチェーン・ノード711、712、及び713は、エンドーサ・ノード、コミッタ・ノード、又はその両方の役割を果たすことができる。
分散型台帳720は、変更不能な順序付けられたレコードをブロックに格納するブロックチェーン、及びブロックチェーン722の現在の状態を維持する状態データベース724(現在のワールド状態)を含む。チャネルごとに、1つの分散型台帳720が存在してもよく、各ピアは、自分がメンバーである各チャネルについて分散型台帳720のそれ自身のコピーを保持する。ブロックチェーン722は、各ブロックがN個のトランザクションのシーケンスを含むハッシュ・リンク・ブロックとして構造化されたトランザクション・ログである。ブロックは、図7Bに示されるような、様々なコンポーネントを含むことができる。ブロックのリンク(図7Aに矢印で示される)は、親ブロックのヘッダのハッシュ及びソース・ブロックのヘッダのハッシュを、現在のブロックのブロック・ヘッダ内に追加することによって生成することができる。図7Aの例において、親ブロックの関係は、「P」で表され、ソース・ブロックの関係は、「S」で表される。この例では、ブロックチェーン722上の全てのトランザクションは、順序付けられ、暗号によってDAG構造で互いにリンクされており、ハッシュ・リンクを壊さずにブロックチェーン・データが改ざんされることを防止している。さらに、リンクにより、ブロックチェーン722内の最新ブロックは、その前に来るあらゆるトランザクションを表す。ブロックチェーン722は、追記専用のブロックチェーン・ワークロードをサポートするピア・ファイル・システム(ローカル又はアタッチト・ストレージ)上に格納されてもよい。
ブロックチェーン722及び分散型台帳720の現在の状態は、状態データベース724に格納することができる。ここで、現在の状態データは、ブロックチェーン722のチェーン・トランザクション・ログ内にこれまで含まれていた全てのキーの最新の値を表す。チェーンコード呼び出しは、状態データベース724における現在の状態に対してトランザクションを実行する。これらのチェーンコードの相互作用を極めて効率的にするために、全てのキーの最新の値が状態データベース724に格納される。状態データベース724は、ブロックチェーン722のトランザクション・ログへのインデックス付きビューを含むことができ、従って、いつでもチェーンから再生成することができる。状態データベース724は、ピアの起動時、トランザクションが受け入れられる前に、自動的に回復する(必要な場合は生成する)ことができる。
エンドース・ノードは、クライアントからトランザクションを受け取り、シミュレートされた結果に基づいてトランザクションをエンドースする。エンドース・ノードは、トランザクションの提案をシミュレートするスマート・コントラクトを保持する。エンドース・ノードがトランザクションをエンドースすると、エンドース・ノードは、トランザクション・エンドースメントを作成し、これは、シミュレートされたトランザクションのエンドースメントを示す、エンドース・ノードからクライアント・アプリケーションに対する署名された応答である。トランザクションをエンドースする方法は、チェーンコード内で指定することができるエンドースメント・ポリシーによって決まる。エンドースメント・ポリシーの例は、「エンドース・ピアの大多数がトランザクションをエンドースしなければならない」というものである。異なるチャネルは、異なるエンドースメント・ポリシーを有し得る。エンドースされたトランザクションは、クライアント・アプリケーションによって、順序付けサービ710に転送される。
順序付けサービス710は、エンドースされたトランザクションを受け入れ、それらをブロックに順序付け、ブロックをコミット・ピアに配信する。例えば、順序付けサービス710は、トランザクションの閾値に達したとき、タイマーがタイムアウトしたとき、又は別の条件で、新たなブロックを開始することができる。図7Aの例において、ブロックチェーン・ノード712は、ブロックチェーン720上に格納するための新しいデータ・ブロック730を受け取ったコミット・ピアである。ブロックチェーン内の最初のブロックは、ジェネシス・ブロックと呼ばれることがあり、これは、ブロックチェーン、そのメンバー、内部に格納されたデータ等についての情報を含む。
順序付けサービス710は、オーダラのクラスタで構成され得る。順序付けサービス710は、トランザクションもスマート・コントラクトも処理せず、共有台帳も維持しない。どちらかと言うと、順序付けサービス710は、エンドースされたトランザクションを受け入れ、それらのトランザクションが分散型台帳720にコミットされる順序を指定することができる。ブロックチェーン・ネットワークのアーキテクチャは、「順序付け」の特定の実装(例えば、Solo、Kafka、BFTなど)がプラグイン可能なコンポーネントになるように設計することができる。
トランザクションは、一貫した順序で分散型台帳720に書き込まれる。トランザクションの順序は、状態データベース724の更新が、ネットワークにコミットされるときに有効であることを保証するように確立される。暗号パズルを解くこと、すなわちマイニングによって順序付けが行われる暗号通貨ブロックチェーン・システム(例えば、ビットコインなど)とは異なり、本例では、分散型台帳720の関係者が、そのネットワークに最も適合する順序付け機構を選ぶことができる。
順序付けサービス710が新しいデータ・ブロック730を初期化すると、新しいデータ・ブロック730をコミット・ピア(例えば、ブロックチェーン・ノード711、712及び713)にブロードキャストすることができる。それに応答して、各コミット・ピアは、読み出しセット及び書き込みセットが依然として状態データベース724における現在のワールド状態と一致することを確認するためのチェックを行うことによって、新しいデータ・ブロック730内のトランザクションを検証する。具体的には、コミット・ピアは、エンドーサがトランザクションをシミュレートしたときに存在した読み出しデータが、状態データベース724における現在のワールド状態と同一であるかどうかを判断することができる。コミット・ピアがトランザクションを検証すると、トランザクションは分散型台帳720上のブロックチェーン722に書き込まれ、状態データベース724は読み出し・書き込みセットからの書き込みデータで更新される。トランザクションが失敗した場合、つまり、コミット・ピアが、読み出し・書き込みセットが状態データベース724における現在のワールド状態と一致しないことを発見した場合、ブロック内に順序付けられたトランザクションは依然としてブロック内に含められるが、それは無効としてマーク付けされ、状態データベース724は更新されない。
図7Bを参照すると、分散型台帳720のブロックチェーン722上に格納される新しいデータ・ブロック730(データ・ブロックとも呼ばれる)は、ブロック・ヘッダ740、ブロック・データ750、及びブロック・メタデータ760などの複数のデータ・セグメントを含むことができる。図7Bに示される、新しいデータ・ブロック730及びそのコンテンツなどの種々の示されるブロック及びそれらのコンテンツは、単なる例示であり、例示的な実施形態の範囲を限定することを意図していないことを理解されたい。新しいデータ・ブロック730は、ブロック・データ750内にN個のトランザクション(例えば1、10、100、500、1000、2000、3000など)のトランザクション情報を格納することができる。新しいデータ・ブロック730は、ブロック・ヘッダ740内にDAG構造の親ブロック及びソース・ブロックへのリンクを含むこともできる。特に、ブロック・ヘッダ740は、親ブロックのヘッダのハッシュと、ソース・ブロックのヘッダのハッシュとを含むことができる。ブロック・ヘッダ740は、一意のブロック番号、新しいデータ・ブロック730のブロック・データ750のハッシュ等を含むこともできる。新しいデータ・ブロック730のブロック番号は一意のものとすることができ、ゼロから始まる増分順序/連続的な順序など、様々な順序で割り当てることができる。
ブロック・データ750は、新しいデータ・ブロック730内に記録される各トランザクションのトランザクション情報を格納することができる。例えば、トランザクション・データは、トランザクションのタイプ、バージョン、タイムスタンプ、分散型台帳720のチャネルID、トランザクションID、エポック、ペイロードの可視性、チェーンコード・パス(デプロイtx)、チェーンコード名、チェーンコード・バージョン、入力(チェーンコード及び関数)、公開鍵及び証明書などのクライアント(作成者)のアイデンティティ、クライアントの署名、エンドーサのアイデンティティ(ある場合)、エンドーサの署名(ある場合)、提案ハッシュ、チェーンコード・イベント、応答状況、名前空間、読み出しセット(トランザクションによって読み出されたキー及びバージョンのリストなど)、書き込みセット(キー及び値のリストなど)、開始キー、終了キー、キーのリスト、Merkelツリー・クエリ・サマリ、及び同様のもののうちの1つ又は複数を含むことができる。トランザクション・データは、N個のトランザクションの各々について格納することができる。
ブロック・メタデータ760は、(例えばバイト・アレイ等として)メタデータの複数のフィールドを格納することができる。メタデータ・フィールドは、ブロック作成に対する署名、最後の構成ブロックへの参照、ブロック内の有効なトランザクション及び無効なトランザクションを識別するトランザクション・フィルタ、ブロックを順序付けした順序付けサービスの存続した最後のオフセットなどを含むことができる。署名、最後の構成ブロック、及びオーダラ・メタデータは、順序付けサービス710によって追加することができる。一方、ブロックのコミッタ(ブロックチェーン・ノード712など)は、エンドースメント・ポリシー、読み出し/書き込みセットの検証などに基づいて有効性/無効性情報を追加することができる。トランザクション・フィルタは、ブロック・データ750内のトランザクションの数と等しいサイズのバイト・アレイ、及びトランザクションが有効/無効のいずれであったかを識別する検証コードを含むことができる。
図7Cは、本明細書に説明される実施形態による、デジタル・コンテンツについてのブロックチェーン770の実施形態を示す。デジタル・コンテンツは1つ又は複数のファイル及び関連情報を含むことができる。ファイルは、媒体、画像、ビデオ、音声、テキスト、リンク、グラフィックス、動画、ウェブページ、文書、又は他の形態のデジタル・コンテンツを含むことができる。ブロックチェーンの変更不能な追加専用の側面は、デジタル・コンテンツの完全性、有効性、及び真正性を保護するセーフガードの役割を果たし、これにより、許容性規則が適用される法的手続き、又は証拠が考慮に入れられ、もしくはデジタル情報の提示及び使用が他の点で関心事となる他の設定での使用に適している。この場合、デジタル・コンテンツは、デジタル証拠と呼ばれることがある。
ブロックチェーンは、種々の方法で形成することができる。一実施形態において、デジタル・コンテンツは、ブロックチェーン自体に含まれ、ブロックチェーン自体からアクセスされ得る。例えば、ブロックチェーンの各ブロックは、関連したデジタル・コンテンツに沿った参照情報(例えば、ヘッダ、値など)のハッシュ値を格納することができる。次に、ハッシュ値及び関連したデジタル・コンテンツを一緒に暗号化することができる。従って、各ブロックのデジタル・コンテンツは、ブロックチェーン内の各ブロックを復号することによってアクセスすることができ、各ブロックのハッシュ値は、前のブロックを参照するための基準として使用することができる。これは、以下のように説明することができる。:
ブロック1 ブロック2.......ブロックN
親ハッシュ値1 親ハッシュ値2 親ハッシュ値N
ソース・ハッシュ値1 ソース・ハッシュ値2 ソース・ハッシュ値N
デジタル・コンテンツ1 デジタル・コンテンツ2 デジタル・コンテンツN
一実施形態において、デジタル・コンテンツは、ブロックチェーン内に含まれない場合がある。例えば、ブロックチェーンは、デジタル・コンテンツを一切持たずに、各ブロックのコンテンツの暗号化ハッシュを格納することができる。デジタル・コンテンツは、元のファイルのハッシュ値と関連付けて、別のストレージ領域又はメモリ・アドレスに格納することができる。別のストレージ領域は、ブロックチェーンを格納するために使用されるストレージ・デバイスと同じであってもよく、又は異なるストレージ領域、さらには別個のリレーショナル・データベースであってもよい。各ブロックのデジタル・コンテンツは、関心のあるブロックのハッシュ値を取得又は照会し、次いで、実際のデジタル・コンテンツと対応して格納されたストレージ領域内の値を検索することによって、参照又はアクセスすることができる。このオペレーションは、例えば、データベース・ゲートキーパによって実行することができる。これは以下のように説明することができる。:
ブロックチェーン ストレージ領域
ブロック1のハッシュ値 ブロック1のハッシュ値...コンテンツ
・ ・
・ ・
・ ・
ブロックNのハッシュ値 ブロックNのハッシュ値...コンテンツ
図7Cの例示的な実施形態では、ブロックチェーン770は、N≧1である場合に、順序付けられたシーケンスで暗号的にリンクされた多数のブロック7781、7782、..・778Nを含む。ブロック7781、7782、...778Nをリンクするために使用される暗号化は、多数の鍵付き又は鍵なしハッシュ関数のいずれかとすることができる。一実施形態では、ブロック7781、7782、...778Nには、ブロック内の情報に基づく入力からnビットの英文字数字の出力(ここで、nは、256又は別の数)を生成するハッシュ関数が適用される。こうしたハッシュ関数の例としては、これらに限定されるものではないが、SHA型(SHAは、Secured Hash Algorithmを表す)アルゴリズム、Merkle-Damgardアルゴリズム、HAIFAアルゴリズム、Merkleツリー・アルゴリズム、ナンス(nonce)ベースのアルゴリズム、及び非衝突耐性(non-collision-resistant)PRFアルゴリズムが挙げられる。別の実施形態では、ブロック7781、7782、...778Nは、ハッシュ関数とは異なる関数によって暗号的にリンクすることができる。説明のために、以下の説明は、ハッシュ関数、例えば、SHA-2を参照して行われる。
ブロックチェーン内のブロック7781、7782、...778Nの各々は、ヘッダ、ファイルのバージョン、及び値を含む。ヘッダ及び値は、ブロックチェーンにおけるハッシュ化の結果として、各ブロックについて異なる。一実施形態では、値はヘッダ内に含まれ得る。以下でより詳細に説明するように、ファイルのバージョンは、元のファイルであってもよく、又は元のファイルの異なるバージョンであってもよい。
ブロックチェーン内の第1のブロック7781は、ジェネシス・ブロックと呼ばれ、ヘッダ7721、元のファイル7741、及び初期値7761を含む。ジェネシス・ブロックに使用され、実際に全ての後続のブロックで使用されるハッシュ・スキームは、異なる場合がある。例えば、第1のブロック7781内の全ての情報を一緒にかつ一度にハッシュしてもよく、又は第1のブロック7781内の情報の各々もしくは一部を別個にハッシュして、その後、別個にハッシュされた部分のハッシュを行ってもよい。
ヘッダ7721は、1つ又は複数の初期パラメータを含むことができ、例えば、バージョン番号、タイムスタンプ、ノンス、ルート情報、難易度、コンセンサス・プロトコル、持続期間、媒体の形式、ソース、記述的キーワード、及び/又は元のファイル7741及び/又はブロックチェーンと関連付けられた他の情報を含むことができる。ヘッダ7721は、(例えば、ブロックチェーン・ネットワーク管理ソフトウェアによって)自動的に生成することができ、又はブロックチェーン参加者によって手動で生成することができる。ブロックチェーン内の他のブロック7782~778Nにおけるヘッダとは異なり、ジェネシス・ブロック内のヘッダ7721は、単に前のブロックが存在しないため、前のブロックを参照しない。
ジェネシス・ブロック内の元のファイル7741は、例えば、ブロックチェーン内に含ませる前の処理の有無にかかわらず、デバイスによってキャプチャされたままのデータとすることができる。元のファイル7741は、デバイス、媒体ソース、又はノードからシステムのインターフェースを通じて受け取られる。元のファイル7741は、例えば、ユーザ、デバイス、もしくはシステム・プロセッサ、又はそれらの組み合わせによって手動又は自動のいずれかで生成することができるメタデータと関連付けられる。メタデータは、元のファイル7741と関連して、第1のブロック7781内に含ませることができる。
ジェネシス・ブロック内の値7761は、元のファイル7741の1つ又は複数の一意の属性に基づいて生成された初期値である。一実施形態では、1つ又は複数の一意の属性は、元のファイル7741のハッシュ値、元のファイル7741についてのメタデータ、及びファイルと関連した他の情報を含むことができる。1つの実装では、初期値7761は、以下の一意の属性に基づくことができる。:
1)元のファイルについてのSHA-2計算ハッシュ値
2)送信元のデバイスID
3)元のファイルについての開始タイムスタンプ
4)元のファイルの初期記憶場所
5)元のファイル及び関連したメタデータを現在制御するソフトウェアについてのブロックチェーン・ネットワーク・メンバーID
ブロックチェーン内の他のブロック7782~778Nも、ヘッダ、ファイル及び値を有する。しかしながら、第1のブロック7721とは異なり、他のブロック内のヘッダ7722~772Nの各々は、DAG構造の親ブロック及びソース・ブロックのハッシュ値を含む。ハッシュ値は、そのブロックのヘッダのハッシュだけであってもよく、又はブロック全体のハッシュ値であってもよい。矢印780で示されるように、残りのブロックの各々内に親ブロック及びソース・ブロックのハッシュ値を含ませることによって、N番目のブロックからジェネシス・ブロック(及び関連した元のファイル)への追跡をブロックごとに行って、監査可能で変更不能なチェーン・オブ・カストディ(chain-of-custody、証拠保全の継続性)を確立することができる。
また、他のブロック内のヘッダ7722~772Nの各々は、他の情報、例えば、バージョン番号、タイムスタンプ、ノンス、ルート情報、難易度、コンセンサス・プロトコル、及び/又は一般に対応するファイル及び/又はブロックチェーンと関連した他のパラメータ又は情報を含むこともできる。
他のブロック内のファイル7742~774Nは、例えば行われる処理のタイプに応じて、元のファイルと等しくてもよく、又はジェネシス・ブロック内の元のファイルの修正されたバージョンであってもよい。行われる処理のタイプは、ブロックごとに異なり得る。処理は、例えば、情報を編集する、又はそのコンテンツを他の方法で変更する、情報を取り除く、又は情報をファイルに追加もしくは追記するなど、先行するブロック内のファイルのあらゆる修正を含むことができる。
付加的に又は代替的に、処理は、単に先行するブロックからファイルをコピーすること、ファイルの記憶場所を変更すること、1つ又は複数の先行するブロックからのファイルを分析すること、ファイルをある記憶もしくはメモリ場所から別の場所に移動すること、又はブロックチェーンのファイルもしくはその関連したメタデータ又はその両方に対してアクションを実行することを含むことができる。ファイルを分析することを含む処理は、例えば、ファイルと関連した様々な分析、統計、又は他の情報を追記する、含ませる、又は他の方法で関連付けることを含むことができる。
他のブロック内の他のブロック7762~776Nの各々の値は、一意の値であり、行われる処理の結果として全て異なる。例えば、任意の1つのブロックの値は、前のブロック内の値の更新バージョンに対応する。その更新は、値が割り当てられたブロックのハッシュに反映される。従って、ブロックの値は、そのブロック内でどのような処理が行われたかを示し、ブロックチェーンを通して元のファイルに遡って追跡することも可能にする。この追跡により、ブロックチェーン全体にわたってファイルのチェーン・オブ・カストディが確認される。
例えば、前のブロックのファイルの一部が、ファイルに表示されている人のアイデンティティを保護するために、編集、遮断、又はピクセル化されている場合を考える。この場合、編集されたファイルを含むブロックには、編集されたファイルと関連付けられたメタデータ、例えば、どのように編集が行われたか、誰が編集を行ったか、編集が行われたタイムスタンプなどが含まれる。メタデータは、値を形成するためにハッシュすることができる。ブロックのメタデータは、前のブロックの値を形成するためにハッシュされた情報とは異なるため、値は互いに異なり、復号されたときに復元することができる。
一実施形態において、以下のいずれか1つ又は複数が発生した場合、前のブロックの値を更新し(例えば、新しいハッシュ値が計算される)、現在のブロックの値を形成することができる。新しいハッシュ値は、この例示的な実施形態では、以下に記される情報の全て又は一部をハッシュすることによって計算することができる。
a)ファイルが何らかの方法で処理された場合(例えば、ファイルが編集、コピー、変更、アクセスされる、又は何らかの他のアクションが行われた場合)の、新しいSHA-2計算ハッシュ値
b)ファイルについての新しい記憶場所
c)ファイルと関連付けられた新しいメタデータ
d)1つのブロックチェーン参加者から別のブロックチェーン参加者へのファイルのアクセス又は制御の移転
図7Dは、一実施形態による、ブロックチェーン790内のブロックの構造を表すことができるブロックの実施形態を示す。ブロック、すなわちブロックiは、ヘッダ772i、ファイル774i、及び値776iを含む。
ヘッダ772iは、親ブロックであるブロックi-1のハッシュ値、並びにソース・ブロック、及び例えば本明細書で説明される何れかのタイプの情報(例えば、参照、特性、パラメータ等を含むヘッダ情報)とすることができる追加の参照情報を含む。全てのブロックは、もちろん、ジェネシス・ブロック、及び場合によっては、ジェネシス・ブロックの後に追加された最初のブロックの幾つかを除いて、DAG構造の親ブロック及びソース・ブロックのハッシュを参照することができる。ハッシュ値は、前のブロック内のヘッダのハッシュだけとすることができ、又はファイル及びメタデータを含む前のブロックの情報の全てもしくは一部のハッシュとすることもできる。
ファイル774iは、データ1、データ2、...、データNのような複数のデータを順に含む。データには、そのデータと関連付けられたコンテンツもしくは特性又はその両方を記述するメタデータ、メタデータ1、メタデータ2、...、メタデータNがタグ付けされている。例えば後述する実施形態に関連して説明するように、例えば各データについてのメタデータは、データについてのタイムスタンプを示す情報、データを処理する情報、データ内に示される人又は他のコンテンツを示すキーワード、及び/又は、ファイル全体の有効性及びコンテンツ、特にデジタル証拠としての使用を確立するのに役立ち得る他の特徴を含むことができる。メタデータに加えて、各データには、改ざん、ファイル内のギャップ、及びファイルの連続的な参照を防ぐために、前のデータへの参照、REF1、REF2、...、REFNをタグ付けすることができる。
ひとたびメタデータが(例えば、スマート・コントラクトによって)データに割り当てられると、メタデータは、無効化について容易に識別できるハッシュの変更がない限り、変更することはできない。従って、メタデータは、ブロックチェーンの参加者による使用のためにアクセスすることができる情報のデータ・ログを作成する。
値776iは、前述した何れかのタイプの情報に基づいて計算されたハッシュ値又は他の値である。例えば、任意の与えられたブロック、ブロックiについて、そのブロックについての値は、そのブロックに対して実行された処理、例えば、新しいハッシュ値、新しい記憶場所、関連したファイルの新しいメタデータ、制御もしくはアクセスの移転、識別子、又は追加される他のアクションもしくは情報を反映するように更新することができる。各ブロックの値は、ファイル及びヘッダのデータについてのメタデータとは別のものであるように示されるが、別の実施形態では、値は、部分的に又は全体的にこのメタデータに基づくことができる。
ひとたびブロックチェーン770が形成されると、任意の時点で、ブロックにわたる値のトランザクション履歴についてブロックチェーンに照会することによって、ファイルについての変更不能なチェーン・オブ・カストディを取得することができる。この照会、又は追跡手順は、最も最近含まれたブロック(例えば、最後の(N番目の)ブロック)の値を復号することから始まり、次いで、ジェネシス・ブロックに到達し、元のファイルを復元するまで、他のブロックの値の復号を続行することができる。復号は、各ブロックにおけるヘッダ及びファイル、並びに関連したメタデータを復号することを含むこともできる。
復号は、各ブロックで行われた暗号化のタイプに基づいて行われる。これは、秘密鍵、公開鍵、又は公開鍵・秘密鍵のペアの使用を含むことができる。例えば、非対称暗号化が使用される場合、ブロックチェーン参加者又はネットワーク内のプロセッサは、所定のアルゴリズムを用いて、公開鍵・秘密鍵のペアを生成することができる。公開鍵及び秘密鍵は、何らかの数学的関係によって互いに関連付けられる。公開鍵は、他のユーザからのメッセージを受け取るためのアドレス、例えば、IPアドレス又はホーム・アドレスなどとして機能するように、公的に配布することができる。秘密鍵は秘密にされ、他のブロックチェーン参加者に送られるメッセージにデジタル署名するために使用される。署名は、メッセージ内に含まれるので、受信者は送信者の公開鍵を使用して検証することができる。このようにして、受信者は、送信者だけがこのメッセージを送ることができたと確信することができる。
鍵ペアの生成は、ブロックチェーン上にアカウントを作成することに類似し得るが、実際にどこかに登録する必要はない。また、ブロックチェーン上で実行される全てのトランザクションは、送信者によってその秘密鍵を使用してデジタル署名される。この署名により、アカウントの所有者のみがブロックチェーンのファイルを追跡し、処理できる(スマート・コントラクトにより決定された許可の範囲内であれば)ことが保証される。
図8A及び図8Bは、本明細書に組み込み、使用することができるブロックチェーンの使用事例の付加的な例を示す。特に、図8Aは、機械学習(人工知能)データを格納するブロックチェーン810の例800を示す。機械学習は、膨大な量の履歴データ(又は、訓練データ)に依存して、新しいデータに対する正確な予測のための予測モデルを構築する。機械学習ソフトウェア(例えば、ニューラル・ネットワークなど)は、多くの場合、何百万ものレコードから探して、直感的でないパターンを発掘することができる。
図8Aの例において、ホスト・プラットフォーム820が、アセット830の予測監視のための機械学習モデルを構築し、デプロイする。ここで、ホスト・プラットフォーム820は、クラウド・プラットフォーム、産業用サーバ、ウェブ・サーバ、パーソナル・コンピュータ、ユーザ・デバイス等とすることができる。アセット830は、航空機、機関車、タービン、医療機械及び機器、石油及びガス機器、船、船舶、車両等のような任意のタイプのアセット(例えば、機械又は機器等)とすることができる。別の例として、アセット830は、株式、通貨、デジタル・コイン、保険などの非有形アセットとすることができる。
ブロックチェーン810を使用して、機械学習モデルの訓練プロセス802及び訓練された機械学習モデルに基づいた予測プロセス804の両方を大幅に改善することができる。例えば、802において、データ科学者/エンジニア、又は他のユーザにデータの収集を要求するのではなく、アセット830自体によって(又は図示されていない仲介者を介して)履歴データをブロックチェーン810上に格納することができる。これにより、予測モデルの訓練を行う際にホスト・プラットフォーム820が必要とする収集時間を大幅に短縮することができる。例えば、スマート・コントラクトを用いて、データをその発信地からブロックチェーン810に直接かつ確実にまっすぐ転送することができる。ブロックチェーン810を用いて収集されたデータのセキュリティ及び所有権を確実にすることにより、スマート・コントラクトは、アセットからのデータを、機械学習モデルを構築するためにデータを使用する個人に直接送信することができる。これにより、アセット830の間でデータを共有することが可能になる。
収集されたデータは、コンセンサス機構に基づいて、ブロックチェーン810に格納することができる。コンセンサス機構は、記録されるデータが検証され、正確であることを保証するために、(許可されたノードに)引き込む。記録されたデータは、タイムスタンプを付与され、暗号化された署名が行われ、変更不能である。従って、監査可能でトランスペアレントであり、かつ安全である。ブロックチェーンに直接書き込むIoTデバイスを追加することで、特定の場合(すなわち、サプライチェーン、健康管理、物流など)には、記録されるデータの頻度及び精度の両方を高めることができる。
さらに、収集されたデータに対する機械学習モデルの訓練は、ホスト・プラットフォーム820による改良及び試験をラウンドすることができる。各ラウンドは、機械学習モデルの知識の拡大に役立つように、追加のデータ又は以前には考慮されなかったデータに基づくことができる。802において、異なる訓練及び試験ステップ(及びそれと関連したデータ)は、ホスト・プラットフォーム820によってブロックチェーン810上に格納することができる。機械学習モデルの各々の改良(例えば、変数、重みなどの変更)を、ブロックチェーン810上に格納することができる。これにより、モデルがどのように訓練されたか、モデルを訓練するためにどのようなデータが使用されたかの、検証可能な証明が与えられる。さらに、ホスト・プラットフォーム820が最終的に訓練モデルを実現したとき、結果として得られるモデルをブロックチェーン810上に格納することができる。
モデルが訓練された後、最終的に訓練された機械学習モデルの実行に基づいて、予測/決定を行うことができるライブ環境にデプロイすることができる。例えば、804では、機械学習モデルは、航空機、風力タービン、健康器具などのアセットについての条件ベースの保守(condition-based maintenance、CBM)のために使用することができる。この例では、アセット830からフィードバックされたデータを機械学習モデルに入力し、故障イベント、エラー・コード等といったイベント予測を行うために使用することができる。監査可能/検証可能な証拠を提供するために、ホスト・プラットフォーム820における機械学習モデルの実行によってなされた決定を、ブロックチェーン810上に格納することができる。限定されない例として、機械学習モデルは、アセット830の部品に対する将来の機能停止/故障を予測し、その部品を交換するための警告又は通知を作成することができる。この決定の背後にあるデータは、ホスト・プラットフォーム820によってブロックチェーン810上に格納することができる。一実施形態では、本明細書に説明されるもしくは示される又はその両方が行われる特徴もしくはアクション又はその両方は、ブロックチェーン810上で、又はブロックチェーン810に対して行うことができる。
ブロックチェーンの新しいトランザクションは、新しいブロックに集められ、既存のハッシュ値に追加することができる。次に、これを暗号化して、新しいブロックについての新しいハッシュを作成する。これは、暗号化されるとき、トランザクションの次のリストに追加されるなどである。結果として、各々が前のブロックのハッシュ値を含むブロックのチェーンがもたらされる。これらのブロックを格納するコンピュータは、定期的にそのハッシュ値を比較し、それらが全て合意していることを保証する。合意しないコンピュータは、問題の原因となっているレコードを破棄する。この手法は、ブロックチェーンの耐改ざん性を確実にするのに優れているが、完全ではない。
このシステムを悪用する1つの方法は、不正なユーザが有利に、しかしハッシュ値は変更されないままにトランザクションのリストを変更することである。これはブルート・フォース(brute force、総当たり)により行うことができ、言い換えれば、レコードを変更し、その結果を暗号化し、ハッシュ値が同じかどうかを確認することによって行うことができる。そして、同じでなければ、一致するハッシュを見つけるまで何度も試みる。ブロックチェーンのセキュリティは、通常のコンピュータは、宇宙の年齢のような全く現実的ではない時間規模にわたって、この種のブルート・フォース攻撃を行うことしかできないという信念に基づいている。これとは対照的に、量子コンピュータは、はるかに高速であり(数千倍速い)、結果的に、はるかに大きい脅威を与える。
図8Bは、量子コンピューティング攻撃から保護するために量子鍵配布(quantum key distribution、QKD)を実装する量子セキュア・ブロックチェーン852の例850を示す。この例では、ブロックチェーン・ユーザは、QKDを用いて互いのアイデンティティを検証することができる。これは、それらを破壊しなければ盗聴者がコピーできない、光子などの量子粒子を用いて情報を送るものである。このようにして、ブロックチェーンを介した送信者と受信者は、互いのアイデンティティを確認することができる。
図8Bの例では、4人のユーザ854、856、858、及び860が存在する。ユーザのペアの各々は、自分たちの間で秘密鍵862(すなわち、QKD)を共有することができる。この例では、4つのノードが存在するので、6つのノードのペアが存在し、従って、QKDAB、QKDAC、QKDAD、QKDBC、QKDBD、及びQKDCDを含む6つの異なる秘密鍵862が使用される。各ペアは、それらを破壊しなければ盗聴者がコピーできない、光子などの量子粒子を用いて情報を送ることによって、QKDを作成することができる。このようにして、ユーザのペアは互いのアイデンティティを確認することができる。
ブロックチェーン852のオペレーションは、2つの手順(i)トランザクションの作成、及び(ii)新しいトランザクションを集約するブロックの構築に基づいている。新しいトランザクションは、従来のブロックチェーン・ネットワークと同様に作成することができる。各トランザクションは、送信者、受信者、作成時刻、転送される量(又は値)、送信者がオペレーションのための資金を有することを正当化する参照トランザクションのリストなどに関する情報を含むことができる。次に、このトランザクション・レコードは、他の全てのノードに送られ、未確認トランザクションのプールに入力される。ここで、2人の当事者(すなわち、854~860の中からのユーザのペア)が、共有の秘密鍵862(QKD)を提供することによって、トランザクションを認証する。この量子署名は、あらゆるトランザクションに添付することができ、改ざんを非常に困難にする。各ノードは、ブロックチェーン852のローカル・コピーに関してそのエントリをチェックし、各トランザクションが十分な資金を有することを検証する。しかしながら、トランザクションはまだ確認されていない。
ブロックに対して従来のマイニング・プロセスを行うのではなく、ブロックは、ブロードキャスト・プロトコルを用いて、非集中方式で作成することができる。所定の期間(例えば、秒、分、時間など)、ネットワークは、ブロードキャスト・プロトコルをあらゆる未確認トランザクションに適用し、それによりトランザクションの正しいバージョンに関するビザンチン合意(コンセンサス)を達成することができる。例えば、各ノードは秘密値(その特定のノードのトランザクション・データ)を保有することができる。最初のラウンドにおいて、ノードはその秘密値を互いに伝送する。後のラウンドでは、ノードは、前のラウンドで他のノードから受け取った情報を伝達する。ここで、正直なノード(honest node)は、新しいブロック内にトランザクションの完全なセットを作成することができる。この新しいブロックをブロックチェーン852に追加することができる。一実施形態では、本明細書に説明される及び/又は示される特徴及び/又はアクションは、ブロックチェーン852上で、又はブロックチェーン852に関して行うことができる。
図9は、本明細書で説明されるもしくは示される又はその両方が行われる例示的な実施形態の1つ又は複数をサポートする例示的なシステム900を示す。システム900は、多数の他の汎用又は専用コンピューティング・システム環境又は構成で動作可能なコンピュータ・システム/サーバ902を含む。コンピュータ・システム/サーバ902と共に用いるのに好適であり得る周知のコンピューティング・システム、環境もしくは構成又はそれらの組み合わせの例として、これらに限定されるものではないが、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式又はラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラム可能民生電子機器、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び、上述のシステムもしくはデバイスのいずれかを含む分散型クラウド・コンピューティング環境等が含まれる。
コンピュータ・システム/サーバ902は、コンピュータ・システムによって実行される、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的な文脈で説明することができる。一般に、プログラム・モジュールは、特定のタスクを実行する又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム/サーバ902は、通信ネットワークを通じてリンクされた遠隔処理デバイスによってタスクが実行される分散型クラウド・コンピューティング環境で実施することができる。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカル及び遠隔両方のコンピュータ・システム・ストレージ媒体内に配置することができる。
図9に示されるように、クラウド・コンピューティング・ノード900におけるコンピュータ・システム/サーバ902は、汎用コンピューティング・デバイスの形で示される。コンピュータ・システム/サーバ902のコンポーネントは、これらに限定されるものではないが、1つ又は複数のプロセッサ又は処理ユニット904、システム・メモリ906、及びシステム・メモリ906を含む種々のシステム・コンポーネントをプロセッサ904に結合するバスを含むことができる。
バスは、メモリ・バス又はメモリ・コントローラ、周辺バス、アクセラレーテッド・グラフィックス・ポート、及び種々のバス・アーキテクチャのいずれかを用いるプロセッサ又はローカル・バスを含む、幾つかのタイプのバス構造のいずれかの1つ又は複数を表す。限定ではなく例として、このようなアーキテクチャは、業界標準アーキテクチャ(Industry Standard Architecture、ISA)バス、マイクロ・チャネル・アーキテクチャ(Micro Channel Architecture、MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカル・バス、Peripheral Component Interconnect(PCI)バスを含む。
コンピュータ・システム/サーバ902は、典型的には、種々のコンピュータ・システム可読媒体を含む。こうした媒体は、コンピュータ・システム/サーバ902によってアクセス可能な任意の利用可能媒体とすることができ、揮発性媒体及び不揮発性媒体の両方と、取り外し可能媒体及び取り外し不能媒体の両方とを含む。一実施形態において、システム・メモリ906は、他の図のフロー図を実装する。システム・メモリ906は、ランダム・アクセス・メモリ(RAM)910もしくはキャッシュ・メモリ912又はその両方など、揮発性メモリの形のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ902は、他の取り外し可能/取り外し不能、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体をさらに含むことができる。単なる例として、取り外し不能の不揮発性磁気媒体(図示されておらず、典型的には「ハード・ドライブ」と呼ばれる)との間の読み出し及び書き込みのために、ストレージ・システム914を設けることができる。図示されていないが、取り外し可能な不揮発性磁気ディスク(例えば、「フロッピー・ディスク」)との間の読み出し及び書き込みのための磁気ディスク・ドライブと、CD-ROM、DVD-ROM又は他の光媒体などの取り外し可能な不揮発性光ディスクとの間の読み出し及び書き込みのための光ディスク・ドライブとを設けることができる。こうした事例においては、それぞれを、1つ又は複数のデータ媒体インターフェースによってバスに接続することができる。以下でさらに示され説明されるように、メモリ906は、本開示の実施形態の機能を実行するように構成されたプログラム・モジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含むことができる。
限定ではなく例として、メモリ906内に、プログラム・モジュール918のセット(少なくとも1つ)を有するプログラム/ユーティリティ916、並びにオペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データを格納することができる。オペレーティング・システム、1つ又は複数のアプリケーション・プログラム、他のプログラム・モジュール、及びプログラム・データ、又はそれらの何らかの組み合わせの各々は、ネットワーキング環境の実装を含むことができる。プログラム・モジュール918は、一般に、本明細書で説明される本出願の種々の実施形態の機能もしくは方法又はその両方を実行する。
当業者には理解されるように、本出願の実施形態は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本出願の実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、本明細書では、これらをまとめて「回路」、「モジュール」、又は「システム」と呼ぶことができる。さらに、本出願の態様は、コンピュータ可読プログラム・コードが具体化された1つ又は複数のコンピュータ可読媒体内に具体化されたコンピュータ・プログラム製品の形を取ることができる。
コンピュータ・システム/サーバ902は、キーボード、ポインティング・デバイス、ディスプレイ922等といった1つ又は複数の外部デバイス920、ユーザがコンピュータ・システム/サーバ902と対話することを可能にする1つ又は複数のデバイス、もしくはコンピュータ・システム/サーバ902が1つ又は複数の他のコンピューティング・デバイスと通信することを可能にするいずれかのデバイス(例えば、ネットワーク・カード、モデムなど)、又はそれらの組み合わせと通信することもできる。こうした通信は、入力/出力(I/O)インターフェース924を経由して行うことができる。さらにまた、コンピュータ・システム/サーバ902は、ネットワーク・アダプタ926を介して、ローカル・エリア・ネットワーク(LAN)、汎用広域ネットワーク(WAN)、もしくはパブリック・ネットワーク(例えば、インターネット)、又はそれらの組み合わせのような、1つ又は複数のネットワークと通信することもできる。示されるように、ネットワーク・アダプタ926は、バスを介して、コンピュータ・システム/サーバ902の他のコンポーネントと通信する。図示されていないが、コンピュータ・システム/サーバ902と共に他のハードウェア及び/又はソフトウェア・コンポーネントを使用できることを理解されたい。例としては、これらに限定されるものではないが、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、及びデータ・アーカイブ・ストレージ・システムなどが含まれる。
システム、方法及び非一時的コンピュータ可読媒体の少なくとも1つの例示的な実施形態が添付図面に示され、前述の詳細な説明に記載されているが、本出願は、開示される実施形態に限定されるものではなく、以下の特許請求の範囲により明記され定義されるように、多数の再構成、修正及び置換が可能であることが理解されるであろう。例えば、様々な図のシステムの能力は、本明細書に説明されるモジュール又はコンポーネントのうちの1つ又は複数によって、又は分散アーキテクチャにおいて実行することができ、送信機、受信機、又はその両方の対を含んでもよい。例えば、個々のモジュールによって実行される機能の全て又は一部が、これらのモジュールのうちの1つ又は複数によって実行され得る。さらに、本明細書に説明される機能は、何度も、かつ様々なイベントに関連して、モジュール又はコンポーネントの内部又は外部で実行され得る。また、種々のモジュール間で送信される情報は、データ・ネットワーク、インターネット、音声ネットワーク、インターネット・プロトコル・ネットワーク、無線デバイス、有線デバイスのうちの少なくとも1つを介して、もしくは複数のプロトコルを介して、又はその両方を介して、モジュール間で送信することができる。また、モジュールのいずれかによって送信又は受信されるメッセージは、直接、もしくは他のモジュールの1つ又は複数を介して、又はその両方で、送信又は受信することができる。
「システム」は、パーソナル・コンピュータ、サーバ、コンソール、携帯情報端末(PDA)、携帯電話、タブレット・コンピューティング・デバイス、スマートフォン、又は任意の他の適切なコンピューティング・デバイス、又はデバイスの組み合わせとして具体化できることを、当業者であれば理解するであろう。「システム」によって実行される上述の機能を提示することは、いかなる方法でも本出願の範囲を限定することを意図しておらず、多くの実施形態のうちの一例を提供することを意図している。実際に、本明細書に開示された方法、システム、及び装置は、コンピューティング技術と一貫した局所型及び分散型の形態で実施することができる。
本明細書において説明されるシステム特徴の幾つかが、より詳細にはそれらの実施の独立性を強調するために、モジュールとして提示されていることに留意されたい。例えば、モジュールは、カスタム超大規模集積(VLSI)回路又はゲート・アレイ、論理チップなどのオフ・ザ・シェルフ半導体、トランジスタ、又は他の個別のコンポーネントを含むハードウェア回路として実施することができる。モジュールはまた、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ論理、プログラマブル論理デバイス、グラフィックス処理ユニットなどのプログラマブル・ハードウェア・デバイスで実施することができる。
モジュールはまた、種々のタイプのプロセッサによる実行のためにソフトウェアにおいて少なくとも部分的に実施することもできる。例えば、実行可能コードの識別されたユニットは、例えば、オブジェクト、手続き、又は関数として編成され得るコンピュータ命令の1つ又は複数の物理又は論理ブロックを含むことができる。それにもかかわらず、識別されるモジュールの実行可能ファイルは、物理的に一緒に配置される必要はないが、論理的に結合されるときに、モジュールを含み、モジュールについて述べられた目的を達成する、異なる場所に格納された異なる命令を含むことができる。さらに、モジュールは、コンピュータ可読媒体上に格納することができ、コンピュータ可読媒体は、例えば、ハード・ディスク・ドライブ、フラッシュ・デバイス、ランダム・アクセス・メモリ(RAM)、テープ、又はデータを格納するために使用される任意の他のそうした媒体とすることができる。
実際に、実行可能コードのモジュールは、単一の命令又は多数の命令とすることができ、複数の異なるコード・セグメントにわたって、異なるプログラムの間に、及び複数のメモリ・デバイスにわたって分散することさえ可能である。同様に、動作データは、モジュール内において本明細書に識別し、示すことができ、任意の適当な形で具体化し、任意の適切なタイプのデータ構造内に編成することができる。動作データは、単一のデータ・セットとして収集されてもよく、又は異なるストレージ・デバイスを含む異なる場所にわたって分散されてもよく、かつ単にシステム又はネットワーク上の電子信号として少なくとも部分的に存在してもよい。
本出願のコンポーネントは、本明細書に概ね説明され図面に示されるように、種々の異なる構成で配置し設計できることが、容易に理解されるであろう。従って、実施形態の詳細な説明は、特許請求される本出願の範囲を限定することを意図しておらず、単に本出願の選択された実施形態を表している。
上記は、異なる順序のステップで実施されてもよく、もしくは開示されたものとは異なる構成におけるハードウェア要素で実施されてもよく、又はその両方であってもよいことを、当業者であれば容易に理解するであろう。従って、本出願は、これらの好ましい実施形態に基づいて説明されているが、特定の修正、変形、及び代替的な構造が明らかであることは、当業者には明らかであろう。
本出願の好ましい実施形態が説明されているが、説明される実施形態は単なる例示であり、本出願の範囲は、均等物及びそれに対する修正(例えば、プロトコル、ハードウェア・デバイス、ソフトウェア・プラットフォーム等)の全範囲と共に考慮される時、添付の特許請求の範囲のみによって定義されるものと理解されたい。