Merge bitcoin/bitcoin#32062: [29.x] backports and rc2
Some checks failed
CI / test each commit (push) Has been cancelled
CI / macOS 14 native, arm64, no depends, sqlite only, gui (push) Has been cancelled
CI / macOS 14 native, arm64, fuzz (push) Has been cancelled
CI / Win64 native, VS 2022 (push) Has been cancelled
CI / Win64 native fuzz, VS 2022 (push) Has been cancelled
CI / ASan + LSan + UBSan + integer, no depends, USDT (push) Has been cancelled

74df31cb0b [doc] update example bitcoin.conf with missing options (glozow)
8082f88d1a [doc] update man pages for 29.0rc2 (glozow)
472d582bfe [build] bump to 29.0rc2 (glozow)
a4c30bd00a qt: doc: adapt outdated binary paths to CMake changes (Sebastian Falbesoner)
4e438d326e build: use make < 3.82 syntax for define directive (Sjors Provoost)
7ff0b02161 build: Remove manpages when making MacOS app (Ava Chow)
5ebcb59fdb test: fix intermittent failure in p2p_orphan_handling.py (Martin Zumsande)
458655bca8 fuzz: make sure DecodeBase58(Check) is called with valid values more often (Lőrinc)
15ecae31a8 fuzz: Always restrict base conversion input lengths (Lőrinc)
80c5d57bd1 contrib: Fix `gen-bitcoin-conf.sh`. (David Gumberg)

Pull request description:

  backports:
  - #32049
  - #32063
  - #32064
  - #32070
  - #31917

ACKs for top commit:
  Sjors:
    ACK 74df31cb0b
  hebasto:
    ACK 74df31cb0b, I have reviewed the code and it looks OK.
  ismaelsadeeq:
    Code review ACK 74df31cb0b

Tree-SHA512: df4ef832a03c9c3f89d30d3f65d81b7c7e4793d2cad8a269f1ff221454a4b0b05e06109f4556926c1c4f7fcbd2537052b4d58b4b3911dfcfc35726c600b587d9
This commit is contained in:
merge-script 2025-03-18 08:38:18 +08:00
commit d6db87165c
No known key found for this signature in database
GPG key ID: 2EEB9F5CC09526C1
16 changed files with 130 additions and 55 deletions

View file

@ -26,7 +26,7 @@ set(CLIENT_NAME "Bitcoin Core")
set(CLIENT_VERSION_MAJOR 29) set(CLIENT_VERSION_MAJOR 29)
set(CLIENT_VERSION_MINOR 0) set(CLIENT_VERSION_MINOR 0)
set(CLIENT_VERSION_BUILD 0) set(CLIENT_VERSION_BUILD 0)
set(CLIENT_VERSION_RC 1) set(CLIENT_VERSION_RC 2)
set(CLIENT_VERSION_IS_RELEASE "true") set(CLIENT_VERSION_IS_RELEASE "true")
set(COPYRIGHT_YEAR "2025") set(COPYRIGHT_YEAR "2025")

View file

@ -83,6 +83,7 @@ function(add_macos_deploy_target)
COMMAND ${CMAKE_COMMAND} --install ${PROJECT_BINARY_DIR} --config $<CONFIG> --component bitcoin-qt --prefix ${macos_app}/Contents/MacOS --strip COMMAND ${CMAKE_COMMAND} --install ${PROJECT_BINARY_DIR} --config $<CONFIG> --component bitcoin-qt --prefix ${macos_app}/Contents/MacOS --strip
COMMAND ${CMAKE_COMMAND} -E rename ${macos_app}/Contents/MacOS/bin/$<TARGET_FILE_NAME:bitcoin-qt> ${macos_app}/Contents/MacOS/Bitcoin-Qt COMMAND ${CMAKE_COMMAND} -E rename ${macos_app}/Contents/MacOS/bin/$<TARGET_FILE_NAME:bitcoin-qt> ${macos_app}/Contents/MacOS/Bitcoin-Qt
COMMAND ${CMAKE_COMMAND} -E rm -rf ${macos_app}/Contents/MacOS/bin COMMAND ${CMAKE_COMMAND} -E rm -rf ${macos_app}/Contents/MacOS/bin
COMMAND ${CMAKE_COMMAND} -E rm -rf ${macos_app}/Contents/MacOS/share
VERBATIM VERBATIM
) )

