Hardhat — основные команды
Основные команды Hardhat 3 для компиляции, тестов, локальной сети, запуска скриптов и очистки артефактов.
Какие команды нужны каждый день
Hardhat — это CLI для работы со смарт-контрактами. Через него вы компилируете Solidity, запускаете тесты, поднимаете локальную сеть и выполняете deploy-скрипты.
В обычной разработке чаще всего хватает шести команд: build, test, node, run, clean и --help.
Минимальный проект для проверки
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:
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:
// 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);
}
}Компилируем контракты
npx hardhat buildbuild компилирует Solidity-контракты и создаёт артефакты: ABI, bytecode и служебные файлы Hardhat.
Запускайте эту команду после изменений в contracts. Если в Solidity есть ошибка, Hardhat покажет файл, строку и сообщение компилятора.
Запускаем тесты
Создайте файл test/Counter.ts:
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);
});
});Запустите:
npx hardhat testtest автоматически собирает проект и запускает тесты из папки test. Для быстрых проверок это главная команда.
Поднимаем локальную сеть
npx hardhat nodenode запускает локальный Ethereum RPC на http://127.0.0.1:8545. В терминале появятся тестовые аккаунты, приватные ключи и балансы.
Эта сеть живёт, пока работает процесс. Если остановить node, состояние пропадёт: контракты, балансы после транзакций и логи нужно будет создать заново.
Запускаем скрипт
Создайте файл scripts/read-counter.ts:
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:
npx hardhat run scripts/read-counter.tsЕсли npx hardhat node уже запущен в другом терминале, подключитесь к нему явно:
npx hardhat run scripts/read-counter.ts --network localhostrun выполняет TypeScript-скрипт в контексте Hardhat. Флаг --network выбирает сеть из конфигурации или встроенную сеть localhost.
Очищаем артефакты
npx hardhat cleanclean удаляет старые build-артефакты и cache. Это помогает, когда проект странно компилируется после переименования контрактов, обновления версии Solidity или смены плагинов.
После clean снова выполните:
npx hardhat buildСмотрим справку
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, чтобы создать их заново.
Что дальше
- Первый контракт — написать и задеплоить — применить команды на реальном deploy-сценарии
- Настройка окружения — Node, Hardhat, MetaMask — проверить базовую установку инструментов
- Как работает транзакция изнутри — понять, что делает
run, когда скрипт отправляет транзакцию