BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

2900 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

254security candidates607second-pass queue2881AI analyses
204commits · 30 days
500commits · 60 days
1531commits · 180 days
2883commits · 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
937Strong · 80–100
1188Adequate · 60–79
687Thin · 40–59
88Opaque · 0–39
6security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Antoine Poinsot22422170
Ava Chow15750157064
MarcoFalke41021406074
Lőrinc17721177081
fanquake22719226057
Hennadii Stepanov20914208063
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Hodlinator66566076
Analysis record

Published AI watches

Last scanned 28 minutes ago

Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35928: doc: mention -DWITH_ZMQ=ON in macOS build guide

This is a one-line documentation update to the macOS build guide. It adds a note telling users to pass a specific CMake option if they want ZeroMQ notification support. There is no code change and no security impact.

8397e09eby merge-script+1−11 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35482: fuzz: exercise the transaction-handling path in process_message(s)

This commit only changes Bitcoin Core's internal fuzz testing code. It makes the fuzz tests exercise more of the transaction-handling code path by toggling Initial Block Download mode and resetting the mempool between test runs. There is n…

No production code modifiedNo consensus, validation, net_processing, or wallet logic changedOnly fuzz test harnesses and test utilities affected
f11dc617by merge-script+105−798 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35914: test, fuzz: Remove unused variables

This commit removes unused variables from Bitcoin Core's test and fuzzing code. It is a cleanup/refactoring change with no effect on the live network software or user funds. It does not fix or introduce any security vulnerability.

d36bf709by merge-script+1−138 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35896: refactor: Default uint256::operator==, add operator<=>

This commit is a routine code cleanup in Bitcoin Core. It switches the uint256 equality and comparison operators to use standard C++20 defaults, removes an old custom Compare() helper, and marks an internal assertion-failure function as ne…

ed2c59abby merge-script+99−245 files
No security note in commit
Moderate 62 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35872: rpc: avoid descriptor range counter overflow

This update fixes a counting bug in several Bitcoin Core RPC commands that scan descriptors. When a user requested a descriptor range ending at the maximum allowed value (2,147,483,647), the internal counter used a smaller integer type and…

Signed integer overflow in descriptor expansion loopCrash/undefined behavior on maximum-range descriptor scansAuthenticated RPC surface affected (scantxoutset, scanblocks, getdescriptoractivity, utxoupdatepsbt, descriptorprocesspsbt)
b388674aby Ava Chow+3−12 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35842: rpc: Properly make RPCResult::Type::ANY non-test-only

This is a small cleanup and documentation fix for Bitcoin Core's RPC help system. It removes a comment that incorrectly said a certain output type was 'for testing only' and makes the help text properly display those outputs. There is no d…

No memory safety, cryptography, consensus, or authorization changes observedChange is confined to RPC help/schema metadata generationComment-only/type-label change from 'for testing only' to general use
c36ffd87by merge-script+42−364 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35895: refactor: Enable clang-tidy rule to reject anon namespace in header

This is a code cleanup change that turns on a static-analysis rule to prevent a specific C++ coding pattern (anonymous namespaces in header files) and updates two headers to comply. It does not change how Bitcoin Core behaves at runtime an…

No security-relevant code changeNo memory safety, cryptography, consensus, or network changesTooling-only refactor (clang-tidy configuration)
c4fbd3c7by merge-script+9−123 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35630: test: Add importdescriptors rpc error test coverage

This commit only adds new test cases to Bitcoin Core's functional test suite. It does not change any production wallet, node, or RPC code. The tests verify that the importdescriptors RPC reports errors in the right order, rejects bad times…

465196d0by merge-script+77−11 file
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35180: coins: group private cache helpers

This change is purely a code cleanup: it moves two internal helper functions of a Bitcoin Core cache class into the private section of the class and removes a duplicate 'private:' label. There is no change to what the code does, no bug fix…

c940fd75by merge-script+13−141 file
No security note in commit
Low 29 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35582: rpc: reject null for optional parameters

