Estructura de la cadena de bloques de Bitcoind

Estoy tratando de comprender la estructura de la cadena de bloques subyacente almacenada en la implementación central (o más bien, solo los archivos BLK utilizados por un nodo completo). Mi pregunta es ; ¿La cadena de bloques almacena la estructura de árbol completa, es decir, todas las bifurcaciones que se encontraron? ¿O purga las entradas una vez que se resuelve una bifurcación?

Si tuviera que leer los archivos blk secuencialmente, ¿puedo suponer que cada bloque leído está ordenado correctamente y que no hay bifurcaciones presentes?

¡Gracias!

Respuestas (1)

los archivos BLK no son una API. No deberías leer directamente esos archivos. Lo que debe hacer es solicitar los encabezados/bloques a través de la interfaz JSON RPC (o la interfaz REST).

Puede obtener el hash del bloque de génesis a través de:

bitcoin-cli getblockhash 0

Entonces puedes obtener un bloque (sin transacciones):

bitcoin-cli getblock <hash>

Luego obtenga el siguiente bloque mirando el nextblockhashelemento en la respuesta JSON del bloque, etc.

Además, considere usar la interfaz REST. Allí puede obtener respuestas binarias que son mucho más rápidas (sin sobrecarga de codificación/descodificación JSON).

Para responder a la pregunta de manera más directa: si lee los archivos blk directamente, encontrará los bloques de la cadena desordenados, potencialmente con espacios intermedios, incluidos bloques bifurcados, y el formato puede cambiar en versiones futuras.
@PieterWuille muchas gracias por la aclaración.
@PieterWuille te equivocas. Mientras lee archivos blk con algunas matemáticas, puede encontrar el orden de exclusión de blockchain de cualquier espacio o bifurcación. Quizás.
Escribí ese código en Core. Sí, puede escanear todos los bloques y luego averiguar la cadena más larga y filtrar la basura. Pero de eso no se trataba la pregunta. En el disco, los bloques están desordenados.