BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

252security candidates603second-pass queue1092AI analyses
208commits · 30 days
493commits · 60 days
1520commits · 180 days
2878commits · 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
917Strong · 80–100
1187Adequate · 60–79
686Thin · 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 Poinsot2248170
Ava Chow15649130064
MarcoFalke40721110074
Lőrinc1772183081
fanquake2271976057
Hennadii Stepanov2081455063
rkrux57944074
Sjors Provoost89825074
Sebastian Falbesoner33717073
David Gumberg55638072
Pieter Wuille95518066
Hodlinator66523076
Analysis record

Published AI watches

Last scanned 44 minutes ago

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

ci: update NetBSD cross-build SDK

This is a routine maintenance update to Bitcoin Core's continuous integration (CI) system. It changes the version number of the NetBSD operating system used for cross-compilation testing from a release candidate (11.0_RC6) to the final rel…

2c87337eby Lőrinc+1−11 file
No security note in commit
Informational 15 AI analysisMessage 72 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: require `TryGetTotalRam()` detection

This commit only changes a test file and build configuration. It removes the option to skip a test when the system cannot detect total RAM, and instead requires the RAM detection to succeed. It does not change any production wallet, networ…

6a2de55aby Lőrinc+3−112 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

scripted-diff: use `MIN_DBCACHE_BYTES`

This commit is a simple automated rename of a constant from MIN_DB_CACHE to MIN_DBCACHE_BYTES across five files. The value stays the same (4 MiB), and no behavior changes. It is a code-cleanup/refactoring change with no security relevance.

7cfa21d6by Lőrinc+5−55 files
No security note in commit
Informational 20 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

kernel: allow setting chainstate `dbcache`

This commit adds a new public API knob to the Bitcoin Core 'libbitcoinkernel' library so that programs using the kernel can choose how much memory to use for the chainstate database cache. It also enforces minimum and maximum size limits. …

New configurable cache-size API with explicit min/max validationReplaces hard-coded DEFAULT_KERNEL_CACHE with caller-supplied valueAdds unit tests for out-of-range rejection and 32-bit upper-bound rejection
8bd9f460by Lőrinc+41−14 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

kernel, node: colocate dbcache bounds

This commit is a small code cleanup: it moves two constants that define the minimum and maximum size of the database cache (dbcache) into a shared kernel header so that both the node and kernel code use the same limits. There is no change …

8aa21e11by Lőrinc+7−74 files
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

node, qt: inline `DEFAULT_DB_CACHE`

This is a small code cleanup change in Bitcoin Core. It removes a misleading alias named DEFAULT_DB_CACHE and replaces it with the underlying name DEFAULT_KERNEL_CACHE in a few places. The behavior of the program is unchanged; only the nam…

cd086c16by Lőrinc+5−74 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.

AI review queuedconsensus/test: add out-of-range output unit tests for `CTransaction::GetValueOut`by Lőrinc · 232a2bce · Jan 31, 2026 · 1 fileMessage 91 · StrongInformational 13Details
Commit message · Lőrinc

consensus/test: add out-of-range output unit tests for `CTransaction::GetValueOut`

Inspired by b-c-cov coverage reports:
* "GetValueOut: value out of range" - https://maflcko.github.io/b-c-cov/test_bitcoin.coverage/src/primitives/transaction.cpp.gcov.html#L103

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 13/100

This commit only adds a new automated test to Bitcoin Core. It checks that a helper function called GetValueOut() correctly throws an error when a transaction output exceeds the maximum allowed money value. There is no change to production code, no bug fix, and no security patch.

AI review queuedconsensus/test: add `MoneyRange` unit tests for `CheckTxInputs`by Lőrinc · aa87aae1 · Jan 31, 2026 · 1 fileMessage 91 · StrongInformational 15Details
Commit message · Lőrinc

consensus/test: add `MoneyRange` unit tests for `CheckTxInputs`

