ENS 以太坊域名服务全解析:从架构到实战的快速入门指南

·

本文将用最通俗的语言拆解 ENS 以太坊域名服务 的核心概念,帮助开发者与普通用户 10 分钟看懂域名注册、解析原理与智能合约交互流程。

什么是 ENS?

ENS 全称 Ethereum Name Service(以太坊域名服务),是运行在以太坊主网和各大测试网上的去中心化命名系统。它将「记忆困难」的 42 位十六进制地址转化为人类友好的 .eth 域名,例如把
0x1234...5678 映射为 alice.eth,大幅降低链上转账、合约交互的门槛。

与传统 DNS 相比,ENS 继承了去中心化、抗审查、资产可交易的 Web3 特性,同时在智能合约层面提供反向解析,允许你将头像、社交账号信息永久绑定到一个地址。

ENS 与 DNS 的关键差异

  1. 所有权形式

    • ENS 的 .eth 由链上 NFT 表示,用户掌握私钥即可迁移、出售;
    • DNS 的 .com 等传统域名由中心化注册局托管。
  2. 解析可靠性

    • ENS 解析结果 100% 链上可查,任何人都可以运行节点验证;
    • DNS 可能因服务器故障或审查而失效。
  3. 扩展性

    • ENS 可通过 子域名 无限延展,无需额外平台审批。
    • 示例:拥有 alice.eth 即可免费生成 pay.alice.ethblog.alice.eth,并设定各自解析地址。

ENS 整体架构:2 个核心合约

层级作用关键接口
ENS 注册表 (Registry)记录每个域名的所有者、解析器、TTL(缓存时间)setSubnodeOwner()、setResolver()、setTTL()
解析器 (Resolver)把「域名」翻译成「链上资源」,例如 ETH 地址、IPFS 内容哈希addr()、contenthash()、text()

两条最小交互流程

  1. 正向解析

    1. 查询注册表,找到负责 foo.eth 的 Resolver 地址;
    2. 调用 Resolver 的 addr(foo.eth),返回 ETH 地址。
  2. 反向解析

    1. 内置的反向注册表 (Reverse Registrar) 将 0x 地址反向解析为规范化 ENS 域名;
    2. 钱包即可展示「来自 alice.eth」而非「来自 0x1a2b…」。

Namehash:包裹可阅读域名的 256 位密码

因为智能合约不能高效处理字符串,ENS 使用 Namehash 把人类可读名称映射成固定长度的 Keccak-256 哈希,同时保留层级关系。

示例:

alice.eth → 0x787192fc…3dec  
pay.alice.eth → 0xabcd1234…90ef  

任何客户端都不需要知道「alice.eth」具体字符,仅需基于上一次哈希即可计算子域哈希,因此节省大量 Gas。

为确保大小写不敏感、无零宽字符,官方强制在执行 Namehash 前先用 UTS-46 规范化

注册 .eth:从竞拍到永久注册

  1. 5 天竞拍期(历史阶段,2019 年前)
    出价 + 公开揭标,先到先得。
  2. 即时注册(永久注册器,2019 起)

    • 直接在 ENS Manager 输入想要的名称;
    • 支持 年费/永久续费 模式,费用直接销毁 ETH;
    • 完成后即获得可交易的 ERC-721 域名 NFT。

👉 点此秒查热门未注册.eth 域名,抢注即是首发机会

ENS 的 5 大高阶玩法

  1. 资产名片
    把 Twitter、Telegram、Email 写入 text(),钱包自动展示社交身份。
  2. 邮件 & Web3 网站
    contenthash() 绑定 IPFS CID,配合 Brave、Opera、ENS 网关即可访问 alice.eth 个人主页。
  3. 子域名自动化空投
    游戏项目在合约里为玩家批量创建子域名,直接空投门票 NFT。
  4. 批量收款
    DAO 用 donate.dao.eth 统一收款,解析器多地址指向平台地址 + 社区财库,后续前端即可一键切换。
  5. 防地址更换
    更新 ENS 解析器无需把新地址发消息给所有朋友,系统自动生效。

👉 探索 ENS 解析器模板,免费部署属于你的链上名片

快速开始实践

场景 1:普通用户注册域名

  1. 打开 ENS Manager,连接钱包;
  2. 搜索 yourname.eth,确认可注册;
  3. 选择租期(1 年到永久),钱包签名并支付费用;
  4. 在「Records」中添加解析信息,例如:
    • ETH 地址:你的冷钱包
    • BTC 地址:你的比特币地址
    • Avatar: your-avatar.url
  5. 点「Set」,再确认一次交易。即刻生效!

场景 2:DApp 开发者集成 ENS

前端三步接入:

  1. 安装:npm i @ENSdomains/ensjs
  2. 初始化:

    import ENS from '@ensdomains/ensjs'
    const ens = new ENS({ provider, ensAddress: registryAddress })
  3. 解析:

    const address = await ens.name('alice.eth').getAddress()
    console.log(address) // 0x123...

场景 3:智能合约内链上解析

在 Solidity 合约中引入官方接口:

pragma solidity ^0.8.0;
interface ENS {
    function resolver(bytes32 node) external view returns (address);
}
interface Resolver {
    function addr(bytes32 node) external view returns (address payable);
}

内部用法:

bytes32 namehash = 
    0x787192fc5378cc32aa956ddfdedbf26b24e8d78e40109add0eea2c1a012c3dec;
address ensAddr = 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e;
ENS ens = ENS(ensAddr);
address target = Resolver(ens.resolver(namehash)).addr(namehash);

一套模版即可让合约自动信任 ENS 域名,无需关注底层地址变更。

常见疑问 FAQ

Q1:注册 .eth 需要每年续费吗?
A1:可选择年费(延续传统)或一次性缴纳高额「永久注册费」,永久费用约等于 50 年租金,两种方式可自由切换。

Q2:ENS 会打包邮箱、电话等隐私信息在链上吗?
A2:所有记录都公开透明,但可仅填写“公开展示字段”,敏感信息用加密笔记/IPFS 存储再分享密钥即可。

Q3:转让域名 NFT 会一起转移子域名吗?
A3:不会。子域名独立存在,只要父域所有者手动 setSubnodeOwner 即可完成二次分配。

Q4:我已有 DNS 域名,能否绑定 ENS?
A4:可以。通过 DNSSEC 集成功能,把已有的 your-name.xyz 解析到 ENS 上,让 Web2 用户也能输入域名打开 DApp。

Q5:ENS 支持除 ETH 以外的链吗?
A5:会的。解析器已原生支持 BTC、LTC、DOGE、DOT、XMR 等 100+ 链地址,只需找到对应 coinType 并填入。

Q6:如何给子域名设置独立解析器?
A6:在 ENS 管理器里选择「Subdomains」> 新建并勾选「自定义解析器」。例如把 blog.alice.eth 指向去中心化博客合约地址。

结尾:ENS 正在定义的不仅是域名,更是链上身份

从缩短地址、到社交名片、再到 DAO 资产生命周期管理,ENS 以太坊域名服务 正在把传统互联网最基础的 DNS 层重构为 Web3 数字身份层
任何开发者只需 200 行代码就能内化链上域名解析,普通用户则能通过 .eth 拥有一个永不过期、全球唯一、像 NFT 一样自由流通的身份通证。现在就去 ENS Manager 领取你的专属域名,把它写进钱包,写进合约,从此告别那串冷冰冰的 HEX 地址。