我刚刚部署了自己的NFT!!!太疯狂了!

  • BuildBear
  • 发布于 2022-04-06 12:45
  • 阅读 112

本文介绍了如何在以太坊区块链上创建和部署自己的NFT,包括所需工具、智能合约的编写及其部署和铸造过程,具体步骤清晰易懂,适合对NFT开发感兴趣的读者。

我刚刚部署了自己的 NFT!!!….WT.F!

Mint your own NFT

嘿 🤟 !! NFT 是热潮!!! 这正在改变所有艺术家的世界。这不是区块链上最酷的事情吗?

你怎么看?我们要不要自己做个 NFT?好吧,如果你愿意,就跟着我一起走吧。

NFT 是“非同质化代币”(Non-Fungible Token)的缩写。 这是一种数字资产,可能代表也可能不代表现实世界的物体,例如音乐、艺术、视频。与任何其他代币类似,NFT 在线买卖。然而,它们最大的 USP(独特销售主张)是它们是独一无二的,因此在元宇宙世界中拥有巨大的价值。例如,Axie Infinity。

由于每个 NFT 是单独“拥有”的,存在一些收藏家,会收集这样的 NFT,并对这些“数字权利”赋予高度的价值。

NFT 的解释:人们为什么会花数百万美元购买 JPEG

现在,让我们动手创建自己的 NFT 合同。

我们将使用的工具 🛠️

  • Alchemy: 我们将使用 Alchemy 节点提供者,它为我们提供一个免费层级来访问孟买 Matic 测试网络(是的,我们今天将使用孟买 Matic 测试网络进行我们的教程)。
  • MetaMask: MetaMask 是一个 Chrome 钱包,允许我们与区块链进行交互。我们将需要来自 MetaMask 的钱包详细信息。你还有许多其他选择;但我们为了简单起见,将只使用这个。
  • Hardhat: Hardhat 是一个开发工具,可以让我们轻松测试和部署我们的智能合同。
  • IPFS: IPFS 是一个分布式系统,用于存储和访问文件、网站、应用程序和数据。我们将使用 Pinata 客户端与 IPFS 进行交互。Pinata 允许用户随时随地与所需的对象上传、管理和共享他们的内容。

确保你已经阅读了这系列文章的 第 1 部分,以便更好地了解我们正在做什么。如果你喜欢我们的工作,请鼓掌 👏 并分享,以便我们知道我们的内容对你有用。

请注意,你需要将你的 MetaMask 连接到孟买 Matic 测试网络以便进行本教程。阅读 👉 这篇,以便与你的 MetaMask 连接到孟买 Matic 测试网络。连接完成后,你应获取测试代币;为此访问 👉 这里

还要注意:你可以从这里下载并运行我们在教程中使用的相同代码(即 tuts)👉 Github 存储库 _。如果你喜欢我们的材料,请在 Github 上给我们一个星星 🌟。

💥 砰!现在让我们进入有趣的部分 💥

1. 初始化我们的项目

创建一个文件夹并使用 npm init -yes 初始化它,以安装我们项目所需的各种依赖项。

CLI 命令

mkdir NFT-verse && cd NFT-verse
npm init -yes

安装 Hardhat 并创建一个空的配置文件以初始化我们的 NFT 配置。

CLI 命令

npx hardhat

运行上述命令后,你会看到 欢迎 Hardhat 的文本和一些选项。选择 ‘创建一个空的配置文件’,因为我们将从头开始构建一切。

完成后,你将在根目录中看到一个 hardhat.config.js 文件。

现在,为我们的合同和脚本创建文件夹

CLI 命令

mkdir contracts && mkdir scripts

🕧 现在是时候在代码编辑器中打开你的 NFT 文件夹了 🕧

2. 编写我们的智能合同

在你的 contracts 目录 中创建一个文件 NFT.sol,以编写我们智能合同的 Solidity 代码。

以下是我们智能合同的示例代码。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";// 我们的合同 NFT 继承自 openzeppelin 的 ERC721URIStorage 合同
contract NFT is ERC721URIStorage {
    // 导入并声明一个计数器
    // 以跟踪铸造的总代币
    using Counters for Counters.Counter;
    Counters.Counter private tokenId;    // 我们的构造函数调用 ERC721
    // 分别传递名称和符号两个参数
    constructor() ERC721("UVLabs", "UVL") {}    // 定义一个 mint 函数,接受接收者的地址和 tokenURI 作为参数
    function mint(address recipientAddress, string memory tokenURI_) public returns (uint256 newItemId) {
        // 将 tokenId 值递增一
        tokenId.increment();
        newItemId = tokenId.current();        // _safeMint 是一个私有方法
        // 它铸造计数器的下一个值
        _safeMint(recipientAddress, newItemId);
        _setTokenURI(newItemId, tokenURI_);
    }
}

让我们快速了解一下我们的智能合同 🏃

  • 首先,我们定义了将要使用的 Solidity 版本。
  • 然后,我们使用了一些由 openzeppelin 提供的标准合同;一旦你完全投入智能合同开发,你会意识到 Open Zeppelin 合同是天赐之物。为了使用他们的合同,我们需要在本地项目中安装它们。

CLI 命令

npm install @openzeppelin/contracts
  • 然后,我们定义了我们的合同 NFT,它继承自 openzeppelin 的 ERC721URIStorage 合同*。*
  • 下一行用于跟踪铸造的总代币数量。
  • 然后,构造函数调用 openzeppelin 的 ERC721,接受两个参数,即名称和符号*。* 你可以自由选择自己的名称和符号。
  • 然后我们有了我们的朋友,mint 函数。它接受两个参数。第一个是要发放 NFT 的地址;第二个是 tokenURI。我们将在稍后解释 tokenURI 部分。

