BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

2914 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

257security candidates612second-pass queue2888AI analyses
189commits · 30 days
473commits · 60 days
1490commits · 180 days
2879commits · 365 days
Backfill bands
Aug 5 → Feb 61351 seen45 candidatesComplete
Feb 6 → Jun 61033 seen63 candidatesComplete
Jun 6 → Jul 6281 seen11 candidatesComplete
Jul 6 → Aug 5207 seen5 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

70/100 average clarity
950Strong · 80–100
1188Adequate · 60–79
688Thin · 40–59
88Opaque · 0–39
6security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Antoine Poinsot22422170
Ava Chow15950158064
MarcoFalke41021406074
Lőrinc17721177081
fanquake22819226057
Hennadii Stepanov21114208063
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
merge-script32718088
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 37 minutes ago

Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35729: refactor: test: Unroll `&&` conditions in macros

This commit only changes Bitcoin Core's internal test code. It splits combined conditions inside test-check macros (like BOOST_CHECK(a && b)) into separate checks so that when a test fails, the test output points to the exact failing condi…

aa0e0f79by merge-script+196−9519 files
No security note in commit
Low 26 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35493: wallet, descriptor: Fix MuSig private key completeness checks on `importdescriptors`

This commit fixes a bug in Bitcoin Core's wallet import logic for a new type of multi-signature setup called MuSig. Previously, when a user imported a MuSig descriptor that already contained all needed private keys, the wallet incorrectly …

False-positive warning in wallet import for fully-private MuSig descriptorsIncorrect private-key completeness check on synthetic aggregate public keyDescriptor logic now delegates completeness to `Descriptor::HavePrivateKeys()`
2c01832fby merge-script+76−374 files
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35943: doc: fix dead link in txrequest.h

This commit only fixes a broken web link in a code comment. It replaces an outdated URL to a research paper with a working URL to the same paper. There is no change to program logic, no security fix, and no vulnerability.

5d051c05by merge-script+1−11 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#33186: wallet, test: Ancient Wallet Migration from v0.14.3 (no-HD and Single Chain)

This commit only adds new automated tests for migrating very old Bitcoin Core wallets (version 0.14.3 from 2017) to the modern descriptor wallet format. It does not change any wallet production code, consensus rules, or network behavior. T…

757aa573by merge-script+246−124 files
No security note in commit
Low 28 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35925: wallet, rpc: Exclude non-owned addresses from listreceivedby*

