diff --git a/src/chainparams.cpp b/src/chainparams.cpp index d53dcfdb567..bb01b42c164 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -133,6 +133,9 @@ class CMainParams : public CChainParams { consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170007; consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; + // The best chain should have at least this much work. + consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000000281b32ff3198a1"); + /** * The message start string is designed to be unlikely to occur in normal data. * The characters are rarely used upper ASCII, not valid as UTF-8, and produce @@ -385,6 +388,9 @@ class CTestNetParams : public CChainParams { consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nProtocolVersion = 170007; consensus.vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = 280000; + // The best chain should have at least this much work. + consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000000000001d0c4d9cd"); + pchMessageStart[0] = 0x5A; pchMessageStart[1] = 0x1F; pchMessageStart[2] = 0x7E; @@ -480,6 +486,9 @@ class CRegTestParams : public CChainParams { Consensus::NetworkUpgrade::NO_ACTIVATION_HEIGHT; coinbaseMaturity = 1; + // The best chain should have at least this much work. + consensus.nMinimumChainWork = uint256S("0x00"); + pchMessageStart[0] = 0xaa; pchMessageStart[1] = 0x8e; pchMessageStart[2] = 0xf3; diff --git a/src/consensus/params.h b/src/consensus/params.h index e6566d21193..d562cc2bd29 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -141,6 +141,7 @@ struct Params { int64_t MaxActualTimespan() const { return (AveragingWindowTimespan() * (100 + nPowMaxAdjustDown)) / 100; } void SetSaplingHeight(int32_t height) { vUpgrades[Consensus::UPGRADE_SAPLING].nActivationHeight = height; } void SetOverwinterHeight(int32_t height) { vUpgrades[Consensus::UPGRADE_OVERWINTER].nActivationHeight = height; } + uint256 nMinimumChainWork; }; } // namespace Consensus diff --git a/src/main.cpp b/src/main.cpp index f912d9cdccb..1a9fe714612 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2486,6 +2486,11 @@ bool IsInitialBlockDownload() { return true; } + if (false && ptr->nChainWork < UintToArith256(chainParams.GetConsensus().nMinimumChainWork)) // MinimumChainWork disabled + { + fprintf(stderr,"nChainWork insufficient in IsInitialDownload\n"); + return true; + } bool state = ((chainActive.Height() < ptr->nHeight - 24*60) || ptr->GetBlockTime() < (GetTime() - nMaxTipAge)); if ( KOMODO_INSYNC != 0 )