Моніторинг ліквідності DeFi-протоколу
Протокол з $50M TVL без мониторингу ліквідності — це не економія на інструментах, це сліпе управління ризиком. Коли 30% ліквідності уходить з пулу за 4 години через whale withdrawal, у команди два варіанти: дізнатися про це через алерт та прийняти заходи, або дізнатися з твіта про те, що користувачі не можуть зробити своп через high slippage.
Що мониторити та чому це нетривіально
Концентрація ліквідності у Uniswap v3
У Uniswap v2 загальна ліквідність — зрозуміла метрика: reserve0 * reserve1 = k, чим більше k, тим краще slippage. У Uniswap v3 ліквідність концентрована по тиках. Пул може мати $10M TVL, але якщо 95% зосереджено в діапазоні ±2% від поточної ціни — при виході ціни з цього діапазону effective liquidity падає в 20 раз.
Правильний мониторинг: не просто totalValueLocked, а activeLiquidity — ліквідність в активному діапазоні навколо поточної ціни. Метрика з Uniswap v3 субграфа:
query ActiveLiquidity {
pool(id: "0x...") {
liquidity
sqrtPrice
tick
ticks(where: { liquidityNet_not: "0" }, orderBy: tickIdx) {
tickIdx
liquidityNet
}
}
}
З цих даних будуємо depth chart: скільки ліквідності доступно при ±1%, ±5%, ±10% русі ціни.
Виявлення whale withdrawal
Крупний LP може одночасно вивести ліквідність, обруушивши depth на конкретному ринку. Для протоколу, який залежить від ліквідності в певних пулах (наприклад, стейблкоїн-пулі для redemption), це критичний ризик.
Мониторимо eventi Burn (Uniswap v3) та RemoveLiquidity (Curve, Balancer) через WebSocket підписку. Якщо один LP виводить >10% від total liquidity — алерт одразу.
Стек мониторингу
Збір даних
Три шари джерел:
On-chain eventi (realtime). ethers.js WebSocket підписка на события Sync, Swap, Mint, Burn цільових контрактів. Затримка — секунди від підтвердження транзакції. Потрібна власна нода або WSS від Alchemy/Infura з підтримкою eth_subscribe.
The Graph субграфи (з затримкою 1-5 хвилин). Зручен для агрегованих метрик — hourly/daily TVL, volume, fees. Для історичних даних та трендів. Офіційні субграфи Uniswap, Curve, Balancer, Aave, Compound доступні в The Graph Explorer.
DeFi Llama API (з затримкою 10-60 хвилин). Зручен для cross-protocol TVL порівнянь та загальної картини. Не підходить для realtime алертів.
Зберігання та візуалізація
TimescaleDB (PostgreSQL extension) — оптимален для time-series даних про ліквідність. Партиціювання по часу, гіпертаблиці для автоматичного архівування історичних даних.
Grafana + TimescaleDB datasource — стандартний стек для дашборду. Преднаставлені панелі для:
- TVL по пулах у реальному часі
- Depth chart (доступна ліквідність при заданому slippage)
- Volume/liquidity ratio (індикатор стресу)
- Top LP-провайдери та їх доля
Система алертів
| Метрика | Поріг попередження | Поріг критичний | Канал |
|---|---|---|---|
| TVL drop | -10% за 1 час | -25% за 1 час | Telegram |
| Single LP withdrawal | >5% total liquidity | >15% total liquidity | PagerDuty |
| Slippage (1% trade) | >0.5% | >2% | Telegram |
| Price deviation from oracle | >2% | >5% | PagerDuty |
| Utilization (lending) | >80% | >95% | PagerDuty |
PagerDuty або OpsGenie для критичних алертів — push-уведомлення на телефон, незалежно від часу доби. Telegram-бот для інформаційних уведомлень.
Tenderly Alerts — альтернатива для on-chain подій без власної інфраструктури: налаштовуєш триггери через UI, webhook на Discord/Slack/Telegram.
Розрахунок та мониторинг APY
APY у DeFi непостійний: залежить від volume (trading fees), токен-емісії (liquidity mining rewards) та базової ставки (для лендингу).
Формула для LP APY у Uniswap v3:
dailyFees = pool.volumeUSD24h * feeTier / 1_000_000
feeAPR = (dailyFees / pool.tvlUSD) * 365
При TVL $1M та дневному обсязі $2M на пулі з fee 0.05% (500): dailyFees = $1000, feeAPR = 36.5%. Але це на весь TVL. LP з концентрованою позицією в активному діапазоні заробляє більше пропорційно своєму effective liquidity.
Мониторимо APY по кожному пулу з alerting при різкому падінні — це сигнал про зниження торговельної активності або про те, що обсяг пішов на конкуруючий пул.
Процес впровадження
Інвентаризація (1 день). Список всіх контрактів, подій, метрик для мониторингу. Пріоритизація: що критично для роботи протоколу.
Настройка збору даних (1-2 дні). WebSocket indexer на Node.js/TypeScript, запис у TimescaleDB. Для історичних даних — первинна синхронізація через The Graph.
Дашборд (1 день). Grafana з основними панелями. Не потрібно робити красиво — потрібно робити читаємо та з правильними часовими вікнами.
Алерти (1 день). Пороги на основі історичних даних протоколу. Занадто чутливі алерти — команда перестає на них реагувати. Починаємо з 5-6 критичних метрик.
Орієнтири за часовими рамками
Базовий мониторинг одного протоколу (TVL, eventi, алерти) — 3-5 днів. Комплексний мониторинг кількох протоколів з depth chart, APY traking та кастомним дашбордом — до 2 тижнів.







