2013-05-07 15:16:25 +02:00
|
|
|
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
2015-12-13 14:51:43 +01:00
|
|
|
// Copyright (c) 2009-2015 The Bitcoin Core developers
|
2014-10-25 11:24:16 +02:00
|
|
|
// Distributed under the MIT software license, see the accompanying
|
2013-05-07 15:16:25 +02:00
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
2014-11-03 16:16:40 +01:00
|
|
|
#ifndef BITCOIN_CHAINPARAMS_H
|
|
|
|
#define BITCOIN_CHAINPARAMS_H
|
2013-05-07 15:16:25 +02:00
|
|
|
|
2020-03-19 23:46:56 +01:00
|
|
|
#include <chainparamsbase.h>
|
|
|
|
#include <consensus/params.h>
|
|
|
|
#include <primitives/block.h>
|
|
|
|
#include <protocol.h>
|
2013-05-07 15:16:25 +02:00
|
|
|
|
2017-05-09 09:29:12 +02:00
|
|
|
#include <memory>
|
2013-05-07 15:16:25 +02:00
|
|
|
#include <vector>
|
|
|
|
|
2015-01-24 05:40:50 +01:00
|
|
|
struct SeedSpec6 {
|
|
|
|
uint8_t addr[16];
|
|
|
|
uint16_t port;
|
|
|
|
};
|
|
|
|
|
2015-06-05 21:36:34 +02:00
|
|
|
typedef std::map<int, uint256> MapCheckpoints;
|
|
|
|
|
|
|
|
struct CCheckpointData {
|
|
|
|
MapCheckpoints mapCheckpoints;
|
2017-01-12 12:12:56 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct ChainTxData {
|
|
|
|
int64_t nTime;
|
|
|
|
int64_t nTxCount;
|
|
|
|
double dTxRate;
|
2015-06-05 21:36:34 +02:00
|
|
|
};
|
2015-01-24 05:40:50 +01:00
|
|
|
|
2013-05-07 15:16:25 +02:00
|
|
|
/**
|
|
|
|
* CChainParams defines various tweakable parameters of a given instance of the
|
2015-03-18 00:06:58 +01:00
|
|
|
* Dash system. There are three: the main network on which people trade goods
|
2013-05-07 15:16:25 +02:00
|
|
|
* and services, the public test network which gets reset from time to time and
|
|
|
|
* a regression test mode which is intended for private networks only. It has
|
|
|
|
* minimal difficulty to ensure that blocks can be found instantly.
|
|
|
|
*/
|
|
|
|
class CChainParams
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum Base58Type {
|
|
|
|
PUBKEY_ADDRESS,
|
|
|
|
SCRIPT_ADDRESS,
|
2015-01-15 12:55:38 +01:00
|
|
|
SECRET_KEY, // BIP16
|
|
|
|
EXT_PUBLIC_KEY, // BIP32
|
|
|
|
EXT_SECRET_KEY, // BIP32
|
2013-05-07 15:16:25 +02:00
|
|
|
|
|
|
|
MAX_BASE58_TYPES
|
|
|
|
};
|
|
|
|
|
2015-02-11 11:58:11 +01:00
|
|
|
const Consensus::Params& GetConsensus() const { return consensus; }
|
2014-10-28 01:24:31 +01:00
|
|
|
const CMessageHeader::MessageStartChars& MessageStart() const { return pchMessageStart; }
|
2013-05-07 15:16:25 +02:00
|
|
|
int GetDefaultPort() const { return nDefaultPort; }
|
2014-03-22 19:52:26 +01:00
|
|
|
|
2014-06-10 19:33:12 +02:00
|
|
|
const CBlock& GenesisBlock() const { return genesis; }
|
2017-12-20 12:45:01 +01:00
|
|
|
const CBlock& DevNetGenesisBlock() const { return devnetGenesis; }
|
2015-03-13 17:25:34 +01:00
|
|
|
/** Default value for -checkmempool and -checkblockindex argument */
|
|
|
|
bool DefaultConsistencyChecks() const { return fDefaultConsistencyChecks; }
|
2015-04-28 16:47:17 +02:00
|
|
|
/** Policy: Filter transactions that do not match well-defined patterns */
|
2014-06-04 12:51:29 +02:00
|
|
|
bool RequireStandard() const { return fRequireStandard; }
|
2018-07-12 11:04:42 +02:00
|
|
|
/** Require addresses specified with "-externalip" parameter to be routable */
|
|
|
|
bool RequireRoutableExternalIP() const { return fRequireRoutableExternalIP; }
|
2015-11-27 15:12:08 +01:00
|
|
|
uint64_t PruneAfterHeight() const { return nPruneAfterHeight; }
|
2014-10-25 11:24:16 +02:00
|
|
|
/** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
|
2014-06-04 12:51:29 +02:00
|
|
|
bool MineBlocksOnDemand() const { return fMineBlocksOnDemand; }
|
2017-12-20 12:45:01 +01:00
|
|
|
/** Allow multiple addresses to be selected from the same network group (e.g. 192.168.x.x) */
|
|
|
|
bool AllowMultipleAddressesFromGroup() const { return fAllowMultipleAddressesFromGroup; }
|
2018-03-08 13:16:52 +01:00
|
|
|
/** Allow nodes with the same address and multiple ports */
|
|
|
|
bool AllowMultiplePorts() const { return fAllowMultiplePorts; }
|
2020-03-21 12:21:09 +01:00
|
|
|
/** How long to wait until we allow retrying of a LLMQ connection */
|
|
|
|
int LLMQConnectionRetryTimeout() const { return nLLMQConnectionRetryTimeout; }
|
2014-10-25 11:24:16 +02:00
|
|
|
/** Return the BIP70 network string (main, test or regtest) */
|
2014-06-11 12:23:49 +02:00
|
|
|
std::string NetworkIDString() const { return strNetworkID; }
|
2018-01-24 13:01:14 +01:00
|
|
|
/** Return the list of hostnames to look up for DNS seeds */
|
|
|
|
const std::vector<std::string>& DNSSeeds() const { return vSeeds; }
|
2014-06-04 12:51:29 +02:00
|
|
|
const std::vector<unsigned char>& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; }
|
2017-05-29 13:51:40 +02:00
|
|
|
int ExtCoinType() const { return nExtCoinType; }
|
2015-01-24 05:40:50 +01:00
|
|
|
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
|
2015-06-05 21:36:34 +02:00
|
|
|
const CCheckpointData& Checkpoints() const { return checkpointData; }
|
2017-01-12 12:12:56 +01:00
|
|
|
const ChainTxData& TxData() const { return chainTxData; }
|
2017-06-06 10:08:14 +02:00
|
|
|
void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
|
2017-05-09 09:29:12 +02:00
|
|
|
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
|
|
|
|
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
|
2019-09-17 14:08:37 +02:00
|
|
|
void UpdateSubsidyAndDiffParams(int nMinimumDifficultyBlocks, int nHighSubsidyBlocks, int nHighSubsidyFactor);
|
|
|
|
void UpdateLLMQChainLocks(Consensus::LLMQType llmqType);
|
2020-01-07 13:49:51 +01:00
|
|
|
void UpdateLLMQTestParams(int size, int threshold);
|
2020-02-25 17:06:10 +01:00
|
|
|
void UpdateLLMQDevnetParams(int size, int threshold);
|
2019-01-07 11:21:10 +01:00
|
|
|
int PoolMinParticipants() const { return nPoolMinParticipants; }
|
|
|
|
int PoolMaxParticipants() const { return nPoolMaxParticipants; }
|
2016-09-27 09:50:04 +02:00
|
|
|
int FulfilledRequestExpireTime() const { return nFulfilledRequestExpireTime; }
|
2018-09-30 19:01:33 +02:00
|
|
|
const std::vector<std::string>& SporkAddresses() const { return vSporkAddresses; }
|
|
|
|
int MinSporkKeys() const { return nMinSporkKeys; }
|
2018-10-26 18:42:52 +02:00
|
|
|
bool BIP9CheckMasternodesUpgraded() const { return fBIP9CheckMasternodesUpgraded; }
|
2013-05-07 15:16:25 +02:00
|
|
|
protected:
|
2013-10-15 12:13:54 +02:00
|
|
|
CChainParams() {}
|
2013-05-07 15:16:25 +02:00
|
|
|
|
2015-02-11 11:58:11 +01:00
|
|
|
Consensus::Params consensus;
|
2014-10-28 01:24:31 +01:00
|
|
|
CMessageHeader::MessageStartChars pchMessageStart;
|
2013-05-07 15:16:25 +02:00
|
|
|
int nDefaultPort;
|
Add block pruning functionality
This adds a -prune=N option to bitcoind, which if set to N>0 will enable block
file pruning. When pruning is enabled, block and undo files will be deleted to
try to keep total space used by those files to below the prune target (N, in
MB) specified by the user, subject to some constraints:
- The last 288 blocks on the main chain are always kept (MIN_BLOCKS_TO_KEEP),
- N must be at least 550MB (chosen as a value for the target that could
reasonably be met, with some assumptions about block sizes, orphan rates,
etc; see comment in main.h),
- No blocks are pruned until chainActive is at least 100,000 blocks long (on
mainnet; defined separately for mainnet, testnet, and regtest in chainparams
as nPruneAfterHeight).
This unsets NODE_NETWORK if pruning is enabled.
Also included is an RPC test for pruning (pruning.py).
Thanks to @rdponticelli for earlier work on this feature; this is based in
part off that work.
2015-02-23 20:27:44 +01:00
|
|
|
uint64_t nPruneAfterHeight;
|
2018-01-24 13:01:14 +01:00
|
|
|
std::vector<std::string> vSeeds;
|
2013-06-23 02:33:47 +02:00
|
|
|
std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
|
2017-05-29 13:51:40 +02:00
|
|
|
int nExtCoinType;
|
2014-06-11 12:23:49 +02:00
|
|
|
std::string strNetworkID;
|
2014-06-04 12:51:29 +02:00
|
|
|
CBlock genesis;
|
2017-12-20 12:45:01 +01:00
|
|
|
CBlock devnetGenesis;
|
2015-01-24 05:40:50 +01:00
|
|
|
std::vector<SeedSpec6> vFixedSeeds;
|
2015-03-13 17:25:34 +01:00
|
|
|
bool fDefaultConsistencyChecks;
|
2014-06-04 12:51:29 +02:00
|
|
|
bool fRequireStandard;
|
2018-07-12 11:04:42 +02:00
|
|
|
bool fRequireRoutableExternalIP;
|
2014-06-04 12:51:29 +02:00
|
|
|
bool fMineBlocksOnDemand;
|
2017-12-20 12:45:01 +01:00
|
|
|
bool fAllowMultipleAddressesFromGroup;
|
2018-03-08 13:16:52 +01:00
|
|
|
bool fAllowMultiplePorts;
|
2020-03-21 12:21:09 +01:00
|
|
|
int nLLMQConnectionRetryTimeout;
|
2015-06-05 21:36:34 +02:00
|
|
|
CCheckpointData checkpointData;
|
2017-01-12 12:12:56 +01:00
|
|
|
ChainTxData chainTxData;
|
2019-07-01 20:48:19 +02:00
|
|
|
int nPoolMinParticipants;
|
|
|
|
int nPoolMaxParticipants;
|
|
|
|
int nFulfilledRequestExpireTime;
|
2018-09-30 19:01:33 +02:00
|
|
|
std::vector<std::string> vSporkAddresses;
|
|
|
|
int nMinSporkKeys;
|
2018-10-26 18:42:52 +02:00
|
|
|
bool fBIP9CheckMasternodesUpgraded;
|
2013-05-07 15:16:25 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
2017-05-09 09:29:12 +02:00
|
|
|
* Creates and returns a std::unique_ptr<CChainParams> of the chosen chain.
|
|
|
|
* @returns a CChainParams* of the chosen chain.
|
|
|
|
* @throws a std::runtime_error if the chain is not supported.
|
2013-05-07 15:16:25 +02:00
|
|
|
*/
|
2017-05-09 09:29:12 +02:00
|
|
|
std::unique_ptr<CChainParams> CreateChainParams(const std::string& chain);
|
2013-05-07 15:16:25 +02:00
|
|
|
|
2015-06-30 21:39:49 +02:00
|
|
|
/**
|
2017-05-09 09:29:12 +02:00
|
|
|
* Return the currently selected parameters. This won't change after app
|
|
|
|
* startup, except for unit tests.
|
2015-06-30 21:39:49 +02:00
|
|
|
*/
|
2017-05-09 09:29:12 +02:00
|
|
|
const CChainParams &Params();
|
2013-05-07 15:16:25 +02:00
|
|
|
|
|
|
|
/**
|
2015-06-30 21:39:49 +02:00
|
|
|
* Sets the params returned by Params() to those for the given BIP70 chain name.
|
|
|
|
* @throws std::runtime_error when the chain is not supported.
|
2013-05-07 15:16:25 +02:00
|
|
|
*/
|
2015-06-30 21:39:49 +02:00
|
|
|
void SelectParams(const std::string& chain);
|
2013-05-07 15:16:25 +02:00
|
|
|
|
2016-07-25 23:22:37 +02:00
|
|
|
/**
|
2017-06-06 10:08:14 +02:00
|
|
|
* Allows modifying the Version Bits regtest parameters.
|
2016-07-25 23:22:37 +02:00
|
|
|
*/
|
2017-06-06 10:08:14 +02:00
|
|
|
void UpdateVersionBitsParameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
|
2019-01-23 17:36:51 +01:00
|
|
|
|
|
|
|
/**
|
2019-04-25 17:39:04 +02:00
|
|
|
* Allows modifying the DIP3 activation and enforcement height
|
2019-01-23 17:36:51 +01:00
|
|
|
*/
|
2017-05-09 09:29:12 +02:00
|
|
|
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
|
2016-07-25 23:22:37 +02:00
|
|
|
|
2018-08-11 00:36:17 +02:00
|
|
|
/**
|
|
|
|
* Allows modifying the budget regtest parameters.
|
|
|
|
*/
|
2017-05-09 09:29:12 +02:00
|
|
|
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
|
2018-08-11 00:36:17 +02:00
|
|
|
|
2018-10-25 09:16:38 +02:00
|
|
|
/**
|
|
|
|
* Allows modifying the subsidy and difficulty devnet parameters.
|
|
|
|
*/
|
|
|
|
void UpdateDevnetSubsidyAndDiffParams(int nMinimumDifficultyBlocks, int nHighSubsidyBlocks, int nHighSubsidyFactor);
|
|
|
|
|
2019-02-05 15:46:05 +01:00
|
|
|
/**
|
|
|
|
* Allows modifying the LLMQ type for ChainLocks.
|
|
|
|
*/
|
|
|
|
void UpdateDevnetLLMQChainLocks(Consensus::LLMQType llmqType);
|
|
|
|
|
2020-01-07 13:49:51 +01:00
|
|
|
/**
|
|
|
|
* Allows modifying parameters of the test LLMQ
|
|
|
|
*/
|
|
|
|
void UpdateLLMQTestParams(int size, int threshold);
|
|
|
|
|
2020-02-25 17:06:10 +01:00
|
|
|
/**
|
|
|
|
* Allows modifying parameters of the devnet LLMQ
|
|
|
|
*/
|
|
|
|
void UpdateLLMQDevnetParams(int size, int threshold);
|
|
|
|
|
2014-11-03 16:16:40 +01:00
|
|
|
#endif // BITCOIN_CHAINPARAMS_H
|