Разработка отслеживания статуса транзакции в криптокошельке

Транзакция отправлена — и пользователь смотрит на статус Pending следующие 10 минут. Это нормально для блокчейна, но ненормально — не получить уведомление, когда транзакция подтвердилась или зафейлилась. Отслеживание статуса транзакции — это real-time задача с несколькими уровнями: polling блокчейна

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Разработка отслеживания статуса транзакции в криптокошельке
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Транзакция отправлена — и пользователь смотрит на статус Pending следующие 10 минут. Это нормально для блокчейна, но ненормально — не получить уведомление, когда транзакция подтвердилась или зафейлилась. Отслеживание статуса транзакции — это real-time задача с несколькими уровнями: polling блокчейна, WebSocket-подключение, push-уведомление при финальном статусе. Без своевременных обновлений пользователи теряют доверие, а в криптокошельках с большим трафиком (например, 8000 транзакций в день) задержка даже в 5 секунд создаёт негативный опыт.

Наши инженеры с 5+ летним опытом в блокчейн-проектах реализовали отслеживание для 15+ криптокошельков. Сертифицированы Apple и Google, работали с Ethereum, Bitcoin, Solana и другими сетями, интегрировали WebSocket через Alchemy WebSocket API и Infura, настраивали push-уведомления через APNs и FCM. Гарантируем стабильную работу и своевременные обновления статуса.

Как выглядит жизненный цикл транзакции?

Ethereum-транзакция проходит через состояния: submitted → pending (mempool) → confirmed (1 confirmation) → finalized (12+ confirmations) → failed (reverted / dropped). Bitcoin: mempool → 1 confirmation → 6 confirmations (finalized). Solana — значительно быстрее: слоты по ~400ms, processed → confirmed → finalized за секунды. На клиенте нужно показывать текущее состояние и количество подтверждений.

Блокчейн Время блока Подтверждений для финализации Среднее время финализации
Ethereum 12-15 сек 12 (как 0x) или 64 (как 1) ~3 мин (12 блоков)
Bitcoin ~10 мин 6 ~60 мин
Solana ~400 мс 32 ~13 сек

Какие стратегии получения статуса существуют?

Стратегия Задержка Нагрузка на клиент Нагрузка на сервер
Polling (3–5 сек) 3–5 сек Высокая (частые запросы) Высокая (RPC вызовы)
WebSocket <1 сек Низкая (постоянное соединение) Средняя (подписки)
Webhook (Alchemy/Infura) <1 сек Нулевая (только push) Низкая (сервер получает событие)

Polling каждые 3–5 секунд при открытом экране — нормально. В фоне — только через silent push или WebSocket API. Экономия на инфраструктуре до 40% при использовании WebSocket вместо частого polling.

Polling через node RPC

// iOS — polling статуса ETH транзакции через JSON-RPC func pollTransactionStatus(txHash: String) async throws -> TransactionStatus { let params: [AnyEncodable] = [txHash, false] let receipt = try await ethClient.call(method: "eth_getTransactionReceipt", params: params) if receipt == nil { return .pending // Ещё в mempool } let confirmations = try await getConfirmationsCount(txHash: txHash) return confirmations >= requiredConfirmations ? .confirmed : .confirmingWith(count: confirmations) } 

Почему WebSocket быстрее polling?

WebSocket обеспечивает мгновенную передачу данных при появлении нового блока, в то время как polling имеет задержку до 5 секунд. Для критичных транзакций WebSocket — предпочтительный выбор. Мы помогаем выбрать оптимальный вариант под ваш бюджет и требования.

WebSocket подписка через Alchemy / Infura / QuickNode

// Бэкенд — подписка на событие через Alchemy WebSocket const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); const web3 = createAlchemyWeb3(process.env.ALCHEMY_WS_URL); async function watchTransaction(txHash, userId) { const subscription = web3.eth.subscribe('newBlockHeaders'); subscription.on('data', async (blockHeader) => { const receipt = await web3.eth.getTransactionReceipt(txHash); if (receipt) { subscription.unsubscribe(); await updateTransactionStatus(txHash, receipt.status ? 'confirmed' : 'failed'); await sendPushNotification(userId, txHash, receipt.status); } }); } 

