forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 14
/
params.h
118 lines (108 loc) · 4.17 KB
/
params.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Copyright (c) 2009-2010 Satoshi Nakamoto
// Copyright (c) 2009-2017 The Bitcoin Core developers
// Copyright (c) 2009-2017 The DigiByte Core developers
// Copyright (c) 2018-2019 The Globaltoken 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 <globaltoken/hardfork.h>
#include <globaltoken/powalgorithm.h>
#include <uint256.h>
#include <limits>
#include <map>
#include <string>
namespace Consensus {
enum DeploymentPos
{
DEPLOYMENT_TESTDUMMY,
DEPLOYMENT_CSV, // Deployment of BIP68, BIP112, and BIP113.
DEPLOYMENT_SEGWIT, // Deployment of BIP141, BIP143, and BIP147.
// 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;
/** Constant for nTimeout very far in the future. */
static constexpr int64_t NO_TIMEOUT = std::numeric_limits<int64_t>::max();
/** 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;
};
/**
* Parameters that influence chain consensus.
*/
struct Params {
uint256 hashGenesisBlock;
int nSubsidyHalvingInterval;
int nMasternodeMinimumConfirmations;
int nMasternodeColleteralPaymentAmount;
int nMasternodePayeeReward;
int nInstantSendConfirmationsRequired;
int nInstantSendKeepLock;
int nTreasuryAddressChange;
int nTreasuryAddressChangeStart;
int nTreasuryAmount;
/** Block height at which BIP16 becomes active */
int BIP16Height;
/** 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;
/**
* Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period,
* (nPowTargetTimespan / nPowTargetSpacing) which is also used for BIP9 deployments.
* Examples: 1916 for 95%, 1512 for testchains.
*/
/** Block height at which BIP66 becomes active */
CHardforkProperties Hardfork1;
CHardforkProperties Hardfork2;
CHardforkProperties Hardfork3;
CHardforkProperties Hardfork4;
/** The max allowed auxpow blocks after genesis diff*/
uint32_t nMaxAuxpowBlocks;
uint32_t nOldRuleChangeActivationThreshold;
uint32_t nOldMinerConfirmationWindow;
uint32_t nNewRuleChangeActivationThreshold;
uint32_t nNewMinerConfirmationWindow;
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS];
/** Proof of work parameters */
CPOWAlgoProperties aPOWAlgos[NUM_ALGOS];
bool fPowAllowMinDifficultyBlocks;
bool fPowNoRetargeting;
int64_t nAveragingInterval;
int64_t nAveragingTargetTimespan;
int64_t nAveragingTargetTimespanV2;
int64_t nPowTargetSpacing;
int64_t nPowTargetSpacingMultiAlgoV1;
int64_t nPowTargetSpacingMultiAlgoV2;
int64_t nPowTargetTimespan;
int64_t nMaxAdjustDown;
int64_t nMaxAdjustUp;
int64_t nMinActualTimespan;
int64_t nMinActualTimespanV2;
int64_t nMaxActualTimespan;
int64_t nMaxActualTimespanV2;
int64_t nLocalTargetAdjustment;
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
uint256 nMinimumChainWork;
uint256 defaultAssumeValid;
/** Auxpow parameters */
int32_t nAuxpowChainId;
bool fStrictChainId;
};
} // namespace Consensus
#endif // BITCOIN_CONSENSUS_PARAMS_H