本文介绍了ERC7401标准,这是一种新的NFT标准,支持嵌套多重链下NFT,以便建立复杂的代币关系和层级结构。文章详细探讨了ERC7401的特性、与ERC721的比较、多个应用场景和如何创建和部署嵌套NFT合约的步骤,并提供了代码示例和操作指南。
非同质化代币(NFTs)已经改变了数字资产的格局,提供了区块链上的可验证所有权。ERC7401 是一种新的 NFT 标准,引入了在一个父 NFT 内嵌套多个子 NFT 的概念。在本教程中,我们将探讨 ERC-7401 的特性、应用案例,并提供如何使用该标准创建可嵌套 NFT 的分步指南。
ERC-7401 建立了一个标准化的接口,用于父控制的可嵌套 NFT,增强了不同实现之间的一致性和互操作性。它是 ERC-6059 的改进版本,允许 NFT 之间的关系和交互。NFT 拥有其他 NFT 的能力可以扩展代币的实用性、可用性和兼容性。
捆绑和收集:用户可以将多个 NFT 捆绑在一起形成一个父 NFT,从而使多个代币的销售或转移作为一个单位进行。这对于希望更加高效管理和交易 NFT 收藏品的收藏者来说是非常有用的。
会员和委托:NFT 可以代表组织或 DAO 的会员资格。使用 ERC-7401,这些会员 NFT 可以拥有其他代币,如奖励或奖金 NFT,从而简化会员权益的分配和管理。此外,将所有权或投票权委托给其他 NFT 的能力促进了去中心化社区的治理。
游戏项目和虚拟资产:在游戏中,虚拟物品和资产可以表示为 NFT。使用 ERC-7401,玩家可以将多个物品或资产捆绑成一个父 NFT,使管理和交易他们的游戏物品变得更简单。
多媒体内容分发:内容创作者可以将各种多媒体资产,如图片、视频和音频文件,捆绑成一个单一的父 NFT。这个父 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);
}
要开始工作,请克隆使用 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 是一个专为 DApp 开发和测试而量身定制的平台。开发者可以自由构建个性化的私有测试网沙盒,跨越多种区块链网络。可以无限制地铸造原生代币和 ERC20 代币,加上 BuildBear 上快速的交易时间(少于 3 秒!),极大丰富了 DApp 开发生命周期。该平台配备了实时测试和调试工具,确保开发者能够轻松监控复杂的区块链交易。
作者: Sana
- 原文链接: medium.com/buildbear/a-c...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!