Alert Source Discuss
Standards Track: Networking

EIP-7636: 扩展 EIP-778 以支持 "client" ENR 条目

添加额外的 ENR 条目以指定客户端信息,例如名称和版本号。

Authors James Kempton (@SirSpudlington)
Created 2024-02-25
Requires EIP-778

摘要

以太坊网络由运行各种客户端实现的节点组成。每个客户端都有自己的一组功能、优化和独特的行为。引入一种标准化的方法来识别 ENR 中的客户端软件及其版本,可以更有效地进行网络分析、兼容性检查和故障排除。此 EIP 提议向 ENR 添加 “client” 字段。

动机

了解以太坊网络中客户端软件的格局对于开发者、节点和网络健康评估至关重要。目前,没有标准化的方法让节点宣布其软件身份和版本,这可能导致兼容性问题或难以诊断全网络问题。将其添加到 ENR 允许客户端仅使用 discv5 审计网络健康状况,并额外跟踪 discv5 在不同服务中的采用情况。

规范

本文档中的关键词 “MUST”(必须)、”MUST NOT”(禁止)、”REQUIRED”(需要)、”SHALL”(应)、”SHALL NOT”(不应)、”SHOULD”(应该)、”SHOULD NOT”(不应该)、”RECOMMENDED”(推荐)、”NOT RECOMMENDED”(不推荐)、”MAY”(可以)和 “OPTIONAL”(可选)应按照 RFC 2119 和 RFC 8174 中的描述进行解释。

建议按照 EIP-778 中的规范将 “client” 条目添加到 ENR。 此条目是 OPTIONAL(可选的),客户端可以选择省略不披露此类信息。 此条目的键是 "client"

所有元素 MUST(必须)使用 ASCII 标准编码为字符串,如 RFC 20 中所述。

此条目的值 MUST(必须)是一个 RLP 列表:

[ClientName, Version, (BuildVersion)]
  • ClientName:客户端软件的字符串标识符。 它 SHOULD(应该)简洁、无空格并代表客户端应用程序。
  • Version:一个字符串,表示客户端软件的版本,采用人类可读的格式。 推荐遵循语义版本控制。
  • BuildVersion:一个 OPTIONAL(可选的)字符串,表示客户端软件的构建或提交版本。 这可用于识别特定的构建或开发版本。

理由

选择一个键而不是使用多个键是为了有效地利用空间。 然而,使用一个字符串并不符合其他具有类似目的的 EIP,因此 RLP 列表被认为是最佳编码方式。

向后兼容性

此 EIP 完全向后兼容,因为它通过添加一个可选条目来扩展 ENR 规范。 不识别 “client” 条目的现有实现将忽略它,而不会对 ENR 处理或网络行为产生任何不利影响。

测试用例

在主网上运行 Geth 1.10.0 版本的节点可能具有如下 ENR client 条目:

["Geth", "1.10.0"]

运行 Nethermind 实验性构建版本的节点可能包含:

["Nethermind", "1.9.53", "7fcb567"]

以及一个 ENR

enr:-MO4QBn4OF-y-dqULg4WOIlc8gQAt-arldNFe0_YQ4HNX28jDtg41xjDyKfCXGfZaPN97I-MCfogeK91TyqmWTpb0_AChmNsaWVudNqKTmV0aGVybWluZIYxLjkuNTOHN2ZjYjU2N4JpZIJ2NIJpcIR_AAABg2lwNpAAAAAAAAAAAAAAAAAAAAABiXNlY3AyNTZrMaECn-TTdCwfZP4XgJyq8Lxoj-SgEoIFgDLVBEUqQk4HnAqDdWRwgiMshHVkcDaCIyw

可以解码以产生诸如 seqsiqnatureidsecp256k1 之类的正常数据。 此外,它将产生客户端值 ["0x4e65746865726d696e44","0x312e392e3533","0x37666362353637"]["Nethermind", "1.9.53", "7fcb567"]

安全考虑

引入可识别的客户端信息可能会被用于针对已知存在漏洞的特定版本或构建版本的定向攻击。对于实施此 EIP 的客户端来说,考虑披露其身份和版本的影响至关重要。如果需要,用户或运营商应该能够选择退出或匿名化此信息。

此外,由于此信息是自我声明的,因此绝不能将其用于任何需要其可靠性的地方。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

James Kempton (@SirSpudlington), "EIP-7636: 扩展 EIP-778 以支持 "client" ENR 条目," Ethereum Improvement Proposals, no. 7636, February 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7636.