Разработка системы отслеживания транзакций

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка системы отслеживания транзакций
Средний
~3-5 дней
Часто задаваемые вопросы

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

Этапы блокчейн-разработки

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1378
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1257
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    966
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1210
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    668
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    957

Мы разрабатываем системы отслеживания блокчейн-транзакций, которые гарантируют доставку каждого события даже при реорганизации цепи. Потеря транзакции может стоить пользователю денег, а бизнесу — репутации. Наивная реализация с polling JSON-RPC каждые N секунд (eth_getBlockByNumber, перебор транзакций) при нагрузке 10+ адресов быстро превращается в проблему: растущий lag, rate-limit от RPC-провайдера, пропущенные события при сбоях. За 5 лет мы реализовали 15+ проектов для Ethereum (как через WebSocket, так и через собственные indexer'ы на ethers.js), Solana (используя Helius) и Polygon — накопили паттерны, которые работают в продакшене. Один из наших клиентов обрабатывал 50 000 транзакций в день с lag менее 2 секунд — это стало возможным благодаря комбинации WebSocket и fallback polling.

Мы оказываем услуги разработки под ключ систем мониторинга криптовалютных транзакций с event-driven архитектурой. Наш опыт включает интеграцию с Chainlink илиacles, обработку flash loan атак и настройку slippage для AMM пулов — все эти сценарии требуют надёжного отслеживания транзакций в реальном времени. Ниже — проверенные решения для разных нагрузок: от простого WebSocket-мониторинга до масштабируемого indexer'а с гарантированной доставкой.

Какую архитектуру выбрать для мониторинга транзакций?

WebSocket-подписки (для небольших систем) — разработка системы отслеживания

Ethereum WebSocket API поддерживает eth_subscribe:

  • newHeads — новые блоки
  • logs — события смарт-контрактов по фильтру
  • newPendingTransactions — mempool (ненадёжно, не использовать для финансов)
const { ethers } = require("ethers");
const provider = new ethers.WebSocketProvider(process.env.WS_RPC_URL);

// Подписка на Transfer события ERC-20
const filter = {
  address: USDC_CONTRACT,
  topics: [
    ethers.id("Transfer(address,address,uint256)"),
    null,
    ethers.zeroPadValue(WATCHED_ADDRESS, 32), // только входящие
  ],
};

provider.on(filter, async (log) => {
  const parsed = iface.parseLog(log);
  await processIncomingTransfer({
    txHash: log.transactionHash,
    from: parsed.args.from,
    amount: parsed.args.value,
    blockNumber: log.blockNumber,
  });
});

Проблема: WebSocket-соединение падает. Нужен reconnect с восстановлением пропущенных событий — запрос eth_getLogs за пропущенный диапазон блоков при реконнекте. ethers.js упрощает эту логику, но требует ручной обработки разрывов.

Indexer-сервис (для средних и крупных систем)

The Graph, Ponder, или собственный indexer на базе eth_getLogs с курсором. Схема:

RPC Node → Indexer Worker → PostgreSQL (indexed events) → API → Clients

Indexer хранит last_processed_block, при рестарте продолжает с того же места. Batching запросов: eth_getLogs за диапазон блоков (рекомендуется по 1000–2000 блоков за раз). Такой подход обрабатывает до 100 раз больше адресов, чем WebSocket, без роста lag.

Webhook-провайдеры (самое быстрое внедрение)

Helius (Solana), Alchemy (EVM), QuickNode Streams берут мониторинг на себя, вызывая ваш endpoint при событиях. Сокращают время внедрения в 3 раза по сравнению с собственным indexer'ом. Подходит, когда инфраструктурная простота важнее полного контроля.

Критерий WebSocket-подписки Indexer-сервис Webhook-провайдеры
Макс. кол-во адресов До 10 100+ Неограниченно
Lag Малый (секунды) Средний (блоки) Малый (секунды)
Сложность разработки Низкая Высокая Нулевая
Контроль над данными Полный Полный Ограниченный провайдером
Риск потери событий При падении соединения Низкий (с курсором) Зависит от провайдера

Если сомневаетесь в выборе — свяжитесь с нами, поможем подобрать архитектуру под ваш бюджет и нагрузку.

Как обрабатывать реорганизацию цепи (chain reorg)?

Blockchain reorg — нормальное явление, особенно на малых глубинах. Транзакция с 3 confirmations может исчезнуть. Система, которая не обрабатывает reorg, периодически показывает пользователям оплаченные заказы, которые потом откатываются.

Правило: не помечать транзакцию как финальную до достижения безопасной глубины:

Сеть Безопасная глубина Финализация
Ethereum 12+ подтверждений (~2.5 мин) Checkpoint (slots, ~13 мин)
Bitcoin 6 подтверждений (~60 мин) Probabilistic
Polygon PoS 256 подтверждений (~8 мин) Checkpoint в Ethereum
Solana finalized (~15 сек) Однозначная

Реализация статусной машины для транзакции:

pending → confirming (1+ conf) → confirmed (12+ conf) → finalized
                                         ↓
                                      reorged → needs_retry

При обнаружении reorg (блок с нашей транзакцией был заменён): откат статуса, уведомление, повторная проверка.

Как работает детектор реорганизации

При поступлении нового блока мы проверяем его parentHash. Если parentHash не совпадает с последним известным блоком, это может быть reorg. Запускаем перепроверку всех транзакций, начиная с блоков с меньшей глубиной. Если находим заменяющий блок — меняем статус на 'reorged'.

Как хранить данные транзакций?

Минимальная схема таблицы транзакций:

CREATE TABLE tracked_transactions (
    id              BIGSERIAL PRIMARY KEY,
    tx_hash         VARCHAR(66) NOT NULL,
    network         VARCHAR(20) NOT NULL,
    block_number    BIGINT,
    block_hash      VARCHAR(66),        -- для детекта reorg
    from_address    VARCHAR(42),
    to_address      VARCHAR(42),
    value_raw       NUMERIC(78, 0),     -- wei/lamports, без потери точности
    token_contract  VARCHAR(42),
    status          VARCHAR(20) DEFAULT 'pending',
    confirmations   INT DEFAULT 0,
    metadata        JSONB,
    first_seen_at   TIMESTAMPTZ DEFAULT now(),
    confirmed_at    TIMESTAMPTZ,
    UNIQUE(tx_hash, network)
);

CREATE INDEX idx_tracked_tx_address ON tracked_transactions(to_address);
CREATE INDEX idx_tracked_tx_status ON tracked_transactions(status)
    WHERE status NOT IN ('finalized', 'failed');

block_hash позволяет обнаружить reorg: если блок с нашим block_number имеет другой hash — произошёл форк.

Почему важно мониторить сам indexer?

Метрика indexer_lag_blocks — насколько indexer отстаёт от head цепи. Если lag > 50 блоков — алерт: либо RPC упал, либо indexer перегружен. Добавляем в Prometheus/Grafana или хотя бы Uptime Robot с webhook.

Какие типичные ошибки допускают при создании мониторинга?

  • Игнорирование chain reorg: транзакция помечается оплаченной после 1 confirmation, а через минуту исчезает. Последствия — финансовые потери и споры с клиентами.
  • Использование только polling без fallback: при пропуске нескольких блоков из-за сбоя — потеря всех событий за этот промежуток.
  • Отсутствие dead-letter очереди для webhook: если внешняя система недоступна, уведомления теряются безвозвратно.
  • Неправильный выбор глубины подтверждений: для Ethereum достаточно 12 подтверждений, но для крупных сумм некоторые проекты используют 30+.

Что входит в разработку системы мониторинга

  • Компонент получения событий (WebSocket + fallback polling)
  • Обработчик reorg с откатом статусов
  • Worker подтверждений (обновляет счётчик confirmations)
  • REST/WebSocket API для фронтенда
  • Webhook delivery для внешних систем (с retry и dead-letter queue)
  • Dashboard текущего состояния indexer'а

Как мы работаем

  1. Аналитика: определяем список адресов и событий, выбираем сеть и архитектуру.
  2. Проектирование: схема БД, статусная машина, механизм реконнекта.
  3. Реализация: пишем код на Solidity/Rust (если это смарт-контракт), бэкенд на Node.js/Python с интеграцией ethers.js или Web3.py.
  4. Тестирование: эмуляция chain reorg в тестовой сети, нагрузочное тестирование.
  5. Деплой: CI/CD, мониторинг, документация.

Сроки: от 2 до 6 недель в зависимости от сложности. Закажите консультацию — оценим ваш проект за 1 день.

Развертывание блокчейн-инфраструктуры: ноды, RPC, индексация

Subgraph упал в 3:47 ночи. К утру пользователи видели устаревшие балансы, транзакции «висели» в UI, поддержка получила 47 тикетов за час. Причина: handler в subgraph упал на транзакции с нестандартным event log — и весь индекс встал. Мы сталкивались с такими ситуациями десятки раз. Наш опыт показывает: блокчейн-инфраструктура не прощает gaps в observability. Гарантировать uptime без многослойного мониторинга и fault‑tolerant архитектуры невозможно. За 8 лет работы с Ethereum, Polygon и Solana мы выработали подход, который позволяет предсказуемо развёртывать инфраструктуру любого масштаба — от одиночной ноды до мультичейн‑сетки с десятками субграфов.

Архитектура RPC-слоя

Каждое взаимодействие dApp с блокчейном идёт через RPC — JSON‑RPC API, которую предоставляет нода. Три варианта:

Managed providers — Alchemy, QuickNode, Infura, Ankr. Минимальные операционные расходы, SLA, встроенный мониторинг. Ограничения: rate limits (Alchemy Free: 300 RU/sec), vendor lock, потенциальные downtime при инцидентах провайдера. Для большинства проектов — правильный выбор на старте.

Собственные ноды — полный контроль, нет rate limits, нет зависимости от третьих сторон. Стоимость: архивная нода Ethereum занимает 2.5–3TB SSD, требует мощный сервер и DevOps‑поддержку. Sync с нуля на Ethereum через Geth/Nethermind — 3–7 дней. Оправдано при высокой нагрузке или требованиях к latency.

Гибрид — собственная нода как primary, managed provider как fallback. Стандарт для протоколов с TVL от $10M. Правильная балансировка может сократить расходы на 20–30% по сравнению с чисто managed‑схемой. При нагрузке 10 млн запросов в месяц гибрид экономит от $1500 до $3000.

Провайдер Сильная сторона Ограничение
Alchemy Supernode, Enhanced APIs, webhooks Дорогой на high-volume
QuickNode Низкая latency, multi-chain Дороже Alchemy на базовом плане
Infura Историческая надёжность Rate limits на бесплатном, один крупный инцидент остановил пол‑DeFi
Ankr Дешёвый, 40+ чейнов Менее стабильный

Как настроить RPC-слой без единой точки отказа?

Минимум два провайдера, DNS round‑robin с health check каждые 5 секунд, автоматическое переключение на fallback при latency >500 мс. На практике это даёт 99.99% доступности при любом сбое провайдера. Для протоколов с TVL от $10M мы рекомендуем собственный HA‑прокси (nginx или Envoy) перед двумя managed‑провайдерами.

Почему гибридная RPC-схема выгоднее чисто managed?

При 50 млн запросов в месяц Alchemy стоит $2000+, QuickNode — $2500+, собственная нода — $400–600 за хостинг + DevOps. Гибрид: primary — своя нода ($500), fallback — QuickNode ($500), итого ~$1000. Экономия 50–60% без потери SLA.

Клиенты нод Ethereum

Execution clients: Geth (наиболее используемый), Nethermind (C#, быстрая sync), Besu (Java, enterprise), Erigon (самый быстрый sync, архивный режим эффективен по диску — ~2TB вместо 3TB).

Consensus clients (post‑Merge): Lighthouse (Rust), Prysm (Go), Teku (Java), Nimbus (Nim). Каждая нода после The Merge требует пары execution + consensus client.

Для DevOps: eth‑docker — Docker Compose конфигурации для всех комбинаций клиентов. Настройка мониторинга через Grafana + Prometheus — обязательна, стандартный дашборд есть в репозитории каждого клиента.

The Graph: индексация событий

The Graph Protocol — decentralized indexing. Subgraph описывает какие события с каких контрактов индексировать и как трансформировать их в GraphQL схему.

Структура subgraph:

  • subgraph.yaml — манифест: адреса контрактов, startBlock, события которые обрабатываются
  • schema.graphql — GraphQL схема entities
  • src/mapping.ts — AssemblyScript обработчики событий
dataSources:
  - kind: ethereum
    name: UniswapV3Pool
    network: mainnet
    source:
      address: "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"
      abi: UniswapV3Pool
      startBlock: 12370624
    mapping:
      eventHandlers:
        - event: Swap(indexed address,indexed address,int256,int256,uint160,uint128,int24)
          handler: handleSwap

AssemblyScript handlers — не TypeScript. Нет nullable types, нет closures, нет многих стандартных API. Ошибка в handler останавливает индексацию subgraph-а на той транзакции. Важно: добавлять try‑catch на операции которые могут падать (например store.get() для entity которая может не существовать).

Как избежать остановки индексации субграфа?

Лог файлы Graph Node мониторятся в реальном времени, при hasIndexingErrors = true срабатывает алерт и автоматический рестарт ноды (через systemd или Kubernetes). Типичный downtime при ошибке — 150–300 секунд до восстановления. Дополнительно: для production ставим watchdog, который перезапускает Graph Node если subgraph lag превышает 50 блоков.

Выбор между Hosted Service и Decentralized Network

Graph Hosted Service (бесплатный, централизованный) deprecated в пользу Subgraph Studio + Graph Network. Для продакшн: деплой на Graph Network с GRT curation signal — субграф получает indexers пропорционально curation.

Альтернативы The Graph: Ponder (TypeScript, self-hosted, проще дебагать), Envio (ultra‑fast indexer, поддерживает EVM + non‑EVM), Subsquid (TypeScript, своя сеть), Moralis Streams (managed, webhook‑based). Наш опыт показывает: для высоконагруженных проектов с уникальной логикой эффективнее Ponder или Envio — они дают полный контроль над процессом и не требуют токеномики GRT.

Webhooks и real-time нотификации

Alchemy Webhooks и QuickNode Streams позволяют получать события в реальном времени через HTTP webhook или WebSocket. Для мониторинга адресов, новых транзакций, минтов — это быстрее чем polling RPC.

Tenderly — платформа для мониторинга и алертов. Можно настроить alert на конкретный event из контракта, на изменение баланса, на вызов функции с определёнными параметрами. Симуляция транзакций через Tenderly API — бесценно для debugging.

Мониторинг и observability

Минимальный стек мониторинга для протокола:

On‑chain: OpenZeppelin Defender Sentinel — watches contract events, вызывает webhook или Autotask при срабатывании условий. Forta Network — community‑maintained боты детектируют аномалии (большие withdrawals, flash loans, governance attacks).

Infrastructure: Grafana + Prometheus для нод, Datadog или Grafana Cloud для managed метрик. Alert на: нода отстала на 10+ блоков, RPC latency > 500ms, subgraph lag > 100 блоков.

Uptime: Better Uptime или PagerDuty на RPC endpoint и subgraph health endpoint (The Graph предоставляет _meta { hasIndexingErrors, block { number } }).

Почему мониторинг без Tenderly недостаточен?

Tenderly даёт симуляцию транзакций и детальные трейсы — это критично для отладки ошибок в субграфах и смарт‑контрактах. Forta же фокусируется на аномалиях в сети, а не на вашей инфраструктуре. Комбинация Tenderly + собственный дашборд Grafana покрывает 90% сценариев инцидентов.

Мультичейн инфраструктура

Протокол на 5 чейнах = 5 отдельных RPC endpoints, 5 subgraphs, 5 мониторинг‑конфигов. Это управляемо, но нужна автоматизация деплоя.

Для subgraph multi‑network деплой: graph deploy --network mainnet, graph deploy --network arbitrum-one и т.д. с единой кодовой базой и network‑specific адресами в отдельных файлах конфигурации.

Chainlink CCIP и LayerZero для cross‑chain messaging требуют мониторинга состояния обоих чейнов и транзакций на intermediate relayers. Реорг на source chain при уже подтверждённом минте на target chain — классическая проблема мостов. Решение: ждать finality (на Ethereum ~15 минут после Merge для экономической finality) перед подтверждением на target chain.

Процесс настройки инфраструктуры

  1. Аудит текущего стека — определяем чейны, объём запросов, требования к latency и доступности.
  2. Проектирование архитектуры — выбор провайдеров, балансировка, redundancy.
  3. Разработка subgraph — манифест → схема → handlers → тестирование на локальной Graph Node → деплой на testnet → mainnet.
  4. Конфигурация мониторинга — Tenderly alerts, Grafana дашборд, PagerDuty интеграция.
  5. Документация и runbook — что делать при: subgraph fell behind, RPC downtime, нода desync.
  6. Передача в эксплуатацию — обучение команды, передача доступов, поддержка первый месяц.

Что входит в работу

  • Развёртывание managed или self‑hosted нод Ethereum, Polygon, BNB Chain
  • Настройка RPC‑слоя с primary/fallback и load balancing
  • Разработка и деплой subgraph под ваш протокол
  • Подключение мониторинга (Tenderly, Grafana, алерты)
  • Создание runbook и документации по эксплуатации
  • Обучение команды (до 4 часов онлайн)
  • Поддержка в течение 30 дней после сдачи

Сроки

Работа Срок
Настройка RPC и базового мониторинга 1–2 недели
Subgraph для одного протокола 2–4 недели
Self-hosted нода с мониторингом 2–3 недели
Полная инфраструктура (multi-chain, мониторинг, runbooks) 6–10 недель

Все проекты ведутся в репозитории на GitHub/GitLab с CI/CD, код конфигураций остаётся у вас. Закажите развертывание инфраструктуры — расскажем, как сократить расходы на 20–30% без потери надёжности. JSON‑RPC спецификация, документация The Graph. Получите консультацию — покажем, как мы развёртывали инфраструктуру для протокола с TVL $50M+ на Ethereum и Arbitrum.

Свяжитесь с нами.