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
206commits · 30 days
502commits · 60 days
1535commits · 180 days
2884commits · 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.

Lower-prioritydoc: Add initial asmap data documentationby Fabian Jahr · 24699fec · Feb 3, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Fabian Jahr

doc: Add initial asmap data documentation

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only adds documentation. It explains what ASMap data is, how it is sourced and verified, and adds a checklist item to the release process reminding developers to update the embedded ASMap file before a release. No code, configuration, or data files were changed.

AI review queuedci: Use without embedded asmap build option in one ci jobby Fabian Jahr · bab085d2 · Feb 3, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · Fabian Jahr

ci: Use without embedded asmap build option in one ci job

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 changes one Bitcoin Core continuous integration (CI) test job to compile the software with the embedded asmap feature turned off. It does not change any production code, user-facing behavior, or network logic. It is purely a build/test configuration tweak to ensure that building without embedded asmap still works in CI.

Lower-priorityinit, net: Implement usage of binary-embedded asmap databy Fabian Jahr · 6244212a · Feb 3, 2026 · 2 filesMessage 50 · ThinInformational 19Details
Commit message · Fabian Jahr

init, net: Implement usage of binary-embedded asmap data

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

This commit adds an optional feature that lets Bitcoin Core ship its IP-to-ASN mapping data built into the program binary, so users can enable it with a simple `-asmap` flag instead of downloading and pointing to a separate file. It is a feature addition, not a fix for an active security flaw. The change could have minor security implications if the embedded data were malformed or tampered with, but the code validates the data before use and fails startup if validation fails.

Lower-prioritybuild: Generate ip_asn.dat.h during build processby Fabian Jahr · 6202b50f · Feb 3, 2026 · 6 filesMessage 72 · AdequateInformational 15Details
Commit message · Fabian Jahr

build: Generate ip_asn.dat.h during build process

This can be disabled with -DWITH_EMBEDDED_ASMAP=OFF.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a routine build-system change. It makes Bitcoin Core automatically include a small network-mapping data file (ASMap) into the compiled binary by default, while adding an option to turn that embedding off. There is no indication this fixes or introduces a security vulnerability.

Lower-prioritybuild: Add embedded asmap databy Fabian Jahr · 634cd60d · Feb 3, 2026 · 1 fileMessage 88 · StrongInformational 15Details
Commit message · Fabian Jahr

build: Add embedded asmap data

The data embedded is from the latest ASMap file from the asmap-data
repository: https://github.com/asmap/asmap-data/blob/main/1755187200_asmap.dat

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit adds a new binary data file containing an internet routing map (ASMap data) used by Bitcoin Core to group IP addresses by their network owner. It is a build/data-only change with no code modifications. There is no indication of a security vulnerability, bug fix, or malicious content in the commit itself.

Lower-priorityci: Drop valgrind fuzz from GHA matrixby MarcoFalke · faa4ab11 · Feb 3, 2026 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: Drop valgrind fuzz from GHA matrix

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
fuzzing or regression evidencedocumentation-only discount
AI analysis · Informational 15/100

This commit simply removes one automated testing job from Bitcoin Core's GitHub Actions continuous integration setup. It does not change any Bitcoin node, wallet, or network code. There is no security vulnerability introduced or fixed here.

Security candidatebench: simplify script verification benchmark, generalize signingby Sebastian Falbesoner · dd93362a · Feb 3, 2026 · 1 fileMessage 88 · StrongInformational 15Details
Commit message · Sebastian Falbesoner

bench: simplify script verification benchmark, generalize signing

Simplify the benchmark with the following changes:
- Set the deterministic private key using uint256::ONE,
put it in a `FlatSigningProvider` instance for easier signing
- Use `GetScriptForDestination` for creating the output script
- Use `SignTransaction` to sign, instead of doing it manually
(also removes the need to caclulate the public key hash manually)
- Pass standard script verification flags instead of combining them manually

These steps, in particular the generalized signing, prepare the
benchmarking extension for a different script type (P2TR key-path) in
the next commit.

88/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning boundarydefensive validation
AI analysis · Informational 15/100

This commit is a code cleanup inside a performance benchmark file. It changes how a test script creates a fake Bitcoin transaction and signature for timing purposes only. There is no change to the live Bitcoin network code, wallet handling, or consensus rules, and nothing in the commit suggests a security fix or vulnerability.

Lower-priorityfees: make flushes log debug onlyby ismaelsadeeq · 02b5f607 · Feb 3, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · ismaelsadeeq

fees: make flushes log debug only

