アテステーション
最終編集者: @HiroyukiNaito(opens in a new tab), 2024年4月23日
バリデータは、各エポックにおいて、アテステーションを作成、署名し、ブロードキャストする必要があります。 このページでは、アテステーションがどのような内容を持つか、およびどのように処理され、コンセンサスを実現するクライアント間でどのようにやりとりされるかについての概要を説明します。
アテステーションとは何か?
バリデータは、 (6.4分) ごとに、ネットワークに対するアテステーションを提案します。 アテステーションは、当該エポックにおける特定のスロットのみを対象とします。 アテステーションとは、チェーンに対するバリデータの意見を支持する投票を行うことです。具体的には、最新の正当化されたブロックと、現在のエポックにおける最初のブロック(それぞれ、ソース
とターゲット
のチェックポイントと呼ぶ)を対象とします。 この情報は、参加するすべてのバリデータを対象として結合されるため、ネットワークがブロックチェーンの状態についてコンセンサスに達することが可能になります。
アテステーションには、以下の構成要素が含まれます:
aggregation_bits
:バリデータ委員会における当該バリデータのインデックスにポジションがマッピングされたバリデータのビットリスト。この値(0または1)は、当該バリデータが当該データ
を署名したか否か(つまり、当該バリデータがアクティブであり、ブロック提案者に同意するか否か)を示します。data
:当該アテステーションに関する詳細情報(以下の定義を参照)。signature
:個々のバリデータの署名を集約したBLS署名。
アテステーションを行うバリデータはまず、データ<./code>を構築する必要があります。 この<code>データ
には、以下の情報が含まれます:
slot
:当該のアテステーションが参照するスロット番号。index
:特定のスロットにおいて、当該バリデータが所属する委員会を特定する番号。beacon_block_root
:当該バリデータが、(フォーク選択アルゴリズムを適用した結果として)チェーンの先頭にあると認識するブロックのルートハッシュ。source
:ファイナリティ投票の一部であり、当該バリデータがどのブロックを最も最近正当化されたブロックとして認識するかを示す。target
:ファイナリティ投票の一部であり、当該バリデータがどのブロックを現在のエポックにおける最初のブロックとして認識するかを示します。
data
が構築されると、バリデータは、自分が参加したことを示すために、自身のバリデータ・インデックスに対応したaggregation_bits
のビットを0から1に変更することができます。
バリデータは最後に、このアテステーションに署名し、ネットワークに送信します。
アテステーションの集約
このデータを各バリデータに提供する場合、ネットワークに対する負担が大きくなります。 このため、各バリデータからのアテステーションは、より広汎に送信する前にサブネット内で集約されます。 具体的には、各バリデータの署名を集約することで、送信されるアテステーションに当該コンセンサスのデータ
と、このデータ
に同意するすべてのバリデータの署名を結合した単一の署名が含まれるようにします。 これは、aggregation_bits
を用いて確認することができます。aggregation_bitsは、各バリデータが所属する委員会におけるインデックス(バリデータのIDはデータ
に含まれています)であり、個々の署名に対してクエリを実行するために使用できるからです。
エポックごとに、各サブネットから16のバリデータがアグリゲータ
に選定されます。 アグリゲータは、ゴシップネットワーク上において、自身のアテステーションと同等のデータ
を持つすべてのアテステーションを収集します。 データが一致するアテステーションを送信したすべてのユーザーは、aggregatoin_bits
に記録されます。 アグリゲータは次に、この集約されたアテステーションをより広汎なネットワークに送信します。
バリデータがブロック提案者に選定されると、当該の新規ブロックにおける最新のスロットまで、各サブネットからのアテステーションを集約して、パッケージ化します。
アテステーション追加のライフサイクル
- 生成
- 伝播
- 集約
- 伝播
- 追加
以下の図は、アテステーションのライフサイクルの概略を示したものです。
報酬
バリデータは、アテステーションを提出することで報酬を得ます。 アテステーションによる報酬は、参加フラグ (ソース、ターゲット、ヘッド)、べース報酬、参加率によって決まります。
それぞれの参加フラグは、送信されたアテステーションとその追加の遅延に応じて、true または false のいずれかになります。
最良のシナリオは、3つのフラグがすべて true の場合です。この場合、バリデーター (正しいフラグごとに) 収益を得ることができます。
reward += base reward * flag weight * flag attesting rate / 64
このflag attesting rateは、アクティブな有効残高の合計と、特定のフラグにおけるすべてのアテステーションをしているバリデータの有効残高の合計の比較によって測定されます。
ベース報酬
ベース報酬は、アテステーションを行うバリデータの数と、彼らの有効なステーク済みイーサ残高により計算されます。
base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)
追加の遅延
各バリデータがチェーンの先頭(ブロック n
)で投票した時点では、ブロック n+1
はまだ提案されていません。 このため、追加されるアテステーションは当然1ブロック後になり、ブロック n
がチェーンの先頭である時点で投票したすべてのバリデータのアテステーションはブロック n+1
に含まれることになるため、追加の遅延は「1」になります。 アテステーション報酬は、ベース報酬に追加遅延の値の逆数を掛け合わせて算出されるため、追加の遅延が「2」スロットに倍増した場合、アテステーション報酬は2分の1になります。
アテステーションで発生しうるシナリオ
投票を行うバリデータが欠席する場合
バリデータがアテステーションを提出できるのは、最長で1エポックの期間です。 エポック0でアテステーションを提出しなかった場合、エポック1で提出できますが、追加遅延が発生します。
アグリゲータが欠席する場合
エポックごとに、合計16名のアグリゲータが存在します。 さらに、256件のエポックを対象とする2つのサブネットを講読するランダムなバリデータが存在し、アグリゲータが欠席する際のバックアップとして機能します。
ブロック提案者が欠席する場合
運が良ければ、アグリゲータがブロック提案者になる場合もあります。 ブロック提案者が欠席したためにアテステーションが追加されなかった場合、次のブロック提案者がこの集約済みのアテステーションを継承して、次のブロックに追加します。 ただし、追加の遅延の値が1増えます。
参考文献
- Vitalikのコンセンサス仕様(注釈付)におけるアテステーションの説明(opens in a new tab)
- eth2book.infoにおけるアテステーションの説明(opens in a new tab)
役に立つコミュニティリソースをご存知の場合は、 このページを編集して追加してください。