Foundry: проверяемая локальная лаборатория
Лаборатория развивает один реестр учебных выпусков: сначала договор и отдельные сценарии, затем генерация входов и последовательностей с независимой моделью. После этого изучаем отдельные адаптеры, время, известный локальный снимок, газ и происхождение байткода.
Все 30 уроков опубликованы. Примеры, компиляция и проверки не запускались; зависимости не устанавливались. Здесь описаны ожидаемые результаты. Программа остаётся черновиком до отдельного решения о публикации.
Перед началом
Нужны основные сведения о Solidity и адресах Ethereum. Начать можно с курса языка и реестра. Профиль лаборатории: Solidity 0.8.30, EVM cancun, Foundry 1.3.1, forge-std 1.9.7. Базовый CourseCatalog сохраняет API общей учебной библиотеки.
Уроки
- Файлы и профиль лаборатории — Каталоги src/test и зафиксированные параметры сборки.
- Тестирование Solidity в Foundry: требования к реестру — Базовый CourseCatalog и таблица разрешённых переходов.
- Foundry setUp: исходное состояние теста — Независимый экземпляр перед каждым сценарием.
- Foundry: assertions и проверка пустой записи — Точные ожидания getter и отличия assertEq/assertTrue.
- Foundry prank: смена отправителя вызова — Явные роли publisher/reader для каждого действия.
- Foundry expectRevert: проверка отката и ошибки — Проверка селектора ошибки без ложного положительного результата.
- Foundry expectEmit: проверка событий контракта — Сверка издателя события, номера и отпечатка.
- Foundry: тест создания экземпляра контракта — Нулевой издатель отклонён, правильный адрес неизменяем.
- Foundry: тесты публикации, замены и деактивации — Проверяемая последовательность обновления и повторной публикации.
- Foundry: граничные значения чисел и байтов — Отдельные сценарии нулевых, минимальных и максимальных значений.
- Fuzzing в Foundry: номер и хеш публикации — Свойство записи и чтения для допустимых сгенерированных данных.
- Foundry: допущения и ограничение диапазона fuzzing — Осмысленная область assume/bound без скрытых исключений.
- Foundry: генерация отправителей вызова — Проверка запрета записи для любого чужого адреса.
- Foundry: проверка байтов, кодирования и хеша — Воспроизводимая фикстура байтов отдельно от формата манифеста.
- Foundry: независимая модель ожидаемого результата — Ожидание обновления по собственной модели данных.
- Покрытие кода Solidity в Foundry: что показывает отчёт — План чтения покрытия с отдельным анализом отсутствующих требований.
- Invariant testing в Foundry: последовательности действий — Свойства актуального состояния и необходимость stateful-модели.
- Foundry: выбор целей генератора инвариантных тестов — Ограниченные targetContract и targetSelector.
- Foundry Handler: генерация действий публикации — Осмысленные действия с несколькими существующими курсами.
- Foundry: проверка разрешённых и чужих действий — Раздельные маршруты успеха и отказа с наблюдением изменений.
- Ghost state в Foundry: модель ожидаемого выпуска — Независимый учёт отпечатка и флага каждого номера.
- Foundry: откаты и полезная работа генератора — Политика fail_on_revert и счётчики содержательных действий.
- Foundry: глубина, число запусков и seed — Ограниченная воспроизводимая кампания с явным бюджетом.
- Foundry: контрпример и регрессионный тест — Минимальная последовательность нарушения и точная регрессия.
- Foundry mockCall: подмена внешнего ответа — Отдельный CourseReader с контролируемым ответом и отказом.
- Foundry: управление временем и номером блока в тесте — Отдельный наблюдатель с явной моделью свежести.
- Fork-тестирование в Foundry: выбранный локальный блок — Копия известного состояния без утверждения о production.
- Foundry: trace и оценка расхода газа — Разбор дерева вызовов и сравнение одинаковых операций.
- Foundry: исходники, настройки и байткод контракта — Запись происхождения артефакта для конкретного экземпляра.
- Foundry: итоговая лаборатория тестирования Solidity — Комплект исходников, требований и честный статус исполнения.
Итоговый комплект
Архив последней редакции исходников содержит базовый реестр, обычные и параметризованные сценарии, handler с независимой моделью, отдельные reader/observer и необязательный fork-пример. Код не исполнялся; библиотека не включена как установленная зависимость.
Продолжение: безопасность собственных контрактов и реестр в браузере. Общая программа Web3 связывает десять курсов.