node/chainstate: Decouple from GetTime

This commit is contained in:
Kittywhiskers Van Gogh 2021-09-22 15:36:10 -04:00
parent f7aef8d331
commit fdf803d013
No known key found for this signature in database
GPG Key ID: 30CD0C065E5C4AAD
3 changed files with 7 additions and 5 deletions

View File

@ -1971,7 +1971,8 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
fReindexChainState, fReindexChainState,
chainparams, chainparams,
check_blocks, check_blocks,
args.GetArg("-checklevel", DEFAULT_CHECKLEVEL)); args.GetArg("-checklevel", DEFAULT_CHECKLEVEL),
static_cast<int64_t(*)()>(GetTime));
} catch (const std::exception& e) { } catch (const std::exception& e) {
LogPrintf("%s\n", e.what()); LogPrintf("%s\n", e.what());
rv2 = ChainstateLoadVerifyError::ERROR_GENERIC_FAILURE; rv2 = ChainstateLoadVerifyError::ERROR_GENERIC_FAILURE;

View File

@ -6,7 +6,6 @@
#include <chainparams.h> // for CChainParams #include <chainparams.h> // for CChainParams
#include <deploymentstatus.h> // for DeploymentActiveAfter #include <deploymentstatus.h> // for DeploymentActiveAfter
#include <util/time.h> // for GetTime
#include <node/blockstorage.h> // for CleanupBlockRevFiles, fHavePruned, fReindex #include <node/blockstorage.h> // for CleanupBlockRevFiles, fHavePruned, fReindex
#include <shutdown.h> // for ShutdownRequested #include <shutdown.h> // for ShutdownRequested
#include <validation.h> // for a lot of things #include <validation.h> // for a lot of things
@ -233,7 +232,8 @@ std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManage
bool fReindexChainState, bool fReindexChainState,
const CChainParams& chainparams, const CChainParams& chainparams,
unsigned int check_blocks, unsigned int check_blocks,
unsigned int check_level) unsigned int check_level,
std::function<int64_t()> get_unix_time_seconds)
{ {
auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
return fReset || fReindexChainState || chainstate->CoinsTip().GetBestBlock().IsNull(); return fReset || fReindexChainState || chainstate->CoinsTip().GetBestBlock().IsNull();
@ -245,7 +245,7 @@ std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManage
for (CChainState* chainstate : chainman.GetAll()) { for (CChainState* chainstate : chainman.GetAll()) {
if (!is_coinsview_empty(chainstate)) { if (!is_coinsview_empty(chainstate)) {
const CBlockIndex* tip = chainstate->m_chain.Tip(); const CBlockIndex* tip = chainstate->m_chain.Tip();
if (tip && tip->nTime > GetTime() + MAX_FUTURE_BLOCK_TIME) { if (tip && tip->nTime > get_unix_time_seconds() + 2 * 60 * 60) {
return ChainstateLoadVerifyError::ERROR_BLOCK_FROM_FUTURE; return ChainstateLoadVerifyError::ERROR_BLOCK_FROM_FUTURE;
} }
const bool v19active{DeploymentActiveAfter(tip, chainparams.GetConsensus(), Consensus::DEPLOYMENT_V19)}; const bool v19active{DeploymentActiveAfter(tip, chainparams.GetConsensus(), Consensus::DEPLOYMENT_V19)};

View File

@ -120,6 +120,7 @@ std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManage
bool fReindexChainState, bool fReindexChainState,
const CChainParams& chainparams, const CChainParams& chainparams,
unsigned int check_blocks, unsigned int check_blocks,
unsigned int check_level); unsigned int check_level,
std::function<int64_t()> get_unix_time_seconds);
#endif // BITCOIN_NODE_CHAINSTATE_H #endif // BITCOIN_NODE_CHAINSTATE_H