本文介绍了如何使用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 不同,ERC-1155 在区块链网络上使用更少的存储空间。这是因为 ERC-1155 具备以下功能:
这导致在区块链网络上的空间消耗更少。
现在我们已经看到了一些 ERC-1155 的好处,让我们开始吧 🏃🏻
请注意,为了本教程的目的,你需要将你的 MetaMask 连接到 Mumbai Matic Testnet 网络。阅读 👉 这篇,确保你已连接到 Mumbai Matic Testnet。一旦完成,你应获取测试代币;为此,请前往 👉 这个链接
🏋️ 现在让我们进入有趣的部分 🏋️♀️
为了更快地铸造我们的 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。 🤯
Opensea 支持多个网络,如 Rinkeby、Mumbai Matic 等。因此,我们将使用 Mumbai Matic 测试网络来铸造我们的 NFT。
我们将遵循一些步骤来部署我们的合约:
之后
点击确认按钮,在 Opensea 上铸造我们的 NFT。
太棒了!! 🎺🎺🎺
你已经铸造了自己的 NFT。 😲😲😲
不再浪费任何时间,我们将使用此链接查看我们在 Opensea 上铸造的 NFT
[<https://testnets.opensea.io/><your-account-address>?tab=created]
你可以在 这里 查看我的
向你的朋友展示你的 NFT,不要忘记在 Twitter 上标记我们 @uv_labs
我们一定会转发你的 NFT 🥳
如果你收到任何错误消息,也可以通过 Twitter 标记我们来询问。
如果你喜欢我们的工作,请给我们一个星星,鼓掌。
作者(欢迎反馈):👇
- 原文链接: medium.com/buildbear/min...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!