Glosario / Minería y consenso
Encabezado de bloque
También se conoce como Cabecera.
- ¿Qué es un encabezado de bloque?
- Un encabezado de bloque es el resumen de 80 bytes del bloque: versión, hash del bloque anterior, raíz de Merkle, marca de tiempo, nBits y nonce; es la parte cuyo hash calculan realmente los mineros.
Los mineros nunca calculan directamente el hash de los pagos. Calculan el hash de este registro de tamaño invariable, que fija la lista de transacciones a través de la raíz de Merkle y todos los bloques previos a través del hash del bloque anterior. Ochenta bytes por bloque es tan poco que la cadena de encabezados completa desde enero de 2009 cabe holgadamente en un teléfono, y ese hecho es lo que permite que exista la verificación ligera.
Cómo funciona
Un encabezado de bloque consta de seis campos en un orden fijo, y sus desplazamientos en bytes nunca cambian.
La versión ocupa los bytes 0 a 3. El hash del bloque anterior ocupa los bytes 4 a 35. La raíz de Merkle ocupa los bytes 36 a 67. La marca de tiempo, en segundos desde la época Unix, está en los bytes 68 a 71. El campo nBits, el objetivo de dificultad codificado, está en los bytes 72 a 75. El nonce llena los bytes 76 a 79. Todos los campos se almacenan en little endian (el byte menos significativo primero), y por eso la cadena hexadecimal que se ve en un explorador de bloques parece invertida byte a byte en comparación con la de un volcado en bruto del bloque.
El hash de bloque no es uno de esos campos. Se calcula aplicando SHA-256 dos veces a los 80 bytes, y los nodos lo derivan en lugar de fiarse de él: precisamente por eso un bloque no puede mentir sobre su propia identidad. La prueba de trabajo es la misma operación con una comparación añadida: el número resultante tiene que ser igual o inferior al objetivo que nBits codifica.
Dos de los campos siguen reglas que sorprenden a la gente. La marca de tiempo no tiene que ser exacta. Solo tiene que superar la mediana de las marcas de tiempo de los once bloques anteriores y no diferir en más de dos horas del reloj del propio nodo receptor, así que los encabezados con horas ligeramente desordenadas son normales y válidos. Tampoco el campo de versión es ya un simple contador. La señalización de una bifurcación blanda (soft fork) según BIP9 y el version rolling (variación de los bits de versión) según BIP320 toman bits prestados de él, así que el número de versión de un encabezado moderno es un campo de bits y no el número de una versión publicada.
Dónde aparece
Los encabezados de bloque son lo primero que descarga un nodo nuevo y lo único que conservan muchas billeteras.
Bitcoin Core usa la sincronización headers-first (primero los encabezados) desde la versión 0.10, publicada en febrero de 2015. El nodo descarga y valida la cadena de encabezados, verifica que lleva prueba de trabajo real y solo entonces solicita los cuerpos de los bloques, algo que puede hacer desde varios pares en paralelo porque ya sabe lo que busca. Los clientes ligeros se detienen en ese primer paso: una billetera SPV o Neutrino conserva los encabezados y comprueba que la rama de Merkle de una transacción conecta con uno de ellos. A 80 bytes cada uno, una cadena de 900.000 encabezados ocupa 72 MB, y por eso esto funciona con datos móviles.
El encabezado del bloque génesis es el ejemplo canónico para inspeccionar. Su versión es 1, su hash del bloque anterior está formado solo por ceros, su raíz de Merkle es 4a5e1e4b y así sucesivamente, su marca de tiempo es 1231006505, que corresponde al 3 de enero de 2009, su valor nBits es 0x1d00ffff y su nonce es 2083236893. Usted mismo puede calcular el hash de esos 80 bytes y obtener el conocido hash del bloque, que empieza por diez ceros. Si quiere ver cualquier otro encabezado, la llamada RPC getblockheader de Bitcoin Core devuelve exactamente estos campos y nada más.