Реализация адресной книги криптоадресов в мобильном кошельке
Адресная книга в крипто-кошельке — это не просто список строк. Это хранение данных, от правильности которых зависят реальные деньги. Отправить 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 дня.







