(57)【要約】本発明は、コンセンサスベースのブロックチェーンのような分散台帳技術に関する。ブロックチェーントランザクションは、条件のセットを符号化するロッキングスクリプトによって妨げられるデジタルリソースを含んでよく、そのような条件のセットは、妨げられたリソースが使用され得る（例えば妨げられたリソースの所有権／制御の移転）前に満たされる必要がある。作業者（例えばコンピュータシステム）は、アンロッキングスクリプトの一部として符号化されるプルーフを生成するために、１つ以上の計算を実行する。検証アルゴリズムは、プルーフ、検証鍵及び作業者に関連付けられる暗号材料（例えばデジタル署名）のような追加データを利用して、トランザクションのデジタル資産が移転されるべきであることを確認してよい。このトランザクションの妥当性確認の結果、任意の第三者が、コントラクトを再実行するのではなく、コントラクトが実行されたことをチェックすることができ、したがって、計算能力を節約することができる。
2021502746.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実施方法であって：
デジタル資産の指示と、前記デジタル資産の制御を移転するための条件のセットを符号化するロッキングスクリプトを含むトランザクションのトランザクション出力を生成するステップであって、前記条件のセットの満足は、検証鍵及びプルーフに少なくとも部分的に基づいて決定されるステップと；
前記トランザクションのトランザクション入力を生成するステップであって、前記トランザクション入力は：
前記トランザクション出力に関連付けられる識別子と、
前記プルーフを含むアンロッキングスクリプトと、
を含む、ステップと；
前記ロッキングスクリプト及び前記アンロッキングスクリプトに基づいて、前記条件のセットが満たされていることを確認するステップと；
前記条件のセットの満足を確認したことに応答して、前記デジタル資産の制御を移転するステップと；
を含む、コンピュータ実施方法。
【請求項２】
前記検証鍵は、有限フィールドの複数の第１要素を含み、前記プルーフは、前記有限フィールドの複数の第２要素を含む、
請求項１に記載のコンピュータ実施方法。
【請求項３】
前記有限フィールドの要素は、楕円曲線上の点である
請求項２に記載のコンピュータ実施方法。
【請求項４】
前記有限フィールドの要素は、圧縮形式で符号化される、
請求項２又は３に記載のコンピュータ実施方法。
【請求項５】
クライアントは、前記検証鍵と、前記クライアントに関連付けられる第１デジタル証明書を用いて前記トランザクション入力を符号化し、作業者は、前記プルーフと、前記作業者に関連付けられる第２デジタル証明書を用いて前記トランザクション入力を符号化する、
請求項１乃至４のいずれかに記載のコンピュータ実施方法。
【請求項６】
前記ロッキングスクリプトは、前記条件のセットが前記アンロッキングスクリプトによって満たされていないことを条件に、前記デジタル資産の供給者のために前記デジタル資産を取り戻す命令を含む、
請求項１乃至５のいずれかに記載のコンピュータ実施方法。
【請求項７】
前記アンロッキングスクリプトはリディームスクリプトを更に含み、前記検証鍵及び前記リディームスクリプトは、前記条件のセットを満たし、
前記ロッキングスクリプトは、前記条件のセットのうち、前記リディームスクリプトのハッシュが所定の値に一致するという条件を符号化する、
請求項１乃至６のいずれかに記載のコンピュータ実施方法。
【請求項８】
前記リディームスクリプトは、５２０バイト以下のサイズである、
請求項７に記載にコンピュータ実施方法。
【請求項９】
前記アンロッキングスクリプトは、前記検証鍵の１つ以上の要素を含む、
請求項７又は８に記載のコンピュータ実施方法。
【請求項１０】
前記トランザクションは、ビットコインベースのプロトコルに従うＰ２ＳＨトランザクションである、
請求項７乃至９のいずれかに記載のコンピュータ実施方法。
【請求項１１】
前記トランザクションは、ブロックチェーンベースのプロトコルに従う標準のトランザクションである、
請求項１乃至１０のいずれかに記載のコンピュータ実施方法。
【請求項１２】
前記ロッキングスクリプト及びアンロッキングスクリプトは、スタックベースのスクリプト言語で符号化される、
請求項１乃至１１のいずれかに記載のコンピュータ実施方法。
【請求項１３】
前記条件のセットは、双線形制約を含む、
請求項１乃至１２のいずれかに記載のコンピュータ実施方法。
【請求項１４】
システムにおいて、
プロセッサと；
前記プロセッサによって実行された結果として、当該システムに、請求項１乃至１３のいずれかに記載のコンピュータ実施方法を実行させる実行可能命令を含むメモリと；
を備える、システム。
【請求項１５】
コンピュータシステムのプロセッサによって実行された結果として、前記コンピュータシステムに、請求項１乃至１３のいずれかに記載のコンピュータ実施方法を少なくとも実行させる実行可能命令を格納している非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ブロックチェーン技術に関し、より具体的には、ロッキングスクリプトを利用して検証鍵を変更から保護し、正当性のプルーフ（ｐｒｏｏｆ  ｏｆ  ｃｏｒｒｅｃｔｎｅｓｓ）の有効性を確かめることにより、ブロックチェーンにおけるゼロ知識プロトコルの実行を可能にすることに関する。本発明は更に、暗号技術及び数学技術を利用して、ブロックチェーンネットワーク上で行われる電子転送に関してセキュリティを実施する。本発明は、スマートコントラクトの生成及び実行における使用に特に適しているが、これらに限定されない。
【背景技術】
【０００２】
本明細書において、「ブロックチェーン」という用語は、いくつかのタイプの電子的なコンピュータベースの分散台帳のいずれかを指してよい。これらは、コンセンサスベースのブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳及びそれらの変形を含む。最も広く知られているブロックチェーン技術の用途はビットコイン台帳であるが、他のブロックチェーンの実装が提案され、開発されている。便宜性及び例示の目的のために、ビットコインが、本明細書で説明される技術の有益な用途として参照され得るが、ビットコインは、本開示で説明される技術が適用され得る多くの用途の１つに過ぎない。しかしながら、本発明は、ビットコインブロックチェーンでの使用に限定されず、非商業的用途を含む代替的なブロックチェーン実装及びプロトコルも本発明の範囲内に含まれることに留意されたい。
【０００３】
ブロックチェーンは、ブロックにより構成される、コンピュータベースの非集中型の分散システムとして実装されるピアツーピア電子台帳であり、ブロックはトランザクション及び他の情報により構成され得る。いくつかの例において、「ブロックチェーントランザクション」は、データ及び条件のセットを含むフィールド値の構造化されたコレクションを符号化する入力メッセージを指し、この場合、条件のセットを満たすことは、フィールドのセットがブロックチェーンデータ構造に書き込まれるための前提条件である。例えばビットコインでは、各トランザクションは、ブロックチェーンシステムの参加者間のデジタル資産の制御の移転を符号化し、少なくとも１つの入力及び少なくとも１つの出力を含む、データ構造である。いくつかの実施形態において、「デジタル資産」は、使用権に関連付けられるバイナリデータを指す。デジタル資産の例は、ビットコイン、イーサ、ライトコインを含む。いくつかの実装において、デジタル資産の制御を移転することは、デジタル資産の少なくとも一部を第１エンティティから第２エンティティに再関連付けすることによって実行され得る。ブロックチェーンの各ブロックは、ブロックが一緒にチェーン化されることになり、その始めからブロックチェーンに書き込まれたすべてのトランザクションの永続的で変更不能なレコードを作成するように、以前のブロックのハッシュを含んでよい。
【０００４】
いくつかの例において、「スタックベースのスクリプト言語」は、様々なスタックベース又はスタック指向の実行モデル及びオペレーションをサポートするプログラミング言語を指す。すなわち、スタックベースのスクリプト言語は、スタックを利用してもよい。スタックでは、値をスタックの先頭（ｔｏｐ）にプッシュすることができ、あるいはスタックの先頭からポップすることができる。スタックに対して実行される様々なオペレーションの結果、１つ以上の値を、スタックの先頭へプッシュすること又はスタックの先頭からポップすることになり得る。例えばＯＰ_ＥＱＵＡＬオペレーションは、スタックから上位２つのアイテムをポップし、それらを比較し、結果（例えば等しい場合は１、等しくない場合は０）をスタックの先頭にプッシュする。ＯＰ_ＰＩＣＫのようにスタックに対して実行される他のオペレーションは、スタックの先頭以外の位置からアイテムを選択することを可能にすることがある。本実施形態のいくつかで用いられるいくつかのスクリプト言語では、少なくとも２つのスタック、すなわち、メインスタックと代替スタックが存在し得る。スクリプト言語のいくつかのオペレーションは、あるスタックの先頭から別のスタックの先頭にアイテムを移動させることができる。例えばＯＰ_ＴＯＡＬＴＳＴＡＣＫは、メインスタックの先頭から代替スタックの先頭に値を移動させる。スタックベースのスクリプト言語は、場合によっては、厳密な後入れ先出し（ＬＩＦＯ）方式のオペレーションのみに限定されないことに留意されたい。例えばスタックベースのスクリプト言語は、スタック内のｎ番目のアイテムを先頭にコピー又は移動させるオペレーション（例えばそれぞれ、ビットコインにおけるＯＰ_ＰＩＣＫ及びＯＰ_ＲＯＬＬ）をサポートしてもよい。スタックベースのスクリプト言語で書かれたスクリプトは、ベクトル、リスト又はスタックのような任意の適切なデータ構造を使用して実装することができる論理スタック上にプッシュされ得る。
【０００５】
トランザクションがブロックチェーンに書き込まれるためには、「検証（ｖａｌｉｄａｔｅ）」されなければならない。ネットワークノード（マイニングノード）は、各トランザクションが有効であることを保証するための作業を実行し、無効なトランザクションはネットワークから拒絶される。ノードは、他のノードとは異なる有効性の標準を有することができる。ブロックチェーンの有効性はコンセンサスベースであるので、トランザクションが有効であることに大多数のノードが同意した場合、トランザクションは有効であるとみなされる。ノードにインストールされているソフトウェアクライアントは、ＵＴＸＯのロッキングスクリプト及びアンロッキングスクリプトを実行することにより、部分的にＵＴＸＯを参照するトランザクションに対するこの検証作業を実行する。ロッキングスクリプト及びアンロッキングスクリプトの実行がＴＲＵＥに評価され、適用可能である場合に他の検証条件が満たされる場合、トランザクションはノードによって検証される。検証されたトランザクションは、他のネットワークノードに伝搬され、そこで、マイニングノードは、トランザクションをブロックチェーンに含めるように選択することができる。したがって、トランザクションがブロックチェーンに書き込まれるためには、ｉ）トランザクションは、該トランザクションを受け取った最初のノードによって検証されなければならず、トランザクションが検証された場合、ノードはトランザクションをネットワーク内の他のノードに中継し；ｉｉ）トランザクションは、マイニングノードによって構築された新しいブロックに追加されなければならず；ｉｉｉ）マイニングされなければならない、すなわち、過去のトランザクションの公開台帳に追加されなければならない。トランザクションを実質的に不可逆にするために、十分な数のブロックがブロックチェーンに追加されると、トランザクションは確認されたとみなされる。
【０００６】
ブロックチェーン技術は、暗号通貨実装の使用について最も広く知られているが、デジタル起業家達は、新たなシステムを実装するために、ビットコインが基づいている暗号セキュリティシステムと、ブロックチェーン上に格納することができるデータとの双方の使用を探求し始めている。暗号通貨の領域に限定されない自動化タスク及びプロセスにブロックチェーンを使用することができれば非常に有利であろう。そのようなソリューションは、それらの用途はより多方面にわたるが、ブロックチェーンの利点（例えば永続性、イベントの改ざん防止レコード、分散処理等）を利用することができるであろう。
【０００７】
本開示は、１つ以上のブロックチェーンベースのコンピュータプログラムの技術的側面を説明する。ブロックチェーンベースのコンピュータプログラムは、ブロックチェーントランザクション内に記録される機械読取可能で実行可能なプログラムであってよい。ブロックチェーンベースのコンピュータプログラムは、結果を生成するために入力を処理することができ、次いで、それらの結果に依存してアクションを実行させることができるルールを含んでよい。現在の研究の１つの分野は、「スマートコントラクト」の実装のためのブロックチェーンベースのコンピュータプログラムの使用である。自然言語で書かれる伝統的な契約とは異なり、スマートコントラクトは、機械読み取り可能な契約又は合意の条件の実行を自動化するように設計されるコンピュータプログラムであってよい。
【０００８】
ブロックチェーンに関連する関心のある別の領域は、ブロックチェーンを介して実世界のエンティティを表し、転送するための「トークン」（又は「カラードコイン」）の使用である。潜在的に機密又は秘密のアイテムを、識別可能な意味又は値を有しないトークンによって表すことができる。したがって、トークンは、実世界のアイテムがブロックチェーンから参照されることを可能にする識別子として機能する。
【０００９】
実施形態において、特定のエンティティとの対話を、スマートコントラクトの特定のステップで符号化することができるが、スマートコントラクトは、そうでなければ、自動的に実行され、自己強制される可能性がある。それは、機械読み取り可能かつ実行可能である。いくつかの例では、自動実行は、ＵＴＸＯの移転を可能にするために成功裏に実行されるスマートコントラクトの実行を指す。なお、このような例では、ＵＴＸＯの移転送を可能にする「エンティティ」は、何らかの秘密の知識を証明することを必要とされることなく、アンロッキングスクリプトを作成することができるエンティティを指すことに留意されたい。言い換えると、データのソース（例えばアンロッキングトランザクションを作成したエンティティ）が暗号秘密（例えば秘密の非対称鍵、対称鍵等）へのアクセスを有することを確かめることなく、アンロッキングトランザクションを検証することができる。また、このような例では、自己強制とは、制約に応じてアンロッキングトランザクションを強制させているブロックチェーンネットワークの検証ノードを指す。いくつかの例では、ＵＴＸＯを「アンロック」すること（ＵＴＸＯの「消費（ｓｐｅｎｄｉｎｇ）」としても知られる）は、技術的な意味で使用されており、ＵＴＸＯを参照して、有効として実行するアンロッキングトランザクションを作成することを指す。
【００１０】
ブロックチェーントランザクションの出力は、ロッキングスクリプトと、ビットコイン等のデジタル資産の所有権に関する情報を含む。ロッキングスクリプトは、障害（ｅｎｃｕｍｂｒａｎｃｅ）とも呼ばれることがあり、ＵＴＸＯを移転するために満足する必要がある条件を指定することにより、デジタル資産を「ロック」する。例えばロッキングスクリプトは、関連するデジタル資産をアンロックするために、特定のデータがアンロッキングスクリプトで提供されることを必要とする可能性がある。ロッキングスクリプトは、ビットコインでは「ｓｃｒｉｐｔＰｕｂＫｅｙ」としても知られる。デジタル資産をアンロックするためにデータの提供を当事者に要求する技術は、ロッキングスクリプト内部にデータのハッシュを埋め込むことを伴う。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
したがって、これらの態様の１つ以上において、ブロックチェーン技術を改善する方法及びシステムを提供することが望ましい。そのような改善されたソリューションが現在では考案されている。したがって、本発明によれば、添付の特許請求の範囲において定義される方法が提供される。
【００１２】
このような改善されたソリューションが、現在では考案されている。
【課題を解決するための手段】
【００１３】
したがって、本発明によれば、添付の特許請求の範囲で定義されるようなシステム及び方法が提供される。
【００１４】
本発明によると、ブロックチェーンネットワークのノードのためのコンピュータ実施方法が提供されてよく、該コンピュータ実施方法は：デジタル資産の指示（ｉｎｄｉｃａｔｉｏｎ）と、デジタル資産の制御を移転するための条件のセットを符号化するロッキングスクリプト（ｌｏｃｋｉｎｇ  ｓｃｒｉｐｔ）を含むトランザクションのトランザクション出力を生成するステップであって、条件のセットの満足は、検証鍵及びプルーフ（ｐｒｏｏｆ）に少なくとも部分的に基づいて決定されるステップと；トランザクションのトランザクション入力を生成するステップであって、トランザクション入力は、トランザクション出力に関連付けられる識別子と、プルーフを含むアンロッキングスクリプト（ｕｎｌｏｃｋｉｎｇ  ｓｃｒｉｐｔ）とを含む、ステップと；ロッキングスクリプト及びアンロッキングスクリプトに基づいて、条件のセットが満たされていることを確認するステップと；条件のセットの満足を確認したことに応答して、デジタル資産の制御を移転するステップと；を含む。
【００１５】
検証鍵は、有限フィールド（ｆｉｎｉｔｅ  ｆｉｅｌｄ）の複数の第１要素を含んでよく、プルーフは、有限フィールドの複数の第２要素を含む。
【００１６】
フィールドの要素は、楕円曲線上の点であってよい。
【００１７】
有限フィールドの要素は、圧縮形式で符号化されてよい。
【００１８】
好ましくは、方法は、クライアントが、検証鍵と、クライアントに関連付けられる第１デジタル証明書を用いてトランザクション入力を符号化することと、作業者（ｗｏｒｋｅｒ）が、プルーフと、作業者に関連付けられる第２デジタル証明書を用いてトランザクション入力を符号化することとを含んでよい。
【００１９】
ロッキングスクリプトは、条件のセットがアンロッキングスクリプトによって満たされていないことを条件に、デジタル資産の供給者のためにデジタル資産を取り戻す（ｒｅｃｌａｉｍ）命令を含んでよい。
【００２０】
ロッキングスクリプトはリディームスクリプト（ｒｅｄｅｅｍ  ｓｃｒｉｐｔ）を更に含んでよく、検証鍵及びリディームスクリプトは、条件のセットの少なくともサブセットの満足を決定するのに十分な情報を符号化し；ロッキングスクリプトは、条件のセットのうちの１つとして、リディームスクリプトのハッシュが所定の値に一致することを符号化する。
【００２１】
リディームスクリプトは、所定の最大サイズ以下、例えば５２０バイト以下であってよい。
【００２２】
アンロッキングスクリプトは、検証鍵の１つ以上の要素を含んでよく、リディームスクリプトは、検証鍵の残りの要素の少なくともいくつかを含んでよい。アンロッキングスクリプト及びリディームスクリプトは、集合的に検証鍵を含んでよい。
【００２３】
トランザクションのロッキングスクリプト、アンロッキングスクリプト及びリディームスクリプトは、ビットコインベースのプロトコルのＰａｙ−ｔｏ−Ｓｃｒｉｐｔ−Ｈａｓｈトランザクション又はその変形に従ってよい。
【００２４】
トランザクションは、ビットコインプロトコルのようなブロックチェーンベースのプロトコルの標準トランザクションに従ってよい。
【００２５】
ロッキングスクリプト及びアンロッキングスクリプトのようなスクリプトは、スタックベースのスクリプト言語のコマンド及びデータで符号化されてよく、コマンド及びデータは、後入れ先出し順でスタック上に配置される。
【００２６】
条件のセットは、１つ以上の双線形制約（ｂｉｌｉｎｅａｒ  ｃｏｎｓｔｒａｉｎｔｓ）を含んでよい。
【００２７】
また、プロセッサと、該プロセッサによる実行の結果として、システムに、特許請求に係る方法のいずれかを実行させる実行可能命令を含むメモリとを備えるシステムを提供することが望ましい。
【００２８】
また、コンピュータシステムの１つ以上のプロセッサによる実行の結果として、コンピュータシステムに、特許請求に係る方法のいずれかを少なくとも実行させる実行可能命令を格納している非一時的コンピュータ読取可能記憶媒体を提供することが望ましい。
【００２９】
本発明は、検証方法／システムとして、かつ／又はブロックチェーンを介したデジタル資産の交換又は移転を制御するための制御方法／システムとして説明することができる。いくつかの実施形態において、デジタル資産は、暗号通貨のトークン又は部分である。以下で説明されるように、本発明は、ブロックチェーンネットワーク又はプラットフォームを介してオペレーションを実行する新たな改善された有利な方法のためのセキュアな方法／システムとしても説明することができる。
【図面の簡単な説明】
【００３０】
本発明のこれら及び他の態様は、本明細書で説明される実施形態から明らかになり、実施形態に関連して解明されるであろう。本発明の実施形態は、次に単なる例示として、添付の図面に関連して説明される：
【００３１】
【図１】様々な実施形態を実装することができるブロックチェーン環境を示す図である。
【図２】様々な実施形態に従ってプロトコルを実装するために利用され得るコンピューティング環境を示す図である。
【図３】検証可能な計算の実行に適した環境の図である。
【図４】楕円曲線上の点が、一実施形態に従ってロッキングスクリプト又はアンロッキングスクリプトのようなブロックチェーンスクリプトと共に使用するのに適した圧縮及び非圧縮エンコーディングを使用して表される、例示的な図を示す図である。
【図５】クライアントが、プルーフの妥当性確認に使用される検証鍵を供給する図である。
【図６】作業者が、プルーフの妥当性確認に使用される検証鍵を供給する図である。
【図７】一実施形態によるリディームスクリプトを生成するためのプロセス７００の図である。
【図８】本開示の少なくとも１つの実施形態を実施するために使用され得るコンピューティングデバイスを示す図である。
【発明を実施するための形態】
【００３２】
まず、本開示の一実施形態によるブロックチェーンに関連付けられる例示のブロックチェーンネットワーク１００示す図１を参照する。本実施形態では、例示のブロックチェーンネットワーク１００は、ピアツーピア分散電子デバイスとして実装されるブロックチェーンノードを含み、その各々が、少なくとも部分的にノード１０２のオペレータ間で合意されるブロックチェーンプロトコルに従うオペレーションを実行するソフトウェア及び／又はハードウェアのインスタンスを実行する。いくつかの例において、「ノード」は、ブロックチェーンネットワークの間で分散されるピアツーピア電子デバイスを指す。ブロックチェーンプロトコルの一例がビットコインプロトコルである。
【００３３】
いくつかの実施形態において、ノード１０２は、（例えばデータセンター内のサーバによって、クライアントコンピューティングデバイス（例えばデスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン等）によって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって、あるいは図８のコンピューティングデバイス８００のような任意の適切な電子クライアントデバイスによって）任意の適切なコンピューティングデバイスから構成され得る。いくつかの実施形態において、ノード１０２は、トランザクション１０４のように提案されたトランザクションを表すデータメッセージ又はオブジェクトを受け取るための入力を有する。ノードは、いくつかの実施形態では、ノードが維持する情報について、例えばトランザクション１０４の状態の情報についてクエリ可能である。
【００３４】
図１に示されるように、ノード１０２のいくつかは、ノード１０２のうちの１つ以上の他のノードに通信可能に結合される。このような通信結合は、有線又は無線通信のうちの１つ以上を含むことができる。実施形態において、ノード１０２は各々、ブロックチェーン内のすべてのトランザクションの「台帳」の少なくとも一部を維持する。このようにして、台帳は分散台帳となる。台帳に影響を与えるノードによって処理されるトランザクションは、台帳の完全性が維持されるように、他のノードのうちの１つ以上によって検証可能である。
【００３５】
どのノード１０２が他のどのノードと通信することができるかに関しては、メッセージが、ブロックチェーンプロトコルが転送すべきことを示すメッセージであると想定して、ノード間で渡されるメッセージが例示のブロックチェーンネットワーク１００全体（又はその何らかの重要な部分）に伝搬することができるように、例示のブロックチェーンネットワーク１００内のノードの各々が、ノード１０２のうちの１つ以上の他のノードと通信することができることで十分である。１つのそのようなメッセージは、ノード１０２のうちの１つ、例えばノード１０２Ａによる、提案されたトランザクションの公開であってよく、これは、次いでパス１０６のようなパスに沿って伝搬するであろう。別のそのようなメッセージは、ブロックチェーンに含めるために提案された新たなブロックの公開であってよい。
【００３６】
一実施形態において、ノード１０２のうちの少なくともいくつかは、暗号問題を解決することのように複雑な計算を実行するマイニングノードである。暗号問題を解決するマイニングノードは、ブロックチェーンのための新たなブロックを作成し、その新たなブロックをノード１０２のうちの他のノードにブロードキャストする。ノード１０２のうちの他のノードは、マイニングノードの作業を確認し、確認時に、（例えばブロックチェーンの分散台帳にブロックを追加することによって）ブロックをブロックチェーン内に受け入れる。いくつかの例では、ブロックはトランザクションのグループであり、しばしば、タイムスタンプと前のブロックの「フィンガープリント」（例えばハッシュ）でマークされる。このようにして、各ブロックは前のブロックにリンクされるようになってよく、それによりブロックチェーン内のブロックをリンクする「チェーン」が生成される。実施形態において、有効なブロックは、ノード１０２の合意によってブロックチェーンに追加される。また、いくつかの例では、ブロックチェーンは、検証されたブロックのリストを含む。
【００３７】
一実施形態において、ノード１０２のうちの少なくともいくつかは、本開示で説明されるように、トランザクションを検証する検証ノードとして動作する。いくつかの例では、トランザクションは、デジタル資産（例えば複数のビットコイン）の所有権のプルーフと、デジタル資産の所有権／制御を受け入れる又は移転するための条件を提供するデータを含む。いくつかの例において、「アンロッキングトランザクション」は、前のトランザクションのＵＴＸＯによって示されるデジタル資産の少なくとも一部を、ブロックチェーンアドレスに関連付けられるエンティティに再関連付けする（例えば所有権又は制御を移転する）ブロックチェーントランザクションを指す。いくつかの例において、「前のトランザクション」は、アンロッキングトランザクションによって参照されているＵＴＸＯを含むブロックチェーントランザクションを指す。いくつかの実施形態では、トランザクションは、所有権又は制御が移転され得る（「アンロックされる」）前に満たさなければならない条件で該トランザクションを妨げる「ロッキングスクリプト」を含む。
【００３８】
いくつかの実施形態では、ブロックチェーンアドレスは、デジタル資産の少なくとも一部の制御が移転／再関連付けされているエンティティに関連付けられる英数字の文字列である。いくつかの実施形態で実装されるいくつかのブロックチェーンプロトコルでは、エンティティに関連付けられる公開鍵とブロックチェーンアドレスとの間に１対１の対応が存在する。いくつかの実施形態において、トランザクションの検証は、ロッキングスクリプト及び／又はアンロッキングスクリプトで指定された１つ以上の条件の検証を含む。トランザクション１０４の検証が成功すると、検証ノードはトランザクション１０４をブロックチェーンに追加し、それをノード１０２に分配する。
【００３９】
本明細書で説明されるシステム及び方法は、ロッキングスクリプトが、検証鍵ＶＫを変更から保護することを可能にし、プルーフπの有効性を確認し、それにより、トランザクション検証中にブロックチェーンにおけるゼロ知識プロトコルの実行を可能にすることに関する。
【００４０】
検証可能な計算は、計算のプルーフの生成を可能にする技術である。実施形態では、このような技術をクライアントによって利用して、入力ｘに対する関数ｆの評価を、本明細書で作業者と呼ばれる別のコンピューティングエンティティにアウトソースする。場合によって、クライアントは計算上制限されており、クライアントは関数の評価を実行することが実行不可能となる（例えばクライアントが利用可能な計算リソースを使用する計算の期待されるランタイムは、最大許容しきい値を超える）が、そうである必要はなく、クライアントは、一般に言うと、計算ランタイムや計算コスト（例えば関数の評価を実行する計算リソースを割り当てるための経済的コスト）等の任意の適切な基準に基づいて、入力ｘに対する関数ｆの評価を委任してよい。
【００４１】
作業者は、一実施形態において、本開示の他の箇所でより詳細に説明されるブロックチェーンノードのような任意の適切なコンピューティングエンティティである。一実施形態では、作業者（例えばブロックチェーンノード）は、入力ｘに対して関数ｆを評価し、上述のクライアント及び／又はブロックチェーンネットワークの他のノードのような他のコンピューティングエンティティによって確かめることができる出力ｙと出力ｙの正当性（ｃｏｒｒｅｃｔｎｅｓｓ）のプルーフπを生成する。プルーフは、引数とも呼ばれることがあるが、実際の計算よりも速く確かめることができ、したがって、上述の作業者によって生成された出力の正当性を決定するために、入力ｘに対して関数ｆを再計算する代わりに、プルーフの正当性を確かめることによって、計算オーバーヘッドを低減することができる（例えば電力オーバーヘッドと、電源投入及び実行する計算リソースに関連付けられるコストを低減する）。ゼロ知識検証可能計算では、作業者は、該作業者が特定の特性を有する入力を知っているという証明書をクライアントに提供する。
【００４２】
知識のゼロ知識証明（ｚｅｒｏ−ｋｎｏｗｌｅｄｇｅ  ｐｒｏｏｆ  ｏｆ  ｋｎｏｗｌｅｄｇｅ）の有効な変形は、ｚｋ−ＳＮＡＲＫ（Ｓｕｃｃｃｉｎｃｔ  Ｎｏｎ−ｉｎｔｅｒａｃｔｉｖｅ  ＡＲｇｕｍｅｎｔ  ｏｆ  Ｋｎｏｗｌｅｄｇｅ）である。一実施形態では、全てのペアリングベースのｚｋ−ＳＮＡＲＫｓは、作業者が一般的なグループオペレーションを使用して複数のグループ要素を計算し、検証者が複数のペアリング積方程式を使用してプルーフをチェックするプロセスを含む。一実施形態では、線形対話型証明は有限のフィールドにわたって機能し、作業者及び検証者のメッセージは、フィールド要素のベクトルを決定するために使用可能な情報を含むか、符号化するか又は他の方法で含む。
【００４３】
一実施形態において、本明細書で説明されるシステム及び方法は、ブロックチェーンのマイニングノードが、計算（例えば入力ｘに対する関数ｆの評価）を１回実行し、出力の正当性を確かめるために使用できるプルーフを生成することを可能にし、ここで、プルーフの正当性を評価することは、関数を評価することよりも計算コストが低い。このコンテキストでは、オペレーション及びタスクのコスト（すなわち、どのくらい高価か）は、オペレーション又はタスクを実行する計算の複雑さを指し得る。一実施形態では、計算の複雑さは、ソートアルゴリズムを実行する平均計算コスト又は最悪ケースの計算コストを指す−例えばヒープソートアルゴリズム及びクイックソートアルゴリズムは両方ともｏ（ｎ  ｌｏｇｎ）の平均計算コストを有するが、クイックソートは、ｏ（ｎ２）の最悪ケースの計算コストを有し、一方、ヒープソートは、ｏ（ｎ  ｌｏｇｎ）の最悪ケースの計算コストを有する。一実施形態では、入力ｘにおける関数ｆを評価する平均計算コスト及び／又は最悪ケースの計算コストは、プルーフの正当性を評価するコストよりも悪い。したがって、本明細書で説明されるシステム及び方法の使用は非常に有利であり、例えばより計算コストの高いコントラクトを実行することを可能にし得る。なぜなら、そのようなコントラクトは、そのようなコンタクトはブロックチェーンを比例的に検証するために必要な時間を増加させないからである。更なる利点は、検証者システムの電力消費の低減を含んでよく、それにより、検証者コンピュータシステムの効率を改善し、プルーフの正当性を評価する際に、そのような検証者コンピュータシステムを実行することに関連付けられるエネルギーコストを低減することができる。現在、スマートコントラクトはすべてのノードにおいて実行されて、検証されなければならない−この制約はスマートコントラクトの複雑さを制限する。本明細書で説明される方法及びシステムを使用して、正当性のプルーフを生成するためにコントラクトを一度実行することによってブロックチェーンの効率を改善し、作業者によって提供される正当性のプルーフ及びクライアントによって提供される検証鍵に基づいて、ブロックチェーンのすべてのノードがコントラクトの有効性を確かめることができるシステムを実装することができる。このようにして、ブロックチェーンのノードによって集合的に実行することができ、かつ／又は計算コストがより高いスマートコントラクトの計算を可能にするスマートコントラクトのスループットを増加させることによって、ブロックチェーンの効率が改善される。
【００４４】
一実施形態では、検証鍵Ｖｋ又はその一部は、ゼロ知識プロトコルのセットアップ段階で生成され、かつプルーフπとともに使用される、公開パラメータ及び入力／出力データから抽出でき、作業者によって提供される正当性計算の主張されたプルーフ（ａｌｌｅｇｅｄ  ｐｒｏｏｆ）を確かめる。例えば上記及び下記でより詳細に説明されるように、ロッキングスクリプトを許容するシステム及び方法は、検証鍵Ｖｋを変更から保護し、プルーフπの有効性をチェックし、トランザクション検証中にブロックチェーン上でゼロ知識プロトコルの実行を可能にする。したがって、本開示は、計算の確認において使用される要素を格納するためにブロックチェーンスクリプト（例えばビットコインベースのネットワークにおいて）を使用して検証段階を実行するシステム及び方法を開示する。
【００４５】
図２は、様々な実施形態に従って、プロトコルを実装するために利用され得るコンピューティング環境２００を示している。プロトコルは、正当性のプルーフを格納し、「ｃｏｒｒｅｃｔ−ｂｙ−ｃｏｎｓｔｒｕｃｔｉｏｎ」暗号手法とスマートコントラクトを組み合わせるために、ブロックチェーン技術を用いて実装されてよい。一実施形態では、公的な検証可能な計算スキームは、３つ段階、すなわちセットアップ段階、計算段階及び検証段階を含む。
【００４６】
セットアップ段階は、計算タスクの実行をアウトソースするためにプロセスの一部として実行され得る。クライアントは、以下で言及されるように、計算タスクの実行を作業者に委任する顧客又はクライアントコンピュータシステムのようなエンティティを指してよく、これは、異なるコンピュータシステムであってもよい。クライアントは、一般的に言うと、これらに限定されないが、計算リソース、計算リソースの欠如、タスクを実行するためにクライアントコンピュータシステムを利用することに関連付けられる経済的コスト、タスクを実行するためにクライアントコンピュータシステムを利用することに関連付けられるエネルギーコスト（例えば電力のためにバッテリに依存するモバイルデバイス又はラップトップは、作業者を利用して計算集約的タスクを実行し、それにより、電力を節約し、バッテリ駆動型デバイスの使用を延長し得る）等の様々な理由により、計算タスクの実行を委任してよい。
【００４７】
一実施形態において、セットアップ段階は、クライアント、顧客、組織の従業員又は他の任意の適切なエンティティが、正確な意味を有する正式な言語でコントラクトを書くことを含む。コントラクトは、Ｃ又はＪａｖａ（登録商標）のような高水準プログラミング言語で書かれてもよい。一般的に言うと、コントラクトは、コンピュータシステムによって操作できるフォーマットに変換される又は変換することができる任意の言語又はシンタックスで表現され得る。一実施形態では、限定された目的で、ドメイン固有の言語がタイプセーフティを提供してよく、制限された表現度が利用されてよい。生成されるソースコードは、コントラクトの正確な説明であってよい。
【００４８】
コンパイラ２０２は、コンピュータシステムの１つ以上のプロセッサによって実行されると、システムにソースコード２０６を入力として取らせ、回路を生成する実行可能なコードを含む、任意のハードウェア、ソフトウェア又はそれらの組合せであってよい。コンパイラ２０２は、バイナリコードのような機械読取可能フォーマットにコンパイルされた命令に基づいて命令を実行又は実施するコンピュータプログラムを指してよい。コンパイラ２０２が図示されているが、インタプリタ、アセンブラ及び他の適切なソフトウェア及び／又はハードウェアコンポーネントを利用してソースコードを回路に変換してもよいことに留意されたい。一実施形態では、回路は、フィールドＦから値を運び、論理及び／又は算術ゲートに接続するワイヤを備える算術回路である。一実施形態では、回路Ｃは、システムによって使用されて、元の回路Ｃの完全な説明を提供する多項式のセットを含む二次プログラムＱ  ２０８を生成する。
【００４９】
一実施形態において、コンパイラ２０２は、これらに限定されないが、プリプロセッサ命令、スタティックイニシャライザ、グローバル及びローカル関数、ブロックスコープ変数、アレイ、データ構造、ポインタ、関数呼び出し、関数演算子（例えばファンクタ）、条件及びループ、算術及びビットワイズのブール演算子を含む、Ｃ又はＪａｖａ（登録商標）といったプログラミング言語の実質的なサブセットを認識することができる。しかし、一実施形態において、コンパイラ２０２は、プログラミング言語の規格によるコマンドのセット全体はサポートしない（これは、場合によっては、再帰的アルゴリズムを禁止することのように、特定のタイプのアルゴリズムがスマートコントラクトで実行されることを防止するよう意図されることがある）。一実施形態において、コンパイラは、ソースコードの表現を算術ゲート言語に拡張し、算術回路を生成する。回路の実装は、過去に、「ＺＥＲＯ−Ｋｎｏｗｌｅｄｇｅ  Ｃｏｎｔｉｎｇｅｎｔ  Ｐａｙｍｅｎｔｓ  Ｒｅｖｉｓｉｔｅｄ:  Ａｔｔａｃｋｓ  ａｎｄ  Ｐａｙｍｅｎｔｓ  ｆｏｒ  Ｓｅｒｖｉｃｅｓ」においてＣａｍｐａｎｅｌｌｉ,Ｍ.等（２０１７）により、「Ｃｉｒｃｕｉｔｓ  ｏｆ  Ｂａｓｉｃ  Ｆｕｎｃｔｉｏｎｓ  Ｓｕｉｔａｂｌｅ  Ｆｏｒ  ＭＰＣ  ａｎｄ  ＦＨＥ」において、Ｔｉｌｌｉｃｈ,Ｓ.及びＳｍａｒｔ,Ｂにより考えられている。算術回路は、コンパイラ２０２又は他の任意の適切なハードウェア、ソフトウェア又はそれらの組合せ（例えば図２に図示されていないソフトウェアモジュール）によって、二次算術問題（ＱＡＰ：Ｑｕａｄｒａｔｉｃ  Ａｒｉｔｈｍｅｔｉｃ  Ｐｒｏｂｌｅｍ）を構築するために利用されてよい。二次プログラム（ｑｕａｄｒａｔｉｃ  ｐｒｏｇｒａｍ）は、一実施形態に従って、クライアント（例えば鍵生成及び検証）及び作業者（例えば計算及びプルーフ生成）のための暗号ルーチンのセットにコンパイルされる。いくつかの実施形態では、英国特許出願第１７１８５０５．９号に記載されるような算術回路最適化技術が、作業者がスマートコントラクトの結果を決定するために必要なリソースを減らすために利用されてよい。
【００５０】
一実施形態では、鍵生成器２０４は、コンピュータシステムの１つ以上のプロセッサによって実行されると、システムに、二次プログラムを形成する評価鍵及び検証鍵を生成させる実行可能コードを含むハードウェア、ソフトウェア又はそれらの組合せである。二次プログラムとしての計算を符号化するための技術は、Ｇｅｎｎａｒｏ,Ｒ.等（２０１３）による「Ｑｕａｄｒａｔｉｃ  Ｓｐａｎ  Ｐｒｏｇｒａｍｓ  ａｎｄ  Ｓｕｃｃｉｎｃｔ  ＮＩＺＫｓ  ｗｉｔｈｏｕｔ  ＰＣＰｓ」において考えられている。一実施形態では、二次算術問題（ＱＡＰ）  Ｑは、フィールドＦ上の回路Ｃを符号化し、ｍ＋１多項式のセットを含む：
Ｖ＝｛ｖｋ（ｘ）｝，Ｗ＝｛ｗｋ（ｘ）｝，Ｙ＝｛ｙｋ（ｘ）｝
ここで、０≦ｋ≦ｍである。ターゲット多項式ｔ（ｘ）も定義される。Ｆのｎ個の要素を入力として取り、ｎ'個の要素を出力とする関数ｆとし、Ｎ＝ｎ＋ｎ'を所与すると、Ｑは、｛ｃ１,...,ｃＮ｝∈ＦＮがｆの入力と出力のグループの有効な割り当てであり、係数のリスト｛ｃＮ＋１,...,ｃｍ｝が存在する場合、ｔ（ｘ）がｐ（ｘ）を除算するように、ｆを計算する：
【数１】
2021502746.tif 000003
【００５１】
したがって、実施形態においてｈ（ｘ）・ｔ（ｘ）＝ｐ（ｘ）のような何らかの多項式ｈ（ｘ）が存在しなければならない。Ｑのサイズはｍであり、その次数（ｄｅｇｒｅｅ）はｔ（ｘ）の次数である。
【００５２】
一実施形態では、算術回路のＱＡＰを構築することは、回路内の各乗算ゲートｇに対して、任意のルートｒｇ∈Ｆをピックし、
【数２】
2021502746.tif 000004
となるようにターゲット多項式を定義することを含む。一実施形態では、インデックスｋ∈｛１．．．ｍ｝は、回路の各入力及び乗算ゲートからの各出力に関連付けられる。Ｖにおける多項式は、各ゲートへの左入力を符号化し、Ｗは各ゲートへの右入力を符号化し、Ｙは出力を符号化する。例えばｋ番目のワイヤがゲートｇへの左入力の場合、ｖｋ（ｒｇ）＝１であり、そうでなければｖｋ（ｒｇ）＝０である。したがって、特定のゲートｇ及びそのルートｒｇについて、前述の式を次のように簡略化することができる：
【数３】
2021502746.tif 000005
ゲートの出力値は、その入力の積に等しい。可分性チェックは、ｐ（ｒｇ）＝０となるように、ｔ（ｘ）の各ゲートｇとルートｒｇに対して１つずつ、ｄｅｇ（ｔ（ｘ））分離チェック（ｓｅｐａｒａｔｅ  ｃｈｅｃｋｓ）に分解される。加算ゲートと乗算定数ゲート（ｍｕｌｔｉｐｌｉｃａｔｉｏｎ−ｂｙ−ｃｏｎｓｔａｎｔ  ｇａｔｅｓ）はＱＡＰのサイズ又は次数に寄与しない。
【００５３】
一実施形態では、ＱＡＰは、フィールドＦｐ上で定義され、ここで、ｐは、大きい素数（ｌａｒｇｅ  ｐｒｉｍｅ）である。一実施形態では、Ｆｐ上のＱＡＰが、加算及び乗算モジュロｐに関して表すことができる任意の関数を効率的に計算することが望ましい。算術分割ゲートは、［０,２ｋ−１］内であることが知られている算術ワイヤａ∈Ｆｐをｋ個のバイナリ出力ワイヤに変換するよう設計されることがある。したがって、ブール関数は、算術ゲートを用いて表現できることになる。例えばＮＡＮＤ（ａ,ｂ）＝１−ａｂである。各埋め込みブールゲートには１つの乗算のみかかる。さらに、分割（ｓｐｌｉｔ）のような新しいゲートは、スタンドアロンとして定義でき、他のゲートとともに構成できる。［０,２ｋ−１］内にあることが知られている入力ａ∈Ｆｐを所与として、分割ゲートは、ΣｋΣ２ｉ−１ａｉ＝ａのようなａの２進数ａ１，．．．，ａｋを保持する、ｋ個のワイヤを出力し、各ａｉは０又は１のいずれかである。
【００５４】
最終的に、すべての証明者及び検証者によって使用される公開パラメータは、セットアップ段階の一部としてシステムによって生成される。評価鍵ＥＫ及び検証鍵ＶＫは、クライアントによって選択された秘密値を使用して導出されることに留意されたい。鍵生成器２０４は、鍵生成アルゴリズムに関連して二次算術プログラム（ＱＡＰ）を利用して、評価鍵ＥＫ２１０及び検証鍵ＶＫ２１２を生成することができる。
【００５５】
一実施形態では、計算タスクを実行することは、作業者による入力２１６に対する関数の計算（すなわち、ｆ（ｘ）を評価するプロセス）を含む。実施形態において、作業者は、クライアントが計算タスクを委任することができる任意の適切なコンピュータシステムである。入力２１６は、一実施形態では、作業者に関連付けられる秘密鍵を使用して生成されたデジタル署名のような、作業者の身元を証明する情報を含む。一実施形態では、作業者は、クライアントが、成功した計算に対して（例えばデジタル資産の移転により）報酬を支払うコンピュータシステムである。クライアントは、一実施形態において、入力ｘ及び評価鍵ＥＫを作業者に提供し、作業者は、計算ルーチンに対して評価モジュール２１４を使用して、出力ｙを計算し（すなわち、ｙ＝ｆ（ｘ）であり、入力はｘであり、関数はｆである）、評価鍵ＥＫ２１０を使用して、正当性のプルーフ２１８を生成する。評価モジュールは、一実施形態では、コンピュータシステムの１つ以上のプロセッサによって実行されると、コンピュータシステムに、ＱＡＰ２０８の内部回路ワイヤの値を評価させ、ＱＡＰの出力ｙを生成させる命令を含むハードウェア及び／又はソフトウェアである。
【００５６】
一実施形態では、二次プログラムの各多項式ｖｋ（ｘ）∈Ｆは、双線形グループ内の要素ｇｖｋ（ｓ）にマッピングされ、ここで、ｓは、クライアントによって選択された秘密値であり、ｇは、グループの生成器であり、Ｆは、ｇの離散対数のフィールドである。一実施形態では、所与の入力に対して、作業者は回路を評価して、二次プログラムの係数ｃｉに対応する内部回路ワイヤの出力及び値を得る。したがって、作業者は、ｖ（ｓ）＝Σｋ∈｛ｍ｝ｃｋ・ｖｋ（ｓ）を評価してｇｖ（ｓ）を取得し；ｗ（ｓ）及びｙ（ｓ）を計算し；ｈ（ｘ）＝ｐ（ｘ）／ｔ（ｘ）＝Σｄｈｉ・ｘｉを計算し；評価鍵内のｈｉ及びｇｓ（ｉ）項を使用してｇｈ（ｓ）を計算する。一実施形態では、正当性のプルーフ２１８は、（ｇｖ（ｓ）、ｇｗ（ｓ）、ｇｙ（ｓ）、ｇｈ（ｓ））を含み、検証者は双線形マップを使用して、ｐ（ｓ）＝ｈ（ｓ）・ｔ（ｓ）をチェックする。一実施形態では、プルーフπは、後に使用するためにブロックチェーン２２２上に格納されるか、あるいは証明者がこれらの各々と別々に対話することを必要とせずに、複数の当事者によって確認され得る。一実施形態では、正当性のプルーフの回路ストレージの評価は、トランザクションのロッキングスクリプトによって妨げられているデジタル資産をアンロックするために実行され得る。
【００５７】
一実施形態では、プルーフπはブロックチェーンネットワークにブロードキャストされ、検証者２２０はプルーフを検証するために使用される。一実施形態では、検証者２２０は、ブロックチェーン上のノードのような任意の適切な計算エンティティである。場合によって、評価鍵ＥＫ及び検証鍵ＶＫを生成する同じコンピューティングエンティティもプルーフを確かめることに更に留意されたい。一実施形態では、ブロックチェーンのノードは、検証鍵ＶＫとプルーフπを使用して支払いトランザクションを検証することができ、確認が成功した場合にコントラクトを検証することができる。プロトコルの１つの要件は、検証鍵ＶＫを知っているとしても、作業者は不正確なプルーフを提供できないことである。したがって、このプロトコルでは、共通参照文字列（ＣＲＳ：ｃｏｍｍｏｎ  ｒｅｆｅｒｅｎｃｅ  ｓｔｒｉｎｇ）は、少なくとも評価鍵ＥＫ及び検証鍵ＶＫを公開するクライアント又は信頼できる第三者によって生成される。一実施形態では、公開された検証鍵ＶＫは、任意の計算エンティティによって計算を確認するために使用され得る。
【００５８】
本明細書で説明される技術を使用して、クライアントは、ブロックチェーントランザクションの受信者の身元等のトランザクションデータを部分的に難読化することができる。一実施形態では、アンロッキングスクリプトは、受信者のアドレス及び受信者の公開鍵を公開しない。しかしながら、場合によっては、トランザクションの値（例えば転送されるデジタル資産の量）が、ブロックチェーンネットワークのノードに対して可視であることがある。一実施形態では、上述及び下述される暗号技術は、クライアントによって、ロッキングスクリプトを二次算術プログラムへ変換し、作業者が算術プログラムを解いてプルーフを生成するために利用される。
【００５９】
一般的に言うと、クライアントは、カウンターパーティ又は作業者に支払うために、Ｐ２ＰＫ及びＰ２ＰＫＨのような標準トランザクション（例えばビットコインベースのブロックチェーンネットワークで定義される標準トランザクション）を使用することができる。例えば一実施形態では、クライアントは、Ｐ２ＰＫロッキングスクリプトを算術回路に変換し、回路から導出されたパズルを含む支払いトランザクションをブロードキャストする。カウンターパーティ又は作業者は、回路を受け取り、適切な入力（例えばクライアントと作業者との間の共有秘密又は作業者の秘密鍵を使用して生成されたデジタル署名等、作業者の身元を証明する情報）を提供し、回路を実行して正当性のプルーフπを生成する。一実施形態では、プルーフは、デジタル資産をアンロックするために使用され、さらに、カウンターパーティ又は作業者を識別する情報（例えばカウンターパーティ又は作業者に関連付けられる公開鍵及び／又はデジタル署名）が、難読化されたフォーマットでブロックチェーンに記録されない場合があり得る。
【００６０】
実施形態において、検証鍵及び対応するプルーフは、上述及び／又は下述される技術に従って生成される。したがって、検証者は、該検証者が、複数の楕円曲線乗算（例えば各公開入力変数に対して１つ）と５つのペアチェックを計算し、そのうちの１つが追加のペアリング乗算を含むように、検証鍵ＶＫとプルーフπを与えられる：
【数４】
2021502746.tif 000006
【００６１】
検証鍵ＶＫ、プルーフπ及び（ａ１，ａ２，．．．，ａＮ）を所与とすると、ｔ（ｘ）がｐ（ｘ）を分割すること、したがって、（ｘＮ＋１，．．．，ｘｍ）＝ｆ（ｘ０，．．．，ｘＮ）を確かめるために、検証者は、以下に従って進む。最初に、３つのα項：
【数５】
2021502746.tif 000007
のすべてをチェックする。ここで、
【数６】
2021502746.tif 000008
【数７】
2021502746.tif 000009
及び
【数８】
2021502746.tif 000010
である。次いで、検証者は、項β：
【数９】
2021502746.tif 000011
及び
【数１０】
2021502746.tif 000012
をチェックする。最終的に、検証者は、可分性要件をチェックする：
【数１１】
2021502746.tif 000013
ここで、
【数１２】
2021502746.tif 000014
【数１３】
2021502746.tif 000015
【数１４】
2021502746.tif 000016
及び
【数１５】
2021502746.tif 000017
である。
【００６２】
したがって、上述のセクションからの表記及び本開示で記載される例を検討すると、検証は、一実施形態に従って、以下の要素のペアチェックのセットを含む：
【数１６】
2021502746.tif 000018
【００６３】
図３は、検証可能な計算の性能を調整するための図３００を示している。クライアント３０２、作業者３０４及び検証者３０６は、ブロックチェーンネットワークのノードであってよい。クライアント３０２は、任意の適切なコンピュータシステムであってよく、コンピュータシステムの１つ以上のプロセッサによって実行されると、コンピュータシステムにスマートコントラクト３０８を受け取らせる実行可能コードを含んでよい。一実施形態では、スマートコントラクト３０８は、Ｃ、Ｃ＋＋又はＪａｖａ（登録商標）のようなソースコードのような高水準プログラミング言語で符号化される。一実施形態では、コンパイラ、インタプリタ及び／又はアセンブラのようなソフトウェアを利用して、スマートコントラクト３０８を、フィールド
【数１７】
2021502746.tif 000019
からの値を担持し、加算及び乗算ゲートに接続する「ワイヤ」からなる算術回路３１０に変換し得る。算術回路は、物理的ワイヤによって接続される一連の物理ゲート（例えば７４００シリーズのゲート、フリップフロップ、バッファ、デコーダ、マルチプレクサ等のトランジスタ−トランジスタ論理（ＴＴＬ）集積回路を使用する）を含む物理回路によって実装することができる論理回路を指してよいことに留意されたい。
【００６４】
一実施形態において、クライアント３０２は、算術回路３１０及び該回路への入力３１２を作業者３０４に提供する。回路３１０を使用して、元の回路の完全な説明を提供する多項式のセットを含む二次プログラムＱを生成してもよい。いずれの場合も、作業者３０４は、入力３１２において回路Ｃ又は二次プログラムＱを実行して、１つ以上の出力３１４を生成してよい。いくつかの実施形態では、作業者（すなわち、証明者）は、入力ワイヤに割り当てられた値がｘのそれらであり、中間値が、Ｃ内の各ゲートの正しいオペレーションに対応し、出力ワイヤに割り当てられた値がｙであるように、回路ワイヤへの値の割り当てである｛Ｃ，ｘ，ｙ｝についての有効なトランスクリプトを出力として取得することが期待され；請求された出力が正しくない（すなわち、ｙ≠Ｐ（ｘ））である場合には｛Ｃ，ｘ，ｙ｝についての有効なトランスクリプトが存在しない。実施形態において、作業者は、回路ワイヤの値のサブセットを提供することが期待され、回路ワイヤの値の選択されたサブセットは、作業者に事前には知られていない。
【００６５】
実施形態において、出力ｙ、内部回路ワイヤの値（又はそのサブセット）及び評価鍵ＥＫは、正当性のプルーフ３１６を生成するために使用される。プルーフπは、ブロックチェーン上に格納されることができ、作業者３０４が複数の当事者と別個に対話することを必要とせずに、それらの複数の当事者によって検証されることができる。このようにして、検証者３０６は、公開検証鍵ＶＫとプルーフπを使用して支払いトランザクションを検証することができ、それによりコントラクトを検証することができる。場合によっては、クライアント３０２は、検証に失敗した場合、支払いトランザクションによって妨げられているデジタル資産を取り戻してよい。場合によっては、検証者３０６及びクライアント３０２は同じコンピュータシステムである。
【００６６】
図４は、本開示の実施形態の図４００を示す。具体的には、図４は、ビットコインベースのロッキング及びアンロッキングスクリプトのようなブロックチェーンベースのスクリプトでの使用に適した様々なフォーマットで符号化される楕円曲線４０２上の点を示す。
【００６７】
様々な実施形態において、楕円曲線点は、トランザクションに関連して実行されるロッキング及びアンロッキングスクリプトで符号化され得る。ビットコインベースのシステムでは、これらのスクリプトをスタックベースのスクリプト言語で書いてよい。例えば検証鍵ＶＫは、
【数１８】
2021502746.tif 000020
を含んでよく、プルーフπは、要素のセット｛π１，．．．，π８｝を含んでよく、ここで、
【数１９】
2021502746.tif 000021
及びπｊは、有限フィールド
【数２０】
2021502746.tif 000022
にわたる楕円曲線上の点である。
【００６８】
図４は、楕円曲線４０２上の点が、ロッキングスクリプト又はアンロッキングスクリプトのようなブロックチェーンスクリプトでの使用に適した、圧縮（ＰＣ）又は非圧縮（ＰＵ）符号化のいずれかを使用して表される例示的な図４００を示している。
【００６９】
一実施形態では、
【数２１】
2021502746.tif 000023
を楕円曲線上の点としてよい。Ｐ≠０の場合、点がそのアフィン座標で表される。非圧縮符号化４０４では、点Ｐは、非圧縮符号化（例えば後述するパラメータ「Ｃ」のようなプレフィックス４０６）及び２つのフィールド要素（ｘ座標４０８及びｙ座標４１０）を示す情報によって表され、圧縮符号化では、点は、そのｘ座標と、ｙ座標を一意に識別するための追加ビットによってのみ表される。したがって、実施形態において、ＰＵ＝Ｃ||Ｃ||Ｙであり、ここで、
Ｃ＝0x04
Ｘ＝FieldElements2OctetString(x)
Ｙ＝FieldElements2OctetString(y)
であり、二重管演算子（ｄｏｕｂｌｅ−ｐｉｐｅ  ｏｐｅｒａｔｏｒ）「||」は、連結演算を指し、FieldElements2OctetString()関数は、フィールド（有限フィールド）の要素を、正確に８ビットを含むオクテット列に変換するために使用され得る。圧縮符号化に関して、ＰＣ＝Ｃ||Ｘであり、ここで、
【数２２】
2021502746.tif 000024
である。
【００７０】
一実施形態において、非圧縮符号化４０４は、楕円曲線上の点のｘ座標４０８及びｙ座標４１０のような有限フィールドの点Ｐ（すなわち、
【数２３】
2021502746.tif 000025
）を含む。非圧縮符号化４０４は更に、符号化が非圧縮符号化であることを決定するために使用可能な情報（例えばｘ座標４０８及びｙ座標４１０に先頭に付加／添えられたプレフィックス４０６値）を含む。反対に、圧縮符号化４１２は、（例えば上述のような）有限フィールドの点Ｐの符号化及び符号化が圧縮符号化であることを決定するために使用可能な情報を含む。例えば圧縮符号化４１２Ａは、プレフィックス４１４及び点Ｐのｘ座標４０８を符号化し、対応するｙ座標は、プレフィックス４１４に少なくとも部分的に基づいて決定可能である。例えばプレフィックス４１４はｙ座標が偶数であることを示す。反対に、第２圧縮符号化４１２Ｂは、異なるプレフィックス４１６及び点Ｐのｘ座標４０８を符号化し、奇数のｙ座標を決定するために使用される。
【００７１】
一般的に言うと、非圧縮点ＰＵは、ＰＵが非圧縮楕円曲線点であること、点のｘ座標及び点のｙ座標を決定するために使用可能な情報を符号化する任意の適切なフォーマットで表されてよいことに留意されたい。同様に、圧縮点ＰＣは、ＰＣが圧縮楕円曲線点であることを決定するために使用可能な情報と、点のｘ座標及びｙ座標を決定するために使用可能な圧縮された情報を符号化する、任意の適切なフォーマットで表現されてよい。
【００７２】
一例として、ビットコインベースのシステムにおけるｓｅｃｐ２５６ｋ１楕円曲線の点の表現を考える。非圧縮点が表現される実施形態では、非圧縮楕円曲線Ｐの符号化ビット列における第１オクテットは、０ｘ０４であり、点のＸ座標及び点のＹ座標に対応する２つの２５６ビットの数字が続く（すなわち、Ｐ＝Ｃ||Ｘ||Ｙ）。一例として、ＤＥＲ（Ｄｉｓｔｉｎｇｕｉｓｈｅｄ  Ｅｎｃｏｄｉｎｇ  Ｒｕｌｅｓ）符号化フォーマットが使用されるが、他の適切な符号化フォーマット、例えば基本符号化規則（ＢＥＲ：Ｂａｓｉｃ  Ｅｎｃｏｄｉｎｇ  Ｒｕｌｅｓ）及び正規符号化規則（ＣＥＲ：Ｃａｎｏｎｉｃａｌ  Ｅｎｃｏｄｉｎｇ  Ｒｕｌｅｓ）も本開示の範囲内で考えられる。
【００７３】
一実施形態では、楕円曲線点の長さを含む１バイトのスクリプトオペコードが、実際の点に連結される（例えば長さは、実際の点の先頭に連結される）。例えば
ｘ＝0xe3b01684a8a8b66f8e44203db5869b4dcb74a0afc905ae9197ed74a8d6cecdcc
ｙ＝0x6424d186a23687532c8b20911defc2f42c93749b3736857912c6abe2dc3f01d1
の場合、圧縮スクリプトＰＣ及び非圧縮スクリプトＰＵは、一実施形態ではそれぞれ以下の通りである：
スクリプトＰＣ：0x21||0x03e3b01684a8a8b66f8e44203db5869b4dcb74a0afc905ae9197ed74a8d6cecdcc
スクリプトＰＵ0x41||0x04e3b01684a8a8b66f8e44203db5869b4dcb74a0afc905ae9197ed74a8d6cecdcc6424d1  86a23687532c8b20911defc2f42c93749b3736857912c6abe2dc3f01d1
【００７４】
一実施形態では、クライアントは、スマートコントラクトの当事者であり、コントラクトの実行のためにブロックチェーンを利用することを決定する。決定の一環として、クライアントは、プルーフπを公開する当事者（例えば作業者）に、クライアントによって管理するデジタル資産を移転するために、ブロックチェーンへの支払移行をポストする。上述のもののような検証者コンピュータシステムは、検証ルーチンを実行して、プルーフπが正しいことを決定することができる。
【００７５】
プロトコルに従って、クライアントは、プルーフの製作及び生成のための共通参照文字列を生成してよい。いくつかの実施態様において、共通参照文字列は、信頼される当事者（例えば第三者）によって生成される。信頼される第三者が共通参照文字列を生成してよいが、プロトコルに対する信頼された第三者の導入はオプションであり、プロトコルはクライアントと作業者を必要とし、追加の第三者なしで実行されてもよいことに注意されたい。
【００７６】
プロトコルを続けると、計算の検証はトランザクションの検証段階の一部として行われる。ビットコインベースのネットワーク等の一実施形態では、クライアント又は作業者は、ロッキングスクリプト及び／又はアンロッキングスクリプトの一部として
【数２４】
2021502746.tif 000026
を提供するように制約される。この制約は、様々な方法で達成され得る。例えば実施形態において、作業者は、そのアンロッキングスクリプトのうちの１つに
【数２５】
2021502746.tif 000027
を含む直列化されたアンロッキングトランザクションの注入を通して、検証鍵ＶＫを提供する。第２の例として、クライアントは、ロッキングスクリプトが
【数２６】
2021502746.tif 000028
及び妥当性確認段階で利用される方程式を含むトランザクションをブロードキャストし、検証鍵ＶＫを含むＳＩＧＨＡＳＨ_ＮＯＮＥ  |  ＳＩＧＨＡＳＨ_ＡＮＹＯＮＥＣＡＮＰＡＹで署名されたトランザクション入力を作成する。クライアントは、｛π１，．．．，π８｝を追加し、署名し、ブロードキャストする作業者にこの入力を渡す。更に別の例として、作業者は、固定長スクリプトハッシュ（例えば２０バイトのスクリプトハッシュ）を、実行のために支払うトランザクションのロッキングスクリプト内で使用することによって、検証鍵ＶＫを提供する。もちろん、これらは、ロッキングスクリプト、アンロッキングスクリプト又はブロックチェーンプロトコルに従ってトランザクションの検証の一部として実行される任意の他の適切なスクリプト又はオペレーションの一部として、
【数２７】
2021502746.tif 000029
がどのように提供されるかについての説明的例に過ぎない。一実施形態では、作業者は、アンロッキングスクリプトの一部として｛π１，．．．，π８｝を提供し、プルーフπは、それが出力スクリプトで設定された条件を満たす場合に許可される。
【００７７】
ビットコインベースのシステムのようなブロックチェーンベースのシステムは、一実施形態では、スクリプト（例えばビットコインベースのシステムはスクリプトをサポートする）のようなスクリプト言語に従って、オペレーション（オペコード及びコマンドとも呼ばれる）の実行をサポートする。一実施形態では、トランザクションは、ロッキング（出力）スクリプト及びアンロッキング（入力）スクリプトを含み、標準タイプのリストの１つとして識別可能である。例えばビットコインベースのシステムでは、５つの標準タイプ：すなわち、Ｐａｙ−ｔｏ−Ｐｕｂｌｉｃ−Ｋｅｙ（Ｐ２ＰＫ）、Ｐａｙ−ｔｏ−Ｐｕｂｌｉｃ−Ｋｅｙ−Ｈａｓｈ（Ｐ２ＰＫＨ）、マルチ署名、Ｐａｙ−ｔｏ−Ｓｃｒｉｐｔ−Ｈａｓｈ（Ｐ２ＳＨ）及びＯＰ_ＲＥＴＵＲＮがある。
【００７８】
本明細書で説明されるように、提案されるｚｋプロトコルを実行する際に、共通参照文字列、プルーフπ及び／又はそれらの部分のような情報は、ブロックチェーン上に格納される。さらに、検証プロセスの一部として、システムが、トランザクション検証プロセスにおいてスタック上でプッシュされた特定のエレメントを抽出し、上述のように検証段階からペアリングをチェックする場合もある。
【００７９】
トランザクションは、それらの入力及び出力に組み込まれるスクリプトとして知られる小さなプログラムを含んでよく、そのようなスクリプトは、トランザクションの出力にどのように誰がアクセスできるかを指定する。ビットコインプラットフォームでは、これらのスクリプトはスタックベースのスクリプト言語を使用して書かれる。一実施形態では、プロトコルは、トランザクションが標準トランザクションであるか非標準トランザクションであるかを決定する、トランザクションに対する様々な技術的ルール及び構文ベースの制限を含む。一実施形態では、実行スタック上にプッシュされる要素のサイズ及び入力スクリプトの合計サイズに対する制限が存在する。例えばビットコインベースのシステムでは、実行スタック上にプッシュされるすべての要素は５２０バイトに制限され、各入力スクリプトは１６５０バイトに制限される。一実施形態では、スクリプト実行後、スタックは正確に１つの非偽要素（ｎｏｎ−ｆａｌｓｅ  ｅｌｅｍｅｎｔ）を含む。入力スクリプトは、ＯＰ_ＰＵＳＨＤＡＴＡ以外のいずれのＯＰコード（リディームスクリプト部分を除く）も含むことができない。一実施形態では、ビットコインベースのシステムは、５４６サトシ（ｓａｔｏｓｈｉ）の最小出力値を必要とするが、異なるブロックチェーンシステムは、出力値として含まれるべきデジタル資産の異なる量及び／又は単位（例えばトランザクションのマイニングノードへの最小支払い）を定義してもよいことに留意されたい。一実施形態では、最小出力値はゼロである（すなわち、デジタル資産の必要な転送はない）。これらのルールを逸脱したトランザクションは非標準と見なされる。
【００８０】
検証段階の一部として、検証者（例えばクライアント）は検証鍵ＶＫ及びプルーフの要素を抽出し、それらをペアリングチェックに使用する。一実施形態では、検証チェックは、制約のセットを満たす双線形マッピングを含む。例として、例えば以下のように：すなわち、
ｅ（３，４＋５）＝２３＊９＝２２７
ｅ（３，４）＊ｅ（３，５）＝２３＊４２３＊５＝２１２２１５＝２２７
のように、形式の制約：
【数２８】
2021502746.tif 000030
を満たす双線形マッピングｅ（ｘ，ｙ）＝２ｘｙを考える。
【００８１】
上述のこのようなペアリングは、例示的な目的のためであることに留意されたい−このようなマッピングは、暗号システムでの適用には逐語的には有用ではない可能性があるが、双線形制約を確認するプロセスは、双線形マップが楕円曲線上に拡張される場合と同じままであることに留意されたい。やはり、説明のために、ビットコインスクリプトを検証段階における共通参照文字列（例えば検証鍵ＶＫ）及びプルーフπから、情報をどのように抽出して使用するかに関する例が以下に示される：
【表１】
2021502746.tif 000031
【００８２】
上記で提供された例は単に、ペアチェックの例を例示するために使用され、図２に関連して、上述したもののような追加の制約を含んでもよいことに留意されたい。
【００８３】
プルーフπの検証に関連して使用するための検証鍵ＶＫを提供するための様々な技術が存在する。図５は、クライアント５１０が、プルーフπの妥当性確認に使用される検証鍵ＶＫを供給する例示的な図５００である。一実施形態では、クライアントは、トランザクション出力５０２を生成し、このトランザクションは、出力値５０４（例えばコントラクト実行のための作業者へのデジタル資産の支払い）と、制約のセットを満たす双線形マッピングを含む検証チェックを実行するロッキングスクリプト５０８を含むか、あるいは他の方法で関連付けられる。一実施形態では、ロッキングスクリプトは、クライアントのデジタル署名に少なくとも部分的に基づいて検証鍵ＶＫの完全性を確かめる。場合によっては、ロッキングスクリプトは、妥当性確認に失敗した場合、クライアントが、トランザクションに関連して、上述のように、デジタル資産を取り戻すことができることを指定してよい。このようなトランザクションは、ブロックチェーンネットワークのノード（例えば作業者）によってマイニングされるブロックチェーンネットワークに送信されてよい。いくつかのブロックチェーンシステムでは、トランザクションは、ロッキングスクリプトに関連して、ロッキングスクリプトのサイズ（例えばバイト単位で）を示すパラメータを符号化する。ロッキングスクリプトのサイズは、図５に関連して示されるように、ロッキングスクリプトサイズ５０６と呼ばれることがある。
【００８４】
一例として、ロッキングスクリプトは、以下に基づいて記述されてよい：
【表２】
2021502746.tif 000032
【００８５】
上記で提供された例は、ロッキングスクリプトを説明するものであり、必ずしも逐語的に、ロッキングスクリプト５０８自体を説明するものではないことに留意されたい。例えば角括弧内に記述されているいくつかのフィールド−例えばクライアントの公開鍵を参照し得る「＜ＰｕｂＫｅｙ  Ｃｌｉｅｎｔ＞」−は、逐語的にはロッキングスクリプト５０８に含まれない。同様に、括弧内のいくつかのフィールドは、数学的計算に基づいてよい−例えば上述の「ＯＰ_（ｉ＋１）」は、逐語的にはロッキングスクリプトでは含まれなくてよく、むしろ、数学的計算に少なくとも部分的に基づいて決定されるオペコード又はコマンドを指す−この場合、「ｉ」は、プルーフπの要素の数を指し、したがって、プルーフπ＝｛π１，．．．，π８｝の例では、
「ＯＰ_（ｉ＋１）」は、ロッキングスクリプトにおいて、スタックベースのスクリプト言語で「ＯＰ_７」として表現されてもよい。上記の二重スラッシュ「//」の後のテキストはコメントを指し、実行可能コードに対応しないことに更に留意されたい。例えば「//ペアリングを確認する」は、実行可能コードにマップされず、コメントの後に続くテキストがペアリングの検証を行うために利用されることを人間に示すものにすぎない。
【００８６】
やはり、上述のトランザクション出力５０２は単なる例示であり、そのような変形が存在し得ること−トランザクションは、任意の適切な測定単位における任意の適切な支払額を含んでよいこと、そして、例えば上述のロッキングスクリプトの一部又は全部の機能性を利用するような、種々のロッキングスクリプトが存在して得ることに留意されたい。一般的に言うと、ロッキングスクリプト５０８は、ペアリングチェックのセットを実行する任意の適切なコマンドのセットであってよい。一実施形態では、ロッキングスクリプト５０８は、クライアントに関連付けられる少なくとも非対称公開鍵を使用する、検証鍵ＶＫの完全性チェックを含む。一実施形態では、ロッキングスクリプトは、妥当性確認に失敗した場合、クライアントがデジタル資産を取り戻すことを可能にする。一実施形態では、ロッキングスクリプト５０８は、閾値期間（例えば上述したような「＜ｎ  ｄａｙｓ＞」に対応する値）の後にトランザクションを無効としてマークするための命令を含む。
【００８７】
クライアント５１０は、本開示の他の箇所に記載されるようなクライアントであってよいが、上述のトランザクション５０２を参照するトランザクション入力５１２を生成してよく、それをカウンターパーティ（例えば有効なプルーフπを計算するとされる作業者）に伝送する。一実施形態では、トランザクション入力５１２は、トランザクション出力５０２に関連付けられる識別子５１４、トランザクション出力５０２に関連付けられるトランザクション出力インデックス５１６（例えば場合によっては、インデックスはゼロベースである）、アンロッキングスクリプト５２０、アンロッキングスクリプトサイズ５１８と呼ばれ得るアンロッキングスクリプトのサイズ（例えばバイト単位）を示すパラメータ、シーケンス番号５２２及びそれらの任意の適切な組合せを符号化してよい。例えばいくつかの実施形態では、アンロッキングスクリプトのサイズは、トランザクション入力５１２において明示的に符号化されず、他の方法で（例えばアンロッキングスクリプトの終了を示す特定の終了シーケンスの検出を通して）導出可能である。一実施形態において、アンロッキングスクリプト５１８は、検証鍵ＶＫ５２４と、クライアントに関連付けられるデジタル署名５２６を含む。場合によっては、アンロッキングスクリプト５１８は、検証プロセスの実行を制御する分岐情報（ｂｒａｎｃｈｉｎｇ  ｉｎｆｏｒｍａｔｉｏｎ）の指示のような追加情報を含む。
【００８８】
一例として、アンロッキングスクリプトは、以下に基づいて説明されてよい：
【数２９】
2021502746.tif 000033
【００８９】
上記で提供される例は、アンロッキングスクリプトの説明であり、必ずしも逐語的にアンロッキングスクリプトそれ自体ではないことに留意されたい。例えば角括弧内に記述された上記のいくつかのフィールドは、逐語的にはアンロッキングスクリプト５１８に含まれない。アンロッキングスクリプトの説明である上記の例に戻ると、アンロッキングスクリプト５１８は、検証鍵ＶＫ５２４の要素の順序付けられた又は順序付けられていないシーケンス、クライアントに関連付けられるデジタル署名５２６及び分岐情報を含んでよい。一実施形態において、デジタル署名５２６はハッシュ型フラグを含む。一実施形態にいおいて、ハッシュフラグは、ビットコインベースのシステムに従ってＳＩＧＨＡＳＨ_ＮＯＮＥ  |  ＳＩＧＨＡＳＨ_ＡＮＹＯＮＥＣＡＮＰＡＹである。アンロッキングスクリプト５１８は、トランザクションを検証するためにロッキングスクリプトとともに使用可能な実行制御情報を含んでもよい。例えば上述の例では、「１」は、スクリプトがアンロッキングスクリプトの制御ステートメントの最初の分岐（例えばＯＰ_ＥＬＳＥ分岐の代わりにＯＰ_ＩＦ分岐）に入るべきであることを示す。
【００９０】
一実施形態では、作業者５２８は、プルーフπ５３０を計算し、それを作業者に関連付けられるデジタル署名５３２とともにアンロッキングスクリプト５１８に付加し、トランザクションを（例えばブロックチェーンネットワークのクライアント及び／又は１つ以上のノードに）ブロードキャストする。
【００９１】
一例として、プルーフと作業者のデジタル署名を有するアンロッキングスクリプトは、以下に基づいて説明されてよい：
【数３０】
2021502746.tif 000034
【００９２】
したがって、一実施形態では、すぐ上の説明によるアンロッキングスクリプトは、ロッキングスクリプトによって出力に課された条件を満たすことができ、デジタル資産（例えば出力値によって示されるような）を使うことを可能にすることができる。
【００９３】
プルーフπの妥当性確認に関連して使用するための検証鍵ＶＫを提供するための様々な技術が存在する。図６は、プルーフπの妥当性確認に使用される検証鍵ＶＫを作業者が供給する例示的な図６００である。トランザクション出力６０２は、ビットコインベースのシステムに従ってよく、出力値６０４、ロッキングスクリプト６０６（任意に、いくつかのシステムにおいて）及びロッキングスクリプト６０８を含んでよい。一実施形態では、トランザクションは、ビットコインベースのシステムに従うＰａｙ−ｔｏ−Ｓｃｒｉｐｔ−Ｈａｓｈ（Ｐ２ＳＨ）トランザクションである。一実施形態では、トランザクション出力６１２は、ビットコインベースのシステムに従い、上記で図５に関連して説明したように、トランザクションＩＤ  ６１４、出力インデックス６１６、アンロッキングスクリプトサイズ６２０、アンロッキングスクリプト６１８及びシーケンス番号６２２を含む。図６で説明されるトランザクションの構造は、図５で説明されるものに従ってよいが、図６は、特に、Ｐ２ＳＨトランザクションに従ってロッキングスクリプト６０８及びアンロッキングスクリプト６１８を含んでよいことに留意されたい。クライアント６１０は、検証鍵ＶＫ及びリディームスクリプト６２８を生成し、それらを作業者６２４に提供してよい。
【００９４】
一実施形態では、ブロックチェーンシステムは、様々なタイプのトランザクションをサポートする。一実施形態では、サポートされるトランザクション（例えば標準トランザクション）は、ビットコインベースのシステムに従うＰａｙ−ｔｏ−Ｓｃｒｉｐｔ−Ｈａｓｈ（Ｐ２ＳＨ）トランザクションのようなスクリプトハッシュベースのトランザクションである。一般的に言うと、スクリプトハッシュベースのトランザクションは、任意のトランザクションを指し、この場合、ロッキングスクリプトの有効性を検証することは、指定のハッシュ値に一致するスクリプトを提供することを含む。例えばビットコインベースのＰ２ＳＨトランザクションでは、アンロッキングスクリプト６２０は、リディームスクリプト６２８を含み、ロッキングスクリプト６０８は、アンロッキングスクリプトによって供給されるリディームスクリプトのハッシュが、指定の値と一致する少なくとも１つの条件を含む。例えばビットコインベースのシステムでは、ロッキングスクリプトは以下に基づいて記述され得る：
OP_HASH160  <20-byte  hash  of  redeem  script>  OP_EQUAL
【００９５】
場合によって、作業者６２４は、検証段階で使用される検証鍵ＶＫ６２６を提供する。検証段階をチェックするアンロック条件を、一実施形態では、リディームスクリプトに格納することができる。一実施形態では、Ｐ２ＳＨトランザクションのロッキングスクリプトは、リディームスクリプトのハッシュを含み、場合によっては、リディームスクリプトは、秘密に保持され（例えば作業者によって暗号化される）、出力値の転送を引き起こす指示があるときのみ明らかにされる。
【００９６】
一実施形態では、クライアント６１０は、リディームスクリプトを識別することによってＰ２ＳＨ未使用トランザクション出力を作成し、それにハッシュ（例えばＨＡＳＨ１６０）を適用する。ＵＴＸＯを転送するために、クライアントは、リディームスクリプトを含むか、かつ／又は他の方法で参照する入力スクリプト（これはＵＴＸＯを参照する）を作成する。ブロックチェーンベースのシステムは、リディームスクリプトに含まれ得るデータのタイプ又は量に関する制限を有することがあるが、一実施形態では、リディームスクリプトは任意のデータを格納するのに適していることに留意されたい。例えばビットコインベースのシステムに関連して、スタックに公開できるデータのサイズに対する制限が存在する可能性がある（例えばＰＵＳＨＤＡＴＡオペレーションは５２０バイトのデータに限定される）。一実施形態では、リディームスクリプトは、図４に関連して説明したように、圧縮点ＰＣと非圧縮点ＰＵを含む。したがって、一実施形態では、ビットコインベースのプロトコルに従ってリディームスクリプトに格納することができる楕円曲線点の最大数は、１５個の圧縮点（例えば１５個の点×３４バイト／点＝５１０バイト）又は７つの非圧縮点（７つの点×６６バイト／点＝４６２バイト）である。一実施形態では、アンロッキングスクリプト６１８は、プルーフ６３０と、リディームスクリプト６２８と、ロッキングスクリプト６０８内に符号化された条件のセットを満たすように一緒に使用され得るコマンド（例えばオペコード）とを含む。
【００９７】
図７は、一実施形態によるリディームスクリプトを生成するためのプロセス７００の説明図である。一実施形態では、プロセス７００は、ハードウェア、ソフトウェア又はそれらの組合せを使用して実装される。プロセスを実行するための適切なシステムは、図６の説明に関連してＰ２ＳＨアンロッキングスクリプトを供給する作業者を含む。
【００９８】
一実施形態では、システムは、検証鍵ＶＫが十分なカーディナリティ（ｃａｒｄｉｎａｌｉｔｙ）のものであると判断する。一実施形態では、システムは、検証鍵の各要素と、一連の制約をチェックするためのスクリプトとを含む、リディームスクリプトのサイズを決定し７０２、ここで、リディームスクリプト及びプルーフπは、対応するロッキングスクリプトをアンロックするのに十分である。システムは、このようなリディームスクリプトのサイズが所定の閾値を超えるかどうかを決定してよい７０４。所定の閾値は、ブロックチェーンプロトコルによって課されるサイズ制限に基づいてよい−例えばブロックチェーンプロトコルは、リディームスクリプトが５２０バイト以下のサイズであることを要求することがある。リディームスクリプトが十分なサイズである場合、システムは、リディームスクリプト及びアンロッキングスクリプトを生成し７０６、この場合、リディームスクリプトは、検証鍵と、制約のセットをチェックするためのスクリプトを含み、アンロッキングスクリプトは、プルーフπを含み、リディームスクリプト及びアンロッキングスクリプトは、一緒に、支払いトランザクションを検証するのに十分なコマンドのセットを含む。
【００９９】
例えば検証鍵ＶＫのカーディナリティが１６より小さい場合、下記のとおりであってよい：
【表３】
2021502746.tif 000035
ここで、リディームスクリプト及びアンロッキングスクリプトは、ロッキングスクリプトをアンロックするのに十分である。
【０１００】
リディームスクリプトが所定の閾値を超える場合、システムは、リディームスクリプトに先行するアンロッキングスクリプトの一部に検証鍵ＶＫの１つ以上の要素を格納するアンロッキングスクリプトを生成し７０８、これにより、リディームスクリプトの合計サイズが閾値内になり、検証鍵の要素と上述の制約条件とともにリディームスクリプトを生成する７１０。一実施形態では、検証鍵ＶＫの１つ以上の要素は、アンロッキングスクリプト内の他の場所で符号化されてもよい。例えばＶＫのカーディナリティが１５を超える場合、下記のとおりであってよい：
【表４】
2021502746.tif 000036
ここで、リディームスクリプト及びアンロッキングスクリプトは、ロッキングスクリプトをアンロックするのに十分である。
【０１０１】
したがって、ロッキングスクリプトにおいて妥当性確認段階で必要な工程を符号化することにより、トランザクションの妥当性確認はｚｋ−ｐｒｏｔｏｃｏｌの妥当性段階と同等のプロセスとなるはずである。一実施形態において、ＯＰ_ＶＥＲＩＦＹＰＲＯＯＦオペコードは、以下のように使用され得る：
【表５】
2021502746.tif 000037
【０１０２】
アンロッキングスクリプト及びロッキングスクリプトは、任意の適切な方法で実装されてよい。アンロッキングスクリプトは、該アンロッキングスクリプトが＜π１＞．．＜π８＞及び検証鍵ＶＫを符号化する任意の適切な方法で実装される。同様に、ロッキングスクリプトは、πｉ及び
【数３１】
2021502746.tif 000038
が抽出され、ペアリングコールが行われる、任意の適切な方法で実装されてよい。一実施形態では、上述のＯＰ_ＰＡＩＲＩＮＧは、方程式ｙ２＝ｘ３＋３によって定義されるｂｎ１２８曲線のような効率的な双線形マッピングを有する楕円曲線をサポートするオペコードである。
【０１０３】
図８は、本開示の少なくとも１つの実施形態を実施するために使用することができるコンピューティングデバイス８００の例示的な簡略化されたブロック図である。様々な実施形態において、コンピューティングデバイス８００を使用して、上記で図示及び説明されたシステムのいずれかを実装することができる。例えばコンピューティングデバイス８００は、データサーバ、ウェブサーバ、ポータブルコンピューティングデバイス、パーソナルコンピュータ又は任意の電子コンピューティングデバイスとして使用するために構成され得る。図８に図示されるように、コンピューティングデバイス８００は、実施形態において、バスサブシステム８０４を介して複数の周辺サブシステムと通信し、動作可能に結合される１つ以上のプロセッサ８０２を含むことができる。いくつかの実施形態において、これらの周辺サブシステムは、メモリサブシステム８０８及びファイル／ディスクストレージサブシステム８１０を含むストレージサブシステム８０６と、１つ以上のユーザインタフェース入力デバイス８１２と、１つ以上のユーザインタフェース出力デバイス８１４と、ネットワークインタフェースサブシステム８１６を含む。このようなストレージサブシステム８０６は、情報の一時的又は長期的な記憶のために使用され得る。
【０１０４】
いくつかの実施形態において、バスサブシステム８０４は、コンピューティングデバイス８００の様々な構成要素及びサブシステムが、意図されるとおりに互いに通信することを可能にする機構を提供する。バスサブシステム８０４は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施形態は、複数のバスを利用する。いくつかの実施形態では、ネットワークインタフェースサブシステム８１６は、他のコンピューティングデバイス及びネットワークへのインタフェースを提供する。ネットワークインタフェースサブシステム８１６は、いくつかの実施形態では、コンピューティングデバイス８００からデータを受け取り、他のシステムにデータを送信するためのインタフェースとして機能する。いくつかの実施態様において、バスサブシステム８０４は、詳細、検索語等のようなデータを通信するために利用される。
【０１０５】
いくつかの実施形態において、ユーザインタフェース入力デバイス８１２は、キーボード等の１つ以上のユーザ入力デバイス；一体型マウス、トラックボール、タッチパッド又はグラフィックスタブレット等のポインティングデバイス；スキャナ；バーコードスキャナ；ディスプレイに組み込まれたタッチスクリーン；音声認識システム、マイクロフォン等のオーディオ入力デバイス；及び他のタイプの入力デバイスを含む。一般に、「入力デバイス」という用語の使用は、情報をコンピューティングデバイス８００に入力するためのあらゆる可能なタイプのデバイス及び機構を含むように意図される。いくつかの実施形態において、１つ以上のユーザインタフェース出力デバイス８１４は、ディスプレイサブシステム、プリンタ又はオーディオ出力デバイス等の非視覚的ディスプレイ等を含む。いくつかの実施形態において、ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）や発光ダイオード（ＬＥＤ）ディスプレイ、投影装置等のフラットパネルデバイス又は他のディスプレイデバイスを含む。一般に、「出力デバイス」という用語の使用は、コンピューティングデバイス８００からの情報を出力するためのあらゆる可能なタイプのデバイス及び機構を含むように意図される。１つ以上のユーザインタフェース出力デバイス８１４を使用して、例えばユーザインタフェースを提示し、そのような対話が適切であり得るときに、説明されたプロセス及びその変形を実行するアプリケーションとのユーザ対話を容易にすることができる。
【０１０６】
いくつかの実施形態において、ストレージサブシステム８０６は、本開示の少なくとも１つの実施形態の機能を提供する基本プログラミング及びデータ構成体を記憶するためのコンピュータ読取可能記憶媒体を提供する。アプリケーション（プログラム、コードモジュール、命令）は、いくつかの実施形態において１つ以上のプロセッサによって実行されるとき、本開示の１つ以上の実施形態の機能を提供し、実施形態においては、ストレージサブシステム８０６に記憶される。これらのアプリケーションモジュール又は命令を、１つ以上のプロセッサ８０２によって実行することができる。様々な実施形態において、ストレージサブシステム８０６は更に、本開示に従って使用されるデータを記憶するためのリポジトリを提供する。いくつかの実施形態では、ストレージサブシステム８０６は、メモリサブシステム８０８及びファイル／ディスクストレージサブシステム８１０を含む。
【０１０７】
実施形態において、メモリサブシステム８０８は、複数のメモリ、例えばプログラム実行中の命令及びデータの格納のためのメインランダムアクセスメモリ（ＲＡＭ）８１８及び／又は固定命令を格納することができる読取専用メモリ（ＲＯＭ）８２０を含む。いくつかの実施形態において、ファイル／ディスクストレージサブシステム８１０は、プログラムファイル及びデータファイルのための非一時的な永続的（不揮発性）ストレージを提供し、ハードディスクドライブ、関連する取り外し可能媒体と共にフロッピーディスクドライブ、コンパクトディスク読取専用メモリ（ＣＤ−ＲＯＭ）ドライブ、光学ドライブ、取り外し可能媒体カートリッジ又は他の同様の記憶媒体を含むことができる。
【０１０８】
いくつかの実施形態において、コンピューティングデバイス８００は、少なくとも１つのローカルクロック８２４を含む。ローカルクロック８２４は、いくつかの実施形態では、特定の開始日から発生したティック（ｔｉｃｋｓ）の数を表すカウンタであり、いくつかの実施形態では、コンピューティングデバイス８００内に一体的に配置される。様々な実施形態では、ローカルクロック８２４は、特定のクロックパルスにおいてコンピューティングデバイス８００のためのプロセッサ及びそこに含まれるサブシステム内でデータ転送を同期させるために使用され、コンピューティングデバイス８００と、データセンター内の他のシステムとの間の同期オペレーションを調整するために使用され得る。別の実施形態では、ローカルクロックは、プログラム可能な間隔のタイマである。
【０１０９】
コンピューティングデバイス８００は、ポータブルコンピュータデバイス、タブレットコンピュータ、ワークステーション又は以下に説明される任意の他のデバイスを含む、様々なタイプのいずれかとすることができる。加えて、コンピューティングデバイス８００は、いくつかの実施形態では、１つ以上のポート（例えばＵＳＢ、ヘッドフォンジャック、ライトニングコネクタ等）を通してコンピューティングデバイス８００に接続することができる別のデバイスを含むことができる。実施形態において、このようなデバイスは、光ファイバコネクタを受け入れるポートを含む。したがって、いくつかの実施形態において、このデバイスは、光信号を、処理のためにデバイスをコンピューティングデバイス８００に接続するポートを通して伝送される電気信号に変換する。コンピュータ及びネットワークの絶えず変化する性質のために、図８に示されるコンピューティングデバイス８００の説明は、デバイスの好ましい実施形態を説明する目的のための特定の例としてのみ意図されている。図８に示されるシステムよりも多くの又は少ない構成要素を有する多くの他の構成も可能である。
【０１１０】
上述の実施形態は、本発明を限定するものではなく、例示するものであり、当業者は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく、多くの代替の実施形態を設計することができることに留意されたい。請求項において、括弧内に付したすべての引用符号は、請求項を限定するものと解釈されるべきではない。「備えた（ｃｏｍｐｒｉｓｉｎｇ）」及び「備える（ｃｏｍｐｒｉｓｅｓ）」等の用語は、いずれかの請求項又は明細書全体に列挙されるもの以外の要素又はステップの存在を除外するものではない。本明細書において、「備える」は「含む又はから構成される」を意味し、「備えた」又は「含む又はから構成された」を意味する。要素の単数形参照は、そのような要素の複数形参照を除外するものではなく、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって及び適切にプログラムされたコンピュータによって実装されてよい。いくつかの手段を列挙するデバイスクレームにおいては、これらの手段のいくつかが、１つの同じハードウェアアイテムによって具体化されてよい。特定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組合せを有利に利用することができないことを示すものではない。
【０１１１】
本明細書において引用された刊行物、特許出願及び特許を含むすべての文献は、それにより、参照によって組み込まれるように各文献を個々に具体的に示し、本明細書においてその全体を述べたものと同じ限度で、参照によって本明細書に組み込まれる。
【図１】
2021502746.tif 000039
【図２】
2021502746.tif 000040
【図３】
2021502746.tif 000041
【図４】
2021502746.tif 000042
【図５】
2021502746.tif 000043
【図６】
2021502746.tif 000044
【図７】
2021502746.tif 000045
【図８】
2021502746.tif 000046
【国際調査報告】
2021502746.tif 000047
2021502746.tif 000048
2021502746.tif 000049