params.h
1 // Copyright (c) 2009-2010 Satoshi Nakamoto 2 // Copyright (c) 2009-present The Bitcoin Core developers 3 // Distributed under the MIT software license, see the accompanying 4 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 6 #ifndef BITCOIN_CONSENSUS_PARAMS_H 7 #define BITCOIN_CONSENSUS_PARAMS_H 8 9 #include <script/verify_flags.h> 10 #include <uint256.h> 11 12 #include <array> 13 #include <chrono> 14 #include <limits> 15 #include <map> 16 #include <vector> 17 18 namespace Consensus { 19 20 /** 21 * A buried deployment is one where the height of the activation has been hardcoded into 22 * the client implementation long after the consensus change has activated. See BIP 90. 23 */ 24 enum BuriedDeployment : int16_t { 25 // buried deployments get negative values to avoid overlap with DeploymentPos 26 DEPLOYMENT_HEIGHTINCB = std::numeric_limits<int16_t>::min(), 27 DEPLOYMENT_CLTV, 28 DEPLOYMENT_DERSIG, 29 DEPLOYMENT_CSV, 30 DEPLOYMENT_SEGWIT, 31 }; 32 constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_SEGWIT; } 33 34 enum DeploymentPos : uint16_t { 35 DEPLOYMENT_TESTDUMMY, 36 DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342) 37 // NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp 38 MAX_VERSION_BITS_DEPLOYMENTS 39 }; 40 constexpr bool ValidDeployment(DeploymentPos dep) { return dep < MAX_VERSION_BITS_DEPLOYMENTS; } 41 42 /** 43 * Struct for each individual consensus rule change using BIP9. 44 */ 45 struct BIP9Deployment { 46 /** Bit position to select the particular bit in nVersion. */ 47 int bit{28}; 48 /** Start MedianTime for version bits miner confirmation. Can be a date in the past */ 49 int64_t nStartTime{NEVER_ACTIVE}; 50 /** Timeout/expiry MedianTime for the deployment attempt. */ 51 int64_t nTimeout{NEVER_ACTIVE}; 52 /** If lock in occurs, delay activation until at least this block 53 * height. Note that activation will only occur on a retarget 54 * boundary. 55 */ 56 int min_activation_height{0}; 57 /** Period of blocks to check signalling in (usually retarget period, ie params.DifficultyAdjustmentInterval()) */ 58 uint32_t period{2016}; 59 /** 60 * Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period, 61 * which is also used for BIP9 deployments. 62 * Examples: 1916 for 95%, 1512 for testchains. 63 */ 64 uint32_t threshold{1916}; 65 66 /** Constant for nTimeout very far in the future. */ 67 static constexpr int64_t NO_TIMEOUT = std::numeric_limits<int64_t>::max(); 68 69 /** Special value for nStartTime indicating that the deployment is always active. 70 * This is useful for testing, as it means tests don't need to deal with the activation 71 * process (which takes at least 3 BIP9 intervals). Only tests that specifically test the 72 * behaviour during activation cannot use this. */ 73 static constexpr int64_t ALWAYS_ACTIVE = -1; 74 75 /** Special value for nStartTime indicating that the deployment is never active. 76 * This is useful for integrating the code changes for a new feature 77 * prior to deploying it on some or all networks. */ 78 static constexpr int64_t NEVER_ACTIVE = -2; 79 }; 80 81 /** 82 * Parameters that influence chain consensus. 83 */ 84 struct Params { 85 uint256 hashGenesisBlock; 86 int nSubsidyHalvingInterval; 87 /** 88 * Hashes of blocks that 89 * - are known to be consensus valid, and 90 * - buried in the chain, and 91 * - fail if the default script verify flags are applied. 92 */ 93 std::map<uint256, script_verify_flags> script_flag_exceptions; 94 /** Block height and hash at which BIP34 becomes active */ 95 int BIP34Height; 96 uint256 BIP34Hash; 97 /** Block height at which BIP65 becomes active */ 98 int BIP65Height; 99 /** Block height at which BIP66 becomes active */ 100 int BIP66Height; 101 /** Block height at which CSV (BIP68, BIP112 and BIP113) becomes active */ 102 int CSVHeight; 103 /** Block height at which Segwit (BIP141, BIP143 and BIP147) becomes active. 104 * Note that segwit v0 script rules are enforced on all blocks except the 105 * BIP 16 exception blocks. */ 106 int SegwitHeight; 107 /** Don't warn about unknown BIP 9 activations below this height. 108 * This prevents us from warning about the CSV and segwit activations. */ 109 int MinBIP9WarningHeight; 110 std::array<BIP9Deployment,MAX_VERSION_BITS_DEPLOYMENTS> vDeployments; 111 /** Proof of work parameters */ 112 uint256 powLimit; 113 bool fPowAllowMinDifficultyBlocks; 114 /** 115 * Enforce BIP94 timewarp attack mitigation. On testnet4 this also enforces 116 * the block storm mitigation. 117 */ 118 bool enforce_BIP94; 119 bool fPowNoRetargeting; 120 int64_t nPowTargetSpacing; 121 int64_t nPowTargetTimespan; 122 std::chrono::seconds PowTargetSpacing() const 123 { 124 return std::chrono::seconds{nPowTargetSpacing}; 125 } 126 int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; } 127 /** The best chain should have at least this much work */ 128 uint256 nMinimumChainWork; 129 /** By default assume that the signatures in ancestors of this block are valid */ 130 uint256 defaultAssumeValid; 131 132 /** 133 * If true, witness commitments contain a payload equal to a Bitcoin Script solution 134 * to the signet challenge. See BIP325. 135 */ 136 bool signet_blocks{false}; 137 std::vector<uint8_t> signet_challenge; 138 139 int DeploymentHeight(BuriedDeployment dep) const 140 { 141 switch (dep) { 142 case DEPLOYMENT_HEIGHTINCB: 143 return BIP34Height; 144 case DEPLOYMENT_CLTV: 145 return BIP65Height; 146 case DEPLOYMENT_DERSIG: 147 return BIP66Height; 148 case DEPLOYMENT_CSV: 149 return CSVHeight; 150 case DEPLOYMENT_SEGWIT: 151 return SegwitHeight; 152 } // no default case, so the compiler can warn about missing cases 153 return std::numeric_limits<int>::max(); 154 } 155 }; 156 157 } // namespace Consensus 158 159 #endif // BITCOIN_CONSENSUS_PARAMS_H