Skip to content

Commit 5065267

Browse files
laanwjPastaPastaPasta
authored andcommitted
Merge bitcoin#8855: Use a proper factory for creating chainparams
c1082a7 Chainparams: Use the factory for pow tests (Jorge Timón) 2351a06 Chainparams: Get rid of CChainParams& Params(std::string) (Jorge Timón) f87f362 Chainparams: Use a regular factory for creating chainparams (Jorge Timón) Tree-SHA512: 359c8a2a1bc9d02db7856d02810240ada28048ac088f878b575597a7255cdb0ffdd1a647085ee67a34c6a7e7ed9e6cfdb61240cf6e75139619b640dbb096072c
1 parent 175d68a commit 5065267

File tree

13 files changed

+130
-132
lines changed

13 files changed

+130
-132
lines changed

src/bench/checkblock.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ static void DeserializeAndCheckBlockTest(benchmark::State& state)
3838
char a = '\0';
3939
stream.write(&a, 1); // Prevent compaction
4040

41-
Consensus::Params params = Params(CBaseChainParams::MAIN).GetConsensus();
41+
const auto chainParams = CreateChainParams(CBaseChainParams::MAIN);
4242

4343
while (state.KeepRunning()) {
4444
CBlock block; // Note that CBlock caches its checked state, so we need to recreate it here
4545
stream >> block;
4646
assert(stream.Rewind(sizeof(raw_bench::block813851)));
4747

4848
CValidationState validationState;
49-
assert(CheckBlock(block, validationState, params, block.GetBlockTime()));
49+
assert(CheckBlock(block, validationState, chainParams->GetConsensus(), block.GetBlockTime()));
5050
}
5151
}
5252

src/chainparams.cpp

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,32 @@ static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits
8282
return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
8383
}
8484

85+
86+
void CChainParams::UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
87+
{
88+
consensus.vDeployments[d].nStartTime = nStartTime;
89+
consensus.vDeployments[d].nTimeout = nTimeout;
90+
if (nWindowSize != -1) {
91+
consensus.vDeployments[d].nWindowSize = nWindowSize;
92+
}
93+
if (nThreshold != -1) {
94+
consensus.vDeployments[d].nThreshold = nThreshold;
95+
}
96+
}
97+
98+
void CChainParams::UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
99+
{
100+
consensus.DIP0003Height = nActivationHeight;
101+
consensus.DIP0003EnforcementHeight = nEnforcementHeight;
102+
}
103+
104+
void CChainParams::UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
105+
{
106+
consensus.nMasternodePaymentsStartBlock = nMasternodePaymentsStartBlock;
107+
consensus.nBudgetPaymentsStartBlock = nBudgetPaymentsStartBlock;
108+
consensus.nSuperblockStartBlock = nSuperblockStartBlock;
109+
}
110+
85111
static CBlock FindDevNetGenesisBlock(const Consensus::Params& params, const CBlock &prevBlock, const CAmount& reward)
86112
{
87113
std::string devNetName = GetDevNetName();
@@ -370,7 +396,6 @@ class CMainParams : public CChainParams {
370396
};
371397
}
372398
};
373-
static CMainParams mainParams;
374399

