ブロックチェーンのスケーラビリティの制限
著者:Vitalik Buterin
原題:《ブロックチェーンのスケーラビリティの限界》
発表日:2021年5月23日
私たちはブロックチェーンのスケーラビリティをどれだけ向上させることができるのでしょうか?Elon Muskが言うように「ブロック時間を10倍にし、ブロックサイズを10倍にし、手数料を100倍に下げる」ことが、本当に極度の中央集権化を引き起こさず、ブロックチェーンの本質的な特性に反することなく実現できるのでしょうか?もし答えが否定的であれば、私たちはどの程度まで達成できるのでしょうか?アルゴリズムの変更はどうなるのでしょうか?さらに重要なのは、ZK-SNARKやシャーディングのような機能を導入した場合はどうなるのでしょうか?理論的には、シャーディング型のブロックチェーンは分割を追加し続けることができるのですが、本当にそうできるのでしょうか?
実際、シャーディングを使用するかどうかにかかわらず、ブロックチェーンのスケーラビリティには重要かつ非常に微妙な技術的要因が制約を与えています。多くの状況には解決策がありますが、解決策があっても限界があります。この記事では、その中の多くの問題を探ります。
単純にパラメータを引き上げるだけで問題が解決するように見えます。しかし、私たちはそのために何を犠牲にするのでしょうか?
一般ユーザーがノードを運営できることはブロックチェーンの非中央集権化にとって重要です
深夜2時過ぎ、あなたは世界の反対側からマイニングプール(ステーキングプール)を運営している人からの緊急の呼び出しを受けました。約14分前から、あなたのプールと他の数人はチェーンから分離されており、ネットワークは79%のハッシュレートを維持しています。あなたのノードによれば、大多数のチェーンのブロックは無効です。この時、残高のエラーが発生しました:ブロックは450万枚の追加トークンを未知のアドレスに誤って割り当てたようです。
1時間後、あなたと同じように予期せぬ事態に遭遇した2人の小規模マイナー、いくつかのブロックエクスプローラー、取引所の関係者がチャットルームで集まり、「新しいオンチェーン持続可能なプロトコル開発基金を発表」と書かれたツイッターのリンクが貼られました。
朝になると、関連する議論はツイッターや検閲のないコミュニティフォーラムに広がっていました。しかし、その時には450万枚のトークンの大部分がすでに他の資産に変換され、数十億ドルのDeFi取引が行われていました。79%のコンセンサスノードと、すべての主要なブロックチェーンエクスプローラーやライトウォレットのエンドポイントはこの新しいチェーンに従っていました。おそらく新しい開発者基金は特定の開発に資金を提供するかもしれませんが、すべてが主要なマイニングプール、取引所、そしてその利権に飲み込まれるかもしれません。しかし、結果がどうであれ、その基金は実際には既成事実となり、一般ユーザーは反抗することができません。
おそらく、こんなテーマの映画もあるかもしれません。MolochDAOや他の組織が資金提供するかもしれません。
このような状況があなたのブロックチェーンで起こるでしょうか?あなたが属するブロックチェーンコミュニティのエリートたち、マイニングプール、ブロックエクスプローラー、ホスティングノードはうまく調整されているかもしれません。彼らはおそらく同じテレグラムチャンネルやWeChatグループにいるでしょう。もし彼らが本当に利益のために突然プロトコルのルールを変更したいと思った場合、彼らはその能力を持っているかもしれません。イーサリアムブロックチェーンは10時間以内にコンセンサスの失敗を完全に解決しましたが、もしクライアントが1つだけのブロックチェーンであり、コード変更を数十のノードにデプロイするだけで済むなら、クライアントコードの変更をより早く調整することができます。このような社会的協力攻撃に対抗する唯一の信頼できる方法は「受動的防御」であり、その力は非中央集権的な集団、すなわちユーザーから来ています。
想像してみてください。ユーザーがブロックチェーンの検証ノードを運営し(直接検証でも他の間接的な技術でも)、プロトコルルールに違反するブロックを自動的に拒否した場合、たとえ90%以上のマイナーやステーキング者がこれらのブロックを支持していても、物語はどう展開するでしょうか。
もしすべてのユーザーが検証ノードを運営しているなら、攻撃はすぐに失敗するでしょう:いくつかのマイニングプールや取引所がフォークを行い、その過程で非常に愚かに見えるでしょう。しかし、たとえ一部のユーザーだけが検証ノードを運営していても、攻撃者は大勝利を収めることはできません。逆に、攻撃は混乱を引き起こし、異なるユーザーが異なるブロックチェーンのバージョンを見ることになります。最悪の場合、続く市場の恐慌と持続的なチェーンフォークは攻撃者の利益を大幅に減少させるでしょう。このような長期的な対立に対処するという考え自体が、大多数の攻撃を阻止することができます。
Hasuの見解:
"私たちが悪意のあるプロトコル変更に抵抗できるのは、ユーザーがブロックチェーンを検証する文化を持っているからであり、PoWやPoSのためではありません。"
あなたのコミュニティに37のノード運営者と80,000人の受動的リスナーがいて、署名とブロックヘッダーをチェックしていると仮定すると、攻撃者は勝利します。もし皆がノードを運営していれば、攻撃者は失敗するでしょう。協調攻撃に対する集団免疫の正確な閾値がどれくらいかは不明ですが、1つだけは確かです:良いノードが多ければ多いほど、悪意のあるノードは少なくなり、必要な数は確実に数百や数千を超えるでしょう。
では、フルノードの作業上限は何ですか?
できるだけ多くのユーザーがフルノードを運営できるように、私たちは一般的な消費者向けハードウェアに焦点を当てます。専用ハードウェアを簡単に購入できる場合、いくつかのフルノードのハードルを下げることができますが、実際にはスケーラビリティの向上は私たちが想像するほどではありません。
フルノードが大量の取引を処理する能力は主に次の3つの要因によって制限されます:
- 計算能力:安全を確保した上で、どれだけのCPUをノードの運営に割り当てられますか?
- 帯域幅:現在のネットワーク接続に基づいて、1つのブロックにはどれだけのバイトを含めることができますか?
- ストレージ:ユーザーにどれだけのスペースをストレージに要求できますか?さらに、その読み取り速度はどれくらいであるべきですか?(つまり、HDDで十分ですか?それともSSDが必要ですか?)
「シンプル」な技術を使用してブロックチェーンを大幅に拡張するという多くの誤解は、これらの数字に対する過度に楽観的な見積もりから生じています。これらの3つの要因について順に議論しましょう:
計算能力
- 誤った答え:100%のCPUをブロック検証に使用すべきです
- 正しい答え:約5-10%のCPUをブロック検証に使用できます
制限がこれほど低い主な理由は以下の4つです:
- DoS攻撃の可能性をカバーするための安全境界が必要です(攻撃者がコードの弱点を利用して生成した取引は、通常の取引よりも処理時間が長くなる必要があります)
- ノードはオフライン後にブロックチェーンと同期できる必要があります。もし私が1分間オフラインになった場合、数秒以内に同期を完了できる必要があります。
- ノードの運営はすぐにバッテリーを消耗してはならず、他のアプリケーションの動作を遅くしてはなりません。
- ノードにはブロック生成以外の作業もあり、大部分は検証やP2Pネットワークに入力された取引やリクエストに応答することです。
注意すべきは、最近まで「なぜ5-10%だけで十分なのか?」という点に関する説明は、別の異なる問題に焦点を当てていたことです:PoWのブロック生成時間が不定で、ブロックを検証するのに長い時間がかかるため、同時に複数のブロックが作成されるリスクが高まります。この問題には多くの修正方法がありますが、たとえばBitcoin NGやPoSの利用など。しかし、これらは他の4つの問題を解決していないため、多くの人が予想したようにスケーラビリティの面で大きな進展をもたらすことはありませんでした。
並列性も万能薬ではありません。通常、見かけ上は単一スレッドのブロックチェーンクライアントであっても、すでに並列化されています:署名は1つのスレッドで検証され、実行は他のスレッドで行われ、バックグラウンドで取引プールのロジックを処理するための別のスレッドがあります。そして、すべてのスレッドの使用率が100%に近づくほど、ノードのエネルギー消費が増加し、DoSに対する安全係数が低下します。
帯域幅
- 誤った答え:もし2-3秒ごとに10MBのブロックが生成されなければ、多くのユーザーのネットワークは10MB/秒以上であり、当然それらのブロックを処理できる。
- 正しい答え:おそらく、12秒ごとに1-5MBのブロックを処理できるが、それでも難しい。
現在、インターネット接続が提供できる帯域幅に関する広く知られた統計データをよく耳にします:100Mbpsや1Gbpsの数字は非常に一般的です。しかし、以下の理由から、宣言された帯域幅と期待される実際の帯域幅の間には大きな差があります:
- 「Mbps」は「毎秒数百万ビット」を意味します;1ビットは1バイトの1/8であるため、宣言されたビット数を8で割ってバイト数を得る必要があります。
- ネットワークプロバイダーは、他の企業と同様に、しばしば嘘をつきます。
- 常に複数のアプリケーションが同じネットワーク接続を使用しているため、ノードは帯域幅を独占できません。
- P2Pネットワークは避けられないオーバーヘッドを引き起こします:ノードは通常、同じブロックを何度もダウンロードして再アップロードします(取引がブロックにパッケージ化される前にmempoolを通じてブロードキャストされることは言うまでもありません)。
Starkwareが2019年に実施した実験では、取引データのガスコストが低下した後、初めて500kBのブロックを公開しましたが、一部のノードは実際にこのサイズのブロックを処理できませんでした。大きなブロックを処理する能力は改善され続けています。しかし、私たちが何をしても、MB/秒単位の平均帯域幅を取得することはできず、1秒の遅延を受け入れられると自分を納得させ、あのサイズのブロックを処理できる能力があると考えることはできません。
ストレージ
- 誤った答え:10TB
- 正しい答え:512GB
皆さんが推測できるように、ここでの主な議論は他の場所と同じです:理論と実践の間のギャップ。理論的には、Amazonで8TBのSSDを購入できます(確かにSSDまたはNVMEが必要です;HDDはブロックチェーンの状態ストレージには遅すぎます)。実際、私がこのブログ記事を書くために使用しているノートパソコンは512GBです。もし人々にハードウェアを購入させると、多くの人が怠惰になり(または800ドルの8TB SSDを購入できない)、中央集権的なサービスを利用するでしょう。たとえブロックチェーンをどこかのストレージデバイスに保存できたとしても、大量の活動が迅速にディスクを消費し、新しいディスクを購入することを余儀なくされるでしょう。
一群のブロックチェーンプロトコル研究者が各人のディスクスペースを調査しました。サンプルサイズは非常に小さいことは承知していますが、それでも…
さらに、ストレージサイズは新しいノードがネットワークに参加するために必要な時間を決定します。既存のノードが保存する必要のあるデータは、新しいノードがダウンロードしなければならないデータです。この初期同期時間(および帯域幅)は、ユーザーがノードを運営できるかどうかの主要な障害です。このブログ記事を書くとき、新しいgethノードを同期するのに約15時間かかりました。もしイーサリアムの使用量が10倍に増加すれば、新しいgethノードの同期には少なくとも1週間かかり、ノードのインターネット接続が制限される可能性が高くなります。これは攻撃中に特に重要であり、ユーザーが以前にノードを運営していなかった場合、攻撃に成功裏に対応するためには新しいノードを有効にする必要があります。
相互作用効果
さらに、これらの3つのコストの間には相互作用効果があります。データベースは内部でツリー構造を使用してデータを保存および取得するため、データベースからデータを取得するコストはデータベースのサイズの対数に伴って増加します。実際、トップレベル(または最初の数レベル)はRAMにキャッシュされるため、ディスクアクセスコストはデータベースのサイズに比例し、RAMにキャッシュされたデータサイズの倍数です。
この図を文字通りに理解しないでください。異なるデータベースは異なる方法で機能し、通常、メモリ内の部分は単一(しかし大きな)レイヤーに過ぎません(leveldbで使用されるLSMツリーを参照)。しかし、基本的な原則は同じです。
たとえば、キャッシュが4GBであり、データベースの各レイヤーが前のレイヤーの4倍の大きさであると仮定すると、イーサリアムの現在の約64GBの状態は約2回のアクセスを必要とします。しかし、状態サイズが4倍の約256GBに増加すると、約3回のアクセスが必要になります。したがって、ガス上限が4倍に増加することは、実際にはブロック検証時間が約6倍に増加することに変換されます。この影響はさらに大きくなる可能性があります:ハードディスクは満杯の状態では空いているときよりも読み書きに時間がかかります。
これはイーサリアムにとって何を意味するのでしょうか?
現在、イーサリアムブロックチェーンでノードを運営することは多くのユーザーにとって挑戦であり、少なくとも通常のハードウェアを使用することは可能です(この記事を書くとき、私はノートパソコンでノードを同期しました!)。したがって、私たちはボトルネックに直面しています。コア開発者が最も懸念しているのはストレージサイズです。したがって、計算とデータのボトルネックを解決するための大規模な努力、さらにはコンセンサスアルゴリズムの変更は、ガスリミットの大幅な向上をもたらす可能性は低いです。イーサリアムの最大のDoSの弱点を解決しても、ガスリミットを20%しか引き上げることはできません。
ストレージサイズの問題に対する唯一の解決策は、無状態と状態の期限切れです。無状態はノード群が永続的なストレージを維持せずに検証を行うことを可能にします。状態の期限切れは、最近アクセスされていない状態を無効にし、ユーザーが更新するために手動で証明を提供する必要があります。この2つの道は長い間研究されており、無状態の概念検証の実装が始まっています。これら2つの改善を組み合わせることで、これらの懸念を大幅に緩和し、ガスリミットを大幅に引き上げる余地を開くことができます。しかし、無状態と状態の期限切れを実装した後でも、ガスリミットはおそらく安全に約3倍にしか引き上げられず、他の制限が作用し始めるまでです。
もう1つの中期的な解決策は、ZK-SNARKsを使用して取引を検証することです。ZK-SNARKsは、一般ユーザーが個人の状態を保存したりブロックを検証したりする必要がなく、データ不可用攻撃に対抗するためにブロック内のすべてのデータをダウンロードする必要があることを保証できます。さらに、攻撃者が無効なブロックを強制的に提出できない場合でも、コンセンサスノードを運営するのが難しすぎると、調整された審査攻撃のリスクが依然として存在します。したがって、ZK-SNARKsはノードの能力を無限に引き上げることはできませんが、依然として大幅に引き上げることができます(おそらく1-2桁)。いくつかのブロックチェーンはレイヤー1でこの形式を探求しており、イーサリアムはレイヤー2プロトコル(ZKロールアップとも呼ばれる)を通じて利益を得ています。たとえば、zksync、Loopring、Starknetなどです。
シャーディングの後はどうなるのでしょうか?
シャーディングは、ブロックチェーン上に含まれるデータと単一ノードが処理および保存する必要があるデータを分離することによって、根本的に上記の制限を解決します。ノードはブロックを直接ダウンロードして実行するのではなく、高度な数学と暗号技術を使用して間接的にブロックを検証します。
したがって、シャーディング型ブロックチェーンは、安全に非シャーディング型ブロックチェーンでは実現できない非常に高いスループットを持つことができます。これは、無効なブロックを拒否するために素朴な完全検証を効果的に置き換えるために多くの暗号技術が必要ですが、これは実現可能です:理論的には基盤が整っており、草案規格に基づく概念検証が進行中です。
イーサリアムは二次方シャーディング(quadratic sharding)を採用する予定であり、全体のスケーラビリティは次の事実によって制限されます:ノードは単一のシャードと信号チェーンを同時に処理できる必要があり、信号チェーンは各シャードに対していくつかの固定の管理作業を実行する必要があります。シャードが大きすぎると、ノードは単一のシャードを処理できなくなり、シャードが多すぎると、ノードは信号チェーンを処理できなくなります。これら2つの制約の積が上限を構成します。
三次方シャーディングや指数シャーディングを通じて、さらに遠くまで進むことができると想像できます。このような設計では、データ可用性サンプリングは確実により複雑になりますが、実現可能です。しかし、イーサリアムは二次方を超えていません。その理由は、取引シャードから取引シャードへのシャーディングによって得られる追加のスケーラビリティの利益が、他のリスクレベルが受け入れ可能な前提の下では実現できないからです。
では、これらのリスクは何でしょうか?
最低ユーザー数
想像してみてください。1人のユーザーが参加する意欲があれば、非シャーディング型ブロックチェーンは運営できます。しかし、シャーディング型ブロックチェーンはそうではありません:単一のノードが全体のチェーンを処理できないため、十分なノードが必要です。もし各ノードが50TPSを処理でき、チェーンが10,000TPSを処理できるなら、チェーンは存続するために少なくとも200ノードが必要です。もしチェーンが常に200ノード未満であれば、ノードが同期を維持できなくなったり、無効なブロックを検出しなくなったり、ノードソフトウェアの設定に応じて多くの他の悪い事が発生する可能性があります。
実際には、冗長性が必要なため(データ可用性サンプリングを含む)、安全な最低数は単純に「チェーンTPSをノードTPSで割った数」よりも数倍高くなります。上記の例では、これを1,000ノードに設定します。
もしシャーディング型ブロックチェーンの容量が10倍に増加すれば、最低ユーザー数も10倍に増加します。今、皆さんはこう思うかもしれません:なぜ私たちは低い容量から始めて、ユーザーが多いときに増やさないのか?それが私たちの実際のニーズであり、ユーザー数が減少したときに容量を減らすのですか?
ここにはいくつかの問題があります:
- ブロックチェーン自体は、上に何人のユニークユーザーがいるかを信頼性高く検出できないため、シャード数を検出し設定するための何らかのガバナンスが必要です。容量制限のガバナンスは、分裂や対立の根源になりやすいです。
- もし多くのユーザーが突然同時に予期せずオフラインになったらどうしますか?
- 起動フォークに必要な最低ユーザー数を増やすことは、悪意のある制御に対する防御をより困難にします。
最低ユーザー数が1,000であれば、ほぼ問題ないと言えます。一方、最低ユーザー数を100万に設定することは確実に不可能です。最低ユーザー数が10,000であれば、リスクが高まると言えるでしょう。したがって、数百を超えるシャーディング型ブロックチェーンが合理的であることを証明するのは難しいようです。
歴史的可検証性
ユーザーが本当に重視するブロックチェーンの重要な特性は永続性です。企業が破産したり、そのエコシステムの維持が利益を生まなくなった場合、サーバーに保存されたデジタル資産は10年以内に存在しなくなります。しかし、イーサリアム上のNFTは永続的です。
はい、2372年には人々はあなたのCryptoKittiesをダウンロードして参照することができるでしょう。
しかし、ブロックチェーンの容量が過剰になると、すべてのデータを保存することがますます困難になり、ある時点で巨大なリスクが生じ、特定の歴史データが最終的に……誰も保存しなくなる可能性があります。
このリスクを定量化するのは簡単です。ブロックチェーンのデータ容量(MB/sec)に約30を掛けると、年間の保存データ量(TB)が得られます。現在のシャーディング計画のデータ容量は約1.3MB/秒で、年間約40TBです。10倍に増加すれば、400TB/年になります。もし私たちがデータにアクセスできるだけでなく、便利な方法でアクセスできることを望むなら、メタデータ(たとえば、圧縮された集約取引)も必要です。したがって、年間4PB、10年後には40PBに達します。インターネットアーカイブは50PBを使用しています。したがって、これはシャーディング型ブロックチェーンの安全なサイズの上限と言えるでしょう。
したがって、これらの2つの次元において、イーサリアムのシャーディング設計は実際に合理的な最大安全値に非常に近いようです。定数は少し増加するかもしれませんが、あまり増加することはできません。
結論
ブロックチェーンのスケーラビリティを拡大する方法は2つあります:基本的な技術の改善と単純にパラメータを引き上げることです。まず、パラメータを引き上げることは魅力的に聞こえます:もしあなたがレストランの紙の上で数学を行っているなら、消費者向けのノートパソコンが毎秒数千の取引を処理できると信じ込むのは簡単です。ZK-SNARK、ロールアップ、またはシャーディングは必要ありません。不幸なことに、この方法が根本的に欠陥がある理由は多くの微妙な理由があります。
ブロックチェーンノードを運営するコンピュータは、ブロックチェーンを検証するために100%のCPUを使用することはできません;彼らは予期しないDoS攻撃に対抗するための大きな安全余裕が必要であり、メモリプール内の取引を処理するなどのタスクを実行するためのバックアップ容量が必要であり、ユーザーはノードを運営しているときに他のアプリケーションを同時に使用できないことを望んでいません。帯域幅も制限されます:10MB/sの接続があるからといって、毎秒10MBのブロックを処理できるわけではありません!おそらく、12秒ごとに1-5MBのブロックを処理することができるでしょう。ストレージも同様です。ノードを運営するためのハードウェア要件を引き上げ、専用のノード運営者を制限することは解決策ではありません。非中央集権的なブロックチェーンにとって、一般ユーザーがノードを運営し、ノード運営が一般的な行動である文化を形成することが重要です。
しかし、基本的な技術の改善は実現可能です。現在、イーサリアムの主要なボトルネックはストレージサイズであり、無状態性と状態の期限切れがこの問題を解決することができます。これにより、最大で約3倍の成長が可能になりますが、それ以上は難しいです。ノードを運営することが現在よりも容易になることを望んでいます。シャーディングを採用したブロックチェーンはさらに拡張可能です。なぜなら、シャーディング型ブロックチェーンの単一ノードは各取引を処理する必要がないからです。しかし、シャーディング型ブロックチェーンでも、容量には限界があります:容量が増加するにつれて、最低限の安全ユーザー数が増加し、アーカイブブロックチェーンのコスト(誰もアーカイブしない場合、データが失われるリスクも増加します)が上昇します。しかし、私たちはあまり心配する必要はありません:これらの制限は、ブロックチェーンの完全な安全性を保証しながら、毎秒100万件以上の取引を処理するのに十分です。しかし、ブロックチェーンの最も貴重な非中央集権的特性を損なうことなくこれを実現するためには、さらに努力が必要です。