Аудит смарт-контрактов
Аудит смарт-контрактов — это не формальная галочка перед mainnet. Это единственная реальная возможность найти уязвимости до того, как их найдут атакующие. Уязвимости в контрактах не патчатся незаметно: эксплойт публичен, потери — мгновенные, репутационный ущерб — постоянный. Ronin Bridge ($625M), Wormhole ($320M), Euler Finance ($197M) — все эти взломы произошли в кодовых базах, которые просматривались командой разработчиков. Свежий взгляд профессиональных аудиторов — это не роскошь.
Что включает полноценный аудит
Аудит — это не просто запуск автоматических анализаторов. Механические инструменты (Slither, Mythril, Echidna) находят до 30–40% уязвимостей, остальное требует ручного анализа логики.
Ручной code review: построчный анализ каждой функции, проверка бизнес-логики на соответствие спецификации. Большинство критических уязвимостей — это не технические паттерны вроде reentrancy, а логические ошибки.
Автоматический анализ: Slither (статический анализ), Mythril (symbolic execution), Echidna (fuzzing). Формирует базу для ручного анализа, находит low-hanging fruit.
Тест-кейсы для уязвимостей: для каждой найденной проблемы формируется Proof of Concept — код, воспроизводящий эксплойт.
Gas optimization: параллельно с безопасностью — анализ неэффективных паттернов (storage vs memory, лишние SLOAD/SSTORE, избыточные events).
Классификация уязвимостей
| Критичность | Примеры | Требует |
|---|---|---|
| Critical | Reentrancy, arbitrary call, integer overflow | Немедленного исправления до deploy |
| High | Access control bypass, price manipulation | Исправления до mainnet |
| Medium | Centralization risk, front-running | Оценки и часто исправления |
| Low | Gas inefficiency, missing events | Рекомендации |
| Informational | Code style, documentation | По желанию |
Топ уязвимостей 2023–2024
Reentrancy: классика, но встречается до сих пор. Внешний вызов до обновления state позволяет рекурсивно дренировать контракт. Паттерн checks-effects-interactions + ReentrancyGuard.
Price oracle manipulation: флеш-займы позволяют манипулировать спотовой ценой AMM. Использование TWAP (time-weighted average price) вместо spot price — обязательная защита для любого lending протокола.
Access control: onlyOwner вместо role-based access control, отсутствие timelock на критических функциях, неправильная проверка msg.sender в proxy patterns.
Signature replay: подпись, предназначенная для одного контракта/сети, используется в другом. EIP-712 domain separator + nonce — стандартная защита.
// Пример уязвимого кода — signature без nonce и domain
function claimReward(bytes memory signature, uint256 amount) external {
bytes32 hash = keccak256(abi.encodePacked(msg.sender, amount));
require(recoverSigner(hash, signature) == trustedSigner, "Invalid sig");
token.transfer(msg.sender, amount);
// УЯЗВИМОСТЬ: нет nonce, та же подпись работает повторно
// УЯЗВИМОСТЬ: нет domain, подпись переносима на другой контракт
}
// Исправленная версия с EIP-712
function claimReward(bytes memory signature, uint256 amount, uint256 nonce) external {
require(!usedNonces[nonce], "Nonce used");
bytes32 structHash = keccak256(abi.encode(
CLAIM_TYPEHASH,
msg.sender,
amount,
nonce
));
bytes32 digest = _hashTypedDataV4(structHash); // EIP-712 domain included
require(ECDSA.recover(digest, signature) == trustedSigner, "Invalid sig");
usedNonces[nonce] = true;
token.transfer(msg.sender, amount);
}
Процесс аудита
Phase 1 — Onboarding (1–2 дня): документация от команды (спецификация, архитектурные схемы, описание бизнес-логики). Чем лучше документация — тем эффективнее аудит.
Phase 2 — Manual review (5–10 дней): аудиторы погружаются в код. Минимум два независимых ревьювера на один контракт.
Phase 3 — Automated analysis (параллельно): Slither, Mythril, кастомные Echidna properties.
Phase 4 — Draft report (2–3 дня): формирование предварительного отчёта со всеми находками.
Phase 5 — Remediation review (3–5 дней): команда исправляет, аудиторы верифицируют исправления. Критичные находки требуют повторной проверки.
Phase 6 — Final report: публичный отчёт с описанием всех находок и статусами исправлений.
Стоимость и сроки
Стоимость аудита зависит от объёма кода (строк Solidity), сложности логики и репутации аудитора. Топ-тир аудиторы (Trail of Bits, OpenZeppelin, Spearbit, Code4rena) — $30,000–200,000+ за проект. Средний уровень — $10,000–40,000. Сроки: 1–4 недели.
Соревновательные аудиты (Code4rena, Sherlock, Cantina) — альтернатива или дополнение: публичное соревнование, сотни аудиторов, но неравномерное покрытие и нет гарантии глубины анализа критических функций.
Для большинства DeFi проектов оптимально: один полноценный приватный аудит + публичный contest для широкого покрытия.







