Мир невзаимозаменяемых токенов (NFT) приобрел огромную популярность, и многие разработчики стремятся создавать свои собственные NFT-проекты. В этой статье мы рассмотрим, как инициализировать проект смарт-контракта NFT с помощью Hardhat, популярной среды разработки для Ethereum. Мы рассмотрим различные методы с примерами кода, которые помогут вам начать работу с NFT.
Содержание:
- Настройка среды разработки
- Установка защитного шлема и зависимостей
- Создание смарт-контракта NFT
- Определение метаданных NFT
- Реализация функции майнинга NFT
- Добавление метаданных в URI токена
- Развертывание смарт-контракта в сети Ethereum
- Взаимодействие с NFT в блокчейне
Давайте рассмотрим каждый из этих шагов подробно.
-
Настройка среды разработки.
Прежде чем мы начнем, убедитесь, что на вашем компьютере установлены Node.js и npm (менеджер пакетов Node). Вы можете проверить их установку, выполнив в терминале следующие команды:node --version npm --version
-
Установка Hardhat и зависимостей:
Чтобы инициализировать новый проект Hardhat, откройте терминал и перейдите в нужный каталог. Выполните следующие команды:mkdir my-nft-project cd my-nft-project npm init -y npm install --save-dev hardhat npx hardhat
-
Создание смарт-контракта NFT:
Создайте новый файл с именемMyNFT.sol
в каталогеcontracts
. Этот файл будет содержать код смарт-контракта. Вот пример базового контракта NFT:// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; contract MyNFT is ERC721 { constructor() ERC721("MyNFT", "NFT") {} // Add custom functionality here }
-
Определение метаданных NFT:
Создайте новый каталог с именемmetadata
в корне вашего проекта. В каталогеmetadata
добавьте файл JSON для каждого NFT, который вы хотите создать. Файл JSON должен содержать метаданные, такие как имя, описание и URL-адрес изображения. -
Реализация функции создания NFT:
Добавьте новую функцию в контрактMyNFT
, чтобы разрешить создание NFT. Вот пример базовой функции чеканки:function mintNFT(address recipient, uint256 tokenId) external { _mint(recipient, tokenId); }
-
Добавление метаданных в URI токена:
В контрактеMyNFT
переопределите функциюtokenURI
из контракта OpenZeppelin ERC721, чтобы включить метаданные для каждого жетон. Вот пример:function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); // Load metadata from JSON file string memory baseURI = _baseURI(); string memory jsonFile = ".json"; return string(abi.encodePacked(baseURI, tokenId.toString(), jsonFile)); }
-
Развертывание смарт-контракта в сети Ethereum:
Чтобы развернуть ваш смарт-контракт в сети Ethereum, вам необходимо создать сценарий развертывания. В каталогеscripts
создайте файл с именемdeploy.js
и добавьте код развертывания. Вот пример:const hre = require("hardhat"); async function main() { const MyNFT = await hre.ethers.getContractFactory("MyNFT"); const myNFT = await MyNFT.deploy(); await myNFT.deployed(); console.log("MyNFT deployed to:", myNFT.address); } main() .then(() => process.exit(0)) .catch(error => { console.error(error); process.exit(1); });
-
Взаимодействие с NFT в блокчейне.
Чтобы взаимодействовать с вашими NFT в блокчейне, вы можете использовать библиотеки web3.js или ethers.js. Вот пример создания NFT с использованием ethers.js:const { ethers } = require("ethers"); const provider = new ethers.providers.JsonRpcProvider("YOUR_RPC_PROVIDER_URL"); const signer = provider.getSigner(); const MyNFT = new ethers.Contract("MY_NFT_CONTRACT_ADDRESS", MyNFT.abi, signer); async function mintNFT() { const recipient = "RECIPIENT_ADDRESS"; const tokenId = 1; await MyNFT.mintNFT(recipient, tokenId); console.log("NFT minted successfully!"); } mintNFT();
Поздравляем! Вы узнали, как инициализировать проект смарт-контракта NFT с помощью Hardhat. Мы рассмотрели различные методы, включая настройку среды разработки, установку Hardhat и зависимостей, создание смарт-контракта NFT, определение метаданных NFT, реализацию функции создания NFT, добавление метаданных в URI токена, развертывание смарт-контракта в сети Ethereum, и взаимодействие с NFT в блокчейне.