El Block Header es un registro breve al principio de un bloque de Bitcoin. Contiene una huella del bloque anterior, una huella conjunta de las transacciones y los datos necesarios para verificar el Proof of Work. Los pagos se guardan en otra parte del bloque.
Imagine un bloque como un paquete de transacciones y la cabecera como su ficha de acompañamiento. No incluye una lista de destinatarios ni de importes. Contiene huellas criptográficas: valores cortos calculados a partir de datos que permiten detectar cambios. Una apunta al bloque anterior. Otra, llamada Merkle root, resume los identificadores de las transacciones de este bloque. Así, la cabecera vincula un contenido concreto con un lugar concreto en la historia. No es una copia en miniatura de las transacciones: la huella no permite reconstruir su contenido. [1] [4]
El minero prepara un bloque candidato y busca un hash adecuado, una huella interpretada como número. Debe ser menor o igual que el objetivo establecido. Esta búsqueda es el Proof of Work: el minero cambia datos y repite el cálculo porque no puede predecir sin más un resultado válido. La variable más conocida es el nonce, un número auxiliar de la cabecera. Para disponer de más posibilidades puede cambiar datos de la Coinbase Transaction, la transacción especial que crea al principio del bloque. También cambia entonces el Merkle root y se obtiene otra cabecera. Los demás nodos pueden repetir rápidamente el cálculo para comprobar el resultado. [1] [3] [4]
Una cadena de cabeceras permite seguir los enlaces entre bloques y verificar su trabajo asociado sin descargar todas las transacciones. Pero imagine un bloque con Proof of Work válido en el que alguien intenta gastar fondos ajenos sin la firma necesaria. Comprobar solo la cabecera no detectaría el problema. Por eso un Full Node comprueba también las transacciones, sus firmas, las salidas sin gastar disponibles y la recompensa permitida. Una cabecera válida no garantiza que lo sea todo el bloque. [2]
El campo nBits indica el objetivo que debe cumplir el hash. Es una codificación compacta del objetivo, no la cifra «difficulty» que muestra un explorador de bloques. El nodo también comprueba que ese objetivo respete las reglas para esa posición en la cadena. El minero tampoco puede elegir cualquier hora. Debe ser posterior a la mediana de los 11 bloques anteriores, es decir, al valor central de sus horas ordenadas, y no puede situarse demasiado lejos en el futuro. Aun así, no es la hora exacta de cada pago ni un cronómetro del tiempo de minería. [2] [3]
El orden y el tamaño son fijos: version ocupa 4 bytes, el hash de la cabecera anterior 32, Merkle root 32, time 4, nBits 4 y nonce 4. Suman 80 bytes, sea cual sea el número de transacciones. El identificador del bloque se obtiene aplicando SHA-256 dos veces a esta cabecera codificada con precisión. Los campos numéricos usan little-endian, con el byte menos significativo primero; los hashes siguen un orden interno distinto de la presentación habitual de un identificador. Para reproducir el cálculo no basta, por tanto, con concatenar los valores tal como los muestra un explorador. [1] [4]
Para obtener la imagen más completa, lee esta entrada junto con Block, Proof of Work, Merkle Tree, Nonce. También enlazan con esta entrada Block, Hash, SHA-256, Merkle Tree.