以太坊ENS注册表的存储机制解析

博主:neragonerago 2026-09-16 05:09:40 6

在去中心化互联网的生态中,以太坊域名系统(Ethereum Name Service, ENS)扮演着“区块链上的DNS”角色,它将人类可读的域名(如alice.eth)映射到以太坊地址、内容哈希(如IPFS)或其他区块链资源,而ENS的核心枢纽——注册表(Registry),则是整个系统的“数据基石”,负责管理域名的所有权、层级关系及解析器关联,本文将深入解析ENS注册表的存储机制,揭示其如何通过智能合约与区块链状态实现去中心化的域名管理。

以太坊ENS注册表的存储机制解析

注册表:ENS的“中央索引”

ENS注册表本质上是一个部署在以太坊区块链上的智能合约(主网地址为0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e),其核心功能是维护一个全局的“域名-数据”映射表,与传统DNS的 centralized 数据库不同,注册表的所有数据都存储在以太坊的状态存储中,由全节点共同维护,具备透明、防篡改、去中心化的特性。

注册表的核心设计目标是:

  1. 层级化管理:支持类似DNS的层级域名结构(如subdomain.example.eth);
  2. 所有权控制:确保域名的所有者(owner)拥有唯一修改权限;
  3. 动态解析:通过关联“解析器(Resolver)合约”,将域名映射到任意类型的数据(地址、文本、哈希等)。

注册表的核心数据结构

注册表合约的存储逻辑围绕一个核心的mapping展开,其结构可简化为:

mapping(bytes32 => Record) public records;
  • bytes32:域名的“名称哈希(Namehash)”,用于将人类可读的域名转换为固定长度的哈希值,作为存储的键;
  • Record:结构体,存储域名的核心数据,包含三个关键字段:
struct Record {
    address owner;      // 域名所有者地址
    address resolver;   // 关联的解析器合约地址
    uint64 ttl;         // 解析记录的缓存时间(秒,0表示不缓存)
}

名称哈希(Namehash):层级域名的“唯一标识”

ENS通过名称哈希算法将层级域名转换为bytes32格式的哈希,作为mapping的键,该算法的规则是:

  • 根域名(如.eth)的namehash0x0000000000000000000000000000000000000000000000000000000000000000(32字节的零);
  • 子域名的namehash通过递归计算:namehash(subdomain.example.eth) = keccak256(abi.encodePacked(namehash(example.eth), keccak256(bytes('subdomain'))))
  • ethnamehash0x93cdeb708b7545dc66ab5dcbbg7a4be66c1d1a0b6c7a8c1d1a0b6c7a8c1d1a0b6(简化示例);
  • alice.ethnamehashkeccak256(abi.encodePacked(namehash(eth), keccak256(bytes('alice'))))

这种设计实现了:

  • 层级隔离:不同层级的域名哈希唯一,避免冲突;
  • 存储高效:用固定长度的哈希替代长字符串,节省链上存储空间。

Record结构体:域名的“三元组”

Record是注册表存储的核心数据单元,包含三个关键信息:

(1)所有者(owner)

域名的“拥有者”,可以是外部账户(EOA)或智能合约,所有者拥有对域名的绝对控制权,包括:

  • 修改解析器(setResolver);
  • 更新TTL(setTTL);
  • 转移所有权(setOwner)。

所有者权限通过以太坊的签名验证机制保障,只有使用owner私钥签名的交易才能修改对应域名的记录。

(2)解析器(resolver)

解析器是一个独立的智能合约,负责将域名映射到具体数据,注册表本身不存储域名对应的地址或内容,而是通过解析器实现“按需解析”。

  • alice.eth需要映射以太坊地址,其解析器需实现addr()函数,返回0x...地址;
  • 若需要映射IPFS内容,解析器需实现contenthash()函数,返回bzz://ipfs://哈希。

解析器的灵活性是ENS的核心优势

The End

发布于:2026-09-16,除非注明,否则均为区块链社区- 欧亿APP下载原创文章,转载请注明出处。