TheGraph将推出子图NFT所有权转移功能
近日消息,TheGraph将推出基于NFT的子图所有权转移功能。官方提出GIP-0018治理提案:每当应用程序开发人员发布新的子图时,GNS都会生成NFT,拥有NFT的人控制子图,NFT基于ERC-721标准,因此可以轻松转移到不同的账户。
本次的功能更新,是通过GIP-0023提案替换了GIP-0018,GIP-0018中旨在解决子图所有权和控制权转移问题。GIP-0023通过编写单独的NFT(ERC-721)合约而不是使用GNS作为注册表,重构了GIP-0018中提议的子图的NFT所有权的实现。
我们来看下GIP-0023的细则。
GNS合约允许任何人发布具有关联元数据和目标子图部署的子图。新的子图将永远与创建它的帐户绑定。不能转移子图所有权使得某些用例非常不方便,本提案旨在解决这些问题。此GIP取代了GIP-0018,保持相同的目标,但重构了实现。
包含的原GIP-0018内容:应用程序开发人员创建子图来索引区块链数据。他们希望索引器在去中心化网络中运行他们的子图。为了实现这一点,在GNS中发布了一个针对子图部署的子图。由于许多原因,应用程序开发人员可能希望将子图的所有权转移到不同的帐户。
每当应用程序开发人员发布新的子图时,GNS都会生成NFT。拥有NFT的人控制子图。NFT基于标准的ERC721,因此可以轻松无限制地转移到不同的账户。此外,当所有者弃用子图时,NFT会被销毁。
GIP-0023新内容:NFT子图的第一个实现继承了GNS的ERC721行为,因此,我们可以使用GNS合约作为注册表。不过这带来了许多问题,主要是OpenSea、Etherscan和其他应用程序不会将升级后的GNS检测为有效的ERC-721NFT。
本GIP中提出的新实现使用与GNS分开部署的不同NFT合约,并使它们通过可组合性工作。
为了支持这个功能,我们引入了两个合约:
这是基于OpenZeppelin实现的标准ERC721合约。该合约使用TokenDescriptor来呈现tokenURI。SubgraphNFT允许设置一个称为minter的特殊角色,它是唯一可以铸造、刻录或设置NFT元数据的角色。在我们的设置中,铸币者是GNS。
这是一个实现TokenDescriptor接口的合约,其唯一目的是呈现tokenURI。
GNS有一个额外的状态变量来存储SubgraphNFT地址,因此每当应用程序开发人员与子图交互时,GNS都可以通过NFT铸造、销毁或检查子图的所有权。
子图元数据是一个IPFS哈希,其中包含一个JSON文件,该文件编码有关子图的相关信息,如图像、显示名称、类别等。
SubgraphMetadataUpdated每当发布子图或应用程序开发人员决定更新它时,子图元数据最初只是在事件上发出。
该GIP建议将子图元数据(IPFS哈希)存储到SubgraphNFT中的状态变量中。这样,NFT就可以从中渲染出正确的tokenURI,并在钱包和任何其他NFT市场上可见。
还将提供一个TokenDescriptor合约,以将存储为bytes32的IPFS哈希格式转换为IPFS在客户端URI中使用的兼容base58字符串。
新实现还将公开一个函数,旧类型子图的所有者可以调用该函数来铸造他们的NFT。此函数必须确保每个旧类型子图仅调用一次。
此外,合约将跟踪subgraphID=>(graphAccount,subgraphNumber)旧子图的映射,以使其向后兼容。