🌀
zkSync のトランザクションライフサイクル
zkSync 及び ZK Stack のトランザクションのライフサイクルに関する内容です。ユーザーがトランザクションを Layer2 チェーンに送信してから Layer1 のチェーンに取り込まれるまでの流れを整理しました。
トランザクションの流れ
基本的なライフサイクル
- ユーザーがトランザクションを sequencer に送ります。
- sequencer はトランザクションが実行されたことを確認(Instant confirmations)します。概ね数分程度で確認されます。
- sequencer はブロックを prover に送ります。
- prover はブロックをチェーンに取り込んだという暗号証明(proof)を生成します。ここまでで1時間程度かかります。
- prover は Ethereum などの Layer1 上のコントラクトに暗号証明を送ります。
- Layer1 上のコントラクトが暗号証明の有効性とデータ送信の完全性を検証し、その結果に従ってコントラクト上の rollup の状態を更新します。この操作に21時間程度かかります。
Instant confirmations(即時確認)
上記の通り、Layer2 で発行したトランザクションが Layer1 に組み込まれ状態が確定するまで、全体として24時間程度かかります。
例えばそれぞれに依存関係があるトランザクションを順番に tx1→tx2→tx3→... と実行するとなると、1回の処理の確定にに丸1日かかっていては全体の処理を終えるのに数日かかってしまい非常に扱いづらくなります。
これを解決する仕組みが Instant confirmations です。トランザクションが sequencer に送信された段階で、バリデーターが必ず次のブロックにこのトランザクションを含めるという想定のもと、そのトランザクションが実行されたことを前提に次のトランザクションを発行することができます。
その他
- トランザクションは Layer1 から開始することもできます
- コントラクトのデプロイを行うトランザクションは通常のトランザクションとは異なり、system contract である
ContractDeployer
とやり取りをして実行されます。
Discussion