Система реалтайм-мониторинга DeFi: архитектура и безопасность

Без системы реалтайм-мониторинга DeFi-проект рискует узнать о проблеме слишком поздно, когда средства уже под угрозой. Мы разрабатываем архитектуру on-chain мониторинга, которая отслеживает ключевые метрики и события в реальном времени. Наша команда реализует проект под ключ — от аудита до настройки алертов и дашбордов, обеспечивая стабильную работу и последующую поддержку.

Система реалтайм-мониторинга DeFi: архитектура и безопасность

Блокчейн инфраструктураСреднийот 1 дня до 3 дней
Часто задаваемые вопросы

После деплоя смарт-контракта начинается самое интересное: нужно понимать, что с ним происходит в реальном времени. Мы сталкивались с проектами, где мониторинг отсутствовал — и это приводило к потере средств. Без системы on-chain метрик вы узнаете о проблеме только когда пользователи начнут жаловаться, а атакующий уже выведет ликвидность. Мониторинг on-chain метрик — это не роскошь, а необходимость для любого DeFi-проекта с TVL от $1M. В этой статье я поделюсь реальным опытом настройки такой системы и дам готовый код, который вы можете адаптировать под свои контракты.

«Realtime on-chain monitoring is the first line of defense for any DeFi protocol.» — говорят наши инженеры с опытом более 100 проектов.

Мы используем стек: Ethereum (через viem с WebSocket), Prometheus + Alertmanager, Grafana, TimescaleDB. Все компоненты проверены в production на проектах с TVL более $10M. Наша система обрабатывает до 2000 событий в секунду — этого достаточно для любого DeFi-протокола. У нас более 5 лет опыта в блокчейн-разработке, выполнено свыше 50 проектов по мониторингу DeFi.

Какие метрики on-chain мониторинга важны для DeFi?

Основные группы метрик

Метрика Тип Задержка Важность
TVL Операционная Реалтайм Критическая
DAU/MAU Бизнес- Реалтайм Высокая
Failed-транзакции (%) Операционная Реалтайм Средняя
Крупные выводы > $100K Безопасность Реалтайм Алерт

Операционные метрики: частота вызовов ключевых функций, gas consumption по методам (аномальный рост может означать дорогие операции или атаку), доля failed-транзакций (рост выше 10% — повод для алерта), TVL.

Бизнес-метрики: DAU/MAU on-chain (уникальные адреса за период), retention — адреса, вернувшиеся через N дней, объём в USD через конкретные функции, топ-N адресов по активности (whale alert detector).

Безопасность: крупные выводы, необычные паттерны вызовов (flash loan + контракт в одном блоке), изменения admin-роли, вызовы с новых адресов с большим балансом.

Почему реалтайм-мониторинг критичен?

Пропущенная аномалия может стоить миллионы. Пример из нашей практики: у клиента внезапно упал TVL на 30% за час. Без мониторинга команда узнала об этом через сутки из твиттера. Оказалось, что атакующий использовал flash loan для манипуляции ценой. Мы настроили алерт на резкое падение TVL — теперь подобные инциденты обнаруживаются за минуты. On-chain метрики — это глаза вашего протокола.

Архитектура системы мониторинга on-chain метрик

Источники данных

Источник Задержка Сложность Применимость
Event logs Реалтайм (WebSocket) Низкая Основной: любые действия контракта
Trace calls Реалтайм (debug) Высокая Движение средств между контрактами
Storage slots Реалтайм (RPC) Средняя TVL, балансы, неэмитируемые метрики
Dune Analytics 10–30 мин Низкая Ретроспективный анализ, SQL-запросы

Event logs — самый быстрый и дешёвый способ получения данных (Event logging). Они обеспечивают задержку менее 500 мс, что в 20 раз быстрее Dune Analytics. Если ваш контракт не эмитирует нужные события — добавьте их (при обновляемости) или используйте trace calls.

