BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

252security candidates603second-pass queue709AI analyses
210commits · 30 days
491commits · 60 days
1521commits · 180 days
2876commits · 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
915Strong · 80–100
1187Adequate · 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 Poinsot2246170
Ava Chow15649123064
MarcoFalke4062170074
Lőrinc1772139081
fanquake2271923057
Hennadii Stepanov2081432063
rkrux57944074
Sjors Provoost89815074
Sebastian Falbesoner33713073
David Gumberg55637072
Pieter Wuille9556066
Hodlinator66517076
Analysis record

Published AI watches

Last scanned 43 minutes ago

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 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci, iwyu: Enforce warning-free `src/common`

This is a routine code cleanup commit. It adjusts which C++ header files are included in the `src/common` part of Bitcoin Core so that an automated tool called Include What You Use (IWYU) reports no warnings. It also tells the continuous i…

50145f62by Hennadii Stepanov+75−3822 files
No security note in commit
Informational 20 AI analysisMessage 73 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

wallet: Remove meaningless bool fallback in FundTransaction

This commit removes an old backward-compatibility feature in Bitcoin Core's wallet RPC command `fundrawtransaction`. Previously, callers could pass a plain `true` or `false` as the second argument, which was silently ignored. Now, passing …

Removal of a no-op backward-compatibility code path that silently accepted arbitrary boolean valuesStricter RPC input validation: bare booleans now rejected with a JSON type errorNo memory safety, cryptographic, or consensus changes observed
fa7fe798by MarcoFalke+60−652 files
No security note in commit
Informational 17 AI analysisMessage 45 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

gui: Menu action for exporting a watchonly wallet

This commit adds a new menu item in the Bitcoin Core desktop wallet that lets users export a 'watch-only' copy of their wallet. A watch-only wallet can see transactions and balances but cannot spend funds. The change only wires up an exist…

No security-relevant signals detected in the diffNew GUI feature exposing existing wallet export functionalityAction is disabled for wallets with private keys disabled
cb51f97fby Ava Chow+30−04 files
No security note in commit
Informational 19 AI analysisMessage 50 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

gui: Adds option to not load the wallet after migration

This commit adds a user-facing checkbox in the Bitcoin Core desktop wallet that lets someone choose whether to automatically load a wallet after migrating it from an older format. Previously the wallet was always loaded. The change is a us…

No security-relevant signal: change is a feature/usability additionNo memory safety, cryptographic, consensus, or network changesNo privilege boundary crossed
492a715dby Pol Espinasa+20−104 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Make all `const static` class members `constexpr`

This commit is a code cleanup that changes many internal class constants from 'static const' to 'static constexpr'. In modern C++, constexpr constants are automatically inlined and avoid certain linker errors when used in specific ways. Th…

05c35c40by rustaceanrob+38−4024 files
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

fuzz: populate wallet TXO index in wallet_create_transaction

This is a fix to a Bitcoin Core fuzz test (an automated testing harness), not to the main wallet code that real users run. The test was inserting fake wallet transactions in a way that skipped updating an internal index called m_txos. Beca…

Test-only change in fuzz harnessFixes internal test-state consistency, not production wallet behaviorNo validation, consensus, or P2P networking changes
1eac6a72by frankomosh+1−01 file
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

scripted-diff: Use long form of shell options in Guix scripts

This commit is a purely cosmetic change in Bitcoin Core's Guix build scripts. It replaces the short shell command 'set -e' with its long-form equivalent 'set -o errexit'. Both forms do exactly the same thing: they make the script exit imme…

2cb3bfa8by Hennadii Stepanov+6−66 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

guix: Add copyright headers to Guix scripts

This commit only adds or updates copyright and license header comments at the top of several helper scripts used for Bitcoin Core's Guix build process. It does not change any executable code, logic, or behavior. There is no security risk.

711eb10fby Hennadii Stepanov+20−27 files
No security note in commit
Low 28 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Squashed 'src/secp256k1/' changes from bd0287d650..d2d04864ef

