
Коллекция Solidity-сниппетов и Foundry-скриптов для аудита безопасности смарт-контрактов
evm-audit-helpers — это подборка Solidity-фрагментов, Foundry-скриптов и тестовых шаблонов, предназначенных для ускорения аудита безопасности смарт‑контрактов EVM. Репозиторий содержит переиспользуемые строительные блоки для типовых задач аудита, таких как повторный вход (reentrancy), несоответствия раскладки хранилища и ошибки оптимизации газа, позволяя аудиторам и разработчикам сосредоточиться на логике, а не на шаблонном коде.
Основные цели:
| Категория | Описание | Основные файлы |
|---|---|---|
| Проверки повторного входа | Вспомогательные модификаторы, шаблоны nonReentrant и скрипты обнаружения во время выполнения. | src/helpers/Reentrancy.sol, scripts/reentrancy_check.sol |
| Анализатор раскладки хранилища | Утилиты для сравнения слотов хранилища, генерации диаграмм раскладки и обнаружения небезопасных обновлений. | src/helpers/StorageLayout.sol, scripts/storage_analyzer.sol |
| Шаблоны тестов Foundry | Готовые тестовые наборы, покрывающие типовые уязвимости (контроль доступа, арифметика, delegatecall и т. д.). | test/templates/* |
| Аудит газа и опкодов | Скрипты для профилирования использования газа и выявления дорогостоящих опкодов. | scripts/gas_profiler.sol |
| Помощники для отчётов | Генераторы отчётов в формате JSON/Markdown, которые можно подключить к CI-панелям. | scripts/report_generator.sol |
| Интеграция с CI | Пример рабочего процесса GitHub Actions для автоматического запуска аудита. | .github/workflows/ci.yml |
Все помощники написаны для Solidity ^0.8.20 и совместимы с Foundry (forge, cast).
# 1️⃣ Клонируйте репозиторий
git clone https://github.com/your-org/evm-audit-helpers.git
cd evm-audit-helpers
# 2️⃣ Установите Foundry (если ещё не установлен)
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 3️⃣ Установите зависимости
forge install
# 4️⃣ Запустите стандартный набор тестов (включает проверки повторного входа, хранилища и газа)
forge test
Совет: Добавьте
export FOUNDRY_PROFILE=ciв вашу оболочку, чтобы использовать оптимизированные для CI настройки компилятора.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "evm-audit-helpers/src/helpers/Reentrancy.sol";
contract MyVault is ReentrancyGuard {
mapping(address => uint256) private balances;
function deposit() external payable nonReentrant {
balances[msg.sender] += msg.value;
}
function withdraw(uint256 amount) external nonReentrant {
require(balances[msg.sender] >= amount, "Insufficient");
balances[msg.sender] -= amount;
(bool ok,) = msg.sender.call{value: amount}("");
require(ok, "Transfer failed");
}
}
Запустите детектор во время выполнения на скомпилированном контракте:
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url $RPC_URL --broadcast
# Сгенерируйте JSON-описание раскладки хранилища скомпилированного контракта
cast abi-storage --contract MyUpgradeable.sol:MyUpgradeable > storage.json
# Сравните с эталонной раскладкой (например, из предыдущей версии)
forge script scripts/storage_analyzer.sol:StorageComparator \
--sig "compare(string memory, string memory)" storage.json reference.json
Скрипт выведет несовпадающие слоты, возможное затенение (shadowing) и предложения по аннотациям @custom:oz-upgrades-unsafe-allow.
Скопируйте шаблон в ваш репозиторий аудита:
cp -r test/templates/reentrancy/ my-audit/tests/
Отредактируйте MyContract.t.sol, чтобы импортировать контракт, находящийся под аудитом, и запустите:
forge test --match-contract MyContract
Добавьте предоставленный рабочий процесс в ваш репозиторий:
# .github/workflows/audit.yml
name: EVM Audit
on:
push:
branches: [main]
pull_request:
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Foundry
run: curl -L https://foundry.paradigm.xyz | bash && foundryup
- name: Run Audit Suite
run: |
forge install
forge test -vv
forge script scripts/reentrancy_check.sol:ReentrancyChecker --rpc-url ${{ secrets.RPC_URL }}
forge script scripts/storage_analyzer.sol:StorageComparator --sig "compare(string,string)" storage.json reference.json
Рабочий процесс автоматически отметит сбои и опубликует отчёт в формате markdown как комментарий к PR.
Мы приветствуем ваш вклад! Пожалуйста, выполните следующие шаги:
git checkout -b feat/<name>).forge coverage).npm run lint — использует solhint и prettier).pragma solidity ^0.8.20;snake_case для внутренних функций, camelCase для публичных/внешних.///).# Установите инструменты линтинга
npm install
# Запустите solhint
npx solhint 'src/**/*.sol' 'test/**/*.sol'
# Автоформатирование
npx prettier --write '**/*.sol'
evm-audit-helpers распространяется под лицензией MIT License. Подробности см. в файле LICENSE.
Удачного аудита!