Glossário / Mineração e consenso
Bloco de versão 2
Outros nomes: Bloco V2.
- O que é um bloco de versão 2?
- Um bloco de versão 2 é um bloco cujo campo de versão do cabeçalho vale 2, a atualização que fez o BIP34 exigir a altura do próprio bloco como primeiro item do script coinbase.
Especificação no BIP-34.
Os números de versão de bloco antes tinham um sentido simples: 1 era o formato original, 2 acrescentou uma regra, e cada número novo tornava o formato anterior impossível de minerar. A versão 2 chegou com o BIP34, e o Bitcoin Core a aplica a partir do bloco 227.931. Nada do que você faz como comprador depende disso, mas todo explorador a exibe, e isso explica por que os scripts coinbase começam com um número.
Como funciona
Status: o campo de versão deixou de ser um contador em 2016, quando o BIP9 redefiniu seus bits superiores como um campo de bits de sinalização, de modo que um bloco moderno mostra um valor como 0x20000000 em vez de 2, 3 ou 4. A regra do BIP34 que a versão 2 introduziu é permanente e continua sendo verificada em cada bloco.
Os blocos de versão 2 existem para resolver um problema de identidade duplicada. Uma transação coinbase não tem entradas que a tornem única, então dois mineradores que por acaso usassem o mesmo script de saída e os mesmos bytes arbitrários no campo coinbase podiam produzir transações idênticas byte a byte, com o mesmo ID de transação. Isso não é hipotético: os blocos 91.842 e 91.880 continham cada um uma transação coinbase idêntica à de um bloco anterior, e a cópia posterior sobrescreveu o registro anterior no conjunto de saídas não gastas, destruindo bitcoins gastáveis. O BIP30 proibiu os duplicados de forma terminante como medida provisória, e o BIP34 eliminou a possibilidade na origem.
O mecanismo é pequeno. Um bloco de versão 2 deve começar seu script coinbase com a altura do próprio bloco, escrita como um número de script com codificação mínima. Como dois blocos não compartilham a mesma altura, duas transações coinbase nunca mais podem colidir. A implantação usou um limiar em vez de uma data fixa: assim que uma supermaioria dos blocos recentes trazia a versão 2, os blocos de versão 1 se tornaram inválidos, e a rede passou desse ponto em março de 2013.
O mesmo padrão se repetiu mais duas vezes. Os blocos de versão 3 tornaram obrigatória a codificação DER estrita das assinaturas no bloco 363.725, e os blocos de versão 4 trouxeram o OP_CHECKLOCKTIMEVERIFY no bloco 388.381. Depois disso a sequência parou, porque tratar um campo de 32 bits como contador desperdiçava 31 bits que o BIP9 transformou em sinais paralelos de atualização.
Onde você vê isso
A versão aparece na página de bloco de qualquer explorador e na chamada RPC getblock, tanto como version quanto como versionHex. Veja um bloco de 2011 e você vê 1; veja um de meados de 2013 e você vê 2; veja um de hoje e você vê um campo de bits.
A altura do BIP34 é mais fácil de identificar do que a própria versão. Decodifique qualquer script coinbase recente e os primeiros bytes são a altura, geralmente seguidos do texto de identificação de um pool e do espaço de nonce extra que o hardware de mineração percorre. Os exploradores costumam exibir essa parte final em ASCII, e é assim que a coinbase de um bloco revela qual pool o minerou.
Bloco de versão 2 vs transação de versão 2
Um bloco de versão 2 e uma transação de versão 2 compartilham um número e nada mais. A versão 2 de transação vem do BIP68 e ativa os bloqueios temporais relativos, permitindo que uma entrada exija que sua saída de origem tenha determinada idade antes de poder ser gasta. A Lightning Network depende disso para os tempos limite dos canais. A versão 2 de bloco vem do BIP34 e diz respeito à unicidade da coinbase. Objeto diferente, BIP diferente, ano diferente, e nenhuma relação além da coincidência de os dois contadores chegarem a 2.