Разработка бота ликвидаций для Aave

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Разработка бота ликвидаций для Aave
Сложная
~1-2 недели
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1060
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Разработка бота ликвидаций для Aave

В сентябре 2023 года во время резкого падения рынка на Aave v3 в Ethereum стало доступно для ликвидации позиций на ~$47M. Боты, которые успели исполнить ликвидации первыми, суммарно заработали несколько миллионов долларов в виде liquidation bonus (5-15% от суммы долга). Боты, которые отправили транзакции на 200 мс позже — получили revert и потеряли только на газе.

Разрыв между «успел» и «не успел» — это архитектурные решения, принятые за месяцы до события.

Механика ликвидаций в Aave v3

Health factor и когда позиция открывается

Позиция становится ликвидируемой, когда healthFactor < 1. Формула:

HF = Σ(collateral_i * liquidationThreshold_i) / totalDebt

Liquidation threshold зависит от актива: для ETH это 82.5%, для WBTC — 75%, для более волатильных активов — 65% и ниже. При HF < 1 любой может вызвать liquidationCall() и получить collateral заёмщика со скидкой равной liquidation bonus.

Важный нюанс Aave v3: нельзя ликвидировать более 50% долга за один вызов (close factor = 0.5), если HF > 0.95. Если HF упал ниже 0.95 — можно ликвидировать 100% долга за один вызов. Это меняет расчёт прибыльности: при глубоком падении HF одна транзакция закрывает всю позицию.

Источники данных о позициях

Три подхода с разным trade-off между latency и полнотой:

Источник Latency Полнота Подходит для
The Graph (subgraph) 15-60 сек Все позиции Фоновый скан
Aave API (positions) 5-30 сек Все позиции Периодический опрос
On-chain getUserAccountData ~1 блок Конкретные адреса Мониторинг watchlist
Событие Borrow + пересчёт Real-time Новые позиции Добавление в watchlist

Рабочая архитектура: фоновый скан через The Graph для построения базы всех позиций с HF < 1.3 (pre-liquidation watchlist), плюс real-time мониторинг через WebSocket на события Borrow, Repay, LiquidationCall, ReserveDataUpdated для обновления HF в watchlist.

При изменении цены (событие ReserveDataUpdated) пересчитываем HF для всего watchlist и немедленно отправляем транзакции для позиций, где HF опустился ниже 1.

Критические детали реализации

Flash loan для capital-efficient ликвидаций

Aave liquidationCall требует предоставить погашаемый актив заранее. Для ликвидации позиции с долгом в $500k нужно иметь $500k в кошельке? Нет. Используем flash loan из того же Aave: занимаем debtAsset → вызываем liquidationCall → получаем collateral со скидкой → продаём часть collateral через Uniswap v3/Paraswap для погашения flash loan → оставляем profit.

Всё в одной атомарной транзакции. Если profit < gas cost — транзакция реверсируется, теряем только газ.

Контракт ликвидатора реализует интерфейс IFlashLoanSimpleReceiver (Aave v3). В executeOperation callback:

  1. Вызов POOL.liquidationCall(collateralAsset, debtAsset, user, debtToCover, receiveAToken)
  2. Проверка полученного количества collateral
  3. Swap через Uniswap v3 с ценовым слиппажем не более 0.5% (иначе ликвидация убыточна)
  4. Возврат flash loan + fee (0.05% для Aave v3)

Расчёт прибыльности перед отправкой

Отправлять транзакцию без предварительного расчёта — потеря газа. Симулируем через eth_call весь флоу ликвидации, получаем ожидаемый выход collateral, считаем swap output через Uniswap v3 Quoter (quoteExactInputSingle), вычитаем flash loan fee и gas cost при текущем baseFee.

Минимальный порог прибыльности — настраиваемый параметр. Типично: $50-200 минимальная прибыль на транзакцию, иначе пропускаем.

MEV и конкуренция

Ликвидации — высококонкурентная среда. В периоды волатильности сотни ботов одновременно атакуют одни и те же позиции. Без приоритизации — sandwich от MEV-ботов или front-running.

Варианты:

  • Flashbots bundle на Ethereum: транзакция идёт напрямую к валидатору, не видна в mempool. Бот не получает MEV-sandwich, но конкурирует по размеру bribe
  • Повышенный priorityFee: просто и работает, но дорого в периоды высокой конкуренции
  • Private RPC (bloXroute, MEV Blocker): защита от front-running без Flashbots

На Arbitrum и Polygon Flashbots не работает, но там latency ниже и конкуренция меньше — прямые транзакции с чуть повышенным gasPrice обычно достаточны.

Поддержка нескольких сетей

Aave v3 развёрнут на Ethereum, Polygon, Arbitrum, Optimism, Base, Avalanche, Gnosis, Metis. Каждая сеть — свой пул контрактов, свои ставки ликвидации, своя конкурентная среда. На Ethereum конкуренция максимальная, но и суммы позиций крупнее. На Polygon и Arbitrum меньше конкурентов, быстрее финализация.

Как строим бота

Контракт ликвидатора (Solidity). Реализует IFlashLoanSimpleReceiver, интегрирован с Uniswap v3 Swap Router. Параметризован: поддерживает несколько DEX для свапа (fallback с Uniswap на Paraswap если слиппаж высокий). Деплоим через Foundry с forge script, верификация на Etherscan автоматически.

Off-chain движок (Node.js/TypeScript + viem). Watchlist management, мониторинг событий, расчёт прибыльности, отправка транзакций. Конфиг через .env: пороги HF, минимальная прибыль, поддерживаемые сети, Flashbots RPC.

Инфраструктура. Собственная нода или премиум RPC (Alchemy Growth/Business tier) для стабильного WebSocket. На Ethereum — обязательно, на L2 — по ситуации.

Мониторинг. Grafana dashboard: количество отсканированных позиций, количество ликвидаций (успешных/failed), P&L по дням, gas spent vs profit.

Ориентиры по срокам

Базовый бот для одной сети (Ethereum или Polygon) с flash loan и Uniswap свапом — 1-1.5 недели. Мультисетевая версия с Flashbots, динамическим роутингом свапов через нескольких DEX и full мониторингом — 2-3 недели. На сроки влияет сложность стратегии управления газом и требования к инфраструктуре.

Стоимость обсуждается индивидуально после анализа целевых сетей и желаемого функционала.