Alert Source Discuss
Standards Track: Networking

EIP-868: 节点发现 v4 ENR 扩展

Authors Felix Lange <fjl@ethereum.org>
Created 2018-02-02
Requires EIP-8, EIP-778

摘要

此 EIP 定义了节点发现协议 v4 的扩展,以实现以太坊节点记录 (ENR)的权威解析。

动机

为了桥接当前和未来的发现网络,并帮助实现 ENR 的其他中继机制(如 DNS),我们需要一种方法来请求节点记录的最新版本。此 EIP 提供了一种使用现有发现协议请求它的方法。

规范

节点发现协议 v4 的实现应支持两种新的数据包类型:节点记录的请求和回复。现有的 ping 和 pong 数据包扩展了一个新字段,其中包含 ENR 的序列号。

Ping 数据包 (0x01)

packet-data = [version, from, to, expiration, enr-seq]

enr-seq 是发送节点记录的当前序列号。所有其他字段保留其现有含义。

Pong 数据包 (0x02)

packet-data = [to, ping-hash, expiration, enr-seq]

enr-seq 是发送节点记录的当前序列号。所有其他字段保留其现有含义。

ENRRequest 数据包 (0x05)

packet-data = [ expiration ]

当收到此类型的包时,节点应回复一个 ENRResponse 包,其中包含其记录的当前版本。

为了防止放大攻击,ENRRequest 的发送者最近应该回复了一个 ping 数据包(就像 FindNode 一样)。expiration 字段(一个 UNIX 时间戳)的处理方式应与所有其他现有数据包一样,即如果它指的是过去的时间,则不应发送回复。

ENRResponse 数据包 (0x06)

packet-data = [ request-hash, ENR ]

此数据包是对 ENRRequest 的响应。

  • request-hash 是被回复的整个 ENRRequest 数据包的哈希值。
  • ENR 是节点记录。

数据包的接收者应验证节点记录是否由发送 ENRResponse 的节点签名。

解析记录

要解析节点公钥的当前记录,请使用 FindNode、Neighbors 数据包执行递归 Kademlia 查找。找到节点后,向其发送 ENRRequest 并从响应中返回记录。

版权

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

Citation

Please cite this document as:

Felix Lange <fjl@ethereum.org>, "EIP-868: 节点发现 v4 ENR 扩展," Ethereum Improvement Proposals, no. 868, February 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-868.