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

编写一个 ENS 解析器

EIP137 中描述了解析器的详细信息。一个解析器必须实现以下方法:

function supportsInterface(bytes4 interfaceID) constant returns (bool);

supportsInterfaceEIP165 中定义,它可以被调用者用来确定一个解析器是否支持某个特定的记录类型。记录类型是指解析器必须一起实现的一个或多个方法的集合。当前定义的记录类型包括:

记录类型 函数 接口 ID 定义文档
以太坊地址 addr 0x3b3b57de EIP137
ENS 名称 name 0x691f3431 EIP181
ABI 规范 ABI 0x2203ab56 EIP205
公钥 pubkey 0xc8690233 EIP619
文本记录 text 0x59d1d43c EIP634
内容哈希 contenthash 0xbc1c58d1

supportsInterface 本身的接口 ID 为 0x01ffc9a7 ,当 interfaceID 值为 0x01ffc9a7 时,supportsInterface 也必须返回 true 。

此外,content 接口被用作 Swarm 哈希事实上的标准,它的接口 ID 为 0xd8389dc5 。现在新的内容哈希应该使用 contenthash 接口来实现。

解析器示例

一个只支持 addr 类型的简易解析器,看起来就像这样:

contract SimpleResolver {
function supportsInterface(bytes4 interfaceID) constant returns (bool) {
return interfaceID == 0x3b3b57de;
}

function addr(bytes32 nodeID) constant returns (address) {
return address(this);
}
}

这个简易解析器总是返回自己的地址作为所有查询的结果。尽管解析器采用不同的机制应该返回相同的结果,但实际上解析器可以按照需要采用任何机制来确定返回的结果,并且应该尽可能降低 gas 费用。

转载本站内容请注明出处和链接。咨询 ENS 问题或加入 ENS 中文社区请联系 我们