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

Ми розробляємо системи відстеження блокчейн-транзакцій, які гарантують доставку кожної події навіть при реорганізації ланцюга. Втрата транзакції може коштувати користувачеві грошей, а бізнесу — репутації. Наївна реалізація з polling JSON-RPC кожні N секунд (`eth_getBlockByNumber`, перебір транзакцій

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    717
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1008

Ми розробляємо системи відстеження блокчейн-транзакцій, які гарантують доставку кожної події навіть при реорганізації ланцюга. Втрата транзакції може коштувати користувачеві грошей, а бізнесу — репутації. Наївна реалізація з 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 оракулами, обробку 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 день.