Reconstruct coins/ from scratch when missing.

This commit is contained in:
Pieter Wuille 2012-12-02 21:59:22 +01:00 committed by Pieter Wuille
parent d79775a04d
commit 89b7019be8
2 changed files with 11 additions and 14 deletions

View file

@ -865,7 +865,7 @@ bool AppInit2()
if (walletdb.ReadBestBlock(locator)) if (walletdb.ReadBestBlock(locator))
pindexRescan = locator.GetBlockIndex(); pindexRescan = locator.GetBlockIndex();
} }
if (pindexBest != pindexRescan) if (pindexBest && pindexBest != pindexRescan)
{ {
uiInterface.InitMessage(_("Rescanning...")); uiInterface.InitMessage(_("Rescanning..."));
printf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight); printf("Rescanning last %i blocks (from block %i)...\n", pindexBest->nHeight - pindexRescan->nHeight, pindexRescan->nHeight);

View file

@ -1691,7 +1691,7 @@ bool SetBestChain(CBlockIndex* pindexNew)
// Find the fork (typically, there is none) // Find the fork (typically, there is none)
CBlockIndex* pfork = view.GetBestBlock(); CBlockIndex* pfork = view.GetBestBlock();
CBlockIndex* plonger = pindexNew; CBlockIndex* plonger = pindexNew;
while (pfork != plonger) while (pfork && pfork != plonger)
{ {
while (plonger->nHeight > pfork->nHeight) while (plonger->nHeight > pfork->nHeight)
if (!(plonger = plonger->pprev)) if (!(plonger = plonger->pprev))
@ -2322,13 +2322,18 @@ bool static LoadBlockIndexDB()
if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile)) if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile))
printf("LoadBlockIndex(): last block file: %s\n", infoLastBlockFile.ToString().c_str()); printf("LoadBlockIndex(): last block file: %s\n", infoLastBlockFile.ToString().c_str());
// Load bnBestInvalidWork, OK if it doesn't exist
pblocktree->ReadBestInvalidWork(bnBestInvalidWork);
// Check whether we need to continue reindexing
bool fReindexing = false;
pblocktree->ReadReindexing(fReindexing);
fReindex |= fReindexing;
// Load hashBestChain pointer to end of best chain // Load hashBestChain pointer to end of best chain
pindexBest = pcoinsTip->GetBestBlock(); pindexBest = pcoinsTip->GetBestBlock();
if (pindexBest == NULL) if (pindexBest == NULL)
{
if (pindexGenesisBlock == NULL)
return true; return true;
}
hashBestChain = pindexBest->GetBlockHash(); hashBestChain = pindexBest->GetBlockHash();
nBestHeight = pindexBest->nHeight; nBestHeight = pindexBest->nHeight;
bnBestChainWork = pindexBest->bnChainWork; bnBestChainWork = pindexBest->bnChainWork;
@ -2344,14 +2349,6 @@ bool static LoadBlockIndexDB()
BlockHashStr(hashBestChain).c_str(), nBestHeight, BlockHashStr(hashBestChain).c_str(), nBestHeight,
DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime()).c_str()); DateTimeStrFormat("%x %H:%M:%S", pindexBest->GetBlockTime()).c_str());
// Load bnBestInvalidWork, OK if it doesn't exist
pblocktree->ReadBestInvalidWork(bnBestInvalidWork);
// Check whether we need to continue reindexing
bool fReindexing = false;
pblocktree->ReadReindexing(fReindexing);
fReindex |= fReindexing;
// Verify blocks in the best chain // Verify blocks in the best chain
int nCheckLevel = GetArg("-checklevel", 1); int nCheckLevel = GetArg("-checklevel", 1);
int nCheckDepth = GetArg( "-checkblocks", 2500); int nCheckDepth = GetArg( "-checkblocks", 2500);