|
|
@@ -33,7 +33,7 @@ unsigned int nTransactionsUpdated = 0; |
|
|
|
|
|
|
|
map<uint256, CBlockIndex*> mapBlockIndex; |
|
|
|
CChain chainActive; |
|
|
|
uint256 nBestInvalidWork = 0; |
|
|
|
CBlockIndex *pindexBestInvalid; |
|
|
|
set<CBlockIndex*, CBlockIndexWorkComparator> setBlockIndexValid; // may contain all CBlockIndex*'s that have validness >=BLOCK_VALID_TRANSACTIONS, and must contain those who aren't failed |
|
|
|
int64 nTimeBestReceived = 0; |
|
|
|
int nScriptCheckThreads = 0; |
|
|
@@ -1349,7 +1349,7 @@ void CheckForkWarningConditions() |
|
|
|
if (pindexBestForkTip && chainActive.Height() - pindexBestForkTip->nHeight >= 72) |
|
|
|
pindexBestForkTip = NULL; |
|
|
|
|
|
|
|
if (pindexBestForkTip || nBestInvalidWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWork() * 6).getuint256()) |
|
|
|
if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWork() * 6).getuint256())) |
|
|
|
{ |
|
|
|
if (!fLargeWorkForkFound) |
|
|
|
{ |
|
|
@@ -1416,10 +1416,13 @@ void CheckForkWarningConditionsOnNewFork(CBlockIndex* pindexNewForkTip) |
|
|
|
|
|
|
|
void static InvalidChainFound(CBlockIndex* pindexNew) |
|
|
|
{ |
|
|
|
if (pindexNew->nChainWork > nBestInvalidWork) |
|
|
|
if (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork) |
|
|
|
{ |
|
|
|
nBestInvalidWork = pindexNew->nChainWork; |
|
|
|
pblocktree->WriteBestInvalidWork(CBigNum(nBestInvalidWork)); |
|
|
|
pindexBestInvalid = pindexNew; |
|
|
|
// The current code doesn't actually read the BestInvalidWork entry in |
|
|
|
// the block database anymore, as it is derived from the flags in block |
|
|
|
// index entry. We only write it for backward compatibility. |
|
|
|
pblocktree->WriteBestInvalidWork(CBigNum(pindexBestInvalid->nChainWork)); |
|
|
|
uiInterface.NotifyBlocksChanged(); |
|
|
|
} |
|
|
|
LogPrintf("InvalidChainFound: invalid block=%s height=%d log2_work=%.8g date=%s\n", |
|
|
@@ -2769,6 +2772,8 @@ bool static LoadBlockIndexDB() |
|
|
|
pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx; |
|
|
|
if ((pindex->nStatus & BLOCK_VALID_MASK) >= BLOCK_VALID_TRANSACTIONS && !(pindex->nStatus & BLOCK_FAILED_MASK)) |
|
|
|
setBlockIndexValid.insert(pindex); |
|
|
|
if (pindex->nStatus & BLOCK_FAILED_MASK && (!pindexBestInvalid || pindex->nChainWork > pindexBestInvalid->nChainWork)) |
|
|
|
pindexBestInvalid = pindex; |
|
|
|
} |
|
|
|
|
|
|
|
// Load block file info |
|
|
@@ -2777,11 +2782,6 @@ bool static LoadBlockIndexDB() |
|
|
|
if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile)) |
|
|
|
LogPrintf("LoadBlockIndexDB(): last block file info: %s\n", infoLastBlockFile.ToString().c_str()); |
|
|
|
|
|
|
|
// Load nBestInvalidWork, OK if it doesn't exist |
|
|
|
CBigNum bnBestInvalidWork; |
|
|
|
pblocktree->ReadBestInvalidWork(bnBestInvalidWork); |
|
|
|
nBestInvalidWork = bnBestInvalidWork.getuint256(); |
|
|
|
|
|
|
|
// Check whether we need to continue reindexing |
|
|
|
bool fReindexing = false; |
|
|
|
pblocktree->ReadReindexing(fReindexing); |
|
|
@@ -2791,12 +2791,10 @@ bool static LoadBlockIndexDB() |
|
|
|
pblocktree->ReadFlag("txindex", fTxIndex); |
|
|
|
LogPrintf("LoadBlockIndexDB(): transaction index %s\n", fTxIndex ? "enabled" : "disabled"); |
|
|
|
|
|
|
|
// Load hashBestChain pointer to end of best chain |
|
|
|
// Load pointer to end of best chain |
|
|
|
chainActive.SetTip(pcoinsTip->GetBestBlock()); |
|
|
|
if (chainActive.Tip() == NULL) |
|
|
|
return true; |
|
|
|
|
|
|
|
// register best chain |
|
|
|
LogPrintf("LoadBlockIndexDB(): hashBestChain=%s height=%d date=%s\n", |
|
|
|
chainActive.Tip()->GetBlockHash().ToString().c_str(), chainActive.Height(), |
|
|
|
DateTimeStrFormat("%Y-%m-%d %H:%M:%S", chainActive.Tip()->GetBlockTime()).c_str()); |
|
|
@@ -2882,7 +2880,7 @@ void UnloadBlockIndex() |
|
|
|
mapBlockIndex.clear(); |
|
|
|
setBlockIndexValid.clear(); |
|
|
|
chainActive.SetTip(NULL); |
|
|
|
nBestInvalidWork = 0; |
|
|
|
pindexBestInvalid = NULL; |
|
|
|
} |
|
|
|
|
|
|
|
bool LoadBlockIndex() |