Add minimal unit tests exercising `Consensus::CheckTxInputs` reject reasons for coinbase maturity (`bad-txns-premature-spend-of-coinbase`), input value range failures (`bad-txns-inputvalues-outofrange`), and for `nValueIn < value_out` (`bad-txns-in-belowout`).

Inspired by b-c-cov coverage reports:
* "bad-txns-premature-spend-of-coinbase" - https://maflcko.github.io/b-c-cov/test_bitcoin.coverage/src/consensus/tx_verify.cpp.gcov.html#L180
* "bad-txns-inputvalues-outofrange" - https://maflcko.github.io/b-c-cov/test_bitcoin.coverage/src/consensus/tx_verify.cpp.gcov.html#L187
* "bad-txns-in-belowout" - https://maflcko.github.io/b-c-cov/test_bitcoin.coverage/src/consensus/tx_verify.cpp.gcov.html#L193

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds new unit tests for an existing Bitcoin Core transaction validation function. It does not change any production consensus, networking, or wallet code. There is no security fix or behavior change in the software itself.

AI review queuedwallet: Rename `RecordType::DELETE` to `RecordType::DELETE_FLAG`by Hennadii Stepanov · 516be10b · Jan 30, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Hennadii Stepanov

wallet: Rename `RecordType::DELETE` to `RecordType::DELETE_FLAG`

On Windows, the `winnt.h` header defines `DELETE` as a macro for a
"Standard Access Right" bitmask (0x00010000L).

This introduces a fragile dependency on header inclusion order: if
Windows headers happen to be included before this enum definition,
the preprocessor expands `DELETE` into a numeric literal, causing
syntax errors.

Rename the enumerator to `DELETE_FLAG` to remove this fragility and
avoid the collision entirely.

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: broader security terminologysecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a straightforward code cleanup change that renames an internal label from DELETE to DELETE_FLAG. It fixes a build problem on Windows where a system header also uses the word DELETE, which could cause compilation errors depending on the order headers were included. There is no security vulnerability or runtime behavior change.

AI review queuedhttp-server: guard against crashes from unhandled exceptionsby furszy · 45930a79 · Jan 29, 2026 · 1 fileMessage 95 · StrongModerate 62Details
Commit message · furszy

http-server: guard against crashes from unhandled exceptions

Currently, if an exception is thrown at the top-level HTTP request
handler (prior to invoking the command), the program crashes.

Ideally, each handler should catch all exceptions internally and
be responsible for sanitizing them and crafting the client response.
This is because only the handler knows the correct response format,
which differs per server type. However, because this cannot always
be guaranteed, it is safer to also catch exceptions in the top-level
server code, log the unexpected error, and disconnect the socket.

This both guards against crashes caused by uncaught exceptions and
prevents the client from hanging indefinitely while waiting for a
response that will never arrive.

The following diff can be used to trigger the crash in master
(just run single node functional tests like feature_shutdown.py):
```
diff --git a/src/httprpc.cpp b/src/httprpc.cpp
--- a/src/httprpc.cpp
+++ b/src/httprpc.cpp
@@ -103,6 +103,9 @@

static bool HTTPReq_JSONRPC(const std::any& context, HTTPRequest* req)
{
+ static int i = 0; // skip initial requests as they are used in the RPC warmup phase.
+ if (i++ > 3) throw std::runtime_error("error from json rpc handler");
+
// JSONRPC handles only POST
if (req->GetRequestMethod() != HTTPRequest::POST) {
req->WriteReply(HTTP_BAD_METHOD, "JSONRPC server handles only POST requests");

```

Note:
This leaves a TODO in the code because error responses should eventually
be specialized per server type. REST clients expect plain text responses,
while JSON-RPC clients expect a JSON error object.
The TODO is there because this is not consistently enforced everywhere
in the current codebase, and we should tackle them all at once.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
defensive validationsecond-pass: broader security terminology
AI analysis · Moderate 62/100

