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 queue2888AI 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 Chow15950158064
MarcoFalke41021406074
Lőrinc17721177081
fanquake22819226057
Hennadii Stepanov21114208063
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
merge-script32718088
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 38 minutes ago

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
Informational 15 AI analysisMessage 62 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Use C++20 std::identity over IntIdentity

This commit is a straightforward code cleanup: it replaces a small custom helper named IntIdentity with the standard C++20 std::identity from the <functional> header. The behavior of the ConvertBits function is unchanged; only the implemen…

fafe5042by MarcoFalke+4−111 file
No security note in commit
Repository ledger

Explore captured commits

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

Lower-prioritySet minimum supported Windows version to 1903 (May 2019 Update)by Hennadii Stepanov · dccbb178 · Oct 6, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Hennadii Stepanov

Set minimum supported Windows version to 1903 (May 2019 Update)

This version is the minimum required to support the UTF-8 code page
(CP_UTF8).

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates a documentation template to state that the minimum supported Windows version is Windows 10 version 1903 (May 2019 Update). It does not change any code, build settings, or runtime behavior. The change is purely informational and has no security relevance on its own.

AI review queuedSimplify fs::path by dropping filename() and make_preferred() overloadsby Ryan Ofsky · c864a4c1 · Oct 6, 2025 · 6 filesMessage 93 · StrongInformational 15Details
Commit message · Ryan Ofsky

Simplify fs::path by dropping filename() and make_preferred() overloads

These overloads were needed to allow passing `fs::path` objects directly to
libstdc++'s `fstream` constructors, but after the previous commit, there is no
longer any remaining code that does pass `fs::path` objects to `fstream`
constructors. Writing new code which does this is also discouraged because the
standard has been updated in https://wg21.link/lwg3430 to disallow it.

Dropping these also means its no longer possible to pass `fs::path` arguments
directly to `fstream::open` in libstdc++, which is somewhat unfortunate but not
a big loss because it is already not possible to pass them to the constructor.
So this commit updates `fstream::open` calls.

Additionally, this change required updates to src/bitcoin.cpp since it was
relying on the overloaded filename() method.

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

This is a routine code cleanup in Bitcoin Core. It removes helper functions that let custom filesystem path objects be passed directly to C++ file streams, because the project no longer uses them that way and the C++ standard now discourages it. The commit updates a handful of file-opening calls to use the underlying standard path object instead. There is no security bug being fixed here.

AI review queuedFix windows libc++ fs::path fstream compile errorsby Ryan Ofsky · b0113afd · Oct 6, 2025 · 13 filesMessage 91 · StrongInformational 21Details
Commit message · Ryan Ofsky

Fix windows libc++ fs::path fstream compile errors

As reported by hebasto in https://github.com/bitcoin/bitcoin/issues/33545,
newer libc++ versions implementing https://wg21.link/lwg3430 will no longer
implicitly convert `fs::path` objects to `std::filesystem::path` objects when
constructing `std::ifstream` and `std::ofstream` types.

This is not a problem in Unix systems since `fs::path` objects use
`std::string` as their native string type, but it causes compile errors on
Windows which use `std::wstring` as their string type, since `fstream`s can't
be constructed from `wstring`s.

Fix the windows libc++ compile errors by adding a new `fs::path::std_path()`
method and using it construct `fstream`s more portably.

Additionally, delete `fs::path`'s implicit `native_string` conversion so these
errors will not go undetected in the future, even though there is not currently
a CI job testing Windows libc++ builds.

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

This is a portability fix for compiling Bitcoin Core on Windows with newer versions of the libc++ standard library. It does not change runtime behavior on currently working platforms; it only ensures the code still builds on a less-common Windows toolchain. There is no security vulnerability being fixed here.

Security candidatedoc: Update multisig-tutorial.md to use multipath descriptorsby Ben Westgate · 2a46e94a · Oct 6, 2025 · 2 filesMessage 91 · StrongInformational 15Details
Commit message · Ben Westgate

doc: Update multisig-tutorial.md to use multipath descriptors

Update doc/multisig-tutorial.md to use a single multipath descriptor
instead of separate external/internal descriptors, per PR #22838.
Extract one xpub per participant, build a multipath descriptor with
<0;1> change index, and use getdescriptorinfo to append the checksum.
Clarify importdescriptors expands multipath descriptors into internal
and external forms. Tested shell snippets to confirm equivalent
listdescriptors output as the two-descriptor method.

