BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

2902 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.

254security candidates607second-pass queue2881AI analyses
192commits · 30 days
486commits · 60 days
1504commits · 180 days
2875commits · 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
939Strong · 80–100
1188Adequate · 60–79
687Thin · 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 Chow15750157064
MarcoFalke41021406074
Lőrinc17721177081
fanquake22719226057
Hennadii Stepanov20914208063
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Hodlinator66566076
Analysis record

Published AI watches

Last scanned 7 minutes ago

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
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test the result order of a multiple import request is correct

This commit only adds a new automated test to Bitcoin Core. It checks that when a user asks the wallet to import multiple descriptors at once, the list of results comes back in the same order as the original request, including any error me…

3ac8b806by Pol Espinasa+40−01 file
No security note in commit
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test invalid or missing timestamp throws importdescriptors

This commit only adds new automated tests for the Bitcoin Core wallet's importdescriptors RPC. It checks that the command correctly rejects requests with a missing or invalid timestamp. No production wallet code is changed, so this cannot …

No changes to consensus, networking, wallet logic, or cryptographyOnly functional test code is modifiedAdded assertions are for expected error handling paths
e4732bf0by Pol Espinasa+28−11 file
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Remove unused #include in common/system

This is a minor code cleanup that removes one unused header file include and swaps another for a more specific one. It does not change any program behavior or fix any security issue.

fa7304f3by MarcoFalke+1−22 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

iwyu: Fix warnings in `src/consensus` and treat them as errors

This commit is a routine code cleanup: it adjusts which C++ header files are included in several consensus-related source files and turns on a stricter compiler hygiene check (Include What You Use, or IWYU) for the src/consensus directory.…

13b53f8bby Hennadii Stepanov+42−79 files
No security note in commit
Informational 15 AI analysisMessage 55 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

fuzz: don't connman.ReceiveMsgFrom oversized msg

This is a small fix to a Bitcoin Core fuzz test (an automated internal testing harness), not to the live network code. The fuzzer was sometimes creating fake P2P messages larger than the real protocol allows and passing them into a test he…

Test-only fuzz harness hardeningOversized message guard added before ReceiveMsgFrom() in fuzz targetNo change to production P2P message acceptance logic
bb19f1daby Greg Sanders+5−01 file
No security note in commit
Informational 15 AI analysisMessage 97 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: Temporarily remove riscv32 config from GHA matrix

This commit simply removes one failing test configuration (RISC-V 32-bit bare metal) from the project's GitHub Actions CI matrix because it was failing. It is a routine CI maintenance change with no security implications.

fa06ea42by MarcoFalke+0−61 file
No security note in commit
Low 47 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: verify cross-build SDK archives

This change adds checksum verification to the build system's downloads of Apple, FreeBSD, NetBSD, and OpenBSD software development kits (SDKs). Before this patch, those SDK archives were downloaded at build time and extracted without confi…

Adds cryptographic digest verification for downloaded SDK archivesRemoves unchecked extraction of remote SDK archives in CIHardens CI supply chain for macOS/BSD cross-builds
873550beby Lőrinc+25−126 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

Lower-prioritynet_processing: reorder the code that handles the VERSION messageby Vasil Dimov · a098f37b · Dec 16, 2025 · 1 fileMessage 73 · AdequateInformational 13Details
Commit message · Vasil Dimov

net_processing: reorder the code that handles the VERSION message

Change the order in which code snippets are executed as a result of
receiving the `VERSION` message. Move the snippets that do
`MakeAndPushMessage()` near the end. This makes it easier to interrupt
the execution when no messages should be sent as a response to the
`VERSION` messages, in private broadcast connections.

This is a non-functional change.

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

This commit simply rearranges the order of steps inside the code that handles a peer's VERSION message in Bitcoin Core. It moves the sending of two optional follow-up messages (WTXIDRELAY and SENDADDRV2) to a later point in the same function. The commit message explicitly calls this a non-functional change, and the diff shows no logic changes—only moved code blocks.

AI review queuednet_processing: store transactions for private broadcast in PeerManagerby Vasil Dimov · 679ce3a0 · Dec 16, 2025 · 6 filesMessage 73 · AdequateInformational 12Details
Commit message · Vasil Dimov

net_processing: store transactions for private broadcast in PeerManager

Extend `PeerManager` with a transaction storage and a new method
`InitiateTxBroadcastPrivate()` which:
* adds a transaction to that storage and
* calls `CConnman::PrivateBroadcast::NumToOpenAdd()` to open dedicated
privacy connections that will pick an entry from the transaction
storage and broadcast it.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit adds infrastructure for a new privacy feature in Bitcoin Core. It creates a storage area for transactions that should be broadcast privately, and a method to request short-lived connections to privacy-network peers to broadcast them. The code is purely additive scaffolding; it does not by itself introduce a vulnerability, nor does it complete the private-broadcast feature. It simply wires a new code path into the existing transaction-broadcast logic.

AI review queuednode: extend node::TxBroadcast with a 3rd optionby Vasil Dimov · a3faa6f9 · Dec 16, 2025 · 3 filesMessage 68 · AdequateInformational 14Details
Commit message · Vasil Dimov

node: extend node::TxBroadcast with a 3rd option

Extend `node::TxBroadcast` with a 3rd option to not add the
transaction to the mempool and broadcast privately.

This is a non-functional change - `BroadcastTransaction()` will not
do anything if the 3rd options is passed and is not used by any of
its callers.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 14/100

This commit adds a new placeholder option for broadcasting Bitcoin transactions more privately, but the option is not actually used anywhere yet. It is a non-functional change that prepares the code for a future feature. There is no security issue in this patch itself.

AI review queuednet_processing: rename RelayTransaction() to better describe what it doesby Vasil Dimov · 95c051e2 · Dec 16, 2025 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Vasil Dimov

net_processing: rename RelayTransaction() to better describe what it does

Rename `PeerManager::RelayTransaction()` to
`PeerManager::InitiateTxBroadcastToAll()`. The transaction is not
relayed when the method returns. It is only enqueued for a possible
broadcasting at a later time. Also, there will be another method which
only does so to Tor or I2P peers.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply renames a function inside Bitcoin Core from RelayTransaction() to InitiateTxBroadcastToAll(). No behavior changes; the new name is more accurate because the function only queues a transaction for possible later broadcast rather than sending it immediately. It is a code clarity and documentation improvement.

Lower-prioritynet: implement opening PRIVATE_BROADCAST connectionsby Vasil Dimov · bb49d260 · Dec 16, 2025 · 3 filesMessage 73 · AdequateLow 27Details
Commit message · Vasil Dimov

net: implement opening PRIVATE_BROADCAST connections

Implement opening `ConnectionType::PRIVATE_BROADCAST` connections with
the following properties:
* Only to Tor or I2P (or IPv4/IPv6 through the Tor proxy, if provided)
* Open such connections only when requested and don't maintain N opened
connections of this type.
* Since this is substantially different than what
`OpenNetworkConnection()` does, open the private broadcast connections
from a different thread instead of modifying `OpenNetworkConnection()`
to also open those types of connections.

Co-authored-by: Andrew Toth <andrewstoth@gmail.com>

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

This commit adds a new optional Bitcoin Core feature called private broadcast connections. It lets the node open short-lived outbound connections over Tor, I2P, or clearnet through a Tor proxy, separately from normal peer connections. The change is defensive/privacy-oriented: it tries to avoid reusing a permanent I2P address and only routes these connections through anonymity networks. There is no obvious security bug in the diff, but it is a new networking subsystem with concurrency, proxy handling, and resource limits, so it carries some implementation risk.

Lower-prioritynet: introduce a new connection type for private broadcastby Vasil Dimov · 01dad4ef · Dec 16, 2025 · 9 filesMessage 78 · AdequateInformational 15Details
Commit message · Vasil Dimov

net: introduce a new connection type for private broadcast

We will open a short-lived connection to a random Tor or I2P peer,
send our transaction to that peer and close the connection.

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
AI analysis · Informational 15/100

This commit adds a new type of network connection called 'private-broadcast' to Bitcoin Core. It is a feature for improving user privacy when broadcasting transactions over anonymity networks like Tor or I2P. There is no indication in the commit that this fixes a security vulnerability; it is a privacy enhancement.

Lower-priorityinit: introduce a new option to enable/disable private broadcastby Vasil Dimov · 94aaa5d3 · Dec 16, 2025 · 3 filesMessage 65 · AdequateInformational 15Details
Commit message · Vasil Dimov

init: introduce a new option to enable/disable private broadcast

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

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit adds a new optional Bitcoin Core setting called -privatebroadcast. When enabled, transactions submitted through the sendrawtransaction RPC are broadcast over short-lived Tor or I2P connections instead of being placed in the node's public mempool first. The change is purely additive: it introduces the option, sets its default to off, and adds startup checks that warn or error if the feature is configured incorrectly. There is no bug fix or vulnerability patch here.

