Glossario / Indirizzi e chiavi
Derivazione BIP-84
- Che cos'è la derivazione BIP-84?
- La derivazione BIP-84 è lo schema che fissa a 84' il livello di scopo di un percorso BIP-32, così una sola frase di recupero produce indirizzi nativi SegWit bc1q che usano l'incapsulamento P2WPKH del BIP-141.
Specificato nel BIP-84.
BIP-84 riutilizza la struttura a cinque livelli del BIP-44 e cambia solo il valore di scopo. È stato assegnato il 28 dicembre 2017 e associa a ogni conto una chiave estesa zpub i cui byte di versione sono 0x04b24746. Per te decide se una frase di recupero ripristinata trova il tuo saldo bc1q o segnala un wallet vuoto.
Come funziona
BIP-84 fa due cose, e la prima è fissare un numero dentro un percorso. Le chiavi derivano dallo scheletro introdotto dal BIP-44, scritto m / purpose' / coin_type' / account' / change / address_index, e l'unico livello che questa specifica rivendica come proprio è lo scopo, fissato a 84'. Il tipo di moneta, il conto, il change e l'indice degli indirizzi mantengono i significati che il BIP-44 e il BIP-49 avevano già dato loro, e l'autore, Pavol Rusnak, riutilizza esplicitamente la motivazione del BIP-49 invece di ripeterla.
La seconda cosa è il formato dell'output. BIP-84 prende in prestito l'incapsulamento dal BIP-141: lo scriptPubKey è 0x0014 seguito dall'hash di 20 byte della chiave pubblica, lo scriptSig resta vuoto e il witness porta prima la firma e poi la chiave. Nulla in quell'output registra quale valore di scopo lo ha prodotto.
Le chiavi estese del ramo hanno byte di versione propri. Le chiavi pubbliche usano 0x04b24746, che si stampa come zpub, le chiavi private usano 0x04b2430c per zprv, e la testnet usa 0x045f1cf6 e 0x045f18bc per vpub e vprv. Quei valori non sono esclusivi di bitcoin. SLIP-0132, il registro che li raccoglie, elenca Groestlcoin e Syscoin sotto lo stesso 0x04b24746, perché il formato di serializzazione non ha alcun campo per il tipo di moneta, quindi una zpub ti dice il tipo di script e nulla sulla catena a cui appartiene.
La specifica si definisce "not backwards compatible by design" e afferma che un wallet incompatibile "will not discover accounts at all". È una scelta deliberata. Un valore di scopo separato tiene il software scritto prima di SegWit fuori da un conto che il software gestirebbe male, e un saldo che segna zero è un errore migliore di un wallet che si ripristina a metà in silenzio.
Dove lo vedi
BIP-84 compare in tre punti che il tuo wallet già mostra: il percorso del conto m/84'/0'/0', una chiave estesa che inizia con zpub e indirizzi di ricezione che iniziano con bc1q. SLIP-0132 abbina quella riga zpub per bitcoin al percorso m/84'/0', che è l'abbinamento che un'app dichiara quando te ne consegna una. Sparrow, valutato 4,7 nella nostra recensione, gestisce wallet a firma singola e multisig per i tipi di script comuni, quindi il conto che apri è quello che hai scelto e non un'impostazione predefinita ereditata.
La parte del documento che vale la pena prendere in prestito è il blocco dei vettori di test, che trasforma la domanda "questo wallet implementa il BIP-84 come tutti gli altri?" in un controllo che richiede un minuto. Il BIP pubblica i risultati per il mnemonico "abandon" ripetuto undici volte e poi "about":
- m/84'/0'/0'/0/0 dà bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu
- m/84'/0'/0'/0/1 dà bc1qnjg0jd8228aq7egyzacy8cys3knf9xvrerkf9g
- m/84'/0'/0'/1/0 dà bc1q8c6fshw2dlwun7ekn9qwf37cu2rn755upcp6el
Carica quella frase in un software che non conosci, su una macchina che non contiene bitcoin, scegli SegWit nativo e confronta il primo indirizzo di ricezione e il primo indirizzo di resto con quelle stringhe. Se entrambi coincidono, l'implementazione è d'accordo con lo standard anche sul ramo del resto, che è la metà che le persone dimenticano di verificare. Non inviare mai nulla a quegli indirizzi: il BIP stampa le chiavi private corrispondenti e SLIP-0132 stampa lo stesso mnemonico, quindi chiunque legga uno dei due documenti può spendere ciò che vi arriva.
Derivazione BIP-84 vs P2WPKH
La derivazione BIP-84 dice da dove viene una chiave, e P2WPKH dice come sono bloccati i bitcoin. Solo la seconda è una regola di consenso. Un wallet potrebbe derivare una chiave lungo un percorso che non contiene 84' da nessuna parte, bloccare l'output con lo stesso schema 0x0014, e l'indirizzo bc1q risultante sarebbe indistinguibile dal tuo on-chain. Quindi "un indirizzo BIP-84" è una forma abbreviata e non un'affermazione che un explorer possa stabilire, e il valore di scopo è qualcosa che annoti in una nota di backup, perché non potrai più leggerlo dalla blockchain in seguito.