La cabecera de un bloque es usada para identificar un bloque en particular dentro de la cadena de bloque. También es transformada en un hash en repetidas ocasiones para crear la prueba de trabajo que necesita la minería y cambio obtener recompensas.
Sabemos que una cadena de bloques consiste en una serie de bloques que son utilizados para almacenar la información relacionada con las transacciones que ocurren en la red.
Cada uno de estos bloques contiene una cabecera única, y cada bloque es identificado con el hash de su cabecera.
Contenido
¿Para qué sirven?
Las cabeceras del bloque de Bitcoin contiene información importante del bloque, los cuales finalmente tienen las transacciones que se llevan a cabo en la red de esta criptomoneda.
Estas se dividen en 6 campos que proveen en detalle un resumen del bloque.
Campo | Tamaño | Información |
---|---|---|
Versión | 4 bytes | Little-endian |
Hash del bloque previo | 32 bytes | Big-endian |
Raíz del árbol de Merkle | 32 bytes | Big-endian |
Marca de tiempo | 4 bytes | Little-endian |
Bits | 4 bytes | Little-endian |
Nonce | 4 bytes | Little-endian |
Además de la cabecera, los bloques también cuentan con las transacciones normales y las de tipo coinbase, que son partes separadas del bloque.
Cada cabecera es única y criptográficamente segura, lo que le da una propiedad de inmutabilidad, es decir que son difíciles de modificar.
Las cabeceras de los bloques se serializan con una longitud total de 80 bytes. A partir de allí, se realiza un hashing que es parte del algoritmo de consenso llamado Prueba de Trabajo (PoW por sus siglas en inglés) que se utiliza para la minería de Bitcoin.
Durante este proceso, la cabecera se convierte en parte de las reglas de consenso que los mineros deben seguir como parte del mecanismo de consenso.
Los mineros son nodos completos que participan de este protocolo en donde los bloques son validados y a cambio obtienen recompensa en forma de BTC.
Para eso deben pasar la cabecera por una función hash llamada SHA-256 y así obtener el hash, que comparan con un nonce (que veremos más adelante) para poder resolver el bloque.
Partes de una cabecera
La cabecera se divide en 6 campos, cada uno con un objetivo en particular que ahora veremos.
1. Número de versión
Este es un campo de 4 bytes que provee el número de versión usado en el bloque.
Existen diferentes versiones que forman parte de la historia del desarrollo de Bitcoin:
- Versión 1: fue introducida con el bloque génesis en enero de 2009. Se trata del primer bloque generado en cadena de bloques de Bitcoin.
- Versión 2: fue introducida en Bitcoin Core 0.7.0 en septiembre de 2012 como un soft fork activado por el usuario (UASF por sus siglas en inglés). Como se describe en la BIP34, un bloque válido de versión 2 requiere un parámetro con la altura del bloque en la transacción coinbase. BIP34 también describe reglas para rechazar ciertos bloques. Bitcoin Core 0.7.0 y otras versiones posteriores comenzaron a rechazar versiones 2 de bloques que no tengan la altura del bloque en la coinbase empezando por el bloque con la altura 224.412 en marzo de 2013. También comenzaron a rechazar nuevos bloques versión 1 tres semanas después en la altura 227.930.
- Versión 3: fue introducida en Bitcoin Core 0.10.0 en febrero de 2015 como una UASF. Cuando el fork alcanzo la adopción completa en julio de 2015, exigió la codificación DER estricta de las firmas ECDSA en los nuevos bloques, tal y como se describe en BIP66. Las transacciones que no utilizan la codificación DER estricta no eran estándar desde Bitcoin Core 0.8.0 (febrero de 2012).
- Versión 4: especificada en la BIP65 e introducida en Bitcoin Core 0.11.2 en noviembre de 2015 como una UASF, comenzó a estar activa en diciembre de ese mismo año. Ahora los bloques soportan el nuevo opcode OP_CHECKLOCKTIMEVERIFY descrito en la propuesta de mejora de Bitcoin que la introdujo.
La versión se refiere a que conjunto de reglas debe seguir el bloque para ser válido. Estas reglas forman parte del protocolo que se va actualizando con cada nueva versión.
Si un bloque tiene un número diferente al de otros bloques entonces no puede seguir formando parte de la cadena. En ese caso, funcionará en una diferente y dará como resultado en un hard fork.
2. Hash del bloque previo
El hash del bloque previo es un campo de 32 bytes que contiene precisamente esa información en la cabecera del nuevo bloque.
Este es un puntero al bloque con el cual conecta, una característica muy importante de la blockchain de la que deriva su nombre (cadena de bloques).
La información no puede ser modificada sin la necesidad de modificar los bloques anteriores. Entonces, si tenemos 300.000 bloques e intentamos cambiar un hash, será necesario cambiar el de los bloques previos en un efecto avalancha.
Esto requería una gran cantidad de poder computacional que lo haría muy difícil conseguir. Y es precisamente esa característica que hace que los bloques sean seguros y a prueba de manipulación.
Es posible hacerlo, pero esto provocaría que la cadena de bloques cambiara completamente. Para conseguirlo se necesitaría un ataque del 51%.
La cabecera del bloque utiliza el algoritmo de hashing SHA-256 con una función (por si te interesa) que es así:
SHA256(SHA256())SHA256(SHA256(Prev_Block_Header))
Esto prevé que ningún bloque pueda ser modificado sin cambiar la cabecera del bloque.
Esto es una pieza fundamental para evitar que se reviertan las transacciones, ya que se necesitaría cambiar el hash de todos los bloques. Eso consumirá una gran cantidad de energía y recursos computacionales para hacer todos los cálculos de nuevo.
Aun así, en el mundo real los mineros podría repeler uno de estos ataque haciendo fork de la cadena. Pero es mejor tener una herramienta de consenso que mantenga los bloques válidos sin recurrir a esa última instancia.
3. Raíz del árbol de Merkle
El campo para la raíz del árbol de Merkle también es de 32 bytes y contiene el hash del árbol de Merkle con las transacciones. Que utiliza la misma función hash del bloque previo.
La raíz de Merkle se obtiene de los hashes de todas las transacciones que son incluidas en el bloque. Esto sirve para asegurarnos de que ninguna transacción haya sido modificada sin modificar la cabecera completa.
Una medida para evitar la alteración de la información que provee seguridad al bloque, y una importante característica de un sistema que es público, descentralizado y sin confianza.
La raíz del árbol de Merkle consisten en todos los TxIDs (ID de transacciones) de las transacciones de; bloque. Y son colocados en el orden requerido por la regla de consenso:
- El ID de la transacción coinbase es colocado primero.
- Cualquier entrada del bloque puede gastar una salida que también aparece en este bloque si es un gasto válido. Debe ser un TXID correspondiente a la salida colocado en algún momento anterior al TXID correspondiente a la entrada. Esto sigue la regla UTXO (Unspent Transaction Output) de que una entrada de transacción debe ser la salida de transacción anterior.
La entrada, de una longitud variable, es transformada en un resultado de longitud fija de 256 bits. La raíz de Merkle siempre puede rastrearse hasta la estructura de datos del árbol, y es una forma rápida y eficaz de verificar los datos.

