コンテンツへスキップ
0%

Ethereumのコミットメントレベルとは?

Alchemy team headshot

執筆者 Alchemy

2022年9月13日 公開読了時間 1 分

Beacon Chainは、PoWチェーンから引き継がれた既存の_latest_ラベルに加えて、ブロックにラベル付けするために使用される2つの新しいEthereumコミットメントレベル、_safe_と_finalized_を導入する。_latest_ブロックタグはEthereumのブロックチェーンに追加された最も新しいブロックであり、「head」とも呼ばれる。_safe_コミットメントレベルは現在のエポックより1エポック(すなわち32スロット)前であり、_finalized_コミットメントレベルは直近に_safe_とマークされたブロックより1エポック前である。

Ethereumコミットメントレベルが役立つのは、Ethereumのプルーフ・オブ・ステークアルゴリズムの変更によって可能になった、reorgされる可能性が低いブロックをweb3開発者がクエリするための有用なプリミティブを提供するからである。

開発者は_justified_および_finalized_ブロックがreorgされにくいという高い保証を得られるため、スマートコントラクトや分散型アプリケーションにより強力な前提を組み込むことができる。

ブロック番号とは何か?

ブロック番号は、ブロックチェーンに追加されたブロックの順序を示すために使用される数値である。 例えば、構築中で検証されている保留中のブロックのブロック番号が100である場合、最も直近に検証されたブロック(すなわち_latest_ブロック)のブロック番号は99になる。

チェーン再編成(reorg)とは何か?

チェーン再編成とは、正規チェーン(すなわちメインチェーン、または最長チェーン)に追加されたブロックが削除され、別のブロックに置き換えられることである。正規チェーンに追加されたブロックはreorgによって変更され得るため、reorgは決済のファイナリティに影響を与える。

reorgはエクスプロイトやMaximal Extractable Value (MEV)の結果として発生し得るため、最新のブロックが確定していると信頼することは、開発者にとって難しい前提となる。

Proof-of-WorkからProof-of-Stakeへの移行に伴い、EthereumのBeacon Chainは開発者により強力な保証を提供するために_safe_および_finalized_ブロックコミットメントレベルを導入した。

エポックとは何か?

マージ後のEthereum環境において、Beacon Chainは新しいブロックが構築される機会であるスロットと、32スロットに相当するエポックを導入する。 新しいブロックはちょうど12秒ごとに検証され得るため、1エポックは6.4分に相当する。

各エポックの間、Beacon Chainはブロックチェーンに追加されるブロックの妥当性を証明するバリデーターの委員会をランダムに選出する。_safe_および_finalized_ブロックコミットメントレベルはエポックに基づいて決定される。

各エポックには32スロットがあるが、まれなケース(1%未満)では、すべてのスロットでブロックが検証されるとは限らないため、一部のエポックは32ブロックより少ないことがある。一例として、ランダムに選ばれたバリデーターがオフラインである場合が挙げられる。

Ethereumコミットメントレベルとは何か?

Ethereumコミットメントレベルは、検証されたブロックにlatest、justified、finalizedのいずれかのラベルを付けるために使用されるタグであり、ブロックが再編成される可能性の高さについて開発者に一定の保証を提供する。

1. Latest

_latest_ブロックは、Ethereumバリデーターによって構築され検証された最も新しいブロックである。_latest_ブロックはBeacon Chainが再編成されないという保証がなく、このブロックがUncle Block、すなわち正規チェーンに追加されなかったブロックになる可能性があるため、注意して使用する必要がある。

2. Safe

_safe_ブロックは、Ethereumのバリデーターセットの3分の2からアテステーションを受け取ったブロックである。_safe_ブロックはreorgされにくいと理解されている。

例えば、_safe_ブロックがチェーン再編成を経験し得る数少ない方法の一つは、ネットワークに対する大規模で協調された攻撃が発生した場合である。

3. Finalized

finalizedブロックとは、直近に_justified_とされたブロックより1エポック前のjustifiedブロックである。_finalized_ブロックは、バリデーターの3分の2の多数が競合するブロックチェーンをfinalizeする場合を除いて、再編成される可能性が極めて低い

safeおよびfinalizedコミットメントレベルはどのように決定されるのか?

safeおよびfinalizedコミットメントレベルは、エポックの完了によって決定される。The Merge後の最初の3つのエポック(エポック0、1、2)を例に、safeおよびfinalizedブロックがどのように機能するかを見てみよう。

  • エポック0 = ブロック0-31
  • エポック1 = ブロック32-63
  • エポック2 = ブロック64-95
  • エポック3 = ブロック96-127

最新のブロックがブロック96であり、これはエポック3の開始かつエポック2の終了を意味すると仮定する。

ブロック96にはブロック64に対するアテステーション(すなわち、提案された正規ブロックのheadが真であることを示すバリデーターからの投票)が含まれているため、Beacon Chainがバリデーターの3分の2からアテステーションを受け取ると、ブロック64は_justified (safe)_とラベル付けされる。

ブロック64がjustifiedとラベル付けされ_safe_とマークされると、それ以前にjustifiedとされたブロックは_finalized_とマークされる。safeおよび_finalized_ブロックはエポックの開始時に発生するため、ブロック32(エポック1の最初のブロック)は_finalized_とマークされる。

現在のブロック番号が96である場合、これを別の方法で可視化すると以下のようになる:

  • ブロック96(エポック3の開始) = latest
  • ブロック64(エポック2の開始) = justified(safe)
  • ブロック32(エポック1の開始) = finalized
Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。