复制成功

分享至

主页 > 比特币 >

以 ENS 为例深度分析 Web3 域名系统的技术设计

2022.12.09

原文标题:《Buidler DAO:以 ENS 为例深度分析 Web3 域名系统的技术设计》

原文作者:@axtrur,Buidler DAO 研究员

以 ENS 为例深度分析 Web3 域名系统的技术设计

图片来源:由 无界版图AI 工具生成

Web3 域名系统,简而言之就是基于区块链的分布式、去中心化的命名系统,与 DNS(互联网名称服务)类似,将地址(钱包地址或智能合约地址)解析成可读性的名称,本文以 ENS 为例从整体架构到合约细节,深度剖析 web3 域名系统的设计。


ENS 前置概念


域名层级

类似 DNS,ENS 域名层级同样分为

根域名,即""域名

一级域名,类似.com,.cn,在 ens 中有.eth 和.reverse( 用来记录反向解析,后面会提到 ) 

二级域名,即用户注册的域名,比如 axtrur.eth 

三级域名,用户注册了二级域名之后,可以创建或修改该二级域名下的三级域名,比如 app.axtrur.eth

NameHash 算法

由于智能合约直接与可读的域名进行交互效率低,因此 ENS 采用固定长度的 256 位加密哈希作为域名记录。namehash 是一个递归算法,可从任意域名的 NameHash 值推导出任意子域名的值,而无需知道原域名的真实文本字符串,同时符合域名的多层级特性。

Namehash("") = "0x0000000000000000000000000000000000000000000000000000000000000000" Namehash("eth") = keccak256(Namehash(""), keccak256("eth")) Namehash("axtrur.eth") = keccak256(Namehash("eth"), keccak256("axtrur")) Namehash("app.axtrur.eth") = keccak256(Namehash("axtrur.eth"), keccak256("app"))

node

在 ens 中,用户注册的域名比如 axtrur.eth,会采用 namehash 算法生成的哈希 node 去记录链上数据,后文中我们将提到的 node 理解为一个域名名称比如 axtrur 即可,关于 ENS 名称的处理请参考 https://ensuser.com/docs/contract-api-reference/name-processing.html


ENS 模块概念


以 ENS 为例深度分析 Web3 域名系统的技术设计

注册器合约(绿色部分):负责分配名称的合约,有正向注册器,反向注册器,DNS 注册器。

解析器合约(蓝色部分):负责记录域名映射关系的合约,分正向、反向解析器,其中正向解析器合约也可自定义实现:

正向解析(主网上有默认的公共解析器合约):负责记录域名所绑定的内容,即域名的 nameNode(比如 axtrur.eth,app.axtrur.eth)到(包括不限于 name, addr, txt, contenthash 等内容)的解析,可设置各类币种的钱包地址,还可以设置 IPFS 的内容哈希,甚至记录邮箱等第三方账号作为文本记录。

反向解析(主网上有默认的反向解析器合约):负责记录钱包地址所绑定的域名,即反向域名的 nameNode(比如 {{钱包地址}}.addr.reverse) 到 域名名称的解析

根合约:是根域名的 owner,拥有一级域名的管理权限

控制器合约:官网的注册入口合约(如果需要实现不同的玩法合约,则统一归为控制器合约模块,需要将对应注册器合约地址设置给注册器,才有权限操作注册器进行域名 NFT 注册与记录反向解析)

价格预言机:ENS 定价采用的是 U 本位(usdt),所以需要 USDT 预言机来计算某一时刻的注册费的 eth 换算值,ENS 主网上的注册费为:

长度为 5+ 个字符的域名:每年支付 5 美元

长度为 4 个字符的域名:每年支付 160 美元

长度为 3 个字符的域名:每年支付 640 美元

DNSSEC 预言机:DNS 安全扩展预言机合约,负责校验证明 web3 域名的所有权和有效性


ENS 模块解析


注册表合约 (EnsRegistry.sol)

以 ENS 为例深度分析 Web3 域名系统的技术设计

注册表是 ENS 最核心的合约,上图为注册表合约内部的 records 结构,维护着域名层级 node 对应的 owner、解析器、ttl 信息注册表是 ENS 最核心的合约,上图为注册表合约内部的 records 结构,维护着域名层级 node 对应的 owner、解析器、ttl 信息。

以 ENS 为例深度分析 Web3 域名系统的技术设计

除了注册表信息 records 维护,合约还维护 owner 的委托管理者信息 operators,owner 可以通过添加设置委托管理者地址(可以是用户地址,也可以是合约地址)来共同管理域名信息 合约中相关管理设置接口(比如设置解析器,ttl,以及创建和修改子域名),都会通过修饰器`authorised(node)`来限制调用权限;该修饰器将判断该接口的交易请求者是否为当前域名的 owner,或者委托管理者地址,保证了仅有域名的 owner 或委托者才有创建下一级子域名的权限。同时这里部署初始化的时候将`」」`根域名的 node 的 owner 设置为部署者,只有这样,部署者才能将根域名的 owner 设置给 Root 合约根合约。

以 ENS 为例深度分析 Web3 域名系统的技术设计

免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

加⼊OKEx全球社群

和全球数字资产投资者交流讨论

扫码加入OKEx社群

相关推荐

industry-frontier