Glosario / Nodos y software
Cadena de encabezados
También se conoce como Cadena de cabeceras.
- ¿Qué es la cadena de encabezados?
- La cadena de encabezados es la secuencia de encabezados de bloque de 80 bytes que un nodo ha verificado, y puede ir miles de bloques por delante de los datos de bloque que realmente ha descargado.
Un nodo hace el seguimiento de dos cosas a la vez: los encabezados en los que cree y los cuerpos de los bloques que ha almacenado. Los encabezados pesan 80 bytes cada uno, así que un año de ellos, alrededor de 52.560 bloques, suma aproximadamente 4,2 MB. Esa diferencia de tamaño es la razón por la que una billetera puede conocer la altura actual de la cadena y el trabajo acumulado total mucho antes de poder decirle qué hay dentro de un bloque concreto.
Cómo funciona
La cadena de encabezados se ordena por la prueba de trabajo acumulada, no por cuántos bloques contiene.
Cada encabezado nombra a su bloque padre, así que el conjunto de encabezados de los que un nodo ha tenido noticia forma un árbol y no una línea. La rama que acumula más trabajo total es la mejor cadena de encabezados, y el nodo recuerda también las ramas perdedoras por si alguna de ellas la supera más adelante. Bitcoin Core guarda este árbol en el índice de bloques, una pequeña base de datos LevelDB en el directorio blocks/index, totalmente separada de los archivos de bloques en bruto que contienen las transacciones.
Como el árbol se conserva, un nodo puede describir su propia incertidumbre. El comando getchaintips enumera cada punta que conoce con un estado asociado: active para la rama que está siguiendo, headers-only para una rama cuyos cuerpos nunca se descargaron, valid-fork para una rama totalmente validada que perdió la carrera, e invalid para una que infringió una regla. Una reorganización de la cadena no es más que el paso del nodo de una punta a otra a través de ese árbol una vez que tiene los bloques para hacerlo.
Los encabezados sobreviven a cosas a las que los datos de bloque no sobreviven. Un nodo podado elimina los archivos de bloques antiguos para ahorrar espacio, e incluso con prune=550, el valor más bajo que acepta Bitcoin Core, conserva todos los encabezados desde el bloque génesis en adelante. Sin ellos no podría comprobar que un bloque nuevo se construye sobre la cadena que ya aceptó, así que los encabezados son la parte de la que nunca puede deshacerse.
Dónde aparece
La cadena de encabezados es la cifra que su nodo menciona cuando le dice cuánto retraso lleva.
Ejecute la llamada RPC getblockchaininfo y obtendrá dos campos, blocks y headers. El campo headers es la altura de la mejor cadena de encabezados, blocks es la parte de ella que se ha descargado y validado por completo, y la diferencia entre ambos es el trabajo que aún queda pendiente. En un nodo al día los dos coinciden, y un nodo cuyo valor headers está atascado es un nodo que ha perdido el contacto con sus pares, no uno que simplemente va lento.
Las billeteras ligeras no guardan nada más. Una billetera SPV o un cliente de filtros compactos almacena solo encabezados y los usa para confirmar que una transacción que le interesa está bajo prueba de trabajo real. La dificultad también puede calcularse a partir de los encabezados, ya que el objetivo se redefine cada 2.016 bloques usando solo las marcas de tiempo y los valores nBits que ya están en la cadena, lo que significa que un cliente puede verificar que el trabajo que cuenta es auténtico sin ver jamás una transacción.
Cadena de encabezados frente a encabezado de bloque
Un encabezado de bloque es un único registro de 80 bytes; la cadena de encabezados es el conjunto de todos ellos, enlazados hasta el bloque génesis del 3 de enero de 2009. La distinción importa cuando alguien dice que un cliente ligero verifica la prueba de trabajo. Un encabezado demuestra que un bloque fue caro de producir. Solo la cadena de todos ellos, en la que cada encabezado fija su bloque padre, demuestra que un bloque concreto se sitúa detrás de una serie ininterrumpida de trabajo costoso que nadie ha reemplazado discretamente.