Мониторинг TVL (Total Value Locked)
TVL — операційний показник DeFi-протоколу, не маркетинговий. Різке падіння на 30% за годину — або взлом, або «rug» крупного LP. Зростання на 500% за день без відповідного збільшення транзакцій — підозріла накрутка для лістингу на DeFiLlama. Обидва випадки вимагають системи, яка бачить зміни в реальному часі й вміє їх інтерпретувати.
Як правильно рахувати TVL
Проблема мультивалютного обліку
Наївний підхід: суммувати balanceOf всіх токенів в контрактах протоколу в USD за поточними цінами. Ломається коли:
- Протокол приймає LP-токени Uniswap V2 як collateral.
balanceOf(LP_token)— кількість LP-токен, не USD. Потрібно вичислити underlying assets черезgetReserves()пула. - Synthetic токени (sUSD, stETH): їх ціна ≠ цені базового активу при депегу. Потрібен окремий price feed, не завжди доступний.
- Concentrated liquidity позиції (Uniswap V3 NFT): вартість залежить від поточної ціни й діапазону позиції — потрібна off-chain математика tick/sqrtPrice.
Правильна архітектура: кожен тип активу — окремий адаптер з логікою resolveToUSD(address asset, uint256 amount) → uint256. Це паттерн, який використовує DeFiLlama в своїх адаптерах.
Chainlink vs AMM-ціни
Chainlink Data Feeds — еталон для основних активів (ETH, BTC, USDC, основні ERC-20). Heartbeat 1 година для стейблкоінів, 1 година для крупних активів. Проблема: для long-tail токенів немає Chainlink feed.
Fallback: Uniswap V3 TWAP через IUniswapV3Pool.observe() з periodSeconds = 1800 (30 хвилин). TWAP захищає від flash loan манипуляцій, але при низькій ліквідності пула — неточен.
Важливо: Chainlink feed може повернути stale дані. Завжди перевіряти answeredInRound >= roundId та updatedAt > block.timestamp - staleness_threshold.
Архітектура системи мониторингу
On-chain vs off-chain розрахунок
Рахувати TVL повністю on-chain через смарт-контракт getTVL() — приваблює прозорістю, але:
- Дорого в gas при складних обчисленнях
- Обмежено розміром call stack
- LP-токени вимагають зовнішніх calls, gas зростає експоненціально
Кращий підхід: off-chain сервіс з доступом до архівної ноди. Алгоритм:
- Отримати баланси через
eth_callбатчами (Multicall3 для ефективності) - Запитати ціни з Chainlink + DeFiLlama API + CoinGecko Pro
- Розрахувати TVL з нормалізацією по decimals
- Записати снапшот в базу даних з блок-номером й timestamp
- Видати в API й дашборд
Частота: кожен блок для критичних алертів (~12 сек на Ethereum), кожні 5 хвилин для історичних даних.
The Graph subgraph для TVL
The Graph дозволяє підписатися на события смарт-контрактів й агрегувати в GraphQL. Для мониторингу TVL subgraph обробляє события:
-
Deposit(address user, address asset, uint256 amount)— збільшення TVL -
Withdraw(address user, address asset, uint256 amount)— зменшення TVL -
Liquidation(...)— зміна collateral
Проблема subgraph: ціни не зберігаються on-chain, потрібна oracle інтеграція через @priceOracle handler. Це уповільнює індексацію й додає залежність.
Альтернатива для швидкого деплоя: Dune Analytics з SQL-запитами поверх indexed Ethereum даних. Працює без розробки, але latency вища (5-15 хвилин).
Алерти при різких змінах
Паттерн обнаруження аномалій:
currentTVL < previousTVL * (1 - threshold) → CRITICAL alert
currentTVL > previousTVL * (1 + spike_threshold) → WARNING (possible manipulation)
Поріг для critical: 10% за один блок — явна аномалія. 30% за 5 хвилин — критичний інцидент.
Канали алертів: Telegram Bot API для оперативних оповіщень, PagerDuty для on-call ротації, Slack webhooks для командних нотифікацій. Для DeFi-протоколів з TVL > $1M — обов'язково 24/7 мониторинг.
Інтеграція з дашбордами
Grafana + InfluxDB — стандартний стек для часових рядів TVL. Метрики: tvl_total, tvl_by_asset, tvl_by_chain, tvl_change_1h, tvl_change_24h.
DeFiLlama адаптер: якщо протокол хоче попасти на DeFiLlama — потрібен PR з адаптером в їх репозиторії. Адаптер — це JavaScript функція tvl(api), яка використовує їх api.add(token, balance) інтерфейс. Ми пишемо й підтримуємо ці адаптери.
Custom дашборд: React + recharts або Dune Analytics embedded charts для public-facing сторінки протоколу. Дані через власний API endpoint або прямо з subgraph через Apollo Client.
| Метод | Latency | Вартість | Складність |
|---|---|---|---|
| Власний off-chain сервіс | ~блок (12s) | Висока (нода) | Висока |
| The Graph subgraph | 1-5 хв | Середня (хостинг) | Середня |
| Dune Analytics | 5-15 хв | Низька (SQL) | Низька |
| DeFiLlama API | 5-15 хв | Нульова | Низька |
Процес роботи
Аналітика (1 день). Інвентаризація контрактів протоколу, типи прийнятих активів, события для відстеження, вимоги до latency алертів.
Розробка (1-3 дні). Вибір стека исходячи з вимог → імплементація → настройка алертів → деплой дашборду.
Підтримка. При додаванні нових пулів або активів — оновлення адаптерів. При форку мережі або міграції контрактів — оновлення адрес.
Орієнтири по термінам
Базовий мониторинг через The Graph + Telegram алерти — 1-2 дні. Повноцінна система з власним сервісом, Grafana дашбордом і DeFiLlama інтеграцією — 3-5 днів.
Вартість залежить від кількості контрактів, типів активів й вимог до latency.







