mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-10 10:52:31 -05:00
Merge #16680: Preparations for more testchains
3bf9d8cac0
Testchains: Qt: Simplify network/chain styles (Jorge Timón)052c54ecb0
Testchains: Generic selection with -chain=<str> in addition of -testnet and -regtest (Jorge Timón) Pull request description: Separated from #8994 as suggested by MarcoFalke and Sjors in https://github.com/bitcoin/bitcoin/pull/8994#issuecomment-522555390 You can't really test the qt changes on their own, so to test them, use #8994 . ACKs for top commit: MarcoFalke: ACK3bf9d8cac0
Tree-SHA512: 5b5e6083ebc0a44505a507fac633e7af18037c85e5e73f5d1e6f7e730575d3297ba8a31d1c2441df623b273f061c32d8fa324f4aa6bead01d23e88582029b568
This commit is contained in:
commit
750c2fbf26
11 changed files with 29 additions and 24 deletions
|
@ -133,7 +133,7 @@ static int AppInitRPC(int argc, char* argv[])
|
||||||
tfm::format(std::cerr, "Error reading configuration file: %s\n", error.c_str());
|
tfm::format(std::cerr, "Error reading configuration file: %s\n", error.c_str());
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
// Check for -testnet or -regtest parameter (BaseParams() calls are only valid after this clause)
|
// Check for -chain, -testnet or -regtest parameter (BaseParams() calls are only valid after this clause)
|
||||||
try {
|
try {
|
||||||
SelectBaseParams(gArgs.GetChainName());
|
SelectBaseParams(gArgs.GetChainName());
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
|
|
|
@ -88,7 +88,7 @@ static int AppInitRawTx(int argc, char* argv[])
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
// Check for -chain, -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
||||||
try {
|
try {
|
||||||
SelectParams(gArgs.GetChainName());
|
SelectParams(gArgs.GetChainName());
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
|
|
|
@ -101,7 +101,7 @@ static bool AppInit(int argc, char* argv[])
|
||||||
if (!gArgs.ReadConfigFiles(error, true)) {
|
if (!gArgs.ReadConfigFiles(error, true)) {
|
||||||
return InitError(strprintf("Error reading configuration file: %s\n", error));
|
return InitError(strprintf("Error reading configuration file: %s\n", error));
|
||||||
}
|
}
|
||||||
// Check for -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
// Check for -chain, -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
||||||
try {
|
try {
|
||||||
SelectParams(gArgs.GetChainName());
|
SelectParams(gArgs.GetChainName());
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
|
|
|
@ -17,10 +17,11 @@ const std::string CBaseChainParams::REGTEST = "regtest";
|
||||||
|
|
||||||
void SetupChainParamsBaseOptions()
|
void SetupChainParamsBaseOptions()
|
||||||
{
|
{
|
||||||
|
gArgs.AddArg("-chain=<chain>", "Use the chain <chain> (default: main). Allowed values: main, test, regtest", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
gArgs.AddArg("-regtest", "Enter regression test mode, which uses a special chain in which blocks can be solved instantly. "
|
gArgs.AddArg("-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.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
"This is intended for regression testing tools and app development. Equivalent to -chain=regtest.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||||
gArgs.AddArg("-segwitheight=<n>", "Set the activation height of segwit. -1 to disable. (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
gArgs.AddArg("-segwitheight=<n>", "Set the activation height of segwit. -1 to disable. (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||||
gArgs.AddArg("-testnet", "Use the test chain", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
gArgs.AddArg("-testnet", "Use the test chain. Equivalent to -chain=test.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
gArgs.AddArg("-vbparams=deployment:start:end", "Use given start/end times for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
gArgs.AddArg("-vbparams=deployment:start:end", "Use given start/end times for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -511,7 +511,7 @@ int GuiMain(int argc, char* argv[])
|
||||||
// - QSettings() will use the new application name after this, resulting in network-specific settings
|
// - QSettings() will use the new application name after this, resulting in network-specific settings
|
||||||
// - Needs to be done before createOptionsModel
|
// - Needs to be done before createOptionsModel
|
||||||
|
|
||||||
// Check for -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
// Check for -chain, -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
||||||
try {
|
try {
|
||||||
node->selectParams(gArgs.GetChainName());
|
node->selectParams(gArgs.GetChainName());
|
||||||
} catch(std::exception &e) {
|
} catch(std::exception &e) {
|
||||||
|
@ -524,7 +524,7 @@ int GuiMain(int argc, char* argv[])
|
||||||
PaymentServer::ipcParseCommandLine(*node, argc, argv);
|
PaymentServer::ipcParseCommandLine(*node, argc, argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QScopedPointer<const NetworkStyle> networkStyle(NetworkStyle::instantiate(QString::fromStdString(Params().NetworkIDString())));
|
QScopedPointer<const NetworkStyle> networkStyle(NetworkStyle::instantiate(Params().NetworkIDString()));
|
||||||
assert(!networkStyle.isNull());
|
assert(!networkStyle.isNull());
|
||||||
// Allow for separate UI settings for testnets
|
// Allow for separate UI settings for testnets
|
||||||
QApplication::setApplicationName(networkStyle->getAppName());
|
QApplication::setApplicationName(networkStyle->getAppName());
|
||||||
|
|
|
@ -588,7 +588,7 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
||||||
// Start client minimized
|
// Start client minimized
|
||||||
QString strArgs = "-min";
|
QString strArgs = "-min";
|
||||||
// Set -testnet /-regtest options
|
// Set -testnet /-regtest options
|
||||||
strArgs += QString::fromStdString(strprintf(" -testnet=%d -regtest=%d", gArgs.GetBoolArg("-testnet", false), gArgs.GetBoolArg("-regtest", false)));
|
strArgs += QString::fromStdString(strprintf(" -chain=%s", gArgs.GetChainName()));
|
||||||
|
|
||||||
// Set the path to the shortcut target
|
// Set the path to the shortcut target
|
||||||
psl->SetPath(pszExePath);
|
psl->SetPath(pszExePath);
|
||||||
|
@ -683,7 +683,7 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
||||||
optionFile << "Name=Bitcoin\n";
|
optionFile << "Name=Bitcoin\n";
|
||||||
else
|
else
|
||||||
optionFile << strprintf("Name=Bitcoin (%s)\n", chain);
|
optionFile << strprintf("Name=Bitcoin (%s)\n", chain);
|
||||||
optionFile << "Exec=" << pszExePath << strprintf(" -min -testnet=%d -regtest=%d\n", gArgs.GetBoolArg("-testnet", false), gArgs.GetBoolArg("-regtest", false));
|
optionFile << "Exec=" << pszExePath << strprintf(" -min -chain=%s\n", chain);
|
||||||
optionFile << "Terminal=false\n";
|
optionFile << "Terminal=false\n";
|
||||||
optionFile << "Hidden=false\n";
|
optionFile << "Hidden=false\n";
|
||||||
optionFile.close();
|
optionFile.close();
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
#include <qt/guiconstants.h>
|
#include <qt/guiconstants.h>
|
||||||
|
|
||||||
|
#include <chainparamsbase.h>
|
||||||
|
#include <tinyformat.h>
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
|
@ -13,11 +16,10 @@ static const struct {
|
||||||
const char *appName;
|
const char *appName;
|
||||||
const int iconColorHueShift;
|
const int iconColorHueShift;
|
||||||
const int iconColorSaturationReduction;
|
const int iconColorSaturationReduction;
|
||||||
const char *titleAddText;
|
|
||||||
} network_styles[] = {
|
} network_styles[] = {
|
||||||
{"main", QAPP_APP_NAME_DEFAULT, 0, 0, ""},
|
{"main", QAPP_APP_NAME_DEFAULT, 0, 0},
|
||||||
{"test", QAPP_APP_NAME_TESTNET, 70, 30, QT_TRANSLATE_NOOP("SplashScreen", "[testnet]")},
|
{"test", QAPP_APP_NAME_TESTNET, 70, 30},
|
||||||
{"regtest", QAPP_APP_NAME_REGTEST, 160, 30, "[regtest]"}
|
{"regtest", QAPP_APP_NAME_REGTEST, 160, 30}
|
||||||
};
|
};
|
||||||
static const unsigned network_styles_count = sizeof(network_styles)/sizeof(*network_styles);
|
static const unsigned network_styles_count = sizeof(network_styles)/sizeof(*network_styles);
|
||||||
|
|
||||||
|
@ -75,8 +77,9 @@ NetworkStyle::NetworkStyle(const QString &_appName, const int iconColorHueShift,
|
||||||
trayAndWindowIcon = QIcon(pixmap.scaled(QSize(256,256)));
|
trayAndWindowIcon = QIcon(pixmap.scaled(QSize(256,256)));
|
||||||
}
|
}
|
||||||
|
|
||||||
const NetworkStyle *NetworkStyle::instantiate(const QString &networkId)
|
const NetworkStyle* NetworkStyle::instantiate(const std::string& networkId)
|
||||||
{
|
{
|
||||||
|
std::string titleAddText = networkId == CBaseChainParams::MAIN ? "" : strprintf("[%s]", networkId);
|
||||||
for (unsigned x=0; x<network_styles_count; ++x)
|
for (unsigned x=0; x<network_styles_count; ++x)
|
||||||
{
|
{
|
||||||
if (networkId == network_styles[x].networkId)
|
if (networkId == network_styles[x].networkId)
|
||||||
|
@ -85,7 +88,7 @@ const NetworkStyle *NetworkStyle::instantiate(const QString &networkId)
|
||||||
network_styles[x].appName,
|
network_styles[x].appName,
|
||||||
network_styles[x].iconColorHueShift,
|
network_styles[x].iconColorHueShift,
|
||||||
network_styles[x].iconColorSaturationReduction,
|
network_styles[x].iconColorSaturationReduction,
|
||||||
network_styles[x].titleAddText);
|
titleAddText.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
|
@ -14,7 +14,7 @@ class NetworkStyle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/** Get style associated with provided BIP70 network id, or 0 if not known */
|
/** Get style associated with provided BIP70 network id, or 0 if not known */
|
||||||
static const NetworkStyle *instantiate(const QString &networkId);
|
static const NetworkStyle* instantiate(const std::string& networkId);
|
||||||
|
|
||||||
const QString &getAppName() const { return appName; }
|
const QString &getAppName() const { return appName; }
|
||||||
const QIcon &getAppIcon() const { return appIcon; }
|
const QIcon &getAppIcon() const { return appIcon; }
|
||||||
|
|
|
@ -68,8 +68,7 @@ void AppTests::appTests()
|
||||||
|
|
||||||
m_app.parameterSetup();
|
m_app.parameterSetup();
|
||||||
m_app.createOptionsModel(true /* reset settings */);
|
m_app.createOptionsModel(true /* reset settings */);
|
||||||
QScopedPointer<const NetworkStyle> style(
|
QScopedPointer<const NetworkStyle> style(NetworkStyle::instantiate(Params().NetworkIDString()));
|
||||||
NetworkStyle::instantiate(QString::fromStdString(Params().NetworkIDString())));
|
|
||||||
m_app.setupPlatformStyle();
|
m_app.setupPlatformStyle();
|
||||||
m_app.createWindow(style.data());
|
m_app.createWindow(style.data());
|
||||||
connect(&m_app, &BitcoinApplication::windowShown, this, &AppTests::guiTests);
|
connect(&m_app, &BitcoinApplication::windowShown, this, &AppTests::guiTests);
|
||||||
|
|
|
@ -913,7 +913,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
||||||
// Results file is formatted like:
|
// Results file is formatted like:
|
||||||
//
|
//
|
||||||
// <input> || <output>
|
// <input> || <output>
|
||||||
BOOST_CHECK_EQUAL(out_sha_hex, "b284f4b4a15dd6bf8c06213a69a004b1960388e1d9917173927db52ac220927f");
|
BOOST_CHECK_EQUAL(out_sha_hex, "94b4ad55c8ac639a56b93e36f7e32e4c611fd7d7dd7b2be6a71707b1eadcaec7");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(util_FormatMoney)
|
BOOST_AUTO_TEST_CASE(util_FormatMoney)
|
||||||
|
|
|
@ -954,16 +954,18 @@ bool ArgsManager::ReadConfigFiles(std::string& error, bool ignore_invalid_keys)
|
||||||
std::string ArgsManager::GetChainName() const
|
std::string ArgsManager::GetChainName() const
|
||||||
{
|
{
|
||||||
LOCK(cs_args);
|
LOCK(cs_args);
|
||||||
bool fRegTest = ArgsManagerHelper::GetNetBoolArg(*this, "-regtest");
|
const bool fRegTest = ArgsManagerHelper::GetNetBoolArg(*this, "-regtest");
|
||||||
bool fTestNet = ArgsManagerHelper::GetNetBoolArg(*this, "-testnet");
|
const bool fTestNet = ArgsManagerHelper::GetNetBoolArg(*this, "-testnet");
|
||||||
|
const bool is_chain_arg_set = IsArgSet("-chain");
|
||||||
|
|
||||||
if (fTestNet && fRegTest)
|
if ((int)is_chain_arg_set + (int)fRegTest + (int)fTestNet > 1) {
|
||||||
throw std::runtime_error("Invalid combination of -regtest and -testnet.");
|
throw std::runtime_error("Invalid combination of -regtest, -testnet and -chain. Can use at most one.");
|
||||||
|
}
|
||||||
if (fRegTest)
|
if (fRegTest)
|
||||||
return CBaseChainParams::REGTEST;
|
return CBaseChainParams::REGTEST;
|
||||||
if (fTestNet)
|
if (fTestNet)
|
||||||
return CBaseChainParams::TESTNET;
|
return CBaseChainParams::TESTNET;
|
||||||
return CBaseChainParams::MAIN;
|
return GetArg("-chain", CBaseChainParams::MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RenameOver(fs::path src, fs::path dest)
|
bool RenameOver(fs::path src, fs::path dest)
|
||||||
|
|
Loading…
Add table
Reference in a new issue