Настройка Hardhat для разработки

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Настройка Hardhat для разработки
Простая
~2-3 часа
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1056
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Настройка Hardhat для разработки

Hardhat без настройки — это просто компилятор Solidity с локальным узлом. Hardhat с правильной конфигурацией — это полноценная среда, где разработчик не тратит время на рутину: компиляция инкрементальная, тесты запускаются в параллель, деплой идемпотентен, CI/CD знает что делать без ручных инструкций.

Базовая конфигурация

Минимальный hardhat.config.ts для production-проекта:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox"; // ethers, waffle, chai, gas reporter
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, // снижает gas, нужен для сложных контрактов
    },
  },
  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 важен для контрактов, которые компилятор Solidity не может скомпилировать без него (Stack too deep). С IR-компилятором этой ошибки нет, но время компиляции растёт на 30-50%.

Плагины, которые реально нужны

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.

Организация тестов и fixtures

Медленные тесты — это следствие неправильных fixtures. Паттерн loadFixture из hardhat-network-helpers позволяет снапшотить состояние сети после деплоя и откатываться к нему перед каждым тестом вместо повторного деплоя:

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);
  // состояние всегда чистое, без повторного деплоя
});

На большом тест-сьюте (200+ тестов) разница между loadFixture и beforeEach с деплоем — 5 минут vs 30 секунд.

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 автоматически.

Настройка занимает 2-3 часа. Стоимость рассчитывается индивидуально.