articles, resource-center

Разработка смарт-контрактов: сравнение двух ведущих фреймворков

31 октября 2025 г.
8 мин
Артем Зайцев
Сравнение фреймворков для разработки смарт-контрактов Hardhat и Foundry, где показаны редакторы кода и тестовые среды

Введение

Когда я начал разрабатывать с помощью Solidity, я быстро отказался от онлайн-IDE и взял Hardhat в качестве своего нового основного фреймворка. Через несколько месяцев работы над проектами и создания рабочего процесса я почувствовал себя комфортно с его сетевой структурой, стратегией тестирования и организацией проектов.

Но когда кто-то сказал, что Foundry работает просто круто, я заинтересовался и решил сравнить эти два популярных фреймворка для разработки смарт-контрактов.

Чтобы сделать объективную оценку, я создал одинаковые проекты с помощью обоих инструментов и применил один и тот же контракт MiniBank и дальнейшие настройки тестирования. Этот практический опыт показал, что производительность, опыт разработчиков и рабочий процесс этих двух инструментов сильно отличаются, и это стоит учесть всем, кто выбирает между ними.

Архитектура и настройки проекта

Первый опыт настройки в этих двух фреймворках довольно разный. Foundry создает конфигурационный файл foundry.toml на основе пар «ключ-значение», который похож на файл hardhat.config.js в Hardhat. Оба также поддерживают настройку исходных папок, каталогов вывода компиляции и т. д.

Структура папок по умолчанию в Foundry довольно отличается, но несколько сетей нельзя напрямую настроить в файле конфигурации, так как Hardhat отлично справляется с поддержкой нескольких сетей. Остальные параметры в foundry.toml связаны с опциями тестирования, включая подробность или настройки учетной записи и опции цены газа.

Функция переназначения Foundry особенно интересна, потому что предлагает мощный подход к импорту зависимостей. Вы можете значительно упростить импорт контрактов, создав ярлыки в конфигурации.

Например, вместо длинных путей импорта можно использовать короткие сопоставления, которые сделают код более понятным и удобным для поддержки.

Как управлять зависимостями

Эти фреймворки сильно отличаются в том, как они управляют зависимостями:

  • Hardhat использует уже готовую экосистему npm, которая сразу доступна разработчикам JavaScript
  • Установка контрактов OpenZeppelin — это просто команда npm install
  • Foundry использует управление зависимостями с помощью субмодуля Git через инструмент forge CLI
  • Зависимости хранятся в папке lib/ и добавляются в файл .gitmodules, а не в package.json

Этот способ подходит для любого репозитория GitHub, где есть смарт-контракты в качестве зависимостей, и позволяет быть более гибким в выборе библиотек.

Ты можешь указать организацию GitHub и название репозитория, а также, если хочешь, ветку или тег для установки. После установки forge можно использовать команду forge remapping, чтобы посмотреть пути импорта по умолчанию, которые будет использовать Foundry, а потом настроить их с помощью файлов конфигурации.

Инструменты для разработки и отладки

Одна из областей, в которых Hardhat выделяется, — это опыт отладки. Фреймворк также предлагает использование console.log по умолчанию, что похоже на ожидаемый стиль отладки в разработке JavaScript. Эта функциональность активно рекламируется как преимущество и может быть легко отслежена разработчиками, чтобы понять, как было проведено выполнение и что не так.

Foundry нужен другой способ регистрации в контрактах. Хотя можно вручную установить и импортировать Hardhat и установить консольный контракт, лучше всего скопировать специальный консольный контракт в свой проект.

В случае тестовых файлов, в частности, контракт DSTest, который включен, содержит события регистрации, такие как logstring, logint и logaddress, которые могут быть выведены без каких-либо дополнительных зависимостей.

Методы тестирования

Тестовый опыт — это, наверное, самое заметное отличие между этими двумя фреймворками.

Подход к тестированию Hardhat

Hardhat основан на стандартных шаблонах тестирования JavaScript:

  • Использует блоки describe и it вместе с Mocha как стандартную библиотеку утверждений
  • Тестовые файлы могут выглядеть как этот более естественный стиль разработчиков, которые знакомы с веб-разработкой
  • Предлагайте описательные названия тестов, которые ясно показывают их цель
  • Знакомые асинхронные шаблоны
  • Если ты уже знаешь современную веб-разработку, то тебе будет легко освоить эту платформу

Подход к тестированию Foundry

Foundry работает совсем по-другому:

  • Тесты разрабатываются как смарт-контракты Solidity, которые наследуют DSTest
  • Все тесты начинаются со слова test или testFail
  • Все утверждения делаются через унаследованный контракт DSTest
  • Тестовые файлы — это настоящие смарт-контракты, которые используются при тестировании

Освойте тестирование смарт-контрактов

Сравни фреймворки и выбери лучший подход к тестированию для твоего проекта.

Метод Foundry имеет ряд последствий:

  • Тестовые контракты должны быть созданы в процедуре setUp(), как в beforeEach в JavaScript
  • Отправка метода контракта ETH требует определенного синтаксиса с параметрами значений, заключенными в фигурные скобки
  • Сначала может быть сложно освоить, но зато не нужно возиться с асинхронными операциями

Особенности тестирования Learning Foundry

Foundry вводит концепцию, известную как читы, которые предлагают мощные утилиты для тестирования. Это специальные функции по указанному адресу контракта, которые позволяют вам получить доступ к состоянию в блокчейне во время тестирования.

