Changeset View
Changeset View
Standalone View
Standalone View
src/validation.cpp
Show First 20 Lines • Show All 3,487 Lines • ▼ Show 20 Lines | if (isSameHeight) { | ||||
"diff=%d\n", | "diff=%d\n", | ||||
chainActive.Tip()->GetBlockHash().ToString(), | chainActive.Tip()->GetBlockHash().ToString(), | ||||
chainTipTimeDiff); | chainTipTimeDiff); | ||||
LogPrintf("New block timestamp-to-received-time difference: hash=%s, " | LogPrintf("New block timestamp-to-received-time difference: hash=%s, " | ||||
"diff=%d\n", | "diff=%d\n", | ||||
pindex->GetBlockHash().ToString(), newBlockTimeDiff); | pindex->GetBlockHash().ToString(), newBlockTimeDiff); | ||||
} | } | ||||
bool fHasMoreWork = | // New chain either has more work or is more honestly mined | ||||
bool hasMoreWork = | |||||
(chainActive.Tip() ? pindex->nChainWork > chainActive.Tip()->nChainWork | (chainActive.Tip() ? pindex->nChainWork > chainActive.Tip()->nChainWork | ||||
: true); | : true); | ||||
bool isMoreHonestlyMined = newBlockTimeDiff < chainTipTimeDiff; | |||||
bool chainTipShouldUpdate = | |||||
(isSameHeight && isMoreHonestlyMined) || hasMoreWork; | |||||
if (chainTipShouldUpdate && isSameHeight && isMoreHonestlyMined) { | |||||
LogPrintf("More honestly broadcasted block will replace chaintip: %s\n", | |||||
pindex->GetBlockHash().ToString()); | |||||
} | |||||
// Blocks that are too out-of-order needlessly limit the effectiveness of | // Blocks that are too out-of-order needlessly limit the effectiveness of | ||||
// pruning, because pruning will not delete block files that contain any | // pruning, because pruning will not delete block files that contain any | ||||
// blocks which are too close in height to the tip. Apply this test | // blocks which are too close in height to the tip. Apply this test | ||||
// regardless of whether pruning is enabled; it should generally be safe to | // regardless of whether pruning is enabled; it should generally be safe to | ||||
// not process unrequested blocks. | // not process unrequested blocks. | ||||
bool fTooFarAhead = | bool fTooFarAhead = | ||||
(pindex->nHeight > int(chainActive.Height() + MIN_BLOCKS_TO_KEEP)); | (pindex->nHeight > int(chainActive.Height() + MIN_BLOCKS_TO_KEEP)); | ||||
Show All 13 Lines | static bool AcceptBlock(const Config &config, | ||||
// If we didn't ask for it: | // If we didn't ask for it: | ||||
if (!fRequested) { | if (!fRequested) { | ||||
// This is a previously-processed block that was pruned. | // This is a previously-processed block that was pruned. | ||||
if (pindex->nTx != 0) { | if (pindex->nTx != 0) { | ||||
return true; | return true; | ||||
} | } | ||||
// Don't process less-work chains. | // Don't process less-work chains. | ||||
if (!fHasMoreWork) { | if (!chainTipShouldUpdate) { | ||||
return true; | return true; | ||||
} | } | ||||
// Block height is too high. | // Block height is too high. | ||||
if (fTooFarAhead) { | if (fTooFarAhead) { | ||||
return true; | return true; | ||||
} | } | ||||
} | } | ||||
Show All 11 Lines | if (!CheckBlock(config, block, state) || | ||||
return error("%s: %s (block %s)", __func__, FormatStateMessage(state), | return error("%s: %s (block %s)", __func__, FormatStateMessage(state), | ||||
block.GetHash().ToString()); | block.GetHash().ToString()); | ||||
} | } | ||||
// Header is valid/has work and the merkle tree is good. | // Header is valid/has work and the merkle tree is good. | ||||
// Relay now, but if it does not build on our best tip, let the | // Relay now, but if it does not build on our best tip, let the | ||||
// SendMessages loop relay it. | // SendMessages loop relay it. | ||||
if (!IsInitialBlockDownload() && chainActive.Tip() == pindex->pprev) { | if (!IsInitialBlockDownload() && chainTipShouldUpdate) { | ||||
GetMainSignals().NewPoWValidBlock(pindex, pblock); | GetMainSignals().NewPoWValidBlock(pindex, pblock); | ||||
} | } | ||||
int nHeight = pindex->nHeight; | int nHeight = pindex->nHeight; | ||||
const CChainParams &chainparams = config.GetChainParams(); | const CChainParams &chainparams = config.GetChainParams(); | ||||
// Write block to history file | // Write block to history file | ||||
try { | try { | ||||
▲ Show 20 Lines • Show All 1,623 Lines • Show Last 20 Lines |