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
1502commits · 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 53 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.

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-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: Delete ChainstateManager::IsSnapshotValidated() methodby Ryan Ofsky · ee352506 · Dec 12, 2025 · 4 filesMessage 95 · StrongInformational 15Details
Commit message · Ryan Ofsky

refactor: Delete ChainstateManager::IsSnapshotValidated() method

IsSnapshotValidated() is only called one place outside of tests, and is use
redundantly in some tests, asserting that a snapshot is not validated when a
snapshot chainstate does not even exist. Simplify by dropping the method and
checking Chainstate m_assumeutxo 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
Why it was queued
defensive validation
AI analysis · Informational 15/100

This commit removes a helper method called IsSnapshotValidated() and replaces its few uses with direct checks of an internal chainstate flag. It is a straightforward code cleanup with no change to security behavior.

Lower-priorityrefactor: Delete ChainstateManager::IsSnapshotActive() methodby Ryan Ofsky · d9e82299 · Dec 12, 2025 · 7 filesMessage 100 · StrongInformational 14Details
Commit message · Ryan Ofsky

refactor: Delete ChainstateManager::IsSnapshotActive() method

IsSnapshotActive() method is only called one place outside of tests and
asserts, and is confusing because it returns true even after the snapshot is
fully validated.

The documentation which said this "implies that a background validation
chainstate is also in use" is also incorrect, because after the snapshot is
validated, the background chainstate gets disabled and IsUsable() would return
false.

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
defensive validation
AI analysis · Informational 14/100

This commit is a straightforward internal code cleanup. It removes a helper function called IsSnapshotActive() that was used in only one production spot and several tests, replacing it with a direct check of whether the current chainstate came from a snapshot. The change does not alter what the program does; it only makes the code clearer and fixes an outdated comment. There is no indication this affects user funds, network consensus, or introduces a security bug.

Lower-priorityrefactor: Add ChainstateManager::m_chainstates memberby Ryan Ofsky · 491d827d · Dec 12, 2025 · 3 filesMessage 97 · StrongInformational 12Details
Commit message · Ryan Ofsky

refactor: Add ChainstateManager::m_chainstates member

Use to replace m_active_chainstate, m_ibd_chainstate, and m_snapshot_chainstate
members. This has several benefits:

- Ensures ChainstateManager treats chainstates instances equally, making
distinctions based on their attributes, not having special cases and making
assumptions based on their identities.

- Normalizes ChainstateManager representation so states that should be
impossible to reach and validation code has no handling for (like
m_snapshot_chainstate being set and m_ibd_chainstate being unset, or both
being set but m_active_chainstate pointing to the m_ibd_chainstate) can no
longer be represented.

- Makes ChainstateManager more extensible so new chainstates can be added for
different purposes, like indexing or generating and validating assumeutxo
snapshots without interrupting regular node operations. With the
m_chainstates member, new chainstates can be added and handled without needing
to make changes all over validation code or to copy/paste/modify the existing
code that's been already been written to handle m_ibd_chainstate and
m_snapshot_chainstate.

- Avoids terms that are confusing and misleading:

- The term "active chainstate" term is confusing because multiple chainstates
will be active and in use at the same time. Before a snapshot is validated,
wallet code will use the snapshot chainstate, while indexes will use the IBD
chainstate, and netorking code will use both chainstates, downloading
snapshot blocks at higher priority, but also IBD blocks simultaneously.

- The term "snapshot chainstate" is ambiguous because it could refer either
to the chainstate originally loaded from a snapshot, or to the chainstate
being used to validate a snapshot that was loaded, or to a chainstate being
used to produce a snapshot, but it is arbitrary used to refer the first
thing. The terms "most-work chainstate" or "assumed-valid chainstate" should
be less ambiguous ways to refer to chainstates loaded from snapshots.

- The term "IBD chainstate" is not just ambiguous but actively confusing
because technically IBD ends and the node is considered synced when the
snapshot chainstate finishes syncing, so in practice the IBD chainstate
will mostly by synced after IBD is complete. The term "fully-validated" is
a better way of describing the characteristics and purpose of this
chainstate.

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
Why it was queued
defensive validation
AI analysis · Informational 12/100