This change fixes a bug in Bitcoin Core's built-in web server where an unexpected error inside an HTTP request handler could crash the entire program. The patch wraps each request in a safety net: if something throws an error, it is logged, the client connection is closed, and the program keeps running instead of crashing. The commit message also includes a test snippet showing the crash can be triggered intentionally.

AI review queuedrefactor: Remove remaining std::bind, check via clang-tidyby MarcoFalke · fad04223 · Jan 28, 2026 · 4 filesMessage 62 · AdequateInformational 15Details
Commit message · MarcoFalke

refactor: Remove remaining std::bind, check via clang-tidy

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a routine code cleanup: it replaces old-style std::bind calls with modern C++ lambda functions and adds a clang-tidy rule to prevent std::bind from being reintroduced. There is no security-relevant change here.

AI review queueddoc: add missing param description to SRDby yancy · 3400db80 · Jan 27, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · yancy

doc: add missing param description to SRD

Co-authored-by: Mark "Murch" Erhardt <murch@murch.one>

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 only updates a code comment (documentation) for a coin-selection function called SRD. It adds a missing description of one parameter and clarifies how the algorithm works. No program logic, code behavior, or security properties were changed.

AI review queuedci: remove gnu-getopt usageby fanquake · ddae1b4e · Jan 27, 2026 · 5 filesMessage 80 · StrongInformational 15Details
Commit message · fanquake

ci: remove gnu-getopt usage

This is used for argument parsing in the retry script, however we don't
use the script with any arguments. So remove the unused code, and the
dependency on gnu-getopt.

This came up in the context of adding new CI jobs, where gnu-getopt
might not be available, or working properly. It seemed easier to just
remove the unused code, than look for more workarounds.

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

This commit removes an unused command-line argument parser and its dependency on GNU getopt from Bitcoin Core's internal CI (continuous integration) scripts. The retry helper script was previously called with arguments it never actually used, so the code is being simplified. There is no change to Bitcoin's network code, wallet, consensus rules, or any software that end users run.

AI review queuedwallet: fix removeprunedfunds bug with conflicting transactionsby Martin Zumsande · 1f60ca36 · Jan 26, 2026 · 2 filesMessage 85 · StrongModerate 60Details
Commit message · Martin Zumsande

wallet: fix removeprunedfunds bug with conflicting transactions

removeprunedfunds removes all entries from mapTxSpends for the
inputs of the pruned tx. However, this is incorrect, because there could be
multiple entries from conflicting transactions (that shouldn't be
removed as well). This could lead to the wallet creating invalid
transactions, trying to double spend utxos.
The bug persists when the conflicting tx was mined, because
the wallet trusts its internal accounting instead of calling
AddToSpends again.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 60/100

This commit fixes a bug in Bitcoin Core's wallet where removing a pruned transaction could accidentally delete records of other conflicting transactions that spend the same coin. As a result, the wallet might mistakenly believe a coin was still available and create an invalid double-spend transaction. The fix ensures only the specific pruned transaction's spend records are removed, leaving conflicting transactions intact.

AI review queueddoc: fix invalid arg name hints for bugprone validationby Lőrinc · a73a3ec5 · Jan 23, 2026 · 12 filesMessage 81 · StrongInformational 15Details
Commit message · Lőrinc

doc: fix invalid arg name hints for bugprone validation

The extra leading `=` or missing trailing `=` prevented clang-tidy's `bugprone-argument-comment` check from validating the parameter name, as it only matches comments formatted strictly as `/*arg=*/` (see https://clang.llvm.org/extra/clang-tidy/checks/bugprone/argument-comment.html).

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ 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 commit only fixes the formatting of code comments that label function arguments (for example, changing /*check_pow=*/ to the correct /*check_pow=*/ form). These comments are ignored by the running program and have no effect on Bitcoin's behavior, network protocol, or security. The change enables a static-analysis tool (clang-tidy) to verify that the labels match the actual parameter names, which helps prevent future coding mistakes but does not fix any active vulnerability.

