Rollup の二つの検証状態の詳細:詐欺証明と非対話型詐欺証明
原文标题:《本当に理解する Layer2》
原文作者:web3探求者
Layer2の核心的な目標は、ブロックチェーンの処理速度を向上させることです。なぜなら、セキュリティ、処理速度、分散化(不可能三角)を同時に満たすことはできないからです。
L2には3つのモードがあります:ステートチャネル(state channel)、プラズマ(plasma)、ロールアップ(rollup)。それぞれの欠点により主役にはなれなかったため、この記事ではロールアップメカニズムのみを紹介し、他のモードについては興味がある方が自分で調べてください。
一、ロールアップ
ロールアップの核心的な考え方は、L1上に取引プロセスを検証できる証拠を保存し、取引プロセス(計算プロセス)と状態をL2で実行・保存することです。
取引プロセスの証拠とは何か、取引の実行プロセスは1つの状態から別の状態への移行のプロセスであることがわかります。もしL1が取引前の状態のセットと取引後の状態のセット、さらにこの取引のセットを知っていれば、当然この取引に対応する状態の移行が正しいかどうかを検証できます。
上の図のように、発行者は取引前の状態ツリーのルートハッシュ、取引後の状態ツリーのルートハッシュ、および取引をL1に公開します。L1のスマートコントラクトは、取引前の状態ツリーのルートハッシュが保存されているルートハッシュと一致するかどうかを確認します。取引前のルートハッシュが一致している場合、初期状態が正しいことを示しますが、今回の取引プロセスが正しいかどうかをどうやって検証するのでしょうか?最も安全な方法は、毎回L1でL2の取引ツリーを再実行し、状態を移行することですが、そうするとL2の意味が失われ、やはり不可能三角の処理速度の問題に直面します。
状態の移行が正しいかどうかを検証する方法は、2つの異なるLayer2ロールアップメカニズムを引き出します。
1つ目は詐欺証明で、これは預けられた状態が正しいとデフォルトで信じ、他の参加者が詐欺証明の挑戦を提起するのを待ちます。L2がL1に公開されるたびに、ノードは一定の保証金を支払う必要があります。詐欺が証明されると、前の状態にロールバックされ、発行者の保証金は全額没収され、一部は挑戦者に、一部は直接破棄されます。詐欺を証明する方法は、L1との相互作用の程度に応じて、インタラクティブ詐欺証明と非インタラクティブ詐欺証明に分かれます。以下で詳しく説明します。
2つ目はゼロ知識証明で、毎回状態を預ける際に証明を示す必要があります。証明はL1で検証され、ルートハッシュ値が正しい場合、発行者の公開が正しいことを示します。ここでの証明はゼロ知識証明に関連する研究を利用しています。
- 詐欺証明
上で述べたように、詐欺証明はデフォルトで信じる原則に基づいています。挑戦がない場合、プロセスは比較的簡単で、状態ツリーのルートハッシュと取引情報をL1に保存するだけです。核心は、挑戦者が挑戦を提起したとき、取引前の状態ツリーのルートハッシュがこの取引のセットを経て新しい状態のルートハッシュに変わることを証明することです。ここには2つの考え方があります。
非インタラクティブ詐欺証明、つまりL1上でこの取引のセットを再実行し、実行後の状態ツリーのルートハッシュ値が渡されたルートと一致するかどうかを確認します。
インタラクティブ詐欺証明、挑戦者と発行者がL2上で複数回挑戦を行い、最終的に挑戦者がどの命令が詐欺的であるかを特定し、L1が裁定します。L1は争点となる最小の命令を実行するだけで済みます。
- 非インタラクティブ詐欺証明
ここではOptimismを例にしてインタラクティブ詐欺を説明します。
詐欺証明プロセスの解析:
非インタラクティブ詐欺では、詐欺証明の実現が比較的簡単で、L2で実行された取引をL1で再度完全に実行し、状態のルートハッシュが一致するかどうかを確認して詐欺行為を判断します。
上の図のように、発行者は情報をL1に公開し、取引情報と新旧の全体のルートハッシュを持ちます。L1のスマートコントラクトは受け取った後、新しいルートハッシュに状態を変更することをデフォルトで行います。このとき、挑戦者が挑戦を提起し、挑戦者は古いルートハッシュに合致するマークル状態ツリーを提供する必要があります。L1のスマートコントラクトは古い状態ツリーを通じて完全な取引プロセスを実行し、ルートハッシュと発行者が提供した新しいルートハッシュを比較します。一致しない場合、詐欺行為があることを示します。
再実行すると、ブロックに関連する属性が実行環境の違いにより変化するという問題に直面します。
上の図のように、block.timestampは現在のブロックのタイムスタンプを取得しますが、契約の実行環境が異なるため、得られるタイムスタンプは大きく異なる可能性があります。Optimismがこの問題を解決するためにOVMをどのように設計しているかを見てみましょう。
OVM
L2とL1でスマートコントラクトを実行する際の環境の不一致を解決するために、Optimismは仮想化技術(実際にはカプセル化手法を使用)を使用し、スマートコントラクトが直接いくつかの状態を取得し、OVMでカプセル化された後に呼び出すことを可能にします。
上の例では、block.timestampを直接呼び出すことはできず、ovm_getTimestampというOVMでカプセル化されたメソッドを呼び出すことに変更されます(実際には適当に命名されています)。
インタラクティブ詐欺証明
ここではArbitrumを例にしてインタラクティブ詐欺を説明します。
Arbitrum詐欺証明プロセスの解析:
実際、以前のスマートコントラクトの記事の冒頭で、スマートコントラクトの実行プロセスは状態の変化を進めるプロセスであると述べました。状態機械の概念を再確認しましょう:
図のように、L1上の状態ツリーでもL2上の状態ツリーでも、一連の取引(スマートコントラクトの実行も取引の呼び出しの一つ)によって状態の変換が促進されます。スマートコントラクトのおかげで、取引はさらに小さなステップ命令に分解できます。したがって、次のようになります:
私たちの問題は、状態ツリーが状態AからN個の命令を経て状態Bに変わったことを証明することに変換されます。この証明プロセスは分解可能でしょうか?分治法を用いると、1つの大きな問題を2つの小さな問題に分割することができ、問題は状態Aが前N/2個の命令を経て状態Xに変わり、状態Xが後N/2個の命令を経て状態Bに変わることを証明することになります。段階的に二分して最終的に問題のある命令を特定し、L1で実行して検証すればよいのです。
全体の実行プロセスを完全に説明しましょう。仮定として、Xは発行者が状態AからN個の命令を経て状態Bに移行することを発表し、Yは挑戦者です。
YはXに挑戦を提起し、N/2個の命令を経た状態を示すよう要求します。Xが状態を示すと、Yはそれが正しいかどうかを自分で検証します。検証が正しければ、前N/2個の命令の実行に問題がないことを示し、問題は後N/2にあります。検証が間違っていれば、前N/2個の命令の実行に問題があることを示します。YはXに問題のある命令の区間N/2の状態を尋ね、繰り返し行い、問題のある命令を見つけるまで続けます(ここで問題があるのは命令ではなく、実行命令前の状態が実行命令後の状態を得ることができないということです)。
実際のアプリケーションでは、Arbitrumは二分法を使用するのではなく、K分法を使用し、毎回N個の命令をN/Kのグループに分けて詐欺命令を探し、効率を高めています。
AVM
ArbitrumがAVMを設計する際のEVMとの違いの核心は、AVMがEVMと完全に互換性のある実行ロジックをサポートするだけでなく、インタラクティブ詐欺証明の証明ロジックもサポートする必要があるということです。
証明プロセスでは、現在のプログラムカウンタの命令の正確性を保証する必要があります。このとき、ブロックチェーンに似た方法を採用し、PC(現在のプログラムカウンタの位置)は操作コードだけでなく、PC+1のハッシュ値も保存します。これにより、命令の実行プロセス中に各命令が正しいかどうかを検証できます。
上記の比較から、インタラクティブ詐欺証明は実装の難易度が高いだけでなく、主要な特性が非インタラクティブ詐欺証明よりも優れていることがわかります。代表的な非インタラクティブ詐欺証明の使用者であるOptimismもインタラクティブ詐欺証明に切り替える準備をしています。将来的には、インタラクティブ詐欺証明が詐欺証明の主流になると予想されます。
詐欺証明には、長い出金サイクルという問題がほとんど存在します。これは、挑戦者が挑戦を提起するために十分な時間が必要だからです。暗号学の最新の研究成果の恩恵を受けて、zk-rollupはこの問題を解決します。
二、ZK-Rollup
- ゼロ知識証明の意味
ゼロ知識とは、参加者が問題の結果を解決したが、検証者に結果を告げずに、検証者が参加者が解決した問題の結果が正しいと信じることを意味します。2つの有名な例を挙げます。
- 有名なアリババ
昔々、宝物を隠した洞窟があり、アリババは洞窟の石の扉を開ける呪文を知っていたため、強盗に捕まってしまいました。呪文を言えば、利用価値を失い、死ぬことになります;言わなければ、強盗も彼を殺すでしょう。
困ったアリババは良い方法を考えました。彼は強盗にランダムに指示を出させました。「あなたたちは私から矢の距離だけ離れ、弓矢を私に向けてください。右手を挙げれば、私は呪文を唱えて石の扉を開けます。左手を挙げれば、呪文を唱えて石の扉を閉めます。もし私ができなかったり、逃げようとしたら、あなたたちは私を弓矢で射殺してください。」
何度も繰り返すうちに、強盗は呪文を知ることはできませんでしたが、アリババが呪文を持っているという事実を信じることができ、アリババは命を守りました。
- 数独問題
9×9の数独のセットがあり、Aは答えを解決しました。Aは答えを明かさずに、BにAが成功裏に解決したことを信じさせたいと思っています。
解決方法は、Bがランダムに1行または1列を選び、Aがその行または列を取り出して混ぜてBに見せることです。1~9を含む行または列を何度も繰り返すことで、BはAが正しい答えを得たと信じるようになります。
- ZK-SNARKはどのように問題を解決するのか
現在、ZKメカニズムで成熟しているのはzk-SNARKであり、以降のzkアルゴリズムはすべてzk-SNARKを例に挙げます。
ZK-SNARKの作業フローは2つのステップに分かれます:
問題を回路に変換し、次に多項式に変換することで、実際のゼロ知識証明問題を数学的なゼロ知識証明問題に変換します。
この多項式のゼロ知識証明を検証し、ランダムにいくつかのチェックポイントを与えることで条件を満たす解が得られれば、検証は成功します。
zk証明については、後で別の記事で紹介します。なぜなら、zk証明はイーサリアムのスケーリングだけでなく、プライバシー保護の分野でも広く利用されるからです。例えば、最近注目されているDIDなどです。
starkwareを例にしてzk-rollupのメカニズムを紹介します。starkwareのフローチャートは以下の図の通りです。
発行者が取引をL1に公開する際、取引とL2上の状態をパッケージ化して証明生成サービスに渡す必要があります。証明生成サービスは大量の計算を経て、この公開の証明を生成します。証明サービスは証明をL1の検証サービスに送信します。同時に、発行者は状態のルートハッシュ値をL1に提出し、L1はルートハッシュ値を受け取るとL1の検証サービスに問い合わせます。検証サービスは証明に基づいてルートハッシュ値が正しいかどうかを検証し、正しければL1は状態のルートを新しいハッシュ値に切り替えます。
このプロセスでは、状態ツリーのルートハッシュを検証するためには、前回の完全な状態ツリーを実行してこの公開のすべての取引を得て新しい取引ツリーを計算し、新しいルートハッシュ値を得る必要があります。最終的に発行者が提供したルートハッシュ値と新しいハッシュ値を比較して公開が合法かどうかを判断します。zk証明を導入することで、具体的な状態や取引を知らなくてもハッシュ値が正しいかどうかを判断できるようになります。これがzk証明のイーサリアムスケーリングへの応用です。
- ZK証明の発展
SNARK(ゼロ知識簡潔非インタラクティブ証明)とSTARK(ゼロ知識拡張透明証明)の比較:
SNARKに比べて、STARKの発展はまだ初期段階にありますが、安全性と量子耐性の良好な性能により、今後さらに大きな発展が期待されています。
三、結論
この記事では、主にロールアップという主流のLayer2技術を紹介しました。ロールアップの中で、L2が提出した状態が正しいかどうかを検証するタイミングによって詐欺証明とzkロールアップに分かれ、詐欺証明は挑戦者が発行者と相互作用する必要があるかどうかによって非インタラクティブ詐欺証明とインタラクティブ詐欺証明に分かれます。比較の結果、運用コストやEVMの互換性において、インタラクティブ詐欺証明が優位に立っていることがわかりました。また、zkという暗号学の新しい研究成果が私たちに新しい方向性をもたらし、zkロールアップが発行者の公開をより迅速に検証できるようになりました。さらに、zkはプライバシー保護などの他の方向にも新しい可能性をもたらします。