BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

258security candidates613second-pass queue2891AI analyses
195commits · 30 days
469commits · 60 days
1488commits · 180 days
2864commits · 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
959Strong · 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 Chow16351161065
MarcoFalke41021406074
Lőrinc17721177081
fanquake22819226057
Hennadii Stepanov21214208063
rkrux57957074
Sjors Provoost89889074
merge-script36718088
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 25 minutes ago

Low 28 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35959: Update secp256k1 subtree to latest master

This commit updates Bitcoin Core's embedded copy of the secp256k1 cryptographic library to a newer version. The update adds a new Silent Payments module, lets advanced users swap in a custom SHA256 compression function, removes some old de…

Dependency update of a core cryptographic library (libsecp256k1)New runtime SHA256 compression callback with self-test/smoke test to catch mis-implementations earlyBehavior change in ellswift_xdh to reject secret keys >= curve order (vendor states not a security issue)
625f951bby Ava Chow+297−11626 files
No security note in commit
Informational 23 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35605: wallet: rpc: Deprecate `removeprunedfunds` RPC

This commit deprecates a Bitcoin Core wallet RPC command called removeprunedfunds. The command lets users delete transactions from their own wallet, which can alter displayed balances. The change does not fix a software bug; it is a cleanu…

RPC allows deletion of arbitrary wallet transactions, affecting balancesDeprecation framed by authors as removing a dangerous and maintenance-burden featureNo authentication bypass, memory corruption, or consensus change present in diff
e9ed5e83by Ava Chow+64−695 files
No security note in commit
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
Repository ledger

Explore captured commits

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

AI review queuedlog: Use LogError for fatal errorsby MarcoFalke · fa0018d0 · Nov 27, 2025 · 10 filesMessage 45 · ThinLow 27Details
Commit message · MarcoFalke

log: Use LogError for fatal errors

45/100 · ThinMessage clarity
✓ 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 commit only changes which logging function is used for error and fatal-condition messages across Bitcoin Core. It replaces generic LogPrintf calls with LogError (and one LogInfo) so that serious problems are more clearly marked in logs. There is no change to program logic, no bug fix, and no security vulnerability being patched.

Lower-prioritycontrib: Avoid outputting binary data to TTYby Hodlinator · e7e51952 · Nov 27, 2025 · 1 fileMessage 45 · ThinInformational 18Details
Commit message · Hodlinator

contrib: Avoid outputting binary data to TTY

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

A small change to a helper Python script used for building network maps. The script now refuses to write raw binary output directly to a terminal window, because doing so can garble the screen and, in rare cases, cause a terminal to misinterpret control characters. This is a hardening improvement rather than a fix for an active attack.

Lower-prioritytest: move SEQUENCE_LOCKTIME flags to scriptby Sjors Provoost · 592157b7 · Nov 27, 2025 · 2 filesMessage 67 · AdequateInformational 15Details
Commit message · Sjors Provoost

test: move SEQUENCE_LOCKTIME flags to script

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

This commit is a minor test-code cleanup. It moves four named constants related to BIP68 sequence locktime rules from one test file into the shared test framework library. No production code, consensus rules, or security behavior is changed.

Lower-prioritydoc: Fix typo in init logby MarcoFalke · 22229de7 · Nov 27, 2025 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · MarcoFalke

doc: Fix typo in init log

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

This commit fixes a single-word typo in a log message. The phrase 'on non-prune mode' was corrected to 'in non-prune mode'. It has no effect on program behavior, security, or user data.

AI review queuedwallet: Have GetBalance report used amount directly without two callsby Anthony Towns · 81e763f1 · Nov 27, 2025 · 5 filesMessage 50 · ThinInformational 19Details
Commit message · Anthony Towns

wallet: Have GetBalance report used amount directly without two calls

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

This is a small internal cleanup in how Bitcoin Core wallets report balances for reused addresses. It does not fix a vulnerability or change user-facing totals; it just computes the 'used' balance in one pass instead of calling the balance function twice and subtracting. There is no security issue visible in the change.

