inizio
inizio

Uno dei tanti meccanismi che permettono a Bitcoin di funzionare correttamente è la blockchain. Come avrai scoperto negli articoli del blog di Bitstack, la blockchain consente di evitare la doppia spesa della stessa moneta bitcoin (ciò che viene chiamato UTXO).
Come suggerisce il nome, questa blockchain è composta da blocchi. In questo articolo, esploriamo cosa sono realmente i blocchi Bitcoin e come viene costruito ogni blocco.
La blockchain è un registro che elenca tutte le transazioni Bitcoin. Viene utilizzato nel protocollo in modo che ogni utente sia a conoscenza delle transazioni passate. Grazie a ciò, possiamo dimostrare l'inesistenza di una precedente spesa in bitcoin e quindi evitare una doppia spesa.
Questo concetto è spiegato molto semplicemente nel White Paper di Bitcoin di Satoshi Nakamoto con la famosa frase:» L'unico modo per confermare l'assenza di una transazione è conoscere tutte le transazioni. »
L'obiettivo di questo registro è quindi quello di indicare la data e l'ora delle transazioni passate. Per poter dedicare un'ora a queste informazioni, le raggruppiamo in blocchi. Ogni blocco include l'impronta digitale del blocco che lo precede in modo da renderli immutabili, creando una sorta di catena. Ecco perché si parla di blockchain, o «blockchain» in inglese.

➤ Scopri di più sul ruolo della blockchain in Bitcoin.
Un blocco Bitcoin è composto principalmente da due parti distinte. La prima è l'intestazione, che contiene 80 byte di metadati. Il secondo è l'elenco delle transazioni eseguite.
Dall'aggiornamento SegWit del 2017, la dimensione di un blocco è determinata da un'unità virtuale chiamata peso. Il peso di un blocco viene calcolato sommando la sua dimensione reale a tre volte la sua dimensione, ma senza testimoni (firme). Il limite massimo è di 4 milioni di unità di peso. In teoria, un blocco Bitcoin SegWit può quindi avere una dimensione reale massima di poco meno di 4 MB. Tuttavia, la dimensione media effettiva del blocco ha normalmente oscillato tra 1 e 2 MB dal 2017.
L'arrivo del protocollo Ordinals su Bitcoin all'inizio di quest'anno 2023 ha influito sull'aumento di questa media. Da febbraio, i blocchi di Bitcoin hanno una dimensione media reale di quasi 3 MB.
La parte principale di un blocco Bitcoin è la sua intestazione. Quando parliamo dell'impronta digitale di un blocco, o del suo hash, è proprio l'intestazione che abbiamo passato due volte nella funzione di hash SHA256.
Per capire la composizione dell'intestazione di un blocco, la cosa migliore è studiarne una vera. Ecco le informazioni sul blocco n. 714 254, estratto da F2Pool il 15 dicembre 2021:
.png)
Se vuoi fare lo stesso sul tuo nodo Bitcoin, esegui il comando «getblockheader» seguito dall'impronta digitale del blocco desiderato su bitcoin-cli.
Grazie a questo comando, scopriamo diversi elementi sul blocco studiato. Non tutte queste informazioni sono incluse nell'intestazione. L'intestazione reale del blocco è composta da soli 6 elementi:

L'intestazione di un blocco Bitcoin contiene solo questi 6 elementi. L'ordine getblockheader Tuttavia, riceviamo altre informazioni che potrebbero essere interessanti da analizzare, ma che non fanno realmente parte dell'intestazione stessa:
Ora che abbiamo studiato la prima parte del blocco, ovvero il suo header, esaminiamo insieme la seconda parte del blocco Bitcoin.
Le transazioni in un blocco Bitcoin non sono semplicemente elencate una dopo l'altra. Sono invece organizzate in un accumulatore crittografico chiamato «albero Merkle». Ciò consente di produrre una radice Merkle, che è un riepilogo molto piccolo di tutte le transazioni del blocco.
Il suo principio è abbastanza semplice da capire. Ogni transazione viene prima passata attraverso una funzione hash. Gli hash risultanti vengono concatenati due a due (cioè messi da capo a capo). Quindi, vengono nuovamente passati attraverso una funzione hash. Continuiamo questo processo in questo modo finché non otteniamo un singolo hash chiamato «Merkle root».

Come visto in precedenza, questa radice Merkle viene quindi inclusa nell'intestazione del blocco. Ciò consente di rappresentare tutte le transazioni in modo condensato nell'intestazione. Pertanto, la minima modifica di una transazione passata cambia l'albero Merkle, quindi cambia anche la radice di Merkle e quindi cambia l'intestazione del blocco e la sua impronta. Poiché questa impronta digitale viene utilizzata nel blocco successivo, la minima modifica di una transazione passata interrompe definitivamente la blockchain di Bitcoin.
Dal 2017 e dall'introduzione di SegWit, i blocchi Bitcoin contengono effettivamente 2 alberi Merkle. Il primo contiene le transazioni senza il loro testimone e il secondo contiene il testimone per ogni transazione. La radice del secondo albero Merkle è inclusa nella transazione Coinbase in modo da poter rilevare le modifiche.

📌 La transazione coinbase è la prima transazione nel blocco Bitcoin. Consente al minatore vincente di raccogliere i bitcoin che gli spettano come ricompensa per il suo lavoro di mining. È composto dal premio coinbase, che emette nuovi bitcoin, e dalle commissioni di transazione incluse nel blocco.
Da qui deriva il nome «SegWit», che è l'acronimo di «Segregated Witness», che in francese significa «testimone separato».
Nel diagramma sopra, possiamo vedere che i testimoni, indicati «WTX», hanno il loro albero Merkle. La radice di questo albero viene inserita nella transazione coinbase. Anche le transazioni senza testimoni hanno il loro albero Merkle. La radice del secondo albero viene inserita nell'intestazione del blocco. Quindi, tutte le parti di tutte le transazioni del blocco sono condensate nell'intestazione.
La blockchain viene utilizzata su Bitcoin per evitare doppie spese. Funziona come un server di timestamp. Un blocco è quindi semplicemente un raggruppamento di transazioni Bitcoin con alcuni metadati. La sua struttura è divisa principalmente in due spazi: l'header e gli alberi Merkle.
L'header di un blocco è composto da 6 elementi: la versione, l'impronta del blocco precedente, la radice Merkle, il timestamp, il target di difficoltà e il nonce.
Le transazioni, invece, sono raggruppate in un albero Merkle. Questo accumulatore crittografico produce una radice che viene incrementata nell'intestazione del blocco per collegare tutto.

