BC
← All projectsBitcoin Core

Bitcoin Core

The Bitcoin network's reference node and wallet implementation.

BitcoinSupply chainNormal
Repository coverage

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

252security candidates603second-pass queue199AI analyses
210commits · 30 days
492commits · 60 days
1521commits · 180 days
2876commits · 365 days
Backfill bands
Aug 5 → Feb 61351 seen45 candidatesComplete
Feb 6 → Jun 61033 seen63 candidatesComplete
Jun 6 → Jul 6281 seen11 candidatesComplete
Jul 6 → Aug 5207 seen5 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

70/100 average clarity
915Strong · 80–100
1187Adequate · 60–79
686Thin · 40–59
88Opaque · 0–39
6security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Antoine Poinsot2244170
Ava Chow1564946064
MarcoFalke4062113074
Lőrinc1772116081
fanquake227199057
Hennadii Stepanov208147063
rkrux5798074
Sjors Provoost8988074
Sebastian Falbesoner3376073
David Gumberg5563072
Pieter Wuille9555066
Hodlinator6654076
Analysis record

Published AI watches

Last scanned 1 minute ago

Informational 15 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Make all `const static` class members `constexpr`

This commit is a code cleanup that changes many internal class constants from 'static const' to 'static constexpr'. In modern C++, constexpr constants are automatically inlined and avoid certain linker errors when used in specific ways. Th…

05c35c40by rustaceanrob+38−4024 files
No security note in commit
Informational 15 AI analysisMessage 83 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

scripted-diff: Use long form of shell options in Guix scripts

This commit is a purely cosmetic change in Bitcoin Core's Guix build scripts. It replaces the short shell command 'set -e' with its long-form equivalent 'set -o errexit'. Both forms do exactly the same thing: they make the script exit imme…

2cb3bfa8by Hennadii Stepanov+6−66 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

guix: Add copyright headers to Guix scripts

This commit only adds or updates copyright and license header comments at the top of several helper scripts used for Bitcoin Core's Guix build process. It does not change any executable code, logic, or behavior. There is no security risk.

711eb10fby Hennadii Stepanov+20−27 files
No security note in commit
Low 28 AI analysisMessage 96 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

Squashed 'src/secp256k1/' changes from bd0287d650..d2d04864ef

This commit updates the secp256k1 cryptographic library inside Bitcoin Core to a newer version. The main change is adding support for a new optional feature called 'Silent Payments' (BIP352), which is a privacy-enhancing way to receive Bit…

New cryptographic module added (Silent Payments / BIP352)Field-element equality check magnitude bound corrected from 31 to 30X-only public key even-Y invariant enforced in extrakeys module
a33f2405by fanquake+13939−13434 files
No security note in commit
Informational 15 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

scripted-diff: Use C.UTF-8 locale in Guix scripts

This commit is a routine cleanup that changes the locale setting in Bitcoin Core's Guix build scripts from the old ASCII-only 'C' locale to the modern 'C.UTF-8' locale. It is not a security fix and does not change any behavior that could b…

8916f796by Hennadii Stepanov+15−1515 files
No security note in commit
Informational 19 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

p2p: Assume v2transport for addresses from seeds

This change makes Bitcoin Core assume that hard-coded and DNS seed nodes support the newer BIP324 encrypted transport (v2) when first connecting. If the guess is wrong, the software falls back to the older v1 protocol automatically. It is …

Adds NODE_P2P_V2 to assumed service flags for seed-derived addressesFallback to v1 transport exists if the v2 assumption is wrongNo input validation, memory safety, or cryptographic changes
cf0f2aeaby Martin Zumsande+10−22 files
No security note in commit
Informational 15 AI analysisMessage 85 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: simplify adding SipHash-1-3-UJ

This is a code cleanup (refactor) that moves the internal SipHash mixing steps into shared helper methods. It does not change how Bitcoin hashes data, how many rounds are run, or any user-visible behavior. There is no security bug being fi…

25bfca06by Lőrinc+74−1222 files
No security note in commit
Informational 21 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

crypto: add generic SipHash-1-3-UJ

This commit adds a new, weaker variant of the SipHash algorithm inside Bitcoin Core's cryptography module. It is explicitly designed for low-security uses such as internal hash tables, not for protecting funds or network messages. The code…