Added missing loadwallet command for multisig_wallet_01

test: Use multipath descriptors in the functional wallet test
wallet_multisig_descriptor_psbt as this is intended as documentation

doc: replace `bitcoin-cli` with `bitcoin rpc` in multisig-tutorial.md

removed -named parameter where possible.

fixed a couple bugs where -signet was not passed

the call to getcoins.py requires the bitcoin-cli command still

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 update only. It changes the multisig tutorial and a related functional test to use a newer single 'multipath' descriptor format instead of two separate descriptors. There is no change to Bitcoin Core's consensus, networking, wallet security logic, or RPC behavior. It does not fix a vulnerability or introduce a security-relevant code change.

Lower-prioritytest: addrman: check isTerrible when time is more than 10min in the futureby brunoerg · 8e47ed69 · Oct 3, 2025 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · brunoerg

test: addrman: check isTerrible when time is more than 10min in the future

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

This commit only adds a new test case to Bitcoin Core's address manager test suite. It verifies that an address whose timestamp is set more than 10 minutes in the future is correctly classified as 'terrible' (low quality) and filtered out of normal peer address results. There is no change to production code, no bug fix, and no security patch.

AI review queued[test] wallet send 3 generation TRUCby glozow · dcd42d6d · Oct 2, 2025 · 1 fileMessage 55 · ThinInformational 15Details
Commit message · glozow

[test] wallet send 3 generation TRUC

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ 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 functional test to Bitcoin Core. It checks that the wallet correctly refuses to spend an unconfirmed TRUC (version 3) transaction output when that output already has an unconfirmed parent—in other words, it prevents creating a third unconfirmed generation in a chain. There is no change to production wallet, consensus, or networking code, so it does not introduce or fix a live security vulnerability on its own.

AI review queued[wallet] never try to spend from unconfirmed TRUC that already has ancestorsby glozow · e753fadf · Oct 2, 2025 · 1 fileMessage 50 · ThinLow 43Details
Commit message · glozow

[wallet] never try to spend from unconfirmed TRUC that already has ancestors

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

This Bitcoin Core wallet patch prevents users from accidentally creating invalid or poorly structured transactions. Specifically, it stops the wallet from spending coins that come from an unconfirmed 'TRUC' (version 3) transaction which already has parent transactions in the mempool. Without this check, the wallet could build a transaction chain that violates Bitcoin's new TRUC rules, causing the new transaction to be rejected by the network instead of confirmed.

Lower-prioritychain: make use of pskip in LastCommonAncestor (optimization)by Pieter Wuille · 3635d62f · Oct 2, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Pieter Wuille

chain: make use of pskip in LastCommonAncestor (optimization)

By using the pskip pointer, which regularly allows jumping back much faster
than pprev, the forking point between two CBlockIndex entries can be found
much faster.

A simulation shows that no more than 136 steps are needed to jump anywhere
within the first 2^20 block heights, and on average 65 jumps for uniform
forking points around that height.

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

This commit is a straightforward performance optimization for a Bitcoin Core function that finds the last common ancestor between two blocks. It replaces a slow block-by-block walk with a faster skip-pointer jump. There is no security issue visible in the diff or commit message.

Lower-prioritytests: add unit tests for CBlockIndex::GetAncestor and LastCommonAncestorby Pieter Wuille · 2e09d66f · Oct 2, 2025 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Pieter Wuille

tests: add unit tests for CBlockIndex::GetAncestor and LastCommonAncestor

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

This commit only adds new automated unit tests for existing chain-history helper functions in Bitcoin Core. It does not change any production code, fix a bug, or introduce a security-relevant behavior change. There is no indication this is a security patch.

Lower-priorityci: Check windows manifests for all executablesby Max Edwards · 15692790 · Oct 2, 2025 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Max Edwards

ci: Check windows manifests for all executables

The other executables have manifests and these should be checked in
addition to bitcoind. Skipping fuzz.exe, bench_bitcoin.exe and
test_bitcoin-qt.exe as they do not have manifests.

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
fuzzing or regression evidencedocumentation-only discount
AI analysis · Informational 15/100

This change only updates Bitcoin Core's automated Windows CI testing scripts to check that more Windows executable files have valid 'manifests' (metadata files embedded in Windows programs). It does not change any actual Bitcoin Core software code, network behavior, or wallet logic. There is no security vulnerability here.

