23 / 736HDR

Block Header

cabeçalho do bloco

A pequena parte do bloco que liga seu conteúdo ao histórico anterior e permite verificar o trabalho de mineração.

O Block Header é um registro curto no início de um bloco de Bitcoin. Ele contém uma impressão digital do bloco anterior, uma impressão conjunta das transações e os dados necessários para verificar o Proof of Work. Os pagamentos ficam em outra parte do bloco.

Imagine o bloco como um pacote de transações e o cabeçalho como sua ficha de acompanhamento. Ele não apresenta uma lista de destinatários ou valores. Em vez disso, contém impressões digitais criptográficas: valores curtos calculados a partir de dados, que permitem detectar alterações. Uma aponta para o bloco anterior. Outra, chamada Merkle root, resume os identificadores das transações desse bloco. Assim, o cabeçalho liga um conteúdo específico a uma posição específica no histórico. Mas não é uma cópia em miniatura das transações: não é possível recuperar seu conteúdo a partir da impressão digital. [1] [4]

O minerador monta um bloco candidato e procura um hash adequado, uma impressão digital interpretada como número. Esse número deve ser menor ou igual ao alvo exigido. Essa busca é o Proof of Work: o minerador altera dados e repete o cálculo, porque não consegue simplesmente prever um resultado aceitável. A variável mais conhecida é o nonce, um número auxiliar no cabeçalho. Para obter mais possibilidades, ele pode alterar dados da Coinbase Transaction, a transação especial que cria no início do bloco. Isso também muda o Merkle root e produz outro cabeçalho. Os demais nós podem refazer rapidamente o cálculo para conferir o resultado. [1] [3] [4]

Uma cadeia de cabeçalhos permite acompanhar as ligações entre blocos e verificar o trabalho associado a eles sem baixar todas as transações. Mas imagine um bloco com Proof of Work válido no qual alguém tenta gastar fundos de outra pessoa sem a assinatura necessária. Verificar apenas o cabeçalho não revela esse problema. Um Full Node também verifica as transações, suas assinaturas, as saídas não gastas disponíveis e a recompensa permitida. Portanto, um cabeçalho válido não garante que todo o bloco seja válido. [2]

O campo nBits indica o alvo que o hash deve cumprir. É uma codificação compacta desse alvo, não o número “difficulty” mostrado pelo explorador de blocos. O nó também verifica se o alvo segue as regras para aquela posição na cadeia. Da mesma forma, o minerador não pode escolher qualquer horário. Ele deve ser posterior à mediana dos 11 blocos anteriores, o valor central quando seus horários são ordenados, e não pode estar muito adiantado no futuro. Ainda assim, esse dado não é o horário exato de cada pagamento nem um cronômetro da mineração. [2] [3]

A ordem e o tamanho dos campos são fixos: version ocupa 4 bytes, o hash do cabeçalho anterior 32, Merkle root 32, time 4, nBits 4 e nonce 4. São 80 bytes independentemente do número de transações. O identificador do bloco é produzido aplicando SHA-256 duas vezes ao cabeçalho codificado exatamente dessa maneira. Os campos numéricos usam little-endian, com o byte menos significativo primeiro; os hashes têm uma ordem interna diferente da apresentação habitual do identificador. Para reproduzir o cálculo, não basta juntar os valores como aparecem em um explorador. [1] [4]

Para ter uma visão mais completa, leia este verbete junto com Block, Proof of Work, Merkle Tree, Nonce. Também há referências a este verbete em Block, Hash, SHA-256, Merkle Tree.

DOC · 001Bitcoin Core v29.0: header serializationFonte primária DOC · 002Bitcoin Core v29.0: header validationFonte primária DOC · 003Bitcoin Core v29.0: proof of workFonte primária DOC · 004Bitcoin Developer Reference: Block HeadersFonte primária
Revisto em: Fontes em primeiro lugar · Não é recomendação de investimento