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

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.

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.

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.

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

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

Security candidateMerge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstateby Ava Chow · d155fc12 · Dec 11, 2025 · 2876 filesMessage 91 · StrongInformational 23Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstate

c1e554d3e5834a140f2a53854018499a3bfe6822 refactor: consolidate 3 separate locks into one block (Andrew Toth)
41479ed1d23ea752d0ce14c2cf5627f43bceb722 test: add test for periodic flush inside ActivateBestChain (Andrew Toth)
84820561dcb2d156d1a1151a480fc1be6649cae4 validation: periodically flush dbcache during reindex-chainstate (Andrew Toth)

Pull request description:

After #30611 we periodically do a non-erasing flush of the dbcache to disk roughly every hour during IBD.
The intention was to also do this periodic flush during reindex-chainstate, so we would not risk losing progress during a system failure when reindexing with a high dbcache value.

It was discovered that reindex-chainstate does not perform a PERIODIC flush until it has already reached the tip. Since reindexing to tip usually happens within 24 hours, this behaviour was unnoticed with the previous periodic flush interval. Note that reindex-chainstate still does IF_NEEDED flushes during `ConnectBlock`, so this also would not be noticed when running with a lower dbcache value.

This patch moves the PERIODIC flush from after the outer loop in `ActivateBestChain` to inside the outer loop after we release `cs_main`. This will periodically flush during IBD, reindex-chainstate, and steady state.

ACKs for top commit:
l0rinc:
ACK c1e554d3e5834a140f2a53854018499a3bfe6822
achow101:
ACK c1e554d3e5834a140f2a53854018499a3bfe6822
sipa:
utACK c1e554d3e5834a140f2a53854018499a3bfe6822

Tree-SHA512: c447ad03e16c9978b8ed2c285b38e1b4c56e7778ab93b6f64435116f47b8931017f5f56ab53eb61656693146aaced776f666af573a41ab28e8f2b6d8657fa756

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol pathmerge-commit duplicate discount
AI analysis · Informational 23/100

This commit fixes a Bitcoin Core bug where the database cache (dbcache) was not being periodically saved to disk during the 'reindex-chainstate' operation. The intended behavior was to flush the cache roughly every hour to avoid losing progress if the system crashed. Because the flush only happened after reaching the tip, users running reindex-chainstate with a large dbcache could lose many hours of work on a crash. The patch moves the periodic flush inside the main loop so it actually occurs during reindexing, initial block download, and normal operation. It is a reliability/durability fix, not a remote-exploitable security vulnerability.

Lower-priorityrest: allow reading partial block data from storageby Roman Zeyde · 07135290 · Dec 11, 2025 · 4 filesMessage 81 · StrongLow 27Details
Commit message · Roman Zeyde

rest: allow reading partial block data from storage

It will allow fetching specific transactions using an external index,
following https://github.com/bitcoin/bitcoin/pull/32541#issuecomment-3267485313.

Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
Co-authored-by: Lőrinc <pap.lorinc@gmail.com>

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

This commit adds a new read-only REST API endpoint that lets users fetch a specific slice of bytes from a stored Bitcoin block, similar to reading a portion of a file. It does not change how blocks are written or validated, and it does not expose any private wallet data. The main security consideration is that it adds another network-facing path that reads raw block files, so any bug in parsing the request or reading the file could affect node availability or leak block data. The code appears to validate the offset and size parameters and returns errors for invalid or out-of-range requests.

Lower-priorityblockstorage: return an error code from `ReadRawBlock()`by Roman Zeyde · f2fd1aa2 · Dec 11, 2025 · 7 filesMessage 85 · StrongInformational 19Details
Commit message · Roman Zeyde

blockstorage: return an error code from `ReadRawBlock()`

It will enable different error handling flows for different error types.

Also, `ReadRawBlockBench` performance has decreased due to no longer reusing a vector
with an unchanging capacity - mirroring our production code behavior.

Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
Co-authored-by: Lőrinc <pap.lorinc@gmail.com>

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

This commit refactors how Bitcoin Core reads raw block files from disk. Previously, the ReadRawBlock() function returned true/false and filled a caller-provided buffer. Now it returns a structured result that distinguishes I/O errors from success. The main observable security-relevant change is in the REST API: when a block cannot be read from disk due to an I/O problem, it now returns HTTP 500 (Internal Server Error) instead of HTTP 404 (Not Found). This is a correctness improvement that reduces the chance an attacker can trick the node into revealing whether a pruned block existed, but it is not a fix for an active vulnerability.

Lower-priorityblockstorage: allow reading partial block data from storageby Roman Zeyde · 4e2af1c0 · Dec 11, 2025 · 4 filesMessage 93 · StrongLow 29Details
Commit message · Roman Zeyde

blockstorage: allow reading partial block data from storage

It will allow fetching specific transactions using an external index,
following https://github.com/bitcoin/bitcoin/pull/32541#issuecomment-3267485313.