AI review queuedtest: verify node state after restart in assumeutxoby Yash Bhutwala · 5cd57943 · Jan 23, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Yash Bhutwala

test: verify node state after restart in assumeutxo

Replace the TODO comment in wallet_assumeutxo.py with actual test
assertions that verify node and wallet behavior after a restart
during assumeutxo background sync.

The new tests verify:
- Two chainstates exist (background validation not complete)
- Background chainstate is still at START_HEIGHT
- Snapshot chainstate has synced to at least PAUSE_HEIGHT
- Wallets cannot be loaded after restart (expected behavior during
background sync because blocks before snapshot are unavailable
for rescanning)
- Wallet backup from before snapshot height cannot be restored

This documents the expected behavior that wallets cannot be loaded
after a node restart during assumeutxo background sync, which is
an important edge case for users to be aware of.

refs #28648

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

This commit only adds new test code to Bitcoin Core's functional test suite. It does not change any production wallet, node, or consensus logic. The new tests document an existing limitation: if a node is restarted while it is still doing the background validation for an assumeutxo snapshot, wallets that need older blocks cannot be loaded until the background sync finishes. This is a test-only change that records expected behavior, not a fix for a security bug.

AI review queuedwallet, test: update `gethdkeys` functional testby rkrux · 43c528ab · Jan 23, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · rkrux

wallet, test: update `gethdkeys` functional test

Update the `test_ranged_multisig` test case to verify the partial
xprv fix in the `gethdkeys` RPC. Also, update some existing variable
names.

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

This commit only changes a test file. It updates an existing functional test for the gethdkeys RPC to verify a previously fixed bug where private extended keys (xprv) were incorrectly returned for keys that did not belong to the wallet. There are no changes to production wallet code, so this does not introduce or fix a live security issue on its own.

AI review queuedRemove unused epochguard.hby Suhas Daftuar · 40735450 · Jan 23, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Suhas Daftuar

Remove unused epochguard.h

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
second-pass: opaque commit message
AI analysis · Informational 15/100

This commit simply deletes an unused header file, epochguard.h, from the Bitcoin Core source code. The file provided a helper class for tracking graph traversal 'epochs' in the memory pool, but nothing in the codebase was using it anymore. Removing dead code does not change any running behavior and is not a security fix.

AI review queuedrefactor: wallet: Factor out `WriteVersion()` from `PopulateWalletFromDB()`by David Gumberg · f35acc89 · Jan 22, 2026 · 2 filesMessage 97 · StrongInformational 15Details
Commit message · David Gumberg

refactor: wallet: Factor out `WriteVersion()` from `PopulateWalletFromDB()`

Writing the wallet's `CLIENT_VERSION` (which indicates the last version
to have touched a wallet) needs to be done on both wallet creation and
wallet loading.

The next commit removes the `PopulateWalletFromDatabase()` call from
wallet creation, but this behavior needs to be preserved, so this commit
factors setting `CLIENT_VERSION` out of `PopulateWalletFromDatabase()`
so that wallet creation can use it in the next commit.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a small, safe code cleanup in Bitcoin Core's wallet database code. It moves the logic that writes the wallet's version marker into its own reusable function, with no change to what data is actually written. There is no security issue here.

AI review queuedscripted-diff: refactor: CWallet::Create() -> CreateNew()by David Gumberg · db2effac · Jan 22, 2026 · 4 filesMessage 83 · StrongInformational 15Details
Commit message · David Gumberg

scripted-diff: refactor: CWallet::Create() -> CreateNew()

Aside from being more legible, changing the name of `CWallet::Create()`
also validates that every instance where a new wallet is `Create()`'ed
is handled in this branch.

