Merge bitcoin/bitcoin#32096: Move some tests and documentation from testnet3 to testnet4

aa7a898c236eb519aaf546afee2b9c2b6dfdea1f doc: use testnet4 in developer docs (Sjors Provoost)
6c217d22fdc978cac0f970cf2296a9fa1e00ee97 test: use testnet4 in argsman test (Sjors Provoost)
7c200ece80575d399a552f5757c07ac2c8c7ec6c test: use testnet4 in key_io_valid.json (Sjors Provoost)
d424bd59413c8ffc7a263635e5b9882497d39fed test: drop unused testnet3 magic bytes (Sjors Provoost)
8cfc09fafe59adae4904a21589736de93a00ad2d test: cover testnet4 magic in assumeutxo.py (Sjors Provoost)
4281e3603a2eadefc8535b863128a05cf3a5a75f zmq: use testnet4 in zmq_sub.py example (Sjors Provoost)

Pull request description:

  In preparation for dropping testnet3 entirely in #31974 this PR migrates a few things to testnet4:

  * the ZMQ examples
  * developer docs
  * various unit tests
  * the snapshot magic byte check in `feature_assumeutxo.py`

  It drops `testnet3` from `MAGIC_BYTES` in the test framework, since no test uses it.

ACKs for top commit:
  fjahr:
    re-ACK aa7a898c236eb519aaf546afee2b9c2b6dfdea1f
  maflcko:
    lgtm ACK aa7a898c236eb519aaf546afee2b9c2b6dfdea1f 🔊
  hodlinator:
    re-ACK aa7a898c236eb519aaf546afee2b9c2b6dfdea1f

Tree-SHA512: 235f74273234e8fb2aedf0017dea5c16bb9813ec7a1f89a51abe85691f09830a5ead834115d7db0936e12e55a40bc81888856a8002fe507c1474407e77f8b9fb
This commit is contained in:
Ryan Ofsky 2025-04-01 11:21:12 -04:00
commit 80e47b1920
No known key found for this signature in database
GPG Key ID: 46800E30FC748A66
6 changed files with 59 additions and 63 deletions

View File

@ -7,7 +7,7 @@
ZMQ example using python3's asyncio ZMQ example using python3's asyncio
Bitcoin should be started with the command line arguments: Bitcoin should be started with the command line arguments:
bitcoind -testnet -daemon \ bitcoind -testnet4 -daemon \
-zmqpubrawtx=tcp://127.0.0.1:28332 \ -zmqpubrawtx=tcp://127.0.0.1:28332 \
-zmqpubrawblock=tcp://127.0.0.1:28332 \ -zmqpubrawblock=tcp://127.0.0.1:28332 \
-zmqpubhashtx=tcp://127.0.0.1:28332 \ -zmqpubhashtx=tcp://127.0.0.1:28332 \

View File

@ -410,7 +410,7 @@ to see it.
### Signet, testnet, and regtest modes ### Signet, testnet, and regtest modes
If you are testing multi-machine code that needs to operate across the internet, 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. with "play bitcoins" on a test network.
If you are testing something that can run on one machine, run with the If you are testing something that can run on one machine, run with the

View File