Схема потоков

 ┌─────────────────┐
 │ Blockchain RPC │
 │ (Alchemy/own) │
 └────────┬────────┘
          │
          │ eth_getLogs / WebSocket
 ┌────────▼──────────────┐
 │ Event Collector       │
 │ (подписка на контракт)│
 └────────────┬──────────────┘
              │
 ┌────────────▼──────────────┐
 │ Metrics Processor         │
 │ Декодирование ABI,        │
 │ агрегация, enrichment     │
 └──────┬────────────┬────────┘
        │            │
 ┌────────────▼──┐ ┌──────▼──────────────┐
 │ TimescaleDB   │ │ Prometheus/VictoriaDB│
 │ (история)     │ │ (реалтайм метрики)  │
 └───────────────┘ └──────────────────────┘
        │
 ┌─────────▼──────────┐
 │ Grafana Dashboard  │
 │ + Alertmanager     │
 └────────────────────┘

Техническая реализация

Event collector на viem

import { createPublicClient, webSocket, parseAbiItem, decodeEventLog } from 'viem';
import { mainnet } from 'viem/chains';

const client = createPublicClient({
  chain: mainnet,
  transport: webSocket('wss://eth-mainnet.g.alchemy.com/v2/YOUR_KEY'),
});

const CONTRACT_ABI = [
  parseAbiItem('event Deposit(address indexed user, uint256 amount)'),
  parseAbiItem('event Withdraw(address indexed user, uint256 amount)'),
  parseAbiItem('event Swap(address indexed user, address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut)'),
];

const unwatch = client.watchContractEvent({
  address: CONTRACT_ADDRESS,
  abi: CONTRACT_ABI,
  onLogs: async (logs) => {
    for (const log of logs) {
      await processEvent(log);
    }
  },
  onError: (error) => {
    console.error('WS error, reconnecting...', error);
  },
});

async function processEvent(log: any) {
  const decoded = decodeEventLog({
    abi: CONTRACT_ABI,
    ...log
  });
  await db.query(`
    INSERT INTO contract_events (time, block_number, tx_hash, event_name, user_address, amount_usd)
    VALUES (NOW(), $1, $2, $3, $4, $5)
  `, [log.blockNumber, log.transactionHash, decoded.eventName, decoded.args.user, await convertToUSD(decoded.args.amount)]);
  eventCounter.labels(decoded.eventName).inc();
}

Prometheus метрики и алерты

import { Counter, Gauge, Registry } from 'prom-client';
const registry = new Registry();
const eventCounter = new Counter({
  name: 'contract_events_total',
  help: 'Total contract events by type',
  labelNames: ['event_name'],
  registers: [registry],
});
const tvlGauge = new Gauge({
  name: 'contract_tvl_usd',
  help: 'Total Value Locked in USD',
  registers: [registry],
});
const largeWithdrawalCounter = new Counter({
  name: 'contract_large_withdrawals_total',
  help: 'Withdrawals above threshold',
  labelNames: ['threshold_category'],
  registers: [registry],
});
app.get('/metrics', async (req, res) => {
  res.set('Content-Type', registry.contentType);
  res.send(await registry.metrics());
});
Alertmanager правила
groups:
  - name: contract_security
    rules:
      - alert: LargeWithdrawal
        expr: rate(contract_large_withdrawals_total[5m]) > 0
        for: 0m
        labels:
          severity: critical
        annotations:
          summary: "Large withdrawal detected"
      - alert: HighFailureRate
        expr: |
          rate(contract_failed_txns_total[10m]) / rate(contract_total_txns_total[10m]) > 0.1
        for: 5m
        annotations:
          summary: "More than 10% of transactions failing"
      - alert: TVLDrop
        expr: |
          (contract_tvl_usd - contract_tvl_usd offset 1h) / contract_tvl_usd offset 1h < -0.2
        for: 2m
        annotations:
          summary: "TVL dropped by more than 20% in 1 hour"

Event collector обрабатывает до 2000 событий в секунду без потерь при правильной настройке бэка.

Алерты безопасности