View file

@ -50,7 +50,8 @@ EOF
# adding newlines is a bit funky to ensure portability for BSD # adding newlines is a bit funky to ensure portability for BSD
# see here for more details: https://stackoverflow.com/a/24575385 # see here for more details: https://stackoverflow.com/a/24575385
${BITCOIND} --help \ ${BITCOIND} --help \
| sed '1,/Print this help message and exit/d' \ | sed '1,/Options:/d' \
| sed -E '/^[[:space:]]{2}-help/,/^[[:space:]]*$/d' \
| sed -E 's/^[[:space:]]{2}\-/#/' \ | sed -E 's/^[[:space:]]{2}\-/#/' \
| sed -E 's/^[[:space:]]{7}/# /' \ | sed -E 's/^[[:space:]]{7}/# /' \
| sed -E '/[=[:space:]]/!s/#.*$/&=1/' \ | sed -E '/[=[:space:]]/!s/#.*$/&=1/' \

View file

@ -5,7 +5,7 @@ $(package)_download_file=$(native_$(package)_download_file)
$(package)_file_name=$(native_$(package)_file_name) $(package)_file_name=$(native_$(package)_file_name)
$(package)_sha256_hash=$(native_$(package)_sha256_hash) $(package)_sha256_hash=$(native_$(package)_sha256_hash)
define $(package)_set_vars := define $(package)_set_vars
$(package)_config_opts := -DBUILD_TESTING=OFF $(package)_config_opts := -DBUILD_TESTING=OFF
$(package)_config_opts += -DWITH_OPENSSL=OFF $(package)_config_opts += -DWITH_OPENSSL=OFF
$(package)_config_opts += -DWITH_ZLIB=OFF $(package)_config_opts += -DWITH_ZLIB=OFF

View file

@ -8,7 +8,7 @@ ifneq ($(host),$(build))
$(package)_dependencies += native_capnp $(package)_dependencies += native_capnp
endif endif
define $(package)_set_vars := define $(package)_set_vars
ifneq ($(host),$(build)) ifneq ($(host),$(build))
$(package)_config_opts := -DCAPNP_EXECUTABLE="$$(native_capnp_prefixbin)/capnp" $(package)_config_opts := -DCAPNP_EXECUTABLE="$$(native_capnp_prefixbin)/capnp"
$(package)_config_opts += -DCAPNPC_CXX_EXECUTABLE="$$(native_capnp_prefixbin)/capnpc-c++" $(package)_config_opts += -DCAPNPC_CXX_EXECUTABLE="$$(native_capnp_prefixbin)/capnpc-c++"

View file

@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH BITCOIN-CLI "1" "March 2025" "bitcoin-cli v29.0.0rc1" "User Commands" .TH BITCOIN-CLI "1" "March 2025" "bitcoin-cli v29.0.0rc2" "User Commands"
.SH NAME .SH NAME
bitcoin-cli \- manual page for bitcoin-cli v29.0.0rc1 bitcoin-cli \- manual page for bitcoin-cli v29.0.0rc2
.SH SYNOPSIS .SH SYNOPSIS
.B bitcoin-cli .B bitcoin-cli
[\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR] [\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR]
@ -15,7 +15,7 @@ bitcoin-cli \- manual page for bitcoin-cli v29.0.0rc1
.B bitcoin-cli .B bitcoin-cli
[\fI\,options\/\fR] \fI\,help <command>\/\fR [\fI\,options\/\fR] \fI\,help <command>\/\fR
.SH DESCRIPTION .SH DESCRIPTION
Bitcoin Core RPC client version v29.0.0rc1 Bitcoin Core RPC client version v29.0.0rc2
.PP .PP
The bitcoin\-cli utility provides a command line interface to interact with a Bitcoin Core RPC server. The bitcoin\-cli utility provides a command line interface to interact with a Bitcoin Core RPC server.
.PP .PP

View file

