китаев.tech

Hardhat — основные команды

Основные команды Hardhat 3 для компиляции, тестов, локальной сети, запуска скриптов и очистки артефактов.

Какие команды нужны каждый день

Hardhat — это CLI для работы со смарт-контрактами. Через него вы компилируете Solidity, запускаете тесты, поднимаете локальную сеть и выполняете deploy-скрипты.

В обычной разработке чаще всего хватает шести команд: build, test, node, run, clean и --help.


Минимальный проект для проверки

bash
mkdir hardhat-commands-demo
cd hardhat-commands-demo

npm init -y
npm pkg set type="module"
npm install --save-dev hardhat typescript tsx @types/node @nomicfoundation/hardhat-toolbox-mocha-ethers

mkdir contracts scripts test

Создайте файл hardhat.config.ts:

typescript
import { defineConfig } from "hardhat/config";
import hardhatToolboxMochaEthers from "@nomicfoundation/hardhat-toolbox-mocha-ethers";

export default defineConfig({
  plugins: [hardhatToolboxMochaEthers],
  solidity: {
    version: "0.8.28",
  },
});

Создайте файл contracts/Counter.sol:

solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

contract Counter {
    uint256 public value;

    event Incremented(uint256 newValue);

    function increment() external {
        value += 1;
        emit Incremented(value);
    }
}

Компилируем контракты

bash
npx hardhat build

build компилирует Solidity-контракты и создаёт артефакты: ABI, bytecode и служебные файлы Hardhat.

Запускайте эту команду после изменений в contracts. Если в Solidity есть ошибка, Hardhat покажет файл, строку и сообщение компилятора.


Запускаем тесты

Создайте файл test/Counter.ts:

typescript
import { expect } from "chai";
import { network } from "hardhat";

const { ethers } = await network.create();

describe("Counter", function () {
  it("увеличивает value на 1", async function () {
    const counter = await ethers.deployContract("Counter");

    await expect(counter.increment()).to.emit(counter, "Incremented").withArgs(1n);

    expect(await counter.value()).to.equal(1n);
  });
});

Запустите:

bash
npx hardhat test

test автоматически собирает проект и запускает тесты из папки test. Для быстрых проверок это главная команда.


Поднимаем локальную сеть

bash
npx hardhat node

node запускает локальный Ethereum RPC на http://127.0.0.1:8545. В терминале появятся тестовые аккаунты, приватные ключи и балансы.

Эта сеть живёт, пока работает процесс. Если остановить node, состояние пропадёт: контракты, балансы после транзакций и логи нужно будет создать заново.


Запускаем скрипт

Создайте файл scripts/read-counter.ts:

typescript
import { network } from "hardhat";

const { ethers } = await network.create();

const counter = await ethers.deployContract("Counter");
await counter.waitForDeployment();

console.log("Адрес Counter:", await counter.getAddress());
console.log("Стартовое значение:", (await counter.value()).toString());

const tx = await counter.increment();
await tx.wait();

console.log("После increment:", (await counter.value()).toString());

Если локальная сеть не нужна, скрипт можно запустить во временной сети Hardhat:

bash
npx hardhat run scripts/read-counter.ts

Если npx hardhat node уже запущен в другом терминале, подключитесь к нему явно:

bash
npx hardhat run scripts/read-counter.ts --network localhost

run выполняет TypeScript-скрипт в контексте Hardhat. Флаг --network выбирает сеть из конфигурации или встроенную сеть localhost.


Очищаем артефакты

bash
npx hardhat clean

clean удаляет старые build-артефакты и cache. Это помогает, когда проект странно компилируется после переименования контрактов, обновления версии Solidity или смены плагинов.

После clean снова выполните:

bash
npx hardhat build

Смотрим справку

bash
npx hardhat --help
npx hardhat node --help

--help показывает доступные команды и параметры конкретной команды. Это быстрее, чем искать нужный флаг в документации.


Как это работает

npx hardhat build — компилирует контракты и обновляет ABI/bytecode.

npx hardhat test — запускает тесты Mocha и создаёт временную сеть для каждого тестового запуска.

npx hardhat node — поднимает постоянную локальную сеть, к которой можно подключить MetaMask или deploy-скрипт.

npx hardhat run <script> — выполняет файл из scripts с доступом к Hardhat network manager и plugins.

--network localhost — отправляет команды в уже запущенный локальный RPC, а не во временную in-memory сеть.

npx hardhat clean — удаляет артефакты, чтобы следующий build пересобрал проект с нуля.


Частые ошибки

Команда запускается не из той папки → выполняйте npx hardhat ... рядом с hardhat.config.ts.

Скрипт деплоит контракт, но MetaMask его не видит → запустите npx hardhat node и используйте --network localhost.

После clean пропали ABI-файлы → это нормально. Выполните npx hardhat build, чтобы создать их заново.


Что дальше

Материалы китаev.tech публикуются в образовательных целях и не являются инвестиционной рекомендацией. Примеры кода и описания протоколов — для обучения; использование в продакшне на ваш собственный риск. Дисклеймер и политика конфиденциальности.