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