@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH BITCOIN-QT "1" "March 2025" "bitcoin-qt v29.0.0rc1" "User Commands" .TH BITCOIN-QT "1" "March 2025" "bitcoin-qt v29.0.0rc2" "User Commands"
.SH NAME .SH NAME
bitcoin-qt \- manual page for bitcoin-qt v29.0.0rc1 bitcoin-qt \- manual page for bitcoin-qt v29.0.0rc2
.SH SYNOPSIS .SH SYNOPSIS
.B bitcoin-qt .B bitcoin-qt
[\fI\,options\/\fR] [\fI\,URI\/\fR] [\fI\,options\/\fR] [\fI\,URI\/\fR]
.SH DESCRIPTION .SH DESCRIPTION
Bitcoin Core version v29.0.0rc1 Bitcoin Core version v29.0.0rc2
.PP .PP
The bitcoin\-qt application provides a graphical interface for interacting with Bitcoin Core. The bitcoin\-qt application provides a graphical interface for interacting with Bitcoin Core.
.PP .PP

View file

@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH BITCOIN-TX "1" "March 2025" "bitcoin-tx v29.0.0rc1" "User Commands" .TH BITCOIN-TX "1" "March 2025" "bitcoin-tx v29.0.0rc2" "User Commands"
.SH NAME .SH NAME
bitcoin-tx \- manual page for bitcoin-tx v29.0.0rc1 bitcoin-tx \- manual page for bitcoin-tx v29.0.0rc2
.SH SYNOPSIS .SH SYNOPSIS
.B bitcoin-tx .B bitcoin-tx
[\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR] [\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR]
@ -9,7 +9,7 @@ bitcoin-tx \- manual page for bitcoin-tx v29.0.0rc1
.B bitcoin-tx .B bitcoin-tx
[\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR] [\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR]
.SH DESCRIPTION .SH DESCRIPTION
Bitcoin Core bitcoin\-tx utility version v29.0.0rc1 Bitcoin Core bitcoin\-tx utility version v29.0.0rc2
.PP .PP
The bitcoin\-tx tool is used for creating and modifying bitcoin transactions. The bitcoin\-tx tool is used for creating and modifying bitcoin transactions.
.PP .PP

View file

@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH BITCOIN-UTIL "1" "March 2025" "bitcoin-util v29.0.0rc1" "User Commands" .TH BITCOIN-UTIL "1" "March 2025" "bitcoin-util v29.0.0rc2" "User Commands"
.SH NAME .SH NAME
bitcoin-util \- manual page for bitcoin-util v29.0.0rc1 bitcoin-util \- manual page for bitcoin-util v29.0.0rc2
.SH SYNOPSIS .SH SYNOPSIS
.B bitcoin-util .B bitcoin-util
[\fI\,options\/\fR] [\fI\,command\/\fR] [\fI\,options\/\fR] [\fI\,command\/\fR]
@ -9,7 +9,7 @@ bitcoin-util \- manual page for bitcoin-util v29.0.0rc1
.B bitcoin-util .B bitcoin-util
[\fI\,options\/\fR] \fI\,grind <hex-block-header>\/\fR [\fI\,options\/\fR] \fI\,grind <hex-block-header>\/\fR
.SH DESCRIPTION .SH DESCRIPTION
Bitcoin Core bitcoin\-util utility version v29.0.0rc1 Bitcoin Core bitcoin\-util utility version v29.0.0rc2
.PP .PP
The bitcoin\-util tool provides bitcoin related functionality that does not rely on the ability to access a running node. Available [commands] are listed below. The bitcoin\-util tool provides bitcoin related functionality that does not rely on the ability to access a running node. Available [commands] are listed below.
.SH OPTIONS .SH OPTIONS

View file

