Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package bitcoin for openSUSE:Factory checked 
in at 2026-10-27 16:59:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/bitcoin (Old)
 and      /work/SRC/openSUSE:Factory/.bitcoin.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "bitcoin"

Tue Oct 27 16:59:43 2026 rev:64 rq:1392927 version:32.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/bitcoin/bitcoin.changes  2026-10-26 
10:05:58.137725577 +0100
+++ /work/SRC/openSUSE:Factory/.bitcoin.new.2252680/bitcoin.changes     
2026-10-27 17:00:42.359989201 +0100
@@ -1,0 +2,13 @@
+Mon Oct 26 19:27:03 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 32.1:
+  * P2P: clamp -maxconnections values above 2000 with a warning
+    to reduce crash risk at very high peer counts.
+  * P2P: enforce the timeout interval for peers with
+    paused sending.
+  * Proxy: preserve network name case in errors and share the
+    network parsing between proxy options.
+  * Windows: use 64-bit file positioning syscalls for flat files.
+  * Update example bitcoin.conf and manual pages for v32.1.
+
+-------------------------------------------------------------------

Old:
----
  bitcoin-32.0.obscpio

New:
----
  bitcoin-32.1.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ bitcoin.spec ++++++
--- /var/tmp/diff_new_pack.0NpQLc/_old  2026-10-27 17:00:45.116104620 +0100
+++ /var/tmp/diff_new_pack.0NpQLc/_new  2026-10-27 17:00:45.118104703 +0100
@@ -24,7 +24,7 @@
 %define consensus 0
 %define is_base 1
 Name:           bitcoin
-Version:        32.0
+Version:        32.1
 Release:        0
 Summary:        P2P Digital Currency
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.0NpQLc/_old  2026-10-27 17:00:45.175107090 +0100
+++ /var/tmp/diff_new_pack.0NpQLc/_new  2026-10-27 17:00:45.179107258 +0100
@@ -6,7 +6,7 @@
     <param name="changesgenerate">enable</param>
     <param name="exclude">.*</param>
     <param name="versionrewrite-pattern">v(.*)</param>
-    <param name="revision">refs/tags/v32.0</param>
+    <param name="revision">refs/tags/v32.1</param>
   </service>
   <service name="tar" mode="buildtime"/>
   <service name="recompress" mode="buildtime">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.0NpQLc/_old  2026-10-27 17:00:45.206108388 +0100
+++ /var/tmp/diff_new_pack.0NpQLc/_new  2026-10-27 17:00:45.211108598 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/bitcoin/bitcoin.git</param>
-              <param 
name="changesrevision">465dde277447e2f11e01bea09d2a094d7fb6ef45</param></service></servicedata>
+              <param 
name="changesrevision">f0de87f040621468b956f01f526a43a010310501</param></service></servicedata>
 (No newline at EOF)
 

++++++ bitcoin-32.0.obscpio -> bitcoin-32.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/CMakeLists.txt 
new/bitcoin-32.1/CMakeLists.txt
--- old/bitcoin-32.0/CMakeLists.txt     2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/CMakeLists.txt     2026-10-26 18:57:47.000000000 +0100
@@ -28,7 +28,7 @@
 #=============================
 set(CLIENT_NAME "Bitcoin Core")
 set(CLIENT_VERSION_MAJOR 32)
-set(CLIENT_VERSION_MINOR 0)
+set(CLIENT_VERSION_MINOR 1)
 set(CLIENT_VERSION_BUILD 0)
 set(CLIENT_VERSION_RC 0)
 set(CLIENT_VERSION_IS_RELEASE "true")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoin-cli.1 
new/bitcoin-32.1/doc/man/bitcoin-cli.1
--- old/bitcoin-32.0/doc/man/bitcoin-cli.1      2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/doc/man/bitcoin-cli.1      2026-10-26 18:57:47.000000000 
+0100
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIN-CLI "1" "October 2026" "bitcoin-cli v32.0.0" "User Commands"
+.TH BITCOIN-CLI "1" "October 2026" "bitcoin-cli v32.1.0" "User Commands"
 .SH NAME
-bitcoin-cli \- manual page for bitcoin-cli v32.0.0
+bitcoin-cli \- manual page for bitcoin-cli v32.1.0
 .SH SYNOPSIS
 .B bitcoin-cli
 [\fI\,options\/\fR] \fI\,<command> \/\fR[\fI\,params\/\fR]
@@ -15,7 +15,7 @@
 .B bitcoin-cli
 [\fI\,options\/\fR] \fI\,help <command>\/\fR
 .SH DESCRIPTION
-Bitcoin Core RPC client version v32.0.0
+Bitcoin Core RPC client version v32.1.0
 .PP
 The bitcoin\-cli utility provides a command line interface to interact with a 
Bitcoin Core RPC server.
 .PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoin-qt.1 
new/bitcoin-32.1/doc/man/bitcoin-qt.1
--- old/bitcoin-32.0/doc/man/bitcoin-qt.1       2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/doc/man/bitcoin-qt.1       2026-10-26 18:57:47.000000000 
+0100
@@ -1,12 +1,12 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIN-QT "1" "October 2026" "bitcoin-qt v32.0.0" "User Commands"
+.TH BITCOIN-QT "1" "October 2026" "bitcoin-qt v32.1.0" "User Commands"
 .SH NAME
-bitcoin-qt \- manual page for bitcoin-qt v32.0.0
+bitcoin-qt \- manual page for bitcoin-qt v32.1.0
 .SH SYNOPSIS
 .B bitcoin-qt
 [\fI\,options\/\fR] [\fI\,URI\/\fR]
 .SH DESCRIPTION
-Bitcoin Core version v32.0.0
+Bitcoin Core version v32.1.0
 .PP
 The bitcoin\-qt application provides a graphical interface for interacting 
with Bitcoin Core.
 .PP
@@ -319,14 +319,14 @@
 .HP
 \fB\-maxconnections=\fR<n>
 .IP