Lower-prioritylog: introduce a new category for private broadcastby Vasil Dimov · d6ee490e · Dec 16, 2025 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Vasil Dimov

log: introduce a new category for private broadcast

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 adds a new logging category named 'privatebroadcast' to Bitcoin Core's logging system. It does not change any network behavior, privacy rules, or security logic. It only gives developers and users a new on/off switch for log messages that will be added separately.

Lower-prioritytest: Wrap validation functions with TestChainstateManagerby Martin Zumsande · c011e3aa · Dec 16, 2025 · 4 filesMessage 95 · StrongInformational 15Details
Commit message · Martin Zumsande

test: Wrap validation functions with TestChainstateManager

This allows to access them in the fuzz test in the next commit
without making them public.

Co-authored-by: TheCharlatan <seb.kung@gmail.com>

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only changes test infrastructure code. It moves some internal class members from private to protected access and adds test-only wrapper methods so that fuzz tests can reach validation logic without making those functions public in the main codebase. There is no change to how Bitcoin Core behaves in production, and no security bug is being fixed or introduced.

Lower-priorityfuzz: Add fuzzer for block indexby Martin Zumsande · 45f5b2da · Dec 16, 2025 · 2 filesMessage 78 · AdequateInformational 15Details
Commit message · Martin Zumsande

fuzz: Add fuzzer for block index

This fuzz target creates arbitrary tree-like structure of indices,
simulating the following events:
- Adding a header to the block tree db
- Receiving the full block (may be valid or not)
- Reorging to a new chain tip (possibly encountering invalid blocks on
the way)
- pruning
The test skips all actual validation of header/ block / transaction data
by just simulating the outcome, and also doesn't interact with the data directory.

The main goal is to test the integrity of the block index tree in
all fuzzed constellations, by calling CheckBlockIndex()
at the end of each iteration.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit adds a new automated fuzz test for Bitcoin Core's block index tree. It is purely a testing/quality-assurance change: it creates fake block trees and simulates events such as adding headers, receiving blocks, reorganizing chains, and pruning, then checks the tree's integrity. It does not change any production code that runs on real Bitcoin nodes, so it cannot directly introduce a network-exploitable vulnerability.

Lower-priorityfuzz: add subtest for re-downloading a previously pruned blockby Eugene Siegel · db2d39f6 · Dec 16, 2025 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · Eugene Siegel

fuzz: add subtest for re-downloading a previously pruned block

This imitates the use of the getblockfrompeer rpc.
Note that currently pruning is limited to blocks in the active chain.

Co-authored-by: Martin Zumsande <mzumsande@gmail.com>

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 12/100

This commit adds a new test case to an existing fuzz test. Fuzz tests are automated tools that feed random or semi-random inputs to a program to find crashes or bugs. The new test simulates re-downloading a block that was previously pruned (deleted to save disk space), similar to what happens when a user runs the getblockfrompeer RPC. It does not change normal node behavior, only test code.

Lower-priorityrest: deduplicate `interface_rest.py` negative testsby Roman Zeyde · 55d0d19b · Dec 15, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Roman Zeyde

rest: deduplicate `interface_rest.py` negative tests

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

This commit removes one duplicate line from a test file. It is a code cleanup change with no effect on the actual Bitcoin Core software that users run, and no security relevance.

Lower-priorityrest: update release notes for `/blockpart/` endpointby Roman Zeyde · 89eb5310 · Dec 15, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Roman Zeyde

rest: update release notes for `/blockpart/` endpoint

50/100 · ThinMessage clarity
✓ Specific, 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 only updates the wording of a release note for a new Bitcoin Core REST API endpoint. It changes the documentation's placeholder formatting (e.g., BLOCKHASH to BLOCK-HASH) and adds a note that the output can be requested in binary or hex format. There is no code change and no security relevance.

Lower-priorityrefactor: Let CCoinsViewCache::BatchWrite return voidby TheCharlatan · 6da6f503 · Dec 14, 2025 · 9 filesMessage 95 · StrongInformational 18Details
Commit message · TheCharlatan

refactor: Let CCoinsViewCache::BatchWrite return void

CCoinsViewCache::BatchWrite always returns true if called from a backed
cache, so just return void instead. Also return void from ::Sync and
::Flush.

This allows for dropping a FatalError condition and simplifying some
dead error handling code a bit.

Since we now no longer exercise the "error path" when returning from
`CCoinsView::BatchWrite`, make the method clear the cache instead. This
should only be exercised by tests and not change production behaviour.
This might slightly improve the coins_view fuzz test's ability to
generate better coverage.

