关于创建可嵌套NFT的ERC-7401完整指南

  • BuildBear
  • 发布于 2024-03-13 11:47
  • 阅读 33

本文介绍了ERC7401标准,这是一种新的NFT标准,支持嵌套多重链下NFT,以便建立复杂的代币关系和层级结构。文章详细探讨了ERC7401的特性、与ERC721的比较、多个应用场景和如何创建和部署嵌套NFT合约的步骤,并提供了代码示例和操作指南。

非同质化代币(NFTs)已经改变了数字资产的格局,提供了区块链上的可验证所有权。ERC7401 是一种新的 NFT 标准,引入了在一个父 NFT 内嵌套多个子 NFT 的概念。在本教程中,我们将探讨 ERC-7401 的特性、应用案例,并提供如何使用该标准创建可嵌套 NFT 的分步指南。

ERC7401:父控制的 NFT 嵌套

ERC-7401 建立了一个标准化的接口,用于父控制的可嵌套 NFT,增强了不同实现之间的一致性和互操作性。它是 ERC-6059 的改进版本,允许 NFT 之间的关系和交互。NFT 拥有其他 NFT 的能力可以扩展代币的实用性、可用性和兼容性。

ERC721 与 ERC7401

所有权

  • ERC721 遵循基本的所有权模型,每个代币都是独特的,可以由单个地址(外部拥有账户或智能合约)拥有。
  • ERC-7401 引入了可嵌套代币的概念,其中一个 NFT 可以拥有其他 NFT,使代币之间的层级所有权结构和复杂关系成为可能。

代币转账

  • ERC-721 允许在地址间转移单个代币,每个代币代表一个独特的资产。
  • ERC-7401 定义了 NFT 的父子关系,允许一个父代币拥有多个子代币并管理它们的交互。

交互

  • ERC-721 代币的交互能力有限,主要集中在所有权转移和查询代币元数据上。
  • ERC-7401 允许嵌套 NFT 之间的交互,支持将代币捆绑在一起、创建基于会员制度的系统,以及在 DAO 中促成委托投票等应用案例。

实用性

  • 每个 ERC-721 代币由单个地址拥有,通常是外部拥有账户(EOA)或智能合约。
  • ERC-7401 通过允许 NFT 拥有其他代币扩展了 NFT 的实用性,从而在 NFT 生态系统中带来更大的灵活性、可用性和兼容性。

应用案例

捆绑和收集:用户可以将多个 NFT 捆绑在一起形成一个父 NFT,从而使多个代币的销售或转移作为一个单位进行。这对于希望更加高效管理和交易 NFT 收藏品的收藏者来说是非常有用的。

会员和委托:NFT 可以代表组织或 DAO 的会员资格。使用 ERC-7401,这些会员 NFT 可以拥有其他代币,如奖励或奖金 NFT,从而简化会员权益的分配和管理。此外,将所有权或投票权委托给其他 NFT 的能力促进了去中心化社区的治理。

游戏项目和虚拟资产:在游戏中,虚拟物品和资产可以表示为 NFT。使用 ERC-7401,玩家可以将多个物品或资产捆绑成一个父 NFT,使管理和交易他们的游戏物品变得更简单。

多媒体内容分发:内容创作者可以将各种多媒体资产,如图片、视频和音频文件,捆绑成一个单一的父 NFT。这个父 NFT 然后可以作为一个整体进行销售或授权,从而简化分发过程并确保所有相关资产一起转移。

使用 ERC7401 创建和部署嵌套 NFT 合约

NestableNFT 合约从’NestableToken’继承,实现了 ERC7401。它支持铸造、转移和嵌套 NFT。所有者可以铸造常规 NFT 或将其嵌套于其他 NFT 中。

解释可嵌套代币合约中的核心功能

  • _mint() 函数铸造一个新的 NFT,并将所有权分配给指定地址。它会触发转移和嵌套转移事件,指示新代币的铸造和嵌套。