Lower-prioritynet: fix use-after-free with v2->v1 reconnection logicby Eugene Siegel · 167df7a9 · Nov 26, 2025 · 2 filesMessage 73 · AdequateLow 49Details
Commit message · Eugene Siegel

net: fix use-after-free with v2->v1 reconnection logic

CConnman::Stop() resets semOutbound, yet m_reconnections is not
cleared in Stop. Each ReconnectionInfo contains a grant member
that points to the memory that semOutbound pointed to and ~CConnman
will attempt to access the grant field (memory that was already
freed) when destroying m_reconnections. Fix this by calling
m_reconnections.clear() in CConnman::Stop() and add appropriate
annotations.

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

This commit fixes a memory-handling bug that occurs when Bitcoin Core shuts down its network connections. A list of pending reconnections held references to a memory resource (semaphore) that was freed during shutdown. When the program later destroyed that list, it could read already-freed memory, which can cause crashes or unpredictable behavior. The fix clears the reconnection list before freeing the underlying resource and adds code annotations to prevent the wrong lock from being held during shutdown.

Lower-prioritytest: check for output to stdout in `TestShell` testby Sebastian Falbesoner · 52230a7f · Nov 26, 2025 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Sebastian Falbesoner

test: check for output to stdout in `TestShell` test

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 changes a test file. It improves an existing test by checking that a warning message ('TestShell is already running!') is actually printed to the screen when a second TestShell is started. There is no change to Bitcoin Core's production code, no security fix, and no vulnerability.

Lower-prioritycontrib: Count entry differences in asmap-tool diff summaryby Fabian Jahr · fd4ce551 · Nov 26, 2025 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Fabian Jahr

contrib: Count entry differences in asmap-tool diff summary

Also uses num_addresses from ipaddress instead of calculating it
ourselves.

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

This is a small cleanup change to a helper script used for comparing internet routing maps (asmap files). It only changes how the tool reports summary statistics: it now counts the number of changed entries separately from the number of affected IP addresses, and uses a built-in library function instead of a manual calculation. There is no security relevance.

Lower-prioritypolicy: Allow any transaction version with < minrelayby Greg Sanders · 1488315d · Nov 26, 2025 · 6 filesMessage 73 · AdequateLow 49Details
Commit message · Greg Sanders

policy: Allow any transaction version with < minrelay

Prior to cluster mempool, a policy was in place that
disallowed non-TRUC transactions from being
TX_RECONSIDERABLE in a package setting if it was below
minrelay. This was meant to simplify reasoning about mempool
trimming requirements with non-trivial transaction
topologies in the mempool. This is no longer a concern
post-cluster mempool, so this is relaxed.

In effect, this makes 0-value parent transactions relayable
through the network without the TRUC restrictions and
thus the anti-pinning protections.

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

This Bitcoin Core commit relaxes a mempool policy rule. Previously, only a special transaction type called TRUC could be below the minimum relay fee when submitted as part of a package. Now any transaction version can be below that fee if it is part of a package that overall pays enough fees. The change is described by the developers as safe because of the newer cluster mempool design, but it removes one anti-pinning protection and makes zero-fee parent transactions relayable under certain conditions.

Lower-priorityci: clear out space on centos jobby will · e07e5736 · Nov 26, 2025 · 2 filesMessage 98 · StrongInformational 15Details
Commit message · will

ci: clear out space on centos job

Clear out space on the centos job be deleteing unnecessary files.

Raised by #33293 which pointed to a solution like https://github.com/google/oss-fuzz/commit/b7f04d782277638a67bc44865de445977eed4708

Only runs when cache provider (runner) is `gha`, and on the CentOS job.

98/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✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencedocumentation-only discount
AI analysis · Informational 15/100

This commit adds a GitHub Actions cleanup step that deletes large pre-installed software folders (like .NET, Android SDK, Node modules) on CentOS CI runners to free disk space. It only affects Bitcoin Core's own continuous integration environment and does not change any Bitcoin node code, wallet logic, or network behavior. There is no security issue in the change itself.

