(57)【要約】  本発明は、コンセンサスベースのブロックチェーンのような分散台帳技術に関する。スマートコントラクトから導出された算術回路を縮小するためのコンピュータ実装方法が説明される。本発明は、例えばビットコインブロックチェーンであり得るブロックチェーンネットワークを使用して実装される。第１プログラミング言語で符号化された条件のセットが取得される。条件のセットは、第２プログラミング言語で符号化された条件のプログラムのセットに変換される。条件のプログラムのセットは、予めコンパイルされたプログラムコードに予めコンパイルされる。予めコンパイルされたプログラムコードは、算術回路に変形される。算術回路を縮小して縮小算術回路を形成し、縮小算術回路を格納する。
2021502634.tif 000002
【特許請求の範囲】
【請求項１】
第１プログラミング言語で符号化された条件のセットを取得するステップと；
前記条件のセットを、第２プログラミング言語で符号化された条件のプログラムセットに変換するステップと；
前記条件のプログラムセットを予めコンパイルされたプログラムコードに予めコンパイルするステップと；
前記予めコンパイルされたプログラムコードを算術回路に変形するステップと；
前記算術回路を縮小して縮小算術回路を形成するステップと；
前記縮小算術回路を格納するステップと；
を含む、コンピュータ実施される方法。
【請求項２】
前記算術回路を縮小することは、前記算術回路を最小化して前記縮小算術回路を生成することを含む、
請求項１に記載のコンピュータ実施される方法。
【請求項３】
前記算術回路は、
論理ゲート及び入力を表すノードのセット及び
前記論理ゲートと前記入力の間のワイヤを表す前記ノードを接続するエッジのセット、
を含む有向非巡回グラフである、
請求項１又は２に記載のコンピュータ実施される方法。
【請求項４】
前記算術回路は、前記ノードのセットのうちの適切なサブセットを含む論理サブモジュールを含み、
前記算術回路を縮小することは、前記算術回路の残り部分とは別に前記論理サブモジュールを縮小することを含む、
請求項３に記載のコンピュータ実施される方法。
【請求項５】
前記論理サブモジュール内の前記論理ゲートの間の前記ワイヤは、幅が１ビットである、
請求項４に記載のコンピュータ実施される方法。
【請求項６】
前記算術回路は、前記ノードのセットのうちの他のサブセットを含む別の論理サブモジュールを更に含み、前記ノードのサブセット及びノードの前記他のサブセットは交差しておらず、
前記算術回路を縮小することは、第２プロセッサコアを使用して前記他の論理サブモジュールを縮小することと並列に第１プロセッサコアを使用して前記論理サブモジュールを縮小することを更に含む、
請求項４又は５に記載のコンピュータ実施される方法。
【請求項７】
計算リソース使用を最適化するためのヒューリスティックに従って、前記論理サブモジュールを前記第１プロセッサコアに割り当てて、前記他の論理サブモジュールを前記第２プロセッサコアに割り当てるステップを更に含む、
請求項６に記載のコンピュータ実施される方法。
【請求項８】
前記ヒューリスティックは、最長処理時間貪欲法である、
請求項７に記載のコンピュータ実施される方法。
【請求項９】
前記算術回路を縮小することは、
前記算術回路のプライムインプリカントのセットを決定することと、
前記プライムインプリカントのセットを、第１積項及び第２積項を含む和の積として表すことと、
前記第１積項及び前記第２積項を簡略化することと、
を含む、請求項１乃至８のいずれかに記載のコンピュータ実施される方法。
【請求項１０】
前記第１積項及び前記第２積項を簡略化することは、ブール最小化ルールを前記第１積項及び前記第２積項に適用することによって実行される、
請求項９に記載のコンピュータ実施される方法。
【請求項１１】
前記第２プログラミング言語はＣ＋＋である、
請求項１乃至１０のいずれかに記載のコンピュータ実施される方法。
【請求項１２】
前記第１プログラミング言語は、機械読取可能な金融コントラクトを構成するために考案されたコンピュータプログラミング言語である、
請求項１乃至１１のいずれかに記載のコンピュータ実施される方法。
【請求項１３】
前記縮小算術回路を説明する多項式のセットを含む二次プログラムを生成するステップと、
前記二次プログラムの実行においてブロックチェーンネットワーク内のノードによって使用されるパラメータのセットを生成するステップと、
を更に含む、請求項１乃至１２のいずれかに記載のコンピュータ実施される方法。
【請求項１４】
システムにおいて。
プロセッサと、
前記プロセッサによって実行された結果として、前記システムに、請求項１乃至１３のいずれかに記載のコンピュータ実施される方法を実行させる、実行可能命令を含むメモリと、
を含むシステム。
【請求項１５】
コンピュータシステムのプロセッサによって実行された結果として、前記コンピュータシステムに、請求項１乃至１３のいずれかに記載のコンピュータ実施される方法を少なくとも実行させる、実行可能命令を記憶している非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ブロックチェーン技術に関し、より具体的には、スマートコントラクトを算術回路に変換し、算術回路を最小化することによって、スマートコントラクトを最適化し、難読化（ｏｂｆｕｓｃａｔｉｎｇ）することに関する。本発明は更に、暗号技術及び数学技術を利用して、ブロックチェーンネットワーク上で行われる電子転送に関連してセキュリティを実施する。本発明は、スマートコントラクトの生成及び実行における使用に特に適しているが、これらに限定されない。
【背景技術】
【０００２】
本明細書において、「ブロックチェーン」という用語は、いくつかのタイプの電子的なコンピュータベースの分散台帳のいずれかを指してよい。これらは、コンセンサスベースのブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳及びそれらの変形を含む。最も広く知られているブロックチェーン技術の用途はビットコイン台帳であるが、他のブロックチェーンの実装が提案され、開発されている。便宜性及び例示の目的のために、ビットコインの例が本開示で説明される技術の有益な用途として参照され得るが、ビットコインは、本開示で説明される技術が適用され得る多くの用途の１つに過ぎない。しかしながら、本発明は、ビットコインブロックチェーンでの使用に限定されず、非商業的用途を含む代替的なブロックチェーン実装及びプロトコルも本発明の範囲内に含まれることに留意されたい。例えば本開示に記載される技術は、暗号通貨の交換が起こるかどうかにかかわらず、トランザクション内で符号化され得る制約に関して、ビットコインと同様の制限を有する他のブロックチェーン実装を利用する利点を提供するであろう。
【０００３】
ブロックチェーンは、ブロックにより構成される、コンピュータベースの非集中型のシステムとして実装されるピアツーピア電子台帳であり、ブロックはトランザクション及び他の情報により構成され得る。いくつかの例において、「ブロックチェーントランザクション」は、データ及び条件のセットを含むフィールド値の構造化されたコレクションを符号化する入力メッセージを指し、この場合、条件のセットを満たすことは、フィールドのセットがブロックチェーンデータ構造に書き込まれるための前提条件である。例えばビットコインでは、各トランザクションは、ブロックチェーンシステムの参加者間のデジタル資産の制御の移転を符号化し、少なくとも１つの入力及び少なくとも１つの出力を含む、データ構造である。いくつかの実施形態において、「デジタル資産」は、使用権に関連付けられるバイナリデータを指す。デジタル資産の例は、ビットコイン、イーサ、ライトコインを含む。いくつかの実装において、デジタル資産の制御を移転することは、デジタル資産の少なくとも一部を第１エンティティから第２エンティティに再関連付けすることによって実行され得る。ブロックチェーンの各ブロックは、ブロックが一緒にチェーン化されることになり、その始めからブロックチェーンに書き込まれたすべてのトランザクションの永続的で変更不能なレコードを作成するように、以前のブロックのハッシュを含んでよい。
【０００４】
いくつかの例において、「スタックベースのスクリプト言語」は、様々なスタックベース又はスタック指向の実行モデル及びオペレーションをサポートするプログラミング言語を指す。すなわち、スタックベースのスクリプト言語は、スタックを利用してもよい。スタックでは、値をスタックの先頭（ｔｏｐ）にプッシュすることができ、あるいはスタックの先頭からポップすることができる。スタックに対して実行される様々なオペレーションの結果、１つ以上の値を、スタックの先頭へプッシュすること又はスタックの先頭からポップすることになり得る。例えばＯＰ_ＥＱＵＡＬオペレーションは、スタックから上位２つのアイテムをポップし、それらを比較し、結果（例えば等しい場合は１、等しくない場合は０）をスタックの先頭にプッシュする。ＯＰ_ＰＩＣＫのようにスタックに対して実行される他のオペレーションは、スタックの先頭以外の位置からアイテムを選択することを可能にすることがある。本実施形態のいくつかで用いられるいくつかのスクリプト言語では、少なくとも２つのスタック、すなわち、メインスタックと代替スタックが存在し得る。スクリプト言語のいくつかのオペレーションは、あるスタックの先頭から別のスタックの先頭にアイテムを移動させることができる。例えばＯＰ_ＴＯＡＬＴＳＴＡＣＫは、メインスタックの先頭から代替スタックの先頭に値を移動させる。スタックベースのスクリプト言語は、場合によっては、厳密な後入れ先出し（ＬＩＦＯ）方式のオペレーションのみに限定されないことに留意されたい。例えばスタックベースのスクリプト言語は、スタック内のｎ番目のアイテムを先頭にコピー又は移動させるオペレーション（例えばそれぞれ、ビットコインにおけるＯＰ_ＰＩＣＫ及びＯＰ_ＲＯＬＬ）をサポートしてもよい。スタックベースのスクリプト言語で書かれたスクリプトは、ベクトル、リスト又はスタックのような任意の適切なデータ構造を使用して実装することができる論理スタック上にプッシュされ得る。
【０００５】
トランザクションがブロックチェーンに書き込まれるためには、「検証（ｖａｌｉｄａｔｅ）」されなければならない。ネットワークノード（マイニングノード）は、各トランザクションが有効であることを保証するための作業を実行し、無効なトランザクションはネットワークから拒絶される。ノードは、他のノードとは異なる有効性の標準を有することができる。ブロックチェーンの有効性はコンセンサスベースであるので、トランザクションが有効であることに大多数のノードが同意した場合、トランザクションは有効であるとみなされる。ノードにインストールされているソフトウェアクライアントは、ＵＴＸＯのロッキングスクリプト及びアンロッキングスクリプトを実行することにより、部分的に未使用トランザクション（ＵＴＸＯ：ｕｎｓｐｅｎｔ  ｔｒａｎｓａｃｔｉｏｎ）を参照するトランザクションに対するこの検証作業を実行する。ロッキングスクリプト及びアンロッキングスクリプトの実行がＴＲＵＥに評価され、適用可能である場合に他の検証条件が満たされる場合、トランザクションはノードによって検証される。検証されたトランザクションは、他のネットワークノードに伝搬され、そこで、マイニングノードは、トランザクションをブロックチェーンに含めるように選択することができる。したがって、トランザクションがブロックチェーンに書き込まれるためには、ｉ）トランザクションは、該トランザクションを受け取った最初のノードによって検証されなければならず、トランザクションが検証された場合、ノードはトランザクションをネットワーク内の他のノードに中継し；ｉｉ）トランザクションは、マイニングノードによって構築された新しいブロックに追加されなければならず；ｉｉｉ）マイニングされなければならない、すなわち、過去のトランザクションの公開台帳に追加されなければならない。トランザクションを実質的に不可逆にするために、十分な数のブロックがブロックチェーンに追加されると、トランザクションは確認されたとみなされる。
【０００６】
ブロックチェーン技術は、暗号通貨実装の使用について最も広く知られているが、デジタル起業家達は、新たなシステムを実装するために、ビットコインが基づいている暗号セキュリティシステムと、ブロックチェーン上に格納することができるデータとの双方の使用を探求し始めている。暗号通貨の領域に限定されない自動化タスク及びプロセスにブロックチェーンを使用することができれば非常に有利であろう。そのようなソリューションは、それらの用途はより多方面にわたるが、ブロックチェーンの利点（例えば永続性、イベントの改ざん防止レコード、分散処理等）を利用することができるであろう。
【０００７】
本開示は、１つ以上のブロックチェーンベースのコンピュータプログラムの技術的側面を説明する。ブロックチェーンベースのコンピュータプログラムは、ブロックチェーントランザクション内に記録される機械読取可能で実行可能なプログラムであってよい。ブロックチェーンベースのコンピュータプログラムは、結果を生成するために入力を処理することができ、次いで、それらの結果に依存してアクションを実行させることができるルールを含んでよい。現在の研究の１つの分野は、「スマートコントラクト」の実装のためのブロックチェーンベースのコンピュータプログラムの使用である。自然言語で書かれる伝統的な契約とは異なり、スマートコントラクトは、機械読み取り可能な契約又は合意の条件の実行を自動化するように設計されるコンピュータプログラムであってよい。
【０００８】
実施形態において、特定のエンティティとの対話を、スマートコントラクトの特定のステップで符号化することができるが、スマートコントラクトは、そうでなければ、自動的に実行され、自己強制される可能性がある。それは、機械読み取り可能かつ実行可能である。いくつかの例では、自動実行は、ＵＴＸＯの移転を可能にするために成功裏に実行されるスマートコントラクトの実行を指す。なお、このような例では、ＵＴＸＯの移転送を可能にする「エンティティ」は、何らかの秘密の知識を証明することを必要とされることなく、アンロッキングスクリプトを作成することができるエンティティを指すことに留意されたい。言い換えると、データのソース（例えばアンロッキングトランザクションを作成したエンティティ）が暗号秘密（例えば秘密の非対称鍵、対称鍵等）へのアクセスを有することを確かめることなく、アンロッキングトランザクションを検証することができる。加えて、このような例では、自己強制とは、制約に応じてアンロッキングトランザクションを強制させているブロックチェーンネットワークの検証ノードを指す。いくつかの例では、ＵＴＸＯを「アンロック」すること（ＵＴＸＯの「消費（ｓｐｅｎｄｉｎｇ）」としても知られる）は、技術的な意味で使用されており、ＵＴＸＯを参照して、有効として実行するアンロッキングトランザクションを作成することを指す。
【０００９】
ブロックチェーントランザクションの出力は、ロッキングスクリプトと、ビットコイン等のデジタル資産の所有権に関する情報を含む。ロッキングスクリプトは、障害（ｅｎｃｕｍｂｒａｎｃｅ）とも呼ばれることがあり、ＵＴＸＯを移転するために満足する必要がある条件を指定することにより、デジタル資産を「ロック」する。例えばロッキングスクリプトは、関連するデジタル資産をアンロックするために、特定のデータがアンロッキングスクリプトで提供されることを必要とする可能性がある。ロッキングスクリプトは、ビットコインでは「ｓｃｒｉｐｔＰｕｂＫｅｙ」としても知られる。デジタル資産をアンロックするためにデータの提供を当事者に要求する技術は、ロッキングスクリプト内部にデータのハッシュを埋め込むことを伴う。しかしながら、これは、ロッキングスクリプトが作成される時点でデータが未定である（例えば未知で固定されていない）場合に問題を提示する。
【００１０】
本発明は、検証方法／システムとして、かつ／又はブロックチェーントランザクションの検証を制御するための制御方法／システムとして説明され得る。いくつかの実施形態では、検証されたブロックチェーントランザクションの結果、ブロックチェーン上のトランザクションの記録をもたらし、これは、いくつかの用途では、ブロックチェーンを介したデジタル資産の交換又は移転をもたらすことがある。デジタル資産は、ブロックチェーンによって管理されるリソースの単位であってよい。デジタル資産は、実施形態によっては、暗号通貨として使用され得るが、デジタル資産は、実施形態によっては、他のコンテキストにおいて追加的又は代替的に使用可能であるように企図される。本発明は、デジタル資産の制御に適用可能であるが、本質的に技術的であり、デジタル資産の移転を必ずしも伴わずに、ブロックチェーンデータ構造を利用する他のコンテキストで使用できることに留意されたい。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
したがって、これらの態様の１つ以上においてブロックチェーン技術を改善する方法及びシステムを提供することが望ましい。このような改善されたソリューションが、現在では考案されている。したがって、本発明によれば、添付の特許請求の範囲で定義される方法が提供される。
【課題を解決するための手段】
【００１２】
したがって、コンピュータ実施される方法を提供することが望ましく、コンピュータ実施される方法は、
第１プログラミング言語で符号化された条件のセットを、第２プログラミング言語で符号化された条件のプログラムセット（ｐｒｏｇｒａｍｍａｔｉｃ  ｓｅｔ）に変換するステップと；
条件のプログラムセットを予めコンパイルされたプログラムコードに予めコンパイルするステップと；
予めコンパイルされたプログラムコードを算術回路に変形する（ｔｒａｎｓｆｏｒｍｉｎｇ）ステップと；
算術回路を縮小（ｒｅｄｕｃｉｎｇ）して縮小算術回路（ｒｅｄｕｃｅｄ  ａｒｉｔｈｍｅｔｉｃ  ｃｉｒｃｕｉｔ）を形成するステップと；
を含む。
【００１３】
方法は、第１プログラミング言語で符号化された条件のセットを取得するステップを含んでよい。これは、変換するステップの前に実行されてよい。
【００１４】
方法は、縮小算術回路を格納するステップを含んでよい。
【００１５】
算術回路を縮小することは、算術回路を最小化して縮小算術回路を生成することを含んでよい。
【００１６】
算術回路は、有向非巡回グラフ（ｄｉｒｅｃｔｅｄ  ａｃｙｃｌｉｃａｌ  ｇｒａｐｈ）であってよい。あるいはまた、有向非巡回グラフは、論理ゲート及び入力を表すノードのセットを含んでよい。あるいはまた、有向非巡回グラフは、論理ゲートと入力の間のワイヤを表すノードをエッジのセットを含んでよい。
【００１７】
算術回路は、ノードのセットのうちの適切なサブセット（ｐｒｏｐｅｒ  ｓｕｂｓｅｔ）を含む論理サブモジュールを含んでよい。あるいはまた、算術回路を縮小することは、算術回路の残り部分とは別に論理サブモジュールを縮小することを含んでよい。
【００１８】
論理サブモジュール内の論理ゲートの間のワイヤは、幅が１ビットであってよい。
【００１９】
算術回路は、ノードのセットのうちの他のサブセットを含む別の論理サブモジュールを更に含んでよい。加えて、ノードのサブセット及びノードの他のサブセットは交差していなくてよい。加えて、算術回路を縮小することは、第２プロセッサコアを使用して他の論理サブモジュールを縮小することと並列に第１プロセッサコアを使用して論理サブモジュールを縮小することを更に含んでよい。
【００２０】
コンピュータ実施される方法は、計算リソース使用を最適化するためのヒューリスティックに従って、論理サブモジュールを第１プロセッサコアに割り当てて、他の論理サブモジュールを第２プロセッサコアに割り当てるステップを更に含んでよい。
【００２１】
ヒューリスティックは、最長処理時間貪欲法（ｌｏｎｇｅｓｔ  ｐｒｏｃｅｓｓｉｎｇ  ｔｉｍｅ  ｇｒｅｅｄｙ  ａｌｇｏｒｉｔｈｍ）であってよい。
【００２２】
算術回路を縮小することは、算術回路のプライムインプリカント（ｐｒｉｍｅ  ｉｍｐｌｉｃａｎｔ（主項））のセットを決定することを含んでよい。加えて、算術回路を縮小することは、プライムインプリカントのセットを、第１積項及び第２積項を含む和の積として表すことを含んでよい。加えて、算術回路を縮小することは、第１積項及び第２積項を簡略化する（ｓｉｍｐｌｉｆｙｉｎｇ）ことを含んでよい。
【００２３】
第１積項及び第２積項を簡略化することは、ブール最小化ルール（Ｂｏｏｌｅａｎ  ｍｉｎｉｍｉｓａｔｉｏｎ  ｒｕｌｅ）を第１積項及び第２積項に適用することによって実行されてよい。
【００２４】
第２プログラミング言語はＣ＋＋であってよい。
【００２５】
第１プログラミング言語は、機械読取可能な金融コントラクトを構成するために考案されたコンピュータプログラミング言語であってよい。
【００２６】
コンピュータ実施される方法は、縮小算術回路を説明する多項式のセットを含む二次プログラム（ｑｕａｄｒａｔｉｃ  ｐｒｏｇｒａｍ）を生成するステップを更に含んでよい。加えて、コンピュータ実施される方法は、二次プログラムの実行においてブロックチェーンネットワーク内のノードによって使用されるパラメータのセットを生成するステップを更に含んでよい。
【００２７】
また、プロセッサと、該プロセッサによって実行された結果として、システムに、特許請求に係る方法のいずれかを実行させる実行可能命令を含むメモリと、を含むシステムを提供することも望まれる。
【００２８】
また、コンピュータシステムの１つ以上のプロセッサによって実行された結果として、コンピュータシステムに、特許請求に係る方法のいずれかを少なくとも実行させる、実行可能命令を記憶している非一時的コンピュータ読取可能記憶媒体を提供することも望まれる。
【００２９】
本発明は、検証方法／システムとして及び／又はブロックチェーンを介したデジタル資産の交換又は移転を制御するための制御方法／システムとして説明できる。いくつかの実施態様において、デジタル資産は、暗号通貨のトークン又は一部である。以下で説明されるように、本発明はまた、ブロックチェーンネットワーク又はプラットフォームを介して動作を実行する新たな改善された有利な方法のためのセキュアな方法／システムとしても説明できる。あるいはまた、本発明は、改善されたブロックチェーンプログラミングツール又は補助を提供し得る。これは、分散された検証可能な計算を容易に又は可能にする、改善された効率的な最適化された構成を提供し得る。
【図面の簡単な説明】
【００３０】
本発明のこれら及び他の態様は、本明細書で説明される実施形態から明らかになり、実施形態に関連して解明されるであろう。本発明の実施形態は、次に単なる例示として、添付の図面に関連して説明される：
【００３１】
【図１】様々な実施形態を実装することができるブロックチェーン環境を示す図である。
【図２】一実施形態による論理縮小の例の図である。
【図３】一実施形態による、検証可能な計算及び関与する関係者の例を示すスイム図である。
【図４】一実施形態による、ドメイン固有言語のコントラクトから二次算術プログラムへのワークフローの例を示す図である。
【図５】一実施形態による、論理サブモジュールを含む算術回路の例を示す図である。
【図６】一実施形態による、論理サブモジュールを並列に処理する例を示す図である。
【図７】一実施形態による、プライムインプリカント縮小の例を示す図である。
【図８】一実施形態による、ドメイン固有言語のコントラクトを縮小算術回路に変形する例を示すフローチャートである。
【図９】一実施形態による、算術回路縮小の例を示すフローチャートである。
【図１０】様々な実施形態を実装することができるコンピューティング環境を示す図である。
【発明を実施するための形態】
【００３２】
まず、本開示の一実施形態によるブロックチェーンに関連付けられる例示のブロックチェーンネットワーク１００示す図１を参照する。本実施形態では、例示のブロックチェーンネットワーク１００は、ピアツーピア分散電子デバイスとして実装されるブロックチェーンノードを含み、その各々が、少なくとも部分的にノード１０２のオペレータ間で合意されるブロックチェーンプロトコルに従うオペレーションを実行するソフトウェア及び／又はハードウェアのインスタンスを実行する。いくつかの例において、「ノード」は、ブロックチェーンネットワークの間で分散されるピアツーピア電子デバイスを指す。ブロックチェーンプロトコルの一例がビットコインプロトコルである。
【００３３】
いくつかの実施形態において、ノード１０２は、（例えばデータセンター内のサーバによって、クライアントコンピューティングデバイス（例えばデスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン等）によって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって、あるいは図１０のコンピューティングデバイス１０００のような任意の適切な電子クライアントデバイスによって）任意の適切なコンピューティングデバイスから構成され得る。いくつかの実施形態において、ノード１０２は、トランザクション１０４のように提案されたトランザクションを表すデータメッセージ又はオブジェクトを受け取るための入力を有する。ノードは、いくつかの実施形態では、ノードが維持する情報について、例えばトランザクション１０４の状態の情報についてクエリ可能である。
【００３４】
図１に示されるように、ノード１０２のいくつかは、ノード１０２のうちの１つ以上の他のノードに通信可能に結合される。このような通信結合は、有線又は無線通信のうちの１つ以上を含むことができる。実施形態において、ノード１０２は各々、ブロックチェーン内のすべてのトランザクションの「台帳」の少なくとも一部を維持する。このようにして、台帳は分散台帳となる。台帳に影響を与えるノードによって処理されるトランザクションは、台帳の完全性が維持されるように、他のノードのうちの１つ以上によって検証可能である。
【００３５】
どのノード１０２が他のどのノードと通信することができるかに関しては、メッセージが、ブロックチェーンプロトコルが転送すべきことを示すメッセージであると想定して、ノード間で渡されるメッセージが例示のブロックチェーンネットワーク１００全体（又はその何らかの重要な部分）に伝搬することができるように、例示のブロックチェーンネットワーク１００内のノードの各々が、ノード１０２のうちの１つ以上の他のノードと通信することができることで十分である。１つのそのようなメッセージは、ノード１０２のうちの１つ、例えばノード１０２Ａによる、提案されたトランザクションの公開であってよく、これは、次いでパス１０６のようなパスに沿って伝搬するであろう。別のそのようなメッセージは、ブロックチェーンに含めるために提案された新たなブロックの公開であってよい。
【００３６】
一実施形態において、ノード１０２のうちの少なくともいくつかは、暗号問題を解決することのように複雑な計算を実行するマイニングノードである。暗号問題を解決するマイニングノードは、ブロックチェーンのための新たなブロックを作成し、その新たなブロックをノード１０２のうちの他のノードにブロードキャストする。ノード１０２のうちの他のノードは、マイニングノードの作業を確認し、確認時に、（例えばブロックチェーンの分散台帳にブロックを追加することによって）ブロックをブロックチェーン内に受け入れる。いくつかの例では、ブロックはトランザクションのグループであり、しばしば、タイムスタンプと前のブロックの「フィンガープリント」（例えばハッシュ）でマークされる。このようにして、各ブロックは前のブロックにリンクされるようになってよく、それによりブロックチェーン内のブロックをリンクする「チェーン」が生成される。実施形態において、有効なブロックは、ノード１０２の合意によってブロックチェーンに追加される。また、いくつかの例では、ブロックチェーンは、検証されたブロックのリストを含む。
【００３７】
一実施形態において、ノード１０２のうちの少なくともいくつかは、本開示で説明されるように、トランザクションを検証する検証ノードとして動作する。いくつかの例では、トランザクションは、デジタル資産（例えば複数のビットコイン）の所有権のプルーフと、デジタル資産の所有権／制御を受け入れる又は移転するための条件を提供するデータを含む。いくつかの例において、「アンロッキングトランザクション」は、前のトランザクションのＵＴＸＯによって示されるデジタル資産の少なくとも一部を、ブロックチェーンアドレスに関連付けられるエンティティに再関連付けする（例えば所有権又は制御を移転する）ブロックチェーントランザクションを指す。いくつかの例において、「前のトランザクション」は、アンロッキングトランザクションによって参照されているＵＴＸＯを含むブロックチェーントランザクションを指す。いくつかの実施形態では、トランザクションは、所有権又は制御が移転され得る（「アンロックされる」）前に満たさなければならない条件で該トランザクションを妨げる「ロッキングスクリプト」を含む。
【００３８】
いくつかの実施形態では、ブロックチェーンアドレスは、デジタル資産の少なくとも一部の制御が移転／再関連付けされているエンティティに関連付けられる英数字の文字列である。いくつかの実施形態で実装されるいくつかのブロックチェーンプロトコルでは、エンティティに関連付けられる公開鍵とブロックチェーンアドレスとの間に１対１の対応が存在する。いくつかの実施形態において、トランザクションの検証は、ロッキングスクリプト及び／又はアンロッキングスクリプトで指定された１つ以上の条件の検証を含む。トランザクション１０４の検証が成功すると、検証ノードはトランザクション１０４をブロックチェーンに追加し、それをノード１０２に分配する。
【００３９】
図２は、本開示の一実施形態の実施例２００を示す。具体的には、図２は、算術回路２１４に変換されたスマートコントラクト２０６を示しており、算術回路は、次いで算術回路最適化モジュールによって、ブロックチェーン内の作業者ノード（ｗｏｒｋｅｒ  ｎｏｄｅ）２５０がスマートコントラクト２０６の結果を判断するために必要なリソースを低減するために縮小される。
【００４０】
一実施形態において、スマートコントラクト２０２は、コンピューティングデバイスがコントラクトの条件を実行すること及び／又はコントラクトの条件が満たされているかどうかを判断することを可能にするフォーマットで書かれたコントラクト（ｃｏｎｔｒａｃｔ：契約）又は合意である。スマートコントラクト２０２は、入力値のセットに対して評価された結果として、コンピューティングデバイスがスマートコントラクト２０２の結果を判断することを可能にするルール及び／又は条件のセットを含んでもよく、これは、次いで、結果に依存して、更なるアクションを実行させることができる。
【００４１】
本開示の目的は、エンティティが、ドメイン固有のプログラミング言語を使用してスマートコントラクト２０２のもののようなルールのセット及び／又は条件のセットを構成することを可能にする、プロトコルを説明することである。いくつかの例において、ドメイン固有のプログラミング言語又は「ドメイン固有言語」（ＤＳＬ）は、特定の使用分野において使用するために設計されたコンピュータプログラミング言語を指す。ＤＳＬの例には、ハイパーテキストマークアップ言語（ＨＴＭＬ）、アクチュラスモデリング言語（ＡＭＬ）、デジタル資産モデリング言語（ＤＡＭＬ）、金融商品マークアップ言語（ＥｐＭＬ）及びＥｍａｃｓ  Ｌｉｓｐが含まれる。
【００４２】
いくつかの例では、ＤＳＬとは対照的に、汎用プログラミング言語又は「汎用言語（ＧＰＬ）」が広く適用可能である。汎用プログラミング言語の例には、Ａｄａ、ＡＬＧＯＬ、アセンブリ言語、ＢＡＳＩＣ、Ｂｏｏ、Ｃ、Ｃ＋＋、Ｃ＃、Ｃｌｏｊｕｒｅ、ＣＯＢＯＬ、Ｃｒｙｓｔａｌ、Ｄ，Ｄａｒｔ、Ｅｌｉｘｉｒ、Ｅｒｌａｎｇ、Ｆ＃、Ｆｏｒｔｒａｎ、Ｇｏ、Ｈａｒｂｏｕｒ、Ｈａｓｋｅｌｌ、Ｉｄｒｉｓ、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊｕｌｉａ、Ｌｉｓｐ、Ｌｕａ、Ｍｏｄｕｌａ−２、ＮＰＬ、Ｏｂｅｒｏｎ、Ｏｂｊｅｃｔｉｖｅ−Ｃ、Ｐａｓｃａｌ、Ｐｅｒｌ、ＰＨＰ、Ｐｉｋｅ、ＰＬ／Ｉ、Ｐｙｔｈｏｎ、Ｒｉｎｇ、ＲＰＧ、Ｒｕｂｙ、Ｒｕｓｔ、Ｓｃａｌａ、Ｓｉｍｕｌａ、Ｓｗｉｆｔ及びＴｃｌが含まれる。本開示の実施形態において参照されることがあるＣ＋＋は、命令的、オブジェクト指向及び一般的なプログラミング機能を有する汎用プログラミング言語であり、低レベルのメモリ操作のための能力も提供する。
【００４３】
一実施形態において、算術回路２１４は、スマートコントラクト２０２を表す有向非巡回グラフ（ＤＡＧ）である。すなわち、ＤＡＧのエッジ（「ワイヤ」）は、グラフ内のノード間の入力値又は値を表してよく、ノードは、算術演算（例えば和、積等）を表してよい。したがって、算術回路２１４への入力値は、スマートコントラクトへの入力値に関連付けられ、実施形態では、スマートコントラクトの結果は、算術回路２１４の結果と一致（ｍａｔｃｈ）する。様々な実施形態では、一致は必ずしも等価性を必要としないことに留意されたい。例えば２つの値が等しくないが数学的に同等である場合、２つの値が一致し得る。別の例として、２つの値は、それらが共通のオブジェクト（例えば値）に対応するか又は何らかの所定の方法で補足的であるか、かつ／又はそれらが１つ以上の一致基準を満たす場合に一致し得る。一般に、一致が存在するかどうかを判断する任意の方法が使用されてよい。
【００４４】
一実施形態において、縮小算術回路２１６は、ブール最小化ルール又は他の数学的等価性ルールに従って算術回路縮小モジュール２２０によって縮小された算術回路の結果である。例えばブール代数では、式ｕ＋ｕｖをｕに単純に最小化することができ、同様に算術回路：
【表１】
2021502634.tif 000003
を：
【表２】
2021502634.tif 000004
に単純に最小化することができる。
【００４５】
したがって、算術回路縮小モジュール２２０は、回路を縮小又は最小化する方法について算術回路２１４を評価することによって算術回路２１４を縮小／簡略化することができ、それによって算術回路縮小モジュール２２０が出力する、縮小算術回路２１６を生成する。
【００４６】
一実施形態において、算術回路縮小モジュール２２０は実行された結果として、算術回路２１４をどこでどのようにして縮小できるかを決定するために、ブール最小化ルール又は他の数学的等価性ルールを用いて算術回路２１４内の積項を比較するオペレーションを実行することによって、縮小算術回路２１６を生成するハードウェア又はソフトウェアである。算術回路縮小モジュール２２０によって実行されるオペレーションの更なる詳細は、図７〜図９の説明内に見られる。
【００４７】
一実施形態において、作業者ノード２５０は、図１のノード１０２及び図３の作業者ノード３５０と同様に、ブロックチェーンネットワーク内のノードである。すなわち、作業者ノード２５０は、ブロックチェーンネットワーク内の１つ以上の他のノードと通信可能に結合されたブロックチェーントランザクションを処理及び／又は検証するように構成されたコンピューティングデバイスであってよい。作業者ノード２５０は、いくつかの実施形態において、一組の入力値を所与として、縮小算術回路２１６のような算術回路の出力を決定するように設計されてよい。
【００４８】
実施形態において、コントラクトの実行を、信頼されていない当事者にアウトソーシングすることができるが、コントラクト実行の正当性を公的に検証することができる。実施形態において、プロトコルは、完全性、健全性及びゼロ知識を保証する暗号プリミティブを使用する。一部の例では、「完全性」は、証明者がプロトコルに正しく従う場合、検証者が出力の有効性を判断することができること指す。一部の例では、「健全性」は、証明者が、出力の確実性について検証者を欺くことができないことを指す。一部の例では、「ゼロ知識」は、検証者が、出力を生成するために使用された入力を導出できなくとも、出力を検証することができることを指す。
【００４９】
このようにして、非専門家のプログラマが暗号それ自体を実装する必要なく、人間にとってスマートコントラクトの書き込み及び読み取りを容易にするように設計されたＤＳＬを使用して、スマートコントラクトを生成することができる。本開示の実施形態では、コンパイラ／インタプリタは、ユーザからのＤＳＬソースコードをブロックチェーンで使用可能な暗号プロトコルに自動的にコンパイルする。本開示において、実施形態は、単純な算術ゲートに関して複雑なコントラクトの表現のために高度に最適化されたソリューションを提供する。この表現は、分散された検証可能な計算を提供することができる包括的なパイプラインの構築のためのソリューション又はツールと見なすことができる。
【００５０】
図３は、検証可能な計算のプロセス３００の一例と本開示の実施形態に関与する関係者を示す図である。図３に図示されるように、検証可能な計算のプロセス３００は、本開示の実施形態における検証可能な計算プロトコルにおけるステップの実行に関与する、クライアントノード３４０、作業者ノード３５０及び検証者ノード３６０を含んでもよい。実施形態では、クライアントノード３４０、作業者ノード３５０又は検証者ノード３６０のうちの１つ以上は、図１の例示的なブロックチェーンネットワーク１００内のノード１０２のようなブロックチェーンネットワーク内のノードである。
【００５１】
一実施形態において、セットアップ段階は、ＤＳＬでコントラクトを書くことを含む。インタプリタは、クライアントノード３４０であってもよく、ソースコードを入力として取り、フィールド
【数１】
2021502634.tif 000005
からの値を担持して加算及び乗算ゲートに接続する「ワイヤ」からなる算術回路Ｃを生成する。算術回路自体はハードウェア回路ではなくＤＡＧであってもよく、ワイヤはＤＡＧのエッジであってもよいことに留意されたい。しかしながら、算術回路は、ワイヤ及び論理ゲートを有する物理回路内で具現化されてもよいと考えられる。３０２において、クライアントノード３４０は、ＧＰＬで書かれた計算Ｐを算術回路Ｃにコンパイルする。本実施形態では、クライアントノード３４０は、算術回路Ｃ及び入力ｘを作業者ノード３５０に供給する。
【００５２】
回路Ｃから、本開示の実施形態は、元の回路Ｃの完全な説明を提供する多項式のセットを含む二次プログラムＱを生成することができる。次いで、二次プログラムを実行及び検証する際に、作業者ノード３５０及び検証者ノード３６０によって使用される公開パラメータが生成されてもよい。
【００５３】
３０４において、作業者ノード３５０は、入力ｘに対して回路Ｃ又は二次プログラムＱを実行し、出力がｙであることを主張する。いくつかの実施形態では、作業者ノード３５０（すなわち、証明者）は、｛Ｃ，ｘ，ｙ｝について有効なトランスクリプトを取得することが期待され；したがって、プロセス３００の３０６において、作業者ノード３５０は、トランスクリプトを符号化する。いくつかの例では、｛Ｃ，ｘ，ｙ｝についての有効なトランスクリプトは、入力ワイヤに割り当てられた値がｘのそれらであり、中間値がＣ内の各ゲートの正しいオペレーションに対応し、出力ワイヤに割り当てられた値がｙであるように、回路ワイヤに値を割り当てることであり；請求された出力が正しくない（すなわち、ｙ≠Ｐ（ｘ））場合、｛Ｃ，ｘ，ｙ｝についての有効なトランスクリプトは存在しない。
【００５４】
３０８において、作業者ノード３５０は、出力ｙをクライアントノード３４０に提供する。実施形態では、公開評価鍵ＥＫ及び公開検証鍵ＶＫは、クライアントノード３４０によって又はクライアントノード３４０から選択された秘密値ｓを使用して導出される。実施形態において、作業者ノード３５０は、これらの公開鍵を使用して、特定の入力ｘに対して計算を評価する。実施形態において、出力ｙ、内部回路ワイヤの値及びＥＫを使用して、正当性のプルーフ（ｐｒｏｏｆ−ｏｆ−ｃｏｒｒｅｃｔｎｅｓｓ）πを生成する。プルーフπはブロックチェーン上に格納されることができ、作業者ノード３５０が複数の当事者と別々に対話することを必要とせずに、複数の当事者（例えば検証者ノード３６０）によって検証されることができる。このようにして、検証者ノード３６０は、３１０において、公開検証鍵ＶＫ及びプルーフπを使用してトランザクションを検証することができ、それによってコントラクトを検証することができる。
【００５５】
図４は、本開示の実施形態による、ＤＳＬで符号化されたスマートコントラクトから二次算術プログラム（ＱＡＰ：ｑｕａｄｒａｔｉｃ  ａｒｉｔｈｍｅｔｉｃ  ｐｒｏｇｒａｍ）へのワークフローの例４００を示す。具体的には、図４は、コンバータ４０４によってＧＰＬコントラクト４０６に変換されるＤＳＬスマートコントラクト４０２を示す。ＧＰＬプリコンパイラ４０８（プリプロセッサとしても知られる）は、ＧＰＬコントラクト４０６によって参照される外部ライブラリ４１０を組み込み、ＧＰＬ前処理コントラクト４１２を生成する。ＧＰＬ前処理コントラクト４１２は、ＱＡＰ多項式４１８が導出される縮小算術回路４１６を生成するために最適化される算術回路４１４に変形される。
【００５６】
実施形態において、ＤＳＬスマートコントラクト４０２は、正確な意味を有する正式な言語で書かれたコントラクトである。実施形態において、ＤＳＬスマートコントラクト４０２は条件のセットを含み、ＤＳＬスマートコントラクト４０２の結果は、条件のセットの履行に依存する。スマートコントラクトの例は、被保険者の保険料と、保険業者による被保険者への潜在的な分配を入力として取る保険契約である。スマートコントラクトの期間中に被保険者が損失を被った場合（例えば第１条件の履行）、スマートコントラクトの実行は、保険業者に保険料を分配し、損失の分配を被保険者に分配する。他方、スマートコントラクトの期間中に被保険者が損失を被らない場合、スマートコントラクトの実行は、保険業者に保険料を分配し、潜在的な分配を保険者に返す。
【００５７】
一実施形態において、コンバータ４０４は、実行の結果として、ＤＳＬで書かれたＤＳＬスマートコントラクト４０２のような条件のセットを受け取り、ＤＳＬコードをＧＰＬコントラクト４０６のようなＧＰＬソースコードに翻訳するソフトウェアプログラムである。実施形態において、ＧＰＬコントラクト４０６は、Ｃ＋＋プログラムのようなＧＰＬプログラムであり、ＤＳＬスマートコントラクト４０２で定義されたコントラクトを含む。
【００５８】
一実施形態において、ＧＰＬプリコンパイラ４０８は、ＧＰＬコントラクト４０６及び必要な外部ライブラリ４１０を処理してスタンドアロンＧＰＬ前処理コントラクト４１２を生成する、コンピュータ実行可能プログラムである。実施形態において、ＧＰＬプリコンパイラ４０８は、定数式を評価し、ＧＰＬコントラクト４０６に見られるシンボル（ｓｙｍｂｏｌｓ）を登録する。
【００５９】
一実施形態において、外部ライブラリ４１０は、呼び出しによってＧＰＬコントラクト４０６により利用される、事前に書かれたサブルーチン、関数、クラス、コンテナ、値及び／又は可変型のコレクションである。例えば外部ライブラリ４１０を呼び出すことによって、ＧＰＬコントラクト４０６は、機能自体を実装する必要なく、そのライブラリの機能を獲得する。
【００６０】
一実施形態において、ＧＰＬ前処理コントラクト４１２は、一組の式及び演算子を含む。演算子は、算術演算子（例えば加算（＋）、乗算（*）等）、比較演算子（例えば未満（＜）、等しい（＝）、以上（≧）等）、条件文（例えばｉｆ−ｔｈｅｎ（？、：））又は論理演算子（例えばＡＮＤ（＆＆）、ＯＲ（||）、ＮＯＴ（!）、ＸＯＲ
（外１）
2021502634.tif 000006
）等を含み得る。いくつかの実施形態では、主機能は、所定の名前及びフォーマットを有するように生成される。
【００６１】
一実施形態において、算術回路４１４は、一組の変数に対するＤＡＧである。一実施形態において、ゼロの入次数（ｉｎｄｅｇｒｅｅ）を有するＤＡＧの各ノードは、変数を表す入力ゲート（例えばｘｉ）であり、ＤＡＧのすべての他のノードは、和ゲート（＋）又は積ゲート（×）である。実施形態において、すべてのゲート（ノード）は、１の出次数（ｏｕｔｄｅｇｒｅｅ）を有し、したがって、その下にあるグラフは、有向ツリーである。実施形態において、算術回路４１４は、複雑性の２つの尺度、すなわち、サイズと深度を有する。いくつかの例では、算術回路の「サイズ」は、算術回路４１４内のゲートの数に基づく。いくつかの例では、算術回路の「深度」は、算術回路内の最も長い有向経路の長さに基づく。
【００６２】
算術回路４１４は、生成された後、縮小されてよい。ブール代数では、任意のブール関数を、最小項正規形式で表現することができる。ｎ個の変数の関数ｆ（ｘ１，．．．，ｘｎ）では、変数の各々が１回、その自然形又は補完された形で現れる積項が、最小項と呼ばれることがある。すなわち、いくつかの例では、「最小項」は、補数演算子（‘）と結合演算子（）のみを用いるｎ個の変数の論理式である。例えばａｂｃｄ及びａｂ’ｃｄ’は、ｆ（ａ，ｂ，ｃ，ｄ）の２つの最小項である。このようにして、ｎ個の変数で２ｎｆが存在することになる。
【００６３】
いくつかの例において、「インプリカント（ｉｍｐｌｉｃａｎｔ）」は、ｆの最小項のグループをカバーする積を指す（すなわち、積の和の積項Ｐは、ｆが値１をとる場合Ｐが１に等しいときはいつでも、ｆのインプリカントである）。例えば以下の関数：
ｆ（ａ，ｂ，ｃ，ｄ）＝ａｂ＋ｂｃ’＋ｄ
では、ａｂ、ｂｃ’、ａｂｃ’、ａｂｃ’ｄ及びｄは、ｆのインプリカントの例である。いくつかの例では、「プライムインプリカント（ｐｒｉｍｅ  ｉｍｐｌｉｃａｎｔ（主項））」は、より一般的な（例えばより少ないリテラル（ｌｉｔｅｒａｌｓ）の）インプリカントではカバーすることができないインプリカントを指す。すなわち、プライムインプリカントは、いずれかのリテラルがＰから除去された場合に、ｆについて非インプリカントとなる積項Ｐである。上記の例を使用すると、ａｂｃ’ｄはプライムインプリカントではない。なぜなら、リテラルを除去してプライムにすることができるからである（ａｂｃ’ｄをプライムインプリカントにするためには、ａ＝１及びｂ＝１及びＣ＝０及びｄ＝１の場合にのみ、ｆ（ａ，ｂ，ｃ，ｄ）は１に等しくなければならない）。
【００６４】
しかしながら、理解されるように、ａ、ｂ及びｃ’が除去される場合（すなわち、ｄ＝１の場合）、ｆ（ａ，ｂ，ｃ，ｄ）は１に等しい可能性がある。同様に、ｃ’とｄが除去される場合（すなわち、ａｂ＝１の場合）、ｆ（ａ，ｂ，ｃ，ｄ）は１に等しい可能性がある。同様に、ａとｄが除去される場合（すなわち、ｂｃ’＝１の場合）、ｆ（ａ，ｂ，ｃ，ｄ）は１に等しい可能性がある。ブール項からリテラルを除去するプロセスは「展開（ｅｘｐａｎｓｉｏｎ）」と呼ばれることがある。リテラルを１つ展開することは、項が真になる入力組合せの数を２倍にする。例えばｆのカバーを変更することなく、ａｂｃ’をａｂ又はｂｃ’に展開することができる。
【００６５】
ブール関数のすべてのプライムインプリカントの和は、「ブレーク正規形式（Ｂｌａｋｅ  ｃａｎｏｎｉｃａｌ  ｆｏｒｍ）」と呼ばれることがある。他のプライムインプリカントの組合せがカバーできない関数の出力をカバーするプライムインプリカントは、「必須プライムインプリカント（ｅｓｓｅｎｔｉａｌ  ｐｒｉｍｅ  ｉｍｐｌｉｃａｎｔｓ（必須主項））」と呼ばれることがある。ｎ個の入力変数を有する論理関数のプライムインプリカントの数は、３ｎ／ｎと同じくらい大きいものとすることができる。最小プライムインプリカントの抽出は、非決定性多項式時間完全（ＮＰ−ｃｏｍｐｌｅｔｅ）問題のクラスに属することが知られている。以下の方法は、クワイン・マクラスキー法（Ｑｕｉｎｅ−ＭｃＣｌｕｓｋｅｙ  ａｌｇｏｒｉｔｈｍ）を使用して、プライムインプリカントのチャートを構築する一例を示す。
【００６６】
マクラスキーによるＭｉｎｉｍｉｚａｔｉｏｎ  ｏｆ  Ｂｏｏｌｅａｎ  Ｆｕｎｃｔｉｏｎｓ（１９５６）内でみられるクワイン・マクラスキー法は、ブール関数のプライムインプリカントの完全なリストを返す。一実施形態では、返されたプライムインプリカントを使用してプライムインプリカントテーブルを構築し、これは、関数の必須プライムインプリカントの抽出のために１つ以上のアルゴリズムへの入力として使用され得る。縮小されるブール関数ｆ（ｘ１，．．．，ｘｎ）を次のように表すことができる：
【数２】
2021502634.tif 000007
【００６７】
出力１を与えるｆを表すために使用されるＭ個の最小項ｍｉは、インデックスベクトルｖに含まれる。各インデックスｖｉは、所与の入力シーケンスのバイナリ符号化を表す：
【数３】
2021502634.tif 000008
【００６８】
したがって、ｖの各最小項を、ｘｉ値に依存して自然又は補完入力の積として表すことができる。最小項のペアは、これらの表現が、１桁の数の変化（ｓｉｎｇｌｅ  ｄｉｇｉｔ  ｃｈａｎｇｉｎｇ）によって変わる場合に組み合わせることができる。それ以上組み合わせることができない項はプライムインプリカントである。必須プライムインプライアントテーブルは、既約（ｉｒｒｅｄｕｃｉｂｌｅ）のプライムインプリカントのリストを使用して構築される。
【００６９】
一例において、ｎ＝４、Ｍ＝６及びｖ＝｛４，８，１０，１１，１２，１５｝のブール関数ｆ（ｘ１，．．．，ｘｎ）を所与とすると、プライムインプリカントを抽出してプライムインプリカントテーブルを生成するクワイン・マクラスキー法は、以下のように現れる：
【数４】
2021502634.tif 000009
【００７０】
したがって、ｆを、以下の最小項の和として表すことができる：
・ｍ４＝ｆ（０，１，０，０）＝ａ’ｂｃ’ｄ’
・ｍ８＝ｆ（１，０，０，０）＝ａｂ’ｃ’ｄ’
・ｍ１０＝ｆ（１，０，１，０）＝ａｂ’ｃｄ’
・ｍ１１＝ｆ（１，０，１，１）＝ａｂ’ｃｄ
・ｍ１２＝ｆ（１，１，０，０）＝ａｂｃ’ｄ’
・ｍ１５＝ｆ（１，１，１，１）＝ａｂｃｄ
【００７１】
４つの入力の場合、最小項は［ｍ０，ｍ１５］の範囲内であり、この場合、ｍ０＝ｆ（０，０，０，０）、かつｍ１５＝（１，１，１，１）である。ｆについての積式の正規和は以下のとおりである：
ｆ（ａ，ｂ，ｃ，ｄ）＝ａ’ｂｃ’ｄ’＋ａｂ’ｃ’ｄ’＋ａｂ’ｃｄ’＋ａｂ’ｃｄ＋ａｂｃ’ｄ’＋ａｂｃｄ
【００７２】
最小項は、１桁の数が変化するときに組み合わされ、対応する入力は「−」に設定される。この結果、サイズ−２のインプリカント（ｓｉｚｅ−２  ｉｍｐｌｉｃａｎｔｓ）となる：
ｍ４，１２＝ｆ（−，１，０，０）  ［既約］
ｍ＿（８，９）＝ｆ（１，０，０，−）
ｍ８，１０＝ｆ（１，０，−，０）
ｍ８，１２＝ｆ（１，−，０，０）
ｍ９，１１＝ｆ（１，０，−，１）
ｍ１０，１１＝ｆ（１，０，１，−）
ｍ１０，１４＝ｆ（１，−，１，０）
ｍ１２，１４＝ｆ（１，１，−，０）
ｍ１１，１５＝ｆ（１，−，１，１）
ｍ１４，１５＝ｆ（１，１，１，−）
【００７３】
サイズ−２のインプリカントのいくつかは既約でないことがあるが、再び組み合わされよく、結果としてサイズ−４のインプリカントとなる：
ｍ８，９，１０，１１＝ｆ（１，０，−，−）  ［既約］
ｍ８，１０，１２，１４＝ｆ（１，−，−，０）  ［既約］
ｍ１０，１１，１４，１５＝ｆ（１，−，１，−）  ［既約］
【００７４】
今回は、ｓｉｚｅ−４のインプリカントのすべてが既約である。既約のインプリカントのリストは、ブール関数のプライムインプリカントに対応する。最後のステップとして、必須プライムインプリカントテーブルが、プライムインプリカントのリストを使用して構築されてよい。プライムインプリカントテーブルの例は以下のテーブル１に示される：
【表３】
2021502634.tif 000010
【００７５】
表中の「ティック（ｔｉｃｋ）」は、真であるために、所与のインデックスベクトル、すなわち、所与の入力シーケンスを必要とするプライムインプリカントに対応する。ｖの列が１つのティックのみを有する場合、対応する最小項は１つのプライムインプリカントによってのみカバーされ得る。そのようなプライムインプリカントは、ｆにとって必須である。
【００７６】
一実施形態において、縮小算術回路４１６は、縮小又は最小化された有向非巡回グラフ（ＤＡＧ）であり、これは、一組の入力を所与として、ＤＳＬスマートコントラクト４０２で指定されたもののような条件のセットの結果を決定するために使用することができる。いくつかの実施態様において、縮小算術回路４１６は、最小化された（すなわち、最小次数まで縮小された）算術回路である。いくつかの実施形態では、最も最適な算術回路は、必ずしも最小の算術回路ではなくてよく（例えば特定のより大きな算術回路は、回路内の算術演算の数及びタイプに応じて、より大きな算術回路よりも迅速に評価され得る）、そのような実施形態では、縮小算術回路４１６は、（例えば最大速度、より少ないメモリ使用量、最も効率的なプロセッサの利用等について）最適化されているが、必ずしも最小化されていない算術回路である。
【００７７】
一実施形態において、ＱＡＰ多項式４１８は、元の算術回路（例えば図４の算術回路４１４）の完全な説明を提供する数式で表現された変数及び係数を含む１つ以上の式である。実施形態において、ＱＡＰ多項式の多項式は、例えばＧｅｎｎａｒｏ，Ｒ．等によるＱｕａｄｒａｔｉｃ  Ｓｐａｎ  Ｐｒｏｇｒａｍｓ  ａｎｄ  Ｓｕｃｃｉｎｔ  ＮＩＺＫｓ  ｗｉｔｈｏｕｔ  ＰＣＰｓ（２０１３）で説明されているように、算術回路のルートにおけるそれらの評価に関して定義される。実施形態において、ＱＡＰ多項式は、スマートコントラクトの表現として、ブロックチェーントランザクションのロッキングスクリプトに符号化される。実施形態では、ロッキングスクリプトは、実行時に、一組のパラメータ値（例えばロッキングスクリプトの実行の結果として）を受け取り、これらのパラメータ値は、ＱＡＰ多項式に変数として入力され、スマートコントラクトの結果を決定させる。
【００７８】
実施形態において、ＧＰＬプリコンパイラ４０８は、ＧＰＬ前処理コントラクト４１２を生成する。ＧＰＬ前処理コントラクト４１２は、算術ゲートから構成される算術回路であってよい。しかしながら、条件付き及びフロー制御ステートメントのために、複雑な算術回路も論理サブモジュールを埋め込むことに注意されたい。実施形態では、これらのサブモジュールは、やはり算術回路に変換されるが、図５に見られるように、１ビット幅のゲート接続によって特徴付けられる。
【００７９】
図５は、本開示の実施形態の論理サブモジュールを含む算術回路５００の例示的なモデルを示す。図５に図示されるように、算術回路５００は、１ビット入力５０２と、入力のグループ５０４を含んでよく、これらの入力は、論理サブモジュール５０８Ａ〜５０８Ｂ及び／又はグループ化されていない算術ゲート５０６Ａ〜５０６Ｄに渡されて出力５１０を生成する。図５の太い線は、１ビット幅のワイヤ（例えばバス）のグループを表し、細い線は、１ビット・ビットワイヤを表す。論理及び算術１ビット幅回路は、二重である（例えば少なくとも２つの方法、すなわち、和の積又は積の和として表現することができる）ので、論理回路縮小を、算術回路５００内の論理サブモジュール５０８Ａ〜５０８Ｂに適用することができる。
【００８０】
論理サブモジュール*５０８Ａ〜５０８Ｂの各々は、算術回路内のノードのセットの適切な（ｐｒｏｐｅｒ）（厳密な）サブセットを含んでもよい。言い換えると、論理サブモジュールは、算術回路の全体を包含しないことがある。さらに、いくつかの実施形態では、論理サブモジュール*５０８Ａ〜５０８Ｂは交差していない、すなわち、このような実施形態では、論理サブモジュール*５０８Ａ〜５０８Ｂは、いずれの内部ゲートも共有しないであろう。さらに、このような実施形態では、論理サブモジュール５０８Ａ〜５０８Ｂはいずれの内部ゲートも共有しないため、縮小手順を並列化して（例えば論理サブモジュール５０８Ａ〜５０８Ｂの各々を並列に縮小することができる）オペレーションの時間複雑性を低減することができる。
【００８１】
一実施形態において、１ビット入力５０２は、１又は０のいずれかを表す値を伝達することができるワイヤであり、一方、入力のグループ５０４は、複数の１ビットワイヤを表す。複雑な算術回路は、条件付き及びフロー制御ステートメントから導出される論理サブモジュールを埋め込んでよい。実施形態において、これらの論理サブモジュールは算術回路にも変換されるが、図示の論理サブモジュール５０８Ａ〜５０８Ｂのような１ビット幅のゲート接続によって特徴付けられてよい。いくつかの実施形態において、論理サブモジュール５０８Ａ〜５０８Ｂ内のワイヤは、１ビット幅のみである。
【００８２】
論理及び算術１ビット幅回路は二重であるため、論理縮小は、論理サブモジュール５０８Ａ〜０８Ｂにも適用され得る。さらに、論理サブモジュール５０８Ａ〜５０８Ｂは、内部ゲートを共有しないため、縮小手順は、算術回路５００の時間複雑性を低減するために並列化されてもよく；例えば別個のプロセッサコアを割り当てて論理サブモジュール５０８Ａ〜５０８Ｂの各々に対して論理縮小を行ってもよい。一実施形態では、計算的に最適化されたヒューリスティックを利用して、論理縮小のために、論理サブモジュール５０８Ａ〜０８Ｂを異なる処理コアに割り当ててもよい。計算的に最適化されたヒューリスティックは、計算リソースの使用を最適化するように設計されたヒューリスティックであり得る。使用され得る計算的に最適化されたヒューリスティックの一例は、最長処理時間（ＬＰＴ）貪欲法である。このようなヒューリスティックでは、論理サブモジュール５０８Ａ〜５０８Ｂが処理時間によってソートされ、それまでで最も早い終了時間を有するマシンに割り当てられる場合、スケジューラは各トランザクションの計算負荷のバランスをとろうとする。更なる詳細は、以下の図７の説明でみられ得る。対照的に、実施形態では、グループ化されていない算術ゲート５０６Ａ〜５０６Ｄは、該グループ化されていない算術ゲート５０６Ａ〜５０６Ｄが入力のグループ５０４等の１ビットワイヤのグループによって共有されるため、並列に縮小され得ない。実施形態では、縮小はゲートの数に適用されるが、入力の数（例えば１ビット入力５０２及び入力のグループ５０４）は同じままであることに留意されたい。
【００８３】
一実施形態において、出力５１０は、算術回路５００に従って入力５０２及び５０４に対して実行されオペレーションの結果である。いくつかの実施態様において、結果は、真又は偽の値である。他の実施形態では、結果は１つ以上の１ビット値のセットである。他の実施形態において、結果は、任意の他の値又は算術回路によってサポートされる値であってよい。
【００８４】
上述のように、実施形態において、クワイン・マクラスキー法は、ブール関数ｆのプライムインプリカントの完全なリストを返すことができる。さらに、ＰｅｔｒｉｃｋによるＡ  Ｄｉｒｅｃｔ  Ｄｅｔｅｒｍｉｎａｔｉｏｎ  ｏｆ  ｔｈｅ  Ｉｒｒｅｄｕｎｄａｎｔ  Ｆｏｒｍｓ  ｏｆ  ａ  Ｂｏｏｌｅａｎ  Ｆｕｎｃｔｉｏｎ  ｆｒｏｍ  ｔｈｅ  Ｓｅｔ  ｏｆ  Ｐｒｉｍｅ  Ｉｍｐｌｉｃａｎｔｓ（１９５６）で説明されている方法（Ｐｅｔｒｉｃｋ法）を用いて、下述されるような必須プライムインプリカントの構成としてｆを表すために、プライムインプリカントの数を縮小することができる。
【００８５】
プライムインプリカントテーブル（例えばプライムインプリカントテーブル１）で表されるブール関数ｆを、補助ブール関数（ａｕｘｉｌｉａｒｙ  Ｂｏｏｌｅａｎ  ｆｕｎｃｔｉｏｎ）ｆ＊を用いて二重形式で表すことができる。補助ブール関数ｆ＊は、プライムインプリカントテーブルの列のすべてがカバーされるときに真になる。したがって、ｆ＊を、各インデックスベクトルｖｉに寄与する（すなわち、ｆの各出力に寄与する）プライムインプリカントの和σｉの積として表すことができる：
【数５】
2021502634.tif 000011
【００８６】
例えばテーブル１内のプライムインプリカントのσｉ項のリストは、次のようになる：
σ０＝σ（ｖ０＝４）＝ｂｃ’ｄ’
σ１＝σ（ｖ１＝８）＝ａｂ’＋ａｄ’
σ２＝σ（ｖ２＝１０）＝ａｂ’＋ａｄ’＋ａｃ
σ３＝σ（ｖ３＝１１）＝ａｂ’＋ａｃ
σ４＝σ（ｖ４＝１２）＝ｂｃ’ｄ’＋ａｄ’
σ５＝σ（ｖ５＝１５）＝ａｃ
【００８７】
したがたって、二重関数ｆ＊は：
ｆ＊＝（ｂｃ’ｄ’）（ａｂ’＋ａｄ’）（ａｂ’＋ａｄ’＋ａｃ）（ａｂ’＋ａｃ）（ｂｃ’ｄ’＋ａｄ’）（ａｃ）
となる。
【００８８】
ｚｉをｆ＊の個々の最小項で表す場合、関数を：
ｆ＊＝ｚ０（ｚ１＋ｚ２）（ｚ１＋ｚ２＋ｚ３）（ｚ１＋ｚ３）（ｚ０＋ｚ２）ｚ３
と書き直すことができる。
【００８９】
ブール関数は、特定のブール・ルール、例えば以下に示されるようなルールを使用して更に簡略化できる：
１．ｕ＋ｕｖ＝ｕ
２．ｕ＋ｕ’ｖ＝ｕｖ
３．（ｕ＋ｖ）（ｕ＋ｗ）＝ｕ＋ｖｗ
【００９０】
他のブール簡略化ルールが存在し、より少ない、より多い又は異なるブール簡略化ルールが本開示の実施形態で使用され得ることは、本開示の範囲内であると考えられることに留意されたい。しかしながら、上記のルールを使用して、ｆ＊に対して以下の簡略化を実行することができる：
（ｚ１＋ｚ２）（ｚ１＋ｚ３）＝ｚ１＋ｚ２ｚ３  （ルール３）
ｚ０（ｚ０＋ｚ２）＝ｚ０  （ルール１）
【００９１】
いくつかの更なる簡略化をｆ＊に適用することにより、ｆ＊は、以下の縮小を受け得る：
ｆ＊＝ｚ０ｚ３（ｚ１＋ｚ２ｚ３）（ｚ１＋ｚ２＋ｚ３）
ｆ＊＝ｚ０ｚ３（ｚ１ｚ１＋ｚ１ｚ２＋ｚ１ｚ３＋ｚ１ｚ２ｚ３＋ｚ２ｚ２ｚ３＋ｚ２ｚ３ｚ３）
ｆ＊＝ｚ０ｚ３（ｚ１＋ｚ１ｚ２＋ｚ１ｚ３＋ｚ１ｚ２ｚ３＋ｚ２ｚ３＋ｚ２ｚ３）
ｆ＊＝ｚ０ｚ３（ｚ１＋ｚ２ｚ３）
ｆ＊＝ｚ０ｚ１ｚ３＋ｚ０ｚ２ｚ３
【００９２】
したがって、関数＊を、ｚ０ｚ１ｚ３及びｚ０ｚ２ｚ３によってカバーすることができ、両方の項は最小項の最小項数を含む（異なる二重関数ｆ＊＝ｚ０ｚ１ｚ３＋ｚ０ｚ２を考えると、項ｚ０ｚ２は、最小項の最小数なので、ｆを表すために使用されることになる）。したがって、ｆを、
ｆ＝ｚ０＋ｚ１＋ｚ３＝ｂｃ’ｄ’＋ａｂ’＋ａｃ
あるいは、
ｆ＝ｚ０＋ｚ２＋ｚ３＝ｂｃ’ｄ’＋ａｄ’＋ａｃ
と簡略化することができる。
【００９３】
このようにして、補助ブール関数ｆ＊を、ｆの各出力に寄与するプライムインプリカントの和σｉの積として表すことができる：
【数６】
2021502634.tif 000012
ここで、Ｍは、ｆを表すために使用される最小項の数であり、項σｉは、以下のように表される：
【数７】
2021502634.tif 000013
【００９４】
したがって、ｚｉｋは、和σｉに寄与するｋ番目のプライムインプリカントを表す：
σ１＝ｚ１１＋ｚ１２＋・・・＋ｚ１｜ｚ１｜
σ２＝ｚ２１＋ｚ２２＋・・・＋ｚ２｜ｚ２｜
・・・
σＭ＝ｚＭ１＋ｚＭ２＋・・・＋ｚＭ｜ｚＭ｜
【００９５】
図６は、本開示の実施形態における縮小論理サブモジュールの例６００を示す。具体的には、図６は、４つのプロセッサコア６２２を使用して８つの論理サブモジュール６０８Ａ〜６０８Ｈを処理するシステムの例示的な例を示す。例６００では、ＬＰＴ貪欲法が使用され、目標は、システムのプロセッサ使用を最適化するために、プロセッサコアのすべてが可能な限りほぼ同じ時間に処理を終了することである。最初に、論理サブモジュール６０８Ａ〜６０８Ｈは、互いに対する論理サブモジュール６０８Ａ〜６０８Ｈの処理時間の推定値として、複雑度（例えば論理サブモジュール６０８Ａ〜６０８Ｈ内の論理ゲートの数）によって順序付けられてよい。しかしながら、論理サブモジュール６０８Ａ〜６０８Ｈの処理時間を推定する他の方法を使用してもよいと考えられる。
【００９６】
例６００では、最も長い推定処理時間を有する最初の４つの論理サブモジュール６０８Ａ〜６０８Ｄは、プロセッサコア６２２間でラウンドロビン又は擬似ランダム方式で分配されてもよい。分かるように、コア４によって処理されている論理サブモジュール６０８Ｄは、４つのうちの最小の推定処理時間を有し、最初に終了する。その結果、コア４は、論理サブモジュール６０８Ｅである、５番目に長い推定処理時間を有する未処理論理サブモジュールが割り当てられる。コア３は、次に処理論理サブモジュール６０８Ｃを終了し、６番目に長い推定処理時間を有する論理サブモジュールである、論理サブモジュール６０８Ｆに割り当てられる。コア２は、処理論理サブモジュール６０８Ｂを終了し、論理サブモジュール６０８Ｇを受け取る。最後に、コア１は、最も長い推定処理時間を有する論理サブモジュールの処理を終了し、８つの論理サブモジュール６０８Ａ〜６０８Ｈのうち最も短い推定処理時間を有する論理サブモジュールである、論理サブモジュール６０８Ｈを受け取る。例６００に見られるように、４つのプロセッサコア６２２のすべてが、８つの論理サブモジュール６０８Ａ〜６０８Ｈをほぼ同じ時間に処理を終了し、結果としてプロセッサのアイドル時間を短縮する。
【００９７】
図７は、本開示の一実施形態のプライムインプラント縮小の例７００を示す。具体的には、図７は、例えば図２の算術回路縮小モジュール２２０によって、上述のステップに従って簡略化されたプライムインプリカントσ１〜σ５のセットを示している。例えば積項σｉをリスト｛σ１，．．．，σＭ｝と考える。実施形態において、各ステップにおいて、リストの２つのメンバーが比較され（「左」及び「右」メンバーと呼ばれる）、可能であれば簡略化される。例７００では、時間ｔ１において、左メンバー７０２Ａ（σ１）が右メンバー７０４Ａ（σ２）とペアになり、ｆ＊の積項は、上記でリストされたもののようなブール簡略化ルールを使用して簡略化される。左メンバー７０２Ａ及び右メンバー７０４Ａを簡略化することができる場合、左メンバーは、新たな項σ１２で置き換えられることになる。しかしながら、例７００では、左メンバー７０２Ａ及び右メンバー７０４Ａを更に簡略化することができないことが分かる。
【００９８】
その後、時間ｔ２において、左メンバー７０２Ｂ（σ１）は、右メンバー７０４Ｂ（σ３）と連結され、ブール簡略化ルールに従って処理される。この場合、例７００では、左メンバー７０２Ｂ及び右メンバー７０４Ｂをσ１３に簡略化できることが分かる。したがって、時間ｔ３において、左メンバー７０２Ｃ（σ１３）が右メンバー７０４Ｃ（σ４）と比較される。例７００では、左メンバー７０２Ｃ及び右メンバー７０４Ｃを更に簡略化することができない。
【００９９】
同様に、時間ｔ４において、左メンバー７０２Ｄ及び右メンバー７０４Ｄ（σ５）も同様に、更に簡略化することはできない。すべての右メンバーがチェックされた後、左メンバーは、リスト内のその次のメンバーに設定され、例７００では、次のメンバーはσ２である。したがって、時間ｔ５において、左メンバー７０２Ｅ（σ２）は、右メンバー７０４Ｅ（σ４）と連結され、ブール簡略化ルールに従って、それらはσ２４に簡略化され、左メンバーの値となる。したがって、時刻ｔ６において、左メンバー７０２Ｆ（σ２４）は、右メンバー（σ５）と連結され、処理されて、σ２４５に簡略化される。このプロセスは、時点ｔ７で見られるように、それ以上のチェックが利用できなくなったときに終了する。
【０１００】
実施形態において、簡略化ステップの数は、Ｍ（Ｍ−１）／２によって上限設定される。実施形態では、ペア（左、右）の各簡略化ステップは、以下のオペレーションの実行からなる：
１．ルール１に従って（左、右）を簡略化するよう試み、
２．ルール２に従って（左、右）を簡略化するよう試み、
３．ルール３に従って（左、右）を簡略化するよう試みる。
【０１０１】
実施形態において、ルール１、ルール２及びルール３におけるｕ項は、（左、右）のペアの共通部分を表す。実施形態における左右メンバーの加数の間のクロスチェック（交差）は、特有の実装（ナイーブ又はソートされたリスト）に応じて、例えば時間複雑性ｏ（ｎ２）又はｏ（ｎｌｏｇｎ）によって特徴付けられる。
【０１０２】
実施形態において、簡略化プロセスが完了した後、残りの積項σｉを、時間複雑性ｏ（１）を有するｐ個の項σ＊の和として、明示的な形式で表すことができる。したがって、関数ｆ＊は、各項によってカバーされ得る：
【数８】
2021502634.tif 000014
【０１０３】
ｐの値は、成功した簡略化オペレーションの数に依存することに留意されたい。実施形態において、項
【数９】
2021502634.tif 000015
の各々は、実際には、プライムインプリカントｚｉの積であり、関数ｆ＊は、プライムインプリカントの最小数を含むσ＊内の最小項
【数１０】
2021502634.tif 000016
によってカバーされ得る。
ここで、
【数１１】
2021502634.tif 000017
であり、関数
【数１２】
2021502634.tif 000018
は、
【数１３】
2021502634.tif 000019
内に含まれるプライムインプリカントの数
【数１４】
2021502634.tif 000020
をカウントする。最終的に二重関数ｆは以下のように表わされてよい：
【数１５】
2021502634.tif 000021
【０１０４】
実施形態において、図５の論理サブモジュール５０８Ａ〜５０８Ｂのような個々の論理サブモジュールは、より高速な処理のために、異なる処理コアによって並列に簡略化されてよいと考えられる。そのような実施形態では、計算的に最適化されたヒューリスティックをスケジューラによって実行して、ＬＰＴ貪欲法と呼ばれる、論理縮小段階のための異なる処理コアに個々の論理サブモジュールを割り当てる。ジョブが処理時間によってソートされ、次いで、それまでで最も早い終了時間のマシン（処理コア）に割り当てられる場合、スケジューラは、処理されている各論理サブモジュールに対して計算負荷をバランスさせようとする。
【０１０５】
実施形態において、論理サブモジュール（Ｓｉ）の初期ゲートｇｉの数は、Ｓｉを減らすために必要な期待される時間の適切なインジケータであると推定される（例えばゲートの数が多いほど、期待される処理時間は長くなる）。したがって、減らすべきＮ個のコアとｎ個のサブモジュールを有するマシンを所与とすると、サブモジュールＳｉは、それらのｇｉ値（１≦ｉ≦ｎ）によってソートされ、次いで、所与の時間ｔ’において最も低い集約Ｇｊ（ｔ’）メトリックでコアｊのリスト｛ｌｉｓｔｊ｝に割り当てられる：
【数１６】
2021502634.tif 000022
【０１０６】
あるいは、サブモジュールＳｉは、ｇｉ値を考慮することなく、ラウンドロビン方式で処理コアに割り当てられてよい。例えばｉ（ｍｏｄｕｌｏＮ）＝ｊのとき、Ｓｉをコアｊに割り当てることができる。
【０１０７】
図８は、様々な実施形態による、ＤＳＬコントラクトを縮小算術回路に変形するためのプロセス８００の一例を示すフローチャートである。プロセス８００の一部又はすべて（又は説明された任意の他のプロセス、あるいはこれらのプロセスの変形及び／又は組合せ）を、実行可能な命令及び／又は他のデータで構成される１つ以上のコンピュータシステムの制御下で実行することができ、１つ以上のプロセッサ上で集合的に実行する実行可能な命令として実装してよい。実行可能な命令及び／又は他のデータを、非一時的コンピュータ読取可能な記憶媒体（例えば磁気媒体、光媒体又はフラッシュ媒体に永続的に記憶されるコンピュータプログラム）に記憶することができる。
【０１０８】
例えばプロセス８００の一部又はすべてを、１つ以上のコンピューティングデバイスによって（例えばデータセンター内のサーバによって、クライアントコンピューティングデバイスによって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって又は図１０のコンピューティングデバイス１０００のような任意の適切な電子クライアントデバイスによって）実行することができる。プロセス８００は、ＤＳＬで書かれたスマートコントラクトがＧＰＬに変換され、予めコンパイルされ、算術回路に変形される一連の動作を含む。算術回路は、本開示及び出力で説明される技術に従って縮小される。
【０１０９】
８０２において、プロセス８００を実行するシステムは、ＤＳＬで書かれたスマートコントラクトを取得する。上述のように、ＤＳＬは、特定のフィールドで使用するために設計されたコンピュータプログラミング言語であってよい。実施形態において、スマートコントラクトのような金融商品を構成するために考案されたＤＳＬが使用されてよい。このようなＤＳＬは、平均的なユーザにとってスマートコントラクトをより容易に書き込み、読み取ることができるものにし、非専門家のプログラマが、いずれの暗号も実装することなく、スマートコントラクトを書き込むことを可能にし得る。
【０１１０】
８０４において、プロセス８００を実行するシステムは、スマートコントラクトをＧＰＬに変換する。このようにして、ＤＳＬスマートコントラクトは、ブロックチェーンで使用するために、暗号プロトコルにコンパイル／解釈することができる一般的な形式に変換される。実施形態において、ＧＰＬはＣ＋＋のソースコードであるが、他のＧＰＬ言語を使用してもよいと考えられる。
【０１１１】
８０６において、ＧＰＬソースコードは予めコンパイルされ、これは、ライブラリファイル及び／又は他の依存関係を予めコンパイルされたソースコードに取り込んでよい。また、予めコンパイルするプロセスは、変数名を難読化してもよく、これは、ブロックチェーンにコミットした後で、スマートコントラクトの性質を公から隠すという利点を有し得る。
【０１１２】
８０８において、プロセス８００を実行するシステムは、例えば様々なコマンド、条件文、変数、算術演算を算術アルゴリズムに変形することによって、予めコンパイルされたソースコードを算術回路に変換する。この算術アルゴリズムは、図５に示されているものと同様に、有向巡回グラフとして表現され得る。
【０１１３】
８１０において、プロセス８００を実行するシステムは、８０８において生成された算術アルゴリズムに対して縮小プロセスを実行する。縮小プロセスは、図９のプロセス９００と同様であってもよい。この縮小プロセスの結果、図１のノード１０２のようなブロックチェーンノードによってより効率的に処理され得る、より小さく簡略化された算術アルゴリズムを得ることができる。
【０１１４】
８１２において、プロセス８００を実行するシステムは、縮小算術回路を出力する。いくつかの実施形態では、システムは、縮小回路を図４のＱＡＰ多項式４１８のようなＱＡＰ多項式に変形する別のプロセスに、縮小回路を提供する。他の実施形態では、システムは、縮小回路を、将来の使用のために、データストア又は他の記憶リソースに提供する。更に他の実施形態では、システムは、例えばユーザインタフェースのディスプレイを通じて、ユーザインタフェースを介して縮小回路を元のＤＳＬコントラクトの（例えばそれによって作成又は影響を受けるエンティティ）１つ以上のエンティティに提供する。８０２〜８１２で実行される１つ以上の動作は、並列を含め、様々な順序及び組合せで実行されてよいことに留意されたい。
【０１１５】
図９は、様々な実施形態による、予めコンパイルされたＧＰＬスマートコントラクトの算術回路縮小のプロセス９００の一例を示すフローチャートである。プロセス９００（又は説明される任意の他のプロセス、あるいはこれらのプロセスの変形及び／又は組合せ）の一部又はすべてを、実行可能な命令及び／又は他のデータで構成される１つ以上のコンピュータシステムの制御下で実行することができ、１つ以上のプロセッサ上で集合的に実行する実行可能な命令として実装され得る。実行可能な命令及び／又は他のデータを、非一時的なコンピュータ読取可能記憶媒体（例えば磁気媒体、光媒体又はフラッシュ媒体に永続的に記憶されたコンピュータプログラム）に記憶することができる。
【０１１６】
例えばプロセス９００の一部又はすべてを、１つ以上のコンピューティングデバイスによって（例えばデータセンター内のサーバによって、クライアントコンピューティングデバイスによって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって又は図１０のコンピューティングデバイス１０００のような任意の適切な電子クライアントデバイスによって）実行することができる。例えばプロセス９００は、図２の算術回路縮小モジュール２２０を実行した結果として実行されてよい。プロセス９００は、算術論理回路のプライムインプリカントを決定し、和の積として表し、積項の各ペアを論理ルールに対して比較して積項を簡略化することができるかどうかを判断し、すべてのペアを簡略化した後に、算術回路を縮小形式で出力する、一連の動作を含む。プロセス９００の動作は、図８の８１０の動作について拡張する。
【０１１７】
９０２において、プロセス９００を実行するシステムは、算術回路を取得する。算術回路は、一組の最小項から構成されてよい。実施形態において、取得される算術回路は、予めコンパイルされたＧＰＬソースコードから、例えば図４のＧＰＬ前処理コントラクト４１２等から変形されてよい。実施形態において、取得された算術回路はスマートコントラクトを表す。いくつかの実施態様において、スマートコントラクトは、ＤＳＬフォーマットで以前に書かれ、ＧＰＬフォーマットに変換された。
【０１１８】
９０４において、プロセスを実行するシステムは、図４に関連して上述した方法のように、算術論理回路のプライムインプリカントを分離（ｉｓｏｌａｔｅ）する。すなわち、システムは、算術回路の最小項のセットからインプリカントのセットを決定することができる。システムは、インプリカントのセットのうちのどのメンバーが、算術回路のプライムインプリカントのセット（すなわち、任意のリテラルが除去された場合に非インプリカントとなる積項）を構成するかを決定してよい。
【０１１９】
９０６において、プライムインプリカントのセットは、例えば図５に関して上述したように、プライムインプリカントの和σｉの積として扱われてよい。９０８において、プロセス９００を実行するシステムは、積項の第１ペアσＬとσＲを比較して、９１０において、図７に関して説明したように、ブール論理ルールに従ってペアを簡略化できるかどうかを判断する。簡略化できない場合、システムは９１４に進む。そうでなはく、簡略化できる場合、システムは、９１２のペアを結合して簡略化し、次いで、システムは９１４に進む。
【０１２０】
９１４において、プロセス９００を実行するシステムは、積項のすべてのペアが比較され、既約であることがわかったかどうかを判断する。積項のすべてのペアがそうされていない場合、システムは次いで９０８に戻り、積項の次のペアを比較する。さもなければ、９１６において、システムは、縮小された積項を、縮小算術回路である積の和として出力する。図８の８１２に関連して上記したように、システムは、縮小算術回路を、更なる処理のために別のプロセスに、データストアに、データファイルに又はユーザインタフェースに出力してよい。９０２〜９１６で実行される動作のうちの１つ以上が、並列を含め、様々な順序及び組合せで実行されてよいことに留意されたい。
【０１２１】
開示される実施形態を説明する文脈において、別段の規定がない限り、「命令」が通常単独では実行しない動作（例えばデータの送信、計算等）を実行する実行可能な命令（コード、アプリケーション、エージェント等とも呼ばれる）に関する表現の使用は、命令が機械によって実行されていることを意味し、それによって、機械に指定された動作を実行させる。
【０１２２】
図１０は、本開示の少なくとも１つの実施形態を実施するために使用することができるコンピューティングデバイス１０００の例示的な簡略化されたブロック図である。様々な実施形態において、コンピューティングデバイス１０００を使用して、上記で図示及び説明されたシステムのいずれかを実装することができる。例えばコンピューティングデバイス１０００は、データサーバ、ウェブサーバ、ポータブルコンピューティングデバイス、パーソナルコンピュータ又は任意の電子コンピューティングデバイスとして使用するために構成され得る。図１０に図示されるように、コンピューティングデバイス１０００は、実施形態において、バスサブシステム１００４を介して複数の周辺サブシステムと通信し、動作可能に結合される１つ以上のプロセッサ１００２を含むことができる。いくつかの実施形態において、これらの周辺サブシステムは、メモリサブシステム１００８及びファイル／ディスクストレージサブシステム１０１０を含むストレージサブシステム１００６と、１つ以上のユーザインタフェース入力デバイス１０１２と、１つ以上のユーザインタフェース出力デバイス１０１４と、ネットワークインタフェースサブシステム１０１６を含む。このようなストレージサブシステム１００６は、情報の一時的又は長期的な記憶のために使用され得る。
【０１２３】
いくつかの実施形態において、バスサブシステム１００４は、コンピューティングデバイス１０００の様々な構成要素及びサブシステムが、意図されるとおりに互いに通信することを可能にする機構を提供する。バスサブシステム１００４は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施形態は、複数のバスを利用する。いくつかの実施形態では、ネットワークインタフェースサブシステム１０１６は、他のコンピューティングデバイス及びネットワークへのインタフェースを提供する。ネットワークインタフェースサブシステム１０１６は、いくつかの実施形態では、コンピューティングデバイス１０００からデータを受け取り、他のシステムにデータを送信するためのインタフェースとして機能する。いくつかの実施態様において、バスサブシステム１００４は、詳細、検索語等のようなデータを通信するために利用される。
【０１２４】
いくつかの実施形態において、ユーザインタフェース入力デバイス１０１２は、キーボード等の１つ以上のユーザ入力デバイス；一体型マウス、トラックボール、タッチパッド又はグラフィックスタブレット等のポインティングデバイス；スキャナ；バーコードスキャナ；ディスプレイに組み込まれたタッチスクリーン；音声認識システム、マイクロフォン等のオーディオ入力デバイス；及び他のタイプの入力デバイスを含む。一般に、「入力デバイス」という用語の使用は、情報をコンピューティングデバイス１０００に入力するためのあらゆる可能なタイプのデバイス及び機構を含むように意図される。いくつかの実施形態において、１つ以上のユーザインタフェース出力デバイス１０１４は、ディスプレイサブシステム、プリンタ又はオーディオ出力デバイス等の非視覚的ディスプレイ等を含む。いくつかの実施形態において、ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）や発光ダイオード（ＬＥＤ）ディスプレイ、投影装置等のフラットパネルデバイス又は他のディスプレイデバイスを含む。一般に、「出力デバイス」という用語の使用は、コンピューティングデバイス１０００からの情報を出力するためのあらゆる可能なタイプのデバイス及び機構を含むように意図される。１つ以上のユーザインタフェース出力デバイス１０１４を使用して、例えばユーザインタフェースを提示し、そのような対話が適切であり得るときに、説明されたプロセス及びその変形を実行するアプリケーションとのユーザ対話を容易にすることができる。
【０１２５】
いくつかの実施形態において、ストレージサブシステム１００６は、本開示の少なくとも１つの実施形態の機能を提供する基本プログラミング及びデータ構成体を記憶するためのコンピュータ読取可能記憶媒体を提供する。アプリケーション（プログラム、コードモジュール、命令）は、いくつかの実施形態において１つ以上のプロセッサによって実行されるとき、本開示の１つ以上の実施形態の機能を提供し、実施形態においては、ストレージサブシステム１００６に記憶される。これらのアプリケーションモジュール又は命令を、１つ以上のプロセッサ１００２によって実行することができる。様々な実施形態において、ストレージサブシステム１００６は更に、本開示に従って使用されるデータを記憶するためのリポジトリを提供する。いくつかの実施形態では、ストレージサブシステム１００６は、メモリサブシステム１００８及びファイル／ディスクストレージサブシステム１０１０を含む。
【０１２６】
実施形態において、メモリサブシステム１００８は、複数のメモリ、例えばプログラム実行中の命令及びデータの格納のためのメインランダムアクセスメモリ（ＲＡＭ）１０１８及び／又は固定命令を格納することができる読取専用メモリ（ＲＯＭ）１０２０を含む。いくつかの実施形態において、ファイル／ディスクストレージサブシステム１０１０は、プログラムファイル及びデータファイルのための非一時的な永続的（不揮発性）ストレージを提供し、ハードディスクドライブ、関連する取り外し可能媒体とともにフロッピーディスクドライブ、コンパクトディスク読取専用メモリ（ＣＤ−ＲＯＭ）ドライブ、光学ドライブ、取り外し可能媒体カートリッジ又は他の同様の記憶媒体を含むことができる。
【０１２７】
いくつかの実施形態において、コンピューティングデバイス１０００は、少なくとも１つのローカルクロック１０２４を含む。少なくとも１つのローカルクロック１０２４は、いくつかの実施形態では、特定の開始日から発生したティックの数を表すカウンタであり、いくつかの実施形態では、コンピューティングデバイス１０００内に一体的に配置される。様々な実施形態では、少なくとも１つのローカルクロック１０２４は、特定のクロックパルスにおいてコンピューティングデバイス１０００のためのプロセッサ及びそこに含まれるサブシステム内でデータ転送を同期させるために使用され、コンピューティングデバイス１０００と、データセンター内の他のシステムとの間の同期オペレーションを調整するために使用され得る。別の実施形態では、ローカルクロックは、プログラム可能な間隔のタイマである。
【０１２８】
コンピューティングデバイス１０００は、ポータブルコンピュータデバイス、タブレットコンピュータ、ワークステーション又は以下に説明される任意の他のデバイスを含む、様々なタイプのいずれかとすることができる。加えて、コンピューティングデバイス１０００は、いくつかの実施形態では、１つ以上のポート（例えばＵＳＢ、ヘッドフォンジャック、ライトニングコネクタ等）を通してコンピューティングデバイス１０００に接続することができる別のデバイスを含むことができる。実施形態において、このようなデバイスは、光ファイバコネクタを受け入れるポートを含む。したがって、いくつかの実施形態において、このデバイスは、光信号を、処理のためにデバイスをコンピューティングデバイス１０００に接続するポートを通して伝送される電気信号に変換する。コンピュータ及びネットワークの絶えず変化する性質のために、図８に示されるコンピューティングデバイス１０００の説明は、デバイスの好ましい実施形態を説明する目的のための特定の例としてのみ意図されている。図１０に示されるシステムよりも多くの又は少ない構成要素を有する多くの他の構成も可能である。
【０１２９】
したがって、本明細書及び図面は、制限的な意味ではなく例示的な意味に考えられるべきである。しかしながら、特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更をそれに加えることができることは明らかであろう。同様に、他の変形も本開示の範囲内である。したがって、開示される技術は、様々な修正及び代替の構成を受けやすいが、それらの特定の例示された実施形態は、図面に示され、上記で詳細に説明されている。しかしながら、開示された特定の１つ以上の形態に本発明を限定する意図はないが、反対に、添付の特許請求の範囲に定義されているように、本発明の範囲内にあるすべての修正、代替の構成及び均等物をカバーするよう意図されていることを理解すべきである。
【０１３０】
開示される実施形態を説明する文脈において（特に、以下の特許請求の範囲の文脈において）、「ａ」及び「ａｎ」並びに「ｔｈｅ」及び類似の指示物の使用は、別段の指示又は明白な矛盾がない限り、単数形及び複数形の両方を含むものと解釈されるべきである。「備える」、「有する」、「含む」及び「包含する」という用語は、別段の指示がない限り、オープンエンドの用語（すなわち、「含む」を意味するが、これに限定されない）と解釈されるべきである。「接続される」という用語は、修正されず物理的接続を指すとき、何かの介在が存在する場合であっても、部分的又は全体的に、内部に含まれ、取り付けられ又は一緒に連結されているものと解釈されるべきである。本開示における値の範囲の記載は単に、別段の指示がない限り、範囲内にある各個別の値を個々に参照する簡略法として機能するように意図されており、各個別の値は、個々に記載されているかのように本明細書に組み込まれる。「セット」（例えば「アイテムのセット」）又は「サブセット」）という用語の使用は、文脈により別段の注記又は矛盾がない限り、１つ以上のメンバーを含む空でない集合として解釈されるべきである。さらに、文脈によって別段の注記又は矛盾がない限り、対応するセットの「サブセット」という用語は、必ずしも対応するセットの適切なサブセットを示すものではないが、サブセット及び対応するセットは等しくてもよい。
【０１３１】
結合語、例えば「Ａ、Ｂ及びＣのうちの少なくとも１つ」又は「Ａ、Ｂ及びＣのうちの少なくとも１つ」という形式のフレーズは他の方法で、特に別段の記載がない限り又は文脈によって明確に矛盾しない限り、アイテム、用語等がＡ又はＢ又はＣのいずれかであり得るか、、ＡとＢとＣのセットの任意の空でないサブセットであり得ることを示すように、一般的に使用されるような文脈で理解される。例えば３つのメンバーを有するセットの具体的な例において、「Ａ、Ｂ及びＣのうちの少なくとも１つ」及び「Ａ、Ｂ及びＣのうちの少なくとも１つ」という結合フレーズは、以下のセット、すなわち｛Ａ｝、｛Ｂ｝、｛Ｃ｝、｛Ａ，Ｂ｝、｛Ａ，Ｃ｝、｛Ｂ，Ｃ｝、｛Ａ，Ｂ，Ｃ｝のいずれかを指す。したがって、そのような結合語は、一般に、特定の実施形態が、Ａの少なくとも１つ、Ｂの少なくとも１つ及びＣの少なくとも１つの各々が存在することを必要とすることを示唆するようには意図されない。
【０１３２】
説明されるプロセスの動作は、別段の指示がない限り又は文脈によって明らかに矛盾しない限り、任意の適切順序で実行され得る。説明されるプロセス（又はその変形及び／又は組合せ）は、実行可能な命令で構成される１つ以上のコンピュータシステムの制御下で実行され得、ハードウェア又はそれらの組合せによって、１つ以上のプロセッサ上で集合的に動作するコード（例えば実行可能な命令、１つ以上のコンピュータプログラム又は１つ以上のアプリケーション）として実装され得る。いくつかの実施形態において、コードは、例えば１つ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形態で、コンピュータ読取可能な記憶媒体に記憶され得る。いくつかの実施形態では、コンピュータ読取可能記憶媒体は非一時的である。
【０１３３】
提供される任意の及びすべての例又は例示的言語（例えば「のような」）の使用は、本発明の実施形態をより良く明らかにすることのみを意図したものであり、別段に請求されない限り、本発明の範囲に対して限定を課すものではない。本明細書における言語は、いずれかの請求されていない要素を本発明の実施に不可欠であるように指示するものとして解釈されてはならない。
【０１３４】
本発明を実施するために発明者に知られている最良の形態を含め、本開示の実施形態が記載される。これらの実施形態の変形は、前述の説明を読むと当業者に明らかになるであろう。本発明者らは、当業者がそのような変形を必要に応じて採用することを期待しており、本発明者らは、本開示の実施形態を、具体的に記載された以外の方法で実施することを意図している。したがって、本開示の範囲は、適用可能な法律によって許容されるように、本明細書に添付された特許請求の範囲に記載された主題のすべての修正及び均等物を含む。さらに、上述の要素のあらゆる可能な変形における任意の組合せは、別段の指示がない限り又は文脈によって明らかに矛盾しない限り、本開示の範囲に包含される。
【０１３５】
本明細書において引用された刊行物、特許出願及び特許を含むすべての文献は、それにより、参照によって組み込まれるように各文献を個々に具体的に示し、本明細書においてその全体を述べたものと同じ限度で、参照によって本明細書に組み込まれる。
【０１３６】
上述の実施形態は、本発明を限定するものではなく、例示するものであり、当業者は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく、多くの代替の実施形態を設計することができることに留意されたい。請求項において、括弧内に付したすべての引用符号は、請求項を限定するものと解釈されるべきではない。「備えた（ｃｏｍｐｒｉｓｉｎｇ）」及び「備える（ｃｏｍｐｒｉｓｅｓ）」等の用語は、いずれかの請求項又は明細書全体に列挙されるもの以外の要素又はステップの存在を除外するものではない。本明細書において、「備える」は「含む又はから構成される」を意味し、「備えた」又は「含む又はから構成された」を意味する。要素の単数形参照は、そのような要素の複数形参照を除外するものではなく、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって及び適切にプログラムされたコンピュータによって実装され得る。いくつかの手段を列挙するデバイスクレームにおいては、これらの手段のいくつかが、１つの同じハードウェアアイテムによって具体化され得る。特定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組合せを有利に利用することができないことを示すものではない。
【０１３７】
要約
本開示において説明され、示唆された新規な技術は、ブロックチェーンデータ構造内に記憶されたデータの完全性を保証するブロックチェーンの特性を妨げることなく、ブロックチェーンの機能性を拡張する。例えばこの技術は、特に、レコードに埋め込まれたブロックチェーントランザクション内で検証のための条件が定義されているデジタルレコード検証の分野において、計算の分野を改善することができる。本開示に記載及び示唆される技術は、ブロックチェーン上で検証されているスマートコントラクトを簡略化することによってブロックチェーンノードが処理リソースの使用を最適化することを可能にすることにより、スマートコントラクトの生成及び実行の分野における計算の分野を更に改善することができる。加えて、本開示で記載及び示唆される技術は、二次算術プログラムを導出することができる縮小算術回路にスマートコントラクトを変形し、それにより、ブロックチェーンノードがスマートコントラクトをより効率的に実行することを可能にすることによって、ブロックチェーンノードの効率を改善することができる。
【０１３８】
さらに、本開示で記載及び示唆される技術は、スマートコントラクトの詳細が公的に閲覧可能であるという具体的に生じる問題を克服するために、スマートコントラクトがブロックチェーンにコミットされた後に、スマートコントラクトをＤＳＬからＧＰＬに、次いで、縮小算術に変換し、その結果として、スマートコントラクトの詳細の一部を難読化させることによって、必然的にコンピュータ技術に根ざし得る。
【図１】
2021502634.tif 000023
【図２】
2021502634.tif 000024
【図３】
2021502634.tif 000025
【図４】
2021502634.tif 000026
【図５】
2021502634.tif 000027
【図６】
2021502634.tif 000028
【図７】
2021502634.tif 000029
【図８】
2021502634.tif 000030
【図９】
2021502634.tif 000031
【図１０】
2021502634.tif 000032
【国際調査報告】
2021502634.tif 000033
2021502634.tif 000034
2021502634.tif 000035