Alert Source Discuss
Standards Track: Networking

EIP-4938: eth/67 - 移除 GetNodeData

从线协议中移除 GetNodeData 和 NodeData 消息

Authors Marius van der Wijden (@MariusVanDerWijden), Felix Lange <fjl@ethereum.org>, Gary Rong <garyrong@ethereum.org>
Created 2022-03-23
Requires EIP-2464, EIP-2481

摘要

以太坊线协议定义了用于在客户端之间交换数据的请求和响应消息。GetNodeData 请求通过哈希从状态 trie 中检索一组 trie 节点或合约代码。我们建议从线协议中移除 GetNodeDataNodeData 消息。

动机

GetNodeDataNodeData 在协议版本 eth/63 中引入,以支持一种称为“快速同步”的同步模式,该模式下载以太坊状态而无需执行所有区块。同步算法通过请求所有状态 trie 节点和合约代码的哈希来工作。

服务 GetNodeData 请求要求客户端将状态存储为哈希到 trie 节点的映射。避免在数据库中存储这种映射是移除此请求类型的主要动机。

目前,某些客户端实现无法服务 GetNodeData 请求,因为它们没有以兼容的方式存储状态。以太坊线协议应准确反映客户端的功能,并且不应包含某些客户端无法实现的消息。

规范

eth 协议中移除以下消息类型:

  • 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, ...]]

理由

snap protocol 中提供了 GetNodeData 的替代方案。具体来说,客户端可以使用 GetByteCodesGetTrieNodes 消息来代替 GetNodeData。snap protocol 可用于实现“快速同步”算法,但建议将其用于“快照同步”。

向后兼容性

此 EIP 更改了 eth 协议,需要推出一个新版本 eth/67。支持线协议的多个版本是可能的。推出新版本不会立即破坏旧客户端,因为它们可以继续使用协议版本 eth/66

此 EIP 不会更改 EVM 的共识规则,也不需要硬分叉。

安全考虑

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Marius van der Wijden (@MariusVanDerWijden), Felix Lange <fjl@ethereum.org>, Gary Rong <garyrong@ethereum.org>, "EIP-4938: eth/67 - 移除 GetNodeData," Ethereum Improvement Proposals, no. 4938, March 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4938.