Rodzina standardów BIP32 określa jak jednym sekretem kontrolować:
- dowolną liczbę adresów w ramach portfela
- dowolną liczbę oddzielnych portfeli bitcoinowych
- dowolną liczbę niezależnych kryptowalut (!)
Innymi słowy wystarczy jeden sekret aby trzymać razem bitcoiny, ethery, xrp, litecoiny, bch, monero, dashe, zcashe, cardano, i 400 innych dziwadeł. W zasadzie wszystko co bazuje na kryptografii klucza publicznego do podpisywania transakcji.
BIP32 jest powszechnie wykorzystywany w portfelach desktop, mobilnych i sprzętowych. Warto też zrozumieć, że jest to technologia z warstwy aplikacyjnej a nie protokołu czy konsensusu. Żadna kryptowaluta nie zależy od BIP32.
BIP39 Mnemonic Code
BIP39 omawiam tylko dlatego, że jest używany razem z BIP32, choć w zasadzie nie jest związany.
BIP39 mówi jak angielskie słowa (to co macie jako backup) zamienić na liczbę. Określa też, jak te angielskie słowa powinny być wygenerowane przez portfel. Wewnętrznie używane są indeksy słów w słowniku. Istnieją ustandaryzowane słowniki w kilku językach.
Wynikiem jest jedna liczba o długości 512 bitów - "binary seed".
Standardowe ścieżki w drzewie BIP32
Poniżej rodzina standardów BIP32 w notacji UML.
A <|---- B - oznacza że B jest szczególnym przypadkiem (doprecyzowaniem) A.
|------ BIP49
| SEGWIT-B/COMPATIBILITY
|
|------- BIP44 <|---------|------ BIP84
| COIN SEGWIT-NATIVE
|
|
BIP32 <|---------- BIP43 <|----------|------- BIP45
HDW PURPOSE | MULTISIG
|
|
|------- BIP47
| REUSABLE PAYMENT CODES
|
|
|------- (inne egzotyczne)
BIP32 definiuje jak powtarzalnie obliczyć drzewo liczb z jednej liczby. W praktyce jako tą źródłową liczbę używa się "binary seed" z BIP39. BIP32 nie definiuje natomiast co oznaczają poszczególne gałęzie i węzły w drzewie. Korzeń tego drzewa (master node) oznacza się literką m/. Widząc m/* wiemy, że chodzi o rodzinę standardów BIP32.
BIP43 definiuje, że pierwszy poziom powinien określać przeznaczenie/cel drzewa. W praktyce pierwszy poziom to numerek standardu. Na przykład drzewo m/44'/* ma być zgodne z BIP44.
BIP44 definiuje, że drugi poziom określa kryptowalutę. Dzięki temu jednym sekretem możemy pośrednio kontrolować wiele kryptowalut. Na przykład m/44'/0'/* to Bitcoin (0) natomiast m/44'/128'/* to Monero (128). Kryptowaluty mają przypisane konkretne numerki zgodnie z tabelą SLIP44 towarzyszącą BIP44. Trzeci poziom to "account", dzięki czemu możemy mieć kilka niezależnych portfeli tej samej kryptowaluty. Na przykład m/44'/2'/0'/* to pierwszy (0) portfel Litecoina (2).
BIP49 działa jak BIP44 plus określa, że to portfel z adresami segwitowymi w starej formie (P2WPKH-nested-in-P2SH). Rozróżnienie wprowadzono tylko po to, żeby lepiej obsłużyć sytuację, gdy użytkownik zaimportował portfel "segwitowy" do portfela klasycznego. Na przykład m/49'/0'/0'/* to pierwszy bitcoinowy portfel segwit z adresami kompatybilnymi wstecz.
BIP84 działa jak BIP44 plus określa, że to portfel z natywnymi adresami segwitowymi BECH32 (P2WPKH). Rozróżnienie z tego samego powodu co powyżej.
BIP45 definiuje klasyczny (P2SH) mutlisig ale tylko dla Bitcoina. Nie jest kompatybilny z wielowalutowością BIP44 bo powstał zbyt wcześnie.
BIP47 definiuje coś podobnego do stealth addresses. Stały adres na który można przyjmować płatności czy dotacje bez utraty prywatności. Zaimplementowane przez Samourai Wallet jako https://paynym.is/ Niestety standard dostał słabe opinie reviewerów i nie zyskał popularności.
Zalecenia praktyczne
Teoretycznie wszystko to powinno być wykrywane i obsługiwane automatycznie przez dojrzałe portfele HD - a przynajmniej przez ten sam portfel, którego oryginalnie używaliśmy.
Najlepiej jednak załączyć do backupu listę ścieżek (derivation paths) jakie wykorzystaliśmy. Ta informacja zawsze jest gdzieś dostępna. Będzie jedna ścieżka per końcowy portfel.
Dzięki temu nawet jeśli użyliśmy czegoś egzotycznego + portfel znikł z rynku + standardy się zmieniły - znajdziemy sposób na "odnalezienie" środków w drzewie.
Ścieżki nie są tajne. Można je trzymać w dowolny sposób.