Разработка fractional-reserve стейблкоина
Клиент хочет стейблкоин, который не требует 150% overcollateralization, как DAI в режиме CDP, но при этом держит пег. Частичное резервирование — это не баг дизайна, это компромисс между капиталоэффективностью и устойчивостью. Проблема в том, что большинство команд, берущихся за реализацию, недооценивают механизм bank run в on-chain контексте: в отличие от традиционных банков, умные контракты позволяют вывести всё за одну транзакцию.
Почему fractional-reserve стейблкоины ломаются — и как их не сломать
Алгоритмическая часть убивает пег быстрее, чем кажется
FRAX v1 запустился с CR (Collateral Ratio) 100%, затем алгоритм снижал CR при росте спроса. Теория: если рынок доверяет протоколу, часть обеспечения можно заменить governance-токеном FXS. На практике в марте 2023, после краха SVB, CR упал ниже 90%, и восстановление стоило нескольких недель волатильности. Не провал — но наглядный пример того, что алгоритмическая часть не линейна под давлением.
Ключевой инвариант, который нужно защищать: redemption всегда возможен по номиналу. Если пользователь не может сжечь 1 стейблкоин и получить $1 в collateral (или эквиваленте), механизм арбитража сломан, и пег держится только на психологии.
Конструкция контракта: три слоя
Слой 1 — Minting/Redemption. Пользователь вносит collateral (USDC, ETH через Chainlink price feed) и получает стейблкоин. При mint с CR=80% — 80 центов в USDC + governance-токены на 20 центов. При redeem — обратно. Этот слой должен быть атомарным и не зависеть от on-chain ликвидности governance-токена.
Слой 2 — PID-контроллер CR. Алгоритм, который повышает CR при депеге вниз и снижает при устойчивом пеге. Критично: не делать это мгновенно. Изменение CR на 1% в день — типичный параметр. Резкое изменение создаёт MEV-возможности для арбитражников, которые будут атаковать момент смены.
Слой 3 — AMO (Algorithmic Market Operations). Свободные резервы работают в Curve/Aave/Convex, генерируя доходность. AMO-контракты должны иметь жёсткий лимит на максимальный deploy: если AMO может уйти в стратегию больше, чем (1 - CR) от total supply, система становится уязвимой к одновременному изъятию.
Flash loan как вектор атаки на оракул
Типичная схема: злоумышленник берёт flash loan на 50M USDC, продавливает цену governance-токена вниз на 40% через тонкий пул на Uniswap v2, контракт мгновенно пересчитывает CR через TWAP-оракул с коротким окном (5 минут) — CR падает, протокол оказывается в техническом undercollateral. При этом сам злоумышленник открывает redemption и получает USDC из резерва по невыгодному для протокола курсу.
Защита: TWAP минимум 30 минут для governance-токена как компонента обеспечения. Для USDC и ETH достаточно Chainlink с deviation threshold 0.5%. Отдельные оракулы для разных компонентов, не агрегированный price feed.
Как мы строим такие системы
Разработка начинается с экономической модели, не с кода. Нужно определить:
- Целевой CR диапазон (например, 80-90%)
- Параметры PID: скорость изменения CR, триггерные пороги
- Список допустимых collateral активов и их весовые коэффициенты
- Механизм incentivize для поддержания пега (stability fees, bond mechanism)
Стек: Solidity 0.8.x, OpenZeppelin для access control и pausability, Chainlink для price feeds, Curve Finance SDK для AMO-интеграции. Тесты в Foundry с fork mainnet — обязательно, потому что AMO-логика зависит от реального состояния пулов Curve.
Для governance-токена — стандартный ERC-20 с burn-механикой при mint стейблкоина. Важно: governance-токен не должен иметь infinite mint — это убивало проекты вроде Iron Finance (IRON/TITAN, июнь 2021, $2B → $0 за 24 часа).
Тестирование сценария bank run
В Foundry можно симулировать одновременный redeem 80% supply за один блок. Контракт должен либо обработать это корректно (выдать USDC из резерва, заморозить governance-token часть), либо активировать circuit breaker. Circuit breaker — pausable модуль с timelock, который вводит cooldown на redeem при превышении порогового объёма за блок.
Property-based тест через Echidna: инвариант «total_collateral_value / total_supply >= min_CR» должен держаться при любом сценарии minting и redemption.
Процесс работы
Экономический дизайн (1-2 недели). Параметризация модели, симуляция в Python/Jupyter, stress-тесты bank run сценариев. Определяем пороги, при которых система становится нестабильной.
Проектирование контрактов (1 неделя). Storage layout, интерфейсы, диаграмма взаимодействия. Особое внимание — порядку операций в mint/redeem (Checks-Effects-Interactions).
Разработка (3-6 недель). Core контракты + AMO + оракульная обвязка. Fork-тесты против mainnet Curve/Aave.
Аудит. Для финансовых протоколов такого уровня — обязателен внешний аудит. Мы подготавливаем кодовую базу: Slither clean, 95%+ test coverage, NatSpec на все публичные функции.
Деплой. Сначала testnet (Sepolia) с имитацией market stress через Foundry scripts. Mainnet деплой через Gnosis Safe multisig с timelock минимум 48 часов на parameter changes.
Ориентиры по срокам
Минимальная система без AMO: 6-8 недель. С AMO-модулями и полным тестовым покрытием: 2-3 месяца. Сроки сильно зависят от количества collateral типов и сложности governance-механики.