Lower-priorityci: use a more generic way of finding mt.exeby Max Edwards · e1a1b14c · Oct 2, 2025 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Max Edwards

ci: use a more generic way of finding mt.exe

This sets up a vs developer command prompt and should hopefully should
be more resilient to upstream changes

Co-authored-by: David Gumberg <davidzgumberg@gmail.com>

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

This is a routine Continuous Integration (CI) maintenance change for Bitcoin Core's GitHub Actions workflow. It replaces a custom PowerShell script that manually searched for the Windows manifest tool (mt.exe) with a reusable step that sets up a standard Visual Studio developer command prompt. The goal is to make the CI pipeline more resilient to future changes in Visual Studio/Windows SDK installation paths. There is no user-facing or security-relevant change to the Bitcoin software itself.

Lower-priorityrefactor: increase string_view usageby stickies-v · 037830ca · Oct 2, 2025 · 10 filesMessage 70 · AdequateInformational 15Details
Commit message · stickies-v

refactor: increase string_view usage

Update select functions that take a const std::string& to take a
std::string_view instead. In a next commit, this allows us to use
the {Arg,MaybeArg}<std::string_view> helper.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
AI analysis · Informational 15/100

This commit is a routine code cleanup that changes several functions to accept a lightweight string view instead of a full std::string object. It does not change what the functions do, only how input strings are passed around. There is no security bug being fixed here.

Lower-priorityrpc: refactor: use more (Maybe)Arg<std::string_view>by stickies-v · b63428ac · Oct 2, 2025 · 9 filesMessage 73 · AdequateInformational 15Details
Commit message · stickies-v

rpc: refactor: use more (Maybe)Arg<std::string_view>

Use the {Arg,MaybeArg}<std::string_view> helper in all places where
it is a trivial change. In many places, this simplifies the logic
and reduces duplication of default values.

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

This is a routine internal cleanup of how Bitcoin Core's RPC (remote procedure call) code reads string and integer arguments. It replaces older manual 'is this parameter null?' checks with a newer helper called (Maybe)Arg<std::string_view>. The commit is explicitly titled as a refactor, reduces duplicated default values, and makes no changes to the actual rules that RPC commands enforce. There is no indication this fixes a security bug or introduces a vulnerability.

AI review queuedrpc: refactor: use string_view in Arg/MaybeArgby stickies-v · b3bf18f0 · Oct 2, 2025 · 18 filesMessage 68 · AdequateInformational 15Details
Commit message · stickies-v

rpc: refactor: use string_view in Arg/MaybeArg

Modernizes interface by not forcing users to deal with raw pointers,
without adding copying overhead. Generalizes the logic of whether
we return by value or by optional/pointer.

In cases where functions take a `const std::string&` and it would
be too much work to update them, a string copy is made (which was
already happening anyway).

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

This commit is a routine code cleanup in Bitcoin Core's RPC (remote procedure call) handling. It replaces some uses of std::string with std::string_view to avoid unnecessary string copying and modernize the API. There is no security-relevant change here—no bug fix, no vulnerability patch, and no behavior change visible to users.

Lower-prioritynet: support overriding the proxy selection in ConnectNode()by Vasil Dimov · c76de2ee · Oct 2, 2025 · 4 filesMessage 73 · AdequateInformational 18Details
Commit message · Vasil Dimov

net: support overriding the proxy selection in ConnectNode()

Normally `ConnectNode()` would choose whether to use a proxy and which
one. Make it possible to override this from the callers and same for
`OpenNetworkConnection()` - pass down the proxy to `ConnectNode()`.

Document both functions.

This is useful if we want to open connections to IPv4 or IPv6 peers
through the Tor SOCKS5 proxy.

Also have `OpenNetworkConnection()` return whether the connection
succeeded or not. This can be used when the caller needs to keep track
of how many (successful) connections were opened.

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

This commit is a routine internal refactor of Bitcoin Core's networking code. It lets callers of two connection-opening functions optionally specify a proxy server themselves, instead of always relying on the default automatic proxy selection. It also makes one of those functions report whether the connection succeeded. The change is described by the author as enabling future use cases (for example, routing IPv4/IPv6 peer connections through a Tor SOCKS5 proxy) and is not presented as a security fix. There is no evidence in the commit of a vulnerability being patched.

Lower-priorityrefactor: untangle assumevalid decision branchesby Lőrinc · f2ea6f04 · Oct 2, 2025 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Lőrinc

