Skip to content

Commit

Permalink
Add factory functions for Main/Test/Sig/Reg chainparams
Browse files Browse the repository at this point in the history
This normalizes the behavior of initializing Main/Test/Sig/Reg
chainparams with RegTest/SigNet chainparams. These factory functions can
also easily be used from a context without an instantiated ArgsManager,
e.g. from libbitcoin kernel code, unlike the existing CreateChainParams
method.
  • Loading branch information
dongcarl authored and TheCharlatan committed Mar 15, 2023
1 parent d938098 commit edabbc7
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
28 changes: 24 additions & 4 deletions src/chainparams.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -582,20 +582,40 @@ const CChainParams &Params() {
return *globalChainParams;
}

std::unique_ptr<const CChainParams> CChainParams::SigNet(const SigNetOptions& options)
{
return std::make_unique<const SigNetParams>(options);
}

std::unique_ptr<const CChainParams> CChainParams::RegTest(const RegTestOptions& options)
{
return std::make_unique<const CRegTestParams>(options);
}

std::unique_ptr<const CChainParams> CChainParams::Main()
{
return std::make_unique<const CMainParams>();
}

std::unique_ptr<const CChainParams> CChainParams::TestNet()
{
return std::make_unique<const CTestNetParams>();
}

std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, const std::string& chain)
{
if (chain == CBaseChainParams::MAIN) {
return std::unique_ptr<CChainParams>(new CMainParams());
return CChainParams::Main();
} else if (chain == CBaseChainParams::TESTNET) {
return std::unique_ptr<CChainParams>(new CTestNetParams());
return CChainParams::TestNet();
} else if (chain == CBaseChainParams::SIGNET) {
auto opts = CChainParams::SigNetOptions{};
ReadSigNetArgs(args, opts);
return std::make_unique<const SigNetParams>(opts);
return CChainParams::SigNet(opts);
} else if (chain == CBaseChainParams::REGTEST) {
auto opts = CChainParams::RegTestOptions{};
ReadRegTestArgs(args, opts);
return std::make_unique<const CRegTestParams>(opts);
return CChainParams::RegTest(opts);
}
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
}
Expand Down
5 changes: 5 additions & 0 deletions src/chainparams.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@ class CChainParams
bool fastprune{false};
};

static std::unique_ptr<const CChainParams> RegTest(const RegTestOptions& options);
static std::unique_ptr<const CChainParams> SigNet(const SigNetOptions& options);
static std::unique_ptr<const CChainParams> Main();
static std::unique_ptr<const CChainParams> TestNet();

protected:
CChainParams() {}

Expand Down

0 comments on commit edabbc7

Please sign in to comment.