Co-authored-by: l0rinc <pap.lorinc@gmail.com>

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 18/100

This is a code cleanup change in Bitcoin Core. It changes several internal coin-cache flushing functions from returning true/false to returning nothing, because in normal use they always succeeded anyway. It removes some now-unnecessary error checks and updates tests to match. There is no direct security bug being fixed here; it is a refactoring that simplifies the code and removes a theoretically reachable but practically dead error path.

Lower-priorityblockstorage: simplify partial block read validationby Roman Zeyde · 41118e17 · Dec 14, 2025 · 1 fileMessage 73 · AdequateLow 29Details
Commit message · Roman Zeyde

blockstorage: simplify partial block read validation

Use `SaturatingAdd` following https://github.com/bitcoin/bitcoin/pull/33657#discussion_r2610832092.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Low 29/100

This is a tiny code cleanup in Bitcoin Core's block storage module. It replaces a manual check that prevents reading beyond the end of a raw block file with a simpler check using a helper called SaturatingAdd. The change appears to be a defensive simplification rather than a fix for a known vulnerability. There is no evidence in the commit or supplied references that this addresses a security issue or was reported by an outside researcher.

Lower-priorityrest: reformat `uri_prefixes` initializer listby Roman Zeyde · 599effde · Dec 14, 2025 · 1 fileMessage 76 · AdequateInformational 15Details
Commit message · Roman Zeyde

rest: reformat `uri_prefixes` initializer list

