ERC-1577: ENS 的 contenthash 字段
Authors | Dean Eigenmann <dean@ens.domains>, Nick Johnson <nick@ens.domains> |
---|---|
Created | 2018-11-13 |
摘要
本 EIP 为 ENS 解析器引入了新的 contenthash
字段,从而可以更好地定义将名称映射到网络和内容地址的系统。此外,content
和 multihash
字段已弃用。
动机
包括 Metamask 和 Status 等移动客户端在内的多个应用程序已开始将 ENS 名称解析为托管在 IPFS 和 Swarm 等分布式系统上的内容。由于存储和寻址内容的方式多种多样,因此需要一个标准,以便这些应用程序知道如何解析名称,并且域名所有者知道如何解析其内容。
contenthash
字段允许在 ENS 中轻松指定网络和内容地址。
规范
引入了 contenthash
字段,该字段允许 ENS 名称支持各种协议。当使用参数 0xbc1c58d1
调用 supportsInterface
函数时,支持此字段的解析器必须返回 true
。
content
和 multihash
字段已弃用。
contenthash
返回的值必须表示为机器可读的 multicodec。格式指定如下:
<protoCode uvarint><value []byte>
protoCode 及其含义在 multiformats/multicodec 存储库中指定。
值的编码取决于 protoCode 指定的内容类型。protocode 为 0xe3 和 0xe4 的值表示 IPFS 和 Swarm 内容;这些值被编码为 v1 CIDs,没有基本前缀,这意味着它们的值格式如下:
<protoCode uvarint><cid-version><multicodec-content-type><multihash-content-address>
在解析 contenthash
时,应用程序必须使用协议代码来确定编码的地址类型,并针对该协议适当地解析该地址(如果支持)。
例子
IPFS
输入数据:
storage system: IPFS (0xe3)
CID version: 1 (0x01)
content type: dag-pb (0x70)
hash function: sha2-256 (0x12)
hash length: 32 bytes (0x20)
hash: 29f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f
二进制格式:
0xe3010170122029f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f
文本格式:
ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4
Swarm
输入数据:
storage system: Swarm (0xe4)
CID version: 1 (0x01)
content type: swarm-manifest (0xfa)
hash function: keccak256 (0x1b)
hash length: 32 bytes (0x20)
hash: d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
二进制格式:
0xe40101fa011b20d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
文本格式:
bzz://d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
使用 swarm hash 的示例用法:
$ swarm hash ens contenthash d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
> e40101fa011b20d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162
回退
为了支持在其 content
字段中具有 IPFS 或 Swarm hash 的名称,必须实施一个缓冲期,为这些名称持有者提供时间来更新其名称。如果解析器不支持 multihash
接口,则必须检查它们是否支持 content
接口。如果他们支持,则应该以依赖于上下文的方式处理该字段的值并进行解析。必须至少在 2019 年 3 月 31 日之前强制执行此条件。
实现
为了支持 contenthash
,开发了一个新的解析器,可以在这里找到,您还可以找到部署在以下位置的智能合约:
- Mainnet : 0xd3ddccdd3b25a8a7423b5bee360a42146eb4baf3
- Ropsten : 0xde469c7106a9fbc3fb98912bb00be983a89bddca
还有多种语言的实现来编码和解码 contenthash
:
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Dean Eigenmann <dean@ens.domains>, Nick Johnson <nick@ens.domains>, "ERC-1577: ENS 的 contenthash 字段 [DRAFT]," Ethereum Improvement Proposals, no. 1577, November 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1577.