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

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

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

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

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

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

Розробка бота ліквідацій для 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 одна транзакція закриває всю позицію.

Джерела даних про позиції

Три підходи з різними компромісами latency та повноти:

Джерело Latency Повнота Підходить для
The Graph (subgraph) 15-60 сек Всі позиції Фоновий скан
Aave API (позиції) 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 потребує надати pogashuvanu актив заранее. Для ліквідації позиції з боргом у $500k потрібно мати $500k у гаманці? Ні. Використовуємо flash loan з того ж Aave: займаємо debtAsset → викликаємо liquidationCall → отримуємо collateral зі скидкою → продаємо частину collateral через Uniswap v3/Paraswap для погашення flash loan → залишаємо profit.

Все в одній атомарній транзакції. Якщо profit < газ-cost — транзакція реверсується, втрачаємо тільки газ.

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

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

Розрахунок прибутковості перед відправкою

Відправляти без перерахунку — потеря газу. Моделюємо через eth_call весь флоу ліквідації, отримуємо очікуваний вихід collateral, рахуємо swap output через Uniswap v3 Quoter (quoteExactInputSingle), вираховуємо flash loan fee та газ-cost при поточному baseFee.

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

MEV та конкуренція

Ліквідації — висококонкурентне середовище. У періоди волатильності сотні ботів одночасно атакують одні й ті ж позиції. Без пріоритизації — sandwich від MEV-ботів або front-running.

Варіанти:

  • Flashbots bundle на Ethereum: транзакція йде напрямки валідатору, не видна в mempool. Бот не отримує MEV-sandwich, але конкурує за розмір bribe
  • Повищена priorityFee: просто та працює, але дорого в періоди високої конкуренції
  • Приватний 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 якщо slippage високий). Деплоїмо через Foundry з forge script, автоматична верифікація на Etherscan.

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

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

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

Орієнтири по срокам

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

Вартість обговорюється індивідуально після аналізу цільових сетей та бажаного функціоналу.