在去中心化的世界里,一长串由字母和数字组成的以太坊地址(如 0x742d35Cc6634C0532925a3b844Bc454e4438f44e)不仅难以记忆,还容易输错,为了解决这个问题,以太坊域名系统(Ethereum Name Service, ENS)应运而生,它就像互联网上的DNS,为复杂的以太坊地址提供了易于人类理解的别名,vitalik.eth,ENS是如何将这个看似简单的域名解析回对应的以太坊地址或其他标识符的呢?本文将详细解析ENS的工作原理。
什么是ENS
简单回顾一下ENS,ENS是一个基于以太坊区块链的分布式、开放和可扩展的命名系统,它的核心功能是将人类可读的名称(如 alice.eth)映射到机器可读的标识符上,最常见的就是以太坊地址,但也可以是其他类型的地址,如比特币地址、IPFS内容标识符(CID)甚至是文本记录。
ENS由两个主要部分组成:
- 注册器(Registrar):负责管理特定顶级域名(TLD)的注册,
.eth。.ethTLD的注册器通常是一个智能合约,它规定了域名的注册规则(如拍卖、价高等)。 - 解析器(Resolver):负责将已注册的域名解析为其对应的记录(如地址、文本等),每个域名都可以关联一个解析器合约。
ENS解析的核心流程
ENS解析过程本质上是智能合约之间的交互,查询者通过节点(如MetaMask、Infura或自己运行的节点)发起请求,最终获取目标记录,以下是详细的解析步骤:
域名规范化(Normalization)
在解析之前,ENS首先会对输入的域名进行规范化处理,这包括:
- 将所有字母转换为小写。
- 将Unicode字符转换为ASCII兼容编码(ACE)格式(如果适用)。
- 其他标准化操作,以确保不同形式表示的同一个域名能被正确识别。
Alice.ETH会被规范化为alice.eth。
确定解析器(Finding the Resolver)
ENS采用分层结构,类似于DNS,解析器是通过查询域名的“所有权合约”(即“记录合约”)来确定的,具体步骤如下:
- 从右向左查找:解析过程从域名的最右边部分(顶级域名,TLD)开始,逐步向左子域名推进。
- 查询TLD解析器:查询器会向
.ethTLD的注册合约(如ETHRegistrarController)发起请求,询问alice.eth这个域名的解析器地址是什么,TLD注册合约会返回该域名的“记录合约”地址,或者直接返回解析器地址(取决于注册器和解析器的设置)。 - 查询子域名解析器:如果域名是更复杂的结构,如
sub.alice.eth,查询器会先查询alice.eth的记录合约,获取其子域解析器设置。alice.eth设置了特定的子域解析器,则使用该解析器;否则,继续向上查找,直到找到负责该层级的解析器。
- 查询TLD解析器:查询器会向
执行解析(Resolving the Name)
一旦确定了与域名关联的解析器合约地址,查询器就会向该解析器合约发起一个特定的调用,请求获取所需的记录类型。
- 解析器接口:解析器合约必须实现
ENSResolver接口,该接口定义了标准的解析方法,如resolve(bytes name, bytes calldata data)或特定类型的便捷方法如addr(bytes32 node)。 - 请求记录:查询器会指定要查询的“节点标识符”(node),这是通过对规范化后的域名进行SHA-3哈希计算得到的32字节值(