@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH BITCOIN-WALLET "1" "March 2025" "bitcoin-wallet v29.0.0rc1" "User Commands" .TH BITCOIN-WALLET "1" "March 2025" "bitcoin-wallet v29.0.0rc2" "User Commands"
.SH NAME .SH NAME
bitcoin-wallet \- manual page for bitcoin-wallet v29.0.0rc1 bitcoin-wallet \- manual page for bitcoin-wallet v29.0.0rc2
.SH SYNOPSIS .SH SYNOPSIS
.B bitcoin-wallet .B bitcoin-wallet
[\fI\,options\/\fR] \fI\,<command>\/\fR [\fI\,options\/\fR] \fI\,<command>\/\fR
.SH DESCRIPTION .SH DESCRIPTION
Bitcoin Core bitcoin\-wallet utility version v29.0.0rc1 Bitcoin Core bitcoin\-wallet utility version v29.0.0rc2
.PP .PP
bitcoin\-wallet is an offline tool for creating and interacting with Bitcoin Core wallet files. bitcoin\-wallet is an offline tool for creating and interacting with Bitcoin Core wallet files.
.PP .PP

View file

@ -1,12 +1,12 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3.
.TH BITCOIND "1" "March 2025" "bitcoind v29.0.0rc1" "User Commands" .TH BITCOIND "1" "March 2025" "bitcoind v29.0.0rc2" "User Commands"
.SH NAME .SH NAME
bitcoind \- manual page for bitcoind v29.0.0rc1 bitcoind \- manual page for bitcoind v29.0.0rc2
.SH SYNOPSIS .SH SYNOPSIS
.B bitcoind .B bitcoind
[\fI\,options\/\fR] [\fI\,options\/\fR]
.SH DESCRIPTION .SH DESCRIPTION
Bitcoin Core daemon version v29.0.0rc1 Bitcoin Core daemon version v29.0.0rc2
.PP .PP
The Bitcoin Core daemon (bitcoind) is a headless program that connects to the Bitcoin network to validate and relay transactions and blocks, as well as relaying addresses. The Bitcoin Core daemon (bitcoind) is a headless program that connects to the Bitcoin network to validate and relay transactions and blocks, as well as relaying addresses.
.PP .PP

View file

@ -12,6 +12,82 @@
### Options ### Options
# Execute command when an alert is raised (%s in cmd is replaced by
# message)
#alertnotify=<cmd>
# For backwards compatibility, treat an unused bitcoin.conf file in the
# datadir as a warning, not an error.
#allowignoredconf=1
# 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:
# 00000000000000000001b658dd1120e82e66d2790811f89ede9742ada3ed6d77,
# testnet3:
# 00000000000003fc7967410ba2d0a8a8d50daedc318d43e8baf1a9782c236a57,
# testnet4:
# 0000000000003ed4f08dbdf6f7d6b271a6bcffce25675cb40aa9fa43179a89f3,
# signet:
# 000000895a110f46e59eb82bbc5bfb67fa314656009c295509c21b4999f5180a)
#assumevalid=<hex>
# Maintain an index of compact filters by block (default: 0, values:
# basic). If <type> is not supplied or if <type> = 1, indexes for
# all known types are enabled.
#blockfilterindex=<type>
# Execute command when the best block changes (%s in cmd is replaced by
# block hash)
#blocknotify=<cmd>
# Extra transactions to keep in memory for compact block reconstructions
# (default: 100)
#blockreconstructionextratxn=<n>
# Specify directory to hold blocks subdirectory for *.dat files (default:
# <datadir>)
#blocksdir=<dir>
# Whether to reject transactions from network peers. Disables automatic
# broadcast and rebroadcast of transactions, unless the source peer
# has the 'forcerelay' permission. RPC transactions are not
# affected. (default: 0)
#blocksonly=1
# Whether an XOR-key applies to blocksdir *.dat files. The created XOR-key
# will be zeros for an existing blocksdir or when `-blocksxor=0` is
# set, and random for a freshly initialized blocksdir. (default: 1)
#blocksxor=1
# Maintain coinstats index used by the gettxoutsetinfo RPC (default: 0)
#coinstatsindex=1
# Specify path to read-only configuration file. Relative paths will be
# prefixed by datadir location (only useable from command line, not
# configuration file) (default: bitcoin.conf)
#conf=<file>
# Run in the background as a daemon and accept commands (default: 0)
#daemon=1
# Wait for initialization to be finished before exiting. This implies
# -daemon (default: 0)
#daemonwait=1
# Specify data directory
#datadir=<dir>
# Maximum database cache size <n> MiB (minimum 4, default: 450). Make sure
# you have enough RAM. In addition, unused memory allocated to the
# mempool is shared with this cache (see -maxmempool).
#dbcache=<n>
# Specify location of debug log file (default: debug.log). Relative paths
# will be prefixed by a net-specific datadir location. Pass
# -nodebuglogfile to disable writing the log to a file.
#debuglogfile=<file>
# Specify additional configuration file, relative to the -datadir path # Specify additional configuration file, relative to the -datadir path
# (only useable from configuration file, not command line) # (only useable from configuration file, not command line)
#includeconf=<file> #includeconf=<file>
@ -428,9 +504,6 @@
# takes priority over "-debug" # takes priority over "-debug"
#debugexclude=<category> #debugexclude=<category>
# Print help message with debugging options and exit
#help-debug=1
# Include IP addresses in debug output (default: 0) # Include IP addresses in debug output (default: 0)
#logips=1 #logips=1

