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

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

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

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

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

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

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

Наївна реалізація моніторингу трансакцій — це polling JSON-RPC кожні N секунд: eth_getBlockByNumber, перебір трансакцій, пошук потрібної адреси. При навантаженні в 10+ адресу це швидко перетворюється на проблему: зростаючий lag, rate-limit від RPC-провайдера, пропущені трансакції при кратковременних збоях. Правильна система будується на іншій архітектурі — event-driven, з реорганізацією ланцюга і гарантованою обробкою.

Архітектура: три основних підходи

1. 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 eventos 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 за пропущений діапазон блоків при реконнекті.

2. 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 блоків за раз).

3. Webhook-провайдери (самий швидкий deployment)

Helius (Solana), Alchemy (EVM), QuickNode Streams беруть моніторинг на себе, викликаючи ваш endpoint при подіях. Підходить, коли інфраструктурна простота важливіша за повний контроль.

Реорганізація ланцюга (chain reorg)

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

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

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

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

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

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

Зберігання та індексування

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

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 — сталася fork.

Моніторинг самого indexer'а

Метрика indexer_lag_blocks — наскільки indexer відстає від head ланцюга. Якщо lag > 50 блоків — алерт: або RPC впав, або indexer перегружен. Додаємо в Prometheus/Grafana або хоча б Uptime Robot з webhook.

Що входить в розробку системи

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