Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Bech32m

Che cos'è Bech32m?
Bech32m corregge un difetto di bech32 cambiando una costante nella somma di controllo, e ogni indirizzo Taproot che inizia con bc1p lo usa al posto della codifica originale.

Specificato nel BIP-350.

Il difetto è circoscritto ma reale. Ogni volta che una stringa bech32 termina con il carattere "p", inserire o cancellare un numero qualsiasi di caratteri "q" subito prima di quella lettera finale lascia valida la somma di controllo, quindi un indirizzo alterato può superare il controllo. Il BIP-350 chiude la falla combinando 0x2bc830a3 nella somma di controllo dove bech32 combinava il valore 1.

Come funziona

Bech32m è bech32 con un numero cambiato. Il codificatore espande il prefisso leggibile, aggiunge i dati, applica lo stesso polinomio BCH al risultato e differisce solo nell'ultimo passo, dove l'output viene combinato con 0x2bc830a3 anziché con 1. Tutto ciò che un lettore può vedere resta uguale: lo stesso alfabeto di 32 caratteri, lo stesso separatore "1", gli stessi sei caratteri di somma di controllo, lo stesso limite di 90 caratteri.

Cambiare la costante non è un effetto collaterale. È il meccanismo. Poiché i due schemi non concordano, una stringa bech32m non supera un controllo di somma bech32 e una stringa bech32 non supera quello di bech32m, così il software vecchio rifiuta del tutto gli indirizzi nuovi invece di comprenderli a metà. Il BIP-350 lo descrive come una rottura deliberata della compatibilità, scelta al posto di una correzione silenziosa di bech32 sul posto.

La linea di divisione è la versione del witness. La versione del witness 0, cioè gli indirizzi bc1q per chiavi singole e script, mantiene bech32. Le versioni del witness da 1 a 16 usano bech32m. Oggi è definita solo la versione 1, come Taproot, quindi in pratica bech32m significa bc1p. La regola è stata scritta per coprire versioni che non esistono ancora, ed è per questo che un wallet corretto controlla il numero di versione e non il prefisso dell'indirizzo.

Dove lo vedi

Un indirizzo di ricezione bc1p è bech32m, lungo 62 caratteri, e codifica una chiave di 32 byte. Sulle reti di test gli stessi output compaiono come tb1p. Gli output Taproot sono diventati spendibili al blocco 709.632 il 14 novembre 2021, ed è da quel momento che gli indirizzi bech32m hanno iniziato a trasportare valore reale sulla mainnet.

Bitcoin Core ha implementato il BIP-350 nella versione 22.0, e da quella release ogni chiamata di procedura remota che riceve un indirizzo richiede bech32m per la versione del witness 1 e superiori. La versione 23.0 è andata oltre: i wallet con descrittori creati da zero ricevono automaticamente un descrittore tr(), quindi forniscono indirizzi bc1p senza che venga chiesto.

L'attrito pratico si vede nella schermata di prelievo. Alcune piattaforme rifiutano ancora le destinazioni bc1p perché il loro validatore di indirizzi capisce bech32 ma non la costante più recente. In quel caso il tuo wallet non ha alcun problema, e un indirizzo bc1q dello stesso seed fa arrivare i bitcoin nello stesso wallet.

Bech32m vs P2TR

Bech32m è una codifica e P2TR è un tipo di output, e oggi corrispondono solo per una questione di tempistica. Bech32m dice come scrivere come testo qualsiasi programma di witness di versione 1 o superiore. P2TR dice che cosa significa un programma di versione 1: una chiave pubblica modificata (tweak) di 32 byte spendibile con una firma Schnorr o rivelando uno script. Ogni indirizzo bech32m in circolazione codifica un output P2TR, ma questo smette di essere vero nel momento in cui la versione del witness 2 viene assegnata a qualcosa, dato che quegli indirizzi sarebbero anch'essi bech32m e non sarebbero Taproot.

Da non confondere con

Domande frequenti

Devo fare qualcosa per bech32m?

No. È il tuo wallet a gestire la codifica. L'unico punto in cui diventa visibile è un servizio che rifiuta le destinazioni bc1p, e in quel caso la soluzione è prelevare verso un indirizzo bc1q dello stesso wallet.

Perché creare un secondo formato invece di correggere bech32?

Perché una correzione silenziosa lascerebbe il software vecchio e quello nuovo in disaccordo su quali indirizzi siano validi. Cambiare la costante della somma di controllo rende le due codifiche reciprocamente invalide, così i wallet non aggiornati rifiutano del tutto un indirizzo bech32m invece di leggerlo male.

Leggi anche

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese