原文标题:《Buidler DAO:以 ENS 为例深度分析 Web3 域名系统的技能打算》
原文作家:@axtrur,Buidler DAO 商量员
图片开首:由 无界幅员AI 用具生成
Web3 域名系统,简而言之便是基于区块链的散布式、去中心化的定名系统,与 DNS(互联网称呼就业)雷同,将地址(钱包地址或智能合约地址)解析成可读性的称呼,本文以 ENS 为例从举座架构到合约细节,深度理解 web3 域名系统的打算。
世界杯赌博zi82点com赃赃皇冠体育
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 模块成见注册器合约(绿色部分):认真分拨称呼的合约,有正向注册器,反向注册器,DNS 注册器。
皇冠客服飞机:@seo3687
解析器合约(蓝色部分):认真记载域名映射联系的合约,分正向、反向解析器,其中正向解析器合约也可自界说收场:
正向解析(主网上有默许的环球解析器合约):认真记载域名所绑定的内容,即域名的 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 最中枢的合约,上图为注册表合约里面的 records 结构,选藏着域名层级 node 对应的 owner、解析器、ttl 信息注册表是 ENS 最中枢的合约,上图为注册表合约里面的 records 结构,选藏着域名层级 node 对应的 owner、解析器、ttl 信息。
除了注册表信息 records 选藏,合约还选藏 owner 的奉求治理者信息 operators,owner 不错通过添加建筑奉求治理者地址(不错是用户地址,也不错是合约地址)来共同治理域名信息 合约中有关治理建筑接口(比如建筑解析器,ttl,以及创建和修改子域名),齐领略过修饰器`authorised(node)`来戒指调用权限;该修饰器将判断该接口的来往请求者是否为面前域名的 owner,或者奉求治理者地址,保证了仅有域名的 owner 或奉求者才有创建下一级子域名的权限。同期这里部署运行化的时候将`」」`根域名的 node 的 owner 建筑为部署者,惟有这么,部署者才能将根域名的 owner 建筑给 Root 合约根合约。
(Root.sol)根合约是根域名的 owner,同期根合约动作根域名的 owner,有权限调用注册表合约的 setSubnodeOwner 接口,将域名.eth 的 owner 指向基础注册器合约。
基础注册器合约(BaseRegistrarImplementation.sol)由于 Root 合约将域名.eth 的 owner 指向基础注册器合约(又称正向注册器合约),从而基础注册器领有.eth 下面的二级域名的建筑权限,使得用户不错通过基础注册器合约进行域名注册;同期该注册器合约承袭了 ERC721 条约圭臬,这也便是为什么 ENS 域名不错动作 NFT 在来往市集比如 opensea 上贸易的原因。除此除外,基础注册器合约还选藏着每个域名的落伍时辰 expiries,注册器为每个域名建筑了 90 天的保护期,当域名落伍后且在保护期内,域名领有者不错通过调用续期 renew 接口进行续期,要是跨越了保护期,则需要重新注册(这里重新注册会先断送 NFT 在重新 mint)。同期在 ENS 打算中,注册器合约(不论是正向注册器照旧反向注册器)基本上齐有 controllers 结构,选藏着委果的 controller 注册器合约,惟有委果合约才可进行调用。
戒指器合约(ETHRegsiterController.sol)用户在官网中,将要注册的域名等注册信息传给戒指器合约,戒指器合约通过预言机计较该域名的价钱,同期将域名通过 namehash 转成 node 后传给基础注册器进行域名 NFT 的注册,同期将域名有心境册表信息写入注册表合约完成注册,同期域名的 owner 不错在官网通过注册表合约进行治理操作,官网中的注册页面如下:
中枢注册历程:
ENS 注册接收「请求 - 提交」两阶段注册模式 ENS 注册接收「请求 - 提交」两阶段注册模式,为什么需要两阶段提交?咱们知谈以太坊节点从来往池 pool 中捞取来往是会按照来往给的 gas 费进行优先级排序;在注册者佩戴待注册域名构造的来往提交上链前,在通盘集中是公开透明的,坏心的挫折者不错监听并解析此类待上链来往,并构造疏导域名的注册来往,通过升迁 gas 费的时势抢先上链注册戒指器合约注册。
为了驻扎此类域名抢注问题,ENS 接收了先请求,后提交的注册模式。在第一阶段并不径直提交域名,而是先调用
makeCommitment 接口凭证待请求域名 name、待请求地址 owner、随即值 secret 进行哈希青年景一条畸形的 commitment 后,通过 commit 提交上链。
提交阶段的 commitment 记载着面前时辰戳,同期 ENS 建筑 commitment 的有用期为 60s 到 86400s 之间;第二阶段注册的时候书籍中重新计较 commitment,判断是否与第一阶段提交的一致,同期查验 Commitment 的有用期,保证跟第一阶段的链上处理时辰终止 1 分钟以上,保证记载了第一阶段来往的区块经过了至少 5 个后续区块的证据。(此时挫折者天然不错得到域名值,但由于惟有第一阶段的 owner 需要根第二阶段的 owner 一致才能生成一致的 commitment,从而幸免了被抢注的风险)
用户在官网的第二阶段注册历程本色上是代码中的 resolver != address(0) 逻辑分支,因为 ENS 默许会将注册的 resolver 解析器建筑为默许的环球正向解析器(publicResolver 后头会提到),这里为什么需要将域名注册给合约自己然后在转动给用户呢?因为上文中咱们提到注册表合约中惟有 owner 或者奉求治理者才有权限建筑解析器或更新 owner,是以为了帮用户建筑好解析器,需要通过基础注册器注册(register)给合约自身,再通过注册表合约建筑解析器(setResolver),然后声明扫数权(reclaim),终末才转动给注册者(transferFrom)。
解析器(Resolver)ENS 中的解析器合约分为正向解析和反向解析,解析记载是 ENS 比拟贫寒的内容,惟有界说好步调,生态才能浅薄的即成 ENS 这类 web3 域名系统。
正向解析(ENS 默许的正向解析器合约 PublicResolver.sol 或者自界说解析器合约。)
认真将域名映射为对利用户建筑的内容(包括币种地址,ipfs 内容 hash,通用 text 记载等等。
皇冠体育搭建当先 metamask 领略过注册表合约得到域名 node 建筑的解析器地址(默许的环球解析器,也不错是用户自界说的解析器合约地址),然后与该解析器地址交互,得到用户建筑的 eth 的币种地址(官网注册默许会建筑成注册者,注册者后续可摆脱转换)进行转账操作。
反向解析(ENS 默许反向解析器合约 DefaultReverseResolver.sol)
认真将用户钱包地址映射为对应的域名。
反向解析本色上是对用户不透明的,用户也无法像正向解析器合约那样不错自界说。用户也不错通过反向注册器(ReverseRegistrar.sol)的 setName 方法建筑面前钱包地址要绑定的域名,反向记载一样在 ENS 注册表合约选藏,用户注册的反向记载在三级域名记载中,阵势为:具体用户地址.addr.reverse
建筑反向解析之后,opensea 用户界面会将用户钱包地址展示为可读的 ENS 域名,则是反向解析的过程解析器结构以及 node 对应的注册表信息。
根域名的 owner 是根域名:
.eth 一级域名的 owner 是正向注册器也便是(BaseRegistrarImplement.sol)
用户注册的二级、三级域名的 owner 是用户自己,同期不错摆脱建筑解析器合约地址
.reserve 一级域名 owner 是 ENS 的多签钱包地址
.addr.reserve 二级域名 owner 是反向注册器,ens 面前主网版块戒指器合约注册的时候默许通过反向注册器(ReverseRegistrar.sol)建筑反向解析记载(比如具体用户地址.addr.reverse 指向 axtrur.eth),用户无需提供 gas 除外的反向注册费。
用户注册域名的反向三级域名的 owner 齐默许指向反向注册器合约,同期 resolver 默许指向反向解析器合约
上头咱们照旧把 ENS 域名合约打算以及主要的模块梳理罢了,ENS 在打算上比如模块拆分,权限拆分方面齐是值得咱们鉴戒的,然而现在主网上的 ENS 也存在一些问题。
ENS 存在问题与措置1、零宽问题:这是 ENS 现在比拟力争的问题,因为合约打算之初并莫得戒指零宽字符(对于零宽问题解释 https://mirror.xyz/0xc952fE149b640097054CFa53cAf7aC2bfd0162C5/RW6psQ2mnxyzmQx08PUXgLXOZc0kjvfXm8RGRVu8s0Y),比如不错官网注册某个域名的时候,要是该域名已被注册,此时用 https://unicode-table.com/en/200B/ 拷贝对应某种零宽字符串插入到要注册的域名中间某个位置,则不错注册对应的域名了。
2、畸形字符:ENS 合约并莫得戒指.,emoji 表情等畸形字符过滤,以致于现在来往市集存在太多冗杂非步调的域名。
据悉,最近一场热门的足球比赛中,利物浦队的中场球员萨拉赫突然因为个人原因退赛,引起了球迷们的猜测。有人猜测他是因为家庭原因而不得不提前离开比赛,也有人猜测他与球队之间出现了矛盾。现在 ENS 官网照旧对畸形字符进行过滤,并赐与必要的警戒领导(然而合约自己并莫得戒指,是以科学家一样不错通过合约进行注册)
3、transfer 问题:ENS 现在有个比拟力争的问题便是域名 NFT 在转动的时候,owner 莫得同步转动,是以当你在来往市集买了一个 ENS 域名 NFT 的时候,你需要通过基础注册器合约的 reclaim 接口,破钞一定的 gas 费声明 NFT 扫数权后,才能到 ens 官网上看到我方领有的域。
4、tokenURI 问题:ENS 的基础注册器合约并莫得即成 ERC721 圭臬的 tokenURI,可能是打算之初莫得探讨好,是以现在咱们在来往市集比如 opensea 上的 ENS 的 NFT 的 metadata,是来往市集畸形对 ENS 即成了 ENS 中心化的 metaservice 的 API(比如:https://metadata.ens.domains/mainnet/0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85/92165218023603606815515740961699344403389102980529428548045197994533319339809)。
5、保留字:这是我以为.bit 这方面作念得比拟好的方面,.bit 官方会把 web2 全国中的机构或公司称呼保留住来,便于后续 web2 与 web3 之间的衔接(https://github.com/dotbitHQ/Documents/blob/main/Reserved_DAS/Reserved_DAS_List.md)这对于 web3 域名生态发展是突出念念真理。
6、基础合约可升级,ENS 现在对于基础模块并莫得接收代理模式复旧合约可升级,这么当改日需要对基础模块升级的时候是比拟力争的,一种是 fallback 一种是搬动数据,但这齐只可措置部分问题,这个方面 ENS 是有改善空间的。
咱们不错怎样措置上头那些问题呢?
1、字符问题,咱们不错在戒指器合约的 valid 函数修改逻辑,一种收场时势是戒指零宽等畸形字符比如 spaceid(https://github.com/Space-ID/SpaceIDContract-Audit/blob/main/contracts/bnbregistrar/BNBRegistrarControllerV9.sol#L88),另一种便是只允许顺应步调的字符。
2、transfer 问题:咱们不错在基础注册器里复写 transferFrom 和 saveTransferFrom 函数,在转动 nft 的同期调用 setSubnodeOwner 转动 owner。
3、tokenURI 问题:这个比拟或者咱们只消承袭 ECR721 的 tokenURI 圭臬呢就不错了,那怎样收场在图片中动态的域名的展示呢?咱们不错接收 svg 上链(不错看著作后头革命后的合约代码的 TokenURIBuilder.sol)。
4、保留字问题:不错将保留字以及对应要保留的钱包地址上链,先保留给合约自己,后头不错通过 apply 接口请求给某个特定地址。
5、基础合约可升级:咱们不错接收代理模式 (eip-1967) 对基础模块合约进行革命,感好奇不错参考 lens-protocol 的合约打算(https://github.com/lens-protocol/core/tree/main/contracts)。
DNS 模块ENS 的 DNS 才调并不是咱们说的 web2 域名系统比如.com 不错收场在浏览器里造访域名来造访你的 ens 域名,ENS 的 dns 注册本色上只是基于 DNS 安全彭胀,通过有关的施展注解,校验算法施展注解你对于该 web2 的域名的扫数权,然后在链上作念一个(web2 域名到钱包地址)的记载,使得咱们不错用 web2 域名进行链上转账。详见(https://ensuser.com/docs/dns-registrar-guide.html)
然而本文为什么咱们莫得详备讲 ENS 的 DNS 模块呢?是因为 ENS 天然花了大部分元气心灵在收场 DNS,然而这个功能放在 ENS 比拟鸡肋,用的东谈主很少。其实这本色上是一个 did 团聚的界限,雷同的才调个东谈主以为更安妥放到团聚 DID 中去收场,比如像 mask network 的 nextid,cloak network 的 zkid。不错把 proof 作念好,向即成 twitter 等 web2 的 handler 一样,去集成 web2 域名。
部署我方的 web3 域名本文终末给内行提供一个革命后的 ENS 域名合约版块 ( https://github.com/axtrur/xens-contracts 革命内容以及部署时势详见 readme),浅薄内行自行部署我方的 web3 域名,深入富厚 web3 域名系统的打算旨趣 部署 goerli 测试网号召
OWNER_KEY={{account private key}} INFURA_ID=c03713652e3c4ef6a3c09ea7dbf58711 npx hardhat deploy --network goerli (INFURA_ID 不错替换成我方的 infuraid,实行前删除 deployment/goerli 文献夹以及 deployment/goerli_result.json)
部署测试网 goerli 后,实行注册剧本 ens.js 注册域名
OWNKEY={{account private key}} INFURA=https://goerli.infura.io/v3/c03713652e3c4ef6a3c09ea7dbf58711 node ens.js
就不错到 opensea 测试网检察照旧部署的 nft 了,比如我部署的.buidlerdao 后缀的域名就不错到 opensea 测试网检察照旧部署的 nft 了,比如我部署的.buidlerdao 后缀的域名
https://testnets.opensea.io/collection/buildlerdao-name-service
追思ENS 域名动作 web3 域名的先驱,在打算上有许多值得鉴戒的地点,咱们看到的.bnb,.nft 也齐是基于 ens 合约基础上搭建的。但愿通过本文内行对 ENS 的打算从举座到细节有个深入的深入,web3 域名不单是是一个 NFT,他有着更久了的真理真理。同期 web 域名只是一个很小的入手,信服随之普及、生态集成以及内行对 did 的探索,原生链上的可读的 web3 域名将会被团聚起来,使得每个用户在加密全国里齐有个调理的柬帖形色,更好地去衔接多链生态,衔接用户。
ENS 域名系统有关 EIP 圭臬
EIP 137 - 注册表 https://eips.ethereum.org/EIPS/eip-137
EIP 181 - 反向注册器 https://eips.ethereum.org/EIPS/eip-181
EIP 205 - ABI 解析 (ABI()).
EIP 619 - SECP256k1 公钥解析 (pubkey()).
EIP 634 - 文本记载解析 (text()).
EIP 1577 - 内容 hash 解析 (contenthash()).
EIP 2304 - 多Token地址解析 (addr()). 新的记载类型不错随时通过 EIP 圭臬化设施进行界说
主网部署的 ENS 合约
皇冠体育博彩注册表合约:0x00000000000c2e074ec69a0dfb2997ba6c7d2e1e
根合约:0xab528d626ec275e3fad363ff1393a41f581c5897
www.kingroulettezonezonezone.com基础正向注册器合约:0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85
反向注册器合约:0x084b1c3c81545d370f3634392de611caabff8148
默许正向解析器合约:0x4976fb03c32e5b8cfe2b6ccb31c09ba78ebaba41
默许反向解析器合约:0xa2c122be93b0074270ebee7f6b7292c7deb45047
戒指器合约:0x283Af0B28c62C092C9727F1Ee09c02CA627EB7F5
ENS 域名贵府
官网: https://app.ens.domains/

github: https://github.com/ensdomains
菠菜大平台导航合约代码:https://github.com/ensdomains/ens-contracts/tree/master/contracts
线网部署版块:https://etherscan.io/accounts/label/ens
文档:https://ensuser.com/docs/contract-api-reference/ens-contracts-overview.html
来往市集:https://opensea.io/collection/ens
其他 web3 域名系统贵府
.bnb
官网: https://space.id/
github: https://github.com/Space-ID
来往市集:https://www.element.market/collections/space-id-bnb
.bit
博彩平台游戏输赢记录官网:https://www.did.id/
github:https://github.com/dotbitHQ
来往市集:https://opensea.io/collection/dotbit
皇冠信用网登1登2登3.nft
首先,让我们回顾一下中国人口的历史变化。在上世纪八十年代,中国开始实施计划生育,提倡晚婚晚育,少生优生。这一政策在一定程度上控制了人口增长速度。更好的促进了经济的发展。而在过去几十年,我们的人口数量还在增加,从2002年的12.85亿,到2022年的14.12亿。2016年国内放开二胎,然而2021年三胎政策放开后,人口增长率却在减少。
今年夏窗,阿森纳疯狂引援,签下哈弗茨、赖斯、廷贝尔之后,全队身价超过12亿欧,超越曼城排名全球第一。为了备战新赛季,阿森纳前往美国踢季前赛,5-0大胜美职联全明星队,随后0-2完败曼联,遭遇首场败仗。
官网:https://nft.space/
来往市集:https://www.element.market/collections/nft-name-service皇冠体育logo