375400
/**
376401
* Testnet (v3)
@@ -529,7 +554,6 @@ class CTestNetParams : public CChainParams {
529554

530555
}
531556
};
532-
static CTestNetParams testNetParams;
533557

534558
/**
535559
* Devnet
@@ -823,54 +847,26 @@ class CRegTestParams : public CChainParams {
823847
consensus.llmqChainLocks = Consensus::LLMQ_5_60;
824848
consensus.llmqForInstantSend = Consensus::LLMQ_5_60;
825849
}
826-
827-
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
828-
{
829-
consensus.vDeployments[d].nStartTime = nStartTime;
830-
consensus.vDeployments[d].nTimeout = nTimeout;
831-
if (nWindowSize != -1) {
832-
consensus.vDeployments[d].nWindowSize = nWindowSize;
833-
}
834-
if (nThreshold != -1) {
835-
consensus.vDeployments[d].nThreshold = nThreshold;
836-
}
837-
}
838-
839-
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
840-
{
841-
consensus.DIP0003Height = nActivationHeight;
842-
consensus.DIP0003EnforcementHeight = nEnforcementHeight;
843-
}
844-
845-
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
846-
{
847-
consensus.nMasternodePaymentsStartBlock = nMasternodePaymentsStartBlock;
848-
consensus.nBudgetPaymentsStartBlock = nBudgetPaymentsStartBlock;
849-
consensus.nSuperblockStartBlock = nSuperblockStartBlock;
850-
}
851850
};
852-
static CRegTestParams regTestParams;
853851

854-
static CChainParams *pCurrentParams = 0;
852+
static std::unique_ptr<CChainParams> globalChainParams;
855853

856854
const CChainParams &Params() {
857-
assert(pCurrentParams);
858-
return *pCurrentParams;
855+
assert(globalChainParams);
856+
return *globalChainParams;
859857
}
860858

861-
CChainParams& Params(const std::string& chain)
859+
std::unique_ptr<CChainParams> CreateChainParams(const std::string& chain)
862860
{
863861
if (chain == CBaseChainParams::MAIN)
864-
return mainParams;
862+
return std::unique_ptr<CChainParams>(new CMainParams());
865863
else if (chain == CBaseChainParams::TESTNET)
866-
return testNetParams;
864+
return std::unique_ptr<CChainParams>(new CTestNetParams());
867865
else if (chain == CBaseChainParams::DEVNET) {
868-
assert(devNetParams);
869-
return *devNetParams;
866+
return std::unique_ptr<CChainParams>(new CDevNetParams());
870867
} else if (chain == CBaseChainParams::REGTEST)
871-
return regTestParams;
872-
else
873-
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
868+
return std::unique_ptr<CChainParams>(new CRegTestParams());
869+
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
874870
}
875871

876872
void SelectParams(const std::string& network)
@@ -882,22 +878,22 @@ void SelectParams(const std::string& network)
882878
}
883879

884880
SelectBaseParams(network);
885-
pCurrentParams = &Params(network);
881+
globalChainParams = CreateChainParams(network);
886882
}
887883

888-
void UpdateRegtestBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
884+
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
889885
{
890-
regTestParams.UpdateBIP9Parameters(d, nStartTime, nTimeout, nWindowSize, nThreshold);
886+
globalChainParams->UpdateBIP9Parameters(d, nStartTime, nTimeout, nWindowSize, nThreshold);
891887
}
892888

893-
void UpdateRegtestDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
889+
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
894890
{
895-
regTestParams.UpdateDIP3Parameters(nActivationHeight, nEnforcementHeight);
891+
globalChainParams->UpdateDIP3Parameters(nActivationHeight, nEnforcementHeight);
896892
}
897893

898-
void UpdateRegtestBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
894+
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
899895
{
900-
regTestParams.UpdateBudgetParameters(nMasternodePaymentsStartBlock, nBudgetPaymentsStartBlock, nSuperblockStartBlock);
896+
globalChainParams->UpdateBudgetParameters(nMasternodePaymentsStartBlock, nBudgetPaymentsStartBlock, nSuperblockStartBlock);
901897
}
902898

903899
void UpdateDevnetSubsidyAndDiffParams(int nMinimumDifficultyBlocks, int nHighSubsidyBlocks, int nHighSubsidyFactor)

src/chainparams.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "primitives/block.h"
1212
#include "protocol.h"
1313

14+
#include <memory>
1415
#include <vector>
1516

1617
struct CDNSSeedData {
@@ -83,6 +84,9 @@ class CChainParams
8384
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
8485
const CCheckpointData& Checkpoints() const { return checkpointData; }
8586
const ChainTxData& TxData() const { return chainTxData; }
87+
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
88+
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
89+
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
8690
int PoolMinParticipants() const { return nPoolMinParticipants; }
8791
int PoolMaxParticipants() const { return nPoolMaxParticipants; }
8892
int FulfilledRequestExpireTime() const { return nFulfilledRequestExpireTime; }
@@ -120,15 +124,17 @@ class CChainParams
120124
};
121125

122126
/**
123-
* Return the currently selected parameters. This won't change after app
124-
* startup, except for unit tests.
127+
* Creates and returns a std::unique_ptr<CChainParams> of the chosen chain.
128+
* @returns a CChainParams* of the chosen chain.
129+
* @throws a std::runtime_error if the chain is not supported.
125130
*/
126-
const CChainParams &Params();
131+
std::unique_ptr<CChainParams> CreateChainParams(const std::string& chain);
127132