This commit updates the secp256k1 cryptographic library inside Bitcoin Core to a newer version. The main change is adding support for a new optional feature called 'Silent Payments' (BIP352), which is a privacy-enhancing way to receive Bit…

New cryptographic module added (Silent Payments / BIP352)Field-element equality check magnitude bound corrected from 31 to 30X-only public key even-Y invariant enforced in extrakeys module
a33f2405by fanquake+13939−13434 files
No security note in commit
Informational 13 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ipc, refactor: Update mp::g_thread_context references

This is a small internal code cleanup in Bitcoin Core's inter-process communication (IPC) code. It replaces direct references to a global thread-local variable with a helper function so the code works around a compiler bug in Windows MinGW…

No security-relevant code change identifiedRefactor only: replaces direct global variable access with inline wrapperCommit message describes motivation as compiler compatibility, not security
d3d74e70by Ryan Ofsky+12−53 files
No security note in commit
Informational 15 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

scripted-diff: Use C.UTF-8 locale in Guix scripts

This commit is a routine cleanup that changes the locale setting in Bitcoin Core's Guix build scripts from the old ASCII-only 'C' locale to the modern 'C.UTF-8' locale. It is not a security fix and does not change any behavior that could b…

8916f796by Hennadii Stepanov+15−1515 files
No security note in commit
Informational 19 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

p2p: Assume v2transport for addresses from seeds

This change makes Bitcoin Core assume that hard-coded and DNS seed nodes support the newer BIP324 encrypted transport (v2) when first connecting. If the guess is wrong, the software falls back to the older v1 protocol automatically. It is …

Adds NODE_P2P_V2 to assumed service flags for seed-derived addressesFallback to v1 transport exists if the v2 assumption is wrongNo input validation, memory safety, or cryptographic changes
cf0f2aeaby Martin Zumsande+10−22 files
No security note in commit
Informational 16 AI analysisMessage 75 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

qt, test: Enable tests on macOS with `minimal` QPA plugin

This commit removes workarounds that skipped three Bitcoin Core Qt test suites on macOS when using the 'minimal' Qt platform plugin. The previous commit fixed the underlying crash cause, so these tests can now run. It is a test-infrastruct…

No security-relevant code change in the diff itselfReferences a prior crash fix, but this commit only removes test skipsNo input handling, cryptography, networking, consensus, or wallet logic modified
fd59d68cby Hennadii Stepanov+0−343 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: simplify adding SipHash-1-3-UJ

This is a code cleanup (refactor) that moves the internal SipHash mixing steps into shared helper methods. It does not change how Bitcoin hashes data, how many rounds are run, or any user-visible behavior. There is no security bug being fi…

25bfca06by Lőrinc+74−1222 files
No security note in commit
Informational 21 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

crypto: add generic SipHash-1-3-UJ

This commit adds a new, weaker variant of the SipHash algorithm inside Bitcoin Core's cryptography module. It is explicitly designed for low-security uses such as internal hash tables, not for protecting funds or network messages. The code…

New weaker cryptographic primitive added (SipHash-1-3 vs. standard SipHash-2-4)Explicit unpadded input design removes length-commitment paddingJumbo 256-bit blocks increase attacker control within a single round
c2d7931bby Pieter Wuille+103−02 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

bench: add fixed-width SipHash benchmarks

This commit only adds new performance benchmark tests for a hash function called SipHash. It does not change any production code that handles Bitcoin transactions, networking, or wallet data. There is no security issue here.

7ff55cc6by Lőrinc+49−31 file
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

crypto: add fixed-width SipHash-1-3-UJ

This commit adds two new shortcut methods for computing a specific SipHash variant on fixed-size inputs. It is a pure performance/ergonomics addition: the new methods copy the hasher's internal state before operating, so they do not alter …

a0ccd4adby Pieter Wuille+21−01 file
No security note in commit
Informational 15 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: add shared SipHash vectors

This commit only adds new test data and test code for the SipHash hashing function used in Bitcoin Core. It does not change any production code that handles transactions, networking, or wallets. The goal is to make sure the existing SipHas…

af50ba85by Lőrinc+797−237 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.