This Bitcoin Core change tightens how three RPC commands (scantxoutset, scanblocks, deriveaddresses) handle the value null when it is passed for optional parameters. Previously, explicitly passing null could be treated differently from sim…

RPC parameter validation changeNull value handling changeAddition of explicit error checks for missing required contextual parameters
3db96eb5by merge-script+18−75 files
No security note in commit
Informational 15 AI analysisMessage 57 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Enable misc-definitions-in-headers

This commit is a code cleanup: it turns on a clang-tidy style check called 'misc-definitions-in-headers' and suppresses that check around a large inline implementation block in a benchmark header. There is no change to Bitcoin's runtime be…

fa93132dby MarcoFalke+3−02 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Enable clang-tidy rule to reject anon namespace in header

This commit only changes a linting configuration file for the project's code style checker. It enables a rule that prevents anonymous namespaces from being used in header files, which is a code-quality and build-hygiene practice. There is …

No security-relevant signals in the diff or commit message.Change is purely a static-analysis/linting configuration update.
fa5ca877by MarcoFalke+2−11 file
No security note in commit
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Use C++20 std::identity over IntIdentity

This commit is a straightforward code cleanup: it replaces a small custom helper named IntIdentity with the standard C++20 std::identity from the <functional> header. The behavior of the ConvertBits function is unchanged; only the implemen…

fafe5042by MarcoFalke+4−111 file
No security note in commit
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test the result order of a multiple import request is correct

This commit only adds a new automated test to Bitcoin Core. It checks that when a user asks the wallet to import multiple descriptors at once, the list of results comes back in the same order as the original request, including any error me…

3ac8b806by Pol Espinasa+40−01 file
No security note in commit
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test invalid or missing timestamp throws importdescriptors

This commit only adds new automated tests for the Bitcoin Core wallet's importdescriptors RPC. It checks that the command correctly rejects requests with a missing or invalid timestamp. No production wallet code is changed, so this cannot …

No changes to consensus, networking, wallet logic, or cryptographyOnly functional test code is modifiedAdded assertions are for expected error handling paths
e4732bf0by Pol Espinasa+28−11 file
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Remove unused #include in common/system

This is a minor code cleanup that removes one unused header file include and swaps another for a more specific one. It does not change any program behavior or fix any security issue.

fa7304f3by MarcoFalke+1−22 files
No security note in commit
Informational 15 AI analysisMessage 50 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

iwyu: Fix warnings in `src/consensus` and treat them as errors

This commit is a routine code cleanup: it adjusts which C++ header files are included in several consensus-related source files and turns on a stricter compiler hygiene check (Include What You Use, or IWYU) for the src/consensus directory.…

13b53f8bby Hennadii Stepanov+42−79 files
No security note in commit
Informational 15 AI analysisMessage 55 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

fuzz: don't connman.ReceiveMsgFrom oversized msg

This is a small fix to a Bitcoin Core fuzz test (an automated internal testing harness), not to the live network code. The fuzzer was sometimes creating fake P2P messages larger than the real protocol allows and passing them into a test he…

Test-only fuzz harness hardeningOversized message guard added before ReceiveMsgFrom() in fuzz targetNo change to production P2P message acceptance logic
bb19f1daby Greg Sanders+5−01 file
No security note in commit
Informational 15 AI analysisMessage 97 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: Temporarily remove riscv32 config from GHA matrix

This commit simply removes one failing test configuration (RISC-V 32-bit bare metal) from the project's GitHub Actions CI matrix because it was failing. It is a routine CI maintenance change with no security implications.

fa06ea42by MarcoFalke+0−61 file
No security note in commit
Low 47 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci: verify cross-build SDK archives

This change adds checksum verification to the build system's downloads of Apple, FreeBSD, NetBSD, and OpenBSD software development kits (SDKs). Before this patch, those SDK archives were downloaded at build time and extracted without confi…

Adds cryptographic digest verification for downloaded SDK archivesRemoves unchecked extraction of remote SDK archives in CIHardens CI supply chain for macOS/BSD cross-builds
873550beby Lőrinc+25−126 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

