在去中心化的互联网世界中,以太坊域名服务(ENS)扮演着至关重要的角色,它将复杂难记的以太坊地址(如0x742d35Cc6634C0532925a3b844Bc9e7595f8dDee)转化为易于人类理解和记忆的域名(如 alice.eth),而ENS实现这一核心功能的基础,便是其注册表(Registry)的巧妙设计,本文将深入探讨ENS注册表的存储机制,揭示它是如何成为域名世界坚实基石的。
ENS注册表:什么?为什么?
我们需要明确ENS注册表是什么,ENS注册表是一个部署在以太坊区块链上的智能合约,它维护了一个全局的中央数据库,记录了哪些域名是可用的,以及每个已注册域名的关键信息,最重要的是其所有者和解析器。

ENS注册表之所以重要,是因为它提供了域名的权威性来源,当您查询一个ENS域名时,首先就会查询注册表,以确认该域名的所有者是谁,以及应该向哪个解析器请求具体的记录信息。
核心存储:数据结构的设计哲学
ENS注册表的核心在于其数据结构的设计,它需要在保证高效查询的同时,最小化链上存储成本,因为以太坊区块链的存储是相对昂贵的。
ENS注册表主要使用了两种核心的数据结构来存储信息:
名称哈希(Namehash):
namehash算法,该算法递归地将域名字符串转换为一个固定长度(32字节)的哈希值。namehash为0x0000000000000000000000000000000000000000000000000000000000000000。namehash是特定值。namehash是基于"eth"的namehash和"alice"的哈希计算得出的。映射(Mapping):
mapping数据结构:mapping(bytes32 => RegistrarRecord)。bytes32就是域名的namehash值。RegistrarRecord是一个结构体,定义了该域名对应的注册信息,主要包括:owner address:域名所有者的地址。resolver address:域名解析器的地址。ttl uint64:该域名记录的生存时间(Time To Live),用于缓存控制,表示记录可以被缓存的最长时间,0表示永不缓存或总是查询最新。namehash作为键,将包含所有者、解析器等信息的RegistrarRecord作为值,存储到这个mapping中,当查询域名信息时,合约会根据输入的域名计算其namehash,然后在mapping中查找对应的RegistrarRecord,返回相关信息。存储的位置与特性
ENS注册表的所有数据都直接存储在以太坊区块链上,是其智能合约的存储状态中。
namehash和紧凑的mapping结构,尽可能优化了存储效率,每个域名的注册和所有者/解析器的变更都会产生一定的存储成本(体现在 gas 中)。注册表与其他ENS组件的协同
ENS注册表并非孤立存在,它与ENS生态系统中的其他组件紧密协作:
owner地址。resolve()方法(或类似方法),获取具体的记录值,解析器可以是通用的,也可以是为特定域名定制的,这为ENS的可扩展性提供了可能。setReverseRecord()方法(或类似机制)将地址与域名关联起来。以太坊ENS注册表通过精心设计的namehash算法和mapping数据结构,将复杂的域名信息高效、安全地存储在以太坊区块链上,它作为ENS系统的核心和权威数据源,记录了每个域名的所有者和解析器信息,为去中心化命名提供了坚实的基础,理解注册表的存储机制,不仅有助于我们更深入地认识ENS的工作原理,也体现了以太坊智能合约在处理复杂状态管理方面的巧妙设计,随着Web3的发展,ENS及其注册表的重要性将愈发凸显,成为连接人类可读名称与机器可读地址的关键桥梁。