Merkle Trees e Merkle Roots
arbol-merkle-ejemplo.jpg
Merkle Trees: "Facciamolo"
Prendendo il nome dal professore di Stanford Ralph Merkle, gli alberi di Merkle e le radici di Merkle sono stati proposti come un nuovo processo di verifica dei dati nel suo articolo del 1979, "A Certified Digital Signature". Usando funzioni unidirezionali chiamate funzioni hash , un albero Merkle, chiamato anche albero hash binario, prende i dati e li esegue insieme per creare una radice Merkle che può servire come un modo per verificare i dati in un albero Merkle utilizzando molta meno memoria di metodi precedenti. Nella rete Bitcoin , una radice Merkle viene creata eseguendo l'hashing di tutti gli hash delle transazioni insieme a coppie, producendo un hash univoco per tutte le transazioni in un blocco.
Trent'anni dopo la pubblicazione di "Una firma digitale certificata", Satoshi Nakamoto ha scritto degli alberi di Merkle e ha persino incluso uno degli articoli di Ralph Merkle nei riferimenti per il white paper di Bitcoin. Senza gli alberi Merkle e le loro radici Merkle associate, il trasferimento di valore senza fiducia delle blockchain probabilmente non sarebbe stato possibile.
Merkle Trees e Blockchain
L'informatica usa il termine "albero" per descrivere qualsiasi cosa con una struttura dati ramificata. A differenza del tipo che consuma CO2, gli alberi Merkle hanno le foglie in basso e una singola radice in alto. Quando si tratta di blockchain, un albero Merkle ha tre componenti chiave:
  1. Nodi fogliari
  2. Nodi non foglia
  3. Radice di Merkle
In fondo all'albero di Merkle, ce l'haidifficoltà del blocco. Questi sono gli hash delle transazioni, più comunemente noti comehash rate, di ogni transazione crittografica in un blocco. Se cerchi una transazione su aaltezza del blocco, stai guardando l'hash della transazione.
Questi nodi foglia vengono quindi sottoposti a hash insieme a coppie per creare uno strato di nodi non foglia sopra i nodi foglia. Sono chiamati non-leaf perché, a differenza dei nodi foglia, non contengono ID di transazione (o hash) e invece memorizzano semplicemente l'hash dei due nodi foglia sotto di esso che rappresenta. Di conseguenza, il livello del nodo non foglia sopra i nodi foglia avrà la metà degli hash - o nodi - del livello del nodo foglia.
Questi livelli di nodi non foglia continuano a essere sottoposti a hash insieme a coppie, creando la metà dei nodi per livello man mano che l'albero si restringe durante la salita. L'ultimo livello del nodo non foglia conterrà due nodi. È qui che avviene l'hashing finale in un albero Merkle e crea la radice Merkle.
La radice di Merkle, attraverso il processo di hashing, può ora essere utilizzata per verificare i nodi foglia (ID transazione/hash) nella parte inferiore dell'albero di Merkle. Se hai familiarità con il funzionamento di Bitcoin , potresti sapere che gli hash delle transazioni vengono trasformati in un unico hash incluso nell'intestazione del blocco. Questo singolo hash è la radice di Merkle, a volte chiamata hash di radice.
Esempio di albero di Merkle Bitcoin
Mentre un blocco può contenere centinaia o migliaia di transazioni crittografiche, diamo un'occhiata a un esempio con otto transazioni:
  1. Gli otto hash di transazione, più comunemente noti come ID transazione, costituiscono il livello del nodo foglia nella parte inferiore dell'albero. Queste transazioni vengono sottoposte a hash insieme a coppie.
  2. Gli hash accoppiati creano quattro nodi non foglia, che non contengono hash di transazione. Questi nodi non foglia vengono quindi sottoposti a hash insieme a coppie.
  3. Questo crea altri due nodi non foglia nell'albero Merkle. Questi vengono quindi sottoposti a hash insieme in un abbinamento finale.
  4. Questo crea la singolare radice Merkle nella parte superiore dell'albero Merkle. La radice di Merkle contiene un singolo hash in grado di convalidare ogni singolo hash di transazione nel blocco. In quanto tale, una radice Merkle è inclusa nell'intestazione del blocco di ogni blocco sulla blockchain.
 
Gli alberi Merkle sono una struttura di dati binari che richiedono un numero pari di nodi foglia o hash di transazione. Se un blocco dovesse avere un numero dispari di hash di transazione, l'ultimo hash di transazione verrebbe raddoppiato e sottoposto a hash con se stesso. Ad esempio, se l'esempio precedente avesse sette transazioni, la settima transazione verrebbe duplicata e sottoposta a hash con la sua copia. Il resto dell'albero procederebbe quindi nello stesso modo dell'esempio di otto transazioni sopra.
Radici di Merkle nella Blockchain: perché?
In teoria, invece di utilizzare un albero Merkle, potresti semplicemente eseguire l'hashing di tutti i TXID insieme in un batch. Tuttavia, se lo facessi e volessi controllare una transazione specifica, dovresti conoscere ogni TXID nel blocco associato. Ciò richiederebbe molta memoria da archiviare e trasmettere attraverso la rete. Con un albero Merkle, puoi controllare un TXID usando la radice Merkle, senza dover conoscere ogni singolo TXID in un blocco. In sostanza, un albero Merkle è un ottimo modo per dimostrare che qualcosa si trova in un set di dati senza dover scaricare il set completo. Questo è il motivo per cui gli alberi Merkle sono considerati più efficienti nell'archiviazione e nella verifica dei dati delle transazioni rispetto al semplice hashing.
Di seguito sono riportati alcuni dei principali vantaggi dell'utilizzo degli alberi Merkle per le blockchain:
  1. Riducono significativamente la memoria necessaria per verificare che i dati abbiano mantenuto la loro integrità e non siano stati alterati.
  2. Richiedono meno dati da trasmettere attraverso la rete blockchain per verificare dati e transazioni. Ciò migliora l'efficienza di una blockchain.
  3. Consentono la verifica del pagamento semplice (SPV) , che ti aiuta a verificare una transazione senza scaricare un intero blocco o blockchain. Ciò ti consente di inviare e ricevere transazioni utilizzando un nodo client leggero, più comunemente noto come portafoglio crittografico .
 
Mentre i nodi completi proteggono la rete e memorizzano un'intera cronologia della blockchain, questi nodi leggeri possono utilizzare la radice Merkle nell'intestazione del blocco di un blocco per verificare una transazione. Poiché Bitcoin ha centinaia di migliaia di blocchi contenenti migliaia di transazioni ciascuno, questi nodi leggeri o portafogli crittografici non sarebbero in grado di funzionare in modo efficiente senza la blockchain che implementa l'albero di Merkle e l'architettura dei dati radice di Merkle.
Per mettere questo in un contesto più chiaro, ad aprile 2021 la blockchain di Bitcoin conteneva circa 330 gigabyte di dati. Inoltre, mentre la radice di Merkle inclusa nell'intestazione di un blocco è di soli 80 byte, un blocco Bitcoin completo è più di 1.000 volte più grande. Oltre a tutte queste considerazioni, un blocco Bitcoin Cash (BCH) è di 8 MB (più di 100.000 volte più grande dell'intestazione di blocco associata di 80 byte). Senza gli alberi Merkle, ogni singolo nodo della rete dovrebbe conservare una copia completa di ogni transazione che sia mai avvenuta su una blockchain: un'attività scoraggiante e ad alta intensità di memoria. Riesci a immaginare se dovessi archiviare 330 GB di dati sul tuo telefono solo per inviare e ricevere bitcoin utilizzando un portafoglio mobile?
Merkle Trees in Bitcoin e oltre
L'efficienza nell'archiviazione, nel trasferimento e nella verifica dei dati ottenuta dagli alberi Merkle è stata una componente tecnica chiave di Bitcoin che ha reso possibili le sue scoperte crittografiche. La struttura di archiviazione dei dati dell'albero di Merkle utilizzata su Bitcoin è utilizzata anche da Ethereum , dai fork di Bitcoin (BCH per esempio) e da molte altre reti blockchain pubbliche. Rendendo possibile l'SPV, le radici Merkle derivate dagli alberi Merkle consentono a persone in tutto il mondo di inviare, ricevere e verificare transazioni con portafogli crittografici che possono essere eseguiti facilmente e semplicemente su un personal computer o smartphone. Gli alberi Merkle aiutano le reti blockchain a verificare in modo efficiente e sicuro strutture di dati di grandi dimensioni andando alla radice Merkle del problema.