From edabbc78a3bc272b2b802e1dbab73d6ed8e31e96 Mon Sep 17 00:00:00 2001 From: Carl Dong Date: Thu, 10 Mar 2022 17:21:05 -0500 Subject: [PATCH] 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. --- src/chainparams.cpp | 28 ++++++++++++++++++++++++---- src/chainparams.h | 5 +++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 2445c379ebedf..7130141c1ce11 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -582,20 +582,40 @@ const CChainParams &Params() { return *globalChainParams; } +std::unique_ptr CChainParams::SigNet(const SigNetOptions& options) +{ + return std::make_unique(options); +} + +std::unique_ptr CChainParams::RegTest(const RegTestOptions& options) +{ + return std::make_unique(options); +} + +std::unique_ptr CChainParams::Main() +{ + return std::make_unique(); +} + +std::unique_ptr CChainParams::TestNet() +{ + return std::make_unique(); +} + std::unique_ptr CreateChainParams(const ArgsManager& args, const std::string& chain) { if (chain == CBaseChainParams::MAIN) { - return std::unique_ptr(new CMainParams()); + return CChainParams::Main(); } else if (chain == CBaseChainParams::TESTNET) { - return std::unique_ptr(new CTestNetParams()); + return CChainParams::TestNet(); } else if (chain == CBaseChainParams::SIGNET) { auto opts = CChainParams::SigNetOptions{}; ReadSigNetArgs(args, opts); - return std::make_unique(opts); + return CChainParams::SigNet(opts); } else if (chain == CBaseChainParams::REGTEST) { auto opts = CChainParams::RegTestOptions{}; ReadRegTestArgs(args, opts); - return std::make_unique(opts); + return CChainParams::RegTest(opts); } throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain)); } diff --git a/src/chainparams.h b/src/chainparams.h index f2e2eb8bc0a28..30488510d7166 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -151,6 +151,11 @@ class CChainParams bool fastprune{false}; }; + static std::unique_ptr RegTest(const RegTestOptions& options); + static std::unique_ptr SigNet(const SigNetOptions& options); + static std::unique_ptr Main(); + static std::unique_ptr TestNet(); + protected: CChainParams() {}