ERC-1062: 将 IPFS 哈希形式化为 ENS(以太坊名称服务)解析器
Authors | Phyrex Tsai <phyrex@portal.network>, Portal Network 团队 |
---|---|
Created | 2018-05-02 |
Discussion Link | https://ethereum-magicians.org/t/eip-1062-formalize-ipfs-hash-into-ens-ethereum-name-service-resolver/281 |
简单概要
指定存储在 IPFS 上的资源与 ENS(以太坊命名服务)之间的映射协议。
摘要
以下标准详细说明了如何将 IPFS 加密哈希唯一指纹与 ENS 公共解析器结合使用。 此标准提供了一种获取和设置 IPFS 在线资源到 ENS 解析器的功能。
我们认为,此实现不仅旨在让更多的开发者和社区提供更多的用例,而且还利用人类可读的特性来获得更多的用户采用来访问去中心化资源。 我们认为 IPFS ENS 解析器映射标准是构建未来 Web3.0 服务的基石。
动机
为了构建一个完全去中心化的 Web 服务,有必要拥有一个去中心化的文件存储系统。 这就引出了 IPFS,因为它具有以下三个优点:
- 处理大量数据,并且每个记录都有唯一的加密哈希。
- 由于 IPFS 也基于点对点网络,因此它确实有助于以更安全的方式向用户传递大量数据,并降低数百万的带宽成本。
- IPFS 通过跟踪每个文件的版本历史记录并删除网络中的重复项,以高效的方式存储文件。
这些特性非常适合集成到 ENS 中,并且这些特性使得用户可以轻松地通过 ENS 访问内容,并在普通浏览器中显示。
规范
现在的情况是,IPFS 文件指纹使用 base58,与此同时,以太坊在 API 中使用 hex 来编码二进制数据。 因此,需要一种处理这种情况的方法,不仅需要从 IPFS 传输到以太坊,还需要将其转换回来。
为了解决这些需求,我们可以使用二进制缓冲区来弥合这一差距。 当将 IPFS base58 字符串映射到 ENS 解析器时,首先我们将 Base58 转换为二进制缓冲区,将缓冲区转换为 hex 加密格式,并保存到合约中。 一旦我们想要获取由特定 ENS 表示的 IPFS 资源地址,我们可以首先找到以前存储为 hex 格式的映射信息,将 hex 格式提取到二进制缓冲区,最后将其转换为 IPFS Base58 地址字符串。
基本原理
为了实现该规范,需要 ENS 公共解析器合约中的两种方法,当我们想要将 IPFS 文件指纹存储到合约时,将 Base58 字符串标识符转换为 hex 格式并调用以下 setMultihash
方法:
function setMultihash(bytes32 node, bytes hash) public only_owner(node);
每当用户需要访问 ENS 内容时,我们调用 multihash
方法来获取 IPFS hex 数据,转换为 Base58 格式,并返回 IPFS 资源以供使用。
function multihash(bytes32 node) public view returns (bytes);
测试用例
为了实现从 base58 转换为 hex 格式以及相反格式的方法,使用“multihashes”库来处理该问题。 库链接:https://www.npmjs.com/package/multihashes 为了实现从 IPFS(Base58)转换为 hex 格式的方法:
import multihash from 'multihashes'
export const toHex = function(ipfsHash) {
let buf = multihash.fromB58String(ipfsHash);
return '0x' + multihash.toHexString(buf);
}
为了实现从 hex 格式转换为 IPFS(Base58)的方法:
import multihash from 'multihashes'
export const toBase58 = function(contentHash) {
let hex = contentHash.substring(2)
let buf = multihash.fromHexString(hex);
return multihash.toB58String(buf);
}
实现
该用例可以实现为浏览器扩展程序。 用户可以轻松下载该扩展程序,并且就像我们通常在浏览器中键入 DNS 一样,只需键入 ENS 即可轻松获取去中心化资源。 解决了当前普通人无法轻松访问完全去中心化网站的难题。
可行的实施库:https://github.com/PortalNetwork/portal-network-browser-extension
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Phyrex Tsai <phyrex@portal.network>, Portal Network 团队, "ERC-1062: 将 IPFS 哈希形式化为 ENS(以太坊名称服务)解析器 [DRAFT]," Ethereum Improvement Proposals, no. 1062, May 2018. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1062.