- Also log the full file path of fee_estimates.dat consistently.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
AI analysis · Informational 15/100

This commit is a minor logging cleanup. It changes one routine status message from a default 'info' log to a less-visible 'debug' log, and makes the log message show the full file path instead of just the filename. There is no security issue here.

Lower-priorityrefactor: Use aliasing shared_ptr in Sock::Waitby MarcoFalke · faa016af · Feb 3, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · MarcoFalke

refactor: Use aliasing shared_ptr in Sock::Wait

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 small internal code cleanup in Bitcoin Core's socket helper class. It changes how a temporary shared pointer is created so that it refers to an existing socket object without taking ownership of it. There is no user-facing behavior change and no security fix.

Lower-priorityci: Remove unused workaround after leveldb subtree bumpby MarcoFalke · fad7d86d · Feb 3, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: Remove unused workaround after leveldb subtree bump

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

This commit removes a temporary workaround from Bitcoin Core's continuous integration (CI) test script. The workaround previously patched LevelDB source code during CI runs to avoid reading from uninitialized memory. The removal is cleanup after a LevelDB update made the workaround unnecessary. It is not a security fix and does not change any production code.

Lower-prioritySquashed 'src/leveldb/' changes from cad64b151d..ab6c84e6f3by MarcoFalke · 2f2952c5 · Feb 3, 2026 · 1 fileMessage 93 · StrongLow 32Details
Commit message · MarcoFalke

Squashed 'src/leveldb/' changes from cad64b151d..ab6c84e6f3

ab6c84e6f3 Merge bitcoin-core/leveldb-subtree#58: Initialize file_size to 0 to avoid UB
ad9b1c9893 Initialize file_size to 0 to avoid UB

git-subtree-dir: src/leveldb
git-subtree-split: ab6c84e6f38fae0279e30305a182f9b4674e2ecd

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

This commit pulls in a small LevelDB fix that initializes a file-size variable to zero before use. Without the fix, the variable could contain leftover/unpredictable data, which in C++ is called 'undefined behavior.' In practical terms this is most likely a stability/reliability fix rather than an exploitable Bitcoin security bug, because the value is later overwritten during normal database operations.

Lower-priorityci: show more verbose ccache statsby will · 7528d187 · Feb 3, 2026 · 1 fileMessage 57 · ThinInformational 15Details
Commit message · will

ci: show more verbose ccache stats

...and inline function used only once

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 internal change to Bitcoin Core's continuous integration (CI) shell script. It removes a one-line helper variable and directly runs a ccache version/statistics command, adding the --verbose flag to the statistics output. There is no user-facing change, no wallet or network code is touched, and no security issue is present.

Lower-priorityminiscript: Use a reference to key_exp_index in KeyParserby Ava Chow · b12281bd · Feb 2, 2026 · 1 fileMessage 65 · AdequateLow 47Details
Commit message · Ava Chow

miniscript: Use a reference to key_exp_index in KeyParser

For key_exp_index to count correctly for miniscript expressions,
KeyParser should hold a reference to it.

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

This change fixes how Bitcoin Core counts key expressions when parsing Miniscript descriptors. Previously, the parser kept a private copy of a counter (m_offset), so updates inside the parser did not propagate back to the caller. By switching to a shared reference (m_expr_index), the caller's counter stays correct across nested or repeated Miniscript parsing. A wrong counter could lead to incorrect descriptor metadata, which in wallet software might cause addresses, derivation paths, or key identifiers to be mis-indexed. There is no direct remote exploit shown in the diff, but the bug could affect wallet correctness and user funds if a descriptor relying on the counter is used.

Lower-priorityminiscript: Using Func and Expr when parsing keys, hashes, and locktimesby Ava Chow · ec0f47b1 · Feb 2, 2026 · 5 filesMessage 73 · AdequateModerate 59Details
Commit message · Ava Chow

miniscript: Using Func and Expr when parsing keys, hashes, and locktimes

Since pk(), pk_k(), pkh(), pk_h(), sha256(), ripemd160(), hash256(),
hash160(), after(), and older() all are single argument expressions that
are parsed immediately, we can use the Expr and Func parsing functions
to determine what the arguments of these expressions are, rather than
searching for the next closing parentheses.

This fixes an issue when pk(), pk_k(), pkh(), and pk_h() include a
musig() expression as Expr properly handles nested expressions.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Moderate 59/100

