Реалізація отримання криптовалюти в мобільному гаманці
Екран отримання виглядає простим: показати адресу, згенерувати 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)». Одна візуальна помилка—і кошти можуть потрапити в непідтримувану мережу або взагалі згоріти.
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. Світлий фон, темні модулі—не інвертувати, більшість сканерів погано читають інверсію.
Копіювання адреси та шаринг
Кнопка «Копіювати»—обов'язкова. Після копіювання—коротке toast «Адреса скопійована» без блокуючого діалогу. На iOS з iOS 16+ буфер обміну потребує явного дозволу при вставці в іншому додатку, тому візуальне підтвердження особливо важливо.
Кнопка «Поділитися» відкриває системний share sheet з текстом адреси або URI. Це зручно при передачі адреси через мессенджер.
Для мереж з memo/tag (XRP, XLM, ATOM)—обов'язково відображати memo окремим полем з попередженням: «Без memo кошти можуть бути втрачені на біржі».
Сроки: 1–3 дні в залежності від кількості підтримуваних мереж. Одна адреса з QR—день. Мультисеть з перемикачем та різними URI-форматами—2–3 дні.







