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 день — свяжитесь с нами.