refactor: untangle assumevalid decision branches

Flatten nested conditionals into a linear gating sequence for readability and precise logging. No functional change, TODOs are addressed in next commit

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

This commit is a pure code cleanup in Bitcoin Core's block validation logic. It rewrites a set of nested 'if' checks into a flat sequence of 'if/else if' checks and adds named constants and TODO comments. The commit message explicitly says 'No functional change', and the logic appears identical to the original.

Lower-prioritylog: split assumevalid ancestry-failure-reason messageby Lőrinc · 45bd8914 · Oct 2, 2025 · 2 filesMessage 95 · StrongInformational 15Details
Commit message · Lőrinc

log: split assumevalid ancestry-failure-reason message

When the assumevalid ancestry check fails, log a precise reason:
- "block height above assumevalid height" if the block is above the assumevalid block (the default reason)
- "block not in of assumevalid chain" otherwise

The new split was added under the existing condition to simplify conceptually that the two cases are related.
It could still be useful to know when the block is just above the assumevalid block or when it's not even on the same chain.

Update the functional test to assert the new reason strings. No behavior change.

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

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

This commit only changes the wording of a debug log message. It splits one log reason into two more specific reasons so developers can tell whether a block is above the assumevalid block height or on a completely different chain. The commit message explicitly says 'No behavior change.'

Lower-priorityvalidation: log initial script verification stateby Lőrinc · 9bc29855 · Oct 2, 2025 · 2 filesMessage 90 · StrongInformational 13Details
Commit message · Lőrinc

validation: log initial script verification state

Replaced `atomic<bool>` with `std::optional<bool>` (logged once on first observation). Safe because `ConnectBlock` holds `cs_main`.\
After this change, the state is logged before the very first `UpdateTip` line.

Co-authored-by: Eunovo <eunovo9@gmail.com>
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
Co-authored-by: w0xlt <woltx@protonmail.com>

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
defensive validation
AI analysis · Informational 13/100

This change only affects logging: it records whether Bitcoin Core is performing full script verification the first time that state is observed, and it moves the log line to appear before the first 'UpdateTip' message. There is no security vulnerability here.

Lower-prioritylog: separate script verification reasonsby Lőrinc · 6c13a38a · Oct 2, 2025 · 3 filesMessage 78 · AdequateInformational 15Details
Commit message · Lőrinc

log: separate script verification reasons

Replace `fScriptChecks` with `script_check_reason` and log the precise reason when checks are enabled; log a plain "Disabling" when they are skipped.
Adjust the functional test to assert the new reason strings.

Co-authored-by: w0xlt <woltx@protonmail.com>
Co-authored-by: Eunovo <eunovo9@gmail.com>
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
Co-authored-by: TheCharlatan <seb.kung@gmail.com>
Co-authored-by: Andrew Toth <andrewstoth@gmail.com>

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

This change only improves logging messages. It replaces a simple on/off flag with a descriptive reason for why Bitcoin Core enables or skips script verification when connecting blocks. No security behavior is changed; the same decisions are made, but the log output now explains them.

Lower-prioritytest: add assumevalid scenarios scaffoldby Lőrinc · 4fad4e99 · Oct 2, 2025 · 1 fileMessage 90 · StrongInformational 14Details
Commit message · Lőrinc

test: add assumevalid scenarios scaffold

Increase the test to 6 nodes and add flows for baseline, deep anchor, and too-recent cases, plus scaffolding for off-best-header, not-in-assumevalid,
and reindex gates.
Assertions are minimal here; follow-ups add reason checks.

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

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

This commit only adds new test cases to a Bitcoin Core functional test file. It expands the existing assumevalid test from 3 to 6 nodes and adds scaffolding for additional scenarios, but it does not change any production code. The assertions are intentionally minimal and described as follow-up work. There is no security fix or vulnerability being introduced here.

Lower-priorityinit: Signal m_tip_block_cv on Ctrl-Cby Ryan Ofsky · c25a5e67 · Oct 1, 2025 · 3 filesMessage 88 · StrongLow 28Details
Commit message · Ryan Ofsky

init: Signal m_tip_block_cv on Ctrl-C

Signal m_tip_block_cv when Ctrl-C is pressed or SIGTERM is received, the same
way it is currently signalled when the `stop` RPC is called. This lets RPC
calls like `waitforblockheight` and IPC calls like `waitTipChanged` be
interrupted, instead of waiting for their original timeouts and delaying
shutdown.

Historical notes:

- The behavior where `stop` RPC signals `m_tip_block_cv`, but CTRL-C does not,
has been around since the condition variable was introduced in #30409
(7eccdaf16081d6f624c4dc21df75b0474e049d2b).
- The signaling was later moved without changing behavior in #30967
(5ca28ef28bcca1775ff49921fc2528d9439b71ab). This commit moves it again to
the Interrupt() function, which is probably the place it should have been
added initially, so it works for Ctrl-C shutdowns as well as `stop`
shutdowns.
- A Qt shutdown bug calling wait methods was fixed previously in #18452
(da73f1513a637a9f347b64de66564d6cdb2541f8), and this change updates that
fix to avoid the hang happening again in Qt.

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Low 28/100

This commit fixes a shutdown bug in Bitcoin Core. When a user pressed Ctrl-C or the process received SIGTERM, threads waiting for the blockchain tip to change (such as those handling 'waitforblockheight' RPC calls or Qt wallet wait methods) would not be woken up. This delayed shutdown until those calls hit their timeouts. The fix moves the wake-up signal so it fires during any shutdown path, not just the 'stop' RPC path. It is a reliability/usability fix, not a security vulnerability that can be exploited by an attacker.

Lower-prioritynet: change FindNode() to not return a node and rename itby Vasil Dimov · 2a4450cc · Oct 1, 2025 · 2 filesMessage 73 · AdequateModerate 51Details
Commit message · Vasil Dimov

net: change FindNode() to not return a node and rename it

All callers of `CConnman::FindNode()` use its return value `CNode*` only
as a boolean null/notnull. So change that method to return `bool`.

This removes the dangerous pattern of handling a `CNode` object (the
return value of `FindNode()`) without holding `CConnman::m_nodes_mutex`
and without having that object's reference count incremented for the
duration of the usage.

Also rename the method to better describe what it does.

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

This commit is a preventive safety change in Bitcoin Core's networking code. It renames and rewrites an internal lookup function so it only answers 'yes/no' about whether a connection already exists, instead of handing back a live peer object that callers might accidentally use without proper locking or reference counting. The commit itself does not claim to fix an active bug or vulnerability, but it removes a risky pattern that could lead to crashes or memory-safety issues in the future.

Lower-prioritydoc: clarify peer address in getpeerinfo and addnode RPC helpby Vasil Dimov · 87e7f379 · Oct 1, 2025 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Vasil Dimov

doc: clarify peer address in getpeerinfo and addnode RPC help

The returned value in `getpeerinfo/addr` could be a hostname as well as
an IP address and the `:port` part could be missing. It is displayed
from `CNode::m_addr_name` which could have been set from RPC `addnode`
where the argument is allowed to be a hostname and an optional port.

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

This commit only updates the user-facing help text for two Bitcoin Core RPC commands, getpeerinfo and addnode. It clarifies that the displayed peer address can be a hostname (not just an IP address) and that the port number is optional. There is no code behavior change, no bug fix, and no security relevance.

Lower-prioritynet: avoid recursive m_nodes_mutex lock in DisconnectNode()by Vasil Dimov · 4268abae · Oct 1, 2025 · 1 fileMessage 73 · AdequateInformational 23Details
Commit message · Vasil Dimov

net: avoid recursive m_nodes_mutex lock in DisconnectNode()

Have `CConnman::DisconnectNode()` iterate `m_nodes` itself instead of
using `FindNode()`. This avoids recursive mutex lock and drops the only
caller of `FindNode()` which used the return value for something else
than a boolean found/notfound.

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

This commit changes how Bitcoin Core finds a network peer when disconnecting it by address. Previously it called an internal helper (FindNode) that would lock the same peer-list mutex again while already holding it, creating a recursive lock. The patch makes the function search the peer list directly, avoiding that double-lock. Recursive mutex locks can hide deadlocks or, in some lock implementations, cause failures if the mutex is later changed to non-recursive. The change is defensive cleanup rather than a fix for a known remotely exploitable bug.

Lower-priorityfuzz: Drop unused workaround after Apple-Clang bumpby MarcoFalke · 1aaaaa07 · Oct 1, 2025 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · MarcoFalke

fuzz: Drop unused workaround after Apple-Clang bump

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

This is a tiny cleanup change in Bitcoin Core's internal fuzz-testing code. It removes a workaround comment and simplifies how fuzz test targets are registered. There is no security issue here.