El cliente estándar de bitcoin-qt/bitcoind tiene una opción -checklevel
que 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 VerifyDB
en 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.
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
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