inizio
inizio

Se sei interessato all'informatica, potresti aver già sentito parlare del famoso bug dell'anno 2038, che interesserà tutti i sistemi informatici che utilizzano il timestamp Unix memorizzato come numero intero con segno a 32 bit. Su Bitcoin, questo bug non ci riguarderà. Tuttavia, anche i timestamp di Bitcoin hanno un valore massimo che non può essere superato. Questa soglia verrà raggiunta il 7 febbraio 2016.
Quindi l'anno 2106 segnerà la morte di Bitcoin? In questo articolo, facciamo con voi il punto su questo evento relativamente sconosciuto.
Nel protocollo Bitcoin, viene utilizzata una blockchain per evitare la doppia spesa. Ogni transazione viene inserita in un blocco con un intervallo di tempo. In altre parole, mettiamo un'ora e un giorno su ogni blocco per poterli mettere in ordine cronologico. Questo lasso di tempo è ciò che chiamiamo «timestamp».

Grazie a questo meccanismo, quando un nodo riceve una nuova transazione Bitcoin in attesa di conferma, può verificare che, in passato, quegli stessi Bitcoin non fossero già stati spesi. In questo modo, evitiamo una doppia spesa sul sistema, senza farlo affidare a un'autorità centrale.
Il timestamp è nell'intestazione di ogni blocco. È un numero intero a 32 bit basato sull'ora UNIX. Per determinare questo intervallo di tempo, contiamo il numero di secondi trascorsi dal 1 gennaio 1970 e otteniamo un numero intero. Ad esempio, quando scrivo questo articolo, sono trascorsi 1.693.498.694 secondi dal 1970. Tutto quello che devo fare è convertire questo numero intero in binario per ottenere il mio timestamp. In questo caso, questo ci darebbe: 01100101110001100100100101011111110. Ecco come si impostano i blocchi di timestamp su Bitcoin.

Il timestamp su Bitcoin viene eseguito su numeri interi senza segno a 32 bit. Ciò significa che puoi inserire 32 zeri o uno di seguito per rappresentare il tempo, ma non uno di più. Quindi c'è un limite all'interpretazione del tempo all'interno di Bitcoin. Il valore massimo utilizzabile è il seguente: 1111111111. In valore decimale, questo ci dà 4.294.967.295 secondi e questa volta corrisponde alla data 7 febbraio 2106.
Una volta superata questa data, il timestamp traboccherà e verrà azzerato. I sistemi informatici che utilizzano questo formato interpreteranno la data corrente come il 1 gennaio 1970, quando in realtà sarà il 2106.

Per comprendere meglio questo fenomeno, facciamo un'analogia. Alcuni vecchi contachilometri per auto sono limitati a 6 cifre. Di conseguenza, il valore massimo che può essere visualizzato è 999.999 km. Una volta raggiunto questo limite, il contatore torna a zero e ricomincia a contare dall'inizio. Tuttavia, i chilometri già percorsi dall'auto sono già stati percorsi. Pertanto, esiste una differenza tra il valore interpretato e il valore reale, a causa del numero di cifre che possono essere visualizzate. Per il timestamp su Bitcoin, è esattamente lo stesso principio.
Se non viene modificato nulla nel protocollo Bitcoin, questa discrepanza tra l'interpretazione del timestamp e la realtà significherà che non sarà possibile pubblicare nuovi blocchi. In effetti, ci sono due restrizioni sul timestamp di un blocco affinché venga accettato dai nodi:
Una volta che il timestamp a 32 bit raggiunge il suo valore massimo il 7 febbraio 2106, puoi comunque pubblicare un massimo di 6 blocchi (ciò è dovuto al fatto che il limite minimo è una mediana). Quindi, la blockchain dovrebbe interrompersi e non potrebbero essere confermate altre transazioni.
Fortunatamente, ci sono molte soluzioni per poter aggirare questa data e prevenire così possibili ripercussioni su Bitcoin.
📌 La differenza tra numeri interi a 32 bit con segno e senza segno sta nel numero di bit disponibili. Gli unsigned fanno pieno uso di 32 bit (è quello che abbiamo su Bitcoin), mentre quelli firmati riservano un bit per il segno, lasciando 31 bit per rappresentare un numero positivo (questo è ciò che viene utilizzato sui sistemi affetti dal bug 2038).
➤ Scopri di più sulla creazione di un blocco su Bitcoin.
Non preoccuparti, abbiamo ancora più di 80 anni per risolvere questo piccolo problema! Per fare ciò, esistono diverse soluzioni. La cosa più naturale sarebbe cambiare la dimensione del numero intero usato per scrivere il timestamp su Bitcoin. Potremmo quindi utilizzare numeri interi a 64 bit, il che ci consentirebbe di spingere il limite di tempo a diverse centinaia di miliardi di anni nel futuro.
Un'altra soluzione sarebbe mantenere un timestamp a 32 bit, ma interpretato come un numero intero a 64 bit. Solo gli ultimi 32 bit del numero intero verrebbero annotati nell'intestazione del blocco, ma ad ogni overflow, i nodi aggiungerebbero 2^32 al valore annotato per ottenere il valore reale. Gli overflow potrebbero essere rilevati dai nodi non appena il timestamp a 32 bit diminuisce drasticamente rispetto ai blocchi precedenti.
Tuttavia, queste due soluzioni sono hard fork. La comunità Bitcoin dovrà mettersi d'accordo nei prossimi 80 anni per prevedere questo cambiamento, prima che arrivi la fatidica data del 7 febbraio 2016.
➤ Scopri la differenza tra una forcella rigida e una forcella morbida.
Nelle intestazioni dei blocchi Bitcoin, il timestamp è un numero intero senza segno a 32 bit. Consente di associare un indicatore temporale al blocco. In questo modo, possiamo determinare l'ordine cronologico delle transazioni ed evitare così la doppia spesa di monete bitcoin.
Questo timestamp raggiungerà il suo valore massimo il 7 febbraio 2106 e causerà l'interruzione della blockchain di Bitcoin se non viene fatto nulla. Fortunatamente, questo bug non è solo molto remoto, ma anche molto facile da risolvere. Gli operatori di full node dovranno aggiornare il protocollo tramite un hard fork prima di questa scadenza. L'obiettivo sarà modificare l'interpretazione del timestamp intero o estenderne le dimensioni a 64 bit, consentendo così a Bitcoin di funzionare per qualche centinaio di miliardi di anni in più.
Risorse:

