Skip to content

Commit

Permalink
Merge bitcoin#8855: Use a proper factory for creating chainparams
Browse files Browse the repository at this point in the history
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
  • Loading branch information
laanwj authored and barrystyle committed Jan 22, 2020
1 parent 97250b7 commit 4360d5b
Show file tree
Hide file tree
Showing 13 changed files with 130 additions and 132 deletions.
4 changes: 2 additions & 2 deletions src/bench/checkblock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ static void DeserializeAndCheckBlockTest(benchmark::State& state)
char a = '\0';
stream.write(&a, 1); // Prevent compaction

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

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

CValidationState validationState;
assert(CheckBlock(block, validationState, params, block.GetBlockTime()));
assert(CheckBlock(block, validationState, chainParams->GetConsensus(), block.GetBlockTime()));
}
}

Expand Down
88 changes: 42 additions & 46 deletions src/chainparams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,32 @@ static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits
return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
}


void CChainParams::UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
{
consensus.vDeployments[d].nStartTime = nStartTime;
consensus.vDeployments[d].nTimeout = nTimeout;
if (nWindowSize != -1) {
consensus.vDeployments[d].nWindowSize = nWindowSize;
}
if (nThreshold != -1) {
consensus.vDeployments[d].nThreshold = nThreshold;
}
}

void CChainParams::UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
{
consensus.DIP0003Height = nActivationHeight;
consensus.DIP0003EnforcementHeight = nEnforcementHeight;
}

void CChainParams::UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
{
consensus.nMasternodePaymentsStartBlock = nMasternodePaymentsStartBlock;
consensus.nBudgetPaymentsStartBlock = nBudgetPaymentsStartBlock;
consensus.nSuperblockStartBlock = nSuperblockStartBlock;
}

static CBlock FindDevNetGenesisBlock(const Consensus::Params& params, const CBlock &prevBlock, const CAmount& reward)
{
std::string devNetName = GetDevNetName();
Expand Down Expand Up @@ -390,7 +416,6 @@ class CMainParams : public CChainParams {
};
}
};
static CMainParams mainParams;

