foundry.toml
Обзор
Файл foundry.toml является конфигурационным файлом для инструмента Foundry — популярного набора утилит для разработки, тестирования и деплоя смарт-контрактов на блокчейне Ethereum. Данный файл задаёт основные параметры сборки и компиляции проекта, такие как версии компилятора Solidity, настройки оптимизации, пути исходных и выходных файлов, а также подключаемые библиотеки.
Файл имеет формат TOML (Tom's Obvious, Minimal Language) — удобный для чтения и редактирования формат конфигураций.
Подробное описание секций и параметров
Файл содержит единственную секцию [profile.default], которая описывает профиль сборки по умолчанию. Ниже приведено подробное описание каждого параметра.
[profile.default]
src (строка)
Путь к директории с исходными файлами смарт-контрактов. Обычно содержит Solidity-файлы (.sol).
Пример:src = "src"out (строка)
Путь к папке, в которую будут выводиться скомпилированные артефакты — байткод, ABI и другие файлы, генерируемые компилятором.
Пример:out = "out"libs (массив строк)
Список директорий с внешними библиотеками или зависимостями, которые следует учитывать при компиляции.
Пример:libs = ["lib"]solc (строка)
Версия компилятора Solidity, используемая для сборки контрактов. Важно указать корректную версию, чтобы избежать несовместимости.
Пример:solc = "0.8.25"optimizer (булево)
Включение или отключение оптимизатора компилятора. Оптимизация уменьшает размер байткода и повышает эффективность контрактов, но может увеличить время компиляции.
Пример:optimizer = trueoptimizer_runs (целое число)
Количество «прогонов» оптимизатора. Чем выше значение, тем больше оптимизаций с прицелом на частое использование контракта. Обычно ставится в диапазоне от 200 до 10000.
Пример:optimizer_runs = 200via_ir (булево)
Флаг использования промежуточного представления (Intermediate Representation, IR) при компиляции через Solidity. Это экспериментальная функция, которая может улучшить оптимизацию.
Пример:via_ir = true
Важные детали реализации
Файл задаёт только один профиль —
default. В более сложных проектах можно создавать несколько профилей для разных целей (например,test,production), указывая разные параметры компиляции.Параметр
via_irтребует поддержки со стороны конкретной версии компилятора Solidity и может влиять на стабильность сборки.Параметры
src,outиlibsопределяют структуру проекта и влияют на то, как Foundry ищет исходники и куда складывает результаты сборки.Оптимизатор Solidity — важный инструмент для уменьшения стоимости газа при исполнении смарт-контрактов, поэтому его корректная настройка критична.
Взаимодействие с другими компонентами системы
Foundry CLI — при запуске команд компиляции (
forge build) утилита читает файлfoundry.tomlдля определения настроек.Solidity Compiler (solc) — версия и параметры компилятора берутся из этого файла.
Файловая система проекта — пути
src,out,libsопределяют структуру проекта и влияют на поиск исходных файлов и библиотек.Тестовые фреймворки и деплой-скрипты — используют артефакты из директории
out, формируемые согласно этой конфигурации.
Пример использования
В типичном проекте Foundry разработчик создаёт файл foundry.toml с содержимым, аналогичным представленному. При запуске команды:
forge build
будет произведена компиляция всех контрактов из папки src с использованием компилятора Solidity версии 0.8.25, с оптимизацией (200 прогонов), через IR, и результат будет выведен в папку out. При этом библиотеки из папки lib будут учтены.
Диаграмма структуры файла
Ниже представлена диаграмма, отражающая структуру конфигурационного профиля в файле foundry.toml.
flowchart TD
A[foundry.toml] --> B[profile.default]
B --> C[src: "src"]
B --> D[out: "out"]
B --> E[libs: ["lib"]]
B --> F[solc: "0.8.25"]
B --> G[optimizer: true]
B --> H[optimizer_runs: 200]
B --> I[via_ir: true]
Итог
Файл foundry.toml — ключевой элемент конфигурации проекта на Foundry, задающий параметры компиляции и структуру исходников. Его правильная настройка влияет на успешность сборки, оптимизацию и организацию проекта.