BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

253security candidates604second-pass queue1791AI analyses
208commits · 30 days
502commits · 60 days
1528commits · 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
927Strong · 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 Poinsot22416170
Ava Chow15750143064
MarcoFalke40921211074
Lőrinc17721118081
fanquake22719138057
Hennadii Stepanov20914124063
rkrux57955074
Sjors Provoost89856074
Sebastian Falbesoner33727073
David Gumberg55652072
Pieter Wuille95528066
Hodlinator66533076
Analysis record

Published AI watches

Last scanned 1 hour 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.

Lower-prioritymining: pad coinbase to fix createNewBlock at heights <=16by Sjors Provoost · 00d22328 · May 13, 2026 · 4 filesMessage 93 · StrongLow 32Details
Commit message · Sjors Provoost

mining: pad coinbase to fix createNewBlock at heights <=16

Since #32420, createNewBlock has thrown `bad-cb-length` errors when called at
low block heights because `OP_0` padding stopped being added to coinbase
transactions. (#32420 did add an `include_dummy_extranonce` option which could
bypass this, but it was not exposed to IPC clients.) Fix the problem by padding
coinbase transactions with `OP_0` when necessary to produce valid blocks.

Additionally this commit stops adding `OP_0` padding to the template
`script_sig_prefix` field when `include_dummy_extranonce` is true. This is safe
because non-IPC clients don't use this field, and IPC clients could never set
the option to true, and are expected to add their own nonces in any case.

This also improves documentation about the `script_sig_prefix` field and
`getCoinbaseTx` method.

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 fixes a bug in Bitcoin Core's block-template creation for new blocks at very low chain heights (blocks 1-16). Since a recent earlier change, the software stopped adding a harmless placeholder byte to the coinbase transaction, causing block creation to fail an internal validity check with a 'bad-cb-length' error. The fix re-adds that placeholder byte for low-height blocks, but only inside the node's own template, not in the data handed to external mining clients. Those clients are now documented as needing to supply their own extra byte. It is a correctness/reliability fix for mining interfaces, not a vulnerability that lets an attacker steal funds or break consensus.

Lower-priorityfuzz: use ImmediateBackgroundTaskRunner to silence DEBUG_LOCKORDERby Eugene Siegel · 801d36f5 · May 13, 2026 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · Eugene Siegel

fuzz: use ImmediateBackgroundTaskRunner to silence DEBUG_LOCKORDER

DEBUG_LOCKORDER was reporting a false positive deadlock with the
cmpctblock fuzz harness when using ImmediateTaskRunner. Since it is
single-threaded, ImmediateTaskRunner callbacks added LockOrders that
could never happen outside of a fuzz test.

First a block would get connected:
* LOCK(mempool.cs)
* BlockConnected (fuzz test runs in same thread)
* LOCK(m_tx_download_mutex)

Then a later iteration of the LIMITED_WHILE would send a TX:
* LOCK(m_tx_download_mutex)
* LOCK(mempool.cs)

causing a false positive deadlock. Normally, the BlockConnected
callback would run in a different thread and no deadlock is reported.

Fix this by launching a thread that runs the callback and is
immediately joined.

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

This change only affects an internal fuzzing test harness (a tool used to automatically find bugs in Bitcoin Core). It swaps the task runner used during fuzz testing so that lock-order debugging warnings no longer report a false alarm. There is no change to production code, no real deadlock is being fixed, and no user funds or network behavior are affected.

Lower-prioritydoc: mention -DWITH_ZMQ=ON in BSD build guidesby junbyjun1238 · ca93ab80 · May 13, 2026 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · junbyjun1238

doc: mention -DWITH_ZMQ=ON in BSD build guides

The FreeBSD, NetBSD, and OpenBSD build guides state that ZMQ support is compiled in when the package is installed. Since WITH_ZMQ defaults to OFF, update the wording to mention the required CMake option.

68/100 · AdequateMessage clarity
✓ 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 updates three documentation files for FreeBSD, NetBSD, and OpenBSD build guides. It corrects the instructions for enabling ZeroMQ support by adding the required CMake option `-DWITH_ZMQ=ON`. No code, build system, or runtime behavior is changed.

