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 queue603AI analyses
210commits · 30 days
492commits · 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 Poinsot2245170
Ava Chow15649104064
MarcoFalke4062159074
Lőrinc1772136081
fanquake2271923057
Hennadii Stepanov2081427063
rkrux57944074
Sjors Provoost89813074
Sebastian Falbesoner33711073
David Gumberg55637072
Pieter Wuille9556066
Hodlinator66517076
Analysis record

Published AI watches

Last scanned 52 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 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
Informational 15 AI analysisMessage 95 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: wallet: BnB incomplete result on attempt-limit success

This commit adds a new unit test for Bitcoin Core's coin selection algorithm. It checks that when the Branch-and-Bound (BnB) search finds a usable coin selection early but then keeps searching for a better one until it hits the attempt lim…

6ee05c4bby Bruno Garcia+20−01 file
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.

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.

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.

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.

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.

Security candidatecontrib: output copyright in generate-seeds.pyby fanquake · 68a7cb8f · Dec 18, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · fanquake

contrib: output copyright in generate-seeds.py

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

This commit simply adds a standard copyright and license notice to the top of a generated source file. It is a legal/documentation change, not a security fix or code behavior change.

Security candidaterpc, doc: clarify the response of listtransactions RPCby rkrux · 1ed8e761 · Dec 18, 2025 · 2837 filesMessage 83 · StrongInformational 15Details
Commit message · rkrux

rpc, doc: clarify the response of listtransactions RPC

I noticed this behaviour while perf testing PR 27286 and it was not something
that I expected, updating the doc to make it present in the RPCHelp command.

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
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a documentation-only change for the Bitcoin Core RPC command `listtransactions`. The author noticed an unexpected behavior while testing another change and updated the help text so users can see it. No code behavior was changed, and there is no security fix or vulnerability here.

Security candidateci: Add IWYU jobby Hennadii Stepanov · 2c78814e · Dec 17, 2025 · 6 filesMessage 83 · StrongInformational 15Details
Commit message · Hennadii Stepanov

ci: Add IWYU job

The change in `src/crypto/hex_base.cpp` is because GCC 14 is not
affected by an IWYU bug.
See: https://github.com/include-what-you-use/include-what-you-use/issues/1763.

83/100 · StrongMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit adds a new automated CI (Continuous Integration) job that runs a tool called Include What You Use (IWYU) to check that source files include only the headers they actually need. It also makes minor supporting changes: adding a CI configuration, installing the IWYU tool, adjusting build scripts, adding a mapping file for IWYU, and removing an unused <tuple> header from one source file. There is no change to Bitcoin Core's runtime behavior, consensus rules, networking, wallet logic, or any user-facing functionality. It is purely a code-quality and tooling improvement.

Security candidatescripted-diff: [doc] Unify stale copyright headersby MarcoFalke · fa5f2977 · Dec 16, 2025 · 988 filesMessage 83 · StrongInformational 15Details
Commit message · MarcoFalke

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
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a bulk update of copyright notice years in source-code comments. It changes phrases like '2012-2022 The Bitcoin Core developers' to '2012-present The Bitcoin Core developers' across 988 files. There are no changes to program logic, no bug fixes, and no security-related code changes.

Security candidateci: Pin native tests on cross-builds to same commitby MarcoFalke · faa8ee62 · Dec 16, 2025 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · MarcoFalke

ci: Pin native tests on cross-builds to same commit

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

This commit changes Bitcoin Core's GitHub Actions CI workflow so that when a Windows cross-build job runs, a separate job records the exact commit ID being built, and the follow-on native Windows test job checks out that same recorded commit. This prevents a race condition where a new commit pushed during the cross-build could cause the native tests to run against different source code than what was compiled. It is a CI reliability improvement, not a security fix.

Security candidateguix: doc: Suggest guix-install.sh --uninstallby David Gumberg · ea1be386 · Dec 12, 2025 · 2817 filesMessage 45 · ThinInformational 15Details
Commit message · David Gumberg

guix: doc: Suggest guix-install.sh --uninstall

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit is a documentation-only change in the Bitcoin Core repository. It updates the Guix installation guide to suggest using the official uninstall flag when removing Guix. There is no change to any code that runs the Bitcoin network, wallet, or node software, and no security vulnerability is introduced or fixed.

Security candidateMerge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstateby Ava Chow · d155fc12 · Dec 11, 2025 · 2876 filesMessage 91 · StrongInformational 23Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#32414: validation: periodically flush dbcache during reindex-chainstate

c1e554d3e5834a140f2a53854018499a3bfe6822 refactor: consolidate 3 separate locks into one block (Andrew Toth)
41479ed1d23ea752d0ce14c2cf5627f43bceb722 test: add test for periodic flush inside ActivateBestChain (Andrew Toth)
84820561dcb2d156d1a1151a480fc1be6649cae4 validation: periodically flush dbcache during reindex-chainstate (Andrew Toth)

Pull request description:

After #30611 we periodically do a non-erasing flush of the dbcache to disk roughly every hour during IBD.
The intention was to also do this periodic flush during reindex-chainstate, so we would not risk losing progress during a system failure when reindexing with a high dbcache value.

It was discovered that reindex-chainstate does not perform a PERIODIC flush until it has already reached the tip. Since reindexing to tip usually happens within 24 hours, this behaviour was unnoticed with the previous periodic flush interval. Note that reindex-chainstate still does IF_NEEDED flushes during `ConnectBlock`, so this also would not be noticed when running with a lower dbcache value.

This patch moves the PERIODIC flush from after the outer loop in `ActivateBestChain` to inside the outer loop after we release `cs_main`. This will periodically flush during IBD, reindex-chainstate, and steady state.

ACKs for top commit:
l0rinc:
ACK c1e554d3e5834a140f2a53854018499a3bfe6822
achow101:
ACK c1e554d3e5834a140f2a53854018499a3bfe6822
sipa:
utACK c1e554d3e5834a140f2a53854018499a3bfe6822

Tree-SHA512: c447ad03e16c9978b8ed2c285b38e1b4c56e7778ab93b6f64435116f47b8931017f5f56ab53eb61656693146aaced776f666af573a41ab28e8f2b6d8657fa756

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
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol pathmerge-commit duplicate discount
AI analysis · Informational 23/100

This commit fixes a Bitcoin Core bug where the database cache (dbcache) was not being periodically saved to disk during the 'reindex-chainstate' operation. The intended behavior was to flush the cache roughly every hour to avoid losing progress if the system crashed. Because the flush only happened after reaching the tip, users running reindex-chainstate with a large dbcache could lose many hours of work on a crash. The patch moves the periodic flush inside the main loop so it actually occurs during reindexing, initial block download, and normal operation. It is a reliability/durability fix, not a remote-exploitable security vulnerability.

Security candidaterefactor: extract shared `SipHash` state into `SipHashState`by Lőrinc · 6eb5ba56 · Dec 9, 2025 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · Lőrinc

refactor: extract shared `SipHash` state into `SipHashState`

Split the repeated `SipHash` v[0..3] initialization into a small `SipHashState` helper that is used by both `CSipHasher` and `PresaltedSipHasher`.

Added explanatory comments to clarify behavior, documenting the equivalence of `PresaltedSipHasher` `operator()` overloads to `CSipHasher` usage.

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

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a straightforward code cleanup: it pulls the repeated starting-state setup for Bitcoin's SipHash implementation into a shared helper class called SipHashState. The actual math and behavior of the hash functions do not change. There is no security bug being fixed here.

Security candidateoptimization: migrate `SipHashUint256` to `PresaltedSipHasher`by Lőrinc · 9ca52a4c · Dec 9, 2025 · 8 filesMessage 73 · AdequateInformational 18Details
Commit message · Lőrinc

optimization: migrate `SipHashUint256` to `PresaltedSipHasher`

Replaces standalone `SipHashUint256` with an `operator()` overload in `PresaltedSipHasher`.
Updates all hasher classes (`SaltedUint256Hasher`, `SaltedTxidHasher`, `SaltedWtxidHasher`) to use `PresaltedSipHasher` internally, enabling the same constant-state caching optimization while keeping behavior unchanged.

Benchmark was also adjusted to cache the salting part.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This is a code cleanup and performance optimization change in Bitcoin Core. It replaces a standalone function called SipHashUint256 with a class method inside PresaltedSipHasher, and updates several hash helper classes to use the new method. The commit message and code comments explicitly state the goal is to enable caching of the initial hash state for speed while keeping behavior unchanged. There is no indication of a security fix or vulnerability being addressed.

Security candidateoptimization: introduce `PresaltedSipHasher` for repeated hashingby Lőrinc · ec11b9fe · Dec 9, 2025 · 6 filesMessage 73 · AdequateInformational 18Details
Commit message · Lőrinc

optimization: introduce `PresaltedSipHasher` for repeated hashing

Replaces the `SipHashUint256Extra` function with the `PresaltedSipHasher` class that caches the constant-salted state (v[0-3] after XORing with keys).
This avoids redundant XOR operations when hashing multiple values with the same keys, benefiting use cases like `SaltedOutpointHasher`.

This essentially brings the precalculations in the `CSipHasher` constructor to the `uint256`-specialized SipHash implementation.

> cmake -B build -DBUILD_BENCH=ON -DCMAKE_BUILD_TYPE=Release && cmake --build build -j$(nproc) && build/src/bench/bench_bitcoin -filter='SaltedOutpointHasherBench.*' -min-time=10000

> C++ compiler .......................... AppleClang 16.0.0.16000026

| ns/op | op/s | err% | total | benchmark
|--------------------:|--------------------:|--------:|----------:|:----------
| 57.27 | 17,462,299.19 | 0.1% | 11.02 | `SaltedOutpointHasherBench_create_set`
| 11.24 | 88,997,888.48 | 0.3% | 11.04 | `SaltedOutpointHasherBench_hash`
| 13.91 | 71,902,014.20 | 0.2% | 11.01 | `SaltedOutpointHasherBench_match`
| 13.29 | 75,230,390.31 | 0.1% | 11.00 | `SaltedOutpointHasherBench_mismatch`

compared to master:
create_set - 17,462,299.19/17,065,922.04 - 2.3% faster
hash - 88,997,888.48/83,576,684.83 - 6.4% faster
match - 71,902,014.20/68,985,850.12 - 4.2% faster
mismatch - 75,230,390.31/71,942,033.47 - 4.5% faster

> C++ compiler .......................... GNU 13.3.0

| ns/op | op/s | err% | ins/op | cyc/op | IPC | bra/op | miss% | total | benchmark
|--------------------:|--------------------:|--------:|----------------:|----------------:|-------:|---------------:|--------:|----------:|:----------
| 135.38 | 7,386,349.49 | 0.0% | 1,078.19 | 486.16 | 2.218 | 119.56 | 1.1% | 11.00 | `SaltedOutpointHasherBench_create_set`
| 23.67 | 42,254,558.08 | 0.0% | 247.01 | 85.01 | 2.906 | 4.00 | 0.0% | 11.00 | `SaltedOutpointHasherBench_hash`
| 58.95 | 16,962,220.14 | 0.1% | 446.55 | 211.74 | 2.109 | 20.86 | 1.4% | 11.01 | `SaltedOutpointHasherBench_match`
| 76.98 | 12,991,047.69 | 0.1% | 548.93 | 276.50 | 1.985 | 20.25 | 2.3% | 10.72 | `SaltedOutpointHasherBench_mismatch`

compared to master:
create_set - 7,386,349.49/7,312,133.16 - 1% faster
hash - 42,254,558.08/41,978,882.62 - 0.6% faster
match - 16,962,220.14/16,549,695.42 - 2.4% faster
mismatch - 12,991,047.69/12,713,595.35 - 2% faster

Co-authored-by: sipa <pieter@wuille.net>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This is a routine performance optimization for Bitcoin Core's hash tables. It replaces a function that re-computed part of its internal state on every call with a small helper class that pre-computes and reuses that state. The change is purely about speed and does not alter the final hash results. There is no indication it fixes a security bug or introduces a vulnerability.

Security candidaterefactor: extract `SipHash` C0-C3 constants to class scopeby Lőrinc · 20330548 · Dec 9, 2025 · 2 filesMessage 85 · StrongInformational 15Details
Commit message · Lőrinc

refactor: extract `SipHash` C0-C3 constants to class scope

Moves the `SipHash` initialization constants (C0-C3) from magic numbers to named static constexpr members of `CSipHasher`.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a simple code cleanup: it replaces four hard-coded magic numbers in Bitcoin Core's SipHash implementation with named constants. The actual numeric values and how they are used remain exactly the same, so there is no security change.

Security candidatedocs: clarify RPC credentials security boundaryby crStiv · 938312d7 · Dec 2, 2025 · 1 fileMessage 62 · AdequateInformational 12Details
Commit message · crStiv

docs: clarify RPC credentials security boundary

62/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Names security-relevant behavior explicitly! No meaningful explanatory body
Why it was queued
credential or privilege statedocumentation-only discount
AI analysis · Informational 12/100

This commit only updates documentation. It adds a warning to Bitcoin Core's JSON-RPC guide explaining that anyone with valid RPC credentials effectively has significant control over the node and the underlying machine, and that RPC whitelists should not be treated as a strong security boundary. No code behavior was changed.

Security candidatescripted-diff: Bump copyright headers after encoding changesby MarcoFalke · fa71c15f · Nov 26, 2025 · 41 filesMessage 95 · StrongInformational 15Details
Commit message · MarcoFalke

