From ead81f1e92cd737f4835e6fc30e68d768a173525 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 13:02:48 -0500 Subject: [PATCH 01/13] zmq: use testnet4 in examples --- contrib/zmq/zmq_sub.py | 14 +++++++------- doc/zmq.md | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contrib/zmq/zmq_sub.py b/contrib/zmq/zmq_sub.py index d8087a4db38..b560e06ab44 100755 --- a/contrib/zmq/zmq_sub.py +++ b/contrib/zmq/zmq_sub.py @@ -7,12 +7,12 @@ ZMQ example using python3's asyncio Bitcoin should be started with the command line arguments: - bitcoind -testnet -daemon \ - -zmqpubrawtx=tcp://127.0.0.1:28332 \ - -zmqpubrawblock=tcp://127.0.0.1:28332 \ - -zmqpubhashtx=tcp://127.0.0.1:28332 \ - -zmqpubhashblock=tcp://127.0.0.1:28332 \ - -zmqpubsequence=tcp://127.0.0.1:28332 + bitcoind -testnet4 -daemon \ + -zmqpubrawtx=tcp://127.0.0.1:48332 \ + -zmqpubrawblock=tcp://127.0.0.1:48332 \ + -zmqpubhashtx=tcp://127.0.0.1:48332 \ + -zmqpubhashblock=tcp://127.0.0.1:48332 \ + -zmqpubsequence=tcp://127.0.0.1:48332 We use the asyncio library here. `self.handle()` installs itself as a future at the end of the function. Since it never returns with the event @@ -34,7 +34,7 @@ if (sys.version_info.major, sys.version_info.minor) < (3, 5): print("This example only works with Python 3.5 and greater") sys.exit(1) -port = 28332 +port = 48332 class ZMQHandler(): def __init__(self): diff --git a/doc/zmq.md b/doc/zmq.md index 0a74d6eef97..cb22d43f06b 100644 --- a/doc/zmq.md +++ b/doc/zmq.md @@ -81,8 +81,8 @@ The high water mark value must be an integer greater than or equal to 0. For instance: - $ bitcoind -zmqpubhashtx=tcp://127.0.0.1:28332 \ - -zmqpubhashtx=tcp://192.168.1.2:28332 \ + $ bitcoind -zmqpubhashtx=tcp://127.0.0.1:48332 \ + -zmqpubhashtx=tcp://192.168.1.2:48332 \ -zmqpubhashblock="tcp://[::1]:28333" \ -zmqpubrawtx=ipc:///tmp/bitcoind.tx.raw \ -zmqpubhashtxhwm=10000 From 47ef570f89d48d3e21dc0c1ed3449c75cae5994b Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 13:05:53 -0500 Subject: [PATCH 02/13] test: drop unused testnet3 magic bytes --- test/functional/test_framework/messages.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/functional/test_framework/messages.py b/test/functional/test_framework/messages.py index 1ba48f9a480..9e2b925e8fe 100755 --- a/test/functional/test_framework/messages.py +++ b/test/functional/test_framework/messages.py @@ -79,7 +79,6 @@ DEFAULT_MEMPOOL_EXPIRY_HOURS = 336 # hours MAGIC_BYTES = { "mainnet": b"\xf9\xbe\xb4\xd9", # mainnet - "testnet3": b"\x0b\x11\x09\x07", # testnet3 "regtest": b"\xfa\xbf\xb5\xda", # regtest "signet": b"\x0a\x03\xcf\x40", # signet } From f89fd572f3d5c73cd683b014797245c3d9b02c9a Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 13:11:49 -0500 Subject: [PATCH 03/13] test: use testnet4 in key_io_valid.json --- src/test/data/key_io_valid.json | 36 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/test/data/key_io_valid.json b/src/test/data/key_io_valid.json index c051f8b76b0..bff7ecff099 100644 --- a/src/test/data/key_io_valid.json +++ b/src/test/data/key_io_valid.json @@ -19,7 +19,7 @@ "mzK2FFDEhxqHcmrJw1ysqFkVyhUULo45hZ", "76a914ce28b26c57472737f5c3561a1761185bd8589a4388ac", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false } ], @@ -27,7 +27,7 @@ "2NC2hEhe28ULKAJkW5MjZ3jtTMJdvXmByvK", "a914ce0bba75891ff9ec60148d4bd4a09ee2dc5c933187", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false } ], @@ -85,7 +85,7 @@ "92ZdE5HoLafywnTBbzPxbvRmp75pSfzvdU3XaZGh1cToipgdHVh", "80c32d81e91bdea04cd7a3819b32275fc3298af4c7ec87eb0099527d041ced5c", { - "chain": "test", + "chain": "testnet4", "isCompressed": false, "isPrivkey": true } @@ -94,7 +94,7 @@ "cV83kKisF3RQSvXbUCm9ox3kaz5JjEUBWcx8tNydfGJcyeUxuH47", "e0fcd4ce4e3d0e3de091f21415bb7cd011fac288c42020a879f28c2a4387df9b", { - "chain": "test", + "chain": "testnet4", "isCompressed": true, "isPrivkey": true } @@ -175,7 +175,7 @@ "tb1qcrh3yqn4nlleplcez2yndq2ry8h9ncg3qh7n54", "0014c0ef1202759fff90ff19128936814321ee59e111", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -184,7 +184,7 @@ "tb1quyl9ujpgwr2chdzdnnalen48sup245vdfnh2jxhsuq3yx80rrwlq5hqfe4", "0020e13e5e482870d58bb44d9cfbfccea78702aad18d4ceea91af0e022431de31bbe", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -193,7 +193,7 @@ "tb1p35n52jy6xkm4wd905tdy8qtagrn73kqdz73xe4zxpvq9t3fp50aqk3s6gz", "51208d2745489a35b75734afa2da43817d40e7e8d80d17a26cd4460b0055c521a3fa", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -202,7 +202,7 @@ "tb1rgv5m6uvdk3kc7qsuz0c79v88ycr5w4wa", "53104329bd718db46d8f021c13f1e2b0e726", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -299,7 +299,7 @@ "n4YNbYuFdPwFrxSP8sjHFbAhUbLMUiY9jE", "76a914fc8f9851f3c1e4719cd0b8e4816dd4e88c72e52888ac", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false } ], @@ -307,7 +307,7 @@ "2NAeQVZayzVFAtgeC3iYJsjpjWDmsDph71A", "a914bedc797342c03fd7a346c4c7857ca03d467013b687", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false } ], @@ -365,7 +365,7 @@ "921M1RNxghFcsVGqAJksQVbSgx36Yz4u6vebfz1wDujNvgNt93B", "3777b341c45e2a9b9bf6bfb71dc7d129f64f1b9406ed4f93ade8f56065f1b732", { - "chain": "test", + "chain": "testnet4", "isCompressed": false, "isPrivkey": true } @@ -374,7 +374,7 @@ "cNEnbfF2fcxmmCLWqMAaq6fxJvVkwMbyU3kCbpQznz4Z1j6TZDGb", "1397b0d4a03e1ab2c54dd9af99ce1ecbfb90c80a58886da95e1181a55703d96b", { - "chain": "test", + "chain": "testnet4", "isCompressed": true, "isPrivkey": true } @@ -455,7 +455,7 @@ "tb1ql4k5ayv7p7w0t0ge7tpntgpkgw53g2payxkszr", "0014fd6d4e919e0f9cf5bd19f2c335a03643a914283d", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -464,7 +464,7 @@ "tb1q9jx3x2qqdpempxrcfgyrkjd5fzeacaqj4ua7cs7fe2sfd2wdaueq5wn26y", "00202c8d1328006873b098784a083b49b448b3dc7412af3bec43c9caa096a9cdef32", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -473,7 +473,7 @@ "tb1pdswckwd9ym5yf5eyzg8j4jjwnzla8y0tf9cp7aasfkek0u29sz9qfr00yf", "51206c1d8b39a526e844d324120f2aca4e98bfd391eb49701f77b04db367f145808a", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -482,7 +482,7 @@ "tb1r0ecpfxg2udhtc556gqrpwwhk4sw3f0kc", "53107e7014990ae36ebc529a4006173af6ac", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false, "tryCaseFlip": true } @@ -579,7 +579,7 @@ "mwgS2HRbjyfYxFnR1nF9VKLvmdgMfFBmGq", "76a914b14ce7070b53cb0e4b5b5f6e253e876990aeca2e88ac", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false } ], @@ -587,7 +587,7 @@ "2MwBVrJQ76BdaGD76CTmou8cZzQYLpe4NqU", "a9142b2c149cde619eae3d7fe995243b76a3417541aa87", { - "chain": "test", + "chain": "testnet4", "isPrivkey": false } ], From 3ff1fb19d72631b4495635305ae38e7846601f34 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 14:30:35 -0500 Subject: [PATCH 04/13] test: use testnet4 in argsman test --- src/test/argsman_tests.cpp | 56 ++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/src/test/argsman_tests.cpp b/src/test/argsman_tests.cpp index 297595a9cf0..0d06c39de93 100644 --- a/src/test/argsman_tests.cpp +++ b/src/test/argsman_tests.cpp @@ -648,22 +648,20 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString) const auto regtest = std::make_pair("-regtest", ArgsManager::ALLOW_ANY); test_args.SetupArgs({testnet, testnet4, regtest}); - const char* argv_testnet[] = {"cmd", "-testnet"}; const char* argv_testnet4[] = {"cmd", "-testnet4"}; const char* argv_regtest[] = {"cmd", "-regtest"}; - const char* argv_test_no_reg[] = {"cmd", "-testnet", "-noregtest"}; - const char* argv_both[] = {"cmd", "-testnet", "-regtest"}; + const char* argv_test_no_reg[] = {"cmd", "-testnet4", "-noregtest"}; + const char* argv_both[] = {"cmd", "-testnet4", "-regtest"}; - // equivalent to "-testnet" - // regtest in testnet section is ignored - const char* testnetconf = "testnet=1\nregtest=0\n[test]\nregtest=1"; + // regtest in test network section is ignored + const char* testnetconf = "testnet4=1\nregtest=0\n[testnet4]\nregtest=1"; std::string error; - BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error)); + BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error)); BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main"); - BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error)); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error)); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error)); BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main"); @@ -675,18 +673,18 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString) BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "regtest"); BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error)); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); BOOST_CHECK(test_args.ParseParameters(3, argv_both, error)); BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error); - BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error)); + BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error)); test_args.ReadConfigString(testnetconf); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); - BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error)); + BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error)); test_args.ReadConfigString(testnetconf); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error)); test_args.ReadConfigString(testnetconf); @@ -694,23 +692,23 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString) BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error)); test_args.ReadConfigString(testnetconf); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); BOOST_CHECK(test_args.ParseParameters(3, argv_both, error)); test_args.ReadConfigString(testnetconf); BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error); - // check setting the network to test (and thus making - // [test] regtest=1 potentially relevant) doesn't break things - test_args.SelectConfigNetwork("test"); + // check setting the network to testnet4 (and thus making + // [testnet4] regtest=1 potentially relevant) doesn't break things + test_args.SelectConfigNetwork("testnet4"); - BOOST_CHECK(test_args.ParseParameters(0, argv_testnet, error)); + BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error)); test_args.ReadConfigString(testnetconf); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); - BOOST_CHECK(test_args.ParseParameters(2, argv_testnet, error)); + BOOST_CHECK(test_args.ParseParameters(2, argv_testnet4, error)); test_args.ReadConfigString(testnetconf); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error)); test_args.ReadConfigString(testnetconf); @@ -718,7 +716,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString) BOOST_CHECK(test_args.ParseParameters(2, argv_test_no_reg, error)); test_args.ReadConfigString(testnetconf); - BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "test"); + BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "testnet4"); BOOST_CHECK(test_args.ParseParameters(3, argv_both, error)); test_args.ReadConfigString(testnetconf); @@ -739,7 +737,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString) // // - Combining SoftSet and ForceSet calls. // -// - Testing "main" and "test" network values to make sure settings from network +// - Testing "main" and "testnet4" network values to make sure settings from network // sections are applied and to check for mainnet-specific behaviors like // inheriting settings from the default section. // @@ -956,11 +954,11 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup) TestArgsManager parser; LOCK(parser.cs_args); parser.AddArg("-regtest", "regtest", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - parser.AddArg("-testnet", "testnet", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + parser.AddArg("-testnet4", "testnet4", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - auto arg = [](Action action) { return action == ENABLE_TEST ? "-testnet=1" : - action == DISABLE_TEST ? "-testnet=0" : - action == NEGATE_TEST ? "-notestnet=1" : + auto arg = [](Action action) { return action == ENABLE_TEST ? "-testnet4=1" : + action == DISABLE_TEST ? "-testnet4=0" : + action == NEGATE_TEST ? "-notestnet4=1" : action == ENABLE_REG ? "-regtest=1" : action == DISABLE_REG ? "-regtest=0" : action == NEGATE_REG ? "-noregtest=1" : nullptr; }; @@ -1024,7 +1022,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup) // Results file is formatted like: // // || - BOOST_CHECK_EQUAL(out_sha_hex, "9e60306e1363528bbc19a47f22bcede88e5d6815212f18ec8e6cdc4638dddab4"); + BOOST_CHECK_EQUAL(out_sha_hex, "c0e33aab0c74e040ddcee9edad59e8148d8e1cacb3cccd9ea1a1f485cb6bad21"); } BOOST_AUTO_TEST_CASE(util_ReadWriteSettings) From 24da12d84ad8c777b4892166a3d83a79e5d5626c Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 13:12:45 -0500 Subject: [PATCH 05/13] doc: use testnet4 in developer docs --- doc/developer-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/developer-notes.md b/doc/developer-notes.md index c8851a8dd09..b12054db5cf 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -410,7 +410,7 @@ to see it. ### Signet, testnet, and regtest modes If you are testing multi-machine code that needs to operate across the internet, -you can run with either the `-signet` or the `-testnet` config option to test +you can run with either the `-signet` or the `-testnet4` config option to test with "play bitcoins" on a test network. If you are testing something that can run on one machine, run with the From 6539ae7af412d7cf26554329be78a9599bce3d09 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 13:19:27 -0500 Subject: [PATCH 06/13] gui: drop testnet3 --- share/setup.nsi.in | 6 ++---- src/qt/guiutil.cpp | 2 -- src/qt/networkstyle.cpp | 1 - src/qt/res/bitcoin-qt-res.rc | 5 ++--- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/share/setup.nsi.in b/share/setup.nsi.in index d1a85cdb7f3..f63b198e8e6 100644 --- a/share/setup.nsi.in +++ b/share/setup.nsi.in @@ -95,9 +95,8 @@ Section -post SEC0001 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory $SMPROGRAMS\$StartMenuGroup CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@ - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1 - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-signet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 2 - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet4" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 3 + CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-signet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1 + CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet4" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 2 CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_END WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" @@ -142,7 +141,6 @@ Section -un.post UNSEC0001 DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet).lnk" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (testnet4).lnk" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@CLIENT_NAME@ (test signet).lnk" Delete /REBOOTOK "$SMSTARTUP\Bitcoin.lnk" diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 2369f6b6312..77e89cc8c73 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -519,8 +519,6 @@ fs::path static StartupShortcutPath() ChainType chain = gArgs.GetChainType(); if (chain == ChainType::MAIN) return GetSpecialFolderPath(CSIDL_STARTUP) / "Bitcoin.lnk"; - if (chain == ChainType::TESTNET) // Remove this special case when testnet CBaseChainParams::DataDir() is incremented to "testnet4" - return GetSpecialFolderPath(CSIDL_STARTUP) / "Bitcoin (testnet).lnk"; return GetSpecialFolderPath(CSIDL_STARTUP) / fs::u8path(strprintf("Bitcoin (%s).lnk", ChainTypeToString(chain))); } diff --git a/src/qt/networkstyle.cpp b/src/qt/networkstyle.cpp index d3f7c02d05d..63bd88fd645 100644 --- a/src/qt/networkstyle.cpp +++ b/src/qt/networkstyle.cpp @@ -18,7 +18,6 @@ static const struct { const int iconColorSaturationReduction; } network_styles[] = { {ChainType::MAIN, QAPP_APP_NAME_DEFAULT, 0, 0}, - {ChainType::TESTNET, QAPP_APP_NAME_TESTNET, 70, 30}, {ChainType::TESTNET4, QAPP_APP_NAME_TESTNET4, 70, 30}, {ChainType::SIGNET, QAPP_APP_NAME_SIGNET, 35, 15}, {ChainType::REGTEST, QAPP_APP_NAME_REGTEST, 160, 30}, diff --git a/src/qt/res/bitcoin-qt-res.rc b/src/qt/res/bitcoin-qt-res.rc index 9a379f06d40..1177b37da2b 100644 --- a/src/qt/res/bitcoin-qt-res.rc +++ b/src/qt/res/bitcoin-qt-res.rc @@ -1,7 +1,6 @@ IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico" -IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_testnet.ico" -IDI_ICON3 ICON DISCARDABLE "icons/bitcoin_signet.ico" -IDI_ICON4 ICON DISCARDABLE "icons/bitcoin_testnet.ico" // testnet4 +IDI_ICON2 ICON DISCARDABLE "icons/bitcoin_signet.ico" +IDI_ICON3 ICON DISCARDABLE "icons/bitcoin_testnet.ico" // testnet4 #include // needed for VERSIONINFO #include "../../clientversion.h" // holds the needed client version information From c44b31ed615dfe6e8c1483209f0f3eb6dee7fdf9 Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 16:23:48 -0500 Subject: [PATCH 07/13] test: drop testnet3 coverage Except for the deprecation warning. This test now writes its own config file, which was previously done by test_acceptstalefeeestimates_arg_support. This code will be removed once -testnet3 is dropped. --- src/test/argsman_tests.cpp | 9 ++++---- src/test/key_io_tests.cpp | 2 +- src/test/pow_tests.cpp | 5 ----- src/test/versionbits_tests.cpp | 2 +- test/functional/feature_assumeutxo.py | 1 - test/functional/feature_config_args.py | 7 +++++- test/functional/wallet_crosschain.py | 31 ++++---------------------- 7 files changed, 16 insertions(+), 41 deletions(-) diff --git a/src/test/argsman_tests.cpp b/src/test/argsman_tests.cpp index 0d06c39de93..c7e5d118a59 100644 --- a/src/test/argsman_tests.cpp +++ b/src/test/argsman_tests.cpp @@ -643,10 +643,9 @@ BOOST_AUTO_TEST_CASE(util_GetArg) BOOST_AUTO_TEST_CASE(util_GetChainTypeString) { TestArgsManager test_args; - const auto testnet = std::make_pair("-testnet", ArgsManager::ALLOW_ANY); const auto testnet4 = std::make_pair("-testnet4", ArgsManager::ALLOW_ANY); const auto regtest = std::make_pair("-regtest", ArgsManager::ALLOW_ANY); - test_args.SetupArgs({testnet, testnet4, regtest}); + test_args.SetupArgs({testnet4, regtest}); const char* argv_testnet4[] = {"cmd", "-testnet4"}; const char* argv_regtest[] = {"cmd", "-regtest"}; @@ -764,8 +763,8 @@ struct ArgsMergeTestingSetup : public BasicTestingSetup { ForEachNoDup(conf_actions, SET, SECTION_NEGATE, [&] { for (bool soft_set : {false, true}) { for (bool force_set : {false, true}) { - for (const std::string& section : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) { - for (const std::string& network : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) { + for (const std::string& section : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) { + for (const std::string& network : {ChainTypeToString(ChainType::MAIN), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::SIGNET)}) { for (bool net_specific : {false, true}) { fn(arg_actions, conf_actions, soft_set, force_set, section, network, net_specific); } @@ -919,7 +918,7 @@ BOOST_FIXTURE_TEST_CASE(util_ArgsMerge, ArgsMergeTestingSetup) // Results file is formatted like: // // || | | - BOOST_CHECK_EQUAL(out_sha_hex, "f1ee5ab094cc43d16a6086fa7f2c10389e0f99902616b31bbf29189972ad1473"); + BOOST_CHECK_EQUAL(out_sha_hex, "4255a9ad78d2a68341750bf2de61131ef5610808b6e37b6f546222ca7342f36a"); } // Similar test as above, but for ArgsManager::GetChainTypeString function. diff --git a/src/test/key_io_tests.cpp b/src/test/key_io_tests.cpp index 4dd77edc162..b28a8c9b8ab 100644 --- a/src/test/key_io_tests.cpp +++ b/src/test/key_io_tests.cpp @@ -137,7 +137,7 @@ BOOST_AUTO_TEST_CASE(key_io_invalid) std::string exp_base58string = test[0].get_str(); // must be invalid as public and as private key - for (const auto& chain : {ChainType::MAIN, ChainType::TESTNET, ChainType::SIGNET, ChainType::REGTEST}) { + for (const auto& chain : {ChainType::MAIN, ChainType::SIGNET, ChainType::REGTEST}) { SelectParams(chain); destination = DecodeDestination(exp_base58string); BOOST_CHECK_MESSAGE(!IsValidDestination(destination), "IsValid pubkey in mainnet:" + strTest); diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index 76e4600441d..3f1cdfe757e 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -193,11 +193,6 @@ BOOST_AUTO_TEST_CASE(ChainParams_REGTEST_sanity) sanity_check_chainparams(*m_node.args, ChainType::REGTEST); } -BOOST_AUTO_TEST_CASE(ChainParams_TESTNET_sanity) -{ - sanity_check_chainparams(*m_node.args, ChainType::TESTNET); -} - BOOST_AUTO_TEST_CASE(ChainParams_TESTNET4_sanity) { sanity_check_chainparams(*m_node.args, ChainType::TESTNET4); diff --git a/src/test/versionbits_tests.cpp b/src/test/versionbits_tests.cpp index 29240a45f09..1504eadb9fd 100644 --- a/src/test/versionbits_tests.cpp +++ b/src/test/versionbits_tests.cpp @@ -424,7 +424,7 @@ BOOST_FIXTURE_TEST_CASE(versionbits_computeblockversion, BlockVersionTest) // check that any deployment on any chain can conceivably reach both // ACTIVE and FAILED states in roughly the way we expect - for (const auto& chain_type: {ChainType::MAIN, ChainType::TESTNET, ChainType::TESTNET4, ChainType::SIGNET, ChainType::REGTEST}) { + for (const auto& chain_type: {ChainType::MAIN, ChainType::TESTNET4, ChainType::SIGNET, ChainType::REGTEST}) { const auto chainParams = CreateChainParams(*m_node.args, chain_type); uint32_t chain_all_vbits{0}; for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++i) { diff --git a/test/functional/feature_assumeutxo.py b/test/functional/feature_assumeutxo.py index 41c6bda3569..d40e706b0e9 100755 --- a/test/functional/feature_assumeutxo.py +++ b/test/functional/feature_assumeutxo.py @@ -102,7 +102,6 @@ class AssumeutxoTest(BitcoinTestFramework): invalid_magics = [ # magic, name, real [0xf9beb4d9, "main", True], - [0x0b110907, "test", True], [0x0a03cf40, "signet", True], [0x00000000, "", False], [0xffffffff, "", False], diff --git a/test/functional/feature_config_args.py b/test/functional/feature_config_args.py index e8fc1aca46c..dbcc8a5e035 100755 --- a/test/functional/feature_config_args.py +++ b/test/functional/feature_config_args.py @@ -462,7 +462,7 @@ class ConfArgsTest(BitcoinTestFramework): def test_acceptstalefeeestimates_arg_support(self): self.log.info("Test -acceptstalefeeestimates option support") conf_file = self.nodes[0].datadir_path / "bitcoin.conf" - for chain, chain_name in {("main", ""), ("test", "testnet3"), ("signet", "signet"), ("testnet4", "testnet4")}: + for chain, chain_name in {("main", ""), ("signet", "signet"), ("testnet4", "testnet4")}: util.write_config(conf_file, n=0, chain=chain_name, extra_config='acceptstalefeeestimates=1\n') self.nodes[0].assert_start_raises_init_error(expected_msg=f'Error: acceptstalefeeestimates is not supported on {chain} chain.') util.write_config(conf_file, n=0, chain="regtest") # Reset to regtest @@ -476,6 +476,11 @@ class ConfArgsTest(BitcoinTestFramework): # Testnet3 node will log the warning self.nodes[0].chain = 'testnet3' + # Ensure a log file exists as TestNode.assert_debug_log() expects it. + self.nodes[0].debug_log_path.parent.mkdir() + self.nodes[0].debug_log_path.touch() + util.write_config(self.nodes[0].datadir_path / "bitcoin.conf", n=0, chain="testnet3") + self.nodes[0].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')]) with self.nodes[0].assert_debug_log([t3_warning_log]): self.start_node(0) diff --git a/test/functional/wallet_crosschain.py b/test/functional/wallet_crosschain.py index 97db84c3e48..ac18386d91c 100755 --- a/test/functional/wallet_crosschain.py +++ b/test/functional/wallet_crosschain.py @@ -20,10 +20,7 @@ class WalletCrossChain(BitcoinTestFramework): def setup_network(self): self.add_nodes(self.num_nodes) - # Switch node 1 to testnet before starting it. - self.nodes[1].chain = 'testnet3' - self.nodes[1].extra_args = ['-maxconnections=0', '-prune=550'] # disable testnet sync - self.nodes[1].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')]) + # Node 1 is omitted, it was previously used with testnet3. # Switch node 2 to testnet4 before starting it. self.nodes[2].chain = 'testnet4' @@ -40,11 +37,7 @@ class WalletCrossChain(BitcoinTestFramework): self.nodes[0].createwallet(node0_wallet) self.nodes[0].backupwallet(node0_wallet_backup) self.nodes[0].unloadwallet(node0_wallet) - node1_wallet = self.nodes[1].datadir_path / 'node1_wallet' - node1_wallet_backup = self.nodes[0].datadir_path / 'node1_wallet.bak' - self.nodes[1].createwallet(node1_wallet) - self.nodes[1].backupwallet(node1_wallet_backup) - self.nodes[1].unloadwallet(node1_wallet) + node2_wallet = self.nodes[2].datadir_path / 'node2_wallet' node2_wallet_backup = self.nodes[0].datadir_path / 'node2_wallet.bak' self.nodes[2].createwallet(node2_wallet) @@ -54,38 +47,22 @@ class WalletCrossChain(BitcoinTestFramework): self.log.info("Loading/restoring wallets into nodes with a different genesis block") if self.options.descriptors: - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].loadwallet, node1_wallet) assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].loadwallet, node2_wallet) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node0_wallet) assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].loadwallet, node0_wallet) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node2_wallet) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].loadwallet, node1_wallet) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node1_wallet_backup) assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node2_wallet_backup) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node0_wallet_backup) assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].restorewallet, 'w', node0_wallet_backup) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node2_wallet_backup) - assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].restorewallet, 'w', node1_wallet_backup) else: - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].loadwallet, node1_wallet) assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].loadwallet, node2_wallet) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node0_wallet) assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].loadwallet, node0_wallet) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node2_wallet) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].loadwallet, node1_wallet) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node1_wallet_backup) assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node2_wallet_backup) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node0_wallet_backup) assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].restorewallet, 'w', node0_wallet_backup) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node2_wallet_backup) - assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].restorewallet, 'w', node1_wallet_backup) if not self.options.descriptors: self.log.info("Override cross-chain wallet load protection") self.stop_nodes() self.start_nodes([['-walletcrosschain', '-prune=550']] * self.num_nodes) - self.nodes[0].loadwallet(node1_wallet) - self.nodes[1].loadwallet(node0_wallet) + self.nodes[0].loadwallet(node2_wallet) + self.nodes[2].loadwallet(node0_wallet) if __name__ == '__main__': From 009d9f1e1c306768e583ee9ec3337dd8d43615bb Mon Sep 17 00:00:00 2001 From: Sjors Provoost Date: Mon, 3 Mar 2025 16:41:02 -0500 Subject: [PATCH 08/13] Disallow -testnet3 Abort node startup and inform user they should use -testnet4. Modify the deprecation message test to cover this. Remove testnet3 references from bitcoin-cli documentation and bash helper. --- contrib/completions/bash/bitcoin-cli.bash | 2 +- src/bitcoin-cli.cpp | 3 +- src/chainparamsbase.cpp | 1 - src/common/args.cpp | 7 ++--- src/init.cpp | 23 +++++++-------- src/test/argsman_tests.cpp | 2 +- test/functional/feature_config_args.py | 36 +++++------------------ test/functional/test_framework/util.py | 8 ++--- 8 files changed, 26 insertions(+), 56 deletions(-) diff --git a/contrib/completions/bash/bitcoin-cli.bash b/contrib/completions/bash/bitcoin-cli.bash index b04fdbcb0e8..319e0f461f8 100644 --- a/contrib/completions/bash/bitcoin-cli.bash +++ b/contrib/completions/bash/bitcoin-cli.bash @@ -9,7 +9,7 @@ _bitcoin_rpc() { local rpcargs=() for i in ${COMP_LINE}; do case "$i" in - -conf=*|-datadir=*|-regtest|-rpc*|-testnet|-testnet4) + -conf=*|-datadir=*|-regtest|-rpc*|-testnet4) rpcargs=( "${rpcargs[@]}" "$i" ) ;; esac diff --git a/src/bitcoin-cli.cpp b/src/bitcoin-cli.cpp index 75911d00874..435a57b976d 100644 --- a/src/bitcoin-cli.cpp +++ b/src/bitcoin-cli.cpp @@ -75,7 +75,6 @@ static void SetupCliArgs(ArgsManager& argsman) SetupHelpOptions(argsman); const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN); - const auto testnetBaseParams = CreateBaseChainParams(ChainType::TESTNET); const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4); const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET); const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST); @@ -100,7 +99,7 @@ static void SetupCliArgs(ArgsManager& argsman) argsman.AddArg("-rpcconnect=", strprintf("Send commands to node running on (default: %s)", DEFAULT_RPCCONNECT), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-rpccookiefile=", "Location of the auth cookie. Relative paths will be prefixed by a net-specific datadir location. (default: data dir)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-rpcpassword=", "Password for JSON-RPC connections", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - argsman.AddArg("-rpcport=", strprintf("Connect to JSON-RPC on (default: %u, testnet: %u, testnet4: %u, signet: %u, regtest: %u)", defaultBaseParams->RPCPort(), testnetBaseParams->RPCPort(), testnet4BaseParams->RPCPort(), signetBaseParams->RPCPort(), regtestBaseParams->RPCPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::OPTIONS); + argsman.AddArg("-rpcport=", strprintf("Connect to JSON-RPC on (default: %u, testnet4: %u, signet: %u, regtest: %u)", defaultBaseParams->RPCPort(), testnet4BaseParams->RPCPort(), signetBaseParams->RPCPort(), regtestBaseParams->RPCPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::OPTIONS); argsman.AddArg("-rpcuser=", "Username for JSON-RPC connections", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-rpcwait", "Wait for RPC server to start", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-rpcwaittimeout=", strprintf("Timeout in seconds to wait for the RPC server to start, or 0 for no timeout. (default: %d)", DEFAULT_WAIT_CLIENT_TIMEOUT), ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::OPTIONS); diff --git a/src/chainparamsbase.cpp b/src/chainparamsbase.cpp index 060d519d920..2dc100db57a 100644 --- a/src/chainparamsbase.cpp +++ b/src/chainparamsbase.cpp @@ -17,7 +17,6 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman) argsman.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. Equivalent to -chain=regtest.", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS); argsman.AddArg("-testactivationheight=name@height.", "Set the activation height of 'name' (segwit, bip34, dersig, cltv, csv). (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); - argsman.AddArg("-testnet", "Use the testnet3 chain. Equivalent to -chain=test. Support for testnet3 is deprecated and will be removed in an upcoming release. Consider moving to testnet4 now by using -testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); argsman.AddArg("-testnet4", "Use the testnet4 chain. Equivalent to -chain=testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); argsman.AddArg("-vbparams=deployment:start:end[:min_activation_height]", "Use given start/end times and min_activation_height for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS); argsman.AddArg("-signet", "Use the signet chain. Equivalent to -chain=signet. Note that the network is defined by the -signetchallenge parameter", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS); diff --git a/src/common/args.cpp b/src/common/args.cpp index 833a0b28bd2..add84fac669 100644 --- a/src/common/args.cpp +++ b/src/common/args.cpp @@ -159,7 +159,6 @@ std::list ArgsManager::GetUnrecognizedSections() const static const std::set available_sections{ ChainTypeToString(ChainType::REGTEST), ChainTypeToString(ChainType::SIGNET), - ChainTypeToString(ChainType::TESTNET), ChainTypeToString(ChainType::TESTNET4), ChainTypeToString(ChainType::MAIN), }; @@ -798,12 +797,11 @@ std::variant ArgsManager::GetChainArg() const const bool fRegTest = get_net("-regtest"); const bool fSigNet = get_net("-signet"); - const bool fTestNet = get_net("-testnet"); const bool fTestNet4 = get_net("-testnet4"); const auto chain_arg = GetArg("-chain"); - if ((int)chain_arg.has_value() + (int)fRegTest + (int)fSigNet + (int)fTestNet + (int)fTestNet4 > 1) { - throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet, -testnet4 and -chain. Can use at most one."); + if ((int)chain_arg.has_value() + (int)fRegTest + (int)fSigNet + (int)fTestNet4 > 1) { + throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet4 and -chain. Can use at most one."); } if (chain_arg) { if (auto parsed = ChainTypeFromString(*chain_arg)) return *parsed; @@ -812,7 +810,6 @@ std::variant ArgsManager::GetChainArg() const } if (fRegTest) return ChainType::REGTEST; if (fSigNet) return ChainType::SIGNET; - if (fTestNet) return ChainType::TESTNET; if (fTestNet4) return ChainType::TESTNET4; return ChainType::MAIN; } diff --git a/src/init.cpp b/src/init.cpp index fae45eb90a5..36dc01cd8b2 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -449,12 +449,10 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc) init::AddLoggingArgs(argsman); const auto defaultBaseParams = CreateBaseChainParams(ChainType::MAIN); - const auto testnetBaseParams = CreateBaseChainParams(ChainType::TESTNET); const auto testnet4BaseParams = CreateBaseChainParams(ChainType::TESTNET4); const auto signetBaseParams = CreateBaseChainParams(ChainType::SIGNET); const auto regtestBaseParams = CreateBaseChainParams(ChainType::REGTEST); const auto defaultChainParams = CreateChainParams(argsman, ChainType::MAIN); - const auto testnetChainParams = CreateChainParams(argsman, ChainType::TESTNET); const auto testnet4ChainParams = CreateChainParams(argsman, ChainType::TESTNET4); const auto signetChainParams = CreateChainParams(argsman, ChainType::SIGNET); const auto regtestChainParams = CreateChainParams(argsman, ChainType::REGTEST); @@ -469,7 +467,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc) #if HAVE_SYSTEM argsman.AddArg("-alertnotify=", "Execute command when an alert is raised (%s in cmd is replaced by message)", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); #endif - argsman.AddArg("-assumevalid=", strprintf("If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet3: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnetChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnet4ChainParams->GetConsensus().defaultAssumeValid.GetHex(), signetChainParams->GetConsensus().defaultAssumeValid.GetHex()), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); + argsman.AddArg("-assumevalid=", strprintf("If this block is in the chain assume that it and its ancestors are valid and potentially skip their script verification (0 to verify all, default: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().defaultAssumeValid.GetHex(), testnet4ChainParams->GetConsensus().defaultAssumeValid.GetHex(), signetChainParams->GetConsensus().defaultAssumeValid.GetHex()), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-blocksdir=", "Specify directory to hold blocks subdirectory for *.dat files (default: )", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-blocksxor", strprintf("Whether an XOR-key applies to blocksdir *.dat files. " @@ -495,7 +493,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc) argsman.AddArg("-maxmempool=", strprintf("Keep the transaction memory pool below megabytes (default: %u)", DEFAULT_MAX_MEMPOOL_SIZE_MB), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-maxorphantx=", strprintf("Keep at most unconnectable transactions in memory (default: %u)", DEFAULT_MAX_ORPHAN_TRANSACTIONS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-mempoolexpiry=", strprintf("Do not keep transactions in the mempool longer than hours (default: %u)", DEFAULT_MEMPOOL_EXPIRY_HOURS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); - argsman.AddArg("-minimumchainwork=", strprintf("Minimum work assumed to exist on a valid chain in hex (default: %s, testnet3: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnetChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnet4ChainParams->GetConsensus().nMinimumChainWork.GetHex(), signetChainParams->GetConsensus().nMinimumChainWork.GetHex()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::OPTIONS); + argsman.AddArg("-minimumchainwork=", strprintf("Minimum work assumed to exist on a valid chain in hex (default: %s, testnet4: %s, signet: %s)", defaultChainParams->GetConsensus().nMinimumChainWork.GetHex(), testnet4ChainParams->GetConsensus().nMinimumChainWork.GetHex(), signetChainParams->GetConsensus().nMinimumChainWork.GetHex()), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::OPTIONS); argsman.AddArg("-par=", strprintf("Set the number of script verification threads (0 = auto, up to %d, <0 = leave that many cores free, default: %d)", MAX_SCRIPTCHECK_THREADS, DEFAULT_SCRIPTCHECK_THREADS), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); argsman.AddArg("-persistmempool", strprintf("Whether to save the mempool on shutdown and load on restart (default: %u)", DEFAULT_PERSIST_MEMPOOL), ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); @@ -524,7 +522,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc) argsman.AddArg("-addnode=", strprintf("Add a node to connect to and attempt to keep the connection open (see the addnode RPC help for more info). This option can be specified multiple times to add multiple nodes; connections are limited to %u at a time and are counted separately from the -maxconnections limit.", MAX_ADDNODE_CONNECTIONS), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); argsman.AddArg("-asmap=", strprintf("Specify asn mapping used for bucketing of the peers (default: %s). Relative paths will be prefixed by the net-specific datadir location.", DEFAULT_ASMAP_FILENAME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); argsman.AddArg("-bantime=", strprintf("Default duration (in seconds) of manually configured bans (default: %u)", DEFAULT_MISBEHAVING_BANTIME), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); - argsman.AddArg("-bind=[:][=onion]", strprintf("Bind to given address and always listen on it (default: 0.0.0.0). Use [host]:port notation for IPv6. Append =onion to tag any incoming connections to that address and port as incoming Tor connections (default: 127.0.0.1:%u=onion, testnet3: 127.0.0.1:%u=onion, testnet4: 127.0.0.1:%u=onion, signet: 127.0.0.1:%u=onion, regtest: 127.0.0.1:%u=onion)", defaultChainParams->GetDefaultPort() + 1, testnetChainParams->GetDefaultPort() + 1, testnet4ChainParams->GetDefaultPort() + 1, signetChainParams->GetDefaultPort() + 1, regtestChainParams->GetDefaultPort() + 1), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); + argsman.AddArg("-bind=[:][=onion]", strprintf("Bind to given address and always listen on it (default: 0.0.0.0). Use [host]:port notation for IPv6. Append =onion to tag any incoming connections to that address and port as incoming Tor connections (default: 127.0.0.1:%u=onion, testnet4: 127.0.0.1:%u=onion, signet: 127.0.0.1:%u=onion, regtest: 127.0.0.1:%u=onion)", defaultChainParams->GetDefaultPort() + 1, testnet4ChainParams->GetDefaultPort() + 1, signetChainParams->GetDefaultPort() + 1, regtestChainParams->GetDefaultPort() + 1), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); argsman.AddArg("-cjdnsreachable", "If set, then this host is configured for CJDNS (connecting to fc00::/8 addresses would lead us to the CJDNS network, see doc/cjdns.md) (default: 0)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); argsman.AddArg("-connect=", "Connect only to the specified node; -noconnect disables automatic connections (the rules for this peer are the same as for -addnode). This option can be specified multiple times to connect to multiple nodes.", ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); argsman.AddArg("-discover", "Discover own IP addresses (default: 1 when listening and no -externalip or -proxy)", ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); @@ -551,7 +549,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc) argsman.AddArg("-peerbloomfilters", strprintf("Support filtering of blocks and transaction with bloom filters (default: %u)", DEFAULT_PEERBLOOMFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); argsman.AddArg("-peerblockfilters", strprintf("Serve compact block filters to peers per BIP 157 (default: %u)", DEFAULT_PEERBLOCKFILTERS), ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION); argsman.AddArg("-txreconciliation", strprintf("Enable transaction reconciliations per BIP 330 (default: %d)", DEFAULT_TXRECONCILIATION_ENABLE), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CONNECTION); - argsman.AddArg("-port=", strprintf("Listen for connections on (default: %u, testnet3: %u, testnet4: %u, signet: %u, regtest: %u). Not relevant for I2P (see doc/i2p.md). If set to a value x, the default onion listening port will be set to x+1.", defaultChainParams->GetDefaultPort(), testnetChainParams->GetDefaultPort(), testnet4ChainParams->GetDefaultPort(), signetChainParams->GetDefaultPort(), regtestChainParams->GetDefaultPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); + argsman.AddArg("-port=", strprintf("Listen for connections on (default: %u, testnet4: %u, signet: %u, regtest: %u). Not relevant for I2P (see doc/i2p.md). If set to a value x, the default onion listening port will be set to x+1.", defaultChainParams->GetDefaultPort(), testnet4ChainParams->GetDefaultPort(), signetChainParams->GetDefaultPort(), regtestChainParams->GetDefaultPort()), ArgsManager::ALLOW_ANY | ArgsManager::NETWORK_ONLY, OptionsCategory::CONNECTION); #ifdef HAVE_SOCKADDR_UN argsman.AddArg("-proxy=", "Connect through SOCKS5 proxy, set -noproxy to disable (default: disabled). May be a local file path prefixed with 'unix:' if the proxy supports it.", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_ELISION, OptionsCategory::CONNECTION); #else @@ -618,6 +616,7 @@ void SetupServerArgs(ArgsManager& argsman, bool can_listen_ipc) argsman.AddArg("-limitdescendantcount=", strprintf("Do not accept transactions if any ancestor would have or more in-mempool descendants (default: %u)", DEFAULT_DESCENDANT_LIMIT), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); argsman.AddArg("-limitdescendantsize=", strprintf("Do not accept transactions if any ancestor would have more than kilobytes of in-mempool descendants (default: %u).", DEFAULT_DESCENDANT_SIZE_LIMIT_KVB), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST); argsman.AddArg("-test=