Blockchain

在各種-checklevel 中究竟檢查了什麼?

  • February 22, 2016

標準的 bitcoin-qt/bitcoind 客戶端有一個選項-checklevel,聲稱對儲存在磁碟上的塊數據執行各種檢查。是否有目前文件(源除外)具體描述了在不同級別檢查的內容?

原始碼中的函式VerifyDB有描述級別的簡短註釋:

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

很高興看到這些用比特幣協議進行解釋。例如,是否驗證了塊雜湊?我們是否檢查了鏈中的所有塊是否正確連結回彼此?交易簽名是否經過驗證?等等。

另一個答案似乎已經過時,即使在它被回答時也是如此。以下似乎是更新的解釋:來自<https://bitcointalk.org/index.php?topic=141200.msg1504768#msg1504768>

  • 0:驗證所有塊頭 + 與磁碟上的塊進行比較(通過雜湊)以獲取最後一個 -checkblocks 塊
  • 1:此外,驗證那些 -checkblocks 塊的(獨立)有效性
  • 2:此外,驗證撤消數據是否匹配校驗和
  • 3:此外,檢查目前鏈狀態匹配是否可以合理地是最後 N 個塊的結果,其中 N 受 -checkblocks 和記憶體記憶體(-dbcache)數量的限制;通常在 150 左右。
  • 4:另外,對於最後的 N 個區塊(見上),做完整的驗證(包括簽名檢查)。

請注意,新的預設值 (3) 實際上是比之前的最高級別 (6) 更強的檢查。

檢查此送出中的評論 <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

引用自:https://bitcoin.stackexchange.com/questions/17365