zk-Rollupsの実装について
概要
RollupはTxを集約する技術であり、具体的にはMerkle木を使ったものになっている
SNARKは署名を検証し、署名者が所有するLeafにそのTxを適用する
複数のユーザーが署名を作成する。Proverはこれらの署名をSNARKに集約し、Ethereum上のスマコンを更新する
Leafの秘密鍵も持っていない悪意のあるProverは、Leafを変更することはできない。
秘密鍵を管理している人だけがLeafを変更できる。
Merkle木に直接触れるのはblock bulderだけであり、現在のところL2開発企業の仕事
proofする=Ethereum上のスマコンを更新する
Merkle木
code:hoge
LEAF
+----------------^----------------+
LHS RHS
+----------------+
Public_key_x public_key_y
トランザクションは、Merkle木における1つのリーフを更新する。トランザクションは次のような形式をとる。
code:fuga
1. Public key x and y point
2. The message which is defined as the hash of the old leaf and the new leaf.
MESSAGE
+----------------^----------------+
OLD_LEAF NEW_LEAF
3. the point R and the integer S.
Merkle木を更新するために、ProverはX個のトランザクションを集約する必要がある。
各トランザクションについて、彼らは以下の手順でチェックする。
1. スマコンから、または前のトランザクションからRootを入力として取る。
2. Merkle木でメッセージにマッチするLeafを見つける。
3. 証明キーがそのLeafのオーナーと一致するかどうかをチェックする。
4. 署名が正しいことを確認する。
5. そのLeafがMerkle木にあることを確認する。
6. 新しいLeafに置き換え、新しいmerkle rootを計算する。
7. すべてのトランザクションがSNARKに含まれるまで続ける。
普通のMerkle木ではハッシュ関数を使って集約していく部分がSNARKに置き換えられ、最終的に一つのSNARK Proof(Root)になる
この文面だと、各ユーザーごとにaccount treeがある? -> 各ユーザーごとにLeafがあると解釈。tree全体はprooverが保持しており、rootをL1から参照するだけでpub_keyの検証とmerkle木の書き換えが可能
DAの保証
各Proverは、すべての葉についてMerkle Proofを作成できることが重要である。
もしできない場合は、その情報が利用可能(Available)になるまで、これらの葉は基本的にロックされる。
これを保証するために、更新された葉をすべてスマコンに渡し、データが常に利用できるようにする。
このように、Ethereumと同じDAの保証を保つ
参考文献