Security candidatetest: Fix a STRICTENC test in script_testsby billymcbip · 884978f3 · Jan 30, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · billymcbip

test: Fix a STRICTENC test in script_tests

Fix a test that isn't implemented as intended. The idea is to test execution order by providing a signature that would cause script failure when parsed. An empty signature does not cause script failure in CHECKMULTISIG. Use OP_1 for the second signature instead of OP_0.

95/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 15/100

This is a one-line fix to a Bitcoin Core unit test file. The test was not exercising what its author intended because an empty signature does not trigger the expected script failure in a CHECKMULTISIG operation. The change replaces an empty second signature with a non-empty one so the test actually checks the intended execution-order behavior. It does not change any production code, consensus rules, or network behavior.

Lower-prioritytest: Remove outdated comment in script_testsby billymcbip · 527e8ca7 · Jan 30, 2026 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · billymcbip

test: Remove outdated comment in script_tests

script_invalid.json no longer exists.

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

This commit removes a single outdated comment from a test data file. The comment referred to a file called script_invalid.json that no longer exists. There is no code change, no functional change, and no security relevance.

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.

Lower-priorityci: Print verbose build error message in test-each-commitby MarcoFalke · bbbb78a4 · Jan 30, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: Print verbose build error message in test-each-commit

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

This is a small change to a CI (continuous integration) helper script. It makes build failures easier to diagnose by automatically re-running the build with verbose output if the first build fails. There is no security issue here.

Lower-priorityci: [refactor] Allow overwriting check option in run helperby MarcoFalke · 2222dada · Jan 30, 2026 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · MarcoFalke

ci: [refactor] Allow overwriting check option in run helper

Also, use str(e) consistently in all run helpers.

This refactor does not change any behavior.

This can be reviewed by checking that all instances are exactly
identical code now:
$ git grep --function-context 'def run(cmd'

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

This is a tiny internal cleanup in Bitcoin Core's continuous integration (CI) scripts. It makes two helper functions behave identically and lets callers override a default option. It does not touch wallet, networking, consensus, or any user-facing code, and the commit message explicitly says it changes no behavior.

Lower-priorityiwyu: Document mappings for libc symbolsby Hennadii Stepanov · 9c839aa9 · Jan 30, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Hennadii Stepanov

iwyu: Document mappings for libc symbols

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit adds a comment and a reference link to a developer tooling file that maps C library symbols to their correct header files. It does not change any executable code, network behavior, or wallet logic. There is no security relevance.

Security candidateiwyu: Add temporary mapping to work around upstream bugby Hennadii Stepanov · 91824646 · Jan 30, 2026 · 3 filesMessage 30 · OpaqueInformational 15Details
Commit message · Hennadii Stepanov

iwyu: Add temporary mapping to work around upstream bug

30/100 · OpaqueMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body! Contains work-in-progress language! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a minor housekeeping change. It removes two unused '#include <iterator>' lines from source files and adds a temporary mapping for a third-party code-tidying tool (IWYU) to work around a known upstream bug. There is no change to Bitcoin's actual logic, networking, cryptography, or consensus behavior, and no security relevance.

Lower-priorityiwyu: Drop backported mappingby Hennadii Stepanov · 37de7d19 · Jan 30, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Hennadii Stepanov

iwyu: Drop backported mapping

See https://github.com/include-what-you-use/include-what-you-use/pull/1706.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit removes a small, outdated workaround from a developer-only tool configuration file. It has no effect on the Bitcoin Core software that users run, on network behavior, or on funds. It is purely a cleanup for the include-what-you-use (IWYU) static-analysis helper used during development.

Lower-priorityci: Always print low ccache hit rate noticeby MarcoFalke · fad2876e · Jan 29, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · MarcoFalke

ci: Always print low ccache hit rate notice

57/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
AI analysis · Informational 15/100

This is a minor continuous integration (CI) script change. It removes a condition so that a notice about low ccache (compiler cache) hit rates is printed both in CI and in local test runs, and updates the ccache command from 'ccache -s' to 'ccache --show-stats'. There is no security relevance.

