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.