aboutsummaryrefslogtreecommitdiff
path: root/db.cpp
diff options
context:
space:
mode:
authorSatoshi Nakamoto <[email protected]>2010-08-16 20:53:49 +0000
committerGavin Andresen <[email protected]>2010-08-16 20:53:49 +0000
commitbb3fd02930ba5cb8e8a3a92ede9612955edeee05 (patch)
tree288d36b6aa9a88d04ca7f89c833d4ed8933ead18 /db.cpp
parentwrap sha256.cpp in FOURWAYSSE2 #ifdef (diff)
downloaddiscoin-bb3fd02930ba5cb8e8a3a92ede9612955edeee05.tar.xz
discoin-bb3fd02930ba5cb8e8a3a92ede9612955edeee05.zip
blocks-1,
verify block chain on load, so wouldn't have needed to delete blk*.dat, it would have done a reorg automatically
Diffstat (limited to 'db.cpp')
-rw-r--r--db.cpp23
1 files changed, 23 insertions, 0 deletions
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;
}