AI review queuedwallet: remove fUpdate argument from ScanForWalletTransactionsby rkrux · 6e796e1f · Apr 20, 2026 · 6 filesMessage 95 · StrongInformational 15Details
Commit message · rkrux

wallet: remove fUpdate argument from ScanForWalletTransactions

Only the unit test code passes false, the actual code passes
true always. I don't see a reason why the tests need to exercise
a behaviour that never happens in production.

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

This is a small code cleanup change in Bitcoin Core's wallet. It removes an optional argument called fUpdate from the ScanForWalletTransactions function because every real-world use passed true, while only test code ever passed false. The behavior in production is unchanged; the tests are simply adjusted to match the production behavior. There is no security issue here.

AI review queuedwallet: remove update argument from RescanFromTime methodby rkrux · 54e4c0be · Apr 20, 2026 · 3 filesMessage 50 · ThinInformational 15Details
Commit message · rkrux

wallet: remove update argument from RescanFromTime method

Its only usage passes true.

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

This is a small code cleanup change in Bitcoin Core's wallet code. It removes an unused option (the 'update' argument) from a method called RescanFromTime. The only place that called this method always passed 'true', so the developer simplified the code by hardcoding that value and removing the parameter. There is no security issue here.

AI review queuedChange CChain::Contains() to take referenceby optout · fe2d6e25 · Apr 20, 2026 · 12 filesMessage 80 · StrongLow 47Details
Commit message · optout

Change CChain::Contains() to take reference

The `CChain::Contains()` method dereferences its input without checking,
potentially resulting in nullptr-dereference if invoked with `nullptr`.
To avoid this possibility, its input is changed to a reference instead.
Call sites are adapted accoringly, extra nullptr-check is added as
needed.

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Low 47/100

This commit hardens a core Bitcoin method called CChain::Contains() so it can no longer be accidentally called with a null (missing) block pointer, which would crash the node. The change turns the method's input from a pointer into a reference, forcing every caller to prove the block exists before calling it. Several call sites were updated, and one place in startup index syncing now explicitly handles a missing block instead of silently passing a null pointer. It is a defensive fix that removes a class of potential null-dereference crashes, but the commit message does not frame it as a critical security vulnerability and no exploit is demonstrated.

AI review queuedtest: interface_http follow-upsby Matthew Zipkin · f49a2afd · Apr 17, 2026 · 1 fileMessage 80 · StrongTriage 0Details
Commit message · Matthew Zipkin

test: interface_http follow-ups

- Only one node needed for test
- Use ascii encoding instead of utf-8
- Make tests independent of each other
- Expect HTTP error code 413 for too-large request
- Clarify python client race condition in comment

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI review queuedwallet, bdbro: Validate btree page levelsby Ava Chow · b2de59d4 · Apr 16, 2026 · 2 filesMessage 68 · AdequateModerate 59Details
Commit message · Ava Chow

wallet, bdbro: Validate btree page levels

BTree pages contain the level in the BTree that the page is supposed to
be at. The root starts at some level between 1 and 255, leaves are
always level 1. Internal pages must be a level that is one less than its
parent. Validating that pages are at their expected level (except for
the root page) enforces that no cycles can occur.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validationsigning or wallet pathparser or protocol pathsecond-pass: near security thresholdsecond-pass: security-sensitive path
AI analysis · Moderate 59/100

This change adds a safety check while reading old Berkeley DB (BDB) wallet files during migration. It verifies that each page in the database's tree structure is at the expected depth level, which prevents malformed or attacker-crafted files from causing infinite loops or confusion during wallet import. The patch is defensive hardening rather than a fix for an active exploit, and it includes a new fuzz-test error path so the security check can be automatically exercised.

AI review queuedtest: Remove unused create_coinbase importsby MarcoFalke · fab35205 · Apr 16, 2026 · 17 filesMessage 67 · AdequateInformational 15Details
Commit message · MarcoFalke

test: Remove unused create_coinbase imports

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only removes unused 'create_coinbase' import statements from 17 Bitcoin Core test files. It is a routine code cleanup with no effect on the actual Bitcoin node software or its security.

AI review queuedscripted-diff: Use new create_block height optionby MarcoFalke · fad6deb3 · Apr 16, 2026 · 22 filesMessage 78 · AdequateInformational 15Details
Commit message · MarcoFalke

scripted-diff: Use new create_block height option

-BEGIN VERIFY SCRIPT-

# Replace single-arg create_coinbase calls ...
# ... followed by ntime arg
sed --in-place --regexp-extended 's/create_block\((.+), create_coinbase\(([^,]+)\), /create_block(\1, height=\2, ntime=/g' $( git grep -l 'create_block(' )
# ... not followed by any other args
sed --in-place --regexp-extended 's/create_block\((.+), create_coinbase\(([^,]+)\)\)/create_block(\1, height=\2)/g' $( git grep -l 'create_block(' )

-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: unusually broad changesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a purely mechanical update to Bitcoin Core's internal test suite. It changes how test scripts call a helper function named create_block, switching from passing a pre-built coinbase transaction to passing just the block height and letting the helper build the coinbase internally. No production code, consensus rules, or network behavior are modified. There is no security relevance.

AI review queuedkernel: build: remove unused serfloat dependencyby Sebastian Falbesoner · 49895b9c · Apr 14, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Sebastian Falbesoner

kernel: build: remove unused serfloat dependency

The serfloat module is only used for fee estimation, which is not
included in the bitcoinkernel library, so the dependency can be removed.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
documentation-only discountsecond-pass: broader security terminology
AI review queuedcontrib: Fix NameError in signet miner gbt()by Torkel Rogstad · 701bc2dc · Apr 10, 2026 · 1 fileMessage 68 · AdequateInformational 19Details
Commit message · Torkel Rogstad

contrib: Fix NameError in signet miner gbt()

The logging.warning call referenced `bci["bestblockhash"]`, a variable
from the calling scope `do_generate()` that is not available inside the
`Generate.gbt()` method. This would crash with a NameError when
getblocktemplate returned a template based on an unexpected previous
block.

Use the `bestblockhash` parameter that was already being passed in and
used correctly in the comparison on the line above.

The bug was introduced in 7b31332370 when the gbt logic was extracted
into its own method — the if-condition was updated but the logging
call was not.

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: broader security terminologysecond-pass: security-sensitive path
AI analysis · Informational 19/100

This is a small bug fix in a helper signet mining script. The script would crash with a NameError when it tried to log a warning about an unexpected previous block, because it referenced a variable that only existed in the calling function. The fix uses the correct variable that was already passed into the method. It is a straightforward coding mistake with no security exploit.

AI review queuedopt: Skip UTXOs with worse waste, same eff_valueby Murch · 7249b376 · Apr 9, 2026 · 2 filesMessage 80 · StrongInformational 15Details
Commit message · Murch

opt: Skip UTXOs with worse waste, same eff_value

When two successive UTXOs differ in waste but match in effective value,
we can skip the second if the first is not selected, because all input
sets we can generate by swapping out a less wasteful UTXOs with a more
wastefull UTXO of matching effective value would be strictly worse.

Also expand documentation of Branch and Bound.

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a routine optimization to Bitcoin Core's coin-selection algorithm. It makes the wallet skip more redundant combinations when choosing which coins to spend, slightly reducing the number of attempts the algorithm tries. There is no security issue here.

AI review queuedopt: Skip evaluation of equivalent input setsby Murch · 52042918 · Apr 9, 2026 · 2 filesMessage 80 · StrongInformational 15Details
Commit message · Murch

opt: Skip evaluation of equivalent input sets

When two successive UTXOs match in effective value and weight, we can
skip the second if the prior is not selected: adding it would create an
equivalent input set to a previously evaluated.

E.g. if we have three UTXOs with effective values {5, 3, 3} of the same
weight each, we want to evaluate
{5, _, _}, {5, 3, _}, {5, 3, 3}, {_, 3, _}, {_, 3, 3},
but skip {5, _, 3}, and {_, _, 3}, because the first 3 is not selected,
and we therefore do not need to evaluate the second 3 at the same
position in the input set.

If we reach the end of the branch, we must SHIFT the previously selected
UTXO group instead.

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a pure performance optimization for Bitcoin Core's coin selection algorithm. It avoids re-evaluating equivalent combinations of coins when choosing which inputs to include in a transaction. There is no security vulnerability being fixed here.

AI review queuedcoinselection: Track effective_value lookaheadby Murch · ba1807b9 · Apr 9, 2026 · 3 filesMessage 58 · ThinInformational 20Details
Commit message · Murch

coinselection: Track effective_value lookahead

Introduces a dedicated data structure to track the total
effective_value available in the remaining UTXOs at each index of the
UTXO pool. In contrast to the original approach in BnB, this allows us
to immediately jump to a lower index instead of visiting every UTXO to
add back their eff_value to the lookahead.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 20/100

This commit is a performance optimization to Bitcoin Core's coin-selection algorithm. It pre-computes a running total ('lookahead') of remaining coin values so the Branch-and-Bound search can skip dead-end branches faster. The change is purely algorithmic and does not appear to introduce or fix a security vulnerability. Test expectations are updated only to reflect fewer search attempts.

AI review queuedcoinselection: BnB skip exploring high wasteby Murch · fa226ab9 · Apr 9, 2026 · 2 filesMessage 80 · StrongInformational 19Details
Commit message · Murch

coinselection: BnB skip exploring high waste

At high feerates adding more inputs will increase the waste score. If
the current waste is already higher than the best selection’s we cannot
improve upon the best selection. All solutions that include the current
selection with more additional inputs must be worse than the best
selection so far: SHIFT

This optimization only works at high feerates, because at low feerates,
adding more inputs decreases waste, so this condition would exit
prematurely. We would never attempt input sets with higher weight than
the prior best selection, even though we would prefer those at low
feerates.

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100

This commit is a performance optimization for Bitcoin Core's coin selection algorithm. It teaches the Branch-and-Bound (BnB) coin picker to skip exploring input combinations that are guaranteed to be worse at high transaction fees. It does not fix a security vulnerability, crash, or consensus bug. The change could theoretically affect which coins are selected for a transaction, but only in a way that is intended to preserve the existing best-choice behavior while doing less work.

AI review queuedcoinselection: Track whether BnB completedby Murch · 7ecea1dc · Apr 9, 2026 · 1 fileMessage 68 · AdequateLow 26Details
Commit message · Murch

coinselection: Track whether BnB completed

BnB may not be able to exhaustively search all potentially interesting
combinations for large UTXO pools, so we keep track of whether the
search was terminated by the iteration limit.

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

This commit changes how Bitcoin Core's coin-selection algorithm tracks whether it finished its search. Previously, the code created the result object after the loop, so it could not record whether the Branch-and-Bound (BnB) search hit its iteration limit or completed the full search. The patch moves the result object earlier and marks it 'completed' or 'not completed' inside the loop. This is a correctness/observability improvement for fee estimation and coin-selection diagnostics, not a direct fix for a remote exploit. It could matter for security indirectly: if BnB aborts early, the wallet may fall back to a less optimal selection, possibly paying higher fees or creating larger change, but there is no evidence in the commit of a vulnerability being disclosed or exploited.

AI review queuedcoinselection: rewrite BnB in CoinGrinder-styleby Murch · 3ca0f361 · Apr 9, 2026 · 3 filesMessage 78 · AdequateInformational 22Details
Commit message · Murch

coinselection: rewrite BnB in CoinGrinder-style

In the original implementation of BnB, the state of the search is
backtracked by explicitly walking back to the omission branch and then
testing again. This retests an equivalent candidate set as before, e.g.,
after backtracking from {ABC}, it would evaluate {AB_}, before trying
{AB_D}, but {AB_} is equivalent to {AB} which was tested before.

CoinGrinder tracks the state of the search instead by remembering which
UTXO was last added and explicitly shifting from that UTXO directly to
the next, so after {ABC}, it will immediately move on to {AB_D}. We
replicate this approach here.

The description of the two optimizations is removed from the
documentation as they will only be implented in a later commit.

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

This commit rewrites an internal Bitcoin wallet algorithm called Branch-and-Bound (BnB) coin selection so it works more like another existing algorithm, CoinGrinder. The change removes two documented speed optimizations (lookahead pruning and skipping equivalent input sets) and adjusts how the search backtracks. It is a code-quality/refactoring change in wallet coin selection, not a consensus or networking change. There is no indication in the commit that this fixes a security vulnerability.

AI review queuedcoinselection: Track BnB iteration count in resultby Murch · 2e737398 · Apr 9, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Murch

coinselection: Track BnB iteration count in result

The expected iteration count demonstrates how the following improvements
reduce iterations will help catch any regressions in the future.

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 commit only adds an internal counter that records how many candidate combinations the coin-selection algorithm examined before picking inputs for a Bitcoin transaction. It does not change how coins are actually selected, nor does it alter any network, wallet, or consensus behavior. It is a test/observability change with no security impact.

AI review queuedcoinselection: Tiebreak SRD eviction by weightby Murch · eff9e798 · Apr 9, 2026 · 2 filesMessage 60 · AdequateInformational 19Details
Commit message · Murch

coinselection: Tiebreak SRD eviction by weight

When UTXOs tie in effective value, prefer keeping the lower weight UTXO.

Co-authored-by: Yancy <github@yancy.lol>

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 19/100

This is a small improvement to how Bitcoin Core's wallet picks which coins to spend. When two coins are equally valuable for making a payment, the code now prefers the lighter-weight one, which saves on transaction fees. It is not a security fix and does not create a known vulnerability.

AI review queuedcoins: add explicit `CoinsViewEmpty` noop backendby Lőrinc · b637566c · Apr 8, 2026 · 15 filesMessage 80 · StrongInformational 15Details
Commit message · Lőrinc

coins: add explicit `CoinsViewEmpty` noop backend

