Scroll
zk-SNARK everything!!まずはEthereum Yellow Paperに近いzkVMを作ろう!
1.概要
基本的に、vmは以下のように分類されている。
evm=スタックベース
zkevm=レジスタベース
zk Friendlyなzk-Rollupsを実現するにはzkevmが必要だが、長らく使用されているevmの信頼性と開発者コミュニティの恩恵は受けられない。また、現在の zk-Rollup はコンポーザビリティをサポートしておらず、異なる zk-Rollup アプリケーションがL2 内で相互に作用できない
さらに開発者はR1CSをサポートするネイティブのzk言語を習得する必要がある。
zkSyncもStarkNetもevm互換を用意してはいる。
Scrollはそのような恩恵を受けるために、スタックベースかつEthereumに近いzkEVMを作ろうとしている
また、ハードウェアレベルのチューニングにより汎用VMを最終目標としている。
つまりは、分散zkコンピューティング的なビジョン
Polygon Hermzはscrollに近いらしいが、そこまでのビジョンはない
これが意味するのは、最終的にgasを気にすることなくトランザクションを発行することができ、defiやNFTなどの金融以外のユースケースやイノベーションを生む土台とすること
2. ロードマップ
DAについてはあやふや
Censorshipはロールアップの方がより難しいので、段階を踏んでいる
まず、分散型の証明プロトコルを設計し、Rollupの証明をRollerのコミュニティにアウトソーシングできるようにする
ハードウェアアクセラレーションによる証明性能の向上と、ユーザーが自分で証明書を実行し、検閲があった場合にその取引をロールアップバッチに強制することを可能にするために、競争力のあるローラーエコシステムを育成する
https://scrapbox.io/files/62b04d3c8c547a001dab5eb7.png
第二段階として、シーケンサを分散化することで完全な分散化を目指す
その頃には、誰でもシーケンサーを実行できるようになり、検閲耐性を獲得する予定
3. zk-Rollupの構築方法とscrollのアプローチ
1つ目の方法は、開発者が異なるDAppsのために特別な「ASIC」回路を設計する方法
回路設計をカスタマイズすることで、各DAppのオーバーヘッドを小さくすることができるが、回路が静的であるためコンポーザビリティに問題がある
また回路設計の専門知識が必要なため、開発者の経験値が低い
2番目のアプローチは、特別な設計や開発者の専門知識を必要としない。
どんなプログラムも最終的にはCPU上で実行されるので、低レベルのCPUステップを検証するための普遍的なCPU回路を構築すればよいといアイデア
そして、このCPU回路(EVM)を使って、あらゆるプログラム(スマコン)の実行を検証することができる。
しかし、この方法はオーバーヘッドが大きいため、近年はあまり採用されていない
例えば、足し算の結果が正しいことを証明したいのは1ステップだけだとしても、EVM回路全体のオーバーヘッドが必要で、実行トレースが数千ステップに及ぶと、証明者側で1000倍のEVM回路オーバーヘッドになる
最近、この2つのアプローチに従ってzk証明を最適化する研究が盛んに行われている
(i) zkに適した新しいプリミティブの提案、例えばPoseidonハッシュ
(ii) TinyRAMに見られるように、汎用検証可能VMの効率改善に関する研究
(iii) Plookup, Clunkなどの汎用最適化トリック、暗号ライブラリの高速化
4. アーキテクチャ
https://scrapbox.io/files/62ef456f8ea071001d281ffd.png
Scroll Node
ユーザートランザクションからL2ブロックを構築し、Ethereumベースレイヤーにコミットし、L1-L2間でメッセージを受け渡す
Sequencer
Gethのフォーク。JSON-RPCインタフェースを提供し、L2トランザクションを受け付ける。
数秒ごとにL2 mempoolからトランザクションのバッチを取得し、それらを実行して新しいL2ブロックと新しいステートルートを生成する
Coordinator
新しいブロックが生成されると、Coordinatorに通知され、Sequencerからそのブロックのexecution traceを受け取る
そして、Rollerプールからランダムに選ばれたRollerにexecution traceをディスパッチし、証明生成を行う。
Relayer
RelayerはEthereumとScrollの両方に展開されたブリッジとロールアップのコントラクトを監視する
まず、Rollup Contractを監視し、DAとvalidity proofを含むL2ブロックのステータスを追跡する。
次に、Ethereum と Scroll の両方に配置されたBridge Contractからの入金と出金のイベントを監視し、一方から他方へのメッセージを中継する
Roller
トランザクションが正しく実行されたことを証明するzkEVM有効性証明を生成する
Rollerは、zkRollupのvalidity proofを生成する役割を担うネットワーク上の証明器
GPU、FPGA、ASICなどのアクセラレータを活用し、証明時間や証明コストを削減する計画
Roller が各ブロックのvalidity proofを生成する過程
1. まず、RollerはCoordinatorから受け取ったexecution traceをCircuit Proverに変換する
2. zkEVMの各回路の証明を生成する
3. 最後に、証明集約を使用して、複数のzkEVM回路からの証明を1つのブロック証明にまとめる
https://scrapbox.io/files/62ef4901805ea0001d258cfa.png
Rollup and Bridge Contracts
Scroll は Rollup Contractおよび Bridge Contractを通じて Ethereum のベースレイヤーに接続します。
これらは共に、L2 TxのDAを確保し、zkEVM validity proofを検証し、ユーザーが L1 と L2 の間で資産とメッセージを受け渡すことを可能にする
Rollup Contractは Sequencer から L2 のステート・ルートとブロックを受け取る。
元々L2 ブロックデータはEthereum calldata として格納されている
これにより、Scroll ブロックにDAがもたらされ、Scroll Relayer を含むIndexerが L2 ブロックを再構築できるように Ethereum のセキュリティを活用する。
L2ブロックの有効性を確立するブロック証明がRollup Contractによって検証されると、対応するブロックはScroll上でfinalizeされたとみなされる
EthereumからScrollにメッセージや資金を送るには、ユーザーはBridge Contract上でsendMessageトランザクションを呼び出す
Relayer は L1 でこのTxのインデックスを作成し、L2 ブロックに含めるために Sequencer に送る
Scroll から Ethereum へのメッセージの送信は、L2 Bridge Contractで同様のプロセスを行う
https://scrapbox.io/files/62ef4af7b90493001d38bce8.png
5. Finalizedまでの流れ
Precommitted -> Committed -> Finalized
Precommitted
ブロックが Sequencer によって提案され、Rollers に送信されたことを示す
Precommittedブロックはイーサリアムのベースレイヤーにポストされていないため、まだスクロールL2チェーンの正規の一部ではありませんが、Sequencerを信頼するユーザーはそれを見越して行動を起こすことを選択することができる
Committed
このブロックの取引データが Ethereum 上のロールアップコントラクトにポストされたことを示す
これはブロックデータが利用可能であることを保証するが、それが有効な方法で実行されたことを証明するものではない。
Finalized
このブロックのトランザクションが正しく実行されたことが、Ethereum上のオンチェーンでvalidity proofを検証することによって証明されたことを示す。Finalizedブロックは、Scroll L2チェーンの正規の部分とみなされる
これらをまとめると、ScrollはベースレイヤーのEthereumから強力なセキュリティ保証を継承しながら、L2上でネイティブEVMバイトコードを実行することができる
参考文献