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







