Вышел мажорный релиз foundry — 1.8.0

Сегодня, 27 августа 2026 года официально стал доступен новый мажорный релиз foundry, дополненный одной новой утилитой. В этом релизе добавили символьные вычисления с использованием локального Z3 SMT-решателя, улучшили фаззинг-тестирование, впервые не опубликовали релиз через npm и многое другое, что делает данный релиз одним из самых важных релизов за последние год или даже два. Далее главные изменения в релизе и почему у вас могли перестать проходить тесты при обновлении.

Фаззинг и тестирование

Основные изменения релиза сосредоточены именно в этой области, так были добавлены:

  1. Символьные вычисления с использованием локального решателя (по умолчанию Z3 SMT). Конечно, базовая формальная верификация с использованием того же Z3 SMT уже есть в самом компиляторе solc, однако там она сводится к поиску доказательств невозможности упасть с assert при указанных requires, что не делает её очень практичной и поэтому она в таком виде не стала стандартом в индустрии. foundry привносит намного более мощные символьные вычисления, которые к тому же не требуют изменения основных умных контрактов проекта, что делает данный подход намного более практичным и приближает эпоху повсеместно распространённой формальной верификации. Для запуска необходимо использовать опцию ‑-symbolic, например, forge test --symbolic;

  2. Mutation‑тестирование теперь доступно через опцию --mutation. Теперь можно проверить не только то, что каждая строка вашего кода покрыта тестами, но и быть уверенным в том, что asserts в тестах действительно отлавливают изменение поведения. Использование доступно через forge test --mutation;

  3. Добавлена возможность тестирования с загрязнённой памятью (storage и transient области памяти теперь могут быть дозаполнены рандомными значениями перед запуском ваших тестов). Использовать через forge test --brutalize;

  4. Оптимизировано фаззинг‑ и invariant‑ тестирование, а также добавлены новые команды forge fuzz.

Линтер безопасности

forge lint был расширен большим количеством детекторов безопасности, корректности, газа и многого другого. Раньше для всего этого я бы предпочёл инструмент eth-wake от Ackee Blockchain Security и всем бы его рекомендовал, но начиная с версии 1.8.0 forge может вполне конкурировать с ним в этой сфере, так что имеет смысл рассмотреть его использование в проектах на foundry.

Распространение

Начиная с релиза 1.8.0 foundry больше не распространяется через npm.

Нарушение обратной совместимости

Первым делом после выхода новой версии я обновился и прогнал тесты на проекте, которые сразу же показали больше падений, чем обычно. Сначала я подумал, что это из‑за улучшений фаззинг‑ и invariant‑тестирования, что было заметно, однако не только в этом было дело. Основное изменение релиза в том, что теперь все тесты запускаются по умолчанию в режиме изоляции. Из‑за этого чаще происходят обращения к непрогретому storage, что изменяет потребление газа. К тому же теперь в рамках каждого теста обнуляется содержимое transient‑переменных между вызовами (именно это и поломало мне сегодня все тесты). В целом изменение крайне полезное и приближает тестовые сетапы к реальной среде исполнения, но тесты придётся адаптировать.

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

Это были основные и самые важные изменения для разработчиков, полный список изменений смотрите в официально changelog проекта на GitHub.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев