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