December 6, 2022

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

4. Устанавливаем HardHat

 npm install --save-dev hardhat

5. Создаем новый проект

npx hardhat

в терминале выбираем js

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, ...]
    }
  }

через dotenv:

создаем в корне файл .env

‼️ не забудьте добавить исключение в файл .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 -> копируем новый ключ

Вставляем в hardhat.config.js

    networks: {
     [process.env.NETWORK] : {
       url: process.env.INFURA_URL,
       accounts: [process.env.PRIVATE_KEY]
     }
    }

8. Импортируем необходимые зависимости

require("@nomiclabs/hardhat-etherscan");
require('dotenv').config();

9. Проверим настройки HardHat

 npx hardhat

если все норм - выпадет список команд

10. Удаляем стандартный (Lock.sol) и создаем ваш контракт в папке contracts

после сохраниения скомпилируем контракты

npx hardhat compile

11. Настроим скрип deploy.js

настройка зависит от конфигурации ваших контрактов (наличия аргументов и др)

стандартный файл выглядит так

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 прописываем названия своего контракта, также с большой и маленькой буквы

12. Deploy смарт-контракта

перед деплоем можно очистить скомпилированные контракты

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