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
192commits · 30 days
487commits · 60 days
1506commits · 180 days
2875commits · 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 22 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.

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

scripted-diff: refactor: wallet: Delete IsCrypted

This function is a duplicate of HasEncryptionKeys().

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

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

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

Lower-prioritytest: Add unit test for SCRIPT_ERR_NUMEQUALVERIFYby billymcbip · b7625387 · Dec 24, 2025 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · billymcbip

test: Add unit test for SCRIPT_ERR_NUMEQUALVERIFY

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit adds a single new test case to Bitcoin Core's script test suite. It checks that when two unequal numbers are compared with the NUMEQUALVERIFY opcode, the script correctly fails with the expected error code. There is no change to production code, no bug fix, and no security-relevant behavior change.

Lower-priority[kernel] Expose reusable PrecomputedTransactionData in script validby Josh Doman · 44e006d4 · Dec 23, 2025 · 4 filesMessage 50 · ThinInformational 19Details
Commit message · Josh Doman

[kernel] Expose reusable PrecomputedTransactionData in script valid

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

This commit refactors the Bitcoin Core kernel library's script verification API so that callers can create and reuse a 'PrecomputedTransactionData' object across multiple input checks for the same transaction. Previously, the API accepted the raw spent outputs each time and internally recomputed transaction hashes. The change is a performance and API-cleanliness improvement; it does not appear to fix a security bug, but it does slightly alter how taproot spent-output requirements are enforced.

Lower-prioritytest: Avoid hard time.sleep(1) in feature_init.pyby MarcoFalke · fa727e3e · Dec 23, 2025 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · MarcoFalke

test: Avoid hard time.sleep(1) in feature_init.py

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit changes only a test file in Bitcoin Core. It replaces a fixed one-second sleep with a smarter wait that pauses until a specific RPC command is actually running. There is no change to production code, no security fix, and no vulnerability.

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

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

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

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

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

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

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

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

Massif memory measurements after show 0.8 MB peak memory usage

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

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

Co-authored-by: optout21 <13562139+optout21@users.noreply.github.com>
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>

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

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

Lower-prioritybench: make `MerkleRoot` benchmark more representativeby Lőrinc · 7fd47e0e · Dec 23, 2025 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Lőrinc

bench: make `MerkleRoot` benchmark more representative

Two versions are run now, one with the mutation calculations, the other without.
To avoid unwanted compiler optimizations, we assert the expected hash, which should inhibit aggressive optimization.

To make the benchmark more similar to production `ComputeMerkleRoot` call sites, the input leaves-copying is made explicit before each run.

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

| ns/leaf | leaf/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 44.18 | 22,634,858.70 | 0.0% | 1.10 | `MerkleRoot`
| 44.66 | 22,390,601.03 | 0.0% | 1.10 | `MerkleRootWithMutation`

Massif memory measurements show the excessive memory reservations:

MB
1.332^ :
| # :
| # :
| # :
| # :
| # @ :
| # @ :
| # @ :
| # @ :
| # @ :
| # @ :
| # @ :
| # @ :
| #::::@::::::::::::::::::::::::::::::::::::::::::::::::::::::@:::::@::::
| #: ::@::::: :::::::: :: ::: :::::: : : :: ::: ::: : : : ::::@:::::@::::
| #: ::@::::: :::::::: :: ::: :::::: : : :: ::: ::: : : : ::::@:::::@::::
| #: ::@::::: :::::::: :: ::: :::::: : : :: ::: ::: : : : ::::@:::::@::::
| #: ::@::::: :::::::: :: ::: :::::: : : :: ::: ::: : : : ::::@:::::@::::
| #: ::@::::: :::::::: :: ::: :::::: : : :: ::: ::: : : : ::::@:::::@::::
| #: ::@::::: :::::::: :: ::: :::::: : : :: ::: ::: : : : ::::@:::::@::::
0 +----------------------------------------------------------------------->s
0 226.2

showing the reallocations clearly in the stacks:
97.87% (1,366,841B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->41.25% (576,064B) 0x969717: allocate (new_allocator.h:151)
| ->41.25% (576,064B) 0x969717: allocate (allocator.h:203)
| ->41.25% (576,064B) 0x969717: allocate (alloc_traits.h:614)
| ->41.25% (576,064B) 0x969717: _M_allocate (stl_vector.h:387)
| ->41.25% (576,064B) 0x969717: _M_realloc_append<const uint256&> (vector.tcc:572)
| ->41.25% (576,064B) 0x969717: push_back (stl_vector.h:1427)
| ->41.25% (576,064B) 0x969717: ComputeMerkleRoot(std::vector<uint256, std::allocator<uint256> >, bool*) (merkle.cpp:55)
| ->41.25% (576,064B) 0x2235A7: operator() (merkle_root.cpp:31)
| ->41.25% (576,064B) 0x2235A7: ankerl::nanobench::Bench& ankerl::nanobench::Bench::run<MerkleRoot(ankerl::nanobench::Bench&)::{lambda()

Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This change only updates an internal performance benchmark for the Merkle root calculation. It does not alter the actual Bitcoin consensus or networking code that runs on nodes, so it cannot directly affect security, funds, or network behavior.

Security candidatetest: Allow mempool_updatefromblock.py to run on 32-bitby MarcoFalke · fac5a1b1 · Dec 22, 2025 · 2 filesMessage 72 · AdequateInformational 15Details
Commit message · MarcoFalke

test: Allow mempool_updatefromblock.py to run on 32-bit

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

This commit only changes a test script and a CI configuration file. It makes a functional test more tolerant of minor differences on 32-bit ARM systems and enables functional tests to run in the ARM CI environment. There is no change to the actual Bitcoin node software that users run, so it cannot affect live funds, network consensus, or node security.

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

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

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

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

Lower-priority[qt] Set peer version and subversion to N/A when not available or detectingby WakeTrainDev · b261100e · Dec 21, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · WakeTrainDev

[qt] Set peer version and subversion to N/A when not available or detecting

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

This is a tiny user-interface fix in Bitcoin Core's Qt wallet. When viewing details about a connected network peer, the version and subversion fields now show 'N/A' if the information isn't available, instead of leaving the field blank. It does not change network behavior, consensus rules, or security-sensitive logic.

Lower-prioritykernel: Move BlockInfo to a kernel fileby TheCharlatan · d3a479cb · Dec 21, 2025 · 5 filesMessage 68 · AdequateInformational 15Details
Commit message · TheCharlatan

kernel: Move BlockInfo to a kernel file

This should avoid having to include interfaces/chain.h from a kernel
module. interfaces/chain.h in turn includes a bunch of non-kernel
headers, that break the desired library topology and might introduce
entanglement regressions.

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

This is a routine code reorganization change. It moves a data structure called BlockInfo from one internal header file to another so that lower-level 'kernel' modules do not need to include a higher-level interface header. There is no user-facing behavior change and no security fix.

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

kernel: Remove some unnecessary non-kernel includes

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

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

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

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

Lower-priorityadd release note about supporing non-TRUC <minrelay txnsby Greg Sanders · e44dec02 · Dec 19, 2025 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Greg Sanders

add release note about supporing non-TRUC <minrelay txns

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 adds a release note describing a previously implemented policy change. It does not change any code, configuration, or behavior. There is no security issue in the commit itself.

Security candidatedoc: Use multipath descriptors in descriptors.md and linked testby Anurag chavan · 552bc82b · Dec 19, 2025 · 2 filesMessage 91 · StrongInformational 15Details
Commit message · Anurag chavan

doc: Use multipath descriptors in descriptors.md and linked test

Updates documentation and wallet_miniscript_decaying_multisig_descriptor_psbt.py
to use single multipath descriptors with <0;1> syntax instead of separate
external/internal descriptors.

Changes:
- doc/descriptors.md: Update examples to use /<0;1>/* multipath syntax with /0 and /1 notation
- doc/descriptors.md: Update Basic Multisig Example instructions
- test: Refactor to use single multipath descriptor pattern, matching wallet_multisig_descriptor_psbt.py

Implementation:
- _get_xpub() extracts external descriptor and converts to multipath format
- create_multisig() builds descriptor string, gets checksum, imports descriptor#checksum
- Multipath descriptor properly expands to external and internal/change descriptors

Fixes #34086

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 15/100

This commit is a documentation and test-code cleanup only. It updates Bitcoin Core's descriptor documentation and one functional test to use the newer 'multipath' descriptor syntax (/<0;1>/*) so a single descriptor can describe both receiving and change addresses, instead of maintaining two separate descriptors. There is no change to production wallet, consensus, or networking code, and no security fix or vulnerability is present.

Lower-priorityscripted-diff: [doc] Unify stale copyright headersby fanquake · 3e4765ee · Dec 19, 2025 · 1 fileMessage 83 · StrongInformational 15Details
Commit message · fanquake

scripted-diff: [doc] Unify stale copyright headers

-BEGIN VERIFY SCRIPT-

sed --in-place --regexp-extended \
's;( 20[0-2][0-9])(-20[0-2][0-9])? The Bitcoin Core developers;\1-present The Bitcoin Core developers;g' \
$( git grep -l 'The Bitcoin Core developers' -- ':(exclude)COPYING' ':(exclude)src/ipc/libmultiprocess' ':(exclude)src/minisketch' )

-END VERIFY SCRIPT-

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only updates a copyright notice in a single test file, changing the year range from '2020-2022' to '2020-present'. There is no code change, no functional change, and no security relevance.

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

contrib: remove copyright_header.py

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

This commit simply deletes a helper script used to manage copyright headers in source files, along with its documentation. It does not change any part of the Bitcoin Core software that handles transactions, networking, wallets, or consensus rules. There is no security issue here.

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

refactor: [rpc] Remove confusing and brittle integral casts

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100

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

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

rpc: [mempool] Remove erroneous Univalue integral casts

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

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

Security candidatemining: rename getCoinbaseTx() to ..RawTx()by Sjors Provoost · d59b4cdb · Dec 19, 2025 · 5 filesMessage 73 · AdequateInformational 15Details
Commit message · Sjors Provoost

mining: rename getCoinbaseTx() to ..RawTx()

This frees up the name getCoinbaseTx() for the next commit.

Changing a function name does not impact IPC clients, as they only
consider the function signature and sequence number.

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 15/100

This commit simply renames a function from getCoinbaseTx() to getCoinbaseRawTx() across the codebase, including documentation, interface definitions, IPC protocol files, implementation, and tests. It is a preparatory refactoring change with no functional or security impact.

Lower-priorityrefactor: Use uint64_t over size_t for serialize corruption check in fees.datby MarcoFalke · fa1d17d5 · Dec 19, 2025 · 1 fileMessage 62 · AdequateInformational 15Details
Commit message · MarcoFalke

refactor: Use uint64_t over size_t for serialize corruption check in fees.dat

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 is a one-line type change in Bitcoin Core's fee estimation data reader. It changes two local variables from 'size_t' (whose size varies by platform) to 'uint64_t' (a fixed 64-bit type) when reading the fees.dat file. The stated purpose is to make a serialization corruption check more consistent across platforms. There is no direct evidence in the commit of an exploitable vulnerability, and the change appears defensive/refactoring in nature.

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

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

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

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

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

97/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

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

Lower-priorityFix compilation for old Boost versionsby Lőrinc · fd9f1acc · Dec 18, 2025 · 2 filesMessage 76 · AdequateInformational 15Details
Commit message · Lőrinc

Fix compilation for old Boost versions

Fixes https://github.com/bitcoin/bitcoin/issues/34101 by reverting `boost::multi_index::contains` calls only available in Boost 1.78.0

76/100 · AdequateMessage clarity
✓ 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 straightforward build-compatibility fix. It replaces two newer Boost library function calls (`contains`) with older, equivalent alternatives (`find == end` and `count`) so Bitcoin Core can compile against Boost versions older than 1.78.0. There is no change to program logic, behavior, or security.

Lower-priorityclusterlin: randomize equal-feerate parts of linearization (privacy)by Pieter Wuille · 5ce28007 · Dec 18, 2025 · 2 filesMessage 78 · AdequateLow 28Details
Commit message · Pieter Wuille

clusterlin: randomize equal-feerate parts of linearization (privacy)

This places equal-feerate chunks (with no dependencies between them) in random
order in the linearization output, hiding information about DepGraph insertion
order from the output. Likewise, it randomizes the order of transactions within
chunks for the same reason.

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
AI analysis · Low 28/100

This commit changes how Bitcoin Core orders transactions when grouping them into blocks or processing clusters. Previously, when several transaction groups had the same fee rate and no dependencies, the order was predictable based on internal data structures. Now the order is randomized. The stated goal is to hide information about the order in which transactions were inserted into the system, improving privacy by making it harder for observers to infer internal state from the final output.

Lower-priorityclusterlin: drop support for improvable chunking (simplification)by Pieter Wuille · 75bdb925 · Dec 18, 2025 · 4 filesMessage 73 · AdequateInformational 14Details
Commit message · Pieter Wuille

clusterlin: drop support for improvable chunking (simplification)

With MergeLinearizations() gone and the LIMO-based Linearize() replaced by SFL, we do not
need a class (LinearizationChunking) that can maintain an incrementally-improving chunk
set anymore.

Replace it with a function (ChunkLinearizationInfo) that just computes the chunks as
SetInfos once, and returns them as a vector. This simplifies several call sites too.

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

This commit is a routine internal code cleanup in Bitcoin Core's transaction graph (mempool) linearization logic. It removes a more complex class (LinearizationChunking) that supported incremental updates and replaces it with a simpler function (ChunkLinearizationInfo) that computes chunk information once. There is no indication of a security bug, vulnerability, or behavior change affecting users or the network.

Lower-priorityclusterlin: replace cluster linearization with SFL (feature)by Pieter Wuille · 3efc94d6 · Dec 18, 2025 · 7 filesMessage 83 · StrongInformational 18Details
Commit message · Pieter Wuille

clusterlin: replace cluster linearization with SFL (feature)

This replaces the existing LIMO linearization algorithm (which internally uses
ancestor set finding and candidate set finding) with the much more performant
spanning-forest linearization algorithm.

This removes the old candidate-set search algorithm, and several of its tests,
benchmarks, and needed utility code.

The worst case time per cost is similar to the previous algorithm, so
ACCEPTABLE_ITERS is unchanged.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 18/100

This commit swaps out Bitcoin Core's old mempool cluster linearization algorithm (LIMO) for a new one called SFL (spanning-forest linearization). The change is described as a performance improvement, not a security fix. It removes a lot of old search-based code and tests, and temporarily relaxes one test assertion because the new algorithm does not yet guarantee the smallest possible number of chunks even when it finds an optimal ordering. The production code now always runs an extra post-processing step to keep chunks connected.

Security candidateclusterlin: randomize various decisions in SFL (feature)by Pieter Wuille · 13aad26b · Dec 18, 2025 · 3 filesMessage 90 · StrongInformational 19Details
Commit message · Pieter Wuille

clusterlin: randomize various decisions in SFL (feature)

This introduces a local RNG inside the SFL state, which is used to randomize
various decisions inside the algorithm, in order to make it hard to create
pathological clusters which predictably have bad performance.

The decisions being randomized are:
* When deciding what chunk to attempt to split, the queue order is
randomized.
* When deciding which dependency to split on, a uniformly random one is
chosen among those with higher top feerate than bottom feerate within
the chosen chunk.
* When deciding which chunks to merge, a uniformly random one among those
with the higher feerate difference is picked.
* When merging two chunks, a uniformly random dependency between them is
now activated.
* When making the state topological, the queue of chunks to process is
randomized.

90/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
Why it was queued
entropy or randomness
AI analysis · Informational 19/100

This commit adds randomness to an internal Bitcoin Core algorithm that orders groups of related transactions (clusters) for block inclusion. The goal is to prevent someone from deliberately crafting a cluster of transactions that would always trigger the worst-case performance of the algorithm. It is a hardening/performance improvement, not a fix for a vulnerability that steals funds or breaks consensus.