BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

315security candidates666second-pass queue3001AI analyses
153commits · 30 days
332commits · 60 days
1307commits · 180 days
2862commits · 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.

71/100 average clarity
1166Strong · 80–100
1206Adequate · 60–79
701Thin · 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.
merge-script1994588389
Antoine Poinsot22422170
Ava Chow19265186068
MarcoFalke41421408074
fanquake23121228058
Lőrinc18121177081
Hennadii Stepanov22316211064
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 12 minutes ago

Low 44 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36284: wallet: don't double discard output groups with avoidpartialspends

This is a wallet bug, not a theft or remote-code bug. When a Bitcoin Core user turns on the optional 'avoidpartialspends' or 'avoid_reuse' setting, an output group rejected during coin selection could be counted twice as 'discarded.' That …

Logic error causing double-counting of discarded UTXO groupsCan trigger false 'insufficient funds' failure in coin selectionAffects avoidpartialspends / avoid_reuse wallets only
e8e7e91aby Ava Chow+43−14 files
No security note in commit
Informational 18 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35890: doc: use overwrite (>) instead of append (>>) for one-shot PSBT files in offline-signing-tutorial.md

This is a documentation-only fix in a tutorial file. It changes two shell examples from using '>>' (append to file) to '>' (overwrite file). If a user followed the old instructions and ran the same command twice, the file would contain two…

No security signal: change is limited to documentationNo code changes to Bitcoin Core binaries, RPC, wallet, or consensus logicNo cryptographic, network, or privilege-boundary implications
bfdcd979by merge-script+2−21 file
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35675: mining: add block template manager

This is a large internal code reorganization (refactor) in Bitcoin Core. It creates a new BlockTemplateManager class that takes over block-template creation, block submission, and tip-waiting helpers that were previously spread across seve…

Large refactor touching mining, RPC, interfaces, and test shutdown pathsNew object lifetime dependency: BlockTemplateManager holds references to mempool, chainman, and notifications; explicit reset ordering added in Shutdown/InitAndLoadChainstate/test setupsRemoval of early-init node.mining interface; BlockTemplateManager is now created after chainstate load, with a comment that it must exist before setChainstateLoaded(true) unblocks IPC waiters
5c726f20by Ryan Ofsky+561−44926 files
No security note in commit
Informational 12 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35301: Silent Payments: Implement bip352 (take 2)

This commit adds the first implementation of BIP352 (Silent Payments) to Bitcoin Core. Silent Payments are a new type of privacy-preserving Bitcoin address that lets someone receive payments without publicly revealing a fixed address. The …

New cryptographic feature implementation (BIP352 Silent Payments)Extensive use of secp256k1 silentpayments moduleInput public key extraction from P2PKH, P2WPKH, P2SH-P2WPKH, and P2TR inputs
be5d0b55by Ava Chow+6951−010 files
No security note in commit
Low 45 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35440: wallet: check descriptor cache xpub length before decoding

This update fixes a wallet database loading bug where a damaged or tampered Bitcoin wallet file could cause the program to read past the end of a stored extended public key (xpub). The patch makes the loader check the stored xpub length be…

Out-of-bounds read in wallet descriptor cache deserializationASan container-overflow triggered by malformed on-disk recordMissing length validation between record size prefix and fixed-size decoder
b3f846ecby Ava Chow+225−8511 files
Vendor flagged security relevance
Informational 20 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35813: wallet, rpc: Add listrawtransactions RPC

This commit adds a new wallet RPC called listrawtransactions to Bitcoin Core. It is a feature addition that lets users list every transaction their wallet knows about, including internal transfers and consolidations that the existing listt…

No security-relevant bug fix or vulnerability patch is present in the diff.New RPC exposes additional wallet transaction metadata, but only to callers already authorized for wallet RPCs.Code is a refactor of existing gettransaction logic into shared helpers; no new cryptographic, network, or consensus code.
2b95b45aby Ava Chow+334−276 files
No security note in commit
Moderate 68 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35752: wallet: make encryption state updates atomic

This Bitcoin Core update fixes several wallet bugs where a failed database write could leave a wallet in an inconsistent state. For example, encrypting a wallet or changing its passphrase could appear to succeed in memory while the change …

Atomicity fix for encryption state and descriptor key persistenceFailure to persist master key during encryption previously reported success in memoryPassphrase change could activate new passphrase only in memory
7ee3d622by Ava Chow+379−16418 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35619: test: ExtendedPrivateKey follow-ups

This commit only changes Bitcoin Core's internal functional test code. It replaces hard-coded test keys and addresses with ones generated from a new test helper class, and unifies how tests tell nodes not to create a default wallet. There …

248ce46fby merge-script+18−244 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36261: test: cover PSBT unknown field merging

This commit only adds a new automated test to Bitcoin Core. It checks that when two partially-signed Bitcoin transactions (PSBTs) are combined, any custom 'unknown' data fields attached to them are preserved correctly. There is no change t…

bbc40edeby merge-script+130−01 file
No security note in commit
Informational 18 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36230: wallet: Improve `HasWalletDescriptor` performance and other canonical descriptor string followups

This is a Bitcoin Core wallet maintenance patch. It speeds up a wallet function that checks whether a descriptor already exists by caching a hash of the descriptor's canonical text, instead of rebuilding that text every time. It also tidie…

No security-relevant signal in commit message or diffChange is described as performance improvement and code cleanupBackwards-compatibility test notes a known miniscript wallet loading incompatibility between v31.0/v31.1 and other versions, but this is a documented compatibility quirk, not a vulnerability
4a583f38by merge-script+97−429 files
No security note in commit
Informational 21 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36297: rpc: Correct invalid OpenRPC defaults

This is a documentation-only fix for Bitcoin Core's machine-readable RPC help data. It changes several default values from literal strings to 'hint' labels (because the real default depends on context) and corrects one boolean default from…

OpenRPC schema/default mismatch correctionRPC help metadata type correction (string 'false' to boolean false)No executable code path changes
5f05d8c5by merge-script+6−63 files
No security note in commit
Informational 20 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

rpc: Correct OpenRPC default metadata

This commit fixes documentation metadata for six Bitcoin Core RPC arguments. It changes how default values are described so that automatically generated API docs and schemas are accurate. The actual behavior of the software when running is…

No runtime code changesOnly RPC help/schema metadata modifiedVendor explicitly states runtime behavior is unchanged
b7f740c5by will+6−63 files
No security note in commit
Informational 24 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36286: crypto: Fix MuHash3072 division by itself