/**
* Testnet (v3)
Expand Down Expand Up @@ -566,7 +591,6 @@ class CTestNetParams : public CChainParams {

}
};
static CTestNetParams testNetParams;

/**
* Devnet
Expand Down Expand Up @@ -877,54 +901,26 @@ class CRegTestParams : public CChainParams {
consensus.llmqChainLocks = Consensus::LLMQ_5_60;
consensus.llmqForInstaPAC = Consensus::LLMQ_5_60;
}

void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
{
consensus.vDeployments[d].nStartTime = nStartTime;
consensus.vDeployments[d].nTimeout = nTimeout;
if (nWindowSize != -1) {
consensus.vDeployments[d].nWindowSize = nWindowSize;
}
if (nThreshold != -1) {
consensus.vDeployments[d].nThreshold = nThreshold;
}
}

void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
{
consensus.DIP0003Height = nActivationHeight;
consensus.DIP0003EnforcementHeight = nEnforcementHeight;
}

void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
{
consensus.nMasternodePaymentsStartBlock = nMasternodePaymentsStartBlock;
consensus.nBudgetPaymentsStartBlock = nBudgetPaymentsStartBlock;
consensus.nSuperblockStartBlock = nSuperblockStartBlock;
}
};
static CRegTestParams regTestParams;

static CChainParams *pCurrentParams = 0;
static std::unique_ptr<CChainParams> globalChainParams;

const CChainParams &Params() {
assert(pCurrentParams);
return *pCurrentParams;
assert(globalChainParams);
return *globalChainParams;
}

CChainParams& Params(const std::string& chain)
std::unique_ptr<CChainParams> CreateChainParams(const std::string& chain)
{
if (chain == CBaseChainParams::MAIN)
return mainParams;
return std::unique_ptr<CChainParams>(new CMainParams());
else if (chain == CBaseChainParams::TESTNET)
return testNetParams;
return std::unique_ptr<CChainParams>(new CTestNetParams());
else if (chain == CBaseChainParams::DEVNET) {
assert(devNetParams);
return *devNetParams;
return std::unique_ptr<CChainParams>(new CDevNetParams());
} else if (chain == CBaseChainParams::REGTEST)
return regTestParams;
else
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
return std::unique_ptr<CChainParams>(new CRegTestParams());
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
}

void SelectParams(const std::string& network)
Expand All @@ -936,22 +932,22 @@ void SelectParams(const std::string& network)
}

SelectBaseParams(network);
pCurrentParams = &Params(network);
globalChainParams = CreateChainParams(network);
}

void UpdateRegtestBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold)
{
regTestParams.UpdateBIP9Parameters(d, nStartTime, nTimeout, nWindowSize, nThreshold);
globalChainParams->UpdateBIP9Parameters(d, nStartTime, nTimeout, nWindowSize, nThreshold);
}

void UpdateRegtestDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight)
{
regTestParams.UpdateDIP3Parameters(nActivationHeight, nEnforcementHeight);
globalChainParams->UpdateDIP3Parameters(nActivationHeight, nEnforcementHeight);
}

void UpdateRegtestBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock)
{
regTestParams.UpdateBudgetParameters(nMasternodePaymentsStartBlock, nBudgetPaymentsStartBlock, nSuperblockStartBlock);
globalChainParams->UpdateBudgetParameters(nMasternodePaymentsStartBlock, nBudgetPaymentsStartBlock, nSuperblockStartBlock);
}

void UpdateDevnetSubsidyAndDiffParams(int nMinimumDifficultyBlocks, int nHighSubsidyBlocks, int nHighSubsidyFactor)
Expand Down
22 changes: 14 additions & 8 deletions src/chainparams.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "primitives/block.h"
#include "protocol.h"

#include <memory>
#include <vector>

struct CDNSSeedData {
Expand Down Expand Up @@ -84,6 +85,9 @@ class CChainParams
const std::vector<SeedSpec6>& FixedSeeds() const { return vFixedSeeds; }
const CCheckpointData& Checkpoints() const { return checkpointData; }
const ChainTxData& TxData() const { return chainTxData; }
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
int PoolMinParticipants() const { return nPoolMinParticipants; }
int PoolMaxParticipants() const { return nPoolMaxParticipants; }
int FulfilledRequestExpireTime() const { return nFulfilledRequestExpireTime; }
Expand Down Expand Up @@ -122,15 +126,17 @@ class CChainParams
};

/**
* Return the currently selected parameters. This won't change after app
* startup, except for unit tests.
* 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.
*/
const CChainParams &Params();
std::unique_ptr<CChainParams> CreateChainParams(const std::string& chain);

/**
* @returns CChainParams for the given BIP70 chain name.
* Return the currently selected parameters. This won't change after app
* startup, except for unit tests.
*/
CChainParams& Params(const std::string& chain);
const CChainParams &Params();

/**
* Sets the params returned by Params() to those for the given BIP70 chain name.
Expand All @@ -141,17 +147,17 @@ void SelectParams(const std::string& chain);
/**
* Allows modifying the BIP9 regtest parameters.
*/
void UpdateRegtestBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);
void UpdateBIP9Parameters(Consensus::DeploymentPos d, int64_t nStartTime, int64_t nTimeout, int64_t nWindowSize, int64_t nThreshold);

/**
* Allows modifying the DIP3 activation and enforcement height
*/
void UpdateRegtestDIP3Parameters(int nActivationHeight, int nEnforcementHeight);
void UpdateDIP3Parameters(int nActivationHeight, int nEnforcementHeight);

/**
* Allows modifying the budget regtest parameters.
*/
void UpdateRegtestBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);
void UpdateBudgetParameters(int nMasternodePaymentsStartBlock, int nBudgetPaymentsStartBlock, int nSuperblockStartBlock);

