Реализация отправки криптовалюты из мобильного кошелька

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

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

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

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

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

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

Этапы разработки

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

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Реализация отправки криптовалюты из мобильного кошелька

Экран отправки — один из самых критичных в мобильном кошельке. Здесь пользователь вводит адрес получателя, сумму и подтверждает транзакцию. Ошибка на любом из этих шагов — необратимая потеря средств. Поэтому логика отправки строится с явным упором на валидацию, защиту от случайного подтверждения и прозрачное отображение комиссий.

Валидация адреса до отправки

Самая частая причина потери средств — невалидный или некорректный адрес. Для Ethereum и EVM-совместимых сетей обязательна проверка checksum по EIP-55:

// iOS — web3swift
import web3swift
let address = EthereumAddress(inputString)
guard address != nil else { /* показать ошибку */ }
// Android — web3j
import org.web3j.crypto.WalletUtils
val isValid = WalletUtils.isValidAddress(inputAddress)

Для Bitcoin нужно отдельно разбирать формат — P2PKH, P2SH или bech32 (SegWit). Библиотека BitcoinKit (iOS) и bitcoinj (Android) покрывают все три. Solana-адреса — base58, 32 байта; SolanaSwift предоставляет PublicKey(string:) с выбросом исключения при некорректном вводе.

EVM-адреса в нижнем регистре и адреса с checksum — разные строки, но оба валидны. Отображать пользователю лучше checksum-версию.

Построение и подписание транзакции

Флоу отправки:

  1. Пользователь вводит адрес и сумму.
  2. Приложение запрашивает актуальный gasPrice / maxFeePerGas через eth_gasPrice или eth_feeHistory.
  3. Оценивает gasLimit через eth_estimateGas с параметрами транзакции — не захардкоживать 21000, если это не plain ETH transfer.
  4. Показывает итоговую комиссию в USD по актуальному курсу.
  5. Пользователь подтверждает — приложение подписывает транзакцию приватным ключом локально.
  6. Отправка подписанного hex через eth_sendRawTransaction.

Приватный ключ никогда не покидает устройство. Для хранения — iOS Keychain с kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, Android Keystore с KeyPairGenerator и флагом setUserAuthenticationRequired(true).

// Android — подписание через web3j
val credentials = Credentials.create(privateKey)
val rawTransaction = RawTransaction.createEtherTransaction(
    nonce, gasPrice, gasLimit, toAddress, value
)
val signedMessage = TransactionEncoder.signMessage(rawTransaction, chainId, credentials)
val hexValue = Numeric.toHexString(signedMessage)
web3j.ethSendRawTransaction(hexValue).send()

UX подтверждения и защита от ошибок

Экран подтверждения должен содержать полный адрес получателя (не сокращённый), сумму, сеть и итоговую комиссию. Кнопку «Отправить» — не рядом с «Отмена», лучше вынести вниз с явным отступом. На iOS уместен UIImpactFeedbackGenerator при успешной отправке — тактильный отклик снижает тревожность.

После eth_sendRawTransaction приложение получает txHash. Статус транзакции отслеживается через eth_getTransactionReceipt в цикле с задержкой (polling каждые 3–5 секунд) или через WebSocket подписку eth_subscribe("newHeads"). Показывать пользователю ссылку на Etherscan / BscScan / Solscan — обязательно.

Типичные ошибки реализации

Подмена адреса из буфера обмена — реальный вектор атаки. Приложение должно сравнивать первые и последние 4 байта вставленного адреса с тем, что пользователь видит на экране, и при несоответствии — показывать предупреждение. Ряд кошельков дополнительно показывает визуальный идентикон адреса (Blockies или Jazzicon).

Nonce management: если пользователь отправил транзакцию с pending-статусом, следующая транзакция должна использовать nonce + 1. Иначе вторая транзакция зависнет или заменит первую. Хранить nonce локально, синхронизировать с eth_getTransactionCount(..., "pending") перед каждой отправкой.

Сроки: 3–5 дней: экран ввода с валидацией адреса и суммы, построение транзакции, подписание, отображение комиссий, экран подтверждения, трекинг статуса. ERC-20 transfer потребует дополнительного дня на ABI-encode данных transfer(address,uint256).