Pular para o conteúdo
buybitcoinsmart

Glossário / Transações e taxas

Altura de bloco no campo Coinbase

O que é a altura de bloco no campo coinbase?
A altura de bloco no campo coinbase é a altura do próprio bloco, escrita como os primeiros bytes do campo coinbase, exigida pelo BIP34 em todos os blocos desde março de 2013.

Especificação no BIP-34.

É a correção mais barata do bitcoin para um erro real. Antes da regra, dois blocos com transações coinbase idênticas produziam identificadores de transação idênticos, o que aconteceu nos blocos 91.842 e 91.880 em 2010. Escrever a altura torna cada coinbase única e permite que qualquer pessoa leia a posição de um bloco no próprio bloco.

Como funciona

A altura é armazenada como um push de script, então um analisador lê um byte de comprimento e depois essa quantidade de bytes de número.

O número é escrito em little endian e com codificação mínima, do mesmo modo que o script do bitcoin codifica qualquer inteiro. Nas alturas atuais ele ocupa três bytes, então o push lê 03 e depois a altura. O bloco 840.000, o bloco do halving, portanto abre sua coinbase com 03 40 d1 0c: um push de três bytes e depois 840.000 com seu byte menos significativo primeiro. Três bytes cobrem todas as alturas até 8.388.607, o que, com blocos de dez minutos, está a mais de um século de distância, e a codificação passa sozinha para quatro bytes quando esse dia chegar.

O BIP34 foi implantado como um soft fork ativado por mineradores e vinculado ao número de versão do bloco. Blocos que declaravam a versão 2 eram contados em uma janela móvel de 1.000: com 750 dos últimos 1.000, um bloco de versão 2 sem sua altura se tornava inválido, e com 950 o formato da versão anterior, a 1, era rejeitado de imediato. O último bloco de versão 1 já aceito foi o 227.835, com data de 24 de março de 2013, e o Bitcoin Core ainda fixa a altura de ativação em 227.931.

A regra também substituiu uma verificação cara por uma gratuita. O BIP30 já proibia que uma transação nova reutilizasse o identificador de uma existente não gasta, mas fazer valer essa proibição exigia uma consulta ao banco de dados para cada transação de cada bloco. Uma vez que toda coinbase é diferente por construção, identificadores duplicados não podem ocorrer, então os nós pulam essa consulta para tudo o que foi minerado depois da mudança. Uma regra de consenso que torna a validação mais rápida em vez de mais lenta é rara o bastante para merecer atenção.

Onde você vê isso

Qualquer explorador de blocos mostra o campo coinbase decodificado, e a altura é a primeira coisa nele.

Onde isso causa problemas é na mineração. Um pool monta sua própria transação coinbase a partir do modelo que seu nó fornece, e um pool que insere a altura errada, geralmente em uma corrida com um bloco que acabou de chegar, produz um bloco que todos os nós descartam com um erro bad-cb-height. A eletricidade é gasta, a prova de trabalho é válida e não há recompensa.

Isso também importa para quem demonstra algo sobre um bloco sem ter a cadeia inteira. Um cabeçalho de bloco não declara sua própria altura; você descobre isso contando para trás até o bloco gênese. Um bloco completo declara, em um lugar coberto pela raiz de Merkle e, portanto, pela prova de trabalho, então uma afirmação de altura respaldada por uma coinbase e um ramo de Merkle se sustenta sozinha. Sidechains, serviços de carimbo de tempo e protocolos de cliente leve se apoiam todos nessa propriedade.

Altura de bloco no campo Coinbase vs altura de bloco

A altura de bloco é uma posição na cadeia, um número que qualquer pessoa alcança contando para trás até o bloco que Satoshi minerou em 3 de janeiro de 2009. A altura de bloco no campo coinbase é esse mesmo número escrito dentro dos próprios dados do bloco porque o consenso exige. Uma é uma observação sobre onde um bloco está, a outra é um campo em que um minerador pode errar e perder um bloco por isso.

Não confundir com

Perguntas frequentes

Por que um bloco precisa declarar uma altura que bastaria contar?

Porque contar exige a cadeia inteira, e porque transações coinbase idênticas costumavam produzir identificadores de transação idênticos. Colocar a altura dentro do bloco torna cada coinbase única e torna a altura demonstrável apenas com o bloco.

O que acontece se um minerador escrever a altura errada?

Todos os nós rejeitam o bloco com um erro bad-cb-height e o minerador não ganha nada. O erro geralmente vem de um pool que monta um modelo para uma altura enquanto chega um bloco concorrente que move a ponta da cadeia.

Leia a seguir

Termos relacionados

Mais em Transações e taxas

Ler esta página em inglês