Lower-prioritytest: bad-cb-length for createNewBlock() at low heightsby Sjors Provoost · 605ff374 · May 13, 2026 · 2 filesMessage 95 · StrongInformational 19Details
Commit message · Sjors Provoost

test: bad-cb-length for createNewBlock() at low heights

On new regtest / signet chains (heights <= 16), createBlock() fails
internally with bad-cb-length. Since mining.capnp does not expose
include_dummy_extranonce, IPC clients can't work around this.

Add a functional test to illustrate this issue and use RPC to
work around it. The next commit introduces a fix.

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

This commit only adds a new automated test that demonstrates an existing bug in Bitcoin Core's mining IPC interface. The bug causes block creation to fail on brand-new test chains for the first 16 blocks. The commit does not fix the bug; it documents it and works around it in the test by using an RPC call instead. There is no direct security risk to users here, but it highlights a reliability issue in an experimental IPC feature.

Lower-prioritytest: refactor IPC mining test to use script_BIP34_coinbase_heightby Sjors Provoost · 1966621b · May 13, 2026 · 2 filesMessage 95 · StrongInformational 15Details
Commit message · Sjors Provoost

test: refactor IPC mining test to use script_BIP34_coinbase_height

Needed in a later commit to correctly derive the BIP34 prefix
for heights <= 16.

Add a padding parameter to script_BIP34_coinbase_height() that
controls whether the OP_0 dummy extranonce is appended for
heights <= 16.

Use this helper with padding=False in the IPC mining test's
build_coinbase_test().

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

This is a test-only code cleanup. It changes how a test helper builds the special coinbase script prefix for low block heights, adding an option to skip a padding byte. No production Bitcoin Core code is modified, so it cannot affect real users, funds, or network consensus.

Security candidaterefactor, key: move `CreateMuSig2PartialSig` to `musig.{h,cpp}` moduleby Sebastian Falbesoner · 8ba5f68b · May 13, 2026 · 5 filesMessage 78 · AdequateInformational 15Details
Commit message · Sebastian Falbesoner

refactor, key: move `CreateMuSig2PartialSig` to `musig.{h,cpp}` module

Compared to `CreateMuSig2Nonce`, creating a partial signature
has a stronger link to the secret key used, but for consistency
reasons it still makes sense to move all functionality that call
the secp256k1 musig API functions to the `musig.{h,cpp}` module
for consistency.

Can be reviewed via the git option `--color-moved=dimmed-zebra`.

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning boundarysigning or wallet path
AI analysis · Informational 15/100

This commit is a pure code move: it takes the CreateMuSig2PartialSig function out of the CKey class in key.cpp/key.h and places it in the musig.cpp/musig.h module. The function's logic is unchanged, and the only caller is updated to use the new free-function name. There is no security fix or behavior change.

AI review queuedrefactor, key: move `CreateMuSig2Nonce` to `musig.{h,cpp}` moduleby Sebastian Falbesoner · d087f266 · May 13, 2026 · 5 filesMessage 78 · AdequateInformational 15Details
Commit message · Sebastian Falbesoner

refactor, key: move `CreateMuSig2Nonce` to `musig.{h,cpp}` module

Nonce creation is mainly derived by randomness, and the secret
key merely serves as (optional) additional data for increasing
misuse-resistance, rather than being a central part that would
justify an own CKey method, so move it to the musig.cpp module.

Can be reviewed via the git option `--color-moved=dimmed-zebra`.

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

This commit is a code cleanup: it moves a function that creates MuSig2 cryptographic nonces from the CKey class into a dedicated musig module. The actual logic and security behavior are unchanged; only where the code lives and how callers reference it are modified.

AI review queuedkey: add `GetSecp256k1SignContext` access functionby w0xlt · f36d89f4 · May 13, 2026 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · w0xlt

key: add `GetSecp256k1SignContext` access function

This is needed in order to move the `CreateMuSig2{Nonce,PartialSig}`
functions to the musig.cpp modules, see next two commits.

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

This commit simply adds a public accessor function that returns an internal cryptographic context object. It does not change how keys are created, signed, or verified, and it introduces no new behavior that could be exploited. It is a routine code-organization change to support future work.

