本文将用最通俗的语言拆解 ENS 以太坊域名服务 的核心概念,帮助开发者与普通用户 10 分钟看懂域名注册、解析原理与智能合约交互流程。什么是 ENS?
ENS 全称 Ethereum Name Service(以太坊域名服务),是运行在以太坊主网和各大测试网上的去中心化命名系统。它将「记忆困难」的 42 位十六进制地址转化为人类友好的 .eth 域名,例如把 0x1234...5678 映射为 alice.eth,大幅降低链上转账、合约交互的门槛。
与传统 DNS 相比,ENS 继承了去中心化、抗审查、资产可交易的 Web3 特性,同时在智能合约层面提供反向解析,允许你将头像、社交账号信息永久绑定到一个地址。
ENS 与 DNS 的关键差异
所有权形式
- ENS 的
.eth由链上 NFT 表示,用户掌握私钥即可迁移、出售; - DNS 的
.com等传统域名由中心化注册局托管。
- ENS 的
解析可靠性
- ENS 解析结果 100% 链上可查,任何人都可以运行节点验证;
- DNS 可能因服务器故障或审查而失效。
扩展性
- ENS 可通过 子域名 无限延展,无需额外平台审批。
- 示例:拥有
alice.eth即可免费生成pay.alice.eth、blog.alice.eth,并设定各自解析地址。
ENS 整体架构:2 个核心合约
| 层级 | 作用 | 关键接口 |
|---|---|---|
| ENS 注册表 (Registry) | 记录每个域名的所有者、解析器、TTL(缓存时间) | setSubnodeOwner()、setResolver()、setTTL() |
| 解析器 (Resolver) | 把「域名」翻译成「链上资源」,例如 ETH 地址、IPFS 内容哈希 | addr()、contenthash()、text() |
两条最小交互流程
正向解析
- 查询注册表,找到负责
foo.eth的 Resolver 地址; - 调用 Resolver 的
addr(foo.eth),返回 ETH 地址。
- 查询注册表,找到负责
反向解析
- 内置的反向注册表 (Reverse Registrar) 将 0x 地址反向解析为规范化 ENS 域名;
- 钱包即可展示「来自 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:从竞拍到永久注册
- 5 天竞拍期(历史阶段,2019 年前)
出价 + 公开揭标,先到先得。 即时注册(永久注册器,2019 起)
- 直接在 ENS Manager 输入想要的名称;
- 支持 年费/永久续费 模式,费用直接销毁 ETH;
- 完成后即获得可交易的 ERC-721 域名 NFT。
ENS 的 5 大高阶玩法
- 资产名片
把 Twitter、Telegram、Email 写入text(),钱包自动展示社交身份。 - 邮件 & Web3 网站
contenthash()绑定 IPFS CID,配合 Brave、Opera、ENS 网关即可访问alice.eth个人主页。 - 子域名自动化空投
游戏项目在合约里为玩家批量创建子域名,直接空投门票 NFT。 - 批量收款
DAO 用donate.dao.eth统一收款,解析器多地址指向平台地址 + 社区财库,后续前端即可一键切换。 - 防地址更换
更新 ENS 解析器无需把新地址发消息给所有朋友,系统自动生效。
快速开始实践
场景 1:普通用户注册域名
- 打开 ENS Manager,连接钱包;
- 搜索
yourname.eth,确认可注册; - 选择租期(1 年到永久),钱包签名并支付费用;
- 在「Records」中添加解析信息,例如:
• ETH 地址:你的冷钱包
• BTC 地址:你的比特币地址
• Avatar: your-avatar.url - 点「Set」,再确认一次交易。即刻生效!
场景 2:DApp 开发者集成 ENS
前端三步接入:
- 安装:
npm i @ENSdomains/ensjs 初始化:
import ENS from '@ensdomains/ensjs' const ens = new ENS({ provider, ensAddress: registryAddress })解析:
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 地址。