mccoyadd
commented at 4:30 AM on October 26, 2025:
none
<!--
*** Please remove the following help text before submitting: ***
Pull requests without a rationale and clear improvement may be closed
immediately.
GUI-related pull requests should be opened against
https://github.com/bitcoin-core/gui
first. See CONTRIBUTING.md
-->
<!--
Please provide clear motivation for your patch and explain how it improves
Bitcoin Core user experience or Bitcoin Core developer experience
significantly:
* Any test improvements or new tests that improve coverage are always welcome.
* All other changes should have accompanying unit tests (see `src/test/`) or
functional tests (see `test/`). Contributors should note which tests cover
modified code. If no tests exist for a region of modified code, new tests
should accompany the change.
* Bug fixes are most welcome when they come with steps to reproduce or an
explanation of the potential issue as well as reasoning for the way the bug
was fixed.
* Features are welcome, but might be rejected due to design or scope issues.
If a feature is based on a lot of dependencies, contributors should first
consider building the system outside of Bitcoin Core, if possible.
* Refactoring changes are only accepted if they are required for a feature or
bug fix or otherwise improve developer experience significantly. For example,
most "code style" refactoring changes require a thorough explanation why they
are useful, what downsides they have and why they *significantly* improve
developer experience or avoid serious programming bugs. Note that code style
is often a subjective matter. Unless they are explicitly mentioned to be
preferred in the [developer notes](/doc/developer-notes.md), stylistic code
changes are usually rejected.
-->
<!--
Bitcoin Core has a thorough review process and even the most trivial change
needs to pass a lot of eyes and requires non-zero or even substantial time
effort to review. There is a huge lack of active reviewers on the project, so
patches often sit for a long time.
-->
[build] bump CLIENT_VERSION_MAJOR to 29
Github-Pull: #32041
Rebased-From: a3f0e9a
153bd443ec
[build] bump version to 29.0rc195c21b1fdd
[doc] update man pages for 29.0rc186a3ce6209
[examples] generate example bitcoin.conf21f423939e
[doc] release notes link for 29.047e2fa86dc
Merge bitcoin/bitcoin#32046: [29.x] bump to v29.0rc1
47e2fa86dc5433852fd9e5050a23de2accfdca8d [doc] release notes link for 29.0 (glozow)
21f423939e521aa61b96689b9f8ee61c59abf5eb [examples] generate example bitcoin.conf (glozow)
86a3ce62096b2faefd01366a6f300fff6f8b9c0b [doc] update man pages for 29.0rc1 (glozow)
95c21b1fdd14f89d762b46b0162bd2fcca1e5a93 [build] bump version to 29.0rc1 (glozow)
153bd443ecf1bfabf3a78eb82fbbc901137c4ba0 [build] bump CLIENT_VERSION_MAJOR to 29 (glozow)
Pull request description:
- "backport" #32041
- bump version to v29.0rc1
- generate manpages
- add example bitcoin.conf
- add release-notes.md pointing to wiki
ACKs for top commit:
achow101:
ACK 47e2fa86dc5433852fd9e5050a23de2accfdca8
davidgumberg:
ACK https://github.com/bitcoin/bitcoin/commit/47e2fa86dc5433852fd9e5050a23de2accfdca8d
hebasto:
ACK 47e2fa86dc5433852fd9e5050a23de2accfdca8d.
Tree-SHA512: 4e4eec31ab12990d933b6313950e779b7b58fc349f294f59d2504a8db3c28d5dea64b79e588e2c0fe62836db306fb4c3fb3fcd7bd1f51350e880370cec3437d6
e9e6825b8c
contrib: Fix `gen-bitcoin-conf.sh`.
In #31118, the format of bitcoind's `--help` output changed slightly in
a way that breaks `gen-bitcoin-conf.sh`, modify the script to accomodate
the new format, by starting after the line that says "Options:" and
strip the `-help` option and its description from the output.
Github-Pull: #32049
Rebased-From: a24419f8bed5e1145ce171dbbdad957750585471
80c5d57bd1
fuzz: Always restrict base conversion input lengths
They seem to cause timeouts:
> Issue 397734700: bitcoin-core:base58check_encode_decode: Timeout in base58check_encode_decode
The `encoded_string.empty()` check was corrected here to `decoded.empty()` to make sure the `(0, decoded.size() - 1)` range is always valid.
Github-Pull: #31917
Rebased-From: bad1433ef2b5b02ac4b1c6c1d9482c513e5b2192
Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>
Co-authored-by: marcofleon <marleo23@proton.me>
Co-authored-by: Martin Zumsande <mzumsande@gmail.com>
15ecae31a8
fuzz: make sure DecodeBase58(Check) is called with valid values more often
In Base58 fuzz the two roundtrips are merged now, the new `decode_input` switches between a completely random input and a valid encoded one, to make sure the decoding passes more often.
The `max_ret_len` can also exceed the original length now and is being validated more thoroughly.
Github-Pull: #31917
Rebased-From: d5537c18a9034647ba4c9ed4008abd7fee33989e
Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>
Co-authored-by: marcofleon <marleo23@proton.me>
458655bca8
test: fix intermittent failure in p2p_orphan_handling.py
If we bump the mocktime before the node has successfully disconnected
the peer, the requests for both parents could be spread over
two GETDATAS, which would make the test fail.
Github-Pull: #32063
Rebased-From: 02942056fd861581503a8a35a06dcf22d4ba1473
build: use make < 3.82 syntax for define directive
From the GNU make 3.82 release announcement:
* The 'define' make directive now allows a variable assignment operator
after the variable name, to allow for simple, conditional, or appending
multi-line variable assignment.
macOS ships with 3.81. This caused the multiprocess config options
to be ignored.
Fixes #32068
Github-Pull: #32070
Rebased-From: 9157d9e449870851ef455e077249ac46fc2df24c
Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
4e438d326e
qt: doc: adapt outdated binary paths to CMake changes
[doc] update example bitcoin.conf with missing options74df31cb0b
Merge bitcoin/bitcoin#32062: [29.x] backports and rc2
74df31cb0bdef9cce31ae62ed71a1e386cba0274 [doc] update example bitcoin.conf with missing options (glozow)
8082f88d1a434b3ba1018c6592affe759d53df48 [doc] update man pages for 29.0rc2 (glozow)
472d582bfec4dcdecb5f4d9bbbe41ea7961ca62b [build] bump to 29.0rc2 (glozow)
a4c30bd00a0ec977a1518416cdf7f0a24868a9f2 qt: doc: adapt outdated binary paths to CMake changes (Sebastian Falbesoner)
4e438d326ea55ac0f98f89e41e69b56354e801e7 build: use make < 3.82 syntax for define directive (Sjors Provoost)
7ff0b02161a1687b8bee6af0ff93ec65bbfc6cf2 build: Remove manpages when making MacOS app (Ava Chow)
5ebcb59fdb1270edac6b878d7bd97dd1f077aa06 test: fix intermittent failure in p2p_orphan_handling.py (Martin Zumsande)
458655bca8eddd4d913958c579a46a6fca23cbf6 fuzz: make sure DecodeBase58(Check) is called with valid values more often (Lőrinc)
15ecae31a83ea66985496d2b8f2017cbd7749c26 fuzz: Always restrict base conversion input lengths (Lőrinc)
80c5d57bd118b1812c21604224dd316214af879c contrib: Fix `gen-bitcoin-conf.sh`. (David Gumberg)
Pull request description:
backports:
- #32049
- #32063
- #32064
- #32070
- #31917
ACKs for top commit:
Sjors:
ACK 74df31cb0bdef9cce31ae62ed71a1e386cba0274
hebasto:
ACK 74df31cb0bdef9cce31ae62ed71a1e386cba0274, I have reviewed the code and it looks OK.
ismaelsadeeq:
Code review ACK 74df31cb0bdef9cce31ae62ed71a1e386cba0274
Tree-SHA512: df4ef832a03c9c3f89d30d3f65d81b7c7e4793d2cad8a269f1ff221454a4b0b05e06109f4556926c1c4f7fcbd2537052b4d58b4b3911dfcfc35726c600b587d9
d6db87165c
test: avoid disk space warning for non-regtest
feature_config_args.py incorrectly assumed that its testnet4 node
would not log a disk space warning.
0683b8ebf33386d5c05140df89df10b1853d7c7e increased m_assumed_blockchain_size
on testnet4 from 1 to 11 GiB which triggers this bug on more
systems, e.g. a RAM disk.
Prevent the warning by setting -prune for these nodes.
Fix the same issue in feature_signet.py
Github-Pull: #32057
Rebased-From: 20fe41e9e83d510fd467f5a999d55a614b16ef89
fuzz: extract unsequenced operations with side-effects
https://github.com/bitcoin/bitcoin/pull/30746#discussion_r1817851827 introduced an unsequenced operations with side-effects - which is undefined behavior, i.e. the right hand side can be evaluated before the left hand side, which happens to mutate it.
Tried:
```
clang++ --analyze -std=c++20 -I./src -I./src/test -I./src/test/fuzz src/test/fuzz/base_encode_decode.cpp src/psbt.cpp
```
but it didn't warn about UB.
Grepped for similar ones, but could find any other one in the codebase:
> grep -rnE --include='*.cpp' --include='*.h' '\b(\w+)\(([^)]*\b(\w+)\b[^)]*)\)\s*==\s*\3\.' .
```
./src/test/arith_uint256_tests.cpp:373: BOOST_CHECK(R1L.GetHex() == R1L.ToString());
./src/test/arith_uint256_tests.cpp:374: BOOST_CHECK(R2L.GetHex() == R2L.ToString());
./src/test/arith_uint256_tests.cpp:375: BOOST_CHECK(OneL.GetHex() == OneL.ToString());
./src/test/arith_uint256_tests.cpp:376: BOOST_CHECK(MaxL.GetHex() == MaxL.ToString());
./src/test/fuzz/cluster_linearize.cpp:565: assert(depgraph.FeeRate(best_anc.transactions) == best_anc.feerate);
./src/test/fuzz/cluster_linearize.cpp:646: assert(depgraph.FeeRate(found.transactions) == found.feerate);
./src/test/fuzz/cluster_linearize.cpp:765: assert(depgraph.FeeRate(chunk_info.transactions) == chunk_info.feerate);
./src/test/fuzz/base_encode_decode.cpp:95: assert(DecodeBase64PSBT(psbt, random_string, error) == error.empty());
./src/test/fuzz/key.cpp:102: assert(pubkey.data() == pubkey.begin());
./src/test/skiplist_tests.cpp:42: BOOST_CHECK(vIndex[from].GetAncestor(0) == vIndex.data());
./src/script/signingprovider.cpp:535: ComputeTapbranchHash(node.sub[1]->hash, node.sub[1]->hash) == node.hash) {
./src/pubkey.h:78: return vch.size() > 0 && GetLen(vch[0]) == vch.size();
./src/cluster_linearize.h:881: Assume(elem.inc.feerate.IsEmpty() == elem.pot_feerate.IsEmpty());
```
Hodlinator deduced the UB on Windows in https://github.com/bitcoin/bitcoin/issues/32135#issuecomment-2751723855
Github-Pull: #32141
Rebased-From: b1de59e8965354fff5a149bc0fe61ed0704aea7a
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
7bc7af9951
cmake: Add `NO_CACHE_IF_FAILED` option for checking linker flags
Use it for checking `-fsanitize`.
This change improves the user experience when the configuration step
fails due to a missing library. Now, there is no need to manually clean
the CMake cache after installing the required library.
Github-Pull: #32027
Rebased-From: 52ac17757eed5056d03a6861bcc24ee864c17385
477345207b
depends: set CMAKE_*_COMPILER_TARGET in toolchain
According to the CMake docs, this is the correct way to setup a
toolchain file for cross-compilation using Clang. See
https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-using-clang
Internally it looks like CMake will only take this variable into account
if it detects the compiler to be Clang, so this shouldn't effect other
builds, but in the case of our Apple cross builds, we'd end up with a
duplicated `--target=arm64-apple-darwin` on the compiler line, given we
are already setting `--target` for Darwin builds.
Would fix #31748.
Github-Pull: #31849
Rebased-From: 963355037fe78eb4fbdda8631ac05a7b07fcec8c
c0756b758f
[build] bump to 29.0rc37c05ef5673
[doc] update man pages for 29.0rc3f80ab9a5d8
Merge bitcoin/bitcoin#32136: [29.x] backports and 29.0rc3
f80ab9a5d8cd5418655fe1a6f01c77926e2cc2e5 [doc] update man pages for 29.0rc3 (glozow)
7c05ef567328031641b7197b30508d0989bd15a7 [build] bump to 29.0rc3 (glozow)
c0756b758fc1a458f18ccfb01127769ed39d744e depends: set CMAKE_*_COMPILER_TARGET in toolchain (fanquake)
477345207b895038a07d8ecb472d3c95b033dcc1 cmake: Add `NO_CACHE_IF_FAILED` option for checking linker flags (Hennadii Stepanov)
7bc7af995102c6b360f61a389060e712de79f4ad fuzz: extract unsequenced operations with side-effects (Lőrinc)
288163ea0fe1a69d8dabbc5b3d2877cc8f9b1c43 fuzz: Fix off-by-one in package_rbf target (MarcoFalke)
a3060483fa2ecc4696d1214dfe6030195c572df0 test: avoid disk space warning for non-regtest (Sjors Provoost)
Pull request description:
Backports + final changes for 29.0rc3.
Backports:
- #32057
- #32122
- #32141
- #32027
- #31849
ACKs for top commit:
hebasto:
ACK f80ab9a5d8cd5418655fe1a6f01c77926e2cc2e5, I've verified back-ports locally and reviewed release related changes.
fanquake:
ACK f80ab9a5d8cd5418655fe1a6f01c77926e2cc2e5
Tree-SHA512: 15c882eac98825c41859859af1621e63a5b9d98f3b492c451c14f2d2232220dfa8d1ef933adae773918e188c6ade085f254f2853ff078bf1f99b8cd77facb182
1344d3bd0f
[doc] copy over Release Notes draft from wiki50108104d7
[build] bump to 29.0 final190e718e83
[doc] update man pages for 29.0977db54233
Merge bitcoin/bitcoin#32241: [29.x] 29.0 final changes
977db54233ef06f70cf9723b46fbcd1936c95be0 [doc] update man pages for 29.0 (glozow)
190e718e8382dda25891e709588111dc54e18be0 [build] bump to 29.0 final (glozow)
50108104d7c5800ce5be7c8accda835aa88c92b9 [doc] copy over Release Notes draft from wiki (glozow)
Pull request description:
There weren't any reports from rc2 and rc3 binaries have been up since April 2 (1 week ago).
ACKs for top commit:
hebasto:
ACK 977db54233ef06f70cf9723b46fbcd1936c95be0.
janb84:
ACK [977db54](https://github.com/bitcoin/bitcoin/commit/977db54233ef06f70cf9723b46fbcd1936c95be0)
laanwj:
ACK 977db54233ef06f70cf9723b46fbcd1936c95be0
Tree-SHA512: f0dee957c56a7b24cc361b0450efeaaad5ead6401ba649f8af6cf5cb464fea4357e1eaedaaa80accdeb18d47321a604979c43be57e14aa3ae5603d083e7df250
56ed476a29
doc: minor rel notes changes
Remove two unused headers.
Remove the empty-template, as point releases will modify release-notes.md.
87e53781f7
Merge bitcoin/bitcoin#32252: [29.x] doc: minor rel notes changes
87e53781f7d54d0582b9d14bc458ee474a5e5c80 doc: minor rel notes changes (fanquake)
Pull request description:
Remove two unused headers.
Remove the empty-template, as point releases will modify `release-notes.md`.
ACKs for top commit:
jonatack:
LGTM ACK 87e53781f7d54d0582b9d14bc458ee474a5e5c80
janb84:
ACK [87e5378](https://github.com/bitcoin/bitcoin/pull/32252/commits/87e53781f7d54d0582b9d14bc458ee474a5e5c80)
Tree-SHA512: 69ff0d7863c1598ab2b4daf2a7f9ca3edae513a7d5ebb85aa1b468150cfd17da2f503ac0a41dc77fe04c3670cb7d58df46b00837d08aad624f024756f575fca1
fc60337733a9dffaa42e08fcbff0ab24b5f679a4 qt: 29.1 translations update (Hennadii Stepanov)
Pull request description:
This PR fetches the recent translation updates from Transifex.
Closes https://github.com/bitcoin/bitcoin/issues/32295.
**Notes for reviewers:**
1. "fr_CM" and "fr_LU" have been dropped as part of [phasing out of territory-specific translations](https://app.transifex.com/bitcoin/communication/d:402657d1-6254-4ce9-8d26-e7827652c627/?q=project%3Abitcoin).
2. The translations for the following languages, which appear to be the result of a mistake or an act of vandalism, have been discarded (also see https://github.com/bitcoin/bitcoin/pull/32004):
- Czech (cs)
- Danish (da)
- Dutch (nl)
- Vietnamese (vi)
3. Update for Silesian (szl) has been discarded as malicious.
ACKs for top commit:
laanwj:
ACK fc60337733a9dffaa42e08fcbff0ab24b5f679a4
Tree-SHA512: 0003a3ec67553f046ac8f98f61fd799cdcdac731f417e936af6782f8559270cc4f4fa40ffd8de5b40d7988d674dbac7eab73879aec974433bdf61a7790efd2a4
3fad438b83
Remove support for RNDR/RNDRRS for aarch64 on Linux
This hardware feature is
- rarely supported on SoCs (and broken on like half of the chips that support it in the first place) (#31817)
- apparently not compiled into the release binary (https://github.com/bitcoin/bitcoin/issues/31817#issuecomment-2795885962)
- hard to test in CI, due to unavailable of hardware
Better to remove it.
This reverts commit aee5404e02e203a256c1a97b629b9b107cc8bb07.
Closes #31817.
Github-Pull: #32248
Rebased-From: 7749d929a0d9dfe71541a22e557ea41e01df28ce
ca70d5cb25
test: Handle empty string returned by CLI as None in RPC tests
This change is necessary for Windows GHA images, which provide
CMake >= 4.0.
Github-Pull: #32184
Rebased-From: ef00a28414daed2dd026b458082ed03fe9508074
64552c83b2
refactor: Remove spurious virtual from final ~CZMQNotificationInterface
gui: crash fix, disconnect numBlocksChanged() signal during shutdown
The crash stems from the order of the shutdown procedure:
We first unset the client model, then destroy the wallet controller—but we leave
the internal wallet models ('m_wallets') untouched for a brief period. As a result,
there’s a point in time where views still have connected signals and access to
wallet models that are not connected to any wallet controller.
Now.. since the clientModel is only replaced with nullptr locally and not destroyed
yet, signals like numBlocksChanged can still emit. Thus, when wallet views receive
them, they see a non-null wallet model ptr, and proceed to call backend functions
from a model that is being torn down.
As the shutdown procedure begins by unsetting clientModel from all views. It’s safe
to ignore events when clientModel is nullptr.
Github-Pull: gui#864
Rebased-From: 71656bdfaa6bfe08ce9651246a3ef606f923351b
5aa4956cd3
qt: Replace stray tfm::format to cerr with qWarning
GUI warnings should go to the log, not to the console (which may not be
connected at all).
Github-Pull: gui#868
Rebased-From: edd46566bd66cea7d7f4116429fe1c11d2187ba2
f4d9546425
doc: Fix fuzz test_runner.py path
This commit fixes the path listed in the documentation for the fuzz
testing test_runner.py. Previously the --help option worked but running
fuzz tests from the documented path did not.
Github-Pull: #32353
Rebased-From: 61f238e84ac6d24d8f420c2eabcbb2980d7fcb1e
2f6c802b54
doc: Fix test_bitcoin path
This commit fixes a couple command paths for interacting with the
test_bitcoin binary within the Unit Test documentation.
Github-Pull: #32389
Rebased-From: 6cbc28b8dd629062950f195facc009fd8ba86310
The mempool_monitor tracing tool is incorrectly reading the reason
as the first argument. Fix this!
Github-Pull: #32454
Rebased-From: 31c5ebc4007884b655f2f90ca09e36e0b9ada4da
fabf4ff237
crypto: disable ASan for sha256_sse4 with Clang
This can alsofail to compile when optimisations are being used, see:
https://github.com/bitcoin/bitcoin/issues/31913.
So disable just ASan for this function under any optimisation level.
Github-Pull: #32437
Rebased-From: 4e8ab5e00fa72016a7ec0e0505ca025d4e59e4d8
caec3cc41b
cmake: Allow `WITH_DBUS` on all Unix-like systems
This change makes the `WITH_DBUS` option available on all Unix-like
systems, not just Linux, thereby fixing a regression that was
overlooked during the migration from Autotools.
Note: Enabling D-Bus support on macOS still makes no sense, since the
`Notificator` class uses the User Notification Center regardless.
Github-Pull: #32469
Rebased-From: 5b7ed460c7c181f1fd34a927a09aed36284083cb
cc2fcdfc5e
test: Fix nTimes typo in feature_pruning test
Fix incorrect variable name in comment (nTimes -> nTime) in
feature_pruning.py. This typo caused the test to always reset
mine_large_blocks.nTime to 0, rather than only on the first run
as intended.
Github-Pull: #32312
Rebased-From: 772ba7f9ce09e836a51636524a8a96a23946d658
edd4073d70
test: Use uninvolved pruned node in feature_pruning undo test
After fixing the nTime variable name, the test_pruneheight_undo_presence
test began failing because node 2, which is involved in reorg testing,
could be on a different chain than other nodes. This caused failures
when trying to fetch blocks from other nodes that didn't recognize
node 2's chain.
Switch to using node 5 instead, which is also a pruned node but isn't
involved in reorg testing, ensuring it stays on the same chain as the
other nodes. This allows the block fetching to work as intended in the
test.
Github-Pull: #32312
Rebased-From: 2aa63d511affdcc9980b58fc4ff18b8ad10b0f8c
6c4e3de2ac
test: Fix intermittent failure in wallet_basic.py
There could be a race with outstanding TxAddedToMempool notifications
being applied to the soon-to-be created wallet.
Fixes an intermittent timeout reproducable by adding a sleep to
AddToWallet.
Github-Pull: #32483
Rebased-From: 07350e204dedfba20da461d9cdcd469dc95e01c3
c966158426
test: fix another intermittent failure in wallet_basic.py
During init, the test framework will start using rpc after the
mempool was loaded. It will not wait for postInitProcess or
outstanding transactionAddedToMempool notifications, leading to
a possible race, in which listunspent is being called while the
tx is still in Inactive status. Prevent this by processing
outstanding notifications.
Github-Pull: #32483
Rebased-From: e7ad86e1ca3b0b2f2795e91c2f9959486c67dd90
cf034172bf
walletdb: Log the wallet version after it has been read from disk
Logging the wallet version before anything has been read from disk results
in the wrong version being logged.
Also split the last client version logging as it may not always be
present to be logged.
Github-Pull: #32553
Rebased-From: 359ecd3704993422eb53e3da2a7d0bea2f575ab0
25aa15ee7f
test: Check that the correct versions are logged on wallet load
a0d1f69b555fa0c76df1a63a0b127c7816596107 doc: update release notes for 29.x (fanquake)
6c0f26d3bd8010391761feada93ae902b6b27221 test: check that creating a wallet does not log version info (Ava Chow)
e685b4eca250a47e933c8447a2efe10cd14d2f2b test: Check that the correct versions are logged on wallet load (Ava Chow)
25aa15ee7fc6d8f941fff7be5b3abed09a2ce12a walletdb: Log the wallet version after it has been read from disk (Ava Chow)
cf034172bf1fe7cc789c130f35ad470f0509d6d2 test: fix another intermittent failure in wallet_basic.py (Martin Zumsande)
c9661584261b89d75d4d0869c69ef84cf51054ff test: Fix intermittent failure in wallet_basic.py (Martin Zumsande)
6c4e3de2acb7e96ce81ca691a4dac3d5d594c4bc test: Use uninvolved pruned node in feature_pruning undo test (enoch)
edd4073d70642b42cea9a9e5a2c6d34f413cf7d8 test: Fix nTimes typo in feature_pruning test (enoch)
cc2fcdfc5e0649c2e7c16c0ec2df7a40e8a3c454 cmake: Allow `WITH_DBUS` on all Unix-like systems (Hennadii Stepanov)
caec3cc41bf3cb265800624efff14241d297f36b crypto: disable ASan for sha256_sse4 with Clang (fanquake)
fabf4ff237ff99d5e77163fdfbac6cd425dd7fc7 tracing: fix invalid argument in mempool_monitor (William Casarin)
f9d2c67a0c78192ce365e6e4065bb5e9198d771c cmake: Respect user-provided configuration-specific flags (Hennadii Stepanov)
6ed087dede0839cac4e4528a746f573aecd5f5f2 doc: Fix test_bitcoin path (monlovesmango)
2f6c802b549c72393fdaff44d2fd4cb501f97926 doc: Fix fuzz test_runner.py path (monlovesmango)
f4d9546425ec38d78ef128a5bc7580d816b707ce qt: Replace stray tfm::format to cerr with qWarning (laanwj)
5aa4956cd3ad42e6e511625fc548f55bf95a6575 gui: crash fix, disconnect numBlocksChanged() signal during shutdown (furszy)
3665310808f58073c3cd72a5f99f19b22adccdf0 scripted-diff: Use bpf_cflags (MarcoFalke)
4ed5c34abb242494dff36409f5eef68272827a03 test: Add imports for util bpf_cflags (MarcoFalke)
3dbd2b3d178176eb410270afb7d4a7db11ff08ae refactor: Remove spurious virtual from final ~CZMQNotificationInterface (MarcoFalke)
64552c83b2b1e2d4da561d06900a70144ebfb054 ci: Add workaround for vcpkg's libevent package (Hennadii Stepanov)
85f3e1de68e845937ebc3568e26c12fc6a027a18 test: Handle empty string returned by CLI as None in RPC tests (Brandon Odiwuor)
ca70d5cb2592d5227eab8b18288f060ed6305a99 Remove support for RNDR/RNDRRS for aarch64 on Linux (laanwj)
Pull request description:
Backports for `29.x`:
- #32184
- #32187
- #32248
- #32286
- #32312
- #32336
- #32353
- #32356
- #32389
- #32437
- #32454
- #32469
- #32483
- #32553
- https://github.com/bitcoin-core/gui/pull/864
- https://github.com/bitcoin-core/gui/pull/868
ACKs for top commit:
willcl-ark:
crACK a0d1f69b555fa0c76df1a63a0b127c7816596107
Tree-SHA512: 72aafd17348aa4b602661efd07d48c6af6637c7349e7b032a65f46364e50094723d1c80dced71f0d5ddec59d6dafb72f0463944413a4d810a35cdca6b8272780
See https://guix.gnu.org/blog/2025/migrating-to-codeberg/.
When interacting with the old repo you may now also see:
```bash
warning: redirecting to https://codeberg.org/guix/guix/
```
Github-Pull: #32439
Rebased-From: c8d9baae942c94d64ce47ae8f67d3710e6a296bd
e34b6fbcad
doc: Add missing top-level description to pruneblockchain RPC
Previously, the `pruneblockchain` RPC help output included only the method signature and arguments, with no top-level description explaining its purpose or constraints.
This PR adds a concise top-level description, improving documentation consistency and alerting users to the potential impacts of using the command.
Github-Pull: #32333
Rebased-From: 135a0f0aa711b95c50aa4cbe0c38d82d647f1c8b
17b31fc802
test: fix sync function in rpc_psbt.py
It currently only syncs between the first two nodes,
which may do nothing when the block is created on the
third node.
Github-Pull: #32630
Rebased-From: 4df4df45d7bc2e8be99325d40cda936aab87c083
646fa1d028
depends: use "mkdir -p" when installing xproto
It looks like the mkdir detection in xproto is broken on Alpine. Ensure
we always use `mkdir -p`.
Fixes #32494.
Github-Pull: #32568
Rebased-From: df9ebbf659d5d1282289f36d7f9ee7103aa33a17
4a1143b083
doc: update tor docs to use bitcoind binary from path
This RPC lists all the descriptors present in the wallet, not only
the ones that were imported, but also the ones generated when a
new wallet is created.
It can be verified by creating a new wallet and calling the
`listdescriptors` RPC, which will contain 8 ranged descriptors that
are created for every new wallet.
Github-Pull: #32708
Rebased-From: b44514b876333a94ae242da8b1e4cee439c2d37e
78688c8413
doc: add missing packages for BSDs (cmake, gmake, curl) to depends/README.md
guix: warn and abort when SOURCE_DATE_EPOCH is set
Current behaviour will by-default use SOURCE_DATE_EPOCH from the
environment without warning. This breaks the default reproducibility
from a guix build.
Warn when and exit when this variable is set, and
FORCE_SOURCE_DATE_EPOCH is unset.
Github-Pull: #32678
Rebased-From: 5c4a0f8009cef758be9412428515bfed57b0c923
23e76ef520
doc: make `-DWITH_ZMQ=ON` explicit on `build-unix.md`
depends: fix SHA256SUM command on OpenBSD (use GNU mode output)
On OpenBSD, the `sha256` command by default outputs hashsums on files in
"BSD" mode, looking like this:
$ sha256 ~/.vimrc
SHA256 (/home/thestack/.vimrc) = 6ba69d100e8c5ca0488ded6293d4e5f740a6a5d5ace96cbcf0599c18d27389e4
This is not compatible with our depends commands, which expect the
hashes to be on the first column (to be extracted via `cut -d" " -f1`).
Fix this by switching to GNU mode output, looking like this:
$ sha256 -r ~/.vimrc
6ba69d100e8c5ca0488ded6293d4e5f740a6a5d5ace96cbcf0599c18d27389e4 /home/thestack/.vimrc
Without this change, the multiprocess depends build fails with the following output:
$ gmake -C depends MULTIPROCESS=1 NO_BOOST=1 NO_LIBEVENT=1 NO_QT=1 NO_QR=1 NO_WALLET=1 NO_ZMQ=1 NO_USDT=1
[ ..... ]
Extracting native_libmultiprocess...
sha256: /home/thestack/bitcoin/depends/work/build/x86_64-unknown-openbsd7.7/native_libmultiprocess/-2bc902f4693/.src-ipc-libmultiprocess.tar.hash: no properly formatted checksum lines found
gmake: *** [funcs.mk:342: /home/thestack/bitcoin/depends/work/build/x86_64-unknown-openbsd7.7/native_libmultiprocess/-2bc902f4693/.stamp_extracted] Error 1
Github-Pull: #32690
Rebased-From: 8713e8060d504f561fed705b4aa5af7b96c36e75
Patch cmake_minimum_required version for freetype, using the version from
https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests/352/diffs
This fixes a failure when building with CMake 4, where compatibility
with CMake versions < 3.5 has been removed (see https://cmake.org/cmake/help/latest/release/4.0.html#deprecated-and-removed-features)
Github-Pull: #32693
Rebased-From: d7c37906e7b1dc1513439056d0cdb2bd341d00f1
7264459c0d
wallet: fix crash on double block disconnection
The wallet crashes if it processes the same block disconnection event twice in a row due
to an incompatible coinbase transaction state.
This happens because 'disconnectBlock' provides 'TxStateInactive' without the "abandoned"
flag for coinbase transactions to 'SyncTransaction', while 'AddToWallet()' internally
modifies it to retain the abandoned state.
The flow is as follows:
1) On the first disconnection, the transaction state transitions from "confirmed" to
"inactive," bypassing the state equality check since the provided state differs. Then,
'AddToWallet' internally updates the state to "inactive + abandoned"
2) On the second disconnection, as we provide only the "inactive" state
to 'SyncTransaction()', the state equality assertion fails and crashes the wallet.
Github-Pull: #31757
Rebased-From: 9ef429b6ae65f6ad3e9ac11c2d9c0a6c52beb865
a18085a18b
test: wallet, coverage for crash on dup block disconnection during unclean shutdown
Merge bitcoin/bitcoin#32589: [29.x] More backports
0922f6bbc33ac2abe3f3d9dc98dade896718864f doc: update release notes for 29.x (fanquake)
569760541407824687ef86dd1a5be9a492a5b16e contrib: tracing: Correctly read msg type in p2p_monitor.py (David Gumberg)
4c7ed36c9650065e5638d7ca5c7425c5cd50e3c7 test: Fix list index out of range error in feature_bip68_sequence.py (zaidmstrr)
3e23b47a6fafd1a46dcb731e4732079baa04ab97 doc: fix transifex 404s (fanquake)
616baf3c27ec767c530a47edac463ed60ddb8c5c doc: taproot became always active in v24.0 (Sjors Provoost)
ef6111bd18c28265daaa48a2d1466fb2eff5c200 depends: capnp 1.2.0 (fanquake)
8246c6a65f5e17aeeb351a2d649799c216bbed63 test: wallet, coverage for crash on dup block disconnection during unclean shutdown (Martin Zumsande)
a18085a18bb58ef6d688889c6f2d9717d8581766 wallet: fix crash on double block disconnection (furszy)
7264459c0df2b8dc0fa0d0ccab755b299878c588 build: patch cmake min version on freetype (josibake)
27c533052c307113bea548b7bcad40dbfd1fbcbe doc, windows: CompanyName "Bitcoin" => "Bitcoin Core project" (Hodlinator)
1b51d750ad1384a67010d40d7a9f9a6b96a22e43 depends: fix SHA256SUM command on OpenBSD (use GNU mode output) (Sebastian Falbesoner)
aea8a394b1b9c595d6388b714145700dc63adfe6 doc: make `-DWITH_ZMQ=ON` explicit on `build-unix.md` (Luis Schwab)
23e76ef520f5647993884e5affb54e33b9b66570 guix: warn and abort when SOURCE_DATE_EPOCH is set (will)
876a7b2db5273ef8f6864bef9c304d36047409f4 doc: add missing packages for BSDs (cmake, gmake, curl) to depends/README.md (Sebastian Falbesoner)
78688c84139b3e96148b17a4133e330bf8937c03 rpc, doc: update `listdescriptors` RCP help (rkrux)
c899334e36b63b530c44fe7273c951469762878c rpc: Note in fundrawtransaction doc, fee rate is for package (benthecarman)
247ee59f55cee2c6ee19203fa1d274efba054e7f doc: update tor docs to use bitcoind binary from path (ismaelsadeeq)
4a1143b083db87b6bbe158b97a4912fe73f76d09 depends: use "mkdir -p" when installing xproto (fanquake)
646fa1d028f091e281b7e9b0c45ca1040f4441d8 test: fix sync function in rpc_psbt.py (Martin Zumsande)
17b31fc80209ecd8ba0410553ca0458049b26e6a doc: Add missing top-level description to pruneblockchain RPC (nervana21)
e34b6fbcad6d8a2a58713d86c9ff646a0d2f2890 guix: accomodate migration to codeberg (fanquake)
142153ee42747677db3c9d8bdb75ec5bd4cecc18 cmake: Add missed `SSE41_CXXFLAGS` (Hennadii Stepanov)
Pull request description:
Backports
- #31757
- #32333
- #32439
- #32551 (just 800b7cc42ca63f2a6b245a4d327c7092289da6e1)
- #32568
- #32607
- #32630
- #32678
- #32679
- #32690 (just 8713e8060d504f561fed705b4aa5af7b96c36e75)
- #32693
- #32696
- #32708
- #32711
- #32719
- #32760
- #32765
- #32771
- #32776
- #32777
Closes #32625.
ACKs for top commit:
instagibbs:
ACK 0922f6bbc33ac2abe3f3d9dc98dade896718864f
willcl-ark:
ACK 0922f6bbc33ac2abe3f3d9dc98dade896718864f
Tree-SHA512: 0389e5d85fa897fdbefd37635f6ec822ca5ab48a57c4d40fdd4d1be2465c676f514b0db4d72c962ee15e0090b27ff17701e167d660eaa25f855d06bbb1fe0e6e
983b268768
build: add root dir to CMAKE_PREFIX_PATH
Nix patches cmake to remove the root directory `/` from
`CMAKE_SYSTEM_PREFIX_PATH`:
https://github.com/NixOS/nixpkgs/blob/428b49b28ebc8938a6d9f6c540d32d7a06713972/pkgs/by-name/cm/cmake/001-search-path.diff#L10
Without this, and when using the toolchain for depends builds, cmake's
`find_path()` and `find_package()` do not know where to find
dependencies, causing issues like:
https://github.com/bitcoin/bitcoin/issues/32428
Adding this path back via CMAKE_PREFIX_PATH is harmless on other
systems, and fixes the toolchain for Nix users.
We append the `/` dir a maximum of once, as the toolchain may be called
repeatedly during builds.
Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
Co-authored-by: josibake <josibake@protonmail.com>
Github-Pull: #32798
Rebased-From: e27a94596f2a1f5e04722a16165717cc6e891d36
e37a70bf71
test: fix catchup loop in outbound eviction functional test
The catchup loop in the outbound eviction functional test currently has
a small flaw, as the contained waiting for a `getheaders` message just
waits for any such message instead of one with the intended block hash.
The reason is that the `prev_prev_hash` variable is set incorrectly,
since the `tip_header` instance is not updated and its field `.hash` is
None. Fix that by updating `tip_header` and use the correct field -- we
want the tip header's previous hash (`.hashPrevBlock`).
Github-Pull: #32742
Rebased-From: dd8447f70faf6419b4617da3c1b57098e9cd66a6
5987c1b6ab
cmake: Use `HINTS` instead of `PATHS` in `find_*` commands
According to the CMake documentation, `HINTS` "should be paths computed
by system introspection, such as a hint provided by the location of
another item already found", which is precisely the case in the
`FindQRencode` module.
Entries in `HINTS` are searched before those in `PATHS`. On macOS,
Homebrew’s `libqrencode` will therefore be located at its real path
rather than via the symlink in the default prefix.
Github-Pull: #32805
Rebased-From: ead44687483e9c936ba970de890c01d5e7ad3485
a990c1002b
cmake: Explicitly specify `Boost_ROOT` for Homebrew's package
On macOS, this change ensures that the Boost package is located at its
real path rather than via the symlink in the default prefix.
Github-Pull: #32814
Rebased-From: 8800b5acc1ef7abe6c5260ae0be5386b1d593a19
a3c1939d6e
init: cap -maxmempool to 500 MB on 32-bit systems
32-bit architecture is limited to 4GiB, so it doesn't make sense to set a too high value. 500 MB is
chosen as an arbitrary maximum value that seems reasonable.
Github-Pull: #32530
Rebased-From: 2c43b6adebbfabb3c8dd82fe821ce0a5d6173b3b
eafea2393d
node: cap -dbcache to 1GiB on 32-bit architectures
32-bit architecture is limited to 4GiB, so it doesn't make sense to set a too
high value. Since this setting is performance critical, pick an arbitrary value
higher than for -maxmempool but still reasonable.
Github-Pull: #32530
Rebased-From: 9f8e7b0b3b787b873045a4a8194e77d0b0a2b3b6
Some ambiguous uses of "we" referring to either the node or the peer are replaced with clearer phrasing.
Also rephrase some comments for consistency and readability.
Applies to all relevant outbound eviction tests in p2p_eviction_logic.py.
Github-Pull: #32823
Rebased-From: 26598ed21ea7228c4ecf85da24527c88f9c1f1c1
f82015ccfc
test: Use rehash() in outbound eviction block-relay
Ensure that tip_header.rehash() is used instead of tip_header.hash, which is None when the header is deserialized from hex.
This avoids depending on wait_for_getheaders() falling back to any received message, making the test more explicit and robust.
Github-Pull: #32823
Rebased-From: ec004cdb86e6471915e1033f390c76ee0428e415
3a57bfaaf9
depends: Override host compilers for FreeBSD and OpenBSD
When building depends on FreeBSD/OpenBSD `aarch64`, the host compilers
default to `default_host_{CC,CXX}`, which resolves to `gcc`/`g++`. This
is incorrect on these systems, where Clang is the default system
compiler.
Github-Pull: #32716
Rebased-From: 4f10a57671c19cacca630b2401e42a213aacff1b
8a4a938db5
feature_taproot: sample tx version border values more
Currently if the version 3 is selected for an otherwise
standard spender, the test will fail. It's unlikely but
possible, so change the test to update expectations and
sample more aggressively on border values to instigate
failures much quicker in the future if another version is
made standard.
Github-Pull: #32841
Rebased-From: 4be81e9746e9e18923386d6f4945a33885fd98a7
9f3690b978
functional test: correctly detect nonstd TRUC tx vsize in feature_taproot
doc: clarify that the "-j N" goes after the "--build build" part
Also, capitalized the comments in build-unix.md for uniformity
with the docs on other targets.
Github-Pull: #32846
Rebased-From: 0e9f409db3b7b08aef75ce39765b018b69cc8e9d
83ee49b1dc
test: fix incorrect subtest in `feature_fee_estimation.py`
- Update `check_smart_estimates` to calculate the fee rate ceiling
by taking the maximum of fees seen, minrelaytxfee, and mempoolminfee.
- Improve the subtest name and comments.
Github-Pull: #32463
Rebased-From: 5c1236f04a24716b2cbd9b9b283863d3a8a6fa87
84c0c0e64b
test: retain the intended behavior of `feature_fee_estimation.py` nodes
- Increase block weight by 4000 for all nodes with custom -blockmaxweight.
Prior to this commit, we generated blocks with 4000 weight units less worth of transactions.
See https://github.com/bitcoin/bitcoin/issues/32461#issuecomment-2925282272 for details.
This commit fixes it by increasing the block weight by 4000.
Github-Pull: #32463
Rebased-From: 9b75cfda4d62a0a3bde402503244dd57e1621a12
depends: Force `CMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE`
When using CMake policies 3.14 and below, the `export(PACKAGE)` command
by default populates the user package registry, which is stored outside
the build tree. Setting the `CMAKE_EXPORT_NO_PACKAGE_REGISTRY` variable
disables this side effect.
In CMake 3.15 and later, this behavior is disabled by default, and the
variable has no effect.
Github-Pull: #32943
Rebased-From: 44f3bae300dcafbe53f9b07e6cc22a112833e579
bc2147c884
cmake: Drop no longer necessary "cmakeMinimumRequired" object
Starting with version 13.x, the mingw headers will define the value of
NTDDI_VERSION, based on the value of _WIN32_WINNT, if that version is <
Windows 10. Given that libevent was undefining our _WIN32_WINNT, and
redefining it to a value < Windows 10 (0x0501), NTDDI_VERSION was also
being defined to that value, leading to functions not being exposed in
the mingw-w64 headers; see here:
https://github.com/mingw-w64/mingw-w64/blob/9c2668ef77e75ea4d8a6c7d100b14643269caec3/mingw-w64-headers/include/iphlpapi.h#L36-L41.
Imports a commit from usptream (a14ff91254f40cf36e0fee199e26fb11260fab49).
Fixes #32707.
Github-Pull: #32837
Rebased-From: f5647c6c5ae85e9469cfc5df6fcac23752e1695a
730886b92b
doc: update release notes for 29.x5300295083
Merge bitcoin/bitcoin#32863: [29.x] Backports
5300295083f2e199c22a7ad55e62a8dc7549a76e doc: update release notes for 29.x (fanquake)
730886b92b661ae6fb2731f79f1371262187b1d5 depends: fix libevent _WIN32_WINNT usage (fanquake)
f798c317a08c1fdbc560fa70af624396ec4cb488 cmake: Drop no longer necessary "cmakeMinimumRequired" object (Hennadii Stepanov)
bc2147c884d971ec57c782004142b99af6175d9a depends: Force `CMAKE_EXPORT_NO_PACKAGE_REGISTRY=TRUE` (Hennadii Stepanov)
58b1a65ab0883bb14cb8ffaf76580800a29a92d2 add more bad p2p ports (Jameson Lopp)
f85d41c2249dfd9a343fdc3cfe139218371bf891 test: retain the intended behavior of `feature_fee_estimation.py` nodes (ismaelsadeeq)
84c0c0e64b799f8f19791e8c71a7a6e10baa1c3b test: fix incorrect subtest in `feature_fee_estimation.py` (ismaelsadeeq)
83ee49b1dc9b1a086c1ac910e3bcd2ec38dd6d69 doc: clarify that the "-j N" goes after the "--build build" part (Salvatore Ingala)
e5a7575a6df8abd5153f29f1df2503146ac81810 doc: Add workaround for vcpkg issue with paths with embedded spaces (Hennadii Stepanov)
59a83fb8d1f9030111a70e8184091e61cef15c38 functional test: correctly detect nonstd TRUC tx vsize in feature_taproot (Greg Sanders)
9f3690b9785a5e818d2b889a395b65f42fd78378 feature_taproot: sample tx version border values more (Greg Sanders)
8a4a938db527636aadaa874d733542613b3d14b6 depends: Override host compilers for FreeBSD and OpenBSD (Hennadii Stepanov)
3a57bfaaf9b0712ff080bd8a315c01552735b882 test: Use rehash() in outbound eviction block-relay (pablomartin4btc)
f82015ccfc7c719405e942ef31c4b59865ee576a test: Clarify roles in outbound eviction comments (pablomartin4btc)
222fbfcc6a02ec5bac367e156392d49fb215c066 test: check P2SH sigop count for coinbase tx (brunoerg)
Pull request description:
Backports
- #32463
- #32716
- #32823
- #32826
- #32837
- #32841
- #32846
- #32850
- #32858
- #32859
- #32943
- #32954
ACKs for top commit:
hebasto:
ACK 5300295083f2e199c22a7ad55e62a8dc7549a76e, I've backported all listed PRs locally (had 3 conflicts to resolve), and got zero diff with this PR.
glozow:
ACK 5300295083f2e199c22a7ad55e62a8dc7549a76e
Tree-SHA512: c2f764ce3dcd1b6c16bfbe73a548a815f8d7db83653436d17686541a5cb530255a96132865442aa2f569340c95abee31aadda8bf0736582c7a19720029096b1e
ef380a454c
policy: make pathological transactions packed with legacy sigops non-standard.
The Consensus Cleanup soft fork proposal includes a limit on the number of legacy signature
operations potentially executed when validating a transaction. If this change is to be implemented
here and activated by Bitcoin users in the future, we should prevent the ability for someone to
broadcast a transaction through the p2p network that is not valid according to the new rules. This
is because if it was possible it would be a trivial DoS to potentially unupgraded miners after the
soft fork activates.
We do not know for sure whether users will activate the Consensus Cleanup. However if they do such
transactions must have been made non-standard long in advance, due to the time it takes for most
nodes on the network to upgrade. In addition this limit may only be run into by pathological
transactions which pad the Script with sigops but do not use actual signatures when spending, as
otherwise they would run into the standard transaction size limit.
Github-Pull: bitcoin/bitcoin#32521
Rebased-From: 5863315e33ba9b75a1e5189ee3da3d7311bbf193
204b965915
qa: unit test standardness of inputs packed with legacy sigops
Check bounds and different output types.
Github-Pull: bitcoin/bitcoin#32521
Rebased-From: 367147954d16c961bbd28c361abf27b4cb665f10
0a4671d5eb
qa: functional test a transaction running into the legacy sigop limit
It's useful to have an end-to-end test in addition to the unit test to sanity check the RPC error as
well as making sure the transaction is otherwise fully standard.
Github-Pull: bitcoin/bitcoin#32521
Rebased-From: 96da68a38fa295d2414685739c41b8626e198d27
313023369b
test: Do not pass tests on unhandled exceptions
This adds a missing catch for BaseException (e.g. SystemExit), which
would otherwise be silently ignored.
Also, remove the redundant other catches, which are just calling
log.exception with a redundant log message.
Github-Pull: #33001
Rebased-From: fa30b34026f76a5b8af997152fced2d281782e0d
79e1a3c9c6
test: Log KeyboardInterrupt as exception
log.exception is more verbose and useful to debug timeouts.
Also, log stderr for CalledProcessError to make debugging easier.
Github-Pull: #33001
Rebased-From: faa3e684118bffa7a98cf76eeeb59243219df900
5e327e6703
doc: update release notes for 29.x411e15194b
doc: update release notes for 29.xf25dc84b28
Merge bitcoin/bitcoin#33046: [29.x] test: Do not pass tests on unhandled exceptions
411e15194b3a770ff455d413a0fe2495f0362297 doc: update release notes for 29.x (fanquake)
5e327e6703f10d3de12c56bb9701b07521a9f703 test: Log KeyboardInterrupt as exception (MarcoFalke)
79e1a3c9c6a4661562d419dc3427b35060ed0451 test: Do not pass tests on unhandled exceptions (MarcoFalke)
Pull request description:
Backports #33001 to `29.x`.
ACKs for top commit:
pablomartin4btc:
ACK 411e15194b3a770ff455d413a0fe2495f0362297
marcofleon:
lgtm ACK 411e15194b3a770ff455d413a0fe2495f0362297
Tree-SHA512: ea930f8c24a0a5e18f2107e96540db5c39941442059190d6104dfcf88b4a33d06ecaa7dbdf8baa91e564ee7ca3d12df5118c7fa404a38108de4ad0e5f122f72d
8063d55446
test: fix intermittent failure in wallet_reorgsrestore.py
Wait until the node's process has fully stopped before starting a new instance.
Since the same code is used in tool_wallet.py, this consolidates the behavior
into a 'kill_process()' function.
Github-Pull: bitcoin/bitcoin#32069
Rebased-From: 36b0713edc4655f6e0c291975d6d280fbc89cf2e
c6fe6971bfa52d8fe2901a051f18da9f3bcb26a9 doc: update release notes for 29.x (fanquake)
380b5aded21772f9b7a31418109c20b2e15d090e test: fix intermittent failure in wallet_reorgsrestore.py (furszy)
Pull request description:
Backport https://github.com/bitcoin/bitcoin/pull/32069 to 29. This is a test flakiness fix for https://github.com/bitcoin/bitcoin/pull/31757, which was backported to 29 in https://github.com/bitcoin/bitcoin/pull/32589.
ACKs for top commit:
marcofleon:
ACK c6fe6971bfa52d8fe2901a051f18da9f3bcb26a9
Tree-SHA512: 82517eef67c8d0fe57e70cb769d1b040ea8dea41c2d2e5b442477e1c7add7d7bac1c4aabbebc5b7d440db5b7bf00f1d70dc6ffb375b7a2e77d9599c543579122
f25dc84b2892e6bdbbd0471add9fcb2757700981 doc: update release notes for 29.x (Antoine Poinsot)
313023369b8e4ffb268cb642101680fe7f746fea qa: functional test a transaction running into the legacy sigop limit (Antoine Poinsot)
0a4671d5eba2499a27e530536b48b86166319fe8 qa: unit test standardness of inputs packed with legacy sigops (Antoine Poinsot)
204b96591542373dc75c6a6401b477f4b6615e69 policy: make pathological transactions packed with legacy sigops non-standard. (Antoine Poinsot)
Pull request description:
This backports PR #32521 to make the change available to miners who can't (or don't want to) upgrade past version 29.
ACKs for top commit:
marcofleon:
reACK f25dc84b2892e6bdbbd0471add9fcb2757700981
glozow:
ACK f25dc84b2892e6bdbbd0471add9fcb2757700981
Tree-SHA512: d5e06618720ed1a96d8a5fccdd8d1dbcbb5748505aa0df69198326828fe13f220e55bbce813f6f2daae82d23348e1f83a3a20a28639ec3fc2455c5b6e79a56e6
4bf77955ed
[build] bump version to 29.1rc1735ffad864
[doc] manpages for 29.1rc106eb42d83c
[doc] update release notes for v29.1rc14c2d285b70
Merge bitcoin/bitcoin#33056: [29.x] final changes for v29.1rc1
4c2d285b706058ece7092d03f0e5ad1112c2097f [doc] update release notes for v29.1rc1 (glozow)
06eb42d83cf7eb76dc89bb6ca04f51eb17847d06 [doc] manpages for 29.1rc1 (glozow)
735ffad864ce6cc1f9a1c13f0cb15bcf30284dd6 [build] bump version to 29.1rc1 (glozow)
Pull request description:
ACKs for top commit:
marcofleon:
nice, ACK 4c2d285b706058ece7092d03f0e5ad1112c2097f
fanquake:
ACK 4c2d285b706058ece7092d03f0e5ad1112c2097f
darosior:
ACK 4c2d285b706058ece7092d03f0e5ad1112c2097f
Tree-SHA512: ffcc45566e33b8c4b80da1c751a5045863e06a31de81ec6f3f5ba26717eb8e7087139f7d2696ed5c61170efb62b5b9416f350bcb108a03afcdfa38e77067d612
565af03c37
doc/zmq: fix unix socket path example
Following https://github.com/bitcoin/bitcoin/blob/75a5c8258ec5309fe506438aa3815608430b53d6/doc/release-notes/release-notes-28.0.md?plain=1#L105
Github-Pull: #33070
Rebased-From: e83699a626b8a41c8fb9d0450e14e06a29a98bb8
3cd8612cd7
tracing: fix pointer argument handling in mempool_monitor.py
The BPF code was incorrectly passing pointer variables by value to
bpf_usdt_readarg(), causing the function to fail silently and resulting
in transaction hashes and reason strings displaying as zeros or garbage.
This fix adds the missing reference operator (&) when passing pointer
variables to bpf_usdt_readarg(), allowing the function to properly
write the pointer values and enabling correct display of transaction
hashes and removal/rejection reasons.
Fixes the regression introduced in ec47ba349d where bpf_usdt_readarg_p
was replaced with bpf_usdt_readarg but the calling convention wasn't
properly updated for pointer arguments.
Github-Pull: #33086
Rebased-From: 0ce041ea88dbea2bdfaf21fd0e60a86012498f0a
9437415024
guix: warn SOURCE_DATE_EPOCH set in guix-codesign
Currently there is a warning for this in guix-build, but we also need
one in guix-codesign, otherwise the codesigned hashes are not
reproducible.
Move common functionality into prelude and call the function in both
guix actions.
Github-Pull: #33073
Rebased-From: 1bed0f734b3f2dd876193b5cad303bfab1d250d5
a18b53f99e
doc: Add rel note for breaking change in dumptxoutset RPC
This was missed in the v29.0 release notes.
264418f80c
doc: move `cmake -B build -LH` up in Unix build docs
The getpeerinfo docs incorrectly specified the ping durations as
milliseconds. This was incorrectly changed in a3789c700b5a43efd4b366b4241ae840d63f2349
(released in v25; master since Sept. 2022). The correct duration unit
is seconds.
Also, remove the documentation of the getpeerinfo RPC response from the
ping RPC since it's incomplete. Better to just reference the getpeerinfo
RPC and it's documenation for this.
Github-Pull: #33133
Rebased-From: 1252eeb997df2eb12c33d92eb1a5c9d6643a67ff
4e8abca445
test: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify 'spend_vin' is the correct field
b9e637bd0ee4d1da5f587ec33cbed9ee28c07daf doc: update release notes for 29.x (fanquake)
2b9738a0835f50845ed183e124347b07b7bcce10 test: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify 'spend_vin' is the correct field (Chris Stewart)
4e8abca44506ac39166e4a7372f8ee0f6d1def0a rpc: fix getpeerinfo ping duration unit docs (0xb10c)
a08886d5640a808e302108575ffbebd7df5f8f11 doc: move `cmake -B build -LH` up in Unix build docs (Bufo)
264418f80cea7fd5ae818a2a2887fab62de2b0a2 doc: Add rel note for breaking change in dumptxoutset RPC (Chris Stewart)
a18b53f99e4bf7f038dac635f27bddf17d285010 guix: warn SOURCE_DATE_EPOCH set in guix-codesign (will)
9437415024da7dd51705e46e4243f7e1694acaf5 tracing: fix pointer argument handling in mempool_monitor.py (deadmanoz)
3cd8612cd7719c0a4dfa104bae3467b562d567d7 doc/zmq: fix unix socket path example (Roman Zeyde)
Pull request description:
Backports:
* #33070
* #33073
* #33086
* #33088
* #33103
* #33119
* #33133
ACKs for top commit:
glozow:
ACK b9e637bd0ee4d1da5f587ec33cbed9ee28c07daf
Tree-SHA512: bf2a700ec4d730548cf5abf10930b41e26742ea23582149b0eddcaaa48c1db05ab657ef9ffc7dcba2d1af2e265d0ea866d7b484a321a9c9ac662a6dc2263d102
837c5c7fd8
test: Mark ~DebugLogHelper as noexcept(false)
We mark ~DebugLogHelper as noexcept(false) to be able to catch the
exception it throws. This lets us use it in test in combination with
BOOST_CHECK_THROW and BOOST_CHECK_NO_THROW to check that certain log
messages are (not) logged.
Co-Authored-By: Niklas Gogge <n.goeggi@gmail.com>
Github-Pull: #32604
Rebased-From: df7972a6cfd919b972bcbba07de85f7797898529
4987c03531
log: introduce LogRateLimiter, LogLimitStats, Status
LogRateLimiter will be used to keep track of source locations and our
current time-based logging window. It contains an unordered_map and a
m_suppressions_active bool to track source locations. The map is keyed
by std::source_location, so a custom Hash function (SourceLocationHasher)
and custom KeyEqual function (SourceLocationEqual) is provided.
SourceLocationHasher uses CSipHasher(0,0) under the hood to get a
uniform distribution.
A public Reset method is provided so that a scheduler (e.g. the
"b-scheduler" thread) can periodically reset LogRateLimiter's state when
the time window has elapsed.
The LogRateLimiter::Consume method checks if we have enough available
bytes in our rate limiting budget to log an additional string. It
returns a Status enum that denotes the rate limiting status and can
be used by the caller to emit a warning, skip logging, etc.
The Status enum has three states:
- UNSUPPRESSED (logging was successful)
- NEWLY_SUPPRESSED (logging was succcesful, next log will be suppressed)
- STILL_SUPPRESSED (logging was unsuccessful)
LogLimitStats counts the available bytes left for logging per source
location for the current logging window. It does not track actual source
locations; it is used as a value in m_source_locations.
Also exposes a SuppressionsActive() method so the logger can use
that in a later commit to prefix [*] to logs whenenever suppressions
are active.
Co-Authored-By: Niklas Gogge <n.goeggi@gmail.com>
Co-Authored-By: stickies-v <stickies-v@protonmail.com>
Github-Pull: #32604
Rebased-From: afb9e39ec5552e598a5febaa81820d5509b7c5d2
41262cc4d5
log: use std::source_location in place of __func__, __FILE__, __LINE__
The std::source_location conveniently stores the file name, line number,
and function name of a source code location. We switch to using it instead
of the __func__ identifier and the __FILE__ and __LINE__ macros.
BufferedLog is changed to have a std::source_location member, replacing the
source_file, source_line, and logging_function members. As a result,
MemUsage no longer explicitly counts source_file or logging_function as the
std::source_location memory usage is included in the MallocUsage call.
This also changes the behavior of -logsourcelocations as std::source_location
includes the entire function signature. Because of this, the functional test
feature_config_args.py must be changed to no longer include the function
signature as the function signature can differ across platforms.
Co-Authored-By: Niklas Gogge <n.goeggi@gmail.com>
Co-Authored-By: stickies-v <stickies-v@protonmail.com>
Github-Pull: #32604
Rebased-From: a6a35cc0c23d0d529bfeb2f40d83d61f15ca7b40
a0992a842e
log: Add rate limiting to LogPrintf, LogInfo, LogWarning, LogError, LogPrintLevel
To mitigate disk-filling attacks caused by unsafe usages of LogPrintf and
friends, we rate-limit them by passing a should_ratelimit bool that
eventually makes its way to LogPrintStr which may call
LogRateLimiter::Consume. The rate limiting is accomplished by
adding a LogRateLimiter member to BCLog::Logger which tracks source
code locations for the given logging window.
Every hour, a source location can log up to 1MiB of data. Source
locations that exceed the limit will have their logs suppressed for the
rest of the window determined by m_limiter.
This change affects the public LogPrintLevel function if called with
a level >= BCLog::Level::Info.
The UpdateTipLog function has been changed to use the private LogPrintLevel_
macro with should_ratelimit set to false. This allows UpdateTipLog to log
during IBD without hitting the rate limit.
Note that on restart, a source location that was rate limited before the
restart will be able to log until it hits the rate limit again.
Co-Authored-By: Niklas Gogge <n.goeggi@gmail.com>
Co-Authored-By: stickies-v <stickies-v@protonmail.com>
Github-Pull: #32604
Rebased-From: d541409a64c60d127ff912dad9dea949d45dbd8c
0b6b096421
doc: add release notes for new rate limiting logging behavior
log: change LogLimitStats to struct LogRateLimiter::Stats
Clean up the noisy LogLimitStats and remove references to the time
window.
Co-Authored-By: stickies-v <stickies-v@protonmail.com>
Github-Pull: #33011
Rebased-From: 3c7cae49b692bb6bf5cae5ee23479091bed0b8be
7c3820ff63
log: clean up LogPrintStr_ and Reset, prefix all logs with "[*]" when there are suppressions
In LogPrintStr_:
- remove an unnecessary BCLog since we are in the BCLog namespace.
- remove an unnecessary \n when rate limiting is triggered since
FormatLogStrInPlace will add it.
- move the ratelimit bool into an else if block.
- prefix all log lines with [*] when suppressions exist. Previously this
was only done if should_ratelimit was true.
In Reset:
- remove an unnecessary \n since FormatLogStrInPlace will add it.
- Change Level::Info to Level::Warning.
Github-Pull: #33011
Rebased-From: e8f9c37a3b4c9c88baddb556c4b33a4cbba1f614
81751341e9
log: make m_limiter a shared_ptr
This allows us to safely and explicitly manage the dual dependency
on the limiter: one for the Logger, and one for the CScheduler.
Github-Pull: #33011
Rebased-From: 3d630c2544e19480268426cda245796d4ce34ac3
acfa83d9d0
test: add ReadDebugLogLines helper function
Deduplicates repeated usage of the same functionality.
Github-Pull: #33011
Rebased-From: 05d7c22479bf96bab9f8c8b8fa90368429ad2c88
4ed7a51642
test: don't leak log category mask across tests
This ensures log tests behave consistently when other tests modify
the log category mask.
Github-Pull: #33011
Rebased-From: 350193e5e2efabb3eb66197b91869b946ec5428c
11538160b3
test: logging_filesize_rate_limit improvements
- Add helper functions and structs to improve readability and
reusability of test code
- Make tests more specific by comparing all produced log lines with
expected log lines instead of relying on approximations or proxies.
Github-Pull: #33011
Rebased-From: 9f3b017bcc067bba1d1682a5d4e65b5450dc10c4
dfdd407c42
config: add DEBUG_ONLY -logratelimit
Use -nologratelimit by default in functional tests if the bitcoind
version supports it.
Co-Authored-By: stickies-v <stickies-v@protonmail.com>
Github-Pull: #33011
Rebased-From: 5c74a0b397cb3db94761bad78801eed4544155b9
206f5902db
test: modify logging_filesize_rate_limit params
Change time_window from 20s to 1h so Reset is not accidentally called
if the test takes a while.
Change num_lines from 1024 to 10 since LogRateLimiter is parameterized
and does not require logging 1MiB of data.
Co-Authored-By: stickies-v <stickies-v@protonmail.com>
Github-Pull: #33211
Rebased-From: 5dda364c4b1965da586db7b81de8be90b6919414
Back when we implemented coin age priority as a miner policy, miners
mempools might admit transactions paying very low fees, but then want to
set a higher fee for block inclusion. However, since coin age priority
was removed in v0.15, the block assembly policy is solely based on fees,
so we do not need to apply minimum feerate rules in multiple places. In
fact, the block assembly policy ignoring transactions that are added to
the mempool is likely undesirable as we waste resources accepting and
storing this transaction.
Instead, rely on mempool policy to enforce a minimum entry feerate to
the mempool (minrelaytxfee). Set the minimum block feerate to the
minimum non-zero amount (1sat/kvB) so it collects everything it finds in
mempool into the block.
Github-Pull: #33106
Rebased-From: 5f2df0ef78be7b24798d0983c9b962740608f1f4
1c1970fb45
[prep/test] replace magic number 1000 with respective feerate vars
[prep/util] help MockMempoolMinFee handle more precise feerates
Use a virtual size of 1000 to keep precision when using a feerate
(which is rounded to the nearest satoshi per kvb) that isn't just an
integer.
Github-Pull: #33106
Rebased-From: 457cfb61b5323a13218b3cfb5a6a6d8b3a7c5f7f
da30ca0efa
[prep/test] make wallet_fundrawtransaction's minrelaytxfee assumption explicit
[policy] lower default minrelaytxfee and incrementalrelayfee to 100sat/kvB
Let's say an attacker wants to use/exhaust the network's bandwidth, and
has the choice between renting resources from a commercial provider and
getting the network to "spam" itself it by sending unconfirmed
transactions. We'd like the latter to be more expensive than the former.
The bandwidth for relaying a transaction across the network is roughly
its serialized size (plus relay overhead) x number of nodes. A 1000vB
transaction is 1000-4000B serialized. With 100k nodes, that's 0.1-0.4GB
If the going rate for commercial services is 10c/GB, that's like 1-4c per kvB
of transaction data, so a 1000vB transaction should pay at least $0.04.
At a price of 120k USD/BTC, 100sat is about $0.12. This price allows us
to tolerate a large decrease in the conversion rate or increase in the
number of nodes.
Github-Pull: #33106
Rebased-From: 6da5de58cabc4133c379baa50845e30e5bc6b3e4
9dd7efc8c3
[doc] update release notes
Release notes are from 18720bc5d5b4d3acf91060859180d72cbfdf59b7
f9f1ca5445
[build] bump version to 29.1rc2eb1574af0c
[doc] man pages for 29.1rc20034dcfba9
Merge bitcoin/bitcoin#33226: [29.x] 33106 backport and final changes for rc2
0034dcfba9dc599449e7569ed1b30e58d4f4434f [doc] man pages for 29.1rc2 (glozow)
eb1574af0c6cba4918957d704c5c0f17235a10b5 [build] bump version to 29.1rc2 (glozow)
f9f1ca5445fc216c770b583c1db999aaf910f96f [doc] update release notes (glozow)
9dd7efc8c3fc30cd65ae18a8a91e292c71fe7c16 [policy] lower default minrelaytxfee and incrementalrelayfee to 100sat/kvB (glozow)
bbdab3ef7b7e8f3da4e571f35692bc3264c384db [prep/test] make wallet_fundrawtransaction's minrelaytxfee assumption explicit (glozow)
da30ca0efadd3861016f6435636d9b399da65162 [prep/util] help MockMempoolMinFee handle more precise feerates (glozow)
a0ae3fc8a764121b17e11e3a99330e73c0e44c2d [prep/test] replace magic number 1000 with respective feerate vars (glozow)
1c1970fb45896dc5fa7b16370408c34964ed4c19 [miner] lower default -blockmintxfee to 1sat/kvB (glozow)
3a7e093f948571e058db31dd971dc628d9729232 [doc] assert that default min relay feerate and incremental are the same (glozow)
567c3ee3cb937de09d3fe8b7e82e431993fac7c7 [test] explicitly check default -minrelaytxfee and -incrementalrelayfee (glozow)
6b5396c4b1b3561f79e0c4881dad5eb0ca7b44ae [test] RBF rule 4 for various incrementalrelayfee settings (glozow)
03da7aff996eaaddce04448f8461d4f3d15d2a4a [test] check bypass of minrelay for various minrelaytxfee settings (glozow)
4e3cfa660d1ab1552881f2eedb5123ab7d0fe0b0 [test] check miner doesn't select 0fee transactions (glozow)
Pull request description:
Backports #33106 and includes final changes for 29.1rc2. Based on current network conditions (in which nodes rejecting 0.1-1sat/vB are missing many transactions), it is recommended to change these policy settings.
I did not include #32750 because it causes #33177 and I don't foresee any problems; it was just a nice to have.
For reviewers: the backport is unclean but fairly straightforward. I just had to adapt a test that is no longer in master (#32973) and include `-datacarriersize` in order to pad transaction size (#32406).
ACKs for top commit:
dergoegge:
utACK 0034dcfba9dc599449e7569ed1b30e58d4f4434f
marcofleon:
ACK 0034dcfba9dc599449e7569ed1b30e58d4f4434f
murchandamus:
crACK 0034dcfba9dc599449e7569ed1b30e58d4f4434f
brunoerg:
crACK 0034dcfba9dc599449e7569ed1b30e58d4f4434f
Tree-SHA512: 1b7540ac3fec5b15cf36926dbf633054f14549d76aa445a2bf042b5667e8637db4f9c21c869af25a0c3f8c7cca6c585d17896d2f7e95a6264c1ff59817446694
89fe999cda
doc: update example bitcoin conf for 29.1rc265dc198d2c
Merge bitcoin/bitcoin#33234: doc: update example bitcoin conf for 29.1rc2
65dc198d2cf7160f54a469a0c806232e83dc7599 doc: update example bitcoin conf for 29.1rc2 (fanquake)
Pull request description:
Followup to #33226.
ACKs for top commit:
dergoegge:
ACK 65dc198d2cf7160f54a469a0c806232e83dc7599
willcl-ark:
ACK 65dc198d2cf7160f54a469a0c806232e83dc7599
Tree-SHA512: b2924783dd98890bd031dbca8c9c126cd3ab45c3cc8d2f14dd5b5f940fcc7061f3d1f73e2d36482afceaae786f3087b59baab98db0f10bc0d19e3f016f52851a
027a60d218
index: don't commit state in BaseIndex::Rewind
The committed state of an index should never
be ahead of the flushed chainstate. Otherwise, in the case
of an unclean shutdown, the blocks necessary to revert
from the prematurely committed state would not be
available, which would corrupt the coinstatsindex in particular.
Instead, the index state will be committed with the next
ChainStateFlushed notification.
Github-Pull: #33212
Rebased-From: 01b95ac6f496e24e525b2fc9d69ee8b543da65ff
16b1710d97
test: index with an unclean restart after a reorg
This test fails without the previous commit.
Github-Pull: #33212
Rebased-From: a602f6fb7bf5f9e57299f4d6e246c82379fad8d2
fcac8022d839572f5d8781096eec14ca7ea2e0dd test: index with an unclean restart after a reorg (Martin Zumsande)
16b1710d97464f134a526634a412a4b1b6cc8639 index: don't commit state in BaseIndex::Rewind (Martin Zumsande)
Pull request description:
Backports #33212 to 29.x
ACKs for top commit:
achow101:
ACK fcac8022d839572f5d8781096eec14ca7ea2e0dd
stickies-v:
ACK fcac8022d8
mzumsande:
Code Review ACK fcac8022d839572f5d8781096eec14ca7ea2e0dd
Tree-SHA512: eeb9213f03bbb1d48c3ccb12121a6e475f436895d314b5171007e7e4ee457c74b312fa7f0d1808d6221dc22b192700a93ea21c4e9e04689da7dde7e1f79e9569
162c009c1d
doc: Remove wrong and redundant doxygen tag
Remove it in feerate.
Fix it in the other places.
Github-Pull: #33236
Rebased-From: 966666de9a6211b8748f43d682490c924e132e58
084c95a18c9978c0a047ffe219a9eef8ab327ea6 doc: update manual pages for v29.1 (fanquake)
37d115c67eafec68128649651a7e921c3e2635ce build: bump version to v29.1 final (fanquake)
b0d88bcc501bf0fc06e64c2f0a295b99a1101073 doc: finalise release notes for 29.1 (fanquake)
99ab2e70e782bf5ca753ad636f69642da6054283 ci: return to using dash in CentOS job (fanquake)
6448ebb5a7c942949a70ffc4a1d2a93338fac130 doc: Remove wrong and redundant doxygen tag (MarcoFalke)
Pull request description:
Backports:
* #33236
* #33261
Since `rc2`, #33212 was also backported in #33251.
ACKs for top commit:
glozow:
ACK 084c95a18c9978c0a047ffe219a9eef8ab327ea6
willcl-ark:
ACK 084c95a18c9978c0a047ffe219a9eef8ab327ea6
Tree-SHA512: 0698e5b2d12f7328bf5af8dbbd92b0049de401c0a4af27fda2209f9aab35d827c5ac65eb9268aa1fae241e3adf0d3dd89324bb288655ead8af2b5584aae1f6d2
fd784f2774
ci: Use APT_LLVM_V in msan task
Also, use update-alternatives to avoid having to manually specify
clang-${APT_LLVM_V} or llvm-symbolizer-${APT_LLVM_V} everywhere.
Github-Pull: #32999
Rebased-From: fad040a5787a8ac0a13aef5c54e5a675de239e92
Merge bitcoin/bitcoin#33294: [29.x] *san CI backports
7c6be9acae5a16956a7f8e53ae3f944a187a6713 doc: update release notes for 29.x (fanquake)
ea40fa95d9af004d85187bee9d8efe278c888d8f ci: use LLVM 21 (fanquake)
5513516241463333548600f691a861dba4c1d5c5 ci: remove DEBUG_LOCKORDER from TSAN job (fanquake)
f9939cdbe01fa090bd2ece90f5cbfb17120c2f24 ci: instrument libc++ in TSAN job (fanquake)
0fba5ae02101b358aa4938d35471356b75e0e615 ci: allow libc++ instrumentation other than msan (fanquake)
10cbf2255d9e74166f5f41e82fefa4a7f890e73f ci: Use APT_LLVM_V in msan task (MarcoFalke)
Pull request description:
Backports:
* #32999
* #33099 (added `ninja-build`)
* #33258
ACKs for top commit:
marcofleon:
ACK 7c6be9acae5a16956a7f8e53ae3f944a187a6713, looks okay to me
Tree-SHA512: 928882d505ed8101a6d4123947252a84d40bd350383408926b5c37aed56dc3359067d1d14c443c51351a6958a8dd9e141bb7713665295ff1f1ad86c5f8a36df0
a0e438bd49
Fix benchmark CSV output
The `SHA256AutoDetect` return output is used, among other use cases, to
name benchmarks. Using a comma breaks the CSV output.
This change replaces the comma with a semicolon, which fixes the issue.
Github-Pull: #33340
Rebased-From: 790b440197bde322432a5bab161f1869b667e681
2717331981
ci: always use tag for LLVM checkout
Rather than trying to match the apt installed clang version, which is
prone to intermittent issues. i.e #33345.
Github-Pull: #33364
Rebased-From: b736052e39f1f466f63f261ace3dd2deba171e8a
324caa8497
trace: Workaround GCC bug compiling with old systemtap
Since #29412, we have not allowed mutated blocks to continue
being processed immediately the block is received, but this
is only done for the legacy BLOCK message.
Extend these checks as belt-and-suspenders to not allow
similar mutation strategies to affect relay by honest peers
by applying the check inside
PartiallyDownloadedBlock::FillBlock, immediately before
returning READ_STATUS_OK.
This also removes the extraneous CheckBlock call.
Github-Pull: #32646
Rebased-From: bac9ee4830664c86c1cb3d38a5b19c722aae2f54
net: check for empty header before calling FillBlock
Previously in debug builds, this would cause an Assume crash if
FillBlock had been called previously. This could happen when multiple
blocktxn messages were received.
Co-Authored-By: Greg Sanders <gsanders87@gmail.com>
Github-Pull: #33296
Rebased-From: 5e585a0fc4fd68dd7b4982054b34deae2e7aeb89
569ceb0df4
test: send duplicate blocktxn message in p2p_compactblocks.py
Add test_multiple_blocktxn_response that checks that the peer is
disconnected.
Github-Pull: #33296
Rebased-From: 8b6264768030db1840041abeeaeefd6c227a2644
1288d44804
net: Do not apply whitelist permission to onion inbounds
Tor inbound connections do not reveal the peer's actual network address.
Therefore do not apply whitelist permissions to them.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
Github-Pull: #33395
Rebased-From: f563ce90818d486d2a199439d2f6ba39cd106352
61cdc04a83
doc: update release notes for 29.x9bc4afb62c
build: bump version to v29.2rc1461dd13faf
doc: update manual pages for v29.2rc1f2bd79f80c
Merge bitcoin/bitcoin#33344: [29.x] Backports
f2bd79f80c74a2b77f14954ac65679417697a332 doc: update manual pages for v29.2rc1 (fanquake)
461dd13fafa6f8175e2be4d96e8728e667ba4d69 build: bump version to v29.2rc1 (fanquake)
9bc4afb62cf04a41b62fe279f0db3d87e700cb3d doc: update release notes for 29.x (fanquake)
61cdc04a832cc5dfe98c48f8592c4de513258304 net: Do not apply whitelist permission to onion inbounds (Martin Zumsande)
1288d44804cd6ecd8601d0aef55e6fbf500d2f31 test: send duplicate blocktxn message in p2p_compactblocks.py (Eugene Siegel)
569ceb0df46fc619eed33f56b5b36f617c37bae7 net: check for empty header before calling FillBlock (Eugene Siegel)
4c940d47897bc380d3387dd6663c37c46b4020ec p2p: remove vestigial READ_STATUS_CHECKBLOCK_FAILED (Greg Sanders)
9b95ab5e9db1691be5f26fc5bc1c186777d2dc5b p2p: Add witness mutation check inside FillBlock (Greg Sanders)
e97588fc3d1e1a02382312ade7d529c5b4b60016 trace: Workaround GCC bug compiling with old systemtap (Luke Dashjr)
324caa84977cc74ac19df605503483e59739773e ci: always use tag for LLVM checkout (fanquake)
2717331981ec94fd616a08f31e643391a2118639 Fix benchmark CSV output (Hennadii Stepanov)
Pull request description:
Backports:
* #32646
* #33296
* #33310
* #33340
* #33364
* #33395
Plus changes for 29.2rc1.
ACKs for top commit:
darosior:
utACK f2bd79f80c74a2b77f14954ac65679417697a332
mzumsande:
utACK f2bd79f80c74a2b77f14954ac65679417697a332
Tree-SHA512: 346a92032b7a069e2941056c6273ff65e360c5834832b106350a9cd42b634518cc75b807da6e51a6292e3a33342bb7b145777d3538a2792e03c63962d747a025
7e1eca4882
ci: add configure environment action
Github-Pull: #32989
Rebased-From: b8fcc9fcbcd
f63b8e960d
ci: add caching actions
Github-Pull: #32989
Rebased-From: b232b0fa5e9
Add "Restore" and "Save" caching actions.
These actions reduce boilerplate in the main ci.yml configuration file.
These actions are implemented so that caches will be saved on `push`
only.
When a pull request is opened it will cache hit on the caches from the
lastest push, or in the case of depends will hit on any matching depends
hash, falling back to partial matches.
Depends caches are hashed using
`$(git ls-tree HEAD depends "ci/test/$FILE_ENV" | sha256sum | cut -d' ' -f1)`
and this hash is passed in as an input to the actions. This means we
direct cache hit in cases where depends would not be re-built, otherwise
falling back to a partial match.
Previous releases cache is hashed similarly to depends, but using the
test/get_previous_releases.py file.
The cirruslabs cache action will fallback transparently to GitHub's
cache in the case that the job is not being run on a Cirrus Runner,
making these compatible with running on forks (on free GH hardware).
301aa5d814
ci: add REPO_USE_CIRRUS_RUNNERS
Github-Pull: #32989
Rebased-From: 33ba073df7a
If set, Cirrus runners will be used on pushes to, and pull requests
against, this repository.
Forks can set this if they have their own cirrus runners.
954c1a55e4
ci: add configure-docker action
Github-Pull: #32989
Rebased-From: fdf64e55324
Another action to reduce boilerplate in the main ci.yml file.
This action will set up a docker builder compatible with caching build
layers to a container registry using the `gha` build driver.
It will then configure the docker build cache args.
1faf918a16
ci: use buildx in ci
Github-Pull: #32989
Rebased-From: 94a09325475
Using buildx is required to properly load the correct driver, for use
with registry caching. Neither build, nor BUILDKIT=1 currently do this
properly.
Use of `docker buildx build` is compatible with podman.
f3089fb2cf
ci: use docker build cache arg directly
Github-Pull: #32989
Rebased-From: 18f6be09d02
Reverts: e87429a2d0f23eb59526d335844fa5ff5b50b21f
This was added in PR #31545 with the intention that self-hosted runners
might use it to save build cache.
As we are not using hosted runners with a registry build cache, the bulk
of this commit can be reverted, simply using the value of
$DOCKER_BUILD_CACHE_ARG in the script.
link: https://github.com/bitcoin/bitcoin/pull/31545
0a649d07c9
ci: have base install run in right dir
Github-Pull: #32989
Rebased-From: 9c2b96e0d03
This sets the build dir at build time so that Apple SDK gets installed
in the correct/expected location for the runtime to find it.
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
af086431e8
ci: add Cirrus cache host
Github-Pull: #32989
Rebased-From: 020069e6b71
Whilst the action cirruslabs/actions/cache will automatically set this
host, the docker `gha` build cache backend will not be aware of it.
Set the value here, which will later be used in the docker build args to
enable docker build cache on the cirrus cache.
f9f3e8b686
ci: add job to determine runner type
Github-Pull: #32989
Rebased-From: cc1735d7771
To remove multiple occurances of the respository name, against which we
compare `${{ github.repository }}` to check if we should use Cirrus
Runners, introduce a helper job which can check a single environment
variable and output this as an input to subsequent jobs.
Forks can maintain a trivial patch of their repo name against the
`REPO_USE_CIRRUS_RUNNERS` variable in ci.yml if they have Cirrus Runners
of their own, which will then enable cache actions and docker build
cache to use Cirrus Cache.
It's not possible to use `${{ env.USE_CIRRUS_RUNNERS }}` in the
`runs-on:` directive as the context is not supported by GitHub.
If it was, this job would no longer be necessary.
849993377d
ci: port arm 32-bit job
Github-Pull: #32989
Rebased-From: f253031cb8e
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
82c60a3151
ci: update windows-cross job
Github-Pull: #32989
Rebased-From: 04e7bfbceb0
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
894a3cbe42
ci: update asan-lsan-ubsan
Github-Pull: #32989
Rebased-From: 884251441bb
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
819ee09af3
ci: force reinstall of kernel headers in asan
Github-Pull: #32989
Rebased-From: 2c990d84a3d
When using hosted runners in combination with cached docker images,
there is the possibility that the host runner image is updated,
rendering the linux-headers package (stored in the cached docker image)
incompatible.
Fix this by doing a re-install of the headers package in
03_test_script.sh.
If the underlying runner kernel has not changed thie has no effect, but
prevents the job from failing if it has.
a91567a980
ci: port mac-cross-gui-notests
Github-Pull: #32989
Rebased-From: 9c2514de534
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
835b5b8bb1
ci: port nowallet-libbitcoinkernel
Github-Pull: #32989
Rebased-From: 2a00b12d73b
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
e826c3daa5
ci: port i686-multiprocess-DEBUG
Github-Pull: #32989
Rebased-From: f2068f26c12
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
544f902b2a
ci: port fuzzer-address-undefined-integer-nodepends
Github-Pull: #32989
Rebased-From: 341196d75c3
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
85ec6c6882
ci: port previous-releases-depends-debug
Github-Pull: #32989
Rebased-From: 58e38c3a042
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
5057b9a6ff
ci: port centos-depends-gui
Github-Pull: #32989
Rebased-From: 549074bc643
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
b4286cf354
ci: port tidy
Github-Pull: #32989
Rebased-From: bf7d5364527
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
3b2dcc8b9a
ci: port tsan-depends
Github-Pull: #32989
Rebased-From: 9bbae61e3b4
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
643385b22d
ci: port msan-depends
Github-Pull: #32989
Rebased-From: d290a8e6eab
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
0f0378fe3c
ci: port lint
Github-Pull: #32989
Rebased-From: bc41848d00f
Co-authored-by: Max Edwards <youwontforgetthis@gmail.com>
06424fb004
ci: remove .cirrus.yml
Github-Pull: #32989
Rebased-From: 4393ffdd837
Removed as unused.
a08c3cc51c
ci: dynamically match makejobs with cores
Github-Pull: #32989
Rebased-From: 3f339e99e00
Previously jobs were running on a large multi-core server where 10 jobs
as default made sense (or may even have been on the low side).
Using hosted runners with fixed (and lower) numbers of vCPUs we should
adapt compilation to match the number of cpus we have dynamically.
This is cross-platform compatible with macos and linux only.
Github-Pull: #32989
Rebased-From: dd1c5903e8d
Print the ccache hit-rate for the job using a GitHub annotation if it
was below 75%.
773e4cda94
ci: fix annoying docker warning
Github-Pull: #32989
Rebased-From: 2aa288efdda
Docker currently warns that we are missing a default value.
Set this to scratch which will error if an appropriate image tag is not
passed in to silence the warning.
4e8b64b181
ci: remove un-needed lint_run*.sh files
Github-Pull: #32989
Rebased-From: 3c5da69a232
ci/lint_run_all.sh: Only used in .cirrus.yml. Refer to test/lint/README.md on how to run locally.
6ded1fe117
ci: reduce runner sizes on various jobs
Github-Pull: #33319
Rebased-From: 5eeb2facbbbbf68a2c30ef9e6747e39c85d7b116
These jobs can use reduced runner size to avoid wasting CPU, as much of
the long-running part of the job is single-threaded.
Suggested in: https://github.com/bitcoin/bitcoin/pull/32989#discussion_r2321775620
Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
4a034cbeb4
ci: Checkout latest merged pulls
Github-Pull: #33303
Rebased-From: fa8f081af31
78d93effd0
ci: link against -lstdc++ in native fuzz with msan job
Merge bitcoin/bitcoin#33403: Backport Cirrus runners to 29.x
5750355139eb7fc2bd11124adf46bf053be6b690 ci: link against -lstdc++ in native fuzz with msan job (fanquake)
78d93effd03278b46e21ae8ef79f61f4ec32f855 ci: Checkout latest merged pulls (MarcoFalke)
4a034cbeb42763c6b7a82089973c4a30cb0cd1c4 ci: reduce runner sizes on various jobs (will)
6ded1fe11752372c52169d2aec7f0658bf9b0455 ci: remove un-needed lint_run*.sh files (willcl-ark)
4e8b64b181e1bb7d82789699eaac24dc1242afa3 ci: fix annoying docker warning (will)
773e4cda9446a03c0b23468ef8a9e38496b4566b ci: add ccache hit-rate warning when < 75% (will)
4339787379d2d246846e60f10ab9582805a6845e doc: Detail configuration of hosted CI runners (will)
c7f290b826fc4928c6e1e0a9649da85d4752717b ci: dynamically match makejobs with cores (will)
a08c3cc51c6875ba67f25c85143fdb61a8ba3e03 ci: remove .cirrus.yml (will)
06424fb004f916b06e4f0ab90fd6f7623049a360 ci: port lint (will)
0f0378fe3c590e835aa30be092f37109ddd63b86 ci: port msan-depends (will)
643385b22d9908f7665bf2addc734ba0323967b0 ci: port tsan-depends (will)
3b2dcc8b9aea8706a25690a0cd08ba60896d3542 ci: port tidy (will)
b4286cf354a8111ed54fb63547dc1a7be7257b92 ci: port centos-depends-gui (will)
5057b9a6ffd360dbd96ad8585e10852961392361 ci: port previous-releases-depends-debug (will)
85ec6c6882b40adb35c9cb88d37d22e3e58eaa68 ci: port fuzzer-address-undefined-integer-nodepends (will)
544f902b2a9cf14cd0445f27802cd11c5c945b00 ci: port i686-multiprocess-DEBUG (will)
e826c3daa55d3b4cbd0e2c13765f9158eb225bfd ci: port nowallet-libbitcoinkernel (will)
835b5b8bb18a318026ada74d3c63b89d6aab742b ci: port mac-cross-gui-notests (will)
a91567a980adb93a05f12ec63b628ee3faaa4681 ci: force reinstall of kernel headers in asan (will)
819ee09af31687dedd38de68aef98b0ecc19608f ci: update asan-lsan-ubsan (will)
894a3cbe42bf900788b858faf59b3d97412e7d47 ci: update windows-cross job (will)
82c60a31515a2004976faaa26f8caad9e2bb022d ci: port arm 32-bit job (will)
849993377d76c64cc5ea14336e6523434608deb3 ci: add job to determine runner type (will)
f9f3e8b68616dfb9e18082d191b87a457c4100da ci: add Cirrus cache host (will)
af086431e86c82a5e40b05270f39c70cfe413c7b ci: have base install run in right dir (will)
0a649d07c994b1a6957131c8bb3a1d2e8d53e559 ci: use docker build cache arg directly (will)
f3089fb2cfdba533fba1298e909628e5fe7dabb9 ci: use buildx in ci (will)
1faf918a169b76e69a486eb7fc8d88429b77b4b6 ci: add configure-docker action (will)
954c1a55e4a6322267071f5bffeb3188a6ac7d59 ci: add REPO_USE_CIRRUS_RUNNERS (will)
301aa5d814b620287b65d93399a20a794659cc79 ci: add caching actions (will)
f63b8e960d5d06cdbbc360aaf781c13fd5aca172 ci: add configure environment action (will)
Pull request description:
Backports #32989 to the 29.x branch
ACKs for top commit:
m3dwards:
ACK 5750355139eb7fc2bd11124adf46bf053be6b690
Tree-SHA512: c0509903043acd1c1e62f6382d9373a5c7a51377a76cbe6ea0cacf83cb03b10e658b8fd0dc2080acb9d6361f0a7883feb0134acd9bc53d164561364d42e111e7
f6d49d0a09
test: add block 2016 to mock mainnet
The next commit requires an additional mainnet block which changes the difficulty.
Also fix a few minor mistakes in the test (suite):
- rename the create_coinbase retarger_period argument to halving_period. Before bitcoin#31583 this was hardcoded for regtest where these values are the same.
- drop unused fees argument from mine helper
Finally the CPU miner instructions for generating the alternative mainnet chain are expanded.
Github-Pull: #33446
Rebased-From: 4c3c1f42cf705e039751395799240da33ca969bd
118abf4c30
rpc: fix getblock(header) returns target for tip
A target field was added to the getblock and getblockheader RPC calls in bitcoin#31583, but it mistakingly always used the tip value.
Because regtest does not have difficulty adjustment, a test is added for mainnet instead.
Github-Pull: #33446
Rebased-From: bf7996cbc3becf329d8b1cd2f1007fec9b3a3188
22ab141243
doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness)
fuzz: don't bypass_limits for most mempool harnesses
Using bypass_limits=true is essentially fuzzing part of a
reorg only, and results in TRUC invariants unable to be
checked. Remove most instances of bypassing limits, leaving
one harness able to do so.
Github-Pull: #33504
Rebased-From: bbe8e9063c15dc230553e0cbf16d603f5ad0e4cf
6f23ead4a2
Mempool: Do not enforce TRUC checks on reorg
Not enforcing TRUC topology on reorg was the intended
behavior, but the appropriate bypass argument was not
checked.
This mistake means we could potentially invalidate a long
chain of perfectly incentive-compatible transactions that
were made historically, including subsequent non-TRUC
transactions, all of which may have been very high feerate.
Lastly, it wastes CPU cycles doing topology checks since
this behavior cannot actually enforce the topology in
general for the reorg setting.
Github-Pull: #33504
Rebased-From: 26e71c237d9d2197824b547f55ee3a0a60149f92
2d7ebd2d913ea63c1a23fefa0a09ee06fb069161 doc: update release notes for 29.x (fanquake)
a8bb76b61f49e1abd681f21a754f970eef206ced test: add more TRUC reorg coverge (Greg Sanders)
666aec7d49506c587ecbbcd71f6e8f1e7bb4e4cd Mempool: Do not enforce TRUC checks on reorg (Greg Sanders)
6f23ead4a2d97e245f4fc1824b1dd956dc06cc42 fuzz: don't bypass_limits for most mempool harnesses (Greg Sanders)
9d9baafc6f9357179e57fdcc6cf2ce36d65dd16d doc: rpc: fix case typo in `finalizepsbt` help (final_scriptwitness) (Sebastian Falbesoner)
22ab141243eeb4a929e589ef70a6f54a5aaed3ba rpc: fix getblock(header) returns target for tip (Sjors Provoost)
118abf4c305c01e6359a8588327a0b011ca52944 test: add block 2016 to mock mainnet (Sjors Provoost)
Pull request description:
Backports:
* #33446
* #33484
* #33504
ACKs for top commit:
luke-jr:
ACK 2d7ebd2d913ea63c1a23fefa0a09ee06fb069161
dergoegge:
ACK 2d7ebd2d913ea63c1a23fefa0a09ee06fb069161
marcofleon:
ACK 2d7ebd2d913ea63c1a23fefa0a09ee06fb069161
Tree-SHA512: 27b852177d8502d6c703cb0eeb1e4df9d651c9c8add5fbf6ae4eeb4b8aefc145471f38f9794c0ed276bf7ebba1844ecbaf5a84cb5913ca7d0a546f5216ea3b2d
d1b5d4e9ca
contrib: fix using macdploy script without translations.
QT translations are optional, but the script would error when
'translations_dir' falls back to its default value NULL.
This PR fixes it by moving the set-up of QT translations under
the check for 'translations_dir' presence.
Github-Pull: #33482
Rebased-From: 7b5261f7ef3d88361204c40eb10c0d9dc44f5ed7
d82fc69829cd8cabbaf2c3a969597b40c32edc86 doc: update release notes for 29.2rc2 (fanquake)
513cef75ee06bc5d310a22d366a5f3c815aa1499 doc: update manual pages for v29.2rc2 (fanquake)
eea16f7de7c4382e4491f3b018ecd0c36678affb build: bump version to v29.2rc2 (fanquake)
6b3c1dbc5c0df4357ee7f57ac238bcdff55526af contrib: fix using macdploy script without translations. (amisha)
Pull request description:
It's been 2 weeks since rc1: https://github.com/bitcoin/bitcoin/releases/tag/v29.2rc1.
We've backported more changes:
* #33403
* #33474
* #33482
Lets do `rc2`.
ACKs for top commit:
davidgumberg:
reACK d82fc69
glozow:
ACK d82fc69829cd8cabbaf2c3a969597b40c32edc86
darosior:
utACK d82fc69829cd8cabbaf2c3a969597b40c32edc86. Changes look good to me, but i have not been through the process of regenerating the doc myself.
Tree-SHA512: c829efe89f86c9c76767ffe60a3779ece902ee9e3c8f6b4203562aaf257019484bfa49916ddfabdcabbd1478368d9b80a3f0a15057778aa1984852ea245283a6
398c176ea8
build: fix depends Qt download linkabf4a6eeae
Merge bitcoin/bitcoin#33563: [29.x] build: fix depends Qt download link
abf4a6eeaee116917dafd56eb9caee03e13048d2 build: fix depends Qt download link (fanquake)
Pull request description:
Fix Qt download path, so we wont always hit the fallback.
ACKs for top commit:
hebasto:
ACK abf4a6eeaee116917dafd56eb9caee03e13048d2.
Tree-SHA512: 1157528983ede46c60810eae5c73f4bd81640afcae9afd9aad14c30104e90c52f8e97755f22314a5514bc1de3a92d864398087fe826f1980acc772fd32535a9f
8bcb90d7e3
doc: update release notes for 29.23226616493
build: bump version to v29.2b2026fa290
doc: update manual pages for v29.246d9b9091b
Merge bitcoin/bitcoin#33551: [29.x] Finalise 29.2
46d9b9091baa096da30da5e14329a32f1264229a doc: update manual pages for v29.2 (fanquake)
b2026fa290f0aef9a0dcfe45750121f113e2ce7d build: bump version to v29.2 (fanquake)
3226616493289b111997bb107e569fef54386743 doc: update release notes for 29.2 (fanquake)
Pull request description:
I'm optimistic that 29.2 wont need an `rc3`.
ACKs for top commit:
instagibbs:
ACK 46d9b9091baa096da30da5e14329a32f1264229a
stickies-v:
ACK 46d9b9091baa096da30da5e14329a32f1264229a
glozow:
ACK 46d9b9091baa096da30da5e14329a32f1264229a
Tree-SHA512: f515d2dfbbe60dc145f79425cb2e8ef7a443e69dab208b9acdf357dae7cca3f566f7d013a85c6d4330d8931da060320159a3a9d8dae0ea3ff18bba5aeb282722
2d6426c296
DrahtBot
commented at 4:30 AM on October 26, 2025:
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.
DrahtBot closed this on Oct 26, 2025
DrahtBot
commented at 4:30 AM on October 26, 2025:
contributor
<!--e57a25ab6845829454e8d69fc972939a-->
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
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-04-29 03:13 UTC
This site is hosted by @0xB10C More mirrored repositories can be found on mirror.b10c.me