This update fixes a wallet reporting bug. When a user asked their Bitcoin wallet to list every address that had received money, including empty ones, the result incorrectly included foreign addresses that the wallet merely knew about (for …

Information disclosure: wallet RPCs leaked existence/labels of foreign addressesIncorrect access-control boundary: non-owned addresses exposed in 'received' reportFix uses IsMine() rather than address purpose metadata, avoiding inconsistent purpose handling
e8cc21c5by Ava Chow+19−32 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35937: test: Append print_suppressions=0 to LSAN_OPTIONS, and suppress bitcoin-qt

This commit only changes test configuration. It tells the LeakSanitizer tool used during automated testing to stop printing long lists of suppressed memory leaks, and it narrows the list of ignored leaks to the bitcoin-qt GUI test binary. …

5973e075by merge-script+3−42 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35928: doc: mention -DWITH_ZMQ=ON in macOS build guide

This is a one-line documentation update to the macOS build guide. It adds a note telling users to pass a specific CMake option if they want ZeroMQ notification support. There is no code change and no security impact.

8397e09eby merge-script+1−11 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35482: fuzz: exercise the transaction-handling path in process_message(s)

This commit only changes Bitcoin Core's internal fuzz testing code. It makes the fuzz tests exercise more of the transaction-handling code path by toggling Initial Block Download mode and resetting the mempool between test runs. There is n…

No production code modifiedNo consensus, validation, net_processing, or wallet logic changedOnly fuzz test harnesses and test utilities affected
f11dc617by merge-script+105−798 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35914: test, fuzz: Remove unused variables

This commit removes unused variables from Bitcoin Core's test and fuzzing code. It is a cleanup/refactoring change with no effect on the live network software or user funds. It does not fix or introduce any security vulnerability.

d36bf709by merge-script+1−138 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35896: refactor: Default uint256::operator==, add operator<=>

This commit is a routine code cleanup in Bitcoin Core. It switches the uint256 equality and comparison operators to use standard C++20 defaults, removes an old custom Compare() helper, and marks an internal assertion-failure function as ne…

ed2c59abby merge-script+99−245 files
No security note in commit
Moderate 62 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35872: rpc: avoid descriptor range counter overflow

This update fixes a counting bug in several Bitcoin Core RPC commands that scan descriptors. When a user requested a descriptor range ending at the maximum allowed value (2,147,483,647), the internal counter used a smaller integer type and…

Signed integer overflow in descriptor expansion loopCrash/undefined behavior on maximum-range descriptor scansAuthenticated RPC surface affected (scantxoutset, scanblocks, getdescriptoractivity, utxoupdatepsbt, descriptorprocesspsbt)
b388674aby Ava Chow+3−12 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35842: rpc: Properly make RPCResult::Type::ANY non-test-only

This is a small cleanup and documentation fix for Bitcoin Core's RPC help system. It removes a comment that incorrectly said a certain output type was 'for testing only' and makes the help text properly display those outputs. There is no d…

No memory safety, cryptography, consensus, or authorization changes observedChange is confined to RPC help/schema metadata generationComment-only/type-label change from 'for testing only' to general use
c36ffd87by merge-script+42−364 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35895: refactor: Enable clang-tidy rule to reject anon namespace in header

This is a code cleanup change that turns on a static-analysis rule to prevent a specific C++ coding pattern (anonymous namespaces in header files) and updates two headers to comply. It does not change how Bitcoin Core behaves at runtime an…

No security-relevant code changeNo memory safety, cryptography, consensus, or network changesTooling-only refactor (clang-tidy configuration)
c4fbd3c7by merge-script+9−123 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35630: test: Add importdescriptors rpc error test coverage

This commit only adds new test cases to Bitcoin Core's functional test suite. It does not change any production wallet, node, or RPC code. The tests verify that the importdescriptors RPC reports errors in the right order, rejects bad times…

465196d0by merge-script+77−11 file
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35180: coins: group private cache helpers

This change is purely a code cleanup: it moves two internal helper functions of a Bitcoin Core cache class into the private section of the class and removes a duplicate 'private:' label. There is no change to what the code does, no bug fix…

c940fd75by merge-script+13−141 file
No security note in commit
Low 29 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35582: rpc: reject null for optional parameters

This Bitcoin Core change tightens how three RPC commands (scantxoutset, scanblocks, deriveaddresses) handle the value null when it is passed for optional parameters. Previously, explicitly passing null could be treated differently from sim…

RPC parameter validation changeNull value handling changeAddition of explicit error checks for missing required contextual parameters
3db96eb5by merge-script+18−75 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Enable misc-definitions-in-headers

This commit is a code cleanup: it turns on a clang-tidy style check called 'misc-definitions-in-headers' and suppresses that check around a large inline implementation block in a benchmark header. There is no change to Bitcoin's runtime be…

fa93132dby MarcoFalke+3−02 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Enable clang-tidy rule to reject anon namespace in header

This commit only changes a linting configuration file for the project's code style checker. It enables a rule that prevents anonymous namespaces from being used in header files, which is a code-quality and build-hygiene practice. There is …

No security-relevant signals in the diff or commit message.Change is purely a static-analysis/linting configuration update.
fa5ca877by MarcoFalke+2−11 file
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Use C++20 std::identity over IntIdentity

This commit is a straightforward code cleanup: it replaces a small custom helper named IntIdentity with the standard C++20 std::identity from the <functional> header. The behavior of the ConvertBits function is unchanged; only the implemen…

fafe5042by MarcoFalke+4−111 file
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-priorityguix: disable building libgomp in GCCby fanquake · 7735901e · Jan 6, 2026 · 1 fileMessage 60 · AdequateInformational 17Details
Commit message · fanquake

guix: disable building libgomp in GCC

Prunes:
libgomp.a
libgomp.la
libgomp.so
libgomp.so.1
libgomp.so.1.0.0
libgomp.spec

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 17/100

This commit changes the build setup for Bitcoin Core's Guix deterministic build environment so that GCC no longer builds the libgomp library. libgomp is the GNU Offloading and Multi Processing Runtime Library, used for OpenMP parallel programming. Removing it reduces the attack surface and build artifacts, but there is no direct evidence in the commit that a specific vulnerability is being fixed.

Lower-priorityguix: disable libquadmath in GCCby fanquake · 6f54e267 · Jan 6, 2026 · 1 fileMessage 60 · AdequateInformational 16Details
Commit message · fanquake

guix: disable libquadmath in GCC

Prunes:
libquadmath.a
libquadmath.la
libquadmath.so
libquadmath.so.0
libquadmath.so.0.0.0

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 16/100

This commit changes Bitcoin Core's Guix build recipe to stop GCC from building the libquadmath library. Quadmath provides extra-precision floating-point math, which Bitcoin Core does not need. Removing it shrinks the build environment and reduces the chance that unnecessary code accidentally gets linked into release binaries. There is no direct evidence in the commit that this fixes an active security bug.

Lower-priorityqt: Remove "Starting Block" from Peer Detail. Following Deprecation in `bitcoin#34197`by WakeTrainDev · 301d9eea · Jan 6, 2026 · 2 filesMessage 58 · ThinInformational 15Details
Commit message · WakeTrainDev

qt: Remove "Starting Block" from Peer Detail. Following Deprecation in `bitcoin#34197`

58/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply removes a single line of information—the 'Starting Block' field—from the peer details window in Bitcoin Core's graphical user interface. It is a cleanup following an earlier deprecation and does not change any network, consensus, or wallet behavior. There is no security issue here.

AI review queueddoc: p2p: replace last remaining "command" terminology with "message type"by Sebastian Falbesoner · 5b7bf47f · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Sebastian Falbesoner

doc: p2p: replace last remaining "command" terminology with "message type"

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only renames the word 'command' to 'message type' in comments and a debug log string. It is a documentation cleanup with no functional code changes and no security impact.

Lower-priorityclusterlin: remove unused FixLinearization (cleanup)by Pieter Wuille · 1808b5aa · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Pieter Wuille

clusterlin: remove unused FixLinearization (cleanup)

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply deletes an unused internal function called FixLinearization and its associated test. There is no security relevance: no bug is fixed, no behavior changes, and no live code path is altered.

Lower-prioritytxgraph: permit non-topological clusters to defer fixing (optimization)by Pieter Wuille · 34a77138 · Jan 5, 2026 · 1 fileMessage 50 · ThinInformational 12Details
Commit message · Pieter Wuille

txgraph: permit non-topological clusters to defer fixing (optimization)

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 12/100

This commit is an internal optimization to how Bitcoin Core organizes and prioritizes groups of related transactions (clusters) in its memory pool. It introduces new quality states that let the node defer fixing non-topological orderings until later, instead of doing the work immediately. There is no indication in the commit or title that this fixes a security bug; it is described as an optimization.

Lower-prioritytxgraph: drop NEEDS_SPLIT_ACCEPTABLE (simplification)by Pieter Wuille · 62dd8862 · Jan 5, 2026 · 1 fileMessage 75 · AdequateInformational 20Details
Commit message · Pieter Wuille

txgraph: drop NEEDS_SPLIT_ACCEPTABLE (simplification)

With the SFL algorithm, we will practically be capable of keeping
most if not all clusters optimal. With that, it seems less valuable
to avoid doing work after splitting an acceptable cluster, because by
doing some work we may get it to OPTIMAL.

This reduces the complexity of the code a bit as well.

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 20/100

This is a Bitcoin Core code cleanup that removes a special internal quality state called NEEDS_SPLIT_ACCEPTABLE from the transaction graph (txgraph) module. The change simplifies how clusters of related transactions are tracked after transactions are removed or fees change. It does not appear to be a security fix; it is described by the author as a simplification enabled by an upcoming algorithm improvement. There is no disclosed security relevance and no independent researcher credited.

Lower-prioritytxgraph: use PostLinearize less prior to linearizingby Pieter Wuille · 3380e0cb · Jan 5, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Pieter Wuille

txgraph: use PostLinearize less prior to linearizing

With the new SFL algorithm, the process of loading an existing linearization into the
SFL state is very similar to what PostLinearize does. This means there is little benefit
to performing an explicit PostLinearize step before linearizing inside txgraph. Instead,
it seems better to use our allotted CPU time to perform more SFL optimization steps.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This is a routine internal optimization in Bitcoin Core's transaction graph code. It removes two calls to a helper named PostLinearize and updates comments, replacing an explicit cleanup step with work done by a newer algorithm (SFL). There is no indication this fixes or introduces a security bug.

Lower-priorityclusterlin: support fixing linearizations (feature)by Pieter Wuille · 01ffcf46 · Jan 5, 2026 · 3 filesMessage 73 · AdequateInformational 14Details
Commit message · Pieter Wuille

clusterlin: support fixing linearizations (feature)

This also updates FixLinearization to just be a thin wrapper around Linearize.
In a future commit, FixLinearization will be removed entirely.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 14/100

This is a routine internal refactor of Bitcoin Core's transaction-cluster linearization code. It lets the linearization algorithm accept an existing ordering that may not follow dependency rules, and automatically fix it. There is no indication this change addresses a security bug or is exploitable.

Lower-prioritylint: [move-only] Move python related lints to lint_py.rsby MarcoFalke · fa578d94 · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

lint: [move-only] Move python related lints to lint_py.rs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply moves existing Python linting code from one file to another without changing what it does. It is a code cleanup change with no security relevance.

Lower-prioritylint: [move-only] Move repo related lints to lint_repo_hygiene.rsby MarcoFalke · fa392c31 · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

lint: [move-only] Move repo related lints to lint_repo_hygiene.rs

Also, run cargo fmt on main.rs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a simple housekeeping change: it moves two existing code-checking helper functions into a new file and runs a code formatter on another file. There is no change to Bitcoin's actual behavior, no bug fix, and no security relevance.

Lower-prioritylint: [move-only] Move cpp related lints to lint_cpp.rsby MarcoFalke · fab0cfa9 · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

lint: [move-only] Move cpp related lints to lint_cpp.rs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a pure code reorganization: it moves four existing C++ lint checks from the main Rust file into a new dedicated module named lint_cpp.rs. No lint logic, rules, or behavior changed. It is comparable to moving files into a new folder without editing their contents.

Lower-prioritylint: [move-only] Move docs related lints to lint_docs.rsby MarcoFalke · fa3e48e3 · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

lint: [move-only] Move docs related lints to lint_docs.rs

Also, rename lint_doc to lint_doc_args.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit is a straightforward code reorganization: it moves three documentation-related lint checks from the main test runner file into a new dedicated Rust module, and renames one function from lint_doc to lint_doc_args. No behavior changes, security fixes, or vulnerability patches are present.

Lower-prioritylint: [move-only] Move text related lints to text_format.rsby MarcoFalke · fad09e77 · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

lint: [move-only] Move text related lints to text_format.rs

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply reorganizes existing code. It moves four text-format lint checks (for trailing whitespace, missing trailing newlines, tab characters, and commit message formatting) from the main Rust file into a new module named lint_text_format.rs. No lint logic, command behavior, or security-sensitive code was changed.

Lower-prioritylint: [move-only] Move util functions to util.rsby MarcoFalke · faf40c2f · Jan 5, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · MarcoFalke

lint: [move-only] Move util functions to util.rs

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply moves existing helper functions from one Rust source file to a new utility file. It is a code cleanup change with no functional or security impact on the Bitcoin Core software itself. The moved code is part of the internal lint test runner, not the Bitcoin node that users run.

Security candidatepsbt: detect invalid MuSig2 pubkeys in deserializationby rkrux · 5805a8b5 · Jan 5, 2026 · 2 filesMessage 65 · AdequateLow 44Details
Commit message · rkrux

psbt: detect invalid MuSig2 pubkeys in deserialization

Throw error while deserializing PSBT if invalid pubkeys are passed
as a MuSig2 aggregate or participant.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 44/100

This Bitcoin Core patch adds a missing validation check during PSBT (Partially Signed Bitcoin Transaction) parsing. Specifically, it now rejects MuSig2 aggregate and participant public keys that are not cryptographically valid, rather than silently accepting malformed or invalid key bytes. This prevents downstream code from operating on bad public keys, which could lead to incorrect behavior or crashes.

Lower-priorityp2p: first addr self-announcement in separate msgby 0xb10c · 792e2edf · Jan 5, 2026 · 2 filesMessage 76 · AdequateLow 28Details
Commit message · 0xb10c

p2p: first addr self-announcement in separate msg

This makes sure the initial address self-announcement a node sends to
a peer happends in a separate P2P message. This has benefits for both
inbound and outbound connections:

For inbound connections from a peer to us, previously, we might send
the self-announcement along with our response to a GETADDR request.
However, the self-announcement might replace an address from the
GETADDR response. This isn't clean.

For outbound connections from us to a peer, previously, it could have
happend that we send the self-announcement along with other addresses.
Since shortly after connection open, the peer might only have one
rate-limiting token for us, and the addresses are shuffeld on arrival,
it's possible that the self-announcement gets rate-limited. However,
note that these rate-limitings seem to be rare in practice.

This is inspired by and based on https://github.com/bitcoin/bitcoin/pull/33699#issuecomment-3462287763

Co-Authored-By: Anthony Towns <aj@erisian.com.au>

76/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 28/100

This Bitcoin Core change tweaks how a node tells other nodes about its own internet address when they first connect. Previously, the node's own address could get bundled with other addresses in the same network message. Because new connections only get one temporary 'token' that lets a single address through, the node's own address could accidentally be dropped by the peer's rate limiter. The fix sends the first self-announcement in its own dedicated message so it isn't crowded out by other addresses. It also makes the initial address exchange cleaner for inbound connections.

Lower-prioritytest: fix intermittent failure in p2p_addr_selfannouncementby 0xb10c · 31852057 · Jan 5, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · 0xb10c

test: fix intermittent failure in p2p_addr_selfannouncement

Due to the mocktime being bumped before the expected time is updated,
it could happen that the self-announcement is send with an newer
timestamp than what we expect. To fix this, update the expected time
before we bump the mocktime.

closes #34159

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This is a one-line fix inside a single automated test file. The test was occasionally failing because the test's internal expected timestamp was being read after the simulated clock had already advanced, so the expected value could be slightly newer than the test anticipated. The fix simply records the expected time before advancing the simulated clock. It does not change any production code, network behavior, or wallet logic.

Lower-prioritymining: add new getCoinbaseTx() returning a structby Sjors Provoost · 48f57bb3 · Jan 5, 2026 · 9 filesMessage 83 · StrongInformational 19Details
Commit message · Sjors Provoost

mining: add new getCoinbaseTx() returning a struct

Introduce a new method intended to replace getCoinbaseRawTx(), which
provides a struct with everything clients need to construct a coinbase.
This is safer than providing a raw dummy coinbase that clients then have
to manipulate.

The CoinbaseTx data is populated during the dummy transaction generation
and stored in struct CBlockTemplate.

Expand the interface_ipc.py functional test to document its usage
and ensure equivalence.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 19/100

This commit adds a new, safer way for external mining programs to ask Bitcoin Core for the pieces needed to build a coinbase transaction, instead of receiving a complete dummy transaction they must edit. It is a defensive API improvement, not a fix for an active bug or vulnerability. The old method is kept but marked deprecated.

Lower-priorityrpc, net: deprecate `startingheight` field of `getpeerinfo` RPCby Sebastian Falbesoner · 4ce3f4a2 · Jan 4, 2026 · 4 filesMessage 81 · StrongInformational 19Details
Commit message · Sebastian Falbesoner

rpc, net: deprecate `startingheight` field of `getpeerinfo` RPC

The reported starting height of a peer in the VERSION message is
untrusted, and it doesn't seem to be useful anymore (after #20624),
so deprecating the corresponding "startingheight" field seems
reasonable. After that, it can be removed, along with the
`m_starting_height` field of the Peer / CNodeStats structs, as it is
sufficient to show the reported height only once at connection in the
debug log.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 19/100

This change hides one piece of information—the 'startingheight' field—from the getpeerinfo RPC output unless the user explicitly enables it with a deprecation flag. It is a planned API cleanup, not a security fix. There is no vulnerability or exploit here.

Lower-priorityrefactor: rename `FlushStateMode::ALWAYS` to `FORCE_FLUSH`by Lőrinc · 7099e93d · Jan 3, 2026 · 7 filesMessage 85 · StrongInformational 15Details
Commit message · Lőrinc

refactor: rename `FlushStateMode::ALWAYS` to `FORCE_FLUSH`

This prepares the addition of `FORCE_SYNC`.

`empty_cache` in `FlushStateToDisk` was moved up to be reusable and `FlushStateMode::FORCE_FLUSH` was used as a placeholder before we properly split the two new states.
`log_utxocache_flush.py` was regenerated and the alignment adjusted for the wider `FlushStateMode` values.

Co-authored-by: Pieter Wuille <pieter@wuille.net>
Co-authored-by: optout <13562139+optout21@users.noreply.github.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This is a simple code cleanup change that renames an internal constant from ALWAYS to FORCE_FLUSH. It does not change what the software does, only how a label is spelled. There is no security issue here.

Lower-priorityvalidation: do not wipe utxo cache for stats/scans/snapshotsby Pieter Wuille · c6ca2b85 · Jan 3, 2026 · 8 filesMessage 93 · StrongInformational 24Details
Commit message · Pieter Wuille

validation: do not wipe utxo cache for stats/scans/snapshots

Since #28280, the cost of a non-wiping sync of the UTXO cache is only proportional to the number of dirty entries, rather than proportional to the size of the entire cache. Because of that, there is no reason to perform a wiping flush in case the contents of the cache is still useful.

Split the FlushStateMode::ALWAYS mode into a FORCE_SYNC (non-wiping) and a FORCE_FLUSH (wiping), and then use the former in scantxoutset, gettxoutsetinfo, snapshot creation.

Co-authored-by: l0rinc <pap.lorinc@gmail.com>
Co-authored-by: cedwies <141683552+cedwies@users.noreply.github.com>

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 24/100

This Bitcoin Core change tweaks how the in-memory UTXO cache is flushed to disk during certain RPC operations and snapshot creation. Previously these operations always wiped the cache, which could cause temporary performance slowdowns. The patch adds a non-wiping flush mode and uses it where the cache contents are still useful. It is a performance/robustness improvement, not a fix for an active security vulnerability.

Lower-prioritytest: fix feature_pruning when built without walletby brunoerg · 9b57c8d2 · Jan 2, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · brunoerg

test: fix feature_pruning when built without wallet

72/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This is a minor test-only fix. It moves a block-syncing step so that a wallet-related test only runs when the wallet feature is actually compiled in. There is no change to Bitcoin Core's production code, no security bug, and no user impact.

Lower-prioritydoc: archive release notes for v30.1by fanquake · bd730cb0 · Jan 2, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · fanquake

doc: archive release notes for v30.1

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit simply adds a new documentation file archiving the release notes for Bitcoin Core version 30.1. It contains only text describing what changed in that release and credits contributors. No program code was modified, so it cannot introduce a security vulnerability or fix one.

Lower-priorityqa: Require `--exclude` for each excluded testby Hennadii Stepanov · c5825d4b · Jan 2, 2026 · 4 filesMessage 70 · AdequateInformational 15Details
Commit message · Hennadii Stepanov

qa: Require `--exclude` for each excluded test

Co-authored-by: Lőrinc <pap.lorinc@gmail.com>

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit is a quality-assurance cleanup for Bitcoin Core's test runner. It changes how tests are excluded from a comma-separated list to one test per `--exclude` flag. There is no security relevance: it does not touch consensus code, networking, wallet handling, or any production behavior. It only affects internal test tooling and CI scripts.