Introduce `CoinsViewEmpty` as an explicit no-op `CCoinsView` implementation, and define its singleton accessor out of line in `coins.cpp` to avoid `-Wunique-object-duplication` in shared-library builds.`
Use it at call sites that intentionally want a no-op backend instead of constructing anonymous placeholder views.

`CCoinsViewTest` and `CoinsViewBottom` now inherit defaults from `CoinsViewEmpty` (e.g. the unused `EstimateSize()`, which now returns 0).

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

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a code cleanup and build-fix change. It introduces a single, shared 'empty' coins view object and replaces many places that created their own throwaway empty view. There is no security bug being fixed or introduced here; it only makes the code more consistent and avoids a compiler warning in shared-library builds.

AI review queuedtest: Add SRD maximum weight testsby Murch · 858a0a9c · Apr 7, 2026 · 2 filesMessage 90 · StrongInformational 15Details
Commit message · Murch

test: Add SRD maximum weight tests

Also:
- Add weight check to Success cases.

Per the introduction of TRUC transactions, it is more likely that we
will attempt to build transactions of limited weight (e.g., TRUC child
transactions may not exceed 4000 WU). When SRD exceeds the input weight
limit, it evicts the OutputGroup with the lowest effective value before
selecting additional UTXOs: we test that SRD will find a solution that
depends on the eviction working correctly, and that it fails as expected
when no solution is possible.

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds and reorganizes automated tests for the wallet's coin-selection algorithm. It does not change any production code that handles Bitcoin transactions, keys, networking, or consensus rules. There is no security vulnerability here.

AI review queuedtest: Rework SRD insufficient balance testby Murch · 2840f041 · Apr 7, 2026 · 2 filesMessage 90 · StrongInformational 15Details
Commit message · Murch

test: Rework SRD insufficient balance test

This refactor is part of the effort to move the coin selection tests to
a framework that can use non-zero, realistic feerates. The insufficient
funds failure case is extended with a few additional similar variants of
the failure.

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes test code for Bitcoin Core's coin selection logic. It moves and expands tests that check what happens when a wallet doesn't have enough funds to make a transaction. No production wallet code is changed, so this cannot directly affect real users' funds or transaction behavior.

AI review queuedTest: Add new minimum to tested feeratesby Murch · 64ab9746 · Apr 7, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Murch

Test: Add new minimum to tested feerates

The default minimum feerate was lowered from 1000 s/kvB to 100 s/kvB.
This adjusts the set of feerates used in the tests to accommodate that
new feerate and to cover other potential special cases:
- zero: 0 s/kvB
- minimum non-zero s/kvB: 1 s/kvB
- just below the new default minimum feerate: 99 s/kvB
- new default minimum feerate: 100 s/kvB
- old default minimum feerate: 1000 s/kvB
- a few non-round realistic feerates around default minimum feerate,
dust feerate, and default LTFRE: 315 s/kvB, 2345 s/kvB, and
10'292 s/kvB
- a high feerate that has been exceeded occassionally: 59'764 s/kvB
- a huge feerate that is extremely uncommon: 1'500'000 s/kvB

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes test code. It updates the list of transaction fee rates used in wallet coin-selection unit tests to reflect a recent lowering of Bitcoin Core's default minimum fee rate and to cover more edge cases. No production code is modified, so this has no direct security impact on running Bitcoin nodes or wallets.

AI review queuedtest: Init coin selection params with feerateby Murch · 65900f8d · Apr 7, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Murch

test: Init coin selection params with feerate

The most frequent change to CoinSelectionParams so far seems to be
amendments to the feerate, and the feerate propagates to other members
of the CoinSelectionParams, so we add it as an input parameter.

This also adds the CoinSelectionParams to the BnBFail tests, which
previously were always run with the default CoinSelectionParams.

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes Bitcoin Core's internal coin-selection unit tests. It refactors how test parameters are initialized so that the fee rate can be passed in directly, and it makes sure one group of failure tests uses the same parameters as the rest of the test loop. There is no change to production wallet code, network behavior, or consensus rules, and no security issue is introduced or fixed.

AI review queuedrefactor(test): Only specify TestChain100Setup in test casesby Hodlinator · 9ee77701 · Apr 7, 2026 · 3 filesMessage 87 · StrongInformational 15Details
Commit message · Hodlinator

refactor(test): Only specify TestChain100Setup in test cases

Reduces risk for accidental use of costly TestChain100Setup in later added test cases.

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
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a test-only code cleanup. It moves the setup of a shared test fixture from the entire test suite down to individual test cases, so future tests added to these files won't automatically inherit an expensive 100-block chain setup unless they actually need it. There is no change to production Bitcoin Core code, no bug fix, and no security vulnerability.

AI review queuedtest: prep manual equality assert conversionsby Lőrinc · dcd90fbe · Apr 7, 2026 · 16 filesMessage 90 · StrongInformational 15Details
Commit message · Lőrinc

test: prep manual equality assert conversions

The later scripted diff only handles plain `assert x == y` lines.
Some remaining tests still use equality inside comprehensions, parenthesized asserts, and other shapes that the line-based rewrite would misread.
Rewrite those sites by hand first so the later mechanical conversion stays safe.
The commit also simplifies the dead `len(["errors"]) == 0` branch in `blocktools.py`, which can never be true.

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes Bitcoin Core's internal test code. It rewrites some test assertions by hand so that a later automated cleanup can safely convert them. There is no change to the actual Bitcoin node software that users run, so it cannot affect live wallets, transactions, or network security.

AI review queuedtest: split equality asserts joined by `and`by Lőrinc · 4f4516e3 · Apr 7, 2026 · 3 filesMessage 90 · StrongInformational 15Details
Commit message · Lőrinc

test: split equality asserts joined by `and`

Some tests combine multiple equality checks in one `assert`.
Split those checks into separate assertions so failures point at the exact mismatch.
This also removes mixed `==` expressions that the later cleanup should not touch.

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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only changes Bitcoin Core's internal test code. It splits combined `assert` statements into separate assertions so that when a test fails, the error message points to the exact condition that failed. There is no change to the actual Bitcoin node software that users run, and no security vulnerability is being fixed.