
「パイプライン方式」によって証明生成の効率を高める方法
TechFlow厳選深潮セレクト

「パイプライン方式」によって証明生成の効率を高める方法
本稿は、zkRollupにおけるパイプライン方式によるゼロ知識証明の生成について詳細に考察する。
執筆:康水躍、Fox Tech CEO;孟鉉済、Fox Tech 首席科学者
校正:林彦熹、Fox Tech CTO
序論
現代のデジタル時代において、ブロックチェーン技術の急速な発展に伴い、データのプライバシーと安全性への関心が高まっています。より効率的でスケーラブルなブロックチェーンアプリケーションを実現するため、多くのソリューションが提案されており、その一つがゼロ知識証明(Zero-Knowledge Proof)技術です。ゼロ知識証明は強力な暗号学的ツールであり、機密情報を開示することなくある命題の真実性を検証できます。
近年、zkRollupはブロックチェーンのスケーリング技術における重要な革新として広く注目されています。zkRollupは多数のトランザクションをまとめてオフチェーンで実行し、ゼロ知識証明を利用してこれらのトランザクションの正当性を検証することで、ブロックチェーンのスループットと拡張性を大幅に向上させます。zkRollupの実装において、どのようにトランザクションを分配・パッケージングし、証明を生成するかは、システムの重要な構成要素となっています。
Layer1システムでは、トランザクションはマイナーによってブロック単位でパッケージングされ計算されます。一方、Layer2システムでは、トランザクションをどのようにパッケージングするか、すなわちLayer2のブロックをどう生成するかは、別途検討が必要です。
FOXはzkEVMに基づくLayer2 zkRollupスケーリングプロジェクトであり、この問題に対してパイプライン処理方式によるトランザクションのバッチ処理を探索しており、効率の大幅な向上が期待されています。
本稿では、zkRollupにおけるパイプライン方式によるゼロ知識証明生成の応用について深く考察します。まず、基本的なトランザクションパッケージング方式を分析し、その後、パイプライン方式によるゼロ知識証明生成技術に焦点を当て、その原理と応用シナリオを詳細に分析します。
従来のトランザクションパッケージング方式
従来のブロックチェーンシステムでは、トランザクションの確認とパッケージングは時間とリソースを多く要するプロセスです。通常、各トランザクションは個別に検証され、ブロックに追加された後、コンセンサスアルゴリズムによって合意され、ブロックチェーンの状態が更新されます。しかし、この逐次的な検証とパッケージング方式には、スループットの低さや遅延の高さといった明らかな限界があります。
一般的なトランザクションパッケージングプロセスでは、まず処理待ちのトランザクション群が収集されます。これらはユーザーが提出したトランザクションや他のチェーンからのトランザクションである可能性があります。その後、それらの合法性と有効性を保証するために検証が行われます。検証には、トランザクションの署名チェック、有効性および一貫性の確認などが含まれます。検証を通過したトランザクションは、ひとつのバッチにまとめられ、提出待ちのブロックとなります。
zkRollupシステムでは、ユーザーが提出したトランザクションも同様にトランザクションプールに待機させます。FOXシステムでは、Sequencerが定期的にトランザクションプールからトランザクションを取得し、ローカルで実行・並べ替えを行い、トランザクションパッケージ(つまりブロック)を形成します。この時点で、実行結果がLayer1に提出されると同時に、その結果とトランザクションデータが証明生成を行うFolderノードにも送信されます。
ゼロ知識証明アルゴリズムの基本的な理解から(読者は以前のFOXシリーズ記事を参照可能)、Folderが証明を生成するには入力データと実行完了後の結果が必要であることがわかります。したがって、従来の方式では、Sequencerがすべてのトランザクションを実行し終えてからFolderに渡す必要があります。計算資源をより有効に活用するために、Sequencerは一部のトランザクションを実行した後、すぐにFolderに中間結果を渡して証明生成を開始させたいと考えています。
FOXが探求中のパイプライン処理方式
上記の目標を達成するため、Sequencerはトランザクションを複数のバッチに分け、それぞれのバッチを実行後にすぐさま中間結果をFolderに送信する必要があります。
具体的には、トランザクションパッケージ内の総トランザクション数を100、1バッチあたりのトランザクション数を10と仮定すると、パイプライン処理方式は以下の図のように表されます。

図1:パイプライン方式によるトランザクション証明の生成
次に、二つの方式の時間コストを簡単に分析し、どのような場合にパイプライン方式がより高い効率を発揮するかを考察します。簡略化のため、ここでの議論ではSequencerからFolderへのデータ送信時間は考慮しません。
トランザクションパッケージ内のトランザクション数をn、バッチ数をk、Sequencerの実行時間関数をexe()、Folderの証明生成時間関数をprove()、集合証明時間関数をaggr()、従来方式の総時間をSum1、パイプライン方式の総時間をSum2とします。
上記のプロセスにより、従来方式ではSequencerが先に実行し、その後Folderが証明を生成するため、必要な総時間は
Sum1 = exe(n) + prove(n)
一方、パイプライン方式の時間は、Sequencerによる最初のバッチの実行時間、以降の証明生成時間と後続バッチの実行時間のうち長い方、そして最後の集合時間からなります。
Sum2 = exe(n/k) + max{k×prove(n/k), (k-1)×exe(n/k)} + aggr(k)
したがって、両者の総時間を比較すると、実行時間関数exe()はほぼ線形関数と近似でき、FOXシステムの証明アルゴリズムでは証明生成時間が線形関数であるため、prove()も線形関数となります。
結論として:
-
もし exe(n) > prove(n) であれば、prove(n) > aggr(k) のとき、Sum1 > Sum2 となる。
-
もし exe(n) < prove(n) であれば、(k-1)×exe(n/k) > aggr(k) のとき、Sum1 > Sum2 となる。
したがって、集合時間aggr(k)が十分小さく、かつ証明生成時間が線形関数である場合、パイプライン方式を採用することで、システム効率を大幅に向上させ、証明生成の総時間を短縮できます。
上記の分析は線形時間証明アルゴリズムにのみ成立し、これによりFOXが線形時間証明アルゴリズムを採用していることの重要性が浮き彫りになります。