This change fixes how Bitcoin Core reads certain pieces of text inside Miniscript and descriptor expressions. Previously, the parser looked for the next closing parenthesis to decide where an argument ended. That simple scan broke when the argument itself contained nested parentheses, such as a musig(...) key expression inside pk(...). The new code uses proper expression-parsing helpers that understand matching parentheses, so nested structures are handled correctly. The commit message explicitly calls this a fix for parsing musig() inside pk(), pkh(), pk_k(), and pk_h().

Lower-prioritydescriptors: Increment key_exp_index in ParsePubkey(Inner)by Ava Chow · 6fd780d4 · Feb 2, 2026 · 1 fileMessage 65 · AdequateInformational 12Details
Commit message · Ava Chow

descriptors: Increment key_exp_index in ParsePubkey(Inner)

Simplifies the callsites for incrementing key_exp_index

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

This is a small internal code cleanup in Bitcoin Core's descriptor parser. It moves the counting of key expressions (used to label parsed public keys) into a helper function so callers don't have to do it manually. There is no visible change in behavior for users, no bug fix, and no security-relevant change.

AI review queuedtest: Test for musig() in various miniscript expressionsby Ava Chow · 4b53cbd6 · Feb 2, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Ava Chow

test: Test for musig() in various miniscript expressions

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 new test cases for an existing Bitcoin wallet feature (MuSig multi-signature support inside miniscript expressions). It does not change production wallet logic, consensus rules, or network behavior. The changes are confined to a single functional test file and expand coverage for different miniscript patterns such as pkh and pk_h.

AI review queuedtest: Test that key expression indexes match key countby Ava Chow · ce4c66eb · Feb 2, 2026 · 5 filesMessage 72 · AdequateInformational 18Details
Commit message · Ava Chow

test: Test that key expression indexes match key count

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

This commit adds new internal test-only checks to make sure Bitcoin Core's descriptor parser correctly counts key expressions. It does not change user-facing behavior or fix a known live bug; it is a regression test and small helper-code addition to verify an invariant (every key has a unique index and the count matches).

Lower-prioritysignals: Temporarily add boost headers to bitcoind and bitcoin-node buildsby Cory Fields · 2150153f · Feb 2, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Cory Fields

signals: Temporarily add boost headers to bitcoind and bitcoin-node builds

The current code forward-declares boost::signals2, which avoids the need for
these includes.

An upcoming commit will (temporarily) include boost headers directly instead.

A follow-up commit will then replace boost with an internal signals
implementation, which will allow this commit to be reverted.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only changes build instructions to add Boost header files as a dependency for two Bitcoin Core programs. It does not change any program logic, fix a bug, or alter how the software behaves at runtime. There is no security issue here.

AI review queuedsignals: Use a lambda to avoid connecting a signal to another signalby Cory Fields · fd5e9d99 · Feb 2, 2026 · 1 fileMessage 93 · StrongInformational 17Details
Commit message · Cory Fields

signals: Use a lambda to avoid connecting a signal to another signal

This is undocumented and unspecified Boost behavior that happens to work as
intended for now, but could break at any point in the future.

See the boost discussion here: https://groups.google.com/g/boost-list/c/So4i8JXneJ0

It also complicates a potential replacement of Boost::signals2.

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

This is a small code-quality cleanup in Bitcoin Core's wallet code. It changes how an internal notification signal is wired up so that it no longer relies on an obscure, undocumented feature of the Boost signals library. The change prevents a future risk that a Boost update could silently break wallet address notifications, but there is no known current bug or security vulnerability being exploited.

Lower-priorityconsensus/doc: explain `GetValueOut()` preconditionby Lőrinc · 8c033183 · Feb 2, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Lőrinc

consensus/doc: explain `GetValueOut()` precondition

`Consensus::CheckTxInputs` calls `tx.GetValueOut()` and assumes output-range checks already ran.
Document the mempool and block validation call paths where this is guaranteed.

Co-authored-by: Antoine Poinsot <darosior@protonmail.com>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit only adds a code comment explaining why a particular function call is safe. It does not change any program logic, fix a bug, or alter validation behavior. There is no security issue here.

Lower-priorityconsensus/doc: explain unreachable `bad-txns-fee-outofrange` checkby Lőrinc · 82ef92c8 · Feb 2, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Lőrinc

consensus/doc: explain unreachable `bad-txns-fee-outofrange` check

After the previous conditions were validated, document why `bad-txns-fee-outofrange` is unreachable once `nValueIn` and `value_out` are `MoneyRange` and `nValueIn >= value_out`.

Although unreachable, keep the check itself in place (instead of removing) as it's part of consensus-critical code; the comment serves as a proof for future refactors.

