# zkEVM と Polygon zkEVM を探る

> Polygon zkEVM は、設計上 EVM 互換の zk-rollup です。スループット、パフォーマンス、効率の向上を目指しています。

著者 Shodipo Ayomide、2022年10月4日 公開。Web 版：https://blog.shodipoayomide.com/ja/an-exploration-of-the-zkevm-the-polygon-zkevm

![zkEVM と Polygon zkEVM を探る](https://blog.shodipoayomide.com/banners/An-Exploration-of-the-zkEVM-The-Polygon-zkEVM.png)

## はじめに

Polygon zkEVM は、設計上 EVM 互換の zk-rollup です。スループット、パフォーマンス、効率の向上を目指しています。Plonky2（最先端の zk スケーリング技術）を活用することで、軽量なプルーフを生成できるうえに SNARK の再帰的な検証も可能になっており、ユーザーはプルーフを素早く検証できます。

プルーフ生成時間の短縮に加えて、zkEVM ではトランザクションが非常に安くなり、zkEVM 上のあらゆる分散型アプリケーションのコスト効率が高まります。

## Ethereum のスケーラビリティ問題

現時点では、多くの人に使われる分散型アプリケーションを Ethereum 上で構築しようとするのは現実的ではありません。トランザクションの処理に長い時間がかかるうえに手数料もかなり高く、それがユーザー体験を損ない、意味のある普及を妨げているからです。

この問題の原因は、ネットワークに参加している各ノードがすべてのトランザクションを 1 つ残らず処理しなければならないことにあり、その結果、1 秒あたり 13 件のトランザクションしか処理できません。

## ZK-rollup の役割

Zk-Rollup は、Optimistic Rollup に次ぐ 2 つ目のタイプのロールアップです。Optimistic Rollup が使う遅延期間の仕組みの代わりに、zk-proof と呼ばれる暗号学的なプルーフを生成してバッチにまとめられたトランザクションを検証する点が Optimistic Rollup とは異なり、これによって zk-rollup はより高速になっています。

Zk-rollup はトランザクションを 1 つのバッチにまとめ、トランザクションのプルーフだけを投稿するので、コストがはるかに低くなります。これまで、スマートコントラクトをサポートする ZK-rollup は EVM と互換性がなかったため、開発者は Ethereum エコシステムを離れる必要がありました。

Polygon はさらに一歩進んで、Ethereum のバイトコードをサポートするコード実行環境を備えた ZK-rollup である Polygon zkEVM を構築しました。これにより開発者はコードを一から書き直す手間が省け、スマートコントラクトを簡単に zkEVM へ移行できます。

{" "}

![zkEVM と Polygon zkEVM を探る](https://i.ibb.co/hyjX19m/images-40.jpg)

*Hermez zk-rollup のアーキテクチャ.*

## zkEVM が未来である理由

zkEVM が従来の EVM よりどう優れているのかを話す前に、従来の EVM がどのように動くのかを理解しておく必要があります。

Ethereum 仮想マシン（EVM）は、スマートコントラクトの実行環境として機能するチューリング完全な仮想マシンです。トランザクションが発生すると、すべてのコントラクトのバイトコードがソースからコンパイルされて EVM のストレージにアップロードされ、そこでピアツーピアのノードが実行されます。ノードは、同じトランザクション入力を使って正しい結果にたどり着くことを確認します。

次に、EVM のオペレーションコード（オペコード）が EVM のさまざまなステートとやり取りし、ステートストレージから値を読み取って、新しい値を EVM のストレージに送ります。

最終的に、新しい値は新しいノードによって複製され、次のトランザクションが処理されるまでそのステートが維持されます。

![zkEVM と Polygon zkEVM を探る](https://i.ibb.co/WW0HD8M/images-1.png)

*Ethereum Virtual Machine：EVM の実行モデルの図.*

zkEVM もこれと同じ原理で動きますが、データがよりしっかりチェックされるようにさらに一歩踏み込んでいます。EVM で説明したステップに加えて、zkEVM はロードされるバイトコードが正しく、正しいアドレスから来たものかどうかもチェックします。また、ブロックチェーン上のデータが EVM 内のデータと一致することも保証します。

## Polygon zkEVM のアーキテクチャ

EVM と同じく、zkEVM の主な機能はスマートコントラクトをサポートすることです。L2 のトランザクションをまとめ、ステート遷移を実行し、バリディティプルーフを生成することでそのステート変更が有効であることを証明します。

**zkEVM には 5 つの主要なコンポーネントがあります：**

- トランザクションを送信するユーザー
- Proof-of-Efficiency と呼ばれるコンセンサスメカニズム
- ユーザーが異なるレイヤー間で資産を移動するために使えるスマートコントラクトである LX-to-LY ブリッジ
- zkProver と呼ばれる、バリディティプルーフを生成する専用ハードウェア
- ネットワークの参加者がネットワークのガバナンスと同期のために使う、zkNode と呼ばれるソフトウェア。

![コントラクトのフラット化](https://i.ibb.co/80ZNzyG/fig-simple-poe.png)

*PoE スマートコントラクトの図*

### シーケンサー

シーケンサーはネットワークのユーザーから L2 トランザクションを集め、それらをバッチにまとめて PoE スマートコントラクトに提案します。シーケンサーの役割はパーミッションレスで、自分のマシンで zkNode ソフトウェアを動かしてさえいれば誰でもシーケンサーになれます。これがネットワークの分散性を高めています。

L1 上にバッチを提案したいシーケンサーは、L1 のガス代を支払い、さらに追加のトークン手数料をデポジットしなければなりません。これはスパムを防ぐのに役立つと同時に、シーケンサーが有効なトランザクションだけを提案する動機にもなります。ユーザーが支払うバッチ手数料が、シーケンサーにとってのインセンティブになります。

提案されたバッチは calldata として L1 に投稿されます。新たに参加するパーミッションレスなノードはそのデータを再構築し、自身のステートを同期させます。マイニングされると、L1 のトランザクションによって L2 トランザクションの実行順序が決まります。こうして決定論的な新しいステートが作られますが、この新しいステートが確定するのは、バリディティプルーフが L1 に送られたときです。ここでアグリゲーターの出番となります。

{" "}

![コントラクトのフラット化](https://i.ibb.co/q5C6WCk/png-20220911-144628-0000.png)

*シーケンサーの仕組み*

### アグリゲーター

アグリゲーターの役割は、シーケンサーが提案した L2 トランザクションのバッチに対してバリディティプルーフを生成することです。提案されたバッチは位置に従って並べられ、トランザクションデータを含んでいます。

そしてアグリゲーターは、zkProver と呼ばれる専用ハードウェアを使って、各バッチのバリディティプルーフの作成を競い合います。最初にこのプルーフを生成したアグリゲーターは、シーケンサーがデポジットした Matic の手数料を報酬として受け取ります。

アグリゲーターの役割も、zkNode ソフトウェアをインストールしていて zkProver を動かせる人なら誰にでも開かれています。

![コントラクトのフラット化](https://i.ibb.co/syX6vXM/png-20220911-145742-0000.png)

*アグリゲーターの仕組み*

## zkEVM の設計の特徴

**EVM 等価** - Polygon の zkEVM は「バイトコードレベル」の互換性を持っています。つまり、EVM のオペコードレベルでも Solidity 言語レベルでも完全な互換性があるということです。Ethereum 上で動くすべてのツールやスマートコントラクトは、zkEVM 上でも動かすために一切の変更を必要としません。
**セキュア** - zkEVM はセキュリティの大部分を Ethereum から継承していますが、それに加えて zk-STARK や zk-SNARK といったゼロ知識証明も活用しています。これにより、ステートの変更が起きたときに、それが正しく行われること、ステートの変更を証明するプルーフが生成されること、そしてそれらのプルーフがオンチェーンで検証できるよう公開されることを保証しています。
**分散型かつパーミッションレス** - 担いたい役割に応じて必要なツールさえ持っていれば、誰でもネットワークに参加できます。
**効率的** - 効率性はネットワークのパフォーマンスにとって鍵となるため、最も効率的なアグリゲーターがバリディティプルーフを提供してインセンティブを得られるようになっています。また、すべての計算はオフチェーンで行われ、zk-proof と必要なデータだけがオンチェーンに保持されます。

---

## まとめ

zkEVM は通常の仮想マシンの改良版であり、トランザクションをより速く、より安全に実行します。プロジェクト全体は Polygon によってオープンソース化される予定で、Ethereum をより良く、より安く、より速く使う方法を探している人なら誰でも利用できます。

非常に複雑な技術ですが、私たちは全力で開発を進めていて、取り組んでいるものを皆さんにお見せするのが待ちきれません。
