Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-1577: ENS 的 contenthash 字段

Authors Dean Eigenmann <dean@ens.domains>, Nick Johnson <nick@ens.domains>
Created 2018-11-13

摘要

本 EIP 为 ENS 解析器引入了新的 contenthash 字段,从而可以更好地定义将名称映射到网络和内容地址的系统。此外,contentmultihash 字段已弃用。

动机

包括 MetamaskStatus 等移动客户端在内的多个应用程序已开始将 ENS 名称解析为托管在 IPFSSwarm 等分布式系统上的内容。由于存储和寻址内容的方式多种多样,因此需要一个标准,以便这些应用程序知道如何解析名称,并且域名所有者知道如何解析其内容。

contenthash 字段允许在 ENS 中轻松指定网络和内容地址。

规范

引入了 contenthash 字段,该字段允许 ENS 名称支持各种协议。当使用参数 0xbc1c58d1 调用 supportsInterface 函数时,支持此字段的解析器必须返回 true

contentmultihash 字段已弃用。

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,开发了一个新的解析器,可以在这里找到,您还可以找到部署在以下位置的智能合约:

还有多种语言的实现来编码和解码 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.