aboutsummaryrefslogtreecommitdiff
path: root/src/chainparamsbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chainparamsbase.cpp')
-rw-r--r--src/chainparamsbase.cpp131
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 = &regTestParams;
- 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;
}