10
10
#include < sync.h>
11
11
#include < tinyformat.h>
12
12
#include < univalue.h>
13
+ #include < util/chaintype.h>
13
14
#include < util/check.h>
14
15
#include < util/fs.h>
15
16
#include < util/fs_helpers.h>
33
34
#include < stdexcept>
34
35
#include < string>
35
36
#include < utility>
37
+ #include < variant>
36
38
37
39
const char * const BITCOIN_CONF_FILENAME = " bitcoin.conf" ;
38
40
const char * const BITCOIN_SETTINGS_FILENAME = " settings.json" ;
@@ -717,7 +719,21 @@ fs::path ArgsManager::GetConfigFilePath() const
717
719
return GetConfigFile (*this , GetPathArg (" -conf" , BITCOIN_CONF_FILENAME));
718
720
}
719
721
722
+ ChainType ArgsManager::GetChainType () const
723
+ {
724
+ std::variant<ChainType, std::string> arg = GetChainArg ();
725
+ if (auto * parsed = std::get_if<ChainType>(&arg)) return *parsed;
726
+ throw std::runtime_error (strprintf (" Unknown chain %s." , std::get<std::string>(arg)));
727
+ }
728
+
720
729
std::string ArgsManager::GetChainName () const
730
+ {
731
+ auto arg = GetChainArg ();
732
+ if (auto * parsed = std::get_if<ChainType>(&arg)) return ChainTypeToString (*parsed);
733
+ return std::get<std::string>(arg);
734
+ }
735
+
736
+ std::variant<ChainType, std::string> ArgsManager::GetChainArg () const
721
737
{
722
738
auto get_net = [&](const std::string& arg) {
723
739
LOCK (cs_args);
@@ -731,20 +747,20 @@ std::string ArgsManager::GetChainName() const
731
747
const bool fRegTest = get_net (" -regtest" );
732
748
const bool fSigNet = get_net (" -signet" );
733
749
const bool fTestNet = get_net (" -testnet" );
734
- const bool is_chain_arg_set = IsArgSet (" -chain" );
750
+ const auto chain_arg = GetArg (" -chain" );
735
751
736
- if ((int )is_chain_arg_set + (int )fRegTest + (int )fSigNet + (int )fTestNet > 1 ) {
752
+ if ((int )chain_arg. has_value () + (int )fRegTest + (int )fSigNet + (int )fTestNet > 1 ) {
737
753
throw std::runtime_error (" Invalid combination of -regtest, -signet, -testnet and -chain. Can use at most one." );
738
754
}
739
- if (fRegTest )
740
- return CBaseChainParams::REGTEST ;
741
- if ( fSigNet ) {
742
- return CBaseChainParams::SIGNET ;
755
+ if (chain_arg) {
756
+ if ( auto parsed = ChainTypeFromString (*chain_arg)) return *parsed ;
757
+ // Not a known string, so return original string
758
+ return *chain_arg ;
743
759
}
744
- if (fTestNet )
745
- return CBaseChainParams::TESTNET ;
746
-
747
- return GetArg ( " -chain " , CBaseChainParams ::MAIN) ;
760
+ if (fRegTest ) return ChainType::REGTEST;
761
+ if ( fSigNet ) return ChainType::SIGNET ;
762
+ if ( fTestNet ) return ChainType::TESTNET;
763
+ return ChainType ::MAIN;
748
764
}
749
765
750
766
bool ArgsManager::UseDefaultSection (const std::string& arg) const
0 commit comments