図2:証明計算のフローチャート
パイプライン方式がまだ「探求中」である理由は、この方式を分析することで明らかになります。各トランザクションパッケージを分割するバッチ数が多くなるほど、Sequencerが記録・転送するFolderへのデータ量が増え、オーバーヘッドが大きくなります。一方で、Folderにとっては単回の計算負荷は若干低下しますが、集合プロセスはより複雑になります。したがって、具体的な分割方法はトレードオフを考慮する必要があり、SequencerとFolderの計算性能に依存します。
トランザクションを効率的に分配・パッケージングし、バッチごとに証明を生成することは重要な最適化ポイント
zkRollupの実装において、トランザクションを効率的に分配・パッケージングし、証明を生成することは重要な最適化ポイントです。FOXは常にモードを最適化し、より効率的なソリューションを探求しています。以下はFOXが採用する基本的なプロセスです:
-
トランザクション収集:処理待ちのトランザクションを収集し、トランザクションプールに保存します。これらのトランザクションはユーザーが提出したもの、または他のシステムやコントラクトが生成したものである可能性があります。
-
トランザクション順序付け:トランザクションプール内のトランザクションを順序付けし、パッケージング順を決定します。通常、優先度、タイムスタンプ、その他要因に基づくソートアルゴリズムを使用します。目的は、全体のスループットと効率を最大化することです。
-
トランザクション割当:順序付けされたトランザクションを適切なブロックに割り当てます。zkRollupでは、一定数のトランザクションを収容するために新しいブロックが作成されます。この割当プロセスには、貪欲アルゴリズムやその他の戦略を用いて、各ブロックの容量利用率を最大化します。
-
ブロックパッケージング:割り当てられたトランザクションをパッケージングし、完全なブロックを形成します。FOXのLayer2アーキテクチャでは、このブロックは実際にはトランザクションの要約情報のみを含みます。この要約情報は、トランザクションのハッシュや他のコンパクトな表現形式であり、詳細な内容ではありません。詳細なトランザクション情報はFOXのRingerに保存され、データ可用性(DA)を実現します。
-
証明生成:パッケージングされたブロックに対応する証明を生成します。この証明は、ブロック内の各トランザクションの有効性と全体の一貫性を証明できる必要があります。FOXのパイプライン方式は主にこの段階で使用され、Folderの計算能力をより効率的に活用するために、ブロック内のトランザクションをバッチ単位でFolderに送信し、証明を生成します。Folderは各バッチのトランザクションに対してそれぞれ正確性証明を計算し、最後に集合します。通常、この証明はFOAKSという高速かつ特化型のゼロ知識証明アルゴリズムに基づき、ブロック内のトランザクションを状態遷移ルールと照合して、システムのルールと制約に従っているかを検証します。
-
証明検証:受信側は証明を使用してブロックの有効性を検証でき、再計算を行う必要はありません。この検証プロセスは非常に効率的であり、証明のチェックのみを必要とし、複雑なトランザクション計算を必要としないためです。
FOXの「パイプライン方式」は主に証明生成の段階で発生します。トランザクション収集と順序付けでは、Sequencerが処理待ちのトランザクションを収集し、特定のルールに基づいて順序付けを行い、実行順を決定します。その後のバッチ処理実行では、Sequencerが順序付けされたトランザクションをバッチ単位で実行します。各バッチのトランザクション群が実行エンジンに送られ、処理されます。実行エンジンはこれらのトランザクションをシミュレート実行し、状態遷移の中間結果を記録します。各バッチの実行後、Sequencerは中間結果をFolderに送信します。
これは、中間結果を状態更新、トランザクションハッシュなどの形式でエンコードし、Folderへ逐次送信する通信経路を通じて実現されます。Folderは各バッチの中間結果を受信後、それらを使って逐次的に証明を生成します。これらの証明は、FOX独自開発のFOAKSゼロ知識証明アルゴリズムに基づき、中間結果を入力として、トランザクションの有効性とブロック全体の一貫性を証明します。
最後のステップは証明検証です。生成された証明は検証者(イーサリアムにデプロイされたスマートコントラクトVerifier)に送られ、ブロックの有効性が検証されます。Verifierは検証アルゴリズムを使用して証明をチェックし、その正しさと合法性を保証します。
このようなパイプライン方式により、Sequencerはトランザクションを実行しながら継続的に中間結果をFolderに送信し、逐次的に証明を生成できます。これにより、システム全体の効率とスループットが向上し、証明生成の遅延が削減されます。
結語
本稿では、zkRollupにおいて、トランザクションをバッチ処理して証明を生成する新たな方式であるパイプライン方式を紹介し、その時間コストを詳細に分析しました。線形証明アルゴリズムの場合、適切にパイプライン方式を使用することで、証明生成の総時間を短縮できます。FOXが採用する証明システムは線形証明時間を実現しており、迅速な証明生成とユーザーエクスペリエンスの向上に大きく貢献しています。FOXチームは今後もこの方式の探索と最適化を継続して行います。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News