New weaker cryptographic primitive added (SipHash-1-3 vs. standard SipHash-2-4)Explicit unpadded input design removes length-commitment paddingJumbo 256-bit blocks increase attacker control within a single round
c2d7931bby Pieter Wuille+103−02 files
No security note in commit
Informational 15 AI analysisMessage 78 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

bench: add fixed-width SipHash benchmarks

This commit only adds new performance benchmark tests for a hash function called SipHash. It does not change any production code that handles Bitcoin transactions, networking, or wallet data. There is no security issue here.

7ff55cc6by Lőrinc+49−31 file
No security note in commit
Informational 15 AI analysisMessage 80 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

crypto: add fixed-width SipHash-1-3-UJ

This commit adds two new shortcut methods for computing a specific SipHash variant on fixed-size inputs. It is a pure performance/ergonomics addition: the new methods copy the hasher's internal state before operating, so they do not alter …

a0ccd4adby Pieter Wuille+21−01 file
No security note in commit
Informational 15 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: add shared SipHash vectors

This commit only adds new test data and test code for the SipHash hashing function used in Bitcoin Core. It does not change any production code that handles transactions, networking, or wallets. The goal is to make sure the existing SipHas…

af50ba85by Lőrinc+797−237 files
No security note in commit
Informational 15 AI analysisMessage 72 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: compat, ensure downgrade preserves tx witness variants

This commit adds a new regression test to Bitcoin Core. It checks that when a wallet created on a newer version is loaded on an older version and then brought back to the newer version, the wallet still remembers alternative 'witness varia…

99bdcb06by furszy+74−01 file
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

fuzz: clang-format LIMITED_WHILE

This commit is purely a code-style cleanup. It adds a space between the macro name LIMITED_WHILE and its opening parenthesis across many fuzz test files, plus a few tiny formatting fixes like removing a redundant semicolon and fixing inden…

fab8eeedby MarcoFalke+91−14265 files
No security note in commit
Moderate 63 AI analysisMessage 90 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

net_processing: add a global delay queue for sending txs

This commit adds a global rate limiter to how many transaction announcements (INV messages) a Bitcoin node sends out. Before, each peer had its own queue, so a node could receive one transaction and announce it to over 100 peers, acting li…

Global rate limiting replaces per-peer queues to prevent transaction-announcement amplificationDual token buckets bound both INV count and relay bandwidthCommit message explicitly describes the change as limiting transaction-spam amplification and excessive memory/CPU usage
df31ee57by Anthony Towns+176−252 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 45 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

chainparams: delete my DNS seed

A Bitcoin Core developer removed their own DNS seed (seed.bitcoin.sipa.be, run by Pieter Wuille) from the list of hardcoded network seeds that help new Bitcoin nodes find peers when they first start up. This is a routine operational/mainte…

Removal of a trusted bootstrap DNS seed from default chain parametersReduction in peer-discovery redundancy for new mainnet nodesNo vulnerability patch, cryptographic fix, or memory-safety change present
d9080639by Pieter Wuille+1−32 files
No security note in commit
Informational 15 AI analysisMessage 95 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: Redeclare variable as signed in `util_tests`

This is a minor fix to a unit test file. A test variable was being assigned a negative value in an unsigned container, which caused a silent underflow and made the test assertion technically incorrect. The patch changes the test to check t…

cd2a4bc5by rustaceanrob+1−21 file
No security note in commit
Informational 24 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: add regression test for in-memory SQLiteDatabase reopen

This commit only adds a new automated test. It checks that Bitcoin Core's in-memory SQLite wallet database correctly refuses to reopen after being closed, because reopening would silently create a fresh empty database and discard any previ…

Regression test for data-loss prevention behavior in wallet database layerIn-memory SQLite database reopen could silently discard wallet dataOpen() now throws std::runtime_error instead of returning a fresh connection
777d23f2by Pablo Martin+9−01 file
No security note in commit
Low 43 AI analysisMessage 100 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

refactor: Use u64 over size_t for all cache sizes to fix a 32-bit overflow

