ポピュラーサイエンス: イーサリアム 2.0 ビーコンチェーンの状態遷移
編集者注: この記事は以下から引用しましたイーサリアム愛好家 (ID: ethfans)編集者注: この記事は以下から引用しました
イーサリアム愛好家 (ID: ethfans)
、著者: Sly Gryphon、翻訳者および校正者: IAN LIU & A Jian、許可を得て Odaily によって複製されました。
ビーコン チェーンはブロックと進行状態で構成されます。ブロックは生成、署名され、ネットワーク全体に伝播され、状態の更新に使用されます。次の図は、主な相互関係を示しています。
画像の説明
・実線は集約関係を示し、破線は依存関係を示します。つまり、矢印を発する部分は、矢印が指すものに基づいて集約/依存します -
この図は、Ethereum 2.0 仕様のバージョン 0.10.1 に基づいています。新しくリリースされたバージョン 0.11.0 と比較すると、上図に記載されている内容はドメインの計算の部分が若干異なりますが、全体的な関係は以前のバージョンと一致しています。
新しいブロックを作成する
ブロックを作成するには、現在のブロックチェーンの先頭から開始します。
現在、短いフォーク チェーンがある場合 (たとえば、ブロックの伝播速度が遅すぎるためにタイムスロットがスキップされ、その結果、異なるバリデーターによって取得された最新のブロックに差異が生じます)、フォーク選択アルゴリズムは、「最も適切」(取得された検証者の証人メッセージの重みが大きいほど、より「適切」)とブロックチェーンヘッドが判断します。
また、一部のスロットがスキップされた (ブロックが生成されなかった) 場合でも、状態は依然として進んでいます (ただし、何も行われません)。
BeaconBlockBody (「ビーコン チェーン ブロック本体」) には、実行する必要があるすべての操作 (保証金の預け入れ、認証メッセージ、バリデーターの終了など) が含まれます。これらの操作は、状態を変更し、新しい BeaconState (「ビーコン チェーン状態」) を生成するために使用されます。
タイムスロット、親ブロックルート、オペレーションのルートハッシュ(ボディルート、ブロックボディルート)が、BeaconBlockHeader(「ビーコンチェーンブロックヘッダー」)の構成要素として状態に追加されます。 BeaconBlockHeader の構成要素の 1 つの状態ルートはゼロ (0x000...) であることに注意してください。これは、状態に独自のハッシュを再帰的に含めることができず、そうでない場合は無限ループが発生するためです。
最終状態 (上記の 0x000... 値を持つ状態) のルート ハッシュが計算されてブロックに追加され、ブロック ハッシュはブロック ルート (「ブロック ルート」) を取得し、それをドメインと組み合わせます。ネットワーク内に広がるチェーン。ドメインの意味は、ブロックが衝突によって他のメインネットやテストネットに伝播するのを防ぐことです。
実行状態遷移
ノードが SignedBeaconBlock (「署名付きビーコン チェーン ブロック」) を受信した後、署名の有効性の確認、親ブロックに対応する状態があるかどうか (親ブロックは、親根「親ブロック」)根塊茎」を指します)。
BeaconBlockHeader*
状態スロットをブロックのスロット (スキップされたスロットの場合もあります) に進め、BeaconBlockBody に含まれる操作 (デポジットのデポジット、監視メッセージ、バリデーターの終了など) を実行することで、状態を更新できます。
スキップされたタイムスロットが発生すると、新しい内部状態も生成され、現在の状態が次のタイムスロットに進みますが、他の付随的な実行アクションが発生しない点に注意してください。
結果の状態は、ブロックプロデューサーによって取得された状態と同じである必要があるため、新しい BeaconState (0x000... を含む) のハッシュ値を計算することで、受信したブロックに記録された状態ルートでそれを検証できます。
ビーコン チェーンの状態には、ブロックの 4 つの基本コンポーネントのうちの 3 つ、タイム スロット、親ブロックのルート ハッシュ、および BeaconBlockBody のルート ハッシュ (つまり、実行される操作) が含まれます。
内部状態を計算する場合、最新のブロック タイム スロットは最新の状態のタイム スロットと異なっていなければなりません。スキップされたタイム スロットがあると、最新のブロック タイム スロットと状態のタイム スロットが不一致になるためです。たとえば、スロット 7 がスキップされた場合、スロット 6 が最新のブロックとして残り、親ブロック ルートとブロック本体のルート ハッシュは両方ともスロット 6 のブロックを指します。
これらの要素は、BeaconBlockHeader と同じ構造を使用してクラスターとして機能しますが、状態には独自のハッシュを再帰的に含めることができないため、使用されるブロック ルート状態は常にゼロ (0x000...) です (図では「BeaconBlockHeader」として表されています)。
この利点は、状態のルート ハッシュを計算し、ブロック ヘッダーのコピーを作成して正しいルート状態を挿入し、最後にブロック全体のハッシュを計算することによって、ブロック ルートの状態を簡単に計算できることです。ヘッダー (この値は受信したブロックのハッシュと同じになります)。
リンクされたブロックは信頼を高めます
ブロックチェーンの重要な特徴は、個人 (取引相手または第三者) 間の元の信頼を体系的な信頼 (プロセッサの大部分がアルゴリズムを通じて到達) に置き換えることです。
体系的な信頼は、次の特性によって説明できます。
多数のプロセッサ (パブリック チェーンなど) - これらのプロセッサが分散化されているほど、信頼性が高くなります。
クライアントの多様性 (開発チームなど) - 選択できるクライアントが複数ある場合、アルゴリズムの集中管理を避けることができます。
オープンソース - アルゴリズムの公開検査とフォーク (多数派がシステムの方向を変更したい場合) の両方を許可します。
ブロックをリンクすると、システムの信頼性も高まります。ブロックが早く生成されるほど、その重みが大きくなるからです。一般的な分散台帳/分散データベースでは、体系的な信頼が必要ないため、そのようなリンクは必要ありません。
最新のブロックのみに対する 51% 攻撃は成功する可能性がありますが、100 スロット前のブロックを変更したい場合、攻撃者はその 100 スロット中に超多数を制御するプロセッサを備えている必要があります (非常に困難です)。