Помимо реалтайм-алертов, полезно отслеживать крупные транзакции и flash loan паттерны. Мы реализуем это через отдельный сервис, который анализирует события по порогу (например, $100 000) и проверяет последовательность вызовов в одном блоке. При обнаружении отправляется алерт с деталями. Всё работает на базе тех же event logs.

Grafana дашборд

Ключевые панели для DeFi протокола:

  • Overview: TVL (gauge + time series), 24h Volume, DAU, Total Users (cumulative)
  • Activity: Events per minute (разбивка по типу), Gas used per block, Failed tx ratio
  • Security: Large transactions (таблица с последними whale-транзакциями), New whale addresses, Flash loan detection events
  • Economics: Fee revenue over time, Token price correlation с активностью контракта

Дашборд версионируется в git вместе с кодом контракта.

Исторические данные и ретроспективный анализ

Для ретроспективы используем TimescaleDB и SQL:

-- Ежедневные активные пользователи
SELECT date_trunc('day', time) AS day,
       COUNT(DISTINCT user_address) AS dau,
       SUM(amount_usd) AS volume_usd
FROM contract_events
WHERE event_name IN ('Deposit', 'Swap')
GROUP BY 1
ORDER BY 1 DESC;

-- Retention: пользователи вернувшиеся через 7 дней
WITH first_use AS (
    SELECT user_address,
           MIN(time) AS first_time
    FROM contract_events
    GROUP BY 1
),
return_use AS (
    SELECT DISTINCT e.user_address
    FROM contract_events e
    JOIN first_use f ON e.user_address = f.user_address
    WHERE e.time > f.first_time + INTERVAL '7 days'
      AND e.time < f.first_time + INTERVAL '14 days'
)
SELECT COUNT(r.user_address)::float / COUNT(f.user_address) AS week1_retention
FROM first_use f
LEFT JOIN return_use r ON f.user_address = r.user_address;

Объём работ

  • Event collector: настройка подписки на события контракта через WebSocket, запись в TimescaleDB.
  • Prometheus метрики: экспорт ключевых метрик (TVL, volume, failure rate) через prom-client.
  • Grafana дашборд: визуализация операционных, бизнес- и security-метрик с версионированием в git.
  • Алерты в Alertmanager: правила для критических событий (TVL drop, large withdrawal, high failure rate).
  • Whale detector: оповещения о крупных транзакциях и flash loan паттернах.
  • Документация и runbook: инструкции по реагированию на инциденты.
  • Обучение команды: передача знаний по эксплуатации системы.

Процесс развёртывания: пошаговая инструкция

  1. День 1: Настройка event collector. Подключаемся к RPC, создаём подписку на события контракта через viem WebSocket. Записываем сырые события в TimescaleDB. Тестируем на реальных транзакциях.
  2. День 2: Prometheus и Grafana. Определяем метрики, экспортируем их через prom-client. Строим первый дашборд с TVL, объёмом, частотой событий. Настраиваем базовые алерты (TVL drop, high failure rate).
  3. День 3: Безопасность и Whale detector. Добавляем алерты на крупные выводы и flash loan паттерны. Интегрируем уведомления в Telegram/PagerDuty. Тестируем через симуляцию атак. Готовим runbook.

Итого 1–3 дня в зависимости от сложности контракта. Работаем с Ethereum, Polygon, Arbitrum, Solana. Гарантируем SLA на работу системы.

Для заказа системы мониторинга вашего DeFi-проекта свяжитесь с нами.

Выбор стека

Основной выбор — между готовыми платформами (Dune, Flipside) и собственной инфраструктурой. Dune хорош для быстрой аналитики, но имеет задержку 10–30 минут и vendor lock-in. Собственный стек мониторинга (Prometheus + Grafana) даёт реалтайм и полный контроль. Мы рекомендуем комбинировать: собственный стек для реалтайм-реагирования и Dune для ретроспективных отчётов. Для проектов с TVL более $1M собственный стек обязателен.

Убытки от одной атаки могут быть огромными, а затраты на настройку мониторинга составляют малую долю. Получите консультацию по настройке мониторинга — свяжитесь с нами для аудита вашего проекта. Мы оценим ваш проект.

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1395
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142