Разработка DeFi-протокола
Команда запускает лендинг-протокол, вдохновлённый Aave v3. На этапе тестирования всё работает. После деплоя на mainnet через 48 часов оракул Chainlink возвращает устаревшую цену — liquidation threshold пробивает безопасные позиции. Ликвидаторы дренируют залоговый пул на $400K, пока команда разбирается в чём дело. Проблема не в самом Chainlink — в отсутствии staleness check: контракт не проверял updatedAt из latestRoundData(). Наша команда сталкивалась с подобными инцидентами и выработала системный подход к разработке DeFi-протоколов, включая смарт-контракты для lending protocol, AMM, cross-chain bridge, а также liquidity pool для yield farming.
Разработка DeFi-протокола — это не просто Solidity-код. Это система инвариантов, которые должны держаться при любых рыночных условиях, MEV-атаках и форс-мажорах на уровне инфраструктуры. Мы используем формальные спецификации и property-based тесты для выявления уязвимостей на ранних этапах. Гарантируем прозрачность на каждом этапе.
Почему DeFi-протоколы ломаются на этапе дизайна
Oracle manipulation через flash loan
Типичная схема: атакующий берёт flash loan на 50M USDC в Aave, манипулирует ценой в Uniswap v2 пулу с низкой ликвидностью, использует этот пул как ценовой оракул, занимает под завышенный залог, не возвращает займ. Протоколы, которые используют 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 с emit события для мониторинга. -
Circuit breaker на отклонение. Если цена за один блок изменилась более чем на 15% — транзакция реверсируется. Параметр настраивается через governance с timelock.
Reentrancy в cross-protocol взаимодействиях
AMM-протокол вызывает токен при swap. Если токен реализует ERC-777 с tokensReceived хуком — атакующий контракт получает управление в середине swap, до обновления внутренних балансов пула. Это не теория: атака на Uniswap v1 через ERC-777 была одной из первых публичных эксплойтов на DEX. Подробнее о reentrancy можно прочитать на Wikipedia.
В современных протоколах проблема усложняется: callback-паттерны (uniswapV3SwapCallback, flashLoanReceiver) намеренно передают управление внешнему коду. Защита строится через invariant check: перед callback фиксируется состояние, после — проверяется что инварианты соблюдены.
Liquidation mechanics и bad debt
При резком падении рынка на 40%+ за один блок (Ethereum в кризисный период упал на 50% за несколько часов) liquidation может не успеть. Залог стоит меньше долга — протокол получает bad debt. Compound v2 столкнулся с этим, MakerDAO ввёл механизм Emergency Shutdown именно как последний рубеж.
Параметры ликвидации требуют математического моделирования: loan-to-value ratio, liquidation threshold, liquidation bonus, close factor — все эти параметры должны быть откалиброваны под волатильность конкретного актива. WBTC и мем-токен не могут иметь одинаковый LTV. Плохая gas-оптимизация может стоить до $5000 в месяц, а оптимизация на этапе разработки снижает эти расходы на 30-50%. Неоптимизированные контракты — более 2000 строк кода, что увеличивает время аудита в 3 раза.
Как мы обеспечиваем безопасность оракулов в DeFi-протоколах?
Применяем многоуровневую стратегию: первичный оракул Chainlink с TWAP-резервом, circuit breaker на аномальные движения цены, и обязательную валидацию свежести данных. Дополнительно используем keepers на Tenderly для автоматического переключения источников при сбоях.
| Риск | Контрмеры | Инструменты |
|---|---|---|
| Манипуляция оракулом | TWAP, circuit breaker, fallback оракулы | Chainlink, Uniswap v3 TWAP |
| Reentrancy | Reentrancy guard, invariant checks после callback | OpenZeppelin ReentrancyGuard |
| Неверная ликвидация | Моделирование параметров, stress test | Собственные скрипты на Foundry |
Архитектура протокола
Модульная структура контрактов
Монолитный контракт на 3000 строк — первая ошибка в DeFi-протоколе. Не из-за эстетики, а потому что:
- Превышает лимит байткода EVM (24 KB)
- Невозможно заменить отдельный модуль без полного редеплоя
- Аудит занимает в 3x дольше и стоит соответственно
Используем Diamond Pattern (EIP-2535) для протоколов с богатой функциональностью: отдельные facets для lending, liquidation, oracle, governance. Хранилище — общий Diamond Storage через keccak256-слоты (ERC-7201). Подробнее о Diamond Pattern можно прочитать на GitHub.
Для более простых случаев — разделение на Core (неизменяемая логика), Periphery (вспомогательные контракты, можно обновлять) и Governance. Этот паттерн использует Uniswap, начиная с v2.
Upgradability: когда нужна и когда вредит
UUPS (EIP-1822) vs Transparent Proxy (EIP-1967): выбор зависит от того, кто платит за апгрейд. В UUPS логика апгрейда в имплементации — дешевле для пользователей, но если в новой имплементации убрать функцию upgradeTo — протокол теряет возможность апгрейда навсегда. В Transparent Proxy логика в proxy — чуть дороже каждый вызов, но надёжнее.
Для протоколов с TVL более $10M апгрейдаемость через 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 или управляться через governance с супер-мажоритетным голосованием. Изменение эмиссии retroactively — это именно то, что убивает доверие к протоколу.
Стек разработки
| Компонент | Инструменты | Назначение |
|---|---|---|
| Разработка | Foundry, Hardhat | Основная среда, тесты, деплой |
| Базовые контракты | 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 неделя). Формальное описание инвариантов: «суммарный долг всегда меньше суммарного залога с учётом LTV», «только ликвидатор может закрыть unhealthy позицию», «emission rate не может вырасти больше чем на X% за один governance цикл». Инварианты становятся основой для Echidna property-тестов.
-
Архитектурный дизайн (3-5 дней). Storage layout, интерфейсы, диаграмма взаимодействия контрактов. Решение по апгрейдаемости и governance. Этот этап дешевле изменить на бумаге, чем после 2 недель разработки.
-
Разработка (3-8 недель). Зависит от сложности протокола. Параллельно: контракты + тесты в Foundry (покрытие >90%), субграф на The Graph, скрипты деплоя.
-
Внутренний аудит + подготовка к внешнему. Slither CI на каждый PR. Перед внешним аудитом — полная Mythril-проверка, ручной review по SWC-checklist. Цель — закрыть low/medium до внешнего аудитора, чтобы он сфокусировался на высокоуровневых векторах.
-
Деплой. Testnet (Sepolia/Arbitrum Goerli) → staged mainnet через multisig с timelock → post-launch мониторинг через Tenderly.
Ориентиры по срокам
Минимальный AMM-протокол (xy=k, без концентрированной ликвидности) — 4-6 недель. Лендинг по модели Compound v2 — 8-12 недель. Полноценный протокол с ve-токеномикой, governance и cross-chain поддержкой — от 3 до 6 месяцев. Внешний аудит занимает 2-4 недели дополнительно и планируется заранее у топовых фирм.
Стоимость рассчитывается после технической спецификации. Получите консультацию — оценим ваш проект бесплатно. Наш опыт: 10+ лет в блокчейн-разработке, 50+ успешных проектов, сертифицированные аудиторы.
Что входит в работу
- Документация: спецификация инвариантов, архитектурная диаграмма, техническая документация для аудитора.
- Доступы: репозиторий с исходным кодом, отчёты аудита, скрипты деплоя, административный мультисиг-кошелёк.
- Обучение: передача знаний команде заказчика по работе с протоколом и мониторингу.
- Поддержка: 2 недели post-launch поддержки, фиксация критических багов в рамках warranty.
Дополнительные меры безопасности
Мы также рекомендуем включать в контракты механизмы pause и emergency shutdown, а также использовать формальные верификаторы, такие как Certora, для доказательства инвариантов. Наши протоколы проходят внешний аудит с минимальным количеством замечаний — в среднем не более 2 medium-уязвимостей.Закажите разработку DeFi-протокола с проверенной архитектурой. Если вы разрабатываете DeFi-протокол, закажите аудит архитектуры на раннем этапе — это сэкономит время и деньги. Свяжитесь с нами — оценим ваш проект и предложим оптимальную архитектуру.







