Розробка DeFi-протоколу

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка DeFi-протоколу
Складний
від 2 тижнів до 3 місяців
Часті запитання

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

Етапи блокчейн-розробки

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

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

Розробка DeFi-протоколу

Команда запускає lending-протокол, натхненний Aave v3. На етапі тестування все працює. Після деплою на mainnet через 48 годин оракул Chainlink повертає застарілу ціну — liquidation threshold пробиває безпечні позиції. Ліквідатори дренують залоговий пул на $400K, поки команда розбирається в чому справа. Проблема не в самому Chainlink — в відсутності перевірки staleness: контракт не перевіряв updatedAt з latestRoundData().

Розробка DeFi-протоколу — це не просто Solidity-код. Це система інваріантів, які повинні утримуватися при будь-яких ринкових умовах, MEV-атаках та force majeure на рівні інфраструктури.

Де DeFi-протоколи ломаються на етапі дизайну

Oracle manipulation через flash loan

Типова схема: атакуючий бере flash loan на 50M USDC у Aave, маніпулює ціною у пулу Uniswap v2 з низькою ліквідністю, використовує цей пул як ціновий оракул, позичає під завищену collateral, не повертає займ. Протоколи, які використовують token.balanceOf(pool) або spot price з AMM як оракул — вразливі за визначенням.

Захист працює на кількох рівнях:

TWAP замість spot price. Uniswap v3 надає OracleLibrary.consult() для розрахунку time-weighted average price. Вікно в 30 хвилин робить flash loan маніпуляцію економічно невигідною — потрібно утримувати позицію кілька блоків, кожен з ризиком арбітражу.

Chainlink з fallback. Primary source — Chainlink, fallback — Uniswap v3 TWAP. Якщо Chainlink повертає ціну з updatedAt старішою за 3600 секунд або answer < 0 — перемикаємся на TWAP з emission event для мониторингу.

Circuit breaker на відхилення. Якщо ціна змінилась більше ніж на 15% за один блок — транзакція revert. Параметр налаштовується через governance з timelock.

Reentrancy у cross-protocol взаємодіях

AMM-протокол викликає токен при swap. Якщо токен реалізує ERC-777 з tokensReceived хуком — атакуючий контракт отримує управління в середині swap, до оновлення внутрішніх балансів пулу. Не теорія: атака на Uniswap v1 через ERC-777 була одна з перших публічних DEX експлойтів.

У сучасних протоколах проблема ускладнюється: callback-паттерни (uniswapV3SwapCallback, flashLoanReceiver) навмисно передають управління зовнішньому коду. Захист будується через invariant check: перед callback фіксується стан, після — перевіряється що інваріанти дотримані.

Liquidation mechanics та bad debt

При різкому падінні ринку на 40%+ за один блок (Ethereum впав на 50% за кілька годин в березні 2020) ліквідація може не встигнути. Collateral коштує менше, ніж борг — протокол накопичує bad debt. Compound v2 з цим зіткнувся, MakerDAO ввів Emergency Shutdown саме як останній рубіж.

Параметри ліквідації вимагають математичного моделювання: loan-to-value ratio, liquidation threshold, liquidation bonus, close factor — всі мають бути відкалібровані під волатильність конкретного активу. WBTC та мем-токен не можуть мати однаковий LTV.

Архітектура протоколу

Модульна структура контрактів

Монолітний контракт на 3000 рядків — перша помилка у DeFi-протоколі. Не з естетики, а тому що:

  • Перевищує лімит байткода EVM (24 KB)
  • Неможливо замінити окремий модуль без повного редеплою
  • Аудит займає в 3x дольше і коштує відповідно

Використовуємо Diamond Pattern (EIP-2535) для протоколів з багатою функціональністю: окремі facets для lending, liquidation, oracle, governance. Хранилище — спільне Diamond Storage через keccak256-слоти (ERC-7201).

Для простіших випадків — розділення на Core (незмінна логіка), Periphery (допоміжні контракти, можна оновлювати) та Governance. Цей паттерн використовує Uniswap починаючи з v2.

Upgradability: коли потрібна та коли шкодить

UUPS (EIP-1822) vs Transparent Proxy (EIP-1967): вибір залежить від того, хто платить за upgrade. У UUPS логіка upgrade у імплементації — дешевше для користувачів, але якщо у новій імплементації видалити функцію upgradeTo — протокол втрачає можливість upgrade навічно. У Transparent Proxy логіка у proxy — трохи дорожче кожен вив, але надійніше.

Для протоколів з TVL >$10M upgradability через multisig без timelock — це централізований вектор атаки. Gnosis Safe 4-of-7 + 48-годинний timelock через OpenZeppelin TimelockController — мінімальний стандарт довіри.

Tokenomics на рівні контракту

Ve-модель (vote-escrowed, як у Curve) вимагає careful balance: контракт блокує токени на строк до 4 років, розраховує voting power через balanceOfAtTime() на конкретному блоці. Якщо voting power розраховується неправильно — governance атака коштує дешевше, ніж мала б.

Emission schedule має бути immutable або керуватися через supermajority голосування. Retroactive зміни емісії — саме те, що вбиває довіру до протоколу.

Stack розробки

Компонент Інструменти Призначення
Розробка Foundry, Hardhat Основне середовище, тести, deploy
Base контракти OpenZeppelin 5.x Access control, proxy, tokens
Oracle Chainlink, Uniswap v3 TWAP Цінові дані
Тестування Foundry fuzz, Echidna Property-based тести
Статичний аналіз Slither, Mythril Автоматичний пошук вразливостей
Мониторинг Tenderly, OpenZeppelin Defender Алерти, автоматизація
Індексування The Graph Субграф для frontend

Fork-тести на Foundry дозволяють запустити весь протокол проти реального стану mainnet: vm.createFork("mainnet"), vm.rollFork(blockNumber). Єдиний спосіб перевірити взаємодію з реальними пулами Uniswap, реальними Chainlink feeds та реальними позиціями Aave.

Процес розробки

Специфікація (1 тиждень). Формальне описання інваріантів: «сумарний борг завжди менше сумарного collateral з врахуванням LTV», «тільки ліквідатор може закрити unhealthy позицію», «emission rate не може вирости більше ніж на X% за один governance цикл». Інваріанти стають основою для Echidna property-тестів.

Архітектурний дизайн (3-5 днів). Storage layout, інтерфейси, діаграма взаємодії контрактів. Рішення по upgradability та governance. Цей етап дешевше змінити на папері, ніж після 2 тижнів розробки.

Розробка (3-8 тижнів). Залежить від складності протоколу. Паралельно: контракти + тести у Foundry (>90% покриття), субграф на The Graph, скрипти деплою.

Внутрішній аудит + підготовка до зовнішнього. Slither CI на кожен PR. Перед зовнішнім аудитом — повна Mythril-перевірка, ручний review по SWC-checklist. Мета — закрити low/medium до зовнішнього аудитора, щоб він сфокусувався на high-level векторах.

Deploy. Testnet (Sepolia/Arbitrum Goerli) → staged mainnet через multisig з timelock → post-launch мониторинг через Tenderly.

Орієнтири за часом

Мінімальний AMM-протокол (xy=k, без концентрованої ліквідності) — 4-6 тижнів. Lending за моделлю Compound v2 — 8-12 тижнів. Повнофункціональний протокол з ve-токеномікою, governance та cross-chain поддержкою — від 3 до 6 місяців. Зовнішній аудит займає додатково 2-4 тижні та планується завчасно у топових фірм (Trail of Bits, Spearbit, Code4rena).

Вартість розраховується після технічної специфікації.