B² Network技术实现:基于零知识证明验证承诺的比特币ZK-Rollup
原著者: Stone、B² ネットワーク研究主任
B² ネットワークは、ビットコインのレイヤー 2 ソリューションです。主に、ビットコイン ネットワークに送信されるゼロ知識証明検証コミットメントを使用し、挑戦者が不正防止チャレンジを開始して、ビットコイン ネットワークの強力なコンセンサスを利用してセキュリティを確保できるようにします。 B²ネットワークの目標。
この記事では、主にイーサリアム上の ZK-Rollup と OP-Rollup の動作メカニズムを紹介し、魔法の NAND ゲート回路を紹介し、コミットメントの役割を紹介し、これらのメカニズムと概念を使用して B² ネットワーク上のゼロ知識証明検証コミットメントを設計します。次に、ビットコイン ネットワーク上でコミットメントがどのように実行され、B² ネットワークのセキュリティがどのように確保されるかを検証するゼロ知識証明について説明します。
イーサリアムの ZK ロールアップ
ZK-Rollup は、複数のトランザクションを集約し、1 層のブロックチェーン ネットワーク上でゼロ知識証明を利用することで、これらのトランザクション バッチの正確性と整合性を保証する、ブロックチェーンの 2 層スケーリング ソリューションです。第 2 層ネットワークのセキュリティを確保するための層ネットワーク。高度なセキュリティとデータの整合性を維持しながら、ブロックチェーン システムのスループットを向上させ、トランザクション手数料を削減するように設計されています。
ZK-Rollup の実行プロセスは大まかに次のとおりです。
トランザクションの集計と並べ替え。ユーザーがトランザクションを ZK-Rollup に送信すると、トランザクションは mempool に送信されます。 ZK-Rollup のシーケンサーは、mempool からユーザー トランザクションを取得し、それらを収集して並べ替えます。シーケンサーは、トランザクションの処理、アカウント ステータスの更新、そして最終的にこれらの更新を表すバッチの生成を担当します。
状態遷移と計算。すべてのトランザクションの実行とステータスの更新はオフチェーンで行われます。 ZK-Rollup の VM (zkEVM や zkVM などのさまざまなゼロ知識証明スマート コントラクト実行エンジンを含む) は、新しいアカウントのステータスを計算し、転送やスマート コントラクトの相互作用などの操作を処理します。同時に、新しいアカウントステータスやゼロ知識証明など、これらのトランザクションとステータス更新が有効であることを証明するために必要なデータと証拠が生成されます。
ゼロ知識証明の世代。 ZK-Rollup の Prover は、ゼロ知識証明テクノロジー (zk-SNARK や zk-STARK など) を利用して、すべての集約されたトランザクションが有効であり、ネットワーク ルールに違反していないことの証明を作成します。この証明では、トランザクションの内容に関する情報は一切明らかにされず、データの整合性とセキュリティを確保しながらユーザーのプライバシーが保護されます。
ゼロ知識証明の検証。アグリゲーターは、データとゼロ知識証明のバッチを 1 層のブロックチェーン ネットワークに送信します。これは通常、必要なオンチェーンスペースを削減するために圧縮の形式で行われます。ブロックチェーン ネットワーク層上のスマート コントラクトは、これらのデータと証明を受け取り、証明の有効性を検証します。有効であることが証明された場合、コントラクトは記録された ZK-Rollup レイヤーの状態を更新します。
ZK-Rollup の中核は、ゼロ知識証明の生成と検証にあります。 ZK-Rollup のトランザクションはオフチェーンで実行され、状態はオフチェーンで生成され、ZK-Rollup のコミットメントとして Prover を通じてゼロ知識証明が生成されます。このコミットメントは、ZK-Rollup 上のトランザクションが正しく効果的に実行され、正しい状態が生成されることを表します。 1層ブロックチェーンネットワークは、ZK-Rollupのすべてのトランザクションとステータスを検証する必要はなく、コミットメントを検証するだけでよく、コミットメントの検証は、1層ブロックチェーンのスマートコントラクトを通じてゼロ知識証明検証を行うことです。ネットワークにアクセスして、ZK-Rollup の有効性を確認します。
したがって、イーサリアムの ZK-Rollup では、ゼロ知識証明データは、第 2 層ネットワークによって第 1 層ネットワークに送信されるコミットメントです。
イーサリアムのOPロールアップ
Optimistic Rollup (OP-Rollup) は、最小限のデータをオンチェーンに保持し、できるだけ多くの計算をオフチェーンで実行することにより、ブロックチェーンのパフォーマンスを拡張するように設計されたテクノロジーです。 OP-Rollup は、ほとんどのトランザクションが誠実であるという「楽観的な」仮定を利用し、各トランザクションの正当性をすぐに検証するのではなく、一定期間後に検証できるため、スループットと効率が大幅に向上します。
OP-Rollup の実行プロセスは大まかに次のとおりです。
トランザクションの集計と並べ替え。ユーザーが OP-Rollup にトランザクションを送信すると、トランザクションは mempool に送信されます。 OP-Rollup のシーケンサは、mempool からユーザーのトランザクションを取得し、それらを収集して並べ替えます。シーケンサは、トランザクションの処理、アカウントのステータスの更新、そして最終的にこれらの更新を表すバッチの生成を担当します。
トランザクションの実行。 OP-Rollup トランザクションはオフチェーンで実行されます。トランザクションの各バッチの実行により、古い状態が新しい状態に変換されます。各バッチは、新しい状態のルート (システム全体の状態を表す暗号化された「スナップショット」) を計算します。それをブロックチェーンネットワークの層に送信します。
ステータス確認。 OP-Rollup は、トランザクション バッチを送信するときにすぐに複雑な検証を実行しませんが、これらのトランザクションが有効であると「楽観的に」想定し、ブロックチェーン ネットワークの層を送信します。観察者がバッチが無効であると考える場合、不正行為の証拠を提出することでバッチに異議を申し立てることができます。オプティミスティック ロールアップ ソリューションでは、不正行為の証明は、任意のオブザーバーがチェーンに誤ってまたは悪意を持って送信された状態またはトランザクションに異議を申し立てることを可能にするメカニズムです。オプティミスティック ロールアップは、不正証明を利用して、「楽観的に」受け入れられたトランザクションであっても、事後に間違いであることが証明され、それに応じて取り消されることを保証します。
チャレンジの仕組み。チャレンジ期間は OP-Rollup です。提出ステータスが確認された後、誰でも提出されたバッチをチェックし、エラーが見つかった場合は不正証明を提出できるチャレンジ ウィンドウ期間があります。これは通常、トランザクションをレイヤーに提出することによって行われます。ブロックチェーンのネットワークを実装するために、トランザクションはエラーであると考えられるものを宣言し、対応する証拠を提供します。 Arbitrum Rollup (Optimistic Rollup のソリューション) は、「対話型検証ゲーム」と呼ばれるプロセスを使用して課題を解決します。このプロセスでは、挑戦者と提出者の間で一連のラウンドが行われ、何が問題だったのかについての意見の相違の範囲が徐々に狭まっていきます (二分探索法を使用して、間違ったトランザクションの位置を迅速に特定します)。最終的に、このプロセスにより、エラーが発生した正確な場所が特定されます。エラーが確認されると、元のバッチは取り消され、エラーを発生させたバリデーターがペナルティを受けます。チャレンジが失敗した場合、挑戦者はチャレンジを開始するために賭けた資金を失う可能性がありますが、チャレンジが成功した場合、挑戦者はチャレンジの開始に成功して得た報酬資金を受け取ることができます。
OP-Rollup の中核は、不正行為の証明と異議申し立てのメカニズムにあります。 OP-Rollup は、最初にすべてのトランザクションが正しく実行されることを「楽観的」にし、次にネットワークの最初の層のコントラクト内の仮想マシン (AVM、OVM) のバイトコードに計算をコンパイルし、バイトコードのコミットメントを解放します。 。 OP-Rollup のコミットメント検証では、トランザクションの計算、バイトコードの取得、およびコミットメントの検証が必要です。オブザーバーがコミットメントが一致しないバッチを発見すると、オブザーバーはチャレンジ メカニズムを通じて不正行為の証拠を生成し、報酬を受け取ります。
イーサリアムの OP-ロールアップは、最初にコミットメントを「楽観的に」確認して送信し、次にチャレンジ メカニズムを使用して誰でも送信されたコミットメントに異議を申し立てられるようにし、最後にコミットメントとチャレンジを通じて OP-ロールアップが検証および確認されることを保証します。
魔法のNANDゲート
NAND ゲートはデジタル論理の基本的な論理ゲートであり、論理積 (AND) 演算の後に論理否定 (NOT) 演算を実行します。 NAND ゲートの特性により、他の論理ゲートや複雑な論理回路を構築するための基礎となります。以下に、NAND ゲートを使用して論理ゲート (AND ゲート、OR ゲート、XOR ゲートなど) や加算ゲート、減算ゲートを構築する方法を詳しく紹介します。
1. NANDゲートの基礎
NAND ゲートには 2 つの入力があり、両方の入力が 1 の場合に限り、出力は 0 になります。それ以外の場合は、出力は 1 になります。これは、論理式で A NAND B として表すことができます。
2. 基本的な論理ゲートの構築
アンドゲート(AND)
NAND ゲートを使用して AND ゲートを構築するには:
ステップ 1: 2 つの入力を NAND ゲートに接続します。
ステップ 2: この NAND ゲートの出力を別の NAND ゲートの 2 つの入力に接続します。
結果: 2 番目の NAND ゲートの出力は、AND ゲートの結果です。
ORゲート(OR)
NAND ゲートを使用して OR ゲートを構築するには:
ステップ 1: 各入力を NAND ゲート (self と self) に通過させ、2 つの NOT ゲートの効果を生成します。
ステップ 2: これら 2 つの NAND ゲートの出力を 1 つの NAND ゲートの入力として使用します。
結果: NAND ゲートの出力は OR ゲートの結果です。
排他的論理和ゲート (XOR)
NAND ゲートを使用して XOR ゲートを構築するには (もう少し複雑です):
ステップ 1: 各入力がそのうちの 1 つに接続された 2 つの NAND ゲートを構築します。
ステップ 2: 最初のステップの 2 つの NAND ゲートの出力を 3 番目の NAND ゲートの入力として使用します。
ステップ 3: 元の入力 A と最初の NAND ゲートの出力を 4 番目の NAND ゲートに接続し、元の入力 B と 2 番目の NAND ゲートの出力を 5 番目の NAND ゲートに接続します。
ステップ 4: 最後に、4 番目と 5 番目の NAND ゲートの出力を 6 番目の NAND ゲートに接続します。
結果: 6 番目の NAND ゲートの出力は、XOR ゲートの結果です。
3. 追加ゲートの構築
半加算器
半加算器は、2 ビットの加算を処理し、和とキャリーを生成する単純な加算器です。
合計: XOR ゲートを使用して合計を生成します。
キャリー: AND ゲートを使用してキャリーを生成します。
これらの基本ゲートは NAND ゲートを使用して構築され、結合されて半加算器を形成します。
全加算器
全加算器は、下位ビットからのキャリー入力を考慮します。
ステップ 1: 2 つの半加算器を構築します。最初の半加算器は A と B を処理し、2 番目の半加算器は最初の半加算器の合計とキャリー入力 C を処理します。
Sum: 後半加算器の合計出力。
キャリー: 2 つの半加算器のキャリー出力は OR ゲートを介して接続されます。
NAND ゲートを使用して半加算器と OR ゲートを構築し、それらを組み合わせて全加算器を形成します。
4. 減算ゲートを構築する
半減算器
半減算器は 2 ビットの減算を処理します。
差分: XOR ゲートを使用して差分を生成します。
ボロー: NAND ゲートと NOT ゲートを使用してボローを生成します。
NAND ゲートを使用して XOR ゲートとその他の必要なロジックを構築し、それらを組み合わせて半減算器を形成します。
完全減算器
完全な減算器では、上位ビットからの借用が考慮されます。
ステップ 1: 2 つの半減算器を構築します。最初の半減算器は A と B を処理し、2 番目の半減算器は差分を処理し、最初の半減算器の入力を借用します。
差: 後半減算器の差出力。
ボロー: 2 つの半減算器のボロー出力は、OR ゲートを介して接続されます。
NAND ゲートを使用してハーフ減算器と OR ゲートを構築し、それらを組み合わせてフル減算器を形成します。
5. 乗算ゲートの構築
バイナリ乗算
2 つの 2 進数の乗算を実装します。
ステップ 1: ビットごとの乗算に AND ゲートを使用します。
ステップ 2: 全加算器を直列に使用して連続加算を実行します。
パート 3: シフトと累積を実装します。
6. レジスタの構築
Dフリップフロップ
1 ビットのバイナリ情報を格納します。
ステップ 1: NAND ゲートを使用してラッチを作成します。
ステップ 2: ラッチをフリップフロップ (フリップフロップ) に拡張します。
登録する
複数桁の 2 進数を格納します。
複数の D フリップフロップが並列接続され、それぞれが 1 ビットを保存します。
7. 時計の構築
発振器
周期的なクロック信号を提供します。
NAND ゲートを使用して、連続発振を生成するフィードバック ループを作成します。
結論は
NAND ゲートは、他の論理ゲートや複雑な回路を構築できるため、「汎用論理ゲート」と呼ばれます。上記の方法により、NAND ゲートを使用して、コンピューターやデジタル システムの算術演算の基礎となる複雑な加算、減算、乗算、記憶、およびクロック回路を構築できます。最新の集積回路設計では、NAND ゲートはそのシンプルさと多用途性により広く使用されています。
B² ネットワークの実践では、あらゆるコンピューティング ロジックを NAND ゲートを通じて構築できます。
暗号化における約束
暗号やブロックチェーンではコミットメントが広く使われています ゼロ知識証明におけるSHA 256、マークルツリー、KZGはすべてコミットメントです 上で紹介したZK-Rollupと同様、ゼロ知識証明はRollupのコミットメントとして使用されます OP-Rollup バイトコードを使用しますロールアップのコミットメントとして仮想マシンに追加されます。
Merkle Tree を使用して、Promise の使用方法を詳しく説明します。
コミット: 証明者はすべての値のハッシュを計算し、そのハッシュはバイナリ ツリーのリーフ ノードとして使用されます。ハッシュ計算は上方向に継続され、最終的にマークル ツリーが生成され、ツリー ルート ハッシュがコミットメントとして解放されます。
明らかにする: Prover は、葉ノードとその枝に対応する値を明らかにします。
check: 検証者は公開された値とブランチを通じてハッシュを計算し、最後に検証のために公開されたコミットメントと比較します。
以下に示すように:
Commit: Prover は、tx 1、tx 2...tx 8 のハッシュをそれぞれ計算し、H(1)、H(2)...H(8) を求め、ペアで継続的にハッシュ計算を実行し、最終的にグラフを生成します。の二分木構造、つまりMerkle Treeは、Merkle Treeのルートノードの値H(12345678)をpromiseとして公開します。
replace: Prover は、tx 3 などのリーフ ノードとそのブランチ (H( 4) -> H( 12) -> H( 5678)) に対応する値を明らかにします。
check: Verifier は tx 3 とブランチ (H( 4) -> H( 12) -> H( 5678) ) を公開することで Promise を計算して検証します。
tx 3 のハッシュ H(3) を計算します。
H(3) はブランチ内で H(4) でハッシュされ、H(34) が得られます。
H(34) はブランチ内で H(12) でハッシュされ、H(1234) が得られます。
H(1234) はブランチ内で H(5678) でハッシュされ、H(12345678) が得られます。
H(12345678) を公開された Promise と照合して検証します

