(57)【要約】      （修正有）【課題】ブロックチェーン技術を使用して実装されたスマートコントラクトのライフサイクルを管理する。【解決手段】第１のノードは、コンセンサスシステムに参加するために１つ以上の第２のノードと通信し、コンピューティングデバイスから、第１のブロックチェーンと関連付けられた第１のスマートコントラクトを実行する要求を受信する。第１のノードは、トランザクション結果として第１のブロックチェーンからトランザクションデータを読み取ることによって、第１のスマートコントラクトにトランザクションを実行させるために第１のスマートコントラクトの実行を呼び出す。第１のノードは、第１のスマートコントラクトの満了時間に達したことを示すシミュレーションインジケータが設定されている場合、トランザクション結果をブロックチェーンに書き込むことを控え、トランザクション結果をコンピューティングデバイスに送信する。【選択図】図１
2019008791.tif 000002
【特許請求の範囲】
【請求項１】
複数のブロックチェーンを管理するコンセンサスシステムに参加するために１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードであって、前記第１のコンピューティングノードが、以下の動作を実行するための実行可能命令によって構成される１つまたは複数のプロセッサを含む、第１のコンピューティングノードを備えるシステムであって、前記動作が、
前記第１のコンピューティングノードによって、コンピューティングデバイスから、複数のスマートコントラクトの第１のスマートコントラクトを実行するための要求を受信することであって、前記第１のスマートコントラクトが、前記複数のブロックチェーンの第１のブロックチェーンと関連付けられる、受信することと、
前記受信した要求に基づいて前記第１のスマートコントラクトにトランザクションを実行させるように、前記受信した要求に基づいて前記第１のスマートコントラクトの実行を呼び出すことであって、前記トランザクションを実行させることが、前記第１のブロックチェーンからトランザクションデータの少なくとも一部をトランザクション結果として読み取ることを含む、呼び出すことと、
前記第１のスマートコントラクトにシミュレーションインジケータが設定されているかどうかを判定することであって、前記シミュレーションインジケータが、前記第１のスマートコントラクトの満了時間に達したことを示す、判定することと、
前記第１のスマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えること、および前記トランザクション結果を応答メッセージで前記コンピューティングデバイスに送信することと、
を含む、システム。
【請求項２】
前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えることは、
前記第１のスマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、無効なトランザクションインジケータを前記トランザクション結果に関連付けることと、
前記トランザクション結果および前記無効なトランザクションインジケータを前記第１のブロックチェーン上の新しいブロックに格納することと、
を含む、請求項１に記載のシステム。
【請求項３】
前記動作が、
前記１つまたは複数の第２のコンピューティングノードからの前記トランザクション結果に関するコンセンサスを求めることと、
コンセンサスに達していないことに基づいて、エラーまたは無効なトランザクションのうちの少なくとも一方を示す別のスマートコントラクト応答メッセージを送信することと、
をさらに含む、請求項２に記載のシステム。
【請求項４】
前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えることが、前記スマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、前記トランザクション結果を前記第１のブロックチェーンの新しいブロックに保存することを控えることを含む、請求項１に記載のシステム。
【請求項５】
前記第１のブロックチェーンが、前記満了時間に達する前に前記第１のスマートコントラクトによって実行される複数のトランザクションに対するトランザクション情報を維持する、請求項１に記載のシステム。
【請求項６】
前記スマートコントラクト応答メッセージが、前記満了時間に達する前に前記第１のスマートコントラクトによって実行される少なくとも１つのトランザクションのために前記第１のブロックチェーンに格納された前記第１のブロックチェーンから読み取られたトランザクション情報を含み、前記スマートコントラクト応答メッセージが、前記応答の種類でシミュレーションに対応するという指示をさらに含む、請求項５に記載のシステム。
【請求項７】
前記動作が、
前記要求を受信する前に、前記第１のスマートコントラクトの前記満了時間を現在時間と比較することと、
前記比較することに基づいて、前記第１のスマートコントラクトの前記満了時間に達したと判定することと、
前記第１のスマートコントラクトの前記満了時間に達したと判定することに基づいて、前記第１のスマートコントラクト上の前記のシミュレーションインジケータをシミュレーションモードに設定することと、
スマートコントラクト構成の要求を送信することと、
をさらに含む、請求項１に記載のシステム。
【請求項８】
前記動作が、スマートコントラクト構成の前記要求に基づいて、シミュレーションモードを示すようにスマートコントラクトデータ構造内の前記第１のスマートコントラクトのエントリを変更することをさらに含む、請求項７に記載のシステム。
【請求項９】
前記トランザクションの実行に続いて、前記動作が、
前記第１のスマートコントラクトの保管期間が終了したと判定することと、
前記第１のスマートコントラクトを解除するように、スマートコントラクト構成の要求を送信することと、
前記スマートコントラクトが停止されるか、または解除されるかの少なくとも一方であることを示すように、スマートコントラクトデータ構造内の前記第１のスマートコントラクトのエントリを変更することと、
をさらに含む、請求項１に記載のシステム。
【請求項１０】
前記動作が、
前記第１のスマートコントラクトの実行のための別の要求を受信することと、
前記第１のスマートコントラクトが停止されるか、または解除されるかの少なくとも一方であることを判定することと、
前記第１のスマートコントラクトが利用できないことを示す応答メッセージを送信することと、
をさらに含む、請求項９に記載のシステム。
【請求項１１】
前記動作が、
前記第１のコンピューティングノードによって、前記ブロックチェーンに関連付けられた前記スマートコントラクトが実行されるべきであるという前記指示を受信する前に、前記スマートコントラクトの実行のために以前の要求を受信することと、
前記以前の要求に基づいて以前のトランザクションを実行することと、
前記シミュレーションインジケータが前記第１のスマートコントラクトに対して設定されていないと判定することと、
前記以前のトランザクションのトランザクション結果に基づいて前記１つまたは複数の第２のコンピューティングノードでコンセンサス動作を実行することと、
をさらに含む、請求項１に記載のシステム。
【請求項１２】
前記動作が、
コンセンサスに達したことに基づいて、前記以前のトランザクションの前記トランザクション結果を前記第１のブロックチェーン内の新しいブロックに記録することと、
前記以前の要求に応答して、少なくとも以前のトランザクションの前記トランザクション結果と成功したトランザクションの指示とを含む応答メッセージを送信することと、
をさらに含む、請求項１１に記載のシステム。
【請求項１３】
前記動作が、コンセンサスに達していないことに基づいて、前記以前の要求に応答して、無効なトランザクションまたはエラーの少なくとも一方を示す応答メッセージを送信することをさらに含む、請求項１１に記載のシステム。
【請求項１４】
コンセンサスシステムに参加するために１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードによって、複数のスマートコントラクトの第１のスマートコントラクトを実行するための要求を受信することであって、前記第１のスマートコントラクトが複数のブロックチェーンの第１のブロックチェーンと関連付けられる、受信することと、
前記第１のコンピューティングノードによって、前記受信した要求に基づいて前記第１のスマートコントラクトにトランザクションを実行させるように、前記受信した要求に基づいて前記第１のスマートコントラクトの実行を呼び出すことであって、前記トランザクションを実行させることが、前記第１のブロックチェーンからトランザクションデータの少なくとも一部をトランザクション結果として読み取ることを含む、呼び出すことと、
前記第１のコンピューティングノードによって、前記第１のスマートコントラクトにシミュレーションインジケータが設定されているかどうかを判定することであって、前記シミュレーションインジケータが、前記第１のスマートコントラクトの満了時間に達したことを示す、判定することと、
前記第１のスマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えること、および前記トランザクション結果を応答メッセージで前記コンピューティングデバイスに送信することと、
を含む、方法。
【請求項１５】
前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えることが、
前記第１のスマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、無効なトランザクションインジケータを前記トランザクション結果に関連付けることと、
前記トランザクション結果および前記無効なトランザクションインジケータを前記第１のブロックチェーン上の新しいブロックに格納することと、
を含む、請求項１４に記載の方法。
【請求項１６】
前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えることが、前記スマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、前記トランザクション結果を前記第１のブロックチェーンの新しいブロックに保存することを控えることを含む、請求項１４に記載の方法。
【請求項１７】
前記スマートコントラクト応答メッセージが、前記満了時間に達する前に前記第１のスマートコントラクトによって実行される少なくとも１つのトランザクションのために前記第１のブロックチェーンに格納された前記第１のブロックチェーンから読み取られたトランザクション情報を含み、前記スマートコントラクト応答メッセージが、前記応答の種類でシミュレーションに対応するという指示をさらに含む、請求項１４に記載の方法。
【請求項１８】
前記トランザクションの実行に続いて、前記第１のスマートコントラクトの保管期間が終了したと判定することと、
前記第１のスマートコントラクトを解除するように、スマートコントラクト構成の要求を送信することと、
前記スマートコントラクトが停止されるか、または解除されるかの少なくとも一方であることを示すように、スマートコントラクトデータ構造内の前記第１のスマートコントラクトのエントリを変更することと、
をさらに含む、請求項１４に記載の方法。
【請求項１９】
前記第１のコンピューティングノードによって、前記ブロックチェーンに関連付けられた前記スマートコントラクトが実行されるべきであるという前記指示を受信する前に、前記スマートコントラクトの実行のために以前の要求を受信することと、
前記以前の要求に基づいて以前のトランザクションを実行することと、
前記シミュレーションインジケータが前記第１のスマートコントラクトに対して設定されていないと判定することと、
前記以前のトランザクションのトランザクション結果に基づいて前記１つまたは複数の第２のコンピューティングノードでコンセンサス動作を実行することと、
をさらに含む、請求項１４に記載の方法。
【請求項２０】
コンセンサスシステムに参加するために１つまたは複数の第２のコンピューティングノードと通信することができる第１のコンピューティングノードの１つまたは複数のプロセッサによって実行される場合に、前記１つまたは複数のプロセッサを、
コンピューティングデバイスから、複数のスマートコントラクトの第１のスマートコントラクトを実行するための要求を受信することであって、前記第１のスマートコントラクトが複数のブロックチェーンの第１のブロックチェーンと関連付けられる、受信することと、
前記受信した要求に基づいて前記第１のスマートコントラクトにトランザクションを実行させるように、前記受信した要求に基づいて前記第１のスマートコントラクトの実行を呼び出すことであって、前記トランザクションを実行させることが、前記第１のブロックチェーンからトランザクションデータの少なくとも一部をトランザクション結果として読み取ることを含む、呼び出すことと、
前記第１のスマートコントラクトにシミュレーションインジケータが設定されているかどうかを判定することであって、前記シミュレーションインジケータが、前記第１のスマートコントラクトの満了時間に達したことを示す、判定することと、
前記第１のスマートコントラクトに前記シミュレーションインジケータが設定されていると判定することに基づいて、前記トランザクション結果を前記ブロックチェーンに有効なトランザクション結果として書き込むことを控えること、および前記トランザクション結果を応答メッセージで前記コンピューティングデバイスに送信することと、
を行うよう構成させる命令を格納する、１つまたは複数の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
ブロックチェーンは、ブロックと呼ばれる連続的に増加する一連のレコード（すなわち、チェーン）を維持する一種の分散型データベースである。各ブロックには、タイムスタンプと前のブロックへのリンクが含まれる。ブロックは、トランザクションに関する情報または他のタイプの情報を格納することができる。ブロックの検証プロセスはかなり簡単に実行することができ、トランザクションが不正である可能性を低減する。ブロックチェーン技術は、ネットワーク上の複数の場所に分散して複数のブロックチェーンにデータを格納することで、データが中央集権的に保持されるリスクを軽減または排除する。
【０００２】
さらに、ブロックチェーン技術は、チェーンの任意の単一ブロックを遡及的に変更することを非常に困難にすることができる。例えば、データベースが分散されている（すなわち、複数の異なるコンピュータに同時に格納されている）ので、分散型データベース内の任意の１つのコンピュータにアクセスするすべてのユーザに、ブロックチェーンに対して新たな追加が行われたことを直ちに通知することができる。
【０００３】
場合によっては、ブロックチェーンを使用して記録された情報は、２人以上の当事者間のコンピュータ実行可能「契約」である「スマートコントラクト」のためのものであってもよい。特に、スマートコントラクトは、特定の条件が満たされたことに応答して特定の動作を行うために実行するよう構成されたソフトウェアとすることができる。スマートコントラクトの実行は、自動化と強制執行との両方が可能である。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書におけるいくつかの例は、第１のノードがコンセンサスシステムに参加するために１つまたは複数の第２のノードと通信することができるコンセンサスシステムを含む。第１のノードは、コンピューティングデバイスから、複数のスマートコントラクトの第１のスマートコントラクトを実行する要求を受信することができる。第１のスマートコントラクトは、複数のブロックチェーンの第１のブロックチェーンに関連付けることができる。第１のノードは、受信した要求に基づいて第１のスマートコントラクトの実行を呼び出し、第１のスマートコントラクトに、受信した要求に基づいてトランザクションを実行させる。例えば、トランザクションを実行することは、トランザクション結果として第１のブロックチェーンからトランザクションデータの少なくとも一部を読み取ることを含むことができる。第１のノードは、第１のスマートコントラクトにシミュレーションインジケータが設定されているかどうかを判定することができる。例えば、シミュレーションインジケータは、第１のスマートコントラクトの満了時間に達したことを示すことができる。第１のスマートコントラクトにシミュレーションインジケータが設定されていると判定することに基づいて、第１のノードは、トランザクション結果を有効なトランザクション結果としてブロックチェーンに書き込むことを控えることができ、応答メッセージでトランザクション結果をコンピューティングデバイスに送信する。
【０００５】
詳細な説明は、添付図面を参照して記述される。図面において、参照番号の最も左の桁により、参照番号が最初に現れる図を識別する。異なる図面で同じ参照番号が使用される場合、類似または同一の項目または特徴を示す。
【図面の簡単な説明】
【０００６】
【図１】いくつかの実装形態によるブロックチェーン実行およびスマートコントラクト管理のためのシステムの例示的なアーキテクチャを示す図である。
【図２】いくつかの実装態様によるコンセンサスノード・コンピューティング・デバイスの一例を示す図である。
【図３】いくつかの実装態様によるスマートコントラクト期間データ構造の例示的なデータ構造を示す図である。
【図４Ａ】スマートコントラクトがいくつかの実装態様に従って良好に実行される場合のスマートコントラクト応答メッセージのデータ構造の一例を示す図である。
【図４Ｂ】スマートコントラクト実行がいくつかの実装態様に従って失敗した場合のスマートコントラクト応答メッセージのデータ構造の一例を示す図である。
【図４Ｃ】スマートコントラクトがいくつかの実装態様に従ってシミュレーションモードで実行される場合のスマートコントラクト応答メッセージのデータ構造の一例を示す図である。
【図５】いくつかの実装態様によるスマートコントラクトコンフィギュレータによって実行されるプロセスの一例を示す流れ図である。
【図６】いくつかの実装態様によるスマートコントラクト・ライフサイクル・マネージャによって実行されるプロセスの一例を示す流れ図である。
【図７】いくつかの実装態様に従って無効なトランザクション結果を破棄するブロックチェーンを用いるスマートコントラクトを実行するための例示的なプロセスを示す流れ図である。
【図８】いくつかの実装態様に従って有効および無効なトランザクション結果の両方を格納するブロックチェーンを用いるスマートコントラクトを実行するための例示的なプロセスを示す流れ図である。
【発明を実施するための形態】
【０００７】
本明細書のいくつかの実装態様は、ブロックチェーン技術を使用して実装されたスマートコントラクトのライフサイクルを管理するための技術および構成に関する。例えば、スマートコントラクト機能を管理してスマートコントラクトを作成、更新、満了、および削除することでスマートコントラクトライフサイクルを管理し、それにより、スマートコントラクトを現実の用途で使用可能にすることができる。例えば、本明細書のブロックチェーンと共に使用されるスマートコントラクトは、本明細書の他の箇所でさらに列挙されるように、機器制御、資産管理、在庫管理、サプライチェーン管理、金融取引追跡など、多くの異なる実用的用途を可能にすることができる。
【０００８】
スマートコントラクトライフサイクル管理の一例として、ユーザは、新しいスマートコントラクトを作成することができ、スマートコントラクトを呼び出してトランザクションなどを実行することができる。トランザクションの結果および／または他の情報は、ブロックチェーン上に格納することができる。例えば、トランザクションの実質的に変更不能なレコードを作成するために、スマートコントラクトのブロックチェーンに１つまたは複数のブロックを追加することができる。スマートコントラクトによって実行された可能性のある１つまたは複数のトランザクションに関する情報を取得するなどのために、複数のユーザが、ブロックチェーン上のデータにアクセスして読み取ることができる。さらに、１人以上のユーザが、スマートコントラクトを改善することができ、ユーザは、改善されたスマートコントラクトを引き続き使用することができる。
【０００９】
スマートコントラクトは、通常、スマートコントラクトが満了（例えば、スマートコントラクトを破棄および／または終了）する満了日時（以下、「満了時間」という）を有することができる。スマートコントラクトが満了すると、ユーザは、通常、スマートコントラクトを使用してトランザクションを実行することができなくなる。しかしながら、本明細書の実装態様では、スマートコントラクトが満了した後に監査またはその他の目的などのために、ユーザがブロックチェーン上のデータに引き続きアクセスすることを可能にする。さらに、本明細書におけるスマートコントラクトは、スマートコントラクトが満了した後の指定された保管期間を有することができ、保管期間が終わると削除されるか、または解除することができる。保管期間が終了する前に、スマートコントラクトからのトランザクション情報（例えば、スマートコントラクトによって行われたトランザクションからの結果）は、シミュレーションモードを使用するユーザによってブロックチェーン上で引き続きアクセスすることができる。保管期間が終了すると、ブロックチェーンは、解除（例えば、停止、アーカイブ、または削除など）することができ、ユーザはもはやブロックチェーン上のスマートコントラクトデータを読み込むことも、アクセスすることもできない。
【００１０】
本明細書の実装態様は、スマートコントラクトライフサイクル管理のための機能を提供するか、または可能にする。例えば、本明細書のいくつかの例は、満了時間および保管期間に従ってスマートコントラクトの状態を制御することを可能にする。さらに、本明細書の例は、スマートコントラクトの満了時間に達した後であるが、保管期間の終了前に、データにアクセスすることを可能にする。さらに、いくつかの例では、満了時間に応じて自動的にスマートコントラクトを停止することが可能であり、スマートコントラクトの保管期間中は、スマートコントラクトが満了する前にスマートコントラクトを実行することによりブロックチェーンに格納された情報にアクセスすることを可能にする。
【００１１】
本明細書の実装態様では、スマートコントラクトによって生成されるデータは、特定のブロックチェーンおよび／または指定されたブロックチェーンに格納することができる。ブロックチェーン内のデータにアクセスするために、ユーザは、トランザクション要求としてクエリを含むスマートコントラクト要求を送信することによってスマートコントラクトのクエリ機能を呼び出すことができる。このクエリ機能は、典型的には、スマートコントラクトが実行されている間（すなわち、満了時間に達する前に）呼び出すことができるが、従来は、スマートコントラクトの満了時間に達してスマートコントラクトがもはや実行されていない場合にデータにアクセスする方法はない。
【００１２】
本明細書のいくつかの例は、スマートコントラクトの満了時間および保管期間に従ってスマートコントラクトの状態を制御することができるスマートコントラクトコンフィギュレータを含む。さらに、本明細書の例には、スマートコントラクトのライフサイクルを管理して、ユーザが満了時間の開始と保管期間の終了との間に、ブロックチェーンに格納されたスマートコントラクトのデータにアクセスすることを可能にするスマートコントラクト・ライフサイクル・マネージャが含まれる。さらに、場合によっては、満了時間に達すると、スマートコントラクトの状態を「実行」から「シミュレート」に変更することができ、次いで、保管期間の終了時に「シミュレート」から「停止」に変更することができる。
【００１３】
スマートコントラクトの状態が「シミュレート」モードの場合、スマートコントラクトは、シミュレーションモードで実行されてトランザクションを実行することができるが、スマートコントラクトは、有効なトランザクション結果としてブロックチェーンにトランザクションの結果を書き込むことによってブロックチェーンを更新することができない。したがって、シミュレーションモードは、ブロックチェーンの更新が有効にならない点で実行モードとは異なる。このようにして、ユーザは、スマートコントラクトをシミュレーションモードで実行すること、すなわち、スマートコントラクトを使用してトランザクションを実行すること、およびシミュレーションモードでのスマートコントラクト下でトランザクションを実行した結果としてブロックチェーンが更新されるのを防止することによって、満了時間後にブロックチェーン内のデータにアクセスすることができる。スマートコントラクトが「停止」状態にある場合、スマートコントラクトは解除され、完全に実行されなくすることができる。
【００１４】
本明細書の実装態様は、シミュレーションモードでブロックチェーンが更新されないようにするためのいくつかの異なる方法を含むことができる。一例として、コンセンサスプロセスをスキップすることによって、シミュレーションモードにおけるスマートコントラクトの下でのトランザクションの結果を破棄することができる。コンセンサスプロセスを経ないと、トランザクション結果によるブロックチェーンの更新が妨げられる可能性がある。別の例では、無効なフラグをシミュレーションモードでトランザクション結果に追加して、無効なトランザクションを示すことができる。コンセンサスプロセスを実行すると、無効なトランザクション結果をブロックチェーンに格納しようとする可能性があるが、無効フラグにより、コンセンサスシステムが無効なトランザクション結果でブロックチェーンを更新することを防止する。
【００１５】
説明のために、スマートコントラクトの実行に関連して使用されるブロックチェーンの環境において、いくつかの例示的な実装態様について記述する。しかしながら、本明細書の実装態様は、提供される特定の例に限定されず、本明細書の開示から当業者に明らかである、他の用途、他の種類のコンピューティングシステム、および他のシステムアーキテクチャなどで使用されるブロックチェーンおよび同様のデータ構造に拡張することができる。
【００１６】
図１は、いくつかの実装態様によるシステム１００の例示的なアーキテクチャを示す。システム１００は、以下でコンセンサスノード１０２と称する複数のコンセンサスノード・コンピューティング・デバイス１０２（１）、１０２（２）、１０２（３）、．．．、１０２（Ｎ）を含み、少なくとも１つのスマートコントラクト１０６などに関して、１つまたは複数のネットワーク１０４を介して互いに通信することができる。さらに、コンセンサスノード１０２は、１つまたは複数のネットワーク１０４を介して、１つまたは複数のクライアント・コンピューティング・デバイス１０８ならびに／もしくは１つまたは複数の外部システム・コンピューティング・デバイス１１０と通信することができる。
【００１７】
本明細書のいくつかの例では、システム１００は、少なくとも１つのブロックチェーン１１２を生成および維持することができるスケーラブルな分散型ピアツーピアシステムである。したがって、データの完全性は、例えば、単なる信頼ベースのインフラストラクチャではなく、コンセンサスメカニズムに基づいている。本明細書の例では、「コンセンサス」は、真実か偽であるかに関する集合的な意思決定プロセスまたは合意を指すことができる。例えば、システム１００は、システム１００に参加する様々な異なるコンセンサスノード１０２が合意に至ることができる、参加するコンセンサスノード１０２から構成される分散型コンセンサスネットワークを提供する。個々のコンセンサスノード１０２は、それぞれが自身のデータを提供して、コンセンサスネットワーク全体が集合的に合意に基づく決定を達成することを可能にすることができる。
【００１８】
システム１００は、スマートコントラクト１０６からの時系列のトランザクションまたは他の情報をブロックチェーン１１２内の連続するブロックとして記録するよう構成される。したがって、各ブロックチェーン１１２は、そのブロック内に格納された対応するトランザクションのための分散型データベースとして機能することができる。その結果、トランザクション記録は安全に記録され、事実上変更することができない。システム１００内のすべてのコンセンサスノード１０２は、同じスマートコントラクト１０６および同じブロックチェーン１１２を含むことができ、同じトランザクションに対する（コンセンサスプログラム１１６、スマートコントラクト・ライフサイクル・マネージャ１１８、およびスマートコントラクトコンフィギュレータ１２０を含む）同じノードプログラム１１４の各インスタンスを実行することができ、したがって、各トランザクションを検証（または無効化）することができ、各トランザクションについてブロックチェーン１１２にトランザクション情報を追加することができる。有効なトランザクションは、ブロックチェーン１１２内の次のブロックに書き込まれる。後述するように、いくつかの実施形態では、ブロックチェーン１１２が無効なトランザクションで更新されていないことを示す無効フラグを用いて無効なトランザクションもブロックチェーン１１２に書き込まれる。一例として、ブロックを無効トランザクションのブロックチェーンに追加することができるが、そのブロックは無効としてマークされる。コンセンサスノード１０２はまた、トランザクションなどに対して、すなわち、各スマートコントラクト１０６の各実行に対応して、トランザクション結果および／または他のトランザクション情報をブロックチェーンに追加することもできる。例えば、いくつかの例では、特定のスマートコントラクト１０６とその特定のスマートコントラクト１０６のトランザクション情報を格納するための各ブロックチェーン１１２との間に１対１の関係が存在することができる。
【００１９】
いくつかの例では、本明細書のシステム１００の分散型ピアツーピアの性質は、任意の単一ユーザまたはユーザグループが、基盤インフラストラクチャを制御すること、またはシステム１００の完全性を損なわせることを防止することを助けることができる。例えば、システム１００のユーザ１１９（例えば、クライアントノード１０８）は、すべてが等しい状態を有することができ、同じプロトコルを遵守することができる。場合によっては、ユーザ１１９は、個人、企業、国家主体、および組織など、またはこれらの任意の組み合わせとすることができる。本明細書のいくつかの例では、システム１００は、プライベート（すなわち、一般に、公衆はアクセスできない）とすることができ、コンセンサスノード１０２は、典型的には、１人または複数のユーザによって所有されるか、操作されるか、またはそのようなユーザの１人または複数と関連することができる。例えば、いくつかの場合、コンセンサスノード１０２のいくつかは、スマートコントラクト１０６への第１の参加者に関連付けることができ、コンセンサスノード１０２のノードのいくつかの他のノードは、スマートコントラクト１０６への第２の参加者に関連付けることができる。もちろん、他の場合には、コンセンサスノード１０２のいくつかまたはすべてが、第１の参加者または第２の参加者のいずれとも関連していない第三者に関連付けられてもよい。
【００２０】
コンセンサスノード１０２は、それぞれ、ブロックチェーン１１２のコピーを維持することができ、スマートコントラクト１０６に従って実施されるトランザクションの検証に参加することができる。例えば、システム１００は、製品のサプライチェーンを追跡し、企業資産の使用に関する資産管理を行い、クラウドファンディングプロジェクトを追跡し、暗号通過を生成し、行政の結果を公に使用できるようにし、ファイルストレージを分散し、モノのインターネット（ＩｏＴ）デバイスを管理し、知的財産を保護し、データを管理し、土地の所有権を登録し、株式取引を追跡し、および銀行取引を追跡するなどの、様々な異なる用途のために、１つまたは複数のスマートコントラクト１０６を実行するために使用することができる。
【００２１】
本明細書のブロックチェーン技術と共に使用されるスマートコントラクト１０６は、上述の例示的な用途または他の多くの用途のいずれかを実行するために使用することができる。上記のように、スマートコントラクトは、特定の条件が満たされた場合に、特定の機能が実行されるという当事者間の合意を含むことができる。したがって、スマートコントラクト１０６は、満たされるべき条件および実行されるべき対応機能を指定するようプログラムされた実行可能コードとすることができ、ブロックチェーン１１２は、条件が満たされ、対応機能が自動的に実行されることを保証することができる。
【００２２】
一例として、ＩｏＴに関して、複数の検出された条件に基づいて建物内の異なるゾーンの温度を自動的に制御するなどの、リモートＩｏＴシステムの管理を自動化するためにスマートコントラクトを使用することができる。別の例として、スマートコントラクト１０６およびブロックチェーン１１２は、例えば、組織の物理的資産の使用およびライフサイクルを管理するために、企業資産管理に使用することができる。別の例として、スマートコントラクト１０６およびブロックチェーン１１２は、例えば、金融商品が特定の基準を満たしたときにデリバティブを支払う、特定の価格に達すると株を売買するなど、仲介取引などの金融取引を実行および記録するために使用することができる。さらに別の例として、スマートコントラクト１０６およびブロックチェーン１１２は、電力を自動的に再分配するために使用することができ、ローカルソーラーマイクログリッドが余剰エネルギーを生成する場合などに、スマートコントラクト１０６およびブロックチェーン１１２を使用して、余剰エネルギーを自動的に再分配することができる。ブロックチェーン１１２およびスマートコントラクト１０６を使用して、他の多くの機能を実行することができ、本明細書で説明する例は、多くの可能な用途のうちのほんの少数である。
【００２３】
スマートコントラクト１０６が最初にセットアップされるか、または確立されると、スマートコントラクト１０６の１人または複数人の参加者（すなわち、ユーザ）は、スマートコントラクトをデジタル署名するために、それぞれのクライアント・コンピューティング・デバイス１０８上のそれぞれのクライアントプログラム１２２を使用することができる。例えば、クライアントプログラム１２２は、スマートコントラクト１０６を実行するコンセンサスノード１０２にスマートコントラクト１０６およびスマートコントラクトのデジタル署名１２４を送信するようにクライアント・コンピューティング・デバイスを構成するために実行することができる。したがって、以下に説明するように、コンセンサスノード１０２は、スマートコントラクト１０６を実行する前にスマートコントラクト１０６が署名されていることを検証することができる。
【００２４】
いくつかの例では、スマートコントラクトがコンセンサスノード１０２に提供され、アクティブにされる、すなわち、「実行中」になると、スマートコントラクト１０６はスマートコントラクト１０６で指定された条件が満たされた場合に実行することができる。いくつかの例では、スマートコントラクト１０６を実行することは、１つまたは複数の外部システム・コンピューティング・デバイス１１０からの外部データの受信に依存することができる。例えば、外部システム・コンピューティング・デバイス１１０は、外部データ１２８をコンセンサスノード１０２に送信するよう構成することができる。スマートコントラクト１０６の性質に応じて、外部データ１２８は、任意の対応する種類のデータとすることができる。例えば、スマートコントラクトが建物内の１つまたは複数のサーモスタットの制御用である場合、外部データ１２８は、サーモスタットに対応するゾーンの温度データとすることができる。スマートコントラクトが１つまたは複数の証券を管理するためのものである場合、外部データ１２８は、現在の株式市場情報などとすることができる。上述した例および本明細書の開示を考慮すると、多くの他の種類の外部データ１２８が当業者には明らかであろう。外部データ１２８を受信すると、コンセンサスノード１０２は、スマートコントラクトを実行することを決定することができる。各コンセンサスノード１０２は、スマートコントラクト１０６をトランザクションとして実行することができる。
【００２５】
別の例として、クライアント・コンピューティング・デバイス１０８の１つからコンセンサスノード１０２への通信は、スマートコントラクト要求１２６を含むことができる。スマートコントラクト要求１２６は、スマートコントラクト（ＳＣ）メッセージ１３０で情報をクライアント・コンピューティング・デバイス１０８に提供することなどを、スマートコントラクト１０６に実行させることができる。例えば、コンセンサスノード１０２は、（例えば、１つまたは複数の実行結果を含むことができる）ＳＣメッセージ１３０をクライアント・コンピューティング・デバイス１０８に送信することができる。
【００２６】
さらに、またはあるいは、いくつかの例では、スマートコントラクト１０６の各実行後に、スマートコントラクト実行結果１３２を含むＳＣメッセージ１３０を、クライアント・コンピューティング・デバイス１０８および／または外部システム・コンピューティング・デバイス１１０の少なくとも１つに送信することができる。例えば、ＳＣ実行結果１３２を含むＳＣメッセージ１３０の受信により、クライアント・コンピューティング・デバイス１０８または外部システム・コンピューティング・デバイス１１０は、ＳＣ実行結果１３２に基づいて機能を実行することができる。例えば、スマートコントラクト１０６がサーモスタットの制御用である場合、ＳＣ実行結果１３２は、外部システム・コンピューティング・デバイス１１０のシステムプログラムにサーモスタットを指定された量だけ増減させることができる。いくつかの例では、ＳＣ実行結果１３２は、ブロックチェーン全体１１２を含むことができる。他の例では、ＳＣ実行結果１３２は、スマートコントラクトの出力値のみを含むことができる。さらに、いくつかの例では、ＳＣメッセージ１３０は、ＳＣ実行結果１３２を含まない可能性があるが、以下にさらに説明するように、他の情報を含むことができる。多くの他の変形が、本明細書の開示の利益を有する当業者には明らかであろう。
【００２７】
図２は、いくつかの実装態様によるコンセンサスノード１０２の一例を示す。場合によっては、コンセンサスノード１０２は、複数の物理サーバまたは任意の数の方法で実現することができる他の種類のコンピューティングデバイスを含むことができる。例えば、サーバの場合、モジュール、プログラム、他の機能コンポーネント、およびデータストレージの一部は、例えば、１つまたは複数のサーバファームまたはデータセンター、およびクラウドホストコンピューティングサービスなどのサーバで実施することができるが、他のコンピュータアーキテクチャが追加的にまたは代替的に使用されてもよい。図示の例では、コンセンサスノード１０２は、１つまたは複数のプロセッサ２０２、１つまたは複数の通信インターフェース２０４、１つまたは複数のコンピュータ可読媒体２０６、ならびに１つまたは複数の入出力（Ｉ／Ｏ）デバイス２０８を含むか、またはそれらと関連することができる。例えば、コンピュータ可読媒体２０６は、ローカルストレージ２１０およびメモリ２１２を含むことができる。さらに、１つのコンセンサスノード１０２の説明が提供されているが、他のコンセンサスノード１０２は、同じまたは類似のハードウェアおよびソフトウェア構成およびコンポーネントを有することができる。さらに、クライアント・コンピューティング・デバイス１０８および任意の外部システム・コンピューティング・デバイスは、異なるプログラム、ソフトウェア、および他の機能コンポーネントを有する同様のハードウェア構成を有することができる。
【００２８】
各プロセッサ２０２は、単一の処理ユニットまたは複数の処理ユニットとすることができ、単一または複数の演算ユニットまたは複数の処理コアを含むことができる。プロセッサ２０２は、１つまたは複数の中央処理装置、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、状態機械、論理回路、および／または動作命令に基づいて信号を操作する任意のデバイスとして実装することができる。例えば、プロセッサ２０２は、本明細書で説明するアルゴリズムおよびプロセスを実行するよう特にプログラムまたは構成された任意の適切な種類の１つまたは複数のハードウェアプロセッサおよび／または論理回路とすることができる。プロセッサ２０２は、本明細書に記載の機能を実行するようプロセッサ２０２をプログラムする、コンピュータ可読媒体２０６に格納されたコンピュータ可読命令をフェッチおよび実行するよう構成することができる。
【００２９】
コンピュータ可読媒体２０６は、コンピュータ可読命令、データ構造、プログラムコード、または他のデータなどの情報を格納するための任意の種類の技術で実施される揮発性および不揮発性メモリならびに／もしくはリムーバブルおよび非リムーバブル媒体を含むことができる。例えば、コンピュータ可読媒体２０６は、これらに限定するものではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、光学ストレージ、ソリッドステートストレージ、磁気テープ、磁気ディスクストレージ、ＲＡＩＤストレージシステム、ストレージアレイ、ネットワーク接続ストレージ、ストレージエリアネットワーク、クラウドストレージ、または所望の情報を格納するために使用することができ、コンピューティングデバイスによってアクセスすることができる任意の他の媒体を含むことができる。コンセンサスノード１０２の構成により、コンピュータ可読媒体２０６は、言及した場合に、非一時的なコンピュータ可読媒体が、エネルギー、搬送波信号、電磁波、および／または信号などの媒体を除外する限りにおいて、有形の非一時的媒体とすることができる。場合によっては、コンピュータ可読媒体２０６は、コンセンサスノード１０２と同じ場所にあってもよく、他の例では、コンピュータ可読媒体２０６は、コンセンサスノード１０２とは別々であるか、または部分的に離れていてもよい。
【００３０】
コンピュータ可読媒体２０６は、プロセッサ２０２によって実行可能な任意の数の機能コンポーネントを格納するために使用することができる。多くの実装態様では、これらの機能コンポーネントは、プロセッサ２０２によって実行可能であり、実行されると、ここに属する動作をコンセンサスノード１０２に実行するようプロセッサ２０２を具体的にプログラムする命令、モジュール、またはプログラムを含む。コンピュータ可読媒体２０６に格納された機能コンポーネントは、スマートコントラクトコンフィギュレータ１２０、スマートコントラクト・ライフサイクル・マネージャ１１８、およびコンセンサスプログラム１１６を含む、ノードプログラム１１４を含むことができる。さらなる機能コンポーネントには、コンセンサスノード１０２の様々な機能を制御および管理することができるスマートコントラクト１０６およびオペレーティングシステム（ＯＳ）２１４が含まれる。例えば、スマートコントラクト１０６は、以下にさらに説明するように、コンセンサスノード１０２上で実行することができる少なくとも第１のスマートコントラクト１０６（１）を含む。
【００３１】
機能コンポーネントのそれぞれは、１つまたは複数のコンピュータプログラム、アプリケーション、実行可能コード、コンピュータ可読命令、またはその一部を含むことができる。さらに、スマートコントラクトコンフィギュレータ１２０、スマートコントラクト・ライフサイクル・マネージャ１１８、およびコンセンサスプログラム１１６は、この例では、ノードプログラム１１４の一部である実行可能命令として示されているが、他の例では、これらのコンポーネントはそれぞれ、別々のプログラム、モジュール、または他の実行可能命令を含むことができ、および／または単一のプログラムに組み合わせることなどができる。場合によっては、機能コンポーネントは、コンピュータ可読媒体２０６のローカルストレージ２１０に格納され、コンピュータ可読媒体２０６のメモリ２１２にロードされ、１つまたは複数のプロセッサ２０２によって実行され得る。多くの他のソフトウェアおよび／またはハードウェアが、本明細書の開示の利益を有する当業者には明らかであろう。
【００３２】
さらに、コンピュータ可読媒体２０６は、本明細書で説明される機能およびサービスを実行するために使用されるデータおよびデータ構造を格納することができる。例えば、コンピュータ可読媒体２０６は、ノードプログラム１１４、スマートコントラクト１０６、および／またはＯＳ２１４によって使用されるデータ、メタデータ、データ構造、および／または他の情報を格納することができる。例えば、コンセンサスノード１０２の一部または全部は、スマートコントラクト期間データ構造（ＤＳ）２１８と同様に、ブロックチェーン１１２を維持することができる。例えば、スマートコントラクト期間ＤＳ２１８は、スマートコントラクトコンフィギュレータ１２０または他の機能コンポーネントによって生成および更新することができる。さらに、ブロックチェーン１１２は、第１のスマートコントラクト１０６（１）に対応し、第１のスマートコントラクトの満了時間に達する前に第１のスマートコントラクト１０６（１）によって実行される複数のトランザクションに関するトランザクション情報２２２を格納または維持する、少なくとも第１のブロックチェーン１１２（１）を含む。
【００３３】
各コンセンサスノード１０２はまた、プログラム、ドライバなど、および機能コンポーネントによって使用または生成された他のデータを含むことができる、他の機能コンポーネントおよびデータを含むか、または維持することができる。さらに、コンセンサスノード１０２は、多くの他の論理的、プログラム的、および物理的コンポーネントを含むことができ、そのうちの上記のものは、本明細書の説明に関連する単なる例である。
【００３４】
通信インターフェース２０４は、ネットワーク１０４などにある、様々な他のデバイスとの通信を可能にするための１つまたは複数のインターフェースおよびハードウェアコンポーネントを含むことができる。したがって、通信インターフェース２０４は、他のコンセンサスノード１０２、クライアントデバイス１０８、および任意の外部システム・コンピューティング・デバイス１１０（図２には図示せず）と通信するためにネットワーク１０４への接続を提供する１つまたは複数のポートを含むことができるか、またはそのようなポートに結合することができる。例えば、通信インターフェース２０４は、本明細書の他の箇所でさらに列挙されているような、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、インターネット、ケーブルネットワーク、セルラネットワーク、無線ネットワーク（例えば、Ｗｉ−Ｆｉ）および有線ネットワーク（例えば、ファイバチャネル、光ファイバ、イーサネット）、直接接続、ならびにＢＬＵＥＴＯＯＴＨ（登録商標）などの近距離通信などの１つまたは複数を介して通信することを可能にすることができる。
【００３５】
１つまたは複数のネットワーク１０４は、インターネットなどのワイドエリアネットワーク、イントラネットなどのローカルエリアネットワーク、セルラネットワークなどの無線ネットワーク、Ｗｉ−Ｆｉなどのローカル無線ネットワーク、ＢＬＵＥＴＯＯＴＨ（登録商標）などの短距離無線通信、ファイバチャネル、光ファイバ、イーサネット、または他の任意のそのようなネットワークを含む有線ネットワーク、直接有線接続、またはそれらの任意の組み合わせを含む、任意の適切な通信技術を含むことができる。したがって、ネットワーク１０４は、有線および／または無線通信技術を含むことができる。そのようなネットワークを介して通信するために使用されるプロトコルは、当技術分野において周知であり、本開示において詳細には説明しない。
【００３６】
場合によっては、Ｉ／Ｏデバイス２０８は、ディスプレイ、様々なユーザインターフェース制御（例えば、マウス、キーボード、タッチスクリーンなど）、オーディオスピーカ、および接続ポートなどを含むことができる。多くの他のハードウェアおよびソフトウェアが、本明細書の開示の利益を有する当業者には明らかであろう。したがって、本明細書で開示される例の範囲は、ハードウェア、ソフトウェア、またはそれらの組み合わせの特定のセットに限定されない。
【００３７】
図３は、いくつかの実装態様によるスマートコントラクト期間データ構造（ＤＳ）２１８の例示的なデータ構造を示す。このデータ構造は、テーブルまたは他の所望のデータ構造とすることができ、図２に関して上述したように、スマートコントラクトコンフィギュレータ１２０によってコンセンサスノードメモリ１１２に保持することができる。図示の例では、列３０２は、コンセンサスノード１０２上で実行することができスマートコントラクト１０６のＩＤ（識別子）を含む。列３０４は、スマートコントラクト１０６の状態を含む。列３０６は、スマートコントラクト１０６の満了時間を含む。列３０８は、スマートコントラクト１０６の保管期間を含む。
【００３８】
スマートコントラクト期間ＤＳ２１８内の各行は、スマートコントラクトごとに作成することができる。図３の例は、それぞれ、スマートコントラクトＩＤ１００１、１００２、１００３を有する３つの異なるスマートコントラクトに対するエントリを含む。スマートコントラクトの状態３０４は、「実行」、「シミュレート」、または「停止」のうちの１つの状態指定を含むことができる。「実行」状態は、各スマートコントラクトの性質および機能に応じて、スマートコントラクトが展開されて実行中であること、すなわち、トランザクションなどを実行するために実行可能であることを示す。「シミュレート」状態は、スマートコントラクトが展開されているが、シミュレーションモードでのみ実行可能であることを示す。「停止」状態は、各スマートコントラクトが展開および停止されていること、すなわち、実行モードまたはシミュレーションモードでは実行できないことを示す。コンセンサスノード上の各スマートコントラクトの状態３０４は、以下にさらに説明するように、スマートコントラクトコンフィギュレータ１２０によって設定および更新することができる。
【００３９】
スマートコントラクトが展開されると、スマートコントラクトの状態３０４は、「実行」に設定される。各スマートコントラクトは、関連付けられた満了時間３０６および保管期間３０８を有することができる。例えば、満了時間３０６および保管期間３０８は、スマートコントラクトが最初に当事者によって入力された場合にスマートコントラクトの一部として確立することができる。場合によっては、満了時間３０６および／または保管期間３０８は、当事者がスマートコントラクトに同意することなどによって、更新または変更することができる。満了時間３０６に達すると、状態３０４は、「実行」から「シミュレート」に移行されるか、そうでなければ変更される。保管期間３０８が終了すると、状態３０４が「シミュレート」から「停止」に移行されるか、そうでなければ変更される。後述するように、スマートコントラクト・ライフサイクル・マネージャ１１８は、各コンセンサスノード上の各スマートコントラクトのライフサイクルを管理するため、満了時間３０６および保管期間３０８をチェックするために実行することができる。
【００４０】
図４Ａは、スマートコントラクトがいくつかの実装態様に従って実行モード中に良好に実行される場合、コンセンサスノードによって、例えば、クライアント・コンピューティング・デバイスに、送信され得るスマートコントラクト応答メッセージ１３０のデータ構造の一例を示す。例えば、ＳＣメッセージ１３０が送信される場合、コンセンサスノードは、スマートコントラクトを使用してトランザクションをすでに実行しており、実行結果のコンセンサスに達しており、実行結果を含むトランザクションのトランザクション情報を、スマートコントラクト用のブロックチェーン内の少なくとも１つの新しいブロックに追加しているであろう。
【００４１】
図４Ａの例では、行４０２は、コンセンサスノード１０２上で実行されたスマートコントラクト１０６のＩＤを含む。行４０４は、スマートコントラクト応答メッセージの種類を含む。この例では、種類は「応答の呼び出し」に設定されている。行４０６は、スマートコントラクトの実行の状態を含む。この場合、状態は「成功」に設定され、トランザクションが正常に実行されたことを示す。行４０８は、スマートコントラクト応答メッセージ１３０のメッセージを含み、この場合、トランザクションが正常に完了したので”ｎｕｌｌ”である。行４１０は、スマートコントラクト応答メッセージ１３０のペイロードを含み、いくつかの例ではトランザクション実行結果を含むことができる。例えば、この例では、ペイロードは、値Ｘ＝１００などの、１つまたは複数の値を含む。非限定的な例の１つとして、スマートコントラクトがサーモスタットを制御する場合、スマートコントラクト応答メッセージ１３０を受信するコンピューティングデバイスによってサーモスタットを制御するためにペイロード内の値を使用することができる。さらに、行４１２は、応答メッセージのタイムスタンプを含む。
【００４２】
図４Ｂは、スマートコントラクト実行がいくつかの実装態様に従って失敗した場合のスマートコントラクト応答メッセージ１３０のデータ構造の一例を示す。例えば、スマートコントラクトは、コンセンサスノードの１つまたは複数上で適切に実行されなかった可能性があり、および／またはコンセンサスノード間で、トランザクションの実行結果に関して、コンセンサスに達していない。この例では、行４０４のスマートコントラクト応答メッセージ１３０の種類は「応答を呼び出す」に設定され、行４０６のスマートコントラクトの実行の状態は「エラー」に設定される。行４０８のメッセージは、「無効なトランザクション」を示す。さらに、行４１０のペイロードは、トランザクション要求が拒否されたことまたはエラー結果の他の原因を示すエラーメッセージに設定される。
【００４３】
図４Ｃは、スマートコントラクトがいくつかの実装態様に従ってシミュレーションモードで実行される場合のスマートコントラクト応答メッセージ１３０のデータ構造の一例を示す。本明細書の例では、上述のように、特定のスマートコントラクトが「シミュレーション」モードの場合、スマートコントラクトは、トランザクションを実行するよう実行されることが許可されるが、スマートコントラクトは、有効なトランザクション結果としてブロックチェーンにトランザクションの結果を書き込むことによってブロックチェーンを更新することが許可されない。したがって、シミュレーションモードは、ブロックチェーンが更新されない点で実行モードとは異なる。このようにして、クライアント・コンピューティング・デバイスのユーザは、シミュレーションモードでスマートコントラクトを実行することによってスマートコントラクトの満了時間に達した後に、ブロックチェーン内のデータにアクセスすることができる。シミュレーションモードでは、スマートコントラクトを用いてトランザクションを実行することにより、ユーザは、ブロックチェーンからトランザクション情報を取得することができ、シミュレーションモードでスマートコントラクトの下でトランザクションを実行した結果によってブロックチェーンが更新されないことにより、ブロックチェーンの完全性が維持される。
【００４４】
図４Ｃの例では、行４０４のＳＣメッセージ１３０の種類は「応答をシミュレート」に設定され、行４０６のスマートコントラクトの実行の状態は「成功」に設定される。スマートコントラクトの要求されたトランザクションの実行が成功したので、行４０８のメッセージは”ｎｕｌｌ”に設定される。行４１０のペイロードは、返される値に設定される。したがって、スマートコントラクト応答メッセージ１３０は、ブロックチェーンの内容に影響を与えることなく、ブロックチェーンに格納されたトランザクション情報または他のコンテンツ（この例では値Ｘ＝１００）を返すことができる。
【００４５】
図５から図８は、いくつかの実装態様による例示的プロセスを示す流れ図である。プロセスは、一連の動作を表す論理流れ図におけるブロックの集合として示され、その一部または全部は、ハードウェア、ソフトウェア、またはそれらの組み合わせで実現することができる。ソフトウェアの場合では、ブロックは、１つまたは複数のプロセッサによって実行されると、列挙された動作を実行するようにプロセッサをプログラムする、１つまたは複数のコンピュータ可読媒体に格納されたコンピュータ実行可能命令を表すことができる。一般に、コンピュータ実行可能命令は、特定の機能を実行する、または特定のデータ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、およびデータ構造などを含む。ブロックが記述されている順序は、限定するものとして解釈されるべきではない。任意の数の記述されたブロックは、プロセスまたは代替プロセスを実装するために任意の順序および／または並列で組み合わせることができ、すべてのブロックを実行する必要はない。説明のために、プロセスは、本明細書の例に記載された環境、フレームワーク、およびシステムを参照して記述されるが、プロセスは、多種多様な他の環境、フレームワーク、およびシステムで実施してもよい。
【００４６】
図５は、いくつかの実装態様によるスマートコントラクトコンフィギュレータ１２０の例示的なプロセス５００を示す流れ図である。スマートコントラクトコンフィギュレータ１２０は、スマートコントラクトの展開、アップグレード、移行、シミュレート、および解除のプロセスを実行する。プロセス５００は、ノードプログラム１１４を実行することによって各コンセンサスノード１０２上のスマートコントラクトコンフィギュレータ１２０によって実行されるアルゴリズムを含むことができる。例えば、各コンセンサスノード上でノードプログラム１１４を実行して、コンセンサスノードの１つまたは複数のプロセッサがプロセス５００を実行するよう構成することができる。
【００４７】
５０２では、スマートコントラクトコンフィギュレータは、（例えば、図６のプロセス６００を実行する場合などに、スマートコントラクト・ライフサイクル・マネージャ１１８から送信される）スマートコントラクト構成の要求を受信することができる。要求メッセージは、スマートコントラクトプログラムの指示および構成要求の種類を含むことができる。
【００４８】
５０４では、スマートコントラクトコンフィギュレータは、要求メッセージから、「展開」、「アップグレード」、「シミュレート」、または「解除」とすることができる、構成要求の種類を判定する。
【００４９】
５０６では、スマートコントラクトコンフィギュレータは、種類の値をチェックすることによって構成要求の種類が「解除」であるかどうかを判定する。種類が「解除」である場合、プロセスは５２０に進み、スマートコントラクトを停止および解除する。そうでなければ、種類が「解除」でない場合、プロセスは５０８に進む。
【００５０】
５０８では、構成要求の種類が「シミュレート」であるかどうかを判定する。種類が「シミュレート」である場合、プロセスは５１８に進み、スマートコントラクトをシミュレーションモードに変更する。そうでなければ、種類が「シミュレート」でない場合、プロセスは５１０に進む。
【００５１】
５１０では、種類が「解除」または「シミュレート」でない場合、種類は「展開」または「アップグレード」であり、スマートコントラクトコンフィギュレータは、各スマートコントラクトから満了時間および保管期間を読み込む。例えば、種類が「展開」または「アップグレード」の場合、要求は、新しいスマートコントラクトを展開するか、既存のスマートコントラクトをアップグレードすることを意図する。新しいスマートコントラクトを展開する場合、スマートコントラクトコンフィギュレータは、例えば、図３に関して上述した、スマートコントラクト期間ＤＳ２１８における新しいスマートコントラクトのための新しい記録を作成する。既存のスマートコントラクトをアップグレードする場合、スマートコントラクトコンフィギュレータは、スマートコントラクト期間ＤＳ２１８におけるスマートコントラクトの既存のレコードを更新することができる。
【００５２】
５１２では、スマートコントラクトコンフィギュレータは、スマートコントラクト期間ＤＳ２１８の満了時間および／または保管期間を更新することができる。
【００５３】
５１４では、スマートコントラクトコンフィギュレータは、スマートコントラクト期間ＤＳ２１８におけるスマートコントラクトの状態を「実行」に設定する。換言すれば、スマートコントラクトは、各コンセンサスノード上で実行される準備が整う。
【００５４】
５１６では、スマートコントラクトコンフィギュレータは、スマートコントラクトを実行する、すなわち、スマートコントラクトを各コンセンサスノード上でアクティブにする。この時点から、スマートコントラクトは、スマートコントラクトのトランザクションを実行するためにスマートコントラクト要求１２６をクライアントノード１０８から受け取ることができる。トランザクションが実行されると、新しいブロックがブロックチェーンに追加され、トランザクション結果および他のトランザクション情報（コンセンサスに達したと仮定する）が記録される。
【００５５】
５１８では、５０８での要求の種類が「シミュレート」であると判定された場合、スマートコントラクトコンフィギュレータは、スマートコントラクト期間ＤＳ２１８におけるスマートコントラクトの状態として「シミュレート」に設定する。この時点から、スマートコントラクトは、例えば、図１に関して上述したように、スマートコントラクトのトランザクションをシミュレートするためにスマートコントラクト要求１２６をクライアントノード１０８から受け取ることができる。
【００５６】
５２０では、５０６における要求の種類が「解除」であると判定された場合、スマートコントラクトコンフィギュレータは、スマートコントラクト期間ＤＳ２１８におけるスマートコントラクトの状態として「停止」に設定する。
【００５７】
５２２では、スマートコントラクトコンフィギュレータは、スマートコントラクトを停止する。この時点から、スマートコントラクトは、スマートコントラクト要求１２６をクライアントノード１０８からもはや受け取ることができない。いくつかの例では、対応するブロックチェーンを削除またはアーカイブすることができる。
【００５８】
図６は、いくつかの実装態様に従って、例えば図１に関して上述した、スマートコントラクト・ライフサイクル・マネージャ１１８によって実行することができる例示的なプロセス６００を示す流れ図である。例えば、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクトを変更して、スマートコントラクトの状態をシミュレーションモードに変更するシミュレーションインジケータを設定することができ、スマートコントラクトコンフィギュレータに要求を送信して、スマートコントラクトコンフィギュレータに、例えば、図５に関して上述したように、スマートコントラクトをシミュレーションモードに再構成させることができる。場合によっては、プロセス６００は、条件の発生などに基づいて、自動的に、例えば、定期的に、実行してもよい。他の例では、システム管理者または他のユーザが、プロセス６００を実行させることができる。一例として、プロセスは、図３のスマートコントラクト期間ＤＳ２１８内の各エントリを調べることができる。
【００５９】
６０２では、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクト期間ＤＳ２１８から記録を読み出すことができる。
【００６０】
６０４では、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクト期間ＤＳ２１８から満了時間３０６の値を判定する。
【００６１】
６０６では、スマートコントラクト・ライフサイクル・マネージャは、現時点と満了時間３０４の判定値と比較することによってスマートコントラクトが期限切れになっているかどうかを判定する。スマートコントラクトが満了時間を過ぎた場合、プロセスは６０８に進み、そうでない場合、プロセス６００は６０２に戻って、スマートコントラクト期間ＤＳ２１８内の次の記録を処理し、またはすべての記録が処理されると、プロセス６００は終了することができる。
【００６２】
６０８では、スマートコントラクトライフサイクルマネージャは、選択された記録のスマートコントラクト期間ＤＳ内の保管期間３０８の値を判定する。
【００６３】
６１０では、スマートコントラクト・ライフサイクル・マネージャは、現在の日付と保管期間３０８の判定値とを比較することによって、スマートコントラクトが保管期間３０８の終わりに達したかどうかを判定する。保管期間３０８の終わりに達した場合、プロセスは６２０に進む。保管期間３０８の終わりに達していない場合、プロセスは６１２に進む。
【００６４】
６１２では、保管期間の終わりにまだ達していないがスマートコントラクトの満了時間に達した場合、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクト期間ＤＳ２１８から選択された記録のＩＤ３０２に対応するスマートコントラクトを取得する。例えば、スマートコントラクトの有効期間が満了時間を過ぎた場合、スマートコントラクトは、有効なトランザクション結果としてブロックチェーンにそれ以上のトランザクション結果を書き込むことはできない。したがって、スマートコントラクトの状態は、シミュレーションモードに変更される。
【００６５】
６１４では、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクトの状態がシミュレーションモードに変更されたことを示すために、スマートコントラクトにシミュレーションインジケータを設定する。シミュレーションモードでは、ユーザは、スマートコントラクトを使用してトランザクションをシミュレートすることによってブロックチェーンから情報を抽出することができるが、ブロックチェーンは変更されない。
【００６６】
６１６では、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクトコンフィギュレータに構成要求を行う種類として「シミュレート」を設定する。
【００６７】
６１８では、スマートコントラクト・ライフサイクル・マネージャは、（例えば、図５の５０２で上述したように）スマートコントラクトコンフィギュレータ１２０にスマートコントラクト構成の要求を送信する。スマートコントラクトコンフィギュレータは、図５に関して上述したように、要求を受信して、スマートコントラクト期間ＤＳ２１８を更新することができる。その場合、プロセス６００は、スマートコントラクト期間ＤＳ２１８内の次の記録を処理するために６０２に戻ることができ、またはすべての記録が処理された場合、プロセス６００を終了することができる。
【００６８】
６２０では、６１０でスマートコントラクト・ライフサイクル・マネージャにより保管期間が終了したと判定された場合、スマートコントラクト・ライフサイクル・マネージャは、選択された記録に対して図３の列３０２から判定された対応するスマートコントラクトＩＤを有するスマートコントラクトを取得する。保管期間が終了すると、スマートコントラクトはもはやブロックチェーン内のトランザクションデータを読み取ることができなくなり、スマートコントラクトは解除することができる。
【００６９】
６２２では、スマートコントラクト・ライフサイクル・マネージャは、スマートコントラクトコンフィギュレータに構成要求を行う構成要求の種類として「解除」を設定する。
【００７０】
６２４では、スマートコントラクト・ライフサイクル・マネージャは、（例えば、図５の５０２で上述したように）スマートコントラクトコンフィギュレータ１２０にスマートコントラクト構成の要求を送信する。スマートコントラクトコンフィギュレータは、上記のように要求を受け取り、スマートコントラクトを停止する。その場合、プロセス６００は、スマートコントラクト期間ＤＳ２１８内の次の記録を処理するために６０２に戻ることができ、またはすべての記録が処理された場合、プロセス６００を終了することができる。
【００７１】
図７は、スマートコントラクトがいくつかの実装態様に従って無効なトランザクション結果を破棄するよう構成されるスマートコントラクトを実行するための例示的なプロセス７００を示す流れ図である。一例として、例えば、図１に関して上述したスマートコントラクト１０６は、クライアントコンピューティングデバイス１０８からなどのスマートコントラクト要求１２６を受信することができ、要求を受信したことに応答してトランザクションを実行することができる。例えば、ＳＣ要求１２６は、そのスマートコントラクトを呼び出して、ブロックチェーンからデータを検索し、検索されたデータをスマートコントラクト応答メッセージ１３０のトランザクション結果として返すトランザクションを実行する照会機能とすることができる。スマートコントラクトは、ＳＣ要求１２６に応答して、スマートコントラクト応答メッセージ１３０をクライアントコンピューティングデバイス１０８に返すことができる。本明細書の例では、スマートコントラクトに「トランザクションを実行」させることは、スマートコントラクト１０６の１つまたは複数の機能を呼び出すことを意味することができる。呼び出された機能は、ブロックチェーン上のデータを読み書きする論理を含むことができる。
【００７２】
いくつかの例では、プロセス７００は、部分的にはノードプログラム１１４によって、および部分的にはスマートコントラクト１０６自体によって、実行することができる。例えば、ノードプログラム１１４は、コンセンサスノード１０２上の複数のスマートコントラクトおよび対応するブロックチェーンを管理することができる。ノードプログラム１１４は、クライアントコンピューティングデバイス、外部コンピューティングデバイス、および他のコンセンサスノード１０２からの通信を受信し、応答することができる。さらに、ノードプログラムは、受信された通信がどのスマートコントラクトに適用されるかを判定することができ、スマートコントラクトＩＤ、クライアントコンピューティングデバイスＩＤ、ユーザＩＤ、または受信した通信に関連する他の識別子に基づいて通信のターゲットである特定のスマートコントラクトを呼び出すことができる。
【００７３】
７０２では、コンセンサスノードは、例えば、クライアントコンピューティングデバイスから、スマートコントラクト要求を受信することができ、受信した要求を、要求に対応する特定のスマートコントラクトに提供し、スマートコントラクトを呼び出し、要求に基づいてトランザクションを実行することができる。
【００７４】
７０４では、コンセンサスノードは、スマートコントラクトが解除されたかどうかを判定することができる。例えば、コンセンサスノードは、スマートコントラクト期間データ構造２１８をチェックして、受信した要求に対応するスマートコントラクトが停止されているか、または解除されているかどうかを判定することができる。
【００７５】
７０６では、スマートコントラクトが解除される場合、コンセンサスノードは、スマートコントラクトが利用できないことを示す応答メッセージをコンピューティングデバイスに送信することができる。例えば、応答メッセージは、スマートコントラクトの状態が停止していること、および／または要求されたトランザクションを実行しようとする際にエラーがあったことを示すことができる。
【００７６】
７０８では、スマートコントラクトはスマートコントラクト要求に応答してトランザクションを実行する。トランザクションの実行中、スマートコントラクトは、ブロックチェーン上のデータの少なくとも一部を読み取ることができる。
【００７７】
７１０では、スマートコントラクト１０６は、スマートコントラクトのシミュレーションインジケータをチェックする。例えば、各スマートコントラクトは、スマートコントラクトがシミュレーションモードにあるかどうかを示すためにオンまたはオフにすることができる関連するフラグ（例えば、設定可能なビットなど）または他の種類のインジケータを有することができる。したがって、シミュレーションインジケータが「設定」されている場合、スマートコントラクトがシミュレーションモードにあることを示す。
【００７８】
７１２では、スマートコントラクト１０６は、シミュレーションインジケータがシミュレーションモードに設定されているかどうかを判定する。シミュレーションインジケータが設定されている場合、プロセスは７２４に進み、トランザクションの結果はブロックチェーンに格納されない。他方、シミュレーションインジケータが設定されていない場合、プロセスは７１４に進み、トランザクションの結果は、（コンセンサスに達した後）ブロックチェーンに書き写すことができる。
【００７９】
７１４では、スマートコントラクト１０６は、コンセンサスシステム内の他のコンセンサスノード１０２によりコンセンサス動作を実行するか、または実行させる。様々な既知のコンセンサスプログラムのいずれかを使用して、トランザクション結果のコンセンサスを判定することができる。一例として、一次コンセンサスノードをシステム内で指定して、コンセンサスノード１０２の一部または全部がトランザクション結果のコンセンサスに達したかどうかを判定することができる。その場合、一次ノードは、他のコンセンサスノード１０２にコンセンサスに達したことか、またはコンセンサス達しなかったことについて通知することができる。多くの他の変形が、本明細書の開示の利益を有する当業者には明らかであろう。
【００８０】
７１６では、スマートコントラクトはコンセンサスプログラムから応答を受け取り、コンセンサスに達したかどうかを判定する。コンセンサスに達した場合、プロセスは７１８に進み、トランザクション結果を元帳（例えば、ブロックチェーン内の新しいブロック）に書き写す。他方で、コンセンサスに達していない場合、プロセスは７２２に進む。コンセンサスを受け取っていないトランザクションは無効であるので、図７の実装態様では、トランザクション結果を元帳に書き写すことはスキップされる。
【００８１】
７１８では、コンセンサスに達すると、スマートコントラクト１０６は、例えば、少なくともトランザクションの結果をブロックチェーンの新しいブロックに書き込むことによって、トランザクション情報を元帳に書き写す。これは、コンセンサスシステムの各コンセンサスノード上で行うことができ、その結果、同じスマートコントラクトのすべてのブロックチェーンが、すべてのコンセンサスノードで同じになる。
【００８２】
７２０では、スマートコントラクト１０６は、トランザクションが良好に完了したことを示すスマートコントラクトメッセージを作成することができる。一例として、スマートコントラクトメッセージは、図４Ａに関して図示および説明したように、スマートコントラクトのＩＤ、種類、状態、メッセージ、ペイロード、およびタイムスタンプを含むことができる。例えば、上述のように、種類は「応答を呼び出す」と設定することができ、状態は「成功」と設定される。この例では、スマートコントラクト１０６は、スマートコントラクトがシミュレーションモードではないスマートコントラクトの下でトランザクションが良好に実行された場合にのみトランザクション情報を元帳に書き写し（例えば、スマートコントラクトが展開されているか、または既存のスマートコントラクトがアップグレードされているなど）、実行結果についてコンセンサスに達する。
【００８３】
７２２では、７１６でコンセンサスに達していない場合、スマートコントラクト１０６は、エラーを示すスマートコントラクトメッセージを作成する。図４Ｂを参照して図示および説明したように、ＳＣメッセージは、スマートコントラクトＩＤ、種類、状態、メッセージ、ペイロード、およびタイムスタンプを含むことができる。この状況では、種類は「応答を呼び出す」と設定され、状態はエラーを示すことができる。
【００８４】
７２４では、シミュレーションインジケータが７１２で設定されたと判定された場合、スマートコントラクト１０６は、シミュレーションを示すスマートコントラクトメッセージを作成することができる。スマートコントラクトメッセージは、図４Ｃに示すように、スマートコントラクトＩＤ、種類、状態、メッセージ、ペイロード、およびタイムスタンプを含むことができる。この場合、種類は「応答をシミュレート」と設定することができ、状態は「成功」と設定することができる。
【００８５】
７２６では、スマートコントラクトは返されるか、さもなければコンセンサスノードに、スマートコントラクト要求を送信したクライアントコンピューティングデバイスまたは他のコンピューティングデバイスへの応答としてスマートコントラクトメッセージを返させることができる。
【００８６】
図８は、いくつかの実装態様に従って有効および無効なトランザクション結果の両方を格納するよう構成されるスマートコントラクトを実行するための例示的なプロセスを示す流れ図である。一例として、例えば、図１に関して上述したスマートコントラクト１０６は、クライアントコンピューティングデバイス１０８からなどのスマートコントラクト要求１２６を受信することができ、要求を受信したことに応答してトランザクションを実行することができる。スマートコントラクトは、スマートコントラクト要求１２６に応答して、スマートコントラクトメッセージ１３０をクライアントコンピューティングデバイス１０８に返すことができる。本明細書の例では、スマートコントラクトに「トランザクションを実行」させることは、スマートコントラクト１０６の１つまたは複数の機能を呼び出すことを意味することができる。呼び出された機能は、ブロックチェーン上のデータを読み書きする論理を含むことができる。図８の例では、トランザクションが有効であるか無効であるかにかかわらず、すべてのトランザクションがブロックチェーンに格納される。一例として、無効なトランザクションのためにブロックチェーンに追加されたブロックは、無効であるとマークすることができる。
【００８７】
いくつかの例では、プロセス８００は、部分的にはノードプログラム１１４によって、および部分的にはスマートコントラクト１０６自体によって、実行することができる。例えば、ノードプログラム１１４は、コンセンサスノード１０２上の複数のスマートコントラクトおよび対応するブロックチェーンを管理することができる。ノードプログラム１１４は、クライアントコンピューティングデバイス、外部コンピューティングデバイス、および他のコンセンサスノード１０２からの通信を受信し、応答することができる。さらに、ノードプログラムは、受信された通信がどのスマートコントラクトに適用されるかを判定することができ、スマートコントラクトＩＤ、クライアントコンピューティングデバイスＩＤ、ユーザＩＤ、または受信した通信に関連する他の識別子に基づいて通信のターゲットである特定のスマートコントラクトを呼び出すことができる。
【００８８】
８０２では、コンセンサスノードは、例えば、クライアントコンピューティングデバイスから、スマートコントラクト要求を受信することができ、受信した要求を、要求に対応する特定のスマートコントラクトに書き写すか、または提供し、スマートコントラクトを呼び出し、要求に基づいてトランザクションを実行することができる。図７のブロック７０４および７０６をここでも実行することができる。
【００８９】
８０４では、スマートコントラクトはスマートコントラクト要求に応答してトランザクションを実行する。トランザクションの実行中、スマートコントラクトは、ブロックチェーン上のデータの少なくとも一部を読み取ることができる。
【００９０】
８０６では、スマートコントラクトは、スマートコントラクトのシミュレーションインジケータを読み取る。例えば、各スマートコントラクトは、スマートコントラクトがシミュレーションモードにあるかどうかを示すためにオンまたはオフにすることができる関連するフラグ（例えば、ビットなど）を有することができる。
【００９１】
８０８では、スマートコントラクトは、シミュレーションインジケータがシミュレーションに設定されているかどうかを判定する。シミュレーションインジケータが設定されている場合、プロセスは８１０に進み、トランザクションの結果をクライアントコンピューティングデバイスに返す。この例では、トランザクションの結果はまた、ブロックチェーン内の新しいブロックに無効なトランザクションとして追加される。例えば、スマートコントラクトはシミュレーションモードで動作しており、したがって、スマートコントラクトの満了時間がすでに経過しているので、トランザクションの結果はデータにアクセスするためにのみ使用される。したがって、トランザクション結果が元帳、すなわち、ブロックチェーン上で有効になるのを防ぐために、無効なトランザクションを示すためにトランザクション結果に無効フラグが設定される。したがって、新しいブロックがブロックチェーンに追加されても、そのブロックは無効とマークされる可能性がある。他方、シミュレーションインジケータが設定されていない場合、プロセスは８１４に進む。
【００９２】
８１０では、シミュレーションインジケータが設定されている場合、スマートコントラクトは、トランザクションシミュレーションの結果をスマートコントラクトメッセージとしてクライアントコンピューティングデバイスに返す。スマートコントラクトは、スマートコントラクトメッセージをシミュレーションの指示と共に返す。例えば、図４Ｃを参照して図示および説明したように、メッセージは、スマートコントラクトＩＤ、種類、状態、メッセージ、ペイロード、およびタイムスタンプを含むことができる。例えば、種類は、上述のように、「応答をシミュレート」と設定される。
【００９３】
８１２では、スマートコントラクトは、トランザクション結果に無効フラグを設定する。前述のように、スマートコントラクトはシミュレーションモードで動作しており、したがって、スマートコントラクトの満了時間がすでに経過しているので、トランザクションの結果はデータにアクセスするためにのみ使用される。したがって、無効なトランザクションを示すために、トランザクション結果に無効フラグが設定される。したがって、新しいブロックがブロックチェーンに追加されても、そのブロックは無効とマークされる可能性がある。
【００９４】
８１４では、スマートコントラクトは、コンセンサスプログラムに、他のコンセンサスノード１０２とのコンセンサス動作を実行させて、トランザクション結果にコンセンサスがあるかどうかを判定する。様々な既知のコンセンサスプログラムのいずれかを使用して、トランザクション結果のコンセンサスを判定することができる。一例として、一次コンセンサスノードをシステム内で指定して、コンセンサスノード１０２の一部または全部がトランザクション結果のコンセンサスに達したかどうかを判定することができる。その場合、一次ノードは、他のコンセンサスノード１０２にコンセンサスに達したことか、またはコンセンサス達しなかったことについて通知することができる。多くの他の変形が、本明細書の開示の利益を有する当業者には明らかであろう。
【００９５】
８１６では、スマートコントラクトはコンセンサスプログラム１１６から応答を受け取り、コンセンサスに達したかどうかを判定する。コンセンサスに達した場合、プロセスは８２２に進む。他方、コンセンサスに達していない場合、プロセスは８１８に進む。
【００９６】
８１８では、コンセンサスに達しなかった場合、スマートコントラクトは、トランザクション結果に無効フラグを設定する。コンセンサスを得られないトランザクション結果は無効であるため、トランザクション情報をブロックチェーンに書き写す前に無効フラグが設定される。さらに、シミュレーションインジケータが設定されている場合、トランザクション結果には、無効フラグが上記８１２ですでに設定されている。
【００９７】
８２０では、スマートコントラクトは、エラーを示すスマートコントラクトメッセージを作成する。例えば、図４Ｂを参照して図示および説明したように、メッセージは、スマートコントラクトＩＤ、種類、状態、メッセージ、ペイロード、およびタイムスタンプを含むことができる。例えば、種類は「応答を呼び出す」と設定することができ、状態は「エラー」と設定することができる。
【００９８】
他方、８２２において、シミュレーションインジケータが設定されず、トランザクション結果についてコンセンサスに達すると、スマートコントラクトは、成功を示すスマートコントラクトメッセージを作成する。例えば、図４Ａを参照して図示および説明したように、メッセージは、スマートコントラクトＩＤ、種類、状態、メッセージ、ペイロード、およびタイムスタンプを含むことができる。例えば、種類は「応答を呼び出す」と設定することができ、状態は「成功」と設定することができる。
【００９９】
８２４では、スマートコントラクト１０６は、例えば、少なくともトランザクションの結果をブロックチェーンの新しいブロックに書き込むことによって、トランザクション情報を元帳に書き写す。これは、コンセンサスシステムの各コンセンサスノード上で行うことができ、その結果、同じスマートコントラクトのすべてのブロックチェーンが、すべてのコンセンサスノードで同じになる。前述のように、トランザクション結果に無効フラグが関連付けられている場合、新しいブロックは無効とマークされる可能性がある。
【０１００】
８２６では、スマートコントラクトは、８２０または８２２のいずれかで作成されたスマートコントラクトメッセージを返す。
【０１０１】
本明細書に記載される例示的なプロセスは、説明のために提供されるプロセスの単なる例である。多くの他の変形が、本明細書の開示の観点から当業者には明らかであろう。さらに、本明細書の開示は、プロセスを実行するための適切なフレームワーク、アーキテクチャ、および環境のいくつかの例を述べているが、本明細書の実装態様は、図示されて説明される特定の例に限定されない。さらに、本開示は、説明され、図面に示されるような、様々な例示的な実装態様を提供する。しかしながら、本開示は、本明細書で説明および図示された実装態様に限定されず、当業者に既知であるように、他の実装態様に拡張することができる。
【０１０２】
本明細書で説明される様々な命令、プロセス、および技術は、コンピュータ可読媒体に格納されて本明細書のプロセッサによって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な状態と考えることができる。一般に、プログラムモジュールは、特定のタスクを実行するため、または特定の抽象データ型を実装するためのルーチン、プログラム、オブジェクト、コンポーネント、データ構造、実行可能コードなどを含む。これらのプログラムモジュールなどは、ネイティブコードとして実行することができ、または仮想マシンもしくは他のジャストインタイムコンパイル実行環境などでダウンロードして実行することができる。典型的には、プログラムモジュールの機能は、様々な実装態様において所望されるように組み合わせるか、または分散させることができる。これらのモジュールおよび技術の実装態様は、コンピュータ記憶媒体に格納してもよく、または何らかの形態の通信媒体を介して送信してもよい。したがって、本明細書のインデックス構成は、物理ハードウェア上に実装することができ、仮想実装で使用することができ、物理または仮想マシン上の全体重複除去システムの一部として使用することができ、ならびに／もしくは他の重複除去実装態様（例えば、ＳＡＮ）のための構成要素として、または大規模メモリインデックスなどのいくつかの非重複除去環境内にあるものとすることができる。
【０１０３】
発明の主題は、構造的特徴および／または方法論的動作に特有の言語で記載されているが、添付の特許請求の範囲に定義された発明の主題は必ずしも記載された特定の特徴または動作に限定されないことを理解されたい。むしろ、特定の特徴および動作は、特許請求の範囲を実施する例示的な形態として開示される。
【符号の説明】
【０１０４】
１００  システム
１０２  コンセンサスノード
１０４  ネットワーク
１０６  スマートコントラクト
１０８  クライアント・コンピューティング・デバイス
１１０  外部システム・コンピューティング・デバイス
１１２  ブロックチェーン
１１４  ノードプログラム
１１６  コンセンサスプログラム
１１８  スマートコントラクト・ライフサイクル・マネージャ
１１９  ユーザ
１２０  スマートコントラクトコンフィギュレータ
１２２  クライアントプログラム
１２４  デジタル署名
１２６  スマートコントラクト要求
１２８  外部データ
１３０  スマートコントラクト（ＳＣ）メッセージ
１３２  スマートコントラクト実行結果
２０２  プロセッサ
２０４  通信インターフェース
２０６  コンピュータ可読媒体
２０８  入出力（Ｉ／Ｏ）デバイス
２１０  ローカルストレージ
２１２  メモリ
２１４  オペレーティングシステム（ＯＳ）
２１８  スマートコントラクト期間データ構造（ＤＳ）
２２２  トランザクション情報
３０４  状態
３０６  満了時間
３０８  保管期間
１００１  スマートコントラクトＩＤ
１００２  スマートコントラクトＩＤ
１００３  スマートコントラクトＩＤ
【図１】
2019008791.tif 000003
【図２】
2019008791.tif 000004
【図３】
2019008791.tif 000005
【図４Ａ】
2019008791.tif 000006
【図４Ｂ】
2019008791.tif 000007
【図４Ｃ】
2019008791.tif 000008
【図５】
2019008791.tif 000009
【図６】
2019008791.tif 000010
【図７】
2019008791.tif 000011
【図８】
2019008791.tif 000012
【外国語明細書】
2019008791000001.pdf
2019008791000002.pdf
2019008791000003.pdf
2019008791000004.pdf