No logging takes place in case of an invalid offset/size (to avoid spamming the log),
by using a new `ReadRawError::BadPartRange` error variant.

Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
Co-authored-by: Lőrinc <pap.lorinc@gmail.com>

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

This commit adds a new feature to Bitcoin Core that lets the node read only a slice of a stored block (a specific byte range) instead of the whole block. It is meant to support future REST API improvements for fetching specific transactions. The commit includes careful range checks and avoids logging invalid requests to prevent log spam. There is no direct evidence in the commit that this fixes an active security bug, but it does touch untrusted REST input handling, so defensive care is warranted.

Lower-prioritytest: adjust `ComputeMerkleRoot` testsby Lőrinc · f0a21831 · Dec 11, 2025 · 2 filesMessage 92 · StrongInformational 15Details
Commit message · Lőrinc

test: adjust `ComputeMerkleRoot` tests

Update the integer fuzz test to move the vector into `ComputeMerkleRoot`, matching production usage patterns and avoiding unnecessary copies.

Update `merkle_test_BlockWitness` to use an odd number of transactions to ensure the test covers the scenario where leaf duplication occurs. Also switch to `GetWitnessHash` to match `BlockWitnessMerkleRoot` semantics.
The manual vector setup retains the exact-size `resize` to explicitly verify the behavior against the calculated root.

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
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only changes test code. It updates two unit tests for the merkle-root calculation helper: one fuzz test now moves its input vector instead of copying it, and another test now uses an odd number of transactions and witness hashes to better match real production behavior. There are no changes to the actual Bitcoin Core consensus or networking code, so this cannot directly affect live node security.

Lower-priorityfuzz: exercise `ComputeMerkleRoot` without mutated parameterby Lőrinc · 7e9de20c · Dec 11, 2025 · 1 fileMessage 75 · AdequateInformational 15Details
Commit message · Lőrinc

fuzz: exercise `ComputeMerkleRoot` without mutated parameter

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

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This is a one-line change to a fuzz test file. It expands test coverage so that the fuzzer sometimes passes a null pointer to a function that computes Merkle roots, exercising a code path that previously wasn't tested. It does not change any production code, consensus rules, or network behavior.

Lower-priorityutil: Add Unexpected::error()by MarcoFalke · fa1de110 · Dec 11, 2025 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · MarcoFalke

util: Add Unexpected::error()

This is not needed, but a bit closer to the std lib.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
AI analysis · Informational 15/100

This is a small, clean code-quality change that adds a standard-style accessor method to a utility class. It does not fix a bug, close a security hole, or change any behavior that external users can reach. There is no security relevance.

Lower-prioritytest: refactor: Use BOOST_CHECK_EQUAL over BOOST_CHECK ==by MarcoFalke · faa109f8 · Dec 11, 2025 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · MarcoFalke

test: refactor: Use BOOST_CHECK_EQUAL over BOOST_CHECK ==

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

This commit only changes test code to use a different style of comparison check. It does not alter any production code, network behavior, or wallet logic, and has no security relevance.

AI review queuedSet bugprone-unused-return-value.AllowCastToVoidby MarcoFalke · fad4a9fe · Dec 11, 2025 · 5 filesMessage 60 · AdequateInformational 15Details
Commit message · MarcoFalke

Set bugprone-unused-return-value.AllowCastToVoid

It only makes sense to turn this off with C++26, which introduces the _
placeholder.

60/100 · AdequateMessage clarity
✓ 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 code-style and static-analysis configuration change. It tells the clang-tidy linter to allow discarding function return values when the call is explicitly cast to void, and updates a few places in benchmark, test, and HTTP server code to use that style instead of a temporary variable marked 'maybe unused'. There is no security-relevant behavior change.

AI review queueddepends: Boost 1.90.0by fanquake · ca4a844e · Dec 10, 2025 · 2 filesMessage 38 · OpaqueInformational 15Details
Commit message · fanquake

depends: Boost 1.90.0

38/100 · OpaqueMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit updates the Boost dependency used by Bitcoin Core's build system from version 1.88.0 to 1.90.0. It also removes a custom patch that was previously needed to skip compiling certain Boost.Test libraries, because the newer Boost version now includes that functionality directly. There is no indication in the commit that this fixes a security vulnerability.

Lower-prioritytest: Detect truncated download in get_previous_releases.pyby MarcoFalke · fa75480c · Dec 10, 2025 · 1 fileMessage 72 · AdequateInformational 19Details
Commit message · MarcoFalke

test: Detect truncated download in get_previous_releases.py

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

This commit fixes a test-support script that downloads old Bitcoin Core releases. Previously, if a download was cut short (for example by a network error), the script would silently keep the incomplete file. Now it checks whether the downloaded bytes match the expected size and throws an error if they don't. This is a reliability fix in a developer/test tool, not a direct security fix in the Bitcoin software users run.