Lower-prioritydoc: clarify libfuzzer-nosan preset uses build_fuzz_nosan dirby ImMike · 0065f354 · May 13, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · ImMike

doc: clarify libfuzzer-nosan preset uses build_fuzz_nosan dir

The fuzzing quickstart documents the libfuzzer preset with build_fuzz
as the build directory, then mentions libfuzzer-nosan as an alternative
without noting that this preset uses a different binary directory
(build_fuzz_nosan, per CMakePresets.json line 54). A reader following
the quickstart with --preset=libfuzzer-nosan and then running
'cmake --build build_fuzz' as shown will operate against the wrong
(or empty) directory.

Add a clarifying note at the first mention in the Quickstart.

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

This is a documentation-only change that adds a clarifying note to the fuzzing quickstart guide. It explains that using the libfuzzer-nosan preset creates binaries in a different directory (build_fuzz_nosan) than the regular libfuzzer preset (build_fuzz). There is no code change and no security issue.

Security candidatepsbt, test: remove address type restrictions in testby rkrux · 81348576 · May 13, 2026 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · rkrux

psbt, test: remove address type restrictions in test

Because the corresponding Taproot fields were added in PSBT in PR 22558, so
these restrictions are no longer necessary.

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 15/100

This is a minor test-only cleanup. It removes a TODO comment and two command-line flags that forced a specific address type in one of Bitcoin Core's automated functional tests. The change has no effect on production code, user wallets, or network behavior.

Lower-priorityrefactor: Use ignore-list over verbose select-listby MarcoFalke · fa9c9196 · May 13, 2026 · 1 fileMessage 97 · StrongInformational 15Details
Commit message · MarcoFalke

refactor: Use ignore-list over verbose select-list

This refactor makes the ruff.toml easier to read, because it lists the
ignored checks instead of having to enumerate all checks to select in a
large collection of rules.

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

This commit is a pure cleanup of the project's Python linter configuration file (ruff.toml). It replaces a long explicit list of individual style/error checks with shorter category codes and a small 'ignore' list. There is no change to Bitcoin Core's actual code, behavior, or security.

AI review queuedwallet: use outpoint when estimating input sizeby Lőrinc · cd8d3bd9 · May 13, 2026 · 2 filesMessage 68 · AdequateLow 49Details
Commit message · Lőrinc

wallet: use outpoint when estimating input size

`CalculateMaximumSignedInputSize()` is passed the outpoint being sized, but that context was not used when estimating the signed input size.
Pass the outpoint through so externally selected inputs are not underestimated.

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

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

This Bitcoin Core wallet patch fixes a bug where the software underestimated the size (and therefore the required transaction fee) of certain externally provided transaction inputs. The fix passes the actual outpoint being spent into the size-estimation function, so the fee calculation can account for extra data that some inputs require. The included test demonstrates that without the fix, the estimated size is one byte too small.

Lower-priorityci: Enable ruff ambiguous-unicode-character checksby MarcoFalke · fa9b01ad · May 13, 2026 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: Enable ruff ambiguous-unicode-character checks

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 only turns on three new lint checks in the project's Python code style tool (ruff). These checks warn when text contains Unicode characters that look like ordinary ASCII letters but are actually different characters, which can be confusing or misleading. There is no code behavior change, no bug fix, and no security patch.

Security candidatekey: cleanse ChainCode on destructionby Thomas · 21a1380c · May 12, 2026 · 4 filesMessage 78 · AdequateLow 49Details
Commit message · Thomas

key: cleanse ChainCode on destruction

HMAC primitives cleanse their internal stack buffers, but a caller's
ChainCode remains populated in memory after use. Promote ChainCode
from `typedef uint256` to a `base_blob<256>` subclass with a
memory_cleanse() destructor, so chain codes in CExtKey, CExtPubKey,
and local variables are cleansed on scope exit.

Retype MUSIG_CHAINCODE from `constexpr uint256` to `const ChainCode`
to match its BIP328 semantic role. Dropping `constexpr` (ChainCode is
no longer a literal type) also removes the GCC-14 consteval lambda
workaround.

