Розробка торгового бота для DEX на Base

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

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

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

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

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

Розробка торгового бота для DEX на Base

Base — це OP Stack L2 від Coinbase, запущений в серпні 2023. За перший рік виріс в один з топ-3 L2 по TVL та активним адресам. Для торгових ботів Base цікавий по трьох причинам: низький газ (в 50–100x дешевше mainnet), зростаюча DEX ліквідність на Aerodrome та Uniswap V3, та специфіка sequencer, яка відрізняється від Ethereum.

Екосистема DEX на Base

Ключові платформи для інтеграції:

DEX Модель Об'єм (2024) Особливості
Aerodrome Finance ve(3,3) AMM + CLOB $1B+ / день Форк Velodrome, нативний DEX Base
Uniswap V3 Concentrated liquidity $500M+ / день Стандартний V3, ті ж контракти що mainnet
BaseSwap Fork Uniswap V2 $50M / день Менше ліквідності
SushiSwap V2 + Trident $20M / день Мультичейн, кросс-DEX арбітраж

Aerodrome — пріоритет для глибокої інтеграції: 60%+ DEX об'єму Base проходить через нього.

Aerodrome: архітектура, важлива для бота

Aerodrome наслідує Velodrome V2 архітектуру з двома типами пулів:

Volatile pools (Pool.sol): стандартна x*y=k формула. Підходит для некорельованих пар (ETH/USDC, cbBTC/USDC).

Stable pools (Pool.sol з stable=true): крива x³y + y³x = k — оптимізована для близьких по цені активів (USDC/USDT, cbETH/wstETH). Важливо: для стейбл-пулів getAmountOut() дає інший результат при тих же вхідних даних.

// Aerodrome Router ABI
const AERODROME_ROUTER = '0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43'

const routes = [{
  from: WETH_ADDRESS,
  to: USDC_ADDRESS,
  stable: false,    // Для volatile пари
  factory: AERODROME_FACTORY
}]

const amounts = await aerodromeRouter.getAmountsOut(amountIn, routes)

Помилка, яку роблять розробники з EVM-фоном: використовують stable: false для всіх пар. Для USDC/USDbC пари це дає розраховану amountOut в 5–10% гіршою через неправильну криву.

ve(3,3) та epoch rewards

Aerodrome використовує veAERO (locked voting tokens) для спрямування emissions в пули. Для арбітражного бота це важливо опосередковано: пули з високими emissions привабляють більше LP, мають менший slippage. Відстеження голосувань та emissions допомагає передбачити, де з'явиться глибока ліквідність.

Sequencer специфіка на Base

Base використовує централізований sequencer під управлінням Coinbase. Для ботів це принципово змінює MEV ландшафт:

  • Публічного mempool у Ethereum-смислі немає. Sequencer публікує транзакції атомарно.
  • Класичні sandwich атаки через frontrunning практично неможливі.
  • Арбітраж DEX ↔ DEX на Base працює добре: немає конкуренції з flashbots bundles у тій же формі.
  • Latency до sequencer критична: розміщення сервера в us-east-1 (AWS) або co-location у San Francisco (ближче до Coinbase інфраструктури) дає перевагу.

Транзакції відправляються прямо в https://mainnet.base.org RPC або через Alchemy/Infura Base endpoints. Для мінімальної latency — власна нода з op-geth або прямий endpoint Coinbase (через партнерську програму).

Арбітражна стратегія: Base міжпротокольний

Найдоступніший та найстабільніший MEV на Base — арбітраж між різними DEX:

Аеродром vs Uniswap V3: та ж пара (ETH/USDC) торгується на двох різних площадках з різною ціною через асинхронну LP поведінку.

Стейблкоин арбітраж: USDC vs USDbC (bridged USDC) vs axlUSDC — часто торгуються з slight discount/premium на різних пулах.

cbETH / wstETH арбітраж: похідні ETH активи, ціна прив'язана до ETH через exchange rate. При відхиленні від справедливої вартості — арбітражна можливість.

Базовий цикл бота:

