Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Bech32

Che cos'è Bech32?
Bech32 è la codifica degli indirizzi dietro le stringhe bc1q, un formato base32 in minuscolo la cui somma di controllo di sei caratteri rileva qualsiasi errore che interessi fino a quattro caratteri.

Specificato nel BIP-173.

Il BIP-173 ha introdotto bech32 nel 2017 per sostituire Base58Check negli output SegWit. L'alfabeto conta 32 caratteri e omette deliberatamente "1", "b", "i" e "o" perché i glifi simili non possano essere scambiati per errore, e nessuna stringa bech32 supera i 90 caratteri. Quando un wallet rifiuta un indirizzo nell'istante in cui finisci di incollarlo, è la somma di controllo bech32 che ha intercettato il danno.

Come funziona

Una stringa bech32 ha tre parti in ordine fisso: un prefisso leggibile, il separatore "1" e una sezione dati che termina con sei caratteri di somma di controllo. La mainnet usa il prefisso "bc", la testnet e la signet usano "tb", e la regtest usa "bcrt", così le lettere iniziali identificano la rete prima che un wallet decodifichi qualsiasi altra cosa. Il separatore è anche il motivo per cui "1" manca dall'alfabeto. Può quindi comparire una sola volta, al confine, e un parser trova la separazione scandendo da destra.

La somma di controllo è un codice BCH calcolato sull'intera stringa, prefisso compreso. Il BIP-173 garantisce il rilevamento di qualsiasi errore che interessi al massimo quattro caratteri e pone la probabilità di mancare un errore più grande sotto una su un miliardo. Base58Check non offre nulla di paragonabile: i suoi quattro byte finali sono un hash SHA-256 doppio troncato, che dice a un wallet che qualcosa non va senza precisare cosa.

Maiuscole e minuscole non hanno alcun significato. Un indirizzo bech32 è valido tutto in minuscolo o tutto in maiuscolo, mai misto, e i wallet mostrano la forma in minuscolo. Il BIP-173 chiede il maiuscolo dentro i codici QR, perché i caratteri alfanumerici maiuscoli sbloccano la modalità alfanumerica del QR, che comprime ogni carattere in 5,5 bit invece degli 8 richiesti dalla modalità byte, e produce un motivo più grossolano su cui la fotocamera di uno smartphone si aggancia più in fretta.

Dove lo vedi

Ogni indirizzo bc1q è bech32. Uno da 42 caratteri codifica un programma witness di 20 byte e paga a una singola chiave; uno da 62 caratteri codifica un programma di 32 byte e paga a uno script. Entrambi sono della versione witness 0, e la versione 0 è l'unica che bech32 può ora trasportare.

La codifica compare anche fuori dagli indirizzi. Le fatture Lightning secondo BOLT11 la prendono in prestito con prefissi come "lnbc", e ignorano consapevolmente il tetto di 90 caratteri, perché una fattura porta un hash di pagamento, un importo, una descrizione e suggerimenti di instradamento invece di un solo programma breve.

Dove fa male è nel modulo di prelievo di un exchange. Un validatore scritto prima del 2017 riconosce solo stringhe Base58 e risponde a un indirizzo bc1q perfettamente valido con "invalid address". È un limite della piattaforma e non del tuo wallet, e la soluzione è prelevare verso un tipo di indirizzo che la piattaforma accetta, derivato dallo stesso seed, invece di cercare un software diverso.

Bech32 vs Bech32m

Bech32 e bech32m differiscono per una costante e nient'altro. Entrambi usano lo stesso alfabeto, la stessa struttura e gli stessi sei caratteri di somma di controllo. Bech32m cambia il valore combinato nella somma di controllo da 1 a 0x2bc830a3, e la divisione è decisa dalla versione witness: gli output di versione 0 mantengono bech32, le versioni da 1 a 16 usano bech32m. Un software che li tratta come intercambiabili accetterà stringhe che dovrebbe rifiutare, ed è esattamente il guasto che il BIP-350 è stato scritto per prevenire.

Bech32 vs Base58Check

Bech32 e Base58Check sono codifiche concorrenti, non tipi di indirizzo concorrenti. Base58Check avvolge un byte di versione e un hash di 20 byte con una somma di controllo di quattro byte e produce le stringhe sensibili alle maiuscole che iniziano con 1 e 3. Bech32 codifica una versione witness insieme a un programma witness e produce stringhe insensibili alle maiuscole che iniziano con bc1. Nessuna delle due codifiche decide a cosa sono vincolati i bitcoin. Ciò che decidono è con quanta affidabilità una persona può copiare la stringa, quanto deve essere grande il codice QR e con quanta forza il software protesta quando manca un carattere.

Da non confondere con

Domande frequenti

Perché il mio exchange dice che un indirizzo bc1 non è valido?

Perché il validatore di indirizzi della piattaforma è stato scritto prima che bech32 esistesse e riconosce solo stringhe Base58. Il tuo indirizzo va bene. Preleva verso un formato che quella piattaforma accetta, derivato dallo stesso wallet, e sposta i bitcoin da lì.

Gli indirizzi bech32 distinguono maiuscole e minuscole?

No. Una stringa bech32 è valida tutta in minuscolo o tutta in maiuscolo, e mescolare le due cose la rende non valida. I wallet mostrano il minuscolo, mentre i codici QR usano il maiuscolo perché così si sblocca una modalità di codifica più compatta.

Leggi anche

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese