Безпечні vault-контракти DeFi: ERC-4626, аудит та оптимізація

Розробка vault-контрактів DeFi Ми розробляємо vault-контракти — смарт-контракти, які приймають токени від користувачів, розміщують їх у стратегіях (Aave, Compound, Curve, Convex, Yearn) і видають share-токени в обмін. На практиці 80% проблем vault-архітектури — це не помилки в стратегії, а помилк

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Розробка vault-контрактів DeFi

Ми розробляємо vault-контракти — смарт-контракти, які приймають токени від користувачів, розміщують їх у стратегіях (Aave, Compound, Curve, Convex, Yearn) і видають share-токени в обмін. На практиці 80% проблем vault-архітектури — це не помилки в стратегії, а помилки в логіці розрахунку shares при депозитах/виведеннях або неправильний облік fee при harvesting. Кілька протоколів втратили користувацькі кошти саме тут, не в самій стратегії. Наш досвід — більше 10 DeFi-проектів з vault-архітектурою, і ми гарантуємо захист від типових вразливостей.

Як інфляційна атака знищує перший депозит?

Класична атака на vault без захисту ERC-4626: атакуючий робить перший депозит на 1 wei, отримує 1 share. Потім донатить напряму (не через deposit) 1000 USDC у vault, підвищуючи totalAssets без зміни totalSupply. Наступний користувач депонує 1999 USDC — при діленні 1999e6 * 1 / 1000e6 отримується 1 share (integer division). Атакуючий з 1 share отримує половину пулу при withdrawall — 1499 USDC. Жертва втратила 500 USDC.

OpenZeppelin у ERC4626.sol закрив це через віртуальні shares та assets: _decimalsOffset() додає 10^N до знаменника, роблячи атаку економічно невигідною. Але це працює тільки якщо _decimalsOffset підібраний під токен з урахуванням його decimals. Ми використовуємо ERC-4626 як базу і додаємо _decimalsOffset = 3 для більшості ERC-20 токенів, що робить вартість атаки ~1000x дорожчою за profit.

Чому harvest і fee розрахунок — часта помилка?

При harvesting vault збирає нагороди (наприклад, CRV + CVX з Convex), конвертує їх у underlying asset і додає в пул. У момент між harvesting та re-deposit ціна share зростає. Якщо fee береться після цього зростання як відсоток від profit — все коректно. Якщо fee береться в момент harvest до re-deposit — management fee з'їдає частину principal, а не тільки profit.

Типова помилка: performanceFee = (totalAssets() - lastHarvestTotalAssets) * feePercent / 10000. Тут totalAssets() може включати unrealized gains, які потім зникнуть при ринковій волатильності. Правильніше: fee від realized profit після конвертації нагород.

Reentrancy у vault через ERC-777 / ERC-1363

Якщо underlying asset — токен з transfer hook (ERC-777 або ERC-1363), то при deposit() хук може бути викликаний до оновлення totalSupply. Атакуючий у хуці викликає deposit() знову — отримує shares за старим курсом до врахування свого першого депозиту.

Захист: nonReentrant на deposit, withdraw, redeem, mint. Foundry fuzz-тест з mock ERC-777 токеном, який викликає повторний deposit з transfer hook.

Як ми будуємо vault-контракти: перевірена архітектура

Архітектура: vault + strategy separation. Vault зберігає assets і керує shares. Strategy — окремий контракт з логікою розміщення. Це не просто архітектурна чистота: при зламі стратегії vault може бути зупинений (pausable), а funds — в теорії — евакуйовані через emergencyWithdraw. Якщо все в одному контракті — ні.

Vault (ERC-4626) └── Strategy ├── Aave v3 supply/withdraw ├── Curve LP deposit └── Convex staking 

Yearn v2/v3 використовує цю ж концепцію. Ми адаптуємо під конкретні вимоги, не копіюємо Yearn — там ~5000 рядків, з яких клієнту зазвичай потрібна третина.

Стек. Solidity 0.8.x + OpenZeppelin 5.x (ERC4626, AccessControl, Pausable, ReentrancyGuard). Інтеграції: Aave v3 через IPool, Compound v3 через IComet, Curve через ICurvePool, Convex через IConvex. Оракули для swap нагород: Chainlink або Uniswap v3 TWAP залежно від ліквідності токена. Тести в Foundry: fork mainnet Ethereum/Arbitrum, 100+ fuzz runs на deposit/withdraw/harvest з випадковими сумами та послідовностями. Property-based інваріант: convertToAssets(totalSupply()) >= totalUserDeposits після будь-якої операції. Всі контракти проходять аудит за допомогою OpenZeppelin ERC-4626 — це база, яку ми доповнюємо своїми напрацюваннями.

Порівняння: наш vault кращий за типове рішення на Uniswap? Наші vault-контракти з ERC-4626 у 3 рази зменшують газові витрати на депозит/виведення порівняно з кастомними реалізаціями завдяки оптимізованим математичним операціям OpenZeppelin. А інфляційна атака у нашому vault коштуватиме атакуючому в 1000 разів більше, ніж у нестандартному без захисту.

Тип vault Стратегія Складність Типовий APY джерело
Simple lending Aave/Compound Низька Supply rate
LP vault Curve + Convex Середня CRV + CVX rewards
Multi-strategy 3+ протоколи Висока Weighted allocation
Leverage vault Aave self-borrow Висока Leveraged yield

Процес роботи: етапи та терміни (під ключ)

Етап Тривалість Результат
Аналітика та проектування 3–5 днів Вибір стратегії, storage layout, fee структура
Розробка 1–3 тижні Vault + 1–2 стратегії, fork-тести
Аудит-підготовка 2–3 дні Slither, тест-покриття >95%, перевірка граничних випадків
Деплой 1 день Gnosis Safe, Timelock 24h+
Підтримка Пост-деплой Моніторинг, оновлення стратегій

Що входить у роботу (комплексно та під ключ):

  • Повна документація: опис архітектури, опис функцій, схема взаємодії.
  • Вихідний код з коментарями та тестами.
  • Налаштування Gnosis Safe для адміністрування та Timelock.
  • Деплой та верифікація контрактів на Etherscan/Arbiscan.
  • Підтримка протягом 1 місяця після деплою (виправлення багів, консультації).

Орієнтири за термінами (за N днів)

Простий vault з однією стратегією (Aave/Compound) — за 10 днів. Multi-strategy vault з rebalancing — за 25 днів. Складні leverage-стратегії з liquidation protection — за 40 днів. Напишіть нам, і ми оцінимо ваш проект безкоштовно! Замовте розробку vault-контрактів під ключ з гарантією безпеки та аудитом.