@ -648,23 +648,18 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
const auto regtest = std::make_pair("-regtest", ArgsManager::ALLOW_ANY); const auto regtest = std::make_pair("-regtest", ArgsManager::ALLOW_ANY);
test_args.SetupArgs({testnet, testnet4, regtest}); test_args.SetupArgs({testnet, testnet4, regtest});
const char* argv_testnet[] = {"cmd", "-testnet"};
const char* argv_testnet4[] = {"cmd", "-testnet4"}; const char* argv_testnet4[] = {"cmd", "-testnet4"};
const char* argv_regtest[] = {"cmd", "-regtest"}; const char* argv_regtest[] = {"cmd", "-regtest"};
const char* argv_test_no_reg[] = {"cmd", "-testnet", "-noregtest"}; const char* argv_test_no_reg[] = {"cmd", "-testnet4", "-noregtest"};
const char* argv_both[] = {"cmd", "-testnet", "-regtest"}; const char* argv_both[] = {"cmd", "-testnet4", "-regtest"};
// equivalent to "-testnet" // regtest in test network section is ignored
// regtest in testnet section is ignored const char* testnetconf = "testnet4=1\nregtest=0\n[testnet4]\nregtest=1";
const char* testnetconf = "testnet=1\nregtest=0\n[test]\nregtest=1";
std::string error; 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_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(0, argv_testnet4, error)); BOOST_CHECK(test_args.ParseParameters(0, argv_testnet4, error));
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main"); BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "main");
@ -675,18 +670,18 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "regtest"); BOOST_CHECK_EQUAL(test_args.GetChainTypeString(), "regtest");
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error)); 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(test_args.ParseParameters(3, argv_both, error));
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_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); 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); 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)); BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
test_args.ReadConfigString(testnetconf); test_args.ReadConfigString(testnetconf);
@ -694,23 +689,23 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error)); BOOST_CHECK(test_args.ParseParameters(3, argv_test_no_reg, error));
test_args.ReadConfigString(testnetconf); 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)); BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
test_args.ReadConfigString(testnetconf); test_args.ReadConfigString(testnetconf);
BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error); BOOST_CHECK_THROW(test_args.GetChainTypeString(), std::runtime_error);
// check setting the network to test (and thus making // check setting the network to testnet4 (and thus making
// [test] regtest=1 potentially relevant) doesn't break things // [testnet4] regtest=1 potentially relevant) doesn't break things
test_args.SelectConfigNetwork("test"); 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); 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); 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)); BOOST_CHECK(test_args.ParseParameters(2, argv_regtest, error));
test_args.ReadConfigString(testnetconf); test_args.ReadConfigString(testnetconf);
@ -718,7 +713,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
BOOST_CHECK(test_args.ParseParameters(2, argv_test_no_reg, error)); BOOST_CHECK(test_args.ParseParameters(2, argv_test_no_reg, error));
test_args.ReadConfigString(testnetconf); 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)); BOOST_CHECK(test_args.ParseParameters(3, argv_both, error));
test_args.ReadConfigString(testnetconf); test_args.ReadConfigString(testnetconf);
@ -739,7 +734,7 @@ BOOST_AUTO_TEST_CASE(util_GetChainTypeString)
// //
// - Combining SoftSet and ForceSet calls. // - 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 // sections are applied and to check for mainnet-specific behaviors like
// inheriting settings from the default section. // inheriting settings from the default section.
// //
@ -956,11 +951,11 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
TestArgsManager parser; TestArgsManager parser;
LOCK(parser.cs_args); LOCK(parser.cs_args);
parser.AddArg("-regtest", "regtest", ArgsManager::ALLOW_ANY, OptionsCategory::OPTIONS); 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" : auto arg = [](Action action) { return action == ENABLE_TEST ? "-testnet4=1" :
action == DISABLE_TEST ? "-testnet=0" : action == DISABLE_TEST ? "-testnet4=0" :
action == NEGATE_TEST ? "-notestnet=1" : action == NEGATE_TEST ? "-notestnet4=1" :
action == ENABLE_REG ? "-regtest=1" : action == ENABLE_REG ? "-regtest=1" :
action == DISABLE_REG ? "-regtest=0" : action == DISABLE_REG ? "-regtest=0" :
action == NEGATE_REG ? "-noregtest=1" : nullptr; }; action == NEGATE_REG ? "-noregtest=1" : nullptr; };
@ -1024,7 +1019,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, "9e60306e1363528bbc19a47f22bcede88e5d6815212f18ec8e6cdc4638dddab4"); BOOST_CHECK_EQUAL(out_sha_hex, "c0e33aab0c74e040ddcee9edad59e8148d8e1cacb3cccd9ea1a1f485cb6bad21");
} }
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings) BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)

View File

