2015-02-11 11:58:11 +01:00
|
|
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
2021-12-30 19:36:57 +02:00
|
|
|
// Copyright (c) 2009-2021 The Bitcoin Core developers
|
2015-02-11 11:58:11 +01:00
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2015-03-21 18:15:31 +01:00
|
|
|
#ifndef BITCOIN_CONSENSUS_PARAMS_H
|
|
|
|
#define BITCOIN_CONSENSUS_PARAMS_H
|
2015-02-11 11:58:11 +01:00
|
|
|
|
2017-11-10 13:57:53 +13:00
|
|
|
#include <uint256.h>
|
2021-11-16 14:40:19 +01:00
|
|
|
|
2017-10-17 18:47:57 +10:00
|
|
|
#include <limits>
|
2021-11-16 14:40:19 +01:00
|
|
|
#include <map>
|
2015-02-11 11:58:11 +01:00
|
|
|
|
|
|
|
namespace Consensus {
|
2016-02-15 05:13:27 +01:00
|
|
|
|
2021-07-01 19:58:16 +02:00
|
|
|
/**
|
|
|
|
* A buried deployment is one where the height of the activation has been hardcoded into
|
|
|
|
* the client implementation long after the consensus change has activated. See BIP 90.
|
|
|
|
*/
|
|
|
|
enum BuriedDeployment : int16_t {
|
2020-06-16 18:58:56 +10:00
|
|
|
// buried deployments get negative values to avoid overlap with DeploymentPos
|
|
|
|
DEPLOYMENT_HEIGHTINCB = std::numeric_limits<int16_t>::min(),
|
|
|
|
DEPLOYMENT_CLTV,
|
|
|
|
DEPLOYMENT_DERSIG,
|
|
|
|
DEPLOYMENT_CSV,
|
|
|
|
DEPLOYMENT_SEGWIT,
|
|
|
|
};
|
2021-08-01 18:36:43 +10:00
|
|
|
constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_SEGWIT; }
|
2020-06-16 18:58:56 +10:00
|
|
|
|
2021-07-01 19:58:16 +02:00
|
|
|
enum DeploymentPos : uint16_t {
|
2016-03-09 16:00:53 -05:00
|
|
|
DEPLOYMENT_TESTDUMMY,
|
2020-09-11 14:34:17 -07:00
|
|
|
DEPLOYMENT_TAPROOT, // Deployment of Schnorr/Taproot (BIPs 340-342)
|
2021-03-11 12:17:22 +10:00
|
|
|
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
|
2016-03-09 16:00:53 -05:00
|
|
|
MAX_VERSION_BITS_DEPLOYMENTS
|
2016-02-15 05:13:27 +01:00
|
|
|
};
|
2021-08-01 18:36:43 +10:00
|
|
|
constexpr bool ValidDeployment(DeploymentPos dep) { return dep < MAX_VERSION_BITS_DEPLOYMENTS; }
|
2016-02-15 05:13:27 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
2021-03-06 18:18:49 +10:00
|
|
|
/** If lock in occurs, delay activation until at least this block
|
|
|
|
* height. Note that activation will only occur on a retarget
|
|
|
|
* boundary.
|
|
|
|
*/
|
|
|
|
int min_activation_height{0};
|
2017-10-17 18:47:57 +10:00
|
|
|
|
|
|
|
/** Constant for nTimeout very far in the future. */
|
|
|
|
static constexpr int64_t NO_TIMEOUT = std::numeric_limits<int64_t>::max();
|
2017-10-11 20:25:05 -07:00
|
|
|
|
|
|
|
/** 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;
|
2021-03-27 23:00:14 +10:00
|
|
|
|
|
|
|
/** Special value for nStartTime indicating that the deployment is never active.
|
|
|
|
* This is useful for integrating the code changes for a new feature
|
|
|
|
* prior to deploying it on some or all networks. */
|
|
|
|
static constexpr int64_t NEVER_ACTIVE = -2;
|
2016-02-15 05:13:27 +01:00
|
|
|
};
|
|
|
|
|
2015-02-11 11:58:11 +01:00
|
|
|
/**
|
|
|
|
* Parameters that influence chain consensus.
|
|
|
|
*/
|
|
|
|
struct Params {
|
|
|
|
uint256 hashGenesisBlock;
|
|
|
|
int nSubsidyHalvingInterval;
|
2021-11-16 14:40:19 +01:00
|
|
|
/**
|
|
|
|
* Hashes of blocks that
|
|
|
|
* - are known to be consensus valid, and
|
|
|
|
* - buried in the chain, and
|
|
|
|
* - fail if the default script verify flags are applied.
|
|
|
|
*/
|
|
|
|
std::map<uint256, uint32_t> script_flag_exceptions;
|
2015-11-02 16:41:55 -05:00
|
|
|
/** Block height and hash at which BIP34 becomes active */
|
|
|
|
int BIP34Height;
|
|
|
|
uint256 BIP34Hash;
|
2016-07-22 08:27:55 +09:00
|
|
|
/** Block height at which BIP65 becomes active */
|
|
|
|
int BIP65Height;
|
|
|
|
/** Block height at which BIP66 becomes active */
|
|
|
|
int BIP66Height;
|
2019-05-20 14:58:44 -04:00
|
|
|
/** Block height at which CSV (BIP68, BIP112 and BIP113) becomes active */
|
|
|
|
int CSVHeight;
|
2019-05-20 14:59:07 -04:00
|
|
|
/** Block height at which Segwit (BIP141, BIP143 and BIP147) becomes active.
|
|
|
|
* Note that segwit v0 script rules are enforced on all blocks except the
|
|
|
|
* BIP 16 exception blocks. */
|
|
|
|
int SegwitHeight;
|
2019-09-06 00:28:52 +10:00
|
|
|
/** Don't warn about unknown BIP 9 activations below this height.
|
|
|
|
* This prevents us from warning about the CSV and segwit activations. */
|
|
|
|
int MinBIP9WarningHeight;
|
2016-02-15 05:13:27 +01:00
|
|
|
/**
|
2017-01-18 16:15:37 +01:00
|
|
|
* Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period,
|
2016-02-15 05:13:27 +01:00
|
|
|
* (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];
|
2015-02-11 11:58:11 +01:00
|
|
|
/** Proof of work parameters */
|
2015-03-25 15:00:32 -04:00
|
|
|
uint256 powLimit;
|
2015-02-11 11:58:11 +01:00
|
|
|
bool fPowAllowMinDifficultyBlocks;
|
2015-10-19 08:25:29 -04:00
|
|
|
bool fPowNoRetargeting;
|
2015-02-11 11:58:11 +01:00
|
|
|
int64_t nPowTargetSpacing;
|
|
|
|
int64_t nPowTargetTimespan;
|
|
|
|
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
|
2020-09-30 15:03:52 +02:00
|
|
|
/** The best chain should have at least this much work */
|
2016-10-22 05:33:25 +00:00
|
|
|
uint256 nMinimumChainWork;
|
2020-09-30 15:03:52 +02:00
|
|
|
/** By default assume that the signatures in ancestors of this block are valid */
|
2017-01-06 11:49:59 +00:00
|
|
|
uint256 defaultAssumeValid;
|
2019-07-17 17:41:32 +09:00
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, witness commitments contain a payload equal to a Bitcoin Script solution
|
|
|
|
* to the signet challenge. See BIP325.
|
|
|
|
*/
|
|
|
|
bool signet_blocks{false};
|
|
|
|
std::vector<uint8_t> signet_challenge;
|
2020-06-16 18:58:56 +10:00
|
|
|
|
|
|
|
int DeploymentHeight(BuriedDeployment dep) const
|
|
|
|
{
|
|
|
|
switch (dep) {
|
|
|
|
case DEPLOYMENT_HEIGHTINCB:
|
|
|
|
return BIP34Height;
|
|
|
|
case DEPLOYMENT_CLTV:
|
|
|
|
return BIP65Height;
|
|
|
|
case DEPLOYMENT_DERSIG:
|
|
|
|
return BIP66Height;
|
|
|
|
case DEPLOYMENT_CSV:
|
|
|
|
return CSVHeight;
|
|
|
|
case DEPLOYMENT_SEGWIT:
|
|
|
|
return SegwitHeight;
|
|
|
|
} // no default case, so the compiler can warn about missing cases
|
|
|
|
return std::numeric_limits<int>::max();
|
|
|
|
}
|
2015-02-11 11:58:11 +01:00
|
|
|
};
|
2020-06-16 18:58:56 +10:00
|
|
|
|
2015-02-11 11:58:11 +01:00
|
|
|
} // namespace Consensus
|
|
|
|
|
2015-03-21 18:15:31 +01:00
|
|
|
#endif // BITCOIN_CONSENSUS_PARAMS_H
|