diff options
author | Satoshi Nakamoto <satoshin@gmx.com> | 2010-08-16 20:53:49 +0000 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2010-08-16 20:53:49 +0000 |
commit | bb3fd02930ba5cb8e8a3a92ede9612955edeee05 (patch) | |
tree | 288d36b6aa9a88d04ca7f89c833d4ed8933ead18 /db.cpp | |
parent | c923cdbd5b5d143a77ee5f2c3f0bd72aa4f1716e (diff) |
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.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -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; } |