ENS 在 2023 年 4 月进行了大量更新,本站 “教程” 和 “文档” 中的相关内容已经过时。 如需了解最新的使用说明或技术文档,请到 ENS 官方提供的 支持文档 进行查阅。

ENSIP-7: 内容哈希字段

作者 Dean Eigenmann <dean@ens.domains>, Nick Johnson <nick@ens.domains>
状态 完结
创建时间 2018-11-13

摘要

这个 ENSIP 为 ENS 解析器引入了新的 contenthash 字段,允许更好地定义名称到网络和内容地址的映射系统。此外, contentmultihash 字段已弃用。

动机

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

contenthash 字段可以方便地规范 ENS 中的网络和内容地址。

规范

The field contenthash is introduced, which permits a wide range of protocols to be supported by ENS names. Resolvers supporting this field MUST return true when the supportsInterface function is called with argument 0xbc1c58d1.

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

字段 contentmultihash 已弃用。

contenthash 返回的值必须表示为机器可读的 multicodec。该格式标准如下:

<protoCode uvarint><value []byte>

multiformats/multicodec 仓库中定义了 protoCodes 及其含义。

该值的编码取决于 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 哈希的示例:

$ swarm hash ens contenthash d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162                                 
> e40101fa011b20d1de9994b4d039f6548d191eb26786769f580809256b4685ef316805265ea162

回退

为了支持那些将 IPFS 或 Swarm hash 存储在 content 字段中的名称,必须设立一个宽限期,为那些名称的持有人提供时间来更新他们的名称。如果一个解析器不支持 multihash 接口,它必须检查是否支持 content 接口。如果支持,则该字段的值应以上下文相关的方式处理并解析。该状态必须保持到 2019 年 3 月 31日。

实现

为了支持 contenthash,已经开发了一个新的解析器,可以在 这里 找到,你也可以在下面找到这个智能合约:

编码和解码 contenthash 已经通过多种语言来实现:

版权

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

转载本站内容请注明出处和链接。咨询 ENS 问题或加入 ENS 中文社区请联系 我们