This is an internal code cleanup (refactor) in Bitcoin Core. It replaces three separate chainstate pointers with a single list of chainstates, making the code simpler and removing some impossible internal states. There is no indication this fixes a security bug or introduces a vulnerability.

AI review queuedrefactor: Convert ChainstateRole enum to structby Ryan Ofsky · 4dfe3839 · Dec 12, 2025 · 26 filesMessage 80 · StrongInformational 18Details
Commit message · Ryan Ofsky

refactor: Convert ChainstateRole enum to struct

Change ChainstateRole parameter passed to wallets and indexes. Wallets and
indexes need to know whether chainstate is historical and whether it is fully
validated. They should not be aware of the assumeutxo snapshot validation
process.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 18/100

This is a code cleanup (refactor) change in Bitcoin Core. It replaces a three-value enum called ChainstateRole with a small struct carrying two yes/no flags: whether a chainstate is fully validated and whether it is historical (used for assumeutxo background validation). The logic that decides how wallets, indexes, and network processing react to block notifications is preserved; only the internal data type and comparisons are changed. There is no security fix or behavior change intended here.

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::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 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-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: Simplify pruning functionsby TheCharlatan · af455dcb · Dec 12, 2025 · 4 filesMessage 62 · AdequateInformational 15Details
Commit message · TheCharlatan

refactor: Simplify pruning functions

Move GetPruneRange from ChainstateManager to Chainstate.

62/100 · AdequateMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a straightforward internal code cleanup: it moves a small helper function that decides which block heights can be pruned from one class (ChainstateManager) to another (Chainstate), and removes an unneeded parameter from two related functions. The actual pruning logic and results are unchanged. There is no user-visible behavior change and no security issue.

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.

AI review queuedrefactor: Pass chainstate parameters to MaybeCompleteSnapshotValidationby Ryan Ofsky · 840bd2ef · Dec 12, 2025 · 8 filesMessage 85 · StrongInformational 17Details
Commit message · Ryan Ofsky

refactor: Pass chainstate parameters to MaybeCompleteSnapshotValidation

Remove hardcoded references to m_ibd_chainstate and m_snapshot_chainstate so
MaybeCompleteSnapshotValidation function can be simpler and focus on validating
the snapshot without dealing with internal ChainstateManager states.

This is a step towards being able to validate the snapshot outside of
ActivateBestChain loop so cs_main is not locked for minutes when the snapshot
block is connected.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit is a code cleanup (refactor) in Bitcoin Core's assumeutxo snapshot feature. It renames functions and changes how the snapshot validation code receives its inputs, so it no longer relies on hardcoded internal chainstate names. The change does not alter the actual snapshot validation logic or security checks; it is preparation for future work to reduce how long a global lock is held during snapshot validation. There is no direct security vulnerability in this patch.

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

AI review queuedrefactor: Add Chainstate m_assumeutxo and m_target_utxohash membersby Ryan Ofsky · 9fe927b6 · Dec 12, 2025 · 3 filesMessage 85 · StrongInformational 17Details
Commit message · Ryan Ofsky

refactor: Add Chainstate m_assumeutxo and m_target_utxohash members

Get rid of m_disabled/IsUsable members. Instead of marking chains disabled for
different reasons, store chainstate assumeutxo status explicitly and use that
information to determine how chains should be treated.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This is a code cleanup (refactor) in Bitcoin Core that changes how the program tracks whether a chainstate is based on an unvalidated snapshot (assumeutxo). It replaces a simple disabled flag with explicit state tracking. There is no direct evidence in the commit that this fixes a security vulnerability; it appears to be a maintainability and correctness improvement.

Security candidateguix: doc: Suggest guix-install.sh --uninstallby David Gumberg · ea1be386 · Dec 12, 2025 · 2817 filesMessage 45 · ThinInformational 15Details
Commit message · David Gumberg