/**
* Allows modifying the subsidy and difficulty devnet parameters.
Expand Down
32 changes: 9 additions & 23 deletions src/chainparamsbase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ class CBaseMainParams : public CBaseChainParams
nRPCPort = 9998;
}
};
static CBaseMainParams mainParams;

/**
* Testnet (v3)
Expand All @@ -51,7 +50,6 @@ class CBaseTestNetParams : public CBaseChainParams
strDataDir = "testnet3";
}
};
static CBaseTestNetParams testNetParams;

/**
* Devnet
Expand All @@ -65,7 +63,6 @@ class CBaseDevNetParams : public CBaseChainParams
strDataDir = dataDir;
}
};
static CBaseDevNetParams *devNetParams;

/*
* Regression test
Expand All @@ -79,43 +76,32 @@ class CBaseRegTestParams : public CBaseChainParams
strDataDir = "regtest";
}
};
static CBaseRegTestParams regTestParams;

static CBaseChainParams* pCurrentBaseParams = 0;
static std::unique_ptr<CBaseChainParams> globalChainBaseParams;

const CBaseChainParams& BaseParams()
{
assert(pCurrentBaseParams);
return *pCurrentBaseParams;
assert(globalChainBaseParams);
return *globalChainBaseParams;
}

CBaseChainParams& BaseParams(const std::string& chain)
std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain)
{
if (chain == CBaseChainParams::MAIN)
return mainParams;
return std::unique_ptr<CBaseChainParams>(new CBaseMainParams());
else if (chain == CBaseChainParams::TESTNET)
return testNetParams;
return std::unique_ptr<CBaseChainParams>(new CBaseTestNetParams());
else if (chain == CBaseChainParams::DEVNET) {
assert(devNetParams);
return *devNetParams;
return std::unique_ptr<CBaseChainParams>(new CBaseDevNetParams(GetDevNetName()));
} else if (chain == CBaseChainParams::REGTEST)
return regTestParams;
return std::unique_ptr<CBaseChainParams>(new CBaseRegTestParams());
else
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
}

void SelectBaseParams(const std::string& chain)
{
if (chain == CBaseChainParams::DEVNET) {
std::string devNetName = GetDevNetName();
assert(!devNetName.empty());

devNetParams = (CBaseDevNetParams*)new uint8_t[sizeof(CBaseDevNetParams)];
memset(devNetParams, 0, sizeof(CBaseDevNetParams));
new (devNetParams) CBaseDevNetParams(devNetName);
}

pCurrentBaseParams = &BaseParams(chain);
globalChainBaseParams = CreateBaseChainParams(chain);
}

std::string ChainNameFromCommandLine()
Expand Down
10 changes: 8 additions & 2 deletions src/chainparamsbase.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#ifndef BITCOIN_CHAINPARAMSBASE_H
#define BITCOIN_CHAINPARAMSBASE_H

#include <memory>
#include <string>
#include <vector>

Expand All @@ -31,6 +32,13 @@ class CBaseChainParams
std::string strDataDir;
};

/**
* Creates and returns a std::unique_ptr<CBaseChainParams> of the chosen chain.
* @returns a CBaseChainParams* of the chosen chain.
* @throws a std::runtime_error if the chain is not supported.
*/
std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain);

/**
* Append the help messages for the chainparams options to the
* parameter string.
Expand All @@ -43,8 +51,6 @@ void AppendParamsHelpMessages(std::string& strUsage, bool debugHelp=true);
*/
const CBaseChainParams& BaseParams();

CBaseChainParams& BaseParams(const std::string& chain);

/** Sets the params returned by Params() to those for the given network. */
void SelectBaseParams(const std::string& chain);

Expand Down
2 changes: 1 addition & 1 deletion src/evo/providertx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ static bool CheckService(const uint256& proTxHash, const ProTx& proTx, CValidati
return state.DoS(10, false, REJECT_INVALID, "bad-protx-addr");
}

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

0 comments on commit 4360d5b

Please sign in to comment.