イーサリアムのプルーフオブステークへの移行–マージ–が間近に迫っています。開発者は立ち上がっており、仕様は最終決定されており、コミュニティへの働きかけが本格的に始まっています。マージは、エンドユーザー、スマートコントラクト、およびdappsのイーサリアムの動作に最小限の影響を与えるように設計されています。とはいえ、強調する価値のある小さな変更がいくつかあります。それらに飛び込む前に、Mergeアーキテクチャ全体に関するコンテキストを提供するためのいくつかのリンクを次に示します。
この投稿の残りの部分では、読者が上記に精通していることを前提としています。さらに深く掘り下げたい方のために、TheMergeの完全な仕様はこちらから入手できます:
マージ後、プルーフオブワークブロックはネットワーク上に存在しなくなります。代わりに、以前のプルーフオブワークの内容は、ビーコンチェーン上に作成されたブロックのコンポーネントになります。次に、ビーコンチェーンは、以前のプルーフオブワークコンセンサスレイヤーに取って代わり、イーサリアムの新しいプルーフオブステークコンセンサスレイヤーになると考えることができます。ビーコンチェーンブロックには、 ExecutionPayloads
が含まれます 、これは、現在のプルーフオブワークチェーンのブロックに相当するマージ後のものです。下の画像はこの関係を示しています:
エンドユーザーとアプリケーション開発者の場合、これらの ExecutionPayloads
イーサリアムとの相互作用が発生する場所です。このレイヤーのトランザクションは、実行レイヤークライアント(Besu、Erigon、Geth、Nethermindなど)によって引き続き処理されます。幸い、実行レイヤーの安定性により、Mergeは最小限の重大な変更のみを導入します。
マージ後、プルーフオブワークブロックヘッダーに以前含まれていたいくつかのフィールドは、プルーフオブステークとは無関係であるため、使用されなくなります。ツールとインフラストラクチャへの影響を最小限に抑えるために、これらのフィールドは、データ構造から完全に削除されるのではなく、0またはそれらのデータ構造に相当するものに設定されます。ブロックフィールドへの完全な変更は、EIP-3675にあります。
[]
RLP([])=0xc0
ommersHash
0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347
=Keccak256(RLP([]))
0
0x0000000000000000
プルーフオブステークは、プルーフオブワークのようなオマー(別名アンクルブロック)を自然に生成しないため、各ブロックのこれらのリスト( ommersHash
)は、空のリストのRLPエンコードされたハッシュになります。同様に、 0
に設定されます 、バイトサイズの値を尊重しながら。
mixHash
別のマイニング関連フィールドである、は0に設定されませんが、代わりにビーコンチェーンのRANDAO値が含まれます。詳細については、以下をご覧ください。
マージ後、 BLOCKHASH
オペコードは引き続き使用できますが、プルーフオブワークハッシュプロセスによって偽造されなくなるため、このオペコードによって提供される疑似ランダム性ははるかに弱くなります。
関連して、 0x44
)が更新され、名前が BLOCKHASH
よりも強力ですが、それでもバイアスがかかります。 。
ExecutionPayload
に保存されます ここで、 mixHash
、プルーフオブワーク計算に関連付けられた値が格納されました。ペイロードの
これは、難易度
の図です。 &
マージ前に、 0x44
が表示されます opcodeは、 mixHash
が含まれていたヘッダーフィールドを指します
EIP-4399で形式化されたこの変更は、マージが行われたかどうかを評価する方法をオンチェーンアプリケーションにも提供します。 EIPから:
さらに、このEIPによって提案された変更により、スマートコントラクトは、PoSへのアップグレードがすでに行われたかどうかを判断できます。これは、DIFFICULTYオペコードの戻り値を分析することで実行できます。
2 ** 64
より大きい値 トランザクションがPoSブロックで実行されていることを示します。
マージはイーサリアムの平均ブロック時間に影響します。現在、作業の証明の下で、ブロックは平均して約13秒ごとに着信し、実際のブロック時間にはかなりのばらつきがあります。プルーフオブステークでは、バリデーターがオフラインであるか、ブロックが時間内に送信されないためにスロットが失われた場合を除いて、ブロックは正確に12秒ごとに到着します。実際には、これは現在<1%のスロットで発生します。
これは、ネットワーク上の平均ブロック時間が約1秒短縮されることを意味します。計算で特定の平均ブロック時間を想定するスマートコントラクトは、これを考慮に入れる必要があります。
プルーフオブワークの下では、常に再編成の可能性があります。アプリケーションは通常、新しいヘッドの上にいくつかのブロックがマイニングされるのを待ってから、正規のチェーンから削除される可能性が低い、または「確認済み」として処理します。マージ後、代わりに最終化の概念があります。 およびセーフヘッド ブロック。これらのブロックは、「確認済み」のプルーフオブワークブロックよりもさらに確実に使用できますが、正しく使用するには理解を変える必要があります。
ファイナライズされたブロックは、バリデーターの2/3以上によって正規として受け入れられたブロックです。競合するブロックを作成するには、攻撃者は総賭け金の少なくとも3分の1を燃やす必要があります。この記事の執筆時点では、これはイーサリアムで100億ドル(または250万ETH以上)を超えています。
安全な頭 ブロックは、通常のネットワーク条件下で、正規のチェーンに含まれると予想されるブロックです。ネットワーク遅延が4秒未満であり、バリデーターの正直な大多数であり、フォーク選択ルールであるセーフヘッドへの攻撃がないと仮定します。 孤立することはありません。さまざまなシナリオでセーフヘッドがどのように計算されるかを詳しく説明したプレゼンテーションは、こちらから入手できます。さらに、セーフヘッドの前提と保証 正式に定義され、次の論文で分析されています。
マージ後の実行レイヤーAPI(JSON RPCなど)はセーフヘッドを返します デフォルトでは、
ファイナライズされたブロックは、新しい
この投稿が、アプリケーション開発者がプルーフオブステークへの待望の移行に備えるのに役立つことを願っています。今後数週間で、より幅広いコミュニティによるテストに長寿命のテストネットが利用できるようになります。また、インフラストラクチャ、ツール、およびアプリケーションの開発者が質問をしたり、Mergeに関する最新の技術アップデートを聞いたりするためのMergeコミュニティの呼びかけも予定されています。またね👋🏻
「セーフヘッド」セクションのコアコンテンツを提供してくれたミハイルカリーニンと、この投稿のドラフトをレビューしてくれたダニーライアンとマットガーネットに感謝します。