Glossário / Nós e software
Cadeia de cabeçalhos
Outros nomes: Melhor cadeia de cabeçalhos.
- O que é a cadeia de cabeçalhos?
- A cadeia de cabeçalhos é a sequência de cabeçalhos de bloco de 80 bytes que um nó verificou, e pode estar milhares de blocos à frente dos dados de bloco que ele de fato baixou.
Um nó acompanha duas coisas ao mesmo tempo: os cabeçalhos em que acredita e os corpos de bloco que armazenou. Os cabeçalhos pesam 80 bytes cada um, então um ano deles, cerca de 52.560 blocos, chega a aproximadamente 4,2 MB. Essa diferença de tamanho é a razão pela qual uma carteira pode saber a altura atual da cadeia e o trabalho acumulado total muito antes de poder dizer o que há dentro de um bloco específico.
Como funciona
A cadeia de cabeçalhos é ordenada pela prova de trabalho acumulada, não por quantos blocos contém.
Cada cabeçalho nomeia seu bloco pai, então o conjunto de cabeçalhos sobre os quais um nó ouviu falar forma uma árvore e não uma linha. O ramo que carrega o maior trabalho total é a melhor cadeia de cabeçalhos, e o nó também lembra os ramos perdedores, caso um deles a supere mais tarde. O Bitcoin Core mantém essa árvore no índice de blocos, um pequeno banco de dados LevelDB no diretório blocks/index, totalmente separado dos arquivos de blocos brutos que contêm transações.
Como a árvore é mantida, um nó pode descrever sua própria incerteza. O comando getchaintips lista cada ponta que ele conhece com um status associado: active para o ramo que está seguindo, headers-only para um ramo cujos corpos nunca foram baixados, valid-fork para um ramo totalmente validado que perdeu a corrida, e invalid para um que quebrou uma regra. Uma reorganização não é nada mais do que o nó caminhar de uma ponta a outra por essa árvore depois que tem os blocos para isso.
Os cabeçalhos sobrevivem a coisas a que os dados de bloco não sobrevivem. Um nó podado apaga arquivos de blocos antigos para economizar espaço, e mesmo com prune=550, a configuração mínima que o Bitcoin Core aceita, ele mantém todos os cabeçalhos desde o bloco gênesis em diante. Sem eles não poderia verificar que um novo bloco é construído sobre a cadeia que já aceitou, então os cabeçalhos são a parte da qual ele nunca pode abrir mão.
Onde você vê isso
A cadeia de cabeçalhos é o número que seu nó informa quando diz o quanto está atrasado.
Execute getblockchaininfo e você obtém dois campos, blocks e headers. Headers é a altura da melhor cadeia de cabeçalhos, blocks é quanto dela foi baixado e totalmente validado, e a diferença entre eles é o trabalho que ainda falta. Em um nó sincronizado os dois coincidem, e um nó cujo valor headers está travado é um que perdeu contato com seus pares, não um que está apenas lento.
As carteiras leves não guardam nada mais. Uma carteira SPV ou um cliente de filtros compactos armazena apenas cabeçalhos e os usa para confirmar que uma transação na qual tem interesse está sob prova de trabalho real. A dificuldade também pode ser calculada a partir dos cabeçalhos, já que o alvo é redefinido a cada 2.016 blocos usando apenas os carimbos de data e hora e os valores nBits que já estão na cadeia, o que significa que um cliente pode verificar que o trabalho que está contando é genuíno sem nunca ver uma transação.
Cadeia de cabeçalhos vs cabeçalho de bloco
Um cabeçalho de bloco é um único registro de 80 bytes; a cadeia de cabeçalhos é todos eles ligados de volta ao bloco gênesis de 3 de janeiro de 2009. A distinção importa quando alguém diz que um cliente leve verifica a prova de trabalho. Um cabeçalho prova que um bloco foi caro de produzir. Somente a cadeia deles, cada um comprometendo-se com seu pai, prova que um bloco específico está atrás de uma sequência ininterrupta de trabalho caro que ninguém substituiu discretamente.