Vai al contenuto
buybitcoinsmart

Glossario / Nodi e software

Catena delle intestazioni

Noto anche come Header chain, Best header chain.

Che cos'è la catena delle intestazioni?
La catena delle intestazioni è la sequenza di intestazioni di blocco da 80 byte che un nodo ha verificato, e può precedere di migliaia di blocchi i dati dei blocchi che ha effettivamente scaricato.

Un nodo tiene traccia di due cose insieme: le intestazioni a cui crede e i corpi dei blocchi che ha memorizzato. Le intestazioni pesano 80 byte ciascuna, quindi un anno di intestazioni, circa 52.560 blocchi, arriva a circa 4,2 MB. È per questa differenza di dimensione che un wallet può conoscere l'altezza attuale della catena e il lavoro accumulato totale molto prima di poter dire che cosa contiene un determinato blocco.

Come funziona

La catena delle intestazioni è ordinata per proof of work accumulato, non per il numero di blocchi che contiene.

Ogni intestazione indica il proprio blocco padre, quindi l'insieme delle intestazioni di cui un nodo è venuto a conoscenza forma un albero, non una linea. Il ramo con il maggior lavoro totale è la migliore catena delle intestazioni, e il nodo ricorda anche i rami perdenti, nel caso uno di essi in seguito lo superi. Bitcoin Core conserva questo albero nell'indice dei blocchi, un piccolo database LevelDB nella directory blocks/index, del tutto separato dai file dei blocchi grezzi che contengono le transazioni.

Poiché l'albero viene conservato, un nodo può descrivere la propria incertezza. Il comando getchaintips elenca ogni punta che conosce con uno stato associato: active per il ramo che sta seguendo, headers-only per un ramo i cui corpi non sono mai stati scaricati, valid-fork per un ramo completamente validato che ha perso la corsa e invalid per uno che ha violato una regola. Una riorganizzazione non è altro che il passaggio del nodo da una punta all'altra attraverso quell'albero, una volta che ha i blocchi per farlo.

Le intestazioni sopravvivono a cose a cui i dati dei blocchi non sopravvivono. Un nodo potato elimina i vecchi file dei blocchi per risparmiare spazio e, anche con prune=550, l'impostazione più bassa accettata da Bitcoin Core, conserva ogni intestazione dal blocco genesi in poi. Senza di esse non potrebbe verificare che un nuovo blocco si costruisca sulla catena che ha già accettato, quindi le intestazioni sono la parte di cui non può mai disfarsi.

Dove lo vedi

La catena delle intestazioni è il numero che il tuo nodo cita quando ti dice quanto è indietro.

Esegui getblockchaininfo e ottieni due campi, blocks e headers. Headers è l'altezza della migliore catena delle intestazioni, blocks è la parte di essa che è stata scaricata e completamente validata, e la differenza tra i due è il lavoro ancora in sospeso. Su un nodo sincronizzato i due valori coincidono, e un nodo il cui valore headers è bloccato è un nodo che ha perso il contatto con i suoi peer, non uno che è soltanto lento.

I wallet leggeri non conservano nulla di più. Un wallet SPV o un client a filtri compatti memorizza solo intestazioni e le usa per confermare che una transazione che gli interessa si trovi sotto un proof of work reale. Anche la difficoltà è calcolabile dalle intestazioni, dato che il target viene ricalcolato ogni 2.016 blocchi usando soltanto le marche temporali e i valori nBits già presenti nella catena, il che significa che un client può verificare che il lavoro che sta contando sia autentico senza mai vedere una transazione.

Catena delle intestazioni vs intestazione di blocco

Un'intestazione di blocco è un singolo record da 80 byte; la catena delle intestazioni è l'insieme di tutte loro, collegate a ritroso fino al blocco genesi del 3 gennaio 2009. La distinzione conta quando qualcuno dice che un client leggero verifica il proof of work. Un'intestazione dimostra che un blocco è stato costoso da produrre. Solo la catena che le comprende tutte, ciascuna legata al proprio padre, dimostra che un determinato blocco si trova dietro una serie ininterrotta di lavoro costoso che nessuno ha sostituito in silenzio.

Da non confondere con

Domande frequenti

Perché un nodo potato conserva ogni intestazione?

Perché le intestazioni sono il modo in cui verifica che un nuovo blocco appartenga alla catena. Un nodo potato elimina i vecchi file dei blocchi per risparmiare spazio su disco, ma ha bisogno della catena ininterrotta di intestazioni da 80 byte per confermare che qualsiasi blocco in arrivo si costruisca sulla storia che ha già validato.

La catena delle intestazioni più lunga è sempre quella giusta?

No, lo è quella con il maggior proof of work accumulato. Il numero di blocchi e il lavoro totale di solito vanno di pari passo, ma la regola che i nodi seguono è il lavoro, ed è per questo che una catena di molti blocchi facili non può superare una catena più corta di blocchi difficili.

Leggi anche

Termini correlati

Altro in Nodi e software

Leggi questa pagina in inglese