
原題:「Epochs, Slots and Beacon Blocks》
著者: パトリック・マッコーリー
原題:「
著者: パトリック・マッコーリー
原文翻訳: John、ECN
Proof-of-Stake を使用するイーサリアムの独自性は、参加者数を最大化する設計にあります。これにより、何百、何千ものバリデーターが意思決定プロセスに積極的に参加できるようになります。この記事の執筆時点では、(プロトコルの観点から) 約 50 万のバリデーター エンティティがこのプロセスに積極的に参加しています。
実際、約 384 秒 (6 分 24 秒) 以内に、すべてのアクティブなバリデーターが投票するかブロックを提案する機会を得ることができます。約 384 秒間に少なくとも 500,000 のメッセージがブロードキャストされ、すべてのメッセージは厳密な時間枠内に配信される必要があります。私の知る限り、これほどアクティブで大規模なコンセンサス参加者を処理するように設計されたコンセンサス プロトコルは他にありません。
通信モデルに関する限り、コンセンサス プロトコルは (通常は) 次の 3 つの状況のいずれかに合わせて設計されています。
同期通信 A は一般的に合意されており、既知のメッセージ配信タイムアウトです。
非同期通信メッセージの配信にかかる時間に上限はありませんが、最終的には送信されます。
部分同期通信には、ほとんどの場合、既知のタイムアウトがありますが、散発的なイベントにより、さまざまな時間にわたってメッセージ配信が中断される可能性があります。
最新のコンセンサス プロトコルのほとんどは部分同期通信用に設計されており、ほとんどの場合条件が良好であることを前提としていますが、イベントによって短期間通信が中断される可能性があるため、予測できない期間が存在します。一方、プルーフ・オブ・ステーク・イーサリアムは同期通信用に設計されていることは注目に値します。
余談 -- Casper FFG は部分同期通信用に設計されていますが、LMD-GHOST の厳密なタイミング条件により、システム全体が同期する必要があります。 Casper と LMD-GHOST については、今後の記事で説明します。
同期通信モデルをより深く理解するために、エポックとスロットのトピックを取り上げます。これは、バリデーターが参加できる時期と、メッセージ配信に関する厳密な時間枠を定義します。何らかの理由でタイム ウィンドウに違反した場合、他のバリデーターが遅延メッセージの到着に対して動作するという保証はありません。最後に、バリデーターがタイムスロットに割り当てられる方法と、メッセージがビーコン ブロックチェーンに記録される方法について説明します。
さまざまな通信設定について詳しく知りたい場合は、この記事を読むことをお勧めします。ここでは、ETH 2 が部分同期なのか同期なのかについても大きな議論が行われています。
エポックとスロット
イーサリアム POS の動作原理の解釈: エポック、スロット、ビーコン ブロック
エポックごとに 32 のスロットがあり、各バリデータにはエポックごとに 1 つのスロットが正確に割り当てられます。スロットは、バリデーターがプルーフ・オブ・ステーク・プロトコルに参加して、新しいビーコン・ブロックを提案または投票できる 12 秒の時間枠です。
スロットはエポックごとにグループ化されており、エポックとスロットは検証者がプルーフ・オブ・ステーク・プロトコルに参加するためのスケジュールの役割を果たします。
エポック 32 スロットを含む期間。
スロット バリデータ委員会がタスクを完了する 12 秒のウィンドウ。
エポックはプルーフ・オブ・ステーク・プロトコルの完全なラウンドを表し、スロットはバリデーターにラウンドに参加する機会を提供します。エポックの終わりに、すべてのアクティブなバリデーターに参加する機会があります。
スロット委員会 バリデーターはエポック内の 1 つのスロットにのみ割り当てられ、すべてのバリデーターが各スロットに均等に分散されて委員会を形成します。
スロットには 2 つの役割があります。
ブロック提案者 バリデータには、委員会メンバーにブロックを提案する機会があります。
エポックごとに 32 のブロック プロポーザー (スロットごとに 1 つ) があり、すべてのバリデーターはプルーフ オブ ステーク プロトコルに参加して、正規のビーコン チェーンであるべきだと信じるチェーン リーダーに投票する機会を持ちます。
イーサリアム POS の動作原理の解釈: エポック、スロット、ビーコン ブロック
スロットは、バリデーターがブロックを提案し、委員会メンバーがブロックに投票し、最終的にそのスロット内のすべてのアクティビティを次のスロットのブロック提案者にブロードキャストするための厳密な時間枠を表します。
スロットと時間条件 すべてのスロットは時間順に次々に生成されます。各スロットは 12 秒ごとに正確に割り当てられ、3 つのステージに分割されます。
ブロックの提案では、バリデーターがブロックを提案し、それを最初の 4 秒以内にすべての委員会メンバーにブロードキャストすることを指定します。
他のすべての委員会のメンバーは、投票サイクル内のブロックに投票 (証人) し、自分の投票は次の 4 秒以内にこのブロックに受け入れられると信じています。
ブロードキャスト投票 最後の 4 秒間のすべての委員会メンバーの投票が集約され、次のスロットのブロック提案者に送信されます。
提案されたブロックまたは証人が期限後に公開された場合、そのアクティビティが他のバリデーターによって承認されるという保証はありません。たとえば、スロットの監視者がすでにその親ブロックに投票している可能性があるため、遅いブロックがスキップされる場合があります。遅れた証人は 1 エポックで他の証人によって処理され、最大 32 スロット遅れて、さまざまな程度のペナルティが課せられます。 32 スロットを超えて公開された場合、バリデーターによって処理されません。
最後に注意していただきたいのですが、この厳密な時間枠により、バリデーターの実行に必要な帯域幅とコンピューティング能力の下限が保証されます。これは、バリデーターが時間通りに証人/ブロックを受信、処理、送信できなければならないためです。
最初のレベルのタイトル
バリデータ委員会の割り当て
エポック内のスロットにバリデーターを割り当てるプロセスを検討します。すべてのスロット委員会の規模はほぼ同じです。割り当てはランダム ビーコンの出力に基づいて行われ、2 エポック前に行われます。これには、シャッフル プロトコルと信号送信のランダム性ソースの使用が必要です。
シャッフル プロトコル すべてのバリデータは、スワップか非シャッフル プロトコルに従ってスロットに割り当てられます。シャッフル プロトコルの詳細には立ち入る代わりに、シャッフル プロトコルの実行方法の基礎となるランダムネス ビーコンの計算方法に焦点を当てます。
ランダム ビーコン すべてのバリデーターは、RANDAO と呼ばれるプロトコルを使用したランダム ビーコンを通じて割り当てられます。その目的は、新しいブロックが正規チェーンに追加されるときにランダム性を集約してランダムなビーコンを形成することです。
新しいブロックごとに、次の 2 つのフェーズがあります。
新しいビーコン ブロックを (ブロックごとに) 生成するために提案されたランダム性には、randao_reveal と呼ばれる特別な値が含まれます。これは、ブロックのランダム ビーコンとして機能するブロック提案者の BLS 署名です。検証者による改ざんを防ぐことは決定的ですが、予測できません。
ご覧のとおり、各ビーコン ブロックにはランダムネス ビーコンが含まれており、以前のすべてのブロックのランダム性を追加して集約します。
イーサリアム POS の動作原理の解釈: エポック、スロット、ビーコン ブロック
検証者は、N 番目のエポックの最後のランダム ビーコンまで、N+2 エポックのスロットに割り当てられます。
/* * ブロック プロポーザーは、現在のエポック番号に対して BLS 署名を実行します。 * このブロックのランダム ビーコンとして機能します。 * 非常に良い点は、署名が決定的である (検証者は改ざんできない) ことですが、署名が完了するまでは計算済み 出るまで予測不能 */
DOMAIN_RANDAO = 0x 02000000; // 署名に含まれるマジックナンバー epoch_hash = hash(current_epoch_number, DOMAIN_RANDAO); // 署名されるハッシュ コード randao_reveal = BLS.sign(epoch_hash, sk); // BLS 署名は RANDAO
/* * ブロックのランダム性を使用し、ハッシュ計算を実行し、収集されたランダム性にハッシュ コードを混ぜます */
previous_mix = get_previous_mix(parent_block); // 親ブロックからミックス(Mix) randao_reveal = new_block.randao_reveal; // 新しいブロックのrandaoを取得
mix =previous_mix XOR hash(randao_reveal); // 新しいミックスを計算 store_new_mix(new_block); // 新しい「ミックス」(ミックス)を新しいブロックに関連付ける
割り当ては 2 エポック前に行われ、すべてのバリデータは、最後に受け入れられたブロックから集計されたミックス値をランダム ビーコンとして使用し、それをシャッフル アルゴリズムで使用します。次の 2 つのエポックの検証委員会を計算します。
したがって、現在のエポックが N 番目であると考えると、このエポックの最後のビーコン ブロックがランダム ビーコンとして使用され、N+2 番目のエポックの委員会割り当てが決定されます。
バリデーターは、割り当てられたスロットを 2 エポック前に知っているため、割り当てられたスロットを検索するのに十分な時間があります。言い換えれば、将来の 64 スロットに対する検証者の割り当ては、すでに一般に知られています (約 2 エポック)。
ランダム ビーコンのバイアス能力は、シャッフル プロトコルで使用できるミックスは 1 つだけであり、それはエポック内で最後に受け入れられたブロックのミックス値です。
最後に受け入れられたブロックが、スロット 32 で提案されたブロックであるとは限りません。最後のスロットのブロック、つまりすべての検証者がブロックチェーンの先頭として認識したブロックです。たとえば、スロット 32 にブロックが提案されなかった場合 (または遅れた場合)、スロット 32 のバリデータ委員会は、スロット 31 に提案された前のブロックに投票します。
攻撃者はこれを悪用して、ランダムなビーコンにバイアスをかけることができます。攻撃者がスロット 32 のブロック提案者であると仮定します。彼は次のことを決定できます。
すべてのバリデーターに前のブロックへの投票を強制するブロックを一時停止することで、攻撃者のランダム性がビーコンに混入することはなくなります。
この意思決定能力により、攻撃者はランダムネス ビーコンに 1 バイトのバイアスを加え、最終的に 2 つのバリデータ割り当てのどちらが将来のエポックで使用されるかを決定することができます。実際、攻撃者がエポック内の最後の N ブロックのブロック提案者を制御している場合、攻撃者はこの機会を利用して、N ブロックの組み合わせを解放したり、解放を一時停止したりすることができます。現在、最後の N スロットのバイアス電力の全範囲と影響を理解するための厳密な研究が不足しています。
イーサリアム POS の動作原理の解釈: エポック、スロット、ビーコン ブロック
画像の説明
イーサリアム POS の動作原理の解釈: エポック、スロット、ビーコン ブロック
画像の説明
イーサリアム POS の動作原理の解釈: エポック、スロット、ビーコン ブロック
画像の説明
エポックおよびスロット組織バリデータは、単一の正規ビーコン ブロックチェーンを生成します。
スロット ≠ ビーコン ブロック ビーコン ブロックは、そのスロット番号 (エポック番号の倍数) のメタデータを記録します。これにより、他のバリデーターは、ブロック提案者が実際にこのスロットのブロックを提案するように指定されていること、およびこのブロックが提案されたブロックであることを確認できます。スロット番号が間違っている場合、ブロックは拒否されます。
重要なのは、ブロックチェーン内のブロックの位置が、そのブロックが提案されたスロット番号に対応していないということです。たとえば、スロット 5184157 をチェックすると、ブロック 16015362 が表示されます。割り当てられたスロットで提案されたブロックが他のすべてのブロックによって受け入れられるという保証がないため、この不一致は回避できません。バリデーターは投票し、イーサリアムは実行されています創業以来7年以上。
実行チェーン データ ブロック プロポーザーは 2 つのブロックを提案します。実行ブロックを提案し、ユーザーのトランザクションを順序付けて、新しく生成されたビーコン ブロックにそれを添付します。コンセンサス層の最終的な目的は施行層の正規チェーンを決定することであるため、これは驚くべきことではありません。
ブロック提案者は、情報をエグゼクティブ層からビーコン層に転送し、それをプルーフ・オブ・ステーク・プロトコルで使用できるようにする責任もあります。これも:
ETH 1 データ 実行層からの追加ブロックのブロック ハッシュ コード。
Deposit デポジット契約のアドレスと未記録のデポジットのチェーン。
これには、すべてのバリデーターがビーコン クライアントと強制クライアントを実行する必要があります。これが必要なのは、バリデーターが対応する ETH 1 ブロックをチェックし、施行層のルールに従ってその有効性を検証する必要があるためです。また、登録プロセスに関する記事で説明したように、デポジットは特定のブロック間隔内に実行層からビーコン ブロックに転送される必要があり、転送されない場合、ビーコン ブロックは拒否されます。
メタデータ スロット番号、エポック番号、ランダムネス ビーコン、ブロック プロポーザー
スラッシュされたイベントには、他のバリデーターによる悪意のある行為の証拠が含まれており、これを使用してバリデーターを罰することができます。
投票履歴 以前に提案されたビーコン ブロックに対するこのブロックチェーン フォーク上の未記録の投票のリスト
親ブロックを選択し、このブロックの拡張元となる正規チェーンを定義するブロックチェーン フォーク。
コピーを記録することで、誰もが契約全体を独立して確認でき、ビーコン チェーンの現在の状態が正しいことを確信できます。たとえば、悪意のある検証者は時間内に削除され、スロットとエポック スケジュールはすべての検証者によって承認され、ほとんどの検証者はこの方法で投票し、単一の正規チェーンを生成します。