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。
此字段可以与正向解析和反向解析一起使用。
理由
解决此问题的一种幼稚方法是将此方法直接添加到目标合约中。但是,这样做有几个缺点:
- 每个合约必须维护其自己的接口实现列表。
- 修改此列表需要访问控制,而合约可能之前不需要这些控制。
- 必须在编写合约时设计对此的支持,并且以后无法进行追溯。
- 只能支持一个规范的接口列表。
使用 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.