zkPorter:zkRollupの先にあるL2のコンポーザブルなスケーラビリティ
10億人規模のブロックチェーン・ユーザー — スケーリング・アーキテクチャの提案

この度、私たちはzkPorterを発表します。
これは、zkRollupとシャーディングを組み合わせた新しいL2スケーリング技術で、高度にスケーラブルでありながら原子レベルでコンポーザブルなブロックチェーンネットワークです。
問題1:スループット≠スケーラビリティ ⚖️の問題
スループットは、ネットワークで処理されるトランザクションの総量で測定されます。スケーラビリティは、単一のノードで処理されるトランザクションの量です。 zkRollupは、セキュリティとユーザビリティに関して、間違いなく究極のL2スケーリングソリューションです。しかし、zkRollupはメインネットと比較して100倍のスケーラビリティしか提供していません。なぜなら、トランザクションデータはまだすべてのフルノードに伝搬されなければならないからです。zkRollupはスループットをリニアに向上させますが、指数関数的なスケーラビリティを実現する方法はないと言えます。
zkRollupはEth1で最大3,000TPS、シャード化されたEth2で少なくとも20kTPSを処理することができます。これは、Visaの24k TPSに匹敵する大きな成果ですが、現在の銀行インフラではサポートされていない何十億もの人々に対応するために、私たちはさらなる努力をしています。
問題点2:孤立したスケーラビリティは行き詰まる🛑
DeFiの躍進を見ると、コンポーザビリティが成功の鍵であることがわかります。DeFiアプリケーションは、マネーレゴのように組み合わせることができ、信頼性の高いプロトコルを重ねることで、潜在的な価値を引き出すことができる事を示しています。独自のスケーリングソリューションに限定されたプロジェクトは、コミュニティで共有された合成可能なスケーリングメカニズムの安全性とネットワーク効果から孤立することになります。
zkPorterの紹介🎉
この記事では、上記の両問題を解決する可能性のある zkベースのスケーリングへの新しいアプローチzkPorterを紹介していきます。
zkPorterの概要 🥜
zkPorterは、ゼロ知識証明によって保護されたアカウントベースのトラストレスなスケーリングプロトコルです。zkファミリーの他のスケーリング技術(zkRollupやValidiumなど)と同様に、 zkPorterの計算は指数関数的にスケーリングし、任意の数のトランザクションをほぼ一定のコストで検証できます。全てのトランザクションはL1上のスマートコントラクトによって検証され、zkPorterにおけるアカウントの状態の正しさはL1と同じセキュリティ保証が存在します。
一方で、zkベースのスケーリングが直接解決できないのは、データの可用性の問題です。状態データが利用できなくなると、資金凍結が生じてしまいます。
zkPorterは、zkRollupとシャーディングのアイデアを組み合わせたハイブリッドなアプローチでデータの可用性に取り組んでいます。任意の数のシャードをサポートすることができ、それぞれがシャードのスマートコントラクトによって定義された独自のデータ可用性ポリシーを保持します。また、シャードの選択は、個々のアカウントレベルで制御されます。
zkPorterは、状態の有効性とデータの可用性の問題を分離します。状態の有効性は、ゼロ知識証明によって一様に強制されます。ゼロ知識証明は、基礎となるL1のセキュリティ保証を継承しながら、指数関数的なスケーラビリティを提供します。対照的に、データの可用性は個々のシャードに委ねられており、シャードはさまざまなソリューションを自由に試すことができます。
zkPorterのコンポーザビリティ:ブロックチェーンのインターネットにおけるステロイド💊
同期的なクロスシャーディングの相互運用は非常に困難であるとされています。そのため、既存のシャーディングソリューション(Cosmos、Polkadot、Eth2)の多くはトランザクションレシートを介した、よりシンプルな非同期型の相互運用性を選択しています。同期型から非同期型への移行は、プロトコルの相互運用性やユーザーエクスペリエンスの面で大きな問題を引き起こします。
そこでzkPorterの登場です。zkPorterの全てのアカウントは、同じアドレス空間を共有し、zkPorterのベースシャードであるシャード0で実行されるzkRollupを介してシームレスに相互運用する事が可能です。 重いトラフィックや特定のデータ可用性を必要とするプロトコルは、そのプロトコルのインターフェースをzkPorterの独自のシャードに組み込む事ができます。プロトコルを独自のシャードに組み込む際のセキュリティ、コスト、スループットのトレードオフについては、次のセクションで説明します。
zkPorterは、任意の数のプロトコルの円滑な相互運用を可能にします。1つのアトミック・トランザクションは、異なるzkPorterシャード上の任意の数のスマート・コントラクトの呼び出しを可能にします。更にシャード内のトランザクションは、他のシャードのデータを含むzkPorterの状態全体にアクセスできます。これは、例えばオラクルのフィードを読むために使用する事ができるという事です。
zkPorterモデルは、zkのステロイドを利用したブロックチェーンのインターネットと考えることができます。
zkPorter シャード:セキュリティとコストについて💸
zkPorterのShard 0は、シンプルなzkRollupであり、基盤となるイーサリアム の完全なデータ可用性とセキュリティ保証を備えています。zkPorterのShard 0は、zkPorterの中で最もコストの高いシャードとなり、メインネットでの取引コストの約1/100となります。
シャード0以降のシャードは、独自のスマートコントラクトで独自のデータ利用ポリシーを定義します。zkPorterのシャードは、ベースとなるシャードよりもさらに10~100倍の取引コスト削減とスループット向上のために、チェーン上のデータ利用可能性をトレードします。zkPorterは、zkPorter Guardiansと呼ばれるオプションのバリデーターメカニズムを導入しており、これによりプロトコルは、利害関係者をプロトコルのシャード上のデータ利用可能性の保証人として参加させる事ができます。ガーディアンを有効にしたシャードでは、Proof of Stakeコンセンサスを実行し、参加したバリデーターの少なくとも1/3が誠実である限り、シャードのユーザーはデータを持って退出することができるようになります。
プロトコルは、zkPorter Guardiansを組み込んだり排除したりして、独自のデータ利用ポリシーを自由に実装することができます。プロトコルが選択したデータ利用可能ポリシーの効率は、 スループットとトランザクションコストの値に影響します。
柔軟なデータ利用は、zkPorterの中心的な設計目標です。プロトコルが独自のポリシーを設計できるようにする事で、 zkPorter はそれぞれに適した幅広いソリューションを可能にします。セキュリティの仮定が、保証人として信頼された中央のパーティを認めるアプリケーションは、Proof of Authority コンセンサスを実装できます。ガバナンストークンを持つアプリケーションは、自分のシャードを保護するために独自のProof of Stakeコンセンサスを実装することを選択できますが、シャードのデポジット量がステイク量を上回ることを避ける必要があります。ビットコインネットワークが比較的シンプルでトランザクション量が少ないことを考えれば、 zkPorterシャードのバリデーターは、そのシャード内にビットコインの実装を作り、 ナカモト型Proof of Workに基づくコンセンサスを実行する事もできるでしょう。これらは全て、zkPorter Guardiansのバリデータ設定に組み込むことも、独立して実行することもできるようになります。
また、zkPorterは、スケールを考慮して設計されています。zkPorterのプロトコルは、データの可用性と正しさの証明を各シャード上の小さなオーバーヘッドに縮小します。新しいシャードを持ち上げるための限界コストは、ベースとなる zkRollup にネストされたデータを含めるためのコストの対数になります。これにより、zkPorterは何億ものアカウントをサポートするために効率的にスケールアップすることができます。
ユーザーのプライバシーを守るには、ゼロ知識領域の応用が欠かせません。L2 の基本要素にzkRollupを使用するメリットには、トランザクションの内容を明らかにする事なく、状態遷移の有効性を証明できるという事が含まれます。
アーキテクチャー🏛
zkPorterは、その構造はzkRollupやValidiumと似たものです。L1上のコントラクトは、いくつかの資金とアカウントの状態のMerkleルートの記録を保持しています。実際の状態データは、各シャードのzkPorterバリデーターとデータキーパーによってオフチェーンで維持されます。
シャードのスマートコントラクトは、zkPorterのブロックが受け入れられる時の独自のルールを定義します。ブロックが受理されると、そのブロックは状態遷移を実行します。つまり、L1上のトランザクションがMerkleルートを新しい値に置き換えるという事です。このトランザクションは、新しい値の有効性を検証しなければなりません。
zkPorterでは、各シャードのアカウントは、ステートツリーの別のサブツリーに保存されなければなりません。更に、各シャードのサブツリーには、そのタイプに関する情報と、データ利用ポリシーを定義するスマートコントラクトのアカウントへの参照が含まれている必要があります。
シャードのタイプがzkRollupの場合、このシャードのアカウントを変更するトランザクションは、L1 calldataとして公開しなければならない状態の変更を含まなければならなりません(zkRollupと同様)
少なくとも2つの異なるシャードのアカウントを変更するトランザクションは、zkRollupモードで実行する必要があります。特定のシャードのアカウントのみを操作するその他のトランザクションは、通常のシャード・モードで実行することができます(これをシャード・トランザクションと呼びます)。あるブロックに、あるシャードSのシャード・トランザクションが含まれている場合、以下のルールを守らなければなりません:
- シャードSのサブツリーのルートハッシュは、L1上のコールデータとして公開されなければなりません。これにより、他の全てのシャードのユーザーが、自分の部分の状態を再構築できることが保証されます
- このシャードのデータ・アベイラビリティ・ポリシーのスマートコントラクトは、追加の要件(シャードのコンセンサス参加者の過半数の署名を検証するなど)を強制するために起動されなければなりません。
ケーススタディ 💼
各アプリケーションのニーズに合わせてトランザクション量を調整しながら、他のアプリケーションとシームレスに構成できるzkPorterの可能性を示す4つのケーススタディをご紹介していきます。
ケーススタディ1:Redditのコミュニティポイント
2020年6月、RedditはThe Great Reddit Scaling Bake-Offを開始しました。これは、コミュニティポイントシステムを使ってコミュニティがsubredditの一部を所有し、L2ソリューションが要件を満たす能力を示す機会でした。つまり、コミュニティポイントシステムのソリューションは、他のサードパーティアプリ(ウォレットやコントラクト)との相互運用性を維持しつつ、安全で、分散化されていて、使いやすく、何十万ものトランザクションを処理する必要があります。コミュニティポイントは、zkPorterを使って3つの方法で実装できます。
オプション1:zkSync(zkPorterシャード0)で運用
コミュニティポイントをイーサリアムのメインネットに導入する為に、Redditは単純にzkSync上の既存のzkRollup機能と統合するかもしれません。前述したように、zkSyncはEth1で3,000TPSの容量を持っています。Redditの月間アクティブユーザー5億人全員が積極的に参加したとして、平均月1回のミントTx、1回のバーンTx(サブスクリプションの支払い)、2回の転送を行うと仮定した場合、コミュニティポイントは以下の平均負荷を必要とします:
500,000,000 * 4 / (30 * 24 * 60 * 60) ~ 700 TPS (transaction per second)。
これはzkRollupの現在の総容量(3,000TPS)の約1/4です。
オプション2: zkPorter Guardiansにより検証されたReddit専用シャード
ユーザーのコストを削減しながら実現可能なトランザクションの帯域幅を増やすために、RedditはRedditのトランザクションをベースシャードからReddit専用のシャードに移行する事ができます。Redditは、ユーザーにデータ利用可能性の保証をどのように提供するかについて選択肢を持ちます。最もシンプルなのは、既存のzkSync Guardiansの実装を利用して、Proof of Stakeによるデータ可用性保証をユーザに提供することです。私たちは、RedditがGuardiansのテンプレートを拡張して、Redditのサーバー上でデータを追加でホストすることを提案します。このモデルでは、ガーディアンによる3分の2の攻撃であっても、Redditはそれを回避することができるため、Redditのユーザに強力なデータ可用性保証を提供する事ができます。同様にユーザーデータは、Redditのサーバー障害やハッカーによる攻撃などからも保護されます。
オプション3:Reddit固有のシャードに移行し、Reddit固有のデータ可用性ポリシーを適用する
Redditは、コストを最小限に抑えながらトランザクションのスループットを最大化する為にzkPorter Guardiansを使わずに、Redditコミュニティをカスタムデータ・アベイラビリティポリシーを持つReddit固有のシャードに移行させる事ができます。Proof of Stakeのコンセンサスに基づく可能性のあるスキームは、上記の様なコミュニティ主導のデータ利用可能性と、3分の2のマルチシグネチャを組み合わせたものです。
あるスキームの実装では、RedditとRedditユーザーが、各状態遷移の有効性を証明する署名を提出します。例えば、Redditは総署名量の3分の1を所有し、残りの3分の2をユーザーに分配する事ができます。Redditのシャードの状態遷移を許可するには、3分の2の署名量があれば十分です。もしあるユーザーが無効な状態遷移を発見した場合、そのユーザーは無効な状態遷移の証明を公開することで、無効な状態遷移を公開した人の持分を減らす事ができるかもしれません。
提案されているスキームのトランザクションコストは、zkの証明生成をカバーするだけです(現在は1txあたり0.001ドルですが、近い将来桁違いに低減される事が予想されます)
相互運用性
いずれのシナリオにおいても、Redditコミュニティのポイントホルダーは以下の事が可能になります:
- 他のシャード上のスマートコントラクトと相互作用させる。例えば、zkSync上に展開されたDeFiプロトコルを使用した取引/貸し借り(zkSync上のCurve、zkSync上のCompound等)
- コミュニティポイントをzkRollupシャード上のアカウントに移動し、セキュリティを最大限に高める
- トークンをイーサリアムのメインネットに引き出し、zkSync以外のスマートコントラクトとのやり取りを実行する
ケーススタディ2:スマートウォレット/クリプトバンク(Argent、Dharma、MyKeyなど)
スマートウォレットとは、スマートコントラクトと統合されたウォレットで、ユーザーのプライバシーや相互運用性の機能を扱う事ができます(例えば、ウォレットのL2スケーリングへの統合など)
Argentのように、一部のウォレットは、新規ユーザーをオンボーディングする際に、ユーザーのガスコストの一部を支払う手法をとっています。現在のガスコストが75Gwei、Eth価格が320ドルの場合、単純に50セントとして計算できます。スマートウォレットは、スマートコントラクトを統合してzkRollup関数を呼び出し、ガスコストの総額を減らすことができます。
ここでは3つの簡単なステップで可能となる実装を紹介します:
ステップ1: zkRollupシャード
スマートウォレットのアカウントは、zkSyncのようなzkRollupソリューションに移動することができます。zkSync内部のウォレット間のトランザクションは安価ですが、zkSyncから外部メインネットへはやや高価で、時間もかかります(最終的には~5~10分)
ステップ2: zkSyncガーディアン+ウォレット・オペレーターシャード
zkRollupの運営コストは、ウォレット・オペレーターが自分のシャードを開くことを検討するきっかけになるかもしれません。上記のRedditのセクションでは、これがどのようなものかを詳しく説明しました。つまり、ユーザーベースを別のシャードに移し、そこでデータの可用性をzkSyncガーディアンとウォレットオペレーターにより確保します。ウォレットオペレーターまたはzkSyncガーディアンの過半数が反故しない限り、シャードの安全性は保たれます。このオプションはまた、ウォレットオペレーターとの有機的な手数料共有の道を開くものとなりま。
ステップ3:ウォレットDAOシャード
ユーザーベースが巨大化した段階では、ウォレットがガバナンストークンホルダーによって統治されるシャードへの移行を決定する可能性が生じます。このシャードはzkSyncネットワークの一部として残り、zkRollupモードで他の全てのシャードのサービスにアクセスする事ができます。
プライバシーへの配慮
プライバシーは、上記の3つのステップのどの段階でも簡単に実装できることに留意する必要があります。zkRollupの素晴らしさは、アカウントがプライバシーにアクセスできると同時に、セキュリティや分散化を犠牲にすることなく、ネットワークに参加するためのコストを劇的に下げることができる事です。
ケーススタディ3:DeFiプロトコルとDEX(Loopring、IDEX、Curve、Compoundなど)
スケーリングのボトルネックを見越して、いくつかの主要なDeFiプロトコル(IDEXやLoopringなど)は、独自のスケーラビリティソリューションの導入に投資しました。これは、ガスコストが高騰する中で競争力を高め、スケーリング技術やトレードオフをより深く理解する上で、賢明な行動でした。
また、高頻度取引の実装を目指すDEXでは、1回の注文を成立させる為に多くのトランザクションが必要となる為、1回のトランザクション価格を最小限に抑える必要があります。
しかし、このアプローチには2つの問題があります:
- 孤立したスケーラビリティソリューションは、コンポーザビリティとネットワーク効果の欠如に悩まされている
- ゼロ知識証明の可能性が明らかになるにつれ、ZKPが本当の意味での大量導入の鍵であることを認識する人が増えています。同時に、ZKPの分野におけるイノベーションのスピードは非常に速く、それに追いつくためには専用の研究開発チームが必要になります。複雑な暗号アルゴリズムを適切に監査・実装しないと、セキュリティ上、致命的な脆弱性が生じる可能性があります
zkPorterはこれらの問題を解決します。DeFiプロトコルは、強力なネットワーク効果を持つ最先端のスケーリング技術をベースにしながら、トランザクションコストを抑制する事ができます。これを実現する為に、プロトコルはzkPorterに独自のシャードを作成し、プロトコル・トークン保有者のコンセンサスにより保護する事が可能になります。これはまた、手数料の共有や手数料補助のための有機的な機会を提供するものでもあります。
ケーススタディ4:マイクロトランザクション(Brave、Livepeer、Storjなど)
価値の低い送金を大量に行う必要があるプロトコル(マイクロトランザクション)では、Validiumのようなシャード(複数のバリデーターによるシンプルなマルチシグでデータの可用性を保護するシャード)を実装して、トランザクションコストを最低限のコストに抑える事ができるかもしれません(現在txあたり0.001ドルですが、近い将来には桁違いに低減されると予想)
マイクロトランザクションプラットフォームとの統合により、ユーザーが定期的、または残高が一定額を超えた後に残高を自動的にzkRollupシャードに移すオプションを設けることができます。
今後のマイルストーン
zkPorterは、zkSyncのロードマップの一部として実装が進んでいきます。
このビジョン達成の為の次のステップは次のとおりです:
- zkSyncにジェネリックなスマートコントラクトのサポートをもたらすこと
- マルチバリデーター・コンセンサスメカニズムの実装
- zkSyncトークンを配布してガーディアンズシャードに燃料を供給する
zkSyncはイーサリアムのメインネットでライブ稼働しており、既にパーミッションレスのzkRollupモードで使用する事ができます。そのスループット容量は、ネットワークがEthereum 2.0に移行するまでの今後2年間のスケーリングニーズをカバーするのに十分であると考えています。しかし、今後の有望なパートナーシップの誕生によっては、カスタムシャードソリューションの議論をより促進し、より早期に実行させる事も可能でしょう。興味のある方、組織は是非ご連絡ください。