Uniswap v3 зробив управління ліквідністю активним заняттям. LP-позиція в діапазоні $1800-$2200 по ETH/USDC чудово працювала тиждень — доти, доки ціна не вийшла за межі, і позиція перестала заробляти fees, конвертувавшись повністю в один актив. Без моніторингу таке може залишатися непоміченим днями. Це прямі втрати від упущених комісій та impermanent loss. Кожна година бездіяльності може коштувати десятків доларів. Ми розробляємо ботів моніторингу ліквідності, які вирішують цю проблему: підписка на on-chain події, real-time сповіщення в Telegram. Замовте розробку бота під ключ — від базового рішення для одного пулу до багаточейн системи з історичними метриками. Наш досвід — 5+ років у блокчейн-розробці, 30+ проєктів по DeFi. Кожен проєкт супроводжується гарантією якості та технічною документацією.
Чому моніторинг ліквідності критичний?
Запізнення з ребалансуванням позиції на кілька годин може коштувати сотень доларів упущеного прибутку. Особливо на волатильних ринках, де ціна може зрушити на 10-15% за годину. Автоматичний алерт в Telegram дає вам фору в 30-60 хвилин на прийняття рішення. Зниження impermanent loss завдяки своєчасним діям сягає 20-30%.
Що реально потрібно відстежувати в пулах DEX
Uniswap v3: активність позицій та out-of-range події
Кожна позиція в Uniswap v3 задається (tokenId, tickLower, tickUpper). Пул зберігає поточний tick — логарифмічну ціну. Як тільки currentTick < tickLower або currentTick > tickUpper — позиція out-of-range, fees не нараховуються.
Подія Swap в пулі emit новий tick. Бот підписується на Swap через WebSocket (eth_subscribe("logs", {address: poolAddress, topics: [Swap.topic]})), декодує tick з даних події та порівнює з tickLower/tickUpper усіх відстежуваних позицій. Latency від події до сповіщення — 100-500ms, що достатньо для інформування LP.
Додатково корисно відстежувати Mint та Burn події — вони показують, коли великі LP входять або виходять з діапазону, що часто передує руху ціни.
Curve: дисбаланс пулу та de-peg моніторинг
У Curve StableSwap пул вважається збалансованим, коли долі активів близькі до цільових (зазвичай рівних). При сильному дисбалансі (наприклад, 90% USDT та 10% USDC в 3pool) slippage при свопах різко зростає, а ефективний APY для LP падає.
Метрика для моніторингу: відхилення поточних балансів від ідеальних. Виклик get_balances() + порівняння з total_supply() / N. Якщо один актив займає >70% — алерт. Таке траплялося з 3pool під час depegging подій (USDC короткочасно торгувався по $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ять події (наприклад, накопичені 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.
Приклад розрахунку fees для тестової позиції
Для позиції на ETH/USDC з liquidity=10^18, feeGrowthInside0=0.0005, feeGrowthInside0Last=0.0004, fees0 = 10^18 * (0.0005 - 0.0004) / 2^128 ≈ 0.004 ETH. Аналогічно для другого активу.Стек та інтеграції
viem (TypeScript) для on-chain взаємодії — типізовані виклики, вбудований ABI-декодер, підтримка multicall для батчингу запитів. The Graph для історичних даних та агрегованих метрик. Redis для зберігання стану між перезапусками та дедуплікації. Telegram Bot API як основний канал сповіщень.
Для багаточейн моніторингу (Ethereum + Arbitrum + Optimism) — паралельні WebSocket підключення з одним агрегатором. Uniswap v3 розгорнуто на всіх трьох чейнах, адреси пулів різні, але ABI ідентичний.
Таблиця порівняння каналів сповіщень
| Канал | Затримка | Надійність | Вартість |
|---|---|---|---|
| Telegram Bot | 100-500мс | Висока | Безкоштовно |
| PagerDuty | 1-5 сек | Дуже висока | Підписка |
| Discord Webhook | 200-1000мс | Середня | Безкоштовно |
Що входить в роботу
- Репозиторій з вихідним кодом бота.
- Документація з розгортання та налаштування.
- Telegram-бот для отримання алертів.
- 1 місяць технічної підтримки після запуску.
- Опціонально: Grafana-дашборд метрик, інтеграція з PagerDuty.
Процес роботи
Конфігурація (1 день). Список пулів, позицій, порогові значення для алертів.
Розробка (3-5 днів). Event listener + state aggregator + Telegram/webhook інтеграція. Тест на testnet (Sepolia з форкнутим Uniswap v3 state через Foundry vm.createFork).
Деплой. VPS з мінімум 2 CPU / 4GB RAM, dedicated full node або Alchemy/QuickNode WebSocket endpoint. Моніторинг бота через pm2 + health check endpoint.
Як налаштувати моніторинг за 5 кроків
- Вкажіть адреси пулів та позицій у конфігураційному файлі.
- Налаштуйте порогові значення для out-of-range та дисбалансу.
- Запустіть event listener з WebSocket провайдером.
- Підключіть Telegram-бота через BotFather.
- Перевірте алерт на тестовій мережі — деплой на mainnet.
Орієнтири по термінах та вартості
Базовий бот (один DEX, Telegram алерти): 3-5 днів. Багаточейн система з історичними метриками та dashboard: 2-3 тижні. Вартість проєкту розраховується індивідуально і залежить від складності числа мереж та необхідних інтеграцій. Вартість бота швидко окупається завдяки запобіганню втрат від impermanent loss. Для пулів з великою ліквідністю економія може становити тисячі доларів на місяць. Зв'яжіться з нами — ми допоможемо підібрати оптимальну конфігурацію під ваш сценарій. Отримайте консультацію — ми підготуємо комерційну пропозицію протягом 1 робочого дня.