@ -19,7 +19,7 @@
"mzK2FFDEhxqHcmrJw1ysqFkVyhUULo45hZ", "mzK2FFDEhxqHcmrJw1ysqFkVyhUULo45hZ",
"76a914ce28b26c57472737f5c3561a1761185bd8589a4388ac", "76a914ce28b26c57472737f5c3561a1761185bd8589a4388ac",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false "isPrivkey": false
} }
], ],
@ -27,7 +27,7 @@
"2NC2hEhe28ULKAJkW5MjZ3jtTMJdvXmByvK", "2NC2hEhe28ULKAJkW5MjZ3jtTMJdvXmByvK",
"a914ce0bba75891ff9ec60148d4bd4a09ee2dc5c933187", "a914ce0bba75891ff9ec60148d4bd4a09ee2dc5c933187",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false "isPrivkey": false
} }
], ],
@ -85,7 +85,7 @@
"92ZdE5HoLafywnTBbzPxbvRmp75pSfzvdU3XaZGh1cToipgdHVh", "92ZdE5HoLafywnTBbzPxbvRmp75pSfzvdU3XaZGh1cToipgdHVh",
"80c32d81e91bdea04cd7a3819b32275fc3298af4c7ec87eb0099527d041ced5c", "80c32d81e91bdea04cd7a3819b32275fc3298af4c7ec87eb0099527d041ced5c",
{ {
"chain": "test", "chain": "testnet4",
"isCompressed": false, "isCompressed": false,
"isPrivkey": true "isPrivkey": true
} }
@ -94,7 +94,7 @@
"cV83kKisF3RQSvXbUCm9ox3kaz5JjEUBWcx8tNydfGJcyeUxuH47", "cV83kKisF3RQSvXbUCm9ox3kaz5JjEUBWcx8tNydfGJcyeUxuH47",
"e0fcd4ce4e3d0e3de091f21415bb7cd011fac288c42020a879f28c2a4387df9b", "e0fcd4ce4e3d0e3de091f21415bb7cd011fac288c42020a879f28c2a4387df9b",
{ {
"chain": "test", "chain": "testnet4",
"isCompressed": true, "isCompressed": true,
"isPrivkey": true "isPrivkey": true
} }
@ -175,7 +175,7 @@
"tb1qcrh3yqn4nlleplcez2yndq2ry8h9ncg3qh7n54", "tb1qcrh3yqn4nlleplcez2yndq2ry8h9ncg3qh7n54",
"0014c0ef1202759fff90ff19128936814321ee59e111", "0014c0ef1202759fff90ff19128936814321ee59e111",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -184,7 +184,7 @@
"tb1quyl9ujpgwr2chdzdnnalen48sup245vdfnh2jxhsuq3yx80rrwlq5hqfe4", "tb1quyl9ujpgwr2chdzdnnalen48sup245vdfnh2jxhsuq3yx80rrwlq5hqfe4",
"0020e13e5e482870d58bb44d9cfbfccea78702aad18d4ceea91af0e022431de31bbe", "0020e13e5e482870d58bb44d9cfbfccea78702aad18d4ceea91af0e022431de31bbe",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -193,7 +193,7 @@
"tb1p35n52jy6xkm4wd905tdy8qtagrn73kqdz73xe4zxpvq9t3fp50aqk3s6gz", "tb1p35n52jy6xkm4wd905tdy8qtagrn73kqdz73xe4zxpvq9t3fp50aqk3s6gz",
"51208d2745489a35b75734afa2da43817d40e7e8d80d17a26cd4460b0055c521a3fa", "51208d2745489a35b75734afa2da43817d40e7e8d80d17a26cd4460b0055c521a3fa",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -202,7 +202,7 @@
"tb1rgv5m6uvdk3kc7qsuz0c79v88ycr5w4wa", "tb1rgv5m6uvdk3kc7qsuz0c79v88ycr5w4wa",
"53104329bd718db46d8f021c13f1e2b0e726", "53104329bd718db46d8f021c13f1e2b0e726",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -299,7 +299,7 @@
"n4YNbYuFdPwFrxSP8sjHFbAhUbLMUiY9jE", "n4YNbYuFdPwFrxSP8sjHFbAhUbLMUiY9jE",
"76a914fc8f9851f3c1e4719cd0b8e4816dd4e88c72e52888ac", "76a914fc8f9851f3c1e4719cd0b8e4816dd4e88c72e52888ac",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false "isPrivkey": false
} }
], ],
@ -307,7 +307,7 @@
"2NAeQVZayzVFAtgeC3iYJsjpjWDmsDph71A", "2NAeQVZayzVFAtgeC3iYJsjpjWDmsDph71A",
"a914bedc797342c03fd7a346c4c7857ca03d467013b687", "a914bedc797342c03fd7a346c4c7857ca03d467013b687",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false "isPrivkey": false
} }
], ],
@ -365,7 +365,7 @@
"921M1RNxghFcsVGqAJksQVbSgx36Yz4u6vebfz1wDujNvgNt93B", "921M1RNxghFcsVGqAJksQVbSgx36Yz4u6vebfz1wDujNvgNt93B",
"3777b341c45e2a9b9bf6bfb71dc7d129f64f1b9406ed4f93ade8f56065f1b732", "3777b341c45e2a9b9bf6bfb71dc7d129f64f1b9406ed4f93ade8f56065f1b732",
{ {
"chain": "test", "chain": "testnet4",
"isCompressed": false, "isCompressed": false,
"isPrivkey": true "isPrivkey": true
} }
@ -374,7 +374,7 @@
"cNEnbfF2fcxmmCLWqMAaq6fxJvVkwMbyU3kCbpQznz4Z1j6TZDGb", "cNEnbfF2fcxmmCLWqMAaq6fxJvVkwMbyU3kCbpQznz4Z1j6TZDGb",
"1397b0d4a03e1ab2c54dd9af99ce1ecbfb90c80a58886da95e1181a55703d96b", "1397b0d4a03e1ab2c54dd9af99ce1ecbfb90c80a58886da95e1181a55703d96b",
{ {
"chain": "test", "chain": "testnet4",
"isCompressed": true, "isCompressed": true,
"isPrivkey": true "isPrivkey": true
} }
@ -455,7 +455,7 @@
"tb1ql4k5ayv7p7w0t0ge7tpntgpkgw53g2payxkszr", "tb1ql4k5ayv7p7w0t0ge7tpntgpkgw53g2payxkszr",
"0014fd6d4e919e0f9cf5bd19f2c335a03643a914283d", "0014fd6d4e919e0f9cf5bd19f2c335a03643a914283d",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -464,7 +464,7 @@
"tb1q9jx3x2qqdpempxrcfgyrkjd5fzeacaqj4ua7cs7fe2sfd2wdaueq5wn26y", "tb1q9jx3x2qqdpempxrcfgyrkjd5fzeacaqj4ua7cs7fe2sfd2wdaueq5wn26y",
"00202c8d1328006873b098784a083b49b448b3dc7412af3bec43c9caa096a9cdef32", "00202c8d1328006873b098784a083b49b448b3dc7412af3bec43c9caa096a9cdef32",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -473,7 +473,7 @@
"tb1pdswckwd9ym5yf5eyzg8j4jjwnzla8y0tf9cp7aasfkek0u29sz9qfr00yf", "tb1pdswckwd9ym5yf5eyzg8j4jjwnzla8y0tf9cp7aasfkek0u29sz9qfr00yf",
"51206c1d8b39a526e844d324120f2aca4e98bfd391eb49701f77b04db367f145808a", "51206c1d8b39a526e844d324120f2aca4e98bfd391eb49701f77b04db367f145808a",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -482,7 +482,7 @@
"tb1r0ecpfxg2udhtc556gqrpwwhk4sw3f0kc", "tb1r0ecpfxg2udhtc556gqrpwwhk4sw3f0kc",
"53107e7014990ae36ebc529a4006173af6ac", "53107e7014990ae36ebc529a4006173af6ac",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false, "isPrivkey": false,
"tryCaseFlip": true "tryCaseFlip": true
} }
@ -579,7 +579,7 @@
"mwgS2HRbjyfYxFnR1nF9VKLvmdgMfFBmGq", "mwgS2HRbjyfYxFnR1nF9VKLvmdgMfFBmGq",
"76a914b14ce7070b53cb0e4b5b5f6e253e876990aeca2e88ac", "76a914b14ce7070b53cb0e4b5b5f6e253e876990aeca2e88ac",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false "isPrivkey": false
} }
], ],
@ -587,7 +587,7 @@
"2MwBVrJQ76BdaGD76CTmou8cZzQYLpe4NqU", "2MwBVrJQ76BdaGD76CTmou8cZzQYLpe4NqU",
"a9142b2c149cde619eae3d7fe995243b76a3417541aa87", "a9142b2c149cde619eae3d7fe995243b76a3417541aa87",
{ {
"chain": "test", "chain": "testnet4",
"isPrivkey": false "isPrivkey": false
} }
], ],