guix: doc: Suggest guix-install.sh --uninstall

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a documentation-only change in the Bitcoin Core repository. It updates the Guix installation guide to suggest using the official uninstall flag when removing Guix. There is no change to any code that runs the Bitcoin network, wallet, or node software, and no security vulnerability is introduced or fixed.

Lower-priorityguix: doc: zdiff3 doesn't workby David Gumberg · e76e8865 · Dec 12, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · David Gumberg

guix: doc: zdiff3 doesn't work

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 only adds documentation to a Guix installation guide. It explains that a specific Git setting called 'zdiff3' can cause Guix builds to fail, and tells users how to switch to a compatible setting. There is no code change and no security issue.

Lower-prioritylint: Remove confusing, redundant, and brittle lint-spellingby MarcoFalke · fa904fc6 · Dec 12, 2025 · 4 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

lint: Remove confusing, redundant, and brittle lint-spelling

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

This commit removes a spelling-check tool (codespell) from Bitcoin Core's automated linting setup. It deletes the lint-spelling.py script, its word-ignore list, and the codespell dependency from CI install scripts. There is no change to the actual Bitcoin node software, wallet logic, networking, or consensus code. It is purely a cleanup of developer tooling.

Lower-prioritygui: Add a menu item to restore then migrate a wallet fileby Ava Chow · 14371fd1 · Dec 11, 2025 · 1 fileMessage 85 · StrongInformational 17Details
Commit message · Ava Chow

gui: Add a menu item to restore then migrate a wallet file

Some users will have backups of a legacy wallet which cannot be restored
due to being a legacy wallet, and therefore cannot be migrated from the
GUI. This menu item allows such users to restore and migrate their
wallets in a single action.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 17/100

This commit adds a new menu item in the Bitcoin Core desktop program that lets a user pick an old wallet backup file and restore it, then automatically convert ('migrate') it to the newer wallet format. It is a user-facing feature addition, not a fix for a security bug. There is no indication in the commit that it addresses a vulnerability.

AI review queuedgui: Add restore_and_migrate function to restore then migrate a walletby Ava Chow · f11a7d24 · Dec 11, 2025 · 2 filesMessage 73 · AdequateInformational 19Details
Commit message · Ava Chow

gui: Add restore_and_migrate function to restore then migrate a wallet

restore_and_migrate first restores a wallet file to the wallets
directory in the expected layout, then it performs legacy to descriptor
wallet migration on the restored wallet.

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

This commit adds a new GUI feature that lets a user restore a wallet backup file and then automatically convert it from the older 'legacy' wallet format to the newer 'descriptor' wallet format. It shows confirmation and progress dialogs, copies the backup into the normal wallets folder without changing the original file, and then runs the existing migration logic. There is no obvious security bug in the change itself; it is a user-facing convenience feature built on top of existing wallet restore and migration code.

AI review queuedwallet, interfaces, gui: Expose load_after_restore parameterby Ava Chow · 4ec2d18a · Dec 11, 2025 · 3 filesMessage 65 · AdequateInformational 18Details
Commit message · Ava Chow

wallet, interfaces, gui: Expose load_after_restore parameter

RestoreWallet has a load_after_restore parameter, expose this to callers
using it through the wallet interface as well.

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

This commit is a small, non-security code cleanup. It exposes an existing internal option called load_after_restore through the wallet interface so that callers can choose whether a restored wallet should be loaded automatically. The GUI code is updated to pass true, preserving the previous behavior. There is no indication this fixes a vulnerability or introduces a security risk.

AI review queuedgui: Move actual migration part of migrate() to its own functionby Ava Chow · 16ab6dfc · Dec 11, 2025 · 2 filesMessage 65 · AdequateInformational 15Details
Commit message · Ava Chow

gui: Move actual migration part of migrate() to its own function

We will need to use the same migration code in a later commit, so first
move it to a separate function.

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

This commit is a simple code cleanup in the Bitcoin Core graphical wallet. It takes the actual wallet-migration steps out of the user-facing 'migrate' function and puts them into a new internal helper function called 'do_migrate'. The user confirmation dialog and the migration logic itself are unchanged; the code is just reorganized so the same migration steps can be reused later. There is no security issue visible here.