Remove the duplicate typedef in pubkey.h (which includes hash.h
transitively). Two fuzz-test call sites in test/fuzz/key.cpp now
construct the chain-code argument explicitly rather than relying on
the typedef.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
secret or key materialfuzzing or regression evidence
AI analysis · Low 49/100

This commit is a defensive hardening change for Bitcoin Core's handling of BIP32 'chain codes'—secret-derived values used when creating child keys from a master key. Previously these values were stored as ordinary 256-bit numbers that could remain in memory after use. The change makes ChainCode a dedicated type that securely wipes its own memory when it goes out of scope, similar to how private keys are already handled. It is a preventive security improvement rather than a fix for an active exploit.

Security candidatemusig: Include pubnonce in session idby Ava Chow · bb05986c · May 12, 2026 · 4 filesMessage 80 · StrongLow 31Details
Commit message · Ava Chow

musig: Include pubnonce in session id

Multiple signing sessions over the same message are allowed. Including
the pubnonce in the session id allows distinguishing the signing
sessions.

This should be safe as a new secret nonce is used for each signing
session, and after the nonce is used, it is still deleted from memory in
order to avoid reuse.

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 boundarynonce handlingsigning or wallet path
AI analysis · Low 31/100

This change tweaks how Bitcoin Core's MuSig2 multi-signature code keeps track of active signing sessions. Previously, the session identifier was based only on the public keys and the transaction hash. Now it also includes each participant's public nonce. This matters because the same keys and transaction can legitimately be signed more than once, and without the nonce in the identifier the code could confuse two different signing sessions and risk reusing or misplacing secret nonce data. The commit itself is framed as a safety improvement, not a fix for a known active bug or exploit.

Lower-prioritytest: Add coverage for m_blocks_unlinked invariant in LoadBlockIndexby marcofleon · 3f44f9ae · May 12, 2026 · 2 filesMessage 95 · StrongInformational 12Details
Commit message · marcofleon

test: Add coverage for m_blocks_unlinked invariant in LoadBlockIndex

A pruned stale-fork block whose parent doesn't have any transactions
shouldn't be added to m_blocks_unlinked when starting up a node.

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

This commit only adds a new automated test to Bitcoin Core. It does not change any production code. The test checks that when a node restarts after pruning a stale side-chain block, the internal block-tracking data structure does not incorrectly mark the block as 'unlinked.' There is no fix or vulnerability patch here—just extra test coverage for an existing invariant.

Security candidaterpc: Fix descriptorprocesspsbt internal bug on invalid signaturesby b-l-u-e · 7e19ce20 · May 12, 2026 · 3 filesMessage 73 · AdequateModerate 62Details
Commit message · b-l-u-e

rpc: Fix descriptorprocesspsbt internal bug on invalid signatures

Use PSBTInputSignedAndVerified instead of PSBTInputSigned to properly
validate signatures before marking PSBT as complete

Signed-off-by: b-l-u-e <8102260+blue@users.noreply.github.com>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarydefensive validationsigning or wallet path
AI analysis · Moderate 62/100

This commit fixes a bug in Bitcoin Core's descriptorprocesspsbt RPC command. Previously, the command could mark a partially-signed Bitcoin transaction (PSBT) as 'complete' and return a finalized transaction hex even when one of the signatures was actually invalid. The fix makes the command verify signatures cryptographically, not just check that signature data is present. The new test deliberately corrupts a signature and confirms the command now correctly reports the PSBT as incomplete.

Lower-prioritydoc: recommend script_flags instead of deployments.taprootby Sjors Provoost · f24a7b5f · May 11, 2026 · 1 fileMessage 65 · AdequateInformational 20Details
Commit message · Sjors Provoost

doc: recommend script_flags instead of deployments.taproot

Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 20/100

This is a small documentation-only change to Bitcoin Core release notes. It clarifies how developers should check for Taproot support after the 'taproot' field was removed from the getdeploymentinfo RPC. No code behavior changed, and there is no security vulnerability in the commit itself.

Security candidatecrypto: cleanse HMAC stack buffers after useby Thomas · b3a3f883 · May 10, 2026 · 2 filesMessage 68 · AdequateModerate 51Details
Commit message · Thomas

crypto: cleanse HMAC stack buffers after use

