Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/01028.jsonl.gz/1188

La difficoltà fa parte del sofisticato meccanismo che regola il funzionamento del network Bitcoin. Attraverso il processo di mining le transazioni vengono “messe al sicuro” grazie alla potenza di calcolo messa a disposizione dai miner, i quali partecipano ad una competizione che ha come ricompensa un certo numero di bitcoin. Tale numero viene dimezzato ogni quattro anni in seguito all’halving.
Cosa calcolano i miner?
I miner calcolano degli hash crittografici sull’head del blocco. Per ogni nuovo hash, il software di mining utilizza un numero casuale detto Nonce. Per far sì che l’estrazione di un blocco diventi un “lavoro” non semplice, il miner deve trovare un hash che sia inferiore ad un determinato numero.
La difficoltà è un numero che regola il tempo che impiegano i miner per estrarre il blocco successivo, che verrà poi aggiunto alla blockchain. In media questo tempo è di dieci minuti. Come detto la difficoltà si “aggiusta” ogni due settimane, in realtà ciò avviene ogni 2016 blocchi. Trascorso questo intervallo, ciascun nodo esegue una operazione che consiste nel moltiplicare il tempo atteso per i 2016 blocchi (2016 x 10 minuti) e divide il risultato con un numero che si ottiene dal prodotto del tempo effettivo per i 2016 blocchi. Quindi, se per esempio, il tempo effettivo impiegato è di 8 minuti, avremo che:
2016 x 10 / 2016 x 8 = 1.25
Quindi ogni nodo utilizzerà questo numero per settare la nuova difficoltà per i prossimi 2016 blocchi. Tenendo presente che la nuova difficoltà sarà ottenuta dal prodotto tra la difficoltà attuale e il risultato dell’operazione che abbiamo ottenuto in precedenza (nel nostro esempio 1.25)
Nuova difficoltà = difficoltà x 1.25
Relazione tra difficoltà e il target
L’average block time viene mantenuto tale attraverso la variazione della difficoltà. Per capire come questo avviene possiamo usare come esempio il gioco del lancio dei dadi.
Supponiamo di avere due dadi classici e di stabilire come regola, che il giocatore vince (e quindi ottiene una ricompensa) quando la somma risultante dal lancio dei dadi, è inferiore o uguale ad un numero stabilito precedentemente. Il numero da scegliere deve essere compreso tra 2 e 12. Se si sceglie un numero molto alto, per esempio 10, si avrà che la probabilità di trovare un numero inferiore o uguale a 10 è molto alta. Il giocatore in questo caso per perdere dovrebbe totalizzare o 6 più 5 o un doppio 6. Se però scegliamo un numero molto più basso, come può essere 4, i lanci da effettuare per avere un risultato uguale o inferiore a questo numero, dovranno essere molti di più. Questo numero, chiamato target value man mano che diventa piccolo determina un aumento della difficoltà. Quindi la difficoltà mostra una variazione del target dal suo valore originale.
Se il gioco fosse regolato da un software e si dovesse prevedere un tempo fisso di risoluzione, si andrebbe ad agire sul target per mantenere un tempo medio di vincita uguale a quello stabilito dal sistema.
La difficoltà in Bitcoin
La difficoltà in Bitcoin funziona in modo più o meno simile. I miner generano dei numeri con la speranza che uno di questi sia inferiore o uguale al target value. I numeri sono molto grandi, e sono esadecimali. Ogni blocco memorizza una rappresentazione compressa del target chiamato Bits. Il bits a tutti gli effetti è una versione abbreviata del target, introdotta per risparmiare spazio all’interno del block header.
La difficoltà viene “aggiustata” (retarget) ogni due settimane circa con lo scopo di mantenere invariato il tempo medio di estrazione man mano che si aggiungono nuovi nodi alla rete.