Dankrad Feist と Aditya Asgaonkar のレビューに感謝します
シャーディングはイーサリアムのスケーラビリティの未来であり、エコシステムが毎秒何千ものトランザクションをサポートし、世界の大部分が手頃な価格でプラットフォームを定期的に使用できるようにするための鍵となります。しかし、これは、イーサリアム エコシステムやブロックチェーン エコシステムでより広く誤解されている概念の 1 つでもあります。これは、非常に特定のプロパティを持つ非常に特定のアイデアのセットを指しますが、非常に異なる、多くの場合、はるかに弱いセキュリティ プロパティを持つ手法と混同されることがよくあります。この投稿の目的は、シャーディングが提供する特定のプロパティ、シャーディングではない他のテクノロジとの違い、およびシャード システムがこれらのプロパティを実現するために必要な犠牲を正確に説明することです。
シャーディングを説明する最良の方法は、ソリューションを形作り、インスピレーションを与えた問題のステートメント、つまりスケーラビリティのトリレンマから始まります。
スケーラビリティのトリレンマは、ブロックチェーンが持とうとする 3 つの特性があり、 「単純な」手法に固執する場合、それらの 3 つのうち 2 つしか得られないことを示しています。 3 つのプロパティは次のとおりです。
スケーラビリティ: チェーンは、単一の通常のノード (コンシューマ ラップトップを考えてください) が検証できるよりも多くのトランザクションを処理できます。
分散化: チェーンは、中央集権化された大規模なアクターの小さなグループに対して、信頼に依存することなく実行できます。これは通常、消費者向けラップトップだけでは参加できない一連のノードの信頼 (または正直な過半数の仮定) があってはならないことを意味すると解釈されます。
セキュリティ: チェーンは、攻撃しようとする参加ノードの大部分に抵抗できます (理想的には 50%; 25% を超えるものは問題ありませんが、5% はまったく問題ありません)。
ここで、3 つのうち 2 つしか得られない「簡単な解決策」の 3 つのクラスを見てみましょう。
従来のブロックチェーン- ビットコイン、プレ PoS/シャーディング イーサリアム、ライトコイン、およびその他の同様のチェーンを含む。これらは、すべてのトランザクションを検証するフルノードを実行するすべての参加者に依存しているため、分散化とセキュリティはありますが、スケーラビリティはありません.
高 TPS チェーン- DPoS ファミリーだけでなく、他の多くのチェーンも含まれます。これらは少数のノード (多くの場合 10 ~ 100) がノード間のコンセンサスを維持することに依存しており、ユーザーはこれらのノードの大部分を信頼する必要があります。これはスケーラブルで安全ですが (上記の定義を使用)、分散化されていません。
マルチチェーン エコシステム- これは、さまざまなアプリケーションをさまざまなチェーン上で稼働させ、クロスチェーン通信プロトコルを使用してそれらの間で通信することによる「スケールアウト」の一般的な概念を指します。これは分散型でスケーラブルですが、安全ではありません。なぜなら、攻撃者は多くのチェーンの 1 つ (多くの場合、エコシステム全体の 1% 未満) でコンセンサス ノードの過半数を取得するだけで、そのチェーンを破り、波及効果を引き起こす可能性があるためです。他のチェーンのアプリケーションに大きなダメージを与えます。
シャーディングは、3 つすべてを実現する手法です。シャードされたブロックチェーンは次のとおりです。
投稿の残りの部分では、シャードされたブロックチェーンがこれをどのように行うかについて説明します.
理解するのが最も簡単なシャーディングは、ランダム サンプリングによるシャーディングです。ランダム サンプリングによるシャーディングは、Ethereum エコシステムで構築しているシャーディングの形式よりも信頼性が低くなりますが、より単純なテクノロジを使用します。
コアとなるアイデアは次のとおりです。多数 (例: 10000) のバリデーターを持つプルーフ オブ ステーク チェーンがあり、検証が必要な多数 (例: 100) のブロックがあるとします。次のブロック セットが到着する前に、これらすべてのブロックを検証できるほど強力なコンピューターは 1 台もありません。
したがって、私たちが行うことは、検証を行う作業をランダムに分割することです。バリデーターリストをランダムにシャッフルし、シャッフルされたリストの最初の 100 個のバリデーターを最初のブロックの検証に割り当て、シャッフルされたリストの 2 番目の 100 個のバリデーターを 2 番目のブロックの検証に割り当てます。ブロックを検証する (または他のタスクを実行する) ことを委員会と呼びます。
バリデーターがブロックを検証すると、検証したことを証明する署名を発行します。他のすべての人は、100 個のブロック全体を検証する代わりに、10000 個の署名のみを検証するようになりました。特にBLS 署名の集約を使用すると、作業量が大幅に減少します。すべてのブロックが同じ P2P ネットワークを介してブロードキャストされるのではなく、各ブロックが異なるサブネットワークでブロードキャストされ、ノードは、担当する (または他の理由で関心がある) ブロックに対応するサブネットに参加するだけで済みます。
各ノードの計算能力が 2 倍になるとどうなるかを考えてみましょう。各ノードは 2 倍以上の署名を安全に検証できるようになったため、ステーキング デポジットの最小サイズを削減して 2 倍以上のバリデーターをサポートできるため、100 ではなく 200 の委員会を作成できます。
したがって、1 スロットあたり 100 ではなく 200 ブロックを検証できます。さらに、個々のブロックは 2 倍大きくなる可能性があります。したがって、サイズが 2 倍のブロックが 2 倍になり、チェーン容量が全体で 4 倍になります。
何が起こっているのかについて話すために、いくつかの数学用語を紹介できます。 Big O表記を使用して、「 O(C) 」を使用して、単一ノードの計算能力を表します。従来のブロックチェーンは、サイズO(C)のブロックを処理できます。上記のシャード チェーンは、 O(C)ブロックを並列に処理できます (各ブロックを間接的に検証するための各ノードのコストはO(1)であることに注意してください)。これは、各ノードが検証する必要があるのは固定数の署名のみであるためです)。 O(C)容量があるため、シャードチェーンの合計容量はO(C2)です。これが、このタイプのシャーディングを二次シャーディングと呼ぶ理由であり、この効果が、長期的にはシャーディングがブロックチェーンをスケーリングする最良の方法であると考える主な理由です。
主な違いは 2 つあります。
これらの両方の違いにより、シャーディングは、マルチチェーン エコシステムでは基本的に行われない方法で、シングル チェーン環境の主要な安全特性を保持するアプリケーションの環境を確実に作成します。
ビットコインのサークルで共通して控えていることの 1 つは、私が完全に同意することですが、ビットコイン (またはイーサリアム) のようなブロックチェーンは、正直な多数決の仮定に完全に依存しているわけではないということです。このようなブロックチェーンに 51% の攻撃があった場合、攻撃者はトランザクションの取り消しや検閲などの厄介なことを行うことができますが、無効なトランザクションを挿入することはできません。また、トランザクションを元に戻したり検閲したりしても、通常のノードを実行しているユーザーはその動作を簡単に検出できるため、コミュニティが調整して、攻撃者の力を奪うフォークで攻撃を解決したい場合は、すぐに実行できます.
この追加のセキュリティの欠如は、より集中化された高 TPS チェーンの主な弱点です。そのようなチェーンには、通常のユーザーがノードを実行するという文化がありませんし、持つこともできません。そのため、主要なノードとエコシステムのプレーヤーは、はるかに簡単に集まり、コミュニティが非常に嫌うプロトコルの変更を課すことができます。さらに悪いことに、ユーザーのノードはデフォルトでそれを受け入れます。しばらくすると、ユーザーは気付くだろうが、それまでに強制的なプロトコル変更は既成事実となるだろう: 変更を拒否する調整の負担はユーザーにあり、彼らは 1 日分以上のプロトコルを元に戻すという苦渋の決断をしなければならないだろう.誰もが思っていた活動はすでに確定しています。
理想的には、有効性に対する 51% の信頼の仮定を回避し、従来のブロックチェーンが完全な検証から得られる強力なセキュリティの防波堤を維持するシャーディングの形式が必要です。そして、これはまさに、過去数年間の私たちの研究の多くが行ってきたことです.
51% の攻撃耐性を持つスケーラブルな検証の問題は、次の 2 つのケースに分けることができます。
計算の検証: 計算へのすべての入力を所有していると仮定して、一部の計算が正しく行われたことを確認します。
データの可用性の検証: 計算自体への入力が、本当に必要な場合にダウンロードできる何らかの形式で保存されていることを確認します。このチェックは、入力全体自体を実際にダウンロードせずに実行する必要があります (データが大きすぎてブロックごとにダウンロードできない可能性があるため)。
ブロックチェーン内のブロックの検証には、計算とデータの可用性チェックの両方が含まれます。ブロック内のトランザクションが有効であること、およびブロック内で要求された新しい状態のルート ハッシュがそれらのトランザクションを実行した正しい結果であることを確信する必要がありますが、そのデータをダウンロードするユーザーが状態を計算し、ブロックチェーンの処理を続行できるように、ブロックからの十分なデータが実際に公開されたことを確信する必要があります。この 2 番目の部分は、 データ可用性の問題と呼ばれる非常に微妙ですが重要な概念です。これについては後で詳しく説明します。
計算をスケーラブルに検証することは比較的簡単です。テクニックには、詐欺証明とZK-SNARKの 2 つのファミリーがあります。
この 2 つのテクノロジは、次のように簡単に説明できます。
X
で計算C
を行うと出力Y
が得られることを保証します」という形式のメッセージに署名するように要求します。デフォルトではこれらのメッセージを信頼しますが、ステークされたデポジットを持つ他の誰かが挑戦する機会を残します (「同意しません。出力は Z です」という署名付きのメッセージ)。課題がある場合にのみ、すべてのノードが計算を実行します。どちらが間違っていたとしても、預金を失い、その計算の結果に依存するすべての計算が再計算されます。X
に対して計算C
を実行すると、出力Y
が得られる」という主張を直接証明する暗号証明の形式です。証明は暗号的に「健全」ですC(x)
がY
と等しくない場合、有効な証明を行うことは計算上不可能です。 C
の実行自体に膨大な時間がかかる場合でも、証明は迅速に検証できます。 ZK-SNARK の数学的な詳細については、この投稿を参照してください。
「通常のケースでは」、複雑な計算の実行を単一の署名の検証に置き換えるため、不正証明に基づく計算はスケーラブルです。チャレンジがあるためにオンチェーンで計算を検証する必要がある例外的なケースがありますが、それをトリガーするのは非常に高価であるため、例外的なケースは非常にまれです (元のクレーム者またはチャレンジャーのいずれかが多額の預金を失います)。 ZK-SNARK は概念的に単純です - 計算をはるかに安価な証明検証に置き換えるだけです - しかし、それらがどのように機能するかの背後にある数学はかなり複雑です。
すべてのノードがすべてのデータを検証する必要がある一方で、計算をスケーラブルに検証するだけのセミスケーラブルなシステムのクラスがあります。これは、一連の圧縮トリックを使用してほとんどのデータを計算に置き換えることで、非常に効果的にすることができます。これはロールアップの領域です。
データの可用性を検証するために不正防止を使用することはできません。計算の不正証明は、元のクレームが提出された瞬間に計算への入力がチェーン上で公開されるという事実に依存しているため、誰かがチャレンジした場合、チャレンジの実行は元の実行とまったく同じ「環境」で行われます。ハプニング。データの可用性をチェックする場合、これを行うことはできません。問題は、チェックするデータが多すぎてチェーン上で公開できないという事実にあるからです。したがって、データの可用性のための詐欺防止スキームは、重要な問題に直面します: 誰かが公開せずに「データ X は利用可能である」と主張し、チャレンジを受けるのを待ち、その後で初めてデータ X を公開し、チャレンジャーを他のユーザーに見せることができます。ネットワークが正しくありません。
これは、漁師のジレンマで拡張されます。
核となるアイデアは、V1 が邪悪な発行者で V2 が正直な挑戦者である 2 つの「世界」と、V1 が正直な発行者で V2 が邪悪な挑戦者である 2 つの「世界」は、ダウンロードしようとしていない人には区別できないということです。その時点での特定のデータ。そしてもちろん、スケーラブルな分散型ブロックチェーンでは、個々のノードはデータのごく一部をダウンロードすることしか期待できないため、意見の相違があったという単なる事実を除いて、何が起こったのかを知ることができるのはごく一部のノードだけです。
誰が正しくて誰が間違っていたのかを区別することが不可能であるという事実は、データの可用性のために有効な詐欺防止スキームを持つことを不可能にします。
残念ながら、ブロックチェーンが正しく動作していることを保証するには、正当性だけでは十分ではありません。これは、ブロックチェーンが有効であるが、すべてのデータが利用できない場合、ユーザーは将来のブロックが有効であるという証明を生成するために必要なデータを更新する方法がないためです。有効だが利用できないブロックを生成した攻撃者は、その後姿を消し、チェーンを効果的に停止させることができます。ユーザーが身代金を支払うまで、誰かが特定のユーザーのアカウント データを差し控えることもできるため、この問題は純粋に生存の問題ではありません。
この問題が根本的なものであるという強力な情報理論的議論がいくつかあり、それを回避できる巧妙なトリック (たとえば、暗号化アキュムレータを含む) はありません。詳細はこちらの論文をご覧ください。
その鍵となるのは、データ可用性サンプリングと呼ばれるテクノロジーです。データ可用性のサンプリングは次のように機能します。
消去コードは、「100% の可用性を確認する」(データのすべての部分が利用可能である) 問題を「50% の可用性を確認する」(断片の少なくとも半分が利用可能である) 問題に変換します。ランダム サンプリングは、50% の可用性の問題を解決します。利用可能なデータが 50% 未満の場合、少なくとも 1 つのチェックがほぼ確実に失敗し、データの少なくとも 50% が利用可能である場合、一部のノードがブロックを利用可能として認識できない場合があります。ブロックの残りの 50% を取り戻すために消去コード再構築手順を実行するのは 1 つの正直なノードのみです。したがって、1 MB ブロックの可用性を確認するために 1 MB をダウンロードする必要はなく、数キロバイトをダウンロードするだけで済みます。これにより、すべてのブロックでデータの可用性チェックを実行できます。このチェックをピアツーピア サブネットで効率的に実装する方法については、この投稿を参照してください。
ZK-SNARK を使用して、データの一部のイレイジャー コーディングが正しく行われたことを確認できます。次に、Merkle ブランチを使用して個々のチャンクを確認できます。または、多項式コミットメント(例:ケイト (別名 KZG) コミットメント) を使用することもできます。これは基本的にイレイジャー コーディングを行い、個々の要素の証明と正確性の検証をすべて 1 つの単純なコンポーネントで行います。これが Ethereum シャーディングで使用されているものです。
100 個のブロックがあり、委員会に頼らずにすべてのブロックの正確性を効率的に検証したいとします。次のことを行う必要があります。
各クライアントは、各ブロックでデータ可用性サンプリングを実行し、各ブロックのデータが使用可能であることを確認しますが、ブロック全体のサイズがメガバイト以上であっても、ブロックごとに数キロバイトしかダウンロードしません。クライアントは、可用性の課題のすべてのデータが正しく応答された場合にのみ、ブロックを受け入れます。
データの可用性を検証したので、正確性を検証しやすくなります。次の 2 つの手法があります。
上記のいずれの場合でも、ブロックの大きさに関係なく、各クライアントはブロックごとに少量の検証作業を行うだけで済みます。不正防止の場合、チェーン上でブロックを完全に検証する必要がある場合がありますが、1 つのチャレンジをトリガーするだけでも非常にコストがかかるため、これは非常にまれです。
それだけです。イーサリアムのシャーディングの場合、当面の計画は、シャードされたブロックをデータのみにすることです。つまり、シャードは純粋に「データ可用性エンジン」であり、レイヤー 2 ロールアップの仕事は、その安全なデータ スペースに加えて、詐欺防止または ZK-SNARK のいずれかを使用して、高スループットの安全なトランザクション処理機能を実装することです。ただし、このような組み込みシステムを作成して、「ネイティブ」な高スループット実行を追加することは完全に可能です。
シャーディングの主な目標は、従来の (シャーディングされていない) ブロックチェーンの最も重要なセキュリティ プロパティの複製に可能な限り近づくことですが、各ノードが各トランザクションを個人的に検証する必要はありません。
シャーディングはかなり近いものです。従来のブロックチェーンでは:
高度なセキュリティ機能を備えたシャード ブロックチェーン:
次のいずれかの理由で、無効なブロックを通過できません。
次の理由により、使用できないブロックを通過できません。
シャーディングのない従来の高 TPS チェーンには、これらの保証を提供する方法がありません。マルチチェーン エコシステムには、攻撃者が攻撃のために 1 つのチェーンを選択して簡単に乗っ取るという問題を回避する方法がありません (チェーンはセキュリティを共有できますが、これが不十分に行われると、事実上の伝統的な高 TPS チェーンに変わります)。これにはすべての欠点があり、うまく実行されたとしても、上記のシャーディング手法のより複雑な実装になります)。
サイドチェーンは実装に大きく依存しますが、通常、従来の高 TPS チェーンの弱点 (マイナー/バリデーターを共有する場合)、またはマルチチェーン エコシステムの弱点 (マイナー/バリデーターを共有しない場合) のいずれかに対して脆弱です。 )。シャード チェーンは、これらの問題を回避します。
ただし、シャード システムのアーマーにはいくつかの隙間があります。特に:
これらは妥当な懸念ですが、私たちの見解では、集中化されたレイヤー 2 サービスを介する代わりに、より多くのアプリケーションをオンチェーンで実行できるようにすることで可能になる、ユーザーレベルの集中化の減少がそれらをはるかに上回っています。とはいえ、これらの懸念、特に最後の 2 つは、実際には、シャード チェーンのスループットを特定のポイントを超えて増加させる上での実際の制約となっています。二次シャーディングの二次性には限界があります。
ちなみに、スループットが高くなりすぎた場合のシャードブロックチェーンの安全性リスクの増大も、超二次シャーディングに拡張する取り組みがほとんど放棄された主な理由です。 2次シャーディングを2次のままにしておくことが、本当に幸せな媒体であるように見えます。
頻繁に提案されるシャーディングの代替案の 1 つは、中央集権型の高 TPS チェーンのように構造化されたチェーンを持つことです。ただし、有効性と可用性の検証を可能にするためにデータ可用性サンプリングとシャーディングを使用する点が異なります。
これは、現在存在する集中型の高 TPS チェーンを改善しますが、それでもシャード システムよりもかなり弱いです。これにはいくつかの理由があります。
適切にシャーディングされたシステムは、ベース レイヤーとして優れています。シャード化された基本レイヤーがあれば、ロールアップとして構築することにより、その上にレイヤー化された中央生産システムをいつでも作成できます (たとえば、 defiの同期コンポーザビリティを備えた高スループット ドメインが必要なため)。しかし、集中型のブロック生成に依存する基本レイヤーがある場合、その上にさらに分散型のレイヤー 2 を構築することはできません。
こちらにも公開されています。