-BEGIN VERIFY SCRIPT-
sed -i 's|\bCreate(|CreateNew(|g' src/wallet/wallet.cpp src/wallet/wallet.h src/wallet/test/util.cpp src/wallet/test/wallet_tests.cpp
-END VERIFY SCRIPT-

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
defensive validationsigning or wallet pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a simple rename of a wallet creation function from CWallet::Create() to CWallet::CreateNew(). It does not change what the code does, only its name. There is no security issue here.

AI review queuedwallet: Create separate function for wallet loadby David Gumberg · ae66e011 · Jan 22, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · David Gumberg

wallet: Create separate function for wallet load

Splits out logic relevant only to existing wallets in
`CWallet::Create()` into `CWallet::LoadExisting()`

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 simple code cleanup: it takes the part of Bitcoin Core's wallet creation code that handles loading an already-existing wallet and moves it into a new, separate function called LoadExisting. The actual behavior and security checks are unchanged; only the internal organization of the code is different.

AI review queuedrefactor: Split out wallet argument loadingby David Gumberg · b15a94a6 · Jan 22, 2026 · 2 filesMessage 80 · StrongInformational 15Details
Commit message · David Gumberg

refactor: Split out wallet argument loading

This section is necessarily repetitive, makes CWallet::Create() easier
to read, and splits out functionality that will be useful when wallet
creation and loading are separated.

Review with `-color-moved=dimmed-zebra`

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a code cleanup change that moves wallet command-line argument parsing into a separate helper function. It does not change what arguments are accepted, how they are validated, or any wallet behavior. There is no security issue visible in the change.

AI review queuedrefactor: Wallet stats logging in its own functionby David Gumberg · bc690704 · Jan 22, 2026 · 2 filesMessage 77 · AdequateInformational 15Details
Commit message · David Gumberg

refactor: Wallet stats logging in its own function

This will avoid repetition when wallet creation and loading are
separated.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a simple code cleanup: it moves three existing wallet logging lines into a new helper function called LogStats(). There is no change to what is logged, no change to security behavior, and no bug fix.

AI review queuedtest: wallet: Split create and loadby David Gumberg · e12ff8ac · Jan 22, 2026 · 5 filesMessage 67 · AdequateInformational 15Details
Commit message · David Gumberg

test: wallet: Split create and load

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes Bitcoin Core's internal test helpers and benchmarks. It splits a single test function called TestLoadWallet into two separate helpers: TestCreateWallet (for making a new wallet) and TestLoadWallet (for opening an existing wallet). No production wallet code, network code, or consensus code is changed. There is no security issue here.

AI review queuedwallet: remove loading logic from CWallet::Createby David Gumberg · d8bec61b · Jan 22, 2026 · 2 filesMessage 45 · ThinInformational 12Details
Commit message · David Gumberg

wallet: remove loading logic from CWallet::Create

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 12/100

This commit is a code cleanup change in Bitcoin Core's wallet creation logic. It removes the ability to load an existing wallet from within the CWallet::Create function, making Create only handle brand-new wallets. Loading existing wallets is moved elsewhere. The change also updates a test to verify that a version message is logged when loading a wallet, not when creating one. There is no indication this fixes a security vulnerability.

AI review queuedwallet: Use CWallet::LoadExisting() for loading existing wallets.by David Gumberg · 70dbc79b · Jan 22, 2026 · 2 filesMessage 50 · ThinInformational 16Details
Commit message · David Gumberg

wallet: Use CWallet::LoadExisting() for loading existing wallets.

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

This commit changes three internal wallet-loading call sites in Bitcoin Core to use a dedicated CWallet::LoadExisting() method instead of the more general CWallet::Create(). The change is a code-quality and correctness refactor: it makes it explicit that these paths are loading an already-existing wallet rather than creating a new one. There is no direct evidence in the commit that this fixes a security vulnerability, and the diff does not show any new input validation, bounds checks, or cryptographic changes.

AI review queuedwallet: Remove redundant birth time updateby David Gumberg · a9d64cd4 · Jan 22, 2026 · 1 fileMessage 68 · AdequateInformational 12Details
Commit message · David Gumberg

