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 节点或合约代码。我们建议从线协议中移除 GetNodeData
和 NodeData
消息。
动机
GetNodeData
和 NodeData
在协议版本 eth/63
中引入,以支持一种称为“快速同步”的同步模式,该模式下载以太坊状态而无需执行所有区块。同步算法通过请求所有状态 trie 节点和合约代码的哈希来工作。
服务 GetNodeData
请求要求客户端将状态存储为哈希到 trie 节点的映射。避免在数据库中存储这种映射是移除此请求类型的主要动机。
目前,某些客户端实现无法服务 GetNodeData
请求,因为它们没有以兼容的方式存储状态。以太坊线协议应准确反映客户端的功能,并且不应包含某些客户端无法实现的消息。
规范
从 eth
协议中移除以下消息类型:
GetNodeData (0x0d)
- (eth/66):
[request_id: P, [hash_0: B_32, hash_1: B_32, ...]]
- (eth/66):
NodeData (0x0e)
- (eth/66):
[request_id: P, [value_0: B, value_1: B, ...]]
- (eth/66):
理由
snap protocol 中提供了 GetNodeData
的替代方案。具体来说,客户端可以使用 GetByteCodes 和 GetTrieNodes 消息来代替 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.