(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024099659
(43)【公開日】2024-07-25
(54)【発明の名称】最適化された検証可能な計算のための実行可能命令を簡略化するためのシステム
(51)【国際特許分類】
G06F 21/14 20130101AFI20240718BHJP
H04L 9/32 20060101ALI20240718BHJP
G06F 9/30 20180101ALI20240718BHJP
【FI】
G06F21/14
H04L9/32 200E
H04L9/32 200B
G06F9/30 350G
【審査請求】有
【請求項の数】13
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024067707
(22)【出願日】2024-04-18
(62)【分割の表示】P 2023026258の分割
【原出願日】2018-10-29
(31)【優先権主張番号】1718505.9
(32)【優先日】2017-11-09
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1719998.5
(32)【優先日】2017-11-30
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1720768.9
(32)【優先日】2017-12-13
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1801753.3
(32)【優先日】2018-02-02
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1805948.5
(32)【優先日】2018-04-10
(33)【優先権主張国・地域又は機関】GB
(31)【優先権主張番号】1806444.4
(32)【優先日】2018-04-20
(33)【優先権主張国・地域又は機関】GB
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.PYTHON
2.SWIFT
3.ERLANG
(71)【出願人】
【識別番号】318001991
【氏名又は名称】エヌチェーン ライセンシング アーゲー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【弁理士】
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】コヴァチ,アレグザンドラ
(72)【発明者】
【氏名】マデオ,シモーネ
(72)【発明者】
【氏名】モティリンスキ,パトリック
(72)【発明者】
【氏名】ヴィンセント,ステファヌ
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033BE06
(57)【要約】
【課題】本発明は、コンセンサスベースのブロックチェーンのような分散台帳技術を提供する。
【解決手段】スマートコントラクトから導出された算術回路を縮小するためのコンピュータ実装方法が説明される。本発明は、例えばビットコインブロックチェーンであり得るブロックチェーンネットワークを使用して実装される。第1プログラミング言語で符号化された条件のセットが取得される。条件のセットは、第2プログラミング言語で符号化された条件のプログラムのセットに変換される。条件のプログラムのセットは、予めコンパイルされたプログラムコードに予めコンパイルされる。予めコンパイルされたプログラムコードは、算術回路に変形される。算術回路を縮小して縮小算術回路を形成し、縮小算術回路を格納する。
【選択図】
図4
【特許請求の範囲】
【請求項1】
コンピュータ実施される検証方法であって、当該方法は、処理リソースを使用して実施され、当該方法は、
第1プログラミング言語で符号化された条件のセットを取得するステップと、
前記条件のセットを、第2プログラミング言語で符号化された条件のプログラムセットに変換するステップで、
前記条件のプログラムセットを予めコンパイルされたプログラムコードに予めコンパイルするステップと、
前記予めコンパイルされたプログラムコードを算術回路に変形するステップであって、前記算術回路は、正当性のプルーフを生成するために使用される、ステップと、
前記算術回路の出力を受け取るクライアントノードから取得された秘密値を使用して検証鍵を取得するステップと、
を含み、前記正当性のプルーフと前記検証鍵とを使用して、ブロックチェーントランザクションが検証される、方法。
【請求項2】
前記正当性のプルーフは、ブロックチェーンに格納される、
請求項1に記載の方法。
【請求項3】
前記正当性のプルーフは、作業者ノードが複数の当事者と別々に対話することを必要とせずに、複数の当事者によって検証される、
請求項1に記載の方法。
【請求項4】
前記算術回路を縮小することは、前記算術回路を最小化して縮小算術回路を生成することを含む、
請求項1に記載の方法。
【請求項5】
前記算術回路は、
論理ゲート及び入力を表すノードのセットと、
前記論理ゲートと前記入力の間のワイヤを表す前記ノードを接続するエッジのセットと、
を含む有向非巡回グラフである、
請求項1乃至4のいずれかに記載の方法。
【請求項6】
前記算術回路は、前記ノードのセットのうちの適切なサブセットを含む論理サブモジュールを含み、
前記算術回路を縮小することは、前記算術回路の残り部分とは別に前記論理サブモジュールを縮小することを含む、
請求項5に記載の方法。
【請求項7】
前記論理サブモジュール内の前記論理ゲートの間の前記ワイヤは、幅が1ビットである、
請求項6に記載の方法。
【請求項8】
前記算術回路は、前記ノードのセットのうちの他のサブセットを含む他の論理サブモジュールを更に含み、前記ノードのサブセット及びノードの前記他のサブセットは交わっておらず、
前記算術回路を縮小することは、第2プロセッサコアを使用して前記他の論理サブモジュールを縮小することと並列に第1プロセッサコアを使用して前記論理サブモジュールを縮小することを更に含む、
請求項6に記載の方法。
【請求項9】
前記算術回路を縮小することは、
前記算術回路のプライムインプリカントのセットを決定することと、
前記プライムインプリカントのセットを、第1積項及び第2積項を含む和の積として表すことと、
前記第1積項及び前記第2積項を簡略化することと、
を含む、請求項1乃至8のいずれかに記載の方法。
【請求項10】
前記第1積項及び前記第2積項を簡略化することは、ブール最小化ルールを前記第1積項及び前記第2積項に適用することによって実行される、
請求項9に記載の方法。
【請求項11】
縮小算術回路を説明する多項式のセットを含む二次プログラムを生成するステップと、
前記二次プログラムの実行においてブロックチェーンネットワーク内のノードによって使用されるパラメータのセットを生成するステップと、
を更に含む、請求項1乃至10のいずれかに記載の方法。
【請求項12】
システムにおいて、
プロセッサと、
前記プロセッサによって実行された結果として、当該システムに、請求項1に記載の方法を実行させる、実行可能命令を含むメモリと、
を含むシステム。
【請求項13】
コンピュータシステムのプロセッサによって実行された結果として、前記コンピュータシステムに、請求項1に記載の方法を少なくとも実行させる、実行可能命令を記憶している非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、ブロックチェーン技術に関し、より具体的には、スマートコントラクトを算術回路に変換し、算術回路を最小化することによって、スマートコントラクトを最適化し、難読化(obfuscating)することに関する。本発明は更に、暗号技術及び数学技術を利用して、ブロックチェーンネットワーク上で行われる電子転送に関連してセキュリティを実施する。本発明は、スマートコントラクトの生成及び実行における使用に特に適しているが、これらに限定されない。
【背景技術】
【0002】
本明細書において、「ブロックチェーン」という用語は、いくつかのタイプの電子的なコンピュータベースの分散台帳のいずれかを指してよい。これらは、コンセンサスベースのブロックチェーン及びトランザクションチェーン技術、許可及び未許可台帳、共有台帳及びそれらの変形を含む。最も広く知られているブロックチェーン技術の用途はビットコイン台帳であるが、他のブロックチェーンの実装が提案され、開発されている。便宜性及び例示の目的のために、ビットコインの例が本開示で説明される技術の有益な用途として参照され得るが、ビットコインは、本開示で説明される技術が適用され得る多くの用途の1つに過ぎない。しかしながら、本発明は、ビットコインブロックチェーンでの使用に限定されず、非商業的用途を含む代替的なブロックチェーン実装及びプロトコルも本発明の範囲内に含まれることに留意されたい。例えば本開示に記載される技術は、暗号通貨の交換が起こるかどうかにかかわらず、トランザクション内で符号化され得る制約に関して、ビットコインと同様の制限を有する他のブロックチェーン実装を利用する利点を提供するであろう。
【0003】
ブロックチェーンは、ブロックにより構成される、コンピュータベースの非集中型のシステムとして実装されるピアツーピア電子台帳であり、ブロックはトランザクション及び他の情報により構成され得る。いくつかの例において、「ブロックチェーントランザクション」は、データ及び条件のセットを含むフィールド値の構造化されたコレクションを符号化する入力メッセージを指し、この場合、条件のセットを満たすことは、フィールドのセットがブロックチェーンデータ構造に書き込まれるための前提条件である。例えばビットコインでは、各トランザクションは、ブロックチェーンシステムの参加者間のデジタル資産の制御の移転を符号化し、少なくとも1つの入力及び少なくとも1つの出力を含む、データ構造である。いくつかの実施形態において、「デジタル資産」は、使用権に関連付けられるバイナリデータを指す。デジタル資産の例は、ビットコイン、イーサ、ライトコインを含む。いくつかの実装において、デジタル資産の制御を移転することは、デジタル資産の少なくとも一部を第1エンティティから第2エンティティに再関連付けすることによって実行され得る。ブロックチェーンの各ブロックは、ブロックが一緒にチェーン化されることになり、その始めからブロックチェーンに書き込まれたすべてのトランザクションの永続的で変更不能なレコードを作成するように、以前のブロックのハッシュを含んでよい。
【0004】
いくつかの例において、「スタックベースのスクリプト言語」は、様々なスタックベース又はスタック指向の実行モデル及びオペレーションをサポートするプログラミング言語を指す。すなわち、スタックベースのスクリプト言語は、スタックを利用してもよい。スタックでは、値をスタックの先頭(top)にプッシュすることができ、あるいはスタックの先頭からポップすることができる。スタックに対して実行される様々なオペレーションの結果、1つ以上の値を、スタックの先頭へプッシュすること又はスタックの先頭からポップすることになり得る。例えばOP_EQUALオペレーションは、スタックから上位2つのアイテムをポップし、それらを比較し、結果(例えば等しい場合は1、等しくない場合は0)をスタックの先頭にプッシュする。OP_PICKのようにスタックに対して実行される他のオペレーションは、スタックの先頭以外の位置からアイテムを選択することを可能にすることがある。本実施形態のいくつかで用いられるいくつかのスクリプト言語では、少なくとも2つのスタック、すなわち、メインスタックと代替スタックが存在し得る。スクリプト言語のいくつかのオペレーションは、あるスタックの先頭から別のスタックの先頭にアイテムを移動させることができる。例えばOP_TOALTSTACKは、メインスタックの先頭から代替スタックの先頭に値を移動させる。スタックベースのスクリプト言語は、場合によっては、厳密な後入れ先出し(LIFO)方式のオペレーションのみに限定されないことに留意されたい。例えばスタックベースのスクリプト言語は、スタック内のn番目のアイテムを先頭にコピー又は移動させるオペレーション(例えばそれぞれ、ビットコインにおけるOP_PICK及びOP_ROLL)をサポートしてもよい。スタックベースのスクリプト言語で書かれたスクリプトは、ベクトル、リスト又はスタックのような任意の適切なデータ構造を使用して実装することができる論理スタック上にプッシュされ得る。
【0005】
トランザクションがブロックチェーンに書き込まれるためには、「検証(validate)」されなければならない。ネットワークノード(マイニングノード)は、各トランザクションが有効であることを保証するための作業を実行し、無効なトランザクションはネットワークから拒絶される。ノードは、他のノードとは異なる有効性の標準を有することができる。ブロックチェーンの有効性はコンセンサスベースであるので、トランザクションが有効であることに大多数のノードが同意した場合、トランザクションは有効であるとみなされる。ノードにインストールされているソフトウェアクライアントは、UTXOのロッキングスクリプト及びアンロッキングスクリプトを実行することにより、部分的に未使用トランザクション(UTXO:unspent transaction)を参照するトランザクションに対するこの検証作業を実行する。ロッキングスクリプト及びアンロッキングスクリプトの実行がTRUEに評価され、適用可能である場合に他の検証条件が満たされる場合、トランザクションはノードによって検証される。検証されたトランザクションは、他のネットワークノードに伝搬され、そこで、マイニングノードは、トランザクションをブロックチェーンに含めるように選択することができる。したがって、トランザクションがブロックチェーンに書き込まれるためには、i)トランザクションは、該トランザクションを受け取った最初のノードによって検証されなければならず、トランザクションが検証された場合、ノードはトランザクションをネットワーク内の他のノードに中継し;ii)トランザクションは、マイニングノードによって構築された新しいブロックに追加されなければならず;iii)マイニングされなければならない、すなわち、過去のトランザクションの公開台帳に追加されなければならない。トランザクションを実質的に不可逆にするために、十分な数のブロックがブロックチェーンに追加されると、トランザクションは確認されたとみなされる。
【0006】
ブロックチェーン技術は、暗号通貨実装の使用について最も広く知られているが、デジタル起業家達は、新たなシステムを実装するために、ビットコインが基づいている暗号セキュリティシステムと、ブロックチェーン上に格納することができるデータとの双方の使用を探求し始めている。暗号通貨の領域に限定されない自動化タスク及びプロセスにブロックチェーンを使用することができれば非常に有利であろう。そのようなソリューションは、それらの用途はより多方面にわたるが、ブロックチェーンの利点(例えば永続性、イベントの改ざん防止レコード、分散処理等)を利用することができるであろう。
【0007】
本開示は、1つ以上のブロックチェーンベースのコンピュータプログラムの技術的側面を説明する。ブロックチェーンベースのコンピュータプログラムは、ブロックチェーントランザクション内に記録される機械読取可能で実行可能なプログラムであってよい。ブロックチェーンベースのコンピュータプログラムは、結果を生成するために入力を処理することができ、次いで、それらの結果に依存してアクションを実行させることができるルールを含んでよい。現在の研究の1つの分野は、「スマートコントラクト」の実装のためのブロックチェーンベースのコンピュータプログラムの使用である。自然言語で書かれる伝統的な契約とは異なり、スマートコントラクトは、機械読み取り可能な契約又は合意の条件の実行を自動化するように設計されるコンピュータプログラムであってよい。
【0008】
実施形態において、特定のエンティティとの対話を、スマートコントラクトの特定のステップで符号化することができるが、スマートコントラクトは、そうでなければ、自動的に実行され、自己強制される可能性がある。それは、機械読み取り可能かつ実行可能である。いくつかの例では、自動実行は、UTXOの移転を可能にするために成功裏に実行されるスマートコントラクトの実行を指す。なお、このような例では、UTXOの移転送を可能にする「エンティティ」は、何らかの秘密の知識を証明することを必要とされることなく、アンロッキングスクリプトを作成することができるエンティティを指すことに留意されたい。言い換えると、データのソース(例えばアンロッキングトランザクションを作成したエンティティ)が暗号秘密(例えば秘密の非対称鍵、対称鍵等)へのアクセスを有することを確かめることなく、アンロッキングトランザクションを検証することができる。加えて、このような例では、自己強制とは、制約に応じてアンロッキングトランザクションを強制させているブロックチェーンネットワークの検証ノードを指す。いくつかの例では、UTXOを「アンロック」すること(UTXOの「消費(spending)」としても知られる)は、技術的な意味で使用されており、UTXOを参照して、有効として実行するアンロッキングトランザクションを作成することを指す。
【0009】
ブロックチェーントランザクションの出力は、ロッキングスクリプトと、ビットコイン等のデジタル資産の所有権に関する情報を含む。ロッキングスクリプトは、障害(encumbrance)とも呼ばれることがあり、UTXOを移転するために満足する必要がある条件を指定することにより、デジタル資産を「ロック」する。例えばロッキングスクリプトは、関連するデジタル資産をアンロックするために、特定のデータがアンロッキングスクリプトで提供されることを必要とする可能性がある。ロッキングスクリプトは、ビットコインでは「scriptPubKey」としても知られる。デジタル資産をアンロックするためにデータの提供を当事者に要求する技術は、ロッキングスクリプト内部にデータのハッシュを埋め込むことを伴う。しかしながら、これは、ロッキングスクリプトが作成される時点でデータが未定である(例えば未知で固定されていない)場合に問題を提示する。
【0010】
本発明は、検証方法/システムとして、かつ/又はブロックチェーントランザクションの検証を制御するための制御方法/システムとして説明され得る。いくつかの実施形態では、検証されたブロックチェーントランザクションの結果、ブロックチェーン上のトランザクションの記録をもたらし、これは、いくつかの用途では、ブロックチェーンを介したデジタル資産の交換又は移転をもたらすことがある。デジタル資産は、ブロックチェーンによって管理されるリソースの単位であってよい。デジタル資産は、実施形態によっては、暗号通貨として使用され得るが、デジタル資産は、実施形態によっては、他のコンテキストにおいて追加的又は代替的に使用可能であるように企図される。本発明は、デジタル資産の制御に適用可能であるが、本質的に技術的であり、デジタル資産の移転を必ずしも伴わずに、ブロックチェーンデータ構造を利用する他のコンテキストで使用できることに留意されたい。
【発明の概要】
【発明が解決しようとする課題】
【0011】
したがって、これらの態様の1つ以上においてブロックチェーン技術を改善する方法及びシステムを提供することが望ましい。このような改善されたソリューションが、現在では考案されている。したがって、本発明によれば、添付の特許請求の範囲で定義される方法が提供される。
【課題を解決するための手段】
【0012】
したがって、コンピュータ実施される方法を提供することが望ましく、コンピュータ実施される方法は、
第1プログラミング言語で符号化された条件のセットを、第2プログラミング言語で符号化された条件のプログラムセット(programmatic set)に変換するステップと;
条件のプログラムセットを予めコンパイルされたプログラムコードに予めコンパイルするステップと;
予めコンパイルされたプログラムコードを算術回路に変形する(transforming)ステップと;
算術回路を縮小(reducing)して縮小算術回路(reduced arithmetic circuit)を形成するステップと;
を含む。
【0013】
方法は、第1プログラミング言語で符号化された条件のセットを取得するステップを含んでよい。これは、変換するステップの前に実行されてよい。
【0014】
方法は、縮小算術回路を格納するステップを含んでよい。
【0015】
算術回路を縮小することは、算術回路を最小化して縮小算術回路を生成することを含んでよい。
【0016】
算術回路は、有向非巡回グラフ(directed acyclical graph)であってよい。あるいはまた、有向非巡回グラフは、論理ゲート及び入力を表すノードのセットを含んでよい。あるいはまた、有向非巡回グラフは、論理ゲートと入力の間のワイヤを表すノードをエッジのセットを含んでよい。
【0017】
算術回路は、ノードのセットのうちの適切なサブセット(proper subset)を含む論理サブモジュールを含んでよい。あるいはまた、算術回路を縮小することは、算術回路の残り部分とは別に論理サブモジュールを縮小することを含んでよい。
【0018】
論理サブモジュール内の論理ゲートの間のワイヤは、幅が1ビットであってよい。
【0019】
算術回路は、ノードのセットのうちの他のサブセットを含む別の論理サブモジュールを更に含んでよい。加えて、ノードのサブセット及びノードの他のサブセットは交わっていない(nonintersecting)ことがある。加えて、算術回路を縮小することは、第2プロセッサコアを使用して他の論理サブモジュールを縮小することと並列に第1プロセッサコアを使用して論理サブモジュールを縮小することを更に含んでよい。
【0020】
コンピュータ実施される方法は、計算リソース使用を最適化するためのヒューリスティックに従って、論理サブモジュールを第1プロセッサコアに割り当てて、他の論理サブモジュールを第2プロセッサコアに割り当てるステップを更に含んでよい。
【0021】
ヒューリスティックは、最長処理時間貪欲法(longest processing time greedy algorithm)であってよい。
【0022】
算術回路を縮小することは、算術回路のプライムインプリカント(prime implicant(主項))のセットを決定することを含んでよい。加えて、算術回路を縮小することは、プライムインプリカントのセットを、第1積項及び第2積項を含む和の積として表すことを含んでよい。加えて、算術回路を縮小することは、第1積項及び第2積項を簡略化する(simplifying)ことを含んでよい。
【0023】
第1積項及び第2積項を簡略化することは、ブール最小化ルール(Boolean minimisation rule)を第1積項及び第2積項に適用することによって実行されてよい。
【0024】
第2プログラミング言語はC++であってよい。
【0025】
第1プログラミング言語は、機械読取可能な金融コントラクトを構成するために考案されたコンピュータプログラミング言語であってよい。
【0026】
コンピュータ実施される方法は、縮小算術回路を説明する多項式のセットを含む二次プログラム(quadratic program)を生成するステップを更に含んでよい。加えて、コンピュータ実施される方法は、二次プログラムの実行においてブロックチェーンネットワーク内のノードによって使用されるパラメータのセットを生成するステップを更に含んでよい。
【0027】
また、プロセッサと、該プロセッサによって実行された結果として、システムに、特許請求に係る方法のいずれかを実行させる実行可能命令を含むメモリと、を含むシステムを提供することも望まれる。
【0028】
また、コンピュータシステムの1つ以上のプロセッサによって実行された結果として、コンピュータシステムに、特許請求に係る方法のいずれかを少なくとも実行させる、実行可能命令を記憶している非一時的コンピュータ読取可能記憶媒体を提供することも望まれる。
【0029】
本発明は、検証方法/システムとして及び/又はブロックチェーンを介したデジタル資産の交換又は移転を制御するための制御方法/システムとして説明できる。いくつかの実施態様において、デジタル資産は、暗号通貨のトークン又は一部である。以下で説明されるように、本発明はまた、ブロックチェーンネットワーク又はプラットフォームを介して動作を実行する新たな改善された有利な方法のためのセキュアな方法/システムとしても説明できる。あるいはまた、本発明は、改善されたブロックチェーンプログラミングツール又は補助を提供し得る。これは、分散された検証可能な計算を容易に又は可能にする、改善された効率的な最適化された構成を提供し得る。
【図面の簡単な説明】
【0030】
本発明のこれら及び他の態様は、本明細書で説明される実施形態から明らかになり、実施形態に関連して解明されるであろう。本発明の実施形態は、次に単なる例示として、添付の図面に関連して説明される:
【0031】
【
図1】様々な実施形態を実装することができるブロックチェーン環境を示す図である。
【
図3】一実施形態による、検証可能な計算及び関与する関係者の例を示すスイム図である。
【
図4】一実施形態による、ドメイン固有言語のコントラクトから二次算術プログラムへのワークフローの例を示す図である。
【
図5】一実施形態による、論理サブモジュールを含む算術回路の例を示す図である。
【
図6】一実施形態による、論理サブモジュールを並列に処理する例を示す図である。
【
図7】一実施形態による、プライムインプリカント縮小の例を示す図である。
【
図8】一実施形態による、ドメイン固有言語のコントラクトを縮小算術回路に変形する例を示すフローチャートである。
【
図9】一実施形態による、算術回路縮小の例を示すフローチャートである。
【
図10】様々な実施形態を実装することができるコンピューティング環境を示す図である。
【発明を実施するための形態】
【0032】
まず、本開示の一実施形態によるブロックチェーンに関連付けられる例示のブロックチェーンネットワーク100示す
図1を参照する。本実施形態では、例示のブロックチェーンネットワーク100は、ピアツーピア分散電子デバイスとして実装されるブロックチェーンノードを含み、その各々が、少なくとも部分的にノード102のオペレータ間で合意されるブロックチェーンプロトコルに従うオペレーションを実行するソフトウェア及び/又はハードウェアのインスタンスを実行する。いくつかの例において、「ノード」は、ブロックチェーンネットワークの間で分散されるピアツーピア電子デバイスを指す。ブロックチェーンプロトコルの一例がビットコインプロトコルである。
【0033】
いくつかの実施形態において、ノード102は、(例えばデータセンター内のサーバによって、クライアントコンピューティングデバイス(例えばデスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン等)によって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって、あるいは
図10のコンピューティングデバイス1000のような任意の適切な電子クライアントデバイスによって)任意の適切なコンピューティングデバイスから構成され得る。いくつかの実施形態において、ノード102は、トランザクション104のように提案されたトランザクションを表すデータメッセージ又はオブジェクトを受け取るための入力を有する。ノードは、いくつかの実施形態では、ノードが維持する情報について、例えばトランザクション104の状態の情報についてクエリ可能である。
【0034】
図1に示されるように、ノード102のいくつかは、ノード102のうちの1つ以上の他のノードに通信可能に結合される。このような通信結合は、有線又は無線通信のうちの1つ以上を含むことができる。実施形態において、ノード102は各々、ブロックチェーン内のすべてのトランザクションの「台帳」の少なくとも一部を維持する。このようにして、台帳は分散台帳となる。台帳に影響を与えるノードによって処理されるトランザクションは、台帳の完全性が維持されるように、他のノードのうちの1つ以上によって検証可能である。
【0035】
どのノード102が他のどのノードと通信することができるかに関しては、メッセージが、ブロックチェーンプロトコルが転送すべきことを示すメッセージであると想定して、ノード間で渡されるメッセージが例示のブロックチェーンネットワーク100全体(又はその何らかの重要な部分)に伝搬することができるように、例示のブロックチェーンネットワーク100内のノードの各々が、ノード102のうちの1つ以上の他のノードと通信することができることで十分である。1つのそのようなメッセージは、ノード102のうちの1つ、例えばノード102Aによる、提案されたトランザクションの公開であってよく、これは、次いでパス106のようなパスに沿って伝搬するであろう。別のそのようなメッセージは、ブロックチェーンに含めるために提案された新たなブロックの公開であってよい。
【0036】
一実施形態において、ノード102のうちの少なくともいくつかは、暗号問題を解決することのように複雑な計算を実行するマイニングノードである。暗号問題を解決するマイニングノードは、ブロックチェーンのための新たなブロックを作成し、その新たなブロックをノード102のうちの他のノードにブロードキャストする。ノード102のうちの他のノードは、マイニングノードの作業を確認し、確認時に、(例えばブロックチェーンの分散台帳にブロックを追加することによって)ブロックをブロックチェーン内に受け入れる。いくつかの例では、ブロックはトランザクションのグループであり、しばしば、タイムスタンプと前のブロックの「フィンガープリント」(例えばハッシュ)でマークされる。このようにして、各ブロックは前のブロックにリンクされるようになってよく、それによりブロックチェーン内のブロックをリンクする「チェーン」が生成される。実施形態において、有効なブロックは、ノード102の合意によってブロックチェーンに追加される。また、いくつかの例では、ブロックチェーンは、検証されたブロックのリストを含む。
【0037】
一実施形態において、ノード102のうちの少なくともいくつかは、本開示で説明されるように、トランザクションを検証する検証ノードとして動作する。いくつかの例では、トランザクションは、デジタル資産(例えば複数のビットコイン)の所有権のプルーフと、デジタル資産の所有権/制御を受け入れる又は移転するための条件を提供するデータを含む。いくつかの例において、「アンロッキングトランザクション」は、前のトランザクションのUTXOによって示されるデジタル資産の少なくとも一部を、ブロックチェーンアドレスに関連付けられるエンティティに再関連付けする(例えば所有権又は制御を移転する)ブロックチェーントランザクションを指す。いくつかの例において、「前のトランザクション」は、アンロッキングトランザクションによって参照されているUTXOを含むブロックチェーントランザクションを指す。いくつかの実施形態では、トランザクションは、所有権又は制御が移転され得る(「アンロックされる」)前に満たさなければならない条件で該トランザクションを妨げる「ロッキングスクリプト」を含む。
【0038】
いくつかの実施形態では、ブロックチェーンアドレスは、デジタル資産の少なくとも一部の制御が移転/再関連付けされているエンティティに関連付けられる英数字の文字列である。いくつかの実施形態で実装されるいくつかのブロックチェーンプロトコルでは、エンティティに関連付けられる公開鍵とブロックチェーンアドレスとの間に1対1の対応が存在する。いくつかの実施形態において、トランザクションの検証は、ロッキングスクリプト及び/又はアンロッキングスクリプトで指定された1つ以上の条件の検証を含む。トランザクション104の検証が成功すると、検証ノードはトランザクション104をブロックチェーンに追加し、それをノード102に分配する。
【0039】
図2は、本開示の一実施形態の実施例200を示す。具体的には、
図2は、算術回路214に変換されたスマートコントラクト206を示しており、算術回路は、次いで算術回路最適化モジュールによって、ブロックチェーン内の作業者ノード(worker node)250がスマートコントラクト206の結果を判断するために必要なリソースを低減するために縮小される。
【0040】
一実施形態において、スマートコントラクト202は、コンピューティングデバイスがコントラクトの条件を実行すること及び/又はコントラクトの条件が満たされているかどうかを判断することを可能にするフォーマットで書かれたコントラクト(contract:契約)又は合意である。スマートコントラクト202は、入力値のセットに対して評価された結果として、コンピューティングデバイスがスマートコントラクト202の結果を判断することを可能にするルール及び/又は条件のセットを含んでもよく、これは、次いで、結果に依存して、更なるアクションを実行させることができる。
【0041】
本開示の目的は、エンティティが、ドメイン固有のプログラミング言語を使用してスマートコントラクト202のもののようなルールのセット及び/又は条件のセットを構成することを可能にする、プロトコルを説明することである。いくつかの例において、ドメイン固有のプログラミング言語又は「ドメイン固有言語」(DSL)は、特定の使用分野において使用するために設計されたコンピュータプログラミング言語を指す。DSLの例には、ハイパーテキストマークアップ言語(HTML)、アクチュラスモデリング言語(AML)、デジタル資産モデリング言語(DAML)、金融商品マークアップ言語(EpML)及びEmacs Lispが含まれる。
【0042】
いくつかの例では、DSLとは対照的に、汎用プログラミング言語又は「汎用言語(GPL)」が広く適用可能である。汎用プログラミング言語の例には、Ada、ALGOL、アセンブリ言語、BASIC、Boo、C、C++、C#、Clojure、COBOL、Crystal、D,Dart、Elixir、Erlang、F#、Fortran、Go、Harbour、Haskell、Idris、Java(登録商標)、JavaScript(登録商標)、Julia、Lisp、Lua、Modula-2、NPL、Oberon、Objective-C、Pascal、Perl、PHP、Pike、PL/I、Python、Ring、RPG、Ruby、Rust、Scala、Simula、Swift及びTclが含まれる。本開示の実施形態において参照されることがあるC++は、命令的、オブジェクト指向及び一般的なプログラミング機能を有する汎用プログラミング言語であり、低レベルのメモリ操作のための能力も提供する。
【0043】
一実施形態において、算術回路214は、スマートコントラクト202を表す有向非巡回グラフ(DAG)である。すなわち、DAGのエッジ(「ワイヤ」)は、グラフ内のノード間の入力値又は値を表してよく、ノードは、算術演算(例えば和、積等)を表してよい。したがって、算術回路214への入力値は、スマートコントラクトへの入力値に関連付けられ、実施形態では、スマートコントラクトの結果は、算術回路214の結果と一致(match)する。様々な実施形態では、一致は必ずしも等価性を必要としないことに留意されたい。例えば2つの値が等しくないが数学的に同等である場合、2つの値が一致し得る。別の例として、2つの値は、それらが共通のオブジェクト(例えば値)に対応するか又は何らかの所定の方法で補足的であるか、かつ/又はそれらが1つ以上の一致基準を満たす場合に一致し得る。一般に、一致が存在するかどうかを判断する任意の方法が使用されてよい。
【0044】
一実施形態において、縮小算術回路216は、ブール最小化ルール又は他の数学的等価性ルールに従って算術回路縮小モジュール220によって縮小された算術回路の結果である。例えばブール代数では、式u+uvをuに単純に最小化することができ、同様に算術回路:
【表1】
を:
【表2】
に単純に最小化することができる。
【0045】
したがって、算術回路縮小モジュール220は、回路を縮小又は最小化する方法について算術回路214を評価することによって算術回路214を縮小/簡略化することができ、それによって算術回路縮小モジュール220が出力する、縮小算術回路216を生成する。
【0046】
一実施形態において、算術回路縮小モジュール220は実行された結果として、算術回路214をどこでどのようにして縮小できるかを決定するために、ブール最小化ルール又は他の数学的等価性ルールを用いて算術回路214内の積項を比較するオペレーションを実行することによって、縮小算術回路216を生成するハードウェア又はソフトウェアである。算術回路縮小モジュール220によって実行されるオペレーションの更なる詳細は、
図7~
図9の説明内に見られる。
【0047】
一実施形態において、作業者ノード250は、
図1のノード102及び
図3の作業者ノード350と同様に、ブロックチェーンネットワーク内のノードである。すなわち、作業者ノード250は、ブロックチェーンネットワーク内の1つ以上の他のノードと通信可能に結合されたブロックチェーントランザクションを処理及び/又は検証するように構成されたコンピューティングデバイスであってよい。作業者ノード250は、いくつかの実施形態において、一組の入力値を所与として、縮小算術回路216のような算術回路の出力を決定するように設計されてよい。
【0048】
実施形態において、コントラクトの実行を、信頼されていない当事者にアウトソーシングすることができるが、コントラクト実行の正当性を公的に検証することができる。実施形態において、プロトコルは、完全性、健全性及びゼロ知識を保証する暗号プリミティブを使用する。一部の例では、「完全性」は、証明者がプロトコルに正しく従う場合、検証者が出力の有効性を判断することができること指す。一部の例では、「健全性」は、証明者が、出力の確実性について検証者を欺くことができないことを指す。一部の例では、「ゼロ知識」は、検証者が、出力を生成するために使用された入力を導出できなくとも、出力を検証することができることを指す。
【0049】
このようにして、非専門家のプログラマが暗号それ自体を実装する必要なく、人間にとってスマートコントラクトの書き込み及び読み取りを容易にするように設計されたDSLを使用して、スマートコントラクトを生成することができる。本開示の実施形態では、コンパイラ/インタプリタは、ユーザからのDSLソースコードをブロックチェーンで使用可能な暗号プロトコルに自動的にコンパイルする。本開示において、実施形態は、単純な算術ゲートに関して複雑なコントラクトの表現のために高度に最適化されたソリューションを提供する。この表現は、分散された検証可能な計算を提供することができる包括的なパイプラインの構築のためのソリューション又はツールと見なすことができる。
【0050】
図3は、検証可能な計算のプロセス300の一例と本開示の実施形態に関与する関係者を示す図である。
図3に図示されるように、検証可能な計算のプロセス300は、本開示の実施形態における検証可能な計算プロトコルにおけるステップの実行に関与する、クライアントノード340、作業者ノード350及び検証者ノード360を含んでもよい。実施形態では、クライアントノード340、作業者ノード350又は検証者ノード360のうちの1つ以上は、
図1の例示的なブロックチェーンネットワーク100内のノード102のようなブロックチェーンネットワーク内のノードである。
【0051】
一実施形態において、セットアップ段階は、DSLでコントラクトを書くことを含む。インタプリタは、クライアントノード340であってもよく、ソースコードを入力として取り、フィールド
【数1】
からの値を担持して加算及び乗算ゲートに接続する「ワイヤ」からなる算術回路Cを生成する。算術回路自体はハードウェア回路ではなくDAGであってもよく、ワイヤはDAGのエッジであってもよいことに留意されたい。しかしながら、算術回路は、ワイヤ及び論理ゲートを有する物理回路内で具現化されてもよいと考えられる。302において、クライアントノード340は、GPLで書かれた計算Pを算術回路Cにコンパイルする。本実施形態では、クライアントノード340は、算術回路C及び入力xを作業者ノード350に供給する。
【0052】
回路Cから、本開示の実施形態は、元の回路Cの完全な説明を提供する多項式のセットを含む二次プログラムQを生成することができる。次いで、二次プログラムを実行及び検証する際に、作業者ノード350及び検証者ノード360によって使用される公開パラメータが生成されてもよい。
【0053】
304において、作業者ノード350は、入力xに対して回路C又は二次プログラムQを実行し、出力がyであることを主張する。いくつかの実施形態では、作業者ノード350(すなわち、証明者)は、{C,x,y}について有効なトランスクリプトを取得することが期待され;したがって、プロセス300の306において、作業者ノード350は、トランスクリプトを符号化する。いくつかの例では、{C,x,y}についての有効なトランスクリプトは、入力ワイヤに割り当てられた値がxのそれらであり、中間値がC内の各ゲートの正しいオペレーションに対応し、出力ワイヤに割り当てられた値がyであるように、回路ワイヤに値を割り当てることであり;請求された出力が正しくない(すなわち、y≠P(x))場合、{C,x,y}についての有効なトランスクリプトは存在しない。
【0054】
308において、作業者ノード350は、出力yをクライアントノード340に提供する。実施形態では、公開評価鍵EK及び公開検証鍵VKは、クライアントノード340によって又はクライアントノード340から選択された秘密値sを使用して導出される。実施形態において、作業者ノード350は、これらの公開鍵を使用して、特定の入力xに対して計算を評価する。実施形態において、出力y、内部回路ワイヤの値及びEKを使用して、正当性のプルーフ(proof-of-correctness)πを生成する。プルーフπはブロックチェーン上に格納されることができ、作業者ノード350が複数の当事者と別々に対話することを必要とせずに、複数の当事者(例えば検証者ノード360)によって検証されることができる。このようにして、検証者ノード360は、310において、公開検証鍵VK及びプルーフπを使用してトランザクションを検証することができ、それによってコントラクトを検証することができる。
【0055】
図4は、本開示の実施形態による、DSLで符号化されたスマートコントラクトから二次算術プログラム(QAP:quadratic arithmetic program)へのワークフローの例400を示す。具体的には、
図4は、コンバータ404によってGPLコントラクト406に変換されるDSLスマートコントラクト402を示す。GPLプリコンパイラ408(プリプロセッサとしても知られる)は、GPLコントラクト406によって参照される外部ライブラリ410を組み込み、GPL前処理コントラクト412を生成する。GPL前処理コントラクト412は、QAP多項式418が導出される縮小算術回路416を生成するために最適化される算術回路414に変形される。
【0056】
実施形態において、DSLスマートコントラクト402は、正確な意味を有する正式な言語で書かれたコントラクトである。実施形態において、DSLスマートコントラクト402は条件のセットを含み、DSLスマートコントラクト402の結果は、条件のセットの履行に依存する。スマートコントラクトの例は、被保険者の保険料と、保険業者による被保険者への潜在的な分配を入力として取る保険契約である。スマートコントラクトの期間中に被保険者が損失を被った場合(例えば第1条件の履行)、スマートコントラクトの実行は、保険業者に保険料を分配し、損失の分配を被保険者に分配する。他方、スマートコントラクトの期間中に被保険者が損失を被らない場合、スマートコントラクトの実行は、保険業者に保険料を分配し、潜在的な分配を保険者に返す。
【0057】
一実施形態において、コンバータ404は、実行の結果として、DSLで書かれたDSLスマートコントラクト402のような条件のセットを受け取り、DSLコードをGPLコントラクト406のようなGPLソースコードに翻訳するソフトウェアプログラムである。実施形態において、GPLコントラクト406は、C++プログラムのようなGPLプログラムであり、DSLスマートコントラクト402で定義されたコントラクトを含む。
【0058】
一実施形態において、GPLプリコンパイラ408は、GPLコントラクト406及び必要な外部ライブラリ410を処理してスタンドアロンGPL前処理コントラクト412を生成する、コンピュータ実行可能プログラムである。実施形態において、GPLプリコンパイラ408は、定数式を評価し、GPLコントラクト406に見られるシンボル(symbols)を登録する。
【0059】
一実施形態において、外部ライブラリ410は、呼び出しによってGPLコントラクト406により利用される、事前に書かれたサブルーチン、関数、クラス、コンテナ、値及び/又は可変型のコレクションである。例えば外部ライブラリ410を呼び出すことによって、GPLコントラクト406は、機能自体を実装する必要なく、そのライブラリの機能を獲得する。
【0060】
一実施形態において、GPL前処理コントラクト412は、一組の式及び演算子を含む。演算子は、算術演算子(例えば加算(+)、乗算(*)等)、比較演算子(例えば未満(<)、等しい(=)、以上(≧)等)、条件文(例えばif-then(?、:))又は論理演算子(例えばAND(&&)、OR(||)、NOT(!)、XOR
(外1)
)等を含み得る。いくつかの実施形態では、主機能は、所定の名前及びフォーマットを有するように生成される。
【0061】
一実施形態において、算術回路414は、一組の変数に対するDAGである。一実施形態において、ゼロの入次数(indegree)を有するDAGの各ノードは、変数を表す入力ゲート(例えばxi)であり、DAGのすべての他のノードは、和ゲート(+)又は積ゲート(×)である。実施形態において、すべてのゲート(ノード)は、1の出次数(outdegree)を有し、したがって、その下にあるグラフは、有向ツリーである。実施形態において、算術回路414は、複雑性の2つの尺度、すなわち、サイズと深度を有する。いくつかの例では、算術回路の「サイズ」は、算術回路414内のゲートの数に基づく。いくつかの例では、算術回路の「深度」は、算術回路内の最も長い有向経路の長さに基づく。
【0062】
算術回路414は、生成された後、縮小されてよい。ブール代数では、任意のブール関数を、最小項正規形式で表現することができる。n個の変数の関数f(x1,...,xn)では、変数の各々が1回、その自然形又は補完された形で現れる積項が、最小項と呼ばれることがある。すなわち、いくつかの例では、「最小項」は、補数演算子(‘)と結合演算子()のみを用いるn個の変数の論理式である。例えばabcd及びab’cd’は、f(a,b,c,d)の2つの最小項である。このようにして、n個の変数で2nfが存在することになる。
【0063】
いくつかの例において、「インプリカント(implicant)」は、fの最小項のグループをカバーする積を指す(すなわち、積の和の積項Pは、fが値1をとる場合Pが1に等しいときはいつでも、fのインプリカントである)。例えば以下の関数:
f(a,b,c,d)=ab+bc’+d
では、ab、bc’、abc’、abc’d及びdは、fのインプリカントの例である。いくつかの例では、「プライムインプリカント(prime implicant(主項))」は、より一般的な(例えばより少ないリテラル(literals)の)インプリカントではカバーすることができないインプリカントを指す。すなわち、プライムインプリカントは、いずれかのリテラルがPから除去された場合に、fについて非インプリカントとなる積項Pである。上記の例を使用すると、abc’dはプライムインプリカントではない。なぜなら、リテラルを除去してプライムにすることができるからである(abc’dをプライムインプリカントにするためには、a=1及びb=1及びC=0及びd=1の場合にのみ、f(a,b,c,d)は1に等しくなければならない)。
【0064】
しかしながら、理解されるように、a、b及びc’が除去される場合(すなわち、d=1の場合)、f(a,b,c,d)は1に等しい可能性がある。同様に、c’とdが除去される場合(すなわち、ab=1の場合)、f(a,b,c,d)は1に等しい可能性がある。同様に、aとdが除去される場合(すなわち、bc’=1の場合)、f(a,b,c,d)は1に等しい可能性がある。ブール項からリテラルを除去するプロセスは「展開(expansion)」と呼ばれることがある。リテラルを1つ展開することは、項が真になる入力組合せの数を2倍にする。例えばfのカバーを変更することなく、abc’をab又はbc’に展開することができる。
【0065】
ブール関数のすべてのプライムインプリカントの和は、「ブレーク正規形式(Blake canonical form)」と呼ばれることがある。他のプライムインプリカントの組合せがカバーできない関数の出力をカバーするプライムインプリカントは、「必須プライムインプリカント(essential prime implicants(必須主項))」と呼ばれることがある。n個の入力変数を有する論理関数のプライムインプリカントの数は、3n/nと同じくらい大きいものとすることができる。最小プライムインプリカントの抽出は、非決定性多項式時間完全(NP-complete)問題のクラスに属することが知られている。以下の方法は、クワイン・マクラスキー法(Quine-McCluskey algorithm)を使用して、プライムインプリカントのチャートを構築する一例を示す。
【0066】
マクラスキーによるMinimization of Boolean Functions(1956)内でみられるクワイン・マクラスキー法は、ブール関数のプライムインプリカントの完全なリストを返す。一実施形態では、返されたプライムインプリカントを使用してプライムインプリカントテーブルを構築し、これは、関数の必須プライムインプリカントの抽出のために1つ以上のアルゴリズムへの入力として使用され得る。縮小されるブール関数f(x1,...,xn)を次のように表すことができる:
【数2】
【0067】
出力1を与えるfを表すために使用されるM個の最小項m
iは、インデックスベクトルvに含まれる。各インデックスv
iは、所与の入力シーケンスのバイナリ符号化を表す:
【数3】
【0068】
したがって、vの各最小項を、xi値に依存して自然又は補完入力の積として表すことができる。最小項のペアは、これらの表現が、1桁の数の変化(single digit changing)によって変わる場合に組み合わせることができる。それ以上組み合わせることができない項はプライムインプリカントである。必須プライムインプライアントテーブルは、既約(irreducible)のプライムインプリカントのリストを使用して構築される。
【0069】
一例において、n=4、M=6及びv={4,8,10,11,12,15}のxxf(x
1,...,x
n)を所与とすると、プライムインプリカントを抽出してプライムインプリカントテーブルを生成するクワイン・マクラスキー法は、以下のように現れる:
【数4】
【0070】
したがって、fを、以下の最小項の和として表すことができる:
・m4=f(0,1,0,0)=a’bc’d’
・m8=f(1,0,0,0)=ab’c’d’
・m10=f(1,0,1,0)=ab’cd’
・m11=f(1,0,1,1)=ab’cd
・m12=f(1,1,0,0)=abc’d’
・m15=f(1,1,1,1)=abcd
【0071】
4つの入力の場合、最小項は[m0,m15]の範囲内であり、この場合、m0=f(0,0,0,0)、かつm15=(1,1,1,1)である。fについての積式の正規和は以下のとおりである:
f(a,b,c,d)=a’bc’d’+ab’c’d’+ab’cd’+ab’cd+abc’d’+abcd
【0072】
最小項は、1桁の数が変化するときに組み合わされ、対応する入力は「-」に設定される。この結果、サイズ-2のインプリカント(size-2 implicants)となる:
m4,12=f(-,1,0,0) [既約]
m_(8,9)=f(1,0,0,-)
m8,10=f(1,0,-,0)
m8,12=f(1,-,0,0)
m9,11=f(1,0,-,1)
m10,11=f(1,0,1,-)
m10,14=f(1,-,1,0)
m12,14=f(1,1,-,0)
m11,15=f(1,-,1,1)
m14,15=f(1,1,1,-)
【0073】
サイズ-2のインプリカントのいくつかは既約でないことがあるが、再び組み合わされよく、結果としてサイズ-4のインプリカントとなる:
m8,9,10,11=f(1,0,-,-) [既約]
m8,10,12,14=f(1,-,-,0) [既約]
m10,11,14,15=f(1,-,1,-) [既約]
【0074】
今回は、size-4のインプリカントのすべてが既約である。既約のインプリカントのリストは、ブール関数のプライムインプリカントに対応する。最後のステップとして、必須プライムインプリカントテーブルが、プライムインプリカントのリストを使用して構築されてよい。プライムインプリカントテーブルの例は以下のテーブル1に示される:
【表3】
【0075】
表中の「ティック(tick)」は、真であるために、所与のインデックスベクトル、すなわち、所与の入力シーケンスを必要とするプライムインプリカントに対応する。vの列が1つのティックのみを有する場合、対応する最小項は1つのプライムインプリカントによってのみカバーされ得る。そのようなプライムインプリカントは、fにとって必須である。
【0076】
一実施形態において、縮小算術回路416は、縮小又は最小化された有向非巡回グラフ(DAG)であり、これは、一組の入力を所与として、DSLスマートコントラクト402で指定されたもののような条件のセットの結果を決定するために使用することができる。いくつかの実施態様において、縮小算術回路416は、最小化された(すなわち、最小次数まで縮小された)算術回路である。いくつかの実施形態では、最も最適な算術回路は、必ずしも最小の算術回路ではなくてよく(例えば特定のより大きな算術回路は、回路内の算術演算の数及びタイプに応じて、より大きな算術回路よりも迅速に評価され得る)、そのような実施形態では、縮小算術回路416は、(例えば最大速度、より少ないメモリ使用量、最も効率的なプロセッサの利用等について)最適化されているが、必ずしも最小化されていない算術回路である。
【0077】
一実施形態において、QAP多項式418は、元の算術回路(例えば
図4の算術回路414)の完全な説明を提供する数式で表現された変数及び係数を含む1つ以上の式である。実施形態において、QAP多項式の多項式は、例えばGennaro,R.等によるQuadratic Span Programs and Succint NIZKs without PCPs(2013)で説明されているように、算術回路のルートにおけるそれらの評価に関して定義される。実施形態において、QAP多項式は、スマートコントラクトの表現として、ブロックチェーントランザクションのロッキングスクリプトに符号化される。実施形態では、ロッキングスクリプトは、実行時に、一組のパラメータ値(例えばロッキングスクリプトの実行の結果として)を受け取り、これらのパラメータ値は、QAP多項式に変数として入力され、スマートコントラクトの結果を決定させる。
【0078】
実施形態において、GPLプリコンパイラ408は、GPL前処理コントラクト412を生成する。GPL前処理コントラクト412は、算術ゲートから構成される算術回路であってよい。しかしながら、条件付き及びフロー制御ステートメントのために、複雑な算術回路も論理サブモジュールを埋め込むことに注意されたい。実施形態では、これらのサブモジュールは、やはり算術回路に変換されるが、
図5に見られるように、1ビット幅のゲート接続によって特徴付けられる。
【0079】
図5は、本開示の実施形態の論理サブモジュールを含む算術回路500の例示的なモデルを示す。
図5に図示されるように、算術回路500は、1ビット入力502と、入力のグループ504を含んでよく、これらの入力は、論理サブモジュール508A~508B及び/又はグループ化されていない算術ゲート506A~506Dに渡されて出力510を生成する。
図5の太い線は、1ビット幅のワイヤ(例えばバス)のグループを表し、細い線は、1ビット・ビットワイヤを表す。論理及び算術1ビット幅回路は、二重である(例えば少なくとも2つの方法、すなわち、和の積又は積の和として表現することができる)ので、論理回路縮小を、算術回路500内の論理サブモジュール508A~508Bに適用することができる。
【0080】
論理サブモジュール*508A~508Bの各々は、算術回路内のノードのセットの適切な(proper)(厳密な)サブセットを含んでもよい。言い換えると、論理サブモジュールは、算術回路の全体を包含しないことがある。さらに、いくつかの実施形態では、論理サブモジュール*508A~508Bは交わっていない、すなわち、このような実施形態では、論理サブモジュール*508A~508Bは、いずれの内部ゲートも共有しないであろう。さらに、このような実施形態では、論理サブモジュール508A~508Bはいずれの内部ゲートも共有しないため、縮小手順を並列化して(例えば論理サブモジュール508A~508Bの各々を並列に縮小することができる)オペレーションの時間複雑性を低減することができる。
【0081】
一実施形態において、1ビット入力502は、1又は0のいずれかを表す値を伝達することができるワイヤであり、一方、入力のグループ504は、複数の1ビットワイヤを表す。複雑な算術回路は、条件付き及びフロー制御ステートメントから導出される論理サブモジュールを埋め込んでよい。実施形態において、これらの論理サブモジュールは算術回路にも変換されるが、図示の論理サブモジュール508A~508Bのような1ビット幅のゲート接続によって特徴付けられてよい。いくつかの実施形態において、論理サブモジュール508A~508B内のワイヤは、1ビット幅のみである。
【0082】
論理及び算術1ビット幅回路は二重であるため、論理縮小は、論理サブモジュール508A~08Bにも適用され得る。さらに、論理サブモジュール508A~508Bは、内部ゲートを共有しないため、縮小手順は、算術回路500の時間複雑性を低減するために並列化されてもよく;例えば別個のプロセッサコアを割り当てて論理サブモジュール508A~508Bの各々に対して論理縮小を行ってもよい。一実施形態では、計算的に最適化されたヒューリスティックを利用して、論理縮小のために、論理サブモジュール508A~08Bを異なる処理コアに割り当ててもよい。計算的に最適化されたヒューリスティックは、計算リソースの使用を最適化するように設計されたヒューリスティックであり得る。使用され得る計算的に最適化されたヒューリスティックの一例は、最長処理時間(LPT)貪欲法である。このようなヒューリスティックでは、論理サブモジュール508A~508Bが処理時間によってソートされ、それまでで最も早い終了時間を有するマシンに割り当てられる場合、スケジューラは各トランザクションの計算負荷のバランスをとろうとする。更なる詳細は、以下の
図7の説明でみられ得る。対照的に、実施形態では、グループ化されていない算術ゲート506A~506Dは、該グループ化されていない算術ゲート506A~506Dが入力のグループ504等の1ビットワイヤのグループによって共有されるため、並列に縮小され得ない。実施形態では、縮小はゲートの数に適用されるが、入力の数(例えば1ビット入力502及び入力のグループ504)は同じままであることに留意されたい。
【0083】
一実施形態において、出力510は、算術回路500に従って入力502及び504に対して実行されオペレーションの結果である。いくつかの実施態様において、結果は、真又は偽の値である。他の実施形態では、結果は1つ以上の1ビット値のセットである。他の実施形態において、結果は、任意の他の値又は算術回路によってサポートされる値であってよい。
【0084】
上述のように、実施形態において、クワイン・マクラスキー法は、ブール関数fのプライムインプリカントの完全なリストを返すことができる。さらに、PetrickによるA Direct Determination of the Irredundant Forms of a Boolean Function from the Set of Prime Implicants(1956)で説明されている方法(Petrick法)を用いて、下述されるような必須プライムインプリカントの構成としてfを表すために、プライムインプリカントの数を縮小することができる。
【0085】
プライムインプリカントテーブル(例えばプライムインプリカントテーブル1)で表されるブール関数fを、補助ブール関数(auxiliary Boolean function)f
*を用いて二重形式で表すことができる。補助ブール関数f
*は、プライムインプリカントテーブルの列のすべてがカバーされるときに真になる。したがって、f
*を、各インデックスベクトルv
iに寄与する(すなわち、fの各出力に寄与する)プライムインプリカントの和σ
iの積として表すことができる:
【数5】
【0086】
例えばテーブル1内のプライムインプリカントのσi項のリストは、次のようになる:
σ0=σ(v0=4)=bc’d’
σ1=σ(v1=8)=ab’+ad’
σ2=σ(v2=10)=ab’+ad’+ac
σ3=σ(v3=11)=ab’+ac
σ4=σ(v4=12)=bc’d’+ad’
σ5=σ(v5=15)=ac
【0087】
したがって、二重関数f*は:
f*=(bc’d’)(ab’+ad’)(ab’+ad’+ac)(ab’+ac)(bc’d’+ad’)(ac)
となる。
【0088】
ziをf*の個々の最小項で表す場合、関数を:
f*=z0(z1+z2)(z1+z2+z3)(z1+z3)(z0+z2)z3
と書き直すことができる。
【0089】
ブール関数は、特定のブール・ルール、例えば以下に示されるようなルールを使用して更に簡略化できる:
1.u+uv=u
2.u+u’v=u+v
3.(u+v)(u+w)=u+vw
【0090】
他のブール簡略化ルールが存在し、より少ない、より多い又は異なるブール簡略化ルールが本開示の実施形態で使用され得ることは、本開示の範囲内であると考えられることに留意されたい。しかしながら、上記のルールを使用して、f*に対して以下の簡略化を実行することができる:
(z1+z2)(z1+z3)=z1+z2z3 (ルール3)
z0(z0+z2)=z0 (ルール1)
【0091】
いくつかの更なる簡略化をf*に適用することにより、f*は、以下の縮小を受け得る:
f*=z0z3(z1+z2z3)(z1+z2+z3)
f*=z0z3(z1z1+z1z2+z1z3+z1z2z3+z2z2z3+z2z3z3)
f*=z0z3(z1+z1z2+z1z3+z1z2z3+z2z3+z2z3)
f*=z0z3(z1+z2z3)
f*=z0z1z3+z0z2z3
【0092】
したがって、関数*を、z0z1z3及びz0z2z3によってカバーすることができ、両方の項は最小項の最小項数を含む(異なる二重関数f*=z0z1z3+z0z2を考えると、項z0z2は、最小項の最小数なので、fを表すために使用されることになる)。したがって、fを、
f=z0+z1+z3=bc’d’+ab’+ac
あるいは、
f=z0+z2+z3=bc’d’+ad’+ac
と簡略化することができる。
【0093】
このようにして、補助ブール関数f
*を、fの各出力に寄与するプライムインプリカントの和σ
iの積として表すことができる:
【数6】
ここで、Mは、fを表すために使用される最小項の数であり、項σ
iは、以下のように表される:
【数7】
【0094】
したがって、zikは、和σiに寄与するk番目のプライムインプリカントを表す:
σ1=z11+z12+・・・+z1|z1|
σ2=z21+z22+・・・+z2|z2|
・・・
σM=zM1+zM2+・・・+zM|zM|
【0095】
図6は、本開示の実施形態における縮小論理サブモジュールの例600を示す。具体的には、
図6は、4つのプロセッサコア622を使用して8つの論理サブモジュール608A~608Hを処理するシステムの例示的な例を示す。例600では、LPT貪欲法が使用され、目標は、システムのプロセッサ使用を最適化するために、プロセッサコアのすべてが可能な限りほぼ同じ時間に処理を終了することである。最初に、論理サブモジュール608A~608Hは、互いに対する論理サブモジュール608A~608Hの処理時間の推定値として、複雑度(例えば論理サブモジュール608A~608H内の論理ゲートの数)によって順序付けられてよい。しかしながら、論理サブモジュール608A~608Hの処理時間を推定する他の方法を使用してもよいと考えられる。
【0096】
例600では、最も長い推定処理時間を有する最初の4つの論理サブモジュール608A~608Dは、プロセッサコア622間でラウンドロビン又は擬似ランダム方式で分配されてもよい。分かるように、コア4によって処理されている論理サブモジュール608Dは、4つのうちの最小の推定処理時間を有し、最初に終了する。その結果、コア4は、論理サブモジュール608Eである、5番目に長い推定処理時間を有する未処理論理サブモジュールが割り当てられる。コア3は、次に処理論理サブモジュール608Cを終了し、6番目に長い推定処理時間を有する論理サブモジュールである、論理サブモジュール608Fに割り当てられる。コア2は、処理論理サブモジュール608Bを終了し、論理サブモジュール608Gを受け取る。最後に、コア1は、最も長い推定処理時間を有する論理サブモジュールの処理を終了し、8つの論理サブモジュール608A~608Hのうち最も短い推定処理時間を有する論理サブモジュールである、論理サブモジュール608Hを受け取る。例600に見られるように、4つのプロセッサコア622のすべてが、8つの論理サブモジュール608A~608Hをほぼ同じ時間に処理を終了し、結果としてプロセッサのアイドル時間を短縮する。
【0097】
図7は、本開示の一実施形態のプライムインプラント縮小の例700を示す。具体的には、
図7は、例えば
図2の算術回路縮小モジュール220によって、上述のステップに従って簡略化されたプライムインプリカントσ
1~σ
5のセットを示している。例えば積項σ
iをリスト{σ
1,...,σ
M}と考える。実施形態において、各ステップにおいて、リストの2つのメンバーが比較され(「左」及び「右」メンバーと呼ばれる)、可能であれば簡略化される。例700では、時間t
1において、左メンバー702A(σ
1)が右メンバー704A(σ
2)とペアになり、f
*の積項は、上記でリストされたもののようなブール簡略化ルールを使用して簡略化される。左メンバー702A及び右メンバー704Aを簡略化することができる場合、左メンバーは、新たな項σ
12で置き換えられることになる。しかしながら、例700では、左メンバー702A及び右メンバー704Aを更に簡略化することができないことが分かる。
【0098】
その後、時間t2において、左メンバー702B(σ1)は、右メンバー704B(σ3)と連結され、ブール簡略化ルールに従って処理される。この場合、例700では、左メンバー702B及び右メンバー704Bをσ13に簡略化できることが分かる。したがって、時間t3において、左メンバー702C(σ13)が右メンバー704C(σ4)と比較される。例700では、左メンバー702C及び右メンバー704Cを更に簡略化することができない。
【0099】
同様に、時間t4において、左メンバー702D及び右メンバー704D(σ5)も同様に、更に簡略化することはできない。すべての右メンバーがチェックされた後、左メンバーは、リスト内のその次のメンバーに設定され、例700では、次のメンバーはσ2である。したがって、時間t5において、左メンバー702E(σ2)は、右メンバー704E(σ4)と連結され、ブール簡略化ルールに従って、それらはσ24に簡略化され、左メンバーの値となる。したがって、時刻t6において、左メンバー702F(σ24)は、右メンバー(σ5)と連結され、処理されて、σ245に簡略化される。このプロセスは、時点t7で見られるように、それ以上のチェックが利用できなくなったときに終了する。
【0100】
実施形態において、簡略化ステップの数は、M(M-1)/2によって上限設定される。実施形態では、ペア(左、右)の各簡略化ステップは、以下のオペレーションの実行からなる:
1.ルール1に従って(左、右)を簡略化するよう試み、
2.ルール2に従って(左、右)を簡略化するよう試み、
3.ルール3に従って(左、右)を簡略化するよう試みる。
【0101】
実施形態において、ルール1、ルール2及びルール3におけるu項は、(左、右)のペアの共通部分を表す。実施形態における左右メンバーの加数の間のクロスチェック(交差)は、特有の実装(ナイーブ又はソートされたリスト)に応じて、例えば時間複雑性o(n2)又はo(nlogn)によって特徴付けられる。
【0102】
実施形態において、簡略化プロセスが完了した後、残りの積項σ
iを、時間複雑性o(1)を有するp個の項σ
*の和として、明示的な形式で表すことができる。したがって、関数f
*は、各項によってカバーされ得る:
【数8】
【0103】
pの値は、成功した簡略化オペレーションの数に依存することに留意されたい。実施形態において、項
【数9】
の各々は、実際には、プライムインプリカントz
iの積であり、関数f
*は、プライムインプリカントの最小数を含むσ
*内の最小項
【数10】
によってカバーされ得る。
ここで、
【数11】
であり、関数
【数12】
は、
【数13】
内に含まれるプライムインプリカントの数
【数14】
をカウントする。最終的に二重関数fは以下のように表わされてよい:
【数15】
【0104】
実施形態において、
図5の論理サブモジュール508A~508Bのような個々の論理サブモジュールは、より高速な処理のために、異なる処理コアによって並列に簡略化されてよいと考えられる。そのような実施形態では、計算的に最適化されたヒューリスティックをスケジューラによって実行して、LPT貪欲法と呼ばれる、論理縮小段階のための異なる処理コアに個々の論理サブモジュールを割り当てる。ジョブが処理時間によってソートされ、次いで、それまでで最も早い終了時間のマシン(処理コア)に割り当てられる場合、スケジューラは、処理されている各論理サブモジュールに対して計算負荷をバランスさせようとする。
【0105】
実施形態において、論理サブモジュール(S
i)の初期ゲートg
iの数は、S
iを減らすために必要な期待される時間の適切なインジケータであると推定される(例えばゲートの数が多いほど、期待される処理時間は長くなる)。したがって、減らすべきN個のコアとn個のサブモジュールを有するマシンを所与とすると、サブモジュールS
iは、それらのg
i値(1≦i≦n)によってソートされ、次いで、所与の時間t’において最も低い集約G
j(t’)メトリックでコアjのリスト{list
j}に割り当てられる:
【数16】
【0106】
あるいは、サブモジュールSiは、gi値を考慮することなく、ラウンドロビン方式で処理コアに割り当てられてよい。例えばi(moduloN)=jのとき、Siをコアjに割り当てることができる。
【0107】
図8は、様々な実施形態による、DSLコントラクトを縮小算術回路に変形するためのプロセス800の一例を示すフローチャートである。プロセス800の一部又はすべて(又は説明された任意の他のプロセス、あるいはこれらのプロセスの変形及び/又は組合せ)を、実行可能な命令及び/又は他のデータで構成される1つ以上のコンピュータシステムの制御下で実行することができ、1つ以上のプロセッサ上で集合的に実行する実行可能な命令として実装してよい。実行可能な命令及び/又は他のデータを、非一時的コンピュータ読取可能な記憶媒体(例えば磁気媒体、光媒体又はフラッシュ媒体に永続的に記憶されるコンピュータプログラム)に記憶することができる。
【0108】
例えばプロセス800の一部又はすべてを、1つ以上のコンピューティングデバイスによって(例えばデータセンター内のサーバによって、クライアントコンピューティングデバイスによって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって又は
図10のコンピューティングデバイス1000のような任意の適切な電子クライアントデバイスによって)実行することができる。プロセス800は、DSLで書かれたスマートコントラクトがGPLに変換され、予めコンパイルされ、算術回路に変形される一連の動作を含む。算術回路は、本開示及び出力で説明される技術に従って縮小される。
【0109】
802において、プロセス800を実行するシステムは、DSLで書かれたスマートコントラクトを取得する。上述のように、DSLは、特定のフィールドで使用するために設計されたコンピュータプログラミング言語であってよい。実施形態において、スマートコントラクトのような金融商品を構成するために考案されたDSLが使用されてよい。このようなDSLは、平均的なユーザにとってスマートコントラクトをより容易に書き込み、読み取ることができるものにし、非専門家のプログラマが、いずれの暗号も実装することなく、スマートコントラクトを書き込むことを可能にし得る。
【0110】
804において、プロセス800を実行するシステムは、スマートコントラクトをGPLに変換する。このようにして、DSLスマートコントラクトは、ブロックチェーンで使用するために、暗号プロトコルにコンパイル/解釈することができる一般的な形式に変換される。実施形態において、GPLはC++のソースコードであるが、他のGPL言語を使用してもよいと考えられる。
【0111】
806において、GPLソースコードは予めコンパイルされ、これは、ライブラリファイル及び/又は他の依存関係を予めコンパイルされたソースコードに取り込んでよい。また、予めコンパイルするプロセスは、変数名を難読化してもよく、これは、ブロックチェーンにコミットした後で、スマートコントラクトの性質を公から隠すという利点を有し得る。
【0112】
808において、プロセス800を実行するシステムは、例えば様々なコマンド、条件文、変数、算術演算を算術アルゴリズムに変形することによって、予めコンパイルされたソースコードを算術回路に変換する。この算術アルゴリズムは、
図5に示されているものと同様に、有向巡回グラフとして表現され得る。
【0113】
810において、プロセス800を実行するシステムは、808において生成された算術アルゴリズムに対して縮小プロセスを実行する。縮小プロセスは、
図9のプロセス900と同様であってもよい。この縮小プロセスの結果、
図1のノード102のようなブロックチェーンノードによってより効率的に処理され得る、より小さく簡略化された算術アルゴリズムを得ることができる。
【0114】
812において、プロセス800を実行するシステムは、縮小算術回路を出力する。いくつかの実施形態では、システムは、縮小回路を
図4のQAP多項式418のようなQAP多項式に変形する別のプロセスに、縮小回路を提供する。他の実施形態では、システムは、縮小回路を、将来の使用のために、データストア又は他の記憶リソースに提供する。更に他の実施形態では、システムは、例えばユーザインタフェースのディスプレイを通じて、ユーザインタフェースを介して縮小回路を元のDSLコントラクトの(例えばそれによって作成又は影響を受けるエンティティ)1つ以上のエンティティに提供する。802~812で実行される1つ以上の動作は、並列を含め、様々な順序及び組合せで実行されてよいことに留意されたい。
【0115】
図9は、様々な実施形態による、予めコンパイルされたGPLスマートコントラクトの算術回路縮小のプロセス900の一例を示すフローチャートである。プロセス900(又は説明される任意の他のプロセス、あるいはこれらのプロセスの変形及び/又は組合せ)の一部又はすべてを、実行可能な命令及び/又は他のデータで構成される1つ以上のコンピュータシステムの制御下で実行することができ、1つ以上のプロセッサ上で集合的に実行する実行可能な命令として実装され得る。実行可能な命令及び/又は他のデータを、非一時的なコンピュータ読取可能記憶媒体(例えば磁気媒体、光媒体又はフラッシュ媒体に永続的に記憶されたコンピュータプログラム)に記憶することができる。
【0116】
例えばプロセス900の一部又はすべてを、1つ以上のコンピューティングデバイスによって(例えばデータセンター内のサーバによって、クライアントコンピューティングデバイスによって、コンピューティングリソースサービスプロバイダの分散システム内の複数のコンピューティングデバイスによって又は
図10のコンピューティングデバイス1000のような任意の適切な電子クライアントデバイスによって)実行することができる。例えばプロセス900は、
図2の算術回路縮小モジュール220を実行した結果として実行されてよい。プロセス900は、算術論理回路のプライムインプリカントを決定し、和の積として表し、積項の各ペアを論理ルールに対して比較して積項を簡略化することができるかどうかを判断し、すべてのペアを簡略化した後に、算術回路を縮小形式で出力する、一連の動作を含む。プロセス900の動作は、
図8の810の動作について拡張する。
【0117】
902において、プロセス900を実行するシステムは、算術回路を取得する。算術回路は、一組の最小項から構成されてよい。実施形態において、取得される算術回路は、予めコンパイルされたGPLソースコードから、例えば
図4のGPL前処理コントラクト412等から変形されてよい。実施形態において、取得された算術回路はスマートコントラクトを表す。いくつかの実施態様において、スマートコントラクトは、DSLフォーマットで以前に書かれ、GPLフォーマットに変換された。
【0118】
904において、プロセスを実行するシステムは、
図4に関連して上述した方法のように、算術論理回路のプライムインプリカントを分離(isolate)する。すなわち、システムは、算術回路の最小項のセットからインプリカントのセットを決定することができる。システムは、インプリカントのセットのうちのどのメンバーが、算術回路のプライムインプリカントのセット(すなわち、任意のリテラルが除去された場合に非インプリカントとなる積項)を構成するかを決定してよい。
【0119】
906において、プライムインプリカントのセットは、例えば
図5に関して上述したように、プライムインプリカントの和σ
iの積として扱われてよい。908において、プロセス900を実行するシステムは、積項の第1ペアσ
LとσR
を比較して、910において、
図7に関して説明したように、ブール論理ルールに従ってペアを簡略化できるかどうかを判断する。簡略化できない場合、システムは914に進む。そうでなはく、簡略化できる場合、システムは、912のペアを結合して簡略化し、次いで、システムは914に進む。
【0120】
914において、プロセス900を実行するシステムは、積項のすべてのペアが比較され、既約であることがわかったかどうかを判断する。積項のすべてのペアがそうされていない場合、システムは次いで908に戻り、積項の次のペアを比較する。さもなければ、916において、システムは、縮小された積項を、縮小算術回路である積の和として出力する。
図8の812に関連して上記したように、システムは、縮小算術回路を、更なる処理のために別のプロセスに、データストアに、データファイルに又はユーザインタフェースに出力してよい。902~916で実行される動作のうちの1つ以上が、並列を含め、様々な順序及び組合せで実行されてよいことに留意されたい。
【0121】
開示される実施形態を説明する文脈において、別段の規定がない限り、「命令」が通常単独では実行しない動作(例えばデータの送信、計算等)を実行する実行可能な命令(コード、アプリケーション、エージェント等とも呼ばれる)に関する表現の使用は、命令が機械によって実行されていることを意味し、それによって、機械に指定された動作を実行させる。
【0122】
図10は、本開示の少なくとも1つの実施形態を実施するために使用することができるコンピューティングデバイス1000の例示的な簡略化されたブロック図である。様々な実施形態において、コンピューティングデバイス1000を使用して、上記で図示及び説明されたシステムのいずれかを実装することができる。例えばコンピューティングデバイス1000は、データサーバ、ウェブサーバ、ポータブルコンピューティングデバイス、パーソナルコンピュータ又は任意の電子コンピューティングデバイスとして使用するために構成され得る。
図10に図示されるように、コンピューティングデバイス1000は、実施形態において、バスサブシステム1004を介して複数の周辺サブシステムと通信し、動作可能に結合される1つ以上のプロセッサ1002を含むことができる。いくつかの実施形態において、これらの周辺サブシステムは、メモリサブシステム1008及びファイル/ディスクストレージサブシステム1010を含むストレージサブシステム1006と、1つ以上のユーザインタフェース入力デバイス1012と、1つ以上のユーザインタフェース出力デバイス1014と、ネットワークインタフェースサブシステム1016を含む。このようなストレージサブシステム1006は、情報の一時的又は長期的な記憶のために使用され得る。
【0123】
いくつかの実施形態において、バスサブシステム1004は、コンピューティングデバイス1000の様々な構成要素及びサブシステムが、意図されるとおりに互いに通信することを可能にする機構を提供する。バスサブシステム1004は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施形態は、複数のバスを利用する。いくつかの実施形態では、ネットワークインタフェースサブシステム1016は、他のコンピューティングデバイス及びネットワークへのインタフェースを提供する。ネットワークインタフェースサブシステム1016は、いくつかの実施形態では、コンピューティングデバイス1000からデータを受け取り、他のシステムにデータを送信するためのインタフェースとして機能する。いくつかの実施態様において、バスサブシステム1004は、詳細、検索語等のようなデータを通信するために利用される。
【0124】
いくつかの実施形態において、ユーザインタフェース入力デバイス1012は、キーボード等の1つ以上のユーザ入力デバイス;一体型マウス、トラックボール、タッチパッド又はグラフィックスタブレット等のポインティングデバイス;スキャナ;バーコードスキャナ;ディスプレイに組み込まれたタッチスクリーン;音声認識システム、マイクロフォン等のオーディオ入力デバイス;及び他のタイプの入力デバイスを含む。一般に、「入力デバイス」という用語の使用は、情報をコンピューティングデバイス1000に入力するためのあらゆる可能なタイプのデバイス及び機構を含むように意図される。いくつかの実施形態において、1つ以上のユーザインタフェース出力デバイス1014は、ディスプレイサブシステム、プリンタ又はオーディオ出力デバイス等の非視覚的ディスプレイ等を含む。いくつかの実施形態において、ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)や発光ダイオード(LED)ディスプレイ、投影装置等のフラットパネルデバイス又は他のディスプレイデバイスを含む。一般に、「出力デバイス」という用語の使用は、コンピューティングデバイス1000からの情報を出力するためのあらゆる可能なタイプのデバイス及び機構を含むように意図される。1つ以上のユーザインタフェース出力デバイス1014を使用して、例えばユーザインタフェースを提示し、そのような対話が適切であり得るときに、説明されたプロセス及びその変形を実行するアプリケーションとのユーザ対話を容易にすることができる。
【0125】
いくつかの実施形態において、ストレージサブシステム1006は、本開示の少なくとも1つの実施形態の機能を提供する基本プログラミング及びデータ構成体を記憶するためのコンピュータ読取可能記憶媒体を提供する。アプリケーション(プログラム、コードモジュール、命令)は、いくつかの実施形態において1つ以上のプロセッサによって実行されるとき、本開示の1つ以上の実施形態の機能を提供し、実施形態においては、ストレージサブシステム1006に記憶される。これらのアプリケーションモジュール又は命令を、1つ以上のプロセッサ1002によって実行することができる。様々な実施形態において、ストレージサブシステム1006は更に、本開示に従って使用されるデータを記憶するためのリポジトリを提供する。いくつかの実施形態では、ストレージサブシステム1006は、メモリサブシステム1008及びファイル/ディスクストレージサブシステム1010を含む。
【0126】
実施形態において、メモリサブシステム1008は、複数のメモリ、例えばプログラム実行中の命令及びデータの格納のためのメインランダムアクセスメモリ(RAM)1018及び/又は固定命令を格納することができる読取専用メモリ(ROM)1020を含む。いくつかの実施形態において、ファイル/ディスクストレージサブシステム1010は、プログラムファイル及びデータファイルのための非一時的な永続的(不揮発性)ストレージを提供し、ハードディスクドライブ、関連する取り外し可能媒体とともにフロッピーディスクドライブ、コンパクトディスク読取専用メモリ(CD-ROM)ドライブ、光学ドライブ、取り外し可能媒体カートリッジ又は他の同様の記憶媒体を含むことができる。
【0127】
いくつかの実施形態において、コンピューティングデバイス1000は、少なくとも1つのローカルクロック1024を含む。少なくとも1つのローカルクロック1024は、いくつかの実施形態では、特定の開始日から発生したティックの数を表すカウンタであり、いくつかの実施形態では、コンピューティングデバイス1000内に一体的に配置される。様々な実施形態では、少なくとも1つのローカルクロック1024は、特定のクロックパルスにおいてコンピューティングデバイス1000のためのプロセッサ及びそこに含まれるサブシステム内でデータ転送を同期させるために使用され、コンピューティングデバイス1000と、データセンター内の他のシステムとの間の同期オペレーションを調整するために使用され得る。別の実施形態では、ローカルクロックは、プログラム可能な間隔のタイマである。
【0128】
コンピューティングデバイス1000は、ポータブルコンピュータデバイス、タブレットコンピュータ、ワークステーション又は以下に説明される任意の他のデバイスを含む、様々なタイプのいずれかとすることができる。加えて、コンピューティングデバイス1000は、いくつかの実施形態では、1つ以上のポート(例えばUSB、ヘッドフォンジャック、ライトニングコネクタ等)を通してコンピューティングデバイス1000に接続することができる別のデバイスを含むことができる。実施形態において、このようなデバイスは、光ファイバコネクタを受け入れるポートを含む。したがって、いくつかの実施形態において、このデバイスは、光信号を、処理のためにデバイスをコンピューティングデバイス1000に接続するポートを通して伝送される電気信号に変換する。コンピュータ及びネットワークの絶えず変化する性質のために、
図8に示されるコンピューティングデバイス1000の説明は、デバイスの好ましい実施形態を説明する目的のための特定の例としてのみ意図されている。
図10に示されるシステムよりも多くの又は少ない構成要素を有する多くの他の構成も可能である。
【0129】
したがって、本明細書及び図面は、制限的な意味ではなく例示的な意味に考えられるべきである。しかしながら、特許請求の範囲に記載された本発明の範囲から逸脱することなく、様々な修正及び変更をそれに加えることができることは明らかであろう。同様に、他の変形も本開示の範囲内である。したがって、開示される技術は、様々な修正及び代替の構成を受けやすいが、それらの特定の例示された実施形態は、図面に示され、上記で詳細に説明されている。しかしながら、開示された特定の1つ以上の形態に本発明を限定する意図はないが、反対に、添付の特許請求の範囲に定義されているように、本発明の範囲内にあるすべての修正、代替の構成及び均等物をカバーするよう意図されていることを理解すべきである。
【0130】
開示される実施形態を説明する文脈において(特に、以下の特許請求の範囲の文脈において)、「a」及び「an」並びに「the」及び類似の指示物の使用は、別段の指示又は明白な矛盾がない限り、単数形及び複数形の両方を含むものと解釈されるべきである。「備える」、「有する」、「含む」及び「包含する」という用語は、別段の指示がない限り、オープンエンドの用語(すなわち、「含む」を意味するが、これに限定されない)と解釈されるべきである。「接続される」という用語は、修正されず物理的接続を指すとき、何かの介在が存在する場合であっても、部分的又は全体的に、内部に含まれ、取り付けられ又は一緒に連結されているものと解釈されるべきである。本開示における値の範囲の記載は単に、別段の指示がない限り、範囲内にある各個別の値を個々に参照する簡略法として機能するように意図されており、各個別の値は、個々に記載されているかのように本明細書に組み込まれる。「セット」(例えば「アイテムのセット」)又は「サブセット」)という用語の使用は、文脈により別段の注記又は矛盾がない限り、1つ以上のメンバーを含む空でない集合として解釈されるべきである。さらに、文脈によって別段の注記又は矛盾がない限り、対応するセットの「サブセット」という用語は、必ずしも対応するセットの適切なサブセットを示すものではないが、サブセット及び対応するセットは等しくてもよい。
【0131】
結合語、例えば「A、B及びCのうちの少なくとも1つ」又は「A、B及びCのうちの少なくとも1つ」という形式のフレーズは他の方法で、特に別段の記載がない限り又は文脈によって明確に矛盾しない限り、アイテム、用語等がA又はB又はCのいずれかであり得るか、AとBとCのセットの任意の空でないサブセットであり得ることを示すように、一般的に使用されるような文脈で理解される。例えば3つのメンバーを有するセットの具体的な例において、「A、B及びCのうちの少なくとも1つ」及び「A、B及びCのうちの少なくとも1つ」という結合フレーズは、以下のセット、すなわち{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、{A,B,C}のいずれかを指す。したがって、そのような結合語は、一般に、特定の実施形態が、Aの少なくとも1つ、Bの少なくとも1つ及びCの少なくとも1つの各々が存在することを必要とすることを示唆するようには意図されない。
【0132】
説明されるプロセスの動作は、別段の指示がない限り又は文脈によって明らかに矛盾しない限り、任意の適切順序で実行され得る。説明されるプロセス(又はその変形及び/又は組合せ)は、実行可能な命令で構成される1つ以上のコンピュータシステムの制御下で実行され得、ハードウェア又はそれらの組合せによって、1つ以上のプロセッサ上で集合的に動作するコード(例えば実行可能な命令、1つ以上のコンピュータプログラム又は1つ以上のアプリケーション)として実装され得る。いくつかの実施形態において、コードは、例えば1つ以上のプロセッサによって実行可能な複数の命令を含むコンピュータプログラムの形態で、コンピュータ読取可能な記憶媒体に記憶され得る。いくつかの実施形態では、コンピュータ読取可能記憶媒体は非一時的である。
【0133】
提供される任意の及びすべての例又は例示的言語(例えば「のような」)の使用は、本発明の実施形態をより良く明らかにすることのみを意図したものであり、別段に請求されない限り、本発明の範囲に対して限定を課すものではない。本明細書における言語は、いずれかの請求されていない要素を本発明の実施に不可欠であるように指示するものとして解釈されてはならない。
【0134】
本発明を実施するために発明者に知られている最良の形態を含め、本開示の実施形態が記載される。これらの実施形態の変形は、前述の説明を読むと当業者に明らかになるであろう。本発明者らは、当業者がそのような変形を必要に応じて採用することを期待しており、本発明者らは、本開示の実施形態を、具体的に記載された以外の方法で実施することを意図している。したがって、本開示の範囲は、適用可能な法律によって許容されるように、本明細書に添付された特許請求の範囲に記載された主題のすべての修正及び均等物を含む。さらに、上述の要素のあらゆる可能な変形における任意の組合せは、別段の指示がない限り又は文脈によって明らかに矛盾しない限り、本開示の範囲に包含される。
【0135】
本明細書において引用された刊行物、特許出願及び特許を含むすべての文献は、それにより、参照によって組み込まれるように各文献を個々に具体的に示し、本明細書においてその全体を述べたものと同じ限度で、参照によって本明細書に組み込まれる。
【0136】
上述の実施形態は、本発明を限定するものではなく、例示するものであり、当業者は、添付の特許請求の範囲によって定義される本発明の範囲から逸脱することなく、多くの代替の実施形態を設計することができることに留意されたい。請求項において、括弧内に付したすべての引用符号は、請求項を限定するものと解釈されるべきではない。「備えた(comprising)」及び「備える(comprises)」等の用語は、いずれかの請求項又は明細書全体に列挙されるもの以外の要素又はステップの存在を除外するものではない。本明細書において、「備える」は「含む又はから構成される」を意味し、「備えた」又は「含む又はから構成された」を意味する。要素の単数形参照は、そのような要素の複数形参照を除外するものではなく、その逆もまた同様である。本発明は、いくつかの別個の要素を含むハードウェアによって及び適切にプログラムされたコンピュータによって実装され得る。いくつかの手段を列挙するデバイスクレームにおいては、これらの手段のいくつかが、1つの同じハードウェアアイテムによって具体化され得る。特定の手段が相互に異なる従属請求項に記載されているという単なる事実は、これらの手段の組合せを有利に利用することができないことを示すものではない。
【0137】
要約
本開示において説明され、示唆された新規な技術は、ブロックチェーンデータ構造内に記憶されたデータの完全性を保証するブロックチェーンの特性を妨げることなく、ブロックチェーンの機能性を拡張する。例えばこの技術は、特に、レコードに埋め込まれたブロックチェーントランザクション内で検証のための条件が定義されているデジタルレコード検証の分野において、計算の分野を改善することができる。本開示に記載及び示唆される技術は、ブロックチェーン上で検証されているスマートコントラクトを簡略化することによってブロックチェーンノードが処理リソースの使用を最適化することを可能にすることにより、スマートコントラクトの生成及び実行の分野における計算の分野を更に改善することができる。加えて、本開示で記載及び示唆される技術は、二次算術プログラムを導出することができる縮小算術回路にスマートコントラクトを変形し、それにより、ブロックチェーンノードがスマートコントラクトをより効率的に実行することを可能にすることによって、ブロックチェーンノードの効率を改善することができる。
【0138】
さらに、本開示で記載及び示唆される技術は、スマートコントラクトの詳細が公的に閲覧可能であるという具体的に生じる問題を克服するために、スマートコントラクトがブロックチェーンにコミットされた後に、スマートコントラクトをDSLからGPLに、次いで、縮小算術に変換し、その結果として、スマートコントラクトの詳細の一部を難読化させることによって、必然的にコンピュータ技術に根ざし得る。
【外国語明細書】