¿Cómo afecta "los encabezados primero" a la estructura BLKxxxx.dat?

Suponiendo un nodo completo que ejecuta Bitcoincore v0.10 (con txindex=1), ¿cómo afecta exactamente la nueva funcionalidad de "primero los encabezados" a la estructura de los datos de la cadena de bloques? (Específicamente, los blkxxxx.datdatos, aunque quizás desconozco otros archivos que son auxiliares de la estructura de datos).

El README.md para el lanzamiento especifica que no hay compatibilidad con versiones anteriores de v0.9.x para los blkdatos de cadena de bloques v0.10.

Debido a que la versión 0.10.0 utiliza la sincronización de encabezados primero y la descarga de bloques en paralelo (consulte más adelante), los archivos de bloques y las bases de datos no son compatibles con versiones anteriores de Bitcoin Core u otro software:

Los bloques se almacenarán en el disco desordenados (realmente en el orden en que se reciben), lo que lo hace incompatible con algunas herramientas u otros programas. La reindexación usando versiones anteriores tampoco funcionará como resultado de esto.

Entonces, ¿cómo analiza el cliente los datos de la versión 0.10 blk? Y por extensión, ¿por qué "los encabezados primero" cambian la estructura en absoluto, dado que parece configurar lógicamente "una plantilla" para que se asienten los datos Tx?

Respuestas (2)

Habiendo probado con el BlockStore de NBitcoin , el formato es el mismo. Los archivos BLK son solo bloques casi en bruto (tiene un pequeño encabezado adicional)

Cualquier bloque almacenado en este archivo tiene la red a la que pertenece con su tamaño, seguido de los datos del bloque. La base de datos leveldb apunta a esos bloques por su (fileId, offset).

Sin embargo, el orden cambió, yo mismo usé el hecho de que esos bloques se ordenaron en el pasado para construir la cadena de encabezado desde la carpeta bitcoin. Tal código se rompería ahora. (Ahora me estoy conectando directamente al nodo del mismo nivel en lugar de depender de la carpeta de bloques)

Según tengo entendido, es solo que los bloques se almacenan en un orden diferente. La primera sincronización de encabezados hace uso de descargas paralelas y los bloques se descargan (y luego se almacenan) fuera de orden. Solía ​​ser el caso en versiones anteriores que los bloques se descargaban y luego se almacenaban en orden, por lo que agregaron el comentario al LÉAME.

Creo que no cambia la estructura de cómo se almacena cualquier bloque individual, solo que ahora es probable que no estén en el orden correcto.

Sí, eso tiene sentido. Estoy tratando de obtener una respuesta concreta de bajo nivel sobre esto, por lo que quizás alguien versado en leer las discusiones de Github pueda intervenir.
Es justo, reconozco que esta respuesta es un poco de alto nivel. Pero sospecho que puede que no haya cambios reales de bajo nivel. Los archivos Blk___.dat literalmente tienen bloques sin procesar, por lo que creo que lo máximo que puede hacer es almacenarlos en un orden diferente
Informaré de nuevo :) Agradezco la respuesta amigo. Estoy frustrado de que tanta funcionalidad del software, incluidos blk, bitcoin-tx, funcionalidad de descanso, etc., esté oculta en Github.