Alert Source Discuss
🚧 Stagnant Standards Track: ERC

ERC-1844: ENS 接口发现

Authors Nick Johnson (@arachnid)
Created 2019-03-15
Discussion Link https://ethereum-magicians.org/t/ens-interface-discovery/2924
Requires EIP-137, EIP-165

简单总结

定义了一种将合约接口与 ENS 名称和地址关联,并发现这些接口的方法。

摘要

本 EIP 规定了一种暴露与 ENS 名称或地址(通常是合约地址)关联的接口,并允许应用程序发现这些接口并与之交互的方法。接口可以由目标合约(如果存在)或任何其他合约实现。

动机

EIP 165 支持接口发现——确定给定地址的合约是否支持请求的接口。然而,在许多情况下,能够发现与由其他合约实现的名称或地址相关联的功能是很有用的。

例如,token 合约本身可能不提供任何类型的“原子交换”功能,但可能存在关联的合约提供该功能。借助 ENS 接口发现,token 合约可以公开此元数据,通知应用程序在哪里可以找到该功能。

规范

为 ENS 解析器定义了一个新的配置文件,包括以下方法:

function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);

此接口的 EIP-165 接口 ID 为 0xb8f2bbb4

给定一个 ENS 名称哈希 node 和一个 EIP-165 interfaceID,此函数返回该接口的适当实现者的地址。如果该节点没有与该接口 ID 匹配的接口,则返回 0。

interfaceImplementer 返回的地址必须引用智能合约。

返回地址的智能合约应该实现 EIP-165。

实现此接口的解析器可以利用回退策略:如果用户没有显式提供匹配的接口,则查询 addr() 返回的合约,如果目标合约支持请求的接口,则返回其地址,否则返回 0。如果他们这样做,他们必须确保如果目标合约 revert,他们返回 0,而不是 revert。

此字段可以与正向解析和反向解析一起使用。

理由

解决此问题的一种幼稚方法是将此方法直接添加到目标合约中。但是,这样做有几个缺点:

  1. 每个合约必须维护其自己的接口实现列表。
  2. 修改此列表需要访问控制,而合约可能之前不需要这些控制。
  3. 必须在编写合约时设计对此的支持,并且以后无法进行追溯。
  4. 只能支持一个规范的接口列表。

使用 ENS 解析器可以缓解这些缺点,从而使任何人都可以将接口与名称关联,即使对于以前没有考虑到此点的合约也是如此。

向后兼容性

没有向后兼容性问题。

测试用例

待定

实现

ensdomains/resolvers 存储库中的 PublicResolver 实现了此接口。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Nick Johnson (@arachnid), "ERC-1844: ENS 接口发现 [DRAFT]," Ethereum Improvement Proposals, no. 1844, March 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-1844.