Download inicial de blocos e assumevalid

Como um nó novo sincroniza, e os atalhos que pode tomar com segurança.

Um nó completo novinho em folha precisa baixar e checar cada bloco desde 2009 antes de conhecer o estado atual. Isso é o download inicial de blocos (IBD), e é o trabalho mais pesado que um nó faz.

Cabeçalhos primeiro

O nó primeiro baixa só cabeçalhos de bloco, 80 bytes cada, até 2.000 por mensagem. Checa a prova de trabalho deles e escolhe a cadeia com mais trabalho. O Bitcoin Core também exige uma quantidade mínima de trabalho total (nMinimumChainWork), e primeiro checa os cabeçalhos de um peer antes de armazená-los, para que cadeias falsas de pouco trabalho não possam desperdiçar sua memória.

Blocos em paralelo

Com a cadeia de cabeçalhos conhecida, o nó busca blocos de vários peers ao mesmo tempo, até 16 em voo por peer, dentro de uma janela móvel de 1.024 blocos. Os blocos são então conectados em ordem. Cada um atualiza o chainstate.

Atalho 1: assumevalid

Checar cada assinatura é a parte mais lenta. Cada versão do Bitcoin Core inclui um hash de bloco recente. Com assumevalid, checagens de script e assinatura são puladas para aquele bloco e seus ancestrais, se estiver na cadeia sendo sincronizada. O Bitcoin Core 31.1 usa o bloco 938.343. Todo o resto ainda é verificado, e o conjunto UTXO é construído por completo. Para checar cada assinatura, inicie com -assumevalid=0.

Atalho 2: assumeutxo

Em vez de construir o conjunto UTXO do zero, um nó pode carregar um snapshot com loadtxoutset. O snapshot é rejeitado a menos que seu hash coincida com um no código-fonte. O Bitcoin Core 31.1 lista snapshots para as alturas 840.000, 880.000, 910.000 e 935.000. O nó fica utilizável perto da ponta rapidamente, enquanto checa a história completa desde o genesis em segundo plano.

O que deixa o IBD mais rápido

  • Um SSD em vez de um disco giratório.
  • Um -dbcache maior. Desde a versão 31.0, o padrão é 1.024 MiB em máquinas com pelo menos 4.096 MiB de RAM.
  • Uma boa conexão de rede.

Confiança

Ambos os atalhos se apoiam em valores revisados em público no código aberto. Não deixam um nó aceitar uma cadeia com menos trabalho, e ambos podem ser desligados.