在短短5分钟内使用ERC1155铸造数百个NFT 😊😊

  • BuildBear
  • 发布于 2022-05-11 13:22
  • 阅读 19

本文介绍了如何使用ERC-1155标准快速铸造NFT,相较于ERC-721标准,ERC-1155具有更高的效率和成本效益。文章将详细讲解使用Remix IDE、IPFS和Metamask进行智能合约的创建和部署,并提供了丰富的代码示例和使用说明。

在我们之前的一篇文章中,我们铸造了自己的 NFT,并使用了 ERC721 合约,这确实是一次很棒的体验!那篇文章的链接:👉 在这里

现在!我们将进行挑战,让它变得更加有趣和快速!

在本文中,我们将使用 ERC-1155 标准来铸造我们的 NFT。

不仅如此,我们还将尝试在 5 分钟内铸造我们的 NFT。

你可能会想,为什么要使用 ERC-1155 来铸造我们的 NFT,而不是标准的 ERC-721,对吗?

这是因为有一些 关键区别 应该解答这个问题:

  • 一个 智能合约用于所有:ERC-721 标准仅生成 NFT,并强迫开发者为每个新代币创建一个智能合约。而 ERC-1155 允许开发者开发一个单一的智能合约,可以用于铸造 可替代代币 或者 NFT。是的,这意味着可以在一个合约下有多个这些代币。 它能够支持同一地址和合约上的多种状态。换句话说,这意味着你可以在该地址上使用可替代代币进行游戏内支付,并同时转移独特的 NFT 资产。
  • 效率: ERC-721 允许每个交易进行一次操作。这既昂贵又耗时。而 ERC-1155 允许在一个交易中进行多次操作。因此,交易变得更加便宜和高效。

与占用大量空间的 ERC-721 不同,ERC-1155 在区块链网络上使用更少的存储空间。这是因为 ERC-1155 具备以下功能:

  • 批量转移: 在一次调用中转移多个资产。
  • 批量批准: 批准所有代币到一个地址。

这导致在区块链网络上的空间消耗更少。

现在我们已经看到了一些 ERC-1155 的好处,让我们开始吧 🏃🏻

我们将使用的工具🛠️

  1. Remix IDE: 这是一个强大的开源工具,可以帮助你直接在浏览器中编写 Solidity 合约,加快整个开发过程。然而,在我们看来,这不应成为你处理项目的首选策略。
  2. IPFS:IPFS 是一个分布式系统,用于存储和访问文件、网站、应用程序和数据。我们将使用 Pinata 客户端与 IPFS 进行交互。Pinata 使用户能够随时随地与他们想要的人上传、管理和共享他们的内容。
  3. MetaMask:MetaMask 是一个 Chrome 钱包,让我们可以与区块链进行互动。我们需要从 MetaMask 中获取我们的钱包详细信息。你有很多其他选择,但为方便起见,我们将坚持使用这个。

请注意,为了本教程的目的,你需要将你的 MetaMask 连接到 Mumbai Matic Testnet 网络。阅读 👉 这篇,确保你已连接到 Mumbai Matic Testnet。一旦完成,你应获取测试代币;为此,请前往 👉 这个链接

🏋️ 现在让我们进入有趣的部分 🏋️‍♀️

1. 编写我们的智能合约

为了更快地铸造我们的 NFT,我们将使用 Remix IDE 来编写我们的智能合约! 🚅

因此,如果你是 Remix IDE 的新手,我们强烈建议你观看 这个 视频。

首先,我们将创建一个 Solidity 文件,在其中定义我们的合约并铸造一些《权力的游戏》角色的 NFT。 😮

因此,我们将把文件命名为 GameofThrones.sol

其次,我们将从 Openzeppelin 导入 ERC-1155 合约,以便在我们的合约中使用其功能。

第三,我们将定义我们的智能合约,以铸造我们的 NFT,同时继承自 Openzeppelin 的 ERC1155 合约

你的代码应该类似于以下内容 👇

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol>";contract GameofThrones is ERC1155 { }

接下来,我们将为 NFT 指定一些名称和 ID,以便后续测试引用。

例如,在这里我们将 ID 分配给不同角色名称的变量。

由此,我们可以说 ID 为 1 的 NFT 是 JonSnow 依此类推。

uint256 public constant JonSnow = 1;
uint256 public constant CerseiLannister = 2;
uint256 public constant DaenerysTargaryen = 3;
uint256 public constant NightKing = 4;
uint256 public constant TyrionLannister = 5;
uint256 public constant AryaStark = 6;

现在,我们将定义构造函数,在其中我们将使用 ERC1155 合约中的 _mint 函数来铸造我们的 NFT。

mint 函数中,我们将定义一些值:

  • 发送者的地址
  • 我们将铸造的代币
  • 我们想要铸造的代币数量
  • 代币的数据