View File

@ -23,10 +23,11 @@ from test_framework.compressor import (
from test_framework.messages import ( from test_framework.messages import (
CBlockHeader, CBlockHeader,
from_hex, from_hex,
msg_headers, MAGIC_BYTES,
tx_from_hex,
ser_varint,
MAX_MONEY, MAX_MONEY,
msg_headers,
ser_varint,
tx_from_hex,
) )
from test_framework.p2p import ( from test_framework.p2p import (
P2PInterface, P2PInterface,
@ -102,15 +103,15 @@ class AssumeutxoTest(BitcoinTestFramework):
self.log.info(" - snapshot file with mismatching network magic") self.log.info(" - snapshot file with mismatching network magic")
invalid_magics = [ invalid_magics = [
# magic, name, real # magic, name, real
[0xf9beb4d9, "main", True], [MAGIC_BYTES["mainnet"], "main", True],
[0x0b110907, "test", True], [MAGIC_BYTES["testnet4"], "testnet4", True],
[0x0a03cf40, "signet", True], [MAGIC_BYTES["signet"], "signet", True],
[0x00000000, "", False], [0x00000000.to_bytes(4, 'big'), "", False],
[0xffffffff, "", False], [0xffffffff.to_bytes(4, 'big'), "", False],
] ]
for [magic, name, real] in invalid_magics: for [magic, name, real] in invalid_magics:
with open(bad_snapshot_path, 'wb') as f: with open(bad_snapshot_path, 'wb') as f:
f.write(valid_snapshot_contents[:7] + magic.to_bytes(4, 'big') + valid_snapshot_contents[11:]) f.write(valid_snapshot_contents[:7] + magic + valid_snapshot_contents[11:])
if real: if real:
assert_raises_rpc_error(parsing_error_code, f"Unable to parse metadata: The network of the snapshot ({name}) does not match the network of this node (regtest).", node.loadtxoutset, bad_snapshot_path) assert_raises_rpc_error(parsing_error_code, f"Unable to parse metadata: The network of the snapshot ({name}) does not match the network of this node (regtest).", node.loadtxoutset, bad_snapshot_path)
else: else:

View File

@ -78,10 +78,10 @@ MAX_OP_RETURN_RELAY = 83
DEFAULT_MEMPOOL_EXPIRY_HOURS = 336 # hours DEFAULT_MEMPOOL_EXPIRY_HOURS = 336 # hours
MAGIC_BYTES = { MAGIC_BYTES = {
"mainnet": b"\xf9\xbe\xb4\xd9", # mainnet "mainnet": b"\xf9\xbe\xb4\xd9",
"testnet3": b"\x0b\x11\x09\x07", # testnet3 "testnet4": b"\x1c\x16\x3f\x28",
"regtest": b"\xfa\xbf\xb5\xda", # regtest "regtest": b"\xfa\xbf\xb5\xda",
"signet": b"\x0a\x03\xcf\x40", # signet "signet": b"\x0a\x03\xcf\x40",
} }
def sha256(s): def sha256(s):