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

.eth 永久注册器

永久注册器是负责顶级名称 .eth 的分配和更新的智能合约。

系统架构

永久注册器的代码可以在 ethregistrar 仓库中找到。

注册器本身称为基本注册器(BaseRegistrar)。该合约实现了以下几个关键功能:

  • 注册器的所有者可增减 “控制器(controller)”。
  • 控制器可以注册新名称和延长现有名称的有效期,但不能更改现有名称的所有权或缩短其过期时间。
  • 名称所有者可以将所有权转移到另一个地址。
  • 如果名称所有者丢失了所有权,他们可以在 ENS 注册表中收回所有权。
  • 在 1 年过渡期内,原注册器的名称所有者可将其迁移至新版注册器。迁移名称时,他们的押金将全部退还给他们。

此外,注册器是一个符合 ERC721 标准的非同质化代币(NFT)合约,也就是说 .eth 的名称可以像其他 NFT 一样被转移。

用户在转移名称所有权,或在 ENS 名称注册表恢复所有权时(例如,一个名称的所有权以前被转移到一个合约中),将直接与此合约进行交互。用户还可以通过名称查询来查看其注册状态和到期日期。对于初始注册和续费,用户需要与控制器合约进行交互。

这种关注点分离的方式减少了注册器受到的攻击,并在注册器存在的情况下为用户的名称所有权提供了保证。另外,它还规定了注册和续费机制的改进和创新。将来的更新中可能会将根名称和 .eth 顶级名称的所有权转移到一个受限权限的合约中,从而防止根密钥持有者干预 .eth 的注册,同时不影响控制器的持续更新。

最初部署的控制器叫 ETHRegistrarController ,该控制器给长度为7个及更多字符的名称提供了一个简单的注册和续费机制,实现了以下功能:

  • 控制器的所有者可以设定价格预言机合约,该合约根据名称及其注册或续费的时长来确定注册和续费的价格。
  • 控制器的所有者可将已收取的全部款项取回到他的账户。
  • 用户可以通过 “请求-注册” 的过程注册新名称,并支付适当的注册费。
  • 用户可以通过支付适当的资金来续费名称,而且对于某个名称,除了名称所有者,其他用户也可以为这个名称续费。另外,续费的时长也没有限制。

由于任何人都可以为某个名称续费,如果一个用户非常关注某个与其交互的名称的有效期,那他可以在必要时通过自己付费来确保该名称保持注册状态。

由于可以进行任意时长的续费,用户可以 “锁定” 理想的注册费(译注:这里的理想主要是针对以太币来说的,因为续费价格只是相对美元稳定,而相对以太币则不确定)。通过长时间的续费,可以实现名称的 “长期有效”,保证了由智能合约所保障的名称稳定性。

起初,将部署一个独立的定价预言机合约,即 StablePriceOracle 。该合约的所有者能够以美元为单位分别给不同长度的名称设定价格,并使用 USD:ETH 价格预言机按照当前汇率将该价格转换成以太币(Ether)。用户注册某个名称时不必直接与这个预言机交互,因为确定该名称注册或续费价格的功能已经内置在了控制器合约里。

发现

找到新版注册器的地址很容易:在 ENS 注册表中通过调用 owner(namehash('eth')) 来查询 “eth” 名称的所有者。

为了支持发现控制器的地址,ENS 通过 EIP1844 支持接口发现。该机制允许通过以下过程来查询实现了所需接口的合约地址:

  1. 设置 node = namehash('eth')
  2. 通过调用 ENS 注册表上的 resolver(node) 来查找 ENS 解析器。
  3. 调用该解析器上的 interfaceImplementer(node, interfaceId) 方法,其中 interfaceId 是你所需接口的 EIP165 接口 ID 。

以下是目前为 .eth 永久注册器定义的接口 ID :

  • 0x6ccb2df4ERC721(NFT)的接口 ID ,它返回注册器本身的地址(也可以通过地址查找或查找 “.eth” 的所有者来获取)。
  • 0x018fac06 ,控制器的接口 ID ,返回控制器的地址。
  • 0x7ba18ba1 ,旧版注册器的迁移功能的接口 ID ,返回旧版注册器地址。
转载本站内容请注明出处和链接。咨询 ENS 问题或加入 ENS 中文社区请联系 我们