Skip to content

Commit edabbc7

Browse files
dongcarlTheCharlatan
authored andcommitted
Add factory functions for Main/Test/Sig/Reg chainparams
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.
1 parent d938098 commit edabbc7

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

src/chainparams.cpp

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -582,20 +582,40 @@ const CChainParams &Params() {
582582
return *globalChainParams;
583583
}
584584

585+
std::unique_ptr<const CChainParams> CChainParams::SigNet(const SigNetOptions& options)
586+
{
587+
return std::make_unique<const SigNetParams>(options);
588+
}
589+
590+
std::unique_ptr<const CChainParams> CChainParams::RegTest(const RegTestOptions& options)
591+
{
592+
return std::make_unique<const CRegTestParams>(options);
593+
}
594+
595+
std::unique_ptr<const CChainParams> CChainParams::Main()
596+
{
597+
return std::make_unique<const CMainParams>();
598+
}
599+
600+
std::unique_ptr<const CChainParams> CChainParams::TestNet()
601+
{
602+
return std::make_unique<const CTestNetParams>();
603+
}
604+
585605
std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, const std::string& chain)
586606
{
587607
if (chain == CBaseChainParams::MAIN) {
588-
return std::unique_ptr<CChainParams>(new CMainParams());
608+
return CChainParams::Main();
589609
} else if (chain == CBaseChainParams::TESTNET) {
590-
return std::unique_ptr<CChainParams>(new CTestNetParams());
610+
return CChainParams::TestNet();
591611
} else if (chain == CBaseChainParams::SIGNET) {
592612
auto opts = CChainParams::SigNetOptions{};
593613
ReadSigNetArgs(args, opts);
594-
return std::make_unique<const SigNetParams>(opts);
614+
return CChainParams::SigNet(opts);
595615
} else if (chain == CBaseChainParams::REGTEST) {
596616
auto opts = CChainParams::RegTestOptions{};
597617
ReadRegTestArgs(args, opts);
598-
return std::make_unique<const CRegTestParams>(opts);
618+
return CChainParams::RegTest(opts);
599619
}
600620
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
601621
}

src/chainparams.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ class CChainParams
151151
bool fastprune{false};
152152
};
153153

154+
static std::unique_ptr<const CChainParams> RegTest(const RegTestOptions& options);
155+
static std::unique_ptr<const CChainParams> SigNet(const SigNetOptions& options);
156+
static std::unique_ptr<const CChainParams> Main();
157+
static std::unique_ptr<const CChainParams> TestNet();
158+
154159
protected:
155160
CChainParams() {}
156161

0 commit comments

Comments
 (0)