(57)【要約】  分散システムにおいて、第１のコンピュータシステムが、第２のコンピュータシステムにより実行される（例えば、プログラムの実行の一部として実行される）計算の真正性及び完全性の計算的に検証可能な保証を要求することができる。本願で説明される方法は、プログラムの正しい実行を強制及び／又は確保するために利用されてもよい。第１のコンピュータシステムは、プログラムの実行を第２のコンピュータシステムに委任することができ、プロトコルが採用されて、プログラムの正しい実行を行うように第２のコンピュータシステムを制約することができる。プロトコルは、プログラムの誤った実行を緩和及び／又は訂正する緩和及び訂正ルーチンを含んでもよい。本願で説明される種々のシステム及び方法において、プロトコルは、ビットコインベースのブロックチェーンネットワークなどのブロックチェーンネットワークを利用してもよい。
2021502750.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実現される方法であって、
メディエータコンピュータシステムに関連づけられた公開鍵下で秘密値を暗号化するステップと、
前記暗号化された秘密値をワーカコンピュータシステムに提供するステップであり、前記暗号化された秘密値は、前記ワーカコンピュータシステム及び前記メディエータコンピュータシステムにより、第１のプログラムを集合的に実行するために使用可能である、ステップと、
第２のプログラムをブロックチェーンデータ構造で利用可能にさせるステップであり、前記第２のプログラムの実行は入力を有する、ステップと、
前記ブロックチェーンデータ構造が
前記第２のプログラムの正しい実行のプルーフと、
入力値であり、前記プルーフを生成する前記第２のプログラムの実行は前記第２のプログラムへの前記入力として前記入力値を使用することに少なくとも部分的に基づく、入力値と、
を反映すると決定するステップと、
前記プルーフに少なくとも部分的に基づいて、前記入力値が有効であると決定するステップと、
前記入力値が有効であるとの決定に応答して、前記秘密値を前記ワーカコンピュータシステムに提供するステップであり、前記ワーカコンピュータシステムは少なくとも前記秘密値を使用して前記第１のプログラムを実行可能である、ステップと、
を含む方法。
【請求項２】
前記秘密値に少なくとも部分的に基づいて暗号ハッシュ出力を生成するステップと、
前記暗号化された値及び前記暗号ハッシュ出力が双方とも前記秘密値に少なくとも部分的に基づいて決定されることの証拠を生成するステップと、
前記暗号ハッシュ出力及び前記証拠を前記ワーカコンピュータシステムに提供するステップであり、前記ワーカコンピュータシステムは、前記証拠を使用して前記暗号化された秘密値及び前記暗号ハッシュ出力が同じ値に少なくとも部分的に基づくかどうかを決定するように動作可能である、ステップと、
をさらに含む請求項１に記載の方法。
【請求項３】
前記証拠はゼロ知識証明であり、前記ゼロ知識証明の正しさは前記ワーカコンピュータシステムにより計算的に検証可能である、請求項２に記載の方法。
【請求項４】
前記入力値は第１の入力値であり、当該方法は、前記第１の入力値が誤っているとの決定に応答して、
前記第１の入力値に少なくとも部分的に基づいて第２の入力値を算出するステップと、
前記第２の入力値を前記ワーカコンピュータシステムに提供するステップと、
前記ワーカコンピュータシステムが前記第２の入力値を使用して第３のプログラムを実行したとの決定に応答して、前記秘密値を前記ワーカコンピュータシステムに提供するステップと、
をさらに含む、請求項１乃至３のうちいずれか１項に記載の方法。
【請求項５】
前記第２の入力値を算出することは、ハミング距離を算出することを含む、請求項４に記載の方法。
【請求項６】
第２の証拠を取得するステップであり、前記第２の証拠は、前記ワーカコンピュータシステムとデータソースとの間の通信のセットを含み、前記通信のセットは、前記入力値が有効であるかどうかを決定するために使用可能であり、前記第２の証拠は、前記データソースによりデジタル署名される、ステップと、
前記データソースに関連づけられた少なくとも公開鍵を使用して前記第２の証拠の真正性を検証するステップと、
前記通信のセットに少なくとも部分的に基づいて前記入力が有効であるかどうかを決定するステップと、
をさらに含む、請求項１乃至５のうちいずれか１項に記載の方法。
【請求項７】
前記第２のプログラムを前記ブロックチェーンデータ構造で利用可能にさせるステップは、前記ブロックチェーンデータ構造に対してブロックチェーントランザクションをマイニングさせるステップを含み、前記ブロックチェーントランザクションは、
前記第２のプログラムを決定するために使用可能な情報と、
デジタル資産の動きを妨げるロックスクリプトであり、前記ロックスクリプト及びアンロックスクリプトを集合的に実行することは、前記デジタル資産に対する動きの妨げを解除し、前記ロックスクリプト及び前記アンロックスクリプトを集合的に実行することは、２つのデジタル署名が
当該コンピュータにより実現される方法を実行するコンピューティングエンティティに関連づけられたデジタル署名、
前記ワーカコンピュータシステムに関連づけられたデジタル署名、及び
前記メディエータコンピュータシステムに関連づけられたデジタル署名
を含むデジタル署名のセットのものであることを検証することを含む、ロックスクリプトと、
を含む、請求項１乃至６のうちいずれか１項に記載の方法。
【請求項８】
前記第１のプログラムの実行は、前記ワーカコンピュータシステムにデジタル資産の制御を移転する、請求項１乃至７のうちいずれか１項に記載の方法。
【請求項９】
前記ワーカコンピュータシステムが時間閾内に前記第２の入力値を使用して前記第３のプログラムを実行するのに失敗したとの決定に応答して、前記ブロックチェーンデータ構造に対して第４のプログラムを利用可能にさせるステップであり、前記第４のプログラムは、デジタル資産の制御を得るために使用可能である、ステップ
をさらに含む請求項４に記載の方法。
【請求項１０】
前記時間閾は、前記第４のプログラムの部分を含むブロックチェーントランザクションが前記ブロックチェーンデータ構造に対してマイニングされ得る最も早い時間を符号化する、請求項９に記載の方法。
【請求項１１】
デジタル署名を生成するステップと、
アンロックスクリプトに前記デジタル署名を符号化するステップであり、前記アンロックスクリプトは、前記ワーカコンピュータシステムに関連づけられた称されたデジタル署名をさらに符号化し、前記第４のプログラムは、ロックスクリプト及び前記アンロックスクリプトを含み、前記ブロックチェーンデータ構造に関連づけられたブロックチェーンネットワークの１つ以上のノードによる前記第４のプログラムの実行は、前記デジタル署名及び前記称されたデジタル署名が双方とも有効であると決定することを含む、ステップと、
をさらに含む、請求項１乃至１０のうちいずれか１項に記載の方法。
【請求項１２】
前記第１のプログラムは、ロックスクリプト及びアンロックスクリプトを含み、前記アンロックスクリプトは、前記ワーカコンピュータシステムに関連づけられた称された秘密値及び称されたデジタル署名を符号化し、
前記ブロックチェーンデータ構造に関連づけられたブロックチェーンネットワークの１つ以上のノードによる前記第１のプログラムの実行は、前記称された秘密値及び前記称されたデジタル署名が双方とも有効であると決定することを含む、
請求項１乃至１１のうちいずれか１項に記載の方法。
【請求項１３】
前記ロックスクリプトは前記暗号ハッシュ出力を含み、前記称された秘密値が有効であると決定することは、
前記称された秘密値を使用して暗号ハッシュアルゴリズムの出力を計算することと、
前記出力と前記暗号ハッシュ出力とが整合すると決定することと、
を含む、請求項１乃至１２のうちいずれか１項に記載の方法。
【請求項１４】
システムであって、
プロセッサと、
前記プロセッサによる実行の結果として当該システムに請求項１乃至１３のうちいずれか１項に記載のコンピュータにより実現される方法を実行させる実行可能命令を含むメモリと、
を含むシステム。
【請求項１５】
コンピュータシステムのプロセッサにより実行された結果として前記コンピュータシステムに請求項１乃至１３のうちいずれか１項に記載のコンピュータにより実現される方法を少なくとも実行させる実行可能命令を記憶した非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、分散コンピューティング環境におけるコンピュータプログラムの正しい実行を確保することに関し、より詳細には、第１のコンピューティングエンティティが第２のコンピューティングエンティティにプログラムの実行を委任するところの、プログラムの正しい実行を確保するプロトコルに関する。本発明は、ブロックチェーンネットワークにおける使用に特に適するが、これに限定されない。
【背景技術】
【０００２】
本文献において、用語「ブロックチェーン」は、電子的なコンピュータベースの分散台帳のいくつかのタイプのうち任意のものを指し得る。これらには、コンセンサスベースのブロックチェーン及びトランザクションチェーン技術、許可あり（permissioned）及び許可なし（un-permissioned）台帳、共有台帳、及びこれらの変形が含まれる。ブロックチェーン技術の最も広く知られている適用はビットコイン（登録商標）台帳であるが、他のブロックチェーン実装が提案され、開発されている。簡便さ及び例示の目的で、本開示に記載される技術の有用な一用途としてビットコインが参照されることがあるが、ビットコインは、本開示に記載される技術が適用され得る多くの用途のうちの１つに過ぎない。しかしながら、本発明はビットコインブロックチェーンでの使用に限定されず、非商業用途を含む代替的なブロックチェーンの実装及びプロトコルもまた本発明の範囲内に入ることに留意されたい。
【０００３】
ブロックチェーンはピアツーピアの電子台帳であり、これは、ブロックから構成されるコンピュータベースの非中央集権的な分散システムとして実装され、同様に、ブロックはトランザクション及び他の情報から構成され得る。いくつかの例において、「ブロックチェーントランザクション」は、データと条件のセットとを含むフィールド値の構造化されたコレクションを符号化する入力メッセージを指し、条件のセットの履行は、フィールドのセットがブロックチェーンデータ構造に書き込まれるための前提条件である。例えば、ビットコインでは、各トランザクションは、ブロックチェーンシステム内の参加者間のデジタル資産の制御の移転を符号化するデータ構造であり、少なくとも１つの入力及び少なくとも１つの出力を含む。いくつかの実施形態において、「デジタル資産」は、使用する権利に関連づけられたバイナリデータを指す。デジタル資産の例は、ビットコイン、イーサ（ether）、及びライトコイン（Litecoin）を含む。いくつかの実装において、デジタル資産の制御の移転は、デジタル資産の少なくとも一部を第１のエンティティから第２のエンティティに再関連づけすることにより実行できる。ブロックチェーンの各ブロックは前のブロックのハッシュを含み得、それにより、ブロックが一緒にチェーン化されて、ブロックチェーンの開始以降にそれに書き込まれた全てのトランザクションの永続的で改変不可能なレコードを作成する。トランザクションは、その入力及び出力に埋め込まれたスクリプトとして知られる小さいプログラムを含み、これは、トランザクションの出力に如何にして及び誰がアクセスできるかを指定する。ビットコインプラットフォームでは、これらのスクリプトはスタックベースのスクリプト言語を使用して書かれる。
【０００４】
トランザクションがブロックチェーンに書き込まれるためには、それは「立証され（validated）」なければならない。ネットワークノード（マイニングノード）が、ワークを実行して各トランザクションが有効であることを確保し、無効なトランザクションはネットワークから拒絶される。ノードは、他のノードとは異なる有効性の標準を有することができる。ブロックチェーンにおける有効性がコンセンサスベースであるため、トランザクションは、トランザクションが有効であるとノードの過半数が同意した場合、有効と考えられる。ノードにインストールされたソフトウェアクライアントは、部分的には未使用トランザクション出力（unspent  transaction  output、ＵＴＸＯ）ロック及びアンロックスクリプト（locking  and  unlocking  script）を実行することにより、ＵＴＸＯを参照するトランザクションに対してこの立証作業を実行する。ロック及びアンロックスクリプトの実行がＴＲＵＥの評価であり、適用可能な場合における他の立証条件が満たされる場合、トランザクションはノードにより立証される。立証されたトランザクションは他のネットワークノードに伝搬され、すると、マイニングノードは該トランザクションをブロックチェーンに含めることを選択することができる。ゆえに、トランザクションがブロックチェーンに書き込まれるためには、それは、ｉ）トランザクションを受信した第１のノードにより立証され、トランザクションが立証された場合、ノードはそれをネットワーク内の他のノードに中継する、ｉｉ）マイニングノードにより構築された新しいブロックに追加される、ｉｉｉ）マイニングされる、すなわち過去のトランザクションの公開台帳に追加される、がなされなければならない。
【０００５】
ブロックチェーン技術は、暗号通貨実装の使用に対して最も広く知られているが、デジタル起業家は、新しいシステムを実現するために、ビットコインが基礎とする暗号セキュリティシステムとブロックチェーンに記憶できるデータとの双方の使用を探求し始めている。ブロックチェーンが暗号通貨の領域に限定されない自動化されたタスク及び処理に使用できる場合、かなり有利であろう。このようなソリューションは、その適用においてより多目的であると同時に、ブロックチェーンの利点（例えば、イベントの永続的な改ざん防止のレコード、分散処理等）を利用することができる。
【０００６】
本開示は、１つ以上のブロックチェーンベースのコンピュータプログラムの技術的態様について説明する。ブロックチェーンベースのコンピュータプログラムは、ブロックチェーントランザクションに記録されたマシン読取可能及び実行可能なプログラムでもよい。ブロックチェーンベースのコンピュータプログラムは、入力を処理して結果を生成することができるルールを含んでもよく、これは次いで、これら結果に依存してアクションを実行させることができる。現在の研究の１つの分野は、「スマートコントラクト」の実装のためのブロックチェーンベースのコンピュータプログラムの使用である。自然言語で書かれる従来の契約と異なり、スマートコントラクトは、マシン読取可能な契約又は同意の条件の実行を自動化するように設計されたコンピュータプログラムであり得る。
【０００７】
ブロックチェーン関連の関心のある別の分野は、ブロックチェーンを介して実世界のエンティティを表現及び移転するための「トークン」（又は「カラードコイン（coloured  coins）」）の使用である。潜在的に機密又は秘密のアイテムは、認識可能な意味又は値を有さないトークンにより表現できる。ゆえに、トークンは、実世界のアイテムがブロックチェーン上で参照されることを可能にする識別子として機能する。
【発明の概要】
【０００８】
したがって、これらの態様の１つ以上においてブロックチェーン技術を改善する方法及びシステムを提供することが望ましい。このような改善されたソリューションが次に考案されている。ゆえに、本発明によれば、別記の特許請求の範囲に定義される方法が提供される。
【０００９】
本発明によれば、ブロックチェーンネットワークのノードのための、コンピュータにより実現される方法が提供され得る。当該コンピュータにより実現される方法は、メディエータ（mediator）コンピュータシステムに関連づけられた公開鍵下で秘密値を暗号化するステップと、暗号化された秘密値をワーカ（worker）コンピュータシステムに提供するステップであり、暗号化された秘密値は、ワーカコンピュータシステム及びメディエータコンピュータシステムにより、第１のプログラムを集合的に実行するために使用可能である、ステップと、ブロックチェーンデータ構造上で第２のプログラムを利用可能にさせるステップであり、第２のプログラムの実行は入力を有する、ステップと、ブロックチェーンデータ構造が、第２のプログラムの正しい実行のプルーフ（proof  of  correct  execution）と、入力値であり、プルーフを生成するための第２のプログラムの実行は、第２のプログラムへの入力として入力値を使用することに少なくとも部分的に基づく、入力値と、を反映していると決定するステップと、入力値が有効であるとの決定に応答して、秘密値をワーカコンピュータシステムに提供するステップであり、ワーカコンピュータシステムは、少なくとも秘密値を使用して第１のプログラムを実行可能である、ステップと、を含む。
【００１０】
好ましくは、当該方法は、秘密値に少なくとも部分的に基づいて暗号ハッシュ出力を生成するステップと、暗号化された値と暗号ハッシュ出力とが双方とも秘密値に少なくとも部分的に基づいて決定されることの証拠（attestation）を生成するステップと、暗号ハッシュ出力及び証拠をワーカコンピュータシステムに提供するステップであり、ワーカコンピュータシステムは、証拠を使用して、暗号化された秘密値と暗号ハッシュ出力とが同じ値に少なくとも部分的に基づくかどうかを決定するよう動作可能である、ステップと、を含んでもよい。
【００１１】
証拠は、ゼロ知識証明でもよく、ゼロ知識証明の正しさは、ワーカコンピュータシステムにより計算的に検証可能であり得る。計算的な検証は、完全性及び／又は真正性（authenticity）の保証を提供するための暗号演算の使用を含んでもよい。
【００１２】
好ましくは、入力値は第１の入力値でもよく、当該方法は、第１の入力値が誤っているとの決定に応答して、第１の入力値に少なくとも部分的に基づいて第２の入力値を算出するステップと、第２の入力値をワーカコンピュータシステムに提供するステップと、ワーカコンピュータシステムが第２の入力値を使用して第３のプログラムを実行したとの決定に応答して、秘密値をワーカコンピュータシステムに提供するステップと、を含んでもよい。
【００１３】
好ましくは、第２の入力値を算出するステップは、重み付きハミング距離を算出するステップを含んでもよい。
【００１４】
好ましくは、当該方法は、第２の証拠を取得するステップであり、第２の証拠は、ワーカコンピュータシステムとデータソースとの間の通信のセットを含み、通信のセットは、入力値が有効であるかどうかを決定するために使用可能であり、第２の証拠は、データソースによりデジタル署名される、ステップと、データソースに関連づけられた少なくとも１つの公開鍵を使用して第２の証拠の真正性を検証するステップと、通信のセットに少なくとも部分的に基づいて入力が有効であるかどうかを決定するステップと、を含んでもよい。
【００１５】
いくつかの場合、ブロックチェーンデータ構造上で第２のプログラムを利用可能にさせるステップは、ブロックチェーンデータ構造に対してブロックチェーントランザクションをマイニングさせるステップを含み、ブロックチェーントランザクションは、第２のプログラムを決定するために使用可能な情報と、ロックスクリプトとを含む。ロックスクリプトは、デジタル資産の動きを妨げる（encumber）ことができ、ロックスクリプトと対応するロックスクリプトとを集合的に実行することは、デジタル資産に対する動きの妨げ（encumbrance）を解除し、ロックスクリプトと対応するアンロックスクリプトとを集合的に実行することは、少なくとも２つのデジタル署名がデジタル署名のセットのものであることを検証することを含む。デジタル署名のセットは、本明細書に記載のコンピュータにより実現される方法を実行するコンピューティングエンティティに関連づけられた第１のデジタル署名と、ワーカコンピュータシステムに関連づけられた第２のデジタル署名と、メディエータコンピュータシステムに関連づけられた第３のデジタル署名とを含んでもよい。デジタル署名のセットの署名のうち少なくとも過半数の検証は、動きの妨げを解除するためにロックスクリプト及びアンロックスクリプトを集合的に実行することの一部として実行されてもよい。
【００１６】
第１のプログラムの実行は、デジタル資産の制御をワーカコンピュータシステムに移転し得る。
【００１７】
好ましくは、当該方法は、ワーカコンピュータシステムが時間閾内に第２の入力値を使用して第３のプログラムを実行するのに失敗したとの決定に応答して、第４のプログラムをブロックチェーンデータ構造に対して利用可能にさせるステップであり、第４のプログラムはデジタル資産の制御を得るために使用可能である、ステップ、をさらに含んでもよい。
【００１８】
時間閾は、第４のプログラムの一部を含むブロックチェーントランザクションがブロックチェーンデータ構造に対してマイニングされ得る最も早い時間を符号化してもよい。
【００１９】
好ましくは、当該方法は、デジタル署名を生成するステップと、アンロックスクリプトにデジタル署名を符号化するステップと、を含んでもよい。アンロックスクリプトは、ワーカコンピュータシステムに関連づけられた称された（purported）デジタル署名をさらに符号化してもよく、第４のアプリケーションは、ロックスクリプト及びアンロックスクリプトを含み、ブロックチェーンデータ構造に関連づけられたブロックチェーンネットワークの１つ以上のノードによる第４のプログラムの実行は、デジタル署名及び称されたデジタル署名が双方とも有効であると決定することを含む。
【００２０】
第１のアプリケーションは、ロックスクリプト及びアンロックスクリプトを含んでもよく、アンロックスクリプトは、ワーカコンピュータシステムに関連づけられた称された秘密値及び称されたデジタル署名を符号化する。ブロックチェーンデータ構造に関連づけられたブロックチェーンネットワークの１つ以上のノードによる第１のアプリケーションの実行は、称された秘密値及び称されたデジタル署名が双方とも有効であることを決定することを含んでもよい。
【００２１】
ロックスクリプトは、暗号ハッシュ出力を含んでもよい。称された秘密が有効であると決定することは、称された秘密値を使用して暗号ハッシュアルゴリズムの出力を計算し、出力と暗号ハッシュ出力とが整合する（match）と決定することを含んでもよい。
【００２２】
さらに、プロセッサと、実行可能命令を含むメモリと、を含むシステムであって、実行可能命令はプロセッサによる実行の結果として、請求される方法のうちいずれかを当該システムに実行させる、システムを提供することが望ましい。
【００２３】
さらに、コンピュータシステムの１つ以上のプロセッサによる実行の結果として、請求される方法のうちいずれかをコンピュータシステムに少なくとも実行させる実行可能命令を記憶した非一時的コンピュータ読取可能記憶媒体を提供することが望ましい。
【００２４】
追加的又は代替的に、本発明は、改善されたブロックチェーンプログラミングツール又は支援を提供し得る。これは、分散された検証可能な計算を容易又は可能にする改善された、効率的な、最適化された構成を提供し得る。
【図面の簡単な説明】
【００２５】
本発明のこれら及び他の態様が、本明細書に記載した実施形態から明らかであり、それらを参照して明らかにされるであろう。次に、本発明の一実施形態が、単なる例として、添付の図面を参照して説明される。
【図１】少なくとも１つの実施形態による、プログラムの正しい実行を検証する環境を示す。
【図２】種々の実施形態による、プロトコルを実装するために利用され得るコンピューティング環境を示す。
【図３】検証可能な計算の実行に適した環境の図を示す。
【図４】分散コンピューティング環境においてプログラムの正しい実行を強制するためにプロトコルが実装され得る環境の図を示す。
【図５】分散コンピューティング環境においてプログラムの正しい実行を強制するためのブロックチェーンベースのプロトコルに従ったトランザクションレコードの一例を示す。
【図６】プロトコルに従ったプログラムの実行を要求する処理の例示図である。
【図７】プロトコルに従ったプログラムの正しい実行を検証する処理の例示図である。
【図８】プロトコルに従ったプログラムの実行の要求を満たす処理の例示図である。
【図９】プロトコルに従った訂正ルーチンを実行する処理の例示図である
【図１０】プロトコルに従った紛争を調停する処理の例示図である。
【図１１】本開示の少なくとも１つの実施形態を実施するために使用可能なコンピューティングデバイスを示す。
【発明を実施するための形態】
【００２６】
種々の実施形態において、本明細書に記載されるシステム及び方法は、複数のエンティティが分散コンピューティング環境のノードを制御し得る分散コンピューティング環境において、コンピュータプログラムの正しい実行を確保するために利用される。そのような分散環境では、コンピューティングエンティティがタスクの実行を別のエンティティに委任することが困難な可能性があり、少なくともなぜならば、２つのエンティティは、実行エンティティがタスクを実際に実行し、かつタスクを正しく実行したという保証を委任エンティティが提供される、信頼関係を欠いているためである。本開示によるプロトコルは、プログラムの正しい実行の暗号的に検証可能な保証を提供するために利用され得、第１のコンピューティングエンティティがプログラムの実行を第２のコンピューティングエンティティに委任する。したがって、このようなプロトコルの使用は、プログラムが正しく実行されたという暗号的に検証可能な保証を提供しながら、プログラムを実行するためにシステム全体にわたり利用可能なコンピューティングリソースをより効率的に利用することにより、コンピューティングシステム（例えば、分散コンピューティング環境）の効率を改善するために利用され得る。
【００２７】
図１は、本明細書に記載されるシステム及び方法がプログラムの正しい実行を強制及び／又は確保するために利用され得る環境を示す。いくつかの実施形態において、第１のコンピュータシステム（例えば、クライアント１０２）は、プログラム１０８の実行を第２のコンピュータシステム（例えば、証明者（prover）１０４）に委任する。証明者１０４は、プログラムを実行し、（例えば、さらなるコンピュータシステムから受信され得る、入力のための正しい値を使用して）証明者１０４がプログラムを正しく実行したことの証拠となる（attests）正しい実行のプルーフ１１０をクライアント１０２に提供し得る。いくつかの場合、プロトコルに従って、証明者がプログラム１０８を正しく実行したかどうかを決定するために、第３のコンピュータシステム（例えば、メディエータ１０６）が利用され得る。本明細書に記載される技術は、分散コンピューティング環境において実施されてもよく、ブロックチェーンネットワークと関連して利用されてもよい。
【００２８】
クライアント１０２は、計算タスクの実行を証明者１０４に委任するコンピュータシステムを指し得、証明者１０４は、異なるコンピュータシステムであり得る。証明者１０４は、一般的に言えば、プログラム１０８などの任意の適切なフォーマットで符号化され得る計算タスクを実行することができる任意の適切なコンピュータシステムであり得る。クライアント１０２は、プログラムを実行することができる複数のコンピュータシステムの中から証明者１０４を選択し得る。証明者１０４は、クライアント１０２がコントロールを有さず、一般的に言えば、クライアント１０２との信頼関係を有するよう求められないコンピュータシステムでもよく、クライアント１０２は、本明細書に記載のプロトコルの外で、証明者１０４が特定の方法で動作を実行する（例えば、クライアント１０２により指定された入力のセットに従ってプログラムを実行する）さらなる保証を何ら必要としない。
【００２９】
プログラム１０８は計算タスクを指し得、図２に関連して説明される手法を使用して生成され得る。プログラム１０８は、例えば、図２に関連して説明されるような２次プログラムＱでもよい。一般的に言えば、プログラム１０８は、命令のセットに関連して１つ以上の出力を決定するために使用される１つ以上の入力を有し得る。入力及び／又は出力は、入力及び／又は出力が正しい値を有するとの計算的に検証可能な証拠である、証明者１０４により生成される証拠である正しい実行のプルーフ１１０を生成するために利用されてもよい。一実施形態において、証拠はゼロ知識証明である。
【００３０】
メディエータ１０６は、クライアント１０２及び／又は証明者１０４との信頼関係を有し及び／又は確立するコンピュータシステムであり得る。この文脈において、信頼関係は、メディエータがクライアント１０２及び／又は証明者１０４により、クライアント１０２と証明者１０４との間に生じ得る紛争を調停する適切な構成要素であると決定されることを指し得る。例えば、信頼関係は、クライアント又は証明者のうちいずれか１つと協同して、１つ以上の訂正プログラムを実行する能力をメディエータに付与する意思を意味してもよい。
【００３１】
いくつかの実施形態において、プロトコルは、ブロックチェーントランザクションを通じてプログラムの実行及び立証を可能にする。本明細書でさらに詳細に説明されるように、ゼロ知識プロトコルは、これらに限られないが作成段階、計算段階、及び検証段階を含む段階のセットを有し得る。作成段階において、ゼロ知識証明の生成及び検証に使用可能な公開パラメータの計算が実行される。実行段階において、プログラムが１つ以上の入力に基づいて実行され得、１つ以上の入力は、信頼された機関、ウェブサイトなどの、ブロックチェーンの外部のソースから得られるデータを含んでもよい。証明者は、プログラムの実行の一部として外部のデータソースからデータを取得してもよい。検証段階において、入力は、ゼロ知識証明検証に従って実行される検証関数のパラメータのうち１つ以上を表し得る。いくつかの場合、プログラムを実行するために使用される入力が正しいことを確保するプロトコルを有することが望ましい。換言すれば、プログラムを実行するときに正しく挙動し、かつ正確な入力を提供するよう証明者を制約することが望ましい場合がある。
【００３２】
図２は、種々の実施形態による、プロトコルを実装するために利用され得るコンピューティング環境２００を示す。プロトコルは、ブロックチェーン技術を使用してプルーフオブコレクトネス（proof-of-correctness）を記憶し、「構築による正しさ（correct-by-construction）」の暗号アプローチをスマートコントラクトと組み合わせるように実装されてもよい。一実施形態において、パブリックな検証可能な計算スキームは、３つの段階、すなわちセットアップ段階、計算段階、及び検証段階を含む。
【００３３】
セットアップ段階は、計算タスクの実行をアウトソーシングする処理の一部として実行され得る。クライアントは、以下で言及されるように、計算タスクの実行を証明者に委任する顧客又はクライアントコンピュータシステムなどのエンティティを指し得、証明者は、異なるコンピュータシステムであり得る。クライアントは、一般的に言えば、これらに限られないが限られたコンピューティングリソース、コンピューティングリソースの欠如、タスクを実行するためにクライアントコンピュータシステムを利用することに関連づけられた財務コスト、タスクを実行するためにクライアントコンピュータシステムを利用することに関連づけられたエネルギーコスト（例えば、電力のためにバッテリに依存するモバイルデバイス又はラップトップは、証明者を利用して計算集約的タスクを実行し、それにより、電力を節約し、バッテリ駆動型デバイスの使用を延長し得る）等を含む様々な理由で、計算タスクの実行を委任し得る。
【００３４】
一実施形態において、セットアップ段階は、クライアント、顧客、組織の従業員、又は他の任意の適切なエンティティが正確なセマンティクスを有するフォーマルな言語でコントラクトを書くことを含む。コントラクトは、Ｃ又はＪａｖａ（登録商標）などの高水準プログラミング言語で書かれてもよい。一般的に言えば、コントラクトは、コンピュータシステムにより操作できるフォーマットに変換されるか又は変換可能な任意の言語又はシンタックスで表され得る。一実施形態において、限られた目的でドメイン固有言語が型の安全性を提供してもよく、制限された表現度が利用されてもよい。生成されるソースコードは、コントラクトの正確な記述であり得る。
【００３５】
コンパイラ２０２は、コンピュータシステムの１つ以上のプロセッサにより実行された場合にシステムにソースコード２０６を入力として取らせ、回路を生成する実行可能コードを含む、任意のハードウェア、ソフトウェア、又はこれらの組み合わせでもよい。コンパイラ２０２は、バイナリコードなどのマシン読取可能フォーマットにコンパイルされた命令に基づいて命令を実行又は実施するコンピュータプログラムを指し得る。コンパイラ２０２が図示されているが、インタプリタ、アセンブラ、及び他の適切なソフトウェア及び／又はハードウェアコンポーネントを利用してソースコードを回路に変換してもよいことに留意されたい。一実施形態において、回路は、体（field）Ｆからの値を運び、かつ論理及び／又は算術ゲートに接続するワイヤを備える算術回路である。一実施形態において、回路Ｃは、元の回路Ｃの完全な記述を提供する多項式のセットを含む二次プログラムＱ２０８を生成するためにシステムにより使用される。
【００３６】
一実施形態において、コンパイラ２０２は、これらに限られないがプリプロセッサディレクティブ、スタティックイニシャライザ、グローバル及びローカル関数、ブロックスコープの変数、配列、データ構造、ポインタ、関数呼び出し、関数演算子（例えば、ファンクタ）、条件及びループ、並びに算術及びビット単位ブール演算子を含む、Ｃ又はＪａｖａなどのプログラミング言語の実質的なサブセットを認識することができる。一実施形態において、コンパイラ２０２は、プログラミング言語の標準によるコマンドのセット全体はサポートしない（これは、いくつかの場合、再帰的アルゴリズムを禁止することのように、特定のタイプのアルゴリズムがスマートコントラクトで実行されることを防止することが意図され得る）。一実施形態において、コンパイラは、ソースコードの表現を算術ゲート言語に拡張して算術回路を生成する。回路の実装は、過去にCampanelli,  M.ら（2017）により「ZERO-Knowledge  Contingent  Payments  Revisited:  Attacks  and  Payments  for  Services」において、並びにTillich,  S.及びSmart,  Bにより「Circuits  of  Basic  Functions  Suitable  For  MPC  and  FHE」において考えられている。算術回路は、コンパイラ２０２又は他の任意の適切なハードウェア、ソフトウェア、又はこれらの組み合わせ（例えば、図２に示されていないソフトウェアモジュール）により、二次算術問題（Quadratic  Arithmetic  Problem、ＱＡＰ）を構築するために利用されてもよい。二次プログラム（quadratic  program）は、一実施形態によれば、クライアント（例えば、鍵生成及び検証）及び証明者（例えば、計算及びプルーフ生成）のための暗号ルーチンのセットへコンパイルされる。
【００３７】
一実施形態において、鍵生成器（generator）２０４は、コンピュータシステムの１つ以上のプロセッサにより実行された場合にシステムに二次プログラムを形成する評価鍵（evaluation  key）及び検証鍵（verification  key）を生成させる実行可能コードを含むハードウェア、ソフトウェア、又はこれらの組み合わせである。計算を二次プログラムとして符号化する手法は、Gennaro,  R.ら（2013）による「Quadratic  Span  Programs  and  Succinct  NIZKs  without  PCPs」において考えられている。一実施形態において、二次算術問題（ＱＡＰ）Ｑは、体Ｆ上で回路Ｃを符号化し、ｍ＋１個の多項式のセット、すなわち、
Ｖ＝｛ｖｋ（ｘ）｝，Ｗ＝｛ｗｋ（ｘ）｝，Ｙ＝｛ｙｋ（ｘ）｝
を含み、０≦ｋ≦ｍである。ターゲット多項式ｔ（ｘ）がさらに定義される。Ｆのｎ個の要素を入力としてとりｎ’個の要素を出力する関数ｆを所与とし、Ｎ＝ｎ＋ｎ'では、Ｑは、｛ｃ１，．．．，ｃＮ｝∈ＦＮがｆの入力及び出力の群（group）の有効な割り当てである場合、及びｔ（ｘ）がｐ（ｘ）を割り切る、すなわち、
【数１】
2021502750.tif 000003
であるような係数のリスト｛ｃＮ＋１，．．．，ｃｍ｝が存在する場合、ｆを計算する。したがって、一実施形態において、ｈ（ｘ）・ｔ（ｘ）＝ｐ（ｘ）であるような何らかの多項式ｈ（ｘ）が存在しなければならない。Ｑのサイズはｍであり、その次数（degree）はｔ（ｘ）の次数である。
【００３８】
一実施形態において、算術回路のためのＱＡＰの構築は、回路内の各乗算ゲートｇについて任意の根ｒｇ∈Ｆを選び、ターゲット多項式を
【数２】
2021502750.tif 000004
であるように定義することを含む。一実施形態において、インデックスｋ∈｛１．．．ｍ｝が回路の各入力に、及び乗算ゲートからの各出力に関連づけられる。Ｖの多項式は各ゲートへの左入力を符号化し、Ｗは各ゲートへの右入力を符号化し、Ｙは出力を符号化する。例えば、ｋ番目のワイヤがゲートｇへの左入力である場合、ｖｋ（ｒｇ）＝１であり、そうでない場合、ｖｋ（ｒｇ）＝０である。したがって、特定のゲートｇとその根ｒｇについて、前の式は以下のように簡略化できる。
【数３】
2021502750.tif 000005
【００３９】
ゲートの出力値は、その入力の積に等しい。可除性（divisibility）チェックは、ｐ（ｒｇ）＝０であるように、ｔ（ｘ）の各ゲートｇ及び根ｒｇごとに１つずつ、ｄｅｇ（ｔ（ｘ））の別個のチェックに分解する。加算ゲートと定数乗算（multiplication-by-constant）ゲートは、ＱＡＰのサイズ又は次数に寄与しない。
【００４０】
一実施形態において、ＱＡＰは体Ｆｐ上で定義され、ｐは大きい素数である。一実施形態において、Ｆｐ上のＱＡＰは、ｐを法とする加算及び乗算の観点で表すことができる任意の関数を効率的に計算することが望ましい。算術スプリットゲートは、［０，２ｋ−１］であることが知られている算術ワイヤａ∈Ｆｐを、ｋ個の２進出力ワイヤに翻訳するように設計され得る。したがって、ブール関数は算術ゲートを使用して表せることになる。例えば、ＮＡＮＤ（ａ，ｂ）＝１−ａｂである。各々の埋め込みブールゲートは、ただ１つの乗算しかコストがかからない。さらに、スプリットなどの新しいゲートは、スタンドアロンとして定義され、他のゲートと構成されることが可能である。［０，２ｋ−１］であることが知られている入力ａ∈Ｆｐを所与として、スプリットゲートは、Σｋ２ｉ−１ａｉ＝ａであり各ａｉが０又は１のいずれかであるようなａの２進数字ａ１，．．．，ａｋを保持するｋ個のワイヤを出力する。
【００４１】
最後、全ての証明者及び検証者（verifier）により使用される公開パラメータが、セットアップ段階の一部としてシステムにより生成される。評価鍵ＥＫと検証鍵ＶＫは、クライアントにより選択された秘密値を使用して導出されることに留意されたい。鍵生成器２０４は、鍵生成アルゴリズムに関連して二次算術プログラム（ＱＡＰ）を利用して、評価鍵ＥＫ２１０及び検証鍵ＶＫ２１２を生成し得る。
【００４２】
一実施形態において、計算タスクの実行は、証明者による入力２１６に対する関数の計算（すなわち、ｆ（ｘ）を評価する処理）を含む。一実施形態において、証明者は、クライアントが計算タスクを委任し得る任意の適切なコンピュータシステムである。入力２１６は、一実施形態において、証明者に関連づけられた秘密鍵を使用して生成されたデジタル署名などの、証明者のアイデンティティの証拠となる情報を含む。一実施形態において、証明者は、計算タスクを成功裏に完了する見返りにデジタル資産を移転することにクライアントが同意するコンピュータシステムである。クライアントは、一実施形態において、入力ｘ及び評価鍵ＥＫを証明者に提供し、証明者は、出力ｙを計算するための計算ルーチン（すなわち、ｙ＝ｆ（ｘ）であり、入力はｘで、関数はｆである）に対して評価モジュール２１４を使用し、評価鍵２１０を使用してプルーフオブコレクトネス２１８を生成する。評価モジュールは、一実施形態において、コンピュータシステムの１つ以上のプロセッサにより実行された場合にコンピュータシステムにＱＡＰ２０８の内部回路ワイヤの値を評価させ、ＱＡＰの出力ｙを生成させる命令を含むハードウェア及び／又はソフトウェアである。
【００４３】
一実施形態において、二次プログラムの各多項式ｖｋ（ｘ）∈Ｆは、双線形群内の要素ｇｖｋ（ｓ）に写像され（mapped）、ｓは、クライアントにより選択される秘密値であり、ｇは、群の生成元であり、Ｆは、ｇの離散対数の体ある。一実施形態において、所与の入力に対して、証明者は、回路を評価して、二次プログラムの係数ｃｉに対応する出力及び内部回路ワイヤの値を取得する。したがって、証明者は、ｖ（ｓ）＝Σｋ∈｛ｍ｝ｃｋ・ｖｋ（ｓ）を評価してｇｖ（ｓ）を求め、ｗ（ｓ）及びｙ（ｓ）を計算し、ｈ（ｘ）＝ｐ（ｘ）／ｔ（ｘ）＝Σｄｈｉ・ｘｉを計算し、評価鍵の中のｈｉ及びｇｓ（ｉ）項を使用してｇｈ（ｓ）を計算することができる。一実施形態において、プルーフオブコレクトネス２１８は、（ｇｖ（ｓ），ｇｗ（ｓ），ｇｙ（ｓ），ｇｈ（ｓ））を含み、検証者は、双線形写像を使用してｐ（ｓ）＝ｈ（ｓ）・ｔ（ｓ）であることをチェックする。一実施形態において、プルーフπは、後の使用のためにブロックチェーンネットワーク２２２上に記憶され、あるいは複数のパーティにより、これらの各々と別個に対話するよう証明者に要求することなく検証可能である。一実施形態において、プルーフオブコレクトネスの回路記憶の評価は、トランザクションのロックスクリプトにより動きを妨げられたリソース（例えば、デジタル資産）をアンロックするために実行され得る。
【００４４】
実施形態において、図２に示される例示的なブロックチェーンネットワーク２２２は、ピアツーピア分散電子デバイスとして実現されたブロックチェーンノードを含み、該電子デバイスは各々、ノードのオペレータ間で少なくとも部分的に同意されたブロックチェーンプロトコルに従う動作を実行するソフトウェア及び／又はハードウェアのインスタンスを実行する。いくつかの例において、「ノード」は、ブロックチェーンネットワーク間で分散されたピアツーピア電子デバイスを指す。ブロックチェーンプロトコルの一例がビットコインプロトコルである。
【００４５】
一実施形態において、ノードのうち少なくともいくつかは、暗号問題を解くなどの複雑な計算を実行するマイニングノードである。暗号問題を解くマイニングノードは、ブロックチェーンに対する新しいブロックを作成し、この新しいブロックをノードのうち他のノードにブロードキャストする。ノードのうち他のノードは、マイニングノードのワーク（work）を検証し、検証すると、ブロックをブロックチェーンに（例えば、それをブロックチェーンの分散台帳に追加することにより）受け入れる。いくつかの例において、ブロックはトランザクションのグループであり、しばしば、タイムスタンプと前のブロックの「フィンガープリント」（例えばハッシュ）でマークされる。このようにして、各ブロックは前のブロックにリンクされた状態になり得、ブロックチェーン内のブロックをリンクする「チェーン」を作成する。実施形態では、有効なブロックは、ノードの合意によりブロックチェーンに追加される。また、いくつかの例において、ブロックチェーンは、立証されたブロックのリストを含む。
【００４６】
一実施形態において、プルーフπはブロックチェーンネットワーク２２２にブロードキャストされ、プルーフを検証するために検証者２２０が使用される。一実施形態において、検証者２２０は、ブロックチェーン上のノードなどの任意の適切なコンピューティングエンティティである。さらに、いくつかの場合、評価鍵ＥＫ及び検証鍵ＶＫを生成する同じコンピューティングエンティティがプルーフも検証することに留意されたい。一実施形態において、ブロックチェーンのノードは、検証鍵ＶＫ及びプルーフπを使用してデジタル資産の制御を移転するトランザクションを立証し、ゆえに、検証が成功した場合にコントラクトを立証することができる。プロトコルの１つの要件は、証明者が、検証鍵ＶＫを知っているときでも誤ったプルーフを提供できないことである。ゆえに、このプロトコルでは、共通参照文字列（common  reference  string、ＣＲＳ）は、クライアントにより、又は少なくとも評価鍵ＥＫ及び検証鍵ＶＫを公開する信頼された第三者により生成される。一実施形態において、公開された検証鍵ＶＫは、計算を検証するために任意のコンピューティングエンティティにより使用できる。
【００４７】
一般的に言えば、クライアントは、相手方（counterparty）又は証明者に支払うためにＰ２ＰＫ（ｐａｙ‐ｔｏ‐ｐｕｂｌｉｃ‐ｋｅｙ）及びＰ２ＰＫＨ（ｐａｙ‐ｔｏ‐ｐｕｂｌｉｃ‐ｋｅｙ‐ｈａｓｈ）などの標準トランザクション（例えば、ビットコインベースのブロックチェーンネットワークで定義された標準トランザクション）を使用することができる。例えば、一実施形態において、クライアントは、Ｐ２ＰＫロックスクリプトを算術回路に変換し、回路から導出されたパズルを含むトランザクションをブロードキャストする。相手方又は証明者は、回路を受信し、適切な入力（例えば、クライアントと証明者との間で共有された秘密、又は証明者の秘密鍵を使用して生成されたデジタル署名などの、証明者のアイデンティティの証拠となる情報）を提供し、回路を実行してプルーフオブコレクトネスπを生成する。一実施形態において、プルーフはデジタル資産をアンロックするために使用され、さらに、相手方又は証明者を識別する情報（例えば、相手方又は証明者に関連づけられた公開鍵及び／又はデジタル署名）が難読化されていないフォーマットでブロックチェーンに記録されない場合があり得る。
【００４８】
一実施形態において、検証鍵及び対応するプルーフは、上記及び／又は以下に記載される手法に従って生成される。したがって、検証者は検証鍵ＶＫ及び証明π、すなわち、
【数４】
2021502750.tif 000006
を与えられ、それにより、検証者は複数の楕円曲線乗算（例えば、公開入力変数ごとに１つずつ）及び５つのペアチェックを計算し、そのうち１つはさらなるペアリング乗算を含む。
【００４９】
検証鍵ＶＫ、プルーフπ、及び（ａ１，ａ２，．．．，ａＮ）を所与として、ｔ（ｘ）がｐ（ｘ）を割り切り、ゆえに（ｘＮ＋１，．．．，ｘｍ）＝ｆ（ｘ０，．．．，ｘＮ）であることを検証するために、検証者は以下のように進める。最初、それは３つのα項を全てチェックする。
【数５】
2021502750.tif 000007
ここで、
【数６】
2021502750.tif 000008
である。次いで、検証者は項βをチェックする。
【数７】
2021502750.tif 000009
最後、検証者は可除性要件をチェックする。
【数８】
2021502750.tif 000010
ここで、
【数９】
2021502750.tif 000011
である。
【００５０】
したがって、上述のセクション及び本開示に記載される例からの表記を考えると、検証は、一実施形態によれば以下の要素のペアチェックのセットを含む。
【数１０】
2021502750.tif 000012
【００５１】
図３は、検証可能な計算の実行を協調させる図３００を示す。クライアント３０２、証明者３０４、及び検証者３０６は、ブロックチェーンネットワークのノードであり得る。クライアント３０２は、任意の適切なコンピュータシステムであってもよく、コンピュータシステムの１つ以上のプロセッサにより実行された場合にコンピュータシステムにスマートコントラクト３０８を受け取らせる実行可能コードを含んでもよい。一実施形態において、スマートコントラクト３０８は、Ｃ、Ｃ＋＋、又はＪａｖａなどのソースコードとして高水準プログラミング言語で符号化される。一実施形態において、コンパイラ、インタプリタ、及び／又はアセンブラなどのソフトウェアを利用して、スマートコントラクト３０８を算術回路３１０に変形してもよく、算術回路３１０は、体
【数１１】
2021502750.tif 000013
からの値を運び、かつ加算及び乗算ゲートに接続する「ワイヤ」からなる。算術回路は、物理ワイヤにより接続された一連の物理ゲート（例えば、７４００シリーズのゲート、フリップフロップ、バッファ、デコーダ、マルチプレクサ等のトランジスタトランジスタ論理（ＴＴＬ）集積回路を使用する）を含む物理回路により実装できる論理回路を指し得ることに留意されたい。図３の文脈及び他の場所で、スマートコントラクト３０８の実行が説明されているが、スマートコントラクトの使用は、算術回路に変形可能なソースコードの１つの非限定的な例に過ぎない。一実施形態において、クライアント３０２は（例えば、単独で、又は他のエンティティと関連して）、動作のセットにより定義されたタスクを実行するソースコードを決定し、タスクの実行は証明者３０４に委任される。一般的に言えば、検証者３０６は、証明者３０４により生成されたプルーフオブコレクトネスの有効性を検証することなどにより、証明者３０４がタスクを正しく実行したと決定することに関連づけられたタスクを実行し得る。
【００５２】
一実施形態において、クライアント３０２は証明者３０４に算術回路３１０を提供し、証明者３０４は回路への入力３１２を取得する。入力データのソースは、ブロックチェーン上に記憶されたデータでもよく、あるいは算術回路３１０に指定された特定のデータフィードとの対話の結果として外部から取得されてもよい。入力データは、ローカルネットワーク、内部ネットワーク、インターネットなどのパブリックネットワーク、ワイドエリアネットワーク、無線ネットワーク、モバイルネットワーク、衛星ネットワーク、複数のネットワークノードを有する分散コンピューティングシステムなどのネットワーク３１８を介して、データプロバイダ３２０及び／又は信頼されたエンティティ３２２などのデータフィードから取得されてもよい。いくつかの場合、入力３１２は、実世界の状態及びイベントに関するデータなどのデータでもよい。回路３１０は、元の回路の完全な記述を提供する多項式のセットを含む二次プログラムＱを生成するために使用され得る。いずれの場合も、証明者３０４は、入力３１２に対して回路Ｃ又は２次プログラムＱを実行して、１つ以上の出力された中間出力及び１つの最終出力を生成し得る。いくつかの実施形態において、証明者は、入力ワイヤに割り当てられた値がｘのものであり、中間値がＣ内の各ゲートの正しい演算に対応し、かつ出力ワイヤに割り当てられた値がｙであるような、回路ワイヤへの値の割り当てである｛Ｃ，ｘ，ｙ｝の有効なトランスクリプトを出力として取得することが期待される。主張された出力が正しくない（すなわち、ｙ≠Ｐ（ｘ）である）場合、｛Ｃ，ｘ，ｙ｝の有効なトランスクリプトは存在しない。一実施形態において、証明者は、回路ワイヤの値のサブセットを提供することが期待され、回路ワイヤの値の選択されたサブセットは、証明者に先験的には（a  priori）知られていない。
【００５３】
一実施形態において、証明者３０４は、以下の方法でデータプロバイダ３２０から外部データを取得する。証明者３０４及びデータプロバイダ３２０が、暗号で保護された通信セッションを確立する。証明者３０４が、暗号で保護された通信セッションを介して要求を行う。データプロバイダが、要求に応答してデータを提供する。証明者がデータを受信し、データの受信に応答して、パーティ（parties）間の通信の証拠を要求する。データプロバイダが、暗号で保護された通信セッション中の証明者とデータプロバイダとの間の暗号的に検証可能なプルーフオブコミュニケーション（proof-of-communications）πCommunicationsを計算し、データプロバイダの秘密鍵で証拠にデジタル署名する。証明者が、プルーフオブコミュニケーションを受信する。一般的に言えば、プルーフオブコミュニケーションは、クライアントとサーバとの間で（例えば、証明者３０４とデータプロバイダ３２０との間で）１つ以上の通信が生じたことの暗号的に検証可能な証拠である。一実施形態において、証拠は、クライアントとサーバとの間の通信の内容を検証するために使用できるが、いくつかの場合、通信の一部が、編集された情報を情報の難読化（例えば、暗号化又はハッシュされたフォーマットの情報）で置き換えることなどにより編集され（例えば、その開示が法的制限の対象である情報）、あるいは所定のデフォルト値で置き換えられる場合があることに留意されたい。一実施形態において、証拠は、マークル木のルート値に少なくとも部分的に基づいて決定される。一実施形態において、証拠（例えば、プルーフオブコミュニケーション）は、データプロバイダ３２０にとってアクセス可能な暗号秘密鍵を使用してデジタル署名される。認証局（certificate  authority）などのエンティティが、暗号公開鍵が上記秘密鍵に対応することを証明するデジタル証明書を発行してもよい。本開示の範囲において、プルーフオブコミュニケーションは表記πCommunicationsを使用して一般に参照されるが、正しい実行のプルーフはπProver、又はより簡潔にはπとして参照され得ることに留意されたい。データプロバイダ３２０からデータを取得するための、及び／又はデータプロバイダ３２０から取得されたデータの完全性及び／又は真正性を検証するための手法は、英国特許出願第1720946.1号に記載の手法に従って実行されてもよい。
【００５４】
一実施形態において、信頼されたエンティティ３２２又は信頼された機関は、（例えば、現在又は将来に）入力データへのアクセスを有することが期待されるコンピューティングシステムなどのエンティティであり得る。データフィードの公開鍵は、アンロックスクリプト内の署名及びメッセージを固定値でなく鍵との数学的関係を有するように制約するロックスクリプトに埋め込むことができる。このようにして、ロックは、データのいかなる修正も検出され、緩和及び／又は無効化などの是正措置が取られ得るように構成される。未決定のデータが、デジタル資産をロックするために使用されてもよく、ロックスクリプトが構成されたときにロックノードにまだ知られていないデータであり得る。このデータは、まだ確立されていないデータ（例えば、将来作成されることが期待されるがまだ作成されていないデータ）、又は別のノードに知られているがロックノードにはまだ利用可能ではないデータでもよい。しかしながら、データは、信頼されたエンティティ３２２から（現在又は将来に）利用可能であることが期待されるデータである。ロックスクリプトは、決定されたデータソース（例えば、信頼されたエンティティ３２２）のための公開鍵を含み、ロックスクリプトを実行する立証ノードに、ａ）決定されたデータソースのための公開鍵に基づいて、及びアンロックスクリプトで定義されたデータに基づいて、修正された公開鍵を生成すること、及びｂ）修正された公開鍵に基づいてアンロックスクリプト内の署名を評価することにより、ロックスクリプトで提供されるデータのソースを検証させる命令を含み得る。本明細書に記載される種々の手法に従う信頼されたエンティティ３２２を利用する手法は、英国特許出願第1705749.8号に関連して記載されるものに従ってもよい。
【００５５】
実施形態において、出力ｙ、内部回路ワイヤの値（又はそのサブセット）、及び評価鍵ＥＫは、プルーフオブコレクトネス３１６を生成するために使用される。プルーフπは、ブロックチェーン上に記憶され、複数のパーティと別個に対話するよう証明者３０４に要求することなく複数のパーティにより検証されることが可能である。このようにして、検証者３０６は、公開検証鍵ＶＫ及びプルーフπを使用してブロードキャストされたトランザクションを立証し、それによりコントラクトを立証することができる。いくつかの場合、クライアント３０２は、検証が失敗した場合、ブロードキャストされたトランザクションにより動きを妨げられたデジタル資産を回収してもよい。いくつかの場合、検証者３０６及びクライアント３０２は、同じコンピュータシステムである。
【００５６】
一実施形態において、図４は、プログラムの実行を安全化するプロトコルの図４００を示し、プログラム（例えば、スマートコントラクト）の入力データが立証される。一実施形態において、プロトコルは、プログラムの誤った実行により引き起こされる潜在的な損害（damage）の自動的な補償（compensation）を提供する。クライアント４０２、証明者４０４、及びメディエータ４０６は、本開示の他の箇所に記載されているものに従ってもよい。
【００５７】
他の場所で論じられているように、図４に示されるクライアント４０２などのクライアントは、エンティティにより制御されるコンピュータシステムを指し得、クライアントコンピュータシステム及び／又はクライアントエンティティは、コントラクトに対する当事者（party）である。例えば、クライアント４０２は、ビットコインなどのデジタル資産と交換でトークンを購入する注文を出すエンティティに関連づけられてもよく、該デジタル資産は、トークンの発行者又は所有者に移転される。トークンは、スマートコントラクトでもよい。
【００５８】
証明者４０４は、他の箇所で説明されているように、ネットワークを監視して、スマートコントラクトなどのプログラムを埋め込み又は参照するトランザクションを見つけるコンピュータシステムであり得る。例えば、証明者４０４は、ブロックチェーンネットワークのノードでもよい。証明者は、ワーカ又はワーカコンピュータシステムとも呼ばれ得る。
【００５９】
メディエータ４０６は、クライアント４０２及び／又は証明者４０４との信頼関係を有し及び／又は確立するメディエータコンピュータシステムであり得る。この文脈において、信頼関係は、メディエータがクライアント４０２及び／又は証明者４０４により、クライアント４０２と証明者４０４との間に生じ得る紛争（disputes）を調停する（mediate）ための適切な構成要素であると決定されることを指し得る。例えば、信頼関係は、クライアント又は証明者のうちいずれか１つと協同して、スマートコントラクトの実行に関連づけられたデジタル資産をアンロックする能力をメディエータに付与する意思を意味してもよい。例えば、メディエータは、プログラム（例えば、スマートコントラクト）の誤った実行から生じる可能性のある損害の自動的な補償を提供するために使用されてもよい。
【００６０】
クライアント４０２は、ランダム又は疑似ランダムに生成され得る秘密値を決定することができる。秘密値は、証明者４０４により投稿された（posted）保証金預託（security  deposit）が返却されることを許容できるとクライアント４０２が決定するまで、証明者４０４に平文で提供されるべきではない値を指し得る。いくつかの場合、保証金預託は、証明者４０４がプログラムの正しい実行に関するプロトコルに従うためのインセンティブとして機能することに留意されたい。証明者４０４は、プロトコルが守られない場合に、保証金預託トランザクションにより動きを妨げられた資産の制御を失うリスクを負う。したがって、クライアント４０２は、証明者４０４がプロトコルに従って証明者の責任の全てを果たしたとクライアント４０２が決定したことに応答して、証明者４０４に秘密値を明らかにする場合があり得る。
【００６１】
秘密値を決定した後、クライアント４０２は秘密値を暗号化し、それにより、暗号化された秘密を生成することができる。秘密値は、暗号文を生成するために、メディエータ４０６に関連づけられた公開鍵を使用して暗号化されてもよい。一実施形態において、メディエータ４０６は、クライアント４０２及び証明者４０４により共同で選択される。一実施形態において、メディエータ４０６は、図１に関連して説明したブロックチェーンネットワークのノードである。一実施形態において、秘密値は、クライアント４０２及びメディエータ４０６の双方に知られている対称鍵下で暗号化される。クライアント４０２は、ＳＨＡ‐２５６暗号ハッシュアルゴリズムなどの暗号ハッシュアルゴリズムへの入力として秘密値を使用してハッシュ出力を生成計算することができる。さらに、クライアント４０２は、暗号文及びハッシュ出力が双方とも同じ秘密値を符号化することの証拠を生成してもよい。一実施形態において、証拠はゼロ知識証明である。クライアント４０２は、プロトコルの一部として暗号文、ハッシュ出力、及び証拠を証明者４０４に送信することができる。
【００６２】
証明者４０４は、保証金預託トランザクションをブロックチェーンネットワークに投稿することができ、保証金預託トランザクションは、証明者４０４のデジタル資産の動きを妨げ、証明者４０４がプロトコルに従って挙動することを確保するために使用される。証明者４０４がプロトコルに従わない場合、証明者４０４は、保証金預託トランザクションにより動きを妨げられた資産を喪失するリスクを負う。一実施形態において、保証金預託トランザクションは、証明者４０４により作成され、値Ｄのビットコインの前のトランザクションを引き換え（redeems）、２つの方法で引き換えられ得る。第１に、証明者４０４の秘密値及びデジタル署名を公開する（publishing）ことによってであり（預託回復（recover  deposit）トランザクションと呼ばれる）、あるいは第２に、クライアント４０２及び証明者４０４の双方による、同じトランザクションに対するデジタル署名の生成によってである（補償トランザクションと呼ばれる）。保証金預託トランザクションは、証明者４０４に属するＤのビットコイン（又は、他の適切なデジタル資産）のＵＴＸＯを有する、前のトランザクションを参照することができる。保証金預託トランザクションは、証明者４０４のデジタル署名などの１つ以上の入力を含んでもよい。保証金トランザクションにより動きを妨げられるデジタル資産のタイプ及び／又は額は、クライアント４０２及び証明者４０４により相互に同意されてもよく、あるいはクライアント４０２により指定されてもよく、誤った入力データを使用したプログラムの実行により引き起こされ得る最大の損害に少なくとも部分的に基づいて選択されてもよい。
【００６３】
一実施形態において、クライアント４０２と相手方は、プログラム（例えば、スマートコントラクト）の実行に対するタームに同意する。相手方は、出力の１つがプログラム（例えば、スマートコントラクトスクリプト）によりロックされるロックトランザクションを作成することができ、それをクライアント４０２に送信する。相手方は、プログラム（例えば、スマートコントラクト）の発行者と呼ばれることもある。この時点では、入力の値がロックトランザクションの出力の値に等しくないため、ロックトランザクションはまだ有効でないことに留意されたい。クライアント４０２がロックトランザクションを受信すると、クライアント４０２は、ロックトランザクションに入力を追加し、同意されたデジタル資産、及びさらにプログラム（例えば、スマートコントラクト）の実行のために証明者４０４に支払われるべき手数料、並びに証明者４０４への手数料の値と以下の３つの署名すなわちクライアント４０２からの署名、証明者４０４からの署名、及びメディエータ４０６からの署名のうち２つが提供されたときに手数料に対する動きの妨げを解除するマルチ署名アンロックスクリプトとを有する出力を発行者に移転するために、クライアント４０２により制御されるＵＴＸＯをアンロックする。クライアント４０２は、証明者４０４が保証金預託トランザクションを投稿したことの検出に応答して、ロックトランザクションをブロックチェーンネットワークにブロードキャストすることができる。
【００６４】
証明者４０４は、外部データを収集し、コントラクト実行に必要なゼロ知識証明を計算することができる。外部データを収集する手法は、データソースとの通信を公証する（notarizing）ことを含んでもよい。通信の公証に対する一アプローチが、Hajjeh及びM.  Badraにより、「TLS  Sign」において考えられている。これは、TLSSignOnOffと呼ばれる新しいサブプロトコルを定義しており、クライアント（ゼロ知識プロトコルの文脈で説明されるクライアントとは異なるエンティティであり得る）とサーバは、これらがいつ署名されたデータの送信を開始又は停止するかをピアに通知する。停止メッセージの後、サーバは、会話のハッシュを収集し、それに署名する。暗号で保護された通信セッションのレコードデータを公証するための種々の他のアプローチ（例えば、セッションのレコードを保存し、記録された会話の真正性及び／又は完全性の暗号的に検証可能なプルーフを用いて会話に署名すること）が使用可能であり、例えば、R.  Housley及びM.  Brownの「Transport  Layer  Security  （TLS）  Evidence  Extensions」により、及びH.  Ritzdorf、K.  Wust、A.  Gervais、G.  Felley、及びS.  Capkunの「TLS-N:  Non-repudiation  over  TLS  Enabling  Ubiquitous  Content  Signing  for  Disintermediation」により記載される手法などであり、これらは、クライアントが要求を行ったときに開始するエビデンスウィンドウを定義しており、当事者のうち１つがエビデンスウィンドウを閉じたとき、メッセージのハッシュとエビデンスの生成のタイムスタンプがサーバにより署名され、任意で機密レコードが秘匿される。外部データを収集する手法は、外部データの収集（Gathering  external  data）に記載されたものに従ってもよく、英国特許出願第1705749.8号に関連して信頼されたデータソースを利用してもよい。証明者４０４は、アンロックトランザクションをブロックチェーンネットワークにブロードキャストすることができる。
【００６５】
証明者４０４がアンロックトランザクションをブロードキャストした後、検証者コンピュータシステムが、検証処理を実行して、正しい実行のプルーフが有効かどうかを決定することができる。いくつかの実施形態において、検証者は、クライアント４０２とは異なるがそのような必要はないコンピューティングエンティティであり、クライアントが検証処理を実行してもよい。一実施形態において、検証処理は、正しい実行のプルーフの有効性（例えば、出力が回路への１つ以上の入力に少なくとも部分的に基づいて回路から生成されたこと）を検証することと、さらに、証明者４０４による回路へのデータ入力が正しい入力であったことを検証することとの双方を含む。例えば、検証は、外部データを提供する信頼されたデータソースからの公証された会話（例えば、当事者が遅延の保険をかけてあるフライト情報、作物保険に関して物価指数の代わりに天候のデータフィードを使用する金融デリバティブ契約のための天候データ）に基づいて、プログラムへの入力の値が期待された値であるかどうかをチェックすることを含んでもよい。
【００６６】
クライアント４０２（又は、より一般的には検証処理を実行する任意の適切なシステム）が、入力データが正しくないと決定した場合、証明者４０４は、正しい入力値に基づいて生成された第１の出力と、アンロックトランザクションにおいて証明者４０４によりブロードキャストされた誤った入力値に基づいて生成された第２の出力との間の差を反映する損害ｄを計算することができる。例えば、スマートコントラクト（例えば、プログラム）が、当事者に特定のフライトの遅延の保険をかけてもよく、プログラムの実行が、特定の日の特定の商用フライトのフライト情報などの外部データを使用して、特定のフライトが遅延したかどうかを決定することを含んでもよい。フライトが遅延した場合、プログラムの当事者は、資産の移転を受けることができる（例えば、遅延に対する旅行保険を提供するスマートコントラクト）。種々の拡張、修正、及び代替的な実施形態もまた、本明細書において考えられる。例えば、資産の移転は、遅延が特定の理由によること（例えば、天候関連の遅延／取消）、遅延が少なくとも一定の期間であるという要件（例えば、３時間を超える遅延のみが保険をかけられる）、及び遅延の期間に依存して変わる移転（例えば、より長い遅延はより大きい金額の保険をかけられる）などの、さらなる基準に少なくとも部分的に基づいてもよい。第２の例として、プログラムへの入力が通貨間の為替レートに対応する場合、損害ｄは、正しい通貨為替レート（例えば、信頼されたソースにより公証された通信セッション内に符号化されたレートに基づく）と証明者４０４がプログラムを実行するために使用した通貨為替レートとに基づいて、クライアント４０２が受け取るべき金額の差を測定することができる。一実施形態において、証明者４０４は、損害ｄの計算を、図４に示される証明者４０４とは異なる別のワーカなどの、別のコンピュータシステムに委任する。いくつかの場合、システムが、証明者４０４による損害の計算を要求してもよいことに留意されたい。一実施形態において、損害額のゼロ知識証明を生成して損害額の証拠を提供してもよく、これは異なる回路（例えば、プログラム）の出力に対応し得る。
【００６７】
システム（例えば、クライアント４０２）が損害の値を算出し、あるいはその他の方法で（例えば、別の証明者から算出の結果を受け取ることにより）決定すると、システムは、算出された損害値を証明者４０４に利用可能にさせることができる。一実施形態において、算出された損害値と、損害値の有効性の証拠となるゼロ知識証明が、損害値及び／又はこのプルーフをブロックチェーンネットワークにブロードキャストすることにより証明者４０４に利用可能にされ、これは、ブロックチェーンの他のノードが損害値が正しいかどうかを決定することを可能にし得る。一実施形態において、損害値及び／又はプルーフは、ブロックチェーンの外部の証明者４０４に利用可能にされる。例えば、システムは、任意の適切な方法でメッセージを証明者４０４に送信することができ、メッセージは損害値及び／又はプルーフを含む。いくつかの実施形態において、システムは、損害値が非ゼロである場合及びその場合に限り、損害を証明者４０４に提供する。
【００６８】
いくつかの実施形態において、証明者４０４は、損害値を受信し、あるいはその他の方法で取得する。損害値がゼロである場合、証明者４０４は、損害値が受信されていないのと同じ又は同様の方法で進むことができる。例えば、証明者４０４は、特定のプログラム（例えば、スマートコントラクト）の実行に関連づけられた損害がゼロであることを示すメッセージを受信し、補償ルーチンが実行される必要がないと決定してもよい。一実施形態において、証明者４０４は、クライアント４０２が秘密値を提供するのを待機する。秘密値は、ブロックチェーントランザクションにより動きを妨げられたデジタル資産を引き換えるために使用可能であり得る。例えば、ブロックチェーントランザクションは、ロックスクリプト及びアンロックスクリプトを含み得、これらは、集合的に実行されたときに、正しい秘密値がアンロックスクリプト内に提供されたことを検証し、デジタル資産に対する動きの妨げを解除する。
【００６９】
しかしながら、証明者４０４が非ゼロである損害値を受信した場合、証明者４０４は、プロトコルに従って１つ以上の動作を実行することができる。一実施形態において、証明者４０４は、損害値と、損害値に関する対応するゼロ知識証明とを受信する。証明者４０４は、このプルーフを検証することができる。プルーフが検証された場合、証明者４０４は、証明者４０４が受信した損害値の値に同意するか否かについて決定を行うことができる。一実施形態において、証明者４０４は、損害を算出するプログラムを実行すること、プログラムの実行を別のコンピューティングエンティティに委任すること（例えば、証明者４０４は、それにより、異なる証明者によるプログラムの実行のためのクライアントになる）などにより、損害値を決定するための任意の適切な動作のセットを実行する。
【００７０】
証明者４０４により決定された損害値が、証明者４０４に提供された損害値と整合する場合、証明者４０４は、損害値が正しいと決定し、補償としてクライアント４０２に対して損害値ｄに等しい資産の制御の移転をもたらす１つ以上のステップを実行することができる。一実施形態において、証明者４０４は、クライアント４０２に関連づけられたアドレスに対する損害値ｄに等しい資産の制御の移転を含むトランザクションをブロックチェーンネットワークにブロードキャストする。しかしながら、証明者４０４が損害に対して異なる値を決定した場合（又は、ゼロ知識証明が検証しない場合）、証明者４０４は、メディエータ４０６に、会話（conversation）のタイムスタンプ付きトランスクリプトを提供してもよい。メディエータは、トランスクリプトを利用して、クライアント４０２又は証明者４０４により算出された損害値が正しいかどうかを決定することができる。
【００７１】
証明者４０４は、種々の時間に、及び種々のエンティティから秘密値を受信することができる。例えば、秘密値は、証明者４０４がプログラム（例えば、スマートコントラクト）を正しく実行したこと、及びプログラムの出力を生成するために使用された１つ以上の入力がブロックチェーンの外部にあるデータ（例えば、ブロックチェーンネットワークに記憶されたデータのみを使用しては、その正しさ及び／又は値が計算的に検証できないデータ）に基づいて期待値と整合することの正しいワークのプルーフを検証すると、クライアント４０２により証明者４０４に提供されてもよい。クライアント４０２は、損害値ｄを算出し、デジタル資産の移転をその金額の証明者４０４からの補償として受け取ると、秘密値を証明者４０４に提供することができる。証明者４０４は、クライアント４０２が証明者４０４に提供した損害値ｄが誤っている、損害値ｄ’に等しいデジタル資産の移転がクライアント４０２に対して行われた、及びこれらの組み合わせであるとメディエータが決定したことに応答して、メディエータ４０６から秘密値を受信することができる。
【００７２】
秘密値を受信すると、証明者４０４は、保証金預託で動きを妨げられたデジタル資産を回復するためのブロックチェーントランザクションを生成することができる。証明者４０４は、秘密値及び証明者４０４のデジタル署名を符号化したアンロックスクリプトを含むブロックチェーントランザクションを生成してもよい。デジタル資産の動きを妨げる対応するロックスクリプトは、秘密値のハッシュをロックスクリプトで符号化された出力値と比較することによりアンロックスクリプトが正しい秘密値を符号化していることを検証し、さらに、証明者４０４に関連づけられた公開鍵を使用してロックスクリプトのデジタル署名を検証する命令を含むことができる。したがって、ロックスクリプト及びアンロックスクリプトは、実行された場合、保証金預託トランザクションのロックスクリプトにより動きを妨げられたデジタル資産の制御を移転するプログラムを集合的に形成することができる。いくつかの実施形態において、デジタル資産を回復するためのブロックチェーントランザクションは、預託回復トランザクションが期間ｔｗ内にブロックチェーンネットワークにブロードキャストされ（例えば、マイニングされ）なければならないように、時間制限されてもよい。一実施形態において、この制限は、ロックスクリプト内に符号化される。いくつかの実施形態において、制限は、プログラム的に符号化されないが、時間ｔｗの後に異なるトランザクション（例えば、補償トランザクション）がクライアント４０２のために保証金預託トランザクションにより動きを妨げられたデジタル資産を請求することを可能にすることにより、強制される。
【００７３】
例えば、一実施形態において、クライアント４０２は、プログラム（例えば、スマートコントラクト）を実行するために証明者４０４により使用された入力値が、（例えば、公証された通信セッションを介して）信頼されたソースから得られた情報に基づいて期待された入力値でないと決定し、算出された損害値ｄを示すメッセージを証明者４０４に送信する。証明者４０４が、少なくともｄの補償値に対応するデジタル資産を移転しない場合、クライアント４０２は、保証金預託のデジタル資産を請求するためのブロックチェーントランザクションを投稿するのに時間ｔｗまで待機することができる。補償トランザクションは、クライアント４０２及び証明者４０４の双方のデジタル署名を符号化してもよく、補償トランザクションが時間ｔｗの前にブロックチェーンネットワークに対してマイニングできないように時間ロックされてもよい。補償トランザクションは、クライアント４０２が保証金預託トランザクションにより動きを妨げられたデジタル資産を制御することを可能にするアンロックスクリプトを含んでもよい。一実施形態において、補償トランザクションのボディは、通信の開始時に証明者により署名され、これは、プロトコルの開始又は開始前であり得る。
【００７４】
図５は、ボブ（Bob）により操作される第１のクライアントコンピュータシステムと、アリス（Alice）により操作される第２のクライアントコンピュータシステムとにより生成されるトランザクションレコードの一例を示す。ボブはトークンの発行者と呼ばれることがあり、アリスはクライアントと呼ばれることがある。図解５００は、プログラム（例えば、スマートコントラクト）の実行のためのロックトランザクションの作成を示す。ロックトランザクション５０２は、スマートコントラクトと引き換えに、ボブによりアクセス可能な暗号通貨ウォレット又はアドレスへのデジタル資産の移転を指示することができる。図示の例において、アリスは、ボブにより制御される秘密鍵に関連づけられた公開鍵のハッシュを指定することにより、ｐａｙ‐ｔｏ‐ｐｕｂｌｉｃ‐ｋｅｙ‐ｈａｓｈを利用する。他の例において、アリスは、ｐａｙ‐ｔｏ‐ｐｕｂｌｉｃ‐ｋｅｙ又はｐａｙ‐ｔｏ‐ｓｃｒｉｐｔ‐ｈａｓｈオペコードを利用して、ボブにデジタル資産を移転してもよい。第１のクライアントコンピュータシステムを使用し、ボブは、２つの入力及び２つの出力を有する、提供された契約のためのロックトランザクション５０２を準備する。図示の例において、ボブは、いくつかのサトシ（Satoshis）の値を有し得る、ｘの値を有する第１の入力５０４と、契約のタームを記述したメタデータを含む第１の出力５０８を生成する。第１の出力５０８は、ゼロの値（ＯＰ＿ＲＥＴＵＲＮ）を有してもよい。図示の例において、ボブは、値ｘ又はいくつかのサトシを同様に有する第２の入力５０６と、アリスが移転しなければならないデジタル資産を示すｙの値及びｐａｙ‐ｔｏ‐ｐｕｂｌｉｃ‐ｋｅｙ‐ｈａｓｈ（「Ｐ２ＰＫＨ」）を有する第２の出力５１０を生成する。ロックトランザクション５０２は、ボブにより操作される第１のクライアントコンピュータシステムから、アリスにより操作される第２のクライアントコンピュータシステムに送信され得る。
【００７５】
一実施形態において、ノードのうち少なくともいくつかは、本開示に記載されるようにトランザクションを立証する立証ノードとして動作する。いくつかの例において、トランザクションは、デジタル資産（例えば、ビットコイン数）の所有権のプルーフとデジタル資産の所有権／制御を受け入れ又は移転するための条件とを提供するデータを含む。いくつかの例において、「アンロックトランザクション（unlocking  transaction）」とは、前のトランザクションの未使用トランザクション出力（ＵＴＸＯ）により示されるデジタル資産の少なくとも一部を、ブロックチェーンアドレスに関連づけられたエンティティに再関連づける（例えば、所有権又は制御を移転する）ブロックチェーントランザクションを指す。いくつかの例において、「前のトランザクション」は、アンロックトランザクションにより参照されているＵＴＸＯを含むブロックチェーントランザクションを指す。いくつかの実施形態において、トランザクションは、所有権／制御が移転され（「アンロックされ」）得る前に満たさなければならない条件を有するトランザクションの動きを妨げる「ロックスクリプト（locking  script）」を含む。
【００７６】
ロックトランザクション５０２は、第２のクライアントコンピュータシステムを使用してアリスにより修正される。図５に示される例において、結果として生じる修正されたロックトランザクション５１２は、３つの入力及び出力を含む。第１の入力５１４は変更されず、ｘの値（いくつかのサトシ）を含む。第１の出力５２０は変更されず、契約のタームを記述したメタデータを保持する。第２の入力５１６は変更されず、ｘの値（いくつかのサトシ）を有する。ロックトランザクション５０２と同様に、第２の出力５２２は、ｙの値（アリスが制御を移転しなければならないデジタル資産に対応する）と、Ｐ２ＰＫＨを保持する。第２のクライアントコンピュータシステムを使用し、アリスは、第３の入力５１８と第３の出力５２４を追加する。第３の入力５１８は、アリスが契約のために制御を移転するデジタル資産とワーカに対する手数料とに対応するｙ＋ｚの値を有する。第３の出力５２４は、ワーカに対する手数料に対応するｚの値を有する。クライアントが契約実行のためのリソース（例えば、デジタル資産）を、取引当事者（transacting  parties）（例えば、クライアントと証明者）の各々により制御される１つの鍵とメディエータにより制御される１つとを有する３つのマルチシグ（multisig）アドレスのうち２つに送るスキームにおいて、マルチパーティ署名（multi-party  signature）機能が利用されてもよい。そのようにするために、クライアント（例えば、アリス）は、クライアント、証明者、及びメディエータの秘密鍵のためのマルチシグアドレスを作成する。一実施形態において、ロックトランザクションはタイムロックされ、アリスが時間ウィンドウｔｗ後に自身のリソース（例えば、デジタル資産）を回復することを可能にする。
【００７７】
メディエータは、図４に関連して上述したメディエータコンピュータシステムでもよい。紛争がある（例えば、アリスが、プログラムの実行において証明者により使用された入力値に同意しない）場合、メディエータは、適宜クライアント又は証明者のいずれかと協同して、資金を引き換えることができる。例えば、クライアントが確立されたプロトコルに従わない場合、メディエータは証明者と協同して、証明者に対して第３の出力（例えば、手数料値ｚ）下で動きを妨げられたデジタル資産の移転をさせる際に協働することができる。反対に、証明者がプロトコルに従わない場合、メディエータはクライアントと協同することができ、なぜならば、３つの署名のうち２つで、エスクローされた（escrowed）資金を引き換えるのに十分だからである。メディエータにパブリックに関連づけられた長続きするアドレスを含めるのではなく、さらなるプライバシーのために、当事者はブラインドアドレス（blinded  address）を使用できることに留意されたい。データの正しさについてメディエータを説得するために、当事者は、プルーフオブコミュニケーションを含むトランスクリプトを提示することができる。いくつかの場合、メディエータのためのブラインドアドレスが使用され、スキームを内部に隠す。しかしながら、プロトコルの目標が透明性を提供する（例えば、ブロックチェーンネットワークのノードがトランザクションを検証することを可能にする）ことである場合、非ブラインドアドレスが一実施形態において利用されてもよい。
【００７８】
いくつかの場合、プロトコルは安全であり、これは、メディエータがエスクローされた資金を一方的に引き換えることができないことを指し得る。いくつかの場合、プロトコルは楽観的であり、これは、メディエータが自発的に紛争を調停するという仮定を指し得る。いくつかの実施形態において、プロトコルは、取引当事者と並んで預託に対応する値Ｍを有する第４の入力を供給するようメディエータに要求し、メディエータは、ワーカ手数料の動きを妨げるエスクロートランザクションが引き換えられる場合及びその場合に限り、預託値Ｍを回復することができる。このようにして、メディエータが紛争の調停を拒絶することによりサービス拒否攻撃を引き起こす可能性は緩和され、なぜならば、メディエータは、ワーカ手数料が引き換えられるまで、預託値を回収する（reclaim）ことができないからである。
【００７９】
図６は、本開示に記載されるプロトコルに従った処理のフローチャート６００を示す。フローチャートは、図１、図４、及び図１２など、本開示の他の箇所に記載される実施形態に従って実現されてもよい。処理は、図７に関連して記載される処理を実現するのと同じシステムにより実現されてもよい。処理は、本開示の他の箇所に記載されるクライアントにより、又は任意の他の適切なコンピューティングエンティティにより実現されてもよい。適切なシステム（例えば、図４に関連して説明されるクライアント）は、１つ以上のプロセッサと、実行可能命令を含むメモリとを含み、該実行可能命令は、実行された場合に、１つ以上のプロセッサに図６に関連して説明される処理の少なくとも一部を実行させる。
【００８０】
処理の一部として、システムは、適切な証明者及びメディエータを選択する（６０２）ことができる。一実施形態において、クライアントは、プログラム（例えば、スマートコントラクト）の実行を要求するプログラム実行プラットフォームを通してリクエストを発行する。リクエストは、プログラムの指標（例えば、プログラムの計算の複雑さ又は期待される実行時間、クライアントがプログラムの実行のために制御を移転する意思があるデジタル資産に対応する手数料などに関する情報）を含むことができる。プラットフォームの１つ以上の見込み（prospective）証明者は、該見込み証明者がプログラムを実行する意思があることを示す、要求への応答を提供し得る。一実施形態において、プラットフォームはフィードバックシステムを含み、見込み証明者は、プラットフォームにおける過去の実行に関連づけられた格付け有する。例えば、証明者は、過去のリクエストを正しく満たしたことに対してポジティブな格付けを、過去のリクエストを満たすのに失敗し又は誤って満たしたことに対してネガティブな格付けを受けてもよい。格付けは、見込み証明者がどれほどの頻度で誤った入力データを使用したか、訂正トランザクションをブロードキャストしたか、メディエータにより解決された紛争に関与したかなどの、さらなる情報を含んでもよい。一実施形態において、クライアントは、見込み証明者に関連づけられた格付けに少なくとも部分的に基づいて証明者を選択する（例えば、証明者は、全ての応答した証明者のうち最も高い格付けを有する）。
【００８１】
一実施形態において、クライアントは秘密値ｘを決定する（６０４）。秘密値は、クライアントが証明者がプログラム（例えば、スマートコントラクト）を実行したと決定し、プログラムが正しく実行されたことを検証するまで、クライアントが証明者に明らかにしない値を指し得る。プログラムの正しい実行を検証することは、プログラムの実行を制御するために正しい入力データが使用されたかどうかを決定することを含んでもよい。
【００８２】
システムは、メディエータコンピュータシステムに関連づけられた公開鍵を取得し、メディエータの公開鍵下で秘密値を暗号化し（６０６）、それにより、暗号化された秘密値ＥｎｃMediator（ｘ）を生成することができる。システムは、ＳＨＡ‐２５６暗号ハッシュアルゴリズムなどの暗号ハッシュアルゴリズムへの入力として秘密値を使用して、出力ｙ＝Ｈ（ｘ）を生成する（６０６）ことができる。一般的に言えば、この文脈で説明されるような暗号ハッシュ関数の代わりに、一方向関数などの原像計算困難性（pre-image  resistant）関数が利用されてもよい。システムは、暗号化された秘密値ＥｎｃMediator（ｘ）と出力ｙとが同じ秘密を符号化することのゼロ知識証明をさらに生成する（６０８）ことができる。ゼロ知識証明は、共有された値へのアクセスを有さないコンピューティングエンティティにより計算的に検証可能であり得る（例えば、秘密値ｘへのアクセスを有さないコンピュータシステムが、依然として、ＥｎｃMediator（ｘ）と出力ｙとが同じ値から生成されていることを計算的に検証することができる）。
【００８３】
前述のデータを生成した後、システムは、暗号化された秘密値、ハッシュ出力、及びゼロ知識証明を証明者に送信する（６１０）ことができる。この情報は、複数のデータパケットにわたり情報を提供することによって、証明者がアクセス可能な場所にデータを記憶してその場所への参照（例えば、ユニフォームリソース識別子）を提供することによってなどの任意の適切な方法で、証明者に利用可能にされてもよい。
【００８４】
クライアントは、プログラムを証明者に利用可能にする（６１２）ことができる。プログラムは、証明者が実行することをクライアントが要求するプログラムを指し得る。このプログラムは、その実行がブロックチェーンネットワーク又は図３に関連して説明されたようなオフチェーンデータソースから取得可能であり得る入力データに依存するスマートコントラクトでもよい。一実施形態において、クライアントは、プログラムへの参照を符号化する資金供給（funding）トランザクションをブロードキャストすることにより、プログラムを証明者に利用可能にし、資金供給トランザクションは、例えば図５に関連して説明されたものに従う。資金供給トランザクション及び／又はプログラムは、証明者が保証金預託トランザクションをブロックチェーンネットワークにブロードキャストしたことの検出に応答して、クライアントによりブロードキャストされてもよい。証明者は、図８及び図９に従って説明される処理に従ってプログラムを実行することができる。
【００８５】
図７は、本開示に記載されるプロトコルに従った処理のフローチャート７００を示す。フローチャートは、図１、図４、及び図１２など、本開示の他の箇所に記載される実施形態に従って実現されてもよい。処理は、図６に関連して記載される処理を実現するのと同じシステムにより実現されてもよい。処理は、本開示の他の箇所に記載されるクライアントにより、又は任意の他の適切なコンピューティングエンティティにより実現されてもよい。適切なシステム（例えば、図４に関連して説明されるクライアント）は、１つ以上のプロセッサと、実行可能命令を含むメモリとを含み、該実行可能命令は、実行された場合に、１つ以上のプロセッサに図７に関連して説明される処理の少なくとも一部を実行させる。
【００８６】
システムは、（例えば、図６に記載されるような）プログラムが実行されたことの指標を検出する（７０２）ことができる。いくつかの実施形態において、証明者が、プログラムの実行を示すアンロックトランザクションをブロードキャストする。指標は、プルーフオブコレクトネス、又はプログラムの正しい実行のプルーフを含み得る。指標は、証明者とデータプロバイダとの間のプルーフオブコミュニケーションをさらに含んでもよい。プログラムの実行は１つ以上の入力により制御されてもよく、その値はブロックチェーンネットワークの外部のデータに基づいて決定されてもよい。
【００８７】
指標を検出すると、システムは、プログラムの実行を検証する（７０４）ことができる。いくつかの場合、システムは、検証ステップを、図３に関連して説明された検証者コンピュータシステムなどの別のコンピュータシステムに委任する。プログラムの実行を検証することは、プログラムが完了まで実行されて出力を生成されたことを検証すること、証明者により生成されたプルーフオブコレクトネスの有効性を検証すること、プログラムへの入力が正しい値を有することを検証することなどを含んでもよい。システムが、プログラム（例えば、スマートコントラクト）が正しく有効に実行されたと決定した場合、システムは、秘密値ｘを証明者に利用可能にする（７１２）ことができる。一般的に言えば、システムは、証明者がプロトコルに従って種々のステップ（例えば、プログラムの正しい実行）を実行したと判定すると、秘密値ｘを証明者に利用可能にすることができる。秘密値ｘは、保証金トランザクションにより動きを妨げられたデジタル資産を回収するために証明者により使用されてもよい。いくつかの場合、クライアントと証明者は、プログラムを実行するための手数料として証明者に対してデジタル資産を解除するマルチパーティ署名を協働的に生成する。
【００８８】
システムが、プログラムが正しく実行されなかったと決定した場合、システムは、誤った実行は誤った入力値の使用に帰すると決定することができる。例えば、プログラムへの入力が、図３に関連して上述したようにデータフィードから得られた期待された入力値と異なる場合がある。システムは、訂正値を決定する（７０６）ことができ、これは、プログラムを実行するために使用された実際の入力値とデータフィードから得られる期待された入力値との差に基づいてもよい。一実施形態において、訂正値は、重み付けされたハミング距離、すなわち、
【数１２】
2021502750.tif 000014
を表すメトリックを通じて表すことができる。ここで、ｕ及びｖは、比較する文字列である。一実施形態において、訂正値は、スマートコントラクトの期待された実行と実際の実行との差、プログラム実行を検証するコストなどに基づいて、クライアントが被る損害の額を反映することができる。システムは、訂正値を証明者に対して送信し、あるいは他の方法で利用可能にする（７０８）ことができる。システムは、訂正値のゼロ知識証明をさらに生成し、利用可能にしてもよい。
【００８９】
訂正値を証明者に送った後、システムは、訂正トランザクションが検出されたかどうかを決定する（７１０）ことができる。訂正トランザクションは、プログラムが誤って実行されたことの確認応答（acknowledgement）である、ブロックチェーンネットワークに対して証明者によりブロードキャストされるトランザクションを指し得、プログラムの誤った実行に対する訂正であり得る。例えば、いくつかの場合、訂正トランザクションは、プログラムの正しい実行下でシステムが受け取ったはずのものとプログラムの実際の誤った実行下でシステムが受け取ったものとの間の差に相当するデジタル資産の移転を含む。
【００９０】
訂正トランザクションが検出された場合、システムは、秘密値ｘを証明者に対して提供し、あるいはその他の方法で利用可能にする（７１２）ことができる。訂正トランザクションがタイムアウト間隔ｔｗ後に検出されない場合、異なるトランザクション（例えば、補償トランザクション）が、クライアントのために保証金預託トランザクションにより動きを妨げられたデジタル資産を請求するためにクライアントによりブロードキャストされてもよい。
【００９１】
図８は、本開示に記載されるプロトコルに従った処理のフローチャート８００を示す。フローチャートは、図１、図４、及び図１２など、本開示の他の箇所に記載される実施形態に従って実現されてもよい。処理は、図９に関連して記載される処理を実現するのと同じシステムにより実現されてもよい。処理は、本開示の他の箇所に記載される証明者により、又は任意の他の適切なコンピューティングエンティティにより実現されてもよい。適切なシステム（例えば、図４に関連して説明される証明者）は、１つ以上のプロセッサと、実行可能命令を含むメモリとを含み、該実行可能命令は、実行された場合に、１つ以上のプロセッサに図８に関連して説明される処理の少なくとも一部を実行させる。
【００９２】
証明者は、暗号化された値と、ハッシュ出力と、暗号化された値及びハッシュ出力が同じ値から導出されることのゼロ知識証明とを受信し、あるいはその他の方法で取得する（８０２）ことができる。証明者は、このデータをクライアントから直接的に（例えば、クライアントにより証明者に送信されるメッセージを介して）、又は間接的に（例えば、クライアントがブロックチェーンネットワークにデータをブロードキャストすること、データ記憶場所にデータを記憶してその場所へのリンクを提供することにより）受信してもよい。証明者は、ゼロ知識証明を検証する（８０４）ことができる。
【００９３】
証明者は、実行すべきプログラムを取得する（８０６）ことができる。プログラムへの参照は、本開示の他の箇所に記載されるように資金供給トランザクションに符号化されてもよい。さらに、システムは、プログラムの実行のための入力データを決定する（８０８）ことができる。例えば、入力データは、図３に関連して説明したように、ブロックチェーンネットワークから直接か又はネットワークを通じてデータフィードから取得されるデータでもよい。一実施形態において、証明者は、入力データに従ってプログラム（例えば、スマートコントラクト）を実行する（８１０）。システムは、プログラムの実行を完了すると、プログラム実行の出力とさらにプルーフオブコレクトネスを生成する（８１２）ことができる。出力及びプルーフは、アンロックトランザクションにおいて検証者コンピュータシステムに利用可能にされ（８１４）得る。検証者コンピュータシステムは、図４に関連して説明されたクライアントなどの、検証処理を実行する任意の適切なコンピュータシステムでもよい。
【００９４】
図９は、本開示に記載されたプロトコルに従った処理のフローチャート９００を示す。フローチャートは、図１、図４、及び図１２など、本開示の他の箇所に記載される実施形態に従って実現されてもよい。処理は、図８に関連して記載される処理を実現するのと同じシステムにより実現されてもよい。処理は、本開示の他の箇所に記載される証明者により、又は任意の他の適切なコンピューティングエンティティにより実現されてもよい。適切なシステム（例えば、図４に関連して説明される証明者）は、１つ以上のプロセッサと、実行可能命令を含むメモリとを含み、該実行可能命令は、実行された場合に、１つ以上のプロセッサに図９に関連して説明される処理の少なくとも一部を実行させる。
【００９５】
証明者は、訂正値が受信されたかどうかを決定する（９０２）ことができる。証明者は、プロトコルに従って、訂正値が受信されるのを所定の期間待機し、期間内に何も受信されない場合、訂正値が受信されなかった及び／又は訂正値がゼロであることと、訂正トランザクションが必要とされないこととを暗黙的に決定することができる。訂正値は、クライアント又は任意の適切な検証者が証明者によるプログラムの誤った実行を決定したことに応答して、クライアントから受信されてもよい。
【００９６】
訂正値が受信されなかった及び／又は訂正値がゼロであると証明者が決定した場合、証明者はその後、秘密値を受信する（９１０）。秘密値は、アンロックスクリプトを生成及び／又は実行するために使用可能であり得、該アンロックスクリプトは、保証金トランザクション預託のロックスクリプトと集合的に実行された場合、証明者が保証金預託トランザクションにより動きを妨げられたデジタル資産を回収することを可能にする。秘密値は、資金供給トランザクションのワーカ手数料を引き換えるためにさらに使用されてもよい。クライアントが、証明者に秘密値を提供することを拒絶する（すなわち、クライアントがプロトコルの制約に違反する）場合、証明者は、メディエータから秘密値を取得してもよいことに留意されたい。
【００９７】
証明者が訂正値を受信した場合、証明者は、訂正値が正しく計算されているかどうかを決定する（９０４）ことができる。証明者は、訂正値の計算のゼロ知識証明を取得し、このプルーフを使用して計算が正しく又は誤って計算されたことを決定し、かつ／あるいは別個の計算を実行することができる。いくつかの場合、証明者は、クライアントの訂正値を正しく計算されているものとして常に受け入れる。システムが、訂正値が正しく計算されたこと及びその値が正しいことを決定した場合、証明者は、訂正値に少なくとも部分的に基づいて訂正トランザクションを生成する（９１４）ことができる。例えば、訂正トランザクションは、ブロックチェーンに対してマイニングされ、訂正値の額と同等のデジタル資産を移転するトランザクションでもよい。次いで、システムは、上記の方法で秘密値を受信するのを待機する（９１０）ことができる。
【００９８】
しかしながら、証明者が、提供された訂正値に不同意である場合、システムは、異なる訂正値を（例えば、別個の計算に基づいて）決定する（９０６）ことができる。証明者は、暗号化された秘密値と、どの訂正値が正しいかに関する証明者及びクライアント間の紛争を調停するために使用可能なトランスクリプトとを、メディエータに提供する（９０８）ことができる。トランスクリプトは、訂正値と証明者及び／又はクライアントにより計算された対応するゼロ知識証明、訂正値を生成するために使用された１つ以上の入力値、及び／又はプルーフオブコミュニケーションなどの情報を含んでもよい。メディエータは、証明者により算出された異なる訂正値が正しいと決定し、暗号化された秘密値を解読し、秘密値を証明者に提供することができる。
【００９９】
いくつかの場合、損害値を計算する方法は、クライアントと証明者との間でプロトコルの早期段階で、例えば、クライアントが計算を実行するために証明者を選択するときに同意される。一実施形態において、クライアントは、リクエストの一部として見込み証明者に、実行すべきプログラムとプログラムの誤った実行によりもたらされる損害を算出するために使用される式との双方を送信することができる。一実施形態において、証明者は、プログラムを実行することに同意するかどうかを決定する前に、損害値を算出する式の知識を有する。いくつかの場合、メディエータは、クライアント、証明者、又は双方から式を受信し、この式は、いずれか又は双方の当事者によりデジタル署名されてもよい。プロトコルは、メディエータがクライアント及び証明者の双方から同じ式を受け取り、式が異なる場合にプロトコルを終了することを要求してもよい。
【０１００】
図１０は、本開示に記載されるプロトコルに従った処理のフローチャート１０００を示す。フローチャートは、図１、図４、及び図１２など、本開示の他の箇所に記載される実施形態に従って実現されてもよい。処理は、本開示の他の箇所に記載されるメディエータコンピュータシステムにより、又は任意の他の適切なコンピューティングエンティティにより実現されてもよい。適切なシステム（例えば、図４に関連して説明される証明者）は、１つ以上のプロセッサと、実行可能命令を含むメモリとを含み、該実行可能命令は、実行された場合に、１つ以上のプロセッサに図１０に関連して説明される処理の少なくとも一部を実行させる。一実施形態において、メディエータコンピュータシステムとも呼ばれるメディエータは、紛争を解決するプロトコルのクライアント及び／又は証明者により利用される。紛争は、クライアントと証明者との間で、例えばステップの実行の失敗又はステップの正しい実行の失敗など、一方又は双方の当事者がプロトコルを守るのに失敗したときに生じる可能性がある。
【０１０１】
一実施形態において、証明者は、メディエータと紛争を開始し、メディエータは、証明者から、暗号化された秘密値とトランスクリプトを受信する（１００２）。暗号化された秘密値は、メディエータの公開鍵下で暗号化されてもよく、メディエータは、対応する秘密鍵へのアクセスを有する。トランスクリプトは、紛争を裁定する（adjudicate）ために使用可能な情報を含むことができる。例えば、トランスクリプトは、特定の状態及び／又は値の証拠となるゼロ知識証明を含んでもよい。メディエータは、プルーフの正しさを検証することによってなど、任意の適切な方法でトランスクリプトを検証することができる。メディエータは、検証処理の一部又は全部のステップを、ブロックチェーンネットワークのノードなどの別のコンピューティングシステムに委任してもよい。メディエータが、証明者（例えば、証明者により主張された状態又は値の証拠となるプルーフの正しさ）に同意した場合、メディエータは、暗号化された秘密値を解読し（１００６）、秘密値を証明者に提供することができる。さらに、メディエータは、証明者と協働して（１００８）１つ以上のマルチパーティ署名を生成することができ、該マルチパーティ署名は、ロックトランザクションのワーカ手数料を引き換えるために使用可能なプログラムなどの、１つ以上のプログラムを実行するために使用され得る。しかしながら、メディエータが代わりに、クライアントに同意した場合、メディエータは、クライアントと協働して（１０１２）１つ以上のマルチパーティ署名を生成することができ、該マルチパーティ署名は、（例えば、プロトコルを守るのに失敗したことに対するペナルティとして）証明者により投稿されたデジタル資産を請求するプログラム、及び／又はロックトランザクションのワーカ手数料を回収するプログラムなどの、種々のプログラムを実行するために利用され得る。
【０１０２】
同様の方法で、クライアントは、メディエータに暗号化された秘密値及びトランスクリプトを提供することにより、メディエータと紛争解決ルーチンを開始することができる。トランスクリプトは、ゼロ知識証明などの情報を含んでもよい。メディエータは、暗号化された秘密値とトランスクリプトを受信し（１０１０）、上述の手法を適用することにより紛争を裁定することができる。
【０１０３】
図１１は、本開示の少なくとも１つの実施形態を実施するために使用され得るコンピューティングデバイス１１００の例示的な簡略ブロック図である。種々の実施形態において、コンピューティングデバイス１１００は、上で例示及び説明されたシステムのうち任意のものを実現するために使用されてもよい。例えば、コンピューティングデバイス１１００は、データサーバ、ウェブサーバ、ポータブルコンピューティングデバイス、パーソナルコンピュータ、又は任意の電子コンピューティングデバイスとしての使用に対して構成されてもよい。図１１に示すように、コンピューティングデバイス１１００は、実施形態において、バスサブシステム１１０４を介して複数の周辺サブシステムと通信するように構成され、かつ動作上結合される１つ以上のプロセッサ１１０２を含むことができる。いくつかの実施形態において、これらの周辺サブシステムは、メモリサブシステム１１０８及びファイル／ディスクストレージサブシステム１１１０含むストレージサブシステム１１０６と、１つ以上のユーザインターフェース入力デバイス１１１２と、１つ以上のユーザインターフェース出力デバイス１１１４と、ネットワークインターフェースサブシステム１１１６を含む。このようなストレージサブシステム１１０６は、情報の一時的又は長期的な記憶のために使用できる。
【０１０４】
いくつかの実施形態において、バスサブシステム１１０４は、コンピューティングデバイス１１００の種々のコンポーネント及びサブシステムが意図されたとおり互いに通信することを可能にする機構を提供する。バスサブシステム１１０４は単一のバスとして概略的に示されているが、バスサブシステムの代替的な実施形態は複数のバスを利用する。いくつかの実施形態において、ネットワークインターフェースサブシステム１１１６は、他のコンピューティングデバイス及びネットワークへのインターフェースを提供する。ネットワークインターフェースサブシステム１１１６は、いくつかの実施形態において、他のシステムからデータを受信し、コンピューティングデバイス１１００から他のシステムにデータを送信するためのインターフェースとして機能する。いくつかの実施形態において、バスサブシステム１１０４は、詳細、検索語等のようなデータを通信するために利用される。
【０１０５】
いくつかの実施形態において、ユーザインターフェース入力デバイス１１１２は、キーボードなどの１つ以上のユーザ入力デバイス；一体型マウス、トラックボール、タッチパッド、又はグラフィックスタブレットなどのポインティングデバイス；スキャナ；バーコードスキャナ；ディスプレイに組み込まれたタッチスクリーン；音声認識システム、マイクロフォンなどのオーディオ入力デバイス；及び他タイプの入力デバイスを含む。一般に、用語「入力デバイス」の使用は、情報をコンピューティングデバイス１１００に入力する全ての可能なタイプのデバイス及び機構を含むことが意図される。いくつかの実施形態において、１つ以上のユーザインターフェース出力デバイス１１１４は、表示サブシステム、プリンタ、又はオーディオ出力デバイスなどの非視覚的ディスプレイ等を含む。いくつかの実施形態において、表示サブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイなどのフラットパネルデバイス、又は投影若しくは他の表示装置を含む。一般に、用語「出力デバイス」の使用は、コンピューティングデバイス１１００から情報を出力する全ての可能なタイプのデバイス及び機構を含むことが意図される。１つ以上のユーザインターフェース出力デバイス１１１４が使用されて、例えば、ユーザインターフェースを提示し、説明された処理及びその変形を実行するアプリケーションとのユーザ対話を、そのような対話が適切であり得るときに容易にしてもよい。
【０１０６】
いくつかの実施形態において、ストレージサブシステム１１０６は、本開示の少なくとも１つの実施形態の機能性を提供する基本プログラミング及びデータ構造を記憶するコンピュータ読取可能記憶媒体を提供する。アプリケーション（プログラム、コードモジュール、命令）は、いくつかの実施形態において１つ以上のプロセッサにより実行されたとき、本開示の１つ以上の実施形態の機能性を提供し、いくつかの実施形態においてストレージサブシステム１１０６に記憶される。これらのアプリケーションモジュール又は命令は、１つ以上のプロセッサ１１０２により実行できる。種々の実施形態において、ストレージサブシステム１１０６は、本開示に従って使用されるデータを記憶するリポジトリをさらに提供する。いくつかの実施形態において、ストレージサブシステム１１０６は、メモリサブシステム１１０８及びファイル／ディスクストレージサブシステム１１１０を含む。
【０１０７】
実施形態において、メモリサブシステム１１０８は、複数のメモリ、例えばプログラム実行中の命令及びデータの記憶のためのメインランダムアクセスメモリ（ＲＡＭ）１１１８及び／又は固定命令を記憶可能な読取専用メモリ（ＲＯＭ）１１２０を含む。いくつかの実施形態において、ファイル／ディスクストレージサブシステム１１１０は、プログラム及びデータファイルのための非一時的な永続的（不揮発性）ストレージを提供し、ハードディスクドライブ、関連する取り外し可能媒体と共にフロッピーディスクドライブ、コンパクトディスク読取専用メモリ（ＣＤ‐ＲＯＭ）ドライブ、光学ドライブ、取り外し可能媒体カートリッジ、又は他の同様の記憶媒体を含むことができる。
【０１０８】
いくつかの実施形態において、コンピューティングデバイス１１００は、少なくとも１つのローカルクロック１１２４を含む。ローカルクロック１１２４は、いくつかの実施形態において、特定の開始日から発生したティック（ticks）数を表すカウンタであり、いくつかの実施形態において、コンピューティングデバイス１１００内に一体的に配置される。種々の実施形態において、ローカルクロック１１２４は、特定のクロックパルスにおいてコンピューティングデバイス１１００のためのプロセッサ及びそれに含まれるサブシステム内でデータ転送を同期させるために使用され、コンピューティングデバイス１１００とデータセンター内の他のシステムとの間の同期動作を協調させるために使用されてもよい。別の実施形態において、ローカルクロックは、プログラム可能な間隔のタイマである。
【０１０９】
コンピューティングデバイス１１００は、ポータブルコンピュータデバイス、タブレットコンピュータ、ワークステーション、又は以下に説明される任意の他のデバイスを含む、様々なタイプのうち任意のものとすることができる。さらに、コンピューティングデバイス１１００は、いくつかの実施形態において、１つ以上のポート（例えばＵＳＢ、ヘッドフォンジャック、ライトニングコネクタ等）を通じてコンピューティングデバイス１１００に接続できる別のデバイスを含むことができる。実施形態において、このようなデバイスは、光ファイバコネクタを受け入れるように構成されたポートを含む。したがって、いくつかの実施形態において、このデバイスは、光信号を、処理のために、デバイスをコンピューティングデバイス１１００に接続するポートを通して伝送される電気信号に変換するように構成される。コンピュータ及びネットワークの絶えず変化する性質に起因して、図１１に示されるコンピューティングデバイス１１００の説明は、デバイスの好適な実施形態を例示する目的で特定の例としてのみ意図される。図１１に示すシステムより多くの又は少ないコンポーネントを有する多くの他の構成が可能である。
【０１１０】
したがって、明細書及び図面は、限定的でなく例示的な意味で解釈されるべきである。しかしながら、特許請求の範囲に記載された発明の範囲から逸脱することなく、これらに対して様々な修正及び変更がなされ得ることが明らかであろう。同様に、他の変形が本開示の範囲内である。ゆえに、開示された手法は種々の修正及び代替の構成が可能だが、そのうち特定の例示的な実施形態が図面に示され、上記で詳細に説明されている。しかしながら、発明を開示された特定の形式又は形態に限定する意図はなく、逆に、別記の特許請求の範囲に定義される発明の範囲内に入るすべての修正、代替的な構成、及び同等物をカバーする意図があることを理解されたい。
【０１１１】
開示の実施形態を説明する文脈における（特に、下記の特許請求の範囲の文脈における）用語「一の」（“a”、“an”）及びその（“the”）並びに同様の指示物の使用は、別段示されない限り、又は文脈により明らかに矛盾しない限り、単数及び複数の双方をカバーするものと解釈されるべきである。用語「含む」、「有する」、「含める」、及び「包含する」は、別段記されない限り、オープンエンド用語（すなわち、「含むが限定されない」を意味する）と解釈されるべきである。用語「接続される」は、変更されずに物理的接続を参照するとき、介在する何かがあるとしても、部分的又は全体的に内部に含まれる、取り付けられる、又は一緒に結合されると解釈されるべきである。本開示における値の範囲の記載は、別段示されない限り、該範囲内に入る各別個の値を個々に参照する簡略化された方法として機能することを意図するに過ぎず、各別個の値はそれが個々に記載されているかのように本明細書に組み込まれる。用語「セット」（例えば、「アイテムのセット」）又は「サブセット」の使用は、別段記されない限り、又は文脈により矛盾しない限り、１つ以上のメンバを含む空でない集合と解釈されるべきである。さらに、別段記されない限り、又は文脈により矛盾しない限り、対応するセットの用語「サブセット」は、必ずしも対応するセットの適切なサブセットを示すものではないが、サブセット及び対応するセットは等しい場合がある。
【０１１２】
形式「Ａ、Ｂ、及びＣのうち少なくとも１つ」又は「Ａ、Ｂ、及びＣのうち少なくとも１つ」のフレーズなどの結合的言語は、特に別段示されない限り、又は別段文脈により明らかに矛盾しない限り、さもなければ一般に使用される文脈で理解され、項目、用語等がＡ又はＢ又はＣのいずれか、あるいはＡ及びＢ及びＣのセットのうち任意の空でないサブセットであり得ることを示す。例えば、３つのメンバを有するセットの例示的な例において、結合的フレーズ「Ａ、Ｂ、及びＣのうち少なくとも１つ」及び「Ａ、Ｂ、及びＣのうち少なくとも１つ」は、以下のセット、すなわち、｛Ａ｝、｛Ｂ｝、｛Ｃ｝、｛Ａ、Ｂ｝、｛Ａ、Ｃ｝、｛Ｂ、Ｃ｝、｛Ａ、Ｂ、Ｃ｝のうち任意のものを参照する。ゆえに、そのような結合的言語は、一般に、特定の実施形態がＡの少なくとも１つ、Ｂの少なくとも１つ、及びＣの少なくとも１つが各々存在することを必要とするよう暗に示すことを意図しない。
【０１１３】
説明された処理の動作は、別段示されない限り、又は別段文脈により明らかに矛盾しない限り、任意の適切な順序で実行できる。説明された処理（又はその変形及び／又は組み合わせ）は、実行可能命令で構成された１つ以上のコンピュータシステムの制御下で実行でき、ハードウェア又はそれらの組み合わせにより、１つ以上のプロセッサ上で集合的に実行するコード（例えば、実行可能命令、１つ以上のコンピュータプログラム、又は１つ以上のアプリケーション）として実現できる。いくつかの実施形態において、コードは、例えば、１つ以上のプロセッサにより実行可能な複数の命令を含むコンピュータプログラムの形式でコンピュータ読取可能記憶媒体に記憶できる。いくつかの実施形態において、コンピュータ読取可能記憶媒体は非一時的である。
【０１１４】
提供されるいずれか又はすべての例、又は例示的言語（例えば、「などの」）の使用は、本発明の実施形態をより良く明らかにすることを意図するに過ぎず、別段請求されない限り、発明の範囲に制限を課すものではない。本明細書中の言語は、任意の請求されていない要素を発明の実施に対して不可欠なものとして示していると解釈されるべきではない。
【０１１５】
本開示の実施形態は、発明を実施するために発明者に知られる最良の形態を含め、説明されている。これらの実施形態の変形が、上述の説明を読んだ当業者に明らかになるであろう。発明者は、当業者がそのような変形を適宜採用することを予期しており、発明者は、本開示の実施形態が具体的に説明された以外の方法で実施されることを意図している。したがって、本開示の範囲は、適用法により許容される本明細書と別記の特許請求の範囲に記載された対象事項のすべての修正及び同等物を含む。さらに、上述の要素の、そのすべての可能な変形における任意の組み合わせは、別段示されない限り、又は別段文脈により明らかに矛盾しない限り、本開示の範囲に包含される。
【０１１６】
引用された刊行物、特許出願、及び特許を含む全ての参考文献は、各参考文献が参照により援用されるよう個々及び具体的に示され、かつその全体を明示されているのと同程度、本明細書で参照により援用される。
【０１１７】
上述の実施形態は、発明を限定するのでなく例示しており、当業者は、別記の特許請求の範囲により定義される発明の範囲から逸脱することなく多くの代替的な実施形態を設計可能であることに留意されたい。特許請求の範囲においては、括弧内に付されたいかなる参照符号も、特許請求の範囲を限定するものと解釈されてはならない。語「含んでいる」及び「含む」などは、任意の請求項又は明細書全体に列挙されたもの以外の要素又はステップの存在を除外しない。本明細書において、「含む」は、「含める、又は、から構成される」ことを意味し、「含んでいる」は、「含めている、又は、から構成されている」ことを意味する。要素の単数の参照は、そのような要素の複数の参照を除外するものではなく、その逆もまた同様である。発明は、いくつかの区別可能な要素を含むハードウェアを用いて、及び適切にプログラムされたコンピュータを用いて実現できる。いくつかの手段を列挙するデバイスクレームにおいては、これらの手段のうちいくつかは、１つの同じアイテムのハードウェアにより具現化できる。特定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組み合わせが利するように使用できないことを示すものではない。
【図１】
2021502750.tif 000015
【図２】
2021502750.tif 000016
【図３】
2021502750.tif 000017
【図４】
2021502750.tif 000018
【図５】
2021502750.tif 000019
【図６】
2021502750.tif 000020
【図７】
2021502750.tif 000021
【図８】
2021502750.tif 000022
【図９】
2021502750.tif 000023
【図１０】
2021502750.tif 000024
【図１１】
2021502750.tif 000025
【国際調査報告】
2021502750.tif 000026
2021502750.tif 000027
2021502750.tif 000028