Page MenuHomePhabricator

D11359.diff
No OneTemporary

D11359.diff

diff --git a/src/avalanche/test/CMakeLists.txt b/src/avalanche/test/CMakeLists.txt
--- a/src/avalanche/test/CMakeLists.txt
+++ b/src/avalanche/test/CMakeLists.txt
@@ -14,6 +14,7 @@
TESTS
delegation_tests.cpp
+ init_tests.cpp
peermanager_tests.cpp
processor_tests.cpp
proof_tests.cpp
diff --git a/src/avalanche/test/init_tests.cpp b/src/avalanche/test/init_tests.cpp
new file mode 100644
--- /dev/null
+++ b/src/avalanche/test/init_tests.cpp
@@ -0,0 +1,99 @@
+// Copyright (c) 2022 The Bitcoin developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include <avalanche/avalanche.h>
+#include <avalanche/proof.h>
+#include <init.h>
+#include <util/moneystr.h>
+#include <util/string.h>
+#include <util/system.h>
+
+#include <test/util/setup_common.h>
+
+#include <boost/test/unit_test.hpp>
+
+#include <cstdint>
+
+BOOST_FIXTURE_TEST_SUITE(init_tests, BasicTestingSetup)
+
+BOOST_AUTO_TEST_CASE(avalanche_flag_tests) {
+ gArgs.ForceSetArg("-ecash", "1");
+ const Amount tenBillion = 10'000'000'000 * Currency::get().baseunit;
+
+ auto getAvaMinQuorumStakeAmount = [](const ArgsManager &args,
+ const Amount defaultAmount) {
+ Amount avaminquorumstake;
+ BOOST_CHECK(ParseMoney(
+ args.GetArg("-avaminquorumstake", FormatMoney(defaultAmount)),
+ avaminquorumstake));
+ return avaminquorumstake;
+ };
+
+ {
+ // Check the feature flags when avalanche is set
+ ArgsManager args;
+ args.ForceSetArg("-avalanche", "1");
+ InitParameterInteraction(args);
+
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-enableavalanche", false), true);
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-legacyavaproof", true), false);
+ BOOST_CHECK_EQUAL(
+ args.GetBoolArg("-enableavalanchepeerdiscovery", false), true);
+ BOOST_CHECK_EQUAL(
+ args.GetBoolArg("-enableavalancheproofreplacement", false), true);
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-automaticunparking", true), false);
+ BOOST_CHECK_EQUAL(getAvaMinQuorumStakeAmount(args, 42 * COIN),
+ tenBillion);
+ BOOST_CHECK_EQUAL(
+ args.GetArg("-avaminquorumconnectedstakeratio", "0.42"), "0.8");
+ }
+
+ {
+ // Check the feature flags when avalanche is reset
+ ArgsManager args;
+ args.ForceSetArg("-avalanche", "0");
+ InitParameterInteraction(args);
+
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-enableavalanche", true), false);
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-legacyavaproof", false),
+ AVALANCHE_DEFAULT_LEGACY_PROOF);
+ BOOST_CHECK_EQUAL(
+ args.GetBoolArg("-enableavalanchepeerdiscovery", true), false);
+ BOOST_CHECK_EQUAL(
+ args.GetBoolArg("-enableavalancheproofreplacement", true), false);
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-automaticunparking", false), true);
+ BOOST_CHECK_EQUAL(getAvaMinQuorumStakeAmount(args, tenBillion),
+ AVALANCHE_DEFAULT_MIN_QUORUM_STAKE);
+ BOOST_CHECK_EQUAL(
+ args.GetArg("-avaminquorumconnectedstakeratio", "0.8"),
+ ToString(AVALANCHE_DEFAULT_MIN_QUORUM_CONNECTED_STAKE_RATIO));
+ }
+
+ {
+ // Check the feature flags can always be overridden
+ ArgsManager args;
+ args.ForceSetArg("-avalanche", "1");
+ args.ForceSetArg("-legacyavaproof", "1");
+ args.ForceSetArg("-enableavalancheproofreplacement", "0");
+ args.ForceSetArg("-automaticunparking", "1");
+ args.ForceSetArg("-avaminquorumstake", FormatMoney(123 * COIN));
+ InitParameterInteraction(args);
+
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-enableavalanche", false), true);
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-legacyavaproof", false), true);
+ BOOST_CHECK_EQUAL(
+ args.GetBoolArg("-enableavalanchepeerdiscovery", false), true);
+ BOOST_CHECK_EQUAL(
+ args.GetBoolArg("-enableavalancheproofreplacement", true), false);
+ BOOST_CHECK_EQUAL(args.GetBoolArg("-automaticunparking", false), true);
+ BOOST_CHECK_EQUAL(getAvaMinQuorumStakeAmount(args, tenBillion),
+ 123 * COIN);
+ BOOST_CHECK_EQUAL(
+ args.GetArg("-avaminquorumconnectedstakeratio", "0.42"), "0.8");
+ }
+
+ gArgs.ClearForcedArg("-ecash");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/init.cpp b/src/init.cpp
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1296,10 +1296,16 @@
#endif
// Avalanche options.
- argsman.AddArg(
- "-enableavalanche",
- strprintf("Enable avalanche (default: %u)", AVALANCHE_DEFAULT_ENABLED),
- ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE);
+ argsman.AddArg("-avalanche",
+ strprintf("Enable all the avalanche features (default: %u)",
+ AVALANCHE_DEFAULT_ENABLED),
+ ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE);
+ argsman.AddArg("-enableavalanche",
+ strprintf("Enable the core avalanche features only. You "
+ "need to manually configure the individual "
+ "features with dedicated flags (default: %u)",
+ AVALANCHE_DEFAULT_ENABLED),
+ ArgsManager::ALLOW_ANY, OptionsCategory::AVALANCHE);
argsman.AddArg("-enableavalanchepeerdiscovery",
strprintf("Enable avalanche peer discovery (default: %u)",
AVALANCHE_DEFAULT_PEER_DISCOVERY_ENABLED),
@@ -1740,6 +1746,28 @@
__func__);
}
}
+
+ // If avalanche is set, soft set all the feature flags accordingly.
+ if (args.IsArgSet("-avalanche")) {
+ const bool fAvalanche =
+ args.GetBoolArg("-avalanche", AVALANCHE_DEFAULT_ENABLED);
+ args.SoftSetBoolArg("-enableavalanche", fAvalanche);
+ args.SoftSetBoolArg("-legacyavaproof",
+ fAvalanche ? false
+ : AVALANCHE_DEFAULT_LEGACY_PROOF);
+ args.SoftSetBoolArg("-enableavalanchepeerdiscovery", fAvalanche);
+ args.SoftSetBoolArg("-enableavalancheproofreplacement", fAvalanche);
+ args.SoftSetBoolArg("-automaticunparking", !fAvalanche);
+ args.SoftSetArg(
+ "-avaminquorumstake",
+ fAvalanche ? FormatMoney(1'000'000'000'000 * SATOSHI) // 10B XEC
+ : FormatMoney(AVALANCHE_DEFAULT_MIN_QUORUM_STAKE));
+ args.SoftSetArg(
+ "-avaminquorumconnectedstakeratio",
+ fAvalanche
+ ? "0.8"
+ : ToString(AVALANCHE_DEFAULT_MIN_QUORUM_CONNECTED_STAKE_RATIO));
+ }
}
/**

File Metadata

Mime Type
text/plain
Expires
Sat, Apr 26, 11:11 (5 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5573373
Default Alt Text
D11359.diff (6 KB)

Event Timeline