BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

258security candidates613second-pass queue2891AI analyses
195commits · 30 days
469commits · 60 days
1488commits · 180 days
2867commits · 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
959Strong · 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 Chow16351161065
MarcoFalke41021406074
Lőrinc17721177081
fanquake22819226057
Hennadii Stepanov21214208063
rkrux57957074
Sjors Provoost89889074
merge-script36718088
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 22 minutes ago

Low 28 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35959: Update secp256k1 subtree to latest master

This commit updates Bitcoin Core's embedded copy of the secp256k1 cryptographic library to a newer version. The update adds a new Silent Payments module, lets advanced users swap in a custom SHA256 compression function, removes some old de…

Dependency update of a core cryptographic library (libsecp256k1)New runtime SHA256 compression callback with self-test/smoke test to catch mis-implementations earlyBehavior change in ellswift_xdh to reject secret keys >= curve order (vendor states not a security issue)
625f951bby Ava Chow+297−11626 files
No security note in commit
Informational 23 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35605: wallet: rpc: Deprecate `removeprunedfunds` RPC

This commit deprecates a Bitcoin Core wallet RPC command called removeprunedfunds. The command lets users delete transactions from their own wallet, which can alter displayed balances. The change does not fix a software bug; it is a cleanu…

RPC allows deletion of arbitrary wallet transactions, affecting balancesDeprecation framed by authors as removing a dangerous and maintenance-burden featureNo authentication bypass, memory corruption, or consensus change present in diff
e9ed5e83by Ava Chow+64−695 files
No security note in commit
Informational 18 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35930: wallet: post-#35501 cleanups in CWalletTx

This is a follow-up cleanup and hardening patch for the Bitcoin Core wallet's handling of transactions that have multiple possible witness versions (same transaction ID but different witness data). It renames a variable, simplifies a helpe…

Added input-validation during wallet transaction deserializationNew unit test specifically exercises rejection of mismatched variant txidFollow-up to PR #35501 which introduced witness-variant tracking in the wallet
512dc9afby Ava Chow+68−315 files
No security note in commit
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
Repository ledger

Explore captured commits

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

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

AI review queuedtest: fix race condition in p2p_v2_misbehaving.py peerid assertionby stratospher · 09dfa4d3 · Dec 12, 2025 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · stratospher

test: fix race condition in p2p_v2_misbehaving.py peerid assertion

due to asyncio's non-deterministic task scheduling, peer2's
connection might happen before peer1's, causing peer2 to get
assigned peer_id=1 on bitcoind side and peer1 to get assigned
peer_id=2 on bitcoind side.

since we test that peer2 remains connected, any disconnection
must originate from peer1, making the specific peer id unnecessary
for test correctness. so we can remove the specific peer_id from
the expected debug log.

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
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit fixes a flaky test, not a security bug. The test checked for specific peer ID numbers in log messages, but because of unpredictable scheduling in the test framework, those IDs could differ between runs. The fix removes the specific ID numbers from the expected log messages so the test passes reliably. No production code or network behavior was changed.

Lower-prioritydoc: Improve ChainstateManager documentation, use consistent termsby Ryan Ofsky · 82be652e · Dec 12, 2025 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Ryan Ofsky

doc: Improve ChainstateManager documentation, use consistent terms

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

This commit only changes comments and documentation in the Bitcoin Core source code. It renames terminology from 'background chainstate' to 'validated chainstate' in comments and updates the class description for ChainstateManager. No executable code was modified, so it cannot introduce a security vulnerability or fix one.

Lower-priorityrefactor: Deduplicate Chainstate activation codeby Ryan Ofsky · 1598a15a · Dec 12, 2025 · 3 filesMessage 92 · StrongInformational 15Details
Commit message · Ryan Ofsky

refactor: Deduplicate Chainstate activation code

Move duplicate code from ChainstateManager::ActivateSnapshot and
ChainstateManager::ActivateExistingSnapshot methods to a new
ChainstateManager::AddChainstate method.

