ENS(Ethereum Name Service)是以太坊域名服务,是一个基于以太坊区块链的分布式、开放和可扩展的命名系统。
ENS的工作是将可读的域名(比如"alice.eth")解析为计算机可以识别的标识符,如以太坊地址、内容的散列、元数据等。ENS还支持"反向解析",这使得将元数据(如规范化域名或接口描述)与以太坊地址相关联成为可能
- supportENS.sol
- push2ENS.sol
Refer to https://github.com/alexvansande/ENSTools
ENS JavaScript 库:
- ethereum-ens,由ENS开发者维护
- ethjs-ens
- ethers.js (ethers.js中文文档)
- web3.js:不支持反向解析
ENS主要有两个组件:
- 注册表:是一个智能合约,该合约维护所有域名和子域名列表
- 解析器:是一个智能合约,负责将 ENS 域名转换为地址或其他类型的哈希和文本数据,合约内保存着这些解析记录
注册表负责将域名映射到负责解析这个域名的解析器
解析器负责将域名转换为地址
- 对将要解析的域名进行规范化和哈希
- 规范化:对域名进行规范化和有效性检查(比如将fOO.eth 规范为 foo.eth)并屏蔽包含下划线等禁止字符的域名
- 哈希:Namehash 是一个递归过程,可以为任何有效的域名生成唯一的哈希
- 在 ENS 注册表上调用
resolver()
,并将第 1 步输出的哈希作为参数传递,然后resolver()
会返回负责解析这个域名的解析器的地址。- ENS 注册表是 ENS 系统中的核心合约,所有的 ENS 查询都从注册表开始。注册表负责管理域名列表,记录每个域名的所有者、解析器和 TTL ,并允许域名的所有者对这些数据进行更改
- 使用 resolver 接口 ,在第 2 步返回的解析器地址上调用
addr()
,并将第1步输出的哈希作为参数传递。
- 安装依赖
yarn
- 执行测试脚本
node src/ethers-ens/index.js