Vai al contenuto
buybitcoinsmart

Glossario / Mining e consenso

Radice di Merkle

Che cos'è la radice di Merkle?
La radice di Merkle è l'unico hash di 32 byte presente nell'intestazione di un blocco che impegna tutte le transazioni di quel blocco, nell'esatto ordine in cui il miner le ha disposte.

Cambia un satoshi in un pagamento, riordina due transazioni o aggiungine una, e la radice cambia del tutto. I miner si affidano a questo: il nonce da 32 bit offre solo circa 4,3 miliardi di tentativi, perciò il software di mining modifica la transazione coinbase per generare una nuova radice e continuare la ricerca. Per chi detiene bitcoin, quel singolo campo è la ragione per cui un blocco non può aggiungere o perdere silenziosamente un pagamento dopo essere stato minato.

Come funziona

La radice di Merkle viene calcolata e non scelta, ed è questo che le dà valore.

Occupa 32 degli 80 byte dell'intestazione, e il miner vi scrive il valore che le transazioni producono. Ogni nodo che riceve il blocco ricostruisce l'albero dall'elenco delle transazioni che gli è stato inviato e confronta il proprio risultato con l'intestazione. Una discordanza significa rifiuto, immediato e senza discussione. Non esiste alcuna versione del protocollo in cui l'intestazione dica una cosa e il corpo del blocco un'altra.

Quel controllo fa della radice il perno del ciclo di mining. Il nonce è largo solo quattro byte, cioè 4.294.967.296 valori possibili; una macchina che lavora a 200 mila miliardi di hash al secondo li esaurisce tutti in circa venti milionesimi di secondo. I miner hanno quindi bisogno di un modo per generare nuovi candidati, e il più economico è modificare la transazione coinbase. I pool inviano a ogni macchina la coinbase divisa in due metà con uno spazio vuoto in mezzo, la macchina scrive i propri byte in quello spazio, l'id della transazione coinbase cambia, la radice di Merkle cambia e diventano disponibili 4,3 miliardi di nuovi nonce. Variare il timestamp e i 16 bit di versione riservati dal BIP320 offre ulteriore margine.

Segregated witness ha aggiunto una seconda radice senza toccare l'intestazione, perché toccarla sarebbe stato un hard fork. Il BIP141 definisce un albero separato sugli id delle transazioni witness, la cui radice viene scritta in un output della transazione coinbase, contrassegnato dal prefisso di quattro byte 0xaa21a9ed. Poiché la coinbase è a sua volta una foglia dell'albero ordinario, quell'impegno witness finisce comunque per essere incorporato nella radice di Merkle dell'intestazione, a un livello di distanza.

Dove lo vedi

La radice di Merkle è uno dei campi che qualsiasi block explorer ti mostra, e uno dei pochi che puoi verificare a mano.

Bitcoin Core la riporta come merkleroot nell'output di getblockheader e getblock. Il valore del blocco genesi, che inizia con 4a5e1e4b, è un buon punto di partenza, perché quel blocco contiene una sola transazione: un albero con una sola foglia è la propria radice, quindi la radice di Merkle e l'id della transazione coincidono. Qualsiasi blocco che contenga solo una transazione coinbase ha la stessa proprietà.

La si vede anche nei protocolli di mining anziché nei blocchi. Una notifica di lavoro Stratum non invia affatto le transazioni al miner. Invia le metà della coinbase più il breve elenco di hash necessari per risalire dalla coinbase fino alla cima, così la macchina può calcolare da sola la radice per ogni extranonce che prova. Stratum V2 cambia chi seleziona le transazioni in primo luogo, ma la radice viene comunque assemblata allo stesso modo.

Radice di Merkle vs hash dell'intestazione del blocco precedente

La radice di Merkle e l'hash dell'intestazione del blocco precedente sono entrambi hash di 32 byte affiancati nella stessa intestazione di 80 byte, e i loro impegni vanno in direzioni diverse. La radice di Merkle punta verso l'interno, al contenuto di questo blocco: le transazioni, il loro ordine e nient'altro. L'hash dell'intestazione del blocco precedente punta all'indietro, all'intera storia che sta dietro. Modifica un pagamento e si rompe solo la radice di Merkle. Modifica un blocco dell'anno scorso e l'hash dell'intestazione del blocco precedente di ogni blocco successivo è sbagliato, ed è questa la differenza tra manomettere un blocco e manomettere una catena.

Da non confondere con

Domande frequenti

Che cosa succede se la radice di Merkle non corrisponde alle transazioni?

Il blocco viene rifiutato da ogni nodo. Ricostruire la radice dall'elenco delle transazioni è uno dei controlli più economici che un nodo esegue, quindi non c'è modo di pubblicare un blocco il cui contenuto differisca da ciò che la sua intestazione impegna.

Perché i miner cambiano la radice di Merkle durante il mining?

Perché il nonce si esaurisce. Quattro byte danno circa 4,3 miliardi di tentativi, che l'hardware moderno consuma quasi all'istante, perciò i miner modificano la transazione coinbase per produrre una nuova radice di Merkle e un nuovo lotto di candidati.

Leggi anche

Termini correlati

Altro in Mining e consenso

Leggi questa pagina in inglese