Entriamo nel vivo

Diamo uno sguardo approfondito al mining e al suo funzionamento tecnico.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Mario invia 5BTC (Bitcoin) a Giulia - la premessa è che entrambi sono possessori di un portafogli BTC con chiave pubblica, e ognuno di loro conservi con attenzione la relativa chiave privata. La transazione specifica avrà un proprio codice hash, e sarà inserita in un blocco che ne avrà uno a sua volta (root Merkle).

Iniziamo a guardare come si forma il Merckle Tree (l'albero), date le transazioni a e b e la funzione dhash(X) = sha256(sha256(X)) ossia un doppio SHA256, ecco cosa accade:

d1 = dhash(a)

d2 = dhash(b)

d3 = dhash(d1 concat d2)

d3 rappresenta il Merckle root, ossia la radice hash derivante dal calcolo degli hash delle transazioni (foglie) concatenate tra loro:

Foglia 1: Mario -> 5BTC -> Giulia  - hash:

61BE55A8E2F6B4E172338BDDF184D6DBEE29C98853E0A0485ECEE7F27B9AF0B4

Foglia 2: Nino -> 2BTC -> Pippo - hash:

81CC5B17018674B401B42F35BA07BB79E211239C23BFFE658DA1577E3E646877

Radice: Merckle root:

SHA256(SHA256(61BE55A8E2F6B4E172338BDDF184D6DBEE29C98853E0A0485ECEE7F27B9AF0B481CC5B17018674B401B42F35BA07BB79E211239C23BFFE658DA1577E3E646877))=498FFB548E914EF994EBD305462EE00ABBD23FD598A454E21DCFD1E57505EECA

Vediamo com'è composto un block header, nella tabella che segue: 

Campo Descrizione Aggiornato quando.. Dimensione(Bytes)
Versione Block version number ... si aggiorna il software e specifica la nuova versione. 4
hashPrevBlock Hash a 256 bit dell'header del blocco precedente ... arriva un nuovo blocco 32
hashMerkleRoot Hash a 256 bit basato su tutte le transazioni del blocco ... una transazione è accettata 32
Time Timestamp al secondo, partendo da 1970-01-01T00:00 UTC ... a intervalli di qualche secondo 4
Bits Target in format compatto ... cambia la difficoltà 4
Nonce Numero a 32 bit (inizia da 0) Si prova un hash (incrementale) 4

Tratto da: https://en.Bitcoin.it/wiki/Block_hashing_algorithm

Il blocco contiene molte informazioni quindi: le transazioni, l'hash del blocco precedente già verificato, il Merckle root, il timestamp (data e ora) in Epoch Unix Time, il campo Bits che rappresenta la difficoltà che la rete ha calcolato ed il Nonce - un numero incrementale che servirà a calcolare l'hash di tutto al fine di raggiungere la verifica del blocco.

Le Radeon sono indicate per il mining

Sembra complicato e infatti lo è, ma cerchiamo di semplificare al massimo.

Ogni 10 minuti un gruppo di transazioni viene raccolto in un blocco; ognuna ha un proprio codice hash, che serve ai minatori per verificare le singole transazioni. Il minatore può verificarle tutte insieme calcolando l'hash dell'intero blocco, perché non si può alterare. I blocchi infatti formano una catena e l'header di ciascuno contiene il Merckle root hash, che è l'hash complessivo di tutte le transazioni contenute all'interno.

Inoltre proprio perché i blocchi formano una catena, e perché nell'intestazione di ognuno c'è anche l'hash del blocco precedente, se si tentasse di alterare un blocco l'hash cambierebbe e il sistema se ne accorgerebbe subito.