Розроблення бота для мониторингу ліквідності
Uniswap v3 зробив управління ліквідністю активним заняттям. LP-позиція в діапазоні $1800-$2200 по ETH/USDC відмінно працювала тиждень — до того, як ціна вийшла за границю, і позиція перестала заробляти fees, конвертовавшись повністю в один актив. Без мониторингу таке може залишатися непомітним днями. Це прямі втрати від упущених комісій та impermanent loss.
Що реально потрібно відслідковувати у пулах DEX
Uniswap v3: активність позицій та out-of-range события
Кожна позиція у Uniswap v3 задається (tokenId, tickLower, tickUpper). Пул зберігає поточний tick — логарифмічну ціну. Як тільки currentTick < tickLower або currentTick > tickUpper — позиція out-of-range, fees не нараховуються.
Подія Swap у пулі emits новий tick. Бот підписується на Swap через WebSocket (eth_subscribe("logs", {address: poolAddress, topics: [Swap.topic]})), декодує tick із даних события та порівнює з tickLower/tickUpper всіх відслідковуваних позицій. Latency від события до уведомлення — 100-500ms, що достатньо для інформування LP.
Додатково корисно відслідковувати Mint та Burn события — вони показують, коли крупні LP входять або виходять із діапазону, що часто передує руху ціни.
Curve: disbalance пулу та de-peg мониторинг
У Curve StableSwap пул вважається збалансованим, коли долі активів близькі до цільових (зазвичай рівних). При сильному дисбалансі (наприклад, 90% USDT та 10% USDC в 3pool) slippage при свопах різко зростає, а ефективний APY для LP падає.
Метрика для мониторингу: відхилення поточних балансів від ідеальних. Виклик get_balances() + порівняння з total_supply() / N. Якщо один актив займає >70% — алерт. Таке трапилось з 3pool під час de-pegging событій (USDC в березні 2023 кратковременно торгувався по $0.87 на Curve).
The Graph для історичних даних
Для мониторингу TVL та обсягів пулу у реальному часі використовуємо The Graph subgraph Uniswap v3 (subgraph id: 5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV). GraphQL запит кожні 60 секунд повертає pool.totalValueLockedUSD, pool.volumeUSD, pool.feesUSD. Для крупних пулів з >$10M TVL це достатньо. Для дрібних пулів з швидкими змінами — прямі события через WebSocket надійніше.
Архітектура бота
Типова система мониторингу складається з трьох компонентів:
| Компонент | Технологія | Задача |
|---|---|---|
| Event listener | ethers.js / viem WebSocket | Підписка на on-chain события |
| State aggregator | Node.js / Python | Агрегація та порівняння з порогами |
| Alert dispatcher | Telegram Bot API / PagerDuty | Уведомлення по каналах |
Event listener підписується через WebSocket на пули із конфігураційного списку. При отриманні события декодує дані через ABI та публікує в чергу (Redis Pub/Sub або in-memory queue).
State aggregator читає чергу, оновлює стан пулів (поточний tick, balances, TVL) та перевіряє умови алертів. Тут же — періодичний polling (кожні 30-60 секунд) для метрик, які не emitять события (наприклад, accumulated fees позиції через NonfungiblePositionManager.collect).
Alert dispatcher дедуплицирует алерти (один алерт у 5 хвилин по одній позиції), форматує повідомлення та відправляє в Telegram або webhook. Для production систем — PagerDuty з severity levels.
Розрахунок accumulated fees без транзакції
Поточні накопленні fees LP-позиції можна порахувати off-chain, не роблячи collect (яка коштує газ). Формула з Uniswap v3 whitepaper через feeGrowthInside:
fees0 = liquidity * (feeGrowthInside0 - feeGrowthInside0Last) / 2^128
fees1 = liquidity * (feeGrowthInside1 - feeGrowthInside1Last) / 2^128
feeGrowthInside розраховується з даних пулу по ticks — це статик-колл, не транзакція. Показувати користувачу накопленні fees у реальному часі корисно для прийняття рішень про rebalancing.
Стек та інтеграції
viem (TypeScript) для on-chain взаємодії — типізовані виклики, вбудований ABI-декодер, підтримка multicall для батчингу запитів. The Graph для історичних даних та агрегованих метрик. Redis для зберігання стану між рестартами та дедупліцирування. Telegram Bot API як основний канал уведомлень.
Для мультичейн мониторингу (Ethereum + Arbitrum + Optimism) — паралельні WebSocket підключення з одним агрегатором. Uniswap v3 розповсюджений на всіх трьох чейнах, адреси пулів різні, але ABI ідентичний.
Процес роботи
Конфігурація (1 день). Список пулів, позицій, пороговані значення для алертів.
Розроблення (3-5 днів). Event listener + state aggregator + Telegram/webhook інтеграція. Тест на testnet (Sepolia з форкнутим Uniswap v3 станом через Foundry vm.createFork).
Деплой. VPS з мінімум 2 CPU / 4GB RAM, dedicated full node або Alchemy/QuickNode WebSocket endpoint. Мониторинг бота через pm2 + health check endpoint.
Орієнтири за часом
Базовий бот (один DEX, Telegram алерти): 3-5 днів. Мультичейн система з історичними метриками та dashboard: 2-3 тижні.







