BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

314security candidates664second-pass queue2998AI analyses
154commits · 30 days
331commits · 60 days
1302commits · 180 days
2859commits · 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
1161Strong · 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-script1964487389
Antoine Poinsot22422170
Ava Chow19165185068
MarcoFalke41421408074
fanquake23121228058
Lőrinc18121177081
Hennadii Stepanov22316211064
rkrux57957074
Sjors Provoost89889074
Sebastian Falbesoner33733073
David Gumberg55655072
Pieter Wuille95595066
Analysis record

Published AI watches

Last scanned 15 minutes ago

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
Informational 20 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36186: test: return False for a too-short ECDSA signature

This is a small fix in Bitcoin Core's own test helper code. A helper function used only in tests could crash with an IndexError when given an extremely short fake signature, instead of cleanly returning False. The change moves a length che…

Out-of-order bounds check leading to IndexError in test helperRegression test added for malformed short DER signaturesTest-only code path, no production validation logic changed
76343a09by merge-script+11−21 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#36083: test: cover getrawtransaction on a stale block via txindex

This commit only adds a new functional test to Bitcoin Core. It checks that the getrawtransaction RPC can retrieve a stale block's coinbase transaction via the optional txindex, and that the response correctly shows the block is no longer …

dd3c62c5by merge-script+41−341 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Merge bitcoin/bitcoin#35472: test: add coverage for feebumper uncomputable cluster error path

This commit only adds a new automated test to Bitcoin Core. It does not change any production wallet, mempool, or node code. The test verifies that when a user tries to bump the fee of a transaction whose unconfirmed inputs depend on too m…

Adds regression test for previously fixed crash path (bad optional_access in CheckFeeRate)No production code changes; no new attack surface introducedTest exercises DoS-limit error handling in fee bumping
36c1b149by merge-script+74−01 file
Vendor flagged security relevance
Repository ledger

Explore captured commits

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

Lower-priorityMerge bitcoin/bitcoin#35923: mempool: count unbroadcast txids in memory usageby Ava Chow · 26241482 · Sep 23, 2026 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#35923: mempool: count unbroadcast txids in memory usage

db21e03c9d50386072a1123568f917ba65dcf348 mempool: include unbroadcast txid memory (Lőrinc)
8d5c4a9290b0bc0c323cf77619f1620aa3d4caf0 test: characterize unbroadcast memory accounting (Lőrinc)

Pull request description:

**Problem:** The mempool memory estimate omits the txid set used to retry the initial broadcast of locally submitted transactions, so `getmempoolinfo` and `-maxmempool` undercount retained memory.

**Fix:** Count this set when calculating mempool memory usage.

