未分類

【初心者向け】世界一わかりやすいRollupの解説:zkRollup, Optimistic Rollup

こんにちは、たいきです。

今回は、Ethreumのスケーリングソリューションである、Rollup(ロールアップ)について解説していきたいと思います。

Rollupの日本語記事を読んでもよくわからんですよね。特に、L2の部分は技術的なことが多かったりしますから。

このブログではなるべくわかりやすく解説できるよう心がけているので安心して読み進めてください。

 

そもそもRollupってなに?

Rollupとは、Ethreumのメインのブロックチェーンの外側で取引を実行し、取引データをまとめてEthreumブロックチェーン上に返すことをいいます。

「ロールアップ(Rollup)」とは、日本語では「クルクルと巻き上げる」「まとめて束ねる」といった意味を持つ単語です。

Rollupは、L2で大量の取引をクルクル巻き上げて(Rollup)、一つにしてL1に返してあげることで負担の軽減、コスト低下を実現できる技術になります。

現在Rollupには、Optimistic Rollup(OR)と、zkRollupの2つのタイプがあります。

この二つについてはブログの後半で解説します。

 

Rollupの具体的な流れ

 

Rollupの具体的なプロセスは以下の通り。

①L2でトランザクションを実行
②トランザクションのデータを抽出&圧縮
③トランザクションの正当性を示すために、②の圧縮されたデータをひとまとめにしてL1に提出
④L1のスマートコントラクトで③のデータが正しいか検証。正しければブロックに取り込まれる。

このように、大量の取引をひとまとめにしてL1に返しているのがわかりますね。

 

これを理解するために、あるブログ記事で良い例を一つ見つけたのでここで紹介します。

Rollupを「飲食店の会計」に例えてみます。

 

僕らが居酒屋などで飲み会をした後、一人一人割り勘をしたいとしましょう。

第一のやり方としては、①一人一人がレジに並び、自分が食べたものを店員に申告して支払うパターンです。

しかし、これだと並ぶのが面倒臭いですし、スタッフの会計処理にも時間がかかりますよね。

 

一方で、もう一つのやり方は、②誰かがみんなのお金をまとめてレジで支払うパターンです。みんなで並ぶ前に、1人がお会計をまとめ上げて店員に支払えば大幅に時間を短縮できますよね。

もうお分かりかと思いますが、クリプトに直して考えてみるとこうなります。

①:一人一人が列に並び、自分が食べたものを定員に申告して支払う
→一人一人のトランザクションをEthreumメインネットに提出し、処理されるまで待つ。

②:みんなで並ぶ前に、誰かがみんなのお金をまとめてレジで支払う
→L1に直接提出して待つのではなく、L2でRollupしてまとめてトランザクションを提出する。

皆さんの実体験から、②のパターンの方がお会計は(トランザクションの承認が)早いし、行列に(L1に)並ぶ必要がないし、店にも(Ethreumにも)迷惑をかけないのでいいんじゃないでしょうか。

なんでRollupを使うの?Ethreumの問題点

Rollupは、Ethreumのスケーラビリティの問題の解決策となります。

よく言われることですが、つまるところ「ブロックチェーンのトリレンマ」です。

 

簡単に言うと、ブロックチェーンのトリレンマとは、セキュリティ、分散性、スケーラビリティのうち2つを追求すると他1つが成り立たなくなることです。

一般的なパブリックブロックチェーンにはこのトレードオフが存在します。

 

例えば、Ethreumの場合はセキュリティと分散性に力を入れています。

一方で、スケーラビリティに関してはあまり開発の本質部分ではありません。

 

また、Solanaの場合はスケーラビリティとセキュリティに重きをおいています。

一方で、十分に分散化できているかと考えるとまだまだそうは言えません。

 

Rollupは、このブロックチェーン・トリレンマによる、Ethreumのスケーラビリティ問題を解決するためのソリューションです。

Rollupを採用することで、複数の取引を全てL1で処理するのではなく、一旦L2で処理をして一つにまとめ上げてL1に戻すことができます。

つまり、今までのEthreumのセキュリティ、分散性を損なうことがなく、より多くのトランザクションを捌けるようになります。

 

Rollupの種類2つ

ここからは、Rollupの2つのタイプ、OptimisticRollupとzkRollupについて解説していきます。

Optimistic Rollup

Optimistic Rollup(OR)はその名前の通り、全てのトランザクションは正当だという楽観的な判断のもと、何か不正があった時だけ疑義を提出して解決するという仕組みです。

ORの具体的な流れ(不正が見つかった時)

①不正を見つけたら賭け金(ステーク)と共に疑義を提出。
②疑義を確かめるために、そのトランザクションをもう一度Ethreumメインネットワーク上(L1)で実行。
③それが本当に不正なトランザクションなら、不正をした人に罰金、見つけた人には報酬。
③’ それが不正でなければ賭け金を没収。

