如何创建和部署 ERC-1155 NFT

概述

ERC1155 已成为创建 NFT 的黄金标准;每个主要市场都将新代币列为 ERC1155 标准。在本文中,我们将了解 ERC1155 代币标准以及如何创建 ERC1155 代币。

我们将要做什么:

  1. 创建 3 个 NFT 集合
  2. 创建和部署 ERC-1155 合约
  3. 更新合约以兼容 OpenSea
  4. 部署我们的 NFT 集合

你需要什么:

v2-fc9de678e6150b187b37988ffcbab75f_1440w

什么是ERC1155?

ERC1155是一种多代币标准,允许在一个合约中创建同质化、非同质化和半同质化的代币。在 ERC1155 之前,如果一个用例需要 ERC20(同质化)和 ERC721(非同质化)代币,则需要单独的合约来实现这一点。ERC1155 还允许在一个智能合约中启动多个 NFT 集合,而不是为每个集合创建不同的合约;这提高了智能合约构建的效率并最大限度地减少了交易数量,这非常重要,因为它消耗更少的区块链空间。使用 ERC1155,也可以批量转移代币,而不是在以前的标准中将代币转移到单个地址。

ERC1155 应用的一个普遍例子是基于区块链的去中心化游戏,因为游戏需要硬币和收藏品,因此 ERC1155 已成为那里的标准。ERC1155 也已成为 NFT 领域的标准。

之前的 ERC721 具有代币 ID 与地址的一对一映射。ERC1155 有一个相当复杂的映射,其中代币 id 组合中的地址映射到代币的余额。

创建元数据 URI

我们将创建 3 个 NFT 集合(石头、纸和剪刀),每个集合中都有一个 NFT。要将我们的文件上传到去中心化存储 IPFS,我们可以通过 CLI上传文件或使用这个非常易于使用的工具NFT Storage

我们将使用第二个选项,NFT 存储。登录 NFT 存储并上传石头、纸张和剪刀的图像文件。成功上传后,您应该会看到如下内容:

NFT 存储 UI 显示上传文件的表格。

点击“Actions”,复制每张图片的IPFS URL;我们需要它作为每个集合的元数据。

从 NFT 存储 UI 复制 IPFS URL 的选项示例。

我们将创建三个 JSON 元数据文件来存储有关我们的 NFT 集合的信息。

  • 1.json: Rock collection
  • 2.json: Paper collection
  • 3.json: Scissors collection

我们的 1.json 文件看起来像这样:

{ //1.

    "name": "Rocks",

    "description": "This is a collection of Rock NFTs.",

    "image": "https://ipfs.io/ipfs/bafkreifvhjdf6ve4jfv6qytqtux5nd4nwnelioeiqx5x2ez5yrgrzk7ypi",

}
  • name: NFT 的名称。

  • description: NFT 的描述。

  • image:我们之前获得的图像的链接(IPFS URL)。

  • 如果一个集合有多个图像(通常是这种情况),则会添加一个额外的参数id以区分集合中的标记。

创建剩余的JSON文件2。json和3。json,分别用于布和剪刀收藏。

为了有效地将所有 JSON 文件上传到 IPFS,我们将以内容寻址格式归档它们。https://car.ipfs.io/ 帮助以 IPFS 兼容的内容寻址存档 (.car) 格式存档文件。

前往IPFS CAR ,并上传上面的三个 JSON 文件。上传后,下载 .car 文件并将其上传到NFT Storage。我们所有的 JSON 文件现在都以存档的方式存储在 IPFS 上。复制上传的 .car 文件的 IPFS URL,您应该可以通过在 URL 末尾输入文件名来访问 JSON 文件,例如:

https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/1.json

网页上显示的 Rock 集合的 JSON。

创建和部署 ERC1155 合约

我们将使用OpenZeppelin合约库来创建我们的 ERC1155 合约,并使用Ethereum REMIX IDE 在 Ropsten 测试网上部署。确保你有一些 Ropsten 测试 ETH,你也可以从Ropsten Faucet获得测试币。

在 REMIX 中创建一个新文件 token.sol 并将以下代码粘贴到其中。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";

contract rockPaperScissors is ERC1155 {
    uint256 public constant Rock = 1;
    uint256 public constant Paper = 2;
    uint256 public constant Scissors = 3;

    constructor() ERC1155("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/{id}.json") {
        _mint(msg.sender, Rock, 1, "");
        _mint(msg.sender, Paper, 1, "");
        _mint(msg.sender, Scissors, 1, "");
    }
}

上面代码的解释:

第 1 行:指定SPDX 许可类型,在 Solidity ^0.6.8 之后添加的。每当智能合约的源代码向公众开放时,这些许可证都可以帮助解决/避免版权问题。如果您不想指定任何许可类型,您可以使用特殊值 UNLICENSED 或直接跳过整个注释(不会导致错误,只是警告)。

第 2 行:声明 Solidity 版本。

第 4 行:导入 OpenZeppelin ERC1155 合约。

第 6-9 行:创建名为rockPaperScissors的合约并创建三个变量RockPaperScissors;然后为每个分配适当的ID。

第 11-15 行:使用 car 文件的链接作为参数初始化构造函数,使用参数铸造不同的 NFT 集合:

代币将被铸造到的地址,这里的msg.sender是指合约的部署者。token id,我们已经为token id 分配了名称,所以这里使用名称。每个代币的数量。最后一个是这里留空的数据字段。

编译合约,转到左侧菜单的第三个选项卡,选择Injected Web3作为环境并通过选择正确的合约名称进行部署:

带有部署选项的 REMIX 窗口。

从 MetaMask 批准交易。交易完成后,您的合约将被部署。

现在您可以通过输入地址和代币 ID 来执行诸如获取代币余额之类的功能。我们还可以通过输入代币 id 来检索代币的 URI。

已部署合约的 REMIX 窗口。

OpenSea 不支持返回的 URI 格式。所以我们需要覆盖 URI 函数以将文件名作为字符串返回:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

contract rockPaperScissors is ERC1155 {
    uint256 public constant Rock = 1;
    uint256 public constant Paper = 2;
    uint256 public constant Scissors = 3;

    constructor() ERC1155("https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/{id}.json") {
        _mint(msg.sender, Rock, 1, "");
        _mint(msg.sender, Paper, 1, "");
        _mint(msg.sender, Scissors, 1, "");
    }

    function uri(uint256 _tokenid) override public pure returns (string memory) {
        return string(
            abi.encodePacked(
                "https://ipfs.io/ipfs/bafybeihjjkwdrxxjnuwevlqtqmh3iegcadc32sio4wmo7bv2gbf34qs34a/",
                Strings.toString(_tokenid),".json"
            )
        );
    }
}

补充:

第 5 行:导入 OpenZeppelin 合约,将 Integer 转换为 String。

第 18-25 行:通过创建自定义 URI 函数并将代币从整数转换为字符串来覆盖 URI 函数,然后返回完整的 URI。

重新编译合约并部署。当您现在查询 URI 的合约时,它将返回 OpenSea 支持的格式。

输出为 OpenSea 兼容 URI 的 REMIX 窗口。

结论

恭喜您部署了 ERC1155 代币。如果您现在在这里做到了,您就会了解 ERC1155 多代币标准以及如何创建和部署 ERC1155 NFT。

相关新闻

联系我们

联系我们

133-3118-4066

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部