EIP-868: 节点发现 v4 ENR 扩展
Authors | Felix Lange <fjl@ethereum.org> |
---|---|
Created | 2018-02-02 |
Requires | EIP-8, EIP-778 |
Table of Contents
摘要
此 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.