wallet: Remove redundant birth time update

Checking every SPKM in `CWallet::Create()` is not necessary, since the
only way presently for an SPKM to get added to `m_spk_managers` (the
return value of `GetAllScriptPubKeyMans()`) is through
`AddScriptPubKeyMan()`, which already invokes `MaybeUpdateBirthTime()`.

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

This commit removes a small piece of code in Bitcoin Core's wallet startup that recalculated the wallet's 'birth time' (the earliest known key creation date) by scanning all script-pubkey managers. The author argues this recalculation is unnecessary because every path that adds a script-pubkey manager already calls the same birth-time update function. There is no indication in the commit that this fixes a security bug; it appears to be a code-cleanup/refactoring change.

AI review queuedwallet: Move argument parsing to before DB loadby David Gumberg · b4a49cc7 · Jan 22, 2026 · 1 fileMessage 80 · StrongLow 31Details
Commit message · David Gumberg

wallet: Move argument parsing to before DB load

`m_keypool_size` must be set before `CWallet::PopulateWalletFromDB()`,
in order to move parsing of `-keypool` into `CWallet::LoadWalletArgs`,
`LoadWalletArgs()` invocation in `CWallet::Create()` must be moved
before `PopulateWalletFromDB()` is called.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 31/100

This commit fixes the order in which a Bitcoin Core wallet reads startup settings. Previously, the `-keypool` setting (which controls how many spare Bitcoin addresses the wallet keeps ready) was read after the wallet had already loaded data from its database. The change moves all argument parsing, including `-keypool`, to happen before the database is loaded so the correct keypool size is available during wallet initialization. If the wrong size is used, the wallet might not generate or top up the expected number of addresses, which could affect backups and address availability.

AI review queuedwallet: Correctly log stats for encrypted messages.by David Gumberg · 27e021eb · Jan 22, 2026 · 1 fileMessage 81 · StrongInformational 21Details
Commit message · David Gumberg

wallet: Correctly log stats for encrypted messages.

Previously creating an encrypted wallet would result in the keypool size
incorrectly being reported as 0.

See: https://github.com/bitcoin/bitcoin/pull/32636#discussion_r2150021064

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 21/100

This commit fixes a minor wallet logging bug. When creating an encrypted wallet, the keypool size was incorrectly reported as 0 in the logs because statistics were logged before the encryption keys were generated. The fix moves the logging to after wallet creation is fully complete and also updates a user-facing status message from 'Loading wallet…' to 'Creating wallet…' for accuracy. There is no security vulnerability here—only a cosmetic/logging correction.

AI review queuedfuzz: Exclude too expensive inputs in descriptor_parse targetsby MarcoFalke · fab2f3df · Jan 22, 2026 · 4 filesMessage 83 · StrongInformational 13Details
Commit message · MarcoFalke

fuzz: Exclude too expensive inputs in descriptor_parse targets

Also, fixup iwyu warnings in the util module.

Also, fixup a typo.

The moved part can be reviewed with the git option:
--color-moved=dimmed-zebra

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 evidencesigning or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 13/100

This commit is a code-quality and fuzz-testing efficiency change. It refactors how Bitcoin Core's fuzz tests skip descriptor inputs that are too computationally expensive to process, combining several checks into one helper function and adding a new leaf-size check. It does not change production wallet or node behavior, and there is no indication it fixes a security vulnerability in live software.

AI review queuedtest: Rename wallet name in restore attempt in wallet_assumeutxoby Fabian Jahr · e1dc4afe · Jan 21, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · Fabian Jahr

test: Rename wallet name in restore attempt in wallet_assumeutxo

This prevents potential intermittend failures on windows when the wallet by the same name from the previous test case hasn't been cleaned up yet by it's process.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a tiny test-only change that renames a wallet used in a single functional test to avoid intermittent failures on Windows. It does not change any production code, network behavior, or wallet security logic.