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