Inspired by b-c-cov coverage reports:
* "bad-txns-fee-outofrange" - https://maflcko.github.io/b-c-cov/test_bitcoin.coverage/src/consensus/tx_verify.cpp.gcov.html#L200

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
defensive validation
AI analysis · Informational 15/100

This commit only adds explanatory comments to a piece of Bitcoin Core's transaction-validation code. It does not change any behavior, fix a bug, or alter consensus rules. The comment documents why a particular error check is mathematically unreachable under the already-enforced preconditions, while leaving the check in place for safety.

Lower-priorityrefactor: Use SpanReader over DataStreamby MarcoFalke · fad3eb39 · Feb 2, 2026 · 1 fileMessage 92 · StrongInformational 12Details
Commit message · MarcoFalke

refactor: Use SpanReader over DataStream

The mutable temporary strValue can be re-used to apply the obfuscation,
which allows to avoid a redundant copy of the value.

92/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 12/100

This is a small internal code cleanup in Bitcoin Core's database wrapper. It replaces one temporary data-reading helper (DataStream) with another (SpanReader) and reuses an existing mutable buffer to avoid copying data during de-obfuscation. There is no visible security bug or behavior change in the diff.

Lower-priorityrefactor: [qt] Use SpanReader to avoid two vector copiesby MarcoFalke · fa06e267 · Feb 2, 2026 · 1 fileMessage 74 · AdequateInformational 15Details
Commit message · MarcoFalke

refactor: [qt] Use SpanReader to avoid two vector copies

74/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Explains rationale or failure mode! No meaningful explanatory body
AI analysis · Informational 15/100

This is a small code cleanup in Bitcoin Core's Qt wallet GUI. It replaces a two-step copy of a string into a byte vector with a direct reader that views the string's bytes without copying. There is no security issue visible in the change.

Lower-priorityrefactor: Avoid UB in SpanReader::ignoreby MarcoFalke · fabd4d2e · Feb 2, 2026 · 1 fileMessage 92 · StrongInformational 23Details
Commit message · MarcoFalke

refactor: Avoid UB in SpanReader::ignore

Currently std::span::subspan is called without checking the size first.

This is UB, unless the std lib is hardened.

With a hardened stdlib, the program aborts:

> include/c++/v1/span:512: libc++ Hardening assertion __offset <= size()
> failed: span<T>::subspan(offset, count): offset out of range

Fix the UB and the abort by using the implementation from DataStream,
which throws when hitting end-of-data.

This commit should not change any behavior, because the UB is currently
unreachable. Also, the newly added throw should properly be caught by
any code that calls any streams function.

92/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
defensive validation
AI analysis · Informational 23/100

This is a small defensive code cleanup in Bitcoin Core. A function called SpanReader::ignore could previously call a standard-library span operation with an oversized offset, which is undefined behavior and, with hardening enabled, causes the program to crash. The fix adds a bounds check that throws a normal end-of-data exception instead. The commit message says this bad path was not reachable in practice, so the change is mainly about removing undefined behavior rather than fixing an exploitable bug.

Lower-prioritylogging: Move message formatting to util/log.hby stickies-v · bb8e9e7c · Feb 2, 2026 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · stickies-v

logging: Move message formatting to util/log.h

With this change, callers can use util/log.h to emit log messages and do not need to
include the full logging implementation in logging.h.

There's a potential performance impact with this change from an extra
`strprintf` call in log statements where `Logger::WillLogCategoryLevel` returns
true but `Logger::Enabled` returns false. This happens when bitcoind is run
with `-noprinttoconsole -nodebuglogfile` options.

For background, log macro arguments are supposed to be evaluated when
`Logger::WillLogCategoryLevel` returns true, even if log output is not enabled.
Changing this behavior would be reasonable but needs consideration in a
separate PR since not evaluating arguments in log statements has the potential
to change non-logging behavior.

The extra `strprintf` call could have been avoided by expanding this change and
making the `ShouldLog()` function return a tri-state DO_LOG / DO_NOT_LOG /
DO_NOT_LOG_ONLY_EVALUATE_ARGS value instead of a bool, but this complexity did
not seem warranted.

Review with --color-moved=dimmed-zebra --color-moved-ws=ignore-all-space

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>

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

This commit is a straightforward internal code reorganization for Bitcoin Core's logging system. It moves where log message formatting happens so that smaller parts of the code can include a lighter logging header. The commit itself notes a minor, non-security performance side effect in an unusual configuration, but there is no vulnerability or security fix here.