Реализация получения криптовалюты в мобильном кошельке
Мы знаем, что экран получения криптовалюты кажется тривиальным: показать адрес, сгенерировать QR. На практике за этим стоит несколько нетривиальных решений — поддержка нескольких сетей с одним seed, корректный URI-формат для QR, и UX, который не даст пользователю передать адрес не той сети. Наш опыт показывает, что непродуманная реализация приводит к потере средств или блокировке перевода. Предлагаем разобрать ключевые аспекты.
Как настроить отображение адреса для разных сетей?
HD-кошелёк деривирует разные адреса для разных сетей из одного мнемоника по BIP-44. Ethereum-адрес (m/44'/60'/0'/0/0) совпадёт для Ethereum, Polygon, BNB Chain — это один и тот же hex-адрес. Но для Bitcoin (m/44'/0'/0'/0/0) и Solana (m/44'/501'/0'/0') адреса будут другими.
Пользователь должен явно видеть, в какой сети он принимает: «Получить ETH / ERC-20 (Ethereum)», «Получить BNB (BNB Chain)». Одна визуальная ошибка — и средства могут попасть в неподдерживаемую сеть или вовсе сгореть.
| Сеть | Путь BIP-44 | Формат адреса |
|---|---|---|
| Bitcoin | m/44'/0'/0'/0/0 | 1... / bc1... |
| Ethereum | m/44'/60'/0'/0/0 | 0x... |
| Solana | m/44'/501'/0'/0' | ... |
| BNB Chain | m/44'/60'/0'/0/0 (как ETH) | 0x... |
QR-код: URI-форматы по стандартам
Для Bitcoin — BIP-21: bitcoin:1A2B3C...?amount=0.005 Для Ethereum — EIP-681: ethereum:0xAbCd...@1?value=1e18 Для Solana — solana:<address>?amount=0.1&spl-token=<mint>
QR с чистым адресом работает везде, URI-формат — только если принимающее приложение его поддерживает. Рекомендуем генерировать URI по умолчанию, давать переключатель «только адрес» для совместимости.
// iOS — генерация QR через CoreImage import CoreImage.CIFilterBuiltins let filter = CIFilter.qrCodeGenerator() filter.message = Data(uri.utf8) filter.correctionLevel = "M" let ciImage = filter.outputImage! let scaled = ciImage.transformed(by: CGAffineTransform(scaleX: 10, y: 10)) let uiImage = UIImage(ciImage: scaled) // Android — ZXing import com.google.zxing.BarcodeFormat import com.google.zxing.qrcode.QRCodeWriter val writer = QRCodeWriter() val bitMatrix = writer.encode(uri, BarcodeFormat.QR_CODE, 512, 512) val bitmap = Bitmap.createBitmap(512, 512, Bitmap.Config.RGB_565) // заполнить bitmap из bitMatrix Размер QR-кода должен быть достаточным для сканирования с расстояния 30+ см. Минимум 200×200 dp, рекомендуется 280×280. Светлый фон, тёмные модули — не инвертировать, большинство сканеров плохо читают инверсию.
Почему важен правильный URI-формат?
Использование URI-формата вместо чистого адреса предотвращает ошибки перевода: получатель сразу получает сумму и идентификатор сети. Если приложение отправителя поддерживает URI (например, BIP-21 для Bitcoin), оно автоматически подставит сумму и не даст отправить не в ту сеть. На практике 85% современных кошельков поддерживают URI, поэтому мы включаем эту опцию по умолчанию.
Копирование адреса и шаринг
Кнопка «Копировать» — обязательна. После копирования — краткий toast «Адрес скопирован» без блокирующего диалога. На iOS с iOS 16+ буфер обмена требует явного разрешения при вставке в другом приложении, поэтому визуальное подтверждение особенно важно.
Кнопка «Поделиться» открывает системный share sheet с текстом адреса или URI. Это удобно при передаче адреса через мессенджер.
Для сетей с memo/tag (XRP, XLM, ATOM) — обязательно отображать memo отдельным полем с предупреждением: «Без memo средства могут быть потеряны на бирже».
Что входит в работу
- Проектирование UX: выбор расположения элементов, обработка ошибок, уведомления.
- Реализация адресной деривации по BIP-44 для N сетей.
- Генерация QR с URI и чистым адресом, переключение между режимами.
- Интеграция копирования и шаринга с учётом особенностей ОС.
- Тестирование на реальных устройствах и симуляторах.
- Документация и передача доступов.
Процесс разработки
Аналитика → Проектирование (1–2 дня) → Разработка (3–5 дней) → Тестирование (1–2 дня) → Деплой. Оценим ваш проект за 24 часа.
Сроки: от 5 до 10 дней в зависимости от количества сетей и дополнительных требований. Мы гарантируем качество кода и его соответствие App Store Review Guidelines и политикам Google Play.
Сравнение подходов: URI vs чистый адрес
| Возможность | URI-формат | Чистый адрес |
|---|---|---|
| Автозаполнение суммы | Да | Нет |
| Определение сети | Да (параметр chain) | Нет |
| Совместимость | 85% кошельков | 100% |
| Простота реализации | Средняя | Простая |
Чистый адрес проще, но URI безопаснее. Мы рекомендуем комбинировать оба подхода с переключателем.
Обратитесь к нам за консультацией или закажите реализацию модуля получения криптовалюты под ключ. Наши инженеры имеют опыт 5+ лет и 50+ реализованных проектов в сфере криптовалютных кошельков. Пишите — оценим проект бесплатно.







