0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-03 09:56:38 -05:00

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.
This commit is contained in:
Carl Dong 2022-03-10 17:21:05 -05:00 committed by TheCharlatan
parent d938098398
commit edabbc78a3
No known key found for this signature in database
GPG key ID: 9B79B45691DB4173
2 changed files with 29 additions and 4 deletions

View file

@ -582,20 +582,40 @@ const CChainParams &Params() {
return *globalChainParams; 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) std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, const std::string& chain)
{ {
if (chain == CBaseChainParams::MAIN) { if (chain == CBaseChainParams::MAIN) {
return std::unique_ptr<CChainParams>(new CMainParams()); return CChainParams::Main();
} else if (chain == CBaseChainParams::TESTNET) { } else if (chain == CBaseChainParams::TESTNET) {
return std::unique_ptr<CChainParams>(new CTestNetParams()); return CChainParams::TestNet();
} else if (chain == CBaseChainParams::SIGNET) { } else if (chain == CBaseChainParams::SIGNET) {
auto opts = CChainParams::SigNetOptions{}; auto opts = CChainParams::SigNetOptions{};
ReadSigNetArgs(args, opts); ReadSigNetArgs(args, opts);
return std::make_unique<const SigNetParams>(opts); return CChainParams::SigNet(opts);
} else if (chain == CBaseChainParams::REGTEST) { } else if (chain == CBaseChainParams::REGTEST) {
auto opts = CChainParams::RegTestOptions{}; auto opts = CChainParams::RegTestOptions{};
ReadRegTestArgs(args, opts); 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)); throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
} }

View file

@ -151,6 +151,11 @@ public:
bool fastprune{false}; 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: protected:
CChainParams() {} CChainParams() {}