Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Derivazione BIP-49

Che cos'è la derivazione BIP-49?
La derivazione BIP-49 colloca i conti SegWit annidati su un ramo dedicato in m/49'/0'/0', così un wallet che non riesce a leggerli non mostra nulla invece di un saldo errato.

Specificato nel BIP-49.

BIP-49 riserva il primo livello indurito dell'albero delle chiavi, 49', ai conti i cui indirizzi sono P2WPKH racchiusi dentro P2SH. È stato assegnato il 19 maggio 2016 e in seguito ha ottenuto i propri byte di versione per le chiavi estese, 0x049d7cb2 per ypub e 0x049d7878 per yprv. Se il tuo wallet esporta una chiave di conto che inizia con ypub, quello è il ramo che un ripristino deve percorrere.

Come funziona

BIP-49 risolve due questioni: quale ramo di un albero BIP-32 contiene le chiavi SegWit annidate e come si costruisce un indirizzo da una chiave su quel ramo.

Il ramo riprende il modello a cinque livelli che BIP-44 usava già, m / purpose' / coin_type' / account' / change / address_index, e cambia esattamente un numero. Il purpose diventa 49' invece di 44'. Coin type, conto, catena e indice mantengono i significati che BIP-44 aveva dato loro.

La parte dell'indirizzo è meccanica: si calcola l'hash della chiave pubblica compressa, si racchiude il risultato di 20 byte in un redeem script di 22 byte, poi si calcola l'hash di quello script per ottenere ciò a cui l'output si impegna. La specifica scrive i due pezzi come scriptSig: 0x160014{20-byte-key-hash} e scriptPubKey: 0xA914{20-byte-script-hash}87.

La parte interessante è l'opzione che l'autore ha scartato. Weigl elenca due approcci: mantenere il conto che già hai e agganciare gli indirizzi SegWit annidati alle stesse chiavi pubbliche, oppure creare conti dedicati sotto un nuovo purpose. Il primo è più comodo finché qualcosa non va storto, e allora, nelle parole della specifica, il conto "might show up but also it might miss some UTXOs". BIP-49 ha scelto i conti dedicati proprio perché quell'opzione "fails in a more visible way". Una schermata vuota è un messaggio di errore migliore di un numero sbagliato ma plausibile.

La serializzazione ha ricevuto lo stesso trattamento, alla fine: le chiavi pubbliche estese su questo ramo usano i byte di versione 0x049d7cb2, che in base58 danno il prefisso ypub, con 0x049d7878 per yprv e upub e uprv sulla testnet.

Dove lo vedi

BIP-49 si presenta come una chiave estesa che inizia con ypub invece di xpub, e come il conto SegWit annidato che un wallet elenca accanto a quello nativo. Mycelium, che questo sito valuta 3,7, porta conti SegWit nativi e annidati in un'unica app, i due schemi che SLIP-0132 registra sotto zpub e ypub.

Il prefisso ypub è stato aggiunto in un secondo momento, e quella storia si vede ancora. BIP-43, che ha inventato il livello purpose nel 2014, diceva agli implementatori di mantenere 0x0488B21E e il prefisso xpub per ogni purpose. BIP-49 è uscito così all'inizio, e SLIP-0132, creato l'8 febbraio 2018 per registrare i byte di versione come si deve, descrive il risultato senza giri di parole: il prefisso invariato ha portato a "unsustainable user confusion", perché o l'utente doveva ricordare da quale ramo veniva una xpub, oppure lo strumento ricevente doveva scansionare entrambi gli spazi di indirizzi. Un prefisso è un indizio, non una garanzia. Se incolli una chiave estesa in un block explorer e questo deriva indirizzi che iniziano con 1 mentre il tuo wallet mostra indirizzi che iniziano con 3, hai tra le mani una chiave BIP-49 con il prefisso più vecchio, e bisogna indicare il percorso allo strumento a mano.

La specifica include un vettore di test per la testnet su cui vale la pena verificare uno strumento: la frase abandon ripetuta undici volte seguita da about, radice del conto m/49'/1'/0', primo indirizzo di ricezione 2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2.

Derivazione BIP-49 vs SegWit annidato

La derivazione BIP-49 è una regola sulle chiavi, e il SegWit annidato è uno schema che la catena vede; i due di solito viaggiano insieme, ma nessuno dei due implica l'altro. Un output è SegWit annidato per lo script a cui si impegna, e nulla in esso registra quale percorso ha prodotto la chiave. Un wallet può costruirne uno da una chiave privata importata, o con l'approccio che BIP-49 ha scartato, che derivava un secondo indirizzo P2SH da chiavi pubbliche già presenti in un conto BIP-44. Sapere che i tuoi bitcoin sono su indirizzi 3 non ti dice quindi dove ripristinare, ed è per questo che il percorso del conto va annotato accanto al backup della frase di recupero.

Da non confondere con

Domande frequenti

Perché la mia chiave pubblica estesa inizia con ypub invece di xpub?

Perché è stata serializzata con i byte di versione che BIP-49 assegna a questo ramo, 0x049d7cb2, che in base58 danno ypub. Il prefisso è un'etichetta dello schema di derivazione, non un tipo diverso di chiave, e SLIP-0132 lo registra insieme a xpub e zpub.

BIP-49 è deprecato?

No. L'intestazione del BIP stesso riporta ancora Deployed, e i wallet che hanno creato conti sul ramo 49' continuano a derivarli normalmente. Nulla nella specifica ha ritirato il ramo, e i bitcoin che stanno sotto di esso non hanno bisogno di essere salvati.

Posso capire da un indirizzo se proviene da BIP-49?

No. Un output P2SH registra solo l'hash dello script a cui si impegna, quindi un indirizzo 3 non rivela nulla sul percorso che sta dietro. Annota il percorso del conto insieme al tuo backup invece di cercare di dedurlo più tardi.

Leggi anche

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese