BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

257security candidates612second-pass queue2889AI analyses
189commits · 30 days
473commits · 60 days
1490commits · 180 days
2879commits · 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
950Strong · 80–100
1188Adequate · 60–79
688Thin · 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 Chow15950159064
MarcoFalke41021406074
Lőrinc17721177081
fanquake22819226057
Hennadii Stepanov21114208063
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
merge-script32718088
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 26 minutes ago

Informational 18 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35930: wallet: post-#35501 cleanups in CWalletTx

This is a follow-up cleanup and hardening patch for the Bitcoin Core wallet's handling of transactions that have multiple possible witness versions (same transaction ID but different witness data). It renames a variable, simplifies a helpe…

Added input-validation during wallet transaction deserializationNew unit test specifically exercises rejection of mismatched variant txidFollow-up to PR #35501 which introduced witness-variant tracking in the wallet
512dc9afby Ava Chow+68−315 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35729: refactor: test: Unroll `&&` conditions in macros

This commit only changes Bitcoin Core's internal test code. It splits combined conditions inside test-check macros (like BOOST_CHECK(a && b)) into separate checks so that when a test fails, the test output points to the exact failing condi…

aa0e0f79by merge-script+196−9519 files
No security note in commit
Low 26 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35493: wallet, descriptor: Fix MuSig private key completeness checks on `importdescriptors`

This commit fixes a bug in Bitcoin Core's wallet import logic for a new type of multi-signature setup called MuSig. Previously, when a user imported a MuSig descriptor that already contained all needed private keys, the wallet incorrectly …

False-positive warning in wallet import for fully-private MuSig descriptorsIncorrect private-key completeness check on synthetic aggregate public keyDescriptor logic now delegates completeness to `Descriptor::HavePrivateKeys()`
2c01832fby merge-script+76−374 files
No security note in commit
Informational 15 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35943: doc: fix dead link in txrequest.h

This commit only fixes a broken web link in a code comment. It replaces an outdated URL to a research paper with a working URL to the same paper. There is no change to program logic, no security fix, and no vulnerability.

5d051c05by 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#33186: wallet, test: Ancient Wallet Migration from v0.14.3 (no-HD and Single Chain)

This commit only adds new automated tests for migrating very old Bitcoin Core wallets (version 0.14.3 from 2017) to the modern descriptor wallet format. It does not change any wallet production code, consensus rules, or network behavior. T…

757aa573by merge-script+246−124 files
No security note in commit
Low 28 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35925: wallet, rpc: Exclude non-owned addresses from listreceivedby*

This update fixes a wallet reporting bug. When a user asked their Bitcoin wallet to list every address that had received money, including empty ones, the result incorrectly included foreign addresses that the wallet merely knew about (for …

Information disclosure: wallet RPCs leaked existence/labels of foreign addressesIncorrect access-control boundary: non-owned addresses exposed in 'received' reportFix uses IsMine() rather than address purpose metadata, avoiding inconsistent purpose handling
e8cc21c5by Ava Chow+19−32 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35937: test: Append print_suppressions=0 to LSAN_OPTIONS, and suppress bitcoin-qt

This commit only changes test configuration. It tells the LeakSanitizer tool used during automated testing to stop printing long lists of suppressed memory leaks, and it narrows the list of ignored leaks to the bitcoin-qt GUI test binary. …

5973e075by merge-script+3−42 files
No security note in commit
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
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-priorityDrop support for EOL macOS 13by MarcoFalke · fadad7a4 · Oct 1, 2025 · 5 filesMessage 45 · ThinInformational 20Details
Commit message · MarcoFalke

Drop support for EOL macOS 13

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 20/100

This commit simply stops supporting macOS 13, an operating system version that has reached end-of-life. It updates build and release documentation to require macOS 14 or newer. There is no security vulnerability being fixed here.

Lower-priorityci: Remove bash -c from cmake invocation using evalby Brandon Odiwuor · 50194029 · Oct 1, 2025 · 1 fileMessage 62 · AdequateInformational 19Details
Commit message · Brandon Odiwuor

ci: Remove bash -c from cmake invocation using eval

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

This commit changes how a Bitcoin Core CI script passes build options to the CMake build tool. Previously, all options were concatenated into a single string and run through 'bash -c', which could mishandle special characters in option values. Now the options are parsed into a proper array using 'eval' and passed directly to CMake. This is a code-quality and robustness improvement in internal CI tooling, not a fix for an active exploit in the Bitcoin software itself.

Security candidateMerge bitcoin/bitcoin#28584: Fuzz: extend CConnman testsby Ava Chow · f41f9724 · Sep 30, 2025 · 2840 filesMessage 91 · StrongInformational 15Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#28584: Fuzz: extend CConnman tests

0802398e749c5e16fa7085cd87c91a31bbe043bd fuzz: make it possible to mock (fuzz) CThreadInterrupt (Vasil Dimov)
6d9e5d130d2e1d052044e9a72d44cfffb5d3c771 fuzz: add CConnman::SocketHandler() to the tests (Vasil Dimov)
3265df63a48db187e0d240ce801ee573787fed80 fuzz: add CConnman::InitBinds() to the tests (Vasil Dimov)
91cbf4dbd864b65ba6b107957f087d1d305914b2 fuzz: add CConnman::CreateNodeFromAcceptedSocket() to the tests (Vasil Dimov)
50da7432ec1e5431b243aa30f8a9339f8e8ed97d fuzz: add CConnman::OpenNetworkConnection() to the tests (Vasil Dimov)
e6a917c8f8e0f1a0fa71dc9bbb6e1074f81edea3 fuzz: add Fuzzed NetEventsInterface and use it in connman tests (Vasil Dimov)
e883b37768812d96feec207a37202c7d1b603c1f fuzz: set the output argument of FuzzedSock::Accept() (Vasil Dimov)

Pull request description:

Extend `CConnman` fuzz tests to also exercise the methods `OpenNetworkConnection()`, `CreateNodeFromAcceptedSocket()`, `InitBinds()` and `SocketHandler()`.

Previously fuzzing those methods would have resulted in real socket functions being called in the operating system which is undesirable during fuzzing. Now that https://github.com/bitcoin/bitcoin/pull/21878 is complete all those are mocked to a fuzzed socket and a fuzzed DNS resolver (see how `CreateSock` and `g_dns_lookup` are replaced in the first commit).

ACKs for top commit:
achow101:
ACK 0802398e749c5e16fa7085cd87c91a31bbe043bd
jonatack:
Review re-ACK 0802398e749c5e16fa7085cd87c91a31bbe043bd
dergoegge:
Code review ACK 0802398e749c5e16fa7085cd87c91a31bbe043bd

Tree-SHA512: a717d4e79f42bacf2b029c821fdc265e10e4e5c41af77cd4cb452cc5720ec83c62789d5b3dfafd39a22cc8c0500b18169aa7864d497dded729a32ab863dd6c4d

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

This commit is a merge of a Bitcoin Core pull request that adds and extends fuzz tests for the CConnman networking component. Fuzz tests are automated test harnesses that feed random or mutated inputs to functions to find bugs. The changes only affect test code and test utilities; they do not change the behavior of the live Bitcoin node software. There is no indication this commit fixes a security vulnerability or introduces one.

Lower-prioritytest: fix (w)txid confusion in p2p_leak_tx.pyby Martin Zumsande · 99bc5529 · Sep 30, 2025 · 1 fileMessage 82 · StrongInformational 15Details
Commit message · Martin Zumsande

test: fix (w)txid confusion in p2p_leak_tx.py

Before, we'd send a MSG_TX with a wtxid in it, which
would always result in a notfound answer

82/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit fixes a mistake in a single Bitcoin Core test file. The test was accidentally asking for a transaction using the wrong identifier type (a regular transaction ID instead of a witness transaction ID). This only affects an internal functional test, not the actual Bitcoin network software that users run.

AI review queuedtest: make notfound_on_unannounced more reliableby David Gumberg · 14ae71f3 · Sep 30, 2025 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · David Gumberg

test: make notfound_on_unannounced more reliable

By using mocktime, we will always hit both the notfound
branch and the tx sent branch.
The previous version didn't achieve that due to timing
issues.

Co-authored-by: Martin Zumsande <mzumsande@gmail.com>

100/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit only changes a single test file. It makes an existing functional test more reliable by using mock time instead of looping up to 100 times and hoping for the right timing. There is no change to the actual Bitcoin Core node software, so it cannot affect real users, wallets, or network behavior.

Lower-prioritytest: increase timeout in p2p_leak_tx.pyby Martin Zumsande · 576dd97c · Sep 30, 2025 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Martin Zumsande

test: increase timeout in p2p_leak_tx.py

With a low but not negligible probability in the order
of 10^-6 the exponential timer NextInvToInBounds can lead
to an interval >60s, making the test fail.
Also uses mocktime to speed up the test and fixes a
non-matching on_inv override.

Co-authored-by: Vasil Dimov <vd@FreeBSD.org>

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
AI analysis · Informational 15/100

This commit only changes a test script used during Bitcoin Core's automated testing. It makes the test more reliable by increasing a timeout, using mock time to run faster, and fixing a minor method signature mismatch. There is no change to the actual Bitcoin network software that users run, so it has no security impact on real Bitcoin nodes or users.

Lower-prioritytest: Test SIGTERM handling during waitforblockheight callby Ryan Ofsky · 6a29f790 · Sep 30, 2025 · 1 fileMessage 95 · StrongInformational 19Details
Commit message · Ryan Ofsky

test: Test SIGTERM handling during waitforblockheight call

Currently when CTRL-C is pressed and there is an active `waitforblockheight`,
or `waitforblock`, or `waitfornewblock` RPC call, or a mining interface
`waitTipChanged` IPC call with a long timeout, the node will not shut down
right away, and will wait for the timeout to be reached before exiting.

This behavior is not ideal and only happens when the node is stopped with
CTRL-C or SIGTERM. When the node is stopped with `bitcoin-cli stop`, the wait
calls are interrupted and the node does shut down right away.

The next commit improves node behavior. This commit just adds test coverage to
simplify the next commit and clarify the change in behavior there.

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

This commit only adds a new automated test. The test checks that when a user presses Ctrl-C (or sends SIGTERM) while the node is handling a long-running 'waitforblockheight' RPC call, the node currently does not shut down immediately and instead waits for the RPC to time out. The commit itself does not fix the problem; it only creates test coverage so a later commit can prove the fix works.

AI review queuedwallet: Keep secnonces in DescriptorScriptPubKeyManby Ava Chow · 68ef954c · Sep 30, 2025 · 2 filesMessage 50 · ThinLow 33Details
Commit message · Ava Chow

wallet: Keep secnonces in DescriptorScriptPubKeyMan

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

This commit changes how Bitcoin Core wallets store temporary secret signing data (MuSig2 'secnonces') for multi-signature transactions. Previously, these secrets may have been kept in a more general signing provider; now they are kept inside the wallet's descriptor key manager. The change is defensive: it ensures these one-time secrets stay only in memory and are never written to disk, which prevents a dangerous nonce-reuse bug that could leak private keys. The commit itself is a small code move/addition, not a complete fix, and the commit message does not call it a security vulnerability.

AI review queuedtest: Test MuSig2 in the walletby Ava Chow · ac599c4a · Sep 30, 2025 · 2 filesMessage 67 · AdequateInformational 15Details
Commit message · Ava Chow

test: Test MuSig2 in the wallet

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 adds a new automated test file for the MuSig2 multi-signature wallet feature. It does not change any production wallet, cryptography, or consensus code. There is no security-relevant change to the software users run.

Security candidatesign: Create MuSig2 signatures for known MuSig2 aggregate keysby Ava Chow · 4a273edd · Sep 30, 2025 · 3 filesMessage 78 · AdequateInformational 12Details
Commit message · Ava Chow

sign: Create MuSig2 signatures for known MuSig2 aggregate keys

When creating Taproot signatures, if the key being signed for is known
to be a MuSig2 aggregate key, do the MuSig2 signing algorithms.

First try to create the aggregate signature. This will fail if there are
not enough partial signatures or public nonces. If it does fail, try to
create a partial signature with all participant keys. This will fail for
those keys that we do not have the private keys for, and if there are
not enough public nonces. Lastly, if the partial signatures could not be
created, add our own public nonces for the private keys that we know, if
they do not yet exist.

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

This commit adds wallet-side support for producing MuSig2 aggregate and partial signatures when signing Taproot transactions. It is a feature implementation, not a fix for a known vulnerability. There is no evidence in the commit or supplied references that this change addresses a security bug, disclosure, or incident.

Lower-priorityAdd MuSig2SecNonce class for secure allocation of musig noncesby Ava Chow · c06a1dc8 · Sep 30, 2025 · 2 filesMessage 50 · ThinLow 42Details
Commit message · Ava Chow

Add MuSig2SecNonce class for secure allocation of musig nonces

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

This commit adds a new helper class that wraps sensitive MuSig2 signing nonces in locked, non-swappable memory and prevents accidental copying. It is a defensive hardening change: it does not by itself fix an active bug, but it reduces the risk that a secret nonce could leak through memory dumps, swapping, or programmer error. The change is forward-looking and only affects code paths that use MuSig2 multi-signature signing.

Security candidatepsbt: MuSig2 data in Fill/FromSignatureDataby Ava Chow · d99a0816 · Sep 30, 2025 · 2 filesMessage 45 · ThinLow 28Details
Commit message · Ava Chow

psbt: MuSig2 data in Fill/FromSignatureData

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 28/100

This commit adds support for copying MuSig2 multi-signature data between two internal data structures used when handling Partially Signed Bitcoin Transactions (PSBTs). It is a feature-completion change: previously, MuSig2 participant lists, public nonces, and partial signatures were not transferred when converting between PSBT fields and the signing engine's SignatureData object, or when merging two PSBT inputs/outputs. The patch makes those transfers happen consistently. There is no direct evidence in the commit that this fixes an exploitable vulnerability; it appears to be a correctness/functional improvement for an upcoming MuSig2 signing workflow.

Security candidatesigningprovider: Add musig2 secnoncesby Ava Chow · 4d8b4f53 · Sep 30, 2025 · 2 filesMessage 70 · AdequateInformational 11Details
Commit message · Ava Chow

signingprovider: Add musig2 secnonces

Adds GetMuSig2SecNonces which returns secp256k1_musig_secnonce*, and
DeleteMuSig2Session which removes the MuSig2 secnonce from wherever it
was retrieved. FlatSigningProvider stores it as a pointer to a map of
session id to secnonce so that deletion will actually delete from the
object that actually owns the secnonces.

The session id is just a unique identifier for the caller to determine
what secnonces have been created.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 11/100

This commit adds infrastructure for storing and retrieving MuSig2 secret nonces (temporary cryptographic values used in multi-signature setup) inside Bitcoin Core's signing provider classes. It is a code organization change that introduces storage methods and a deletion method, but does not by itself change how transactions are signed or validated. There is no indication in the commit that it fixes a known security bug.

AI review queuedsign: Add CreateMuSig2PartialSigby Ava Chow · bf69442b · Sep 30, 2025 · 4 filesMessage 35 · OpaqueInformational 11Details
Commit message · Ava Chow

sign: Add CreateMuSig2PartialSig

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 11/100

This commit adds a new function that lets a Bitcoin Core wallet create a partial MuSig2 signature as part of a multi-party signing process. It is a feature addition, not a fix. There is no direct evidence in the commit or supplied references that this change introduces a security vulnerability.

AI review queuedsign: Add CreateMuSig2AggregateSigby Ava Chow · 258db938 · Sep 30, 2025 · 4 filesMessage 35 · OpaqueInformational 17Details
Commit message · Ava Chow

sign: Add CreateMuSig2AggregateSig

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit adds a new helper function that combines multiple MuSig2 partial signatures into one final Schnorr signature for Bitcoin transactions. It is a feature addition, not a fix. The code includes verification of each partial signature before aggregation, which is good defensive practice. There is no evidence in the commit or supplied references that this change addresses a security vulnerability.

AI review queuedsign: Add CreateMuSig2Nonceby Ava Chow · 512b17fc · Sep 30, 2025 · 7 filesMessage 35 · OpaqueInformational 14Details
Commit message · Ava Chow

sign: Add CreateMuSig2Nonce

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
signing or wallet pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 14/100

This commit adds a new helper function for creating MuSig2 cryptographic nonces in Bitcoin Core. MuSig2 is a multi-signature scheme that lets multiple parties jointly sign a transaction. The change is a feature addition: it introduces a nonce generator, a session ID helper, and wiring for signing code. There is no direct evidence in the commit or supplied references that this fixes a known security vulnerability. It is best treated as a normal code addition that may carry implementation risks rather than a disclosed security patch.

AI review queuedsign: Include taproot output key's KeyOriginInfo in sigdataby Ava Chow · 9baff05e · Sep 30, 2025 · 2 filesMessage 50 · ThinLow 27Details
Commit message · Ava Chow

sign: Include taproot output key's KeyOriginInfo in sigdata

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

This Bitcoin Core change makes the wallet's signing code record key-origin metadata for both the internal key and the final output key of a Taproot address, not just the internal key. That metadata helps external signers (like hardware wallets) understand which key path was used to derive the address. On its own this is a small correctness/data-availability fix; it does not directly change how coins are spent or introduce an obvious exploit, but missing key-origin data could previously have caused signing failures or user confusion for Taproot key-path spends.

Lower-prioritymusig: Add MuSig2AggregatePubkeys variant that validates the aggregateby Ava Chow · 82ea67c6 · Sep 30, 2025 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Ava Chow

musig: Add MuSig2AggregatePubkeys variant that validates the aggregate

A common pattern that MuSig2 functions will use is to aggregate the
pubkeys to get the keyagg_cache and then validate the aggregated pubkey
against a provided aggregate pubkey. A variant of MuSig2AggregatePubkeys
is added which does that.

The functionality of GetMuSig2KeyAggCache and GetCPubKeyFromMuSig2KeyAggCache
are included in MuSig2AggregatePubkeys (and used internally) so there is
no expectation that callers will need these so they are made static.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
defensive validation
AI analysis · Informational 15/100

This commit is a straightforward internal code refactor in Bitcoin Core's MuSig2 cryptographic helper module. It adds a new variant of an existing function that lets callers both compute an aggregate public key and optionally check it against an expected value, while making two previously public helper functions private to the source file. There is no bug fix, no security patch, and no disclosed vulnerability.

Security candidatepubkey: Return tweaks from BIP32 derivationby Ava Chow · 4b24bfea · Sep 30, 2025 · 2 filesMessage 72 · AdequateInformational 19Details
Commit message · Ava Chow

pubkey: Return tweaks from BIP32 derivation

MuSig2 needs the BIP32 derivation tweaks in order to sign with a key
derived from the aggregate pubkey.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
Why it was queued
secret or key material
AI analysis · Informational 19/100

This commit is a small, additive change to Bitcoin Core's public-key derivation code. It adds an optional way for callers to retrieve the 'tweak' value used when deriving child public keys under the BIP32 standard. The change is needed so that a newer multi-signature scheme called MuSig2 can sign with derived keys. There is no direct evidence in the commit that this fixes a security bug; it appears to be a feature or API improvement.

AI review queuedp2p: Use different inbound inv timer per networkby Martin Zumsande · 0f7d4ee4 · Sep 30, 2025 · 1 fileMessage 68 · AdequateLow 43Details
Commit message · Martin Zumsande

p2p: Use different inbound inv timer per network

Currently nodes schedule their invs to all inbound peers at the same time.
It is trivial to make use this timing pattern for fingerprinting
identities on different networks. Using a separate timers for each network will
make the fingerprinting harder.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Low 43/100

This change tweaks how Bitcoin nodes schedule transaction announcements to inbound peers. Previously, all inbound peers were told about new transactions on the same shared timer, which could let a spy with multiple connections figure out when a node first learned of a transaction and possibly trace it back to its source. The patch splits that timer by network group so that different peer networks get staggered announcement times, making that timing-based fingerprinting harder. It is a privacy-hardening fix, not a fix for a code crash or theft bug.

Lower-prioritydepends: Update URL for `qrencode` package source tarballby Hennadii Stepanov · 93a70a42 · Sep 30, 2025 · 1 fileMessage 81 · StrongInformational 15Details
Commit message · Hennadii Stepanov

depends: Update URL for `qrencode` package source tarball

The https://fukuchi.org/ homepage no longer links to the source tarball,
and previously available files appear to have been removed. The homepage
now instructs users to download source tarballs from the GitHub releases
page instead.

The diff between the source trees is immaterial.

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit simply changes the download location for a third-party QR-code library used in Bitcoin Core's build system. The old website no longer hosts the source file, so the build script now fetches the same library version from GitHub instead. The commit message explicitly states the difference between the two source trees is immaterial, and the change is accompanied by a matching SHA-256 hash update. There is no indication of a security vulnerability or malicious change.

Lower-prioritydepends: Use hash instead of file name for package download stampby Hennadii Stepanov · 6de80512 · Sep 30, 2025 · 1 fileMessage 65 · AdequateInformational 18Details
Commit message · Hennadii Stepanov

depends: Use hash instead of file name for package download stamp

The package version is still included for convenience.

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

This commit changes how Bitcoin Core's dependency build system names its 'already downloaded' marker files. Previously the marker file included the downloaded file's original name; now it uses the package version plus the file's cryptographic hash. This is a hardening improvement that makes the build less likely to be confused if a downloaded file is renamed or replaced, but the commit itself does not claim to fix any active security vulnerability.

Lower-priorityci: expose all ACTIONS_* varsby willcl-ark · bc706955 · Sep 30, 2025 · 1 fileMessage 80 · StrongInformational 19Details
Commit message · willcl-ark

ci: expose all ACTIONS_* vars

When using `docker buildx build` in conjunction with the `gha` backend
cache type, it's important to specify the URL and TOKEN needed to
authenticate.

On Cirrus runners this is working with only `ACTIONS_CACHE_URL` and
`ACTIONS_RUNTIME_TOKEN`, but this is not enough for the GitHub backend.

Fix this by exporting all `ACTIONS_*` variables.

This fixes cache restore/save on forks or where GH-hosted runners are
being used.

80/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
AI analysis · Informational 19/100

This change updates a Bitcoin Core GitHub Actions helper so that every environment variable starting with 'ACTIONS_' is passed into Docker builds, rather than only two specific ones. The stated goal is to fix Docker build caching on forks and GitHub-hosted runners. It is a CI/infrastructure-only change and does not alter Bitcoin node code, consensus rules, wallet handling, or network behavior. There is no direct security vulnerability in the diff, but it slightly widens the set of GitHub Actions secrets/tokens that are forwarded into the Docker build environment.

Lower-prioritydepends: Drop redundant check for downloaded fileby Hennadii Stepanov · 46135d90 · Sep 30, 2025 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Hennadii Stepanov

depends: Drop redundant check for downloaded file

The `fetch_file` commands are invoked for the `$($(package)_fetched)`
target, so the existence of the download stamp has already been tested.

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

This is a minor cleanup in Bitcoin Core's dependency build system. It removes an extra file-existence check that was already being handled elsewhere. There is no security issue visible in the change.

Lower-prioritydepends: Fix `$(package)_fetched` targetby Hennadii Stepanov · 77197895 · Sep 30, 2025 · 1 fileMessage 60 · AdequateInformational 24Details
Commit message · Hennadii Stepanov

depends: Fix `$(package)_fetched` target

Ensure the download timestamp is created only after a successful
download.

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

This commit fixes a build-system bug in Bitcoin Core's dependency downloader. Previously, the build system would create a 'download finished' timestamp file before the download actually completed. If the download was interrupted or failed, that timestamp file could still exist, making the build system think the dependency was already downloaded and skip retrying. The fix moves the timestamp creation to after the download and checksum steps succeed. This is primarily a reliability/build correctness issue; direct security impact is limited and indirect.