Deploy smart-contract with HardHat
В этой статье я по шагам опишу как задеплоить и верифицировать смарт-контракт при помощи HardHat.
Полный туториал можно посмотреть в моем видео: https://youtu.be/AJduzEcD0QY
Некоторые детали, я опущу, ожидая, что у вас уже есть некоторый опы.
1. Устанавливаем Metamask, если еще нет: https://metamask.io/download/
2. Скачиваем Node.js и устанавливаем на компьютер (необходимо для работы HardHat)
3. Создаем папку для проекта и переходим в нее
mkdir Ethereum cd ./Ethereum
npm install --save-dev hardhat
npx hardhat
6. Устанавливаем дополнительные пакеты: OpenZepplin (понадобятся в любом случае!), dotenv, ethersnan
npm install --save-dev @nomiclabs/hardhat-etherscan npm install dotenv npm install @openzeppelin/contracts
про dotenv можно почитать здесь https://www.npmjs.com/package/dotenv
7. Открываем проект в редакторе и настроим hardhat.config.js
- необходимо настроить network
networks: { hardhat: { }, goerli: { url: "https://eth-goerli.alchemyapi.io/v2/123abc123abc123abc123abc123abcde", accounts: [privateKey1, privateKey2, ...] } }
‼️ не забудьте добавить исключение в файл .gitignore, если планируете заливать папку на git
прописываем необходимые переменные:
NETWORK="sepolia" INFURA_URL="https://sepolia.infura.io/v3/xxx0000" PRIVATE_KEY="xxx000xxx" ETHERSCAN_API="xxx000"
- вместо sepolia указываем совою сеть, в которую собираетесь деплоить контракт
- регистрируемся на сайте https://app.infura.io/ , нажимаем на кнопку CREATE NEW KEY и выбираем нужную ссылку на вашу сеть, вставляем в кавычки INFURA_URL
- заходим в Metamask, "три точки" -> реквизиты счета -> экспорт закрытого ключа, вставляем в PRIVATE_KEY
- заходим на сайт https://etherscan.io , регистрируемся и в меню, которое раскрывается по клику на ваш ник в верхнем правом углу, нажимаем API Keys -> +Add вводим название -> create -> копируем новый ключ
networks: { [process.env.NETWORK] : { url: process.env.INFURA_URL, accounts: [process.env.PRIVATE_KEY] } }
8. Импортируем необходимые зависимости
require("@nomiclabs/hardhat-etherscan"); require('dotenv').config();
npx hardhat
если все норм - выпадет список команд
10. Удаляем стандартный (Lock.sol) и создаем ваш контракт в папке contracts
после сохраниения скомпилируем контракты
npx hardhat compile
настройка зависит от конфигурации ваших контрактов (наличия аргументов и др)
const hre = require("hardhat"); async function main() { const TokenDrop = await hre.ethers.getContractFactory("TokenDrop"); const tokenDrop = await TokenDrop.deploy(); await tokenDrop.deployed(); console.log("TokenDrop:", tokenDrop.address); } // We recommend this pattern to be able to use async/await everywhere // and properly handle errors. main().catch((error) => { console.error(error); process.exitCode = 1; });
вместо TokenDrop прописываем названия своего контракта, также с большой и маленькой буквы
перед деплоем можно очистить скомпилированные контракты
npx hardhat clean
npx hardhat run scripts/deploy.js --network sepolia
13. Верифицируем смарт-контракт
для реботы etherscan в hardhat.config.js необходимо добавить:
etherscan: { apiKey: process.env.ETHERSCAN_API }
после этого можно запустить команду для верификации
npx hardhat verify xxx000xxx --network goerli
При использовании аргументов при деплое, необходимо указать их в конце команды в ковычках
npx hardhat verify CONTRACT_VER --network goerli "0xaC560B3BC37EC0B1D4600000000000000" "100"
Если все успешно вы увидите надпись success в терминале.
Более подробно я рассказываю в своем видео: https://youtu.be/AJduzEcD0QY