BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

2886 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
214commits · 30 days
500commits · 60 days
1525commits · 180 days
2880commits · 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
924Strong · 80–100
1188Adequate · 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
MarcoFalke40921110074
Lőrinc1772183081
fanquake2271976057
Hennadii Stepanov2091455063
rkrux57944074
Sjors Provoost89825074
Sebastian Falbesoner33717073
David Gumberg55638072
Pieter Wuille95518066
Hodlinator66523076
Analysis record

Published AI watches

Last scanned 25 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 queuedtest: Test listdescs with priv works even with missing priv keysby Novo · 9c7e4771 · Jan 7, 2026 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · Novo

test: Test listdescs with priv works even with missing priv keys

Co-authored-by: rkrux <rkrux.connect@gmail.com>

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds a new test case to Bitcoin Core's functional test suite. It checks that the wallet's listdescriptors command, when asked to include private keys, still works correctly even when some descriptors were imported with only public keys (missing private keys). There is no change to production wallet code, no bug fix, and no security patch.

AI review queuedwalletrpc: reject listdes with priv key on w-only walletsby Novo · ed945a68 · Jan 7, 2026 · 2 filesMessage 50 · ThinLow 34Details
Commit message · Novo

walletrpc: reject listdes with priv key on w-only 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 · Low 34/100

This commit tightens a Bitcoin Core wallet RPC command so that watch-only wallets (which intentionally never store private keys) can no longer be asked to export private-key versions of their descriptors. Previously, the command would attempt to produce a private descriptor string and fail with a generic error; now it rejects the request up front with a clear message. It also replaces an error-handling path with an internal consistency check. The change is defensive and reduces the chance of misleading behavior or future bugs, but it does not appear to expose funds on its own.

AI review queuedwallettool: do not use fs::remove_all in createfromdump cleanupby Ava Chow · f78f6f1d · Jan 7, 2026 · 2 filesMessage 50 · ThinModerate 59Details
Commit message · Ava Chow

wallettool: do not use fs::remove_all in createfromdump cleanup

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 · Moderate 59/100

This patch fixes a cleanup routine in Bitcoin Core's wallet tool. Previously, when creating a wallet from a dump file failed, the tool used a broad 'delete everything in this directory' command. The change makes it delete only the specific files that belong to the wallet it just created, reducing the risk of accidentally wiping unrelated files or directories.

AI review queuedtest: coverage for migration failure when last sync is beyond prune heightby furszy · b7c34d08 · Jan 6, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · furszy

test: coverage for migration failure when last sync is beyond prune height

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

This commit only adds a new automated test to Bitcoin Core. It checks that when a user tries to migrate an old wallet on a pruned node, and the wallet's last known block has already been pruned (deleted) from the local copy of the blockchain, the migration fails with a clear error message instead of doing something unsafe. There is no change to production wallet or node code.

AI review queuedwallet: improve post-migration loggingby furszy · d70b159c · Jan 6, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · furszy

wallet: improve post-migration logging

Right now, after migration the last message users see is "migration completed",
but the migration isn't actually finished yet. We still need to load the new wallets
to ensure consistency, and if that fails, the migration will be rolled back. This
can be confusing for users.

This change logs the post-migration loading step and if a wallet fails to load and
the migration will be rolled back.

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

This commit only improves user-facing log messages during Bitcoin Core's wallet migration process. It adds a message saying the new wallets are being loaded after migration, and another message if a wallet fails to load and the migration must be rolled back. There is no security fix or behavior change beyond clearer logging.

AI review queuedwallet: migration, fix watch-only and solvables wallets namesby furszy · 82caa819 · Jan 6, 2026 · 2 filesMessage 85 · StrongInformational 23Details
Commit message · furszy

wallet: migration, fix watch-only and solvables wallets names

Because the default wallet has no name, the watch-only and solvables
wallets created during migration end up having no name either.

This fixes it by applying the same prefix name we use for the backup
file for an unnamed default wallet.

Before: watch-only wallet named "_watchonly"
After: watch-only wallet named "default_wallet_watchonly"

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

This commit fixes a naming bug during Bitcoin Core wallet migration. When a user migrates the default wallet (which has no name), the newly created watch-only and solvables wallets were being given names like '_watchonly' and '_solvables' instead of 'default_wallet_watchonly' and 'default_wallet_solvables'. The fix applies the same 'default_wallet' prefix already used for backup files. This is primarily a correctness and usability fix, not a security vulnerability, though the resulting name collision could theoretically cause migration failures or confusion.

AI review queuedtest: add coverage for unnamed wallet migration failureby furszy · 36093bde · Jan 6, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · furszy

test: add coverage for unnamed wallet migration failure

Verifies that a failed migration of the unnamed (default) wallet
does not erase the main /wallets/ directory, and also that the
backup file exists.

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 commit only adds a new automated test to Bitcoin Core. It does not change any production wallet code. The test checks that if migrating the default (unnamed) wallet fails, the main wallets directory is not deleted, a backup file is created, and the original wallet is restored. It is a regression test for a previously fixed bug, not a security fix itself.

AI review queuedtest: restorewallet, coverage for existing dirs, unnamed wallet and prune failureby furszy · f011e0f0 · Jan 6, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · furszy

test: restorewallet, coverage for existing dirs, unnamed wallet and prune failure

The first test verifies that restoring into an existing empty directory
or a directory with no .dat db files succeeds, while restoring into a
dir with a .dat file fails.

The second test covers restoring into the default unnamed wallet
(wallet.dat), which also implicitly exercises the recovery path used
after a failed migration.

The third test covers failure during restore on a prune node. When
the wallet last sync was beyond the pruning height.

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 commit only adds new automated tests for the wallet restore feature in Bitcoin Core. It does not change any production wallet code. The tests verify that restoring a wallet backup behaves correctly in edge cases: restoring into an empty directory, a directory with unrelated files, a directory that already contains a wallet database file, the default unnamed wallet file, and a pruned node where the backup is too old. Because no actual wallet logic is modified, this commit does not introduce or fix a live security issue on its own.

AI review queuedwallet: fix unnamed wallet migration failureby furszy · f4c7e28e · Jan 6, 2026 · 2 filesMessage 88 · StrongModerate 64Details
Commit message · furszy

wallet: fix unnamed wallet migration failure

When migrating any legacy unnamed wallet, a failed migration would
cause the cleanup logic to remove its parent directory. Since this
type of legacy wallet lives directly in the main '/wallets/' folder,
this resulted in unintentionally erasing all wallets, including the
backup file.

To be fully safe, we will no longer call `fs::remove_all`. Instead,
we only erase the individual db files we have created, leaving
everything else intact. The created wallets parent directories are
erased only if they are empty.
As part of this last change, `RestoreWallet` was modified to allow
an existing directory as the destination, since we no longer remove
the original wallet directory (we only remove the files we created
inside it). This also fixes the restore of top-level default wallets
during failures, which were failing due to the directory existence
check that always returns true for the /wallets/ directory.

This bug started after:
https://github.com/bitcoin/bitcoin/commit/f6ee59b6e2995a3916fb4f0d4cbe15ece2054494
Previously, the `fs::copy_file` call was failing for top-level wallets,
which prevented the `fs::remove_all` call from being reached.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Moderate 64/100

This commit fixes a bug in Bitcoin Core's wallet migration feature. When a user tried to migrate an old-style unnamed wallet and the migration failed, the cleanup code accidentally deleted the entire /wallets/ directory, wiping out all wallets and the backup file. The fix changes the cleanup to only remove specific database files created during migration, and only remove newly created empty directories. It also adjusts wallet restore to allow restoring into an existing directory as long as no database file would be overwritten.

AI review queuedwallet: RestoreWallet failure, erase only what was createdby furszy · 4ed0693a · Jan 6, 2026 · 1 fileMessage 73 · AdequateLow 34Details
Commit message · furszy

wallet: RestoreWallet failure, erase only what was created

Track what RestoreWallet creates so only those files and directories
are removed during a failure and nothing else. Preexisting paths
must be left untouched.

Note:
Using fs::remove_all() instead of fs::remove() in RestoreWallet does
not cause any problems currently, but the change is necessary for the
next commit which extends RestoreWallet to work with existing directories,
which may contain files that must not be deleted.

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 · Low 34/100