CHMAC_SHA256 and CHMAC_SHA512 leave two stack buffers populated on
return: rkey[] holds K' XOR ipad after the constructor, and temp[]
holds the inner-hash output after Finalize().

When the HMAC is keyed with sensitive material (chain code in
BIP32Hash() in hash.cpp for BIP32 child key derivation; PRK in
HKDF-Expand in hkdf_sha256_32.cpp, used for BIP324 transport keying),
rkey is one constant XOR from that key, and temp is a one-way digest
covering it.

Cleanse both buffers with memory_cleanse(), matching the convention
in chacha20.cpp and chacha20poly1305.cpp. No observable change for
callers.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Moderate 51/100

This commit is a defensive hardening patch for Bitcoin Core's HMAC code. It wipes two temporary memory buffers that previously held sensitive key-derived data after the HMAC operation finishes. The change reduces the risk that leftover key material could leak through memory dumps, core dumps, or side-channel attacks, but it does not fix an active bug or known exploit.

Lower-prioritycmake: Set `CTEST_NIGHTLY_START_TIME` for CDash Nightly pipelinesby Hennadii Stepanov · 4defc466 · May 8, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Hennadii Stepanov

cmake: Set `CTEST_NIGHTLY_START_TIME` for CDash Nightly pipelines

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

This commit adds a single configuration line telling CDash (a test-results dashboard) what time to consider the start of a 'nightly' test run. It has no effect on Bitcoin Core's code, network behavior, or user security.

Lower-prioritymv contrib/verify-commits/pre-push-hook.sh to maintainer tools repoby MarcoFalke · 888857c5 · May 7, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · MarcoFalke

mv contrib/verify-commits/pre-push-hook.sh to maintainer tools repo

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

This commit simply deletes a helper shell script that was used by Bitcoin Core maintainers as a Git pre-push hook. The script checked whether commits being pushed to the project's GitHub repository were cryptographically signed. It is being moved to a separate maintainer tools repository. There is no code change to Bitcoin Core itself, no vulnerability, and no security fix.

Lower-prioritydoc: fix whitespace in build-osx.mdby Philips Ucheolisah .N · d9b57eec · May 7, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Philips Ucheolisah .N

doc: fix whitespace in build-osx.md

Remove an extra space before `.zip` in the deploy section.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit fixes a minor double-space typo in a macOS build instruction document. It has no effect on software behavior or security.

Lower-prioritydoc: fix stale autotools reference and SQLite typoby taboger · e7d4a7e3 · May 7, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · taboger

doc: fix stale autotools reference and SQLite typo

Suggested-by: hebasto

50/100 · ThinMessage clarity
✓ Specific, 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 updates two documentation files. It replaces a stale reference to the old Autotools 'configure script' with 'CMake configuration' in the NetBSD build guide, and fixes a typo ('SQlite' to 'SQLite') while simplifying a heading in the macOS build guide. There are no code changes and no security implications.

Security candidateci: Move --usecli --extended from i386 task to alpine taskby MarcoFalke · fad61896 · May 7, 2026 · 2 filesMessage 62 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: Move --usecli --extended from i386 task to alpine task

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

This commit simply moves some test command-line flags from one continuous integration (CI) test job to another. It does not change any production code, wallet logic, networking, or anything users interact with. There is no security issue here.

AI review queuedwallet: check BDB last page LSNby Lőrinc · e2b0984f · May 6, 2026 · 1 fileMessage 68 · AdequateModerate 57Details
Commit message · Lőrinc

wallet: check BDB last page LSN

The BDB metadata field `last_page` stores the last valid page number, not the number of pages.
The read-only wallet migration parser currently checks reset LSNs with a half-open loop, so it skips the final page and may accept a database whose last page still depends on BDB log files.

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

This commit fixes an off-by-one bug in Bitcoin Core's read-only wallet migration tool. The tool checks whether a Berkeley DB (BDB) wallet file is self-contained before migrating it. Due to a half-open loop, the tool was skipping the very last page of the database when verifying that all pages had their log sequence numbers (LSNs) reset. As a result, it could have accepted a wallet whose final page still depended on separate BDB log files, potentially leading to incomplete or inconsistent migration data. The fix changes the loop to include the last page.