Lower-prioritycontrib: rename gen-sdk to gen-sdk.pyby fanquake · 3e01b5d0 · Nov 26, 2025 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · fanquake

contrib: rename gen-sdk to gen-sdk.py

This puts it in scope for the Python linters.

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

This commit simply renames a helper script from gen-sdk to gen-sdk.py and updates the documentation link. The file contents are identical. It is a routine tooling change with no security relevance.

Lower-prioritymacdeploy: disable compression in macOS gen-sdk scriptby fanquake · c1213a35 · Nov 26, 2025 · 4 filesMessage 81 · StrongInformational 15Details
Commit message · fanquake

macdeploy: disable compression in macOS gen-sdk script

Starting with Python 3.11, Pythons gzip might delegate to zlib.
Depending on the OS, i.e Ubuntu vs Fedora, the underlying zlib
implementation might differ, resulting in different output.

For now, or until a better solution exists, disable compression. This
results in the SDK increasing in size to ~157mb. Which is not
unreasonable, to regain determinism (and would be significantly worse
without the previous commit).

See: https://docs.python.org/3/library/gzip.html#gzip.compress

Co-authored-by: stickies-v <stickies-v@protonmail.com>

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 changes the macOS SDK packaging script for Bitcoin Core so that it produces an uncompressed .tar archive instead of a .tar.gz archive. The reason is that different Linux distributions use different underlying compression libraries, which can produce slightly different compressed files even from identical input. That breaks reproducible builds (determinism), where everyone expects the exact same output. The uncompressed archive is larger (~157 MB) but byte-for-byte identical across machines. There is no security vulnerability being fixed here.

Lower-prioritycontrib: more selectively pick files for macOS SDKby fanquake · a33d0345 · Nov 26, 2025 · 2 filesMessage 73 · AdequateInformational 18Details
Commit message · fanquake

contrib: more selectively pick files for macOS SDK

Only include what we really need. Skip 100s of mb of manpages,
swiftmodules, modulemaps.
Note that System/Library is only needed for the Qt build.

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

This change trims the macOS software development kit (SDK) archive used to build Bitcoin Core for Mac. Instead of bundling the entire SDK, the script now only includes specific directories needed for compilation. This reduces download size and shrinks the attack surface by leaving out unnecessary files such as Swift modules, module maps, and manpages. It is a hardening and maintainability improvement rather than a fix for a known vulnerability.

AI review queuedtest: Fix "typo" in written invalid contentby MarcoFalke · fad61185 · Nov 26, 2025 · 1 fileMessage 94 · StrongInformational 15Details
Commit message · MarcoFalke

test: Fix "typo" in written invalid content

The appended content is irrelevant, but fix the "typo" to avoid
spellchecker warnings.

94/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This is a one-word change in a test file. A developer fixed a misspelled string ('invald wallet' to 'invalid_wallet_content') used only to create intentionally corrupted wallet data for a test. It has no effect on the actual Bitcoin Core software that users run.

AI review queuedcontrib: Use text=True in subprocess over manual encoding handlingby MarcoFalke · fab085c1 · Nov 26, 2025 · 12 filesMessage 73 · AdequateInformational 15Details
Commit message · MarcoFalke

contrib: Use text=True in subprocess over manual encoding handling

All touched Python scripts already assume and require UTF8, so manually
specifying encoding or decoding for functions in the subprocess module
is redundant to just using text=True, which exists since Python 3.7

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

This commit is a routine code cleanup in Bitcoin Core's helper and test scripts. It replaces manual UTF-8 decoding of subprocess output with Python's built-in text=True option. There is no security-relevant change: the behavior is functionally equivalent, only the code is simpler and more consistent.

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.

Lower-prioritylint: Drop check to enforce encoding to be specified in Python scriptsby MarcoFalke · fa7d72bd · Nov 26, 2025 · 1 fileMessage 81 · StrongInformational 14Details
Commit message · MarcoFalke

lint: Drop check to enforce encoding to be specified in Python scripts

