Blockchain/Nível III · A rede/3.1 Nós/Lição 3
Download inicial de blocos
Reconstruindo a história do zero: o custo da verificação independente
MateriaisUm computador com pelo menos 8 GB de RAM e um SSDSoftware Bitcoin Core (versão estável mais recente)Acesso ao terminal `bitcoin-cli`
Curiosidade
- Por que um novo nó baixa os cabeçalhos dos blocos antes de baixar quaisquer blocos?
- Quais verificações específicas são ignoradas quando ‘assumevalid’ está habilitado, e por que isso é seguro?
- Se a largura de banda é rápida o suficiente para preencher um disco em minutos, por que a sincronização inicial ainda pode levar dias?
Explorar
- Uma instância recém-instalada do Bitcoin Core contém apenas o bloco gênese, fixado diretamente em seu código-fonte. Ela não sabe nada sobre o comprimento ou a validade da cadeia. Ao se conectar a pares, ela inicia o Download Inicial de Blocos (IBD), um processo que reconstrói toda a história, desde 3 de janeiro de 2009 até a ponta atual da cadeia. Não se trata de uma cópia passiva; é uma reconstrução ativa na qual cada bloco é verificado segundo as regras de consenso, exceto pelos atalhos descritos abaixo, antes de ser aceito.
- Desde a versão 0.10 (2015), o IBD segue uma estratégia em duas fases. Primeiro, o nó baixa todos os cabeçalhos de bloco, que são compactos e rápidos de transmitir. Ele verifica a prova de trabalho desses cabeçalhos para confirmar que atendem à meta de dificuldade, construindo uma cadeia de trabalho sem ainda verificar a validade das transações. Uma vez estabelecida a cadeia de cabeçalhos, o nó solicita os blocos completos a vários pares em paralelo, validando-os sequencialmente à medida que chegam.
- A validação de transações é computacionalmente custosa devido às verificações de assinaturas criptográficas. Para acelerar a sincronização, a versão 0.14 (2017) introduziu o parâmetro ‘assumevalid’. Esse parâmetro pula a verificação de assinaturas de todos os blocos situados abaixo de um hash, fixado no código, de um bloco amplamente revisado. O nó ainda verifica todo o resto, incluindo a prova de trabalho, os valores e o conjunto UTXO; apenas as verificações de script e de assinatura são puladas para essa parte mais antiga do histórico. Você pode desativar esse atalho para verificar cada assinatura desde o bloco gênese, ao custo de tempos de sincronização significativamente mais longos.
- As versões recentes oferecem o ‘assumeUTXO’, um recurso experimental que permite que um nó comece a partir de um snapshot pré-computado do conjunto atual de UTXOs. O nó se torna utilizável rapidamente, enquanto verifica todo o histórico em segundo plano. Até que essa verificação seja concluída, ele confia em um snapshot cujo hash está fixado no código do software (o arquivo em si pode vir de qualquer lugar); depois disso, ele fica totalmente independente.
- A duração do IBD varia muito conforme o hardware. Em uma máquina moderna com SSD rápido e 8 GB de RAM, a sincronização pode levar horas. Em dispositivos limitados, como um Raspberry Pi, pode levar vários dias ou mais. O gargalo raramente é a largura de banda; é a velocidade de gravação em disco para o cache UTXO (dbcache) e os ciclos de CPU para a validação de scripts. Um disco rígido lento vai travar o processo mesmo com internet gigabit, já que o nó precisa ler e gravar o estado constantemente.
- Uma vez sincronizado, o nó alcança a ponta da cadeia válida com mais trabalho acumulado. Ele deixa de ser um observador e passa a ser um participante pleno, capaz de retransmitir transações e blocos para seus pares. O comando `bitcoin-cli getblockchaininfo` mostra esse progresso por meio do campo `verificationprogress`, que se aproxima de 1,0 à medida que a cadeia histórica é validada. Nesse ponto, o nó possui uma cópia completa e verificada de forma independente da história do dinheiro.
Fatos-chave
- A versão 0.10 do Bitcoin Core (2015) introduziu a sincronização com cabeçalhos primeiro (headers-first) para otimizar o download inicial de blocos.
- O parâmetro ‘assumevalid’, da versão 0.14, pula as verificações de assinatura para blocos abaixo de um hash fixado no código, a fim de acelerar a sincronização.
- O ‘assumeUTXO’, introduzido de forma experimental nas versões recentes, permite que os nós comecem a partir de um snapshot de UTXOs e verifiquem o histórico em segundo plano.
- A velocidade de escrita em disco e a alocação de memória para o cache UTXO costumam ser gargalos mais significativos do que a largura de banda durante o IBD.
- Um novo nó valida os blocos sequencialmente, mesmo que eles sejam baixados em paralelo de vários pares.
- `bitcoin-cli getblockchaininfo` exibe `verificationprogress`, indicando quanto da cadeia foi validado.
Exercício nove, seis, três, um
9ReunirListe 9 configurações de hardware distintas (CPU, RAM, tipo de armazenamento) usadas para executar nós Bitcoin. Indique o tempo típico de sincronização relatado para cada uma em uma instalação nova.
6AgruparAgrupe estas 9 configurações em 6 categorias com base em seu gargalo principal: limitado por CPU, limitado por RAM, limitado por disco/I/O, limitado pela largura de banda ou equilibrado.
3DestilarReduza os 6 para 3 fatores que mais determinam quanto tempo leva a sincronização inicial.
1CristalizarEscreva uma frase explicando o trade-off entre velocidade de sincronização e independência criptográfica no download inicial de blocos.
Verificação de fatos
Datas, números e afirmações verificados com as fontes publicadas listadas abaixo.