このように、「とりあえずみんな正当なトランザクションだよね」という楽観的な期待のもと、不正があったら誰かが報告する。

不正の報告をしてそれが真実なら、報告した人に報酬。

こういった感じで取引の正当性を担保しています。

このモデルだと、1人が正しい不正証明を提出できれば万事解決なので、処理がカンタンですし、コスパも良くなります。

ORのメリット・デメリット

メリット:

  • 正しい不正証明を提出できる人がいればOK
  • トランザクションコストが低価格
  • EVM互換あり

デメリット:

  • 疑義があったときに検証期間(通常1週間ほど)がかかり承認が遅れる
  • 完全に数学的ではない(人為的な恣意性が残る)

 

ORを使っている主なプロジェクト

  • Optimism
  • Arbitrum

 

zk Rollup

zkRollupとは、暗号学のゼロ知識証明(zero-knowledge proof)の手法を用いて取引の正当性を確かめるRollupの方法です。

 

なお、ゼロ知識証明とは以下の通り。

暗号学において、ゼロ知識証明(ぜろちしきしょうめい、zero-knowledge proof)とは、ある人が他の人に、自分の持っている(通常、数学的な)命題が真であることを伝えるのに、真であること以外の何の知識も伝えることなく証明できるようなやりとりの手法である。

Wikipediaより引用

 

…ぶっちゃけあんまりよくわかりませんよね笑

ここはあまり掘り下げると暗号学を読むコストが発生するので、とりあえずここでは、数学的に取引の正当性を確かめるやり方だと思えばOKです。

 

それでも少しは理解したい!という方は、エンジニアの方が日本語で解説している記事がありましたのでそちらをご覧ください。

●zkRollupの回路内で計算してること
https://zenn.dev/serinuntius/articles/f56b3dc2871a03

 

zkRollupの仕組み

①L2で一まとめにしたデータをL2に提出する際に、暗号的な証明を生成する。*

②この証明はL1スマートコントラクト上で即座に検証され、取引が正当であればブロックに取り込まれる。

*ちょい複雑ですが、この証明のことをSNARKs(Succinct Non-Interactive Argument of Knowledge )  又はSTARKs (scalable transparent argument of knowledge)と呼びトランザクションと一緒に提出されます。

SNARKsとSTARKsは一般的に有効性証明(Validity Proof)と言われ、スマートコントラクトによって検証されています。

※まぁつまり、暗号的に検証された安全性の高い証明書がトランザクションと一緒に提出されるから不正の余地ないよね〜ってことです。

 

このZk-Rollupスマートコントラクトは、全ての転送状態をL2に保存していて、これは有効性証明(Validity proof)によってのみ変更できる状態になっています。

これはつまり、イーサリアム上には膨大なトランザクションデータの代わりに有効性証明さえ保存すればOKです。

…だってスマートコントラクトでL2に転送データを保存しているんですからそれを参照すれば事足りますもんね。

したがって、zkRollupを用いることで提出時に含まれるデータが少なくないため、ブロックの検証はより早く、安価に行うことができます。

zkRollupの場合、この証明によって、L1スマートコントラクト上で即座に検証され、取引が正当であればブロックにすぐに取り込まれます。この点、ORと比べると検証にかかる時間が大幅に削減されます。

 

zkRollupのメリット・デメリット

メリット:

  • 数学的にコントロールされているから不正が起きにくい
  • 即座に実行される(検証期間不要)

 

デメリット:

  • ゼロ知識証明を用いたプログラムの開発障壁が高い(=現状開発できる人が少ない)
  • EVM互換なし(現時点)

 

zkRollupを使っている主なプロジェクト

  • zkSync
  • Polygon Hermez
  • Loopring

このように、ORとzkRollupは同じく複数のトランザクションデータをまとめてL1に提出するという点は同じですが、トランザクションの検証方法が異なるといった感じですね。

将来的にはどっちが使われる?

この点に関して、Ethreum創業者のVitalikは、ORの方が短期的には使われるが、中長期的にはzkRollupsについてより楽観的な見方を示しています。

現状、ゼロ知識証明を用いた開発の経験者が少なく開発が遅れているようですが、中長期的には(開発者が育ったら)より数学的な証明が実現できるzkRollupの方が主流になっていくだろうなとみています。

その移行期間として、ここ3-5年ほどはORが使われていくことでしょう。

 

おわりに

以上がRollupの解説でした。

より詳しく知りたい方は、L2に関してのより詳細な記事や、LoopringのCTOが書いているL2記事があるので参考にしてみてください。日本語訳あり。

 

【翻訳】EthereumのL2ソリューションに関する究極のガイド

↓英語
●Loopring CTO Steve: What is the real future of Layer-2 networks

↓日本語
●LoopringやzkSync・StarkExを比較|zkEVMの将来性