scripted-diff: Bump copyright headers after encoding changes

Historically, the headers have been bumped some time after a file has
been touched. Do it now to avoid having to touch them again in the
future for that reason.

-BEGIN VERIFY SCRIPT-
sed -i --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 show --pretty="" --name-only HEAD~0 )
-END VERIFY SCRIPT-

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
cryptography-sensitive pathseed or entropy pathsigning or wallet pathparser or protocol path
AI analysis · Informational 15/100

This commit only updates copyright years in file headers from a fixed range (for example '2018-2022') to 'year-present'. It makes no changes to program logic, network behavior, or security-sensitive code. There is no security relevance.

Security candidatecontrib: Remove confusing and redundant encoding from IOby MarcoFalke · fae61242 · Nov 26, 2025 · 54 filesMessage 95 · StrongInformational 19Details
Commit message · MarcoFalke

contrib: Remove confusing and redundant encoding from IO

The encoding arg is confusing, because it is not applied consistently
for all IO.

Also, it is useless, as the majority of files are ASCII encoded, which
are fine to encode and decode with any mode.

Moreover, UTF-8 is already required for most scripts to work properly,
so setting the encoding twice is redundant.

So remove the encoding from most IO. It would be fine to remove from all
IO, however I kept it for two files:

* contrib/asmap/asmap-tool.py: This specifically looks for utf-8
encoding errors, so it makes sense to sepecify the utf-8 encoding
explicitly.
* test/functional/test_framework/test_node.py: Reading the debug log in
text mode specifically counts the utf-8 characters (not bytes), so it
makes sense to specify the utf-8 encoding explicitly.

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
cryptography-sensitive pathseed or entropy pathsigning or wallet pathparser or protocol path
AI analysis · Informational 19/100

This commit removes explicit 'UTF-8' encoding declarations from dozens of helper and test scripts in the Bitcoin Core repository. In Python 3, removing the encoding argument makes file operations fall back to the system's default locale encoding. On most modern systems that default is UTF-8, so the change is intended to be a no-op cleanup. However, on systems where the locale is not UTF-8, some scripts could fail or behave differently when reading files that contain non-ASCII characters. The commit deliberately keeps explicit UTF-8 handling in the two places where it actually matters.

Security candidatefix: reorg behaviour in mempool tests to match real oneby yuvicc · 70d9e8f0 · Nov 26, 2025 · 6 filesMessage 72 · AdequateInformational 15Details
Commit message · yuvicc

fix: reorg behaviour in mempool tests to match real one

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 Bitcoin Core's internal functional test scripts. It replaces the old way of simulating blockchain reorganizations in tests (using invalidateblock/reconsiderblock) with a more realistic method that builds an actual competing fork and submits it. No production node code is modified, so this cannot directly affect live Bitcoin nodes or users.

Security candidateMove the create_empty_fork method to the test framework's blocktools.py module to enable reuse across multiple tests.by yuvicc · 540ed333 · Nov 26, 2025 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · yuvicc

Move the create_empty_fork method to the test framework's blocktools.py module to enable reuse across multiple tests.

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

This commit simply moves a helper function used only in Bitcoin Core's internal test suite from one test file into a shared test-framework library. It does not change any production code, network behavior, or wallet logic. There is no security issue here.

Security candidatemusig: Check session id reuseby Fabian Jahr · c9519c26 · Nov 24, 2025 · 1 fileMessage 60 · AdequateModerate 60Details
Commit message · Fabian Jahr

musig: Check session id reuse

Prevent saving another secnonce to the same session id since this might make nonce reuse possible.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
nonce handlingsigning or wallet path
AI analysis · Moderate 60/100

This commit hardens Bitcoin Core's MuSig2 multi-signature code by refusing to save a second secret nonce under the same session ID. Before the change, an attacker or buggy caller could potentially overwrite a nonce, which in multi-signature schemes can lead to nonce reuse and theft of funds. The fix uses try_emplace plus an assertion so duplicate session IDs are caught instead of silently replacing the existing nonce.

Security candidatecli: modify -addrinfo to use getaddrmaninfo RPC endpointby stratospher · 675be930 · Nov 24, 2025 · 2835 filesMessage 73 · AdequateInformational 15Details
Commit message · stratospher

cli: modify -addrinfo to use getaddrmaninfo RPC endpoint

currently -addrinfo returns addresses known to the node after
filtering for quality and recency. However, the node considers
all known addresses (even the filtered out addresses) when
selecting peers to connect to.

So update -addrinfo to also display the full set of known
addresses for more useful node information.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol path
AI analysis · Informational 15/100