async function checkArbitrage(tokenA: Address, tokenB: Address) {
  // Паралельний запрос цін з двох DEX
  const [aeroPrice, uniPrice] = await Promise.all([
    getAerodromePrice(tokenA, tokenB, amountIn),
    getUniswapV3Price(tokenA, tokenB, amountIn)
  ])
  
  const priceDiff = Math.abs(aeroPrice - uniPrice) / Math.min(aeroPrice, uniPrice)
  
  if (priceDiff > MIN_PROFIT_THRESHOLD) {
    const gasEstimate = await estimateArbitrageGas(...)
    const gasCostUSD = gasEstimate * gasPrice * ethPrice
    const grossProfit = calculateProfit(aeroPrice, uniPrice, amountIn)
    
    if (grossProfit > gasCostUSD * 1.5) {  // Мінімум 1.5x покриття gas
      await executeArbitrage(...)
    }
  }
}

Атомарний арбітраж через flash loan

На Base доступні Aave V3 flash loans (контракт деплоєн на Base). Атомарний арбітраж: беремо flash loan → купляємо дешевше → продаємо дороже → повертаємо flash loan + fee (0.09%).

Перевага: не потрібен власний капітал для арбітражу. Flash loan fee 0.09% встановлює мінімальний поріг прибутковості — різниця цін повинна бути > 0.09% + gas.

contract BaseArbitrageBot is IFlashLoanSimpleReceiver {
    function executeArbitrage(address token, uint256 amount, bytes calldata params) external {
        // Запитуємо flash loan
        POOL.flashLoanSimple(address(this), token, amount, params, 0);
    }
    
    function executeOperation(
        address asset, uint256 amount, uint256 premium,
        address, bytes calldata params
    ) external override returns (bool) {
        (address dexA, address dexB, bytes memory swapDataA, bytes memory swapDataB) 
            = abi.decode(params, (address, address, bytes, bytes));
        
        // Купляємо на dexA (дешевше)
        IERC20(asset).approve(dexA, amount);
        (bool successA,) = dexA.call(swapDataA);
        require(successA, "Swap A failed");
        
        // Продаємо на dexB (дороже)
        uint256 received = IERC20(outputToken).balanceOf(address(this));
        IERC20(outputToken).approve(dexB, received);
        (bool successB,) = dexB.call(swapDataB);
        require(successB, "Swap B failed");
        
        // Повертаємо flash loan + premium
        uint256 repayAmount = amount + premium;
        IERC20(asset).approve(address(POOL), repayAmount);
        return true;
    }
}

Контракт — мініималістичний. Ніякого storage state — все через calldata та события.

Мониторинг та управління ризиками

Price deviation alerts: якщо розбіжність цін між DEX перевищує 2% — потенціальна аномалія (манипуляція, баг оракула). Бот повинен зупинятися до прояснення.

Gas price tracking: на Base газ нестабільний при високій нагрузі. Бот повинен проверяти eth_gasPrice та встановлювати maxFeePerGas динамічно. Жорсткий ліміт gas price — вище порогу арбітраж нецікавий.

Slippage на крупних позиціях: розрахунок getAmountsOut для суми X не враховує, що під час виконання ціна сдвинеться. Для крупних свапів потрібна симуляція з урахуванням price impact — або поділ на кілька менших транзакцій.

Dead man's switch: якщо бот не робив транзакцій більше N хвилин при наявності можливостей — алерт на Telegram/Discord. Могло статися: нода упала, немає балансу на газ, unexpected revert.

Стек розробки

Бот: TypeScript + viem (переважніше ethers.js для Base через кращу підтримку EIP-1559 типів). Bull (Redis-backed queue) для управління чергою транзакцій. Prometheus + Grafana для метрик.

Контракти: Solidity 0.8.24 + Foundry. Fork-тест на Base mainnet через forge test --fork-url https://mainnet.base.org. Foundry підтримує Base як target network.

Деплой бота: Docker на AWS EC2 (us-east-1) або Fly.io для простоти, з автоматичним рестартом через systemd/Supervisor.

Процес роботи

Дослідження (2–3 дні). Аналіз MEV можливостей на Base через Dune Analytics, оцінка об'ємів та конкуренції.

Розробка (1–2 тижні). Інтеграція з Aerodrome та Uniswap V3, арбітражний движок, flash loan контракт, мониторинг.

Тестування (3–5 днів). Backtesting на історичних даних Base, paper trading в fork-тестах.

Запуск. Деплой з малими сумами → мониторинг продуктивності → масштабування.