Changeset View
Changeset View
Standalone View
Standalone View
src/consensus/params.h
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2016 The Bitcoin Core developers | // Copyright (c) 2009-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#ifndef BITCOIN_CONSENSUS_PARAMS_H | #ifndef BITCOIN_CONSENSUS_PARAMS_H | ||||
#define BITCOIN_CONSENSUS_PARAMS_H | #define BITCOIN_CONSENSUS_PARAMS_H | ||||
#include <primitives/blockhash.h> | #include <primitives/blockhash.h> | ||||
#include <uint256.h> | #include <uint256.h> | ||||
#include <limits> | |||||
namespace Consensus { | namespace Consensus { | ||||
enum DeploymentPos { | |||||
DEPLOYMENT_TESTDUMMY, | |||||
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in | |||||
// versionbits.cpp | |||||
MAX_VERSION_BITS_DEPLOYMENTS, | |||||
}; | |||||
/** | |||||
* Struct for each individual consensus rule change using BIP9. | |||||
*/ | |||||
struct BIP9Deployment { | |||||
/** Bit position to select the particular bit in nVersion. */ | |||||
int bit; | |||||
/** | |||||
* Start MedianTime for version bits miner confirmation. Can be a date in | |||||
* the past. | |||||
*/ | |||||
int64_t nStartTime; | |||||
/** Timeout/expiry MedianTime for the deployment attempt. */ | |||||
int64_t nTimeout; | |||||
/** Constant for nTimeout very far in the future. */ | |||||
static constexpr int64_t NO_TIMEOUT = std::numeric_limits<int64_t>::max(); | |||||
/** | |||||
* Special value for nStartTime indicating that the deployment is always | |||||
* active. This is useful for testing, as it means tests don't need to deal | |||||
* with the activation process (which takes at least 3 BIP9 intervals). Only | |||||
* tests that specifically test the behaviour during activation cannot use | |||||
* this. | |||||
*/ | |||||
static constexpr int64_t ALWAYS_ACTIVE = -1; | |||||
}; | |||||
/** | /** | ||||
* Parameters that influence chain consensus. | * Parameters that influence chain consensus. | ||||
*/ | */ | ||||
struct Params { | struct Params { | ||||
BlockHash hashGenesisBlock; | BlockHash hashGenesisBlock; | ||||
int nSubsidyHalvingInterval; | int nSubsidyHalvingInterval; | ||||
/** Block height at which BIP16 becomes active */ | /** Block height at which BIP16 becomes active */ | ||||
int BIP16Height; | int BIP16Height; | ||||
Show All 11 Lines | struct Params { | ||||
/** Block height at which the new DAA becomes active */ | /** Block height at which the new DAA becomes active */ | ||||
int daaHeight; | int daaHeight; | ||||
/** Block height at which the magnetic anomaly activation becomes active */ | /** Block height at which the magnetic anomaly activation becomes active */ | ||||
int magneticAnomalyHeight; | int magneticAnomalyHeight; | ||||
/** Block height at which the graviton activation becomes active */ | /** Block height at which the graviton activation becomes active */ | ||||
int gravitonHeight; | int gravitonHeight; | ||||
/** Unix time used for MTP activation of 15 May 2020 12:00:00 UTC upgrade */ | /** Unix time used for MTP activation of 15 May 2020 12:00:00 UTC upgrade */ | ||||
int phononActivationTime; | int phononActivationTime; | ||||
/** | |||||
* Don't warn about unknown BIP 9 activations below this height. | |||||
* This prevents us from warning about the CSV and segwit activations. | |||||
*/ | |||||
int MinBIP9WarningHeight; | |||||
/** | |||||
* Minimum blocks including miner confirmation of the total of 2016 blocks | |||||
* in a retargeting period, (nPowTargetTimespan / nPowTargetSpacing) which | |||||
* is also used for BIP9 deployments. Examples: 1916 for 95%, 1512 for | |||||
* testchains. | |||||
*/ | |||||
uint32_t nRuleChangeActivationThreshold; | |||||
uint32_t nMinerConfirmationWindow; | |||||
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]; | |||||
/** Proof of work parameters */ | /** Proof of work parameters */ | ||||
uint256 powLimit; | uint256 powLimit; | ||||
bool fPowAllowMinDifficultyBlocks; | bool fPowAllowMinDifficultyBlocks; | ||||
bool fPowNoRetargeting; | bool fPowNoRetargeting; | ||||
int64_t nPowTargetSpacing; | int64_t nPowTargetSpacing; | ||||
int64_t nPowTargetTimespan; | int64_t nPowTargetTimespan; | ||||
int64_t DifficultyAdjustmentInterval() const { | int64_t DifficultyAdjustmentInterval() const { | ||||
return nPowTargetTimespan / nPowTargetSpacing; | return nPowTargetTimespan / nPowTargetSpacing; | ||||
} | } | ||||
uint256 nMinimumChainWork; | uint256 nMinimumChainWork; | ||||
BlockHash defaultAssumeValid; | BlockHash defaultAssumeValid; | ||||
}; | }; | ||||
} // namespace Consensus | } // namespace Consensus | ||||
#endif // BITCOIN_CONSENSUS_PARAMS_H | #endif // BITCOIN_CONSENSUS_PARAMS_H |