There was an extra indentation level (found during #33657):
```
$ git show -U0 07135290c1 | ./contrib/devtools/clang-format-diff.py -p1 -i -v
```

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 · Informational 15/100

This commit is purely cosmetic: it removes two extra spaces of indentation from a list of web API route definitions in Bitcoin Core's REST interface. No code behavior, route order, or functionality changes.

AI review queuedrefactor: Add compile-time-checked hex txidby rustaceanrob · 5ac35795 · Dec 13, 2025 · 5 filesMessage 98 · StrongInformational 15Details
Commit message · rustaceanrob

refactor: Add compile-time-checked hex txid

Suggested by @l0rinc in #34004

Message by @l0rinc:

This adds a consteval constructor to transaction_identifier (Txid/Wtxid) to allow parsing hex strings at compile-time.
This replaces runtime FromHex checks in tests, ensuring that malformed hardcoded hashes cause build failures rather than runtime test failures.

Test variables are explicitly marked constexpr. This is required to workaround a regression in GCC 14 (Bug 117501) where the compiler incorrectly flags consteval initialization of non-constexpr variables as "statements with no effect".

GCC Bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117501
Reproducer: https://godbolt.org/z/xb5TMaPs6

Co-authored-by: l0rinc <pap.lorinc@gmail.com>

98/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a code cleanup change that lets Bitcoin Core tests create transaction IDs from hex strings at compile time instead of runtime. It does not change how the live network or wallet behaves, and it does not fix a security bug. It only makes test code stricter so that bad hardcoded hashes fail during compilation rather than when tests run.

Lower-prioritylog: Remove brittle and confusing LogPrintLevelby MarcoFalke · fa8a5d21 · Dec 13, 2025 · 6 filesMessage 45 · ThinInformational 15Details
Commit message · MarcoFalke

log: Remove brittle and confusing LogPrintLevel

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

This commit is a routine code cleanup in Bitcoin Core's logging system. It removes an old, confusing logging macro called LogPrintLevel and replaces its remaining uses with newer, clearer macros. It also updates some I2P log messages to say 'I2P SAM session' instead of just 'SAM session' for clarity, and adjusts tests to match. There is no security fix here.

Lower-prioritytest: Clarify logging_SeverityLevels testby MarcoFalke · fac24bbe · Dec 13, 2025 · 1 fileMessage 92 · StrongInformational 15Details
Commit message · MarcoFalke

test: Clarify logging_SeverityLevels test

The test was a bit confusing, because it just referred to the "global
log level" without explicitly specifying what it is. The level is set
though the LogSetup constructor. However, it is easier to follow unit
tests, if they are self-contained. So just set the level to Debug
explicitly here.

Also, add a new debug_3 log, to further document the intended behavior
of the unit test.

Also, replace the LogPrintLevel with the shorter and exact replacements
LogTrace and LogDebug.

92/100 · StrongMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only changes a test file to make the unit test easier to read. It explicitly sets the log level to Debug inside the test, adds one extra debug log line, and replaces a longer logging macro with shorter ones. There is no change to the actual Bitcoin Core software that users run, and no security issue is present.

AI review queuedipc: separate log statements per levelby stickies-v · f2731676 · Dec 13, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · stickies-v

ipc: separate log statements per level

Avoids ratelimiting unconditional log statements when debug logging
is enabled. Introduces slight behaviour change by removing
the category from unconditional logs, making them more uniform
with the other unconditional logs in the codebase.

Also, in a slight behavior change, prefix the info-level (and higher)
messages with "ipc:".

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a routine logging cleanup in Bitcoin Core's inter-process communication (IPC) code. It changes how messages from the internal IPC library are written to the log file, mainly to prevent a harmless side effect where enabling detailed debug logging could accidentally suppress some log lines. There is no security vulnerability here.

Lower-prioritylibevent: separate log statements per levelby stickies-v · 94c51ae5 · Dec 13, 2025 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · stickies-v

libevent: separate log statements per level

Avoids ratelimiting unconditional log statements when debug logging
is enabled. Introduces slight behaviour change by removing
the category from unconditional logs, making them more uniform
with the other unconditional logs in the codebase.

Also, in a slight behavior change, prefix the info-level (and higher)
messages with "libevent:".

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 18/100

This commit changes how Bitcoin Core prints log messages coming from the libevent networking library. Previously, all libevent messages went through a single logging path that could be rate-limited. Now, debug messages use the debug-only path, while info/warning/error messages use unconditional logging and are prefixed with 'libevent:'. The main effect is a minor behavior change in log formatting and rate-limiting, not a security fix or vulnerability.

Lower-prioritydoc: add release notes for #26988by stratospher · b3046cca · Dec 13, 2025 · 1 fileMessage 53 · ThinInformational 17Details
Commit message · stratospher

doc: add release notes for #26988

53/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Links an issue, advisory, or supporting reference! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 17/100

This commit only adds a release note describing a prior change to the bitcoin-cli -addrinfo command. It does not change any code, behavior, or security properties of the software. The release note explains that -addrinfo now returns all known network addresses instead of a filtered subset, and that it requires a newer node version. There is no security issue in this documentation commit itself.

AI review queuedrefactor: Separate out logic for building a tree-shaped dependency graphby marcofleon · a70a14a3 · Dec 12, 2025 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · marcofleon

refactor: Separate out logic for building a tree-shaped dependency graph

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit is a simple code cleanup: it takes a block of code that built a simplified tree-shaped dependency graph inside one fuzz test and moves it into a reusable helper function named BuildTreeGraph. The behavior is unchanged; no security issue is introduced or fixed.

Lower-priorityfuzz: Fix variable in `clusterlin_postlinearize_tree` checkby marcofleon · ce29d7d6 · Dec 12, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · marcofleon

fuzz: Fix variable in `clusterlin_postlinearize_tree` check

The test intends to verify that running `PostLinearize` a
second time on a tree-structured graph doesn't change the
result. But `PostLinearize` was being called on the original
variable, not the copy. So the check was comparing the
unmodified copy against itself, which is useless.

Fix by post-linearizing the correct variable.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This is a one-line bug fix in a fuzz test (automated randomized test) for Bitcoin Core's transaction clustering logic. The test meant to check that running an optimization twice on a copy of a tree-shaped dependency graph produces the same result, but it accidentally ran the optimization on the original variable instead of the copy. That made the comparison trivial and useless. The fix corrects the variable name so the test actually exercises the intended behavior. It does not affect live Bitcoin node code, wallets, consensus, or network behavior.

AI review queuedfuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree`by marcofleon · 876e2849 · Dec 12, 2025 · 1 fileMessage 83 · StrongInformational 17Details
Commit message · marcofleon

fuzz: Fix incorrect loop bounds in `clusterlin_postlinearize_tree`

The dependency graphs generated by this test can have holes
(unused indices) in them. This means some of the transactions
were skipped when using `depgraph_gen.TxCount()` as the upper
bound of the loop. Switch to using `depgraph.Positions()` to
correctly handle sparse graphs.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidencesecond-pass: broader security terminology
AI analysis · Informational 17/100

This commit fixes a bug in an internal Bitcoin Core fuzz test (a randomized self-test used during development). The test was looping over transaction indices using the total transaction count, but some indices can be unused 'holes' in the generated test data. As a result, the test sometimes skipped valid transactions or accessed unused slots. The fix makes the loop iterate over only the actually-used positions. This appears to be a test-only correctness issue, not a vulnerability in live Bitcoin Core code.