原文标题:《科普 | 以太坊中的网络地址》
原文作者:Dean Eigenmann
原文编译:Unitimes_David
本文将概述多地址,ENR 和 enode 这三类网络地址。
多地址 (Multiaddr)
让我们从最早或按 commit 时间来看最早被归档的多地址 (Multiaddr[1]) 开始。多地址是 Protocol Labs 的多格式项目(multiformats project)的一部分。多格式本质上是自描述值的各种规范。由于被广泛用于 libp2p,IPFS 以及其它 Protocol Labs 的项目,你可能早就听说过它们。
多地址有两种表示形式:一种是存储或传输时使用的二进制表示;另一种是提供给用户的可读格式。
/ip4/127.0.0.1/udp/1234
上面展示了一个以可读格式表示的多地址。该多地址是一种以键值对来表示地址的可递归格式。(笔者注,地址可表达为 {<ip4, 127.0.0.1>, <udp, 1234>})。二进制表示也是相同的——有一个字节数组表示键,还有一个用于表示值。键可以通过协议表 [2] 从可读形式映射为代码形式。
enode
接下来就是 enode[3]。enode 并不是真正的网络地址格式而是 url 格式。由于 enode 是 ENR 的前身,我们仍会介绍它。一个 enode URL 如下所示:
enode://6f8a80d6ad92a0@10.3.58.6:30303?discport=30301
enode 体系被用于表示 URL。enode://后面跟着一个十六进制编码的节点 ID。接下来,@ 符号后面表示的是主机,其必须为一个 IP 地址。主机后面列出了 TCP 端口,在我们的例子中为 30303。若 UDP 和 TCP 的端口不同,UDP 端口可通过在末尾添加 discport 参数来指定。
ENR
最后我们来介绍 ENR[4](以太坊节点记录)。ENR 很有趣,原因在于其皆使用了前两种类型(多地址和 enode URL)的特性,使得它变得十分通用。ENR 的主要动机是允许转发过程中携带更多的信息,因而引入了节点记录。节点记录是自证的,而且节点可通过签名来鉴别身份。这些记录被表示为一个 RLP 列表 [5]——此处我不会进行详细介绍,但稍微提及一下,RLP 是以太坊使用的一种序列化格式。
节点记录包含了一个签名,序列号与一个表明用于创建和验证签名的身份认证机制所需的字段。最后,记录的其余部分包含了任意键值对,这些键值对可包含诸如连接信息之类的东西。EIP 定义了一些具有预定义含义的键,如 ip,其为 4 字节表示的节点 IPv4 地址。
签名被用于通过确保传递的公钥为创建签名所使用的公钥来验证记录。
如果同一个身份签发了 2 个不同的记录,那么序列号可用于解决冲突:规定使用序列号较大的记录。
需要注意的是,节点记录的 RLP 编码版本号不能超过 300 字节。
该格式是面向未来的,新键即使在部分客户端不能解析的情况下仍能被添加,以及新的身份认证机制可被添加以检验签名。
Eth 2.0
现在,让我们来看看 Eth2.0。在 Eth2.0 之前,以太坊中从未使用过多地址,而其现在变得非常重要。为什么?因为 Eth2.0 使用 libp2p,而 libp2p 又使用多地址来识别节点。
那么,我们该怎么处理这种情况呢?Eth2.0 的 P2P 规范 [6] 展示了 2 种方案:
1. 多地址可从 ENR 导出
2. 由于 ENR 能够添加任意键,多地址能被包含在 ENR 中。
希望本文能够给出一个关于不同的网络地址是什么,这些地址间的区别,工作方式以及用途的精简概要。
原文地址:https://mp.weixin.qq.com/s/yOpPEfVfLI45fDzG9MvxlQ
区块律动 BlockBeats 提醒,根据银保监会等五部门于 2018 年 8 月发布《关于防范以「虚拟货币」「区块链」名义进行非法集资的风险提示》的文件,请广大公众理性看待区块链,不要盲目相信天花乱坠的承诺,树立正确的货币观念和投资理念,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。
以太坊 网络地址 科普