Blockchain
在各種-checklevel 中究竟檢查了什麼?
標準的 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