This commit fixes a bug in Bitcoin Core's MuHash3072 cryptographic code where dividing a MuHash object by itself (x /= x) produced the wrong mathematical result. The fix is straightforward: the code now saves the divisor's numerator before…

Cryptographic correctness bug in MuHash3072 division operatorSelf-aliasing in operator/= produces incorrect 1/D result instead of empty setNo production code path identified that triggers self-division
d48e76e6by merge-script+11−13 files
No security note in commit
Informational 18 AI analysisMessage 93 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36285: refactor: Use static const over inline const to work around ld64 bug

This is a build-compatibility fix, not a security patch. It changes how some constant data is stored internally so that Apple's macOS linker (ld64) can build Bitcoin Core correctly. The change avoids a linker bug that caused build failures…

No security-relevant code logic changedChange is a linker bug workaround, not a vulnerability fixConstants remain read-only; no new attack surface introduced
ad97933aby merge-script+8−82 files
No security note in commit
Informational 23 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#34861: wallet: Add importdescriptors interface

This commit refactors Bitcoin Core's wallet descriptor import feature so the same logic can be used by both the RPC command and a new GUI-facing interface. It also tightens one input rule: negative timestamps are now rejected, and the mini…

Refactor of security-sensitive wallet import code into shared CWallet pathNew input validation: negative timestamps rejected for importdescriptorsCentralization of descriptor range bound checks in CheckDescriptorRangeBounds
2bbbeaa6by Ava Chow+619−26415 files
No security note in commit
Low 30 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36260: torcontrol: Use reconnect backoff after dropped connections

This change fixes a bug in how Bitcoin Core reconnects to the Tor control port. A previous update accidentally removed the wait time between reconnect attempts when an already-established Tor control connection was dropped. Without the wai…

