Was genau wird bei verschiedenen -checklevels geprüft?

Der standardmäßige bitcoin-qt/bitcoind-Client verfügt über eine Option -checklevel, die vorgibt, verschiedene Überprüfungen der auf der Festplatte gespeicherten Blockdaten durchzuführen. Gibt es eine aktuelle Dokumentation (außer der Quelle), die genau beschreibt, was auf den verschiedenen Ebenen geprüft wird?

Die Funktion VerifyDBin der Quelle enthält kurze Kommentare, die die Ebenen beschreiben:

// 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

Es wäre schön, diese anhand des Bitcoin-Protokolls erklärt zu sehen. Werden beispielsweise Block-Hashes verifiziert? Prüfen wir, ob alle Blöcke in der Kette korrekt miteinander verknüpft sind? Werden Transaktionssignaturen verifiziert? Und so weiter.

Antworten (2)

Die andere Antwort scheint selbst zum Zeitpunkt der Beantwortung veraltet zu sein. Das Folgende scheint eine aktuellere Erklärung zu sein: Von https://bitcointalk.org/index.php?topic=141200.msg1504768#msg1504768

  • 0: Alle Block-Header validieren + (durch Hash) mit Blöcken auf der Festplatte für die letzten -checkblocks-Blöcke vergleichen
  • 1: Überprüfen Sie zusätzlich die (eigenständige) Gültigkeit dieser -checkblocks-Blöcke
  • 2: Überprüfen Sie außerdem, ob Undo-Daten mit Prüfsummen übereinstimmen
  • 3: Überprüfen Sie außerdem, ob die aktuellen Chainstate-Übereinstimmungen vernünftigerweise das Ergebnis der letzten N Blöcke sein können, wobei N sowohl durch -checkblocks als auch durch die Menge des In-Memory-Cache (-dbcache) begrenzt ist; normalerweise sind es um die 150.
  • 4: Führen Sie zusätzlich für die letzten N Blöcke (siehe oben) eine vollständige Validierung durch (einschließlich Signaturprüfungen).

Beachten Sie, dass die neue Standardeinstellung (3) tatsächlich eine stärkere Überprüfung ist als die vorherige höchste Stufe (6).

Überprüfen Sie die Kommentare in diesem Commit 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