L’aggiustamento della difficoltà
Nel precedente articolo abbiamo visto che ogni 10 minuti circa, tutti i miner della blockchain competono per risolvere l’ennesimo puzzle crittografico e aggiudicarsi la ricompensa economica in termini di bitcoin. È ragionevole aspettarsi che, al crescere del valore di questo asset, aumentino anche le entità interessate a entrare nel processo di mining, comportando un conseguente aumento della potenza di calcolo della rete. Tale potenza di calcolo viene definita in termini di numero di hash risolti al secondo: hashrate o H/s.
A causa di questo aumento, si avrebbe una diminuzione dei tempi di risoluzione della prova di lavoro; ma, come vedremo più avanti, è necessario che questa tempistica sia mantenuta costante per minimizzare gli sprechi energetici del sistema.
Come si fa quindi a mantenere costante il tempo di risoluzione di un blocco, mentre la potenza di calcolo della rete può variare a piacimento, sia verso l’alto che verso il basso? L’idea che ha avuto Satoshi Nakamoto, l’inventore di Bitcoin, è stata quella di utilizzare un parametro variabile per settare la difficoltà dei calcoli crittografici da eseguire, e regolarlo in maniera inversamente proporzionale alla potenza di calcolo del sistema.
Difficulty target
Questo parametro altro non è che l’obiettivo di difficoltà o difficulty target. Tale valore è stabilito a priori dall’algoritmo di Bitcoin e viene fornito a ogni nodo della rete sia per effettuare i controlli di validazione dei blocchi, che per consentire ai miner di calcolare l’hash dell’header del blocco attualmente in elaborazione.
Per comprendere meglio come opera questo parametro, è necessario avere ben a mente come funziona il sistema numerico esadecimale [1], su cui si basa la struttura degli hash di cui stiamo discutendo. Noto il funzionamento di questo sistema numerico, possiamo osservare che l’obiettivo di difficoltà non è altro che un numero binario di 256 bit, ossia 64 caratteri esadecimali, con all’inizio un certo numero di zero; per esempio:
000000000000000000044daaggg3f398aa755r28fd42426ad00fffe3d2ef40cc
Si capisce quindi che, aumentando o diminuendo il numero di zero in testa all’obiettivo di difficoltà, si diminuisce o si aumenta la probabilità di trovare una soluzione alla proof of work, che soddisfi tale vincolo. Infatti, tutte le volte che il numero di zero in testa aumenta di uno, lo spazio di ricerca delle possibili soluzioni del puzzle crittografico diminuisce, ossia aumenta la difficoltà d’elaborazione; viceversa, tutte le volte che il numero di zero in testa diminuisce di uno, lo spazio di ricerca aumenta, ossia si semplifica la difficoltà di calcolo.
Un esempio
Un esempio numerico può aiutare a capire meglio quanto appena asserito. Supponiamo per semplicità che l’attuale obiettivo di difficoltà sia il seguente:
00000000000000000000000000000000000000000000000000000000000fffff
vale a dire 59 “zero” iniziali seguiti da 5 “f”. Quando un miner tenta di determinare il nonce il cui hash risultante rispetti tale difficoltà, ha uno spazio delle possibili soluzioni pari a 69905 possibilità, in quanto
69905 = 160+161+162+163+164
Aumentando il numero di zero in testa al difficulty target, si ottine il seguente hash:
000000000000000000000000000000000000000000000000000000000000ffff
ossia 60 “zero” iniziali seguiti da 4 “f”, e quindi l’insieme delle possibili soluzione adesso è ampio
160+161+162+163
vale a dire 4396 possibilità, ossia circa un sedicesimo rispetto a prima (69905/16 ~ 4369).
Viceversa, diminuendo il numero di zero in testa al parametro, si ottiene il seguente hash:
0000000000000000000000000000000000000000000000000000000000ffffff
ossia 58 “zero” iniziali seguiti da 6 “f”, e quindi l’insieme delle possibili soluzione adesso è ampio 1118481 possibilità in quanto:
1118481 = 160+161+162+163+164+165
E in questo caso, si tratta di un valore maggiore circa sedici volte rispetto a prima (1118481/16 ~ 69905).
Aggiustamento del tempo di risoluzione
All’incirca una volta ogni due settimane, o meglio, ogni 2016 blocchi “minati”, l’algoritmo di Bitcoin controlla il tempo di risoluzione dei blocchi, per vedere se questo si è mantenuto intorno al valore di riferimento (10 minuti). In caso affermativo l’obiettivo di difficoltà rimane invariato: altrimenti viene regolato con un adeguato aggiustamento per ripristinare il disequilibrio introdotto sul tempo di calcolo a causa dell’oscillazione dell’hashrate del sistema.
La variazione massima che questo parametro può subire a ogni controllo è pari a un fattore 4, sia in aumento che in diminuzione; quindi, se la regolazione richiesta è maggiore di questo fattore, saranno necessarie più iterazioni per raggiungere l’obiettivo. Questo processo si chiama aggiustamento o retargeting della difficoltà di Bitcoin.
Sul sito btc.com [2] sono presenti i dati in tempo reale di tutti i parametri di cui abbiamo parlato in questo paragrafo. Come si può vedere, a oggi (giugno 2023), l’hash rate della rete supera i 365 EH/s (E = esa = 1018): un cifra enorme!
Il fenomeno dello halving e lo stock-to-flow
Bitcoin è progettato per avere un numero massimo di monete in circolazione pari a (quasi) 21˙000˙000, che saranno distribuite in maniera decrescente durante l’arco temporale 2009-2140, seguendo una logica di dimezzamento d’emissione delle nuove coin ogni 210˙000 blocchi “minati”, ossia all’incirca ogni 4 anni.
Questo processo di dimezzamento viene definito halving, e segue una curva d’emissione come quella riportata nella figura 1 (linea arancione). Come si vede dal grafico, agli albori ogni blocco minato ricompensava con 50 monete, dal primo halving (2012) questo numero è sceso a 25, dal secondo (2016) è sceso a 12.5; con il terzo, quello attuale, è arrivato a 6.25 e, per ogni successivo halving, si continuerà a dimezzare la reward dei minatori fino a raggiungere 0 all’incirca nel 2140. Quindi le ricompense per i minatori, che partecipano al funzionamento e alla sicurezza del sistema, diminuiscono nel tempo.
Garantire la sicurezza con le ricompense
Di conseguenza, con il dimezzamento delle ricompense, l’incentivo economico a far parte del network si affievolirebbe, e questo porterebbe Bitcoin a essere esposto a vari tipi di attacchi informatici, se queste quantità non venissero in qualche modo reintegrate.
Per ovviare a questo problema, l’inventore del sistema ha progettato l’algoritmo delle ricompense in maniera intelligente, ossia ha integrando la reward del blocco minato con tutte le commissioni pagate dai vari utenti che eseguono transazioni in quel blocco. Sebbene agli albori di Bitcoin questa frazione fosse insignificante rispetto alla ricompensa del mining, man mano che il tempo passa e bitcoin si apprezza di valore, le commissioni di transazioni diventano via via più significative, tendendo a essere la parte più importante dei guadagni dei minatori. In questo modo, si assicura l’incentivo economico a operare in un settore così competitivo e costoso anche quando la reward del blocco sarà 0.
Va notato come già ad oggi (giugno 2023) ci sono state alcune occasioni in cui il miner che ha risolto il blocco ha guadagnato di più dalle fee pagate dagli utenti che non dalla ricompensa del blocco!
Rarità delle monete
Una delle principali conseguenze che il fenomeno dello halving ha su Bitcoin riguarda il tema della scarsità, o meglio della rarità delle sue monete. Cerchiamo di approfondire questo argomento in maniera semplice ma esaustiva.
Per capire quanto una materia prima sia rara, ossia difficilmente inflazionabile da tutti gli attori di mercato, e quindi quanto sia il suo valore in termini monetari, si utilizza il cosidetto stock-to-flow ratio, o S2F, che è il rapporto fra la quantità esistente di quella commodity e la sua produzione annuale.
Detto in altri termini, lo S2F è un numero che definisce quanti anni sono necessari per raddoppiare la quantità in circolazione della materia prima che si stiamo valutando. Per esempio, a giugno 2023, l’oro ha uno S2F di ~63: questo vuol dire che, attualmente, per raddoppiare la quantità di oro disponibile nel mondo sono necessari circa 63 anni. L’argento, sempre a giugno 2023, ha uno S2F di ~25, il che spiega il suo minor voler economico: in molto meno tempo si può raddoppiare il circolante della commodity e far scendere il suo valore per unità, a causa della legge della domanda e dell’offerta.
Nota Bene: è la scarsità di una materia prima che ne defisce il suo valore economico! Si potrebbe obiettare che la scarsità da sola non è sufficiente a definire il valore economico di un bene, ma che questa vada considerata in relazione all’utilità di quel bene, e in effetti è così. Tuttavia, parlando di materie prime, ossia beni da cui derivano tutti gli altri beni, è sottinteso che queste risorse siano di elevata utilità!
Lo Stock to Flow di bitcoin
A questo punto è lecito chiederci quant’è lo S2F di bitcoin, ossia quanto questo sia scarso, così da poterlo paragonare alle commodities. Ebbene, proprio a causa del fenomeno dello halving, unito alla sua supply limitata (~21˙000˙000), questo parametro varia notevolmente nel tempo, subendo un incremento esponenziale con il passare degli anni.
Nella seguente tabella si può vedere il valore dello S2F di bitcoin al raggiungimento dei suoi primi halving.
Nel grafico di figura 2 si può osservare la comparazione fra lo stock-to-flow ratio di bitcoin e quello dell’oro e dell’argento, che subiscono piccolissime variazioni nel tempo.
A oggi, giugno 2023, lo S2F di bitcoin è paragonabile a quello dell’oro (nel 2017 era paragonabile a quello dell’argento), ma già dal prossimo halving lo stock-to-flow ratio di bitcoin sarà più del doppio di quello dell’oro, e continuerà a salire, diventanto +INFINITO nel 2140, quando finirà l’emissione di nuovi bitcoin durante il processo di mining. Quindi, bitcoin risulterà l’asset più scarso che sia mai esistito nel mondo e, se questo primato sarà accompagnato dal riconoscimento della sua utilità a livello di popolazione, avrà tutte le carte in regola per diventare la nuova riserva di valore globale.
Due considerazioni su bitcoin come riserva di valore
Va notato come, a differenza dell’oro che è materiale, l’immaterialità di bitcoin gli conferisce tutta una serie di vantaggi: facilità di custodia, velocità di spostamento, divisibilità elevata, possibilità di pagamenti online, non contraffattibilità, non confiscabilità, e così via.
E quindi, grazie a questo bene, saremmo capaci di preservare la nostra richezza nel tempo, anche per generazioni, senza la necessità di fare investimenti, più o meno rischiosi, per cercare di non perdere potere d’acquisto.
Il raggiungimento del consenso distribuito
Vediamo adesso come Bitcoin riesce a raggiungere il consenso in maniera del tutto naturale e spontanea. I fattori che concorrono a determinare un tale risultato sono tre:
- l’unanimità da parte di tutti gli attori del network;
- l’autonomia di ogni full node nell’eseguire alcune operazioni;
- l’utilizzo di incentivi per promuovere comportamenti corretti.
Vediamoli di seguito più in dettaglio.
Unanimità
L’unanimità da parte di tutti gli attori del network, nel riconoscere che la blockchain valida, ossia la catena detentrice della verità, è sempre quella più lunga, cioè quella che contiene più prova di lavoro al suo interno.
Autonomia
Ogni full node ha autonomia nell’eseguire le seguenti operazioni:
- verifica indipendente di ogni transazione;
- creazione indipendente del nuovo blocco e ricerca della relativa soluzione al POW;
- verifica indipendente di ogni blocco;
- aggregazione indipendente dei blocchi alla blockchain.
Incentivi
Un terzo fattore che facilita il raggiungimento del consenso distribuito è la presenza di incentivi per promuovere il corretto comportamento dei partecipanti al network, penalizzando al contempo chi cerca di operare in modo sleale.
Consenso distribuito e spontaneo
Dalla combinazione di questi elementi, si capisce che, il consenso in Bitcoin non è ottenuto in maniera esplicita attraverso un coordinamento dei vari attori della rete, ma si manifesta in maniera indipendente e asincrona su ogni nodo (distribuito), semplicemente grazie al rispetto delle regole codificate nell’algoritmo del sistema e alla teoria dei giochi a queste associata (spontaneo o emergente).
Grazie al consenso distribuito e al riconoscimento della catena più lunga come unica detentrice della verità, si può capire perché si parli di immutabilità della blockchain, ossia perché si considerino le transazioni qui contenute non più modificabili.
Le garanzie fornite dalla blockchain
Come abbiamo visto, ogni blocco valido aggiunto alla blockchain contiene al suo interno l’hash dell’header del blocco precedente, che a sua volta contiene quello prima ancora e così via a ritroso fino al blocco genesi. Inoltre, nell’header di ogni blocco è presente il campo merkle root, ossia una rappresentazione compatta di tutte le transazioni contenute all’interno di quel blocco. Quindi, alterare una qualsiasi transazione nel passato implica modificare il merkle root del blocco che la contiene e consumare molta energia per ricalcolarne l’hash dell’header.
A cascata, questa modifica implica di dover ricalcolare tutti gli hash degli header dei blocchi successivi, in quanto direttamente collegati, e spendere ancora più energia. Se ne deduce che più la transazione da alterare è “vecchia”, più lo sforzo energetico cresce perché aumentano i calcoli crittografici da compiere. Si può dimostrare matematicamente che, fino a quando il 51% dei nodi si comporta in modo onesto, una transazione contenuta in almeno 6 blocchi precedenti a quello attuale è immutabile, in quanto l’energia da spendere per tale operazione è infinitamente più grande di qualunque beneficio che si potrebbe ottenere da questa alterazione.
Nota Bene: proprio per questa ragione, quando si riceve una transazione Bitcoin, è buona norma aspettare un’ora prima di darla per certa e non alterabile, in maniera tale che siano stati generati altri 6 blocchi.
Conclusioni
In questo ottavo articolo della serie Bitcoin abbiamo continuato la panoramica sul funzionamento di questo sistema, arrivando ad approfondire i concetti di difficulty target, halving e consenso distribuito. Nel prossimo articolo completeremo il discorso sul funzionamento, affronteremo l’argomento del fork.
Riferimenti
[1] La voce Wikipedia “Sistema numerico esadecimale”
https://it.wikipedia.org/wiki/Sistema_numerico_esadecimale
[2] Dati sul Difficulty target & Hashrate
https://btc.com/stats/diff
[3] Dati sull’Halving di Bitcoin
https://www.bitcoinblockhalf.com/
[4] Dati sul modello Stock-to-Flow di Bitcoin
https://www.lookintobitcoin.com/charts/stock-to-flow-model/
[5] La voce Wikipedia “Teoria dei giochi”
https://it.wikipedia.org/wiki/Teoria_dei_giochi
[6] Andreas M. Antonopoulos, Mastering Bitcoin, 2nd edition. O’Reilly, 2017
https://www.oreilly.com/library/view/mastering-bitcoin-2nd/9781491954379/