主页EIPs
EIPsEIP-4938
EIP-4938

eth/67 - Removal of GetNodeData

Remove GetNodeData and NodeData messages from the wire protocol
FinalStandards Track: Networking
创建时间: 2022-03-23
关联 EIP: EIP-2464, EIP-2481
Marius van der Wijden (@MariusVanDerWijden), Felix Lange <fjl@ethereum.org>, Gary Rong <garyrong@ethereum.org>
社区讨论原文链接编辑
1 分钟了解
欢迎补充好内容
去提交
相关视频
欢迎补充好内容
去提交
正文

Abstract

The Ethereum Wire Protocol defines request and response messages for exchanging data between clients. The GetNodeData request retrieves a set of trie nodes or contract code from the state trie by hash. We propose to remove the GetNodeData and NodeData messages from the wire protocol.

Motivation

GetNodeData and NodeData were introduced in protocol version eth/63 to allow for a sync mode called "fast sync", which downloads the Ethereum state without executing all blocks. The sync algorithm works by requesting all state trie nodes and contract codes by their hash.

Serving GetNodeData requests requires clients to store state as a mapping of hashes to trie nodes. Avoiding the need to store such a mapping in the database is the main motivation for removing this request type.

At this time, some client implementations cannot serve GetNodeData requests because they do not store the state in a compatible way. The Ethereum Wire Protocol should accurately reflect the capabilities of clients, and should not contain messages which are impossible to implement in some clients.

Specification

Remove the following message types from the eth protocol:

  • GetNodeData (0x0d)
    • (eth/66): [request_id: P, [hash_0: B_32, hash_1: B_32, ...]]
  • NodeData (0x0e)
    • (eth/66): [request_id: P, [value_0: B, value_1: B, ...]]

Rationale

A replacement for GetNodeData is available in the snap protocol. Specifically, clients can use the GetByteCodes and GetTrieNodes messages instead of GetNodeData. The snap protocol can be used to implement the "fast sync" algorithm, though it is recommended to use it for "snap sync".

Backwards Compatibility

This EIP changes the eth protocol and requires rolling out a new version, eth/67. Supporting multiple versions of a wire protocol is possible. Rolling out a new version does not break older clients immediately, since they can keep using protocol version eth/66.

This EIP does not change consensus rules of the EVM and does not require a hard fork.

Security Considerations

None

Copyright and related rights waived via CC0.

扩展阅读
欢迎补充好内容
去提交
相关项目
欢迎补充好内容
去提交

不想错过最新的 EIP 动态?

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

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