Как настроить отслеживание статуса транзакции через WebSocket?

  1. На сервере поднимаем WebSocket эндпоинт, авторизованный по токену пользователя.
  2. На клиенте устанавливаем соединение при переходе на экран списка транзакций.
  3. Подписываемся на события по tx_hash — сервер отправляет обновления статуса.
  4. При получении финального статуса закрываем соединение.
  5. Повторно подключаемся при переоткрытии экрана или после ошибки.
// Android — подписка на статус транзакции через WebSocket class TransactionStatusSocket( private val token: String, private val okHttpClient: OkHttpClient ) { fun subscribe(txHash: String): Flow<TransactionStatus> = callbackFlow { val ws = okHttpClient.newWebSocket( Request.Builder() .url("wss://api.yourwallet.app/ws/tx/$txHash") .header("Authorization", "Bearer $token") .build(), object : WebSocketListener() { override fun onMessage(webSocket: WebSocket, text: String) { val status = json.decodeFromString<TransactionStatusUpdate>(text) trySend(status.status) if (status.isFinal) close() } override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { close(t) } } ) awaitClose { ws.close(1000, "Subscription ended") } } } 

Progress индикатор подтверждений

Для ETH отображаем прогресс к 12 подтверждениям. Используем ProgressView с градиентом от оранжевого к зеленому по мере увеличения count. Дизайн транзакции в разных статусах:

  • pending — анимированный spinner, жёлтый акцент
  • confirming — progress bar с количеством подтверждений
  • confirmed — зелёная галочка, анимация
  • failed — красный, причина ошибки если доступна (revert reason из receipt)

Push-уведомления при изменении статуса

При финальном статусе отправляем push пользователю:

{ "title": "Транзакция подтверждена", "body": "0.05 ETH отправлено на 0x742d...3B8C", "data": { "screen": "transaction_detail", "tx_hash": "0xabc123...", "status": "confirmed" } } 

Для failed транзакции — отдельный шаблон с описанием причины (revert reason или dropped from mempool).

Как устроена обработка dropped транзакций?

Транзакция может исчезнуть из mempool если gas price был слишком низким. Через 15–30 минут без подтверждения — транзакция считается dropped. Нужно detectить это:

suspend fun checkDroppedTransactions() { val pendingTxs = transactionDao.getPendingOlderThan(minutes = 20) pendingTxs.forEach { tx -> val receipt = ethClient.getTransactionReceipt(tx.hash) if (receipt == null) { transactionDao.updateStatus(tx.hash, TransactionStatus.DROPPED) pushService.notifyUser(tx.userId, "Транзакция не попала в блок", tx.hash) } } } 

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

Анализ текущей архитектуры кошелька и выбор стратегии (polling/WebSocket/webhook). Интеграция с блокчейн-нодами (Infura, Alchemy, QuickNode) или собственным узлом. Реализация клиентской логики: polling/WebSocket клиент для iOS и Android. Разработка progress bar для отображения количества подтверждений. Настройка push-уведомлений (APNs, FCM) при финальном статусе. Обработка dropped транзакций и ошибок (revert reason, timeout). Тестирование на тестовых сетях (Goerli, Sepolia) и mainnet. Документация и передача исходного кода.

Сроки и стоимость

Базовая реализация отслеживания с polling и push-уведомлениями занимает 6–10 рабочих дней. Полный цикл с WebSocket, progress bar, обработкой dropped транзакций и кастомными push — от 2 недель. Стоимость рассчитывается индивидуально после анализа проекта. Свяжитесь с нами для консультации и точной оценки.

Мы гарантируем качество, предоставляем поддержку после запуска. Опыт наших разработчиков подтвержден сертификатами Apple и Google. Получите бесплатную консультацию по архитектуре отслеживания для вашего криптокошелька.