|
|
@ -84,13 +84,19 @@ public: |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
void UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev) |
|
|
|
int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev) |
|
|
|
{ |
|
|
|
{ |
|
|
|
pblock->nTime = std::max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); |
|
|
|
int64_t nOldTime = pblock->nTime; |
|
|
|
|
|
|
|
int64_t nNewTime = std::max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (nOldTime < nNewTime) |
|
|
|
|
|
|
|
pblock->nTime = nNewTime; |
|
|
|
|
|
|
|
|
|
|
|
// Updating time can change work required on testnet:
|
|
|
|
// Updating time can change work required on testnet:
|
|
|
|
if (consensusParams.fPowAllowMinDifficultyBlocks) |
|
|
|
if (consensusParams.fPowAllowMinDifficultyBlocks) |
|
|
|
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, consensusParams); |
|
|
|
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, consensusParams); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return nNewTime - nOldTime; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) |
|
|
|
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) |
|
|
@ -521,7 +527,9 @@ void static BitcoinMiner(const CChainParams& chainparams) |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
// Update nTime every few seconds
|
|
|
|
// Update nTime every few seconds
|
|
|
|
UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev); |
|
|
|
if (UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev) < 0) |
|
|
|
|
|
|
|
break; // Recreate the block if the clock has run backwards,
|
|
|
|
|
|
|
|
// so that we can use the correct time.
|
|
|
|
if (chainparams.GetConsensus().fPowAllowMinDifficultyBlocks) |
|
|
|
if (chainparams.GetConsensus().fPowAllowMinDifficultyBlocks) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Changing pblock->nTime can change work required on testnet:
|
|
|
|
// Changing pblock->nTime can change work required on testnet:
|
|
|
|