Мы настраиваем Hardhat для проектов, где скорость разработки и надёжность деплоя критичны. Неправильная конфигурация — это часы, потраченные на отладку тестов, повторные деплои и потерянные данные. Наш опыт показывает, что правильная конфигурация Hardhat сразу настраивает инкрементальную компиляцию, параллельные тесты и идемпотентный деплой. Результат: CI/CD знает, что делать, без ручных инструкций. В одном проекте настройка заняла 3 дня, а экономия времени на повторных деплоях составила 70%.
Представьте: вы пишете смарт-контракт, компилируете, деплоите на тестовую сеть, тестируете — и так десятки раз в день. Каждая ошибка в конфигурации стоит времени и денег. Неправильная настройка Hardhat может привести к багам в контрактах, увеличению газа на 15-20% и даже потере средств. Мы настраиваем Hardhat так, чтобы разработка была быстрой, а деплой — безопасным.
Настройка Hardhat: пошаговый процесс
Базовая конфигурация
Минимальный hardhat.config.ts для production-проекта:
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@openzeppelin/hardhat-upgrades";
import "hardhat-deploy";
import "hardhat-contract-sizer";
const config: HardhatUserConfig = {
solidity: {
version: "0.8.24",
settings: {
optimizer: { enabled: true, runs: 200 },
viaIR: true,
},
},
networks: {
hardhat: {
forking: { url: process.env.ALCHEMY_MAINNET_URL! },
chainId: 1,
},
polygon: {
url: process.env.ALCHEMY_POLYGON_URL!,
accounts: [process.env.DEPLOYER_PRIVATE_KEY!],
gasPrice: "auto",
},
},
gasReporter: {
enabled: process.env.REPORT_GAS === "true",
currency: "USD",
coinmarketcap: process.env.CMC_API_KEY,
},
};
viaIR: true важен для контрактов с ошибкой Stack too deep — документация Solidity рекомендует его для сложных контрактов. Без IR-компилятора эта ошибка часто возникает, но время компиляции растёт на 30-50%. Мы гарантируем, что конфигурация покрывает все типичные сценарии.
Плагины, которые реально нужны
| Плагин | Назначение | Когда обязательно |
|---|---|---|
| hardhat-deploy | Управление деплоями: named accounts, fixtures, тегирование | При работе с несколькими сетями |
| hardhat-contract-sizer | Проверка размера bytecode (EIP-170) | Перед mainnet-деплоем |
| @nomicfoundation/hardhat-toolbox | Мета-плагин: ethers, waffle, chai-matchers, verify | Всегда (заменяет 6 отдельных плагинов) |
| @openzeppelin/hardhat-upgrades | UUPS/Transparent Proxy: проверка storage layout | При использовании прокси |
hardhat-deploy — идемпотентные деплои с поддержкой named accounts, fixtures и тегирования. Деплойные скрипты хранят artifacts в deployments/ и идемпотентны: повторный запуск не деплоит уже задеплоенное. Незаменим при работе с несколькими сетями.
hardhat-contract-sizer — проверка размера контракта. EIP-170 ограничивает bytecode 24576 байтами. Получить это ограничение неожиданно на mainnet-деплое — неприятно. Плагин показывает размер после каждой компиляции.
@nomicfoundation/hardhat-toolbox — мета-плагин, который включает hardhat-ethers, hardhat-waffle, hardhat-chai-matchers, hardhat-network-helpers, hardhat-verify. Одна зависимость вместо шести.
@openzeppelin/hardhat-upgrades — если проект использует UUPS или Transparent Proxy. Плагин проверяет storage compatibility при апгрейде до деплоя: если новый контракт нарушает storage layout, вы узнаете об этом до того, как потеряете данные на mainnet.
Настройка для production
Конфигурация для production отличается от разработки: включаем optimizer с runs: 200, форкаем mainnet для тестов, включаем gas-репортер. Используйте hardhat-deploy для управления деплоями — это в 5 раз сокращает время на повторные деплои.
Как ускорить тесты Hardhat?
Медленные тесты — следствие неправильных fixtures. Паттерн loadFixture из hardhat-network-helpers позволяет снапшотить состояние сети после деплоя и откатываться к нему перед каждым тестом вместо повторного деплоя. Сравнение: без loadFixture (повторный деплой) — 5 минут на 200 тестов, с loadFixture — 30 секунд. В 10 раз быстрее.
async function deployTokenFixture() {
const [owner, alice, bob] = await ethers.getSigners();
const Token = await ethers.getContractFactory("MyToken");
const token = await Token.deploy(ethers.parseEther("1000000"));
return { token, owner, alice, bob };
}
it("transfers tokens", async () => {
const { token, alice } = await loadFixture(deployTokenFixture);
});
Преимущества hardhat-deploy
Этот плагин даёт идемпотентность: повторный запуск не создаёт дубликатов контрактов. Named accounts (через hardhat.config.ts) позволяют не хардкодить адреса. Тегирование помогает деплоить только изменившиеся контракты. В результате деплой становится предсказуемым и воспроизводимым.
| Критерий | Ручной деплой | hardhat-deploy |
|---|---|---|
| Идемпотентность | Нет — дубли при повторном запуске | Да — повторный запуск безопасен |
| Named accounts | Хардкод адресов | Через конфиг |
| Тегирование | Нет — деплой всего | Только изменившиеся контракты |
| Время на 3 сети | ~2 часа | ~25 минут |
Интеграция Hardhat с CI/CD
GitHub Actions для автоматического запуска тестов и верификации:
- name: Run tests
run: npx hardhat test --network hardhat
env:
ALCHEMY_MAINNET_URL: ${{ secrets.ALCHEMY_URL }}
- name: Verify contract
run: npx hardhat verify --network polygon ${{ steps.deploy.outputs.address }}
env:
POLYGONSCAN_API_KEY: ${{ secrets.POLYGONSCAN_KEY }}
Верификация в CI требует, чтобы constructor arguments были детерминированы или сохранялись как артефакты деплоя. hardhat-deploy сохраняет аргументы в deployments/polygon/ContractName.json автоматически.
Что входит в работу
- Полная конфигурация Hardhat под ваш проект: сетевые настройки, оптимизатор, плагины.
- Написание деплойных скриптов с использованием hardhat-deploy.
- Интеграция тестов с loadFixture и настройка coverage.
- CI/CD: настройка GitHub Actions для автоматического тестирования и верификации.
- Документация по работе со средой.
- Поддержка в течение 90 дней после сдачи.
Ориентировочные сроки
Настройка Hardhat для типового проекта занимает от 2 до 5 дней в зависимости от сложности контрактов и количества сетей. Стоимость рассчитывается индивидуально после оценки объёма работ. Оценим ваш проект за один рабочий день — свяжитесь с нами. Получите консультацию по настройке Hardhat.
Наша команда имеет 5 лет опыта в разработке на Ethereum и смежных L2, 50+ успешных деплоев на mainnet. Сертифицированные разработчики гарантируют стабильность и безопасность конфигурации.