4. Marca de tiempo
La marca de tiempo es un campo de 4 bytes con fecha y hora del bloque medida en tiempo Unix. Que son básicamente los segundos que han transcurrido desde enero de 1970 hasta el momento de creación del bloque.
Esta es colocada dentro de la cabecera cuando el minero comienza a buscar el hash de esta.
Debe ser más grande que la media de tiempo de los 11 bloques previos. Pero los nodos completos tampoco aceptarán bloques cuyas cabeceras se encuentran 2 horas adelantadas de la hora que tengan en sus relojes.
El tiempo Unix no es una representación real de UTC. Ignora los segundos bisiestos, y cada día contiene un total de 86.400 segundos (60 segundos/minuto x 60 minutos/hora x 24 horas).
De acuerdo con los protocolos de Bitcoin, el tiempo de propagación de los bloques debe ser de una media de 10 minutos, por lo que la marca de tiempo debe caer dentro del tiempo permitido que está dentro de este rango.
La variabilidad, sin embargo, se debe a la dificultad que se discutirá a continuación.
5. Dificultad/Bits
La dificultad o hash objetivo es también un campo de 4 bytes que también se conoce como Bits. La versión codificada del objetivo es un rango en la que el hash del bloque debe ser igual o menor.
Los Bits especifican un valor o umbral objetivo que contiene ceros a la izquierda. Esta es la base del objetivo de dificultad, donde el hash de la cabecera tienen que tener la misma cantidad o más de ceros a la izquierda.
El objetivo de dificultad se ajusta cada 2.016 bloques en la red Bitcoin. Esta información es importante para los mineros en particular.
La dificultad es calculada gracias al protocolo Bitcoin, que determina como debe ser de difícil encontrar el hash de acuerdo a la cantidad total de hash rate que hay en la red.
Cuando hay muchos mineros, la dificultad se incrementa para poder controlar la oferta de BTC. Si fuera muy fácil encontrar nuevos bloques, entonces se conseguirán generar en menos de 10 minutos. Esto provocaría que se minaran el total de bitcoins que pueden existir de forma muy rápida.
Por otro lado, cuando el periodo de descubrimiento de un bloque nuevo es mayor a 10 minutos, entonces la dificultad se encuentra demasiado alta y es necesario disminuir la dificultad para volver a ese promedio de 10 minutos.
6. Nonce
Finalmente llegamos al nonce, un campo de 4 bytes, que es un número que los mineros modifican para que el hash de la cabecera produzca un resultado diferente y así alcanzar el hash objetivo.
El nonce s como un número mágico, ya que cualquier que lo descubra primero será el validador del bloque. La recompensa obtenida es creada en la transacción coinbase y es dada al minero que resuelve el problema.
Descubrir cual es el nonce es la actividad principal de los mineros que se involucran en el mecanismo de consenso que válida los bloques.
Ejemplo de cabecera
Aquí hay un ejemplo de como se ve la cabecera de un bloque de Bitcoin:

- bits: la dificultad de la minería que es codificada en un valor numérico.
- mrkl_root: es el hash de todas las transacciones dentro del bloque. Representado en valor hexadecimal, por eso son 64 caracteres.
- nonce: el número que el minero ha encontrado para conseguir que el hash caiga dentro del umbral necesario.
- pre_block: el hash de la cabecera del bloque precio. Esto es lo que vincula todos los bloques de la cadena.
- time: indica cuando el minero comenzó a minar el bloque. El formato es diferente al de Unix, pero está basado en esta.
- ver: número de versión del bloque que sigue las reglas de consenso de la versión del protocolo.
Resumen
- Las cabeceras de bloques identifican a los bloques en una blockchain.
- Son pasados por una función hash para crear la prueba de trabajo que necesita la minería.
- El número de versión ayuda a seguir el registro de los cambios del protocolo.
Agrega un Comentario