-Maintain at most <n> automatic connections to peers (default: 200). 11
-slots of these are reserved for outgoing connections. See
-\fB\-inboundrelaypercent\fR for more information about limits applied to
-transaction relay inbound peers. This limit does not apply to
-connections manually added via \fB\-addnode\fR or the addnode RPC, which
-have a separate limit of 8. It does not apply to short\-lived
-private broadcast connections either, which have a separate limit
-of 64.
+Maintain at most <n> automatic connections to peers (default: 200,
+maximum: 2000). 11 slots of these are reserved for outgoing
+connections. See \fB\-inboundrelaypercent\fR for more information about
+limits applied to transaction relay inbound peers. This limit
+does not apply to connections manually added via \fB\-addnode\fR or the
+addnode RPC, which have a separate limit of 8. It does not apply
+to short\-lived private broadcast connections either, which have a
+separate limit of 64.
 .HP
 \fB\-maxreceivebuffer=\fR<n>
 .IP
@@ -388,7 +388,7 @@
 Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable. May be a local
 file path prefixed with 'unix:' if the proxy supports it. Could
 end in =network to set the proxy only for that network. The
-network can be any of ipv4, ipv6, tor or cjdns. (default:
+network can be any of ipv4, ipv6, onion, cjdns. (default:
 disabled)
 .HP
 \fB\-proxyrandomize\fR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoin-tx.1 
new/bitcoin-32.1/doc/man/bitcoin-tx.1
--- old/bitcoin-32.0/doc/man/bitcoin-tx.1       2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/doc/man/bitcoin-tx.1       2026-10-26 18:57:47.000000000 
+0100
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIN-TX "1" "October 2026" "bitcoin-tx v32.0.0" "User Commands"
+.TH BITCOIN-TX "1" "October 2026" "bitcoin-tx v32.1.0" "User Commands"
 .SH NAME
-bitcoin-tx \- manual page for bitcoin-tx v32.0.0
+bitcoin-tx \- manual page for bitcoin-tx v32.1.0
 .SH SYNOPSIS
 .B bitcoin-tx
 [\fI\,options\/\fR] \fI\,<hex-tx> \/\fR[\fI\,commands\/\fR]
@@ -9,7 +9,7 @@
 .B bitcoin-tx
 [\fI\,options\/\fR] \fI\,-create \/\fR[\fI\,commands\/\fR]
 .SH DESCRIPTION
-Bitcoin Core bitcoin\-tx utility version v32.0.0
+Bitcoin Core bitcoin\-tx utility version v32.1.0
 .PP
 The bitcoin\-tx tool is used for creating and modifying bitcoin transactions.
 .PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoin-util.1 
new/bitcoin-32.1/doc/man/bitcoin-util.1
--- old/bitcoin-32.0/doc/man/bitcoin-util.1     2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/doc/man/bitcoin-util.1     2026-10-26 18:57:47.000000000 
+0100
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIN-UTIL "1" "October 2026" "bitcoin-util v32.0.0" "User Commands"
+.TH BITCOIN-UTIL "1" "October 2026" "bitcoin-util v32.1.0" "User Commands"
 .SH NAME
-bitcoin-util \- manual page for bitcoin-util v32.0.0
+bitcoin-util \- manual page for bitcoin-util v32.1.0
 .SH SYNOPSIS
 .B bitcoin-util
 [\fI\,options\/\fR] [\fI\,command\/\fR]
@@ -9,7 +9,7 @@
 .B bitcoin-util
 [\fI\,options\/\fR] \fI\,grind <hex-block-header>\/\fR
 .SH DESCRIPTION
-Bitcoin Core bitcoin\-util utility version v32.0.0
+Bitcoin Core bitcoin\-util utility version v32.1.0
 .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.
 .SH OPTIONS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoin-wallet.1 
new/bitcoin-32.1/doc/man/bitcoin-wallet.1
--- old/bitcoin-32.0/doc/man/bitcoin-wallet.1   2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/doc/man/bitcoin-wallet.1   2026-10-26 18:57:47.000000000 
+0100
@@ -1,12 +1,12 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIN-WALLET "1" "October 2026" "bitcoin-wallet v32.0.0" "User Commands"
+.TH BITCOIN-WALLET "1" "October 2026" "bitcoin-wallet v32.1.0" "User Commands"
 .SH NAME
-bitcoin-wallet \- manual page for bitcoin-wallet v32.0.0
+bitcoin-wallet \- manual page for bitcoin-wallet v32.1.0
 .SH SYNOPSIS
 .B bitcoin-wallet
 [\fI\,options\/\fR] \fI\,<command>\/\fR
 .SH DESCRIPTION
-Bitcoin Core bitcoin\-wallet utility version v32.0.0
+Bitcoin Core bitcoin\-wallet utility version v32.1.0
 .PP
 bitcoin\-wallet is an offline tool for creating and interacting with Bitcoin 
Core wallet files.
 .PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoin.1 
new/bitcoin-32.1/doc/man/bitcoin.1
--- old/bitcoin-32.0/doc/man/bitcoin.1  2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/doc/man/bitcoin.1  2026-10-26 18:57:47.000000000 +0100
@@ -1,7 +1,7 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIN "1" "October 2026" "bitcoin v32.0.0" "User Commands"
+.TH BITCOIN "1" "October 2026" "bitcoin v32.1.0" "User Commands"
 .SH NAME
-bitcoin \- manual page for bitcoin v32.0.0
+bitcoin \- manual page for bitcoin v32.1.0
 .SH SYNOPSIS
 .B bitcoin
 [\fI\,OPTIONS\/\fR] \fI\,COMMAND\/\fR...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/man/bitcoind.1 
new/bitcoin-32.1/doc/man/bitcoind.1
--- old/bitcoin-32.0/doc/man/bitcoind.1 2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/doc/man/bitcoind.1 2026-10-26 18:57:47.000000000 +0100
@@ -1,12 +1,12 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.49.3.
-.TH BITCOIND "1" "October 2026" "bitcoind v32.0.0" "User Commands"
+.TH BITCOIND "1" "October 2026" "bitcoind v32.1.0" "User Commands"
 .SH NAME
-bitcoind \- manual page for bitcoind v32.0.0
+bitcoind \- manual page for bitcoind v32.1.0
 .SH SYNOPSIS
 .B bitcoind
 [\fI\,options\/\fR]
 .SH DESCRIPTION
-Bitcoin Core daemon version v32.0.0 bitcoind
+Bitcoin Core daemon version v32.1.0 bitcoind
 .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.
 .PP
@@ -319,14 +319,14 @@
 .HP
 \fB\-maxconnections=\fR<n>
 .IP
-Maintain at most <n> automatic connections to peers (default: 200). 11
-slots of these are reserved for outgoing connections. See
-\fB\-inboundrelaypercent\fR for more information about limits applied to
-transaction relay inbound peers. This limit does not apply to
-connections manually added via \fB\-addnode\fR or the addnode RPC, which
-have a separate limit of 8. It does not apply to short\-lived
-private broadcast connections either, which have a separate limit
-of 64.
+Maintain at most <n> automatic connections to peers (default: 200,
+maximum: 2000). 11 slots of these are reserved for outgoing
+connections. See \fB\-inboundrelaypercent\fR for more information about
+limits applied to transaction relay inbound peers. This limit
+does not apply to connections manually added via \fB\-addnode\fR or the
+addnode RPC, which have a separate limit of 8. It does not apply
+to short\-lived private broadcast connections either, which have a
+separate limit of 64.
 .HP
 \fB\-maxreceivebuffer=\fR<n>
 .IP
@@ -388,7 +388,7 @@
 Connect through SOCKS5 proxy, set \fB\-noproxy\fR to disable. May be a local
 file path prefixed with 'unix:' if the proxy supports it. Could
 end in =network to set the proxy only for that network. The
-network can be any of ipv4, ipv6, tor or cjdns. (default:
+network can be any of ipv4, ipv6, onion, cjdns. (default:
 disabled)
 .HP
 \fB\-proxyrandomize\fR
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/release-notes.md 
new/bitcoin-32.1/doc/release-notes.md
--- old/bitcoin-32.0/doc/release-notes.md       2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/doc/release-notes.md       2026-10-26 18:57:47.000000000 
+0100
@@ -1,9 +1,12 @@
-v32.0 Release Notes
+v32.1 Release Notes
 ===================
 
-Bitcoin Core version 32.0 is now available from:
+Due to last-minute issues, 32.0, although tagged, was never
+fully announced or released.
 
-  <https://bitcoincore.org/bin/bitcoin-core-32.0/>
+Bitcoin Core version 32.1 is now available from:
+
+  <https://bitcoincore.org/bin/bitcoin-core-32.1/>
 
 This release includes new features, various bug fixes and performance
 improvements, as well as updated translations.
@@ -23,7 +26,7 @@
 
 * Medium and high severity vulnerabilities fixed in 30.0. There are 3 of these.
 
-* Low severity vulnerabilities fixed in 32.0. There are 0 of these.
+* Low severity vulnerabilities fixed in 32.1. There are 0 of these.
 
 How to Upgrade
 ==============
@@ -114,6 +117,8 @@
 - Explicitly configured `-maxconnections` values remain unchanged, but the new
   inbound transaction-relay limit still applies. To retain the previous
   connection limits, use `-maxconnections=125 -inboundrelaypercent=100`.
+`-maxconnections` now clamps values above 2,000 with a warning to reduce
+  crash risk at very high peer counts. (#35919)
 
 Mempool
 -------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/doc/tor.md new/bitcoin-32.1/doc/tor.md
--- old/bitcoin-32.0/doc/tor.md 2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/doc/tor.md 2026-10-26 18:57:47.000000000 +0100
@@ -11,6 +11,11 @@
 
 - Tor removed v2 support beginning with version 0.4.6.
 
+- Bitcoin Core 31.0 removed `tor` as a network name. Use `onion` instead,
+  as in `-onlynet=onion` or `-proxy=addr:port=onion`
+  ([#34031](https://github.com/bitcoin/bitcoin/pull/34031)).
+  The `-debug=tor` logging category is unaffected.
+
 ## How to see information about your Tor configuration via Bitcoin Core
 
 There are several ways to see your local onion address in Bitcoin Core:
@@ -39,7 +44,7 @@
         as well. You need to use -noonion or -onion=0 to explicitly disable
         outbound access to onion services.
 
-    -proxy=ip[:port]=tor
+    -proxy=ip[:port]=onion
     or
     -onion=ip[:port]
         Set the proxy server for reaching .onion addresses. You do not need to
@@ -51,7 +56,7 @@
         -proxy=addr:port=ipv4 or
         -proxy=addr:port=ipv6
         (last one if multiple options are given). It is not taken from
-        -proxy=addr:port=tor or
+        -proxy=addr:port=onion or
         -onion=addr:port.
         If no proxy for DNS requests is configured, then they will be done 
using
         the functions provided by the operating system, most likely resulting 
in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/share/examples/bitcoin.conf 
new/bitcoin-32.1/share/examples/bitcoin.conf
--- old/bitcoin-32.0/share/examples/bitcoin.conf        2026-10-21 
15:21:46.000000000 +0200
+++ new/bitcoin-32.1/share/examples/bitcoin.conf        2026-10-26 
18:57:47.000000000 +0100
@@ -259,14 +259,14 @@
 # Automatically create Tor onion service (default: 1)
 #listenonion=1
 
-# Maintain at most <n> automatic connections to peers (default: 200). 11
-# slots of these are reserved for outgoing connections. See
-# -inboundrelaypercent for more information about limits applied to
-# transaction relay inbound peers. This limit does not apply to
-# connections manually added via -addnode or the addnode RPC, which
-# have a separate limit of 8. It does not apply to short-lived
-# private broadcast connections either, which have a separate limit
-# of 64.
+# Maintain at most <n> automatic connections to peers (default: 200,
+# maximum: 2000). 11 slots of these are reserved for outgoing
+# connections. See -inboundrelaypercent for more information about
+# limits applied to transaction relay inbound peers. This limit
+# does not apply to connections manually added via -addnode or the
+# addnode RPC, which have a separate limit of 8. It does not apply
+# to short-lived private broadcast connections either, which have a
+# separate limit of 64.
 #maxconnections=<n>
 
 # Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000)
@@ -317,7 +317,7 @@
 # Connect through SOCKS5 proxy, set -noproxy to disable. May be a local
 # file path prefixed with 'unix:' if the proxy supports it. Could
 # end in =network to set the proxy only for that network. The
-# network can be any of ipv4, ipv6, tor or cjdns. (default:
+# network can be any of ipv4, ipv6, onion, cjdns. (default:
 # disabled)
 #proxy=<ip>[:<port>]|unix:<path>[=<network>]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/chain.h new/bitcoin-32.1/src/chain.h
--- old/bitcoin-32.0/src/chain.h        2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/chain.h        2026-10-26 18:57:47.000000000 +0100
@@ -109,10 +109,10 @@
     int nFile GUARDED_BY(::cs_main){0};
 
     //! Byte offset within blk?????.dat where this block's data is stored
-    unsigned int nDataPos GUARDED_BY(::cs_main){0};
+    uint64_t nDataPos GUARDED_BY(::cs_main){0};
 
     //! Byte offset within rev?????.dat where this block's undo data is stored
-    unsigned int nUndoPos GUARDED_BY(::cs_main){0};
+    uint64_t nUndoPos GUARDED_BY(::cs_main){0};
 
     //! (memory only) Total amount of work (expected number of hashes) in the 
chain up to and including this block
     arith_uint256 nChainWork{};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/flatfile.cpp 
new/bitcoin-32.1/src/flatfile.cpp
--- old/bitcoin-32.0/src/flatfile.cpp   2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/flatfile.cpp   2026-10-26 18:57:47.000000000 +0100
@@ -46,7 +46,7 @@
         LogError("Unable to open file %s", fs::PathToString(path));
         return nullptr;
     }
-    if (pos.nPos && fseek(file, pos.nPos, SEEK_SET)) {
+    if (pos.nPos && FileSeek64(file, pos.nPos, SEEK_SET)) {
         LogError("Unable to seek to position %u of %s", pos.nPos, 
fs::PathToString(path));
         if (fclose(file) != 0) {
             LogError("Unable to close file %s", fs::PathToString(path));
@@ -60,11 +60,11 @@
 {
     out_of_space = false;
 
-    unsigned int n_old_chunks = CeilDiv(pos.nPos, m_chunk_size);
-    unsigned int n_new_chunks = CeilDiv(pos.nPos + add_size, m_chunk_size);
+    uint64_t n_old_chunks = CeilDiv(pos.nPos, uint64_t{m_chunk_size});
+    uint64_t n_new_chunks = CeilDiv(pos.nPos + add_size, 
uint64_t{m_chunk_size});
     if (n_new_chunks > n_old_chunks) {
-        size_t old_size = pos.nPos;
-        size_t new_size = n_new_chunks * m_chunk_size;
+        uint64_t old_size = pos.nPos;
+        uint64_t new_size = n_new_chunks * m_chunk_size;
         size_t inc_size = new_size - old_size;
 
         if (CheckDiskSpace(m_dir, inc_size)) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/flatfile.h 
new/bitcoin-32.1/src/flatfile.h
--- old/bitcoin-32.0/src/flatfile.h     2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/flatfile.h     2026-10-26 18:57:47.000000000 +0100
@@ -14,13 +14,13 @@
 struct FlatFilePos
 {
     int32_t nFile{-1};
-    uint32_t nPos{0};
+    uint64_t nPos{0};
 
     SERIALIZE_METHODS(FlatFilePos, obj) { READWRITE(VARINT_MODE(obj.nFile, 
VarIntMode::NONNEGATIVE_SIGNED), VARINT(obj.nPos)); }
 
     FlatFilePos() = default;
 
-    FlatFilePos(int32_t nFileIn, uint32_t nPosIn)
+    FlatFilePos(int32_t nFileIn, uint64_t nPosIn)
         : nFile{nFileIn},
           nPos{nPosIn}
     {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/init.cpp 
new/bitcoin-32.1/src/init.cpp
--- old/bitcoin-32.0/src/init.cpp       2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/init.cpp       2026-10-26 18:57:47.000000000 +0100
@@ -575,10 +575,10 @@
     argsman.AddArg("-forcednsseed", strprintf("Always query for peer addresses 
via DNS lookup (default: %u)", DEFAULT_FORCEDNSSEED), ArgsManager::ALLOW_ANY, 
OptionsCategory::CONNECTION);
     argsman.AddArg("-listen", strprintf("Accept connections from outside 
(default: %u if no -proxy, -connect or -maxconnections=0)", DEFAULT_LISTEN), 
ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
     argsman.AddArg("-listenonion", strprintf("Automatically create Tor onion 
service (default: %d)", DEFAULT_LISTEN_ONION), ArgsManager::ALLOW_ANY, 
OptionsCategory::CONNECTION);
-    argsman.AddArg("-maxconnections=<n>", strprintf("Maintain at most <n> 
automatic connections to peers (default: %u). %u slots of these are reserved 
for outgoing connections. See -inboundrelaypercent for more information about 
limits applied to transaction relay inbound peers. "
+    argsman.AddArg("-maxconnections=<n>", strprintf("Maintain at most <n> 
automatic connections to peers (default: %u, maximum: %u). %u slots of these 
are reserved for outgoing connections. See -inboundrelaypercent for more 
information about limits applied to transaction relay inbound peers. "
                                                     "This limit does not apply 
to connections manually added via -addnode or the addnode RPC, which have a 
separate limit of %u. "
                                                     "It does not apply to 
short-lived private broadcast connections either, which have a separate limit 
of %u.",
-                                                    
DEFAULT_MAX_PEER_CONNECTIONS, MAX_OUTBOUND_FULL_RELAY_CONNECTIONS + 
MAX_BLOCK_RELAY_ONLY_CONNECTIONS + MAX_FEELER_CONNECTIONS, 
MAX_ADDNODE_CONNECTIONS, MAX_PRIVATE_BROADCAST_CONNECTIONS),
+                                                    
DEFAULT_MAX_PEER_CONNECTIONS, MAX_PEER_CONNECTIONS, 
MAX_OUTBOUND_FULL_RELAY_CONNECTIONS + MAX_BLOCK_RELAY_ONLY_CONNECTIONS + 
MAX_FEELER_CONNECTIONS, MAX_ADDNODE_CONNECTIONS, 
MAX_PRIVATE_BROADCAST_CONNECTIONS),
                    ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
     argsman.AddArg("-inboundrelaypercent=<n>", strprintf("Permit a maximum 
percent of inbound connections to relay transactions, to limit memory 
utilization (0 to 100, default: %u).", DEFAULT_FULL_RELAY_INBOUND_PCT), 
ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
     argsman.AddArg("-maxreceivebuffer=<n>", strprintf("Maximum per-connection 
receive buffer, <n>*1000 bytes (default: %u)", DEFAULT_MAXRECEIVEBUFFER), 
ArgsManager::ALLOW_ANY, OptionsCategory::CONNECTION);
@@ -613,7 +613,7 @@
                    "Connect through SOCKS5 proxy, set -noproxy to disable. " +
                    proxy_doc_for_unix_socket +
                    "Could end in =network to set the proxy only for that 
network. " +
-                   "The network can be any of ipv4, ipv6, tor or cjdns. " +
+                   "The network can be any of " + Join(std::vector{NET_IPV4, 
NET_IPV6, NET_ONION, NET_CJDNS}, ", ", GetNetworkName) + ". " +
                    "(default: disabled)",
                    ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_ELISION,
                    OptionsCategory::CONNECTION);
@@ -1060,10 +1060,16 @@
     // Number of bound interfaces (we have at least one)
     int num_p2p_bind = std::max(num_user_p2p_bind, size_t(1));
     // Maximum number of connections with other nodes, this accounts for all 
types of outbounds and inbounds except for manual
-    int user_p2p_max_connections = args.GetIntArg("-maxconnections", 
DEFAULT_MAX_PEER_CONNECTIONS);
+    int user_p2p_max_connections = args.GetArg<int>("-maxconnections", 
DEFAULT_MAX_PEER_CONNECTIONS);
     if (user_p2p_max_connections < 0) {
         return InitError(Untranslated("-maxconnections must be greater or 
equal than zero"));
     }
+
+    if (user_p2p_max_connections > MAX_PEER_CONNECTIONS) {
+        InitWarning(strprintf(_("Reducing -maxconnections from %d to %d."), 
user_p2p_max_connections, MAX_PEER_CONNECTIONS));
+        user_p2p_max_connections = MAX_PEER_CONNECTIONS;
+    }
+
     const size_t max_private{args.GetBoolArg("-privatebroadcast", 
DEFAULT_PRIVATE_BROADCAST)
                              ? MAX_PRIVATE_BROADCAST_CONNECTIONS
                              : 0};
@@ -1761,7 +1767,7 @@
             if (eq_pos + 1 == param_value.length()) {
                 return InitError(strprintf(_("Invalid -proxy address or 
hostname, ends with '=': '%s'"), param_value));
             }
-            net_str = ToLower(param_value.substr(eq_pos + 1)); // e.g. 
127.0.0.1:9050=ipv4 -> ipv4
+            net_str = param_value.substr(eq_pos + 1); // e.g. 
127.0.0.1:9050=ipv4 -> ipv4
         }
 
         Proxy proxy;
@@ -1782,16 +1788,18 @@
 
         if (net_str.empty()) { // For all networks.
             ipv4_proxy = ipv6_proxy = name_proxy = cjdns_proxy = onion_proxy = 
proxy;
-        } else if (net_str == "ipv4") {
-            ipv4_proxy = name_proxy = proxy;
-        } else if (net_str == "ipv6") {
-            ipv6_proxy = name_proxy = proxy;
-        } else if (net_str == "onion") {
-            onion_proxy = proxy;
-        } else if (net_str == "cjdns") {
-            cjdns_proxy = proxy;
         } else {
-            return InitError(strprintf(_("Unrecognized network in -proxy='%s': 
'%s'"), param_value, net_str));
+            switch (ParseNetwork(net_str)) {
+            case NET_IPV4: ipv4_proxy = name_proxy = proxy; break;
+            case NET_IPV6: ipv6_proxy = name_proxy = proxy; break;
+            case NET_ONION: onion_proxy = proxy; break;
+            case NET_CJDNS: cjdns_proxy = proxy; break;
+            case NET_UNROUTABLE:
+            case NET_I2P:
+            case NET_INTERNAL:
+            case NET_MAX:
+                return InitError(strprintf(_("Unrecognized network in 
-proxy='%s': '%s'"), param_value, net_str));
+            } // no default case, so the compiler can warn about missing cases
         }
     }
     if (ipv4_proxy.IsValid()) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/kernel/chain.h 
new/bitcoin-32.1/src/kernel/chain.h
--- old/bitcoin-32.0/src/kernel/chain.h 2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/kernel/chain.h 2026-10-26 18:57:47.000000000 +0100
@@ -7,6 +7,7 @@
 
 #include <attributes.h>
 
+#include <cstdint>
 #include <iostream>
 
 class CBlock;
@@ -21,7 +22,7 @@
     const uint256* prev_hash = nullptr;
     int height = -1;
     int file_number = -1;
-    unsigned data_pos = 0;
+    uint64_t data_pos = 0;
     const CBlock* data = nullptr;
     const CBlockUndo* undo_data = nullptr;
     // The maximum time in the chain up to and including this block.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/net.cpp new/bitcoin-32.1/src/net.cpp
--- old/bitcoin-32.0/src/net.cpp        2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/net.cpp        2026-10-26 18:57:47.000000000 +0100
@@ -1675,7 +1675,11 @@
         }
     }
 
-    node.fPauseSend = node.m_send_memusage + 
node.m_transport->GetSendMemoryUsage() > nSendBufferMaxSize;
+    const bool pause_send{node.m_send_memusage + 
node.m_transport->GetSendMemoryUsage() > nSendBufferMaxSize};
+    if (pause_send && !node.fPauseSend) {
+        node.m_pause_send_since = NodeClock::now();
+    }
+    node.fPauseSend = pause_send;
 
     if (it == node.vSendMsg.end()) {
         assert(node.m_send_memusage == 0);
@@ -2079,6 +2083,17 @@
         return true;
     }
 
+    if (node.fPauseSend) {
+        const auto last_pause{node.m_pause_send_since.load()};
+        if (now > last_pause + TIMEOUT_INTERVAL) {
+            LogDebug(BCLog::NET,
+                "send buffer full for %is, %s", 
Ticks<std::chrono::seconds>(now - last_pause),
+                node.DisconnectMsg()
+            );
+            return true;
+        }
+    }
+
     if (!node.fSuccessfullyConnected) {
         if (node.m_transport->GetInfo().transport_type == 
TransportProtocolType::DETECTING) {
             LogDebug(BCLog::NET, "V2 handshake timeout, %s", 
node.DisconnectMsg());
@@ -4203,7 +4218,10 @@
 
         // Update memory usage of send buffer.
         pnode->m_send_memusage += msg.GetMemoryUsage();
-        if (pnode->m_send_memusage + pnode->m_transport->GetSendMemoryUsage() 
> nSendBufferMaxSize) pnode->fPauseSend = true;
+        if (pnode->m_send_memusage + pnode->m_transport->GetSendMemoryUsage() 
> nSendBufferMaxSize && !pnode->fPauseSend) {
+            pnode->m_pause_send_since = NodeClock::now();
+            pnode->fPauseSend = true;
+        }
         // Move message to vSendMsg queue.
         pnode->vSendMsg.push_back(std::move(msg));
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/net.h new/bitcoin-32.1/src/net.h
--- old/bitcoin-32.0/src/net.h  2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/net.h  2026-10-26 18:57:47.000000000 +0100
@@ -79,6 +79,8 @@
 inline constexpr bool DEFAULT_LISTEN = true;
 /** The maximum number of peer connections to maintain. */
 inline constexpr unsigned int DEFAULT_MAX_PEER_CONNECTIONS{200};
+/** Maximum value of -maxconnections */
+inline constexpr int MAX_PEER_CONNECTIONS{2'000};
 /** Default percentage of inbound connection slots that tx-relaying peers can 
use */
 inline constexpr int DEFAULT_FULL_RELAY_INBOUND_PCT{50};
 /** The default for -maxuploadtarget. 0 = Unlimited */
@@ -749,6 +751,8 @@
     const uint64_t nKeyedNetGroup;
     std::atomic_bool fPauseRecv{false};
     std::atomic_bool fPauseSend{false};
+    /** When was fPauseSend last set from false to true */
+    std::atomic<NodeClock::time_point> m_pause_send_since{NodeClock::epoch};
 
     /** Network key used to prevent fingerprinting our node across networks.
      *  Influenced by the network and the bind address (+ bind port for 
inbounds) */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/node/blockstorage.h 
new/bitcoin-32.1/src/node/blockstorage.h
--- old/bitcoin-32.0/src/node/blockstorage.h    2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/src/node/blockstorage.h    2026-10-26 18:57:47.000000000 
+0100
@@ -58,8 +58,8 @@
 {
 public:
     uint32_t nBlocks{};      //!< number of blocks stored in file
-    uint32_t nSize{};        //!< number of used bytes of block file
-    uint32_t nUndoSize{};    //!< number of used bytes in the undo file
+    uint64_t nSize{};        //!< number of used bytes of block file
+    uint64_t nUndoSize{};    //!< number of used bytes in the undo file
     uint32_t nHeightFirst{}; //!< lowest height of block in file
     uint32_t nHeightLast{};  //!< highest height of block in file
     uint64_t nTimeFirst{};   //!< earliest time of block in file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/node/txorphanage.h 
new/bitcoin-32.1/src/node/txorphanage.h
--- old/bitcoin-32.0/src/node/txorphanage.h     2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/src/node/txorphanage.h     2026-10-26 18:57:47.000000000 
+0100
@@ -20,7 +20,10 @@
 inline constexpr int64_t DEFAULT_RESERVED_ORPHAN_WEIGHT_PER_PEER{404'000};
 /** Default value for TxOrphanage::m_max_global_latency_score. Helps limit the 
maximum latency for operations like
  * EraseForBlock and LimitOrphans. */
-inline constexpr unsigned int DEFAULT_MAX_ORPHANAGE_LATENCY_SCORE{3000};
+inline constexpr unsigned int DEFAULT_MAX_ORPHANAGE_LATENCY_SCORE{3'000};
+
+// Keep the connection caps below the default global latency limit to avoid a 
zero per-peer share.
+static_assert(MAX_PEER_CONNECTIONS + MAX_ADDNODE_CONNECTIONS + 
MAX_PRIVATE_BROADCAST_CONNECTIONS < DEFAULT_MAX_ORPHANAGE_LATENCY_SCORE);
 
 /** A class to track orphan transactions (failed on TX_MISSING_INPUTS)
  * Since we cannot distinguish orphans from bad transactions with non-existent 
inputs, we heavily limit the amount of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/streams.cpp 
new/bitcoin-32.1/src/streams.cpp
--- old/bitcoin-32.0/src/streams.cpp    2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/streams.cpp    2026-10-26 18:57:47.000000000 +0100
@@ -13,7 +13,7 @@
 AutoFile::AutoFile(std::FILE* file, const Obfuscation& obfuscation) : 
m_file{file}, m_obfuscation{obfuscation}
 {
     if (!IsNull()) {
-        auto pos{std::ftell(m_file)};
+        auto pos{FileTell64(m_file)};
         if (pos >= 0) m_position = pos;
     }
 }
@@ -35,7 +35,7 @@
     if (IsNull()) {
         throw std::ios_base::failure("AutoFile::seek: file handle is nullptr");
     }
-    if (std::fseek(m_file, offset, origin) != 0) {
+    if (FileSeek64(m_file, offset, origin) != 0) {
         throw std::ios_base::failure(feof() ? "AutoFile::seek: end of file" : 
"AutoFile::seek: fseek failed");
     }
     if (origin == SEEK_SET) {
@@ -43,7 +43,7 @@
     } else if (origin == SEEK_CUR && m_position.has_value()) {
         *m_position += offset;
     } else {
-        int64_t r{std::ftell(m_file)};
+        int64_t r{FileTell64(m_file)};
         if (r < 0) {
             throw std::ios_base::failure("AutoFile::seek: ftell failed");
         }
@@ -131,7 +131,7 @@
     return ::FileCommit(m_file);
 }
 
-bool AutoFile::Truncate(unsigned size)
+bool AutoFile::Truncate(uint64_t size)
 {
     m_was_written = true;
     return ::TruncateFile(m_file, size);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/streams.h 
new/bitcoin-32.1/src/streams.h
--- old/bitcoin-32.0/src/streams.h      2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/streams.h      2026-10-26 18:57:47.000000000 +0100
@@ -466,7 +466,7 @@
     bool Commit();
 
     /** Wrapper around TruncateFile(). */
-    bool Truncate(unsigned size);
+    bool Truncate(uint64_t size);
 
     //! Write a mutable buffer more efficiently than write(), obfuscating the 
buffer in-place.
     void write_buffer(std::span<std::byte> src);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/util/fs_helpers.cpp 
new/bitcoin-32.1/src/util/fs_helpers.cpp
--- old/bitcoin-32.0/src/util/fs_helpers.cpp    2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/src/util/fs_helpers.cpp    2026-10-26 18:57:47.000000000 
+0100
@@ -147,10 +147,10 @@
 #endif
 }
 
-bool TruncateFile(FILE* file, unsigned int length)
+bool TruncateFile(FILE* file, uint64_t length)
 {
 #if defined(WIN32)
-    return _chsize(_fileno(file), length) == 0;
+    return _chsize_s(_fileno(file), length) == 0;
 #else
     return ftruncate(fileno(file), length) == 0;
 #endif
@@ -197,7 +197,7 @@
  * this function tries to make a particular range of a file allocated 
(corresponding to disk space)
  * it is advisory, and the range specified in the arguments will never contain 
live data
  */
-void AllocateFileRange(FILE* file, unsigned int offset, unsigned int length)
+void AllocateFileRange(FILE* file, uint64_t offset, unsigned int length)
 {
 #if defined(WIN32)
     // Windows-specific version
@@ -232,7 +232,7 @@
     // Fallback version
     // TODO: just write one byte per block
     static const char buf[65536] = {};
-    if (fseek(file, offset, SEEK_SET)) {
+    if (FileSeek64(file, offset, SEEK_SET)) {
         return;
     }
     while (length > 0) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/util/fs_helpers.h 
new/bitcoin-32.1/src/util/fs_helpers.h
--- old/bitcoin-32.0/src/util/fs_helpers.h      2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/src/util/fs_helpers.h      2026-10-26 18:57:47.000000000 
+0100
@@ -44,7 +44,37 @@
  */
 void DirectoryCommit(const fs::path& dirname);
 
-bool TruncateFile(FILE* file, unsigned int length);
+bool TruncateFile(FILE* file, uint64_t length);
+
+/**
+ * 64-bit-clean file positioning.
+ *
+ * The wrapper is necessary for Windows, because `long` is only 32 bits there,
+ * even in 64-bit builds (LLP64).
+ */
+inline int FileSeek64(FILE* file, int64_t offset, int origin)
+{
+#if defined(WIN32)
+    return _fseeki64(file, offset, origin);
+#else
+    return std::fseek(file, offset, origin);
+#endif
+}
+
+/**
+ * 64-bit-clean file positioning.
+ *
+ * The wrapper is necessary for Windows, because `long` is only 32 bits there,
+ * even in 64-bit builds (LLP64).
+ */
+inline int64_t FileTell64(FILE* file)
+{
+#if defined(WIN32)
+    return _ftelli64(file);
+#else
+    return std::ftell(file);
+#endif
+}
 
 /**
  * Try to raise the file descriptor limit to the requested number.
@@ -57,7 +87,7 @@
  */
 int RaiseFileDescriptorLimit(int min_fd);
 
-void AllocateFileRange(FILE* file, unsigned int offset, unsigned int length);
+void AllocateFileRange(FILE* file, uint64_t offset, unsigned int length);
 
 /**
  * Rename src to dest.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/src/util/sock.cpp 
new/bitcoin-32.1/src/util/sock.cpp
--- old/bitcoin-32.0/src/util/sock.cpp  2026-10-21 15:21:46.000000000 +0200
+++ new/bitcoin-32.1/src/util/sock.cpp  2026-10-26 18:57:47.000000000 +0100
@@ -219,12 +219,14 @@
         const auto& s = sock->m_socket;
         if (events.requested & RecvEvent) {
             FD_SET(s, &recv);
+            FD_SET(s, &err);
         }
         if (events.requested & SendEvent) {
             FD_SET(s, &send);
         }
-        FD_SET(s, &err);
-        socket_max = std::max(socket_max, s);
+        if (events.requested & (RecvEvent | SendEvent)) {
+            socket_max = std::max(socket_max, s);
+        }
     }
 
     timeval tv = MillisToTimeval(timeout);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/test/functional/feature_init.py 
new/bitcoin-32.1/test/functional/feature_init.py
--- old/bitcoin-32.0/test/functional/feature_init.py    2026-10-21 
15:21:46.000000000 +0200
+++ new/bitcoin-32.1/test/functional/feature_init.py    2026-10-26 
18:57:47.000000000 +0100
@@ -386,10 +386,21 @@
         # No HTTP server, no RPC `stop`
         sigterm_node(node)
 
+        # From net.h
+        MAX_PEER_CONNECTIONS = 2000
+
+        self.log.info("Checking -maxconnections is capped before reserving 
file descriptors")
+        for requested, parsed in [(MAX_PEER_CONNECTIONS + 1, 
MAX_PEER_CONNECTIONS + 1), (2**64, 2**31 - 1)]:
+            warning = f"Reducing -maxconnections from {parsed} to 
{MAX_PEER_CONNECTIONS}."
+            self.restart_node(1, extra_args=[f"-maxconnections={requested}"])
+            self.stop_node(1, expected_stderr=re.compile(re.escape(warning)))
+
         if self.RLIM_INFINITY is not None:
             # Get the platform's file descriptor limit, if possible
             import resource
             soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
+            # Stay within the -maxconnections cap so the descriptor limit is 
what reduces it
+            soft = min(soft, MAX_PEER_CONNECTIONS)
 
             # Lower the hard limit so RaiseFileDescriptorLimit() has a ceiling.
             # The hard limit can not be raised again without root privilges,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/test/functional/feature_proxy.py 
new/bitcoin-32.1/test/functional/feature_proxy.py
--- old/bitcoin-32.0/test/functional/feature_proxy.py   2026-10-21 
15:21:46.000000000 +0200
+++ new/bitcoin-32.1/test/functional/feature_proxy.py   2026-10-26 
18:57:47.000000000 +0100
@@ -441,20 +441,22 @@
         self.start_node(1, extra_args=["-onlynet=onion", "-listenonion=1"])
         self.stop_node(1)
 
-        self.log.info("Test passing unknown network to -onlynet raises 
expected init error")
-        self.nodes[1].extra_args = ["-onlynet=abc"]
-        msg = "Error: Unknown network specified in -onlynet: 'abc'"
-        self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
+        self.log.info("Test unknown and removed network names are rejected by 
-onlynet")
+        for network in ["abc", "tor"]:
+            self.nodes[1].extra_args = [f"-onlynet={network}"]
+            msg = f"Error: Unknown network specified in -onlynet: '{network}'"
+            self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
 
         self.log.info("Test passing trailing '=' raises expected init error")
         self.nodes[1].extra_args = ["-proxy=127.0.0.1:9050="]
         msg = "Error: Invalid -proxy address or hostname, ends with '=': 
'127.0.0.1:9050='"
         self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
 
-        self.log.info("Test passing unrecognized network raises expected init 
error")
-        self.nodes[1].extra_args = ["-proxy=127.0.0.1:9050=foo"]
-        msg = "Error: Unrecognized network in -proxy='127.0.0.1:9050=foo': 
'foo'"
-        self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
+        self.log.info("Test unknown, removed and non-SOCKS5 network names are 
rejected by -proxy")
+        for network in ["Foo", "tor", "i2p"]:
+            self.nodes[1].extra_args = [f"-proxy=127.0.0.1:9050={network}"]
+            msg = f"Error: Unrecognized network in 
-proxy='127.0.0.1:9050={network}': '{network}'"
+            self.nodes[1].assert_start_raises_init_error(expected_msg=msg)
 
         self.log.info("Test passing proxy only for IPv6")
         self.start_node(1, extra_args=["-proxy=127.6.6.6:6666=ipv6"])
@@ -470,8 +472,8 @@
         assert_equal(nets["ipv6"]["proxy"], "127.6.6.6:6666")
         self.stop_node(1)
 
-        self.log.info("Test overriding the Onion proxy")
-        self.start_node(1, extra_args=["-proxy=127.1.1.1:1111", 
"-proxy=127.2.2.2:2222=onion"])
+        self.log.info("Test overriding the Onion proxy with a mixed-case 
network suffix")
+        self.start_node(1, extra_args=["-proxy=127.1.1.1:1111", 
"-proxy=127.2.2.2:2222=OnIoN"])
         nets = networks_dict(self.nodes[1].getnetworkinfo())
         assert_equal(nets["ipv4"]["proxy"], "127.1.1.1:1111")
         assert_equal(nets["ipv6"]["proxy"], "127.1.1.1:1111")
@@ -487,6 +489,15 @@
         assert_equal(nets["cjdns"]["proxy"], "")
         self.stop_node(1)
 
+        self.log.info("Test that clearing the IPv4 proxy also clears the name 
proxy")
+        self.start_node(1, 
extra_args=[f"-proxy={self.conf1.addr[0]}:{self.conf1.addr[1]}", 
"-proxy=0=ipv4", "-dns=0"])
+        with self.nodes[1].assert_debug_log(
+            expected_msgs=["trying v1 connection (manual) to 
example.invalid:8333"],
+            unexpected_msgs=["SOCKS5 connecting example.invalid"],
+        ):
+            self.nodes[1].addnode("example.invalid:8333", "onetry", 
v2transport=False)
+        self.stop_node(1)
+
         self.log.info("Test passing too-long unix path to -proxy raises init 
error")
         self.nodes[1].extra_args = [f"-proxy=unix:{'x' * 1000}"]
         if self.have_unix_sockets:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/test/functional/p2p_ibd_txrelay.py 
new/bitcoin-32.1/test/functional/p2p_ibd_txrelay.py
--- old/bitcoin-32.0/test/functional/p2p_ibd_txrelay.py 2026-10-21 
15:21:46.000000000 +0200
+++ new/bitcoin-32.1/test/functional/p2p_ibd_txrelay.py 2026-10-26 
18:57:47.000000000 +0100
@@ -13,19 +13,19 @@
 
 from test_framework.blocktools import create_block
 from test_framework.messages import (
-        CInv,
-        COIN,
-        CTransaction,
-        from_hex,
-        msg_inv,
-        msg_tx,
-        MSG_WTX,
+    CInv,
+    COIN,
+    CTransaction,
+    from_hex,
+    msg_inv,
+    msg_tx,
+    MSG_WTX,
 )
 from test_framework.p2p import (
-        NONPREF_PEER_TX_DELAY,
-        P2PDataStore,
-        P2PInterface,
-        p2p_lock
+    NONPREF_PEER_TX_DELAY,
+    P2PDataStore,
+    P2PInterface,
+    p2p_lock,
 )
 from test_framework.test_framework import BitcoinTestFramework
 
@@ -54,6 +54,9 @@
         block.solve()
         self.nodes[0].submitblock(block.serialize().hex())
         assert self.nodes[0].getblockchaininfo()['initialblockdownload']
+        # BlockConnected is async. Sync while in IBD so a delayed event cannot
+        # add ibd_wtxid to the recently-confirmed filter.
+        self.nodes[0].syncwithvalidationinterfacequeue()
         ibd_wtxid = int(self.nodes[0].getblock(f"{block.hash_int:064x}", 
2)["tx"][0]["hash"], 16)
 
         self.log.info("Check that nodes don't send getdatas for transactions 
while still in IBD")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/bitcoin-32.0/test/functional/rpc_net.py 
new/bitcoin-32.1/test/functional/rpc_net.py
--- old/bitcoin-32.0/test/functional/rpc_net.py 2026-10-21 15:21:46.000000000 
+0200
+++ new/bitcoin-32.1/test/functional/rpc_net.py 2026-10-26 18:57:47.000000000 
+0100
@@ -334,13 +334,13 @@
         assert_equal(res[0]["port"], 8333)
         assert_equal(res[0]["services"], P2P_SERVICES)
 
-        # Test for the absence of onion, I2P and CJDNS addresses.
-        for network in ["onion", "i2p", "cjdns"]:
+        for network in ["onion", "OnIoN", "i2p", "cjdns"]:
             assert_equal(self.nodes[0].getnodeaddresses(0, network), [])
 
         # Test invalid arguments.
         assert_raises_rpc_error(-8, "Address count out of range", 
self.nodes[0].getnodeaddresses, -1)
-        assert_raises_rpc_error(-8, "Network not recognized: Foo", 
self.nodes[0].getnodeaddresses, 1, "Foo")
+        for network in ["Foo", "tor"]:
+            assert_raises_rpc_error(-8, f"Network not recognized: {network}", 
self.nodes[0].getnodeaddresses, 1, network)
 
     def test_addpeeraddress(self):
         self.log.info("Test addpeeraddress")

++++++ bitcoin.obsinfo ++++++
--- /var/tmp/diff_new_pack.0NpQLc/_old  2026-10-27 17:00:47.907221504 +0100
+++ /var/tmp/diff_new_pack.0NpQLc/_new  2026-10-27 17:00:47.911221672 +0100
@@ -1,5 +1,5 @@
 name: bitcoin
-version: 32.0
-mtime: 1792588906
-commit: 465dde277447e2f11e01bea09d2a094d7fb6ef45
+version: 32.1
+mtime: 1793037467
+commit: f0de87f040621468b956f01f526a43a010310501
 

Reply via email to