Розробка flash loan ліквідаційного бота

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка flash loan ліквідаційного бота
Складний
~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

Розробка flash loan ліквідаційного бота

У серпні 2023 року на Aave v3 у Polygon було доступно близько 4 мільйонів доларів до ліквідації протягом однієї години після різкого руху ринку. Боти, які відреагували першими, заробили комісію ліквідатора — в середньому 5–8% від ліквідованого колатералю. Боти, які відреагували на 2–3 секунди пізніше, або програли конкурентам, або отримали revert, тому що позиція вже була ліквідована. Ліквідаційний бот — це завдання швидкості, точності обчислень та MEV-стратегії, а не просто вклик до liquidationCall.

Flash loan дозволяє брати участь у ліквідаціях без власного капіталу: позичити актив, ліквідувати позицію, отримати колатераль, своп у актив, повернути борг + комісія. Вся операція — одна атомарна транзакція.

Як влаштована ліквідація на Aave v3

Позиція переходить у ліквідований статус, коли health factor < 1.0. Health factor = (collateral_value * liquidation_threshold) / debt_value. Liquidation threshold для ETH на Aave v3 — 82,5%, для WBTC — 75%.

Ліквідатор викликає liquidationCall(collateralAsset, debtAsset, user, debtToCover, receiveAToken). Максимально можна покрити 50% боргу за одну транзакцію (close factor). На заміну отримуєте колатераль з бонусом — liquidation bonus, для ETH це 5%.

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

profit = collateral_received * collateral_price
       - debt_covered * debt_price
       - flash_loan_fee (0.09% на Aave v3)
       - swap_slippage
       - gas_cost

Якщо profit ≤ 0 — транзакцію не відправляємо. Це звучить очевидно, але без точного off-chain розрахунку з актуальними цінами оракулів та slippage, бот гублює гроші на кожній неприбутковій ліквідації, оплачуючи тільки газ.

Архітектура бота

Smart contract виконавець

Один контракт, який приймає параметри ліквідації та виконує атомарну послідовність:

  1. flashLoan() від Aave PoolAddressesProvider — позичити debtAsset
  2. У callback executeOperation() викликати liquidationCall
  3. Отримати collateralAsset (або aToken)
  4. Своп collateralAssetdebtAsset через Uniswap v3 або 1inch
  5. Повернути debtAsset + fee в Aave
  6. Залишок — прибуток, йде на гаманець

Контракт повинен бути non-upgradeable та мати onlyOwner на функцію виконання. Не потрібна апгрейдованість — потрібна простота та мінімум поверхні для атак.

Off-chain моніторинг

Джерело даних про позиції. Три варіанти:

  • getUserAccountData() через Multicall для списку відомих позичальників — повільно для великої кількості адрес
  • The Graph субграфи Aave — індексують всі позиції, оновлюються по блокам
  • Прямий моніторинг подій: Borrow, Deposit, Repay — локальна state машина позицій

Оптимальна схема: The Graph для первинного завантаження стану + WebSocket подій для real-time оновлення. Список позицій з health_factor < 1.05 перевіряється при кожному новому блоці.

Розрахунок цін. Не можна використовувати тільки Chainlink оракул — Aave використовує його для розрахунку health factor, але реальна ціна своп може відрізнятися. Потрібні обидва: Chainlink для розрахунку прибутку ліквідації, Uniswap v3 TWAP для розрахунку slippage при своп колатералю.

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

Ліквідаційний бот живе у світі MEV. Якщо відправити транзакцію у публічний mempool зі звичайним gasPrice, searcher може її front-run: скопіювати calldata, відправити з вищим газом, ліквідувати позицію раніше.

Розв'язання:

Flashbots / MEV Blocker. Відправляти бандли прямо у Flashbots relay на Ethereum mainnet. Транзакція не потрапляє у публічний mempool, невидима для searcher-ів. На Polygon — Bor приватні транзакції через QuickNode або Alchemy приватний пул.

Bundle симуляція. Перед відправкою симулюємо бандл через eth_callBundle — перевіряємо, що до моменту включення в блок позиція все ще не ліквідована та прибуток позитивний.

Priority fee динаміка. На L2 (Arbitrum, Optimism, Base) MEV конкуренція менша через sequencer. Ліквідації на Arbitrum часто прибуткові навіть без Flashbots.

Типові проблеми реалізації

Slippage при своп великого колатералю. Якщо позиція велика — своп 1000 ETH в USDC через один пул Uniswap v3 дасть істотний price impact. Розв'язання: split routing через 1inch API або власна реалізація multi-hop через кілька пулів. Розрахунок оптимального маршруту має бути частиною off-chain profitability check.

Reorg на L2. Arbitrum та Optimism мають finality lag. Транзакція підтверджена на L2, але потім rollup reorg — рідко, але трапляється. Для ліквідаційного бота це не критично (позиція або ліквідована, або ні), але потрібно правильно обробляти confirmations.

Gas estimation. eth_estimateGas для flash loan транзакції може помилятися на 10–20% — зовнішні контракти ведуть себе по-різному. Додаємо буфер 20% до estimate та перевіряємо, що після буфера транзакція все ще прибуткова.

Stale health factor. Між розрахунком health factor та відправкою транзакції може пройти 1–2 блока. Якщо за цей час ціна поднялася — позиція більше не ліквідована, liquidationCall зареверується. Додаємо try/catch на рівні off-chain логіки та оплачуємо тільки газ failed транзакцій.

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

Розробка смарт-контракту (3–4 дня). Solidity + Foundry. Fork-тести на Ethereum/Arbitrum mainnet: симулюємо конкретні ліквідовані позиції з історичних даних, перевіряємо правильність розрахунків та прибуток.

Off-chain моніторинг (4–6 днів). Node.js/TypeScript, viem для on-chain взаємодій, The Graph SDK, WebSocket підписки на блоки, Redis для зберігання стану позицій.

MEV інтеграція (2–3 дня). Flashbots SDK, bundle building, симуляція перед відправкою.

Тестування у testnet + mainnet soft launch (3–5 днів). Починаємо на Sepolia fork, потім mainnet з мінімальним капіталом — кілька реальних ліквідацій для калібрування параметрів прибутковості.

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

Базовий бот під один протокол (Aave v3) на одному чейні — 1–2 тижні. Multi-protocol (Aave + Compound + Morpho) з multi-chain підтримкою — 3–4 тижні. Строки залежать від вимог до MEV-захисту та кількості цільових протоколів.

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