[EIP-7002] Execution Layer Triggerable Withdrawals
こんにちは!
ブロックチェーンエンジニアの Dr. Doru です。
今月 11/12 ~ 11/15 にタイのバンコクで開催された Devcon に参加してきました。
興味深い内容のセッションが数多くある中で、次期 Ethereum のアップデート「Pectra」に関する話がありました。
今回の記事では次期アップデートの規格の1つである、「EIP-7002: Execution Layer Triggerable Withdrawals」の規格について解説してみたいと思います。
規格の目的
EIP-7002 の規格の目的は、「バリデーターが実行レイヤーの Withdrawal Key (引き出し資格情報) を使用して退出および部分的な引き出しをトリガーできるようにすること」です。
簡単に言えば「バリデーターの引き出しがより柔軟にする」という規格になります。
現在の Ethereum の Beacon Chain の仕様では、バリデーターは Withdrawal Key (引き出し資格情報) を持っていても Validator Key(Active Key) を所持していなければ資金の引き出しを行うことはできませんでした。
バリデーターが2つの鍵を持っていなければ引き出しを行うことができないため、引き出しを依頼するエンティティと引き出しを行うエンティティが異なる場合などのケースに柔軟に対応できない、1つの鍵を無くした場合引き出すことができなくなる問題などを解決できるのがこの「EIP-7002」になります。
Beacon Chain のステーキング仕様
通常のEOAでは、ユーザーは資金にアクセスするために1つの秘密鍵を管理すれば問題ありません。ですが、Ethereumのバリデーターは、以下の2つの鍵を所有する必要があります。
Beacon Chain 鍵構造
-
The Validator Key(Active Key)
- Validator Private Key
- Validator Public Key
-
The Withdrawal Key
- Withdrawal Private Key
- Withdrawal Public Key
Validator Key(Active Key) は、ブロック提案や署名に使われ、ホットウォレットで管理する必要があります。こちらのValidator Key(Active Key) は BLS キーの形式をとります。
Withdrawal Key は、バリデーターの資金へのアクセスに使用されます。こちらの鍵を失った場合、資金へのアクセスはできなくなりますが、Validator Key(Active Key) を持つ限り、ブロックやアテステーションへの署名ができます。もしバリデーターが資金の引き出しを行いたい場合、バリデーターのステータスを「Exited」にしているときのみ資金の引き出しが行えます。
Withdrawal Key は「0x00:BLS キー」と「0x01:実行レイヤーアドレス」の2種類が存在します。
2つの鍵についてまとめると以下のようになります。
Validator Key (Active Key) | Withdrawal Key | |
---|---|---|
鍵の役割 | ブロック提案や署名 | 資金の引き出し |
管理方法 | ホットウォレット | コールドウォレット |
キーの形式 | BLS | BLS / Execution Layer Address |
現在のステーキング仕様の課題
現在の Beacon Chain のステーキング仕様では以下のような問題が考えられます。
- Validator Key (Active Key) を持つエンティティのみが引き出しのステータスを「Exited(引き出し可能)」にすることができるため、Withdrawal Key を持つエンティティだけでは引き出しを行うことができない
- Validator Key (Active Key) をなくすと資金の引き出しができなくなる
EIP-7002 の改善案
EIP-7002は、これらの問題を以下のように解決します。
- Validator Key (Active Key) と Withdrawal Key どちらでもバリデーターの「Exited(引き出し可能)」にする
- Exit をするというメッセージを Beacon Chain までは直接バリデーターがコンセンサスレイヤーに送信していたが、EIP-7002 の規格によりエグゼキューションレイヤーがメッセージをコンセンサスレイヤーに送信するように変更
- 全額引き出しに加え、一部引き出し機能を追加
1つずつみていくと、まず、今までは Validator Key (Active Key) がなければ Exited することができませんでしたが、今回の変更により、Withdrawal Key で Exited を行うことができるようになります。
次にメッセージの送信に関する処理の変更です。現在の Beacon Chain の仕組みではコンセンサスレイヤーに直接バリデーター送信していましたが、エグゼキューションレイヤーがメッセージをコンセンサスレイヤーに送信するようにできるようになります。
最後に、Pectra のアップデートでは、EIP-7251 の変更でバリデーターがステーキングできるETHの上限を 32 ETH から 2048 ETHに引き上げられます。その変更に伴い、今まで全額引き出しのみでしたが、一部引き出し機能が追加されます。
引き出しフロー
Execution Layer
- Validator やユーザーが Withdrawal リクエストをコントラクトに送信
- リクエストは Execution Layer に設けられた queue(メッセージキュー)に格納
- 各ブロックの終わりに、キューからリクエストが Consensus Layer に引き渡される
Consensus Layer
- Execution Payload 内の Withdrawal リクエストを確認
- 各リクエストを検証し、問題なければ Validator を Exit 状態にする
- 処理結果をステートに反映
- Withdrawal 処理を開始
引き出しフロー
まとめ
長々と難しいことを書いてきましたが、EIP-7002 は「バリデーターの引き出しがより柔軟にする」という規格になります。
覚えておきたいのが、この EIP-7002 が Withdrawal Key が引き出しのリクエストを送ることを可能にするというものであり、今まで通り Validator Key (Active Key) も引き出しのリクエストを行うことができます。既存の機能が廃止されることはなく追加の機能が増えるということを間違えないでいただきたいです。
ステーキングの上限額が引き上げられ、より柔軟なステーキングが可能になる中でステーキングのしやすさ、引き出しやすさといったバリデーターフレンドリーな環境を作られるのに役に立ちそうな規格だなと調べている中で思いました。
ここまで調べると「Execution Layer Triggerable Withdrawals」という名前はしっくりくるのですが、日本語で良いタイトルが思いつきません笑
今回、EIP-7251 では 最大ステーキング額の引き上げが行われるという話ができたように、まだまだ Pectra のアップデートでは採用される予定の EIP の規格があるのでそちらの方も今後ご紹介できたらなと思います。
ここまで読んでいただきありがとうございました!
本日はここまで!
またの機会に、アディオス!
Discussion