【区块链 | ENS】以太坊(Ethereum)中的ENS可以解析钱包地址,但ENS架构是什么样的,怎么实现解析功能?

ENS 架构

ENS 有两个主要组件:注册表 和 解析器

ENS 注册表是一个智能合约,该合约维护所有名称和子名称列表,并存储关于每个名称的三个关键信息:

  • 名称的所有者
  • 名称的解析器
  • 名称下所有记录的缓存存活时间(即 TTL)

名称的所有者可以是外部帐户(用户)或智能合约。注册器就是一个拥有顶级名称的智能合约,并按照合约中的规则将该名称的子名称分发给用户。

ENS 注册表中的名称所有者可以:

  • 为名称设置解析器和 TTL
  • 将名称的所有权转让给另一个地址
  • 更改子名称的所有权

ENS 注册表非常简单,它的存在只是为了将名称映射到负责解析这个名称的解析器。

解析器负责将名称转换为地址。只要是符合解析器相关标准的智能合约,都可以在 ENS 中作为解析器程序。通用解析器服务于需求简单的用户,比如不经常更改地址的用户。

每个记录类型(以太坊地址、内容哈希等)都定义了一个或多个方法,解析器必须实现这些方法才能提供这类记录。新的记录类型可以随时通过 EIP 标准化程序进行定义,因此不需要为了支持它们而对 ENS 注册表或现有的解析器进行更改。

在 ENS 中解析一个名称需要两个步骤:首先,询问注册表是哪个解析器负责解析该名称,然后,向该解析器查询解析结果。

在上面的例子中,我们想找到 “foo.eth” 指向的以太坊地址。首先,我们询问注册表是哪个解析器负责解析 “foo.eth” ;然后,我们向该解析器查询 “foo.eth” 的地址。

扫描二维码关注公众号,回复: 14276140 查看本文章

Namehash

智能合约中的资源限制使得直接与可读的名称交互效率低下,因此ENS只使用固定长度的256位加密哈希。为了从名称生成哈希的同时仍然保留其层次性,ENS 使用了名为 Namehash 的算法。例如,“alice.eth” 的 Namehash 为 0x787192fc5378cc32aa956ddfdedbf26b24e8d78e40109add0eea2c1a012c3dec ,Namehash 只是用来在 ENS 内部表示名称。

Namehash 是一个递归过程,可以为任何有效的名称生成唯一的哈希。从任意一个名称的 Namehash 开始(比如 “alice.eth” 的 Namehash)可以推导出任意子名称的 Namehash(比如 “iam.alice.eth” 的 Namehash),而且推导过程中不需要知道或处理 “alice.eth” 这个可读的原始名称。正是这个特性使得 ENS 能够成为一个层次性的系统,且不必在内部处理可读的文本字符串。

在使用 Namehash 进行哈希之前,首先需要借助 UTS-46 标准对名称进行规范化,确保名称中的字母与大小写无关,并禁止使用无效字符。任何对名称进行哈希和解析的操作都 必须 首先对其进行规范化,以确保所有用户获得 ENS 的一致性。

有关 Namehash 和规范化如何工作的详细信息,请参阅后续的文档。

猜你喜欢

转载自blog.csdn.net/qq_28505809/article/details/125289845
今日推荐