Розробка мобільного додатку для моніторингу блокчейн-транзакцій
Мониторинг транзакцій потрібен різним людям по-різному: OTC-трейдер відслідковує вхідні переводи на гаманець, аналітик стежить за активністю кита, DevOps web3-проекту моніторить транзакції смарт-контракту. Спільне — потрібно отримувати сповіщення при on-chain подіїі, а не перевіряти блок-експлорер вручну.
Архітектура: як відслідковувати on-chain події
Варіант 1: Polling через RPC. Кожні N секунд запитуємо eth_getBlockByNumber або eth_getLogs. Просто, але неефективно та створює навантаження на RPC-ноду. Підходить тільки для моніторингу одної-двох адрес з інтервалом 30+ секунд.
Варіант 2: WebSocket RPC. Ethereum-ноди підтримують eth_subscribe через WebSocket. Підписка newHeads видає кожен новий блок; logs з фільтром за адресою — події смарт-контракту. Alchemy та Infura підтримують wss://. Близько до real-time, затримка 1–3 секунди після підтвердження блока.
Варіант 3: Webhooks через спеціалізований сервіс. Alchemy Notify, Moralis Streams, QuickNode Streams — ви задаєте адресу/контракт, сервіс викликає ваш webhook при подіїі. Бекенд отримує POST, відправляє push в мобільний додаток. Найнадійніший підхід для продакшну.
Варіант 4: Blockchain indexer. The Graph Protocol, Goldsky — індексують контракти, видають GraphQL API. Підходить для складної аналітики по історичним даним.
Для мобільного додатку з push-сповіщеннями: Alchemy Notify (або аналог) → backend webhook → FCM/APNs → телефон. Прямого WebSocket з мобільного додатку в ноду достатньо тільки для моніторингу в foreground.
Що відслідковує додаток
Типовий набір сутностей для моніторингу:
Гаманці. Вхідні/вихідні нативні токени (ETH, BNB, SOL) та ERC-20/SPL токени. При додаванні адреси — підписка на її активність. Пороговые фільтри: сповіщати тільки при сумі > $1,000.
Смарт-контракти. Конкретні events: Transfer(address,address,uint256), Swap, Deposit, Withdraw. Декодування ABI — через ethers.js на backend або Alchemy Decoded API.
Pending transactions. Транзакції у mempool до включення в блок. Alchemy підтримує alchemy_pendingTransactions з фільтром. Корисно для моніторингу власних транзакцій.
// iOS — модель события транзакції
struct TransactionEvent: Codable, Identifiable {
let id: String // tx hash
let chain: Chain // .ethereum, .polygon, .bsc
let type: EventType // .transfer, .swap, .contractCall
let from: String
let to: String
let value: Decimal // у нативній валюті
let valueUsd: Decimal?
let token: TokenInfo? // nil для нативної валюти
let blockNumber: Int64
let confirmedAt: Date
let status: TxStatus // .pending, .confirmed, .failed
}
Мультичейн
Різні ланцюжки — різні RPC, різні формати адрес, різні стандарти токенів. Ethereum та EVM-сумісні (Polygon, BSC, Arbitrum, Base) — один адаптер з різним RPC URL та chain ID. Solana — окремий SDK, адреси base58, токени через SPL.
Для кожної ланцюжки — окремий адаптер:
interface ChainMonitor {
val chainId: Int
suspend fun subscribeToAddress(address: String, listener: TxEventListener)
suspend fun unsubscribe(address: String)
suspend fun getRecentTransactions(address: String, limit: Int): List<Transaction>
}
class EthereumMonitor(private val alchemyWsUrl: String) : ChainMonitor {
override val chainId = 1
// ...
}
class SolanaMonitor(private val heliusApiKey: String) : ChainMonitor {
override val chainId = 101 // Solana mainnet
// ...
}
Push-сповіщення та тихі години
Сповіщення при кожній транзакції — занадто багато для активних адрес (whale-гаманці роблять сотні транзакцій на день). Потрібні фільтри:
- Мінімальна сума (наприклад, сповіщати тільки при > $500)
- Тип события (тільки incoming, або тільки DEX swap)
- Тихі години: з 23:00 до 08:00 — батчити сповіщення, показати одним зведеним push вранці
На iOS кастомізація сповіщень через UNNotificationContent з UNNotificationServiceExtension — можна збагатити push даними перед показом. На Android — NotificationCompat.Builder з InboxStyle для батчингу.
Лента подій
Головний екран — хронологічна лента всіх відслідковуваних подій. Фільтри: за ланцюжком, за адресою, за типом события. Пошук за tx hash. Тап — детальна карточка зі посиланням на блок-експлорер.
Дані завантажуються з власного backend, який зберігає історію подій (тому що блокчейн не дає зручного «дай мені события цієї адреси за місяць» без архівної ноди). Pagination cursor-based.
Що входить в роботу
- Мультичейн архітектура (EVM + Solana опціонально)
- Керування списком відслідковуваних адрес та контрактів
- Лента подій з фільтрами та пошуком
- Push-сповіщення з фільтрами за сумою та типом, тихі години
- Детальна карточка транзакції зі посиланням на блок-експлорер
- Offline-режим з кешуванням останніх подій
Терміни
7–12 робочих днів залежно від кількості підтримуваних ланцюжків та глибини інтеграції. Вартість розраховується індивідуально після аналізу вимог.







