Post
Topic
Board Italiano (Italian)
Merits 3 from 1 user
Topic OP
Vaore timestamp prossimo blocco dubbi e curiosità varie
by
Wrib
on 10/03/2025, 08:30:03 UTC
⭐ Merited by fillippone (3)
Ciao a tutti, stavo ripassando il meccanismo con cui viene deciso il timestamp da inserire nel prossimo blocco:

https://learnmeabitcoin.com/technical/block/time/


Affinchè il timestamp che un miner inserisce nel prossimo blocco sia considerato valido deve rispettare queste regole:

1)essere maggiore del timestamp mediano degli ultimi 11 blocchi
2)essere minore del "network adjusted time" + 2 ore

La condizione uno è un'informazione puramente onchain, il che la rende una normalissima condizione di validazione come tutte le altre.

La condizione 2 è una particolarità, è l'unica regola di consenso che non è basata su dai presenti nei blocchi ma su dati locali dei computer:

Quote
The two hour rule is really weird. It's the only 'consensus' rule that isn't based on blockchain data but on local data.
John Newbery, Bitcoin Core PR Review Club (Jun 19, 2019)

Questo "network adjusted time" è calcolato da ogni computer del network come il local time di se stesso (localhost) al quale somma gli offset dei locatime che gli comunicano i nodi diretti vicini, è una sorta di stima grezza del tempo attuale ottenuta mediando tra più nodi in modo da che le imprecisioni che possono esserci tra le varie macchine si compensino a vicenda. Qui è spiegato meglio: https://learnmeabitcoin.com/technical/block/time/#network-adjusted-time

Quindi tornando alla regola 2, in pratica per validare il timestamp di un nuovo blocco ogni nodo che lo riceve prende calcola il suo "network adjusted time" ci aggiunge 2 ore di sicurezza e considera valido il nuovo blocco se ha un timestamp minore di tale valore.

Qui c'è il mio dubbio: questa validazione si può fare solo quando si riceve l'ultimo blocco appena minato? Come si applica questa regola di validazione ai nodi vecchi già presenti in blockchain? Mentre il mio full node si sincronizza da zero e rivalida tutto dall'inizio, come fa a sapere quel'era il "network adjusted time" di un blocco del passato dato che è un'informazione che si basa sui dati locali del pc (il suo tempo macchina attuale) in un certo preciso momento?

Poi mi viene da pensare al caso di un "inverno del mining", immaginiamo l'evento estremo in cui il mining viene bannato in contemporanea in alcune nazioni del mondo, ma in modo repressivo andando proprio a sequestrare i datacenter senza permettergli di dislocare in altri luoghi del mondo la loro potenza di calcolo. L'inverno del mining durerà fino al raggungimento del blocco di fine epoca quando verrà riaggiustata al ribasso la difficoltà del mining.

Ci troveremo con una difficoltà elevata e una potenza globale di calcolo non sufficiente per creare un blocco ogni 10 minuti, probabilmente un nuovo blocco verrà creato mediamente ogni 20 minuti. Ma estremizziamo l'esempio e immaginiamo che un nuovo blocco in questo "inverno del mining" venga creato ogni 3 ore.

In questo caso penso di aver capito perchè il "network adjusted time" è basato su dati locali e non su dati onchain. Se fosse basato sul timestamp dell'ultimo blocco valido non si potrebbe più creare un blocco valido perchè il timestamp non sarebbe mai entro le 2 ore dall'ultimo. Ma essendo basato sui local time delle macchine non c'è questo problema.

Ho detto qualche inesattezza nel provare a ricostruire il maccanismo? Qualcuno ha delle considerazione/dubbi/curiosità ulteriori rispetto questo argomento? Grazie a tutti colore che parteciperanno alla discussione Smiley