リスク警告:「仮想通貨」「ブロックチェーン」の名のもとでの違法な資金調達のリスクに注意してください。—銀行保険監督管理委員会など5部門
検索
ログイン
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
View Market
ミデンの厳格な証明システム
Sin7y
特邀专栏作者
2022-10-11 08:38
この記事は約2722文字で、全文を読むには約4分かかります
この文書では、Miden プルーフ システム アーキテクチャについて詳しく説明します。

最初のレベルのタイトル

ミデンプルーフシステムアーキテクチャ

miden は、strark テクノロジーに基づいた zkvm 実装です。その最下層は、Winterfell の zkp ライブラリに基づいており、明確な証明を生成し、証明を検証します。以下の図 1 の点線は、Miden によって実装される主な機能です。主に 3 つのコンポーネントがあることがわかります。

1. 以下の図 1 の字句文法コンパイラ、字句アナライザ、および構文パーサのセット。これらは、miden によって定義されたアセンブリ命令を、コードブロックとブロックに含まれるオペコードとオペ値にプログラムできます。

3. 厳密な証明の要件を満たす一連の AIR (代数中間表現)、以下の図 1 の AIR。これは、miden の仮想マシンの実行プロセスを制約するために使用されます。

最初のレベルのタイトル

AIR構造設計

AIR の制約は、スタックとデコーダーの 2 つの部分に分かれています。

図 3 は、デコーダの制約を示しています。このうち、op_counter、op_sponge、cf_op_bits、ld_op_bits、hd_op_bits は固定カラム長です。このうち、op_sponge は、命令の実行順序と正確性を制約するために使用されます。 cf_op_bits は 3 ビットの flow_ops を制約します。 ld_op_bits、hd_op_bits はそれぞれ user_ops の下位 5 ビットと上位 2 ビットを制約します。 ld_op_bits と hd_op_bits の組み合わせは、実行される user_op を構成し、スタックの各ステップ状態制約のセレクターとしても使用されます。

最初のレベルのタイトル

Miden VM 実行プロセス インスタンス

このセクションでは、vm の実行プロセスと stark の実行トレースの生成を説明するための単純な miden ロジックを示します。

以下のコード セグメント 1 は、実行されるコード セグメントです。

実行されるロジックは、3 と 5 をスタックにプッシュすることです。次に、テープからフラグを読み取ります。フラグが 1 か 0 かを判断します。 1 の場合は、if.true ブランチを実行して、スタックにプッシュされた 2 つの数値 3 と 5 を取り出し、それらを加算して 8 を取得し、スタックにプッシュし直します。 0 の場合は、else 分岐を実行して、スタックにプッシュされた 2 つの数値 3 と 5 を取り出し、それらを乗算して 15 を取得し、15 をスタックに戻します。

コード セグメントが miden の字句および文法アナライザーによって解析された後の最終的な命令コードは次のとおりです。コード セグメント 2:

以下の図 4 は、コード セグメント 2 を実行する vm のプロセスを示しています。中央は、オペコードを実行するエグゼキュータのフローチャートです。左側の点線は、コードの実行によって生成されたデコーダ トレースを指し、右側の点線は、コードの実行によって生成されるスタック トレース。

このうちエグゼキュータはコードブロックに従って一つずつ実行されます。この例では、最初にスパンブロックが実行されます。次に、ステップ 32 で if-else-end 構造を実行して swtich ブロックに入り、前の Span ブロックの最後のステップで生成されたスポンジ ハッシュを ctx_stack にプッシュし、swtich ブロックが実行された後、ステップ 49 でポップします。スポンジ。

注: このドキュメントでは、miden プロジェクトのメイン ブランチの最新バージョンについて説明します。現在、miden の次のブランチでは多くの命令が再設計されており、AIR は制約のごく一部のみを実装しています。

スタック制約

条件付き命令

Choose

Constrain:

文章

文章

add

Constrain:

mul

Constrain:

inv

Constrain:

neg

Constrain:

ブールディレクティブ

not

Constrain:

and

Constrain:

or

Constrain:

ハッシュコマンド

RESCR

文章

6つのレジスタを占有

Constrain:

比較命令

eq

Constrain:

cmp

文章

A: [0,1,0,1]

B: [0,0,1,1]

4回比較する必要がある

Constrain:

文章

dup.n

Constrain:

swap

Constrain:

ROLL4

Constrain:

最初のレベルのタイトル

デコーダの制約

ユーザーコードの実行

op_bits

文章

cf_op_bits、ld_op_bits、hd_op_bits の制約。

制約 1: 各ビットは 0 または 1 のみにすることができます。

制約 2: op_counter が 0 でない場合、ld_ops と hd_ops を同時に 0 にすることはできません。

制約 3: cf_op_bits が hacc の場合。 op_counter ステータスは 1 ずつ増加します。

制約 4: BEGIN、LOOP、BREAK、および WRAP 命令には 16 個のアライメントが必要

制約 6: PUSH 命令には 8 つのアライメントが必要です

hacc

hacc は flowOps として使用されます。この命令を実行するたびにスポンジの状態が変化するため、これを制約する必要があります。

条件判断

t_end

文章

if の true 分岐の終わりである制約は 2 つの部分に分かれています。

制約 1: スポンジ状態の制約。ポップアップ スタックの最上位の値は new_sponge_0 に等しくなります。 if の true 分岐の最後のステップの実行後のスポンジは、new_sponge_1 と等しくなります。 new_sponge_3 は 0 に等しい。

制約 3:loop_stack の制約。 Loop_stack の状態は変化しません。

f_end

文章

if の false 分岐の最後の制約として、次の 2 つの部分に分かれています。

制約 1: スポンジ状態の制約。ポップアップ スタックの最上位の値は new_sponge_0 に等しくなります。 if の true 分岐の最後のステップの実行後のスポンジは、new_sponge_2 と等しくなります。 new_sponge_3 は 0 に等しい。

Sin7y は 2021 年に設立され、トップのブロックチェーン開発者で構成されています。私たちはプロジェクト インキュベーターであると同時にブロックチェーン テクノロジー研究チームでもあり、EVM、レイヤー 2、クロスチェーン、プライバシー コンピューティング、自律型決済ソリューションなどの最も重要で最先端のテクノロジーを研究しています。

私たちについて

Sin7y は 2021 年に設立され、トップのブロックチェーン開発者で構成されています。私たちはプロジェクト インキュベーターであると同時にブロックチェーン テクノロジー研究チームでもあり、EVM、レイヤー 2、クロスチェーン、プライバシー コンピューティング、自律型決済ソリューションなどの最も重要で最先端のテクノロジーを研究しています。

WeChat 公開アカウント: Sin7Y

GitHub | Twitter | Telegram | MediumMirror | HackMD | HackerNoon

開発者
Odaily公式コミュニティへの参加を歓迎します
購読グループ
https://t.me/Odaily_News
チャットグループ
https://t.me/Odaily_CryptoPunk
公式アカウント
https://twitter.com/OdailyChina
チャットグループ
https://t.me/Odaily_CryptoPunk