Создание проекта смарт-контракта NFT с помощью Hardhat: подробное руководство

Мир невзаимозаменяемых токенов (NFT) приобрел огромную популярность, и многие разработчики стремятся создавать свои собственные NFT-проекты. В этой статье мы рассмотрим, как инициализировать проект смарт-контракта NFT с помощью Hardhat, популярной среды разработки для Ethereum. Мы рассмотрим различные методы с примерами кода, которые помогут вам начать работу с NFT.

Содержание:

  1. Настройка среды разработки
  2. Установка защитного шлема и зависимостей
  3. Создание смарт-контракта NFT
  4. Определение метаданных NFT
  5. Реализация функции майнинга NFT
  6. Добавление метаданных в URI токена
  7. Развертывание смарт-контракта в сети Ethereum
  8. Взаимодействие с NFT в блокчейне

Давайте рассмотрим каждый из этих шагов подробно.

  1. Настройка среды разработки.
    Прежде чем мы начнем, убедитесь, что на вашем компьютере установлены Node.js и npm (менеджер пакетов Node). Вы можете проверить их установку, выполнив в терминале следующие команды:

    node --version
    npm --version
  2. Установка Hardhat и зависимостей:
    Чтобы инициализировать новый проект Hardhat, откройте терминал и перейдите в нужный каталог. Выполните следующие команды:

    mkdir my-nft-project
    cd my-nft-project
    npm init -y
    npm install --save-dev hardhat
    npx hardhat
  3. Создание смарт-контракта 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
    }
  4. Определение метаданных NFT:
    Создайте новый каталог с именем metadataв корне вашего проекта. В каталоге metadataдобавьте файл JSON для каждого NFT, который вы хотите создать. Файл JSON должен содержать метаданные, такие как имя, описание и URL-адрес изображения.

  5. Реализация функции создания NFT:
    Добавьте новую функцию в контракт MyNFT, чтобы разрешить создание NFT. Вот пример базовой функции чеканки:

    function mintNFT(address recipient, uint256 tokenId) external {
    _mint(recipient, tokenId);
    }
  6. Добавление метаданных в 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));
    }
  7. Развертывание смарт-контракта в сети 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);
    });
  8. Взаимодействие с 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 в блокчейне.