Glossário / Transações e taxas
Número de versão da transação
- O que é o número de versão da transação?
- O número de versão da transação é os primeiros quatro bytes de uma transação e informa aos validadores quais conjuntos de regras opcionais, como os bloqueios temporais relativos, se aplicam a ela.
Apenas três valores já significaram alguma coisa. O campo não é uma versão de software, não é uma versão de protocolo e não é uma pista sobre quais tipos de endereço estão dentro, que é a maior parte do que as pessoas supõem quando o vê pela primeira vez. O consenso é em grande parte indiferente a ele, enquanto a política de retransmissão não é, e essa diferença é toda a história do campo.
Como funciona
A versão ocupa os bytes 1 a 4 da forma serializada, antes da contagem de entradas, e o Bitcoin Core a lê como um número inteiro de 32 bits com sinal.
A versão 1 é a original, usada por todas as transações nos primeiros anos da cadeia. A versão 2 existe porque o BIP68 precisava de uma forma de reinterpretar os números de sequência como bloqueios temporais relativos sem invalidar transações mais antigas, então associou o novo significado a um aumento de versão. A partir do bloco 419.328, em julho de 2016, os números de sequência de uma transação que declara a versão 2 são verificados como períodos de espera, e os de uma que declara a versão 1 não são. As carteiras modernas definem a versão 2 por padrão, usem ou não bloqueios temporais, e é por isso que quase tudo o que você consulta em um explorador de blocos indica 2.
A versão 3 chegou com o Bitcoin Core 28.0 em outubro de 2024, sob o nome de topology restricted transactions, ou TRUC. Declarar a versão 3 significa optar por um acordo mais estrito: a transação é sempre tratada como substituível, pode ter no máximo uma transação pai não confirmada e uma filha não confirmada, e a filha é limitada a 1.000 bytes virtuais e a própria transação a 10.000. Esses limites parecem um retrocesso até você sofrer o pinning, que é quando uma contraparte anexa um descendente enorme e barato à sua transação não confirmada para que aumentar a taxa se torne inviável. As implementações da Lightning adotaram a versão 3 exatamente por esse motivo.
Nada nas regras de consenso rejeita uma transação por ela ter a versão 7, ou a versão 0. A padronização rejeita: o Bitcoin Core não retransmite nem minera versões fora do conjunto aceito, então uma versão incomum é uma transação que precisa chegar a um minerador de alguma outra forma.
Onde você a vê
Todo explorador de blocos mostra a versão perto do topo da página de detalhes de uma transação, e o decoderawtransaction do Bitcoin Core a devolve como primeiro campo.
Para quem compra ou guarda bitcoin, ela é um diagnóstico, não uma decisão. Você nunca a escolhe, é a sua carteira que escolhe. Seu valor prático está em ler software desconhecido: uma carteira que ainda produz transações de versão 1 em um mundo de bloqueios temporais relativos é antiga, e um pagamento que declara a versão 3 quase certamente saiu da maquinaria de canais de um nó da Lightning e não de uma pessoa que apertou enviar.
Número de versão da transação vs número de versão do bloco
Transações e blocos carregam ambos um campo de versão de quatro bytes, e eles não têm nada a ver um com o outro.
A versão do bloco acompanha as atualizações de consenso. Os blocos de versão 2 passaram a ser obrigatórios no bloco 227.931, em março de 2013, quando o BIP34 exigiu a altura do bloco dentro da entrada coinbase, a versão 3 passou a exigir a codificação DER estrita das assinaturas sob o BIP66, e a versão 4 veio com a implantação do CHECKLOCKTIMEVERIFY. A partir de 2015, o campo foi novamente reaproveitado como um conjunto de bits de sinalização sob o BIP9, para que os mineradores pudessem aprovar um soft fork com um voto, alterando um de seus bits. A versão de uma transação não faz nada disso. Ela nunca sinaliza, nunca aumenta a cada atualização e se aplica a uma transação, não ao conjunto de regras de toda a rede.