Glossario / Indirizzi e chiavi
Descrittore di output
Noto anche come Descrittore, Descrittore di script, Output descriptor.
- Che cos'è un descrittore di output?
- Un descrittore di output è una singola riga di testo che indica quale tipo di script, quali chiavi e quale ramo di derivazione deve usare un wallet, con un checksum in fondo.
Specificato nel BIP-380.
I descrittori esistono perché una chiave estesa da sola è ambigua. La stessa xpub può generare indirizzi legacy, SegWit annidati, SegWit nativi o Taproot, e solo la funzione che la racchiude risolve la questione. Bitcoin Core crea wallet di descrittori per impostazione predefinita dalla versione 23.0, pubblicata ad aprile 2022, e un backup multisig senza il suo descrittore spesso è irrecuperabile.
Come funziona
Un descrittore è una funzione applicata a un'espressione di chiave, seguita da un cancelletto e da otto caratteri di checksum. La funzione indica lo script: pkh per legacy, sh(wpkh(...)) per SegWit annidato, wpkh per SegWit nativo, tr per Taproot e wsh(sortedmulti(2,...)) per un vault 2-di-3.
L'espressione di chiave porta il resto. Le parentesi quadre contengono l'origine, cioè l'impronta digitale della chiave master e il percorso usato per raggiungere quella chiave, come in [1a2b3c4d/84h/0h/0h]. Segue la chiave estesa, poi un suffisso come /0/* dove l'asterisco è un carattere jolly che rappresenta a turno ogni indice di indirizzo. Un descrittore con un carattere jolly si dice con intervallo, e chiedergli gli indirizzi da 0 a 999 è una sola chiamata RPC invece di mille importazioni.
Ricezione e resto sono due descrittori, non uno, ed è per questo che i wallet li importano in coppie che terminano in /0/* e /1/. Il BIP-389 ha messo ordine con la notazione multipath, scrivendo la coppia come /<0;1>/ in un'unica stringa.
Il checksum è piccolo e cruciale. Il BIP-380 definisce un codice di otto caratteri sul testo del descrittore, pensato per intercettare il tipo di danno che capita davvero a una stringa lunga: un carattere scambiato, un incollaggio troncato, un a capo inserito da un client di posta. Bitcoin Core rifiuta qualsiasi descrittore il cui checksum non corrisponda, e getdescriptorinfo calcola quello corretto per una stringa che hai digitato tu.
Dove lo vedi
I descrittori sono il formato di backup per tutto ciò che è più complesso di un singolo seed. Sparrow, Nunchuk e Specter ne esportano uno per ogni wallet che creano, e un Coldcard scrive il descrittore su una microSD durante la configurazione del multisig, così che la disposizione possa essere ricostruita senza il software coordinatore originale.
Bitcoin Core è dove sono diventati standard. La versione 0.17.0, pubblicata a ottobre 2018, li ha introdotti per la scansione e la generazione di indirizzi; importdescriptors e listdescriptors li hanno resi la lingua nativa del wallet; e il wallet di descrittori è ora l'unico tipo che il software crea. Ripristinare un wallet Core da un descrittore più una nuova scansione è un percorso supportato, e uno che sopravvive alla reinstallazione del software da zero.
Con un semplice wallet a firma singola di solito puoi fare a meno di vederne mai uno, perché la tua frase di recupero e il percorso standard bastano. Con il multisig, il descrittore è la metà mancante del backup: tre frasi di recupero senza alcuna registrazione del tipo di script, dell'ordine delle chiavi o dell'origine di ciascun cofirmatario possono lasciarti incapace di ricostruire gli indirizzi in cui si trovano i tuoi bitcoin.
Descrittore di output vs chiave estesa
Una chiave estesa è un ingrediente e un descrittore è la ricetta. La xpub dice al software quali chiavi esistono; il descrittore gli dice cosa costruire con esse e da dove iniziare a contare. È per questo che importare una xpub in due app diverse può produrre due elenchi di indirizzi diversi, mentre importare lo stesso descrittore non può. Entrambi espongono la stessa privacy: chi detiene l'uno o l'altro può enumerare il tuo ramo, quindi un descrittore merita la stessa cura della chiave che contiene.