还有一件有趣的事情,我们已经将 NFT 元数据上传到 IPFS 节省我们的时间。

IPFS 是去中心化存储。在这里,我们使用了 Pinata IPFS,它使用户能够存储他们的数据。

这是 文件夹,存放我们将用于 NFT 的元数据。因此,这里有 6 个不同 NFT 的元数据。

如果你是 Pinata 的新手,我们建议你浏览之前的 文章,我们在其中介绍了如何将你的 NFT 的元数据上传到 Pinata IPFS。

你的构造函数应类似于以下内容 👇

constructor() ERC1155("<https://gateway.pinata.cloud/ipfs/QmXLdCoTPVZ8Vf5PrEZR1awPKR8PvxmyEakaR5ummPCPnh/{id}.json>") {
        _mint(msg.sender, JonSnow, 100, "");
        _mint(msg.sender, CerseiLannister, 100, "");
        _mint(msg.sender, DaenerysTargaryen, 100, "");
        _mint(msg.sender, NightKing, 1, "");
        _mint(msg.sender, TyrionLannister, 100, "");
        _mint(msg.sender, AryaStark, 100, "");
}

请注意,对于《权力的游戏》角色,所有角色都是可替代代币,而 NightKing 代币是非可替代代币,因为我们只铸造了一个。

ERC1155 合约包括可选扩展 IERC1155MetaDataURI。这就是 URI 函数的来源:我们将用它来获取元数据 URI。

因此,如果我们在元数据 URI 中用 token ID 1 替换 id,我们就可以获取第一个 NFT 的元数据。

结果将类似于以下内容 👇

但 OpenSea 不理解我们在元数据 URI 中编码 id 的方式。

因此,我们必须重写 URI 函数,以便它的工作方式有所不同。为此,我们需要一些帮助函数来处理字符串。

因此,我们将从 Openzeppelin 的合约中导入 Strings 合约。

import "<https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol>";

然后将以下代码添加到你的合约中:

function uri(uint256 _tokenId) override public view returns (string memory) {
        return string(
            abi.encodePacked(
                "<https://gateway.pinata.cloud/ipfs/QmXLdCoTPVZ8Vf5PrEZR1awPKR8PvxmyEakaR5ummPCPnh/>",
                Strings.toString(_tokenId),
                ".json"
            )
        );
}

在这里,我们正在编写自己的 URI 函数实现,我们希望获取代币 ID 然后将基本 URL 和所需代币 ID(这是一个整数)拼接成字符串。

通过这样做,我们将使我们的 ERC-1155 合约准备好以进行部署!! 😃

你的智能合约应类似于以下内容👇

为了方便你,你可以使用这个 ➡️ 链接 🔗 直接在你的浏览器中加载此合约。

因此,现在是时候部署我们的合约并在 Opensea 上查看我们的 NFT。 🤯

2. 在 Mumbai Matic Testnet 上部署智能合约

Opensea 支持多个网络,如 Rinkeby、Mumbai Matic 等。因此,我们将使用 Mumbai Matic 测试网络来铸造我们的 NFT。

我们将遵循一些步骤来部署我们的合约:

  • 为了部署合约,我们将使用在 Mumbai Matic 测试网络上的 MetaMask 钱包,这样一来,一旦合约被部署,Opensea 可以轻松获取。
  • 在你的 MetaMask 钱包中切换到 Mumbai Matic 测试网络,并确保你拥有一些测试 Matic 以便执行交易。如果你没有测试 Matic,请前往 👉 这里

  • 然后,在 Deploy & Run Transactions 部分将 Remix IDE 环境更新为 Injected Web3
  • 完成后,你可以看到 Remix IDE 中显示的账户地址与你的 MetaMask 账户相同。

之后

  • 选择你想要部署的合约。在我们的例子中,我们有 GameofThrones.sol
  • 现在,当你点击部署按钮时,你可以看到一个 MetaMask 窗口弹出,询问我们确认交易。

点击确认按钮,在 Opensea 上铸造我们的 NFT。

太棒了!! 🎺🎺🎺

你已经铸造了自己的 NFT。 😲😲😲

不再浪费任何时间,我们将使用此链接查看我们在 Opensea 上铸造的 NFT

[<https://testnets.opensea.io/><your-account-address>?tab=created] 你可以在 这里 查看我的

向你的朋友展示你的 NFT,不要忘记在 Twitter 上标记我们 @uv_labs

我们一定会转发你的 NFT 🥳

如果你收到任何错误消息,也可以通过 Twitter 标记我们来询问。

如果你喜欢我们的工作,请给我们一个星星,鼓掌。

作者(欢迎反馈):👇

Amateur-DevPari Tomar

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

0 条评论

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