本文介绍了如何在以太坊区块链上创建和部署自己的NFT,包括所需工具、智能合约的编写及其部署和铸造过程,具体步骤清晰易懂,适合对NFT开发感兴趣的读者。
嘿 🤟 !! NFT 是热潮!!! 这正在改变所有艺术家的世界。这不是区块链上最酷的事情吗?
你怎么看?我们要不要自己做个 NFT?好吧,如果你愿意,就跟着我一起走吧。
NFT 是“非同质化代币”(Non-Fungible Token)的缩写。 这是一种数字资产,可能代表也可能不代表现实世界的物体,例如音乐、艺术、视频。与任何其他代币类似,NFT 在线买卖。然而,它们最大的 USP(独特销售主张)是它们是独一无二的,因此在元宇宙世界中拥有巨大的价值。例如,Axie Infinity。
由于每个 NFT 是单独“拥有”的,存在一些收藏家,会收集这样的 NFT,并对这些“数字权利”赋予高度的价值。
现在,让我们动手创建自己的 NFT 合同。
确保你已经阅读了这系列文章的 第 1 部分,以便更好地了解我们正在做什么。如果你喜欢我们的工作,请鼓掌 👏 并分享,以便我们知道我们的内容对你有用。
请注意,你需要将你的 MetaMask 连接到孟买 Matic 测试网络以便进行本教程。阅读 👉 这篇,以便与你的 MetaMask 连接到孟买 Matic 测试网络。连接完成后,你应获取测试代币;为此访问 👉 这里
还要注意:你可以从这里下载并运行我们在教程中使用的相同代码(即 tuts)👉 Github 存储库 _。如果你喜欢我们的材料,请在 Github 上给我们一个星星 🌟。
💥 砰!现在让我们进入有趣的部分 💥
创建一个文件夹并使用 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 文件夹了 🕧
在你的 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_);
}
}
CLI 命令
npm install @openzeppelin/contracts
获取你的 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}`],
},
}
}
在脚本目录中创建一个文件 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
将此地址保存到某个地方以备后用!
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 在 👉 这里)
在你的脚本目录中创建一个文件 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-Dev 和 Pari Tomar
- 原文链接: medium.com/buildbear/dud...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!