Saltar al contenido
buybitcoinsmart

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.

No confundir con

Preguntas frecuentes

¿El hash de bloque se almacena en el encabezado de bloque?

No. El hash de bloque se calcula aplicando SHA-256 dos veces al encabezado de 80 bytes, así que cada nodo lo deriva de forma independiente. Nada dentro de un bloque declara su propio hash.

¿Cuánto ocupa la cadena completa de encabezados de bloque?

Alrededor de 72 MB a una altura de 900.000 bloques, ya que cada encabezado mide exactamente 80 bytes. Por eso una billetera en el teléfono puede verificar la estructura de la cadena sin descargar cientos de gigabytes de datos de transacciones.

Para seguir leyendo

Términos relacionados

Más en la sección Minería y consenso

Leer esta página en inglés