ZBLOG

解锁以太坊域名,一文读懂ENS解析原理与实践

在去中心化的世界里,一长串由字母和数字组成的以太坊地址(如 0x742d35Cc6634C0532925a3b844Bc454e4438f44e)不仅难以记忆,还容易输错,为了解决这个问题,以太坊域名系统(Ethereum Name Service, ENS)应运而生,它就像互联网上的DNS,为复杂的以太坊地址提供了易于人类理解的别名,vitalik.eth,ENS是如何将这个看似简单的域名解析回对应的以太坊地址或其他标识符的呢?本文将详细解析ENS的工作原理。

什么是ENS?

简单回顾一下ENS,ENS是一个基于以太坊区块链的分布式、开放和可扩展的命名系统,它的核心功能是将人类可读的名称(如 alice.eth)映射到机器可读的标识符上,最常见的就是以太坊地址,但也可以是其他类型的地址,如比特币地址、IPFS内容标识符(CID)甚至是文本记录。

ENS由两个主要部分组成:

  1. 注册器(Registrar):负责管理特定顶级域名(TLD)的注册,.eth.eth TLD的注册器通常是一个智能合约,它规定了域名的注册规则(如拍卖、价高等)。
  2. 解析器(Resolver):负责将已注册的域名解析为其对应的记录(如地址、文本等),每个域名都可以关联一个解析器合约。

ENS解析的核心流程

ENS解析过程本质上是智能合约之间的交互,查询者通过节点(如MetaMask、Infura或自己运行的节点)发起请求,最终获取目标记录,以下是详细的解析步骤:

域名规范化(Normalization)

在解析之前,ENS首先会对输入的域名进行规范化处理,这包括:

  • 将所有字母转换为小写。
  • 将Unicode字符转换为ASCII兼容编码(ACE)格式(如果适用)。
  • 其他标准化操作,以确保不同形式表示的同一个域名能被正确识别。 Alice.ETH 会被规范化为 alice.eth

确定解析器(Finding the Resolver)

ENS采用分层结构,类似于DNS,解析器是通过查询域名的“所有权合约”(即“记录合约”)来确定的,具体步骤如下:

  • 从右向左查找:解析过程从域名的最右边部分(顶级域名,TLD)开始,逐步向左子域名推进。
    • 查询TLD解析器:查询器会向.eth TLD的注册合约(如 ETHRegistrarController)发起请求,询问 alice.eth 这个域名的解析器地址是什么,TLD注册合约会返回该域名的“记录合约”地址,或者直接返回解析器地址(取决于注册器和解析器的设置)。
    • 查询子域名解析器:如果域名是更复杂的结构,如 sub.alice.eth,查询器会先查询 alice.eth 的记录合约,获取其子域解析器设置。alice.eth 设置了特定的子域解析器,则使用该解析器;否则,继续向上查找,直到找到负责该层级的解析器。

执行解析(Resolving the Name)

一旦确定了与域名关联的解析器合约地址,查询器就会向该解析器合约发起一个特定的调用,请求获取所需的记录类型。

  • 解析器接口:解析器合约必须实现 ENSResolver 接口,该接口定义了标准的解析方法,如 resolve(bytes name, bytes calldata data) 或特定类型的便捷方法如 addr(bytes32 node)
  • 请求记录:查询器会指定要查询的“节点标识符”(node),这是通过对规范化后的域名进行SHA-3哈希计算得到的32字节值(bytes32)。alice.eth 的节点标识符是 keccak256(bytes("alice.eth"))
  • 返回结果:解析器合约根据节点标识符和请求的记录类型(如地址、文本等),返回对应的值,如果请求的是地址,解析器就会返回 alice.eth 对应的以太坊地址。

返回结果给用户/应用

解析器返回的结果最终会通过节点传递给发起查询的用户钱包(如MetaMask)或应用程序,应用程序可以根据这个结果进行后续操作,例如向该地址发送ETH或代币。

一个具体的解析示例:解析 alice.eth

让我们以解析 alice.eth 为以太坊地址为例,走一遍完整流程:

  1. 输入域名:用户输入 alice.eth
  2. 规范化:ENS将其规范化为 alice.eth(小写)。
  3. 计算节点标识符:计算 node = keccak256(bytes("alice.eth")),得到一个32字节的哈希值。
  4. 查找TLD解析器
    • 查询器向以太坊区块链上的 .eth TLD注册合约查询 node 对应的解析器地址。
    • .eth 注册合约返回 alice.eth 域名记录合约的地址(或者直接返回解析器地址,如果它本身也处理解析)。
  5. 查找域名解析器
    • 查询器向 alice.eth 的记录合约查询其关联的解析器地址。
    • 记录合约返回 alice.eth 当前配置的解析器合约地址(一个公共解析器合约或用户自定义的解析器合约)。
  6. 执行解析
    • 查询器向上一步获取的解析器合约发起 addr(node) 调用。
    • 解析器合约根据 node 查询其内部存储,找到 alice.eth 对应的以太坊地址,并将其返回。
  7. 获取结果:查询器收到以太坊地址,MetaMask或其他应用显示该地址,用户可以使用它进行交易。

ENS解析的关键特性

  • 去中心化:ENS运行在以太坊区块链上,没有单一的控制机构,域名注册和解析都通过智能合约自动执行。
  • 可扩展性:通过支持自定义解析器,ENS可以实现更复杂的解析逻辑,如动态更新记录、加密解析(仅授权方可见)等。
  • 灵活性:不仅可以解析以太坊地址,还可以解析其他区块链地址、IPFS、文本记录(如用户简介)、HTTPS证书等。
  • 用户友好:极大改善了以太坊生态的用户体验,使得地址分享和交互变得简单直观。

如何与ENS交互?

  • 注册域名:可以通过ENS官方注册网站(如 app.ens.domains)或集成ENS功能的钱包(如MetaMask)注册.eth或其他支持的TLD域名。
  • 设置解析器:域名所有者可以为其域名设置或更改解析器,以及配置各种记录。
  • 解析域名:大多数现代钱包和DApp已经内置了ENS解析功能,用户只需输入.eth域名即可自动解析。
分享:
扫描分享到社交APP