(译者注:确切地说,只有 ENS 中的 .eth 域名可作为 NFT。)
自从 ENS 的 .eth 注册器在 2019 年 5 月完成迁移后,这个注册器已经成为一个符合 ERC721 标准的 NFT(非同质化代币)合约,这意味着 .eth 域名可以像其他 NFT 那样进行转移。
从 ENS 域名派生 tokenId
ENS 域名的 tokenId 其实是以 uint256 形式来表示域名标签的哈希值(比如,域名 vitalik.eth
的标签是 vitalik
)。
const name = 'vitalik' |
在上面的示例中,79233663829379634837589865448569342784712482819484549289560981379859480642508
就是域名 vitalik.eth
的 tokenId。
从 tokenId 派生 ENS 域名
与派生 tokenId 不同,从 tokenId 派生 ENS 域名并不容易。这是因为所有 ENS 域名都存储为固定长度的哈希,以便允许注册长度不限的域名。这种架构的缺点是不能使用 tokenId 直接查询 ENS 智能合约来返回 ENS 域名。
我们推荐的方式是通过 TheGraph 服务中的 ENS 子图来查询。TheGraph 可以通过其索引将哈希值解码为域名。
查询的示例代码如下。
const Web3 = require('web3') |
如果你不喜欢依赖 TheGraph 这样的第三方,开源的 ENS-rainbow 包含了原始数据集(6GB,内含 1.33 亿条数据)的链接,这样你就可以托管自己的 ENS 解码服务。
将子域名转换为 NFT
目前,所有的子域名或非 .eth
域名都不是 NFT(比如 dcl.eth
和 .kred
),除非域名注册器本身支持 NFT 标准。如果你想将自己所有的子域名转换成 NFT,你必须创建一个注册器:
- 创建一个符合 ERC721 标准的注册器合约
- 设置 ENS 注册表地址(主要是在部署注册器时)
- 创建
register
函数用来调用registry.setSubnodeOwner
,然后通过将子域标签哈希转换为 tokenId 来生成 NFT。
contract DCLRegistrar is ERC721Full, Ownable { |
一旦部署完成,您就必须将控制器地址转移到该合约。
对于非技术用户,我们目前正在升级我们的 SubdomainRegistrar
,它能让你不用写代码也可以将你的子域名变成 NFT。