首页 科技内容详情
皇冠网址:联博统计(www.326681.com)_Buidler DAO:以ENS为例深度剖析Web3域名系统的手艺设计

皇冠网址:联博统计(www.326681.com)_Buidler DAO:以ENS为例深度剖析Web3域名系统的手艺设计

分类:科技

标签: # 欧博在线注册

网址:

SEO查询: 爱站网 站长工具

点击直达

皇冠备用网址www.hg9988.vip)是一个开放皇冠网址即时比分、皇冠网址代理最新登录线路、皇冠网址会员最新登录线路、皇冠网址代理APP下载、皇冠网址会员APP下载、皇冠网址线路APP下载、皇冠网址电脑版下载、皇冠网址手机版下载的皇冠新现金网平台。

原文问题:《Buidler DAO:以 ENS 为例深度剖析 Web3 域名系统的手艺设计》

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

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 模块观点

注册器合约(绿色部门):卖力分配名称的合约,有正向注册器,反向注册器,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 最焦点的合约,上图为注册表合约内部的 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 神色等特殊字符过滤,以致于现在生意市场存在太多冗杂非规范的域名。

,

以太坊开奖网

,

cách đánh đề miền nam(www.84vng.com):cách đánh đề miền nam(www.84vng.com) cổng Chơi tài xỉu uy tín nhất việt nam。cách đánh đề miền nam(www.84vng.com)game tài Xỉu cách đánh đề miền nam online công bằng nhất,cách đánh đề miền nam(www.84vng.com)cổng game không thể dự đoán can thiệp,mở thưởng bằng blockchain ,đảm bảo kết quả công bằng.

,

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

,

现在 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

基础正向注册器合约: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

.nft

官网:https://nft.space/

生意市场:https://www.element.market/collections/nft-name-service

查看更多,

皇冠网址www.hg9988.vip)是一个开放皇冠网址即时比分、皇冠网址代理最新登录线路、皇冠网址会员最新登录线路、皇冠网址代理APP下载、皇冠网址会员APP下载、皇冠网址线路APP下载、皇冠网址电脑版下载、皇冠网址手机版下载的皇冠网址平台。

 当前暂无评论,快来抢沙发吧~

发布评论