diff options
Diffstat (limited to 'src/chainparamsbase.cpp')
| -rw-r--r-- | src/chainparamsbase.cpp | 131 |
1 files changed, 68 insertions, 63 deletions
diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp index 720e24c4a..c966683b7 100644 --- a/src/chainparamsbase.cpp +++ b/src/chainparamsbase.cpp @@ -1,97 +1,102 @@ // Copyright (c) 2010 Satoshi Nakamoto -// Copyright (c) 2009-2014 The Bitcoin developers -// Distributed under the MIT/X11 software license, see the accompanying +// Copyright (c) 2009-2015 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "chainparamsbase.h" -#include "assert.h" +#include "tinyformat.h" #include "util.h" -#include <boost/assign/list_of.hpp> +#include <assert.h> -using namespace boost::assign; +const std::string CBaseChainParams::MAIN = "main"; +const std::string CBaseChainParams::TESTNET = "test"; +const std::string CBaseChainParams::REGTEST = "regtest"; -// -// Main network -// +void AppendParamsHelpMessages(std::string& strUsage, bool debugHelp) +{ + strUsage += HelpMessageGroup(_("Chain selection options:")); + strUsage += HelpMessageOpt("-testnet", _("Use the test chain")); + if (debugHelp) { + strUsage += HelpMessageOpt("-regtest", "Enter regression test mode, which uses a special chain in which blocks can be solved instantly. " + "This is intended for regression testing tools and app development."); + } +} -class CBaseMainParams : public CBaseChainParams { +/** + * Main network + */ +class CBaseMainParams : public CBaseChainParams +{ public: - CBaseMainParams() { - networkID = CBaseChainParams::MAIN; + CBaseMainParams() + { nRPCPort = 8332; } }; -static CBaseMainParams mainParams; -// -// Testnet (v3) -// -class CBaseTestNetParams : public CBaseMainParams { +/** + * Testnet (v3) + */ +class CBaseTestNetParams : public CBaseChainParams +{ public: - CBaseTestNetParams() { - networkID = CBaseChainParams::TESTNET; + CBaseTestNetParams() + { nRPCPort = 18332; strDataDir = "testnet3"; } }; -static CBaseTestNetParams testNetParams; -// -// Regression test -// -class CBaseRegTestParams : public CBaseTestNetParams { +/* + * Regression test + */ +class CBaseRegTestParams : public CBaseChainParams +{ public: - CBaseRegTestParams() { - networkID = CBaseChainParams::REGTEST; + CBaseRegTestParams() + { + nRPCPort = 18443; strDataDir = "regtest"; } }; -static CBaseRegTestParams regTestParams; -static CBaseChainParams *pCurrentBaseParams = 0; +static std::unique_ptr<CBaseChainParams> globalChainBaseParams; -const CBaseChainParams &BaseParams() { - assert(pCurrentBaseParams); - return *pCurrentBaseParams; +const CBaseChainParams& BaseParams() +{ + assert(globalChainBaseParams); + return *globalChainBaseParams; } -void SelectBaseParams(CBaseChainParams::Network network) { - switch (network) { - case CBaseChainParams::MAIN: - pCurrentBaseParams = &mainParams; - break; - case CBaseChainParams::TESTNET: - pCurrentBaseParams = &testNetParams; - break; - case CBaseChainParams::REGTEST: - pCurrentBaseParams = ®TestParams; - break; - default: - assert(false && "Unimplemented network"); - return; - } +std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain) +{ + if (chain == CBaseChainParams::MAIN) + return std::unique_ptr<CBaseChainParams>(new CBaseMainParams()); + else if (chain == CBaseChainParams::TESTNET) + return std::unique_ptr<CBaseChainParams>(new CBaseTestNetParams()); + else if (chain == CBaseChainParams::REGTEST) + return std::unique_ptr<CBaseChainParams>(new CBaseRegTestParams()); + else + throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain)); } -bool SelectBaseParamsFromCommandLine() { - bool fRegTest = GetBoolArg("-regtest", false); - bool fTestNet = GetBoolArg("-testnet", false); - - if (fTestNet && fRegTest) { - return false; - } - - if (fRegTest) { - SelectBaseParams(CBaseChainParams::REGTEST); - } else if (fTestNet) { - SelectBaseParams(CBaseChainParams::TESTNET); - } else { - SelectBaseParams(CBaseChainParams::MAIN); - } - return true; +void SelectBaseParams(const std::string& chain) +{ + globalChainBaseParams = CreateBaseChainParams(chain); } -bool AreBaseParamsConfigured() { - return pCurrentBaseParams != NULL; +std::string ChainNameFromCommandLine() +{ + bool fRegTest = gArgs.GetBoolArg("-regtest", false); + bool fTestNet = gArgs.GetBoolArg("-testnet", false); + + if (fTestNet && fRegTest) + throw std::runtime_error("Invalid combination of -regtest and -testnet."); + if (fRegTest) + return CBaseChainParams::REGTEST; + if (fTestNet) + return CBaseChainParams::TESTNET; + return CBaseChainParams::MAIN; } |