Lower-priorityfix: uptime RPC returns 0 on first callby Lőrinc · e67a676d · Jan 29, 2026 · 2 filesMessage 100 · StrongInformational 18Details
Commit message · Lőrinc

fix: uptime RPC returns 0 on first call

The monotonic uptime fix (#34328) used a function-local static for `g_startup_time`, which was initialized on first `GetUptime()` call instead of app startup time.
This caused the first `uptime()` call to always return 0.

Move `g_startup_time` to namespace scope so it initializes at program start, ensuring the first call returns actual elapsed time. Note that we don't need to make it `static` anymore because it is just used in this single translation unit.

Test was updated to simulate some work before the first call.

Co-authored-by: Carlo Antinarella <carloantinarella@users.noreply.github.com>

100/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 18/100

This commit fixes a minor bug in the `uptime` RPC command. Previously, the very first call to `uptime` would always report 0 seconds because the program's start time was accidentally recorded at the moment of that first call, not at actual startup. The fix moves the startup timestamp to a global variable that is set when the program begins. This is a correctness fix with no security impact.

Lower-prioritycontrib: update macOS SDK to Xcode-26.1.1-17B100by fanquake · a89e1618 · Jan 29, 2026 · 5 filesMessage 45 · ThinInformational 15Details
Commit message · fanquake

contrib: update macOS SDK to Xcode-26.1.1-17B100

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply updates the version numbers and download hashes used to fetch Apple's macOS development toolkit (the SDK) when building Bitcoin Core for Mac computers. It does not change any Bitcoin protocol code, wallet logic, or network behavior. There is no indication in the commit that this fixes or introduces a security problem.

Lower-prioritydepends: use -Xclang -fno-cxx-modules in macOS cross buildby fanquake · 57a778ed · Jan 29, 2026 · 1 fileMessage 93 · StrongInformational 19Details
Commit message · fanquake

depends: use -Xclang -fno-cxx-modules in macOS cross build

Newer versions of the macOS SDK, have introduced code like:
```cpp
if defined(__has_feature) && __has_feature(modules)
define USE_CLANG_TYPES 1
else
define USE_CLANG_TYPES 0
endif

if USE_CLANG_TYPES
include <sys/_types/_ptrdiff_t.h>
include <sys/_types/_size_t.h>
include <sys/_types/_va_list.h>
include <sys/_types/_wchar_t.h>
endif
```

which is currently causing compile failures due to undeclared types,
which manifest when C++ modules are enabled. Note that the usage of
"modules" in LLVM is can be a bit ambiguous, see:
https://github.com/llvm/llvm-project/issues/55891.

For now, explcitly disable cxx modules using `-fno-cxx-modules`. This
resolves the include/compilation issues.

Related discussion:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116827
https://github.com/llvm/llvm-project/pull/150349
https://github.com/llvm/llvm-project/issues/57432

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

This is a build-system fix for compiling Bitcoin Core for macOS using newer Apple SDKs. It adds a compiler flag that turns off a Clang C++ feature called 'modules,' which was causing compile failures because the SDK uses that feature to decide whether to include some standard type definitions. There is no indication this is a security vulnerability or that it could be exploited by an attacker.

Lower-priorityvalidation: reuse same CCoinsViewCache for every ConnectBlock callby Andrew Toth · 44b4ee19 · Jan 29, 2026 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · Andrew Toth

validation: reuse same CCoinsViewCache for every ConnectBlock call

Add m_connect_block_view to ChainState's CoinsViews.
Call CreateResetGuard inside ConnectTip to ensure the view
is Reset after each block, avoiding repeated memory allocations.

Co-authored-by: l0rinc <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 15/100

This is a performance optimization for Bitcoin Core's block validation. It reuses a single temporary cache instead of creating and destroying a new one for every block. There is no security issue visible in the change; it is purely about reducing memory allocation overhead.

Lower-priorityrefactor: rename will_reuse_cache to reallocate_cacheby Andrew Toth · 3e0fd0e4 · Jan 29, 2026 · 5 filesMessage 85 · StrongInformational 15Details
Commit message · Andrew Toth

refactor: rename will_reuse_cache to reallocate_cache

More accurately reflects the purpose of the parameter, since
we will keep reusing the cache but don't want to reallocate it.

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

This commit is a simple rename of a function parameter from 'will_reuse_cache' to 'reallocate_cache' across five files. The actual behavior of the code does not change at all; only the name and related comments are updated to be clearer. There is no security impact.

Lower-prioritycoins: introduce CCoinsViewCache::ResetGuardby Andrew Toth · 8fb60432 · Jan 29, 2026 · 4 filesMessage 58 · ThinInformational 19Details
Commit message · Andrew Toth

coins: introduce CCoinsViewCache::ResetGuard

CCoinsViewCache::CreateResetGuard returns a guard that calls
Reset on the cache when the guard goes out of scope.
This RAII pattern ensures the cache is always properly reset
when it leaves current scope.

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

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 19/100

This commit adds a new helper class called ResetGuard to Bitcoin Core's coin cache. It is a safety tool that automatically resets a cache when a piece of code finishes, helping prevent accidental reuse of stale cache data. The change only touches internal code and tests; it does not fix a known bug or introduce a new feature users interact with. There is no indication this is a security patch.

Lower-prioritycoins: use hashBlock setter internally for CCoinsViewCache methodsby Andrew Toth · 041758f5 · Jan 29, 2026 · 1 fileMessage 65 · AdequateInformational 16Details
Commit message · Andrew Toth

coins: use hashBlock setter internally for CCoinsViewCache methods

Co-authored-by: l0rinc <pap.lorinc@gmail.com>

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 16/100

This is a small internal cleanup in Bitcoin Core's coin-cache code. It replaces two direct assignments to an internal 'hashBlock' field with calls to an existing setter method named SetBestBlock. By itself, this change does not fix a known bug or add a security boundary; it is a code-quality refactor that makes future maintenance easier and slightly reduces the chance of someone later bypassing the setter if it ever needs to enforce invariants.

Lower-prioritycoins: add Reset on CCoinsViewCacheby Andrew Toth · 8dd9200f · Jan 29, 2026 · 2 filesMessage 68 · AdequateInformational 12Details
Commit message · Andrew Toth

coins: add Reset on CCoinsViewCache

Add a Reset() method to CCoinsViewCache that clears cacheCoins,
cachedCoinsUsage, and hashBlock without flushing to the base view.

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

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 12/100

This commit adds a new Reset() method to an internal Bitcoin Core cache class. It simply clears in-memory data without saving anything to disk. There is no indication in the commit that this fixes a security bug or is being used to address an active vulnerability. It appears to be a routine code-cleanup or performance helper.

Lower-priorityci, iwyu: Fix warnings in `src/zmq` and treat them as errorsby Hennadii Stepanov · efcbf794 · Jan 29, 2026 · 8 filesMessage 50 · ThinInformational 15Details
Commit message · Hennadii Stepanov

ci, iwyu: Fix warnings in `src/zmq` and treat them as errors

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

This is a routine code cleanup that adjusts which C++ header files are included in the ZeroMQ (ZMQ) notification module. It also tells the project's automated style checker to treat missing or unnecessary includes in these files as errors going forward. There is no change to program logic, no bug fix, and no security-relevant behavior.

Lower-priorityfuzz: Use `__AFL_SHM_ID` for naming test directoriesby marcofleon · d3e681bc · Jan 29, 2026 · 1 fileMessage 83 · StrongInformational 19Details
Commit message · marcofleon

fuzz: Use `__AFL_SHM_ID` for naming test directories

Use the AFL++ shared memory ID environment variable to create
a deterministic datadir path. This prevents accumulation of stale
directories after a fuzz iteration crashes or times out. During
long fuzz campaigns, this accumulation has occasionally resulted
in running out of disk space.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 19/100

This change only affects how Bitcoin Core's internal fuzz tests create temporary working folders. When running under the AFL++ fuzzer, it now reuses a folder named after the fuzzer's shared-memory ID and deletes any leftover contents first, instead of creating a new random folder every time. This prevents old test folders from piling up and filling the disk during long fuzzing runs. It is a test-infrastructure cleanup, not a fix for a vulnerability in Bitcoin's network or wallet code.

Lower-priorityvalidation: follow-up nits for lock-free `IsInitialBlockDownload()`by Lőrinc · eeb4d281 · Jan 29, 2026 · 2 filesMessage 81 · StrongInformational 15Details
Commit message · Lőrinc

validation: follow-up nits for lock-free `IsInitialBlockDownload()`

Add `AssertLockHeld(cs_main)` to `ChainstateManager::UpdateIBDStatus()` given `EXCLUSIVE_LOCKS_REQUIRED(cs_main)`.
Fix outdated comment about constness of `ChainstateManager::IsInitialBlockDownload()` (build passes without it).
And since we're touching it, we might as well mark `ChainstateManager::IsInitialBlockDownload()` as `noexcept` now.

Follow-up to #34253.

Co-authored-by: Martin Zumsande <mzumsande@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 · Informational 15/100

This is a minor code cleanup following a previous change. It adds a safety check confirming a lock is already held, fixes an outdated comment, and marks a function as not throwing exceptions. There is no security issue here.

Lower-prioritytest: Turn ElapseSteady into SteadyClockContextby MarcoFalke · facb2aab · Jan 29, 2026 · 2 filesMessage 67 · AdequateInformational 15Details
Commit message · MarcoFalke

test: Turn ElapseSteady into SteadyClockContext

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

This is a small internal cleanup of Bitcoin Core's test-only code. It renames a helper struct used in fuzz tests and adds a destructor that resets the mock clock after each test. There is no change to the live Bitcoin network code, no bug fix for user funds or consensus, and no security relevance.

Lower-prioritytests: log node JSON-RPC errors during test setupby furszy · 6354b4fd · Jan 29, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · furszy

tests: log node JSON-RPC errors during test setup

Currently, if the node replies to any command with an error during
the test framework's setup(), we log the generic and not really useful
"Unexpected exception" from the BaseException catch, with no further
information.
This isn't helpful for diagnosing the issue. Fix it by explicitly handling
JSONRPCException and logging the response error message and http status
code.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only improves error messages in Bitcoin Core's internal test framework. When a test setup step fails because the node returns a JSON-RPC error, the test runner now logs the actual error details and HTTP status code instead of a generic 'Unexpected exception' message. There is no change to production Bitcoin node code, no security fix, and no vulnerability.

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.

Lower-priorityminiscript: correct and_v() propertiesby Antoine Poinsot · 4fab35cf · Jan 28, 2026 · 1 fileMessage 58 · ThinLow 28Details
Commit message · Antoine Poinsot

miniscript: correct and_v() properties

and_v() must never be 'd'. This is not a bug fix since this was
unreachable in valid Miniscripts: the first sub of an and_v() must be of
type V, which conflicts with (i.e. never has) property 'd'.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Low 28/100

This commit tightens the internal type-checking rules for a Bitcoin script feature called Miniscript. Specifically, it removes a property ('d', meaning 'dissatisfiable') from the logical 'and_v()' fragment because that property could never actually occur in valid Miniscripts. The commit message explicitly says this is not a bug fix because the old rule was unreachable in valid inputs, so there is no known way to exploit it.

Lower-priorityscript: remove unused SCRIPT_ERR_LASTby Antoine Poinsot · 51abf7d1 · Jan 28, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Antoine Poinsot

script: remove unused SCRIPT_ERR_LAST

It was introduced in ab9edbd6b6eb3efbca11f16fa467c3c0ef905708 and never
used since. It seems it might have been intended to be exposed as part
of a public library interface, which has since been superseded.

The only call site uses SCRIPT_ERR_ERROR_COUNT directly.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit removes an unused macro named SCRIPT_ERR_LAST from a Bitcoin Core header file. The macro was simply another name for an existing internal counter and was not referenced anywhere in the code. There is no functional change, no bug fix, and no security relevance.