From bb3fd02930ba5cb8e8a3a92ede9612955edeee05 Mon Sep 17 00:00:00 2001 From: Satoshi Nakamoto Date: Mon, 16 Aug 2010 20:53:49 +0000 Subject: blocks-1, verify block chain on load, so wouldn't have needed to delete blk*.dat, it would have done a reorg automatically --- db.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'db.cpp') diff --git a/db.cpp b/db.cpp index d773d7ad3..ded78d345 100644 --- a/db.cpp +++ b/db.cpp @@ -459,6 +459,29 @@ bool CTxDB::LoadBlockIndex() // Load bnBestInvalidWork, OK if it doesn't exist ReadBestInvalidWork(bnBestInvalidWork); + // Verify blocks in the best chain + CBlockIndex* pindexFork = NULL; + for (CBlockIndex* pindex = pindexBest; pindex && pindex->pprev; pindex = pindex->pprev) + { + CBlock block; + if (!block.ReadFromDisk(pindex)) + return error("LoadBlockIndex() : block.ReadFromDisk failed"); + if (!block.CheckBlock()) + { + printf("LoadBlockIndex() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString().c_str()); + pindexFork = pindex->pprev; + } + } + if (pindexFork) + { + printf("LoadBlockIndex() : *** moving best chain pointer back to block %d\n", pindexFork->nHeight); + CBlock block; + if (!block.ReadFromDisk(pindexFork)) + return error("LoadBlockIndex() : block.ReadFromDisk failed"); + CTxDB txdb; + block.SetBestChain(txdb, pindexFork); + } + return true; } -- cgit v1.2.3