Author: Michael Zhu (a16z Crypto Research Engineer), Sam Ragsdale (a16z Crypto Investment Engineer); Translated by Golden Finance xiaozou
2024年4月9日、a16z Cryptoリサーチ&エンジニアリングチームは、新しいSNARK設計アプローチであるJoltの予備的な実装をリリースしました。Joltの予備的な実装を発表しました。
検証可能コンピューティング(通称ZK)は、ブロックチェーンと非ブロックチェーンの両方に適用される非常に強力な技術です。これは、あるコンピュータ(検証者verifier)が、より強力な別のコンピュータ(証明者prover)に計算を委任することを可能にし、そのコンピュータは計算が正しく実行されたことを効果的に検証します。
暗号業界では、検証可能な計算(特にSNARK)のアプリケーションには次のようなものがあります:
レイヤー2(L2)ブロックチェーンは、状態遷移の完全性を保証するためにSNARKを使用しています。
事実上未開拓の、ブロックチェーン以外の興味深いユースケースも数多くあります。例えば、クラウドサービスプロバイダーは、サーバーに委任された特定の計算を正しく実行したことをクライアントに証明することができます。npmやcrates.ioのようなソフトウェア登録は、バイナリが特定のソースコードからコンパイルされたことを証明でき、ソフトウェアのサプライチェーン攻撃のリスクを減らすことができる。あるいは、スーパーマリオブラザーズのツールアシストレーシング(TAS)が世界記録を更新したことを証明することもできる(このアイデアは『RISC Zero』でも描かれている)。
これらのアプリケーションの多くは、回路DSL(ドメイン固有言語)に変換するには複雑すぎる手順を含みます。例えば、コンパイラやファミコンエミュレータを使ってCircom言語全体を書き直すことを想像してみてほしい。しかし、プログラムがzkVMでサポートされている命令セットにコンパイルされている場合、手書きの回路やDSL変換は必要ありません。プログラマは、単に好みの高級プログラミング言語でプログラムを書くだけで、あとはzkVMが処理します。
そこで残る課題は、zkVM証明書のパフォーマンスです。これはブロックチェーンのユースケースにとって特に重要であり、そこでは証明時間がレイテンシーに影響し、したがってユーザーエクスペリエンスに影響します。
検証可能なコンピューティングは、ブロックチェーンのスケーリングのための究極のソリューションであると長い間期待されてきました。type: disc;">
パフォーマンス:Proof-of-Procedureの実行は、ネイティブの実行と比べて数桁高いオーバーヘッドをもたらします。
複雑さ:SNARKの複雑さは、数十億ドルのオンチェーン資産を背負うことになるため、その実装のセキュリティに懸念を抱かせます。
ユーザビリティ:Circomのようなドメイン固有言語(DSL)は、ほとんどのソフトウェア開発者が利用できない専門知識を必要とします。
ゼロ知識仮想マシン (zkVM) の開発により、開発者は Rust や Go のような高レベルのプログラミング言語でプログラムを書くことができます。しかし、zkVMの可用性の増加は、高いパフォーマンス・オーバーヘッド(8~9桁)と複雑なデプロイメントにもつながります。
昨年、Joltの記事は、パフォーマンスオーバーヘッドとデプロイの複雑さという2つの課題を克服することを約束するzkVMsの新しいパラダイムを紹介しました。Joltの理論的背景は、STARKに基づく確立されたアイデアとは異なります。Lassoクエリーパラメーターと他のサムチェックベースのテクニックを活用することで、Joltはこれまでよりも速くプログラムを証明し、これまでよりも簡単に新しいVM命令をデプロイすることができます。
本日、私たちはRV32I命令セット用のJoltのオープンソース展開をリリースし、そのJoltの記事での約束を果たすことができました。
Fast: 私たちのデプロイは、RISC Zeroよりも5倍以上速く、リリースされたばかりのSSLよりも5倍以上速いです。初期ベンチマークでは、RISC Zeroの2倍、リリースされたばかりのSP1の2倍高速です。
(比較的) シンプル: コードベース全体は25,000行未満のRustで構成されており(他のzkVMの半分以下のサイズ)、1つのCPU命令はわずか50行のコードで実装できます。
以下では、Joltが新興のzkVMの中で最も先進的であることを示すパフォーマンスベンチマークを一緒に見ていきます。また、Joltを使用するアプリの開発に興味がある開発者や、Joltへの貢献に興味がある開発者向けのガイダンスも提供します。ロードマップのプレビュー - 私たちは、Joltが今後数ヶ月でより速く、より使いやすくなることを期待しています。
a16z暗号エンジニアリングチームは、オープンソースの価値に対する強い信念の上に成り立っています。Joltをオープンソースのパブリックプロダクトとして構築することは、zkVM研究、より広範なSNARK研究、そしてweb3業界全体を加速させるでしょう。クローズドソースコードのサイロ(一般ユーザーによるコードのレビューが不可能な場所)で暗号を構築することは、通常、そうでなければ信頼できないシステムに信頼をもたらします。
1, パフォーマンス
ネイティブ実行と比較して、zkVMには常に約8桁のオーバーヘッドがあり、多くの検証可能なコンピューティング・アプリケーションを不可能にしてきました。アプリケーションを不可能にしてきました。Joltの現在のバージョンは、このオーバーヘッドを6桁以下に削減します。
私たちが最先端のパフォーマンスを持っている一方で、Joltの基盤技術(sumcheckプロトコルに基づく)は、より一般的な技術(FRIに基づく)ほどエンジニアから注目されていません。私たちはロードマップにいくつかの最適化を設定しており、未発見の機会があることを期待しています。
私たちのa16z/zkvmベンチマークでは、さまざまな異なるRustプログラム上でJolt、SP1、およびRISC Zeroをベンチマークしました。その結果、比較可能な多くのRV32プログラムにおいて、相対的な性能はほぼ同じでした。次の図は、Sha2ハッシュチェインを実行するプログラムを参照します。
これらのベンチマークの結果を以下に示します。
継続を使用する継続システムは、証明時間と証明サイズのトレードオフに直面します。証明をより多くの「シャード・スライス」(または「セグメント」)に分割すると(スライス間の並列化により)証明はより高速になりますが、証明をより多くの「シャード」(または「セグメント」)に分割すると、証明はより高速になりますが、証明をより多くの「シャード」(または「セグメント」)に分割すると、証明はより高速になります。並列化)を行うが、再帰前の証明サイズは大きくなる。SP1 (shard_count)。 RISC Zeroは固定サイズのスライスを持つため、スライス数はプログラム・サイクル数に応じて暗黙的に増加する。RISC Zeroは再帰をサポートしているが(SP1とJoltはまだサポートしていない)、以下のベンチマークでは再帰なしで性能を測定している。また、「プリコンパイル」も使用していないため、ベンチマークはコアとなるzkVM証明システムの性能を反映しています。
2、
JoltJoltをできるだけ使いやすくするために、Jolt SDK (jolt_sdk::provable 属性を証明したい関数に追加するだけです。
<
その後、build_*関数を使用して、証明者と検証者を作成できるようになります。
フィボナッチの完全な例(および他の例)をコードベースでチェックしてください。
Joltアーキテクチャをより深く見るために、Jolt Book (WIP)は、Joltの記事で文書化されていない設計の選択とコードライブラリの生きた最新文書です。今後数週間にわたり、Joltをベースにしたビルドに興味がある開発者や、Joltの内部メカニズムについて学びたい開発者のために、より多くのコンテンツをリリースしていく予定です。
3, What's Next
JoltはzkVMスペースにおける重要なマイルストーンですが、私たちにはまだ長い道のりがあります。一歩下がって、私たちのパフォーマンスベンチマークは、(M3 Max上の)Joltプローバーが100kHzプロセッサと同じくらい高速なプログラムを証明したことを示しています。別の控えめな比較をするならば、TI-84グラフ計算機と比べて150倍遅かった。
コンピュータ並みのパフォーマンスを達成するために、私たちには多くの仕事があります。私たちは、開発者に最高の開発体験を提供するために、Joltのパフォーマンスとユーザビリティを改善し続けます。
ビニウス
: Joltのパフォーマンスと使いやすさを向上させていきます。Strong>: Ben DiamondとJim Posenは最近、コミットメント値が小さいJoltのようなシステムで特に有用な、多線形多項式コミットメントスキームを提案しました。BiniusはJustin Thalerのsmall-domain sumcheckアルゴリズムと組み合わせることで、Joltのプロヴァーのパフォーマンスを大幅に向上させます(私たちは5~10倍を期待しています)。その他の指示: Joltコードベースは現在RV32Iを展開していますが、Joltアーキテクチャは非常に柔軟です。私たちは、Joltの記事で説明されているように、整数乗除算をサポートするためにRISC-V "M "拡張を追加する予定です。
Continuation Continuous System:現在、メモリの制約により、Joltは任意の長さの計算を証明することができません。私たちは、長い計算をより小さな計算の塊に分割し、それぞれがJoltによって証明されるようにするために継続を使用します。これにより、メモリ使用量を削減し、個々の計算を証明する際の並列性をサポートします。
再帰の証明:Joltを別の証明システムと組み合わせることで、証明サイズと検証時間をさらに削減します。例えば、Jolt検証器はCircom言語を使って実装することができ、連鎖で効率的に検証できる定数サイズのGroth16証明を生成することができます。