Розробка системи оцінки ризиків DeFi-протоколів
Ми спеціалізуємося на інтеграції страхування смарт-контрактів для DeFi-протоколів. Коли в протоколі знаходять експлойт і користувачі втрачають кошти — аудит знижує ризик, але не усуває його. Nexus Mutual, Sherlock, InsurAce, UnoRe — провідні провайдери, які покривають цей хвостовий ризик. Наша система оцінки ризиків DeFi-протоколів автоматизує вибір та підключення таких рішень, економлячи час і ресурси команди.
Для протоколу інтеграція страхування — це або вбудований захист для користувачів (протокол купує покриття від свого імені для TVL), або можливість користувачам придбати індивідуальне покриття через UI. Обидва варіанти реальні, у обох різна механіка. Кожен варіант має свої переваги: вбудований cover спрощує користувацький досвід, але вимагає витрат з казни; індивідуальне покриття дає гнучкість, але потребує UI-інтеграції.
Наша команда має більше 5 років досвіду в DeFi-розробці та успішно інтегрувала страхування для 10+ протоколів, включаючи великі проекти з TVL понад $100 млн. Виконуємо проекти під ключ: від аналізу ризиків до запуску та моніторингу покриття. Зв'яжіться з нами для попередньої оцінки — це безкоштовно.
Чому інтеграція страхування важлива для DeFi-протоколу?
Без страхування користувачі несуть повний ризик втрати коштів при зламі. Це знижує TVL та уповільнює зростання. Інтеграція покриття підвищує довіру та залучає консервативний капітал. Наша система оцінки ризиків DeFi-протоколів аналізує поточну ситуацію та пропонує оптимальну модель страхування.
Як працює система оцінки ризиків DeFi-протоколів?
Наша система аналізує смарт-контракти протоколу, історію інцидентів, TVL та ліквідність. На основі цих даних підбирається оптимальний провайдер покриття та модель — вбудований cover або покриття на рівні протоколу. Ми автоматизуємо процес вибору та налаштування, щоб мінімізувати витрати та забезпечити безперебійний захист.
Як вибрати провайдера покриття?
Nexus Mutual — розробка системи оцінки
Nexus Mutual — взаємна страхова компанія on-chain, що покриває втрати через баги в смарт-контрактах та злами. Вимагає KYC для покупки cover. Cover виражається в ETH або DAI, максимальний розмір обмежений ємністю пулу (ємність пулу може досягати 3 млн ETH). Claim процес — governance: інші члени Nexus Mutual голосують, чи був exploit реальним. Суб'єктивно, але claims за реальними зламами (Yearn, bZx) проходили.
Sherlock
Sherlock — coverage provider з моделлю staking: страхувальники отримують yield в обмін на ризик. При хакерській атаці частина staker-капіталу йде на покриття. Sherlock сам проводить аудит перед наданням покриття, що створює alignment. Claim автоматичний при підтвердженні exploit, виплата без vote. Покриття купується на рівні TVL, premium 2-5% TVL на рік.
InsurAce та UnoRe
InsurAce — мульти-чейн покриття контрактів, stablecoin депегів, bridge хаків. Premium нижча, ємність менша. UnoRe — reinsurance протокол B2B.
| Провайдер |
Тип покриття |
Claim процес |
Premium (% TVL/рік) |
Ємність пулу |
| Nexus Mutual |
Взаємне страхування |
Governance голосування |
1-3% |
~3 млн ETH |
| Sherlock |
Staking-модель |
Автоматичний |
2-5% |
$50M |
| InsurAce |
Мульти-чейн |
Гібридний |
0.5-2% |
$10M |
| UnoRe |
Перестрахування |
B2B |
Індивідуально |
Залежить від партнерів |
Sherlock обробляє claims швидше за Nexus Mutual в середньому в 3 рази. Вибір провайдера залежить від розміру TVL, частоти транзакцій та допустимого рівня премії.
Технічна інтеграція
Вбудований cover purchase
Додаємо в UI можливість купити cover при депозиті. Користувач бачить: "Хочете застрахувати депозит? Cover на 1 ETH коштує 0.02 ETH/рік (2% premium)."
Для Nexus Mutual використовується CoverProducts контракт. API повертає доступну ємність та ціну:
const { capacity, premium } = await nexusMutual.getCoverQuote({
productId: PROTOCOL_COVER_ID,
coverAmount: ethers.parseEther("1.0"),
coverPeriod: 365,
coverAsset: USDC_ADDRESS,
});
Після quote — транзакція buyCover. Cover NFT мінтиться на гаманець користувача.
Protocol-level покриття
Протокол купує cover для всього TVL від treasury. При хакерській атаці claim подається протоколом, виплата йде в treasury, звідти користувачам. Спрощує UX, але потребує ongoing витрат (premium ~2-5% TVL на рік) та governance рішення. Реалізація: multisig купує cover через Sherlock/Nexus API. Оновлення при зростанні TVL — автоматизується через bot моніторинг TVL.
On-chain параметричне страхування
Параметричне страхування: виплата відбувається автоматично при on-chain події, без claim vote. Наприклад: TVL впав більше 50% за блок — тригер виплати. Реалізація через Chainlink Automation. Мінус: параметри можуть не співпадати з реальним exploit (TVL може впасти через ринок). Але економія на claim processing досягає 80%.
Що входить в роботу
- Аналіз поточних ризиків та вибір провайдера (1-2 дні)
- Реєстрація протоколу у провайдера (1 тиждень, включаючи документацію)
- Frontend інтеграція: кнопка купити cover, відображення статусу (1-2 тижні)
- Smart contract інтеграція: автоматизація покупки та оновлення cover (1 тиждень)
- Тестування та безпека інтеграційного коду (1 тиждень)
- Документація, навчання команди та передача доступів
- Моніторинг покриття та сповіщення про зміни ризиків
Оцініть ваш проект — зв'яжіться з нами для розрахунку вартості та термінів. Гарантуємо досвід інтеграції з 10+ DeFi-протоколами.
Вимоги до протоколу для отримання покриття
| Вимога |
Деталі |
| Аудит |
Trail of Bits, OpenZeppelin, Sherlock, Code4rena |
| Відкритий код |
Верифіковані контракти |
| Вік |
Не менше 3 місяців в production |
| Вразливості |
Відсутність активних critical |
| TVL |
Мінімальний поріг від провайдера (зазвичай $100k) |
Деякі провайдери проводять власну оцінку ризику та виставляють premium на основі якості коду.
Процес інтеграції та терміни
- Вибір провайдера (1-2 дні)
- Реєстрація протоколу (1 тиждень)
- Frontend інтеграція (1-2 тижні)
- Smart contract інтеграція (1 тиждень)
- Тестування та аудит (1 тиждень)
Разом: 4-6 тижнів. Отримайте консультацію — напишіть нам, ми розрахуємо оптимальну модель страхування для вашого протоколу.
Аудит смарт-контрактів: як знаходять те, що не бачить компілятор
Коли протокол втрачає значні кошти через flash loan атаку на функцію, яку аудитори дивилися наживо — це не випадковість. Це системна прогалина в методології. Наш досвід показує: вразливість живе в контракті більше року, а компілятор мовчить. Ми перебудували процес аудиту так, щоб ловити такі кейси до деплою.
Що не знайде статичний аналіз?
Slither — стандартний перший інструмент. Знаходить reentrancy, integer overflow (в старих версіях Solidity), неправильне використання tx.origin, shadowing змінних, неініціалізовані сховища. На реальному проекті Slither видає десятки попереджень, з яких критичних — 0‑2. Решта — інформаційний шум.
Slither не знайде логічну вразливість. Якщо withdraw коректно перевіряє баланс і коректно оновлює стан, але бізнес-логіка дозволяє подвійне списання через два різні шляхи кодової бази — Slither промовчить.
Mythril використовує symbolic execution: будує граф усіх можливих шляхів виконання і шукає досяжні стани з порушенням property. Працює добре на ізольованих контрактах. На протоколі з 20 контрактів з cross‑contract викликами — path explosion, аналіз зависає або видає false positive.
Обидва інструменти обов'язкові як перший pass. Але вони не замінюють ручний аналіз.
Fuzzing: де Echidna та Foundry знаходять реальні баги?
Echidna — property‑based fuzzer від Trail of Bits. Ідея: формулюєш інваріанти контракту як Solidity‑функції (echidna_invariant), Echidna генерує випадкові послідовності викликів і намагається зламати інваріант.
Приклад інваріанта для lending протоколу:
function echidna_total_assets_ge_liabilities() public view returns (bool) {
return totalAssets() >= totalLiabilities();
}
Echidna знайде послідовність deposit → borrow → liquidate → repay, яка порушує цей інваріант. Руками такий кейс не побудуєш — комбінацій занадто багато.
Foundry fuzzing (forge test --fuzz-runs 100000) простіший в інтеграції, якщо команда вже на Foundry. Підтримує stateful fuzzing через invariant тести. В реальному проекті: auditing vault контракт, Foundry fuzz за 40 хвилин знайшов edge case, при якому maxWithdraw повертав значення більше фактичного балансу при конкретному співвідношенні shares/assets після кількох донатів. Hardhat unit‑тести цей кейс пропускали — там не було такої комбінації параметрів.
Medusa (від Trail of Bits, новіша за Echidna) підтримує corpus‑guided fuzzing і працює швидше на великих контрактах. Якщо обсяг кодової бази > 5000 рядків Solidity — дивимося на Medusa.
Як інваріанти допомагають виявити критичні уразливості?
Формальна верифікація доводить, що контракт задовольняє специфікації для всіх можливих вхідних даних — не для N випадкових, а математично для всіх. Інструменти: Certora Prover, K Framework, Halmos.
Certora працює з CVL (Certora Verification Language): пишеш rules і invariants, Prover транслює їх у SMT‑формули і перевіряє через Z3/CVC5. MakerDAO, Aave, Uniswap використовують Certora в CI/CD pipeline — кожен PR верифікується автоматично.
Обмеження: не працює з необмеженими циклами, складно справляється з hash functions і signature verification. Для контрактів з простою математикою (AMM, lending) — відмінно. Для контрактів з довільними зовнішніми викликами — складно написати достатньо повну специфікацію.
Formal verification має сенс для контрактів, які: керують значним TVL, оновлюються рідко, мають чітко формалізовані інваріанти. Для продуктів, що швидко ітеруються, співвідношення витрат і користі не на користь верифікації.
Вектори атак, які пропускають джуніор‑аудитори
Storage collision в proxy патерні. Transparent proxy і UUPS використовують конкретні слоти для зберігання адреси імплементації (EIP‑1967). Якщо в імплементації випадково оголошена змінна в слоті 0, яка перетинається з proxy storage — отримуємо silent override. Slither це не впіймає, якщо proxy та імплементація в різних файлах.
Read‑only reentrancy. Класичний reentrancy guard захищає від зміни стану при рекурсивному виклику. Але якщо зовнішній контракт читає стан через view-функцію в середині транзакції — guard не допомагає. Кілька років тому Curve pools стали вектором атаки саме через це: зовнішній протокол читав get_virtual_price під час reentrancy‑вразливого стану Curve.
Oracle manipulation через TWAP. Spot price — стандартна ціль для flash loan атаки. TWAP складніше маніпулювати, але не неможливо: на малоліквідних парах Uniswap v2 можна зсунути TWAP за кілька блоків при достатньому капіталі. Правильний захист — використовувати Chainlink як primary oracle з TWAP як fallback, з перевіркою deviation threshold.
Gas griefing на unbounded loop. Функція ітерується по масиву користувачів. Атакуючий додає тисячі адрес з нульовими балансами — вартість виклику функції зростає до gas limit, функція стає недоступною. Захист: pull‑pattern замість push, обмеження довжини масивів, batch‑обробка зі збереженням позиції.
Front‑running на MEV. Транзакція видна в mempool до включення в блок. MEV‑бот бачить addLiquidity на значну суму, вставляє свій swap перед нею (sandwich attack). Для AMM це частина моделі. Для протоколів з ціновими функціями — потрібен minAmountOut / deadline параметр і його обов'язкова перевірка.
Структура повного аудиту
-
Scope definition і автоматичний аналіз (1‑2 дні). Фіксуємо commit hash, версію компілятора, список out‑of‑scope. Запускаємо Slither, Mythril, Aderyn. Triage: відокремлюємо реальні критичні баги від false positive. Складаємо карту залежностей контрактів.
-
Ручний аналіз (5‑15 днів). Кожен контракт порядково. Особлива увага: всі external і public функції, всі transfer/call/delegatecall, всі місця, де змінюється стан перед перевіркою або після зовнішнього виклику, всі математичні операції з участю користувацьких inputs. В середньому 95% знайдених уразливостей — логічні, а не технічні.
-
Fuzzing і тестування (2‑5 днів). Echidna або Foundry invariant tests для критичних інваріантів. Fork mainnet тести — перевіряємо поведінку в реальному оточенні з реальними оракулами. Наприклад, за 4 дні fuzzing знаходить в середньому 3 edge cases, не покритих unit‑тестами.
-
Звіт і мітигація. Звіт з severity (Critical/High/Medium/Low/Informational), описом вектора атаки, PoC‑кодом для Critical/High. Розробники виправляють, аудитори роблять re‑audit виправлень.
| Severity |
Приклади |
Чи потребує re‑audit |
| Critical |
Виведення коштів, несанкціоноване перенесення власності |
Завжди |
| High |
Маніпуляція, DoS на ключові функції |
Завжди |
| Medium |
Некоректна поведінка при edge cases |
Рекомендується |
| Low |
Газ‑неефективність, опечатки в events |
За бажанням |
Аудит у CI/CD
Нормальна практика для зрілих протоколів: Slither і Aderyn запускаються в GitHub Actions на кожен PR. Certora Prover — на merge в main. Це не замінює повний аудит перед деплоєм, але ловить регресії.
# .github/workflows/audit.yml
- name: Run Slither
uses: crytic/[email protected]
with:
target: 'src/'
slither-args: '--filter-paths "test|mock|script"'
Чек‑лист обов'язкових перевірок перед деплоєм
- Всі external функції мають перевірки доступу (
onlyOwner, onlyRole)
- Використання
SafeERC20 для зовнішніх токенів
- Відсутність
delegatecall на невідомі адреси
- Перевірка на reentrancy у всіх функціях з зовнішніми викликами
- Наявність
minAmountOut і deadline в AMM‑функціях
- Використання перевіреного оракула (Chainlink) з deviation threshold
Інструменти аудиту: порівняння
| Інструмент |
Тип аналізу |
Що знаходить |
Обмеження |
| Slither |
Статичний |
Reentrancy, integer overflow, access control |
Пропускає логічні уразливості |
| Mythril |
Symbolic execution |
Досяжні стани з порушенням property |
Path explosion на великих базах |
| Echidna |
Fuzzing (property‑based) |
Порушення інваріантів |
Потребує написання інваріантів |
| Certora |
Formal verification |
Математичне доведення властивостей |
Не працює з хешами/підписами |
Що входить в роботу (deliverables)
- Повний звіт у PDF з CVSS‑оцінками кожної уразливості
- PoC‑код для всіх Critical і High (відтворюваний в тестовому середовищі)
- Рекомендації щодо виправлення з прикладом коду
- Re‑audit після внесення правок (до двох ітерацій)
- Коротка пам'ятка для розробників щодо подальшої експлуатації
- Підтримка після деплою протягом 30 днів (консультації та розбір інцидентів)
Терміни
Аудит простого токена або NFT‑контракту — 3‑5 робочих днів. DeFi протокол з lending/AMM — 2‑4 тижні. Повний стек з кількома протоколами, cross‑chain, proxy upgrades — 4‑8 тижнів. Re‑audit виправлень — 3‑7 днів окремо.
Наша команда має 7+ років досвіду в безпеці смарт‑контрактів, перевірила 100+ проектів з сумарним TVL понад значну суму. Гарантуємо, що в процесі ми не пропустимо жоден відомий вектор — використовуємо ліцензовані версії Slither та найкращі конфігурації fuzzer'ів. Запобігнуті збитки для клієнтів оцінюються в значну суму.
Оцініть ваш проект — ми безкоштовно проаналізуємо код і запропонуємо комерційну пропозицію протягом 2 днів. Замовте аудит з гарантією якості та отримайте знижку на re‑audit при повторному зверненні.