mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
checkpoints: move the checkpoints enable boolean into main
This pertains to app-state, so it doesn't make sense to handle inside the checkpoint functions.
This commit is contained in:
parent
11982d366d
commit
a8cdaf5c96
@ -23,13 +23,8 @@ namespace Checkpoints {
|
|||||||
*/
|
*/
|
||||||
static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;
|
static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;
|
||||||
|
|
||||||
bool fEnabled = true;
|
|
||||||
|
|
||||||
bool CheckBlock(const CCheckpointData& data, int nHeight, const uint256& hash)
|
bool CheckBlock(const CCheckpointData& data, int nHeight, const uint256& hash)
|
||||||
{
|
{
|
||||||
if (!fEnabled)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
|
|
||||||
MapCheckpoints::const_iterator i = checkpoints.find(nHeight);
|
MapCheckpoints::const_iterator i = checkpoints.find(nHeight);
|
||||||
@ -69,19 +64,16 @@ namespace Checkpoints {
|
|||||||
|
|
||||||
int GetTotalBlocksEstimate(const CCheckpointData& data)
|
int GetTotalBlocksEstimate(const CCheckpointData& data)
|
||||||
{
|
{
|
||||||
if (!fEnabled)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
|
|
||||||
|
if (checkpoints.empty())
|
||||||
|
return 0;
|
||||||
|
|
||||||
return checkpoints.rbegin()->first;
|
return checkpoints.rbegin()->first;
|
||||||
}
|
}
|
||||||
|
|
||||||
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
|
CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
|
||||||
{
|
{
|
||||||
if (!fEnabled)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
const MapCheckpoints& checkpoints = data.mapCheckpoints;
|
||||||
|
|
||||||
BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
|
BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
|
||||||
|
@ -37,8 +37,6 @@ CBlockIndex* GetLastCheckpoint(const CCheckpointData& data);
|
|||||||
|
|
||||||
double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex* pindex, bool fSigchecks = true);
|
double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex* pindex, bool fSigchecks = true);
|
||||||
|
|
||||||
extern bool fEnabled;
|
|
||||||
|
|
||||||
} //namespace Checkpoints
|
} //namespace Checkpoints
|
||||||
|
|
||||||
#endif // BITCOIN_CHECKPOINTS_H
|
#endif // BITCOIN_CHECKPOINTS_H
|
||||||
|
@ -741,7 +741,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
|||||||
// Checkmempool and checkblockindex default to true in regtest mode
|
// Checkmempool and checkblockindex default to true in regtest mode
|
||||||
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
|
mempool.setSanityCheck(GetBoolArg("-checkmempool", chainparams.DefaultConsistencyChecks()));
|
||||||
fCheckBlockIndex = GetBoolArg("-checkblockindex", chainparams.DefaultConsistencyChecks());
|
fCheckBlockIndex = GetBoolArg("-checkblockindex", chainparams.DefaultConsistencyChecks());
|
||||||
Checkpoints::fEnabled = GetBoolArg("-checkpoints", true);
|
fCheckpointsEnabled = GetBoolArg("-checkpoints", true);
|
||||||
|
|
||||||
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
|
// -par=0 means autodetect, but nScriptCheckThreads==0 means no concurrency
|
||||||
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
nScriptCheckThreads = GetArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
|
||||||
|
30
src/main.cpp
30
src/main.cpp
@ -56,6 +56,7 @@ bool fHavePruned = false;
|
|||||||
bool fPruneMode = false;
|
bool fPruneMode = false;
|
||||||
bool fIsBareMultisigStd = true;
|
bool fIsBareMultisigStd = true;
|
||||||
bool fCheckBlockIndex = false;
|
bool fCheckBlockIndex = false;
|
||||||
|
bool fCheckpointsEnabled = true;
|
||||||
unsigned int nCoinCacheSize = 5000;
|
unsigned int nCoinCacheSize = 5000;
|
||||||
uint64_t nPruneTarget = 0;
|
uint64_t nPruneTarget = 0;
|
||||||
|
|
||||||
@ -1206,7 +1207,9 @@ bool IsInitialBlockDownload()
|
|||||||
{
|
{
|
||||||
const CChainParams& chainParams = Params();
|
const CChainParams& chainParams = Params();
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
if (fImporting || fReindex || chainActive.Height() < Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints()))
|
if (fImporting || fReindex)
|
||||||
|
return true;
|
||||||
|
if (fCheckpointsEnabled && chainActive.Height() < Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints()))
|
||||||
return true;
|
return true;
|
||||||
static bool lockIBDState = false;
|
static bool lockIBDState = false;
|
||||||
if (lockIBDState)
|
if (lockIBDState)
|
||||||
@ -1710,7 +1713,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fScriptChecks = pindex->nHeight >= Checkpoints::GetTotalBlocksEstimate(chainparams.Checkpoints());
|
bool fScriptChecks = (!fCheckpointsEnabled || pindex->nHeight >= Checkpoints::GetTotalBlocksEstimate(chainparams.Checkpoints()));
|
||||||
|
|
||||||
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
|
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
|
||||||
// unless those are already completely spent.
|
// unless those are already completely spent.
|
||||||
@ -2274,7 +2277,9 @@ bool ActivateBestChain(CValidationState &state, CBlock *pblock) {
|
|||||||
if (!fInitialDownload) {
|
if (!fInitialDownload) {
|
||||||
uint256 hashNewTip = pindexNewTip->GetBlockHash();
|
uint256 hashNewTip = pindexNewTip->GetBlockHash();
|
||||||
// Relay inventory, but don't relay old inventory during initial block download.
|
// Relay inventory, but don't relay old inventory during initial block download.
|
||||||
int nBlockEstimate = Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints());
|
int nBlockEstimate = 0;
|
||||||
|
if (fCheckpointsEnabled)
|
||||||
|
nBlockEstimate = Checkpoints::GetTotalBlocksEstimate(chainParams.Checkpoints());
|
||||||
// Don't relay blocks if pruning -- could cause a peer to try to download, resulting
|
// Don't relay blocks if pruning -- could cause a peer to try to download, resulting
|
||||||
// in a stalled download if the block file is pruned before the request.
|
// in a stalled download if the block file is pruned before the request.
|
||||||
if (nLocalServices & NODE_NETWORK) {
|
if (nLocalServices & NODE_NETWORK) {
|
||||||
@ -2624,15 +2629,18 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
|||||||
return state.Invalid(error("%s: block's timestamp is too early", __func__),
|
return state.Invalid(error("%s: block's timestamp is too early", __func__),
|
||||||
REJECT_INVALID, "time-too-old");
|
REJECT_INVALID, "time-too-old");
|
||||||
|
|
||||||
// Check that the block chain matches the known block chain up to a checkpoint
|
if(fCheckpointsEnabled)
|
||||||
if (!Checkpoints::CheckBlock(chainParams.Checkpoints(), nHeight, hash))
|
{
|
||||||
return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
|
// Check that the block chain matches the known block chain up to a checkpoint
|
||||||
REJECT_CHECKPOINT, "checkpoint mismatch");
|
if (!Checkpoints::CheckBlock(chainParams.Checkpoints(), nHeight, hash))
|
||||||
|
return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
|
||||||
|
REJECT_CHECKPOINT, "checkpoint mismatch");
|
||||||
|
|
||||||
// Don't accept any forks from the main chain prior to last checkpoint
|
// Don't accept any forks from the main chain prior to last checkpoint
|
||||||
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(chainParams.Checkpoints());
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(chainParams.Checkpoints());
|
||||||
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
||||||
return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, nHeight));
|
return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, nHeight));
|
||||||
|
}
|
||||||
|
|
||||||
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||||
if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated))
|
if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated))
|
||||||
|
@ -118,6 +118,7 @@ extern int nScriptCheckThreads;
|
|||||||
extern bool fTxIndex;
|
extern bool fTxIndex;
|
||||||
extern bool fIsBareMultisigStd;
|
extern bool fIsBareMultisigStd;
|
||||||
extern bool fCheckBlockIndex;
|
extern bool fCheckBlockIndex;
|
||||||
|
extern bool fCheckpointsEnabled;
|
||||||
extern unsigned int nCoinCacheSize;
|
extern unsigned int nCoinCacheSize;
|
||||||
extern CFeeRate minRelayTxFee;
|
extern CFeeRate minRelayTxFee;
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
uint256 hash;
|
uint256 hash;
|
||||||
|
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
Checkpoints::fEnabled = false;
|
fCheckpointsEnabled = false;
|
||||||
|
|
||||||
// Simple block creation, nothing special yet:
|
// Simple block creation, nothing special yet:
|
||||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey));
|
BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey));
|
||||||
@ -262,7 +262,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
BOOST_FOREACH(CTransaction *tx, txFirst)
|
BOOST_FOREACH(CTransaction *tx, txFirst)
|
||||||
delete tx;
|
delete tx;
|
||||||
|
|
||||||
Checkpoints::fEnabled = true;
|
fCheckpointsEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
Loading…
Reference in New Issue
Block a user