128133
/**
129-
* @returns CChainParams for the given BIP70 chain name.
134+
* Return the currently selected parameters. This won't change after app
135+
* startup, except for unit tests.
130136
*/
131-
CChainParams& Params(const std::string& chain);
137+
const CChainParams &Params();
132138

133139
/**
134140
* Sets the params returned by Params() to those for the given BIP70 chain name.
@@ -139,17 +145,17 @@ void SelectParams(const std::string& chain);
139145
/**
140146
* Allows modifying the BIP9 regtest parameters.
141147
*/
142-
void UpdateRegtestBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
148+
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
143149

144150
/**
145151
* Allows modifying the DIP3 activation and enforcement height
146152
*/
147-
void UpdateRegtestDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
153+
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
148154

149155
/**
150156
* Allows modifying the budget regtest parameters.
151157
*/
152-
void UpdateRegtestBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
158+
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
153159

154160
/**
155161
* Allows modifying the subsidy and difficulty devnet parameters.

src/chainparamsbase.cpp

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class CBaseMainParams : public CBaseChainParams
3737
nRPCPort = 9998;
3838
}
3939
};
40-
static CBaseMainParams mainParams;
4140

4241
/**
4342
* Testnet (v3)
@@ -51,7 +50,6 @@ class CBaseTestNetParams : public CBaseChainParams
5150
strDataDir = "testnet3";
5251
}
5352
};
54-
static CBaseTestNetParams testNetParams;
5553

5654
/**
5755
* Devnet
@@ -65,7 +63,6 @@ class CBaseDevNetParams : public CBaseChainParams
6563
strDataDir = dataDir;
6664
}
6765
};
68-
static CBaseDevNetParams *devNetParams;
6966

7067
/*
7168
* Regression test
@@ -79,43 +76,32 @@ class CBaseRegTestParams : public CBaseChainParams
7976
strDataDir = "regtest";
8077
}
8178
};
82-
static CBaseRegTestParams regTestParams;
8379

84-
static CBaseChainParams* pCurrentBaseParams = 0;
80+
static std::unique_ptr<CBaseChainParams> globalChainBaseParams;
8581

8682
const CBaseChainParams& BaseParams()
8783
{
88-
assert(pCurrentBaseParams);
89-
return *pCurrentBaseParams;
84+
assert(globalChainBaseParams);
85+
return *globalChainBaseParams;
9086
}
9187

92-
CBaseChainParams& BaseParams(const std::string& chain)
88+
std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain)
9389
{
9490
if (chain == CBaseChainParams::MAIN)
95-
return mainParams;
91+
return std::unique_ptr<CBaseChainParams>(new CBaseMainParams());
9692
else if (chain == CBaseChainParams::TESTNET)
97-
return testNetParams;
93+
return std::unique_ptr<CBaseChainParams>(new CBaseTestNetParams());
9894
else if (chain == CBaseChainParams::DEVNET) {
99-
assert(devNetParams);
100-
return *devNetParams;
95+
return std::unique_ptr<CBaseChainParams>(new CBaseDevNetParams(GetDevNetName()));
10196
} else if (chain == CBaseChainParams::REGTEST)
102-
return regTestParams;
97+
return std::unique_ptr<CBaseChainParams>(new CBaseRegTestParams());
10398
else
10499
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
105100
}
106101

107102
void SelectBaseParams(const std::string& chain)
108103
{
109-
if (chain == CBaseChainParams::DEVNET) {
110-
std::string devNetName = GetDevNetName();
111-
assert(!devNetName.empty());
112-
113-
devNetParams = (CBaseDevNetParams*)new uint8_t[sizeof(CBaseDevNetParams)];
114-
memset(devNetParams, 0, sizeof(CBaseDevNetParams));
115-
new (devNetParams) CBaseDevNetParams(devNetName);
116-
}
117-
118-
pCurrentBaseParams = &BaseParams(chain);
104+
globalChainBaseParams = CreateBaseChainParams(chain);
119105
}
120106

121107
std::string ChainNameFromCommandLine()

src/chainparamsbase.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#ifndef BITCOIN_CHAINPARAMSBASE_H
66
#define BITCOIN_CHAINPARAMSBASE_H
77

8+
#include <memory>
89
#include <string>
910
#include <vector>
1011

@@ -31,6 +32,13 @@ class CBaseChainParams
3132
std::string strDataDir;
3233
};
3334

35+
/**
36+
* Creates and returns a std::unique_ptr<CBaseChainParams> of the chosen chain.
37+
* @returns a CBaseChainParams* of the chosen chain.
38+
* @throws a std::runtime_error if the chain is not supported.
39+
*/
40+
std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain);
41+
3442
/**
3543
* Append the help messages for the chainparams options to the
3644
* parameter string.
@@ -43,8 +51,6 @@ void AppendParamsHelpMessages(std::string& strUsage, bool debugHelp=true);
4351
*/
4452
const CBaseChainParams& BaseParams();
4553

