¿Qué se verifica exactamente en varios niveles de verificación?

El cliente estándar de bitcoin-qt/bitcoind tiene una opción -checklevelque pretende realizar varias comprobaciones en los datos del bloque almacenados en el disco. ¿Existe documentación actual (aparte de la fuente) que describa específicamente lo que se verifica en los diferentes niveles?

La función VerifyDBen la fuente tiene breves comentarios que describen los niveles:

// check level 0: read from disk
// check level 1: verify block validity
// check level 2: verify undo validity
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks

Sería bueno ver esto explicado en términos del protocolo Bitcoin. Por ejemplo, ¿se verifican los hash de bloque? ¿Comprobamos que todos los bloques de la cadena se enlacen correctamente entre sí? ¿Se verifican las firmas de las transacciones? Etcétera.

Respuestas (2)

La otra respuesta parece estar desactualizada, incluso en el momento en que fue respondida. La siguiente parece ser una explicación más actualizada: de https://bitcointalk.org/index.php?topic=141200.msg1504768#msg1504768

  • 0: validar todos los encabezados de bloque + comparar (por hash) con bloques en el disco para los últimos bloques -checkblocks
  • 1: Además, verifique la validez (independiente) de esos bloques -checkblocks
  • 2: Además, verifique que los datos de deshacer coincidan con las sumas de verificación
  • 3: Además, verifique que las coincidencias de estado de cadena actuales puedan ser razonablemente el resultado de los últimos N bloques, donde N está limitado tanto por -checkblocks como por la cantidad de caché en memoria (-dbcache); por lo general es alrededor de 150.
  • 4: Además, para los últimos N bloques (ver arriba), realice una validación completa (incluidas las comprobaciones de firma).

Tenga en cuenta que el nuevo valor predeterminado (3) es, de hecho, una verificación más fuerte que el nivel más alto anterior (6).

Verifique los comentarios en este compromiso https://gitorious.org/bitcoin/luke-jr-bitcoin/commit/4538e45c46d3829a21aed7685e6fbac7e8aafad3

Add -checklevel and improve -checkblocks

-checkblocks now takes a numeric argument: the number of blocks that must be verified at the end of the chain. Default is 2500, and 0 means all blocks.

-checklevel specifies how thorough the verification must be:

    0: only check whether the block exists on disk
    1: verify block validity (default)
    2: verify transaction index validity
    3: check transaction hashes
    4: check whether spent txouts were spent within the main chain
    5: check whether all prevouts are marked spent
    6: check whether spent txouts were spent by a valid transaction that consumes them