This commit fixes a bug in Bitcoin Core that only affects 32-bit computers. When the program calculated how much database cache to allocate, it multiplied a large default cache value by 10. On 32-bit systems that multiplication overflowed,…

Integer overflow in cache-size calculation on 32-bit systemsUnsigned multiplication overflow explicitly mentioned in commit message with runtime sanitizer outputType promotion from size_t to uint64_t to prevent platform-dependent width issues
fabafd91by MarcoFalke+37−285 files
Vendor flagged security relevance
Informational 23 AI analysisMessage 85 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

wallet: Use Descriptor::CanSelfExpand() in CanGetAddresses()

This is a small Bitcoin Core wallet change that lets the wallet generate addresses from certain descriptors even when it does not have private keys and has already used up its pre-derived address range. It only affects descriptors that can…

Changes address-derivation gating logic in wallet codeExpands conditions under which addresses can be produced without private keysNo explicit security framing, CVE, or advisory language in commit
1e996640by Ava Chow+1−11 file
No security note in commit
Informational 19 AI analysisMessage 58 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

descriptor: Add CanSelfExpand()

This commit adds a new helper method called CanSelfExpand() to Bitcoin Core's descriptor system. It lets the code ask whether a wallet descriptor can produce its Bitcoin address(es) on its own, without needing a saved cache or private keys…

New API surface added to descriptor subsystem (CanSelfExpand)No change to existing expansion, signing, or key-derivation logicNo bounds, memory, or cryptographic operations modified
d2ee9227by Ava Chow+57−184 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.

Security candidateUpdate test_framework/psbt.py for PSBTv2by Ava Chow · 863cf47b · Apr 29, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Ava Chow

Update test_framework/psbt.py for PSBTv2

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

This commit updates Bitcoin Core's internal test-framework Python helper for Partially Signed Bitcoin Transactions (PSBT) to support the newer PSBT version 2 format. It is a test/development tooling change, not a change to the live Bitcoin network code that validates transactions or consensus rules. There is no indication this fixes a security bug or introduces a vulnerability.

Security candidateAdd PSBT::ComputeLockTime()by Ava Chow · 5770dbd3 · Apr 29, 2026 · 2 filesMessage 50 · ThinLow 27Details
Commit message · Ava Chow

Add PSBT::ComputeLockTime()

Function to compute the lock time for the transaction

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 27/100

This commit adds a helper function that calculates when a Bitcoin transaction becomes valid based on time or block height locks inside a Partially Signed Bitcoin Transaction (PSBT). It also makes the existing unsigned-transaction builder use this new calculation instead of always using a simple fallback value. The change appears to be a correctness improvement for PSBT version 2 locktime handling, not an obvious security fix, but it prevents a PSBT from being turned into a transaction when its inputs disagree about whether the lock is based on time or block height.

Security candidatetests: Add PSBT unit test for ComputeTimeLockby Ava Chow · b8b6e7f0 · Apr 29, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · Ava Chow

tests: Add PSBT unit test for ComputeTimeLock

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 15/100

This commit only adds a new unit test file for an existing PSBT (Partially Signed Bitcoin Transaction) function called ComputeTimeLock. It does not change any production code, wallet logic, or network behavior. There is no security fix or vulnerability being patched here.

Security candidatetest: Test merging implicit PSBTv0 with explicit PSBTv0by w0xlt · 9fa4076b · Apr 29, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · w0xlt

test: Test merging implicit PSBTv0 with explicit PSBTv0

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 boundarysigning or wallet path
AI analysis · Informational 15/100

This commit adds a new test case to Bitcoin Core's functional test suite. It verifies that two PSBT (Partially Signed Bitcoin Transaction) version 0 encodings—one with the version field explicitly set to 0 and one with it omitted—can be merged together correctly. There is no code change to the actual Bitcoin Core node software, only a new regression test.

Security candidateAllow specifying PSBT version in constructorby Ava Chow · b39c86ae · Apr 29, 2026 · 3 filesMessage 60 · AdequateInformational 19Details
Commit message · Ava Chow

Allow specifying PSBT version in constructor

The constructor will create the PSBT of the specified version, as long
as it is 0 or 2.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 19/100

This change lets the PSBT constructor choose between version 0 or version 2 when creating a new Partially Signed Bitcoin Transaction. It also fixes a small consistency bug in the joinpsbts RPC where newly created PSBTs during joining/shuffling were always version 0, even when the inputs being joined were version 2. There is no direct evidence this is a security fix, and the new version parameter is guarded by an assertion that only allows 0 or 2.

Security candidateReplace PSBT.tx with PSBT::GetUnsignedTx and PSBT::GetUniqueIDby Ava Chow · 3da0e160 · Apr 29, 2026 · 6 filesMessage 85 · StrongLow 33Details
Commit message · Ava Chow

Replace PSBT.tx with PSBT::GetUnsignedTx and PSBT::GetUniqueID

The global unsigned tx is decomposed into separate fields inside of
PSBT, which mirrors what PSBTv2 will do. However, we still need to get
the global unsigned tx so PSBT::GetUnsignedTx is introduced to do that.
In order to also have a stable unique ID, we also introduce
PSBT::GetUniqueID to replace uses of PSBT.tx.GetHash().

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 33/100

This commit refactors how Bitcoin Core handles Partially Signed Bitcoin Transactions (PSBTs). Previously, a PSBT stored a complete copy of the unsigned transaction. Now, the transaction is broken into separate fields and reconstructed on demand. The change also introduces a stable unique ID for each PSBT. This is primarily a code-cleanup and preparation step for a future PSBT version 2, not a direct fix for an active security bug.

Security candidatepsbt: Change default psbt version to 2by Ava Chow · e0e4dbde · Apr 29, 2026 · 2 filesMessage 45 · ThinInformational 21Details
Commit message · Ava Chow

psbt: Change default psbt version to 2

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

This commit changes the default version number used when Bitcoin Core creates new Partially Signed Bitcoin Transactions (PSBTs) from version 0 to version 2. PSBT is a standard format for passing around unsigned or partially signed transactions between wallets and signers. The change itself is a one-line default-value update plus a test that confirms new PSBTs are created as version 2. It does not fix a memory corruption bug, crash, or remote-code-execution flaw, and there is no evidence in the commit or supplied references that it addresses a known security incident.

Security candidateRestrict joinpsbts to PSBTv0 onlyby Ava Chow · d9cf658e · Apr 29, 2026 · 1 fileMessage 45 · ThinLow 32Details
Commit message · Ava Chow

Restrict joinpsbts to PSBTv0 only

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

This change updates the Bitcoin Core 'joinpsbts' RPC command so it only accepts PSBT version 0 files. Previously, it could accept newer PSBT versions, which might have led to incorrect or unexpected behavior when combining partially signed transactions. The change adds an explicit version check and rejects non-v0 PSBTs with a clear error message.

Security candidatefuzz: Enforce additional version invariants in PSBT fuzzerby Antoine Poinsot · 470e52a5 · Apr 29, 2026 · 3 filesMessage 60 · AdequateInformational 17Details
Commit message · Antoine Poinsot

fuzz: Enforce additional version invariants in PSBT fuzzer

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
signing boundaryfuzzing or regression evidencesigning or wallet path
AI analysis · Informational 17/100

This commit only changes test/fuzzing code and adds equality operators to internal data structures so the fuzzer can check round-trip behavior of PSBT (Partially Signed Bitcoin Transaction) data. It does not change production transaction handling, consensus rules, or network code. There is no indication it fixes an exploitable vulnerability.

Security candidatepsbt: make PSBT structs into classesby Ava Chow · 7eacc21f · Apr 29, 2026 · 4 filesMessage 45 · ThinInformational 15Details
Commit message · Ava Chow

psbt: make PSBT structs into classes

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

This commit is a simple code cleanup: it changes three C++ data structures (PSBTInput, PSBTOutput, and PartiallySignedTransaction) from 'struct' to 'class' and adds 'public:' labels so their members remain publicly accessible. It also updates forward declarations in other header files to match. This has no functional or security effect on the Bitcoin Core software.

Security candidatepsbt: add PSBTv2 global tx fieldsby Ava Chow · 543d3e1c · Apr 29, 2026 · 2 filesMessage 68 · AdequateInformational 19Details
Commit message · Ava Chow

psbt: add PSBTv2 global tx fields

When decomposing a transaction into a PSBTv2, the tx version and
locktime need to be stored in their respective global fields. Add those
fields and fill them when constructing.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 19/100

This commit adds two missing data fields to Bitcoin's PSBTv2 format support: the transaction version and the locktime. These values are now stored in the correct global fields when a transaction is converted into a PSBTv2. It appears to be a correctness/completeness fix for the newer PSBT standard rather than a fix for an active security vulnerability.

Security candidatepsbt: AddInput and AddOutput should take only PSBTInput and PSBTOutputby Ava Chow · 95897507 · Apr 29, 2026 · 4 filesMessage 50 · ThinLow 27Details
Commit message · Ava Chow

psbt: AddInput and AddOutput should take only PSBTInput and PSBTOutput

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 27/100

This commit refactors how inputs and outputs are added to Partially Signed Bitcoin Transactions (PSBTs). Previously, callers had to pass both a raw transaction input/output and a PSBT-specific input/output, which could become inconsistent. Now the functions accept only the PSBT-specific object and derive the raw transaction data from it. For PSBT version 2, the code currently just returns false and does not actually add anything, which appears to be intentional but incomplete support. The change reduces the risk of mismatched data and duplicate inputs, but it is primarily a code-quality and API-safety improvement rather than a fix for an active exploit.

Security candidateAdd PSBTInput::GetOutPointby Ava Chow · 1b7d323a · Apr 29, 2026 · 4 filesMessage 50 · ThinInformational 18Details
Commit message · Ava Chow

Add PSBTInput::GetOutPoint

Helper for getting the PSBTInput COutPoint

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 18/100

This commit is a small code cleanup: it adds a helper function called GetOutPoint to PSBTInput and replaces several direct accesses to transaction input data with calls to that helper. There is no change in behavior or security fix visible in the diff. It appears to be a refactoring to make the code easier to maintain.

Security candidatepsbt: add tx input and output fields in PSBTInput and PSBTOutputby Ava Chow · 9671aa08 · Apr 29, 2026 · 4 filesMessage 73 · AdequateInformational 19Details
Commit message · Ava Chow

psbt: add tx input and output fields in PSBTInput and PSBTOutput

PSBTInput should be aware of the previous txid, output index, and
sequence numbers for inputs, extracting them from the global
unsigned tx.

PSBTOutput should be aware of the output amount and script, extracting
them from the global unsigned tx.

This prepares for PSBTv2 where these fields are serialized.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 19/100

This commit is a small internal refactor of how Bitcoin Core builds Partially Signed Bitcoin Transactions (PSBTs). It makes each PSBT input and output remember its corresponding transaction details (previous transaction ID, output index, sequence number, amount, and script) directly, instead of only storing them inside the global unsigned transaction. The change prepares the code for a future PSBT version (PSBTv2) where these fields are stored separately. There is no obvious security bug in the diff itself, but it touches serialization and RPC code paths that handle user-provided transaction data.

Security candidatepsbt: Use PSBTInput and PSBTOutput fields instead of accessing global txby Ava Chow · 82c9fe31 · Apr 29, 2026 · 8 filesMessage 73 · AdequateInformational 19Details
Commit message · Ava Chow

psbt: Use PSBTInput and PSBTOutput fields instead of accessing global tx

PSBTInput now has the previous txid and output index, and PSBTOutput has
the amount and script. We no longer need to access the global unsigned
tx for these fields.

Additionally, we can change iterating tx.vin and tx.vout to psbtx.inputs
and psbtx.outputs.

This is in prepration for use with PSBTv2 where the global unsigned tx
will not exist.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 19/100

This commit is a code cleanup in Bitcoin Core's Partially Signed Bitcoin Transaction (PSBT) handling. It changes internal code to read input and output details from the PSBT data structures themselves rather than from the global unsigned transaction. The stated goal is to prepare for a future PSBT version (PSBTv2) where the global unsigned transaction may not exist. There is no direct security fix here, but any inconsistency between the PSBT fields and the global transaction could, in principle, lead to wrong analysis or signing behavior. The patch appears to keep behavior equivalent by using the same data through a different path.

Security candidatepsbt: Remove default constructorby Ava Chow · c01c7f06 · Apr 29, 2026 · 14 filesMessage 70 · AdequateInformational 19Details
Commit message · Ava Chow

psbt: Remove default constructor

Instead of allowing PSBTs to be default constructor, force usage of the
deserialization constructor.

CombinePSBTs, DecodeBase64PSBT, and DecodeRawPSBT are all changed to
return std::optional or util::result rather than using an output
parameter to avoid the need for a default constructor.

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

This commit is a code-quality refactor for Bitcoin Core's Partially Signed Bitcoin Transaction (PSBT) handling. It removes the ability to create an empty/default PSBT object and changes helper functions so they return a valid PSBT or an explicit failure instead of filling in an empty object. This makes accidental use of an uninitialized PSBT impossible, but it does not fix a known active bug or vulnerability by itself.

Security candidateHave PSBTInput and PSBTOutput know the PSBT's versionby Ava Chow · 990b084f · Apr 29, 2026 · 4 filesMessage 50 · ThinInformational 18Details
Commit message · Ava Chow

Have PSBTInput and PSBTOutput know the PSBT's version

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 18/100

This commit is a small internal refactor in Bitcoin Core's Partially Signed Bitcoin Transaction (PSBT) handling. It makes each PSBT input and output aware of which PSBT version it belongs to, currently hard-coded to version 0. The change does not fix a known bug or vulnerability by itself; it appears to lay groundwork for future PSBT version support. There is no evidence in the commit or supplied references that this is a security patch.

Security candidategui: Store PSBT in std::optional in PSBTOperationsDialogby Ava Chow · f926c326 · Apr 29, 2026 · 2 filesMessage 77 · AdequateInformational 16Details
Commit message · Ava Chow

gui: Store PSBT in std::optional in PSBTOperationsDialog

Use std::optional to store the PSBT to avoid having a default constructed PSBT

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Explains rationale or failure mode
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 16/100

This is a small code-quality change in Bitcoin Core's graphical wallet interface. It switches the internal storage of a partially-signed Bitcoin transaction (PSBT) from a plain object to an optional wrapper, so the code no longer keeps a default/empty PSBT sitting around before one is actually loaded. The change itself does not fix a known crash or vulnerability, but it removes a class of potential bugs where an uninitialized PSBT could accidentally be used.

Security candidatetest: PSBTs should roundtrip through RPCs that do nothingby Ava Chow · 88384180 · Apr 29, 2026 · 1 fileMessage 72 · AdequateInformational 15Details
Commit message · Ava Chow

test: PSBTs should roundtrip through RPCs that do nothing

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 boundarysigning or wallet path
AI analysis · Informational 15/100

This commit only adds a new automated test to Bitcoin Core. It checks that certain PSBT (Partially Signed Bitcoin Transaction) RPC commands, when called in a way that should make no meaningful change, return the exact same PSBT they were given. There is no change to production code, no bug fix, and no security patch.

Security candidatepsbt: Refactor duplicate key lookup and size checksby Ava Chow · 1e2d146b · Apr 29, 2026 · 2 filesMessage 73 · AdequateInformational 20Details
Commit message · Ava Chow

psbt: Refactor duplicate key lookup and size checks

Every key has a duplicate key lookup check, and many keys have fixed
size checks. These can be refactored to reduce code duplication.

Co-Authored-By: David Gumberg <davidzgumberg@gmail.com>

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
signing boundarysigning or wallet path
AI analysis · Informational 20/100

This commit is a code cleanup in Bitcoin Core's Partially Signed Bitcoin Transaction (PSBT) handling. It moves duplicate-key detection and fixed-size checks into shared helpers so the same logic is not repeated dozens of times. The behavior is intended to stay the same; only error messages change in a few test cases. There is no indication this fixes a security bug.

Security candidatetest: construct psbt with unknown field programmaticallyby David Gumberg · 00187750 · Apr 29, 2026 · 2 filesMessage 72 · AdequateInformational 15Details
Commit message · David Gumberg

test: construct psbt with unknown field programmatically

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 boundarysigning or wallet path
AI analysis · Informational 15/100

This commit only changes test code for Bitcoin Core's Partially Signed Bitcoin Transaction (PSBT) handling. It removes one hard-coded test vector from a JSON file and adds a helper function so tests can build PSBTs with made-up unknown fields on the fly. There is no change to production wallet or node code, so it cannot directly affect live funds, network behavior, or introduce a runtime vulnerability.

Security candidatepsbt: Fill hash preimages and taproot builder from SignatureDataby Ava Chow · 0cb884e6 · Apr 29, 2026 · 1 fileMessage 50 · ThinLow 32Details
Commit message · Ava Chow

psbt: Fill hash preimages and taproot builder from SignatureData

Filling these fields was missing.

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 32/100

This commit fixes a gap in Bitcoin Core's Partially Signed Bitcoin Transaction (PSBT) handling. When converting signature data into a PSBT input or output, several pieces of information—hash preimages for certain script operations and the taproot script tree builder—were not being copied over. Missing preimages could prevent a PSBT from being finalized correctly, and missing the taproot builder could prevent proper analysis or signing of taproot outputs. It is a correctness fix in wallet/transaction code rather than a remote-exploitable vulnerability.

Security candidateDon't pin Python patch versionby Sjors Provoost · 5fefa5a6 · Apr 29, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Sjors Provoost

Don't pin Python patch version

.python-version always matches the minimum supported Python version.
It's main purpose is to catch accidental use of too modern syntax
in scripts and functional tests.

We (currently) don't specify a minimum patch version, so it's not
necessary to do so here. The minor verion is enough.

This also avoids requiring users to keep a potentially unsafe old
patch version installed.

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

This commit changes a single configuration file used by developers so it only specifies the broad Python version (3.10) instead of an exact patch release (3.10.14). The stated goal is to avoid forcing developers to keep an old, potentially insecure Python patch release installed. It is a tooling/development hygiene change, not a fix for an exploitable vulnerability in Bitcoin Core itself.

Security candidatemulti_index: fix compilation failure with boost >= 1.91by Cory Fields · 0bc9d354 · Apr 28, 2026 · 3 filesMessage 100 · StrongInformational 15Details
Commit message · Cory Fields

multi_index: fix compilation failure with boost >= 1.91

This effectively reverts a3cb309e7c31853f272bffaa65fb6ab0a7cc4083 from PR #30194.

That PR reduced the multi_index type signatures as recommended upstream, but
this is no longer supported as of boost 1.91 because it is no longer necessary.
1.91 drops support for the pre-c++11 work-arounds that bloated the type
signatures to begin with.

The upstream `BOOST_MULTI_INDEX_ENABLE_MPL_SUPPORT` define is meant to provide
compatibility with removed features, but it does not work for this case. Using
`indexed_by` directly when defining the `multi_index` (as opposed to inheriting
from it) works with all versions, and avoids the use of the back-compat define.

This is a slight regression when building against boost < 1.91 because the
bloated type signatures are reintroduced in that case, but it's not significant
enough to go to the trouble of introducing version detection and ifdefs.

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

This commit fixes a build failure that occurs when compiling Bitcoin Core with Boost version 1.91 or newer. It changes how certain in-memory data structures (used for tracking orphan transactions, mempool entries, and transaction requests) are declared so they compile with both old and new Boost versions. There is no runtime behavior change, no vulnerability fix, and no security impact.

Security candidaterefactor: use PSBTFillOptions for filling and signingby Sjors Provoost · dc4a5d12 · Apr 28, 2026 · 20 filesMessage 93 · StrongInformational 15Details
Commit message · Sjors Provoost

refactor: use PSBTFillOptions for filling and signing

Replace the sign, finalize , bip32derivs and sighash_type arguments which
are passed to FillPSBT() and SignPSBTInput() with a PSBTFillOptions struct.

This makes it easier to add additional options later without large code
churn, such as avoid_script_path proposed in #32857. It also makes the
use of default boolean options safer compared to positional arguments
that can easily get mixed up.

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
secret or key materialsigning boundarysigning or wallet path
AI analysis · Informational 15/100

This is a straightforward code cleanup (refactor) that bundles several PSBT signing options into a single structure. It does not change what the software does; it only changes how the options are passed around internally. There is no security vulnerability here.