This change fixes a cleanup bug in Bitcoin Core's wallet restore feature. Previously, if restoring a wallet failed part-way through, the code would delete the entire wallet directory using a broad 'remove everything' command. The patch makes the function remember exactly which files and folders it created, and only delete those specific items on failure. Right now this doesn't cause data loss, but it is needed to safely support a follow-up change where restore may reuse an existing directory that could contain other important files.

AI review queueddoc: p2p: replace last remaining "command" terminology with "message type"by Sebastian Falbesoner · 5b7bf47f · Jan 5, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Sebastian Falbesoner

doc: p2p: replace last remaining "command" terminology with "message type"

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

This commit only renames the word 'command' to 'message type' in comments and a debug log string. It is a documentation cleanup with no functional code changes and no security impact.

AI review queueddoc: update copyright yearby fanquake · b23b9013 · Dec 29, 2025 · 3 filesMessage 35 · OpaqueInformational 15Details
Commit message · fanquake

doc: update copyright year

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 only updates the copyright year from 2025 to 2026 in three documentation/legal files. It does not change any executable code, build logic, or network behavior, and has no security relevance.

AI review queuedtest: Enable ruff E713 lintby MarcoFalke · fab300b3 · Dec 26, 2025 · 10 filesMessage 67 · AdequateInformational 15Details
Commit message · MarcoFalke

test: Enable ruff E713 lint

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 turns on a Python style lint rule (E713) that prefers 'not in' over 'not ... in'. It updates test scripts and helper tools to match the style, with no changes to the Bitcoin Core software that users run. There is no security issue here.

AI review queuedscripted-diff: refactor: wallet: Delete IsCryptedby David Gumberg · 11ce5cf7 · Dec 24, 2025 · 7 filesMessage 78 · AdequateInformational 15Details
Commit message · David Gumberg

scripted-diff: refactor: wallet: Delete IsCrypted

This function is a duplicate of HasEncryptionKeys().

-BEGIN VERIFY SCRIPT-
sed -i '/bool IsCrypted() const;/d' src/wallet/wallet.h
sed -i '/^bool CWallet::IsCrypted() const$/,/^}$/{/^}$/N;d;}' src/wallet/wallet.cpp
sed -i --regexp-extended 's/IsCrypted\(\)/HasEncryptionKeys()/g' $(git ls-files '*.cpp' '*.h')
-END VERIFY SCRIPT-

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 is a simple code cleanup: it removes a duplicate function named IsCrypted() and replaces every use of it with an already-existing identical function named HasEncryptionKeys(). There is no change in behavior, no bug fix, and no security issue introduced or fixed.

AI review queuedvalidation: pre-reserve leaves to prevent reallocs with odd vtx countby Lőrinc · 3dd815f0 · Dec 23, 2025 · 3 filesMessage 93 · StrongInformational 20Details
Commit message · Lőrinc

validation: pre-reserve leaves to prevent reallocs with odd vtx count

`ComputeMerkleRoot` duplicates the last hash when the input size is odd. If the caller provides a `std::vector` whose capacity equals its size, that extra `push_back` forces a reallocation, doubling its capacity (allocating 3x the necessary memory).

This affects roughly half of the created blocks (those with odd transaction counts), causing unnecessary memory fragmentation during every block validation.

Fix this by pre-reserving the vector capacity to account for the odd-count duplication. The expression `(size + 1) & ~1ULL` adds 1 to the size and clears the last bit, effectively rounding up to the next even number. This syntax produces optimal assembly across x86/ARM and 32/64-bit platforms for gcc/clang, see https://godbolt.org/z/xzscoq7nv.

Also switch from `resize` to `reserve` + `push_back` to eliminate the default construction of `uint256` objects that are immediately overwritten.

> ./build/bin/bench_bitcoin -filter='MerkleRoot.*' -min-time=1000

| ns/leaf | leaf/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 43.73 | 22,867,350.51 | 0.0% | 1.10 | `MerkleRoot`
| 44.17 | 22,640,349.14 | 0.0% | 1.10 | `MerkleRootWithMutation`

Massif memory measurements after show 0.8 MB peak memory usage