This commit changes the bitcoin-cli -addrinfo command so it reports the full set of addresses known to the node, not just the subset previously filtered for quality and recency. The change is purely informational: it makes the displayed statistics more accurate and useful, but does not alter peer selection, network behavior, or any security-sensitive logic.

Security candidateChange Parse descriptor argument to string_viewby Sjors Provoost · c0bfe72f · Nov 20, 2025 · 3 filesMessage 95 · StrongInformational 20Details
Commit message · Sjors Provoost

Change Parse descriptor argument to string_view

Commit b3bf18f0bac0ffe18206ee20642e11264ba0c99d changed the function
signature from Parse(const std::string& descriptor,...) to
Parse(std::span<const char> descriptor,...).

Calling this new version of Parse with a string literal will trigger
a confusing "Invalid characters in payload" due to the trailing "\0".

Switch to string_view and add a test.

Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>

95/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 20/100

This commit fixes a minor developer-facing bug in how Bitcoin Core parses text-based wallet descriptors. A recent code change had made the parser accept raw character spans, which accidentally included the hidden null terminator at the end of C++ string literals. That caused the parser to reject valid descriptors with a misleading 'Invalid characters in payload' error. The fix switches the public API to use std::string_view, which does not include the trailing null byte, and adds a regression test. It is not a consensus or network security issue.

Security candidateMerge bitcoin/bitcoin#31734: miniscript: account for all `StringType` variants in `Miniscriptdescriptor::ToString()`by Ava Chow · 53b72372 · Nov 18, 2025 · 2866 filesMessage 91 · StrongLow 26Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#31734: miniscript: account for all `StringType` variants in `Miniscriptdescriptor::ToString()`

28a4fcb03c0fb1cd5112eca1eb36dcb13e0b4ff2 test: check listdescriptors do not return a mix of hardened derivation marker (pythcoiner)
975783cb79e929260873c1055d4b415cd33bb6b9 descriptor: account for all StringType in MiniscriptDescriptor::ToStringHelper() (pythcoiner)

Pull request description:

In `MiniscriptDescriptor::ToStringHelper()` only the `StringType::Private` variant of the `type` argument was handled. This PR implements serializing w/ all variants of `StringType` & add a functional test for the descriptor triggering the related issue.

Closes #31694: previously when calling `listdescriptors` RPC on a wallet containing a taproot descriptor w/ a (miniscript) taptree, origins of internal key & taptree were serialized w/ differents hardened derivation markers:
- origin of the internal key were serialized w/ `StringType::Normalized` type (using `h` as marker)
- origins of taptree keys were serialized w/ `StringType::Private` type (using `'` as marker)

Note: Origins in segwit (`wsh()`) miniscript descriptors were also serialized w/ `StringType::Private` type (`'` marker) and are now serialized w/ `StringType::Normalized` type (`h` marker).

ACKs for top commit:
sipa:
Code review ACK 28a4fcb03c0fb1cd5112eca1eb36dcb13e0b4ff2
achow101:
ACK 28a4fcb03c0fb1cd5112eca1eb36dcb13e0b4ff2
rkrux:
Concept ACK 28a4fcb03c0fb1cd5112eca1eb36dcb13e0b4ff2

Tree-SHA512: 15d14000b5951ca69a64a05b9a0b138c48a07b81eaf2fa86b91ac20cc8735533355a787363c64ba88403dd8a56ef5232cba57d34bea80835a0f40774d62fbc2b

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
defensive validationcryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol pathmerge-commit duplicate discount
AI analysis · Low 26/100

This commit fixes a formatting inconsistency in how Bitcoin Core's wallet describes certain advanced 'miniscript' descriptors. When a user called the listdescriptors RPC, the same descriptor could contain a mix of 'h' and ''' markers for hardened derivation paths, depending on whether the key was inside a Taproot taptree or not. The patch makes the output uniform. It is a correctness/usability bug rather than a direct loss-of-funds vulnerability, but inconsistent descriptors can confuse downstream tools or users who compare or re-import descriptor strings.

Security candidatetest: add functional test for new cluster mempool RPCsby Suhas Daftuar · 6c5c44f7 · Nov 18, 2025 · 5 filesMessage 87 · StrongInformational 15Details
Commit message · Suhas Daftuar

test: add functional test for new cluster mempool RPCs

Co-authored-by: glozow <gloriajzhao@gmail.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
boot or update path
AI analysis · Informational 15/100

This commit only adds new automated tests for Bitcoin Core's mempool cluster features. It does not change any production code that runs on real Bitcoin nodes, so it cannot introduce a security vulnerability or directly fix one in the live software.