Parte I: Strutture dati e Sistemi 16
6. Sistemi 46
6.1. Bitcoin 48
6.1.1. Mining 49
Bitcoin è un’applicazione basata su blockchain, gestita da un
network peer to peer che implementa un protocollo di gestione
distribuito. Nella produzione dei bitcoin, detta mining, i nodi della rete utilizzano la propria potenza di calcolo per comporre e verificare i blocchi che registrano le nuove transazioni da aggiungere alla catena logica (cd blockchain). Questi complessi calcoli matematici devono essere convalidati da una proof of work, un dato particolarmente difficile
da ottenere76: l'operazione genera in output un blocco di bitcoin77 che
viene attribuito al primo computer che ha risolto il problema e viene aggiunto alla catena logica insieme a tutte le transazioni associate.
Il sistema è progettato per mantenere costante la velocità di produzione dei blocchi al tasso di un blocco ogni 10 minuti circa: l'effetto è dovuto all'aumento della difficoltà richiesta per la produzione della proof of work che cresce in maniera proporzionale alla potenza computazionale impegnata. La ricompensa per la produzione è invece soggetta a un decremento del 50% ogni 210.000 blocchi (corrispondenti a circa 4 anni di tempo) in maniera che, col passare del tempo, la
produzione di bitcoin tende asintoticamente a zero78: il sistema di
Nakamoto stabilisce infatti un numero massimo di bitcoin da produrre capire se due file sono identici o se siano intervenute modifiche, manipolazioni o corruzioni nel passaggio fra l’originale e la (presunta) copia.
76Vide https://fr.bitcoin.it/wiki/Preuve_de_travail: " La version la plus commune est
basée sur celle imaginée par David Chaum, utilisant une fonction de hashage. L'épreuve consiste donc, pour une chaîne alphanumérique donnée, à y concaténer une chaîne alphanumérique aléatoire jusqu'à ce que le hash de l'ensemble soit inférieur à un seuil donné."
77Stringhe alfanumeriche idonee al trasferimento in applicazione del protocollo. 78Originariamente ogni blocco consisteva di 50 bitcoin: la consistenza si è ridotta a 25
a far data dal 28/11/2012, mentre dal 9 luglio 2016 vengono prodotti dei blocchi da 12,5 bitcoin: https://blockchain.info/block-
index/322335/000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba1 71342e
entro l’anno 2140 di cui, ad oggi, sono stati prodotte oltre 16.400.000 unità; il limite è dato dall’applicazione dell’algoritmo di dimezzamento
del premio che consente la produzione di 20.999.999,9769 bitcoin79. Col
progredire delle operazioni, il mining richiede sempre maggior capacità
di calcolo ed energia: occorrono macchine dedicate80 le cui spese di
acquisto si sommano ai costi di produzione, calcolati in elettricità e
potenza di calcolo impiegate81, fissando così un floor al valore di cambio
dei bitcoin in moneta corrente.
Nel mining i nodi per competono tra loro per agganciare nuovi blocchi alla catena logica: ognuno di essi forma un blocco candidato che contiene le transazioni con le commissioni maggiori e quelle che il sistema impone di processare in forza della loro seniority; l’hash identificativo di ogni nuovo blocco candidato deve rispettare un formato particolare, che comincia con un numero determinato di bit a zero: per ottenere questo valore, i nodi includono nell’intestazione del blocco un valore detto nonce, acronimo di number used once, che serve a far coincidere l’hash con la soglia stabilita dal sistema. La corretta individuazione del nonce determina la proof of work: rendere l’hash del blocco conforme al formato richiesto richiede uno sforzo computazionale direttamente proporzionale alla potenza impiegata dal network, richiedendo uno sforzo eccessivo per un eventuale attacker. Il nonce è un numero di 32 bit la cui individuazione, allo stato dell’arte, richiede l’esame di un numero di poco inferiore alla soglia di 4 miliardi e 300 milioni di combinazioni; il numero iniziale di bit a zero viene stabilito dal sistema in maniera proporzionale alla potenza computazionale
79https://www.reddit.com/r/Bitcoin/comments/20etko/why_21_million/
Nell'agosto 2010 Il software di produzione ha dovuto essere riscritto a causa di un bug che aveva causato un errore detto integer overflow, a causa del quale il blocco 74638 conteneva due transazioni la cui somma era superore a 184 miliardi di bitcoin, una quantità evidentemente incompatibile con il numero di soluzioni finite dell'algoritmo.
Vide http://bitcoinmagazine.com/3668/bitcoin-network-shaken-by-blockchain-fork/
80https://en.bitcoin.it/wiki/Mining_hardware_comparison
impiegata dai nodi, misurata in hashrate/s cioè dal numero di hash che i nodi della rete riescono a calcolare in un secondo.
Il merito del lavoro svolto viene ricompensato attribuendo al nodo vincitore le fees collegate alle transazioni inserite nel blocco e un numero di nuovi bitcoin che varia nel tempo secondo le modalità previste dall’algoritmo di dimezzamento. Una volta agganciato il blocco candidato alla catena logica, i nodi riprenderanno l’attività computazionale formando nuovi blocchi candidati: le transazioni contenute nei vecchi blocchi candidati non ancora validate verranno inserite in altri nuovi e ricomincerà il calcolo della proof of work.
Ciascuna transazione viene confermata dalla generazione di 6 ulteriori blocchi il cui hash è sottoposto a verifica dai peer della rete man mano che eseguono i calcoli per la validazione dei blocchi successivi: l’operazione può richiedere fino a un massimo di 50 minuti di tempo dal momento in cui viene agganciato alla catena logica il blocco che contiene la transazione. In questo modo i nodi della rete procedono alla verifica e alla convalida dei pagamenti eseguiti, garantendo l'effettività delle transazioni: la continua esecuzione di calcoli matematici da parte dei miner evidenzia che il valore posto a base del bitcoin consiste non tanto in un bene, quanto nel servizio offerto.