主页EIPs周刊
EIPsEIP-6465
EIP-6465

SSZ withdrawals root

Migration of withdrawals MPT commitment to SSZ
DraftStandards Track: Core
创建时间: 2023-02-08
关联 EIP: EIP-2718, EIP-4895, EIP-6404, EIP-7495, EIP-7916
Etan Kissling (@etan-status), Mikhail Kalinin (@mkalinin)
社区讨论原文链接编辑
1 分钟了解
欢迎补充好内容
去提交
相关视频
欢迎补充好内容
去提交
正文

Abstract

This EIP defines a migration process of the existing Merkle-Patricia Trie (MPT) commitment for withdrawals to Simple Serialize (SSZ).

Motivation

While the consensus ExecutionPayloadHeader and the execution block header map to each other conceptually, they are encoded differently. This EIP aims to align the encoding of the withdrawals_root, taking advantage of the more modern SSZ format. This brings several advantages:

  1. Reducing complexity: The proposed design reduces the number of use cases that require support for Merkle-Patricia Trie (MPT).

  2. Reducing ambiguity: The name withdrawals_root is currently used to refer to different roots. While the execution block header refers to a Merkle Patricia Trie (MPT) root, the consensus ExecutionPayloadHeader instead refers to an SSZ root. With these changes, withdrawals_root consistently refers to the same SSZ root.

Specification

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.

Existing definitions

Definitions from existing specifications that are used throughout this document are replicated here for reference.

NameSSZ equivalent
ValidatorIndexuint64
Gweiuint64
ExecutionAddressBytes20
WithdrawalIndexuint64

Withdrawals

New withdrawals use a normalized SSZ representation. The existing consensus Withdrawal SSZ container is migrated to EIP-7495 ProgressiveContainer.

class Withdrawal(ProgressiveContainer[active_fields=[1, 1, 1, 1]]): index: WithdrawalIndex validator_index: ValidatorIndex address: ExecutionAddress amount: Gwei

Execution block header changes

The execution block header's withdrawals-root is transitioned from MPT to SSZ.

withdrawals = ProgressiveList[Withdrawal]( withdrawal_0, withdrawal_1, withdrawal_2, ...) block_header.withdrawals_root == withdrawals.hash_tree_root()

Consensus ExecutionPayload changes

When building a consensus ExecutionPayload, the withdrawals list is based on the new progressive container type.

class ExecutionPayload(...): ... withdrawals: ProgressiveList[Withdrawal] ...

The state transition function is updated to limit withdrawals to MAX_WITHDRAWALS_PER_PAYLOAD.

Rationale

This change was originally a candidate for inclusion in Shanghai, but was postponed to accelerate the rollout of withdrawals.

Backwards Compatibility

Applications that rely on the replaced MPT withdrawals_root in the block header require migration to the SSZ withdrawals_root.

RLP and SSZ withdrawals may clash when encoded. It is essential to use only a single format within one channel. The block header corresponding to the withdrawals can be consulted to identify the underlying fork.

Security Considerations

None

Copyright and related rights waived via CC0.

扩展阅读
欢迎补充好内容
去提交

不想错过最新的 EIP 动态?

订阅 EIPs Fun 周刊以跟进相关更新,建⽴你与 EIP 之间的连接 ,更好地建设以太坊。

详情
支持以太坊贡献者,推动生态建设
资源
GitHub