KB
801.4^ #
| #
| #
| #
| #
| #
| #
| # :::::@:::::@:
| #:::@@@::@:::::::::::::::@::@:@:::@@:::::::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
| #:::@ @: @:::::::::::::::@::@:@:::@ :::: ::::@::::::@:::::@::::@:::::@:
0 +----------------------------------------------------------------------->s
0 227.5

and the stacks don't show reallocs anymore:
96.37% (790,809B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->35.10% (288,064B) 0x2234AF: allocate (new_allocator.h:151)
| ->35.10% (288,064B) 0x2234AF: allocate (allocator.h:203)
| ->35.10% (288,064B) 0x2234AF: allocate (alloc_traits.h:614)
| ->35.10% (288,064B) 0x2234AF: _M_allocate (stl_vector.h:387)
| ->35.10% (288,064B) 0x2234AF: reserve (vector.tcc:79)
| ->35.10% (288,064B) 0x2234AF: ToMerkleLeaves<std::vector<uint256>, MerkleRoot(ankerl::nanobench::Bench&)::<lambda()>::<lambda(bool, const auto:46&)> > (merkle.h:19)
| ->35.10% (288,064B) 0x2234AF: operator() (merkle_root.cpp:25)
| ->35.10% (288,064B) 0x2234AF: ankerl::nanobench::Bench& ankerl::nanobench::Bench::run<MerkleRoot(ankerl::nanobench::Bench&)::{lambda()

Co-authored-by: optout21 <13562139+optout21@users.noreply.github.com>
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100

This commit is a performance and memory-efficiency improvement, not a security fix. It changes how Bitcoin Core builds the list of transaction hashes before computing a Merkle root. Previously, when a block contained an odd number of transactions, the internal duplicate-hash step could force an extra memory reallocation, wasting memory and causing fragmentation. The patch pre-allocates exactly the needed capacity and avoids default-constructing unused objects. There is no vulnerability or exploit here.

AI review queuedrpc: [wallet] Use unsigned type for tx version in sendallby MarcoFalke · fafbc70d · Dec 22, 2025 · 1 fileMessage 50 · ThinInformational 18Details
Commit message · MarcoFalke

rpc: [wallet] Use unsigned type for tx version in sendall

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

This is a tiny type-cleanup in the wallet's 'sendall' RPC command. It changes how the transaction version number is read from a signed integer to an unsigned integer matching the field's actual type. There is no direct evidence in the commit that this fixes an exploitable bug, but using the wrong signed type could in principle allow a user to pass a negative value that gets misinterpreted as a very large positive version number, which might then be rejected or handled unexpectedly.

AI review queuedkernel: Remove some unnecessary non-kernel includesby TheCharlatan · d69a582e · Dec 21, 2025 · 8 filesMessage 73 · AdequateInformational 15Details
Commit message · TheCharlatan

kernel: Remove some unnecessary non-kernel includes

Specifically gets rid of batchpriority, chainparams, script/sign.h and
system includes.

Also take the opportunity of cleaning up the headers for the effected
files and adding them to the iwyu-enforced set.

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

This is a routine code cleanup commit for the Bitcoin Core project. It removes unused or unnecessary header file includes from several source files related to the 'kernel' module and adds those files to an automated check that enforces correct include usage. There is no functional change to the program's behavior and no security issue is present.

AI review queuedcontrib: remove copyright_header.pyby fanquake · ba6315d2 · Dec 19, 2025 · 2 filesMessage 35 · OpaqueInformational 15Details
Commit message · fanquake

contrib: remove copyright_header.py

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 a helper script used to manage copyright headers in source files, along with its documentation. It does not change any part of the Bitcoin Core software that handles transactions, networking, wallets, or consensus rules. There is no security issue here.

AI review queuedrefactor: [rpc] Remove confusing and brittle integral castsby MarcoFalke · fa66e2d0 · Dec 19, 2025 · 9 filesMessage 62 · AdequateInformational 19Details
Commit message · MarcoFalke

refactor: [rpc] Remove confusing and brittle integral casts

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

This commit is a code cleanup in Bitcoin Core's RPC (remote procedure call) response formatting. It removes many old-style C-style casts like (int64_t) and replaces them with either no cast or a safer static_cast. The change is described by the authors as a refactor to make the code less confusing and brittle. There is no direct evidence in the commit or supplied references that this fixes an active security vulnerability.

AI review queuedrpc: [mempool] Remove erroneous Univalue integral castsby MarcoFalke · fab1f4b8 · Dec 19, 2025 · 2 filesMessage 50 · ThinLow 37Details
Commit message · MarcoFalke

rpc: [mempool] Remove erroneous Univalue integral casts

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 · Low 37/100

This commit fixes a bug in Bitcoin Core's mempool RPC output where fee values were incorrectly narrowed to 32-bit integers before being displayed. For very large fee bumps (over about 86 bitcoins), this cast could corrupt the reported 'chunkfee' and 'fees.chunk' values, making them look much smaller or even negative. The fix removes the unnecessary casts and adds a test for large fee deltas. It is a correctness bug in information shown to users and miners, not a direct theft-of-funds vulnerability.

AI review queuedrefactor: enable `readability-container-contains` clang-tidy ruleby Lőrinc · 1e94e562 · Dec 18, 2025 · 5 filesMessage 97 · StrongInformational 15Details
Commit message · Lőrinc

refactor: enable `readability-container-contains` clang-tidy rule

Replace the last few instances of `.count() != 0` and `.count() == 0` and `.count()` patterns with the more expressive C++20 `.contains()` method:

* `std::set<std::string>` in `getblocktemplate` RPC;
* `std::map<std::string, ...>` in `transaction_tests`;
* other bare `std::unordered_set` and `std::map` count calls.

With no remaining violations, enable the `readability-container-contains`
clang-tidy check to prevent future regressions.

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 commit is a code cleanup that replaces old-style container lookups like `.count()` with the newer, clearer `.contains()` method introduced in C++20. It also turns on a linting rule to keep future code consistent. There are no functional changes and no security impact.

AI review queuedclusterlin: ReadLinearization for non-topological (tests)by Pieter Wuille · da48ed9f · Dec 18, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Pieter Wuille

clusterlin: ReadLinearization for non-topological (tests)

Rather than using an ad-hoc no-dependency copy of the graph when a potentially
non-topological linearization is needed in the clusterlin fuzz test, add this
directly as a feature in ReadLinearization().

This is preparation for a later commit where another use for such a function
is added.

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

This is a small internal cleanup of Bitcoin Core's fuzz testing code. It refactors how test inputs are converted into arbitrary orderings of transactions, with no change to production consensus or networking code. There is no security issue visible in the commit.

AI review queuedFix `ChainstateManager::AddChainstate()` assertion crashby stringintech · 2bc32656 · Dec 18, 2025 · 1 fileMessage 65 · AdequateLow 31Details
Commit message · stringintech

Fix `ChainstateManager::AddChainstate()` assertion crash

Check mempool exists before accessing size when prev_chainstate doesn't have initialized mempool.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
second-pass: broader security terminology
AI analysis · Low 31/100

This is a one-line fix in Bitcoin Core that prevents a program crash (assertion failure) when adding a new chainstate. The crash could occur if the previous chainstate did not have a memory pool (mempool) initialized. The change simply checks whether the mempool exists before checking its size, avoiding an invalid memory access. It is a defensive hardening fix rather than a user-triggerable exploit path under normal operation.

AI review queueddepends: capnp 1.3.0by fanquake · 719158db · Dec 18, 2025 · 1 fileMessage 38 · OpaqueInformational 11Details
Commit message · fanquake

depends: capnp 1.3.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 11/100

This commit updates the version of the Cap'n Proto library used in Bitcoin Core's build system from 1.2.0 to 1.3.0, along with its corresponding checksum. It is a routine dependency bump with no direct code changes to Bitcoin Core itself. There is no explicit security claim in the commit, and no verified references were provided to indicate this fixes a known vulnerability.

AI review queuedUpdate ci.ymlby Woolfgm · cd98caea · Dec 17, 2025 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Woolfgm

Update ci.yml

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit simply bumps the GitHub Actions 'checkout' step from version 5 to version 6 in the project's continuous integration (CI) workflow file. It does not change any Bitcoin Core source code, consensus rules, wallet logic, or network behavior. There is no indication of a security fix or vulnerability.