Uncontrolled retry loop causing resource exhaustion and log floodingLocal-only Tor control port interaction; no remote attacker path by defaultRegression introduced by prior refactor (#34158) and restored here
fb68c270by merge-script+32−332 files
No security note in commit
Informational 18 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36256: guix: Update osslsigncode to 2.14

This change updates the Windows code-signing tool used in Bitcoin Core's reproducible build process. It fixes a build-time failure where signature verification could not complete because a certificate package was missing and the old tool v…

Tooling update in release signing pipelineRestores CA certificate store for signature verificationDisables CRL/CDP network lookups during verification
7dedc454by Hennadii Stepanov+22−22 files
No security note in commit
Informational 19 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#34566: feature: Use different datadirs for different signets

This change lets Bitcoin Core store different custom signet blockchains in separate data folders, using a unique suffix derived from each signet's network identifier. It also adds a friendlier error hint in bitcoin-cli when an RPC authenti…

Data isolation between distinct custom signets reduces risk of cross-network state corruption or accidental mainnet/testnet confusionNo memory-safety, cryptographic, or consensus changes observedNo privilege escalation, remote code execution, or denial-of-service vectors introduced in the diff
d32a515fby merge-script+211−4412 files
No security note in commit
Informational 19 AI analysisMessage 81 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36251: rest: add `generated` and `height` to spenttxouts JSON

This change adds two extra pieces of information—whether a spent output came from a coinbase transaction and the block height at which it was created—to a Bitcoin Core REST API endpoint. It is a feature/parity improvement to make the REST …

dadca55fby merge-script+13−54 files
No security note in commit
Low 33 AI analysisMessage 91 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#34743: p2p: don't disconnect manual peers for block stalling

This change makes Bitcoin Core treat manually-added peers (from -addnode, -connect, or the addnode RPC) more gently during Initial Block Download (IBD). Previously, if such a peer was slow or stalled at sending blocks, the node would disco…

Behavior change in peer disconnection logic during IBDManual peers exempted from block-stalling disconnectionNew per-peer cooldown state m_block_download_paused_until introduced
cff00c54by merge-script+148−168 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 queuedtest: Bumping a transaction prevents bumping malleationsby Ava Chow · 2c6047df · Aug 13, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Ava Chow

test: Bumping a transaction prevents bumping malleations

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

This commit only adds and updates a test file. It does not change any production wallet code. The new test checks that when a user has both an original transaction and a malleated version of it in their wallet, bumping the fee on one of them correctly prevents the other from also being bumped. This is a regression test for existing behavior, not a security fix.

AI review queuedtest: Test rbf metadata sync of malleated txby Ava Chow · a44f9ad3 · Aug 13, 2026 · 1 fileMessage 67 · AdequateInformational 12Details
Commit message · Ava Chow

test: Test rbf metadata sync of malleated tx

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

This commit only adds a new automated test to Bitcoin Core. It checks that when a user creates a replace-by-fee (RBF) transaction and someone later alters (malleates) that transaction, the wallet still correctly preserves the user's original comment and the ID of the transaction it replaced. There is no change to production wallet code here, only a regression test.

AI review queuedwallet: Clarify IsEquivalentTo is actually checking malleationby Ava Chow · 34533d5d · Aug 13, 2026 · 3 filesMessage 73 · AdequateInformational 15Details
Commit message · Ava Chow

wallet: Clarify IsEquivalentTo is actually checking malleation

IsEquivalentTo is used to determine whether another CWalletTx is
actually a malleation of the current tx. Rename to clarify this.

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 simple rename and documentation update. A wallet function called IsEquivalentTo is renamed to IsMalleation, and its comment is expanded to explain exactly what it checks. No behavior changes, no bug fixes, and no security implications are present in the diff.

AI review queuedtest: Test that metadata is synced to malleated transactionsby Ava Chow · fc718ade · Aug 13, 2026 · 1 fileMessage 72 · AdequateInformational 12Details
Commit message · Ava Chow

test: Test that metadata is synced to malleated transactions

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

This commit only adds a new test to Bitcoin Core. It checks that when a transaction is 'malleated' (changed slightly without invalidating it, for example by changing the signature type), any user-provided metadata such as a comment is still correctly copied to the modified transaction in the wallet. There is no code fix or behavior change in the main Bitcoin software—only a new automated test.

Lower-priorityMerge bitcoin/bitcoin#35951: doc: release note about I2P ElGamal sunsetby merge-script · 11090c8b · Aug 13, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35951: doc: release note about I2P ElGamal sunset

800ad9c3c0c4cbd09653e7889bf981d7ed557759 doc: release note I2P ElGamal sunset (Jon Atack)

Pull request description:

See discussion in https://github.com/bitcoin/bitcoin/pull/35696.

ACKs for top commit:
janb84:
re ACK 800ad9c3c0c4cbd09653e7889bf981d7ed557759
sedited:
ACK 800ad9c3c0c4cbd09653e7889bf981d7ed557759

Tree-SHA512: 35ba1f0a25b0921ca81fb531500a15dc6ea34b304637b1a7e675f4bd772e6af85d024a3d672dcaf73a5b438a2d6d45c741f41daf140efc29a068e54affaa9025

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discountmerge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#35866: test: Verify unwelcome RPC clients are rejected before reading their requestsby Ava Chow · b2c45888 · Aug 12, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#35866: test: Verify unwelcome RPC clients are rejected before reading their requests

d055a3ab1005119befca290eaf7350ed0b42b49d test: verify disallowed RPC clients are rejected upon `accept()` (winterrdog)

Pull request description:

this is a follow-up PR from a suggestion in this [comment](https://github.com/bitcoin/bitcoin/pull/35592#pullrequestreview-4823271031)

it adds a unit test that confirms that clients not permitted by
`-rpcallowip` are rejected immediately after `accept()`, before any
request bytes are read from the socket

specifically, the test checks that: no request is ever dispatched to the
server's request handler, the connection is closed without any response
to the client, no `HTTPRemoteClient` is ever registered for it, and the
client's request bytes are left completely unread in the socket's
receive buffer

ACKs for top commit:
achow101:
ACK d055a3ab1005119befca290eaf7350ed0b42b49d
pinheadmz:
ACK d055a3ab1005119befca290eaf7350ed0b42b49d
w0xlt:
reACK d055a3ab1005119befca290eaf7350ed0b42b49d

Tree-SHA512: 5b99eb8a795e302333549f3ea5c76118c380402e2ebac8256db0a06ac0b4c0739b0b94471aa2f278214e65574e84f321b416e2543b361bf4fd8eb6854768377a

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
merge-commit duplicate discount
Security candidateMerge bitcoin/bitcoin#35959: Update secp256k1 subtree to latest masterby Ava Chow · 625f951b · Aug 12, 2026 · 26 filesMessage 81 · StrongLow 28Details
Commit message · Ava Chow

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

09cc345c3e323befc05bd6910704ed478f4e561e Squashed 'src/secp256k1/' changes from d2d04864ef..687155df6b (fanquake)

Pull request description:

We recently pulled the secp256k1 subtree (#35781), to get access to the recently-merged silent payments module (used in multiple PRs here). Since then, libsecp256k1 has merged more changes, and had a [`0.8.0` release](https://github.com/bitcoin-core/secp256k1/releases/tag/v0.8.0), so update to latest master again.

Includes:
* https://github.com/bitcoin-core/secp256k1/pull/1709
* https://github.com/bitcoin-core/secp256k1/pull/1776
* https://github.com/bitcoin-core/secp256k1/pull/1863
* https://github.com/bitcoin-core/secp256k1/pull/1869
* https://github.com/bitcoin-core/secp256k1/pull/1886
* https://github.com/bitcoin-core/secp256k1/pull/1896
* https://github.com/bitcoin-core/secp256k1/pull/1897
* https://github.com/bitcoin-core/secp256k1/pull/1899
* https://github.com/bitcoin-core/secp256k1/pull/1900
* https://github.com/bitcoin-core/secp256k1/pull/1901
* https://github.com/bitcoin-core/secp256k1/pull/1902
* https://github.com/bitcoin-core/secp256k1/pull/1903
* https://github.com/bitcoin-core/secp256k1/pull/1904
* https://github.com/bitcoin-core/secp256k1/pull/1906
* https://github.com/bitcoin-core/secp256k1/pull/1907

ACKs for top commit:
l0rinc:
ACK f464f6cd67e5c79c820532bba17f773928de6aec
achow101:
ACK f464f6cd67e5c79c820532bba17f773928de6aec
w0xlt:
ACK f464f6cd67e5c79c820532bba17f773928de6aec

Tree-SHA512: e7a3d0113c08fccd54f6734154aa6ed3aa06a6e52fb52eacb82c82c7079a23bfee8da9aa3934fc3c173097631394b4ba22d17ca6b73f6bf478dcb0c0a227d8d4

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathmerge-commit duplicate discount
AI analysis · Low 28/100

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 deprecated names, and tightens one edge-case check in the ElligatorSwift key-exchange code. The change is a routine dependency refresh; nothing in the commit message or diff is described by the vendor as a security fix, and the one behavior change (rejecting certain oversized secret keys in ellswift_xdh) is explicitly called out as not being a security issue.

AI review queuedMerge bitcoin/bitcoin#35605: wallet: rpc: Deprecate `removeprunedfunds` RPCby Ava Chow · e9ed5e83 · Aug 12, 2026 · 5 filesMessage 91 · StrongInformational 23Details
Commit message · Ava Chow

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

f280f5eb47497f53ff997e7d3bec9667cb60339a wallet: rpc: deprecate removeprunedfunds (David Gumberg)
e5b7785447fc130e8eb6d1a5e8ff051c68b0e8c6 test: wallet: resend: avoid internal behavior via removeprunedfunds (David Gumberg)

Pull request description:

Originally added in https://github.com/bitcoin/bitcoin/pull/7558 as a companion to `importprunedfunds`, this RPC has no known helpful use while being both dangerous and a maintenance burden.

Despite what the name says, it allows the deletion of arbitrary transactions, and `importprunedfunds` does not allow the importing of transactions not belonging to the user, and `listtransactions` does not list transactions not belonging to the wallet, so this RPC can only be used to delete transactions actually belonging to the wallet, and in the unlikely event that transactions not belonging to the wallet are present, they cause no harm except for occupying a few bytes on the users disk.

ACKs for top commit:
achow101:
ACK f280f5eb47497f53ff997e7d3bec9667cb60339a
polespinasa:
ACK f280f5eb47497f53ff997e7d3bec9667cb60339a
pablomartin4btc:
reACK f280f5eb47497f53ff997e7d3bec9667cb60339a

Tree-SHA512: ed9c30c50be514d637999b4c8f3fa9b9b1446a5553e3974703638b45d8f55f1291f5cfb82dd2ead6d0743e424e9e3b1edbd56fc04dae3dcdee4d175e2a1ce061

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 pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Informational 23/100

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 cleanup that warns users the command will be removed in a future release and requires a special startup flag to keep using it. The main practical effect is that scripts or users relying on removeprunedfunds will now need to enable it explicitly or switch to a different approach.

Lower-priorityMerge bitcoin/bitcoin#35867: test: classify SOCKS5 peers via getpeerinfo addrbindby merge-script · 2f72123f · Aug 12, 2026 · 3 filesMessage 91 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35867: test: classify SOCKS5 peers via getpeerinfo addrbind

4e8c4bc794c045beb678854e6e326fc04322c7c3 test: classify SOCKS5 peers via getpeerinfo addrbind (Henry Romp)

Pull request description:

p2p_private_broadcast.py classifies each SOCKS5 connection by scanning the node's debug log for `trying v. connection (...) to <addr>:<port>`, then attaches a fake peer for that type. The helper returned the first match in the whole log, so when a feeler selected a clearnet address that private broadcast had used earlier in the run (in the CI failure, `[50::1]:8333`, about 10 seconds apart), the feeler was labelled private-broadcast, was given the `NoRelayP2PInterface`, and disconnected as a feeler rather than with the expected "connected in vain" message.

Instead of relying on the debug log, identify the connection via the SOCKS5 proxy client socket's source address, which equals the node's `addrbind` for that peer, and read `connection_type` from getpeerinfo. The proxy replies to the SOCKS5 request before invoking `destinations_factory`, so the node has already registered the peer by the time classification runs. This also stops treating debug.log contents as a stable test interface. Dropping the log scrape removes a full re-read of debug.log per SOCKS5 connection; `p2p_private_broadcast.py` goes from ~23s to ~14s locally.

Fixes #35843

Tested with:
`build/test/functional/test_runner.py p2p_private_broadcast.py p2p_private_broadcast_retry_v1.py --timeout-factor=2`, and against the forced-feeler repro from the issue, which no longer mislabels the feeler.

ACKs for top commit:
jeanpablojp:
tACK 4e8c4bc794c045beb678854e6e326fc04322c7c3
andrewtoth:
ACK 4e8c4bc794c045beb678854e6e326fc04322c7c3
mzumsande:
Code Review ACK 4e8c4bc794c045beb678854e6e326fc04322c7c3

Tree-SHA512: ce2db418787d7ecf518bd49b37d7d664748fee5991a2924522dfaf42b27d90ca001caa0611011310636b453d3aada1061d086f20bb866eb66605645935f55c74

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
merge-commit duplicate discount
Lower-prioritycommon: remove ::runtime_error from RunCommandParseJSONby fanquake · 8b5da677 · Aug 12, 2026 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · fanquake

common: remove ::runtime_error from RunCommandParseJSON

I don't think there's a code path that can reach RunCommandParseJSON if
we compile with `-DENABLE_EXTERNAL_SIGNER=OFF`. This also requires more
workarounds in #35911.

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
Lower-priorityMerge bitcoin/bitcoin#35945: depends, qt: Add patch for missing headersby merge-script · 4c045f1a · Aug 12, 2026 · 3 filesMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35945: depends, qt: Add patch for missing headers

e8500cbd19db8b8183c7deedb0a9836c2e30a7de depends, qt: Add patch for missing headers (Hennadii Stepanov)

Pull request description:

This PR fixes the build when using recent Clang releases and libc++.

From https://github.com/hebasto/bitcoin-core-nightly/actions/runs/31400107892/job/93492660951:
```
[27/1645] Building CXX object qtbase/src/tools/syncqt/CMakeFiles/syncqt.dir/main.cpp.o
FAILED: [code=1] qtbase/src/tools/syncqt/CMakeFiles/syncqt.dir/main.cpp.o
/usr/bin/clang++-24 -stdlib=libc++ -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_LEAN_HEADERS=1 -DQT_NAMESPACE=\"\" -DQT_NO_DEBUG -DQT_NO_FOREACH -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QASCONST -DQT_NO_QEXCHANGE -DQT_NO_QSNPRINTF -DQT_USE_QSTRINGBUILDER -DQT_VERSION_MAJOR=6 -DQT_VERSION_MINOR=8 -DQT_VERSION_PATCH=4 -DQT_VERSION_STR=\"6.8.4\" -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-e34d706caeb/qtbase/src/tools/syncqt -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-e34d706caeb/qtbase/mkspecs/linux-clang -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-e34d706caeb/qtbase/include -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/x86_64-pc-linux-gnu/include -ffile-prefi
/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-e34d706caeb/qtbase/src/tools/syncqt/main.cpp:82:10: error: no member named 'transform' in namespace 'std'
82 | std::transform(s.begin(), s.end(), s.begin(),
| ^~~~~~~~~
/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-e34d706caeb/qtbase/src/tools/syncqt/main.cpp:89:10: error: no member named 'transform' in namespace 'std'
89 | std::transform(s.begin(), s.end(), s.begin(),
| ^~~~~~~~~
2 errors generated.
[28/1645] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_ucd.c.o
[29/1645] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_match.c.o
[30/1645] Building C object qtbase/src/3rdparty/pcre2/CMakeFiles/BundledPcre2.dir/src/pcre2_jit_compile.c.o
ninja: build stopped: subcommand failed.
gmake: *** [funcs.mk:343: /home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-e34d706caeb/./.stamp_built] Error 1
gmake: Leaving directory '/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends'
```

From https://github.com/hebasto/bitcoin-core-nightly/actions/runs/31403593334/job/93504547098:
```
[892/1645] Building CXX object qtbase/src/plugins/platforms/xcb/CMakeFiles/XcbQpaPrivate.dir/qxcbatom.cpp.o
FAILED: [code=1] qtbase/src/plugins/platforms/xcb/CMakeFiles/XcbQpaPrivate.dir/qxcbatom.cpp.o
/usr/bin/clang++-24 -stdlib=libc++ -DQT_ASCII_CAST_WARNINGS -DQT_BUILDING_QT -DQT_BUILD_XCB_PLUGIN -DQT_BUILD_XCB_QPA_LIB_LIB -DQT_CORE_LIB -DQT_DEPRECATED_WARNINGS -DQT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH -DQT_GUI_LIB -DQT_LEAN_HEADERS=1 -DQT_MOC_COMPAT -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_NO_EXCEPTIONS -DQT_NO_FOREACH -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_QASCONST -DQT_NO_QEXCHANGE -DQT_NO_QSNPRINTF -DQT_USE_QSTRINGBUILDER -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/plugins/platforms/xcb/XcbQpaPrivate_autogen/include -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/plugins/platforms/xcb -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/plugins/platforms/xcb/gl_integrations -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/3rdparty/xcb/include -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/corelib -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include/QtCore/6.8.4 -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include/QtCore/6.8.4/QtCore -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include/QtCore -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/mkspecs/linux-clang -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/gui -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include/QtGui/6.8.4 -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include/QtGui/6.8.4/QtGui -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/include/QtGui -I/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/x86_64-pc-linux-gnu/include -ffile-prefix-map=/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777=/usr -O2 -std=gnu++20 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -Wall -Wextra -fno-exceptions -ftemplate-depth=1024 -ffunction-sections -fdata-sections -U_FORTIFY_SOURCE -fcf-protection=full -D_FORTIFY_SOURCE=3 -ftrivial-auto-var-init=pattern -fstack-protector-strong -MD -MT qtbase/src/plugins/platforms/xcb/CMakeFiles/XcbQpaPrivate.dir/qxcbatom.cpp.o -MF qtbase/src/plugins/platforms/xcb/CMakeFiles/XcbQpaPrivate.dir/qxcbatom.cpp.o.d -o qtbase/src/plugins/platforms/xcb/CMakeFiles/XcbQpaPrivate.dir/qxcbatom.cpp.o -c /home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/plugins/platforms/xcb/qxcbatom.cpp
/home/runner/work/bitcoin-core-nightly/bitcoin-core-nightly/depends/work/build/x86_64-pc-linux-gnu/qt/6.8.4-d5ec21e4777/qtbase/src/plugins/platforms/xcb/qxcbatom.cpp:237:13: error: use of undeclared identifier 'free'
237 | free(reply);
| ^~~~
1 error generated.
```

ACKs for top commit:
fanquake:
ACK e8500cbd19db8b8183c7deedb0a9836c2e30a7de

Tree-SHA512: 694007e5f7a47af8b5284a1ee08a47227d2dffaf4bc8ea71f55270dcbd5b33e59df827eb643753f33403b2ebd2dc924f3f65a60cd5c7920e8d031f81e66c4a1a

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
defensive validationmerge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#35947: build, msvc: Update vcpkg manifest baselineby merge-script · b0615672 · Aug 12, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35947: build, msvc: Update vcpkg manifest baseline

e2bf51543ad9997aa69157088360fc49185b6bfa build, msvc: Disable default features of the `sqlite3` package (Hennadii Stepanov)
a31425610af36dbead3d6b1fe840a64893bdce59 build, msvc: Update vcpkg manifest baseline (Hennadii Stepanov)

Pull request description:

This change updates the vcpkg manifest baseline from the ["2025.08.27 Release"](https://github.com/microsoft/vcpkg/releases/tag/2025.08.27) to the ["2026-07-29 Release"](https://github.com/microsoft/vcpkg/releases/tag/2026.07.29), with the following package changes:
- boost: 1.88.0 --> 1.91.0
- sqlite3: 3.50.4 --> 3.53.4
- zeromq: 4.3.5#2 --> 4.3.5#3
- qtbase: 6.9.1 --> 6.11.1#1
- qttools: 6.9.1 --> 6.11.1
- libqrencode: 4.1.1#2 --> 4.1.1#3

The previous update was made in https://github.com/bitcoin/bitcoin/pull/33408.

---

Additionally, the default features of the `sqlite3` package have been disabled. See the commit message for more details.

ACKs for top commit:
fanquake:
ACK e2bf51543ad9997aa69157088360fc49185b6bfa

Tree-SHA512: dc486afa3e4900ac44c2e51d4aaf1aa8bb4542cb8ef1e0ebb6444a171ea31171564e35f1fcc28469c2890437f23879d4468695033b1583e40709e0f717731ee7

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#35931: ci: Check DLL imports of cross-built `bitcoind.exe`by Hennadii Stepanov · 1f5c46f7 · Aug 12, 2026 · 2 filesMessage 100 · StrongTriage 0Details
Commit message · Hennadii Stepanov

Merge bitcoin/bitcoin#35931: ci: Check DLL imports of cross-built `bitcoind.exe`

67fee5bf440c24eb708bfc40da46c23595e5a4f4 ci: Check DLL imports of cross-built `bitcoind.exe` (Hennadii Stepanov)

Pull request description:

Run `dumpbin.exe /imports` on the cross-built `bitcoind.exe` in the "Windows, test cross-built" jobs to list the imported DLLs and to ensure the executable is linked against the expected C runtime.

This came up during a discussion in https://github.com/bitcoin/bitcoin/pull/35877 ([here](https://github.com/bitcoin/bitcoin/pull/35877#pullrequestreview-4882577358) and [here](https://github.com/bitcoin/bitcoin/pull/35877#issuecomment-5217049246)). Inspired by the analogous CI steps in https://github.com/hebasto/bitcoin-core-nightly.

ACKs for top commit:
maflcko:
lgtm ACK 67fee5bf440c24eb708bfc40da46c23595e5a4f4
jeanpablojp:
ACK 67fee5bf440c24eb708bfc40da46c23595e5a4f4

Tree-SHA512: 3cf054b5c76d5e536f7419ab87e3bc30afea30760fbb3112789a9930098350c0f40ea2c2de4c5b2d1123f1eb58a02aeca28c87461966cf072c3dc86e1b1f106f

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discountmerge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#35496: kernel: add `btck_set_mock_time` for testing time-dependent pathsby Ava Chow · 1bec7fa2 · Aug 11, 2026 · 4 filesMessage 91 · StrongTriage 0Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#35496: kernel: add `btck_set_mock_time` for testing time-dependent paths

156f2c6c49d6b2d0a8c1f87110cf1703b52b39bc kernel: add `btck_set_mock_time` for testing time-dependent paths (stringintech)

Pull request description:

Some kernel paths read the current time (e.g. header validation's future-time check, and the `btck_SynchronizationState` carried by `btck_NotifyBlockTip` / `btck_NotifyHeaderTip` callbacks), which makes them awkward to exercise deterministically in tests. This PR exposes `btck_set_mock_time` as a wrapper over the existing `SetMockTime`, mirroring what the node has via the `setmocktime` RPC.

Prior IRC discussion: https://gnusha.org/bitcoin-kernel/2026-06-04.log

ACKs for top commit:
josibake:
ACK https://github.com/bitcoin/bitcoin/commit/156f2c6c49d6b2d0a8c1f87110cf1703b52b39bc
purpleKarrot:
ACK 156f2c6c49d6b2d0a8c1f87110cf1703b52b39bc
achow101:
ACK 156f2c6c49d6b2d0a8c1f87110cf1703b52b39bc
janb84:
ACK 156f2c6c49d6b2d0a8c1f87110cf1703b52b39bc
sedited:
ACK 156f2c6c49d6b2d0a8c1f87110cf1703b52b39bc

Tree-SHA512: da61faab0477fdc0de0e16420f228923d57733c42ef91b8947ef576e43abc8a1b78b9c1fa2ae60550ed5fd545f4d1c714dad0191d4442d4063112031ef7d1027

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
merge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#35950: Update leveldb subtree to latest masterby merge-script · c1967c44 · Aug 11, 2026 · 4 filesMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35950: Update leveldb subtree to latest master

9f10ef5e96d1a9016529b2ed56f2926a8441002d Squashed 'src/leveldb/' changes from a7f9bdc611..13da2d6758 (fanquake)

Pull request description:

Includes:
* https://github.com/bitcoin-core/leveldb-subtree/pull/62
* https://github.com/bitcoin-core/leveldb-subtree/pull/64 (used in #35911)

ACKs for top commit:
l0rinc:
code review ACK 3e76d22de258bd530812e27c623747fbf84e4837
hebasto:
ACK 3e76d22de258bd530812e27c623747fbf84e4837.
sedited:
ACK 3e76d22de258bd530812e27c623747fbf84e4837

Tree-SHA512: 88b9a673550ab95f99de5fb06c8313464b1a6b962a55aa911d7b8bb362eae71a283663460b1cab2aa99e37a066c3f52cfc834cf679b4db49d172bf91b32ae3fa

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
AI review queuedMerge bitcoin/bitcoin#35930: wallet: post-#35501 cleanups in CWalletTxby Ava Chow · 512dc9af · Aug 11, 2026 · 5 filesMessage 91 · StrongInformational 18Details
Commit message · Ava Chow

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

4ca182ca4028b9e681d65ec21f79fd7fed3ce215 doc: clarify alternate_wtxids is empty when only one witness variant (pablomartin4btc)
fa48b5d28eb5c326115af246b12ff644279172c4 test: assert listsinceblock "removed" reports current canonical wtxid (pablomartin4btc)
9b96ee12881ef38a221f34ce26a3b4fcb5622b4b wallet, test: add unit test for variant txid validation in CWalletTx deserializer (pablomartin4btc)
9de6543cb55ff43aea950712a3148fed9d4a7e13 wallet: post-#35501 cleanup in CWalletTx (pablomartin4btc)

Pull request description:

Follow-up cleanups and clarifications after #35501 was merged.

Commit breakdown:

1. _post-[#35501](https://github.com/bitcoin/bitcoin/pull/35501) cleanup in_ `CWalletTx`
- Rename `arg_state` → `new_state` in `Update()` for consistency
- Simplify `RecomputeCanonical()` using `std::ranges::min_element` with a projection lambda (14 lines → 3 lines)
- Add variant txid validation in the `CWalletTx` deserialise constructor: throws `std::runtime_error` if any variant's txid doesn't match the canonical txid deserialized from the stream
- Move `Init()` to `private` and extend it to clear `m_txs` and reset `m_canonical_wtxid`, so a full re-deserialise via `Unserialize()` starts from a clean state

All [suggested](https://github.com/bitcoin/bitcoin/pull/35501#pullrequestreview-4854519083) by ajtowns.

2. _add unit test for variant txid validation in_ `CWalletTx` _deserializer_

3. _assert_ `listsinceblock` "removed" _reports current canonical wtxid_
Documents that removed entries reflect the wallet's current `CWalletTx` state, not a snapshot of the detached block. A future followup could improve this (requires per-block tracking of which witness variant was included).
[Suggested](https://github.com/bitcoin/bitcoin/pull/35501#discussion_r3632044472) by w0xlt.

4. _clarify_ `alternate_wtxids` _is empty when only one witness variant_
[Suggested](https://github.com/bitcoin/bitcoin/pull/35501#discussion_r3632113003) by polespinasa.

ACKs for top commit:
jeanpablojp:
re-ACK 4ca182ca4028b9e681d65ec21f79fd7fed3ce215
achow101:
ACK 4ca182ca4028b9e681d65ec21f79fd7fed3ce215
polespinasa:
ACK 4ca182ca4028b9e681d65ec21f79fd7fed3ce215

Tree-SHA512: 64eadeb11372d904c79edbfd264c4d8dc1b4fe4ce5e3acc301bfeba9e556efb5dce2c684f0e58c7b74e2c687cc7dd77389970662b3fd629ed034a97bcfdfb71c

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 pathmerge-commit duplicate discountsecond-pass: broader security terminologysecond-pass: security-sensitive path
AI analysis · Informational 18/100

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 helper function, adds validation so a corrupted wallet database cannot load a mismatched transaction variant, and improves documentation and tests. There is no direct evidence this fixes an active exploit, but it adds a defensive check against a potential data-integrity failure.

Lower-priorityMerge bitcoin/bitcoin#33585: cmake: Use builtin support for .manifest filesby Hennadii Stepanov · b970bb34 · Aug 11, 2026 · 4 filesMessage 81 · StrongTriage 0Details
Commit message · Hennadii Stepanov

Merge bitcoin/bitcoin#33585: cmake: Use builtin support for .manifest files

99497b38f6c66462beaf1663b86029885e800834 cmake: Unconditionally add .rc files to sources (Daniel Pfeifer)
654a4cf5e69c96c3244bc3727b8fdb054a1eff01 cmake: Use builtin support for .manifest files (Daniel Pfeifer)
8f695379f3149ef51c4797b95dd58627fc2527ed cmake: Unconditionally set WIN32_EXECUTABLE target property (Daniel Pfeifer)

Pull request description:

Remove some redundant logic from the CMake code:

* The `WIN32_EXECUTABLE` target property only has an effect when building for `WIN32`. Checking `WIN32` is redundant.
* CMake has builtin support for `.rc` and `.manifest` files. Both may be added to sources unconditionally. They only have an effect when building for `WIN32`.

ACKs for top commit:
151henry151:
re-ACK 99497b38f6c66462beaf1663b86029885e800834
hebasto:
ACK 99497b38f6c66462beaf1663b86029885e800834.

Tree-SHA512: 3d1a6a86feefff58e06d2e692809349f8e5d50e7ded821da775420a6bbfd54baf7dfdba957a0c7e9fc61b87455addfe67a1cc48dbfe4a8e3055f69bb027109c0

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Security candidateMerge bitcoin/bitcoin#35729: refactor: test: Unroll `&&` conditions in macrosby merge-script · aa0e0f79 · Aug 11, 2026 · 19 filesMessage 91 · StrongInformational 15Details
Commit message · merge-script

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

e8691056c0140f8fa850fc6837dde915ebeb22cc test: Unroll `&&` conditions in macros (rustaceanrob)

Pull request description:

Picked from #35713. Given that I think this is a strict debugging improvement, I opened as a separate pull:

Using `&&` in `BOOST_CHECK` is problematic as failures will not indicate which condition failed. By unrolling these checks, the user knows exactly which expression is the failing case.

As an example, here is a line that would be particularly hard to debug if it failed:

```
src/test/net_tests.cpp

BOOST_CHECK((*ret)[1] && (*ret)[1]->m_type == "headers" && std::ranges::equal((*ret)[1]->m_recv, MakeByteSpan(msg_data_2)));
```

If any one of these conditions fail, the whole expression fails, with no values printed or indication as to which condition failed.

This is also required when using test macros that support value decomposition, which requires `&&` and `||` are `delete`. Examples include `BOOST_TEST`, doctest, Catch2, etc.

ref: https://catch2-temp.readthedocs.io/en/latest/assertions.html#other-limitations
ref: https://fekir.info/post/decomposing-an-expression/

ACKs for top commit:
maflcko:
re-ACK e8691056c0140f8fa850fc6837dde915ebeb22cc 🌽
ismaelsadeeq:
reACK e8691056c0140f8fa850fc6837dde915ebeb22cc
sedited:
ACK e8691056c0140f8fa850fc6837dde915ebeb22cc

Tree-SHA512: 9eb74cecd47ee4fdc3f53beb7d50d5056d543303d023c68b8d47cbe52d37f1156488c8b943faf68dd52c192c43626037bbf08172e7cc24753e0f6070db6e3ab2

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathsigning or wallet pathmerge-commit duplicate discount
AI analysis · Informational 15/100

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 condition. It does not change any production code, network behavior, wallet logic, or consensus rules, and it does not fix a security vulnerability.

Security candidateMerge bitcoin/bitcoin#35493: wallet, descriptor: Fix MuSig private key completeness checks on `importdescriptors`by merge-script · 2c01832f · Aug 11, 2026 · 4 filesMessage 100 · StrongLow 26Details
Commit message · merge-script

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

0390338692a7d1dda8062b5b90eb36724da6195d test: check MuSig import private key warnings (woltx)
5e62fbf09c01a644b0b85f80ee101814ad2c330d wallet: check descriptor private key completeness on import (woltx)
cd8d01bf47a289a80e288fa6c38a56557f8f7dcf descriptors: require complete MuSig private keys (woltx)

Pull request description:

`importdescriptors` currently checks whether all private keys are present by expanding the descriptor and verifying that every expanded origin pubkey has a private key.

This is wrong for MuSig descriptors because expansion includes the synthetic aggregate pubkey. There is no individual private key for that aggregate pubkey, so importing a fully private MuSig descriptor such as `rawtr(musig(A_priv,B_priv))` incorrectly returns:

```
Not all private keys provided. Some wallet functionality may return unexpected errors
```

This PR fixes the issue by making descriptor private-key completeness account for MuSig participant keys, and by having `importdescriptors` use `Descriptor::HavePrivateKeys()` instead of duplicating its own manual completeness check.

The functional test covers both cases:

- `rawtr(musig(A_priv,B_priv))` imports without warnings.
- `rawtr(musig(A_priv,B_pub))` still warns that not all private keys were provided.

ACKs for top commit:
achow101:
ACK 0390338692a7d1dda8062b5b90eb36724da6195d
theStack:
Code-review ACK 0390338692a7d1dda8062b5b90eb36724da6195d

Tree-SHA512: a55fb084c63f725a0991556acdfb822f3a5a669f745a00b9f0bf0996b639986cdf5e2be2e8d3d0a2ee3fe5744355f20b40df576601792ef3db698e606629ad52

100/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✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning or wallet pathmerge-commit duplicate discount
AI analysis · Low 26/100

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 warned that some private keys were missing. The fix makes the wallet correctly check the individual participant keys inside a MuSig group rather than looking for a private key for the combined group key, which does not exist. It is a correctness and usability fix, not a remote-exploitable vulnerability.

Lower-prioritygui: fix allow restore wallets without .dat file extensionby Pol Espinasa · 75a4e6c6 · Aug 11, 2026 · 1 fileMessage 50 · ThinTriage 0Details
Commit message · Pol Espinasa

gui: fix allow restore wallets without .dat file extension

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI review queuedMerge bitcoin/bitcoin#35924: Wallet, refactor: Remove orphaned EraseWatchOnly functionby merge-script · b80cee03 · Aug 11, 2026 · 2 filesMessage 81 · StrongInformational 15Details
Commit message · merge-script

Merge bitcoin/bitcoin#35924: Wallet, refactor: Remove orphaned EraseWatchOnly function

6304789a18f9391ff70bf8eed649bdecf176a086 Wallet, refactor: Remove orphaned EraseWatchOnly function (vicjuma)

Pull request description:

**Summary**
This is a follow-up PR for #28710 by achow101 where `bool LegacyScriptPubKeyMan::RemoveWatchOnly(const CScript &dest)` which was the only remaining caller for the function `EraseWatchOnly` was removed. This PR is just a cleanup to remove the orphaned function.

ACKs for top commit:
jeanpablojp:
ACK 6304789a18f9391ff70bf8eed649bdecf176a086
pablomartin4btc:
ACK 6304789a18f9391ff70bf8eed649bdecf176a086

Tree-SHA512: 48546b3fa9155d6f9549ce8e77d9fe34cbfc738e6814ac9cd256b85668d0fa325e51404f962d491c6d4989baefd03815c680578bfcc73741cf9c4e65b141f92e

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit removes an unused function called EraseWatchOnly from the Bitcoin Core wallet code. It is a routine cleanup with no functional change and no security relevance.

AI review queuedMerge bitcoin/bitcoin#35943: doc: fix dead link in txrequest.hby merge-script · 5d051c05 · Aug 11, 2026 · 1 fileMessage 81 · StrongInformational 15Details
Commit message · merge-script

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

a7b0b5084a4a75306a6e88481264f9e4c36a8f08 doc: fix dead link in txrequest.h (cyb3ralbert)

Pull request description:

The link is dead. Both the file and the whole `blockchainbib/` section return 404. The host certificate expired on 2026-08-07, so the site looks abandoned rather than moved.

It was a local copy of Miller et al. 2015, *Discovering Bitcoin's Public Topology and Influential Nodes*. The [`blockchainbib` bibliography](https://github.com/kernoelpanic/blockchainbib) that distributed it points to `cs.umd.edu/projects/coinscope/coinscope.pdf`, where the original is still accessible.

No other occurrences in the tree.

ACKs for top commit:
l0rinc:
ACK a7b0b5084a4a75306a6e88481264f9e4c36a8f08
sedited:
ACK a7b0b5084a4a75306a6e88481264f9e4c36a8f08

Tree-SHA512: 518b3c703417f544c7aa96d94db4cb92a669c0223eaefecd9847378061273258c45939376e47d616651e78eb090110a30ef9dc786506e1ae5d4ac7cd20cd0dcd

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discountsecond-pass: broader security terminology
AI analysis · Informational 15/100

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.

AI review queuedMerge bitcoin/bitcoin#33186: wallet, test: Ancient Wallet Migration from v0.14.3 (no-HD and Single Chain)by merge-script · 757aa573 · Aug 10, 2026 · 4 filesMessage 100 · StrongInformational 15Details
Commit message · merge-script

Merge bitcoin/bitcoin#33186: wallet, test: Ancient Wallet Migration from v0.14.3 (no-HD and Single Chain)

ea59f1722097a620de6efd2fedc37b64a105ec96 test: cover v0.14.3 wallet migration (w0xlt)
18b8afd09333d19ffa6c51a08edda6af09b812b7 test: support v0.14.x in dumb_sync_blocks (w0xlt)

Pull request description:

This PR adds test coverage for migrating legacy Bitcoin Core wallets from v0.14.3 (released in 2017) to the descriptor wallet format. The test validates that users can safely upgrade their wallets while preserving all funds, transaction history, and addresses.

This test was originally developed on top of #32977, as it was requested in reviews.
However, since it also increases test coverage, it can be merged independently.

The test covers two wallet migration scenarios:

* Non-HD Wallet Migration - Tests migration of non-HD wallets (created with `-usehd=0`)
* Single Chain HD Wallet Migration - Tests migration of HD wallets from v0.14.3 (`VERSION_HD_BASE`)

The node v0.14.3 cannot be synced using the normal test framework helpers because it does not have the `syncwithvalidationinterfacequeue` RPC, so the test uses `dumb_sync_blocks` to submit blocks from the ancient node to the modern node before migrating the wallet.

Each scenario uses its own dedicated old/new node pair, which keeps the setup isolated and makes this testing best managed in a separate file rather than in the existing migration test files.

On the Windows cross-built CI job, this test is excluded from the main functional test runner and re-run sequentially in an ASCII-only tmpdir, because the v0.14.3 binary cannot handle non-ASCII characters in the temporary directory path.

ACKs for top commit:
furszy:
utACK ea59f1722097a620de6efd2fedc37b64a105ec96
pablomartin4btc:
reACK ea59f1722097a620de6efd2fedc37b64a105ec96

Tree-SHA512: 35ef7173e10fe52f20db0d6d1f144c5a1343ff406d294ab7d0e346d79546797f3f145f2893d99bb7b57d71aa14580690ab80eae148ec94b91498eb0938b2d15e

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
defensive validationsigning or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Informational 15/100

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. There is no security-relevant change for users running Bitcoin Core.

AI review queuedMerge bitcoin/bitcoin#35925: wallet, rpc: Exclude non-owned addresses from listreceivedby*by Ava Chow · e8cc21c5 · Aug 10, 2026 · 2 filesMessage 91 · StrongLow 28Details
Commit message · Ava Chow

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

089c883c558e01c2a18a92f861fa7de9a7cc607a test: Add coverage for listreceivedby* excluding "send" addresses (pablomartin4btc)
873c0548059b2860b3718551078763d227186bd6 wallet: Exclude non-owned addresses from listreceivedby* (pablomartin4btc)

Pull request description:

Fixes #16159.

`listreceivedbyaddress`/`listreceivedbylabel` with `include_empty=true` walk the entire address book and return every entry that has no matching `mapTally` record — including addresses with a "send" purpose (foreign addresses that got a label via `setlabel`, the GUI, or `addmultisigaddress`) that this wallet never received funds to and doesn't own.

This excludes those via `IsMine()` rather than the address book's `purpose` field, since `purpose` is set inconsistently across several code paths and `IsMine()` is the same check `mapTally` itself is already built from.

Picks up prior work by kouloumos in #25973 and BrandonOdiwuor in #30972, both closed for
inactivity:
- [#25973](https://github.com/bitcoin/bitcoin/pull/25973) filtered on `purpose == "send"` directly. ryanofsky pointed out purpose "is set pretty haphazardly in code" and [suggested](https://github.com/bitcoin/bitcoin/pull/25973#discussion_r1269477246) `IsMine()` instead.
- [#30972](https://github.com/bitcoin/bitcoin/pull/30972) implemented that, then furszy pointed out `IsMine()` only needs to run for addresses missing from `mapTally`, not every one. rkrux further suggested dropping the redundant re-lock in favor of `EXCLUSIVE_LOCKS_REQUIRED` directly on the lambda — matching the existing pattern in `wallet/interfaces.cpp` — and simplifying the branching.

This PR carries that final approach forward on current master. The regression test is a small, standalone addition rather than reviving the test-file "split into subtests" refactor from the earlier PRs, which achow101 [flagged](https://github.com/bitcoin/bitcoin/pull/30972#issuecomment-3688186614) on #30972 as unrelated stylistic churn.

ACKs for top commit:
polespinasa:
lgtm re-ACK 089c883c558e01c2a18a92f861fa7de9a7cc607a
jeanpablojp:
ACK 089c883c558e01c2a18a92f861fa7de9a7cc607a
achow101:
ACK 089c883c558e01c2a18a92f861fa7de9a7cc607a

Tree-SHA512: d45488c93b9294258faaab5d1891ca5e8c4b8d0d4feb298403c7c3f20d6aa08989d548cddd25ccd47a1ed969e4a309ee68ad1541c6121fed39ed534c78c256e7

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 evidencesigning or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Low 28/100

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 example, an address labeled as a 'send' recipient). The fix ensures only addresses actually owned by the wallet are shown. It is a privacy/information-disclosure issue, not a theft-of-funds bug.

Lower-priorityMerge bitcoin/bitcoin#35941: doc: remove mention of `::wsystem`by Hennadii Stepanov · 1d386c25 · Aug 10, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · Hennadii Stepanov

Merge bitcoin/bitcoin#35941: doc: remove mention of `::wsystem`

57246934e71265e00e613a4d460386b7f13cfa78 doc: remove mention of wsystem (fanquake)

Pull request description:

Followup to #35704.

ACKs for top commit:
hebasto:
ACK 57246934e71265e00e613a4d460386b7f13cfa78.

Tree-SHA512: a9aa6474d69323375e99c5780bb635b3d92b8dd02fb399329ae14aca4eff6fc160215d1b64deea23642de9aacaefe47970696120f4cdf931605bef9c4b5bcd89

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount