ブロック構築は、さまざまな可動部分で構成される Ethereum のライフサイクルの重要な側面です。ブロックに含まれるトランザクションとその順序を決定し、ネットワークの効率、分散化、公平性に直接影響します。時間の経過とともに、Ethereum のブロック生成プロセスは進化してきました。特に、MEV の役割が拡大し、バリデーター主導の選択から専門ビルダーへの移行が進みました。
この投稿では、Proposer Builder Separation の導入と今後の研究とともに、Ethereum ブロック構築がどのように進化してきたかについて説明します。
Ethereum は時間を個別の単位に整理します。
各エポックの終わりに、バリデータの役割はシャッフルされ、分散化とセキュリティが確保されます。Ethereum は2 エポック (約 12.8 分)後に経済的に最終決定し、その後はブロックを元に戻すことはほぼ不可能になります。
Ethereumのネットワークには膨大な数のバリデーターが存在します。執筆時点では、 beaconcha.inによるとアクティブなバリデーターは 1,051,349 です。これだけの数のバリデーターが 12 秒ごとに各ブロックを検証しなければならないとしたら、それは不可能です。そのため、バリデーターは委員会に分割され、トランザクションを効率的に検証し、ブロックの有効性を保証します。
各委員会:
委員会の規模は、ネットワーク内のアクティブなバリデーターの総数によって異なりますが、通常、各委員会には少なくとも 128 人のバリデーターがいます。
各スロット:
たとえば、スロットごとにN
の委員会が割り当てられ、各委員会にM
バリデーター ( M
>128) がいるとします。つまり、各スロットにNxM
証明があることになります。ご存じのとおり、ネットワークがこれほど多くの証明をゴシップすると、すぐに手に負えなくなる可能性があります。
各委員会のアグリゲータは、それぞれの委員会の証明書を集約する役割を担っています。つまり、 M
のバリデーターの委員会のうち、最終的なAggregated Attestation
M
ではなく 1 個だけになります。
したがって、各スロットでは、最終的にN
個の証明 (そのスロットの各委員会に 1 つ) がグローバル トピックにゴシップされます。次のスロットの提案者は、これらのN
の証明を取得します。
留意すべき点
エポック中、すべてのアクティブなバリデータは 1 つの委員会のメンバーであるため、すべてのエポックの委員会は分離されています。
プロトコルは、アクティブなバリデーターの数に応じて、各エポックの委員会の総数を調整します。
現在の設計では、スロットごとに64
委員会、つまりN=64
になります。
ビーコン チェーンのシャッフルは、シャッフルとスロットによって指示された証明のために、バリデーターの今後の委員会割り当てについて、最低1 エポック (32 スロット)先読みを提供するように設計されています。この先読みは提案には適用されないことに注意してください。提案は、問題のエポック中に確認する必要があります。
get_committee_assignment
各エポックの開始時に呼び出され、次のエポック ( current_epoch + 1
) の割り当てを取得できます。これにより、バリデーターはサブネット ID を計算し、それぞれの委員会に参加し、職務に備えることもできます。
さらに、バリデーターは特定の委員会のAggregator
として割り当てられる場合があります。その場合、バリデーターもそれぞれのトピックをサブスクライブする必要があります。
各スロット内では、それぞれの委員会から 1 人のバリデータが提案者として選択され、ブロックを作成して送信します。
提案者の役割は、次の点で非常に重要です。
SignedBeaconBlock
に署名し、ネットワークにブロードキャストします。MEV は、ブロック内のトランザクションを並べ替え、含める、または検閲することによってバリデーター (旧マイナー) が抽出する追加利益です。
一般的な MEV 戦略は次のとおりです。
Ethereum が PBS に移行する前は、提案者 (以前の PoW のマイナー) がトランザクションの順序を完全に制御していました。これにより、MEV がバリデーターによって直接抽出されるか、専門の検索者にアウトソーシングされるエコシステムが構築されました。
priority_fee
と呼ばれるものによって順序付けできます。また、バリデーターがより多くの収益を得る方法 (サンドイッチ/フロントランニングを通じて) で順序付けすることもできます。これは単純化するために多少抽象化されていますが、これが一般的な流れです。これはバニラブロックビルディングと呼ぶことができます
バリデーターによるブロック構築の集中化リスクと非効率性に対処するために、提案者とビルダーの分離 (PBS)が導入されました。PBS は、ブロック生成の責任を 2 つの別個のエンティティに分割します。
サーチャー→ メモリプールを継続的にスキャンして MEV の機会を見つける外部エンティティです (詳細は後述)。サーチャーはそれぞれのトランザクションを取得し、利益を上げるために必要に応じて独自のトランザクションを挿入します。次に、これらのトランザクションのバンドルを作成します。サーチャーが利益を上げるためには、バンドルの順序が全体にわたって維持される必要があります。バンドルは順序付けされたトランザクションであり、アトミックに実行する必要があります。このバンドルとともに、バンドルの最後にビルダーへの「賄賂」を示すトランザクションを追加する場合があります。このバンドルは、 eth_sendBundle
呼び出しを通じてビルダーに送信されます。
注: 検索者は外部エンティティであり、トランザクションの順序付けに影響を与えますが、ブロックの検証やコンセンサスの決定には参加しません。
ビルダー→次のエンティティは、実際にブロックを構築するビルダーです。ビルダーは、手数料収入と MEV 収入の両方を最大化しようとします。ビルダーは、サーチャーが送信したバンドルされたトランザクションを(できれば順番に)含め、サーチャーが送信した支払い(賄賂)を受け取ります。ビルダーは、受信したトランザクションを使用して実行ペイロードを構築します。
ブロックに次の内容を入力します。
捜索者から送られたバンドル。
優先度の高いトランザクション。
収益を最大化することを念頭に置いて一般的な取引を注文します。
また、フィールドfeeRecipient
を自分のアドレスに設定し、サーチャーの賄賂と、送信したブロック内のトランザクションからのすべての手数料の両方を受け取ることを示します。ビルダーは、ブロックの最後にトランザクションを送信します。これは、サーチャーがビルダーに対して行ったのと同様に、提案者への賄賂として機能します。
注: ビルダーは外部エンティティであり、ブロックチェーンと直接やり取りしません。
まとめると
ブロック ペイロードを受信すると、提案者がブロックをアンラップし、トランザクションを挿入し、順序を自分の好みに変更し、 feeRecipient
を自分のアドレスに設定する可能性は十分にあります。これは、これまでブロック構築プロセスに取り組んだすべてのエンティティ (検索者 → ビルダー → リレー) が不正行為をしたり、「MEV 窃盗」を行ったりすることを意味します。これを防ぐために、リレーは選択されたブロック ペイロードのヘッダーのみを送信します。これは、提案者がeth_getPaylaodHeader
呼び出しを行うときに発生します。リレーは、ボディのハッシュ、入札、ビルダーの署名を含むPayloadHeader
を送信します。
この時点で提案者には次の 2 つの選択肢があります。
リレーによって提供されるPayloadHeader
( Blinded Blockとも呼ばれる) を選択します。その場合、提案者はヘッダーを自分のキーで署名し、それをリレーに送り返して、 eth_returnSignedHeader
呼び出しを使用してPayloadBody
要求する必要があります。次に、リレーはeth_sendPayload
呼び出しを実行し、 ExecutionPayload
全体を提案者に返します。次に、提案者はこのブロックを Ethereum Validator ネットワーク、より具体的には割り当てられた委員会に提案します。
プロポーザーはリレーから送信されたPayloadHeader
を受け入れないことを選択できます。その場合、プロポーザー自身でブロックを構築する必要があります。これには、MEV の機会を見つけて、それに応じてトランザクションを順序付ける作業が含まれます。もちろん、この場合、プロポーザーは手数料 + MEV からの収益をすべて保持できます。ただし、これは見た目ほど簡単ではありません。MEV を見つけて収益を最適化することは、かなり計算量の多いタスクであり、プロポーザーが時間内にブロックを構築できない可能性があり (12 秒)、スロットが失われます。このシナリオでは、プロポーザーはネットワークから排除される可能性があります。
まさにこの理由から、提案者はPayloadHeader
に署名する必要があります。ヘッダーを送信する前に、リレーはPayloadBody
を保管のためにEscrow
に送信します。リレーは提案者から署名されたPayloadHeader
を受信すると、署名を検証し、エスクローに保存されているPayloadBody
提案者に送信します。ここで、提案者がこのブロックを含めないとします。提案者は、これまでの順序を無視して独自のブロックを構築します。この場合、ヘッダーが変更されているため、署名は一致しません。
注意:同じ提案スロットに 2 つの異なるヘッダーを署名することは、スラッシュ可能な違反です。
ビルダーはこれらの競合する署名済みヘッダーをネットワークにブロードキャストできるようになり、プロポーザーはネットワークから排除される可能性があります。
まあ、何もありません。ビルダーが取引を検閲する最も一般的な理由は、取引がOFAC アドレスとやり取りするためです。簡単に言えば、OFAC アドレスは、法的影響を及ぼす可能性のある取引をやり取りしており、当然ながら誰もそれを望まないでしょう。
Censorship.picsによると、ビルダーによって構築されたブロックには、OFAC 認可取引が 0 ~ 7% しか含まれません。
この記事の執筆時点で、トランザクション検閲に対する最もよく知られたソリューションの 1 つは、 Inclusion Lists
です。
インクルージョン リストは、スロット N のブロックを提案する際にスロット N の提案者によって投稿されるトランザクションのリストです (サマリーと呼ばれるものも含む)。
包含リストは、リスト内のトランザクションがブロック N またはブロック N+1 のいずれかに含まれる必要があることを強制します。そうでない場合、N+1 ブロックは無効になります。これらは、前方包含リストと呼ばれます。
注: 現在のブロック N 自体に対して IL を実行するスポット包含リストの概念もあります。ただし、この設計には経済的な欠陥があり、フォワード包含リストにつながりました。
もちろん、この IL の設計では 100% の検閲耐性は実現できませんが、これらの提案を強化するための活発な研究が進行中であり、インセンティブ構造を改善するために適用できる多くの優れた最適化が行われています。
Fork Choice 強制包含リスト (FOCIL) は、 2024 年に提案された新しい設計であり、包含リストを構築および改善して、信頼できる中立性を高めます。
FOCIL では、複数のバリデータが特定のスロットの包含リストに関する提案を行うことができます。より正確には、各スロットで 16 のバリデータがランダムに選択され、包含リスト委員会を形成します。これらのメンバーはそれぞれ独自のローカル IL を形成し、それをネットワークに伝えます。提案者は、利用可能なローカル包含リストを収集して最終的な IL に集約します。これらのトランザクションを含めるためにブロックを再構築する必要がないため、IL 設計は軽量です。ブロックに追加するだけで済みます。ブロックが IL 検証要件を満たすための条件は、 「ブロックがいっぱいになるまで、すべての IL のすべてのトランザクションが含まれている場合、ブロックは有効です。」です。
注: IL トランザクションは任意の順序で含められる可能性があるため、IL 委員会のメンバーはトランザクションの順序付けを保証することはできません。トランザクションの含められることのみを保証します。
イーサリアムのブロック構築オークションで誰が勝つのか、そしてその理由は?