3. 自定义 ‘hardhat.config.js’

获取你的 MetaMask 账户密钥和 Alchemy 的端点 URL。

如果你对这些信息感到陌生,可以考虑查看我们之前的文章以更好地理解,然后再继续。以下是链接供你参考: 第 1 部分

将你的 Hardhat.config.js 更新为以下内容:

/**
 * @type import('hardhat/config').HardhatUserConfig
 */require('dotenv').config();
require('@nomiclabs/hardhat-ethers')const {API_URL, PRIVATE_KEY} = process.env;module.exports = {
  solidity: "0.8.1",
  networks: {
    hardhat: {},
    "mumbai-matic": {
      url: API_URL,
      accounts: [`0x${PRIVATE_KEY}`],
    },
  }
}

4. 部署脚本

在脚本目录中创建一个文件 deploy.js,并编写你的部署脚本。我们的示例代码如下:

const { ethers } = require("hardhat");async function main() {
    const NFT = await ethers.getContractFactory("NFT");
    const deployedNFT = await NFT.deploy();
    console.log(`合同部署到地址: ${deployedNFT.address}`)
}main()
.then(() => process.exit(0))
.catch((error) => {
    console.error(error);
    process.exit(1);
});

现在,让我们部署我们的智能合同。 🎉🎉🎉🎉🎉

CLI 命令:

npx hardhat run scripts/deploy.js --network mumbai-matic

一旦成功执行,终端将输出合同部署的地址。例如,我们的地址是

合同部署到地址: 0x4D89D079aCfef45b7cDA107533A89d5c44DCFb94

将此地址保存到某个地方以备后用!

5. 创建 NFT 元数据 💽

NFT 元数据 文件是一个 JSON 文档,用于描述任何特定的 NFT。它允许你指定 NFT 的名称、URI 和其他属性。

创建一个新文件 NFTMetadata.json。我们的示例文件如下(也在存储库中):

{
    "description": "UVLabs",
    "image": "<https://gateway.pinata.cloud/ipfs/QmTfjtxzekdGkZvm9qcFaFMWAsgkjUtiU7knSyQ3d2ze62>",
    "name": "UVLabs"
}

NFTMetadata.json 文件上传到 Pinata。完成后使用 Pinata 打开 JSON 文件并复制 URL。请注意,上面提到的图像 URL 只是我们要在 NFT 中包含的图像的 URL。你还会获得 JSON 文件的类似 URL。

是的,如果你想让你的 NFT 有个酷炫的图像,首先必须将其上传至 Pinata,并在 JSON 文件的 image 标签中保存。

专业提示 : 你还可以添加一个字段 animation_url_ 来制作动画 NFT!例如:https://api.foundation.app/opensea/114867(这个 NFT 在 👉 这里

5. 铸造脚本 ⛏️

在你的脚本目录中创建一个文件 mint.js

我们的示例 mint.js 文件如下供你参考:

const hre = require('hardhat');async function main() {
  const tokenURI = "<https://gateway.pinata.cloud/ipfs/Qmc4ywZjPsHAb67PVNPjRpjKgcqEAhxwy1FzkdPHoo5e4h>";
// 这是你从 Pinata 获取的 URL
const nftContractFactory = await ethers.getContractFactory("NFT");
const nftContractInstance = new ethers.Contract(
    "0x4D89D079aCfef45b7cDA107533A89d5c44DCFb94",
    //插入已部署合约地址
    nftContractFactory.interface,
  )const signer = await ethers.provider.getSigner();
const signerAddress = await signer.getAddress()
const txn = await nftContractInstance.connect(signer).mint(signerAddress, tokenURI)

txn.wait();
  console.log(`你的交易已成功广播!交易哈希是 ${txn.hash}`);
  if (hre.network.config.url != '<http://127.0.0.1:8545>') {
    console.log(`\\n请访问此链接 <https://testnets.opensea.io/${signerAddress}`>);
  };
};main()
.then(() => process.exit(0))
.catch((error) => {
    console.error(error);
    process.exit(1);
});

运行 mint.js:

使用 CLI 命令:

npx hardhat run scripts/mint.js --network mumbai-matic

一旦成功执行,你将在终端中看到大致如下的输出:

你的交易已成功广播!
交易哈希是 0x449c9e5c47cf902834131f38f11f6b38d4919dc215141620fd70d7b45b5d2a99请访问此链接 <https://testnets.opensea.io/0xa5ac8d8A4c6E85aB211D2628b3C1Ebd4b25E03e0>

恭喜你! 🥳🥳🥳🥳🥳

你刚刚铸造了自己的 NFT!!

现在是时候在 Opensea 上查看我们的 NFT 了!!!终端提供了一个链接,你可以通过该链接在 Opensea 上实时查看 NFT。请注意,由于我们使用了孟买 Matic 测试网络,我们的链接会带你到 testnets.opensea.io,而非主网的 opensea 网站。

展示你的作品

🎊 现在是时候向大家展示你的作品了。 🎊 请在你向世界展示你的 NFT 时,标记我们 @uv_labs 在 Twitter 上。我们很想看到并分享它们!!!

如果你遇到任何错误信息,请记得在 Twitter 上标记 @uv_labs,以询问我们。

再次说明,我们现在所运行的所有代码在这里 👉 Github 存储库。如果你喜欢我们的工作,请给我们一个星星,鼓掌。

作者(欢迎反馈):Amateur-DevPari Tomar

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

0 条评论

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