The check was incomplete and brittle. A better check would be to enable
`PYTHONWARNDEFAULTENCODING=1`
https://docs.python.org/3/whatsnew/3.10.html#optional-encodingwarning-and-encoding-locale-option

However, it is unclear what the goal of adding explicit encodings
everywhere is, given that:

* Most modern systems already have UTF-8 enabled by default, except for
Windows.
* Python 3.15 will likely enable it globally by default, according to
https://peps.python.org/pep-0686/#abstract
* Adding the explicit encodings will bloat all code for no benefit.

So remove the lint check and drop all redundant encoding= kwargs.

All encoding= that are set for a reason, are kept.

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

This commit removes a lint (code-quality) script that checked whether Python code in the repository explicitly specified UTF-8 encoding when opening text files or reading subprocess output. It is a tooling/development cleanup, not a change to Bitcoin Core's runtime code, consensus logic, wallet handling, or network behavior. There is no direct security vulnerability in the diff itself.

Lower-prioritytest: Clarify that Python UTF-8 mode is the default today for most systemsby MarcoFalke · faf39d85 · Nov 26, 2025 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · MarcoFalke

test: Clarify that Python UTF-8 mode is the default today for most systems

It will likely be the default for all systems, starting with Python
3.15, according to https://peps.python.org/pep-0686/#abstract.

It is hard to find a system other than Windows that has it not enabled
today. Nonetheless, Bitcoin Core requires UTF-8 in scripts and normally
enforces it via LC_ALL=C.UTF-8 or PYTHONUTF8=1.

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates a test documentation file (test/README.md) to clarify that Python's UTF-8 mode is already the default on most systems. It is a documentation-only change with no code modifications, no security fixes, and no behavior changes.

Lower-prioritylint: Do not allow locale dependent shell scriptsby MarcoFalke · fa83e3a8 · Nov 26, 2025 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · MarcoFalke

lint: Do not allow locale dependent shell scripts

Bash is discouraged, and there was never a need to write locale
dependent Bash.

So remove the option and clarify that the LC_ALL settings enable UTF-8
mode in Python.

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

This is a minor change to a linting script that checks shell scripts for locale settings. It removes an optional opt-out for locale-dependent scripts and clarifies documentation. There is no security-relevant change to Bitcoin Core's runtime behavior, consensus code, or network handling.

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.

AI review queuedtest: Add musig failure scenariosby Fabian Jahr · 217dbbbb · Nov 25, 2025 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Fabian Jahr

test: Add musig failure scenarios

Also changes the the non-constant variable NUM_WALLETS to lower case and
refactors the success case scenarios to reuse existing code.

Co-authored-by: rkrux <rkrux.connect@gmail.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
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds new test cases to Bitcoin Core's existing MuSig wallet test file. It checks that the software correctly refuses to finalize transactions when required nonces or partial signatures are missing. 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.

Lower-priorityfix: remove redundant mempool lock in ChainImpl::isInMempool()by Fibonacci747 · 2909655f · Nov 25, 2025 · 1 fileMessage 62 · AdequateInformational 11Details
Commit message · Fibonacci747

fix: remove redundant mempool lock in ChainImpl::isInMempool()

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

This commit removes a protective lock around a simple mempool check. The change is presented as a cleanup of a redundant lock, but removing synchronization around concurrent data structures can in theory introduce race conditions. There is no direct evidence in the commit or supplied materials that this causes a real exploitable bug.

Lower-priorityMove ci_exec to the Python scriptby MarcoFalke · fa336053 · Nov 25, 2025 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · MarcoFalke

Move ci_exec to the Python script

The Bash script was acceptable, but CI_EXEC_CMD_PREFIX was a single
string, relying on brittle word splitting that the shellcheck SC2086
would warn about.

So just fix that by moving everything to the Python script and deleting
the Bash script.

This also removes the need to export the CI_CONTAINER_ID env var.

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

This commit is a routine internal cleanup of Bitcoin Core's continuous integration (CI) scripts. It moves logic from a Bash script into an equivalent Python script to avoid a shell lint warning about word splitting. There is no user-facing change, no network code change, and no security-relevant behavior change.