Как проверить сохранённый блок Bitcoin после реорганизации

После простоя индексатор продолжает обработку с высоты 850 000. Сравнение сохранённого хеша с текущим ответом ноды покажет, принадлежит ли контрольная точка активной цепочке.

Сверьте контрольную точку в той же сети

Для примера нужна синхронизированная нода основной сети. В переменную SAVED_HASH запишите хеш, который индексатор сохранил на высоте 850000. До сравнения проверьте название сети и местную высоту.

bitcoin-cli getblockchaininfo | jq '{chain, blocks}'
bitcoin-cli getblockhash 850000
bitcoin-cli getblockheader "$SAVED_HASH" | jq '{height, hash, confirmations}'

Если текущий хеш отличается, а у сохранённого заголовка confirmations равно −1, эта нода знает старый заголовок и относит его к боковой ветви. Нода, которая никогда не получала вытесненную ветвь, может вернуть ошибку неизвестного заголовка. Сохраните исходную контрольную точку для разбора и сравните более ранние высоты, чтобы найти общего предка.

Возобновите обработку от общего предка

Например, если хеш на высоте 849998 совпал, а следующие два сохранённых блока отличаются, откатите изменения от обоих вытесненных блоков. Заново обработайте активную цепочку с 849999, сверяя previousblockhash каждого блока с последним зафиксированным хешем. Записывайте производные данные и контрольную точку одной транзакцией, чтобы после перезапуска продолжить с согласованного состояния.

getchaintips показывает ветви, известные конкретной ноде. Поле branchlen относится к ветви указанной вершины. Глубину отката индексатора рассчитывайте по его собственным сохранённым хешам: до остановки он мог обработать лишь часть ветви.

bitcoincore.org getblockheader · bitcoincore.org getchaintips