Vai al contenuto
buybitcoinsmart

Glossario / Mining e consenso

Intestazione del blocco

Noto anche come Header.

Che cos'è l'intestazione del blocco?
L'intestazione del blocco è il riepilogo di 80 byte di un blocco: versione, hash dell'intestazione precedente, radice di Merkle, timestamp, nBits e nonce, ed è la parte di cui i miner calcolano davvero l'hash.

I miner non calcolano mai l'hash dei pagamenti direttamente. Calcolano l'hash di questo record di dimensione fissa, che vincola la lista delle transazioni tramite la radice di Merkle e ogni blocco precedente tramite l'hash dell'intestazione precedente. Ottanta byte per blocco sono abbastanza pochi perché l'intera catena di intestazioni da gennaio 2009 stia comodamente su uno smartphone, ed è proprio questo fatto che rende possibile la verifica leggera.

Come funziona

Un'intestazione di blocco è composta da sei campi in un ordine fisso, e i loro offset in byte non cambiano mai.

La versione occupa i byte da 0 a 3. L'hash dell'intestazione del blocco precedente occupa i byte da 4 a 35. La radice di Merkle occupa i byte da 36 a 67. Il timestamp, in secondi dall'epoca Unix, si trova nei byte da 68 a 71. nBits, il target di difficoltà codificato, si trova nei byte da 72 a 75. Il nonce occupa i byte da 76 a 79. Ogni campo è memorizzato in little endian, ed è per questo che l'esadecimale che vedi in un explorer sembra invertito byte per byte rispetto all'esadecimale di un dump grezzo del blocco.

L'hash del blocco non è uno di quei campi. Si calcola applicando SHA-256 due volte agli 80 byte, e i nodi lo ricavano invece di fidarsi di esso: è proprio per questo che un blocco non può mentire sulla propria identità. La proof of work è la stessa operazione con un confronto aggiunto: il numero risultante deve essere uguale o inferiore al target che nBits codifica.

Due dei campi seguono regole che sorprendono. Il timestamp non è tenuto a essere preciso. Deve solo superare il timestamp mediano degli ultimi undici blocchi e restare entro due ore dall'orologio del nodo che lo riceve, quindi intestazioni con orari leggermente fuori ordine sono normali e valide. Anche il campo versione non è più un semplice contatore. La segnalazione dei soft fork secondo il BIP9 e il version rolling secondo il BIP320 prendono entrambi in prestito dei bit da esso, quindi il numero di versione in un'intestazione moderna è un campo di bit e non un numero di rilascio.

Dove lo vedi

Le intestazioni dei blocchi sono la prima cosa che scarica un nuovo nodo e l'unica cosa che conservano molti wallet.

Bitcoin Core sincronizza prima le intestazioni dalla versione 0.10, rilasciata a febbraio 2015. Il nodo scarica e valida la catena di intestazioni, conferma che porti proof of work reale e solo allora richiede i corpi dei blocchi, cosa che può fare da più peer in parallelo perché sa già cosa sta cercando. I client leggeri si fermano a quel primo passo: un wallet SPV o Neutrino conserva le intestazioni e controlla che il ramo di Merkle di una transazione si colleghi a una di esse. A 80 byte ciascuna, una catena di 900.000 intestazioni è di 72 MB, ed è per questo che il tutto funziona con i dati mobili.

L'intestazione del blocco genesi è l'esempio canonico da esaminare. La sua versione è 1, il suo hash dell'intestazione precedente è tutto zeri, la sua radice di Merkle è 4a5e1e4b e così via, il suo timestamp è 1231006505, che è il 3 gennaio 2009, il suo valore nBits è 0x1d00ffff e il suo nonce è 2083236893. Puoi calcolare tu stesso l'hash di quegli 80 byte e ottenere il noto hash del blocco che inizia con dieci zeri. Se vuoi vedere qualsiasi altra intestazione, la chiamata RPC getblockheader di Bitcoin Core restituisce esattamente questi campi e nient'altro.

Da non confondere con

Domande frequenti

L'hash del blocco è memorizzato nell'intestazione del blocco?

No. L'hash del blocco si calcola applicando due volte SHA-256 all'intestazione di 80 byte, quindi ogni nodo lo ricava in modo indipendente. Nulla dentro un blocco dichiara il proprio hash.

Quanto è grande l'intera catena di intestazioni dei blocchi?

Circa 72 MB a un'altezza di 900.000 blocchi, dato che ogni intestazione è esattamente di 80 byte. È per questo che un wallet su smartphone può verificare la struttura della catena senza scaricare centinaia di gigabyte di dati delle transazioni.

Leggi anche

Termini correlati

Altro in Mining e consenso

Leggi questa pagina in inglese