Стандартный клиент 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
Было бы неплохо увидеть их объяснение с точки зрения протокола Биткойн. Например, проверены ли хэши блоков? Проверяем ли мы, что все блоки в цепочке правильно связаны друг с другом? Проверяются ли подписи транзакций? И так далее.
Другой ответ кажется устаревшим даже в то время, когда на него был дан ответ. Следующее кажется более актуальным объяснением :
Обратите внимание, что новое значение по умолчанию (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