(57)【特許請求の範囲】
【請求項１】
ブロックチェーンを管理するコンセンサスシステムに参加する１つまたは複数の第２計算ノードと通信可能な第１計算ノードを含み、
前記第１計算ノードは、実行可能命令によって処理を実行するように構成される１つまたは複数のプロセッサを含み、
前記処理は、
ブロックチェーンに関連付けられるスマートコントラクトを実行すべきとの指示を、前記第１計算ノードによって受信し、
前記ブロックチェーンが前記ブロックチェーンの１つまたは複数のブロック内に監査情報を含むか、を判定し、
前記ブロックチェーンが前記監査情報を含むとの判定に基づいて、前記第１計算ノードによって前記スマートコントラクトを実行する、ことを含み、
前記監査情報は、
前記第１計算ノード及び前記１つまたは複数の第２計算ノードに関するノード情報、
前記スマートコントラクトに対応するデジタル署名情報、
前記スマートコントラクトの実行のために受信されたデータに関する情報、または、
前記スマートコントラクトの実行を呼び出すために受信された通信に関する情報、のうちの少なくとも１つを含む、システム。
【請求項２】
請求項１に記載のシステムであって、
前記処理は、
前記第１計算ノード上での前記スマートコントラクトの実行に対応するトランザクション情報及び実行情報を、コンセンサス要求とともに、前記１つまたは複数の第２計算ノードに送信し、
前記１つまたは複数の第２計算ノードのうちの少なくとも一部から、コンセンサスの表示を受信し、
前記ブロックチェーンに追加するブロックを生成する、ことを含み、
前記ブロックは前記実行情報を含む、システム。
【請求項３】
請求項２に記載のシステムであって、
前記ブロックに含まれる前記実行情報は、
前記第１計算ノードの識別子、
前記スマートコントラクトの実行時間、または
前記スマートコントラクトの実行からの実行処理情報を含む実行ログ、のうちの少なくとも１つを含む、システム。
【請求項４】
請求項１に記載のシステムであって、
前記第１計算ノードまたは前記１つまたは複数の第２計算ノードのうちの少なくとも１つは、監査計算装置として構成されるか、または前記監査計算装置と通信するように構成され、
前記監査計算装置は、
監査認証要件を満たすために前記ブロックチェーンに含まれると期待される監査情報のリストを決定し、
前記ブロックチェーンのコピーを、前記第１計算ノードまたは前記１つまたは複数の第２計算ノードの少なくとも１つから受信し、
前記監査情報のリストが、前記ブロックチェーン内の情報によって満たされるか判定し、
前記監査情報のリストを満たす前記ブロックチェーン内の前記情報に基づいて、前記監査計算装置は、前記監査認証要件が満たされているという通知を送信する、
または
前記監査情報のリストを満たさない前記ブロックチェーン内の前記情報に基づいて、記監査計算装置は、前記監査認証要件が満たされていないという通知を送信する、システム。
【請求項５】
請求項１に記載のシステムであって、
前記処理は、
前記１つまたは複数の第２計算ノードのうちの１つの第２計算ノードから、トランザクション情報と、前記１つの第２計算ノード上でのスマートコントラクトの実行に関連する情報と、を受信し、
前記トランザクション情報と、前記１つの第２計算ノード上での前記スマートコントラクトの実行に対応する実行情報とを、コンセンサスの要求と共に、前記１つまたは複数の第２の計算ノードに送信し、
前記１つまたは複数の第２計算ノードのうちの少なくとも一部から、コンセンサスの表示を受信し、
前記ブロックチェーンに追加するブロックを生成する、ことを含み、
前記ブロックは前記実行情報を含む、システム。
【請求項６】
請求項１に記載のシステムであって、
マスタとして指定された１つの第２計算ノードに、前記第１計算ノード上での前記スマートコントラクトの実行に対応するトランザクション情報及び実行情報を、前記第１計算ノードによって送信し、
前記マスタからコンセンサスの表示を受信し、
前記ブロックチェーンに追加するブロックを生成する、ことを含み、
前記ブロックは前記実行情報を含む、システム。
【請求項７】
請求項１に記載のシステムであって、
前記ブロックチェーンに関連付けられる前記スマートコントラクトを実行すべきとの前記指示を、前記第１計算ノードによって受信することは、
前記コンセンサスシステムの外部の計算装置から、前記スマートコントラクトの条件を満たすデータを受信し、
前記受信したデータに少なくとも部分的に基づいて、前記スマートコントラクトを実行すべきであるというコンセンサスの表示を、前記１つまたは複数の第２ノードから受信する、ことを含む、システム。
【請求項８】
請求項１に記載のシステムであって、
前記処理は、
前記第１計算ノードによって、前記ブロックチェーンに関連付けられる前記スマートコントラクトを実行すべきとの指示を受信する前に、前記ブロックチェーンに追加するブロックを生成し、
前記ブロックは、
前記第１計算ノードについての前記ノード情報を含み、
さらに、
前記第１計算ノードに関連付けられたノード識別子、
前記第１計算ノードの所有者及び／またはオペレータ、または
前記第１計算ノードのＩＰアドレス、のうちの少なくとも一つを含む、システム。
【請求項９】
請求項８に記載のシステムであって、
前記処理は、
前記ブロックの本体に前記第１計算ノードに関するノード情報を含めることによって、前記ブロックチェーンに追加する前記ブロックを生成し、
前記ブロックのヘッダに、前記ブロックの本体のハッシュを含める、ことを含むシステム。
【請求項１０】
請求項１に記載のシステムであって、
前記第１計算ノードによって、前記ブロックチェーンに関連付けられる前記スマートコントラクトを実行すべきとの前記指示を受信する前に、前記ブロックチェーンに追加するブロックを生成し、
前記ブロックは、
前記１つまたは複数の第２計算ノードについての前記ノード情報を含み、
さらに、
前記１つまたは複数の第２計算ノードそれぞれに関連付けられたノード識別子、
前記１つまたは複数の第２計算ノードそれぞれの所有者及び／またはオペレータ、または
前記１つまたは複数の第２計算ノードそれぞれのＩＰアドレス、のうちの少なくとも一つを含む、システム。
【請求項１１】
請求項１に記載のシステムであって、
前記処理は、
前記第１計算ノードによって、前記ブロックチェーンに関連付けられる前記スマートコントラクトを実行すべきとの前記指示を受信する前に、前記スマートコントラクトに関連付けられるデジタル署名を受信し、
前記ブロックチェーンに追加するブロックを生成する、ことを含み
前記ブロックは、
前記スマートコントラクトのハッシュ、
前記スマートコントラクトの識別子、または、
前記スマートコントラクトの参加者に関連付けられている公開鍵と秘密鍵のペアの公開暗号化鍵、のうちの少なくとも一つを含む、システム。
【請求項１２】
請求項１に記載のシステムであって、
前記処理は、
前記第１計算ノードによって、前記ブロックチェーンに関連付けられる前記スマートコントラクトを実行すべきとの前記指示を受信する前に、前記スマートコントラクトを実行するためのデータを受信し、
前記１つまたは複数の第２計算ノードとのコンセンサスに基づいて、ブロックを前記ブロックチェーンに追加する、ことを含み、
前記ブロックは、
前記データについての情報を含み、
さらに、
前記データを送信した外部システムの識別子、
前記データを受信した時間、
前記データのソース、または、
前記データの少なくとも一部、のうちの少なくとも一つを含む、システム。
【請求項１３】
請求項１に記載のシステムであって、
前記処理は、
前記１つまたは複数の第２計算ノードのうちのどれが前記第１計算ノードと前記コンセンサスシステムに参加しているかを決定するために、前記１つまたは複数の第２計算ノードにクエリを送信し、
前記１つまたは複数の第２計算ノードからの応答を前記スマートコントラクトの要件と比較し、
参加している計算ノードが前記スマートコントラクトの要件を満たしていないときに前記コンセンサスシステムを停止する、ことを含む、システム。
【請求項１４】
コンセンサスシステムに参加する１つまたは複数の第２計算ノードと通信可能な第１計算ノードによって、ブロックチェーンに関連付けられるスマートコントラクトを実行すべきとの指示を受信し、
前記ブロックチェーンが前記ブロックチェーンの１つまたは複数のブロック内に監査情報を含むか、を判定し、
前記ブロックチェーンが前記監査情報を含むとの判定に基づいて、前記第１計算ノードによって前記スマートコントラクトを実行する、ことを含み、
前記監査情報は、
前記第１計算ノード及び前記１つまたは複数の第２計算ノードに関するノード情報、
前記スマートコントラクトに対応するデジタル署名情報、
前記スマートコントラクトの実行のために受信されたデータに関する情報、または、
前記スマートコントラクトの実行を呼び出すために受信された通信に関する情報、のうちの少なくとも１つを含む、方法。
【請求項１５】
コンセンサスシステムに参加する１つまたは複数の第２計算ノードと通信可能な第１計算ノードの１つまたは複数のプロセッサによって実行されると、処理を実行するように前記１つまたは複数のプロセッサを構成する命令を格納する、１つまたは複数の非一過性の計算機可読媒体であって、
前記処理は、
ブロックチェーンに関連付けられるスマートコントラクトを実行すべきとの指示を受信し、
前記ブロックチェーンが前記ブロックチェーンの１つまたは複数のブロック内に監査情報を含むか、を判定し、
前記ブロックチェーンが前記監査情報を含むとの判定に基づいて、前記スマートコントラクトを実行する、ことを含み、
前記監査情報は、
前記第１計算ノード及び前記１つまたは複数の第２計算ノードに関するノード情報、
前記スマートコントラクトに対応するデジタル署名情報、
前記スマートコントラクトの実行のために受信されたデータに関する情報、または、
前記スマートコントラクトの実行を呼び出すために受信された通信に関する情報、のうちの少なくとも１つを含む、１つまたは複数の非一過性の計算機可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ構造及びデータベースの技術に関し、より詳細にはブロックチェーンに関する。
【背景技術】
【０００２】
ブロックチェーンは、連続的に成長する一連の（すなわち、チェーンの）ブロックと呼ばれるレコードを維持する、一種の分散型データベースである。各ブロックにはタイムスタンプと前のブロックへのリンクが含まれている。ブロックはトランザクションまたは他の種類の情報を格納することができる。ブロックの検証プロセスは非常に単純に実行され得、これにより不正なトランザクションの可能性が減少する。ネットワーク全体に分散してデータを保存することで、ブロックチェーンは、データが集中管理されることに伴うリスクを軽減または排除する。
【０００３】
さらに、ブロックチェーン技術は、チェーンの任意の単一ブロックを遡及的に変更することを非常に困難にすることができる。例えば、データベースは分散されている（すなわち、同時に複数の異なる計算機に格納されている）ので、分散データベース内の任意の計算機にアクセスするすべてのユーザは、ブロックチェーンへの新たな追加について直ちに通知され得る。
【発明の概要】
【０００４】
いくつかの例において、ブロックチェーンを使用して実行及び記録されたトランザクションは、特定の条件が満たされた場合に特定のアクションを実行するなどの計算機実行可能な「同意」である「スマートコントラクト」のためのものであり得る。しかしながら、従来、スマートコントラクトトランザクションのいくつかの局面を監査または確認するために必要な情報を、対応するブロックチェーンから取得するための方法はない。
【０００５】
本明細書のいくつかの例は、コンセンサスシステムに参加する複数のコンセンサスノードとして構成された複数の計算ノードを含む。一例として、１つまたは複数の第２ノードと通信可能な第１ノードは、ブロックチェーンに関連付けられるスマートコントラクトが実行されるべきであるという指示を受信する。第１ノードは、ブロックチェーンがブロックチェーンの１つまたは複数のブロック内の監査情報を含むか判定することができる。例えば、監査情報は、第１ノード及び１つまたは複数の第２ノードに関するノード情報、スマートコントラクトに対応するデジタル署名情報、スマートコントラクトの実行のために受信されたデータに関する情報、またはスマートコントラクトの実行を呼び出すために受信した通信に関連する情報、のうちの少なくとも１つを含み得る。ブロックチェーンが監査情報を含むと判定することに少なくとも部分的に基づいて、第１ノードは、スマートコントラクトの実行を進める。場合によっては、ブロックチェーンが監査情報を含まない場合、スマートコントラクトを実行するのではなく、第１ノードは、スマートコントラクトの参加者に関連付けられたクライアント装置などに、予期された監査情報がブロックチェーンには存在ないことを示す通知を送信し得る。
【０００６】
以下において、詳細な説明は、添付の図面を参照しながら説明される。図において、参照番号の左端の数字は、その参照番号が最初に現れる図を示す。異なる図における同じ参照番号の使用は、類似または同一の項目または特徴を示す。
【図面の簡単な説明】
【０００７】
【図１】いくつかの実装形態による、ブロックチェーン監視及び管理のためのシステムの例示的アーキテクチャを示す図である。
【図２】いくつかの実装形態による、例示的なコンセンサスノード計算装置を示す図である。
【図３】いくつかの実装形態による、コンセンサスシステムにおけるブロックチェーン構築の例を示す。
【図４】いくつかの実装形態による、ブロックチェーンの部分の一例を示す図である。
【図５】いくつかの実装形態による、ブロックチェーンの部分の一例を示す。
【図６】いくつかの実装形態による、コンセンサスノード情報をブロックチェーンに追加するための例示的なプロセスを示す流れ図である。
【図７】いくつかの実装形態による、例示的なコンセンサスノード情報データ構造を示す図である。
【図８】いくつかの実装形態による、デジタル署名及びスマートコントラクト情報をブロックチェーンに追加する例示的なプロセスを示す流れ図である。
【図９】いくつかの実装形態による、例示的なデジタル署名及びスマートコントラクトソースコードデータ構造を示す。
【図１０】いくつかの実装形態による、外部データ情報をブロックチェーンに追加するための例示的なプロセスを示す流れ図である。
【図１１】いくつかの実装形態による、外部データ情報データ構造の一例を示す。
【図１２】いくつかの実装形態による、スマートコントラクト実行のための例示的なプロセスを示す流れ図である。
【図１３】いくつかの実装形態による、スマートコントラクト実行情報データ構造の一例を示す。
【図１４】いくつかの実装形態による、参加ノードをチェックするための例示的なプロセスを示す流れ図である。
【図１５】いくつかの実装形態による、参加ノードデータ構造の一例を示す。
【図１６】いくつかの実装形態による、参加ノードをチェックするための例示的なプロセスを示す流れ図である。
【図１７】いくつかの実装形態による、マスタノードを決定するための例示的なプロセスを示す流れ図である。
【図１８】いくつかの実装形態による、監査を実行する例示的なプロセスを示す流れ図である。
【図１９】いくつかの実装形態による、スマートコントラクトの実行に関連してブロックチェーンを管理する例示的なプロセスを示す流れ図である。
【発明を実施するための形態】
【０００８】
本明細書におけるいくつかの実装形態は、例えばスマートコントラクトを実行するために使用されるブロックチェーンのようなブロックチェーンを、管理及び監視するために使用される情報を決定及び取得するための技法及び構成を対象としている。本明細書の例では、スマートコントラクトは、コントラクトに従って指定された条件の発生に基づいたアクションまたは他の機能の実行を、容易にし、検証し、またはそうでなければ引き起こす計算機プロトコル及び実行可能コードを含む。スマートコントラクトは、通常、実行結果のみを保存するため、ブロックチェーンを使用したスマートコントラクトの実行を監視または監査する機能が望まれる。
【０００９】
本明細書のいくつかの例では、スマートコントラクトについて生成されたブロックチェーンは、追加の監査情報と共に生成される。追加の監査情報は、例えば、スマートコントラクト実行時間、スマートコントラクトを実行したノードに関する実行ノード情報、及び、スマートコントラクトの実行を誘起したイベント、データまたはその他の入力条件に関する情報等である。本明細書におけるブロックチェーンは、例えば、スマートコントラクトの実行を許可するためにデジタル署名を提供している参加者の１または複数が参加しないでスマートコントラクトを実行しようとした場合の検出を可能にする。別の例として、スマートコントラクトが、スマートコントラクトを実行するために外部データに依存する場合、外部データ及び関連するメタデータはブロックチェーンに含まれてもよく、外部データがもう利用できなくなったとしても、コントラクトの条件に応じて機能が適切に実行されたことを検証するために後でチェックされてもよい。プライベートブロックチェーンコンセンサスシステムの場合のようなさらに別の例として、多数のコンセンサスノードを制御する特定の参加者が、特定の参加者にとって有利なスマートコントラクトをブロックチェーンに追加することが可能であり得る。しかしながら、本明細書における実施形態は、そのような行動から保護するための技法を提供する。
【００１０】
本明細書におけるいくつかの例は、複数のコンセンサスノード計算装置を含むプライベートブロックチェーンシステムの環境に適用される。本明細書の監査機能に使用され得る監査情報を取得するために、コンセンサスノードは、それぞれのコンセンサスノード自体に関する情報、例えば、そのコンセンサスノードのノード識別子（ＩＤ）、コンセンサスノードの場所、及びコンセンサスノードのオペレータ及び／または所有者などの追加情報をブロックチェーンに追加するように構成され得る。さらに、コンセンサスノードは、システム内の他のコンセンサスノードに関するノード情報をブロックチェーンの１つまたは複数のブロックに追加することができる。さらに、各コンセンサスノードは、スマートコントラクトに関する情報、例えばスマートコントラクトが実行された時間、スマートコントラクトの実行を引き起こすクライアントまたは外部システムからの通信を受信した時間、コンセンサスノード間でコンセンサスが得られた時間、スマートコントラクトを実行したノードの識別子などを、ブロックチェーンに追加することができる。さらに、コンセンサスノードは、ブロックチェーンにクライアント情報、例えば、クライアントのデジタル署名が受信されたという証拠、及びスマートコントラクト自体に関する情報を追加することができる。さらに、コンセンサスノードは、外部システムに関する情報をブロックチェーンに追加することができ、例えば、スマートコントラクトの実行を引き起こした外部データ、外部データを送信した計算装置の識別子やＩＰアドレスなどを追加することができる。
【００１１】
さらに、いくつかの例では、システムは、監査可能なシステムを提供するための一連の規則を含み得る。例えば、規則は、コンセンサス時に、すべてのコンセンサスノードが同意していることを含み得る。あるいは、規則は、スマートコントラクトの各参加者について、スマートコントラクトの各参加者に関連付けられた少なくとも１つのコンセンサスノードが、コンセンサス時に同意していることを含んでもよい。さらに別の代替案として、コンセンサスが達成される限り、コントラクトへの参加者がどのノードがコンセンサスに参加するかについて制限を設けない、ことを規則は含み得る。さらに、スマートコントラクト自体に関して、いくつかの例では、規則は、スマートコントラクトに必要なすべての情報がブロックチェーンに格納されることを含み得る。あるいは、他の例では、規則は、スマートコントラクトに関する特定の情報のみがブロックチェーンに格納され、他の情報は外部システムから利用可能であることを含み得る。さらに、場合によっては、スマートコントラクトが実行される前に、スマートコントラクトを実行するコンセンサスノードが、指定されたすべての監査情報がブロックチェーンに存在するか、またはブロックチェーンに含めるために利用可能であると判定してもよい。
【００１２】
いくつかの例では、監査計算装置は、１つまたは複数のコンセンサスノードと通信してブロックチェーンを取得し、そのブロックチェーンに含まれる情報の監査を実行して、システムに生成されたブロックチェーン及びシステムによって実行されたスマートコントラクトの監査の要件を、ブロックチェーン及びコンセンサスノードが満たしていることを、確認してもよい。例えば、監査計算装置は、すべてのノードのノード情報がブロックチェーンに含まれていること、スマートコントラクトへの参加者のデジタル署名がブロックチェーンにリストアップされていること、そして、外部データがある場合には、それがブロックチェーンに含まれているまたは記述されていること、を判定してもよい。いずれかの情報がブロックチェーンに含まれていない場合、監査プログラムは、コントラクトの１または複数の参加者に、それを通知することができる。例えば、監査計算装置は、指定された監査情報が、それをブロックチェーンに含めるために利用可能ではないこと、及び／または、指定された監査情報がブロックチェーンに含まれないことを示す通知を、１または複数の参加者に送信することができる。それに応じて、参加者は、必要な監査情報がブロックチェーンに含まれるまでコントラクトの実行を中断するか、またはコントラクトが実行されないようにするための他の措置を講じることができまる。
【００１３】
説明の目的で、いくつかの例示的な実装形態は、スマートコントラクトの実行に関連して使用されるブロックチェーンの環境で説明されている。しかし、本明細書における実装形態は、提供された特定の例に限定されず、本明細書中の開示に照らして当業者に明らかなように、他のアプリケーション、他のタイプの計算システム、他のシステムアーキテクチャなどに使用されるブロックチェーン及び類似のデータ構造に拡張され得る。
【００１４】
図１は、いくつかの実装形態によるシステム１００の例示的アーキテクチャを示す。システム１００は、複数のコンセンサスノード計算装置１０２（１）、１０２（２）、１０２（３）、…、１０２（Ｎ）を含み、それらは互いに通信することができる。以下において、単に、これらをコンセンサスノード１０２と呼ぶ。コンセンサスノード１０２は、１つ以上の監査計算装置１０６、１つ以上のクライアント計算装置１０８、及び／または１つ以上の外部システム計算装置１１０と、１つ以上のネットワーク１０４を介して通信することができる。
【００１５】
本明細書のいくつかの例では、システム１００は、少なくとも１つのブロックチェーン１１２を生成及び維持することができる、スケーラブルで分散型のピアツーピアシステムである。したがって、データの保全性は、例えば単なる信頼ベースのインフラストラクチャよりも、コンセンサスメカニズムに基づく。本明細書の例では、「コンセンサス」は、何が真実であるか偽であるかに関する集合的な意思決定プロセスまたは同意を指すことがある。例えば、システム１００は、参加コンセンサスノード１０２からなる分散コンセンサスネットワークを提供する。その分散コンセンサスネットワークでは、システム１００に参加している様々な異なるコンセンサスノード１０２が、同意に達し得る。個々のコンセンサスノード１０２は、それら自身のデータを提供して、コンセンサスネットワーク全体として集団的な同意された決定を達成することを可能にすることができる。
【００１６】
システム１００は、時系列順のトランザクションまたは他の情報を、ブロックチェーン１１２内の連続するブロックとして記録するように構成され、ブロックチェーン１１２は対応するトランザクションのための分散データベースとして機能する。その結果、トランザクションの記録は安全に記録され、実質的に変更不可能である。システム１００内のすべてのコンセンサスノード１０２は、同じトランザクションに対して同じノードプログラム１１４（同じコンセンサスプログラム１１６及び同じスマートコントラクト監査プログラム１１８を含む）を実行することができ、したがって各トランザクションを有効化（または無効化）し、各トランザクションについて監査情報をブロックチェーン１１２へ追加することができる。有効なトランザクションは、ブロックチェーン１１２内の次のブロックに書き込まれる。コンセンサスノード１０２は、さらに後述するように、例えば、各トランザクションについて、すなわちスマートコントラクト１２０の各実行に対応して、監査情報をブロックチェーンに追加することができる。
【００１７】
いくつかの例では、本明細書のシステム１００の分散ピアツーピア性は、任意の単一のユーザまたはユーザのグループが基礎となるインフラストラクチャを制御することを防ぐ、または任意の単一のユーザまたはユーザのグループがシステム１００の完全性を損なうことを防ぐ、のに役立ち得る。システム１００のユーザ１１９は、全て等しい状態を有してもよく、同じプロトコルに準拠してもよい。場合によっては、ユーザ１１９は、個人、企業、国家、組織など、または、これらのエンティティの組み合わせとすることができる。本明細書のいくつかの例では、システム１００はプライベート（すなわち一般にはアクセスできない）であり、コンセンサスノード１０２は、典型的には、１人または複数のユーザ１１９によって所有され、操作され、またはそうでなければ関連付けられることができる。場合によっては、コンセンサスノード１０２のうちのいくつかは、スマートコントラクト１２０への第１の参加者と関連付けられてもよく、コンセンサスノード１０２のうちの他のいくつかは、スマートコントラクト１２０への第２の参加者と関連付けられてもよい。他の場合には、コンセンサスノード１０２のうちのいくつかまたはすべてが、第１の参加者または第２の参加者のいずれとも関連していない第三者と関連していてもよい。
【００１８】
コンセンサスノード１０２はそれぞれ、ブロックチェーン１２０のコピーを維持し、スマートコントラクト１２０に従って行われたトランザクションの検証に参加することができる。例えば、システム１００を、様々な用途のために、１つまたは複数のスマートコントラクト１２０を実行するために使用できる。例えば、製品のサプライチェーンの追跡、企業資産の使用に関する資産管理の実行、クラウドファンディングプロジェクトの追跡、暗号通貨の生成、ファイル管理の分散化、モノインターネット（ＩｏＴ）デバイスの管理、知的財産の保護、データの管理、土地所有権の登録、株式取引の追跡、銀行取引の追跡などに、使用できる。
【００１９】
本明細書のブロックチェーン技術と併せて使用されるスマートコントラクト１２０は、上述の例示の用途または他の多数の用途のうちのいずれかを実行するために使用され得る。上述のように、スマートコントラクト１２０は、条件が満たされたときに機能が実行されるという同意を含み得る。したがって、スマートコントラクト１２０は、満たされるべき条件及び実行されるべき対応する機能を指定するようにプログラムされた実行可能コードであり得、ブロックチェーン１１２は、条件が満たされること及び対応する機能が自動的に実行されることを保証し得る。
【００２０】
一例として、ＩｏＴに関して、スマートコントラクトは、複数の検出された条件に基づいて建物内の異なるゾーン内の温度を自動的に制御するなどのために、遠隔ＩｏＴシステムの管理を自動化するために使用されてもよい。別の例として、スマートコントラクト１２０及びブロックチェーン１１２は、企業の資産管理、例えば組織の物的資産の使用及びライフサイクルを管理するために使用されてもよい。別の例として、スマートコントラクト１２０及びブロックチェーン１１２は、例えば金融商品が特定のベンチマークを満たしたときにデリバティブを支払う、特定の価格に達したときに株式を売買する等の仲介取引のような、金融取引を実行及び記録するために使用され得る。さらに別の例として、スマートコントラクト１２０及びブロックチェーン１１２を、電力を自動的に再分配するために使用することができる。例えば、ローカルソーラマイクログリッドが余剰エネルギを生成する場合等に、スマートコントラクト１２０及びブロックチェーン１１２を使用して、余剰エネルギを自動的に再分配できる。ブロックチェーン１１２及びスマートコントラクト１２０を使用して、他の多数の機能を実行することができ、本明細書で論じる例は、多くの可能な用途のうちの数例にすぎない。
【００２１】
スマートコントラクト１２０が最初に設定されるか、そうでなければ確立されると、スマートコントラクト１２０の１人または複数の参加者（すなわち、ユーザ１１９）は、それぞれのクライアント計算装置１０８上のそれぞれのクライアントプログラム１２２を使用して、スマートコントラクト１２０に署名する。例えば、クライアントプログラム１２２を実行して、スマートコントラクト１２０及びスマートコントラクト用のデジタル署名１２４を、スマートコントラクト１２０を実行するコンセンサスノード１０２に送信するように、クライアント計算装置を構成することができる。これにより、上述のように、コンセンサスノード１０２は、スマートコントラクト１２０を実行する前に、スマートコントラクト１２０が署名されていることを検証することができる。いくつかの例では、デジタル署名１２４は、スマートコントラクト１２０を使用して実行された取引についての監査情報に含まれてもよい。
【００２２】
いくつかの例では、スマートコントラクト１２０の実行は、１つ以上の外部システム計算装置１１０からの外部データ１２６の受信に依存し得る。例えば、外部システムプログラム１２８は、コンセンサスノード１０２に外部データ１２６を送信するように構成され得る。スマートコントラクト１２０の性質に応じて、外部データ１２６は任意の対応する種類のデータとすることができる。例えば、スマートコントラクトが建物内の１つまたは複数のサーモスタットの制御に関するものである場合、外部データはサーモスタットに対応する区域の温度データであり得る。スマートコントラクトが１つ以上の証券を管理するためのものである場合、外部データは現在の株式市場情報などであり得る。上記の例及び本明細書の開示を考慮すれば、他の多数の外部データが当業者には明らかであろう。
【００２３】
外部データを受信すると、コンセンサスノード１０２はスマートコントラクトを実行することを決定してもよい。いくつかの例では、コンセンサスノードは、最初にスマートコントラクト監査プログラム１１８を実行して、例えば上述したような１つまたは複数の規則に基づいて、すべての必要な監査情報が存在または利用可能であることを確認してもよい。各コンセンサスノード１０２は、スマートコントラクト１２０をトランザクションとして実行することができる。場合によっては、複数のコンセンサスノード１０２はマスタノードを含むことができ、マスタノードは、後述するように、他のコンセンサスノードとの間で監査情報１３０を送受信し、コンセンサスシステム１００における各コンセンサスによって維持されるブロックチェーンに、監査情報が追加できるようにする。監査情報１３０は、コンセンサスノード１０２のコンセンサスに基づいて、１つまたは複数の追加ブロックとしてブロックチェーン１１２に追加することができる。
【００２４】
さらに、監査計算装置１０６は、監査プログラム１３２を実行することができる。例えば、監査プログラム１３２は、ユーザ１１９の要求により、または他の何らかのトリガに基づいて、定期的に実行することができる。監査プログラム１３２は、上述のように、例えば１つまたは複数の規則１３４に基づいて、ブロックチェーン１１２をチェックし、コンセンサスノード１０２が指定された監査情報をブロックチェーン１１２に追加するように構成されていることを確認する。例えば、監査プログラム１３２は、指定された監査情報がブロックチェーン１１２に追加されたことを判定するためにブロックチェーン１１２にアクセスしてもよい。いくつかの場合、例えば、システム１００が規則１３４に従って適切に構成されていない場合、監査プログラム１３２は、スマートコントラクトの参加者などのクライアント計算装置１０８のユーザ１１９、及び／または、監査計算装置１０６の管理者１３８に、監査結果通知１３６を送信するように監査計算装置１０６を構成することができる。否定的な監査結果通知１３６を受信したことに応答して、スマートコントラクト１２０の実行がユーザ１１９及び／または管理者１３８によって中断され、否定的な結果の原因が判断され修正される。さらに、この例では監査計算装置１０６は別個の計算装置として示されているが、他の例では、監査計算装置の機能を１つまたは複数のコンセンサスノード１０２が実行できるように、監査計算装置をコンセンサスノード１０２と組み合わせることができる。
【００２５】
いくつかの例では、スマートコントラクト１２０の各実行に続いて、スマートコントラクト実行結果１４０が、クライアント計算装置１０８または外部システム計算装置１１０のうちの少なくとも１つに送信され得る。例えば、スマートコントラクト実行結果１４０を受信すると、クライアントプログラム１２２またはシステムプログラム１２８に実行結果１４０に基づく機能を実行させることができる。例えば、スマートコントラクトがサーモスタットの制御用である場合、実行結果１４０は、システムプログラム１２８に、サーモスタットを指定量だけ増減させる。いくつかの例では、スマートコントラクト実行結果は、ブロックチェーン１１２全体を含み得る。他の例では、実行結果は、スマートコントラクトの出力値のみを含み得る。本明細書の開示の利益を得る多数の他の変形が当業者に明らかであろう。
【００２６】
図２は、いくつかの実装形態によるコンセンサスノード１０２の一例を示す。場合によっては、コンセンサスノード１０２は、任意の方法で具現化され得る複数の物理サーバまたは他の種類の計算装置を含み得る。例えば、サーバの場合、モジュール、プログラム、他の機能構成要素、及びデータ記憶装置の一部は、サーバ上、例えば、１つまたは複数のサーバファームまたはデータセンタ、クラウドホストコンピューティングサービスで実装することができる。他の計算機アーキテクチャを追加的または代替的に使用することができる。図示の例では、コンセンサスノード１０２は、１つまたは複数のプロセッサ２０２、１つまたは複数の通信インターフェース２０４、１つまたは複数の計算機可読媒体２０６、及び１つまたは複数の入出力（Ｉ／Ｏ）装置を含むか、それらと関連付けられてもよい。例えば、計算機可読媒体２０６は、ローカルストレージ２１０及びメモリ２１２を含み得る。さらに、１つのコンセンサスノード１０２の説明が提供されているが、他のコンセンサスノード１０２は、同じまたは類似のハードウェア及びソフトウェア構成と構成要素を有し得る。さらに、監査計算装置１０６、クライアント計算装置１０８、及び外部システム計算装置１１０は、異なるプログラム、ソフトウェア、及び他の機能構成要素をと伴う同様のハードウェア構成を有することができる。
【００２７】
各プロセッサ２０２は、単一の処理ユニットまたは複数の処理ユニットであり得、単一または複数の計算ユニット、または複数の処理コアを含み得る。プロセッサ２０２は、１つまたは複数の中央処理ユニット、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、状態機械、論理回路、及び／または動作命令に基づいて信号を操作する任意の装置として実装することができる。例えば、プロセッサ２０２は、本明細書に記載のアルゴリズム及びプロセスを実行するように特別にプログラムまたは構成された１つまたは複数のハードウェアプロセッサ及び／または論理回路であり得る。プロセッサ２０２は、計算機可読媒体２０６に格納されている計算機可読命令を取得して実行するように構成することができ、計算機可読命令は、プロセッサ２０２を本明細書に記載の機能を実行するようにプログラムする。
【００２８】
計算機可読媒体２０６は、計算機可読命令、データ構造、プログラムコード、または他のデータなどの情報を記憶するための任意のタイプの技術で実装された揮発性及び不揮発性メモリ及び／または取り外し可能及び固定の媒体を含み得る。例えば、計算機可読媒体２０６は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、または他のメモリ技術、光学記憶装置、固体記憶装置、磁気テープ、磁気ディスク記憶装置、ＲＡＩＤ記憶システム、ストレージアレイ、ネットワーク接続ストレージ、ストレージエリアネットワーク、クラウドストレージ、または所望の情報を格納するために使用することができ、計算装置によってアクセスすることができる任意の他の媒体を含むことができるが、それらに限定されない。コンセンサスノード１０２の構成に応じて、計算機可読媒体２０６は、言及されるとき、エネルギ、搬送波信号、電磁波、及び／または信号自体などの媒体を除外する限りにおいて、有形の非一過性媒体であり得る。場合によっては、計算機可読媒体２０６はコンセンサスノード１０２と同じ場所にあってもよいが、他の例では、計算機可読媒体２０６はコンセンサスノード１０２から分離、または、部分的に分離されてよい。
【００２９】
計算機可読媒体２０６は、プロセッサ２０２によって実行可能な任意の数の機能構成要素を格納するために使用され得る。多くの実装形態では、これらの機能構成要素は、プロセッサによって実行可能な命令、モジュール、またはプログラムを含み、実行されたとき、本明細書でコンセンサスノード１０２に起因する動作を実行するようにプロセッサ２０２をプログラムする。計算機可読媒体２０６に格納された機能構成要素は、ノードプログラム１１４を含むことができ、これは、コンセンサスプログラム１１６及びスマートコントラクト監査プログラム１１８を含む。追加の機能構成要素には、スマートコントラクト１２０及びオペレーティングシステム（ＯＳ）２１４が含まれ、これらはコンセンサスノード１０２の様々な機能を制御及び管理することができる。機能構成要素のそれぞれは、１つまたは複数の計算機プログラム、アプリケーション、実行可能コード、計算機可読命令、またはその一部を含む。さらに、この例では、コンセンサスプログラム１１６及びスマートコントラクト監査プログラム１１８がノードプログラム１１４の一部として示されているが、他の例では、これらのプログラムは別々であってもよく、それぞれ複数の別々のプログラムを含んでもよく、単一プログラムに組み込まれてもよい。場合によっては、機能構成要素は、計算機可読媒体２０６のローカルストレージ２１０に格納され、計算機可読媒体２０６のメモリ２１２にロードされ、１つまたは複数のプロセッサ２０２によって実行されてもよい。多くの他のソフトウェア及び／またはハードウェア構成は、本明細書の開示の恩恵を受ける当業者には明らかであろう。
【００３０】
さらに、計算機可読媒体２０６は、本明細書に記載の機能及びサービスを実行するために使用されるデータ及びデータ構造を格納することができる。たとえば、計算機可読媒体２０６は、ノードプログラム１１４、スマートコントラクト１２０、及び／またはＯＳ２１４によって使用される、データ、メタデータ、データ構造、及び／または他の情報を格納することができる。すべてのコンセンサスノード１０２は、ブロックチェーン１１２、ならびにノード構成情報２１６及び参加ノードデータ構造２１８を維持することができる。例えば、参加ノードデータ構造２１８は、ノードプログラム１１４によって生成及び更新することができる。ノード構成情報２１６は、特定のノードに関する情報を含むことができ、管理者によって最初に設定されることができ、その後、コンセンサスシステムを開始するときにブート時にロードされる。各コンセンサスノード１０２はまた、プログラム、ドライバなどを含む他の機能構成要素、及び、機能構成要素によって使用されるかまたは生成される他のデータを含みまたは維持し得る。さらに、コンセンサスノード１０２は、他の多くの論理的、プログラム的、及び物理的構成要素を含むことができ、そのうちの上記のものは、本明細書の説明に関連する単なる例である。
【００３１】
通信インターフェース２０４は、ネットワーク１０４を介するなど、他の様々なデバイスとの通信を可能にするための１つまたは複数のインターフェース及びハードウェア構成要素を含むことができる。従って、通信インターフェース２０４は、他のコンセンサスノード１０２、クライアント装置１０８、監査計算装置１０６、及び外部システム計算装置１１０と通信するために、ネットワーク１０４への接続を提供する１つまたは複数のポートを含み得る、または接続され得る。例えば、通信インターフェース２０４は、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、インターネット、ケーブルネットワーク、セルラネットワーク、無線ネットワーク（例えば、Ｗｉ?Ｆｉネットワーク）、有線ネットワーク（例えば、ファイバチャネル、光ファイバ、イーサネット（登録商標））、直接接続、ＢＬＵＥＴＯＯＴＨ（登録商標）のような近距離通信、その他本明細書の他の箇所でさらに列挙されるものなどのうちの一つまたは複数を介する通信を可能とする。
【００３２】
１つまたは複数のネットワーク１０４は、任意の適切な通信技術を含み得る。それらは、例えば、インターネットなどの広域ネットワーク、イントラネットなどのローカルエリアネットワーク、セルラネットワークなどの無線ネットワーク、Ｗｉ−Ｆｉなどのローカル無線ネットワーク、ＢＬＵＥＴＯＯＴＨ（登録商標）などの短距離無線通信、ファイバチャネル、光ファイバ、イーサネット、または他の任意のそのようなネットワークを含む有線ネットワーク、直接有線接続、それらの任意の組み合わせ、である。従って、ネットワーク１０４は、有線及び／または無線通信技術を含むことができる。そのようなネットワークを介して通信するために使用されるプロトコルは当技術分野において周知であり、本開示では詳細に説明しない。
【００３３】
Ｉ／Ｏ装置２０８は、ディスプレイ、様々なユーザインターフェース操作装置（例えば、マウス、キーボード、タッチスクリーンなど）、オーディオスピーカ、接続ポートなどを含むことができる。本明細書の開示の利益を得る多数の他のハードウェア及びソフトウェア構成が当業者に明らかであろう。したがって、本明細書に開示されている例の範囲は、ハードウェア、ソフトウェア、またはそれらの組み合わせの特定のセットに限定されない。
【００３４】
図３は、いくつかの実装形態によるブロックチェーン生成３００の一例を示す。生成されたブロックチェーン１１２の一例が図３の左側に図示され、追加されたブロックを示している。図３の右側に、対応するコンセンサスシーケンスフロー３０２が示されている。この例では、４つのコンセンサスノード１０２（１）〜１０２（４）がコンセンサスシステムに参加し、第１のコンセンサスノード１０２（１）がこの例ではマスタノードとして指定されている。さらに、この例では、クライアントＡ装置１０８（１）、クライアントＢ装置１０８（２）、及び外部システム計算装置１１０が、以下でさらに論じるように情報を提供することができる。
【００３５】
３０４で、コンセンサスシステムが開始され、ブロックチェーン１１２の生成を開始するためにジェネシスブロック３０６が生成される。ジェネシスブロック３０６は、ブロックチェーン１１２内の最初のブロックであり、「０」のブロックの高さ（すなわち、順次ブロック番号）を有する。全てのコンセンサスノード１０２（１）〜１０２（４）は、ジェネシスブロック３０６を共有する。もちろん、ブロックチェーン１１２が既に生成されている場合、このステップは実行されない。さらに、コンセンサスシステムの起動の一部として、コンセンサスノード１０２（２）〜１０２（４）は、それぞれのノード構成情報データ構造２１６から、マスタ／第１コンセンサスノード１０２（１）に情報を送信してもよい。マスタ／第１コンセンサスノード１０２（１）は、受信した情報及びそれ自身のノード構成情報データ構造２１６から、参加ノードデータ構造２１８を生成することができる。参加ノードデータ構造２１８については、図１５を参照して以下でさらに説明する。
【００３６】
ブロック３０８及び３１０は、各コンセンサスノードに対して実行される。例えば、３０８において、マスタノードは、第１コンセンサスノード１０２（１）に関するノード構成情報データ構造２１６からの情報を他のコンセンサスノード１０２（２）、１０２（３）及び１０２（４）へ転送する。３１０で、コンセンサスノード１０２（１）〜１０２（４）の間でコンセンサスに達する。
【００３７】
本明細書の例では、コンセンサスは、コンセンサスノード１０２（１）〜１０２（４）のグループの間での１つの結果について同意するプロセスを含む。コンセンサスを判定するためのいくつかの手法があり、例えば、ＰＢＦＴ（Ｐｒａｃｔｉｃａｌ  Ｂｙｚａｎｔｉｎｅ  Ｆａｕｌｔ  Ｔｏｌｅｒａｎｃｅ）、Ｐａｘｏｓ  Ｃｏｎｓｅｎｓｕｓ  Ｐｒｏｔｏｃｏｌｓ、Ｒａｆｔ  Ｃｏｎｓｅｎｓｕｓ  Ａｌｇｏｒｉｔｈｍなどがある。例えば、ＰＢＦＴは、一般に、取引が有効であるという同意に達するために同一である十分な数の応答を受け取ることに依存している。さらに、Ｐａｘｏｓコンセンサスシステムでは、コーディネータはすべてのノードに値を提案し、ノードがその値に同意するかどうかに関してノードの応答を収集する。すべてのノードが同意する（またはいくつかの例では十分な数が同意する）場合、値は受け入れられ、コーディネータはすべてのノードに連絡して、値が最終的であることを知らせる。
【００３８】
別の例として、Ｐａｘｏｓと同様に、Ｒａｆｔは、選出されたリーダを介してコンセンサスを達成する。例えば、ラフトクラスタ内のサーバは、リーダ（すなわちマスタ）、フォロワ（すなわちノード）のいずれかである。リーダはクライアントのリクエストを受け入れ、そのリクエストをフォロワに転送する。リーダが大多数のフォロワから同意を得た後、その要求はコミットされたと見なされる。さらに、本明細書ではコンセンサスに達するためのいくつかの例示的な技法が説明されているが、他の可能な技法が本明細書の開示の恩恵を受ける当業者には明らかであろう。
【００３９】
マスタ／第１コンセンサスノード１０２（１）は、第１コンセンサスノード１０２（１）のノード構成情報データ構造２１６からの情報を第２コンセンサスノード１０２（２）、第３コンセンサスノード１０２（３）及び第４コンセンサスノード１０２（４）に転送する。マスタ／第１コンセンサスノード１０２（１）は、過半数のコンセンサスノードから確認を受け取り、要求はコミットされたと見なされる。その結果、各コンセンサスノードは、そのブロックチェーン１１２に同じブロックを追加することができる。３１２に示すように、コンセンサスノード１０２（１）〜１０２（４）のそれぞれについて、ノード情報についてプロセスが繰り返され、３１４に示すように、４つのブロックがブロックチェーン１１２に追加され、各追加ブロックは、コンセンサスシステムに参加するコンセンサスノード１０２（１）〜１０２（４）の異なる１つに対するノード情報を含む。
【００４０】
第４ノード情報ブロック３１６がブロックチェーン１１２に追加された後、ブロックチェーン１１２は５つのブロックを有する。３１８に示すように、マスタ／第１コンセンサスノード１０２（１）は、参加ノードをチェックすることができる。３１８で参加ノードをチェックする動作は、どのコンセンサスノード１０２がコンセンサス３１０に参加してブロック３１４を追加したかを確認するために実行できる。これは、コンセンサスシステム内のすべてのアクティブなコンセンサスノードが識別されたこと、及び識別されたすべてのコンセンサスノードがまだアクティブであることを判定することを含み得る。参加しているノードをチェックするプロセスは、図１４〜１６を参照して以下でさらに説明される。さらに、コンセンサス３１０の決定及び参加ノードのチェック３１８は、追加されたブロックごとに１回実行することができる。したがって、この例では、動作３１０及び３１８は、ブロックチェーン１１２に追加された４つのブロック３１４のそれぞれに対して１回ずつ、計４回実行される。参加ノードをチェックした後、ブロックチェーン１１２は、コンセンサスシステムに参加している各コンセンサスノード１０２（１）〜１０２（４）のノード情報を含む。
【００４１】
３２０に示すように、クライアント計算装置１０８（１）または１０８（２）のうちの１つは、スマートコントラクトをコンセンサスノード１０２（１）〜１０２（４）のそれぞれに送信することができる。他の例として、クライアント計算装置１０８（１）または１０８（２）は、スマートコントラクトをマスタ／第１コンセンサスノード１０２（１）に送信し、マスタ／第１コンセンサスノード１０２（１）は、スマートコントラクトを他のコンセンサスノード１０２（２）〜１０２（４）に送信することができる。３２２で、スマートコントラクトの展開に関してコンセンサスに達し、コンセンサスノード１０２（１）〜１０２（４）のそれぞれは、ブロック３２４をそのブロックチェーン１１２に追加して、スマートコントラクトブロック３２４をブロックチェーン１１２に含める。他の例として、例えばコントラクトがブロックチェーンに既に追加されている場合のように、クライアントのうちの１人は、コントラクトに対する更新、例えばコントラクトを修正するための更新コード、またはコントラクトに関する他のデータを送信することができる。そのような場合、コンセンサスシステムによって実行される手順は同様であり得、コントラクトコード／データは、各コンセンサスノード１０２（１）〜１０２（４）でブロックチェーン１１２に追加され得る。３２６において、マスタ／第１コンセンサスノード１０２（１）は、コンセンサスシステム内の参加ノードを再度チェックすることができる。
【００４２】
３２８で、クライアントＡ計算装置１０８（１）は、スマートコントラクトの実行が承認されていることを示すために、クライアントＡのデジタル署名をコンセンサスシステムに送信することができる。例えば、クライアントＡ計算装置１０８（１）は、Ａのデジタル署名をコンセンサスノード１０２（１）〜１０２（４）のそれぞれに送信することができる。あるいは、クライアントＡ計算装置１０８（１）は、Ａのデジタル署名をマスタ／第１コンセンサスノード１０２（１）に送信し、マスタ／第１コンセンサスノード１０２（１）は他のコンセンサスノード１０２（２）〜１０２（４）にデジタル署名を送信してもよい。３３０において、Ａのデジタル署名に関してコンセンサスに達し、コンセンサスノード１０２（１）〜１０２（４）のそれぞれは、ブロックチェーン１１２にブロック３３２を追加して、ブロックチェーン１１２にＡのデジタル署名を有するブロック３３２を含める。３３６において、マスタ／第１コンセンサスノード１０２（１）は、コンセンサスシステム内の参加ノードを再度チェックすることができる。ブロック３２８、３３０、及び３３６が繰り返されて、Ｂのデジタル署名がブロックチェーン１１２に追加される。
【００４３】
３３８において、外部システム計算装置１１０はデータをコンセンサスシステムに送信することができる。例えば、スマートコントラクトの性質に応じて、外部システム１１０は、スマートコントラクトの実行に関連するデータを送信することができる。例えば、３３８において受信されたデータは、スマートコントラクトの１つまたは複数の前提条件を示す入力とすることができ、これが満たされると、１つまたは複数の機能の実行によって出力結果が生成されうる。例えば、外部システム１１０は、アプリケーションプログラミングインターフェース（ＡＰＩ）の動作などを通じて、データをコンセンサスノード１０２（１）〜１０２（４）のそれぞれに送信することができる。あるいは、外部システム１１０は、データをマスタ／第１コンセンサスノード１０２（１）に送信し、マスタ／第１コンセンサスノード１０２（１）は他のコンセンサスノード１０２（２）〜１０２（４）にデータを送信し得る。３４０において、データに関してコンセンサスに達し、コンセンサスノード１０２（１）〜１０２（４）のそれぞれは、ブロックチェーン１１２にブロック３４２を追加してブロックチェーン１１２にデータを含める。３４４において、マスタ／第１コンセンサスノード１０２（１）は、コンセンサスシステムの参加ノードを再度チェックすることができる。
【００４４】
３４８において、コンセンサスシステムは、スマートコントラクトを呼び出すために、外部システム１１０またはクライアント計算装置１０８から通信を受信することができる。一例として、通信は単にコンセンサスシステムへのデータの送信であり、マスタ／第１コンセンサスノード１０２（１）は、そのデータに基づいて、スマートコントラクトを呼び出すことを決定し得る。別の例として、通信は、スマートコントラクトを実行するための１つまたは複数のコンセンサスノードへの命令であり得る。通信は、マスタ／第１コンセンサスノード１０２（１）に対するものでもよく、複数のコンセンサスノードのうちの１つまたは全てに対するものでもよい。通信がマスタ／第１コンセンサスノード１０２（１）のみに対するものである場合、マスタ／第１コンセンサスノード１０２（１）は他のコンセンサスノードに通信を送ってコンセンサスを得てもよく、または、３５０で示すように、本明細書で論じた技術のいずれかを使用してコンセンサスを得てもよい。３５４において、マスタ／第１コンセンサスノード１０２（１）は、コンセンサスシステム内の参加ノードを再度チェックすることができる。
【００４５】
３５６、３５８、３６０、及び３６２において、それぞれのコンセンサスノード１０２（１）〜１０２（４）は、３３８において外部システムから受信したデータに基づいて、スマートコントラクトを実行することができる。一例として、各コンセンサスノード１０２は、実行トランザクションとしてスマートコントラクトを実行し、少なくとも１つの入力としての外部システムからのデータに基づいて、少なくとも１つの出力を決定することができる。場合によっては、実行された各トランザクション結果は、個々のコンセンサスノード１０２（２）〜１０２（４）によってマスタ／第１コンセンサスノード１０２（１）に送信されてもよい。次いで、マスタ／第１コンセンサスノード１０２（１）は、結果をすべてのコンセンサスノードに送信することによって、実行された各トランザクション結果についてコンセンサスを求めることができる。３６４に示すように、コンセンサスに達することができ、実行トランザクション情報は、各コンセンサスノード１０２（１）〜１０２（４）によってブロック３６６として、それ自身のブロックチェーン１１２に追加される。３７０において、マスタ／第１コンセンサスノード１０２（１）は、コンセンサス３６４に参加した参加コンセンサスノードが変更されていないことを確認するために、コンセンサスシステム内の参加ノードを再度チェックすることができる。ブロック３６４及び３７０のプロセスは、各コンセンサスノード１０２（１）〜１０２（４）からの各トランザクション結果に対して繰り返すことができ、したがって３６８に示すように、４つのブロックを各コンセンサスノードのブロックチェーン１１２に追加することができる。
【００４６】
図４は、本明細書のいくつかの実装形態による例示的ブロックチェーン部分４００を示す。この例では、図３のブロックチェーン１１２の５番目、６番目、７番目のブロックが示されている。すなわち、ブロック３１６は第５ブロック（ブロック高さ４）、ブロック３２４は第６ブロック（ブロック高さ５）、ブロック３３２は第７ブロック（ブロック高さ６）である。さらに、図３に関して上述したように、ブロックチェーン１１２は、図４には示されていない他のブロックを含む。
【００４７】
ブロックチェーン内のブロックの一次識別子は、そのブロックヘッダハッシュ４０２である。ブロックヘッダハッシュ４０２は、典型的にはＳＨＡ２５６アルゴリズムを使用してブロックヘッダ４０４を２回ハッシュすることによって作成されたデジタル指紋であるが、他の技術及び／またはアルゴリズムを使用してもよい。結果として生じるブロックヘッダハッシュ４０２は、対応するブロックのヘッダを一意に表す３２バイトのハッシュ値である。ブロックヘッダハッシュは、特定のブロックのブロックヘッダ４０４を単にハッシュすることによって、任意のコンセンサスノードまたはユーザによって独立して導出することができる。
【００４８】
典型的には、ブロックヘッダハッシュ４０２は、ブロックがブロックチェーンの一部として記憶されるとき、ブロックデータ構造内に含まれない。むしろ、ブロックヘッダハッシュ４０２は、ノードによって計算され得、例えば、ブロックがノード上で生成される、または別のノードから受信されるときに計算される。一例として、ブロックチェーンを維持する各ノードは、ブロックチェーン内のすべてのブロックについてのブロックヘッダハッシュ４０２及びブロックチェーンについての他のメタデータを含む、対応するメタデータデータ構造（図４には示さず）を維持し得る。
【００４９】
さらに、ブロックチェーン内のブロックは、ブロック高さ４０６によって識別することができる。ブロック高さ４０６は、ブロックチェーン内のブロックの順序位置である。たとえば、ブロックチェーン内に生成された最初のブロック（ジェネシスブロック）のブロックの高さは０である。ブロックチェーンにブロックが追加されると、増加する正の整数を使用して順番に番号が付けられる。前のブロックに追加される後続の各ブロックは、ブロックチェーン内で１つ上の位置にある。ブロック高さ４０６もまた、通常、ブロックのデータ構造の一部ではない、すなわち、ブロック内に格納されていない。そうではなく、各コンセンサスノード１０２または他の計算装置は、ブロックチェーン１１２内の各ブロックの位置（ブロック高さ４０６）を動的に識別し得る。あるいは、場合によっては、ブロック高さ情報は、メタデータとしてコンセンサスノードによって記憶され得る。したがって、図示の例では、ブロック３１６はブロック高さ値＝４を有し、ブロック３２４はブロック高さ値＝５を有し、ブロック３３２はブロック高さ値＝６を有する。
【００５０】
ブロックヘッダ４０４に加えて、各ブロックはブロック本体４０８を含み、ブロック本体４０８は、ブロックによって格納されているデータまたは他の情報を含むことができる。例えば、図示の例では、ブロック３１６は、コンセンサスシステムに参加しているコンセンサスノード１０２のうちの１つに対するノード構成情報データ構造２１６を含む参加ノード情報４１０を記憶する。さらに、ブロック３２４のブロック本体４０８は、スマートコントラクトコード４１４（または少なくともスマートコントラクトソースコードのハッシュ）などのスマートコントラクト情報４１２、及びスマートコントラクトの参加者の名前、連絡先情報などのスマートコントラクト参加者ＩＤ４１６、公開鍵、その他の識別情報などを含む。さらに、ブロック３３２のブロック本体４０８は、各コントラクト参加者のデジタル署名４２０（例えば、公開鍵及びスマートコントラクトのソースコードハッシュなどの暗号化ハッシュ）及びデジタル署名が受信された時間４２２を含むユーザ署名４１８を含む。いくつかの例では、スマートコントラクト参加者の公開鍵がデジタル署名４２０として、認証されるデータの少なくとも一部の暗号化ハッシュ値（例えば、コントラクトコード自体、コントラクトコードを送信するメッセージ等）と共に含まれてもよい。
【００５１】
各ブロックのブロックヘッダ４０４は、直前ブロックの直前ブロックヘッダハッシュ４２８を含む。したがって、ブロック３２４は、ブロック３１６のブロックヘッダハッシュである直前ブロックヘッダハッシュ４２８を含む。したがって、ブロックチェーン１１２内のブロックの順序は、各ブロック内の直前ブロックヘッダハッシュ４２８と、各ブロックに対して計算されるブロックヘッダハッシュ４０２とを比較することによって決定され得る。
【００５２】
さらに、ブロックヘッダ４０４は、ブロック本体ハッシュ４３０及びブロックが作成された時間に対応するタイムスタンプ４３２、ならびにこの例には示されていない他の可能な情報を含むことができる。場合によっては、ブロック本体ハッシュ４３０は、ブロックチェーン１１２が多数のトランザクションを格納するために使用される場合のように、マークル木として計算されてもよい。しかし、他の場合では、上述のＳＨＡ２５６ハッシュアルゴリズムを使用するなど、他の技法を使用してブロック本体４０８をハッシュすることができる。いずれの場合も、ブロック本体４０８のハッシュ４３０がブロックヘッダ４０４に含まれているため、そしてブロックヘッダ４０４のブロックヘッダハッシュ４０２を使用してブロックを識別しているので、ブロックヘッダハッシュ４０２の値を変更することなくブロック本体４０８のデータを変更することは不可能であり、それによって、ブロックの識別子を変更し、ブロックの内容が変更されたという証拠を提供することになる。
【００５３】
図５は、本明細書のいくつかの実装形態による例示的なブロックチェーンの部分５００を示す。この例では、図３のブロックチェーン１１２の９番目、１０番目、及び１１番目のブロックが示される。すなわち、ブロック３４２は第９ブロック（ブロック高さ８）、ブロック３５２は第１０ブロック（ブロック高さ９）、ブロック３６６は第１１ブロック（ブロック高さ１０）である。さらに、図３に関して上述したように、ブロックチェーン１１２は、図５には示されていない他のブロックを含む。
【００５４】
図示の例では、ブロック３４２のブロック本体４０８は、外部システムから受信したデータを受信データ５０２として格納する。いくつかの例では、受信データ５０２に関するメタデータ５０４も、ブロック本体４０８に格納することができ、例えばデータが受信された日時５０６、データのソース５０８及び／または他の様々な種類のメタデータを格納できる。さらに、ブロック３５２のブロック本体４０８は、スマートコントラクトを呼び出す通信に関する情報５１０を含み、例えば、スマートコントラクトを呼び出す通信または命令のコピー、通信のソース、通信が受信された時間、使用するデータを識別する情報などである。さらに、ブロック３６６のブロック本体４０８は、スマートコントラクトの実行からの実行されたトランザクション５１２についての情報を含む。たとえば、実行されたトランザクション５１２は、１つまたは複数の入力５１４及び１つまたは複数の出力５１６を含むことができ、その内容はスマートコントラクトの性質に依存し得る。たとえば、入力には、コントラクト参加者の公開鍵、コントラクト参加者の秘密鍵による署名、及び入力データなどのその他の情報が含まれ得る。さらに、出力は、出力値及び／または量、及び他のコントラクト参加者の公開鍵を含み得る。さらに、ブロック本体４０８はスマートコントラクトの実行に関する情報５１８を格納することができ、例えば、図１３に関して以下でさらに説明するように、スマートコントラクトを実行したコンセンサスノードの識別子、コントラクトが実行された時間、実行プロセスのログなどが格納され得る。
【００５５】
図６、８、１０、１２、１４、及び１６〜１９は、いくつかの実装形態による例示的なプロセスを示す流れ図である。プロセスは、一連の動作を表す論理的な流れ図におけるブロックの集まりとして示されており、それらの一部または全部は、ハードウェア、ソフトウェア、またはそれらの組み合わせで実施することができる。ソフトウェアの文脈では、ブロックは、１つまたは複数のプロセッサによって実行されると、列挙された動作を実行するようにプロセッサをプログラムする、１つまたは複数の計算機可読媒体に格納された計算機実行可能命令を表し得る。一般に、計算機実行可能命令は、特定の機能を実行するかまたは特定のデータタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。ブロックが記載されている順序は、限定として解釈されるべきではない。説明されたブロックのうちの任意の数は、プロセスまたは代替プロセスを実装するために任意の順序で及び／または並行して組み合わせることができ、すべてのブロックを実行する必要はない。説明のために、プロセスは、本明細書の例に記載されている環境、フレームワーク、及びシステムを参照して説明されているが、プロセスは、多種多様な他の環境、フレームワーク、及びシステムで実施され得る。
【００５６】
図６は、いくつかの実装形態による参加ノード情報をブロックチェーンに追加するための例示的なプロセス６００を示す流れ図である。プロセス６００は、図３のブロック３０８及び３１０に関して上述したように、各コンセンサスノード１０２によって実行することができる。例えば、スマートコントラクト監査プログラム１１８は、各コンセンサスノード上で実行され、コンセンサスノードの１つまたは複数のプロセッサを、プロセス６００を実行するように構成してもよい。
【００５７】
６０２において、計算装置は、ノード構成情報データ構造から、コンセンサスノード情報を取得することができる。例えば、上述したように、各コンセンサスノードは、自身のノード構成情報データ構造から得られたそれ自体に関する情報を、マスタノードに提供し、マスタノードは、その情報をブロックチェーンのブロックに追加するためのコンセンサスを求めてもよい。いくつかの例では、各コンセンサスノード上のスマートコントラクト監査プログラム１１８は、プロセス６００を実行するようにコンセンサスノードの１つまたは複数のプロセッサを構成することができる。
【００５８】
６０４において、計算装置は、コンセンサスに達したかどうかを判定することができる。もしそうであれば、プロセスはブロック６０６へ進む。そうでなければ、プロセスはブロック６０８へ進む。
【００５９】
６０６において、計算装置は、ノードに関するノード情報をブロックチェーン内の新しいブロックに追加することができる。上述のように、プロセス６００は、コンセンサスシステムに参加している各ノードに対して繰り返されてよい。
【００６０】
６０８において、コンセンサスに達していない場合、計算装置はコンセンサスを待ち、及び／またはブロック６０２に戻ることができる。
【００６１】
図７は、いくつかの実装形態によるコンセンサスノード構成情報データ構造２１６を示す。この例では、データ構造２１６は、コンセンサスノード識別子（ＩＤ）７０２、コンセンサスノード位置７０４、コンセンサスノード所有者及び／またはオペレータ７０６、ならびにコンセンサスノードＩＰアドレス７０８を含む。いくつかの例では、各コンセンサスノード１０２は、独自のノード構成情報データ構造２１６を格納することができる。さらに、場合によっては、所有者及び／またはオペレータ７０６は、上述したユーザ１１９のうちの１人など、スマートコントラクトの参加者のうちの１人であり得る。
【００６２】
図８は、いくつかの実装形態による、デジタル署名及び／またはスマートコントラクトソースコードをブロックチェーンに追加するための例示的なプロセス８００を示す流れ図である。いくつかの例では、プロセス８００は、１つまたは複数のコンセンサスノード１０２または他の適切な計算装置によって実行され得る。例えば、スマートコントラクト監査プログラム１１８は、コンセンサスノード上で実行されて、プロセス８００を実行するようにコンセンサスノードの１つまたは複数のプロセッサを構成することができる。
【００６３】
８０２において、計算装置は、ブロックチェーンに追加されるスマートコントラクト及び／またはデジタル署名を受信することができる。例えば、クライアントは、コンセンサスノードによるスマートコントラクトの実行を可能にするために、スマートコントラクト及びデジタル署名をコンセンサスノードに送信することができる。
【００６４】
８０４において、計算装置は、コンセンサスに達したかどうかを判定することができる。もしそうであれば、プロセスはブロック８０６に進む。そうでない場合、プロセスはブロック８０８に進む。
【００６５】
８０６において、計算装置は、スマートコントラクトのソースコード及び／またはデジタル署名をブロックチェーンの新しいブロックに追加することができる。いくつかの例では、スマートコントラクトとデジタル署名をブロックチェーンの別々のブロックに追加することができ、他の例では、スマートコントラクトとデジタル署名をブロックチェーンの同じブロックに追加することができる。他のクライアント情報及び／またはメタデータも上述のようにブロックチェーンに追加されてよく、例えば、スマートコントラクトまたはデジタル署名が受信された時間、スマートコントラクトまたはデジタル署名が受信されたソースなどが追加さてもよい。
【００６６】
８０８において、コンセンサスに達していない場合、計算装置はコンセンサスを待つことができる。
【００６７】
図９は、いくつかの実装形態による署名及びスマートコントラクトソースコードデータ構造９００を示す。場合によっては、データ構造９００内の情報の一部または全部をスマートコントラクト監査プログラム１１８によってブロックチェーンのブロックに追加することができる。この例では、データ構造９００は、ソースコードハッシュ９０２を含み、これは、スマートコントラクトのオリジナルのソースコードにハッシュアルゴリズムを適用することによって取得されたハッシュ値である。さらに、データ構造９００は、スマートコントラクトＩＤ９０４を含むことができ、これは、展開されたスマートコントラクトの一意の識別子、あるいは個別に識別可能な識別子とすることができる。さらに、データ構造９００は、コントラクト参加者の公開鍵を含むことができ、これは、コントラクト参加者の識別情報として機能し、さらにコントラクト参加者のデジタル署名として機能することができる
【００６８】
一例として、ソースコードハッシュ９０２は、コントラクト参加者の秘密鍵を使用して暗号化されてもよい。公開鍵９０６は、ソースコードハッシュを解読するためにコンセンサスノードによって使用されてもよい。復号化されたソースコードハッシュは、ソースコードの独立に決定されたソースコードハッシュと比較されて、それらが一致するかどうかを判定することができる。暗号化ソースコードハッシュは、コントラクト参加者の秘密鍵を使用して暗号化されるので、デジタル署名は、暗号化ソースコードハッシュがコントラクト参加者によって暗号化されたという証拠を提供する。さらに、本明細書の開示の恩恵を受ける当業者には明らかなように、他の様々な技術を使用してスマートコントラクトのデジタル署名を提供することができる。いくつかの例では、スマートコントラクトへの参加者全員がデータ構造９００における情報を提供することができる。いくつかの例では、一人の参加者によって提供されるソースコードハッシュ９０２を他の参加者によって提供されるソースコードハッシュ９０２と比較し、両方の参加者が同じスマートコントラクトに署名したことを確認できる。
【００６９】
図１０は、いくつかの実装形態による、外部システムから受信した外部データをブロックチェーンに追加するための例示的なプロセス１０００を示す流れ図である。いくつかの例では、プロセス１０００は、１つまたは複数のコンセンサスノード１０２または他の適切な計算装置によって実行され得る。例えば、スマートコントラクト監査プログラム１１８は、コンセンサスノード上で実行されて、プロセス１０００を実行するようにコンセンサスノードの１つまたは複数のプロセッサを構成することができる。
【００７０】
１００２において、計算装置は、外部システム計算装置から外部データを受信することができる。例えば、外部システム計算装置上のシステムプログラムは、外部データをコンセンサスシステム内の１つまたは複数のコンセンサスノードに送信することができる。
【００７１】
１００４において、計算装置は、コンセンサスがあるかどうかを判定することができる。もしそうであれば、プロセスはブロック１００６に進む。そうでなければ、プロセスはブロック１００８に進む。
【００７２】
１００６において、計算装置は、外部データ及び外部データのためのメタデータをブロックチェーンに追加することができる。例えば、外部データのメタデータは、実際のデータが受信された時間、外部データが受信されたソース、及び／または外部データに関連する他の情報を含むことができる。
【００７３】
１００８において、コンセンサスに達していない場合、計算装置はコンセンサスを待つことができる。
【００７４】
図１１は、いくつかの実装形態による外部データ情報データ構造１１００を示す。この例では、データ構造１１００は、外部データをコンセンサスシステムに送信した外部システム計算装置の識別子（ＩＤ）１１０２を含む。さらに、データ構造１１００は、外部システムから外部データを受信した時間１１０４、データソース１１０６、及びデータ自体１１０８を含むことができる。例えば、データソースは、温度計またはその他のセンサ、株価指数システム、銀行取引の情報源などのような、データの１つまたは複数の発信元とすることができる。上述のように、データ構造１１００からの情報は、後でスマートコントラクト実行の監査を可能にするため、ブロックチェーンブロックの本体に含めることができる。
【００７５】
図１２は、いくつかの実装形態による、トランザクション情報及びコントラクト実行情報をブロックチェーンに追加するための例示的なプロセス１２００を示す流れ図である。いくつかの例では、プロセス１２００は、１つまたは複数のコンセンサスノード１０２または他の適切な計算装置によって実行され得る。例えば、スマートコントラクト監査プログラム１１８は、コンセンサスノード上で実行され、コンセンサスノードの１つまたは複数のプロセッサを、スマートコントラクト実行情報をブロックチェーンに追加するように構成することができ、コンセンサスプログラム１１６は、１つまたは複数のプロセッサを、トランザクション情報をブロックチェーンに追加するように構成し得る。
【００７６】
１２０２において、計算装置は、外部システムから受信した外部データに基づいてスマートコントラクトを実行することができる。例えば、いくつかの例では、外部データの受信はスマートコントラクトの呼び出しを引き起こし得る。他の例では、命令または他の通信がスマートコントラクトの実行を呼び出すことができる。
【００７７】
１２０４において、スマートコントラクトの実行に続いて、計算装置は、コンセンサスノードから、実行されたスマートコントラクトに対応するトランザクション情報及びコントラクト実行情報を受信することができる。例えば、トランザクション情報は、スマートコントラクトの入力及び実行の結果を含み得る。コントラクト実行情報は、コントラクトが実行された時間、コントラクトを実行したコンセンサスノードなど、スマートコントラクトの実行に関する追加情報を含むことができる。例えば、上述のように、各コンセンサスノードは、トランザクション情報及びスマートコントラクト実行情報をマスタノードに提供し、マスタノードは各コントラクト実行結果についてコンセンサスノードからのコンセンサスを求めることができる。
【００７８】
１２０６において、計算装置は、コンセンサスがあるかどうかを判定することができる。もしそうであれば、プロセスはブロック１２０８に進む。そうでなければ、プロセスはブロック１２１０に進む。
【００７９】
１２０８において、計算装置は、トランザクション情報及び対応するスマートコントラクト実行情報をブロックチェーン内のブロックに追加することができる。例えば、トランザクション情報及び対応するスマートコントラクト実行情報は、ブロックチェーン内の同じブロックに含まれてもよく、あるいは、ブロックチェーン内の別々のブロックに含まれてもよい。プロセス１２００は、各コンセンサスノードによって生成された各結果について繰り返すことができる。
【００８０】
１２１０において、コンセンサスに達していない場合、計算装置はコンセンサスを待つことができる。
【００８１】
図１３は、いくつかの実装形態による例示的なスマートコントラクト実行情報データ構造１３００を示す。この例では、データ構造１３００は、コンセンサスノード識別子（ＩＤ）１３０２、実行時間１３０４、及び実行ログ１３０６を含む。いくつかの例では、各コンセンサスノード１０２は、スマートコントラクトを実行するときにこのデータ構造１３００を生成し得る。データ構造１３００内の情報は、スマートコントラクト監査プログラム１１８によってブロックに追加することができ、そのブロックは、図５を参照して上述したように、対応するトランザクション情報も含む。または、その情報は、トランザクション入出力情報を含むブロックとは別のブロックチェーン内のブロックに情報が含まれていてもよい。
【００８２】
図１４は、いくつかの実装形態による参加ノードをチェックするための例示的なプロセス１４００を示す流れ図である。いくつかの例では、プロセス１４００は、１つまたは複数のコンセンサスノード１０２または他の適切な計算装置によって実行され得る。例えば、スマートコントラクト監査プログラム１１８は、マスタコンセンサスノード上で実行されて、プロセス１４００を実行するようにマスタコンセンサスノードの１つ以上のプロセッサを構成し得る。プロセス１４００は、参加ノードをチェックするためのプロセスの第１の例である。後に説明されるプロセス１６００は、参加ノードをチェックするためのプロセスの第２の例であり、１つまたは複数の監査された条件が満たされないときにコンセンサスシステムを停止させる自己監査管理機能を含む。
【００８３】
１４０２において、マスタノードとして動作する計算装置は、コンセンサスシステム内の参加しているコンセンサスノードをチェックするためにクエリを送信することができる。例えば、コンセンサスノードにおいて障害が発生したこと、新しいコンセンサスノードが追加されたことなどが起こり得る。マスタノードは、参加ノードデータ構造２１８を参照して、どのコンセンサスノードが現在コンセンサスシステムに含まれているかを判定することができる。参加ノードデータ構造２１８の詳細は、図１５に関して以下で論じる。
【００８４】
１４０４において、計算装置は、参加ノードデータ構造内のすべてのコンセンサスノードがクエリに対する応答を返したかどうかを判定することができる。もしそうであれば、プロセスはブロック１４０６に進む。そうでない場合、プロセスはブロック１４０８に進むことができる。
【００８５】
１４０６において、コンセンサスシステムに参加しているコンセンサスノードが変更されていないと計算装置が判定した場合、プロセスは終了し、ノードは次の処理に進むことができる。例えば、コンセンサスシステム内のコンセンサスノードの状態が変更されていない場合、ブロックチェーンに含まれるコンセンサスノードに関する情報は修正される必要はない。
【００８６】
１４０８において、いずれかのコンセンサスノードがクエリに対して肯定的な応答を返さない場合、及び／または新しいコンセンサスノードが応答を返す場合、計算装置は、参加ノードデータ構造において、実際に参加しているコンセンサスノードに関する情報を更新し得る。
【００８７】
１４１０において、計算装置は、ブロックチェーンにおいて実際に参加しているノードの情報を更新することができる。例えば、図３のブロック３０８及び３１０で説明したように、コンセンサスシステムに参加しているノードのノード情報をブロックチェーンに追加することができる。加えて、ノードがもはやコンセンサスシステムに参加していない場合、そのノードがコンセンサスに参加していないという情報をブロックチェーンに追加することができる。
【００８８】
１４１２において、計算装置は、改訂コンセンサスグループを形成することができる。例えば、参加ノードデータ構造２１８に基づいて、計算装置は、コンセンサスノードの新しいコンセンサスグループを決定することができる。次いで、計算装置は次の処理に進み得る。
【００８９】
図１５は、いくつかの実装形態による参加ノードデータ構造２１８の一例を示す。この例では、データ構造２１８は、コンセンサスノード識別子（ＩＤ）１５０２、コンセンサスノードがアクティブであるかどうかについてのインジケータ１５０４、コンセンサスノード位置１５０６、コンセンサスノード所有者及び／またはオペレータ１５０８、及びコンセンサスノードＩＰアドレス１５１０を含む。インジケータ１５０４に関して、第１の値は対応するノードがコンセンサスシステム内でアクティブであることを示し、第２の値は対応するコンセンサスノードがコンセンサスシステム内で現在アクティブではないことを示す。上述のように、場合によっては、所有者及び／またはオペレータ１５０６は、上述したユーザ１１９のうちの１人のような、スマートコントラクトの参加者のうちの１人であり得る。
【００９０】
図１６は、いくつかの実装形態による参加ノードをチェックするための例示的なプロセス１６００を示す流れ図である。いくつかの例では、プロセス１６００は、１つまたは複数のコンセンサスノード１０２または他の適切な計算装置によって実行され得る。例えば、スマートコントラクト監査プログラム１１８は、マスタコンセンサスノード上で実行されて、プロセス１６００を実行するようにマスタコンセンサスノードの１つまたは複数のプロセッサを構成することができる。以下で説明されるプロセス１６００は、参加ノードチェックプロセスの第２の例であり、１つ以上の監査対象条件が満たされていない場合にコンセンサスシステムを停止する自己監査管理機能を含む。
【００９１】
１６０２において、マスタノードとして機能する計算装置は、コンセンサスシステム内の参加コンセンサスノードをチェックするためにクエリを、送信することができる。例えば、コンセンサスノードで障害が発生したこと、新しいコンセンサスノードが追加されたことなどが起こり得る。マスタノードは、参加ノードデータ構造２１８を参照して、どのコンセンサスノードが現在コンセンサスシステムに含まれているかを判定することができる。
【００９２】
１６０４において、計算装置は、参加ノードデータ構造内のすべてのコンセンサスノードがクエリに対する応答を返したかどうかを判定することができる。もしそうであれば、プロセスはブロック１６０６に進む。そうでない場合、プロセスはブロック１６０８に進むことができる。
【００９３】
１６０６において、計算装置が、コンセンサスシステムに参加しているコンセンサスノードが変更されていないと判定した場合、プロセスは終了し、ノードは次の処理に進むことができる。例えば、コンセンサスシステム内のコンセンサスノードの状態が変更されていない場合、ブロックチェーンに含まれるコンセンサスノードに関する情報は修正される必要はない。
【００９４】
１６０８において、いずれかのコンセンサスノードがクエリに対して肯定的な応答を返さない場合、及び／または新しいコンセンサスノードが応答を返す場合、計算装置は、応答するコンセンサスノードがスマートコントラクトの規則を満たすかどうかを判定し得る。もしそうであれば、プロセスはブロック１６１２に進む。そうでなければ、プロセスはブロック１６１０に進む。
【００９５】
１６１０において、応答しているコンセンサスノードがスマートコントラクトを満たさない（例えば、スマートコントラクトの１つまたは複数の規則を満たさない）場合、計算装置はコンセンサスシステムを停止し、通知を送信することができる。例えば、スマートコントラクトは、コンセンサスシステムに含まれるコンセンサスノードにおいて、コントラクトへの第１の参加者と関連付けられたコンセンサスノードと、コントラクトへの第２の参加者と関連付けられたコンセンサスノードとが、同数であること、を指定してもよい。各参加者からのノード数が不均一になった場合、マスタノードは、コンセンサスシステムを停止し、参加しているコンセンサスノードの数がコントラクトと一致していないことをコントラクト参加者に通知するために、クライアント計算装置に通知を送信する。本明細書で論じたものなどの他の規則、または本明細書で論じていない他の規則も同様に実施することができる。他の規則のいくつかの例は以下を含む。１）全てのノードはコンセンサス時に同意しなければならない；２）コントラクトの各参加者に関連付けられた少なくとも１つのコンセンサスノードが、コンセンサス時に同意する必要がある；及び／または、コントラクトへの参加者は、参加ノードのいずれがコンセンサスをなすかに注意を払わない。コンセンサスシステムが停止した場合、ブロックチェーンと現在のすべてのトランザクション情報は監査を可能にするために保持される。
【００９６】
１６１２において、いずれかのコンセンサスノードがクエリに対して肯定的な応答を返さない、及び／または新しいコンセンサスノードが応答を返し、一方で、コントラクトの規則は依然として満たされる場合、計算装置は、参加ノードデータ構造２１８において、実際に参加しているコンセンサスノードについての情報を更新することができる。
【００９７】
１６１４において、計算装置は、ブロックチェーン内の実際に参加しているノード情報を更新することができる。例えば、図３のブロック３０８及び３１０で説明したように、コンセンサスシステムに参加しているノードのノード情報をブロックチェーンに追加することができる。加えて、ノードがもはやコンセンサスシステムに参加していない場合、そのノードがコンセンサスに参加していないという情報をブロックチェーンに追加することができる。
【００９８】
１６１６において、計算装置は、改訂コンセンサスグループを形成することができる。例えば、参加ノードデータ構造に基づいて、計算装置は、コンセンサスノードの新しいコンセンサスグループを決定することができる。次いで、計算装置は次の処理に進み得る。
【００９９】
図１７は、いくつかの実装形態による例示のプロセス１７００を示す流れ図である。いくつかの例では、プロセス１７００は、コンセンサスシステムに実際に参加しているコンセンサスノード１０２によって実行され得る。例えば、コンセンサスプログラム１１６を各コンセンサスノード上で実行して、プロセス１７００を実行するようにコンセンサスノードの１つまたは複数のプロセッサを構成することができる。
【０１００】
１７０２において、計算装置は、マスタノード障害が発生したという指摘を受信することができる。
【０１０１】
１７０４において、計算装置は、コンセンサスシステム内の他のコンセンサスノードと共に、新しいマスタノードの選出に参加することができる。例えば、コンセンサスシステム内のすべてのコンセンサスノードが事前に割り当てられた重みを有し、システム内に残っている最も高い重み付けされたノードがマスタとして選出されてもよい。別の例として、全てのコンセンサスノードがタームを有し、コンセンサスシステムに残っている最短のタームを有するノードがマスタとして選出されてもよい。
【０１０２】
１７０６において、マスタノードとして選出された計算装置は、実際に参加しているコンセンサスノードの情報をブロックチェーンに追加するためのプロセスを実行することができる。例えば、新しいマスタノードは、図３のブロック３０８及び３１０に関して上述したプロセスを実行することができる。
【０１０３】
図１８は、いくつかの実装形態による例示のプロセス１８００を示す流れ図である。いくつかの例では、プロセス１８００は、監査プログラム１３２の実行によって監査計算装置１０６によって実行され得る。上述のように、いくつかの例では、監査プログラム１３２の実行は、例えば、定期実行要件に基づいてよく、または、コントラクト参加者の１人からの要求に応答してなされてもよい。
【０１０４】
１８０２において、計算装置は、監査認証要件を満たすためにブロックチェーンに含まれると期待される監査情報など、監査に関する情報のリストを決定することができる。例えば、監査プログラムはスマートコントラクトを取得し、コンセンサスシステムにおけるスマートコントラクトの実行のための監査情報及び適用可能な規則１３４を決定することができる。
【０１０５】
１８０４において、計算装置は、１つまたは複数のコンセンサスノードから現在のブロックチェーンのコピーを受信することができる。いくつかの例では、計算装置は、現在のブロックチェーンのコピーを複数のコンセンサスノードから受信して、複数のブロックチェーンを互いに比較して、すべてのブロックチェーンが一貫していることを確認することができる。
【０１０６】
１８０６において、計算装置は、監査のための監査情報のリストがブロックチェーン内の情報によって満たされるかどうかを判定することができる。例えば、監査プログラムは、コンセンサスシステムに参加しているコンセンサスノードがブロックチェーンで適切に識別されているかどうか、参加しているクライアントのデジタル署名と共にスマートコントラクトがブロックチェーンに含まれているかどうか、外部データ及びスマートコントラクトの呼び出しについての情報がブロックチェーンに含まれているかどうか、等を判定できる。監査プログラムは、また、スマートコントラクトの実行に関する情報及びトランザクション情報がブロックチェーンに含まれているかどうかを判定することができる。ブロックチェーンに含まれる情報が監査のための監査情報のリストを満たす場合、プロセスはブロック１８０８に進む。そうでなければ、プロセスはブロック１８１０に進む。
【０１０７】
１８０８において、ブロックチェーン内の情報が監査のための監査情報のリストを満たす場合、計算装置は、監査認証の要件が満たされているという通知を送信することができる。例えば、計算装置は、クライアント計算装置に通知を送信し、スマートコントラクトへの参加者に、監査認証のための１つまたは複数の要件が満たされたことを知らせることができる。
【０１０８】
１８１０において、ブロックチェーン内の情報が監査のための監査情報のリストを満たさない場合、計算装置は、監査認証の要件が満たされていないという通知を送信することができる。例えば、計算装置は、クライアント計算装置に通知を送信して、スマートコントラクトへの参加者に、監査認証の要件のうちの１つ以上が満たされていないことを知らせ、さらに、ブロックチェーンに含まれる情報の１つ以上の欠陥に関する情報を提供し得る。いくつかの例では、それに応じて、スマートコントラクトの参加者は、システムが修正されてブロックチェーン内に適切な監査情報を格納できるまで、コンセンサスシステムの実行を停止することができる。
【０１０９】
図１９は、いくつかの実装形態による例示的プロセス１９００を示す流れ図である。いくつかの例では、プロセス１９００は、１つまたは複数のコンセンサスノード１０２または他の適切な計算装置によって実行され得る。例えば、スマートコントラクト監査プログラム１１８は、コンセンサスノード上で実行されて、プロセス１９００の少なくとも一部を実行するようにコンセンサスノードの１つまたは複数のプロセッサを構成することができる。
【０１１０】
１９０２において、計算装置は、スマートコントラクトを実行するための指示及びコンセンサスを受信することができる。例えば、コンセンサスシステムは、スマートコントラクトの実行を引き起こすための外部データまたは他の命令を受信してよく、さらに、スマートコントラクトはコンセンサスノードによって実行されるべきであるというコンセンサスがあってよい。
【０１１１】
１９０４において、スマートコントラクトを実行する前に、計算装置は、ブロックチェーンが参加ノードの指定されたノード情報を含むかどうかを判定することができる。もしそうであれば、プロセスはブロック１９０６に進む。そうでなければ、プロセスはブロック１９１４に進む。
【０１１２】
１９０６において、ブロック１９０４の要件が満たされる場合、計算装置は、スマートコントラクト情報及びデジタル署名情報がブロックチェーンに含まれているかどうかを判定することができる。もしそうであれば、プロセスはブロック１９０８へ進む。そうでなければ、プロセスはブロック１９１４に進む。
【０１１３】
１９０８において、ブロック１９０６の要件が満たされる場合、計算装置は、外部データ情報及び／またはスマートコントラクト呼び出し情報がブロックチェーンに含まれているかどうかを判定することができる。もしそうであれば、プロセスはブロック１９１０に進む。そうでなければ、プロセスはブロック１９１４に進む。
【０１１４】
１９１０において、ブロック１９０８の要件が満たされると、計算装置はスマートコントラクトの実行を進めることができる。
【０１１５】
１９１２において、計算装置は、トランザクション情報及びスマートコントラクト実行情報をブロックチェーンに追加することができる。場合によっては、ブロック１９１０及び１９１２は、図１２のプロセス１２００及び／または図３のブロック３５６〜３６４及び３７０に従って実行され得る。
【０１１６】
１９１４において、ブロック１９０４、１９０６、または１９０８のいずれかに対する応答が「いいえ」である場合、計算装置は、ブロックチェーンが期待される監査情報を含まないことをコントラクト参加者に知らせるために、クライアント計算装置に通知を送信することができる。いくつかの例では、それに応答して、クライアントデバイスは、要件が満たされない原因が対処されるまで、コンセンサスシステムの実行を中断することができる。
【０１１７】
本明細書に記載の例示的なプロセスは、説明の目的で提供されたプロセスの単なる例である。本明細書の開示に照らして、多数の他の変形が当業者に明らかであろう。さらに、本明細書の開示は、プロセスを実行するための適切なフレームワーク、アーキテクチャ、及び環境のいくつかの例を説明しているが、本明細書の実装形態は、示し説明した特定の例に限定されない。さらに、本開示は、説明され図面に示されるように、様々な例示的実装形態を提供する。しかし、本開示は、本明細書で説明及び図示された実装形態に限定されず、当業者に知られているようにまたは知られるようになるように、他の実装形態に拡張することができる。
【０１１８】
本明細書に記載の様々な命令、プロセス、及び技法は、計算機可読媒体に格納され本明細書のプロセッサによって実行されるプログラムモジュールなど、計算機実行可能命令の一般的な文脈で考えることができる。一般に、プログラムモジュールは、特定のタスクを実行するため、または特定の抽象データ型を実装するための、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造、実行可能コードなどを含む。これらのプログラムモジュールなどは、ネイティブコードとして実行することができ、または仮想マシンまたは他のジャストインタイムコンパイル実行環境などでダウンロードして実行することができる。典型的には、プログラムモジュールの機能は、様々な実装形態において望まれるように組み合わせられまたは分散され得る。これらのモジュール及び技術の実装は、計算機記憶媒体に格納されてもよく、または何らかの形態の通信媒体を介して送信されてもよい。したがって、本明細書のインデックス配置は、物理的ハードウェア上で実施すること、仮想化実装で使用すること、物理または仮想マシン上の全体的重複排除システムの一部として使用すること、及び／または、他の重複排除実装（例えばＳＡＮ）のための構成要素として、または、大規模メモリインデックスなどの非重複排除環境で使用することができる。
【０１１９】
本開示の主題は、構造的特徴及び／または方法論的行為に特有の言語で説明されているが、添付の特許請求の範囲に定義された主題は必ずしも説明された特定の特徴または行為に限定されないことを理解されたい。そうではなく、特定の特徴及び行為は、特許請求の範囲を実施する例示的形態として開示されている。
【図１】
0006775086.tif 000002
【図２】
0006775086.tif 000003
【図３】
0006775086.tif 000004
【図４】
0006775086.tif 000005
【図５】
0006775086.tif 000006
【図６】
0006775086.tif 000007
【図７】
0006775086.tif 000008
【図８】
0006775086.tif 000009
【図９】
0006775086.tif 000010
【図１０】
0006775086.tif 000011
【図１１】
0006775086.tif 000012
【図１２】
0006775086.tif 000013
【図１３】
0006775086.tif 000014
【図１４】
0006775086.tif 000015
【図１５】
0006775086.tif 000016
【図１６】
0006775086.tif 000017
【図１７】
0006775086.tif 000018
【図１８】
0006775086.tif 000019
【図１９】
0006775086.tif 000020