Versión

El campo usado por los mineros para señalar soft forks

El campo versión de 4 bytes en el encabezado del bloque es usado por los mineros para señalar preparación para soft forks propuestos.

Los números de versión se usan en software para indicar actualizaciones o nuevas funciones. Sin embargo, bitcoin es descentralizado, así que no existe una autoridad central que obligue a todos a actualizar. Por eso, lo ideal es que la mayoría de la red pueda ponerse de acuerdo con los cambios propuestos de antemano. Entonces, el campo versión se usa básicamente para "votar" sobre actualizaciones propuestas.

Pero no son votos de verdad. Cualquier mayoría de mineros puede empezar a aplicar una nueva regla: no necesitan indicarlo en los bloques. Lo que hace el campo versión es proporcionar una forma de señalizar preparación, para que se pueda encontrar un punto de transición seguro y coordinado.
Pieter Wuille, bitcoin.stackexchange.com

Números de Versión

Hasta 2015, el número de versión se incrementaba para señalar preparación para nuevas actualizaciones, hasta llegar a 4:

Estas actualizaciones se volvían permanentes cuando 950 de 1000 bloques en un período eran minados con el nuevo número de versión. La desventaja es que solo puedes señalar un cambio a la vez.

Version Bits

En 2015, el campo versión se cambió para usarse como un bit field, lo que permite a los mineros señalar hasta 29 funciones propuestas al mismo tiempo. Diferentes bits en el campo de 32 bits pueden asignarse al mismo tiempo para señalar preparación para diferentes soft forks. Todo lo que tienes que hacer para señalizar preparación es activar un bit específico (ponerlo en 1).

Bits de versión

Cada bit del campo versión puede señalar disposición para una actualización (BIP9). Los 3 bits superiores deben ser 001 para que la señalización sea válida.

Campo de bits 00000000000000000000000000000000
0x
4 bytes
  • Bits de versión: Habilitado

Los siguientes bits se usaron para actualizaciones:

Para usar "version bits" en la señalización, debes activar los 3 primeros bits como 0b001 (especificado en la BIP 9). Por eso solo puedes señalar como máximo 29 actualizaciones diferentes al mismo tiempo (32 − 3 = 29 bits).

Ejemplos

Aquí tienes algunos ejemplos de números de versión que encontrarás en la historia de la blockchain.

A partir de alrededor de la altura 411.000, el campo versión empieza a usarse como bit field con más frecuencia (en lugar de un número simple). Por eso los "números" de versión parecen tan grandes: los 3 primeros bits ahora quedan activados como 0b001.

Aquí hay algunos números de versión "no estándar" que aparecen de vez en cuando:

Predeterminado Actual

La versión predeterminada en el encabezado del bloque actualmente es:

0b00100000000000000000000000000000

Que en hexadecimal es 0x20000000. Esto indica que estás usando "version bits" (los 3 primeros bits son 0b001), pero sin señalar ninguna función propuesta.

El primer bit del campo versión nunca puede ser 1, porque eso indicaría un número negativo, que sería inválido (Bitcoin usa una codificación personalizada para valores uint256).

Extra Nonce

¿Por qué aparecen números de versión extraños?

No hay restricciones sobre qué valores puedes poner en el campo versión (aparte de que debe ser como mínimo 0x00000004 y el primer bit no puede ser 1), así que los mineros a veces lo usan como un nonce extra al minar.

Por eso, desde alrededor de la altura 600.000 (también antes, pero más desde entonces), a menudo ves algunos números de versión "raros" en el encabezado del bloque que no corresponden a ninguna actualización propuesta. Por ejemplo:

De nuevo, esos números de versión no están señalando nada en particular; simplemente se ajustaron para que el minero pueda seguir haciendo el hash de su bloque actual sin tener que reconstruirlo por completo.

Recursos