aboutsummaryrefslogtreecommitdiff
path: root/src/chainparams.cpp
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2021-08-27 12:54:24 +0200
committerMarcoFalke <falke.marco@gmail.com>2021-09-16 18:52:59 +0200
commitfaad1e5ffda255aecf1b0ea2152cd4f6805e678f (patch)
treef5f115168b1c19db862c66d23ca82a41a6a99f5e /src/chainparams.cpp
parentfadb2ef2fa8561882db463f35df9b8a0e9609658 (diff)
downloadbitcoin-faad1e5ffda255aecf1b0ea2152cd4f6805e678f.tar.xz
Introduce -testactivationheight=name@height setting
Diffstat (limited to 'src/chainparams.cpp')
-rw-r--r--src/chainparams.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/chainparams.cpp b/src/chainparams.cpp
index 4cc37560a3..5c58944499 100644
--- a/src/chainparams.cpp
+++ b/src/chainparams.cpp
@@ -487,15 +487,30 @@ public:
void UpdateActivationParametersFromArgs(const ArgsManager& args);
};
-void CRegTestParams::UpdateActivationParametersFromArgs(const ArgsManager& args)
+static void MaybeUpdateHeights(const ArgsManager& args, Consensus::Params& consensus)
{
- if (args.IsArgSet("-segwitheight")) {
- int64_t height = args.GetArg("-segwitheight", consensus.SegwitHeight);
- if (height < 0 || height >= std::numeric_limits<int>::max()) {
- throw std::runtime_error(strprintf("Activation height %ld for segwit is out of valid range.", height));
+ for (const std::string& arg : args.GetArgs("-testactivationheight")) {
+ const auto found{arg.find('@')};
+ if (found == std::string::npos) {
+ throw std::runtime_error(strprintf("Invalid format (%s) for -testactivationheight=name@height.", arg));
+ }
+ const auto name{arg.substr(0, found)};
+ const auto value{arg.substr(found + 1)};
+ int32_t height;
+ if (!ParseInt32(value, &height) || height < 0 || height >= std::numeric_limits<int>::max()) {
+ throw std::runtime_error(strprintf("Invalid height value (%s) for -testactivationheight=name@height.", arg));
+ }
+ if (name == "segwit") {
+ consensus.SegwitHeight = int{height};
+ } else {
+ throw std::runtime_error(strprintf("Invalid name (%s) for -testactivationheight=name@height.", arg));
}
- consensus.SegwitHeight = static_cast<int>(height);
}
+}
+
+void CRegTestParams::UpdateActivationParametersFromArgs(const ArgsManager& args)
+{
+ MaybeUpdateHeights(args, consensus);
if (!args.IsArgSet("-vbparams")) return;