Після резонансних зламів 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-протоколу отримайте консультацію — ми оцінимо проект безкоштовно. Зв'яжіться з нами. Замовте розробку системи паузи для вашого контракту.