function _mint(
        address to,
        uint256 tokenId,
        bytes memory data
    ) internal virtual {
        _innerMint(to, tokenId, 0, data);
   emit Transfer(address(0), to, tokenId);
   emit NestTransfer(address(0), to, 0, 0, tokenId);
   _afterTokenTransfer(address(0), to, tokenId);
   _afterNestedTokenTransfer(address(0), to, 0, 0, tokenId, data);
    }
  • _nestMint() 函数用于铸造一个新的 NFT 并将其嵌套在另一个由 destinationId 指定的 NFT 中。它首先检查接收地址是否为合约并支持 ERC-7401 接口。然后,铸造新的 NFT 并确保其嵌入在父 NFT 中,从而确保兼容性和完整性。
function _nestMint(
        address to,
        uint256 tokenId,
        uint256 destinationId,
        bytes memory data
    ) internal virtual {
        // 似乎是多余的,但否则它将因为没有错误而回滚
        if (!to.isContract()) revert IsNotContract();
        if (!IERC165(to).supportsInterface(type(IERC7401).interfaceId))
            revert MintToNonNestableImplementer();
        _innerMint(to, tokenId, destinationId, data);
        _sendToNFT(address(0), to, 0, destinationId, tokenId, data);
    }
  • transferFrom() 函数使代币持有者能够将他们的 NFT 转移到另一个地址。它要求发送者获得批准或直接拥有被转移的代币。该函数然后内部调用从 NestableToken 继承的 _transfer 函数以执行转移。
function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual onlyApprovedOrDirectOwner(tokenId) {
        _transfer(from, to, tokenId, "");
    }
  • nestTransferFrom() 函数使代币持有者能够转移他们的 NFT,并将其嵌套在由 destinationId 指定的另一个 NFT 中。它要求发送者获得批准或直接拥有被转移的代币。该函数然后内部调用 _nestTransfer 函数。
function nestTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        uint256 destinationId,
        bytes memory data
    ) public virtual onlyApprovedOrDirectOwner(tokenId) {
        _nestTransfer(from, to, tokenId, destinationId, data);
    }

按以下逐步程序创建嵌套 NFT。

要开始工作,请克隆使用 Scaffold-Eth 2 x Buildbear 创建的工作 repository,该框架让你创建自己的私有沙盒,为各种 EVM 和 EVM 兼容区块链网络,提供自己的代币水龙头和区块链浏览器。

git clone https://github.com/sanamummer/erc7401.git
cd erc7401
yarn install

使用以下命令创建你的私有沙盒。BuildBear 沙盒的详细信息存储在 packages/buildbear/sandbox.json

yarn fork-bb

要部署合约,请运行命令

yarn deploy

成功部署后,你将获得类似如下的输出。

在第二个终端,启动你的 NextJS 应用:

yarn start

在以下地址访问你的应用:http://localhost:3000。你可以通过 Debug Contracts 页面与你的智能合约进行交互。

与智能合约交互

要与合约进行交互,我们需要在帐户中有余额。要从水龙头添加一些测试代币,请导航到可以在 packages/buildbear/sandbox.json 中找到的水龙头 URL。

现在调用 mint 函数,将 NFT 铸造到你的钱包地址,ID 为 1。然后调用 nestMint 函数,将具有 ID 为 2 的新 NFT 嵌套到我们铸造的父 NFT 中,destinationId 为 1。确保传递可嵌套 NFT 合约地址。

调用 nestTransfer 函数,并将 NFT 转移到 ID 为 1 的父 NFT 中。

恭喜!!我们已经成功实现了 ERC7401 的 NFT 嵌套。

关于 BuildBear

BuildBear 是一个专为 DApp 开发和测试而量身定制的平台。开发者可以自由构建个性化的私有测试网沙盒,跨越多种区块链网络。可以无限制地铸造原生代币和 ERC20 代币,加上 BuildBear 上快速的交易时间(少于 3 秒!),极大丰富了 DApp 开发生命周期。该平台配备了实时测试和调试工具,确保开发者能够轻松监控复杂的区块链交易。

作者: Sana

  • 原文链接: medium.com/buildbear/a-c...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BuildBear
BuildBear
https://medium.com/buildbear