Разработка мобильного приложения для мониторинга блокчейн-транзакций
Мониторинг транзакций нужен разным людям по-разному: 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 (или аналог) → бэкенд webhook → FCM/APNs → телефон. Прямого WebSocket из мобильного приложения в ноду достаточно только для мониторинга в foreground.
Что отслеживает приложение
Типичный набор сущностей для мониторинга:
Кошельки. Входящие/исходящие нативные токены (ETH, BNB, SOL) и ERC-20/SPL токены. При добавлении адреса — подписка на его активность. Пороговые фильтры: уведомлять только при сумме > $1,000.
Смарт-контракты. Конкретные events: Transfer(address,address,uint256), Swap, Deposit, Withdraw. Декодирование ABI — через ethers.js на бэкенде или 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. Тап — детальная карточка с ссылкой на блок-эксплорер.
Данные загружаются из собственного бэкенда, который хранит историю событий (потому что блокчейн не даёт удобного «дай мне события этого адреса за месяц» без архивной ноды). Пагинация cursor-based.
Что входит в работу
- Мультичейн архитектура (EVM + Solana опционально)
- Управление списком отслеживаемых адресов и контрактов
- Лента событий с фильтрами и поиском
- Push-уведомления с фильтрами по сумме и типу, тихие часы
- Детальная карточка транзакции со ссылкой на блок-эксплорер
- Offline-режим с кэшированием последних событий
Сроки
7–12 рабочих дней в зависимости от числа поддерживаемых цепочек и глубины интеграции. Стоимость рассчитывается индивидуально после анализа требований.







