Se parti dalle basi, puoi fare un salto qui per capire su cosa si basa la Blockchain. La seconda premessa è che in questo articolo prenderò in esame la Blockchain di Bitcoin dato che non tutte funzionano ugualmente.
Entriamo nel vivo del discorso. Cos’è un blocco? Un blocco è semplicemente un’unità di dati della blockchain. Il tipo di dati può variare da blockchain a blockchain, ma nel caso di Bitcoin sono dei dati che contengono informazioni relative al blocco precedente, al blocco attuale e alle transazioni che questo blocco contiene. Se hai letto da qualche parte che il blocco è il contenitore in cui vengono inserite le transazioni…ecco…non è sbagliato, ma è molto riduttivo e ora ti spiegherò il perchè.
Prima di tutto devo spiegarti, per dovere di “linearità didattica”, il concetto di criptografia. La criptografia non è altro che prendere un messaggio e renderlo “segreto” tramite un insieme di regole, o algoritmo, predefinito. Il più antico algoritmo criptografico è il cifrario di Cesare in cui si traslavano le lettere di un certo numero di posizioni, così la parola “CIAO” diventa “EKCQ” se il numero di posizioni è 2. Come tutte le cose, anche la criptografia ha subito miglioramenti e, balzando ai giorni nostri, la Blockchain di Bitcoin utilizza come funzione criptografica lo SHA-256 (Secure Hash Algorithm). Tramite lo SHA-256 una stringa di lunghezza variabile viene convertita in un’altra stringa, chiamata digest o più impropriamente hash, di lunghezza fissa di 256 bit. Le particolarità che lo rendono sicuro sono l’impossibilità (finora) di ritornare al messaggio di origine e che la modifica di un singolo carattere va a cambiare totalmente l’hash finale.
N.B.: D’ora in avanti per hash intenderò la stringa derivata da una stringa sottoposta allo SHA-256, mentre quando utilizzo il verbo hashare andrò ad indicare l’azione per ottenere l’hash.
Passiamo ora a descrivere la struttura di un blocco. Un blocco è formato principalmente da 2 parti:
- header del blocco
- transactions list (o lista delle transazioni)
Partendo in ordine invertito, più semplice, la transactions list è l’elenco di tutte le transazioni che quel blocco andrà a contenere.
L’header del blocco, invece, si va comporre di ulteriori 6 parti:
- Version
- Previous Block Header Hash
- Merkle Root Hash
- Timestamp
- nBits o Target
- Nonce
VERSION
La version non è altro che la versione delle attuali regole che un blocco deve seguire per ritenersi valido.
PREVIOUS BLOCK HEADER HASH
In italiano hash dell’header block precedente che si ottiene hashando l’header del block precedente, Questa è una parte fondamentale del nuovo blocco perchè richiama in modo univoco il blocco precedente.
MERKLE ROOT HASH
Non mi addentro nei dettagli tecnici perchè è molto complesso. Per riassumere il Merkle Root viene prodotto hashando i singoli ID delle transazioni e poi due a due secondo uno schema ad albero (Merkle Tree) fino a ricavare solo un hash: questo sarà il Merkle Root del blocco (la figura sotto aiuta).
Esempio di Merkle Tree
TIMESTAMP
Indica in modo approssimato la data e l’ora in cui il blocco viene creato. Si esprime in secondi a partire dalla data 01/01/1970 detta Unix Epoch.
nBITS o TARGET
Questo valore rappresenta il target di difficoltà, cioè quel valore che l’hash del blocco non deve superare altrimenti viene ritenuto non valido. Questo target viene rimodulato ogni 2016 blocchi. Lo scopo di fissare un target di difficoltà è quello di garantire la creazione di un blocco ogni circa 10 minuti. Cosa succede dopo 2016 blocchi? Si fa un rapporto tra il tempo reale con cui sono stati prodotti questi blocchi e il tempo stimato. Se i blocchi sono stati prodotti troppo velocemente, si abbasserà il target di difficoltà in modo da rendere più laboriosa la produzione di un blocco valido.
NONCE
Nonce sta per number once used ed è quel numero che i miner devono calcolare per produrre un hash del blocco valido tramite un doppio hashing (la sicurezza non è mai troppa). La competizione dei miner sta proprio qui: calcolare per primi un nonce che, hashandolo con il resto dei dati dell’header, produca un hash del blocco valido.
Ora ti puoi chiedere: dopo tutto questo sforzo computazionale che cosa mi torna? Durante la creazione di un blocco, nella lista delle transazioni, il miner ha il diritto di inserire una transazione verso il suo wallet di una cifra attuale pari a 12.5 BTC. Questo, oltre a remunerare il miner, introduce nel mercato 12.5 BTC: ecco come i Bitcoin vengono estratti!!
Se sei arrivato fin qui per me sei un eroe, mi rendo conto che sono argomenti abbastanza tecnici e complessi da digerire. Ti ringrazio.
Un saluto!!
Luca
P.S.: Molte nozioni di questo articolo le ho ricavate dal libro “Mastering Bitcoin” che è stato un libro molto importante nella mia formazione. Se vuoi acquistarlo in lingua inglese clicca qui. Altrimenti la traduzione in italiano.