Реалізація адресної книги криптоадрес у мобільному гаманці
Адресна книга в крипто-гаманці — це не просто список рядків. Це сховище даних, від правильності яких залежать реальні гроші. Відправити ETH на адресу з опечаткою — невідворотна операція. Тому адресна книга повинна вирішити дві задачі: зберігати адреси надійно й виключати помилки при вставці.
Валідація адрес — перше, що потрібно зробити правильно
Кожен блокчейн має свій формат адреси. Перевірка через регулярний вираз — недостатньо.
Ethereum / EVM-сумісні мережі. Адреса — 42 символи (0x + 40 hex). Але цього мало: потрібна EIP-55 checksum-валідація. Адреса 0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe з правильним регістром — це checksum-адреса. Без перевірки регістру можна прийняти bitflip-помилку. На мобільних використовуємо Web3j (Android) або web3swift (iOS).
Bitcoin. Base58Check для legacy (1...), Bech32 для SegWit (bc1...), Bech32m для Taproot (bc1p...). Бібліотека BitcoinKit для iOS, bitcoinj для Android.
Solana. Base58, 32 байти. Через @solana/web3.js у React Native або Solana.swift.
// Приклад EIP-55 валідації через web3swift
import web3swift
let address = EthereumAddress(userInput)
guard address != nil else {
showError("Некоректна адреса")
return
}
Зберігання
Зберігати адреси потрібно локально — Room (Android) або Core Data (iOS). Модель мінімальна:
@Entity(tableName = "address_book")
data class AddressEntry(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val label: String,
val address: String,
val network: String, // "ETH", "BTC", "SOL"
val memo: String? = null, // для XRP, ATOM, TON
val createdAt: Long = System.currentTimeMillis()
)
Поле memo (тег/мемо) критично для мереж Ripple, Cosmos, TON — без нього переведення піде не на той аккаунт на біржі. Про це поле часто забувають при первинному проектуванні.
Шифрування сховища: адресна книга — менш чутливі дані, ніж приватні ключі, але SQLCipher для Room або NSFileProtection.complete для Core Data не помішають.
UX: введення й вставка адреси
Три способи додати адресу:
- Вручну — з inline-валідацією після втрати фокусу
- Вставка з буфера — автоматично визначати, чи в clipboard'і є валідна адреса потрібної мережі, й показувати suggestion
- QR-сканер — через
MLKit Barcode Scanning(Android) абоAVFoundation+Vision(iOS)
Clipboard-моніторинг на iOS вимагає явного дозволу користувача починаючи з iOS 14 (UIPasteboard.general.detectPatterns). На iOS 16+ з'явився UIPasteButton — нативний спосіб без запиту дозволу.
Що входить у роботу
- Модель даних з підтримкою кількох мереж і memo-полів
- Валідація адрес (EVM checksum, Bech32, Base58Check)
- QR-сканер для додавання адреси
- Clipboard-детект з підказкою
- Локальне зашифроване сховище
- Пошук і сортування по label/network
Строки
Базова адресна книга для однієї мережі: 1 день. Мультисітьова з QR, clipboard-детектом і валідацією всіх форматів: 2–3 дні.







