ENS 在 2023 年 4 月进行了大量更新,本站 “教程” 和 “文档” 中的相关内容已经过时。 如需了解最新的使用说明或技术文档,请到 ENS 官方提供的 支持文档 进行查阅。

ENS 注册表合约 - ENS 的核心合约

介绍

ENS 注册表合约是 ENS 系统中的核心合约,当前在用的注册表合约(ENSRegistryWithFallback)是升级版本(带回退功能,兼容原始版本),在 2020 年 1 月 30 日部署完成,如果不出意外,这也会是最终版。

ENS 注册表合约的功能是维护所有名称和子名称列表,并存储关于每个名称的三个关键信息:名称的所有者、名称的解析器、名称下所有记录的缓存存活时间(即 TTL)。您可以在 ENS 架构中查看注册表的工作原理。

ENS 注册表合约的部分关键交易(前 7 笔交易)

No. 合约名称 相关交易 发送方 调用函数 备注
1 ENSRegistryWithFallback 0x00df8 Deployer-0x4fe4e 新 ENS 合约创建
2 ENSRegistryWithFallback 0x36a85 Deployer-0x4fe4e setSubnodeRecord 设置 eth 的解析器为 OwnedResolver-0x30200、所有者为 BaseRegImp-0x57f18
3 ENSRegistryWithFallback 0x09a36 Wallet1-0x0904d setResolver 设置 migrated.eth 的解析器为 OwnedResolver-0x30200
4 ENSRegistryWithFallback 0x6f410 Deployer-0x4fe4e setSubnodeOwner 设置 reverse 的所有者为 Deployer-0x4fe4e
5 ENSRegistryWithFallback 0x7311c Deployer-0x4fe4e setSubnodeOwner 设置 addr.reverse 的所有者为 ReverseRegistrar-0x084b1
6 ENSRegistryWithFallback 0xebc1b Deployer-0x4fe4e setOwner 设置 reverse 的所有者为 Dead-0x00000
7 ENSRegistryWithFallback 0xf296f Deployer-0x4fe4e setSubnodeOwner 设置 xyz 的所有者为 DNSRegistrar-0xa2f42
8 ENSRegistryWithFallback 0xe120b Deployer-0x4fe4e setOwner 设置根名称的所有者为 Root-0xab528

部分关键名称的相关信息

  • “name”: “eth”,
    • “node”: “0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae”,
    • “labelName”: “eth”,
    • “labelhash”: “0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0”,
    • “parent-node”: “0x0000000000000000000000000000000000000000000000000000000000000000”
  • “name”: “reverse”,
    • “node”: “0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34”,
    • “labelName”: “reverse”,
    • “labelhash”: “0xdec08c9dbbdd0890e300eb5062089b2d4b1c40e3673bbccb5423f7b37dcf9a9c”,
    • “parent-node”: “0x0000000000000000000000000000000000000000000000000000000000000000”
  • “name”: “addr.reverse”
    • “node”: “0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2”,
    • “labelName”: “addr”,
    • “labelhash”: “0xe5e14487b78f85faa6e1808e89246cf57dd34831548ff2e6097380d98db2504a”,
    • “parent-node”: “0xa097f6721ce401e757d1223a763fef49b8b5f90bb18567ddb86fd205dff71d34”
  • “name”: “xyz”,
    • “node”: “0xa87a11c7f15e38a7398517fda2ae1b40d870aa24b34b4b09aa09afc71f2c9d26”,
    • “labelName”: “xyz”,
    • “labelhash”: “0x9dd2c369a187b4e6b9c402f030e50743e619301ea62aa4c0737d4ef7e10a3d49”,
    • “parent-node”: “0x0000000000000000000000000000000000000000000000000000000000000000”

关于原版注册表(ENSRegistry)的故事

现在部署的注册表是在 2020 年 2 月份部署的升级版本,它的上一个版本,也是最早的 ENS 注册表,是用 LLL 语言编写的,在被更新前的两年多时间里一直稳定地为 ENS 提供可靠支持。关于为什么采用 LLL 语言来编写合约,ENS 首席工程师 Nick 这样回复:

We wrote ENS back when Solidity was still very new, and fairly inefficient. The LLL implementation was a lot more efficient, as well as producing bytecode that was simple enough it could be decompiled to verify it exactly matched the implementation. These days, Solidity is a lot more mature, so there’s a lot less reason to do this kind of thing.

我们开始编写 ENS 的时候,Solidity 还是一门新兴语言,而且相当低效。LLL语言则要高效许多,且可以对其进行反编译,以验证它与实现完全匹配。现在,Solidity 已经是一门成熟的语言,所以已经没有太多必要去采用 LLL。

下面我们来看看第一版注册表刚创建时的一些关键交易,回顾一下 ENS 最初的样子:

原版注册表的部分关键交易(前 7 笔交易)

No. 合约名称 相关交易 发送方 调用函数 备注
1 ENS-0x31415 0x40ea7 0x8a582 ENS 合约创建
2 ENS-0x31415 0xe120d 0x8a582 setOwner 设置根域所有者为 0x8472d
3 ENS-0x31415 0x057a1 0x8472d setSubnodeOwner 设置 .eth 所有者为 TempRegistrar-0x01223
4 ENS-0x31415 0x27fbd 0x8472d setSubnodeOwner 设置 .reverse 所有者为 0x8472d
5 ENS-0x31415 0x24ae9 0x8472d setSubnodeOwner 设置 .addr.reverse 所有者为 ReverseRegistrarOld-0xda7fa
6 ENS-0x31415 0x8b0bc 0x8472d setOwner 设置 .reverse 所有者为 0x00000
7 ENS-0x31415 0xf10f3 0x8472d setOwner 设置根域所有者为 MultiSig-0x91114
转载本站内容请注明出处和链接。咨询 ENS 问题或加入 ENS 中文社区请联系 我们