Розробка мобільного HD-гаманця (BIP-39/BIP-44)
Ми часто бачимо, як команди намагаються реалізувати HD-гаманець, просто згенерувавши seed-фразу з бібліотеки й отримавши адресу, але при перенесенні фрази в MetaMask або Trust Wallet адреси не збігаються. Причина — ігнорування стандартів деривації (BIP-44) і відмінностей у кривих (secp256k1 vs Ed25519). У цій статті розберемо, як уникнути таких помилок і побудувати сумісний гаманець.
Як забезпечити сумісність HD-гаманця з MetaMask і Ledger?
Сумісність досягається точним дотриманням BIP-44 шляхів і використанням перевірених криптобібліотек. Наприклад, WalletCore (від Trust Wallet) підтримує 60+ монет і коректно обробляє hardened derivation для Ed25519. Починаємо з аудиту вимог: які монети, чи потрібна сумісність з конкретним гаманцем. Потім обираємо бібліотеку: WalletCore для iOS/Android або noble-curves + поліфіли для React Native. Ентропія генерується апаратно: SecRandomCopyBytes (iOS) або SecureRandom (Android).
Чому готові бібліотеки не вирішують усіх проблем?
Проблема 1: BigInt і нативні модулі
У React Native старі версії Hermes не підтримують BigInt. Бібліотека @scure/bip32 (noble-curves) вимагає його, і додаток падає з ReferenceError: BigInt is not defined. Рішення — явний поліфіл або перехід на react-native-quick-crypto з нативним модулем.
Проблема 2: Різниця кривих
BIP-32/44 спочатку писалися для secp256k1 (Bitcoin, Ethereum). Solana використовує Ed25519 і SLIP-0010 деривацію, де всі шляхи hardened. Якщо змішувати криві без урахування цього, адреси будуть невірними. WalletCore обробляє це коректно.
Проблема 3: Тестування сумісності
Вектори з BIP-39 та BIP-32 специфікацій — обов'язкова частина тест-сьюту. Якщо ваш mnemonicToSeed("abandon abandon ... about") видає не c55257... — у PBKDF2 баг. BIP-39 визначає тестові вектори для всіх kdf параметрів.
Як реалізувати HD-гаманець за 5 кроків?
- Аудит вимог: визначити монети, цільову платформу (iOS/Android/Flutter/RN) та необхідну сумісність з іншими гаманцями.
- Вибір бібліотеки: WalletCore (нативний або через Flutter/RN мости) або noble-curves з поліфілом BigInt.
- Генерація seed: апаратна ентропія з Secure Enclave/StrongBox, мнемоніка створюється за BIP-39.
- Деривація ключів: за BIP-44 для secp256k1 або SLIP-0010 для Ed25519, усі hardened шляхи.
- Тестування: юніт-тести на офіційні вектори та інтеграційні тести відновлення адрес.
Як ми будуємо реалізацію, що гарантує сумісність?
Структура гаманця в пам'яті:
HDWallet ├── mnemonic: String (тільки в пам'яті, ніколи в UserDefaults) ├── seed: Data (512 біт, ephemeral) └── accounts: [CoinType: [HDAccount]] ├── ETH: account 0 → m/44'/60'/0' ├── BTC: account 0 → m/44'/0'/0' └── SOL: account 0 → m/44'/501'/0'/0' Приватні ключі — у Secure Enclave (iOS) або StrongBox (Android). Seed та мнемоніка знищуються через Data.resetBytes / Arrays.fill(). Для мультиакаунту фіксуємо вибір account' або address_index у ТЗ.
Таблиця порівняння підходів:
| Параметр | WalletCore | noble-curves + поліфіли | bitcoinj |
|---|---|---|---|
| Підтримка Ed25519 | Так | Так | Ні |
| Кількість монет | 60+ | 3–5 вручну | Bitcoin only |
| Нативна продуктивність | C++/JNI | JavaScript | Java |
| Сумісність | MetaMask, Ledger | Залежить від бібліотеки | Bitcoin Core |
WalletCore забезпечує сумісність з 60+ монетами, тоді як noble-curves вимагає ручної реалізації для кожної, що у 5 разів збільшує час розробки.
Порівняння термінів по платформах:
| Платформа | Один блокчейн | Мультичейн (5 монет) | Аудит безпеки |
|---|---|---|---|
| iOS (Swift) | 1-2 тижні | 4-6 тижнів | +2 тижні |
| Android (Kotlin) | 1-2 тижні | 4-6 тижнів | +2-3 тижні |
| React Native | 1-2 тижні | 3-5 тижнів | +1-2 тижні |
Типові помилки при реалізації
- Зберігання seed-фрази в SharedPreferences/UserDefaults — грубе порушення безпеки. Використовуйте Secure Enclave/StrongBox.
- Ігнорування hardened derivation — при normal derivation витік child private key призводить до відновлення parent ключа.
- Змішування BIP-44 та SLIP-0010 — для Ed25519 всі шляхи hardened, для secp256k1 — mixed.
Що входить у нашу роботу
- Аудит вимог та вибір криптобібліотеки.
- Реалізація генерації та відновлення seed-фрази (BIP-39).
- Деривація ключів за BIP-44 та SLIP-0010.
- Інтеграція з Secure Enclave/StrongBox.
- Написання unit-тестів на офіційні вектори.
- Тестування сумісності з гаманцями (MetaMask, Trust Wallet, Ledger).
- Деплой в App Store/Google Play та документація.
Готові оцінити ваш проєкт? Зв'яжіться з нами — ми допоможемо реалізувати HD-гаманець під ключ з гарантією сумісності та безпеки.







