Alert Source Discuss
⚠️ Draft Standards Track: ERC

ERC-4972: 名称拥有的账户

用于社交身份的名称拥有的账户

Authors Shu Dong (@dongshu2013), Qi Zhou (@qizhou), Zihao Chen (@zihaoccc)
Created 2022-04-04
Discussion Link https://ethereum-magicians.org/t/eip-4972-name-owned-account/8822
Requires EIP-137

摘要

该 ERC 建议通过允许将每个人类可读的身份与一个可以由该名称身份所有者控制的智能合约账户相关联,来扩展名称服务(例如 ENS)的功能。

动机

名称本身无法持有任何上下文。我们希望构建名称服务的扩展,通过为每个名称所有者提供一个额外的、随时可用的智能合约账户,赋予名称丰富的上下文,这可能有助于通用智能合约账户的采用。借助 NOA,可以为其名称节点持有资产和信息,从而开启新的用例,例如名称节点转移,包括转移名称节点的所有权以及 NOA,包括其持有的任何资产和信息。

规范

本文档中的关键词 “MUST”,“MUST NOT”,“REQUIRED”,“SHALL”,“SHALL NOT”,“SHOULD”,“SHOULD NOT”,“RECOMMENDED”,“MAY” 和 “OPTIONAL” 按照 RFC 2119 中的描述进行解释。

名称拥有的账户

一个 NOA 具有:

  • 一个由 ERC-137 定义的人类可读的名称;以及
  • 一个拥有的账户(NOA),这是一个智能合约账户,其地址从该名称派生而来;以及
  • 可以部署和操作该拥有的账户的名称的所有者。

下图说明了 NOA、名称节点和名称所有者之间的关系,所有权由名称服务保证。

  ┌───────────────┐        ┌───────────┐         ┌───────────────┐
  │ Owned Account ◄──own───┤ Name Node ◄───own───┤   Name Owner  │
  └───────────────┘        └───────────┘         └───────────────┘

接口

名称服务必须具有的核心接口是:

interface INameServiceRegistry {
    /// @notice 获取名称节点所拥有的账户地址
    /// @params node 代表一个名称节点
    /// @return 账户的地址
    function ownedAccount(
        bytes32 node
    ) external view returns(address);
}

名称拥有的账户所需的核心接口是:

interface INameOwnedAccount {
    /// @notice 获取映射到此账户地址的名称节点
    /// @return 返回一个名称节点
    function name() external view returns(bytes32);

    /// @notice 获取注册该名称的名称服务合约地址
    /// @return 返回注册该名称的名称服务
    function nameService() external view returns(address);
}

原理

为了实现从名称到 NOA 的一对一映射,其中每个 NOA 的地址都从名称节点派生而来,我们必须在每个 NOA 中包含名称节点信息,以反映其名称节点所有权。“name()”函数可用于检索每个 NOA 的此属性,并实现反向跟踪到其名称节点。“nameService()”函数可以获取注册该名称的名称服务合约地址,以执行诸如验证检查之类的行为。通过这两种方法,NOA 能够追溯到拥有该名称节点的实际所有者。

向后兼容性

名称注册表接口与 ERC-137 兼容。

参考实现

名称拥有的账户创建

NOA 的创建由一个“工厂”合约完成。该工厂可以是名称服务本身,并且期望使用 CREATE2(而不是 CREATE)来创建 NOA。NOA 应该具有相同的 initcode 和工厂合约,以便实现地址的确定性保留。名称节点可以用作盐来保证从名称到其拥有的账户的对射。

安全考虑

未发现任何安全问题。

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

Shu Dong (@dongshu2013), Qi Zhou (@qizhou), Zihao Chen (@zihaoccc), "ERC-4972: 名称拥有的账户 [DRAFT]," Ethereum Improvement Proposals, no. 4972, April 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4972.