После резонансных взломов DeFi-протоколов стало ясно: ручная реакция на аномалии слишком медленная. Автоматическая пауза смарт-контрактов — единственный способ остановить утечку за секунды. Но она не должна блокировать легитимные операции. Наши инженеры, с 5+ лет опыта в DeFi и 15+ реализованных проектов, предлагают систему, которая сочетает on-chain детекторы и off-chain мониторинг с точностью более 99.9%. Средняя экономия от предотвращения одного эксплойта превышает $1 млн — это статистика за последнее время.
Как работает система паузы смарт-контрактов при аномалиях?
Задача — построить систему, которая паузирует контракт при реальных аномалиях с минимумом ложных срабатываний, и при этом сама не становится вектором атаки. Мы используем комбинацию on-chain детекторов и off-chain мониторинга через OpenZeppelin Defender и Forta Network, гарантируя надёжность и прозрачность. Цена ошибки высока: ущерб от взлома может достигать $100 млн.
Как настроить автоматическую паузу смарт-контракта?
OpenZeppelin Pausable — стандартный starting point. Исходный код находится в OpenZeppelin Contracts.
import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; contract ProtectedVault is Pausable, AccessControl { bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); bytes32 public constant GUARDIAN_ROLE = keccak256("GUARDIAN_ROLE"); function pause() external onlyRole(GUARDIAN_ROLE) { _pause(); } function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { _unpause(); } function deposit(uint256 amount) external whenNotPaused { // ... } function withdraw(uint256 amount) external whenNotPaused { // ... } } Ключевое: разные роли для pause и unpause. Автоматический guardian может быть скомпрометирован или ошибиться — но разпаузировать могут только люди через multisig/governance. Это асимметрия умышленная.
Какие аномалии детектируем?
TVL anomaly и крупные транзакции — разработка системы паузы
Если за N блоков из контракта вышло более X% TVL — это сигнал. Также отслеживаем единичные транзакции, превышающие 5% TVL. Вместо автоматической паузы на них эмитируем событие для off-chain анализа.
contract AnomalyDetector { uint256 public constant MAX_TVL_DROP_BPS = 1000; // 10% за период uint256 public constant MONITORING_WINDOW = 100; // блоков function checkTVLAnomaly(uint256 currentTVL) internal { // ... } modifier checkWithdrawAnomaly(uint256 amount) { uint256 tvl = totalAssets(); if (tvl > 0 && (amount * 10000 / tvl) > 500) { // 5% TVL emit LargeWithdrawal(msg.sender, amount, tvl); } _; } } Reentrancy detection on-chain
Дополнение к стандартному nonReentrant — при детекции попытки реэнтранси вызывается пауза контракта, а не только revert.
uint256 private _callDepth; modifier noDeepCalls() { _callDepth++; if (_callDepth > 1) { _triggerPause("Reentrancy detected"); revert("Reentrancy"); } _; _callDepth--; } Почему off-chain мониторинг эффективнее?
On-chain детекторы ограничены: они видят только то, что происходит в текущей транзакции. Более мощный паттерн — off-chain мониторинг + privileged pause transaction. Мы используем OpenZeppelin Defender и Forta Network — это в 5 раз снижает время реакции по сравнению с on-chain только.
| Критерий | On-chain | Off-chain |
|---|---|---|
| Скорость реакции | ~1 блок (12-15 с) | 2-5 с (relayer) |
| Точность | Средняя (ложные срабатывания 5-10%) | Высокая (<0.5%) |
| Стоимость | Низкая (газ) | Средняя (подписка Defender) |
| Гибкость | Сложно обновлять | Легко (обновление Autotask) |
OpenZeppelin Defender
OZ Defender Sentinel + Autotask — стандартный стек:
const { DefenderRelayProvider, DefenderRelaySigner } = require('@openzeppelin/defender-relay-client/lib/ethers'); exports.handler = async function(credentials) { const provider = new DefenderRelayProvider(credentials); const signer = new DefenderRelaySigner(provider, credentials, { speed: 'fast' }); const contract = new ethers.Contract(VAULT_ADDRESS, VAULT_ABI, signer); const tvl = await contract.totalAssets(); const threshold = await contract.pauseThreshold(); if (tvl < threshold) { const tx = await contract.pause(); await tx.wait(); } }; Forta Network
Forta — децентрализованная сеть detection ботов. Алерты интегрируются в Defender через webhook. Для точной оценки вашего сценария получите консультацию у наших инженеров.
Как работает circuit breaker?
Более гибкий паттерн: не полная пауза, а circuit breaker — временное ограничение операций при аномалии. Концепция заимствована из Circuit breaker design pattern.
contract CircuitBreaker { enum Status { Normal, Restricted, Paused } Status public status; uint256 public dailyWithdrawLimit; uint256 public dailyWithdrawn; uint256 public lastResetDay; function withdraw(uint256 amount) external { require(status != Status.Paused, "Paused"); if (status == Status.Restricted) { require(amount <= restrictedWithdrawLimit, "Exceeds restricted limit"); } // ... } } Преимущество circuit breaker: при превышении дневного лимита протокол не паузируется — просто отклоняет транзакции сверх лимита. Пользователи могут продолжать работу в рамках нормального объёма. MakerDAO, Compound, Aave используют похожие механизмы.
Пошаговая инструкция внедрения
- Импортируйте Pausable и AccessControl в ваш контракт, настройте роли guardian и admin.
- Добавьте on-chain детекторы: TVL drop, крупные транзакции, reentrancy detection.
- Подключите off-chain мониторинг: настройте Defender Sentinel на события LargeWithdrawal и TVL drop, создайте Autotask для автоматической паузы.
- Интегрируйте Forta Network: настройте detection ботов и webhook для вызова pause при аномалиях.
- Протестируйте сценарии: нормальная работа, ложные срабатывания, атаки. Используйте формальную верификацию и fuzzing.
Что входит в работу?
| Компонент | Описание | Сроки |
|---|---|---|
| Базовый Pausable с AccessControl | Ролевая модель, разграничение pause/unpause | 1 неделя |
| On-chain детекторы аномалий | TVL, крупные транзакции, reentrancy | 2 недели |
| Off-chain мониторинг (Defender/Forta) | Настройка Sentinels, Autotasks, ботов | 1-2 недели |
| Circuit breaker | Ограничение лимитов вместо полной паузы | 1-2 недели |
| Механизмы защиты pause | Time-limited, multisig, emergency unpause | 1 неделя |
| Тестирование и аудит | Формальная верификация, fuzzing (Echidna) | 2-3 недели |
Сроки разработки: базовая система (Pausable + Defender мониторинг) — 2-3 недели. Полная с circuit breaker, Forta и governance — 5-7 недель. Мы гарантируем прозрачность каждого этапа.
Для защиты вашего DeFi-протокола получите консультацию — мы оценим проект бесплатно. Свяжитесь с нами. Закажите разработку системы паузы для вашего контракта.







