Vai al contenuto
buybitcoinsmart

Glossario / Mining e consenso

Blocco Merkle

Noto anche come Merkle block, Ramo Merkle parziale.

Che cos'è un blocco Merkle?
Un blocco Merkle è la risposta che riceve un wallet leggero quando chiede il contenuto filtrato di un blocco: l'intestazione di 80 byte più solo gli hash necessari a dimostrare quali transazioni corrispondono.

Specificato nel BIP-37.

Il BIP37 permetteva a un wallet di consegnare a un nodo un filtro e di ricevere solo ciò che corrispondeva, avvolto in una prova che nulla era stato inventato. Il progetto fallì sulla privacy e sul carico: Bitcoin Core disattivò la funzione per impostazione predefinita nella versione 0.19.0, pubblicata a novembre 2019. Se usi un wallet leggero moderno, quasi certamente utilizza al suo posto i filtri compatti dei blocchi.

Come funziona

Stato: il filtraggio Bloom del BIP37, e il messaggio merkleblock che lo serve, è stato disattivato per impostazione predefinita in Bitcoin Core 0.19.0 a novembre 2019 per motivi di privacy e di negazione del servizio. I filtri compatti dei blocchi, specificati nei BIP157 e BIP158, lo hanno sostituito, e Bitcoin Core è in grado di servirli ai peer dalla versione 0.21.0 di gennaio 2021.

Un blocco Merkle è una prova, non un riassunto. La sua struttura ha quattro parti: l'intestazione del blocco, il numero totale di transazioni nel blocco, un elenco ordinato di hash e un campo di bit compatto di indicatori. Gli indicatori descrivono un percorso in profondità nell'albero Merkle del blocco e dicono al wallet che riceve se scendere in un ramo o prendere l'hash successivo dall'elenco come sostituto di tutto ciò che sta sotto. Il wallet ripete quel percorso, arriva a una radice e la confronta con la radice dell'intestazione che gli è stata consegnata.

Quel confronto è il punto centrale. Un peer ostile può nasconderti transazioni semplicemente non menzionandole, e nessun protocollo filtrato può impedirlo. Ciò che non può fare è inventare una transazione che non hai mai ricevuto, perché l'hash fabbricato non ricostruirebbe una radice che corrisponde a un'intestazione con alle spalle una proof of work reale.

Richiederne uno è uno scambio in due passaggi. Il wallet carica un filtro con un messaggio filterload, poi chiede un blocco usando il tipo di inventario di blocco filtrato invece di quello ordinario. Il blocco Merkle arriva per primo, seguito dalle transazioni corrispondenti complete in messaggi separati. Un blocco con 2.000 transazioni e una sola corrispondenza costa al wallet un'intestazione, una dozzina circa di hash e una transazione, invece di un megabyte o più.

Dove lo vedi

I blocchi Merkle appartengono a una generazione di wallet mobili in gran parte dismessa.

La biblioteca BitcoinJ li ha resi popolari, e i wallet Android costruiti su di essa hanno passato gran parte degli anni 2010 a sincronizzarsi in questo modo. Chi usa una vecchia build di una di quelle app può ancora inviare messaggi filterload e non trovare, senza alcun avviso, un peer disposto a rispondere, dato che per servirli un operatore deve aver riattivato a mano l'opzione peerbloomfilters.

Ciò che li ha sostituiti inverte il senso della richiesta. Con i filtri compatti dei blocchi il nodo pubblica un piccolo filtro per blocco che descrive ciò che quel blocco contiene, e il wallet scarica i filtri, decide localmente quali blocchi gli interessano e li scarica interi. Nulla riguardo agli indirizzi del wallet esce dal dispositivo. È il modello alla base del backend Neutrino di lnd e dei wallet Lightning mobili costruiti su di esso.

Vale la pena dire chiaramente il difetto di privacy, perché è il motivo del cambiamento. Un lavoro pubblicato nel 2014 da Arthur Gervais e coautori ha mostrato che un nodo che serviva un client con filtri Bloom poteva recuperare la grande maggioranza degli indirizzi di quel client, e che chiedere due blocchi con lo stesso filtro ne rivelava ancora di più. Il riempimento di falsi positivi che doveva nascondere il wallet non lo nascondeva.

Blocco Merkle vs filtro Bloom

Il filtro Bloom è ciò che un wallet invia verso l'alto; il blocco Merkle è ciò che torna verso il basso. Un filtro è una descrizione probabilistica e con perdita degli indirizzi e degli outpoint che interessano a qualcuno, e risiede sul nodo che serve. Un blocco Merkle è una prova deterministica su un blocco specifico, e risiede nella risposta. Sono stati deprecati insieme, ma solo il filtro era il problema di privacy. Le prove Merkle in sé vanno ancora bene, ed è per questo che i filtri compatti dei blocchi hanno mantenuto l'idea della prova e scartato la parte in cui racconti a uno sconosciuto ciò che possiedi.

Da non confondere con

Domande frequenti

I blocchi Merkle sono ancora usati?

Raramente. Bitcoin Core viene distribuito con il servizio dei filtri Bloom disattivato per impostazione predefinita dalla versione 0.19.0 di novembre 2019, quindi un wallet che chiede blocchi Merkle spesso non trova nessun peer disposto a rispondere. I filtri compatti dei blocchi sono il sostituto moderno.

I blocchi Merkle rivelavano i miei indirizzi?

Sì, in pratica. Una ricerca pubblicata nel 2014 ha mostrato che il riempimento di falsi positivi in un filtro Bloom non bastava a nascondere quali indirizzi stava osservando un wallet, quindi il nodo che rispondeva alle tue richieste poteva di solito identificare la maggior parte del wallet.

Termini correlati

Altro in Mining e consenso

Leggi questa pagina in inglese