Розробка торгового бота для DEX (Uniswap, PancakeSwap)
Кожен блок Ethereum містить арбітражні можливості на десятки тисяч доларів. MEV-боти захоплюють їх у мілісекунди. Розничний трейдер з ручним інтерфейсом змагається з цими системами та програє за визначенням.
DEX-бот — це не скрипт «купи по сигналу». Це конкурентна система, де затримка в 100 мілісекунд коштує грошей, де mempool — це поле бою, та де неправильна логіка ставить ваші транзакції під sandwich attack.
Архітектура: три типи DEX-ботів
Арбітражний бот
Знаходить ціни розбіжності між DEX та добуває прибуток. Наприклад: ETH коштує $2000 на Uniswap V3 та $2003 на Curve — купуємо на Uniswap, продаємо на Curve, $3 прибутку мінус gas.
Проблема: на mainnet це роблять сотні професійних MEV-ботів з прямими з'єднаннями до builder-нод через Flashbots. Арбітраж ETH/USDC на Ethereum mainnet — зайнята ніша з жорсткою конкуренцією.
Реалістичніші ніші: нові токени в перші години торгів (низька конкуренція), мультихоп маршрути через 3+ пули (складніше знайти автоматично), L2 сіті (менше конкурентів, дешевше газ), екзотичні пари на менш популярних DEX.
Sniper бот (new listing)
Відстежує створення нових пулів на Uniswap (подія PoolCreated у Factory) або додавання ліквідності до нового пулу. При детекті — миттєво купує токен у розрахунку на price discovery pump.
Технічно: WebSocket підключення до Ethereum node (Infura, Alchemy, або власна нода), слухаємо pending transactions у mempool та PoolCreated события. При детекті — збирання та відправка транзакції з високим gas priority fee для пріоритету в блоці.
Ризики: honeypot токени (продати неможливо через код контракту), rugpull (ліквідність убирається одразу після снайпу), MEV конкуренція (інші боти снайпять ту ж можливість).
Базові захисти: симуляція sell транзакції перед покупкою (через eth_call), перевірка контракту на verified source code, перевірка що team wallet не тримає 90%+ supply.
Market making бот
Виставляє bid/ask ордери навколо mid-price, заробляє на spread. На Uniswap V3 реалізується через управління range positions — бот відкриває narrow range position, ребалансує при виході ціни за діапазон.
Uniswap V3 SDK надає всі інструменти: розрахунок оптимального range через tickToPrice, симуляція fees earned через Pool.computeSwapStep.
Технічна реалізація
Робота з Uniswap V3
Uniswap V3 — найпоширеніший DEX для ботів. Ключові контракти:
-
UniswapV3Factory— створення пулів -
SwapRouter02— виконання свопів (V3 + backward compatible V2) -
Quoter V2— off-chain котировки без газу -
UniversalRouter— універсальний маршрутизатор (підтримує V2, V3 та інші протоколи)
import { ethers } from "ethers";
import { Pool, Route, Trade, SwapRouter } from "@uniswap/v3-sdk";
import { CurrencyAmount, TradeType, Percent } from "@uniswap/sdk-core";
// Отримання котировки через Quoter V2
const quoter = new ethers.Contract(QUOTER_V2_ADDRESS, QuoterV2ABI, provider);
const amountOut = await quoter.callStatic.quoteExactInputSingle({
tokenIn: WETH_ADDRESS,
tokenOut: USDC_ADDRESS,
fee: 3000, // 0.3%
amountIn: ethers.utils.parseEther("1"),
sqrtPriceLimitX96: 0
});
Для production: замінюємо callStatic котировки на власний математичний розрахунок з on-chain стану — це швидше та не залежить від Quoter availability.
Speed: як потрапити в потрібний блок
Затримка — це гроші. Рівні оптимізації:
RPC рівень: Infura/Alchemy вносять 50-200ms latency. Власна Ethereum нода (geth або erigon) — 1-5ms. Для конкурентного арбітражу власна нода обов'язкова.
Mempool моніторинг: через eth_subscribe("newPendingTransactions") отримуємо хеші pending транзакцій. Для повного payload — eth_getTransactionByHash або txpool_content (якщо нода підтримує). Flashbots Protect API дає доступ до private mempool.
Gas стратегія: EIP-1559 транзакції. maxFeePerGas повинен бути достатнім для включення в блок. Для терміних транзакцій — maxPriorityFeePerGas вище медіани поточного блоку. Використовуємо eth_feeHistory для статистики останніх блоків.
Bundle через Flashbots: для arb транзакцій, які потрібно включити атомарно — Flashbots MEV-Boost. Bundle з кількох транзакцій, які або все включаються, або ні одна. Захист від frontrunning.
Захист від MEV атак на власний бот
Ваші транзакції теж видні у mempool та можуть бути sandwiched. Бот бачить вашу покупку SHIB на $10K, вставляє свою покупку до (frontrun) та продажу після (backrun). Ваш slippage — їхній прибуток.
Захисти:
- Private RPC: Flashbots Protect, MEV Blocker — транзакції не попадають у public mempool
- Tight slippage: 0.1-0.3% slippage для ліквідних пар робить sandwich unprofitable
- TWAP execution: розбити великий ордер на частини, виконувати TWAP-стилем
PancakeSwap та мультичейн
PancakeSwap V3 (BNB Chain) — аналогічна архітектура Uniswap V3, ті ж SDK концепції. BNB Chain: блок кожні 3 секунди (швидше ніж Ethereum), дешевше газ. PancakeSwap також на Ethereum та Arbitrum.
Мультичейн бот працює з кількома RPC providers. viem краще за ethers.js для TypeScript проектів — краща типізація, treeshaking, вбудований multicall.
import { createPublicClient, http } from "viem";
import { mainnet, bsc, arbitrum } from "viem/chains";
const clients = {
ethereum: createPublicClient({ chain: mainnet, transport: http(ETH_RPC) }),
bsc: createPublicClient({ chain: bsc, transport: http(BSC_RPC) }),
arbitrum: createPublicClient({ chain: arbitrum, transport: http(ARB_RPC) })
};
Стек та інфраструктура
TypeScript + viem/ethers.js. Node.js worker threads для паралельної обробки кількох пар. Redis для кеширування стану пулів. PostgreSQL для історії сделок та PnL аналітики.
Деплой на VPS з низькою latency до Ethereum нод (Hetzner Frankfurt або AWS eu-west для європейських нод). PM2 для process management + Telegram алерти на помилки.
Орієнтири по строкам
Базовий арбітражний бот для однієї DEX-пари — 3-5 днів. З мультиDEX routing, mempool моніторингом та Flashbots інтеграцією — 1-2 тижні. Sniper бот з симуляцією sell — 3-5 днів. Market making bot з Uniswap V3 LP management — 1-1.5 тижні. Вартість розраховується після уточнення стратегії та цільових сітей.







