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.
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:
0x00000001= El software original0x00000002= BIP 34: Altura en la Coinbase0x00000003= BIP 66: Firmas DER estrictas0x00000004= BIP 65: OP_CHECKLOCKTIMEVERIFY
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).
Los siguientes bits se usaron para actualizaciones:
- Bit 0: BIP 112: CHECKSEQUENCEVERIFY
- Bit 1: BIP 141: SegWit
- Bit 2: BIP 341: Taproot
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.
0x00000001– La mayoría de los bloques hasta la altura 200.000 usa este número de versión.- Ejemplo: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f (Altura 0)
0x00000002– La mayoría de los bloques entre 227.931 y 363.724 usa este número de versión.- Ejemplo: 000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8 (Altura 227.931)
0x00000003– La mayoría de los bloques entre 363.725 y 388.380 usa este número de versión.- Ejemplo: 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931 (Altura 363.725)
0x00000004– La mayoría de los bloques entre 388.381 y alrededor de 411.000 usa este número de versión.- Ejemplo: 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0 (Altura 388.381)
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.
0x20000000– Version bits en uso, pero sin señalar ninguna actualización en particular.- Version Bits:
0b00100000000000000000000000000000 - Ejemplo: 000000000000000005025d88492c54a51ac3bccaaa15c12a05aee16a28d6b294 (Altura 410.370)
- Version Bits:
0x20000001– Version bits en uso para señalar la actualización CSV.- Version Bits:
0b00100000000000000000000000000001 - Ejemplo: 000000000000000004983f04183f2a6ae7f1cdf6ddb8f4b3f79e39e14392db4c (Altura 416.498)
- Version Bits:
0x20000002– Version bits en uso para señalar la actualización SegWit.- Version Bits:
0b00100000000000000000000000000010 - Ejemplo: 0000000000000000001094a0145695e4228c21cbbc6be40507f728c6b7d6f16a (Altura 471.329)
- Version Bits:
0x20000004– Version bits en uso para señalar la actualización Taproot.- Version Bits:
0b00100000000000000000000000000100 - Ejemplo: 00000000000000000004f065fae967b93540f321076684fe926d4e7bfbcd77ab (Altura 703.353)
- Version Bits:
Aquí hay algunos números de versión "no estándar" que aparecen de vez en cuando:
0x30000000– Creo que pudo haber sido un bit no oficial usado para señalar soporte a bloques de 2 MB. Aparece 2.058 veces entre los bloques 398.364 y 476.482.- Version Bits:
0b00110000000000000000000000000000 - Ejemplo: 0000000000000000018c393bb66dac52e1a2131ab2332b4d6e2caed463209892 (Altura 414.996)
- Version Bits:
0x08000004– Otra señal no oficial, para tamaños de bloque adaptativos. Aparece 39 veces entre los bloques 416.832 y 455.757.- Version Bits:
0b00001000000000000000000000000100 - Ejemplo: 00000000000000000479bbbf51d485ddc7b161998b6f54049e576b09fd72e363 (Altura 416.832)
- Version Bits:
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:
0x2844a000– Usando version bits con algunos bits activados, pero ninguno de ellos corresponde a una actualización propuesta.- Version Bits:
0b00101000010001001010000000000000 - Ejemplo: 00000000000000000479bbbf51d485ddc7b161998b6f54049e576b09fd72e363 (Altura 791.617)
- Version Bits:
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.