Развертывание проекта NFT на Ethereum
Предпочитаете видео?
Если вы предпочитаете учиться на видео, у нас есть запись этого урока на нашем YouTube. Посмотрите видео, нажав на скриншот ниже, или переходите к чтению руководства!
Предварительные условия
- Настройка метамаски (курс для начинающих — уровень 4)
- Проверьте, есть ли на вашем компьютере Node.js. Если нет, скачайте отсюда
Создайте
Смарт-контракт
Для создания смарт-контракта мы будем использовать Hardhat.
Hardhat — это среда разработки Ethereum и фреймворк, предназначенный для разработки полного стека. Проще говоря, вы можете написать свой смарт-контракт, развернуть его, запустить тесты и отладить код.
- Чтобы создать проект Hardhat, откройте терминал и выполните следующие команды
mkdir NFT-Tutorial
cd NFT-Tutorial
npm init --yes
npm install --save-dev hardhat
- В том же каталоге, где вы установили Hardhat, запустите программу:
npx hardhat
- Выберите
Create a basic sample project
. - Нажмите ввод для уже указанного
Hardhat Project root
- Нажмите Enter для вопроса о том, хотите ли вы добавить
.gitignore
- Нажмите ввод для
Хотите ли вы установить зависимости этого образца проекта с помощью npm (@nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers)?
Теперь у вас есть проект hardhat, готовый к работе!
Если вы не на mac, пожалуйста, сделайте этот дополнительный шаг и установите эти библиотеки тоже 🙂
npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers
Написание кода контрактов NFT
Установим контракты Open Zeppelin, В окне терминала выполните эту команду
npm install @openzeppelin/contracts
- В папке с контрактами создайте новый солидити файл под названием NFTee.sol
- Теперь мы напишем некоторый код в файле NFTee.sol. Мы будем импортировать контракт Openzeppelin ERC721. ERC721 является наиболее распространенным стандартом для создания NFT. На первом курсе мы будем использовать только ERC721. На втором курсе вы узнаете больше об ERC721 в деталях. Так что не волнуйтесь, если вы не все поняли 🙂
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// Import the openzepplin contracts
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
// GameItem is ERC721 signifies that the contract we are creating imports ERC721 and follows ERC721 contract from openzeppelin
contract GameItem is ERC721 {
constructor() ERC721("GameItem", "ITM") {
// mint an NFT to yourself
_mint(msg.sender, 1);
}
}
- Скомпилируйте контракт, откройте терминал и выполните следующие команды
npx hardhat compile
Если ошибок нет, то все готово 🙂
Настройка развертывания
-
Давайте развернем контракт в сети
rinkeby
. Сначала создайте новый файл с именемdeploy.js
в папкеscripts
. -
Теперь мы напишем код для развертывания контракта в файле
deploy.js
.
// Import ethers from Hardhat package
const { ethers } = require("hardhat");
async function main() {
/*
A ContractFactory in ethers.js is an abstraction used to deploy new smart contracts,
so nftContract here is a factory for instances of our GameItem contract.
*/
const nftContract = await ethers.getContractFactory("GameItem");
// here we deploy the contract
const deployedNFTContract = await nftContract.deploy();
// print the address of the deployed contract
console.log("NFT Contract Address:", deployedNFTContract.address);
}
// Call the main function and catch if there is any error
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
- Теперь создайте файл
.env
в папкеNFT-Tutorial
и добавьте следующие строки. Используйте инструкции в комментариях для получения API-ключа Alchemy и закрытого ключа RINKEBY. Убедитесь, что счет, с которого вы получаете приватный ключ rinkeby, пополнен эфиром Rinkeby. Вы можете получить его здесь: https://www.rinkebyfaucet.com/.
// Go to https://www.alchemyapi.io, sign up, create
// a new App in its dashboard and select the network as Rinkeby, and replace "add-the-alchemy-key-url-here" with its key url
ALCHEMY_API_KEY_URL="add-the-alchemy-key-url-here"
// Replace this private key with your RINKEBY account private key
// To export your private key from Metamask, open Metamask and
// go to Account Details > Export Private Key
// Be aware of NEVER putting real Ether into testing accounts
RINKEBY_PRIVATE_KEY="add-the-rinkeby-private-key-here"
Alchemy можно рассматривать как AWS EC2 для блокчейна. Это провайдер узлов. Он помогает нам подключиться к блокчейну, предоставляя нам узлы, чтобы мы могли читать и писать в блокчейн. Alchemy — это то, что помогает нам развернуть контракт на rinkeby.
- Теперь нам нужно установить пакет
dotenv
, чтобы иметь возможность импортировать env-файл и использовать его в нашем конфиге. В терминале выполните эти команды.
npm install dotenv
- Теперь откройте файл hardhat.config.js, здесь мы добавим сеть
rinkeby
, чтобы мы могли развернуть наш контракт на rinkeby. Замените все строки в файлеhardhat.config.js
на приведенные ниже строки
require("@nomiclabs/hardhat-waffle");
require("dotenv").config({ path: ".env" });
const ALCHEMY_API_KEY_URL = process.env.ALCHEMY_API_KEY_URL;
const RINKEBY_PRIVATE_KEY = process.env.RINKEBY_PRIVATE_KEY;
module.exports = {
solidity: "0.8.4",
networks: {
rinkeby: {
url: ALCHEMY_API_KEY_URL,
accounts: [RINKEBY_PRIVATE_KEY],
},
},
};
- Для развертывания в терминале введите:
npx hardhat run scripts/deploy.js --network rinkeby
- Сохраните адрес контракта NFT, который был напечатан на вашем терминале, в блокноте, он вам понадобится.
Проверка на Etherscan
- Зайдите в Rinkeby Etherscan и найдите адрес, который был напечатан.
- Если
адрес
откроется на etherscan, то вы развернули свой первый NFT 🎉. - Перейдите к деталям транзакции, нажав на хэш транзакции, проверьте, что на ваш адрес был переведен токен.
Эта статья предоставлена LearnWeb3 DAO. Бесплатная, всеобъемлющая программа обучения блокчейну от А до Я для разработчиков по всему миру.
Все от «Что такое блокчейн» до «Взлома смарт-контрактов» — и все, что между ними, а также многое другое!
Присоединяйтесь к нам сейчас, чтобы начать строить вместе с 25 000+ разработчиками.
Сайт
Discord
Twitter