BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

2902 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
197commits · 30 days
497commits · 60 days
1518commits · 180 days
2877commits · 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
939Strong · 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 2 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-prioritynet processing: Check if we are in ibd before processing block for txdownloadmanby sedited · e5f06135 · Feb 22, 2026 · 2 filesMessage 83 · StrongInformational 21Details
Commit message · sedited

net processing: Check if we are in ibd before processing block for txdownloadman

This avoids wasting work on calculating bloom filters that aren't
consumed during ibd and continuously re-calculated as now blocks get
validated.

Also update the functional test to document that transactions would now
be requested again once out of IBD.

Co-authored-by: Lőrinc <pap.lorinc@gmail.com>

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

This commit is a performance optimization, not a security fix. It stops Bitcoin nodes from building unnecessary 'bloom filters' (a data structure used to track recently confirmed transactions) while they are still downloading the historical blockchain (IBD). Previously, the node wasted CPU recalculating these filters for old blocks even though it wasn't accepting new transactions from peers yet. The functional test was updated to reflect that transactions confirmed during IBD will now be requested again once the node is fully synced, because those filters were not built during IBD.

Lower-priorityAdd functional test exercising tx downloadman recently confirmed filterby Lőrinc · ce8b6928 · Feb 22, 2026 · 1 fileMessage 83 · StrongInformational 12Details
Commit message · Lőrinc

Add functional test exercising tx downloadman recently confirmed filter

This documents existing behaviour before the change in the following
commit: The bloom filter maintained by the txdownload manager tracks
recently confirmed transasctions even during ibd. If a peer sends an INV
once IBD is over it does not re-request them.

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

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ 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 documents that transactions confirmed during initial block download (IBD) are remembered and not re-requested from peers once IBD finishes. There is no security fix or vulnerability here.

Lower-prioritytest: don't always assert NUM_PRIVATE_BROADCAST_PER_TX broadcastsby Vasil Dimov · c462e54f · Feb 21, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Vasil Dimov

test: don't always assert NUM_PRIVATE_BROADCAST_PER_TX broadcasts

In `p2p_private_broadcast.py` in the function `check_broadcasts()` we
should assert that the broadcast was done to `broadcasts_to_expect`
peers, not to `NUM_PRIVATE_BROADCAST_PER_TX`. This is because in the
"Basic" test we check the first broadcast manually because it is done to
`nodes[1]` and then check the other two by
`check_broadcasts(..., NUM_PRIVATE_BROADCAST_PER_TX - 1, ...)`.
The first broadcast might not have fully concluded by the time we call
`check_broadcasts()` to check the remaining 2.

Demanding always `NUM_PRIVATE_BROADCAST_PER_TX` can lead to:

```
Traceback (most recent call last):
File "/home/vd/gh/bitcoin/bitcoin/test/functional/test_framework/test_framework.py", line 142, in main
self.run_test()
~~~~~~~~~~~~~^^
File "/tmp/build/clang22/test/functional/p2p_private_broadcast.py", line 347, in run_test
self.check_broadcasts("Basic", txs[0], NUM_PRIVATE_BROADCAST_PER_TX - 1, NUM_INITIAL_CONNECTIONS + 1)
~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/build/clang22/test/functional/p2p_private_broadcast.py", line 313, in check_broadcasts
assert_greater_than_or_equal(sum(1 for p in peers if "received" in p), NUM_PRIVATE_BROADCAST_PER_TX)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/vd/gh/bitcoin/bitcoin/test/functional/test_framework/util.py", line 94, in assert_greater_than_or_equal
raise AssertionError("%s < %s" % (str(thing1), str(thing2)))
AssertionError: 2 < 3
```

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This is a one-line fix in a Bitcoin Core test script. It changes a test assertion to check the correct expected number of peer broadcasts, preventing a flaky test failure. It does not change any production code or network behavior, so it has no security impact on users.

Lower-prioritytest: move abortprivatebroadcast test at the endby Vasil Dimov · 37105663 · Feb 21, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Vasil Dimov

test: move abortprivatebroadcast test at the end

The piece of `p2p_private_broadcast.py` which tests the correctness of
`abortprivatebroadcast` issues a new `sendrawtransaction` call. That
call schedules up to 3 new connections: peer=13, peer=14 and possibly
peer=15 before it gets aborted.

These up to 3 in-the-process-of-opening private broadcast connections
have `CNode::m_connected` set early - when the `CNode` object is
created. Later in the test the mock time is advanced by 20 minutes and
those "old" connections pick a transaction for rebroadcast but that
triggers `PRIVATE_BROADCAST_MAX_CONNECTION_LIFETIME` immediately:

```
2026-02-21T13:28:14.209766Z [privbcast] [net.cpp:4006] [CNode] [net] Added connection peer=20
2026-02-21T13:28:14.309792Z (mocktime: 2026-02-21T13:48:14Z) [msghand] [net.cpp:4074] [PushMessage] [net] sending inv (37 bytes) peer=20
2026-02-21T13:28:14.309801Z (mocktime: 2026-02-21T13:48:14Z) [msghand] [net_processing.cpp:5745] [SendMessages] [privatebroadcast] Disconnecting: did not complete the transaction send within 180 seconds, peer=20
```

This prematurely stops the private broadcast connection and results in
a failure like:

```
AssertionError: ... not({} == {'ping': 1, 'tx': 1})
```

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

This commit only moves two test blocks to the end of a single functional test file. It fixes a flaky test failure caused by mock time advancing and prematurely disconnecting private broadcast connections. There is no change to production code, no security fix, and no vulnerability.

Lower-prioritycmake: Provide `install_name_tool` stub instead of disabling itby Hennadii Stepanov · 38a7a671 · Feb 21, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Hennadii Stepanov

cmake: Provide `install_name_tool` stub instead of disabling it

When running `enable_language()`, CMake checks the platform-specific
toolchain components, which includes `install_name_tool` for macOS.
We disable this check when cross-compiling on Linux because
`install_name_tool` is not used and our toolchain file does not provide
it.

However, the current workaround has been breaking CMake's assumptions
since commit eb8facd39606e9472f9ff6de40d7caf76767d0da (CMake 4.1.0,
backported to 4.0.5), which causes an error during configuration using
the Ninja generator.

This change fixes this behaviour by providing a stub executable instead
of `install_name_tool`, as we currently do in the depends build
subsystem.

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

This is a build-system fix for Bitcoin Core's CMake configuration when cross-compiling macOS binaries from Linux. It replaces a workaround that disabled a CMake tool check with a harmless stub command, restoring compatibility with newer CMake versions. There is no security issue in the change itself.

Lower-prioritymining: add interrupt()by Sjors Provoost · 1e82fa49 · Feb 20, 2026 · 6 filesMessage 59 · ThinInformational 19Details
Commit message · Sjors Provoost

mining: add interrupt()

Both waitTipChanged() and createNewBlock() can take a long time to
return. Add a way for clients to interrupt them.

The new m_interrupt_mining is safely accessed with a lock on
m_tip_block_mutex, but it has no guard annotation. A more thorough
solution is discussed here:
https://github.com/bitcoin/bitcoin/pull/34184#discussion_r2743566474

59/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 19/100

This commit adds a new 'interrupt()' button to Bitcoin Core's mining interface so outside callers can stop two long-running mining operations (waiting for a new chain tip and creating a new block) instead of waiting for them to finish on their own. It is a feature/refactoring change, not a fix for an active security bug. The only security-relevant note is that the new interrupt flag is accessed under a lock but is not formally marked as guarded by that lock, which the commit message itself flags as a known imperfection.

Lower-prioritydoc: release note for IPC cooldown and interruptby Sjors Provoost · fcaec254 · Feb 20, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Sjors Provoost

doc: release note for IPC cooldown and interrupt

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 release-note documentation describing two new behaviors in the mining inter-process communication (IPC) interface: a startup cooldown for createNewBlock and a new interrupt() method. It contains no code changes and no security fix or vulnerability.

Lower-prioritymining: add cooldown argument to createNewBlock()by Sjors Provoost · a11297a9 · Feb 20, 2026 · 11 filesMessage 98 · StrongLow 27Details
Commit message · Sjors Provoost

mining: add cooldown argument to createNewBlock()

At startup, if the needs to catch up, connected mining clients will
receive a flood of new templates as new blocks are connected.

Fix this by adding a cooldown argument to createNewBlock(). When set
to true, block template creation is briefly paused while the best
header chain is ahead of the tip.

This wait only happens when the best header extends the current tip,
to ignore competing branches.

Additionally, cooldown waits for isInitialBlockDownload() to latch to
false, which happens when there is less than a day of blocks left to sync.

When cooldown is false createNewBlock() returns immediately. The argument
is optional, because many tests are negatively impacted by this
mechanism, and single miner signets could end up stuck if no block
was mined for a day.

The getblocktemplate RPC also opts out, because it would add a delay
to each call.

Fixes #33994

98/100 · StrongMessage clarity
✓ 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
AI analysis · Low 27/100

This change adds a short waiting period (cooldown) when Bitcoin Core creates a new block template while the node is still catching up to the network. The goal is to stop mining software from receiving a flood of rapidly changing templates during initial sync. It is a performance and robustness improvement, not a fix for a direct money-stealing or remote-code-execution bug. The patch itself is careful to avoid a known risk: if a malicious miner announced a far-ahead header but withheld the actual block, waiting forever could stall honest miners. The new code caps the wait and only waits while the best header extends the current tip, not a competing branch.

Lower-priorityrpc: add optimal result to getmempoolinfoby Greg Sanders · a9e59f7d · Feb 20, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Greg Sanders

rpc: add optimal result to getmempoolinfo

Expose this value to allow rpc based tooling to track this
value for network health diagnostics.

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

This commit simply adds a new read-only field called 'optimal' to the getmempoolinfo RPC output. It exposes whether the mempool is currently in a known-optimal transaction ordering. There is no change to transaction processing, consensus rules, or network behavior—only an additional diagnostic value returned by an RPC call.

Lower-prioritymempool: log if we detect a non-optimal mempoolby Greg Sanders · a3fb3dd5 · Feb 20, 2026 · 1 fileMessage 68 · AdequateInformational 18Details
Commit message · Greg Sanders

mempool: log if we detect a non-optimal mempool

We expect this to be rare in practice, and to not be the
usual state of the mempool. If we we detect non-optimal
ordering after a DoWork() invocation, allow this to be
observed in MEMPOOL logs.

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

This commit only adds extra logging messages. It does not change how the mempool behaves or fix any bug. It lets developers see, via debug logs, when the mempool's internal transaction ordering is not in the best possible state after routine events such as adding transactions, handling blockchain reorganizations, or processing a new block. The change is observability-only and not a security patch.

AI review queuedleveldb: remove unused filesby fanquake · 3feabb20 · Feb 20, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · fanquake

leveldb: remove unused files

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

This commit removes three source files from the LevelDB build list in Bitcoin Core's CMake configuration. The files (c.cc, dumpfile.cc, histogram.cc) are reportedly unused. This is a routine build cleanup with no apparent security relevance.

AI review queuedguix: use a temporary file over spongeby fanquake · c86bce59 · Feb 20, 2026 · 3 filesMessage 25 · OpaqueInformational 17Details
Commit message · fanquake

guix: use a temporary file over sponge

Remove sponge (moreutils).

25/100 · OpaqueMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body! Contains work-in-progress language
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit changes the Bitcoin Core Guix build scripts to stop using the 'sponge' tool from the 'moreutils' package. Instead of writing a checksum file directly through a pipeline, the scripts now write to a temporary file and then move it into place. This removes a third-party dependency from the trusted build environment, which is a hardening improvement rather than a fix for a known active vulnerability.

Lower-priorityqt: Update src/qt/locale/bitcoin_en.xlf after string freezeby Hennadii Stepanov · ef987683 · Feb 20, 2026 · 3 filesMessage 81 · StrongInformational 15Details
Commit message · Hennadii Stepanov

qt: Update src/qt/locale/bitcoin_en.xlf after string freeze

New plurals have been adjusted manually according to the translation
process documentation:
https://github.com/bitcoin/bitcoin/blob/master/doc/translation_process.md#handling-plurals-in-source-files

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 commit is a routine update of the English translation files for the Bitcoin Core graphical user interface. It adds, removes, and reorders user-facing text strings so that translators can work with the latest version of the software. There is no code that changes how the program behaves, and nothing in the commit fixes or introduces a security problem.

Security candidateRevert "ci: Treat SHA1 LLVM signing key as warning"by will · 3574905c · Feb 20, 2026 · 1 fileMessage 65 · AdequateInformational 18Details
Commit message · will

Revert "ci: Treat SHA1 LLVM signing key as warning"

This reverts commit 3c8f5e48f710313de78bcbfafd09fed71890d754.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundary
AI analysis · Informational 18/100

This commit removes a temporary workaround in Bitcoin Core's automated testing setup that relaxed a security policy for checking the cryptographic signature on LLVM's software repository. The workaround was added because LLVM's signing key still used the older SHA1 hash algorithm, which newer Linux systems began rejecting. Now that LLVM has fixed its key, the workaround is no longer needed and is being removed. This is a cleanup change that restores normal, stricter security checks in the continuous integration (CI) environment. It does not change the Bitcoin Core software that users run.

Lower-prioritytest: Fixup assert_debug_log timeouts in feature_config_args.pyby MarcoFalke · fa4424fd · Feb 20, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · MarcoFalke

test: Fixup assert_debug_log timeouts in feature_config_args.py

* The bitcoin.conf related checks do not need any timeout, because the
logging happens in the main thread, before the node is fully started.
* The net thread related checks do need a timeout, because the threads
may be late to start after the node is fully started.

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
AI analysis · Informational 15/100

This is a minor test-only change in Bitcoin Core's own test suite. It adjusts how long the tests wait for certain log messages to appear, removing unnecessary waits for some checks and adding short waits for others. It does not change the Bitcoin software that users run and has no security impact.

Lower-prioritytest: Add missing syncwithvalidationinterfacequeueby MarcoFalke · faed837f · Feb 20, 2026 · 1 fileMessage 85 · StrongInformational 13Details
Commit message · MarcoFalke

test: Add missing syncwithvalidationinterfacequeue

This is required to actually erase the orphan transaction when the
BlockConnected event is handled in the background validation interface
queue thread.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 13/100

This commit fixes a timing issue in a Bitcoin Core functional test. The test checks that orphan transactions are removed when a block connects, but the check was running before a background queue had finished processing the block. Adding a synchronization call makes the test wait for that background work, so the test reliably sees the expected log message. It does not change production node behavior or fix a security bug in the Bitcoin protocol.

Lower-priorityMinimize mempool lock, sync txo spender index only when and if neededby sstone · 0b96b9c6 · Feb 19, 2026 · 2 filesMessage 73 · AdequateLow 25Details
Commit message · sstone

Minimize mempool lock, sync txo spender index only when and if needed

We sync txospenderindex after we've checked the mempool for spending transaction, and only if search is not limited to the mempool and no
spending transactions have been found for some of the provided outpoints.
This should minimize the chance of having a block containing a spending transaction that is no longer in the mempool but has not been indexed yet.

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

This commit tightens the timing of when Bitcoin Core's RPC call 'gettxspendingprevout' consults the optional on-disk 'txo spender index'. Previously, the code would wait for that index to finish syncing before even looking at the mempool. Now it searches the mempool first, releases the mempool lock, and only then waits for the index if it actually needs to. The goal is to reduce a small window where a block has just arrived, the spending transaction left the mempool, but the index hasn't recorded it yet, so the RPC could incorrectly report no spender. It is a robustness improvement, not a fix for a clear exploit.

Lower-prioritytest: addrman: successive failures in the last week for IsTerribleby brunoerg · 6202acd2 · Feb 19, 2026 · 1 fileMessage 72 · AdequateInformational 12Details
Commit message · brunoerg

test: addrman: successive failures in the last week for IsTerrible

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

This commit only adds a new unit test for Bitcoin Core's address manager. It checks that an address with many recent connection failures is correctly marked as 'terrible' and filtered out when peers are returned, while still remaining in the unfiltered list. There is no change to production code.

Lower-priorityrpc: add coinbase_tx field to getblockby Sjors Provoost · e0463b4e · Feb 19, 2026 · 3 filesMessage 68 · AdequateInformational 18Details
Commit message · Sjors Provoost

rpc: add coinbase_tx field to getblock

This adds a "coinbase_tx" field to the getblock RPC result, starting
at verbosity level 1. It contains only fields guaranteed to be small,
i.e. not the outputs.

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

This change adds a new convenience field called coinbase_tx to the getblock RPC response in Bitcoin Core. It exposes only small, already-public metadata about the first transaction in a block (the coinbase transaction), such as version, locktime, sequence, coinbase script, and witness data. It does not expose transaction outputs or any new sensitive data. This is a feature addition, not a security fix or vulnerability.

Lower-prioritydoc: add release notes for Tor PoW defensesby Vasil Dimov · c68e3d2c · Feb 19, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Vasil Dimov

doc: add release notes for Tor PoW defenses

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 a release note describing a previously implemented feature: automatic Tor hidden services created by Bitcoin Core will use Tor's proof-of-work (PoW) defenses when supported by the Tor daemon. The commit itself changes only documentation and contains no code.

Lower-prioritydoc: add a hint to enable PoW defenses to manual hidden servicesby Vasil Dimov · 4bae84c9 · Feb 19, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Vasil Dimov

doc: add a hint to enable PoW defenses to manual hidden services

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 documentation. It adds a note in the Tor setup guide suggesting users enable a Tor hidden-service proof-of-work defense if their Tor version supports it. No code behavior changes.

Lower-prioritytor: enable PoW defenses for automatically created hidden servicesby Vasil Dimov · 4c6798a3 · Feb 19, 2026 · 3 filesMessage 86 · StrongInformational 23Details
Commit message · Vasil Dimov

tor: enable PoW defenses for automatically created hidden services

Enable PoW defenses [1] for hidden services that we create via
Tor Control using the `ADD_ONION` command [2].

The ability to do that has been added in tor-0.4.9.2-alpha [3]. Previous
versions return a syntax error to the `ADD_ONION` command with
`PoWDefensesEnabled=1`, so the approach here is to try with PoW and if
we get syntax error, then retry without PoW.

[1] https://tpo.pages.torproject.net/onion-services/ecosystem/technology/security/pow/
[2] https://spec.torproject.org/control-spec/commands.html#add_onion
[3] https://gitlab.torproject.org/tpo/core/tor/-/commit/02c18044464bfe45f168b55297a785244094cfd5

86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
AI analysis · Informational 23/100

This change makes Bitcoin Core nodes that advertise themselves as hidden services on the Tor network ask Tor to enable a built-in anti-spam feature called 'Proof-of-Work defenses' when creating those hidden services. If the installed Tor version is too old to understand that option, the code falls back to creating the hidden service without it. It is a hardening improvement, not a fix for an active vulnerability in Bitcoin Core itself.

Lower-prioritytor, fuzz: reuse constants instead of duplicatingby Vasil Dimov · fb993f76 · Feb 19, 2026 · 3 filesMessage 90 · StrongInformational 15Details
Commit message · Vasil Dimov

tor, fuzz: reuse constants instead of duplicating

`src/torcontrol.cpp` used to define some constants that are used
explicitly in `src/torcontrol.cpp` and implicitly in
`src/test/fuzz/torcontrol.cpp` by duplicating their values.

Move the constants to `src/torcontrol.h` and reuse them in
`src/test/fuzz/torcontrol.cpp` to avoid duplication and magic
numbers.

90/100 · StrongMessage clarity
✓ 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
fuzzing or regression evidence
AI analysis · Informational 15/100

This is a minor code cleanup change. It moves two Tor status code numbers (250 for OK, 510 for unrecognized command) from one file to a shared header so both the main program and a test fuzzer use the same named constants instead of hard-coding the numbers twice. There is no security fix here and no behavior change.

Lower-priorityAdd a "tx output spender" indexby sstone · 3d82ec5b · Feb 19, 2026 · 18 filesMessage 68 · AdequateInformational 23Details
Commit message · sstone

Add a "tx output spender" index

Adds an outpoint -> txid index, which can be used to find which transactions spent a given output.
We use a composite key with 2 parts (suggested by @romanz): hash(spent outpoint) and tx position, with an empty value.
To find the spending tx for a given outpoint, we do a prefix search (prefix being the hash of the provided outpoint), and for all keys that match this prefix
we load the tx at the position specified in the key and return it, along with the block hash, if does spend the provided outpoint.
To handle reorgs we just erase the keys computed from the removed block.

This index is extremely useful for Lightning and more generally for layer-2 protocols that rely on chains of unpublished transactions.
If enabled, this index will be used by `gettxspendingprevout` when it does not find a spending transaction in the mempool.

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

This commit adds a new optional Bitcoin Core index called the transaction output spender index. When enabled with -txospenderindex=1, it records which transaction spent a given output, allowing the gettxspendingprevout RPC to find confirmed spending transactions, not just mempool ones. It is a feature addition, not a security fix, and does not by itself create a vulnerability. The main security-relevant consideration is that it increases disk and memory use, requires disabling pruning, and exposes more historical chain data through RPC.

Lower-priorityci: Enable `wallet_multiwallet.py` in "Windows, test cross-built" jobby Hodlinator · c2e28d45 · Feb 19, 2026 · 1 fileMessage 87 · StrongInformational 15Details
Commit message · Hodlinator

ci: Enable `wallet_multiwallet.py` in "Windows, test cross-built" job

Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>

87/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit simply re-enables an automated test (wallet_multiwallet.py) in the Windows cross-build continuous integration job. It removes the temporary exclusion that was put in place while a bug was being fixed. There is no change to Bitcoin Core's actual wallet code, network code, or consensus logic, so it does not affect users' funds, node security, or network behavior.