The "AddChainstate" method name doesn't mention snapshots even though it is
only used to add snapshot chainstates now, because it becomes more generalized
in a later commit in this PR ("refactor: Add ChainstateManager::m_chainstates
member")

92/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit is a straightforward internal code cleanup in Bitcoin Core. It merges two nearly identical blocks of code that set up a snapshot-based chainstate into a single helper method called AddChainstate. There is no change to network rules, consensus logic, wallet behavior, or user-facing functionality. It is purely a refactoring to reduce duplication.

Lower-priorityrefactor: Add Chainstate::m_target_blockhash memberby Ryan Ofsky · 6082c847 · Dec 12, 2025 · 6 filesMessage 85 · StrongInformational 18Details
Commit message · Ryan Ofsky

refactor: Add Chainstate::m_target_blockhash member

Make Chainstate objects aware of what block they are targeting. This makes
Chainstate objects more self contained, so it's possible for validation code to
look at one Chainstate object and know what blocks to connect to it without
needing to consider global validation state or look at other Chainstate
objects.

The motivation for this change is to make validation and networking code more
readable, so understanding it just requires knowing about chains and blocks,
not reasoning about assumeutxo download states. This change also enables
simplifications to the ChainstateManager interface in subsequent commits, and
could make it easier to implement new features like creating new Chainstate
objects to generate UTXO snapshots or index UTXO data.

Note that behavior of the MaybeCompleteSnapshotValidation function is not
changing here but some checks that were previously impossible to trigger like
the BASE_BLOCKHASH_MISMATCH case have been turned into asserts.

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 18/100

This is a code cleanup (refactor) in Bitcoin Core that makes each chainstate object remember which block it is trying to reach, instead of asking the global chain manager. It changes how background validation of UTXO snapshots is tracked, replacing some runtime checks with internal assertions. There is no obvious security bug introduced, but because it touches consensus-adjacent validation logic, any mistake could theoretically affect chain synchronization behavior.

Lower-prioritytest: Fix broken chainstatemanager_snapshot_init checkby Ryan Ofsky · de00e875 · Dec 12, 2025 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Ryan Ofsky

test: Fix broken chainstatemanager_snapshot_init check

The following test code never checked anything because the if statement was
always false:

if (cs != &chainman_restarted.ActiveChainstate()) {
BOOST_CHECK_EQUAL(cs->m_chain.Height(), 109);
}

Also, the height of the background chainstate it was intending to check is 110,
not 109. Fix both problems by rewriting the check.

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

This is a fix to a broken test in Bitcoin Core's own test suite. The test was supposed to check the heights of two chainstates after a simulated node restart, but an `if` condition was always false, so the check never actually ran. The commit also corrects the expected height value. It does not change any production code that runs on real Bitcoin nodes, so it cannot directly affect live network security.

Lower-priorityrefactor: Add ChainstateManager::ValidatedChainstate() methodby Ryan Ofsky · 352ad27f · Dec 12, 2025 · 4 filesMessage 77 · AdequateInformational 15Details
Commit message · Ryan Ofsky

refactor: Add ChainstateManager::ValidatedChainstate() method

ValidatedChainstate() accessor replaces GetChainstateForIndexing() with no
change in behavior.

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
defensive validation
AI analysis · Informational 15/100

This is a simple internal code cleanup in Bitcoin Core. It renames and slightly rewrites a helper function used to pick which copy of the blockchain data indexes should look at. There is no change in behavior and no security issue visible in the commit.

Lower-priorityrefactor: Add Chainstate::StoragePath() methodby Ryan Ofsky · a9b7f561 · Dec 12, 2025 · 8 filesMessage 80 · StrongInformational 15Details
Commit message · Ryan Ofsky

refactor: Add Chainstate::StoragePath() method

Use to simplify code determining the chainstate leveldb paths. New method is
the now the only code that needs to figure out the storage path, so the path
doesn't need to be constructed multiple places and backed out of leveldb.

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

This commit is a straightforward internal code cleanup. It moves the logic that decides where the UTXO database files live from several scattered places into a single new Chainstate::StoragePath() method. There are no user-facing behavior changes, no bug fixes, and no security-related changes.

Lower-priorityrefactor: Add ChainstateManager::CurrentChainstate() methodby Ryan Ofsky · a229cb94 · Dec 12, 2025 · 4 filesMessage 97 · StrongInformational 15Details
Commit message · Ryan Ofsky

refactor: Add ChainstateManager::CurrentChainstate() method

CurrentChainstate() is basically the same as ActiveChainstate() except it
requires cs_main to be locked when it is called, instead of locking cs_main
internally.

The name "current" should also be less confusing than "active" because multiple
chainstates can be active, and CurrentChainstate() returns the chainstate
targeting the current network tip, regardless of what chainstates are being
downloaded or how they are used.

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

This is a routine internal code cleanup in Bitcoin Core. It introduces a new helper method called CurrentChainstate() and replaces a few older helper calls with it. There is no change to network rules, consensus logic, or user-facing behavior, and nothing in the commit suggests a security fix.

Lower-priorityrefactor: Delete ChainstateManager::GetAll() methodby Ryan Ofsky · ae85c495 · Dec 12, 2025 · 8 filesMessage 62 · AdequateInformational 15Details
Commit message · Ryan Ofsky

refactor: Delete ChainstateManager::GetAll() method

Just use m_chainstates array instead.

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

This commit is a straightforward internal code cleanup in Bitcoin Core. It removes a helper method called GetAll() and replaces its uses with direct access to an internal list of chainstates. The change also adds a small safety check to ignore chainstates based on invalid snapshots when considering new block candidates. There is no indication this fixes an active security bug or introduces a vulnerability.

Lower-priorityrefactor: Add ChainstateManager::ActivateBestChains() methodby Ryan Ofsky · 6a572dbd · Dec 12, 2025 · 4 filesMessage 85 · StrongInformational 15Details
Commit message · Ryan Ofsky

refactor: Add ChainstateManager::ActivateBestChains() method

Deduplicate code looping over chainstate objects and calling
ActivateBestChain() and avoid need for code outside ChainstateManager to use
the GetAll() method.

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 routine code cleanup (refactor) in Bitcoin Core. It pulls three nearly identical loops that call ActivateBestChain() into a single new helper method called ActivateBestChains(). There is no change to what the program actually does, no new user-facing behavior, and no indication of a security fix.

Lower-priorityrefactor: Delete ChainstateManager::SnapshotBlockhash() methodby Ryan Ofsky · e514fe61 · Dec 12, 2025 · 4 filesMessage 95 · StrongInformational 15Details
Commit message · Ryan Ofsky

refactor: Delete ChainstateManager::SnapshotBlockhash() method

SnapshotBlockhash() is only called two places outside of tests, and is used
redundantly in some tests, checking the same field as other checks. Simplify by
dropping the method and using the m_from_snapshot_blockhash field directly.

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

This is a straightforward internal code cleanup in Bitcoin Core. It removes a small helper function called SnapshotBlockhash() and replaces its uses with direct access to an existing internal field. There is no change to user-facing behavior, no bug fix, and no security-relevant change.