. #36311

pull JWEB0689 wants to merge 123 commits into bitcoin:master from JWEB0689:31.1-ordinals-patch changing 137 files +6172 −813
  1. JWEB0689 commented at 11:04 PM on September 21, 2026: none

    .

  2. build: bump to 31.0rc1 2a5b96eb54
  3. doc: Generate manpages for 31.0rc1 62716a8c93
  4. examples: Generate example bitcoin.conf for 31.0rc1 88e21e57e5
  5. doc: Point release notes to 31.0 wiki draft c5ae5f0adf
  6. Merge bitcoin/bitcoin#34795: [31.x] Bump to 31.0rc1
    c5ae5f0adf11c9e101a0002ff1d89c26eb75519e doc: Point release notes to 31.0 wiki draft (Ava Chow)
    88e21e57e59ccf94bd78c02c1ce86a5ee87684aa examples: Generate example bitcoin.conf for 31.0rc1 (Ava Chow)
    62716a8c935160de41c40452f04496815bd86c01 doc: Generate manpages for 31.0rc1 (Ava Chow)
    2a5b96eb542800cc0d9dcb0d62c05976491e8b24 build: bump to 31.0rc1 (Ava Chow)
    
    Pull request description:
    
    ACKs for top commit:
      hebasto:
        ACK c5ae5f0adf11c9e101a0002ff1d89c26eb75519e.
      willcl-ark:
        ACK c5ae5f0adf11c9e101a0002ff1d89c26eb75519e
      w0xlt:
        ACK c5ae5f0adf11c9e101a0002ff1d89c26eb75519e
    
    Tree-SHA512: 4aa6484be421276d07daa58394569ef667defc19de50e0622f8754acc83ebbc7cfac7a3afcdeacc3a4f72b3787e603b28df154ebaba883d22312ad7d4f377de3
    d3737769ca
  7. depends: disable Qt sbom generation
    Github-Pull: #34755
    Rebased-From: 168997e9b5720e3c58e2fc1a073d0be3cd39d971
    9852bbd218
  8. depends: delete Boost extra files
    Github-Pull: #34755
    Rebased-From: 0ebc6891e2168c3ff1c9ad2250e765446610e75e
    a3ffff0201
  9. ci: Bump GHA actions versions
    Github-Pull: #34802
    Rebased-From: fadaa7db335d1b1bd2674c51d89d6c0820ddb887
    f7f7e682b5
  10. lint: Temporarily revert to vulture==2.14
    To work around https://github.com/bitcoin/bitcoin/issues/34810
    
    Github-Pull: #34814
    Rebased-From: faae981d354e13de96442159d604a831b6c3a71e
    a74dfe3ae2
  11. ci: bump cirruslabs actions versions
    Github-Pull: #34815
    Rebased-From: 9a968ad35efe04bfd86299c5dfbc48ada41bc46e
    207087b1c4
  12. test: fix addr relay test silent pass and wrong peerinfo index
    the test silently passes on master because SetupAddressRelay
    isn't called by default for inbound connections.
    
    Github-Pull: #34750
    Rebased-From: ecb5ce6e76ef9391d636e7e4f6be7e3f7ed05550
    a3c1eda8f2
  13. test: protect outbound connection from eviction in getaddr_test
    since we're bumping mocktime more than CHAIN_SYNC_TIMEOUT = 20 * 60,
    it's possible for disconnections like this to happen in the test:
    
    $ test/functional/p2p_addr_relay.py --randomseed=7758649581790797022
    ...
    TestFramework (INFO): Check that we answer getaddr messages only once per connection
    TestFramework.p2p (WARNING): Connection lost to 127.0.0.1:58829 due to [Errno 54] Connection reset by peer
    ...
    
    Github-Pull: #34750
    Rebased-From: 7ee8c0abc629f0658b6c36f36b5da11c51cbb39d
    5642a2b0fe
  14. test: use static methods and clarify comment in addr_relay
    we don't need to send GETADDR for initial self announcement
    anymore + can construct addr_receivers using
    AddrReceiver(send_getaddr=False).
    
    however we would need to send an empty ADDR message to each
    of the addr_receivers to initialise addr relay for inbound
    connections. so current code is simpler and we can just
    clarify the comment.
    
    Github-Pull: #34750
    Rebased-From: 57bfa864fe69ea5610399f9db60cf2299930703a
    a28d78c44a
  15. guix: Make guix-clean less destructive
    * Show preview and ask for confirmation before git clean unless used with "--force"
    * Error out when trying to pass args such as "guix-clean --help"
    
    Github-Pull: #34776
    Rebased-From: be6d24ec22cc2ef8086098d6322b024e07c5758c
    2724c39208
  16. build: Set AUTHOR_WARNING on warnings
    Github-Pull: #33144
    Rebased-From: fa6497ba71e9573d341c1c051af09b3ec2fc8d74
    d20ba02caa
  17. macdeploy: subprocess out to zip rather than shutil.make_archive
    Calling shutil.make_archive(), does not preserve symlinks when using the
    zip format, see https://github.com/python/cpython/issues/139679.
    
    Call `zip` using subprocess instead. This code is only run when using a
    macos machine, and I think it's safe to assume that zip is available, same
    as codesign, and all other tools we call in this script.
    
    Github-Pull: #34787
    Rebased-From: ab137cbfe2763f2306e52c7c5f1860d87defc636
    bb9fcffd4c
  18. macdeploy: use plugins dir to find plugins
    Rather than looking for /translations, which might not exist (it doesn't
    in a recent brew installed qt on macOS). i.e:
    ```bash
    ls /opt/homebrew/opt/qtbase/share/qt
    doc
    libexec
    metatypes
    mkspecs
    modules
    plugins
    sbom
    ```
    
    Github-Pull: #34787
    Rebased-From: 66d80d57b48982d8301e21321a9d82780586908d
    ab37d3d7cd
  19. ci: check macos bundle structure and codesigning
    Github-Pull: #34787
    Rebased-From: d03e3be246f64065002268e74ee9a834089de37a
    e3383ac932
  20. ci: Use arch-appropriate binaries in lint install
    Replace the hardcoded x86_64 binary name with $(uname --machine) so the
    correct binary is downloaded when building the lint container, where at
    all possible.
    
    Github-Pull: #34832
    Rebased-From: 551875360cdb3b9997dded22b929039eac635fd0
    a69f8c329e
  21. test: Use asyncio.SelectorEventLoop() over deprecated asyncio.WindowsSelectorEventLoopPolicy()
    Github-Pull: #34820
    Rebased-From: fa9168ffcd6354db6daf759ace123a88fb60cbb2
    c7127f21df
  22. test: Move event loop creation to network thread
    This should fix https://github.com/bitcoin/bitcoin/issues/34367
    
    I am not familiar with Windows sockets thread-safety, but creating the
    event loop on the main thread, and running it in the network thread
    could lead to a fast abort in Python on Windows (without any stderr):
    
    ```
    77/276 - wallet_txn_clone.py failed, Duration: 1 s
    
    stdout:
    2025-12-10T08:04:27.500134Z TestFramework (INFO): PRNG seed is: 4018092284830106117
    
    stderr:
    
    Combine the logs and print the last 99999999 lines ...
    ============
    Combined log for D:\a\_temp/test_runner_₿_🏃_20251210_075632/wallet_txn_clone_196:
    ============
     test  2025-12-10T08:04:27.500134Z TestFramework (INFO): PRNG seed is: 4018092284830106117
     test  2025-12-10T08:04:27.500433Z TestFramework (DEBUG): Setting up network thread
    ```
    
    Also, I couldn't find any docs that require the loop must be created on
    the thread that runs them:
    
    * https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.new_event_loop
    * https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.run_forever
    
    However, the patch seems trivial to review, harmless, and easy to
    revert, so it may be a good try to fix the intermittent Windows Python
    crash.
    
    Github-Pull: #34820
    Rebased-From: fa050da9805d5388ec74e2e0f92e59e861f11918
    72d6c88165
  23. test: Fix intermittent issue in feature_assumeutxo.py
    Github-Pull: #34852
    Rebased-From: 99996f6c06dff19cd99131d0469b84c01c216cbb
    8379f005da
  24. test: [refactor] Use verbosity=0 named arg
    This is less confusing than the verbose=0 alias.
    
    Github-Pull: #34852
    Rebased-From: faf71d6cb49b8a668c417d80bc56277f30cbf2e1
    068951211c
  25. cmake: Migrate away from deprecated SQLite3 target
    CMake version 4.3 deprecated the imported target `Sqlite::Sqlite3`.
    Use the preferred name `Sqlite3::Sqlite3` instead and provide an
    alias for older versions of CMake. Also define the same alias when
    using vcpkg.
    
    Github-Pull: #34848
    Rebased-From: 498b6eb6b5e8aceb372d3097df2715d9c7fc416b
    ca781e49e5
  26. rpc: fix race condition in gettxoutsetinfo
    Fix an assertion failure in gettxoutsetinfo (issue #34263) caused by
    capturing the best block before releasing cs_main, then checking it
    against a potentially newer best block in GetUTXOStats().
    
    Remove the early pindex capture since ComputeUTXOStats() independently
    fetches the current best block under lock. Use stats.hashBlock and
    stats.nHeight (the actual computed values) instead of the potentially
    stale pindex when building the response.
    
    Github-Pull: #34451
    Rebased-From: 5e77072fa60110a00d2bff31798d58b6c10bd3da
    e930c6d60f
  27. kernel: acquire coinstats cursor and block info atomically
    Acquire the cursor and block index under the same cs_main lock to
    eliminate a potential race where a new block could be connected
    between capturing the block info and acquiring the cursor, causing
    the reported stats to reference a different block than the one
    being iterated.
    
    Github-Pull: #34451
    Rebased-From: f3bf63ec4f028cf9ee0820226f44fcbe26d358c9
    335a098afa
  28. ci: Avoid intermittent Windows generate download failures
    Github-Pull: #34859
    Rebased-From: fa71c6e84c16418ffc5568c06aed863027cb238f
    d9a57912c6
  29. tests: applied PYTHON_GIL to the env for every test
    Github-Pull: #34869
    Rebased-From: b14f2c76a1f6b41835c134584c82c45704c4cce0
    7118559f8c
  30. gui: Fix TransactionsView on setCurrentWallet
    Making sure that if the privacy mode is activaded during
    the wallet selection, the transaction view is not shown.
    
    Github-Pull: #gui815
    Rebased-From: 0dc337f73d013e342b880746292f1c3247b287cf
    e53c20d750
  31. depends: Fix cross-compiling on macOS for Windows
    1. Use `build_os` instead of `host_os` for native packages.
    2. `XCODE_VERSION` is available only for `darwin` hosts. Therefore,
       simply disable the Xcode version check for `native_qt`.
    
    Github-Pull: #34878
    Rebased-From: 7a9304f8872eb4183a7a74279a7aefcdac25b468
    3b79852984
  32. depends: Remove no longer necessary `dsymutil`
    Github-Pull: #34850
    Rebased-From: 578525d31d47bad878f8609a04258920b1deab42
    051afe9e1a
  33. test: Scale feature_dbcrash.py timeout with factor
    This allows to run the test under valgrind:
    
    ./bld-cmake/test/functional/feature_dbcrash.py --timeout-factor=10 --valgrind
    
    For testing, the same test can be run multiple times in parallel:
    
    ./bld-cmake/test/functional/test_runner.py -j 10 $( printf 'feature_dbcrash.py %.0s' {1..10} )  --timeout-factor=10 --valgrind
    
    (Running the test under valgrind may take several hours!)
    
    I found that before this commit, 9 out of the 10 runs failed via:
    
    ```
    ...
    TestFramework (INFO): Iteration 36, generating 2500 transactions [11, 5, 6]
    TestFramework (ERROR): Unexpected exception
    Traceback (most recent call last):
      File "/b-c/test/functional/test_framework/test_framework.py", line 142, in main
        self.run_test()
        ~~~~~~~~~~~~~^^
      File "/b-c/bld-cmake/test/functional/feature_dbcrash.py", line 262, in run_test
        self.sync_node3blocks(block_hashes)
        ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
      File "/b-c/bld-cmake/test/functional/feature_dbcrash.py", line 151, in sync_node3blocks
        nodei_utxo_hash = self.restart_node(i, block_hash)
      File "/b-c/bld-cmake/test/functional/feature_dbcrash.py", line 102, in restart_node
        raise AssertionError(f"Unable to successfully restart node {node_index} in allotted time")
    AssertionError: Unable to successfully restart node 0 in allotted time
    ```
    
    With this commit, all 10 runs passed.
    
    Github-Pull: #34589
    Rebased-From: fadb77169bed77e0df8d42d55599615b916ee6e8
    6993aa1915
  34. ci: Clarify why valgrind task has gui disabled
    A build with system libs (or with a normal depends build) will fail
    with:
    
    ```sh
    $ valgrind --exit-on-first-error=yes --error-exitcode=1 --quiet ./bld-cmake/bin/test_bitcoin-qt
    Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
    Qt depends on a UTF-8 locale, and has switched to "C.UTF-8" instead.
    If this causes problems, reconfigure your locale. See the locale(1) manual
    for more information.
    ********* Start testing of AppTests *********
    Config: Using QtTest library 6.10.2, Qt 6.10.2 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 15.2.0), ubuntu 26.04
    PASS   : AppTests::initTestCase()
    QINFO  : AppTests::appTests() Backing up GUI settings to "/tmp/test_common bitcoin/60d474ffae390f81657d/regtest/guisettings.ini.bak"
    ==18007== Conditional jump or move depends on uninitialised value(s)
    ==18007==    at 0x12655E26: ???
    ==18007==    by 0xCB28E7F: ???
    ==18007==
    ==18007==
    ==18007== Exit program on first error (--exit-on-first-error=yes)
    ```
    
    A DEBUG=1 depends build would work, but that seems tedious for
    questionable benefit.
    
    Github-Pull: #34589
    Rebased-From: faf3ef4ee79ba4dc77340f47bf8eb303ef6ac825
    198bc4da87
  35. ci: Temporarily use clang in valgrind tasks
    valgrind currently does not work on GCC -O2 compiled executables, which
    contain std::optional use, due to an upstream bug. See
    https://bugs.kde.org/show_bug.cgi?id=472329
    
    One workaround could be to use -O1. However, that seems brittle, as
    variantions of the bug were seen with -O1 as well.
    
    So temporarily use clang in the valgrind CI tasks, because this also
    allows to drop a false-positive suppression for:
    -DCMAKE_CXX_FLAGS='-Wno-error=array-bounds'
    
    Also, update the comment in contrib/valgrind.supp to mention the
    background:
    
    * GCC -O2 wasn't tested with the suppressions file, due to the mentioned
      bug.
    * Clang-17 (or later) on aarch64 wasn't tested due to bug
      https://github.com/bitcoin/bitcoin/issues/29635 and the minimum
      supported clang version is clang-17 right now.
    * GUI isn't tested, because it requires a debug build, see the prior
      commit.
    
    This means the only tested config right now is the one mentioned in the
    suppression file.
    
    Github-Pull: #34589
    Rebased-From: fa70b9ebaa46b5fedcc02200626499d25762d44a
    d171afa9e8
  36. wallet: fix amount computed as boolean in coin selection
    The comparison is evaluated before the assignment, so total_amount
    ends up holding a boolean instead of the actual amount:
    total_amount = (a - b < c)
    which is not what we want here. This has been working by accident.
    
    Github-Pull: #34888
    Rebased-From: 0026b330c4abbbbdb96e4f0c4d380d70d8e592ab
    11b69922b3
  37. wallet: feebumper, fix crash when combined bump fee is unavailable
    When a large cluster of unconfirmed transactions exceeds the limit,
    calculateCombinedBumpFee() returns std::nullopt.
    
    Previously, we continued executing and the optional value was
    accessed unconditionally, leading to a std::bad_optional_access
    exception.
    
    Fix this by returning early when the returned bumped fee is null.
    
    Note:
    This is a crash for the GUI, and an uncaught exception for the RPC
    bumpfee and psbtbumpfee.
    
    Github-Pull: #34870
    Rebased-From: 6072a2a6a1fdde8444e3515f0d201de3fb3923a1
    87d1691f3e
  38. test: Remove confusing assert_debug_log in wallet_reindex.py
    Github-Pull: #34857
    Rebased-From: fa30951af5b174a1ee5e1c23d84b115c542a9570
    e3d571691a
  39. test: verify createNewBlock wakes promptly when tip advances
    This adds a complementary test to interface_ipc_mining.py to ensure
    that createNewBlock() wakes up immediately once submitblock advances
    the tip, rather than needlessly waiting for the cooldown timer to
    expire on its own.
    
    Github-Pull: #34727
    Rebased-From: 4ada575d6c6880f7d302c1f37581a82f394c0b5e
    acd7e3d061
  40. test: move make_mining_ctx to ipc_util.py
    The async routines in both interface_ipc.py and interface_ipc_mining.py
    contain redundant code to initialize the mining proxy object.
    
    Move the make_mining_ctx helper into test_framework/ipc_util.py and
    update both test files to use it. This removes the boilerplate and
    prevents code duplication across the IPC test suite.
    
    Github-Pull: #34727
    Rebased-From: 63684d6922e5c034ff620d23c35ba175edae49c4
    660947352c
  41. test: verify IPC error handling for invalid coinbase
    Add a test case to interface_ipc_mining.py to verify that the IPC
    server correctly handles and reports serialization errors rather than
    crashing the node.
    
    This covers the scenario where submitSolution is called with data
    that cannot be deserialized, as discussed in #33341
    
    Also introduces the assert_capnp_failed helper in ipc_util.py to
    cleanly handle macOS-specific Cap'n Proto exception strings, and
    refactors an existing block weight test to use it.
    
    Github-Pull: #34727
    Rebased-From: e7a918b69a5e6aaf3f02ca84ca6cde14401928ed
    39c87621d5
  42. test: scale IPC mining wait timeouts by timeout_factor
    The IPC mining tests (interface_ipc_mining.py) currently use
    hardcoded timeouts (e.g., 1000ms, 60000ms) for operations like
    waitTipChanged and waiting for block templates. In heavily
    loaded CI environments, such as those running sanitizers with
    high parallelism, these hardcoded timeouts can be too short,
    leading to spurious test failures and brittleness.
    
    This commit multiplies these timeout variables by the test
    suite's global `self.options.timeout_factor`. This ensures that
    the IPC wait conditions scale appropriately when the test suite
    is run with a higher timeout factor, making the tests robust
    against slow execution environments.
    
    Addresses CI brittleness observed in bitcoin-core/libmultiprocess#253.
    
    Github-Pull: #34727
    Rebased-From: ad75b147b5c3ab5eac268a1c1ced23894a8a79ba
    ac13aca72b
  43. build: bump version to v31.0rc2 a30e50538b
  44. doc: update manual pages for v31.0rc2 718c31cfb7
  45. doc: update example bitcoin conf for 31.0rc2 b241f3c82d
  46. Merge bitcoin/bitcoin#34800: [31.x] Backports
    b241f3c82d5a11eafc493b8faaa8cb5461a5199a doc: update example bitcoin conf for 31.0rc2 (fanquake)
    718c31cfb73e03cc624a4a18bf2d8053b6ac2556 doc: update manual pages for v31.0rc2 (fanquake)
    a30e50538b618e2ae0a15cab44cbca1600224d9c build: bump version to v31.0rc2 (fanquake)
    ac13aca72bec934461c6bcaa3f5504ec452d255b test: scale IPC mining wait timeouts by timeout_factor (Enoch Azariah)
    39c87621d554a3bec6c6d22f3fcdf6b9d3775aba test: verify IPC error handling for invalid coinbase (Enoch Azariah)
    660947352cdac99add7341334f57b3ce29f97865 test: move make_mining_ctx to ipc_util.py (Enoch Azariah)
    acd7e3d061ad25d1c39345aad6bfe0be6a89bbaa test: verify createNewBlock wakes promptly when tip advances (Enoch Azariah)
    e3d571691ae4a5d799d64fbb945774b57a2e17f7 test: Remove confusing assert_debug_log in wallet_reindex.py (MarcoFalke)
    87d1691f3e7ba27435f50e5bfaeac69cc77c66ca wallet: feebumper, fix crash when combined bump fee is unavailable (furszy)
    11b69922b3562a39d6bf9c605c439e9a5f708099 wallet: fix amount computed as boolean in coin selection (furszy)
    d171afa9e8d494ec198ba8c856dd98cce6344eb0 ci: Temporarily use clang in valgrind tasks (MarcoFalke)
    198bc4da872d20ccff798b900b55c0c596aae72d ci: Clarify why valgrind task has gui disabled (MarcoFalke)
    6993aa19152c3b2c7831a05b41c3659004b462b8 test: Scale feature_dbcrash.py timeout with factor (MarcoFalke)
    051afe9e1a00691275402105ad51ac5037282b24 depends: Remove no longer necessary `dsymutil` (Hennadii Stepanov)
    3b7985298462bc1fa7c924d0da407f2ad5a87029 depends: Fix cross-compiling on macOS for Windows (Hennadii Stepanov)
    e53c20d75073fffb0b1564990790e80614f0b87a gui: Fix TransactionsView on setCurrentWallet (pablomartin4btc)
    7118559f8cc12aaf5359838990852712f65f6b40 tests: applied PYTHON_GIL to the env for every test (kevkevinpal)
    d9a57912c663842d38a8fbc0cda3888984334a2d ci: Avoid intermittent Windows generate download failures (MarcoFalke)
    335a098afa334a7c7355fdfb9de409c716c2fb2b kernel: acquire coinstats cursor and block info atomically (w0xlt)
    e930c6d60fe283f9e49746184caef99275864141 rpc: fix race condition in gettxoutsetinfo (w0xlt)
    ca781e49e599512704f17fabd09532f36a15cb53 cmake: Migrate away from deprecated SQLite3 target (Daniel Pfeifer)
    068951211cf3c757bfb0366c7b34c04a661555fc test: [refactor] Use verbosity=0 named arg (MarcoFalke)
    8379f005da18c8e822ec24e28d4517210fee4f8e test: Fix intermittent issue in feature_assumeutxo.py (MarcoFalke)
    72d6c88165ddabd167d7f024c1942dab659e4605 test: Move event loop creation to network thread (MarcoFalke)
    c7127f21df8ce75c14a57568297aa057c69864ce test: Use asyncio.SelectorEventLoop() over deprecated asyncio.WindowsSelectorEventLoopPolicy() (MarcoFalke)
    a69f8c329e17d8928b554cbb65fc4b4f770cf954 ci: Use arch-appropriate binaries in lint install (will)
    e3383ac93278e56e8cf0b5328156d04a005751c4 ci: check macos bundle structure and codesigning (fanquake)
    ab37d3d7cd3e1559e8a975fab18e4cb8a299452d macdeploy: use plugins dir to find plugins (fanquake)
    bb9fcffd4c5c486628e2a284741525fd9fcca491 macdeploy: subprocess out to zip rather than shutil.make_archive (fanquake)
    d20ba02caa46f13f2a7df64fa9bcb4b7b274fbcf build: Set AUTHOR_WARNING on warnings (MarcoFalke)
    2724c392080985b02e73e5be3d40813a5e3e2c12 guix: Make guix-clean less destructive (Hodlinator)
    a28d78c44a18e230e1a95b5eaf240e12471b1b1b test: use static methods and clarify comment in addr_relay (stratospher)
    5642a2b0fed316be1e6bda77ed6446d4cadf123c test: protect outbound connection from eviction in getaddr_test (stratospher)
    a3c1eda8f2f530f027110aaf31dfecd75874a977 test: fix addr relay test silent pass and wrong peerinfo index (stratospher)
    207087b1c4f007e067dab137a3e828187b6e70b3 ci: bump cirruslabs actions versions (will)
    a74dfe3ae2427ae1eb72e8f09227d146c9e64c60 lint: Temporarily revert to vulture==2.14 (MarcoFalke)
    f7f7e682b5e4be54aee579bf9183e1ba927ea157 ci: Bump GHA actions versions (MarcoFalke)
    a3ffff0201df4c3aec714afa485d652ebd60545f depends: delete Boost extra files (fanquake)
    9852bbd2185e1aa005a98c9908338acfcacaa6b3 depends: disable Qt sbom generation (fanquake)
    
    Pull request description:
    
      Backports:
      * #33144
      * #34451
      * #34589
      * #34727
      * #34750
      * #34755
      * #34776
      * #34787
      * #34802
      * #34814
      * #34815
      * #34820
      * #34852
      * #34832
      * #34848
      * #34850
      * #34857
      * #34859
      * #34869
      * #34870
      * #34878
      * #34888
    
      Gui:
      * https://github.com/bitcoin-core/gui/pull/815
    
    ACKs for top commit:
      Sjors:
        ACK b241f3c82d5a11eafc493b8faaa8cb5461a5199a
      achow101:
        ACK b241f3c82d5a11eafc493b8faaa8cb5461a5199a
    
    Tree-SHA512: bb68f5b6e569781805c741d63a6ad6f955c1964d9186defa892936160e8444900f1e4175a1ef4fff268b655d664ddf0b914795ef554ea60cb23a054b080b4805
    f0e2cbc5e5
  47. Merge bitcoin/bitcoin#34952: Update libmultiprocess subtree in 31.x branch to fix race conditions on disconnects
    2478a15ef966cc93d47dd0f461a44be39bc51534 Squashed 'src/ipc/libmultiprocess/' changes from 1868a84451f..70f632bda8f (Ryan Ofsky)
    
    Pull request description:
    
      This PR is a backport of #34804 to the 31.x branch. (Both PR's point to the same source branch, they just have different target branches.) Some previous discussion about whether these changes should be merged into 31.x happened in https://github.com/bitcoin-core/libmultiprocess/pull/249#issuecomment-4118596442. The changes fix some IPC crashes that can happen with broken clients and unlucky thread timing that have only been seen in tests and antithesis runs, but the fixes are fairly simple and seem unlikely to cause new problems. The other changes in the PR are mostly CI/documentation/test changes and should also be safe.
    
      Includes:
    
      - https://github.com/bitcoin-core/libmultiprocess/pull/246
      - https://github.com/bitcoin-core/libmultiprocess/pull/242
      - https://github.com/bitcoin-core/libmultiprocess/pull/247
      - https://github.com/bitcoin-core/libmultiprocess/pull/251
      - https://github.com/bitcoin-core/libmultiprocess/pull/255
      - https://github.com/bitcoin-core/libmultiprocess/pull/258
      - https://github.com/bitcoin-core/libmultiprocess/pull/262
      - https://github.com/bitcoin-core/libmultiprocess/pull/253
      - https://github.com/bitcoin-core/libmultiprocess/pull/263
      - https://github.com/bitcoin-core/libmultiprocess/pull/256
      - https://github.com/bitcoin-core/libmultiprocess/pull/264
      - https://github.com/bitcoin-core/libmultiprocess/pull/249
      - https://github.com/bitcoin-core/libmultiprocess/pull/265
    
      The main change is https://github.com/bitcoin-core/libmultiprocess/pull/249 which fixes 3 intermittent race conditions detected in bitcoin core CI and antithesis: #34711/#34756, #34777, and #34782.
    
      The changes can be verified by running `test/lint/git-subtree-check.sh src/ipc/libmultiprocess` as described in [developer notes](https://github.com/bitcoin/bitcoin/blob/master/doc/developer-notes.md#subtrees) and [lint instructions](https://github.com/bitcoin/bitcoin/tree/master/test/lint#git-subtree-checksh)
    
    ACKs for top commit:
      Sjors:
        ACK 613a548648880314e78c3045d0ded12e29a4f036
    
    Tree-SHA512: 54358428dc5a9cea84c3e816136ab828e702fc04b5af03cfd81c60522f1de491bf4867aed2e6c6791da2725dff2004b398ebbf42dd882cc22a5912bc5945cb6e
    7375940eb2
  48. fuzz: Remove unused g_setup pointers
    These are unused and removing them avoids clang warnings like:
    
    src/test/fuzz/deserialize.cpp:42:26: error: variable g_setup set but not used [-Werror,-Wunused-but-set-variable]
    
    Github-Pull: #34918
    Rebased-From: fabbfec3b00c138a28034a4f5594305d2220b9bb
    98551a0efd
  49. fuzz: Use CAmount for storing best_waste
    Waste is a CAmount, which is an int64_t. This will overflow an int, so
    `best_waste` should also be a `CAmount`.
    
    Github-Pull: #34939
    Rebased-From: 890a09b1e49925315a5636f29cc5af36928fe092
    f3b64aa405
  50. depends, qt: Fix build on aarch64 macOS 26.4
    Github-Pull: #34956
    Rebased-From: 3aeccb7d739c7e9a82c95fbc8f5647ea85a79635
    56cdeab8b5
  51. kernel: Remove NONNULL annotation from destroy method
    No other *_destroy function in the Kernel API carries this annotation.
    Following the convention set by free(), destroy functions should accept
    null pointers.
    
    Github-Pull: #34982
    Rebased-From: 75608547b469b72caa890c8b356d0d3284998701
    f0e1014c39
  52. guix: Clean up module list in manifest
    These modules are no longer in use:
    1. `cmake-build-system` since bitcoin/bitcoin#34550.
    2. `gnu-build-system` since bitcoin/bitcoin#34627.
    3. `download` since bitcoin/bitcoin#34550.
    4. `cc-for-target` from `utils` since bitcoin/bitcoin#34627.
    
    Github-Pull: #34944
    Rebased-From: 325f743eedd25be268f74b9cf91198f50d2b3cf0
    ef10b2ec65
  53. Merge bitcoin/bitcoin#34942: [31.x] Backports
    ef10b2ec6573a35f5ef71133ae444b09b3040e33 guix: Clean up module list in manifest (Hennadii Stepanov)
    f0e1014c396c80cc946beff719af04ebfd482f82 kernel: Remove NONNULL annotation from destroy method (Alexander Wiederin)
    56cdeab8b548d6ab09660e239b6d1c12177340eb depends, qt: Fix build on aarch64 macOS 26.4 (Hennadii Stepanov)
    f3b64aa405369a92ecafcf2e08c6ac659d5a4da0 fuzz: Use CAmount for storing best_waste (Ava Chow)
    98551a0efdccd27d9e4c1e45a9b3d02f02aaf8bf fuzz: Remove unused g_setup pointers (MarcoFalke)
    
    Pull request description:
    
      Backports:
      * #34918
      * #34939
      * #34944
      * #34956
      * #34982
    
    ACKs for top commit:
      marcofleon:
        ACK ef10b2ec6573a35f5ef71133ae444b09b3040e33
      w0xlt:
        ACK ef10b2ec6573a35f5ef71133ae444b09b3040e33
    
    Tree-SHA512: 2d763deff7fa154fd697630bdb61644d4908b02b4a583cb648aeb9493009417d6d02367300e6d16d1c3b7ef8296b2411e1e96f8e67ef54fcd2fca4a415b97170
    e7d520dcc6
  54. Squashed 'src/ipc/libmultiprocess/' changes from 70f632bda8..3edbe8f67c
    3edbe8f67c Merge bitcoin-core/libmultiprocess#268: Use throwRecoverableException instead of raw throw for stored exceptions
    23be44b0d3 Use throwRecoverableException instead of raw throw for stored exceptions
    75c2a2764c Merge bitcoin-core/libmultiprocess#266: test: increase spawn test child timeout to 30 seconds
    8b5f805301 Merge bitcoin-core/libmultiprocess#267: doc: Bump version 9 > 10
    cc0b23fc32 test: increase spawn test child timeout to 30 seconds
    050f878db8 doc: Improve versions.md descriptions and formatting
    c6a288a889 doc: Bump version 9 > 10
    
    git-subtree-dir: src/ipc/libmultiprocess
    git-subtree-split: 3edbe8f67c182dde91c0050065d79ae268722489
    1bc22a38a8
  55. Update libmultiprocess subtree to latest master 0df3ce87d9
  56. test: remove macOS REDUCE_EXPORTS exception workaround
    The underlying issue was fixed in bitcoin-core/libmultiprocess#268.
    
    Remove the workaround that accepted degraded error messages on Darwin.
    
    Github-Pull: #35014
    Rebased-From: b555a0b789fa4f21875e4fa356cd9455aef16879
    afa8ba04e0
  57. build: bump version to v31.0rc3 275843f2a6
  58. doc: update manual pages for v31.0rc3 c168baec80
  59. Merge bitcoin/bitcoin#35028: [31.x] Backports + rc3
    c168baec80960a8118bdc553839f7c122e1ce471 doc: update manual pages for v31.0rc3 (fanquake)
    275843f2a61cf1c676a12b774157c27aaeccf286 build: bump version to v31.0rc3 (fanquake)
    afa8ba04e00029241d361142a801c9a8394d5340 test: remove macOS REDUCE_EXPORTS exception workaround (Alfonso Roman Zubeldia)
    1bc22a38a8f613676f1b513cb74f7ad8ed2b7e3e Squashed 'src/ipc/libmultiprocess/' changes from 70f632bda8..3edbe8f67c (fanquake)
    
    Pull request description:
    
      Backports:
      * #35014
    
      Also contains a libmultiprocess subtree pull.
      Also bumps to `rc3` + regens manpages.
    
    ACKs for top commit:
      Sjors:
        utACK c168baec80960a8118bdc553839f7c122e1ce471
      hebasto:
        ACK c168baec80960a8118bdc553839f7c122e1ce471.
      marcofleon:
        ACK c168baec80960a8118bdc553839f7c122e1ce471
    
    Tree-SHA512: 88aaef85a6ce6018fe5233d5a4a46d75c57914af9ff41158b85533ddf5e42df45ed7f6cbfdbffe2c4d2db6853af1ff4473440ab5ecc62c9cadf070f5cdcab883
    cc14d7ad3e
  60. guix: Restore download and build-system-cmake modules
    The time-machine commit in 31.x still requires these modules for the
    build to work.
    2937d4ba41
  61. build: bump version to v31.0rc4 7d56e1017d
  62. doc: update manpages for v31.0rc4 4a5fdb0d88
  63. Merge bitcoin/bitcoin#35034: [31.x] Fix guix build and rc4
    4a5fdb0d88aedec3b0147ba38cb2dea6f4dcb186 doc: update manpages for v31.0rc4 (Ava Chow)
    7d56e1017db77c46bd82d2fd1d8ff2ab5311815c build: bump version to v31.0rc4 (Ava Chow)
    2937d4ba417e20b84bde80e7189a683412b348d5 guix: Restore download and build-system-cmake modules (Ava Chow)
    
    Pull request description:
    
      Restoring missing guix modules required for guix building to work, and bump to rc4.
    
    ACKs for top commit:
      davidgumberg:
        ACK https://github.com/bitcoin/bitcoin/pull/35034/commits/4a5fdb0d88aedec3b0147ba38cb2dea6f4dcb186
      hebasto:
        ACK 4a5fdb0d88aedec3b0147ba38cb2dea6f4dcb186, the Guix manifest has been processed for `x86_64-w64-mingw32` without errors on my machine.
    
    Tree-SHA512: e7bbf17fc761b926fedea076b85a103e146c22d6dbad645ab087472daa78d8728dcfacf49103bb979652144da74e94e7e5878e05c9ef04b101ce96b234689ddb
    c96d9c28b3
  64. build: Bump to 31.0 bd40a32411
  65. doc: update manpages for v31.0 6a25f3e3d4
  66. doc: 31.0 release notes e9f1466155
  67. Merge bitcoin/bitcoin#35042: [31.x] Finalize 31.0
    e9f1466155849d886faaf89b2ccf1a0a46b9b1fe doc: 31.0 release notes (Ava Chow)
    6a25f3e3d43877f3da91c808754c8f1d7a131db9 doc: update manpages for v31.0 (Ava Chow)
    bd40a3241144b25fb69f5e345d4bd9cef7ab537b build: Bump to 31.0 (Ava Chow)
    
    Pull request description:
    
      Final steps for 31.0, assuming rc4 has no major issues.
    
    ACKs for top commit:
      hebasto:
        ACK e9f1466155849d886faaf89b2ccf1a0a46b9b1fe.
      janb84:
        ACK e9f1466155849d886faaf89b2ccf1a0a46b9b1fe
    
    Tree-SHA512: 1d712ee30f28df62c3c5cee8c2369c55b31a015b8184dbbc2a6fcfd887519c79970b257f8325b8d8bb61610c8dc92b64439de24cc35e31761fb737059c99a107
    6574cb4086
  68. net_processing: don't modify addrman for private broadcast connections
    It is best if the internal addrman database is not modified with
    information coming from private broadcast connections because that
    information can potentially later be sent via other connections.
    
    Co-authored-by: Greg Sanders <gsanders87@gmail.com>
    Co-authored-by: Lőrinc <pap.lorinc@gmail.com>
    
    Github-Pull: #35032
    Rebased-From: 1ed1a124028aa6783ecdd8c82083a3d7a6a16e53
    27e5a3020a
  69. test: Add missing self.options.timeout_factor scale in tool_bitcoin_chainstate.py
    Apply the timeout factor inside the add_block function.
    
    Also, force named args for the two expected strings.
    
    Also, add trailing comma for style.
    
    Github-Pull: #35080
    Rebased-From: fa02eb87df0b4a615a3e027711326f5506e5507a
    20480f5eb9
  70. test: Add clean shutdown to Socks5Server
    The `Socks5Server` utility handles multiple incoming connections,
    which are handled in separate background threads.
    The `stop()` method unblocks and waits for the main background thread
    cleanly, but it doesn't attempt to wait for any handler threads.
    This change stores handler threads and connections, and attempts
    to shut them down before `stop()` returns.
    
    Co-authored-by: vasild <vd@FreeBSD.org>
    Co-authored-by: w0xlt <94266259+w0xlt@users.noreply.github.com>
    
    Github-Pull: #34863
    Rebased-From: 6ac49373aac1228e427e17a4b7b38fc1ba029208
    e1545b56b9
  71. test: Add is_connected_to helper
    Needed in the next commit.
    
    Co-Authored-By: David Gumberg <davidzgumberg@gmail.com>
    
    Github-Pull: #34425
    Rebased-From: faa404e119c54526077b056f6f380782e64986c4
    332d2a2ef2
  72. test: Stricter checks in rpc_setban.py
    Make the checks stricter and easier to follow:
    * Fix a typo.
    * After the first ban from node 1 wait until node 0 "sees" the ban.
    * Move the restart_node out of the debug log context, to avoid bloat.
    * Removed the timeout from the outer/lower exit stack to check "dropped
      (banned)\n" on node 1, because the inner/top exit stack waits longer.
    * The inner/top exit stack checks for the both disconnections peer=2 and
      possibly peer=3 (for v2->v1 retry).
    * And finally, add a redundant assert to confirm once more that node 0
      is has "seen" the ban.
    
    Github-Pull: #34425
    Rebased-From: fa21edddb2722f7188130e56b06985ee2ec3ec1c
    402f347fd5
  73. test: Fix all races after a socket is closed gracefully
    This waits for any disconnect (e.g. from a restart of one of the nodes)
    to fully happen before the next connect.
    
    Can be reviewed with the git option:
    
    --color-moved=dimmed-zebra
    
    Github-Pull: #34425
    Rebased-From: fab27726478d686dcd66d26d3b7b34aa323b8066
    bb536df042
  74. test: Remove unused, confusing and brittle connect_nodes.wait_for_connect
    The option is unused since the last removals in:
    * 4c40a923f003420193aa574745f70788bcf35265, and
    * 81bf3ebff7e7108bbfbf6fe4e122f4e52f278701
    
    It was brittle and lead to intermittent test issues. Generally, it is
    also confusing, because if a test wanted to connect nodes without
    checking their connection, it can use `addnode`, like the rpc_setban.py
    test.
    
    So fix all issues by removing it.
    
    Github-Pull: #34425
    Rebased-From: fae807ed25561bab7148c5a0d7bd847314c79d88
    ab19213660
  75. multi_index: fix compilation failure with boost >= 1.91
    This effectively reverts a3cb309e7c31853f272bffaa65fb6ab0a7cc4083 from PR #30194.
    
    That PR reduced the multi_index type signatures as recommended upstream, but
    this is no longer supported as of boost 1.91 because it is no longer necessary.
    1.91 drops support for the pre-c++11 work-arounds that bloated the type
    signatures to begin with.
    
    The upstream `BOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT` define is meant to provide
    compatibility with removed features, but it does not work for this case. Using
    `indexed_by` directly when defining the `multi_index` (as opposed to inheriting
    from it) works with all versions, and avoids the use of the back-compat define.
    
    This is a slight regression when building against boost < 1.91 because the
    bloated type signatures are reintroduced in that case, but it's not significant
    enough to go to the trouble of introducing version detection and ifdefs.
    
    Github-Pull: #35175
    Rebased-From: 0bc9d354dfd8074d1c36a891a69b6585a8775c65
    2eafae9dc1
  76. validation: correct lifetime of precomputed tx data
    This makes sure `txsdata` always outlives the Script check queue (since local
    objects are destructed in reverse order of construction).
    
    This is the root cause for a security vulnerability reported by Cory Fields in
    2024 that could be exploited by crafting an invalid block to cause nodes to
    read freed memory. The vulnerability was covertly fixed in commit
    `492e1f09943fcb6145c21d470299305a19e17d8b`.
    
    See security advisory for CVE-2024-52911 for more details.
    
    Github-Pull: #35209
    Rebased-From: 1ed799fb21db51a12cbd5579420a61b9b5b3ee7d
    0cedd6abf2
  77. ci: unconfine seccomp for i686 no IPC
    Docker 29.4.2 blocks `socketcall(2)` in the default seccomp profile:
    https://docs.docker.com/engine/release-notes/29/#2942
    https://github.com/moby/profiles/releases/tag/seccomp%2Fv0.2.2
    https://github.com/moby/moby/pull/52501
    
    That affects the `i686, no IPC` job because it runs 32-bit Linux test binaries inside Docker.
    
    Add Docker's documented `--security-opt seccomp=unconfined` workaround to this job's `CI_CONTAINER_CAP` - the hook `ci/test/02_run_container.py` already appends to `docker run`.
    
    This restores socket availability for the 32-bit test binaries throughout the job:
    https://docs.docker.com/engine/security/seccomp/#run-without-the-default-seccomp-profile
    
    Github-Pull: #35202
    Rebased-From: 11c9ef92a8daf030f75f88f324396b2248c65a64
    1bb9c40bb8
  78. doc: update release notes for v31.x 6bb2b07587
  79. Merge bitcoin/bitcoin#35046: [31.x] Backports
    6bb2b07587d31f844072cf65a95b40a5cceabf62 doc: update release notes for v31.x (fanquake)
    1bb9c40bb8a3e94d3bf5d9e94002aff3813944dc ci: unconfine seccomp for i686 no IPC (Lőrinc)
    2eafae9dc1bd0f37f42608f2881b81c22fcf3cbc multi_index: fix compilation failure with boost >= 1.91 (Cory Fields)
    ab19213660c9415050528a7e4f57c13deaa36939 test: Remove unused, confusing and brittle connect_nodes.wait_for_connect (MarcoFalke)
    bb536df042499ac5d0aaaeefcd672520f6205d80 test: Fix all races after a socket is closed gracefully (MarcoFalke)
    402f347fd5e09b8ece1f63dc8a4e160e872f594e test: Stricter checks in rpc_setban.py (MarcoFalke)
    332d2a2ef2f3bd64808d914ceec08135f3eae7f2 test: Add is_connected_to helper (MarcoFalke)
    e1545b56b9fbb268dcd2a3a6fd842be1b13e1b29 test: Add clean shutdown to Socks5Server (optout)
    20480f5eb9cdd451d2fb6e1529a3fae5b733bbc9 test: Add missing self.options.timeout_factor scale in tool_bitcoin_chainstate.py (MarcoFalke)
    27e5a3020a98c04978e8053b5678ed8dd6a86f5f net_processing: don't modify addrman for private broadcast connections (Vasil Dimov)
    
    Pull request description:
    
      Backports:
      * #34425
      * #34863
      * #35032
      * #35080
      * #35175
      * #35202
    
    ACKs for top commit:
      achow101:
        ACK 6bb2b07587d31f844072cf65a95b40a5cceabf62
    
    Tree-SHA512: ea6827e7a1643f96e27ab5f26621f9d4c137df2cb03938d96f7bee82d11f66a61757c609a604653469a4699b3417a1659395d039bbf4348988c2ea4a34a26418
    42800d93a4
  80. Merge bitcoin/bitcoin#35210: [31.x] validation: correct lifetime of precomputed tx data
    0cedd6abf22866103ea852edb871d463f7ba1222 validation: correct lifetime of precomputed tx data (Antoine Poinsot)
    
    Pull request description:
    
      This backports #35209 to the version 31 branch.
    
    ACKs for top commit:
      fanquake:
        ACK 0cedd6abf22866103ea852edb871d463f7ba1222
    
    Tree-SHA512: 12e3b73c5e2e5b49d9abd9d3dcf9aee98f98fcaa1d9f05ae8fe4e7d19bef5a22dad0eafd51acf9720b215c4d166dae2931a45528ac362e5cdb953c690febea96
    24bfb2c8be
  81. test: fix send_batch_request to pass callables when using --usecli
    send_batch_request() was building raw dicts without a "jsonrpc" version, which made Core to treat them as version 1.0 requests.
    This worked in normal mode, but failed with --usecli because TestNodeCLI.batch() expects callables, not dicts.
    
    This commit fixes it by using get_request() which is defined in both AuthServiceProxy and TestNodeCLIAttr.
    The assert is changed because by using get_reques() AuthServiceProxy treats it as "jsonrpc" version 2.0 requests, which don't return "error" keys.
    
    Github-Pull: #34991
    Rebased-From: 5603ae0ffa3f0be3d22e8a09008e46c5d48ae12f
    9d42e868fe
  82. ci: add --extended when using --usecli
    Add the flag --extended to a test (00_setup_env_i686_no_ipc.sh) with the --usecli flag to cover all tests with --usecli.
    
    Github-Pull: #34991
    Rebased-From: a49bc1e24e69ac43beecbdc9c39da3d02160034e
    56190e5c5c
  83. depends: Unset `SOURCE_DATE_EPOCH` in `gen_id` script
    Github-Pull: #34228
    Rebased-From: 9f7a2293c48f8afb5e87765a327a0c89fd21fa56
    64ba4e2a3b
  84. ci: Move --usecli --extended from i386 task to alpine task
    Github-Pull: #35230
    Rebased-From: fad61896e869fe004cb1ebdacbd124ce587e6efc
    313a225fef
  85. test: fix P2SH output in coins cache fuzz
    The `coinscache_sim` fuzz target builds a 23-byte P2SH scriptPubKey manually.
    Place `OP_EQUAL` at index 22, after `OP_HASH160`, the 20-byte push opcode, and the 20-byte script hash.
    This matches `CScript::IsPayToScriptHash()`, which checks byte 22 for `OP_EQUAL`, see src/script/script.cpp#L229
    
    Github-Pull: #35218
    Rebased-From: ac58e6c53c262e08584cb809daf3fbc8dd4d3732
    5022e9d411
  86. wallet: check BDB last page LSN
    The BDB metadata field `last_page` stores the last valid page number, not the number of pages.
    The read-only wallet migration parser currently checks reset LSNs with a half-open loop, so it skips the final page and may accept a database whose last page still depends on BDB log files.
    
    Github-Pull: #35227
    Rebased-From: e2b0984f99519f76423ce26ce9077ca765b2b30b
    409b2d8475
  87. doc: mention -DWITH_ZMQ=ON in BSD build guides
    The FreeBSD, NetBSD, and OpenBSD build guides state that ZMQ support is compiled in when the package is installed. Since WITH_ZMQ defaults to OFF, update the wording to mention the required CMake option.
    
    Github-Pull: #35283
    Rebased-From: ca93ab808c488324990eb91ed8297a37dd10d580
    e379148a7a
  88. fuzz: Fix txorphan timeout by limiting block weight
    Github-Pull: #35289
    Rebased-From: 004a7e3cfbc5b2118536651d2201cf8b72c87736
    7a97580997
  89. contrib: Fix NameError in signet miner gbt()
    The logging.warning call referenced `bci["bestblockhash"]`, a variable
    from the calling scope `do_generate()` that is not available inside the
    `Generate.gbt()` method. This would crash with a NameError when
    getblocktemplate returned a template based on an unexpected previous
    block.
    
    Use the `bestblockhash` parameter that was already being passed in and
    used correctly in the comparison on the line above.
    
    The bug was introduced in 7b31332370 when the gbt logic was extracted
    into its own method — the if-condition was updated but the logging
    call was not.
    
    Github-Pull: #35044
    Rebased-From: 701bc2dc02f73a10498ecf70c5d3523e0bb6b953
    0449061877
  90. doc: update release notes for v31.x 506051cc60
  91. Merge bitcoin/bitcoin#35231: [31.x] Backports
    506051cc6068be68547cad5fed33f9e5c342fa5d doc: update release notes for v31.x (fanquake)
    04490618774bbf3db92fb8e472f54a1951573c0f contrib: Fix NameError in signet miner gbt() (Torkel Rogstad)
    7a975809975834b49209f5d854c877b6dd9e81de fuzz: Fix txorphan timeout by limiting block weight (marcofleon)
    e379148a7acae6e0c57eeb6fb57b03797986cbee doc: mention -DWITH_ZMQ=ON in BSD build guides (junbyjun1238)
    409b2d847597a3e6a3a4c0d74c59650a06692dff wallet: check BDB last page LSN (Lőrinc)
    5022e9d411f5c49dffc7cc15a411e83675ca2a4b test: fix P2SH output in coins cache fuzz (Lőrinc)
    313a225fef550c9dded3ead4303436b3ae10bd4e ci: Move --usecli --extended from i386 task to alpine task (MarcoFalke)
    64ba4e2a3b6d8ce06348f83909aa08f4ddeb46c9 depends: Unset `SOURCE_DATE_EPOCH` in `gen_id` script (Hennadii Stepanov)
    56190e5c5ce6a37378391d77c5df951ce9064c78 ci: add --extended when using --usecli (Pol Espinasa)
    9d42e868fe4cf7be19dbcdbab4f9f7c6407bd775 test: fix send_batch_request to pass callables when using --usecli (Pol Espinasa)
    
    Pull request description:
    
      Backports
      * #34228
      * #34991
      * #35044
      * #35218
      * #35227
      * #35230
      * #35283
      * #35289
    
    ACKs for top commit:
      marcofleon:
        ACK 506051cc6068be68547cad5fed33f9e5c342fa5d
      willcl-ark:
        ACK 506051cc6068be68547cad5fed33f9e5c342fa5d
    
    Tree-SHA512: 7c0b5294ccfcd210d78c21218d5e811dfa06c13ea3d5b9e4daffa397f1ea02e463fe53503900f6c330d104f407d07b4f95cb3d33a73c064da5a8acae21c7b3c1
    dbaf0f4fd3
  92. psbt, test: remove address type restrictions in test
    Because the corresponding Taproot fields were added in PSBT in PR 22558, so
    these restrictions are no longer necessary.
    
    Github-Pull: #35279
    Rebased-From: 81348576cc411a63da295a10a3846302419a18e0
    101071722e
  93. wallet: use outpoint when estimating input size
    `CalculateMaximumSignedInputSize()` is passed the outpoint being sized, but that context was not used when estimating the signed input size.
    Pass the outpoint through so externally selected inputs are not underestimated.
    
    Co-authored-by: Antoine Poinsot <darosior@protonmail.com>
    
    Github-Pull: #35228
    Rebased-From: cd8d3bd937b5515ea000408eb07d2ae3cd1aa417
    671e6c2c33
  94. musig: Reject empty pubkey list in GetMuSig2KeyAggCache
    Github-Pull: #35316
    Rebased-From: 8ce84321ceaf16c0ee3418d30011c357fdc46deb
    d61687a2ac
  95. ci: switch to GitHub cache for all runners
    Cirrus is winding down and github now offers more than 10GB cache.
    
    Switch to GH cache for all runner-types. Simplify docker build arg
    construction, and reduce the number of needed action permissions.
    
    Github-Pull: #35348
    Rebased-From: c03107acf50aeada1bacdfdbf632ffce2957bff0
    3440027b7d
  96. Disable seek compaction
    Seek compaction is causing a cascade effect in the chainstate DB, causing large parts of the database to be rewritten every ~hour.
    
    Every periodic flush writes around 2 MiB. Since this is roughly the `write_buffer_size`, these writes regularly cause the memtable to rotate into a small L0 file. This file has a small seek budget, and with the random UTXO reads done during validation, it can get scheduled for seek compaction quickly.
    
    That seek compaction pushes the small file down to L1. Since most UTXOs are already lower down in L4/L5, many reads that consult this file do not find the key there and continue downward. The bloom filter makes those misses cheap, but LevelDB still decrements the file's seek budget. The file then gets scheduled for another seek compaction, and the same pattern pushes it down through L2 and L3.
    
    The expensive part happens around L3/L4. L4 has many ~32 MiB files holding the bulk of the UTXO set. When LevelDB compacts into L3, it may split the output into many smaller L3 files to limit how much L4 "grandparent" data any one output overlaps. Each of these small L3 files then gets its own small seek budget. Because chainstate keys are hash-random, each small L3 file can still have a broad key range, so many random reads consult it and quickly drain its budget. Once seek-compacted into L4, each tiny L3 file can overlap many L4 files, so compacting a few hundred KiB from L3 can require rewriting hundreds of MiB from L4. Repeating that across many small L3 files can rewrite most of the chainstate.
    
    This is a poor fit for chainstate because UTXO keys are hash-random, the DB is large enough to have many levels, writes are relatively small and periodic, and reads are frequent. The result is that read misses trigger compactions much earlier than size pressure would, and those compactions have very high write amplification.
    
    Disabling seek compaction may leave more files in upper levels for longer, so reads could theoretically consult more files. But Bitcoin Core enables bloom filters for all its LevelDB instances, so these misses are usually cheap in-memory filter checks rather than disk reads.
    
    For the other DBs, the risk is much smaller. They also use bloom filters, and most are smaller and less read-heavy. With fewer levels and less random read pressure, disabling seek compaction should have little effect there.
    
    Co-authored-by: l0rinc <pap.lorinc@gmail.com>
    
    Github-Pull: #35313
    Rebased-From: 6bfdb6093bba4710d0f8313ed0113967a8b5176f
    78714f6d4f
  97. ci: switch runners from cirrus to warpbuild
    Github-Pull: #35378
    Rebased-From: 4bdd46ace37f02da062a53a2943caeddca4ed8f9
    6caf6de0a1
  98. crypto: disable ASan instrumentation of SSE4 SHA256 for GCC
    The existing Clang-only no_sanitize("address") guard is extended to
    also cover GCC.  When GCC compiles this file with -fsanitize=address
    in debug builds, the instrumented inline assembly causes a SEGV during
    SHA256AutoDetect()'s self-test on CPUs that use the SSE4 code path
    (i.e. those without SHA-NI support), regardless of optimization level.
    
    The original Clang code placed the attribute between the function
    declarator and the opening brace.  GCC's Attribute Syntax
    documentation notes that this position in a function definition
    "may, in future, be permitted," so it is not currently supported.
    The attribute is moved to the start of the function definition,
    which is valid form for both GCC and Clang.
    
    The preprocessor guards are restructured so each compiler branch is
    explicit: __clang__ with __has_feature, and __GNUC__ with
    __SANITIZE_ADDRESS__.
    
    Github-Pull: #34953
    Rebased-From: fedeff7f201df0206eefb744ad125e44a63a3ea0
    8f13bb1ea0
  99. doc: remove reference to cirrus
    Github-Pull: #35408
    Rebased-From: 265563bf75c0b8b615e28d47398098020ff0b109
    1f55b3e463
  100. ci: use ubuntu-latest instead of ubuntu-24.04
    To match the usage of -latest for the warp runners.
    
    Github-Pull: #35408
    Rebased-From: 5700a61b73342b506b0114b342499da7642c1c10
    39f8e077c8
  101. ci: Add dynamic cache switching to warp cache
    The GHA cache is very slow, taking on the order of minutes to save and
    restore from.
    
    Use WarpBuild's cache instead as this is in the same region and much
    faster.
    
    WarpBuild cache action does not auto-fallback to GHA if not being run on
    Warp. To allow fork runs to fallback to GHA caching, whilst minimising
    duplication in the action files, create new "interal" actions which
    perform the switching logic, and use these in the (renamed) cache|save
    actions.
    
    Without this we would need the `if` logic in our prvious actions, 4
    times in each of save and restore.
    
    Plumb the provider through into the action, as a composite action can't
    read `env` (`GITHUB_OUTPUT`) from previous steps.
    
    Github-Pull: #35430
    Rebased-From: 2ce4ae7d8f006959cb83be93a17b8125e953c30a
    25506ed6d9
  102. ci: use Warp cache for Docker layers
    Speeds of 1MB/s and 15 minute cached docker image pulls during builds
    are not uncommon.
    
    Warp runners provide a local GitHub Actions cache protocol proxy for
    Docker layer cache traffic. Point BuildKit's gha cache backend at that
    proxy on Warp runners so cached image layers do not have to be fetched
    from GitHub's slower cache service.
    
    Add a default for provider so other users (e.g. qa-assets) don't have to
    update this unless they use custome runners.
    
    Github-Pull: #35447
    Rebased-From: 82901981bfbaeb3f41956597e6d90daa59a0c078
    70000a560b
  103. net: use the proxy if overriden when doing v2->v1 reconnections
    `OpenNetworkConnection()` supports overriding the proxy to use for
    connecting. However when v2 connection is attempted and it fails a v1
    connection is tried without that proxy.
    
    Store the override proxy in `CNode` and pass it to
    `CConnman::m_reconnections` to be used for v1 retries.
    
    Github-Pull: #35410
    Rebased-From: fd230f942d8377cafcc346f1605d5aa00db2cc40
    2c7986b3ee
  104. net: ensure no direct private broadcast connections
    Private broadcast connections use either Tor or I2P, which require a
    proxy intrinsically or IPv4 or IPv6 which must use a proxy in the
    context of private broadcast to avoid leaking the originator's IP
    address.
    
    Add a safety check to guard against future mistakes.
    
    Co-authored-by: Andrew Toth <andrewstoth@gmail.com>
    
    Github-Pull: #35410
    Rebased-From: d01b461f71e255dcb5d7d0ee84a560f26cfe0b6f
    66377c3c84
  105. test: make reusable SOCKS5 server starting
    Extract the part of `p2p_private_broadcast.py` that configures and
    starts the SOCKS5 server into a reusable function and put it into
    `test_framework/socks5.py`.
    
    Use bind port 0 to let the OS pick an available port instead of
    hackishly assuming that `p2p_port(N)` is available where N is more
    than the number of the nodes the test uses.
    
    Github-Pull: #35410
    Rebased-From: 2ffa81fac40fd4d03bdcfd37479a6f3305afb483
    ef20249568
  106. test: make reusable starting a standalone P2P listener
    Extract the part of `p2p_private_broadcast.py` that starts
    listening on a `P2PConnection` object (or its children classes)
    and put it into `test_framework/p2p.py`.
    
    Github-Pull: #35410
    Rebased-From: 2333be9cbc58dd2a533c9bd604b9db593b1d96a7
    70a8687d9d
  107. test: make reusable filling of a node's addrman
    Extract the part of `p2p_private_broadcast.py` that fills a given node's
    addrman and put it into `test_framework/test_framework.py`.
    
    Github-Pull: #35410
    Rebased-From: ab35a028eded00008841a3ec8662823090bfc68b
    6c08cb7323
  108. test: add a regression test for private broadcast v1 retries
    Github-Pull: #35410
    Rebased-From: 5a3756d150fc095d0038592c6338225db48fd4b5
    13df77d13b
  109. net: un-default the OpenNetworkConnection()'s proxy_override argument
    This way callers will not forget to set it.
    
    Github-Pull: #35410
    Rebased-From: bf0d257c11bebc42b88b7e96368ed2be48bc0ad1
    ccb99122f9
  110. lint: disable leveldb subtree check
    This is no-longer a proper subtree, because of direct cherry-picks.
    1ee11d8ba6
  111. util: Check write failures before renaming settings.json
    In WriteSettings(), verify that writing to the stream and closing it
    succeeded before returning true. This prevents RenameOver() from replacing
    a valid settings.json with a corrupted or zero-byte file when write limits
    or a full disk are encountered.
    
    Additionally, update the ReadSettings() parse failure message to mention
    power loss, full disk, or storage error as possible causes.
    
    Fixes #35373
    
    Github-Pull: #35384
    Rebased-From: 0654511e1b935d22fe6c88e3f5d5c7b336516222
    ca00827fab
  112. coins: test chainstate flush baseline
    Add `CDBWrapper::GetProperty()` and expose it through `CCoinsViewDB::GetDBProperty()` so coins tests can inspect LevelDB runtime properties through the coins view.
    Use it in a coins DB flush baseline that records the LevelDB layout after flushing while keeping readback coverage for the flushed coin and best block.
    
    Co-authored-by: Andrew Toth <andrewstoth@gmail.com>
    
    Github-Pull: #35465
    Rebased-From: b10889d10752c5d5e4954af2959f7bdff47bd67c
    fef6c8a4f2
  113. validation: randomly compact chainstate
    Full chainstate flushes are convenient maintenance points for long-term LevelDB cleanup because the chainstate was just written.
    Randomize the trigger so nodes that flush near the same height do not compact together.
    
    Add blocking chainstate compaction through `CCoinsViewDB::CompactFull()` and give each post-IBD full flush on the normal chainstate a 1/320 chance to start compaction.
    With hourly flushes this averages roughly every two weeks and makes a six-month miss about one in a million.
    This keeps the schedule stateless and leaves last-compaction height or timestamp bookkeeping out of chainstate metadata.
    
    Co-authored-by: Andrew Toth <andrewstoth@gmail.com>
    
    Github-Pull: #35465
    Rebased-From: aa021b26f39fd231b2a3aac5780d5113a4aea639
    711065a3b9
  114. coins: compact chainstate in background
    Full chainstate compaction can take minutes on large databases.
    Move `CCoinsViewDB::CompactFull()` to a named `utxocompact` one-shot background thread so validation only schedules the work.
    
    When validation selects compaction after a full flush, the chainstate was just written and another write is less likely to be needed immediately.
    The coins view destructor waits for completion, and a mutex prevents compaction from using `m_db` while `ResizeCache()` replaces it.
    
    Co-authored-by: Andrew Toth <andrewstoth@gmail.com>
    
    Github-Pull: #35465
    Rebased-From: 394e473d42ba1383dfec45a3eafa8a73a09dbe8b
    ea3b318d8d
  115. doc: update release notes for v31.1rc1 d813722ef2
  116. build: bump version to v31.1rc1 1c9d24fddd
  117. doc: update manual pages for v31.1rc1 c058c29831
  118. Merge bitcoin/bitcoin#35331: [31.x] Backports
    c058c29831a930f966180c38dfeab4635b8b86fc doc: update manual pages for v31.1rc1 (fanquake)
    1c9d24fdddf115a9e2db932804df7eab9c5e6b62 build: bump version to v31.1rc1 (fanquake)
    d813722ef2a94ab3e778607351a228fa2f0a5090 doc: update release notes for v31.1rc1 (fanquake)
    ea3b318d8dec2d2a212b383c2859e43a75ca808d coins: compact chainstate in background (Lőrinc)
    711065a3b9a388cda0f0b9ed4a3650d9dc0ed85d validation: randomly compact chainstate (Lőrinc)
    fef6c8a4f2bd5698586bcd7bcb6128cdf50ec6ca coins: test chainstate flush baseline (Lőrinc)
    ca00827fab5ed261104502a06a5dfd4c55145c28 util: Check write failures before renaming settings.json (Shrey)
    1ee11d8ba64481be40a7696f1ec75dc6d481bb2b lint: disable leveldb subtree check (fanquake)
    ccb99122f9ee74de59bbd86e2f46995c7d5edb57 net: un-default the OpenNetworkConnection()'s proxy_override argument (Eugene Siegel)
    13df77d13bc86e23f64d7f76a3f038d6128c2d3c test: add a regression test for private broadcast v1 retries (Vasil Dimov)
    6c08cb732322fdaf0bd3bbbaca0acc375fb321e2 test: make reusable filling of a node's addrman (Vasil Dimov)
    70a8687d9dcf69d03bc75e60fc2e7dd05df9ccb0 test: make reusable starting a standalone P2P listener (Vasil Dimov)
    ef20249568d3437f11b7faa8536b1a1ea2cec29e test: make reusable SOCKS5 server starting (Vasil Dimov)
    66377c3c8444801e3059689c4e57ce158511056b net: ensure no direct private broadcast connections (Vasil Dimov)
    2c7986b3ee791591bbcfafe149f411dc43d29e49 net: use the proxy if overriden when doing v2->v1 reconnections (Vasil Dimov)
    70000a560b26c4e02f194d082851a1d4813df90b ci: use Warp cache for Docker layers (will)
    25506ed6d958a6332f4e7513e51a59dba2cf9673 ci: Add dynamic cache switching to warp cache (will)
    39f8e077c8dc99cbc0760b5e05abc4c8134795e5 ci: use ubuntu-latest instead of ubuntu-24.04 (fanquake)
    1f55b3e463fdf4cc0fdd007c1b277c6e8a423db2 doc: remove reference to cirrus (fanquake)
    8f13bb1ea0b4cd51d7784af642b8912d123e3a26 crypto: disable ASan instrumentation of SSE4 SHA256 for GCC (deadmanoz)
    6caf6de0a1fd0e8d9c9f7516f04414b431d34e1b ci: switch runners from cirrus to warpbuild (will)
    78714f6d4fdc3b7831bba426bfff55bbe1021e6c Disable seek compaction (Andrew Toth)
    3440027b7dd4a6408935b4041cb8b62ff8ca69e3 ci: switch to GitHub cache for all runners (willcl-ark)
    d61687a2acc19be7ed6d478d8d9299c4c0facd19 musig: Reject empty pubkey list in GetMuSig2KeyAggCache (nervana21)
    671e6c2c33bc8b1eb04dc9b682ab81e9fb3b5de7 wallet: use outpoint when estimating input size (Lőrinc)
    101071722ee839668ed70eafccfd2f22d636940d psbt, test: remove address type restrictions in test (rkrux)
    
    Pull request description:
    
      Backports:
      * #34953
      * #35228
      * #35279
      * #35313 (only https://github.com/bitcoin-core/leveldb-subtree/pull/61)
      * #35316
      * #35378
      * #35348
      * #35384
      * #35408
      * #35410
      * #35430
      * #35447
      * #35465
    
    ACKs for top commit:
      marcofleon:
        ACK c058c29831a930f966180c38dfeab4635b8b86fc
      sedited:
        ACK c058c29831a930f966180c38dfeab4635b8b86fc
    
    Tree-SHA512: a04909c1ce82d6f3412655ee7b52f4c482f5a175f9ec4e1468a84a4d488f935ab0ab333a3dc4d75f68fe2a9e7bae169d624c9061308435527b29b5a014c43dc3
    efde623463
  119. build: bump version to v31.1 4219fd4693
  120. doc: update release notes for v31.1 919d74e4c7
  121. doc: update manual pages for v31.1 adc5dc5206
  122. Merge bitcoin/bitcoin#35666: [31.x] Finalise 31.1
    adc5dc52062b6b8fb3bfafe3e991a09491c92e05 doc: update manual pages for v31.1 (fanquake)
    919d74e4c7d3a80e86ccb8111c845fa739765369 doc: update release notes for v31.1 (fanquake)
    4219fd46939b72ea926c11c63af41f131f347870 build: bump version to v31.1 (fanquake)
    
    Pull request description:
    
      The [`v31.1rc1` bins](https://bitcoincore.org/bin/bitcoin-core-31.1/test.rc1/) have been up for nearly 2 weeks. There doesn't seem to be anything else that needs backporting, and no issues have been reported. Finalise `v31.1`.
    
    ACKs for top commit:
      hebasto:
        ACK adc5dc52062b6b8fb3bfafe3e991a09491c92e05.
      sedited:
        ACK adc5dc52062b6b8fb3bfafe3e991a09491c92e05
    
    Tree-SHA512: 4bf7e59a010a08952a60bbb318c514e411d85092086006134521d873c498d544e42cf6880d5f26f02ac1a6bcd0fc155528f2858a81ae8d1b11a3c378f3d11cf9
    9be056a8a7
  123. policy: filter ordinals/inscriptions envelope (filter-ordinals patch) 1674d014fc
  124. new files 8ef5e7286b
  125. JWEB0689 requested review from Copilot on Sep 21, 2026
  126. DrahtBot commented at 11:05 PM on September 21, 2026: contributor

    ♻️ Automatically closing for now based on heuristics. Please leave a comment, if this was erroneous. Generally, please focus on creating high-quality, original content that demonstrates a clear understanding of the project's requirements and goals.

    📝 Moderators: If this is spam, please replace the title with ., so that the thread does not appear in search results.

  127. DrahtBot closed this on Sep 21, 2026

  128. Copilot commented at 11:05 PM on September 21, 2026: none

    Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

  129. DrahtBot commented at 11:05 PM on September 21, 2026: contributor

    LLM spam detection (✨ experimental): SPAM. The submission contains only the default contributor guidance/template text and no actual patch description, motivation, rationale, or implementation details to review. The title is also generic without accompanying content.

    ♻️ Automatically wiping, closing, and locking for now based on heuristics. Generally, please focus on creating high-quality, original content that demonstrates a clear understanding of the project's requirements and goals.

  130. DrahtBot renamed this:
    31.1 ordinals patch
    .
    on Sep 21, 2026
  131. bitcoin locked this on Sep 21, 2026
  132. DrahtBot commented at 11:05 PM on September 21, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/36311.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline and AI policy for information on the review process. A summary of reviews will appear here.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-09-28 10:51 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me