Branch data Line data Source code
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 : 10 : std::chrono::seconds PowTargetSpacing() const
126 : : {
127 : 10 : return std::chrono::seconds{nPowTargetSpacing};
128 : : }
129 [ + - + + ]: 244538 : 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 : 156087 : int DeploymentHeight(BuriedDeployment dep) const
143 : : {
144 [ + + + + : 156087 : switch (dep) {
+ - ]
145 : 16175 : case DEPLOYMENT_HEIGHTINCB:
146 : 16175 : return BIP34Height;
147 : 16393 : case DEPLOYMENT_CLTV:
148 : 16393 : return BIP65Height;
149 : 16393 : case DEPLOYMENT_DERSIG:
150 : 16393 : return BIP66Height;
151 : 48842 : case DEPLOYMENT_CSV:
152 : 48842 : return CSVHeight;
153 : 58284 : case DEPLOYMENT_SEGWIT:
154 : 58284 : 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
|