B² Network のゼロ知識証明検証の約束
B² Network は、ビットコイン ネットワーク上に構築された ZK-Rollup の第 2 層ソリューションです。
ビットコインの ZK ロールアップの制限
ビットコインのチューリング不完全性制限により、ビットコイン ネットワーク上でゼロ知識証明を検証する方法がないため、ブロックチェーンの層でゼロ知識証明の実装を検証する ZK-Rollup の従来のソリューションが必要でした。このメソッドはビットコイン ネットワーク上で実装されます。
ZK-Rollup は、Taproot を介してゼロ知識証明とロールアップ データの集約をビットコイン ネットワークに書き込むだけです。これにより、ZK-Rollup データがビットコイン ネットワークに固定され、改ざんできないことが保証されるだけですが、ZK-Rollup のセキュリティは保証できません。ロールアップ トランザクション: 有効性と正確性の観点から、ビットコイン ネットワークの強力なコンセンサス機能を使用して、第 2 層の ZK-Rollup のセキュリティを確保する方法はありません。
したがって、ZK-Rollup の確認はビットコイン ネットワーク上で行う必要があります。
ゼロ知識証明と演算回路
知識ゼロの証明
ゼロ知識証明では、算術回路を使用して、証明者が情報自体を明かすことなく何らかの秘密情報を知っているという証明を構築します。
ゼロ知識証明では、算術回路を使用して証明を生成します。
証拠を生成する
算術回路が構築されると、証明者は秘密の入力を使用して回路の出力を計算します。このプロセス中に、証明者は証明を構築するために使用される追加情報 (コミットメントやゼロ知識証明に固有の乱数など) も生成します。
検証証明書
証明者は証明を検証者に送信します。検証者は証明者の秘密の入力を知りませんが、回路の説明と証明者の証明を持っています。検証者は、回路の同じ計算を実行し、その結果を証明者が提供した証明と比較することによって、証明の有効性を検証します。
演算回路
算術回路は通常、有向非巡回グラフ (DAG) として表され、各ノードが算術演算を表し、エッジが演算間のデータ フローを表します。入力ノードは回路の入力値 (通常は数値または変数) を表し、内部ノードは算術演算を表します。回路の出力が最終的な計算結果となります。
算術回路の基本的な回路ゲート:
追加ゲート
乗算ゲート
上記の NAND ゲートの紹介によれば、加算ゲートを NAND ゲートに変換し、乗算ゲートを NAND ゲートに変換し、最後に算術回路を NAND ゲートに基づく論理ゲート回路に変換することで、算術回路を NAND ゲートに変換できます。
ゼロ知識証明は約束を検証します
ゼロ知識証明の検証プログラム自体は演算回路であり、その演算回路をNANDゲートをベースとした論理ゲートに変換することで、ゼロ知識証明の検証プログラムを実際にNANDをベースとした論理ゲート回路に変換することができます。門。
NAND ゲートはビットコイン スクリプトを通じて実装され、ビット値コミットメントは論理ゲート制約を実装するための入力および出力として論理ゲートに組み込まれます。
と略すことができます
実際、NAND ゲートはビットコイン スクリプトで実装することができ、NAND ゲートから加算ゲートと乗算ゲートを構築し、加算ゲートと乗算ゲートを組み合わせて演算回路を構築し、最終的に検証プログラムを作成します。ゼロ知識証明が構築されます。ただし、関連するゲート回路の数が多いため、構築されたビットコイン スクリプトも非常に大きくなり、ビットコイン ネットワーク上で実際に実行することはできません。
ビット値コミットメントを論理ゲートへの入力および出力としてアセンブルし、異なる入力と出力を持つ各論理ゲートをリーフ ノードとして回路バイナリ ツリーを形成します。リリースされた回路タップルートはバイナリ ツリーのルートであり、リリースのサイズが削減されます。 。
Circuit Taproot は、1 層ブロックチェーン ネットワーク ビットコイン上で B² ロールアップとしてコミットします。ネットワークの層で検証を実行できる従来の ZK-Rollup とは異なり、B² Rollup はビットコインで直接検証を実行できません。ただし、オプティミスティック ロールアップ メソッドを参照して、コミットメントのチャレンジ メカニズムを提供し、チャレンジ メカニズムを通じてサーキット タップルート コミットメントの確認を完了することができます。
検証および応答プロトコル
BitVM とは異なり、2 者間のオフチェーン トランザクションは事前に署名する必要があります。 B² Network は UTXO トランザクションを使用してロックされた報酬を発行し、ロック解除スクリプトは Taproot スクリプトです。
具体的なロック解除タップルート スクリプトは、Prover が回路タップルート ツリーの各ブランチに対してスクリプトを事前に生成し、入力ハッシュを与えるものです。 Challenger は、プリイメージを使用してスクリプトを実行します。実行された出力が Prover の提出と矛盾する場合、MAST (Taproot Merklized Abstract Syntax Tree) を使用して、Taproot 全体のロックを解除し、ロックされたボーナスを取得できます。
ゼロ知識検証プログラムの実行コストは非常に小さく、非常に高速であるため、ビットコイン ネットワーク上のユーザーはチャレンジ メカニズムのオブザーバーとして機能し、B² ロールアップによって送信されたコミットメントを検証し、コミットメントが完了するとすぐにチャレンジを開始できます。矛盾していることが判明しました。
このチャレンジ メカニズムは Arbitrum Rollup の「対話型検証ゲーム」に似ており、誤って実行された論理ゲート計算を常に探します。多数の論理ゲートの中から間違ったものを見つけるために、二分探索法を使用してゲート回路のビットコイン スクリプトを実行します。間違ったブランチを最も早く見つけた挑戦者は、ビットコイン ネットワーク上で報酬をロックする UTXO のロックを解除することで報酬を獲得します。
同時に、Taproot ロック スクリプトの分岐はタイム ロック スクリプトであり、チャレンジが成功しなかった場合、Prover はチャレンジ期間終了後にタイム ロック スクリプトを通じて UTXO のロックを解除し、報酬を取得します。
要約する
B² Network は、Ordinals プロトコルを使用してロールアップ データを集約し、証明して Tapscript に書き込みます。また、さまざまな分散ストレージ プロトコルを使用してロールアップの詳細データを保存し、ロールアップ データの可用性を効果的に確保します。
ゼロ知識証明検証コミットメントをビットコインに記録し、任意のオブザーバーがコミットメント メカニズムに異議を唱えることができるようにすることで、B² Network はビットコインのセキュリティとビットコインのコンセンサス ロールアップ データを継承できます。


