mirror of
https://github.com/dashpay/dash.git
synced 2024-12-28 21:42:47 +01:00
a7f5379e19
merge bitcoin#15928...#16984: backports
127 lines
5.2 KiB
C++
127 lines
5.2 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_CONSENSUS_PARAMS_H
|
|
#define BITCOIN_CONSENSUS_PARAMS_H
|
|
|
|
#include <uint256.h>
|
|
#include <map>
|
|
#include <string>
|
|
#include <llmq/params.h>
|
|
|
|
namespace Consensus {
|
|
|
|
enum DeploymentPos
|
|
{
|
|
DEPLOYMENT_TESTDUMMY,
|
|
DEPLOYMENT_CSV, // Deployment of BIP68, BIP112, and BIP113.
|
|
DEPLOYMENT_DIP0001, // Deployment of DIP0001 and lower transaction fees.
|
|
DEPLOYMENT_BIP147, // Deployment of BIP147 (NULLDUMMY)
|
|
DEPLOYMENT_DIP0003, // Deployment of DIP0002 and DIP0003 (txv3 and deterministic MN lists)
|
|
DEPLOYMENT_DIP0008, // Deployment of ChainLock enforcement
|
|
DEPLOYMENT_REALLOC, // Deployment of Block Reward Reallocation
|
|
DEPLOYMENT_DIP0020, // Deployment of DIP0020, DIP0021 and LMQ_100_67 quorums
|
|
DEPLOYMENT_GOV_FEE, // Deployment of decreased governance proposal fee
|
|
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in versionbits.cpp
|
|
MAX_VERSION_BITS_DEPLOYMENTS
|
|
};
|
|
|
|
/**
|
|
* 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;
|
|
/** The number of past blocks (including the block under consideration) to be taken into account for locking in a fork. */
|
|
int64_t nWindowSize{0};
|
|
/** A starting number of blocks, in the range of 1..nWindowSize, which must signal for a fork in order to lock it in. */
|
|
int64_t nThresholdStart{0};
|
|
/** A minimum number of blocks, in the range of 1..nWindowSize, which must signal for a fork in order to lock it in. */
|
|
int64_t nThresholdMin{0};
|
|
/** A coefficient which adjusts the speed a required number of signaling blocks is decreasing from nThresholdStart to nThresholdMin at with each period. */
|
|
int64_t nFalloffCoeff{0};
|
|
};
|
|
|
|
/**
|
|
* Parameters that influence chain consensus.
|
|
*/
|
|
struct Params {
|
|
uint256 hashGenesisBlock;
|
|
uint256 hashDevnetGenesisBlock;
|
|
int nSubsidyHalvingInterval;
|
|
int nMasternodePaymentsStartBlock;
|
|
int nMasternodePaymentsIncreaseBlock;
|
|
int nMasternodePaymentsIncreasePeriod; // in blocks
|
|
int nInstantSendConfirmationsRequired; // in blocks
|
|
int nInstantSendKeepLock; // in blocks
|
|
int nBudgetPaymentsStartBlock;
|
|
int nBudgetPaymentsCycleBlocks;
|
|
int nBudgetPaymentsWindowBlocks;
|
|
int nSuperblockStartBlock;
|
|
uint256 nSuperblockStartHash;
|
|
int nSuperblockCycle; // in blocks
|
|
int nGovernanceMinQuorum; // Min absolute vote count to trigger an action
|
|
int nGovernanceFilterElements;
|
|
int nMasternodeMinimumConfirmations;
|
|
/** Block height and hash at which BIP34 becomes active */
|
|
int BIP34Height;
|
|
uint256 BIP34Hash;
|
|
/** Block height at which BIP65 becomes active */
|
|
int BIP65Height;
|
|
/** Block height at which BIP66 becomes active */
|
|
int BIP66Height;
|
|
/** Block height at which DIP0001 becomes active */
|
|
int DIP0001Height;
|
|
/** Block height at which DIP0003 becomes active */
|
|
int DIP0003Height;
|
|
/** Block height at which DIP0003 becomes enforced */
|
|
int DIP0003EnforcementHeight;
|
|
uint256 DIP0003EnforcementHash;
|
|
/** Block height at which DIP0008 becomes active */
|
|
int DIP0008Height;
|
|
/** Don't warn about unknown BIP 9 activations below this height.
|
|
* This prevents us from warning about the CSV and DIP activations. */
|
|
int MinBIP9WarningHeight;
|
|
/**
|
|
* Minimum blocks including miner confirmation of the total of nMinerConfirmationWindow blocks in a retargeting period,
|
|
* (nPowTargetTimespan / nPowTargetSpacing) which is also used for BIP9 deployments.
|
|
* Default BIP9Deployment::nThresholdStart value for deployments where it's not specified and for unknown deployments.
|
|
* Examples: 1916 for 95%, 1512 for testchains.
|
|
*/
|
|
uint32_t nRuleChangeActivationThreshold;
|
|
// Default BIP9Deployment::nWindowSize value for deployments where it's not specified and for unknown deployments.
|
|
uint32_t nMinerConfirmationWindow;
|
|
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS];
|
|
/** Proof of work parameters */
|
|
uint256 powLimit;
|
|
bool fPowAllowMinDifficultyBlocks;
|
|
bool fPowNoRetargeting;
|
|
int64_t nPowTargetSpacing;
|
|
int64_t nPowTargetTimespan;
|
|
int nPowKGWHeight;
|
|
int nPowDGWHeight;
|
|
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
|
|
uint256 nMinimumChainWork;
|
|
uint256 defaultAssumeValid;
|
|
|
|
/** these parameters are only used on devnet and can be configured from the outside */
|
|
int nMinimumDifficultyBlocks{0};
|
|
int nHighSubsidyBlocks{0};
|
|
int nHighSubsidyFactor{1};
|
|
|
|
std::map<LLMQType, LLMQParams> llmqs;
|
|
LLMQType llmqTypeChainLocks;
|
|
LLMQType llmqTypeInstantSend{LLMQType::LLMQ_NONE};
|
|
LLMQType llmqTypePlatform{LLMQType::LLMQ_NONE};
|
|
LLMQType llmqTypeMnhf{LLMQType::LLMQ_NONE};
|
|
};
|
|
} // namespace Consensus
|
|
|
|
#endif // BITCOIN_CONSENSUS_PARAMS_H
|