Ты можешь:

  • Измените номер текущего блока
  • Не выдавайте себя за других пользователей
  • Утверждайте определенные условия контракта

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

  • vm.prank(), чтобы настроить следующий вызов контракта на другого получателя
  • vm.roll(), чтобы продвинуть блокчейн до определенной точки

Один из самых интересных чит-кодов — vm.expectRevert(), который нужно вызвать перед транзакцией, которую вы хотите провалить. Этот обратный подход к стандартным шаблонам утверждений может показаться нелогичным, но он дает четкий контроль над возможными условиями сбоя.

Результаты сравнения производительности

Разница в производительности между фреймворками значительная и сразу бросается в глаза. На одних и тех же контрактах и тестовых сценариях я получил интересные результаты по времени компиляции и выполнения тестов:

Результаты сравнения производительности

СценарийFoundryКаска
Чистые проекты (без кэша)1,44 секунды5.17 секунд
С включенным кэшированием0.45 секунд3,98 секунды
26 проектов смарт-контрактов8.53 секунды14.56 секунд

Эти различия в производительности становятся более заметными при увеличении сложности проекта.

Тестирование на Foundry: плюсы и минусы

Плюсы и минусы тестирования Foundry

ПлюсыМинусы
Без сложных асинхронных операцийНазвания тестов не такие описательные, как в тестах JavaScript
Тесты проходят очень быстроутверждение expectRevert противоречит интуиции
Автоматически сгенерированный отчет о газеКак освоить чит-коды
Все, что написано на SolidityИнструменты для развертывания еще в разработке

Преимущества производительности вряд ли можно оспаривать, а названия тестов Solidity не могут быть такими же описательными, как названия тестов JavaScript, что может затруднить понимание цели теста. Система чит-кодов, хотя и мощная, потребует затрат на обучение.

Стратегии развертывания контрактов

Развертывание — это одна из областей, где Hardhat на данный момент предлагает более удобный интерфейс для разработчиков. Фреймворк поддерживает:

  • Скрипты развертывания на основе JavaScript
  • Связь с разными сетями
  • Загрузите настройки через переменные среды
  • Умейте справляться со сложными ситуациями при развертывании

Скрипты развертывания на основе JavaScript сейчас нужны в Foundry, но могут быть неудобными, когда конструкторам нужно предоставлять аргументы. Предлагаемое решение — создать скрипты развертывания bash для обработки сложных развертываний, но команда разработчиков сейчас разрабатывает более продвинутые решения для развертывания.

Это одна из самых серьезных слабостей Foundry по сравнению с Hardhat, у которого есть развитая экосистема развертывания.

Инструменты командной строки

Foundry имеет инструмент CLI cast для взаимодействия с блокчейном и запроса смарт-контрактов. Это мощная утилита, которая позволяет вам:

  • Вызывайте функции контракта
  • Запрос состояния блокчейна
  • Делайте разные вещи с блокчейном через командную строку

Хотя cast дает полный набор функций для работы с блокчейном, для сложных операций нужно создавать сложные командные строки. Как и при развертывании, для этого может понадобиться скрипт bash, чтобы не вводить длинные команды снова и снова.

Сравнение фреймворков

Сравнение функций фреймворков

ОсобенностьFoundryКаска
УстановкаЧерез команду CLI curlНе нужно с npx или через npm
CLI-инструментыиспользуйте forge для управления проектом, а cast для взаимодействия с контрактамиhardhat управляет проектом (создает/компилирует/запускает скрипты)
Создавайте и проверяйте, как всё работаетСупер быстрыйУмеренная производительность
ЗависимостиСубмодули Gitпакеты npm
Настройкаfoundry.tomlhardhat.config.js
Изоляция тестовДа, через -match-test -match-contractДа, только через или пропустить в тестовых файлах
Развертывание контрактовЧерез инструмент Cast CLIСкрипты на основе JavaScript

Как сделать правильный выбор

Foundry показывает огромный потенциал благодаря своей классной производительности, активному сообществу и креативному способу тестирования смарт-контрактов. Структура отлично подходит для быстрого цикла разработки и имеет отличные утилиты для тестирования, которые могут значительно ускорить разработку после того, как вы поймете, как их использовать.

Тем не менее, Foundry все еще развивается, особенно в плане инструментов развертывания и улучшения опыта разработчиков. Foundry имеет ряд интересных преимуществ для тех разработчиков, которые предпочитают гибридную модель с:

  • Foundry для разработки и тестирования контрактов
  • Hardhat для развертывания и скриптов

Те, кто привык к стандартным инструментам JavaScript и проверенным методам развертывания, могут сейчас больше использовать Hardhat, хотя выбор опять зависит от вашего опыта и готовности осваивать новые инструменты.

Обе архитектуры все еще быстро меняются, и в экосистеме разработки смарт-контрактов есть много разных вариантов, которые подходят для разных разработчиков и случаев использования.

FAQ

##
##
##foundry
##
##
##
##
Похожие материалы

Похожие статьи

Откройте для себя больше идей и решений в наших избранных статьях

BDS

Создаем будущее блокчейн-технологий с инновационными решениями, которые расширяют возможности бизнеса и частных лиц по всему миру.

+1 929 560 3730 (США)
+44 2045 771515 (Великобритания)
+372 603 92 65 (Эстония)
Харьюский уезд, Таллин, Ласнамяэ, Катусепапи 6-502, 11412, Эстония

Будьте в курсе

Получайте последние новости блокчейна и обновления на свою электронную почту.

© 2025 BDS, входит в группу компаний Idealogic Group. Все права защищены.