ACKs for top commit:
jeanpablojp:
ACK db21e03c9d50386072a1123568f917ba65dcf348
bartoli:
ACK db21e03c9d50386072a1123568f917ba65dcf348
achow101:
ACK db21e03c9d50386072a1123568f917ba65dcf348
musaHaruna:
Tested ACK [db21e03](https://github.com/bitcoin/bitcoin/pull/35923/changes/db21e03c9d50386072a1123568f917ba65dcf348)
instagibbs:
ACK db21e03c9d50386072a1123568f917ba65dcf348
ismaelsadeeq:
ACK db21e03c9d50386072a1123568f917ba65dcf348

Tree-SHA512: 1d00381efb65839057a731101753ffd492596c76c23d4a2c229c720dec13b0558bdc4e6e5be0de52b65004872a1a8f87342b085eb1827bb15a7732646101d486

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#35177: test: use MiniWallet for getblockstats test data generationby Ava Chow · a632d4f6 · Sep 23, 2026 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#35177: test: use MiniWallet for getblockstats test data generation

b7cbd804284bb70f40c5beebf8d1d3ff614ae406 test: use MiniWallet for getblockstats test data generation (AgustinRivera)

Pull request description:

Fixes #31838.
Follow-up to #33184.

This updates `rpc_getblockstats.py --gen-test-data` to generate its fixture data using `MiniWallet` instead of wallet RPCs.

The normal test path still loads predefined block/stat data from `rpc_getblockstats.json`, so the test continues to compare `getblockstats` results against fixed expected data rather than against freshly computed RPC output.

This keeps the generator independent of wallet behavior while preserving the existing regression-test structure.

Tested on a wallet-disabled Linux build:
- `python3 /tmp/bitcoin-build/test/functional/rpc_getblockstats.py`
- `python3 /tmp/bitcoin-build/test/functional/rpc_getblockstats.py --gen-test-data --test-data /tmp/rpc_getblockstats.generated.json`
- `python3 /tmp/bitcoin-build/test/functional/rpc_getblockstats.py --test-data /tmp/rpc_getblockstats.generated.json`

ACKs for top commit:
achow101:
ACK b7cbd804284bb70f40c5beebf8d1d3ff614ae406
theStack:
ACK b7cbd804284bb70f40c5beebf8d1d3ff614ae406
sedited:
ACK b7cbd804284bb70f40c5beebf8d1d3ff614ae406

Tree-SHA512: f763acd0467143c4f151fa2acd5b154c073fea8551eafcf102ef2d1cc0f4b2ce13b7828bd2736d0cdda782a78dfa6aea60b61bee27e9ca8a2b72d76dffc09340

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#35301: Silent Payments: Implement bip352 (take 2)by Ava Chow · be5d0b55 · Sep 23, 2026 · 10 filesMessage 91 · StrongInformational 12Details
Commit message · Ava Chow

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

e3ee0ebd89e9955da94c8d806cfa1793baba9860 tests: add BIP352 test vectors as unit tests (josibake)
f133d1373af6f58488f73fe3dc795d37c4796dd9 common: add bip352.{h,cpp} secp256k1 module (josibake)
44997c391afc1f3ae75d2331606e1261fd365801 Add "sp" HRP (josibake)
356c91f6ae51bd9e48db0920110ac9303f54f714 crypto: add KeyPair::GetSecpKeypair (josibake)

Pull request description:

This PR is part of integrating silent payments into Bitcoin Core. It is the second iteration of https://github.com/bitcoin/bitcoin/pull/28122, now based on https://github.com/bitcoin-core/secp256k1/pull/1765.

This project is tracked in https://github.com/bitcoin/bitcoin/issues/28536.

BIP352
This PR focuses strictly on the BIP logic and attempts to separate it from the wallet and transaction implementation details. This is accomplished by working directly with public and private keys, instead of needing a wallet backend and transactions for testing. Labels for the receiver are optional and thus deferred for a later PR.

Test vectors from the BIP are included as unit tests.

ACKs for top commit:
rustaceanrob:
reACK e3ee0ebd89e9955da94c8d806cfa1793baba9860
theStack:
re-ACK e3ee0ebd89e9955da94c8d806cfa1793baba9860
achow101:
ACK e3ee0ebd89e9955da94c8d806cfa1793baba9860

Tree-SHA512: 9b5706e35a49606ac53303c4be0c08f0a08ee273bd69855ff2c869ebcf63dc1e798f8295b8800a41a7094658ab17134366b1ebf2b79dbda5d4af377b05bb2854

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
secret or key materialfuzzing or regression evidencemerge-commit duplicate discount
AI analysis · Informational 12/100

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 change introduces new code for encoding/decoding silent payment addresses, deriving output public keys, and scanning transactions for outputs belonging to the recipient. It is a feature addition, not a fix for a known security bug. There is no evidence in the commit or supplied references that this introduces a vulnerability or that any security incident occurred.

Security candidateMerge bitcoin/bitcoin#35440: wallet: check descriptor cache xpub length before decodingby Ava Chow · b3f846ec · Sep 23, 2026 · 11 filesMessage 96 · StrongLow 45Details
Commit message · Ava Chow

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

db7ec4fb976284581ba2adc77218af8711375d91 refactor: (de)serialize CExtKey/CExtPubKey through streams (Alhuda Khan)
cb69853fc160d8a02c21510b8251b05913665672 wallet: check descriptor cache xpub length before decoding (alhudz)

Pull request description:

The descriptor cache records (`WALLETDESCRIPTORCACHE`/`WALLETDESCRIPTORLHCACHE`) deserialise their value into a vector whose length comes from the record itself, but `CExtPubKey::Decode` then reads a fixed `BIP32_EXTKEY_SIZE` bytes. A record encoding a shorter xpub makes `Decode` read past the vector (caught as a container-overflow under ASan).

The first commit rejects records whose serialised xpub isn't exactly `BIP32_EXTKEY_SIZE`, the same way the other malformed records in this loader return `DBErrors::CORRUPT`, with a unit test covering both cache types.

The second commit (per https://github.com/bitcoin/bitcoin/pull/35440#issuecomment-5050992564) replaces `CExtKey`/`CExtPubKey` `Encode`/`Decode` and `EncodeWithVersion`/`DecodeWithVersion`, the only (de)serialisation in the codebase that wrote into a caller-provided buffer, with `Serialize`/`Unserialize`, and routes the base58, PSBT and wallet cache code through them. The serialised bytes are unchanged, so base58 and PSBT encodings and the on-disk cache records are the same as before. The wallet loader now checks the record's CompactSize prefix and reads the xpub straight from the record stream.

ACKs for top commit:
molnard:
tACK db7ec4fb976284581ba2adc77218af8711375d91
achow101:
ACK db7ec4fb976284581ba2adc77218af8711375d91
winterrdog:
tACK db7ec4fb976284581ba2adc77218af8711375d91

Tree-SHA512: e315d1c0e0d542643dc286055fcbe7b1f98891c8dff844cc55888bb970c3147e2b35fc3c0103e9a55101c6820e8bb5817316a5048e3c4e2c548ce30345eaa3a0

96/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✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning boundarymemory safetycryptography-sensitive pathsigning or wallet pathmerge-commit duplicate discount
AI analysis · Low 45/100

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 before decoding it, and also replaces the old fixed-size buffer encoding with safer stream-based serialization used throughout the rest of the code. It is primarily a hardening fix against corrupt wallet data rather than a remote attack vector.

Lower-priorityMerge bitcoin/bitcoin#35809: contrib: add deterministic fuzz coverage modeby merge-script · dc3cd196 · Sep 23, 2026 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35809: contrib: add deterministic fuzz coverage mode

5945cb83ddcf5df841d1bcb3c5fea641e9e24cde contrib: add deterministic fuzz coverage mode (Hao Xu)

Pull request description:

Adds an optional integer `coverage_check` argument to `deterministic-fuzz-coverage`.
This makes it easier to isolate per-input nondeterminism from cross-input state leakage.
Good for debugging.

ACKs for top commit:
maflcko:
review ACK 5945cb83ddcf5df841d1bcb3c5fea641e9e24cde 🌯
Crypt-iQ:
crACK 5945cb83ddcf5df841d1bcb3c5fea641e9e24cde

Tree-SHA512: 927587872271f0a5745360510b03bc6110f3f0dcc42dc1c1f1e2d9477b3cbe99a3a1dc6f70a4dd215de9dff1eab41506851cc85c855353482041ca40ce4c1458

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 evidencemerge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#35893: test: cover submitpackage other-wtxid for same-txid-diff-witnessby merge-script · 81e2de89 · Sep 23, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#35893: test: cover submitpackage other-wtxid for same-txid-diff-witness

9054f7cde43a264300bb0567215bda5f55803ae5 test: cover submitpackage other-wtxid for same-txid-diff-witness (mercie-ux)

Pull request description:

The specific behaviour tied to the `// TODO: allow witness replacement in packages.` had no functional test anywhere, just the unit test coverage, showing the underlying mempool logic and not the RPC's actual JSON output.
This test submits a same-txid-different-witness transaction via `submitpackage` while its counterpart is already in the mempool, and asserts `submitpackage` correctly reports `other-wtxid` pointing at the transaction already in the mempool, its existing, documented behavior, not something this change introduces.
Verified the test can actually fail by temporarily asserting the wrong wtxid and confirmed it fails as expected.

ACKs for top commit:
jeanpablojp:
reACK 9054f7cde43a264300bb0567215bda5f55803ae5
sedited:
ACK 9054f7cde43a264300bb0567215bda5f55803ae5
instagibbs:
ACK 9054f7cde43a264300bb0567215bda5f55803ae5

Tree-SHA512: 6f6f201fe86b5a8b5978e0336b72b4a105f613111da8df7c5eb38c22e9b411932e01c0f2537c0b57b06b383ade1d2779e9745382e56e9596a96ea2100fa97f2c

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#36309: private broadcast: clarify claims, mark as experimentalby merge-script · 31754523 · Sep 23, 2026 · 3 filesMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36309: private broadcast: clarify claims, mark as experimental

f41372998377ab8310476f0c03294e69cc3222e8 private broadcast: mark feature as experimental (Greg Sanders)
2630d8e6c9d60579372c019e4b2cc7e73163a5d8 doc: scope claims about private broadcast feature (Greg Sanders)

Pull request description:

1. Some of the claims were too strong, so I reframed these in terms of risk reduction, hopefully making user expectations more aligned with what's done
2. As a newer feature, it probably should have been marked experimental already, as the interface is likely to change in the future as it matures

ACKs for top commit:
davidgumberg:
ACK https://github.com/bitcoin/bitcoin/commit/f41372998377ab8310476f0c03294e69cc3222e8
andrewtoth:
ACK f41372998377ab8310476f0c03294e69cc3222e8
mzumsande:
ACK f41372998377ab8310476f0c03294e69cc3222e8
optout21:
ACK f41372998377ab8310476f0c03294e69cc3222e8
vasild:
ACK f41372998377ab8310476f0c03294e69cc3222e8
sedited:
ACK f41372998377ab8310476f0c03294e69cc3222e8

Tree-SHA512: 152111c0d2cad12b5fce493e90fde793062a8e58607ba538335a437dd1fa886aa31bdfd32d373080b02eab1903df216e4588208b1b96e83e6d66e31bcee8bf82

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#35813: wallet, rpc: Add listrawtransactions RPCby Ava Chow · 2b95b45a · Sep 22, 2026 · 6 filesMessage 100 · StrongInformational 20Details
Commit message · Ava Chow

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

7c311f5c6c3ea5a0d0cc4da35177e6977cda87d1 doc: Add release notes for listrawtransactions (pablomartin4btc)
b377786df14e4098cc2af2fa3a108b3371df9471 test: Add functional test for listrawtransactions (pablomartin4btc)
605c4fd3aee0cea04aef583e7ceeca2dd9a17718 wallet, rpc: Add listrawtransactions RPC (pablomartin4btc)
ba6c179ba07cafb3f7e8a0baf9c9a73992b36695 wallet, rpc: allow omitting parent_descs from TransactionDescriptionString (pablomartin4btc)
dc3e2bc6df6814f6b9b5ce1d5b24933e3f10ca8a wallet, rpc: extract PushTxAmountAndFee/PushTxDecoded helpers (pablomartin4btc)

Pull request description:

Add a new `listrawtransactions` RPC that returns wallet transactions without logical interpretation. Unlike `listtransactions`, which only lists transactions with an economic category (sends to external addresses, receives from outside), this RPC returns every transaction the wallet knows about — including consolidations and self-transfers that would otherwise be invisible.

Each transaction appears exactly once with its net wallet balance change (`amount`) and, when the wallet funded the transaction, the fee paid (`fee`). Pagination is supported via `count` and `skip` parameters, matching the interface of `listtransactions`.

Next possible follow-ups:
- A filter parameter (`"all"` / `"received"` / `"sent"` / `"self"`) once per-tx semantics are agreed on
- Some fields inherited from `TransactionDescriptionString()` carry references to `category` (e.g. `replaced_by_txid`, `parent_descs`) which don't apply here — could be cleaned up in a separate pass

Closes #34632.

Previous attempt: #35009 (by alfonsoromanz), closed in favour of a separate RPC as suggested by achow101.

ACKs for top commit:
Bicaru20:
reACK 7c311f5c6c
achow101:
ACK 7c311f5c6c3ea5a0d0cc4da35177e6977cda87d1
polespinasa:
ACK 7c311f5c6c3ea5a0d0cc4da35177e6977cda87d1

Tree-SHA512: c80f98844124d10b16a7f275107e22d4f5983329d93208e95b3e56ac7295c7265eebdb247a4fa7d70da8d38f4b453df17efaee29a4bd6bae8cb1da60b029c489

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
access controlsigning or wallet pathmerge-commit duplicate discount
AI analysis · Informational 20/100

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 listtransactions RPC hides. The change is mostly a refactor of existing code into shared helpers plus a new RPC endpoint. There is no direct evidence in the commit of a security vulnerability, bug fix, or exploit.

Lower-priorityMerge bitcoin/bitcoin#27052: test: rpc: add last block announcement time to getpeerinfo resultby Ryan Ofsky · 71c30b60 · Sep 22, 2026 · 8 filesMessage 91 · StrongTriage 0Details
Commit message · Ryan Ofsky

Merge bitcoin/bitcoin#27052: test: rpc: add last block announcement time to getpeerinfo result

13ce46ba1a79c99882cc1ac768db1df1f25de098 doc: add release note for 27052 (Larry Ruane)
5d5397d841085d024643927d952aa19bf36a8236 test: add functional test for block announcement time tracking (Larry Ruane)
7d3d04e925c70c0bb1df25a01feace9a2e3f009f rpc: add last_block_announcement to the getpeerinfo output (Larry Ruane)
26a25162a48af567d819a3c59478ae924e4d21ce net: add m_last_block_announcement to CNodeStateStats (Larry Ruane)
bb8bca630a8ad772a15433d7a57cee4868d7d7cb change m_last_block_announcement type from int64_t to NodeClock::time_point (Larry Ruane)

Pull request description:

This PR adds `last_block_announcement` to the per-peer `getpeerinfo` RPC result. This is the most recent time that this peer was the first to notify our node of a new block (one that we didn't already know about), or zero if this peer has never been the first to notify us of a new block. This timestamp already exists internally and is used for stale-tip eviction logic; this PR exposes it at the RPC layer.

This PR started out as a suggestion for additional test coverage, see https://github.com/bitcoin/bitcoin/pull/26172#issuecomment-1259678260. It turned out that the easiest way to test (already-merged) #26172 is to add this field to `getpeerinfo` and have a functional test verify its value. But it may also be useful to have this result in its own right, similar to that RPC's existing `last_block` field -- it indicates something about the quality of our peers. It allows one to predict which peer will be evicted when the stale tip logic activates. (I'm not sure if that would be useful, but it may be.)

The functional test added here fails without #26172, which is the main goal.

This PR does not test the actual stale-tip eviction logic; that's difficult to do with a functional test. But it does test the correctness of the timestamp that the eviction logic depends on. #23352 is an attempt to test the eviction logic using a unit test, it's not ready to be merged yet. I think having both kinds of tests would be beneficial.

ACKs for top commit:
rkrux:
lgtm ACK 13ce46ba1a79c99882cc1ac768db1df1f25de098
naiyoma:
ACK 13ce46ba1a79c99882cc1ac768db1df1f25de098
ryanofsky:
Code review ACK 13ce46ba1a79c99882cc1ac768db1df1f25de098

Tree-SHA512: 64cd7dd688516f694c68d4594583af184d0556230660690b173f0fb0f09f20b526469e77a0f5825103ab6652c34fc6b8d3bce17aeb8e738ea8f5613d2939157c

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#36155: doc: remove json quoting from gettxoutsetinfo and getblockstats cli examplesby merge-script · d36f4a17 · Sep 22, 2026 · 1 fileMessage 93 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36155: doc: remove json quoting from gettxoutsetinfo and getblockstats cli examples

57a79c69627de7854d5aec7b6b121e4a987ceb52 doc: remove json quoting from gettxoutsetinfo and getblockstats cli examples (csjones)

Pull request description:

This is a followup change based on https://github.com/bitcoin/bitcoin/pull/33230#issuecomment-3216227775 because https://github.com/bitcoin/bitcoin/pull/33230 enabled handling cli arguments with either json or a string but the examples (i.e. `bitcoin-cli help gettxoutsetinfo` and `bitcoin-cli help getblockstats`) left the quotes. I considered adding a new example but felt that change might seem confusing.

ACKs for top commit:
nervana21:
ACK 57a79c69627de7854d5aec7b6b121e4a987ceb52
sedited:
ACK 57a79c69627de7854d5aec7b6b121e4a987ceb52

Tree-SHA512: fb1cf210837acb4a62b1adf024ce7b2716178e9f7293d21fee3a058f838603bd38cb46a8405c7b7d33cf2b7b66a4f7012bb0fc1f1cafc94055969f4728dfa2f9

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Lower-priorityMerge bitcoin/bitcoin#34717: p2p: remove m_getaddr_sentby merge-script · b7211ba8 · Sep 22, 2026 · 2 filesMessage 100 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#34717: p2p: remove m_getaddr_sent

c8ee319fffa1b7674fad3a797cd6d5110435a74c net: remove m_getaddr_sent (naiyoma)
a1ecda2609965f623ec808bc870ff6d7f151a419 test: delete redundant addr relay assertion (naiyoma)

Pull request description:

This PR removes `m_getaddr_sent`, as it no longer behaves as originally intended. Initially, this flag was meant to track when a getaddr message was sent to a peer.

Now that the initial self-announcements are sent separately from getaddr responses, the self-announcement sets `m_getaddr_sent `to `false` even though we are still waiting for the getaddr response (1000 addresses).
When the getaddr response does arrive, we rely on the size of the addr message, not the flag, to decide whether it should be relayed. This makes the flag redundant.

This is the current behavior:

- The initial self-announcement is not relayed but it flips m_getaddr_sent to be false
- We use addr.size() to avoid relaying (1000) getaddr response.(assuming the other two flags are false)
- The first addr message is relayed because the flag is false(this was not the case before https://github.com/bitcoin/bitcoin/pull/34146).

Removing this flag ensures that:

- The initial self-announcement is relayed.
- The getaddr response is still not relayed, using the existing size-based check.

I had initially considered an alternative approach https://github.com/naiyoma/bitcoin/pull/14, where the self-announcement would not affect this flag and would therefore retain the initial behaviour, but i decided to reattempt its removal, as this was previously attempted, see https://github.com/bitcoin/bitcoin/pull/19794. Given the changes since then, I believe revisiting it is now more appropriate.

ACKs for top commit:
w0xlt:
ACK c8ee319fffa1b7674fad3a797cd6d5110435a74c
danielabrozzoni:
tACK c8ee319fffa1b7674fad3a797cd6d5110435a74c
mzumsande:
Code Review ACK c8ee319fffa1b7674fad3a797cd6d5110435a74c
sedited:
utACK c8ee319fffa1b7674fad3a797cd6d5110435a74c

Tree-SHA512: d4a7e0525efd286597136af7f84b5d3301537a06dc093059102eecd15a2d80d22127e756eaefcb8b069c07987f36ccb997c5eadcc6ffa71b7ec0322777590db5

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
merge-commit duplicate discount
Security candidateMerge bitcoin/bitcoin#35752: wallet: make encryption state updates atomicby Ava Chow · 7ee3d622 · Sep 22, 2026 · 18 filesMessage 91 · StrongModerate 68Details
Commit message · Ava Chow

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

6d2414542b86ff7d6eae0f4c873e47bc4e57a57c wallet: reuse unlock and passphrase change errors (Ava Chow)
593554622e2ced30eb5c2b2fbc642e31c66b2bb8 wallet: return passphrase errors with Expected (Ava Chow)
f949b3ba2ad78eed70540a31564032ab3efefda6 wallet: publish descriptor keys after writes (Lőrinc)
e3712b7d492fc72a763c9e5c73a5a174be59dd21 test: characterize descriptor insertion failure (Lőrinc)
bd558107784cf1170482700a13904cfa5b6816a8 wallet: abort failed descriptor key erases (Lőrinc)
537e79191585ca5ea46c527287d311c9abdcabd0 test: cover encrypted descriptor key insertion (Lőrinc)
d8a6f5e48d6b007207ba00e70167affbff2900f9 wallet: abort failed descriptor key writes (Lőrinc)
14ce3fdb493ac1cbb8e8fb583c9c2e99d9d9fb65 test: characterize descriptor key failures (Lőrinc)
5bc0be16fe4d910d363b5cd8eeb11a9b9629e0b9 wallet: reject failed passphrase changes (Lőrinc)
ee6d45a07e3ae06e490e30c9d4a3f01d9917c740 test: characterize passphrase write failure (Lőrinc)
2daa2f94f4a2930c2f315cf9e50ffd027d4bc101 wallet: restore lock state before re-encryption (Ava Chow)
8b23fa47737a8e1deb23953b5e3b438454e10e73 wallet: abort failed encryption transactions (Lőrinc)
e6c374d302018f352d0583c38c5c4211f9b59a2f test: characterize encryption transaction failures (Lőrinc)
70381010c0af96db8b23e2af02599798b063c92b refactor/test: add wallet failure injection (Lőrinc)

Pull request description:

**Problem:** Wallet encryption and passphrase changes can leave database records and live key state out of sync when a database operation fails.
Encryption can report success without persisting the master key, and a passphrase change can activate the new passphrase only in memory.
Descriptor key write failures can publish keys that were not persisted, while erase failures can leave plaintext keys on disk.
A failed encryption transaction commit aborts the node, and a re-encryption failure during a passphrase change can leave a previously locked wallet unlocked.
Boolean results also force callers to duplicate error messages or report database and encryption failures as incorrect passphrases.

**Fix:** Publish wallet encryption state only after the database transaction commits, and publish newly inserted descriptor keys only after their database writes succeed.
For passphrase changes, restore the original lock state after validating the old passphrase and replace the live master key only after persisting its re-encrypted value.
These changes preserve the affected keys on failure and allow retries.
Return structured errors from wallet unlock and passphrase changes so callers can share messages and report the specific failure.
Fresh descriptor setup after the encryption transaction remains unchanged.

ACKs for top commit:
achow101:
ACK 6d2414542b86ff7d6eae0f4c873e47bc4e57a57c
w0xlt:
reACK 6d2414542b86ff7d6eae0f4c873e47bc4e57a57c

Tree-SHA512: 2d7293d9482ef259732cd0c3dd31eb2c376fc39e23a76141032b6e308b0e71c5d86b3f03995ef3f923cabbc431a139a39a4be02853f352f7103a7f9f52a95299

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
access controlsigning or wallet pathauthentication pathmerge-commit duplicate discount
AI analysis · Moderate 68/100

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 was not actually saved to disk, or could leave unencrypted private keys behind. The patch makes these operations atomic: in-memory state is only updated after the database transaction commits, and failures now return clear, structured error messages instead of crashing the program or giving misleading 'wrong passphrase' errors.

AI review queuedMerge bitcoin/bitcoin#35619: test: ExtendedPrivateKey follow-upsby merge-script · 248ce46f · Sep 22, 2026 · 4 filesMessage 100 · StrongInformational 15Details
Commit message · merge-script

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

a34861d280b3db81175b6692ba00ccc62edff52e test: unify how to avoid the creation of the default wallet in nodes (rkrux)
3458837a0b76fb7f5d4c2f5d9ebb9bd7818794be test: use ExtendedPrivateKey in wallet_importdescriptors.py (rkrux)

Pull request description:

Looks like a case was missed in PR #35543 that introduced the utility xprv
and xpub classes.

Also, unify how to avoid the creation of the default wallet in nodes.

ACKs for top commit:
davidgumberg:
reACK https://github.com/bitcoin/bitcoin/pull/35619/commits/a34861d280b3db81175b6692ba00ccc62edff52e
nebula-21:
ACK a34861d280b3db81175b6692ba00ccc62edff52e
sedited:
ACK a34861d280b3db81175b6692ba00ccc62edff52e

Tree-SHA512: 4ed5d2375d915bfff1898babdd7311ead15169bc1156ab5168b5c7ca2e969c850f752d36caa585b8fe856dca26f3ceb3f7a98ce091d4a8a7c38f532b87250d3f

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

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 is no change to the actual Bitcoin Core software that users run, so it cannot affect live wallets, transactions, or network security.

Lower-priorityMerge bitcoin/bitcoin#36302: ci: simplify macOS codesign checkby merge-script · 995da867 · Sep 22, 2026 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36302: ci: simplify macOS codesign check

716e8605e5c8a85400be15b3ce4a2eaef8045435 ci: simplify macOS codesign check (fanquake)

Pull request description:

Followup to #34914. See https://github.com/bitcoin/bitcoin/pull/34914#discussion_r4043925876.

ACKs for top commit:
maflcko:
lgtm ACK 716e8605e5c8a85400be15b3ce4a2eaef8045435
Sjors:
ACK 716e8605e5c8a85400be15b3ce4a2eaef8045435
willcl-ark:
code review ACK 716e8605e5c8a85400be15b3ce4a2eaef8045435

Tree-SHA512: 750c08eef5f5284b2d259ddb73a62a774cfa9154d91a91561a3042897639be9ea649d74ca5212eb07d3e1e24ea4b468d734824a0d91c9cc2544f4d7fedb67706

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#36310: rpc: clarify that `getaddrmaninfo` counts unique addressesby merge-script · f86cbf53 · Sep 22, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36310: rpc: clarify that `getaddrmaninfo` counts unique addresses

0d34b6e9287f523adf1c85a05ada2ba21f0d820c rpc: clarify that getaddrmaninfo counts unique addresses (0xb10c)

Pull request description:

While using the `getaddrmaninfo` RPC for monitoring the sizes of my address managers, we noticed that it returns the count of unique addresses in the tables. While the addresses in the `tried` table are always unique, the `new` table might contain an address multiple times if we received it from sources in different network groups. I incorrectly assumed the returned values to be the number of address manager slots filled. To make this clearer for the next person, I'm clarifying this in the documentation.

The number of filled addrman slots can be derived from the output of the hidden `getrawaddrman` RPC.

ACKs for top commit:
fjahr:
ACK 0d34b6e9287f523adf1c85a05ada2ba21f0d820c
stratospher:
ACK 0d34b6e.
danielabrozzoni:
ACK 0d34b6e9287f523adf1c85a05ada2ba21f0d820c

Tree-SHA512: 44c607ada730d7264cacd1ba8930cc60d84e59bc92e4e08b98f2453c951f2e0251707cd968bf39d544426a674b78aa5f99b8df08acc06201fceae423ffd814e2

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#36261: test: cover PSBT unknown field mergingby merge-script · bbc40ede · Sep 22, 2026 · 1 fileMessage 91 · StrongInformational 15Details
Commit message · merge-script

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

21e4ea8134d8ca95416e065490d99f82be66bd67 test: cover PSBT unknown field merging (w0xlt)

Pull request description:

Continuing the work from #35310 gere in agreement with w0xlt

This PR adds functional coverage for combinepsbt preserving unknown PSBT fields across global, input, and output maps, as suggested [here](https://github.com/bitcoin/bitcoin/pull/34893#issuecomment-4390043746).

The test covers both PSBTv0 and PSBTv2 by creating valid base PSBTs with `createpsbt`, injecting unknown key-value pairs into two copies, combining them, and asserting that all unknown fields are retained in the decoded result.

ACKs for top commit:
polespinasa:
ACK 21e4ea8134d8ca95416e065490d99f82be66bd67
nebula-21:
ACK 21e4ea8134d8ca95416e065490d99f82be66bd67
winterrdog:
tACK 21e4ea8134d8ca95416e065490d99f82be66bd67
w0xlt:
ACK 21e4ea8134d8ca95416e065490d99f82be66bd67

Tree-SHA512: 0f83ff2b9a519b613c6efaca3707bd8c6fdd00887370e16e927b19f059b751813737adc85ad81366f5c57b91226f56b3b0bdc996451f4d6bc9ec83aa4a189923

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

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 to the actual Bitcoin Core software behavior—only test code was added.

Lower-priorityMerge bitcoin/bitcoin#35887: ipc: use std::optional for checkSpawned(), add tests and rename arg -ipcfd to -ipcchildby Ryan Ofsky · f839ee1a · Sep 21, 2026 · 6 filesMessage 91 · StrongTriage 0Details
Commit message · Ryan Ofsky

Merge bitcoin/bitcoin#35887: ipc: use std::optional for checkSpawned(), add tests and rename arg -ipcfd to -ipcchild

05e7d573184079720e11d933d24b9c9228477a14 ipc, test: add checkSpawned() unit tests (ViniciusCestarii)
8bca7555f8328851bff0bf50d3bbdaa57aaac4b1 ipc, refactor: rename arg -ipcfd to -ipcchild (ViniciusCestarii)
bd3a38f10ab7ef44a0f8e8626edf022831aa7e74 ipc, refactor: return std::optional<mp::SocketId> from checkSpawned() (ViniciusCestarii)

Pull request description:

Implement proposed follow-ups on dicussion https://github.com/bitcoin/bitcoin/pull/35084#discussion_r3664894660:

- Add unit test for checkSpawned().
- Make checkSpawned() return std::optional<mp::SocketId>.
- Rename -ipcfd to -ipcchild.

ACKs for top commit:
jeanpablojp:
ACK 05e7d573184079720e11d933d24b9c9228477a14
enirox001:
utACK https://github.com/bitcoin/bitcoin/pull/35887/changes/05e7d573184079720e11d933d24b9c9228477a14
ryanofsky:
Code review ACK 05e7d573184079720e11d933d24b9c9228477a14. Thanks for the followup!

Tree-SHA512: b91d94cbd7c5feb090fd8fac040d731cbc4dfb2b129f79fbb632deca92ae97a08e8b023b3a00f316702bc6e0d94668b1205baacabbc2b39a07b9e397fb4c76f2

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#31888: contrib: Support re-writing linearize-data dumpsby merge-script · dac53c58 · Sep 21, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#31888: contrib: Support re-writing linearize-data dumps

e9dc16194b47921ea6c5453e71c5c97b9232ba8c correct the linearize-data script (minor) (midnight)

Pull request description:

For tools using the linearization scripts to continuously create a data dump it is undesirable to truncate the dumped file every time it is written. Doing so makes it harder to be directly consumed by an external tool. To fix this, change the file open mode to not truncate the entire file. After this change dumps are byte-for-byte overwritten. Some trailing data at the end of the file might be left over from a previous run in case of a reorg. To guard against this, clip off any remaining data at the end of the file once the dump is completed.

(small patch being passed around which I did not write but thought would be helpful to the community)

ACKs for top commit:
maflcko:
lgtm ACK e9dc16194b47921ea6c5453e71c5c97b9232ba8c
sedited:
ACK e9dc16194b47921ea6c5453e71c5c97b9232ba8c

Tree-SHA512: 9d67183b386a9dee90c4338b986d8b2121a512192cc615ab297e8023a962a9fb4ad721cc2d360eb8cb8a031b7bc1d8315fb6bdb94eb4c04e624c6feacf2af292

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#36278: Update minisketch subtree to latest masterby Hennadii Stepanov · 4ecbc82d · Sep 21, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · Hennadii Stepanov

Merge bitcoin/bitcoin#36278: Update minisketch subtree to latest master

fcb2d832b2d982a6ec26ae3c6b1176b3f4b5b595 Squashed 'src/minisketch/' changes from 4a179c61e3..a12f5de1c9 (fanquake)

Pull request description:

Includes:
* https://github.com/bitcoin-core/minisketch/pull/105

Used in #36275.

ACKs for top commit:
hebasto:
ACK 749bd10fdf0106d39fb9960c8bd1b96b12c944ca.

Tree-SHA512: 0637e2af27d6bc84b61296840b4cfd8503162ca8d37226282b10b03f4fa7637bfbfd873146d13d4f76bfd105f2a6cfb5861169730514b6c668a77984ca7b8b39

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#36298: Update crc32c subtree to latest masterby merge-script · 5ca37734 · Sep 21, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36298: Update crc32c subtree to latest master

5181c61d734f6267b647080e2090cbf045817eaf Squashed 'src/crc32c/' changes from efb8ea04e4..60bcf13edf (fanquake)

Pull request description:

Includes:
* https://github.com/bitcoin-core/crc32c-subtree/pull/10

Used in #36275.

ACKs for top commit:
hebasto:
ACK 2c8372db1131cddedddafd48c6825aa0fb7b1738.

Tree-SHA512: 617e74dda248b00e79ed773d32c0d521ff363e9a23c01ae500a8fd25a4330f39a4851d4e2c977f56a2a7a89ad3563c7e57530ed044dba77dc2b17a4ba138df57

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#36283: kernel: expose transaction versionby merge-script · 69ad2a67 · Sep 21, 2026 · 4 filesMessage 91 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36283: kernel: expose transaction version

83434f7683e45afc1ebbb7690a6ae288b2602b03 kernel: expose transaction version (nervana21)

Pull request description:

This PR is a follow-up to #36194 and #36207. It completes the existing set of transaction accessors allowing clients to read the transaction version without slicing serialized bytes.

Tests cover a range of versions.

ACKs for top commit:
stickies-v:
ACK 83434f7683e45afc1ebbb7690a6ae288b2602b03
yuvicc:
lgtm! ACK 83434f7683e45afc1ebbb7690a6ae288b2602b03
sedited:
ACK 83434f7683e45afc1ebbb7690a6ae288b2602b03

Tree-SHA512: 00b9aeae284aaa5de3992426f7406c593e5cebb3ff3923c04399809caac82465b96a7e6235671574bbfb6c203cca633f9588678f9222e7f698bea8985eabada0

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#36206: build: drop use of `OBJC_OLD_DISPATCH_PROTOTYPES`by merge-script · bb529657 · Sep 19, 2026 · 1 fileMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36206: build: drop use of `OBJC_OLD_DISPATCH_PROTOTYPES`

59f7f3d07d9556fa2e9df2f39d8b9057ca87fdc2 build: drop use of OBJC_OLD_DISPATCH_PROTOTYPES (fanquake)

Pull request description:

Now that we target macOS >= `14.0` and use macOS SDK `14.0`, and no-longer use `objc_msgSend`, this can be removed. Was added in #16720.

ACKs for top commit:
willcl-ark:
ACK 59f7f3d07d9556fa2e9df2f39d8b9057ca87fdc2

Tree-SHA512: 020c66f9a1092301f2ae001186f6d3dbf5a05157d5d340d5072db1579c0c614ca1d305a54c3943d7a90df84ca62c665ac53981e550053135f0883943d08b7dfc

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#36198: http: Add missing LIFETIMEBOUND annotationsby merge-script · 170d3798 · Sep 19, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36198: http: Add missing LIFETIMEBOUND annotations

0b46fc9c5935068e7068a27fa39fa11f32af7a3f http: Add missing LIFETIMEBOUND annotations (Hodlinator)

Pull request description:

Helps Clang detect certain dangling reference issues, in a similar vein as #36164.

### Known limitations

It doesn't catch invalidation nor brace-initialization.

<details><summary>Diff illustrating limitations</summary>

```diff
--- a/src/test/httpserver_tests.cpp
+++ b/src/test/httpserver_tests.cpp
@@ -80,6 +80,15 @@ BOOST_AUTO_TEST_CASE(test_query_parameters)

BOOST_AUTO_TEST_CASE(http_headers_tests)
{
+ auto foo = HTTPHeaders{}.FindAll("needle"); // Emits warning
+ (void)foo;
+ auto bar{HTTPHeaders{}.FindAll("needle")}; // No warning with Clang 22.1.8 :/
+ (void)bar;
+
+ HTTPHeaders test;
+ auto baz = test.FindAll("needle");
+ test.Write("needle", "mutation"); // No warning with Clang 22.1.8 :/
+
{
// Writing response headers
HTTPHeaders headers{};
```

</details>

Clang 24 has experimental invalidation detection so maybe that could be used in the far future: https://clang.llvm.org/docs/LifetimeSafety.html#use-after-invalidation-experimental

### Alternative solution A)

Return by copy everywhere. Might introduce more heap activity, especially in the case of `HTTPRemoteClient::GetRequest()`.

### Alternative solution B)

Refactor the methods to minimize copying while still making things more memory-safe. Replacing `HTTPHeaders::FindAll()` with an `Iterate()`-function taking a lambda which gets to process each header. Gets rid of the heap activity of building a `vector` but introduces copying of `first`.

<details><summary>Diff of httpserver.cpp/h</summary>

```diff
--- a/src/httpserver.cpp
+++ b/src/httpserver.cpp
@@ -272,15 +272,11 @@ std::optional<std::string> HTTPHeaders::FindFirst(const std::string_view key) co
return std::nullopt;
}

-std::vector<std::string_view> HTTPHeaders::FindAll(const std::string_view key) const
+void HTTPHeaders::Iterate(std::function<void(const std::string& key, const std::string& value)> fn) const
{
- std::vector<std::string_view> ret;
for (const auto& item : m_headers) {
- if (CaseInsensitiveEqual(key, item.first)) {
- ret.push_back(item.second);
- }
+ fn(item.first, item.second);
}
- return ret;
}

void HTTPHeaders::Write(std::string&& key, std::string&& value)
@@ -504,18 +500,21 @@ bool HTTPRequest::LoadBody(LineReader& reader)
// We read all the chunks but never got the last chunk, wait for client to send more
return false;
} else {
+ std::optional<std::string> first;
+ m_headers.Iterate([&first] (const std::string& key, const std::string& value) {
+ if (!CaseInsensitiveEqual(key, "Content-Length")) return;
+ if (!first.has_value()) {
+ first = value;
+ } else if (first != value) {
+ // Duplicate Content-Length headers are allowed only if they all have the same value
+ // https://www.rfc-editor.org/rfc/rfc7230#section-3.3.3
+ throw std::runtime_error("Differing Content-Length values");
+ }
+ });
// No Content-length or Transfer-Encoding header means no body, see libevent evhttp_get_body()
- auto content_length_values{m_headers.FindAll("Content-Length")};
- if (content_length_values.empty()) return true;
-
- // Duplicate Content-Length headers are allowed only if they all have the same value
- // https://www.rfc-editor.org/rfc/rfc7230#section-3.3.3
- const auto& first_content_length_value{content_length_values[0]};
- for (size_t i = 1; i < content_length_values.size(); ++i) {
- if (content_length_values[i] != first_content_length_value) throw std::runtime_error("Differing Content-Length values");
- }
+ if (!first.has_value()) return true;

- const auto content_length{ToIntegral<uint64_t>(first_content_length_value)};
+ const auto content_length{ToIntegral<uint64_t>(first.value())};
if (!content_length) throw std::runtime_error("Cannot parse Content-Length value");

if (*content_length > MAX_BODY_SIZE) throw ContentTooLargeError("Max body size exceeded");
--- a/src/httpserver.h
+++ b/src/httpserver.h
@@ -97,10 +97,9 @@ public:
*/
std::optional<std::string> FindFirst(std::string_view key) const;
/**
- * @param[in] key The field-name of the header to search for
- * @returns Views into all values matching the provided key (valid while this object is alive)
+ * @param[in] fn Receives each header as they are iterated through.
*/
- std::vector<std::string_view> FindAll(std::string_view key) const LIFETIMEBOUND;
+ void Iterate(std::function<void(const std::string& key, const std::string& value)> fn) const;
void Write(std::string&& key, std::string&& value);
/**
* @param[in] key The field-name of the header to search for and delete
```

</details>

### Rationale

The methods are not called in many places so risk of misuse is low, and we avoid any risk of performance degradation (such as the one found in https://github.com/bitcoin/bitcoin/pull/35182#discussion_r3266022600). Returning copies without adding mutexes or other thread safety measures does not considerably increase thread-safety.

ACKs for top commit:
maflcko:
lgtm ACK 0b46fc9c5935068e7068a27fa39fa11f32af7a3f
l0rinc:
code review ACK 0b46fc9c5935068e7068a27fa39fa11f32af7a3f

Tree-SHA512: d80670e3a832614f0b33b2c11e7ddd149b11f794e182c3dfb7c5c6045f23a7ea4a179da31c5fed94877a1df061968b65d13d47dcb7f858f853fa31e59497ee03

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#36288: build: Revert remove `cmake/script/CoverageFuzz.cmake`"by merge-script · c08489fb · Sep 19, 2026 · 2 filesMessage 81 · StrongTriage 0Details
Commit message · merge-script

Merge bitcoin/bitcoin#36288: build: Revert remove `cmake/script/CoverageFuzz.cmake`"

4f624bb82ddf5c65c3a1c6210decd7d90ab634ae Revert "build: Remove `cmake/script/CoverageFuzz.cmake`" (sedited)

Pull request description:

This reverts commit 00a5f9b7375ec8dca944e200bd9bef6a29949409 as requested in https://github.com/bitcoin/bitcoin/pull/36161#issuecomment-5716292461 . As noted there the script still has users, so should not be removed.

ACKs for top commit:
kevkevinpal:
ACK [4f624bb](https://github.com/bitcoin/bitcoin/pull/36288/commits/4f624bb82ddf5c65c3a1c6210decd7d90ab634ae)
marcofleon:
ACK 4f624bb82ddf5c65c3a1c6210decd7d90ab634ae

Tree-SHA512: 9f79790d5ccc8787f9325fa46a6732ea99b393ac164a55850c4ee0cb6b0042148389876db6dab6b1cc724a8d2732fc8cacf5d1c383e2fbeb027173b0d3389979

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
fuzzing or regression evidencemerge-commit duplicate discount
AI review queuedMerge bitcoin/bitcoin#36230: wallet: Improve `HasWalletDescriptor` performance and other canonical descriptor string followupsby merge-script · 4a583f38 · Sep 19, 2026 · 9 filesMessage 100 · StrongInformational 18Details
Commit message · merge-script

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

61edcf92532502e91c2e17b8c2a23b45f5773936 test: Add 31.1 to wallet back compat (Ava Chow)
ebf2f69ee81925057cdcc881e42e861dbdf39ae5 test: Simplify miniscript descriptor check in wallet back compat (Ava Chow)
f6cbcfd98a000deb17521520074ba46965c410b1 wallet: Document WalletDescriptor::UpdateFrom (Ava Chow)
f0f6dce849634e801ac81705176ca8b96abbaa09 descriptor, doc: Clarify miniscript CompatDescriptorHash (Ava Chow)
405b1d6055e78866fe2d86ba6fb16534f9554a32 descriptor: Explicitly handle use_apostrophe cases (Ava Chow)
64abb3e8d3610449d541bfff2db23b9ace3fa111 wallet: Compare descriptors by hash of canonical string (Ava Chow)
bb5e8320d76f5175fdf86bdc4c2d24bfc1eed438 wallet: Make WalletDescriptor's descriptor const (Ava Chow)
4cc00f7bc04b4c07827728ba5ce1094b338a76a8 wallet: Remove WalletDescriptor's default constructor (Ava Chow)

Pull request description:

Instead of re-computing the canonical descriptor string for every call to `HasWalletDescriptor`. `WalletDescriptor` will now compute it once upon construction and cache the hash of that string. The comparison uses a new `WalletDescriptor::Equals` function which compares the canonical string hashes. The hash is used to avoid holding possibly a large amount of memory for a string that is rarely used. This should fix the performance regression described in https://github.com/bitcoin/bitcoin/pull/35445#issuecomment-5633483553

Also addresses several review comments related to documentation and code readability:
- https://github.com/bitcoin/bitcoin/pull/35445#discussion_r3924705885
- https://github.com/bitcoin/bitcoin/pull/35445#discussion_r3924785232
- https://github.com/bitcoin/bitcoin/pull/35445#discussion_r3925352894
- https://github.com/bitcoin/bitcoin/pull/35445#discussion_r3925462409
- https://github.com/bitcoin/bitcoin/pull/35445#discussion_r3937800942
- https://github.com/bitcoin/bitcoin/pull/35445#discussion_r3961028442

ACKs for top commit:
Sjors:
ACK 61edcf92532502e91c2e17b8c2a23b45f5773936
polespinasa:
ACK 61edcf92532502e91c2e17b8c2a23b45f5773936

Tree-SHA512: d13057cdfa89f9831950502f19159a40ca1da693f47d8ae63613fbc74b588994f6748b9124947b29ad1f035cff6650f8ae3d7396025a2363fcf3d32de002adf1

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

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 tidies up serialization code, removes a default constructor, and adds v31.1 to backwards-compatibility tests. There is no indication this fixes an exploitable security bug.