View file

@ -120,5 +120,5 @@ sudo apt-get install qtcreator
- Under `Debuggers`: select `"GDB"` as debugger - Under `Debuggers`: select `"GDB"` as debugger
8. While in the `Projects` tab, ensure that you have the `bitcoin-qt` executable specified under `Run` 8. While in the `Projects` tab, ensure that you have the `bitcoin-qt` executable specified under `Run`
- If the executable is not specified: click `"Choose..."`, navigate to `src/qt`, and select `bitcoin-qt` - If the executable is not specified: click `"Choose..."`, navigate to `build/bin`, and select `bitcoin-qt`
9. You're all set! Start developing, building, and debugging the Bitcoin Core GUI 9. You're all set! Start developing, building, and debugging the Bitcoin Core GUI

View file

@ -268,9 +268,9 @@ public:
// //
// This also requires overriding the default minimal Qt platform: // This also requires overriding the default minimal Qt platform:
// //
// QT_QPA_PLATFORM=xcb src/qt/test/test_bitcoin-qt # Linux // QT_QPA_PLATFORM=xcb build/bin/test_bitcoin-qt # Linux
// QT_QPA_PLATFORM=windows src/qt/test/test_bitcoin-qt # Windows // QT_QPA_PLATFORM=windows build/bin/test_bitcoin-qt # Windows
// QT_QPA_PLATFORM=cocoa src/qt/test/test_bitcoin-qt # macOS // QT_QPA_PLATFORM=cocoa build/bin/test_bitcoin-qt # macOS
void TestGUI(interfaces::Node& node, const std::shared_ptr<CWallet>& wallet) void TestGUI(interfaces::Node& node, const std::shared_ptr<CWallet>& wallet)
{ {
// Create widgets for sending coins and listing transactions. // Create widgets for sending coins and listing transactions.

View file

@ -6,6 +6,7 @@
#include <base58.h> #include <base58.h>
#include <psbt.h> #include <psbt.h>
#include <span.h>
#include <test/fuzz/FuzzedDataProvider.h> #include <test/fuzz/FuzzedDataProvider.h>
#include <util/strencodings.h> #include <util/strencodings.h>
#include <util/string.h> #include <util/string.h>
@ -19,42 +20,40 @@ using util::TrimStringView;
FUZZ_TARGET(base58_encode_decode) FUZZ_TARGET(base58_encode_decode)
{ {
FuzzedDataProvider provider(buffer.data(), buffer.size()); FuzzedDataProvider provider{buffer.data(), buffer.size()};
const std::string random_string{provider.ConsumeRandomLengthString(1000)}; const auto random_string{provider.ConsumeRandomLengthString(100)};
const int max_ret_len{provider.ConsumeIntegralInRange<int>(-1, 1000)};
// Decode/Encode roundtrip const auto encoded{EncodeBase58(MakeUCharSpan(random_string))};
std::vector<unsigned char> decoded; const auto decode_input{provider.ConsumeBool() ? random_string : encoded};
if (DecodeBase58(random_string, decoded, max_ret_len)) { const int max_ret_len{provider.ConsumeIntegralInRange<int>(-1, decode_input.size() + 1)};
if (std::vector<unsigned char> decoded; DecodeBase58(decode_input, decoded, max_ret_len)) {
const auto encoded_string{EncodeBase58(decoded)}; const auto encoded_string{EncodeBase58(decoded)};
assert(encoded_string == TrimStringView(random_string)); assert(encoded_string == TrimStringView(decode_input));
assert(encoded_string.empty() || !DecodeBase58(encoded_string, decoded, provider.ConsumeIntegralInRange<int>(0, decoded.size() - 1))); if (decoded.size() > 0) {
assert(max_ret_len > 0);
assert(decoded.size() <= static_cast<size_t>(max_ret_len));
assert(!DecodeBase58(encoded_string, decoded, provider.ConsumeIntegralInRange<int>(0, decoded.size() - 1)));
}
} }
// Encode/Decode roundtrip
const auto encoded{EncodeBase58(buffer)};
std::vector<unsigned char> roundtrip_decoded;
assert(DecodeBase58(encoded, roundtrip_decoded, buffer.size())
&& std::ranges::equal(roundtrip_decoded, buffer));
} }
FUZZ_TARGET(base58check_encode_decode) FUZZ_TARGET(base58check_encode_decode)
{ {
FuzzedDataProvider provider(buffer.data(), buffer.size()); FuzzedDataProvider provider{buffer.data(), buffer.size()};
const std::string random_string{provider.ConsumeRandomLengthString(1000)}; const auto random_string{provider.ConsumeRandomLengthString(100)};
const int max_ret_len{provider.ConsumeIntegralInRange<int>(-1, 1000)};
// Decode/Encode roundtrip const auto encoded{EncodeBase58Check(MakeUCharSpan(random_string))};
std::vector<unsigned char> decoded; const auto decode_input{provider.ConsumeBool() ? random_string : encoded};
if (DecodeBase58Check(random_string, decoded, max_ret_len)) { const int max_ret_len{provider.ConsumeIntegralInRange<int>(-1, decode_input.size() + 1)};
if (std::vector<unsigned char> decoded; DecodeBase58Check(decode_input, decoded, max_ret_len)) {
const auto encoded_string{EncodeBase58Check(decoded)}; const auto encoded_string{EncodeBase58Check(decoded)};
assert(encoded_string == TrimStringView(random_string)); assert(encoded_string == TrimStringView(decode_input));
assert(encoded_string.empty() || !DecodeBase58Check(encoded_string, decoded, provider.ConsumeIntegralInRange<int>(0, decoded.size() - 1))); if (decoded.size() > 0) {
assert(max_ret_len > 0);
assert(decoded.size() <= static_cast<size_t>(max_ret_len));
assert(!DecodeBase58Check(encoded_string, decoded, provider.ConsumeIntegralInRange<int>(0, decoded.size() - 1)));
}
} }
// Encode/Decode roundtrip
const auto encoded{EncodeBase58Check(buffer)};
std::vector<unsigned char> roundtrip_decoded;
assert(DecodeBase58Check(encoded, roundtrip_decoded, buffer.size())
&& std::ranges::equal(roundtrip_decoded, buffer));
} }
FUZZ_TARGET(base32_encode_decode) FUZZ_TARGET(base32_encode_decode)

View file

@ -788,6 +788,7 @@ class OrphanHandlingTest(BitcoinTestFramework):
# Disconnect peer1. peer2 should become the new candidate for orphan resolution. # Disconnect peer1. peer2 should become the new candidate for orphan resolution.
peer1.peer_disconnect() peer1.peer_disconnect()
self.wait_until(lambda: node.num_test_p2p_connections() == 1)
node.bumpmocktime(TXREQUEST_TIME_SKIP) node.bumpmocktime(TXREQUEST_TIME_SKIP)
self.wait_until(lambda: len(node.getorphantxs(verbosity=2)[0]["from"]) == 1) self.wait_until(lambda: len(node.getorphantxs(verbosity=2)[0]["from"]) == 1)
# Both parents should be requested, now that they are both missing. # Both parents should be requested, now that they are both missing.