.
. #36311
pull JWEB0689 wants to merge 123 commits into bitcoin:master from JWEB0689:31.1-ordinals-patch changing 137 files +6172 −813-
JWEB0689 commented at 11:04 PM on September 21, 2026: none
-
build: bump to 31.0rc1 2a5b96eb54
-
doc: Generate manpages for 31.0rc1 62716a8c93
-
examples: Generate example bitcoin.conf for 31.0rc1 88e21e57e5
-
doc: Point release notes to 31.0 wiki draft c5ae5f0adf
-
d3737769ca
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 -
9852bbd218
depends: disable Qt sbom generation
Github-Pull: #34755 Rebased-From: 168997e9b5720e3c58e2fc1a073d0be3cd39d971
-
a3ffff0201
depends: delete Boost extra files
Github-Pull: #34755 Rebased-From: 0ebc6891e2168c3ff1c9ad2250e765446610e75e
-
f7f7e682b5
ci: Bump GHA actions versions
Github-Pull: #34802 Rebased-From: fadaa7db335d1b1bd2674c51d89d6c0820ddb887
-
a74dfe3ae2
lint: Temporarily revert to vulture==2.14
To work around https://github.com/bitcoin/bitcoin/issues/34810 Github-Pull: #34814 Rebased-From: faae981d354e13de96442159d604a831b6c3a71e
-
207087b1c4
ci: bump cirruslabs actions versions
Github-Pull: #34815 Rebased-From: 9a968ad35efe04bfd86299c5dfbc48ada41bc46e
-
a3c1eda8f2
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
-
5642a2b0fe
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
-
a28d78c44a
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
-
2724c39208
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
-
d20ba02caa
build: Set AUTHOR_WARNING on warnings
Github-Pull: #33144 Rebased-From: fa6497ba71e9573d341c1c051af09b3ec2fc8d74
-
bb9fcffd4c
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
-
ab37d3d7cd
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
-
e3383ac932
ci: check macos bundle structure and codesigning
Github-Pull: #34787 Rebased-From: d03e3be246f64065002268e74ee9a834089de37a
-
a69f8c329e
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
-
c7127f21df
test: Use asyncio.SelectorEventLoop() over deprecated asyncio.WindowsSelectorEventLoopPolicy()
Github-Pull: #34820 Rebased-From: fa9168ffcd6354db6daf759ace123a88fb60cbb2
-
72d6c88165
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
-
8379f005da
test: Fix intermittent issue in feature_assumeutxo.py
Github-Pull: #34852 Rebased-From: 99996f6c06dff19cd99131d0469b84c01c216cbb
-
068951211c
test: [refactor] Use verbosity=0 named arg
This is less confusing than the verbose=0 alias. Github-Pull: #34852 Rebased-From: faf71d6cb49b8a668c417d80bc56277f30cbf2e1
-
ca781e49e5
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
-
e930c6d60f
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
-
335a098afa
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
-
d9a57912c6
ci: Avoid intermittent Windows generate download failures
Github-Pull: #34859 Rebased-From: fa71c6e84c16418ffc5568c06aed863027cb238f
-
7118559f8c
tests: applied PYTHON_GIL to the env for every test
Github-Pull: #34869 Rebased-From: b14f2c76a1f6b41835c134584c82c45704c4cce0
-
e53c20d750
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
-
3b79852984
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
-
051afe9e1a
depends: Remove no longer necessary `dsymutil`
Github-Pull: #34850 Rebased-From: 578525d31d47bad878f8609a04258920b1deab42
-
6993aa1915
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 -
198bc4da87
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
-
d171afa9e8
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
-
11b69922b3
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
-
87d1691f3e
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
-
e3d571691a
test: Remove confusing assert_debug_log in wallet_reindex.py
Github-Pull: #34857 Rebased-From: fa30951af5b174a1ee5e1c23d84b115c542a9570
-
acd7e3d061
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
-
660947352c
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
-
39c87621d5
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
-
ac13aca72b
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
-
build: bump version to v31.0rc2 a30e50538b
-
doc: update manual pages for v31.0rc2 718c31cfb7
-
doc: update example bitcoin conf for 31.0rc2 b241f3c82d
-
f0e2cbc5e5
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 -
7375940eb2
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 -
98551a0efd
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
-
f3b64aa405
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
-
56cdeab8b5
depends, qt: Fix build on aarch64 macOS 26.4
Github-Pull: #34956 Rebased-From: 3aeccb7d739c7e9a82c95fbc8f5647ea85a79635
-
f0e1014c39
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
-
ef10b2ec65
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
-
e7d520dcc6
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 -
1bc22a38a8
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
-
Update libmultiprocess subtree to latest master 0df3ce87d9
-
afa8ba04e0
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
-
build: bump version to v31.0rc3 275843f2a6
-
doc: update manual pages for v31.0rc3 c168baec80
-
cc14d7ad3e
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 -
2937d4ba41
guix: Restore download and build-system-cmake modules
The time-machine commit in 31.x still requires these modules for the build to work.
-
build: bump version to v31.0rc4 7d56e1017d
-
doc: update manpages for v31.0rc4 4a5fdb0d88
-
c96d9c28b3
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 -
build: Bump to 31.0 bd40a32411
-
doc: update manpages for v31.0 6a25f3e3d4
-
doc: 31.0 release notes e9f1466155
-
6574cb4086
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 -
27e5a3020a
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
-
20480f5eb9
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
-
e1545b56b9
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
-
332d2a2ef2
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
-
402f347fd5
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
-
bb536df042
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
-
ab19213660
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
-
2eafae9dc1
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
-
0cedd6abf2
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
-
1bb9c40bb8
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
-
doc: update release notes for v31.x 6bb2b07587
-
42800d93a4
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 -
24bfb2c8be
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 -
9d42e868fe
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
-
56190e5c5c
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
-
64ba4e2a3b
depends: Unset `SOURCE_DATE_EPOCH` in `gen_id` script
Github-Pull: #34228 Rebased-From: 9f7a2293c48f8afb5e87765a327a0c89fd21fa56
-
313a225fef
ci: Move --usecli --extended from i386 task to alpine task
Github-Pull: #35230 Rebased-From: fad61896e869fe004cb1ebdacbd124ce587e6efc
-
5022e9d411
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
-
409b2d8475
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
-
e379148a7a
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
-
7a97580997
fuzz: Fix txorphan timeout by limiting block weight
Github-Pull: #35289 Rebased-From: 004a7e3cfbc5b2118536651d2201cf8b72c87736
-
0449061877
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
-
doc: update release notes for v31.x 506051cc60
-
dbaf0f4fd3
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 -
101071722e
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
-
671e6c2c33
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
-
d61687a2ac
musig: Reject empty pubkey list in GetMuSig2KeyAggCache
Github-Pull: #35316 Rebased-From: 8ce84321ceaf16c0ee3418d30011c357fdc46deb
-
3440027b7d
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
-
78714f6d4f
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
-
6caf6de0a1
ci: switch runners from cirrus to warpbuild
Github-Pull: #35378 Rebased-From: 4bdd46ace37f02da062a53a2943caeddca4ed8f9
-
8f13bb1ea0
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 -
1f55b3e463
doc: remove reference to cirrus
Github-Pull: #35408 Rebased-From: 265563bf75c0b8b615e28d47398098020ff0b109
-
39f8e077c8
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
-
25506ed6d9
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
-
70000a560b
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
-
2c7986b3ee
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
-
66377c3c84
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
-
ef20249568
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
-
70a8687d9d
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
-
6c08cb7323
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
-
13df77d13b
test: add a regression test for private broadcast v1 retries
Github-Pull: #35410 Rebased-From: 5a3756d150fc095d0038592c6338225db48fd4b5
-
ccb99122f9
net: un-default the OpenNetworkConnection()'s proxy_override argument
This way callers will not forget to set it. Github-Pull: #35410 Rebased-From: bf0d257c11bebc42b88b7e96368ed2be48bc0ad1
-
1ee11d8ba6
lint: disable leveldb subtree check
This is no-longer a proper subtree, because of direct cherry-picks.
-
ca00827fab
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
-
fef6c8a4f2
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
-
711065a3b9
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
-
ea3b318d8d
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
-
doc: update release notes for v31.1rc1 d813722ef2
-
build: bump version to v31.1rc1 1c9d24fddd
-
doc: update manual pages for v31.1rc1 c058c29831
-
efde623463
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 -
build: bump version to v31.1 4219fd4693
-
doc: update release notes for v31.1 919d74e4c7
-
doc: update manual pages for v31.1 adc5dc5206
-
9be056a8a7
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 -
policy: filter ordinals/inscriptions envelope (filter-ordinals patch) 1674d014fc
-
new files 8ef5e7286b
- JWEB0689 requested review from Copilot on Sep 21, 2026
-
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. - DrahtBot closed this on Sep 21, 2026
-
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.
-
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.
- DrahtBot renamed this:
31.1 ordinals patch
.
on Sep 21, 2026 - bitcoin locked this on Sep 21, 2026
-
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-->