46-
CBaseChainParams& BaseParams(const std::string& chain);
47-
4854
/** Sets the params returned by Params() to those for the given network. */
4955
void SelectBaseParams(const std::string& chain);
5056

src/dash-cli.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ static const int CONTINUE_EXECUTION=-1;
3232

3333
std::string HelpMessageCli()
3434
{
35+
const auto defaultBaseParams = CreateBaseChainParams(CBaseChainParams::MAIN);
36+
const auto testnetBaseParams = CreateBaseChainParams(CBaseChainParams::TESTNET);
3537
std::string strUsage;
3638
strUsage += HelpMessageGroup(_("Options:"));
3739
strUsage += HelpMessageOpt("-?", _("This help message"));
@@ -40,7 +42,7 @@ std::string HelpMessageCli()
4042
AppendParamsHelpMessages(strUsage);
4143
strUsage += HelpMessageOpt("-named", strprintf(_("Pass named instead of positional arguments (default: %s)"), DEFAULT_NAMED));
4244
strUsage += HelpMessageOpt("-rpcconnect=<ip>", strprintf(_("Send commands to node running on <ip> (default: %s)"), DEFAULT_RPCCONNECT));
43-
strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Connect to JSON-RPC on <port> (default: %u or testnet: %u)"), BaseParams(CBaseChainParams::MAIN).RPCPort(), BaseParams(CBaseChainParams::TESTNET).RPCPort()));
45+
strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Connect to JSON-RPC on <port> (default: %u or testnet: %u)"), defaultBaseParams->RPCPort(), testnetBaseParams->RPCPort()));
4446
strUsage += HelpMessageOpt("-rpcwait", _("Wait for RPC server to start"));
4547
strUsage += HelpMessageOpt("-rpcuser=<user>", _("Username for JSON-RPC connections"));
4648
strUsage += HelpMessageOpt("-rpcpassword=<pw>", _("Password for JSON-RPC connections"));

src/evo/providertx.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ static bool CheckService(const uint256& proTxHash, const ProTx& proTx, CValidati
2727
return state.DoS(10, false, REJECT_INVALID, "bad-protx-addr");
2828
}
2929

30-
int mainnetDefaultPort = Params(CBaseChainParams::MAIN).GetDefaultPort();
30+
int mainnetDefaultPort = CreateChainParams(CBaseChainParams::MAIN)->GetDefaultPort();
3131
if (Params().NetworkIDString() == CBaseChainParams::MAIN) {
3232
if (proTx.addr.GetPort() != mainnetDefaultPort) {
3333
return state.DoS(10, false, REJECT_INVALID, "bad-protx-addr-port");

0 commit comments

Comments
 (0)