在去中心化的互联网世界中,以太坊域名服务(ENS)扮演着至关重要的角色,它将复杂难记的以太坊地址(如0x742d35Cc6634C0532925a3b844Bc9e7595f8dDee)转化为易于人类理解和记忆的域名(如 alice.eth),而ENS实现这一核心功能的基础,便是其注册表(Registry)的巧妙设计,本文将深入探讨ENS注册表的存储机制,揭示它是如何成为域名世界坚实基石的。
ENS注册表:什么?为什么?
我们需要明确ENS注册表是什么,ENS注册表是一个部署在以太坊区块链上的智能合约,它维护了一个全局的中央数据库,记录了哪些域名是可用的,以及每个已注册域名的关键信息,最重要的是其所有者和解析器。
- 所有者(Owner):域名的当前所有者,拥有对该域名进行转让、续费、设置子域名等控制权。
- 解析器(Resolver):负责将域名解析为其对应的各种记录(如以太坊地址、IPFS哈希、文本记录等)的智能合约,没有解析器,域名只是一个空壳。
ENS注册表之所以重要,是因为它提供了域名的权威性来源,当您查询一个ENS域名时,首先就会查询注册表,以确认该域名的所有者是谁,以及应该向哪个解析器请求具体的记录信息。
核心存储:数据结构的设计哲学
ENS注册表的核心在于其数据结构的设计,它需要在保证高效查询的同时,最小化链上存储成本,因为以太坊区块链的存储是相对昂贵的。
ENS注册表主要使用了两种核心的数据结构来存储信息:
-
名称哈希(Namehash):
- 问题:域名是可读的字符串(如 "alice.eth" 或 "bob.alice.eth"),而区块链更适合处理固定长度的字节串。
- 解决方案:ENS引入了
namehash算法,该算法递归地将域名字符串转换为一个固定长度(32字节)的哈希值。- 空字符串的
namehash为0x0000000000000000000000000000000000000000000000000000000000000000。 - "eth"的
namehash是特定值。 - "alice.eth"的
namehash是基于"eth"的namehash和"alice"的哈希计算得出的。
- 空字符串的
- 优势:名称哈希使得域名的存储和查询非常高效,且避免了字符串匹配的开销,它也构建了一种层次化的命名空间,使得子域名的管理可以独立于父域名(在某种程度上)。
-
映射(Mapping):
- ENS注册表内部使用了一个关键的
mapping数据结构:mapping(bytes32 => RegistrarRecord)。 - 这里的
bytes32就是域名的namehash值。 RegistrarRecord是一个结构体,定义了该域名对应的注册信息,主要包括:owner address:域名所有者的地址。resolver address:域名解析器的地址。ttl uint64:该域名记录的生存时间(Time To Live),用于缓存控制,表示记录可以被缓存的最长时间,0表示永不缓存或总是查询最新。
- 工作原理:当用户注册一个域名时,注册表合约会将该域名的
namehash作为键,将包含所有者、解析器等信息的RegistrarRecord作为值,存储到这个
- ENS注册表内部使用了一个关键的








