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 queue603AI 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 Poinsot2245170
Ava Chow15649104064
MarcoFalke4062159074
Lőrinc1772136081
fanquake2271923057
Hennadii Stepanov2081427063
rkrux57944074
Sjors Provoost89813074
Sebastian Falbesoner33711073
David Gumberg55637072
Pieter Wuille9556066
Hodlinator66517076
Analysis record

Published AI watches

Last scanned 59 minutes ago

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

test: test the result order of a multiple import request is correct

This commit only adds a new automated test to Bitcoin Core. It checks that when a user asks the wallet to import multiple descriptors at once, the list of results comes back in the same order as the original request, including any error me…

3ac8b806by Pol Espinasa+40−01 file
No security note in commit
Informational 15 AI analysisMessage 87 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: test invalid or missing timestamp throws importdescriptors

This commit only adds new automated tests for the Bitcoin Core wallet's importdescriptors RPC. It checks that the command correctly rejects requests with a missing or invalid timestamp. No production wallet code is changed, so this cannot …

No changes to consensus, networking, wallet logic, or cryptographyOnly functional test code is modifiedAdded assertions are for expected error handling paths
e4732bf0by Pol Espinasa+28−11 file
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

ci, iwyu: Enforce warning-free `src/common`

This is a routine code cleanup commit. It adjusts which C++ header files are included in the `src/common` part of Bitcoin Core so that an automated tool called Include What You Use (IWYU) reports no warnings. It also tells the continuous i…

50145f62by Hennadii Stepanov+75−3822 files
No security note in commit
Informational 20 AI analysisMessage 73 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

wallet: Remove meaningless bool fallback in FundTransaction

This commit removes an old backward-compatibility feature in Bitcoin Core's wallet RPC command `fundrawtransaction`. Previously, callers could pass a plain `true` or `false` as the second argument, which was silently ignored. Now, passing …

Removal of a no-op backward-compatibility code path that silently accepted arbitrary boolean valuesStricter RPC input validation: bare booleans now rejected with a JSON type errorNo memory safety, cryptographic, or consensus changes observed
fa7fe798by MarcoFalke+60−652 files
No security note in commit
Informational 17 AI analysisMessage 45 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

gui: Menu action for exporting a watchonly wallet

This commit adds a new menu item in the Bitcoin Core desktop wallet that lets users export a 'watch-only' copy of their wallet. A watch-only wallet can see transactions and balances but cannot spend funds. The change only wires up an exist…

No security-relevant signals detected in the diffNew GUI feature exposing existing wallet export functionalityAction is disabled for wallets with private keys disabled
cb51f97fby Ava Chow+30−04 files
No security note in commit
Informational 19 AI analysisMessage 50 · Thin
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

gui: Adds option to not load the wallet after migration

This commit adds a user-facing checkbox in the Bitcoin Core desktop wallet that lets someone choose whether to automatically load a wallet after migrating it from an older format. Previously the wallet was always loaded. The change is a us…

No security-relevant signal: change is a feature/usability additionNo memory safety, cryptographic, consensus, or network changesNo privilege boundary crossed
492a715dby Pol Espinasa+20−104 files
No security note in commit
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

fuzz: populate wallet TXO index in wallet_create_transaction

This is a fix to a Bitcoin Core fuzz test (an automated testing harness), not to the main wallet code that real users run. The test was inserting fake wallet transactions in a way that skipped updating an internal index called m_txos. Beca…

Test-only change in fuzz harnessFixes internal test-state consistency, not production wallet behaviorNo validation, consensus, or P2P networking changes
1eac6a72by frankomosh+1−01 file
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 16 AI analysisMessage 75 · Adequate
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

qt, test: Enable tests on macOS with `minimal` QPA plugin

This commit removes workarounds that skipped three Bitcoin Core Qt test suites on macOS when using the 'minimal' Qt platform plugin. The previous commit fixed the underlying crash cause, so these tests can now run. It is a test-infrastruct…

No security-relevant code change in the diff itselfReferences a prior crash fix, but this commit only removes test skipsNo input handling, cryptography, networking, consensus, or wallet logic modified
fd59d68cby Hennadii Stepanov+0−343 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 95 · Strong
BC Bitcoin CoreBitcoin Core BitcoinSupply chain

test: wallet: BnB incomplete result on attempt-limit success

This commit adds a new unit test for Bitcoin Core's coin selection algorithm. It checks that when the Branch-and-Bound (BnB) search finds a usable coin selection early but then keeps searching for a better one until it hits the attempt lim…

6ee05c4bby Bruno Garcia+20−01 file
No security note in commit
Repository ledger

Explore captured commits

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

Security candidateMerge bitcoin/bitcoin#32621: contrib: utxo_to_sqlite.py: add option to store txid/spk as BLOBsby merge-script · 6d625af2 · Feb 8, 2026 · 2904 filesMessage 100 · StrongInformational 15Details
Commit message · merge-script

Merge bitcoin/bitcoin#32621: contrib: utxo_to_sqlite.py: add option to store txid/spk as BLOBs

7378f27b4fb512567b6152f986f67d9263d08d7a test: run utxo-to-sqlite script test with spk/txid format option combinations (Sebastian Falbesoner)
b30fca7498c93356fbdb8c2ce881aa8e548bae17 contrib: utxo_to_sqlite.py: add options to store txid/spk as BLOBs (Sebastian Falbesoner)

Pull request description:

This PR is a late follow-up to https://github.com/bitcoin/bitcoin/pull/27432, introducing an option for the utxo-to-sqlite script to store the txid/scriptPubKey columns as bytes (= `BLOB` storage class in sqlite, see e.g. https://www.sqlite.org/datatype3.html in sqlite) rather than hex strings. This was proposed in earlier reviews (https://github.com/bitcoin/bitcoin/pull/27432#issuecomment-1516857024, https://github.com/bitcoin/bitcoin/pull/27432#issuecomment-1653739351) and has the obvious advantage of a significantly smaller size of the resulting database (and with that, faster conversion) and the avoidance of hex-to-bytes conversion for further processing of the data [1]. The rationale on why hex strings were chosen back then (and still stays the default, if only for compatibility reasons) is laid out in https://github.com/bitcoin/bitcoin/pull/27432#issuecomment-1516922824 [2].

The approach taken is introducing new parameters `--spk` and `--txid` which can either have the values "hex", "raw" (for scriptpubkey) and "hex", "raw", "rawle" (for txid). Thanks to ajtowns for providing this suggestion. Happy to take further inputs on naming and thoughts on future extensibility etc.

[1] For a concrete example, I found that having these columns as bytes would be nice while working on a SwiftSync hints generator tool (https://github.com/theStack/swiftsync-hints-gen), which takes the result of the utxo-to-sqlite tool as input.
[2] note that in contrast what I wrote back then, I think there is no ambiguity on byte-string-serialization of txids; they are ultimately just hash results and hence, they should be stored as such, and adding a big/little endian knob wouldn't make much sense. The drawback of not being able to immediately show txid-strings (as one would need to do the bytes-reversal step first, which is not possible in sqlite, see e.g. https://github.com/bitcoin/bitcoin/pull/24952#issuecomment-1165499803) still remains though.

ACKs for top commit:
ajtowns:
ACK 7378f27b4fb512567b6152f986f67d9263d08d7a
w0xlt:
reACK https://github.com/bitcoin/bitcoin/pull/32621/commits/7378f27b4fb512567b6152f986f67d9263d08d7a
sedited:
ACK 7378f27b4fb512567b6152f986f67d9263d08d7a

Tree-SHA512: 265991a1f00e3d69e06dd9adc34684720affd416042789db2d76226e4b31cf20adc433a74d14140f17739707dee57e6703f72c20bd0f8dd08b6d383d3f28b450

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
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol pathmerge-commit duplicate discount
AI analysis · Informational 15/100

This commit is a normal feature addition to a helper script in the Bitcoin Core repository. It lets users of the contrib/utxo_to_sqlite.py tool choose whether transaction IDs and script public keys are stored as hexadecimal text or as raw binary data in the resulting SQLite database. This is purely an optional convenience/efficiency improvement for an offline analysis tool and does not change Bitcoin Core's node, wallet, consensus, or network behavior.

Security candidatebench: simplify script verification benchmark, generalize signingby Sebastian Falbesoner · dd93362a · Feb 3, 2026 · 1 fileMessage 88 · StrongInformational 15Details
Commit message · Sebastian Falbesoner

bench: simplify script verification benchmark, generalize signing

Simplify the benchmark with the following changes:
- Set the deterministic private key using uint256::ONE,
put it in a `FlatSigningProvider` instance for easier signing
- Use `GetScriptForDestination` for creating the output script
- Use `SignTransaction` to sign, instead of doing it manually
(also removes the need to caclulate the public key hash manually)
- Pass standard script verification flags instead of combining them manually

These steps, in particular the generalized signing, prepare the
benchmarking extension for a different script type (P2TR key-path) in
the next commit.

88/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning boundarydefensive validation
AI analysis · Informational 15/100

This commit is a code cleanup inside a performance benchmark file. It changes how a test script creates a fake Bitcoin transaction and signature for timing purposes only. There is no change to the live Bitcoin network code, wallet handling, or consensus rules, and nothing in the commit suggests a security fix or vulnerability.

Security candidatelogging: use util/log.h where possibleby stickies-v · 37cc2a2d · Feb 2, 2026 · 33 filesMessage 68 · AdequateInformational 15Details
Commit message · stickies-v

logging: use util/log.h where possible

Preparation for a future commit where kernel's dependency
on logging.cpp is removed completely.

Replace usage of logging\.h with util/log\.h where it
suffices, and fix wrong includes according to iwyu.

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

This is a routine code cleanup change. It swaps one internal logging header file for another, smaller one across many source files and fixes a few include-order style issues. There is no change to program behavior, no bug fix, and no security-relevant modification.

Security candidateci: use Alpine 3.23by fanquake · d4057131 · Feb 2, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · fanquake

ci: use Alpine 3.23

50/100 · ThinMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · Informational 15/100

This commit simply updates the version of the Alpine Linux container used in Bitcoin Core's automated testing from Alpine 3.22 to Alpine 3.23. It is a routine CI (continuous integration) maintenance change with no visible security relevance in the commit itself.

Security candidateSquashed 'src/secp256k1/' changes from 14e56970cb..57315a6985by fanquake · 9d4c9b00 · Feb 2, 2026 · 14 filesMessage 86 · StrongInformational 15Details
Commit message · fanquake

Squashed 'src/secp256k1/' changes from 14e56970cb..57315a6985

57315a6985 Merge bitcoin-core/secp256k1#1813: Remove trailing spaces and introduce `-Wtrailing-whitespace=any` compiler flag
86cae58d2f build: Add `-Wleading-whitespace=spaces` compiler flag
fb229e7602 build: Add `-Wtrailing-whitespace=any` compiler flag
13e3bee504 refactor: Remove trailing whitespace
453949ab2a Merge bitcoin-core/secp256k1#1816: ci: Rotate Docker cache keys
cd49c57e44 Merge bitcoin-core/secp256k1#1814: release process: mention the `[Unreleased]` link clearly
2ccff6eb73 ci: Add weekly schedule
2f18567d24 ci: Rotate Docker cache keys every 4 weeks
0ffb1749a5 ci, docker: Fix LLVM repository signature failure
0267b65512 release process: mention the `[Unreleased]` link clearly
1605b02f75 Merge bitcoin-core/secp256k1#1775: Add CMake build directory patterns to `.gitignore`
748c0fdd67 Add CMake build directory patterns to `.gitignore`
7eb86bdb01 autotools: Rename `build-aux` to `autotools-aux`

git-subtree-dir: src/secp256k1
git-subtree-split: 57315a69853c9bd4765fccf20b541d47f1b45ca9

86/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarycryptography-sensitive path
AI analysis · Informational 15/100

This commit is a routine subtree update for the secp256k1 cryptographic library used by Bitcoin Core. The changes are purely housekeeping: removing trailing/leading whitespace, adding compiler warnings for whitespace, renaming a build directory, rotating CI Docker cache keys, and updating release documentation. There are no changes to cryptographic algorithms, no bug fixes, and no security patches.

Security candidateci: Treat SHA1 LLVM signing key as warningby will · 3c8f5e48 · Feb 2, 2026 · 1 fileMessage 88 · StrongInformational 21Details
Commit message · will

ci: Treat SHA1 LLVM signing key as warning

The current SHA1 LLVM signing key is considered not secure since
2026-02-01T00:00:00Z which makes this run fail when downloading
packages.

See: https://github.com/llvm/llvm-project/issues/153385

Apply the fix from the issue to temporarily to treat this error as a
warning, until the upstream key can be updated.

This PR should be reverted once the upstream key is updated.

88/100 · StrongMessage clarity
✓ 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
signing boundary
AI analysis · Informational 21/100

This change is a temporary workaround for a CI build script. It relaxes a security policy so that apt can still accept an older SHA1-based LLVM signing key after a deadline passed. It is not a fix for a vulnerability in Bitcoin Core itself, but it slightly weakens a cryptographic check in the automated test environment until LLVM updates its key.

Security candidatetest: Fix a STRICTENC test in script_testsby billymcbip · 884978f3 · Jan 30, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · billymcbip

test: Fix a STRICTENC test in script_tests

Fix a test that isn't implemented as intended. The idea is to test execution order by providing a signature that would cause script failure when parsed. An empty signature does not cause script failure in CHECKMULTISIG. Use OP_1 for the second signature instead of OP_0.

95/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
signing boundary
AI analysis · Informational 15/100

This is a one-line fix to a Bitcoin Core unit test file. The test was not exercising what its author intended because an empty signature does not trigger the expected script failure in a CHECKMULTISIG operation. The change replaces an empty second signature with a non-empty one so the test actually checks the intended execution-order behavior. It does not change any production code, consensus rules, or network behavior.

Security candidateiwyu: Add temporary mapping to work around upstream bugby Hennadii Stepanov · 91824646 · Jan 30, 2026 · 3 filesMessage 30 · OpaqueInformational 15Details
Commit message · Hennadii Stepanov

iwyu: Add temporary mapping to work around upstream bug

30/100 · OpaqueMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body! Contains work-in-progress language! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a minor housekeeping change. It removes two unused '#include <iterator>' lines from source files and adds a temporary mapping for a third-party code-tidying tool (IWYU) to work around a known upstream bug. There is no change to Bitcoin's actual logic, networking, cryptography, or consensus behavior, and no security relevance.

Security candidateSquashed 'src/secp256k1/' changes from d543c0d917..14e56970cbby fanquake · 2fccbea3 · Jan 27, 2026 · 37 filesMessage 100 · StrongLow 29Details
Commit message · fanquake

Squashed 'src/secp256k1/' changes from d543c0d917..14e56970cb

14e56970cb Merge bitcoin-core/secp256k1#1794: ecmult: Use size_t for array indices
c7a52400d6 Merge bitcoin-core/secp256k1#1809: release cleanup: bump version after 0.7.1
ae7eb729c0 release cleanup: bump version after 0.7.1
1a53f4961f Merge bitcoin-core/secp256k1#1808: Prepare for 0.7.1
20a209f11c release: prepare for 0.7.1
c4b6a81a60 changelog: update in preparation for the v0.7.1 release
ebb35882da Merge bitcoin-core/secp256k1#1796: bench: fail early if user inputs invalid value for SECP256K1_BENCH_ITERS
c09215f7af bench: fail early if user inputs invalid value for SECP256K1_BENCH_ITERS
471e3a130d Merge bitcoin-core/secp256k1#1800: sage: verify Eisenstein integer connection for GLV constants
29ac4d8491 sage: verify Eisenstein integer connection for GLV constants
4721e077b4 Merge bitcoin-core/secp256k1#1793: doc/bench: added help text for SECP256K1_BENCH_ITERS env var for bench_ecmult
bd5ced1fe1 doc/bench: added help text for SECP256K1_BENCH_ITERS env var for bench_ecmult
47eb70959a ecmult: Use size_t for array indices in _odd_multiplies_table
bb1d199de5 ecmult: Use size_t for array indices into tables
2d9137ce9d Merge bitcoin-core/secp256k1#1764: group: Avoid using infinity field directly in other modules
f9a944ff2d Merge bitcoin-core/secp256k1#1790: doc: include arg -DSECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS=ON for cmake
0406cfc4d1 doc: include arg -DUSE_EXTERNAL_DEFAULT_CALLBACKS=1 for cmake
8d445730ec Merge bitcoin-core/secp256k1#1783: Add VERIFY_CHECKs and documentation that flags must be 0 or 1
aa2a39c1a7 Merge bitcoin-core/secp256k1#1778: doc/bench: Added cmake build options to bench error messages
540fec8ae9 Merge bitcoin-core/secp256k1#1788: test: split monolithic ellswift test into independent cases
d822b29021 test: split monolithic ellswift test into independent cases
ae00c552df Add VERIFY_CHECKs that flags are 0 or 1
5c75183344 Merge bitcoin-core/secp256k1#1784: refactor: remove ret from secp256k1_ec_pubkey_serialize
be5e4f02fd Merge bitcoin-core/secp256k1#1779: Add ARG_CHECKs to ensure "array of pointers" elements are non-NULL
3daab83a60 refactor: remove ret from secp256k1_ec_pubkey_serialize
8bcda186d2 test: Add non-NULL checks for "pointer of array" API functions
5a08c1bcdc Add ARG_CHECKs to ensure "array of pointers" elements are non-NULL
3b5b03f301 doc/bench: Added cmake build options to bench error messages
e7f7083b53 Merge bitcoin-core/secp256k1#1774: refactor: split up internal pubkey serialization function into compressed/uncompressed variants
b6c2a3cd77 Merge bitcoin-core/secp256k1#1761: ecmult_multi: reduce strauss memory usage by 30%
f5e815f430 remove secp256k1_eckey_pubkey_serialize function
0d3659c547 use new `_eckey_pubkey_serialize{33,65}` functions in modules (ellswift,musig)
adb76f82ea use new `_eckey_pubkey_serialize{33,65}` functions in public API
fc7458ca3e introduce `secp256k1_eckey_pubkey_serialize{33,65}` functions
c8206b1ce6 Merge bitcoin-core/secp256k1#1771: ci: Use Python virtual environment in "x86_64-macos-native" job
f252da7e6e ci: Use Python virtual environment in "x86_64-macos-native" job
115b135fe8 Merge bitcoin-core/secp256k1#1763: bench: Use `ALIGNMENT` macro instead of hardcoded value
2f73e5281d group: Avoid using infinity field directly in other modules
153eea20c2 bench: Use `ALIGNMENT` macro instead of hardcoded value
26166c4f5f ecmult_multi: reduce strauss memory usage by 30%
7a2fff85e8 Merge bitcoin-core/secp256k1#1758: ci: Drop workaround for Valgrind older than 3.20.0
43e7b115f7 Merge bitcoin-core/secp256k1#1759: ci: Switch to macOS 15 Sequoia Intel-based image
8bc50b72ff ci: Switch to macOS 15 Sequoia Intel-based image
c09519f0e3 ci: Drop workaround for Valgrind older than 3.20.0

git-subtree-dir: src/secp256k1
git-subtree-split: 14e56970cba37ffe4ee992c1e08707a16e22e345

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
cryptography-sensitive path
AI analysis · Low 29/100

This is a routine subtree update that pulls in the latest libsecp256k1 maintenance release (0.7.1 → 0.7.2 development). The bundled changes are mostly cleanups: stricter input validation (rejecting NULL pointers in arrays), safer internal serialization helpers, documentation and benchmark fixes, CI updates, and a build fix for x86_64 assembly detection. The vendor's own changelog explicitly lists these as non-security bug fixes and ABI-compatible improvements. There is no evidence in the commit of an undisclosed vulnerability, exploit, or attacker-relevant flaw.

Security candidatewallet: fix `gethdkeys` RPC for descriptors with partial xprvsby rkrux · 6e3a0afc · Jan 23, 2026 · 1 fileMessage 78 · AdequateLow 33Details
Commit message · rkrux

wallet: fix `gethdkeys` RPC for descriptors with partial xprvs

A non-watch-only wallet allows to import descriptors with partial
private keys, eg: a multisig descriptor with one private key and
one public key. In case an xpub is imported in any such descriptors
whose private key the wallet doesn't have, then the `gethdkeys` RPC
throws an unhandled error like below when the private keys are
requested.

This fix ensures that such calls are properly handled by conditionally
finding the corresponding xprv. Some related documentation of this RPC
is also updated.

```
➜ bitcoincli -named gethdkeys private=true
error code: -1
error message:
map::at: key not found
```

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning or wallet path
AI analysis · Low 33/100

This commit fixes a bug in Bitcoin Core's `gethdkeys` RPC command. The command can crash with an unhandled 'key not found' error when a user requests private key information for a wallet that contains descriptors where some extended public keys (xpubs) do not have corresponding private keys in the wallet. The fix prevents the crash by only trying to return the private key when the wallet actually has it, and it updates the related documentation to clarify that the descriptor string shown is the public version.

Security candidatescript: add SCRIPT_ERR_SCRIPTNUM errorby Bruno Garcia · 0ca4dcd7 · Jan 22, 2026 · 2 filesMessage 63 · AdequateInformational 18Details
Commit message · Bruno Garcia

script: add SCRIPT_ERR_SCRIPTNUM error

It will be used for errors related to CScriptNum (e.g. overflow or encoding errors).
Currently, we simply return unknown error for these errors.

63/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Informational 18/100

This commit adds a new, more descriptive error code for problems with numbers inside Bitcoin's script language. Previously, these problems were reported as a generic 'unknown error.' The change only defines the new error label and its human-readable message; it does not yet change any code that actually raises the error. By itself, this is a small cleanup that does not fix or introduce a security vulnerability.

Security candidatetest: clean up tx resurrection (re-org) test in feature_block.pyby Sebastian Falbesoner · 5b2c3960 · Jan 21, 2026 · 1 fileMessage 100 · StrongInformational 15Details
Commit message · Sebastian Falbesoner

test: clean up tx resurrection (re-org) test in feature_block.py

This comment about ECDSA signatures created with the test framework not
passing mempool policy has been obsolete for a long time (at least since
2019, see PR #15826), so remove it. While at it, change the resurrected
txs to be indeed standard valid, so the `-acceptnonstdtxn=1` parameter
can also be removed.

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundary
AI analysis · Informational 15/100

This is a cleanup change to one of Bitcoin Core's own automated tests. It removes an outdated comment about signature quirks and adjusts the test transactions so they follow normal network rules, allowing a special 'accept non-standard transactions' flag to be removed. It does not change any production code that runs on real Bitcoin nodes, so it has no direct security impact on the network or users.

Security candidatetest(miniscript): Prove avoidance of stack overflowby Hodlinator · 964c44cd · Jan 20, 2026 · 1 fileMessage 100 · StrongInformational 12Details
Commit message · Hodlinator

test(miniscript): Prove avoidance of stack overflow

Can be tested through emptying the function body of ~Node() or replacing Clone() implementation with naive version:
```C++
Node<Key> Clone() const
{
std::vector<Node> new_subs;
new_subs.reserve(subs.size());
for (const Node& child : subs) {
new_subs.push_back(child.Clone());
}
return Node{internal::NoDupCheck{}, m_script_ctx, fragment, std::move(new_subs), keys, data, k};
}
```

Co-authored-by: Lőrinc <pap.lorinc@gmail.com>

100/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Informational 12/100

This commit only adds a new automated test to Bitcoin Core. The test builds an extremely deep Miniscript node tree and then exercises its destructor, clone, and move-assignment to confirm they do not overflow the call stack. It is a defensive regression test, not a fix for any currently broken or exploitable behavior.

Security candidateMerge bitcoin/bitcoin#32143: Fix 11-year-old mis-categorized error code in OP_IF evaluationby Ava Chow · 34784016 · Jan 20, 2026 · 2889 filesMessage 81 · StrongInformational 23Details
Commit message · Ava Chow

Merge bitcoin/bitcoin#32143: Fix 11-year-old mis-categorized error code in OP_IF evaluation

a7b581423e44c51fb7d177c5a15fe2cc2ab8aa43 Fix 11-year-old mis-categorized error code in OP_IF evaluation (Calin Culianu)

Pull request description:

This was introduced by commit ab9edbd6b6eb3efbca11f16fa467c3c0ef905708.

It appears the original author may have gotten tired and pasted the wrong error code into this 1 place. Every other situation where the value stack lacks the required number of arguments for the op-code, SCRIPT_ERR_INVALID_STACK_OPERATION is reported. Not so here.

This commit fixes the situation.

EDIT: Note this turns out to be a dupe of the abandoned #30359 .

ACKs for top commit:
billymcbip:
tACK a7b581423e44c51fb7d177c5a15fe2cc2ab8aa43
achow101:
ACK a7b581423e44c51fb7d177c5a15fe2cc2ab8aa43
darosior:
utACK a7b581423e44c51fb7d177c5a15fe2cc2ab8aa43
sedited:
ACK a7b581423e44c51fb7d177c5a15fe2cc2ab8aa43

Tree-SHA512: e8c01a3e2448b5d49b76a0cab3f38a2d0249b71beeb7d9d05d5ecc3812bd91d0bd1d0f78b809b6f4ccb73186fa119cb1ed3779a73284b83a67ae219ef378fa6c

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet pathboot or update pathauthentication pathparser or protocol pathmerge-commit duplicate discount
AI analysis · Informational 23/100

This commit fixes a long-standing mistake in how Bitcoin Core reports an error when an OP_IF command is used without enough values on the script stack. In one specific spot, the wrong error code was returned for 11 years. The fix makes the error code consistent with every other similar case. This is a minor correctness/observability fix, not a vulnerability that lets an attacker steal funds or crash nodes.

Security candidateguix: stop passing depends sources to codesigningby fanquake · d94d7b1a · Jan 15, 2026 · 1 fileMessage 80 · StrongInformational 17Details
Commit message · fanquake

guix: stop passing depends sources to codesigning

I think this is just a copy-pasta from the build container. I don't see
why we'd need the depends sources available when performing codesigning.

80/100 · StrongMessage clarity
✓ 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 · Informational 17/100

This commit removes leftover code that unnecessarily shared Bitcoin's dependency source files into the isolated Guix container used for codesigning release binaries. The change is described by the author as a cleanup of copy-pasted build-container options, not a security fix. It slightly reduces the attack surface of the codesigning environment by exposing fewer files, but there is no direct evidence of an exploitable vulnerability.

Security candidaterefactor: Enforce readability-avoid-const-params-in-declsby MarcoFalke · fa64d842 · Jan 14, 2026 · 48 filesMessage 62 · AdequateInformational 15Details
Commit message · MarcoFalke

refactor: Enforce readability-avoid-const-params-in-decls

62/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a pure code-style cleanup. It removes unnecessary 'const' keywords from function parameter declarations in header files across the Bitcoin Core codebase and adds a clang-tidy rule to prevent them from being reintroduced. The 'const' on a value parameter in a declaration has no effect on callers and does not change program behavior, security, or runtime semantics. There is no vulnerability here.

Security candidatepsbt: Fix `PSBTInputSignedAndVerified` bounds `assert`by Lőrinc · 2f5b1c5f · Jan 13, 2026 · 1 fileMessage 81 · StrongLow 45Details
Commit message · Lőrinc

psbt: Fix `PSBTInputSignedAndVerified` bounds `assert`

The previous `assert` used `>=`, allowing `input_index == psbt.inputs.size()` and out-of-bounds access in `psbt.inputs[input_index]`.

Found during review: https://github.com/bitcoin/bitcoin/pull/31650#discussion_r2685892867

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 45/100

A one-character bug fix in Bitcoin Core's PSBT (Partially Signed Bitcoin Transaction) handling. The code used the wrong comparison in a safety check, so it was possible to request an input index exactly equal to the number of inputs. That would read one element past the end of the list, which can cause a crash or undefined behavior. The fix changes the check so it correctly rejects that out-of-bounds index.

Security candidatescripted-diff: Remove priority_level from BENCHMARK macroby MarcoFalke · fa51a28a · Jan 13, 2026 · 55 filesMessage 83 · StrongInformational 15Details
Commit message · MarcoFalke

scripted-diff: Remove priority_level from BENCHMARK macro

-BEGIN VERIFY SCRIPT-

sed --in-place --regexp-extended 's/BENCHMARK\(([^,]+), benchmark::PriorityLevel::(HIGH|LOW)\)/BENCHMARK(\1)/g' $( git grep -l PriorityLevel )
sed --in-place 's/#define BENCHMARK(n, priority_level)/#define BENCHMARK(n)/g' ./src/bench/bench.h

-END VERIFY SCRIPT-

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
cryptography-sensitive pathseed or entropy pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a cleanup change to Bitcoin Core's internal benchmark test code. It removes an unused 'priority level' argument from the BENCHMARK macro and from all benchmark definitions. The change does not affect the live Bitcoin network, wallet funds, node operations, or any security-sensitive code.

Security candidatepsbt: validate pubkeys in MuSig2 pubnonce/partial sig deserializationby tboy1337 · f51665be · Jan 12, 2026 · 2 filesMessage 100 · StrongModerate 60Details
Commit message · tboy1337

psbt: validate pubkeys in MuSig2 pubnonce/partial sig deserialization

Add validation for pubkeys in MuSig2 pubnonce and partial signature deserialization to prevent crashes with invalid curve points.

- Validate aggregate and participant pubkeys in PSBT MuSig2 fields

- Add comprehensive test coverage for invalid pubkey rejection

- Ensure proper error handling during PSBT deserialization

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✓ Names security-relevant behavior explicitly
Why it was queued
signing boundarydefensive validationsigning or wallet path
AI analysis · Moderate 60/100

This commit fixes a bug in Bitcoin Core's handling of partially signed Bitcoin transactions (PSBTs) that use the MuSig2 multi-signature scheme. Previously, when reading certain MuSig2 fields, the code accepted invalid public keys (points that are not valid on the Bitcoin elliptic curve). The fix adds checks that reject these invalid keys during deserialization, turning potential crashes or undefined behavior into clean error messages. The commit also adds test cases with deliberately bad keys to confirm they are rejected.

Security candidatedescriptor: ToPrivateString() pass if at least 1 priv key existsby Novo · 9e5e9824 · Jan 7, 2026 · 6 filesMessage 73 · AdequateInformational 23Details
Commit message · Novo

descriptor: ToPrivateString() pass if at least 1 priv key exists

- Refactor Descriptor::ToPrivateString() to allow descriptors with
missing private keys to be printed. Useful in descriptors with
multiple keys e.g tr() etc.
- The existing behaviour of listdescriptors is preserved as much as
possible, if no private keys are availablle ToPrivateString will
return false

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 23/100

This Bitcoin Core change alters how wallet descriptors are printed when some (but not all) private keys are present. Previously, exporting a private descriptor would fail entirely if any single key was missing. Now it succeeds and exports the private keys it does have, falling back to public keys for the rest. The commit message and code comments frame this as a usability improvement for multi-key descriptors such as taproot (tr()). There is no direct evidence in the commit of a security vulnerability being fixed; it appears to be a behavior change that could affect information disclosure expectations.

Security candidatedescriptor: refactor ToPrivateString for providersby Novo · 5c4db25b · Jan 7, 2026 · 1 fileMessage 78 · AdequateInformational 21Details
Commit message · Novo

descriptor: refactor ToPrivateString for providers

This commit modifies the Pubkey providers to return the public string
if private data is not available.
This is setup for a future commit to make Descriptor::ToPrivateString
return strings with missing private key information.

Co-authored-by: rkrux <rkrux.connect@gmail.com>

78/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key material
AI analysis · Informational 21/100

This commit refactors how Bitcoin Core's descriptor code turns key information into text when private keys are requested but not available. Previously, if any private key was missing, the whole private-string output could be dropped or partially empty. Now the code falls back to including the public version of the missing key instead, and reports whether any private keys were actually included. It is a behavior change in output formatting, not a fix for an active exploit, and the commit message explicitly calls it setup for a later change.

Security candidatewallet/migration: use HavePrivateKeys in place of ToPrivateStringby Novo · 2dc74e3f · Jan 7, 2026 · 1 fileMessage 85 · StrongInformational 20Details
Commit message · Novo

wallet/migration: use HavePrivateKeys in place of ToPrivateString

ToPrivateString() behaviour will be modified in the following commits.

In order to keep the scope of this PR limited to the RPC behaviour,
this commit updates wallet migration to use 'Descriptor::HavePrivateKeys()'
in place of 'Descriptor::ToPrivateString()' to determine watchonly descriptors.

A follow-up PR can be opened to update migration logic to exclude
descriptors with some private keys from the watchonly migration wallet.

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
secret or key materialsigning or wallet path
AI analysis · Informational 20/100

This is a small internal refactoring change in Bitcoin Core's wallet migration code. It swaps one method for another when deciding whether a wallet descriptor should be treated as watch-only during migration. The commit message says this is to keep the current pull request focused on RPC behavior and that a follow-up change may refine the logic later. There is no direct evidence in the commit of a security bug being fixed.

Security candidatedescriptors: add HavePrivateKeys()by Novo · e842eb90 · Jan 7, 2026 · 4 filesMessage 63 · AdequateLow 28Details
Commit message · Novo

descriptors: add HavePrivateKeys()

Previously, to determine if a desc is watchonly, `ToPrivateString()`, was used.
It returns `false` if there is at least one pubkey in the descriptor for which
the provider does not have a private key.

ToPrivateString() behaviour will change in the following commits to only
return `false` if no priv keys could be found for the pub keys in the descriptor.

HavePrivateKeys() is added here to replace the use of ToPrivateString() for determining
if a descriptor is 'watchonly'.

Co-authored-by: rkrux <rkrux.connect@gmail.com>

63/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
secret or key materialsigning or wallet path
AI analysis · Low 28/100

This commit adds a new helper function called HavePrivateKeys() to Bitcoin Core's descriptor system. It is a preparatory refactor: it gives the code a clearer way to check whether a wallet descriptor is 'watch-only' (has no private keys) before an upcoming change to ToPrivateString(). The commit itself does not change user-visible behavior; it only introduces the new check and updates tests to use it. There is no direct evidence in the commit that this fixes an active security bug, but it is clearly related to correctly identifying whether private keys are present, which can affect wallet security logic.

Security candidate[test] Add BIP 328 test vectors for Musig2by w0xlt · a3c71c72 · Jan 6, 2026 · 2 filesMessage 55 · ThinInformational 15Details
Commit message · w0xlt

[test] Add BIP 328 test vectors for Musig2

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

This commit only adds new test code. It introduces test vectors for BIP 328 (a Bitcoin improvement proposal related to the MuSig2 multi-signature scheme) to verify that public-key aggregation and synthetic extended-public-key generation produce expected outputs. No production code is changed, so it cannot directly introduce a runtime security vulnerability.

Security candidatepsbt: detect invalid MuSig2 pubkeys in deserializationby rkrux · 5805a8b5 · Jan 5, 2026 · 2 filesMessage 65 · AdequateLow 44Details
Commit message · rkrux

psbt: detect invalid MuSig2 pubkeys in deserialization

Throw error while deserializing PSBT if invalid pubkeys are passed
as a MuSig2 aggregate or participant.

65/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 44/100

This Bitcoin Core patch adds a missing validation check during PSBT (Partially Signed Bitcoin Transaction) parsing. Specifically, it now rejects MuSig2 aggregate and participant public keys that are not cryptographically valid, rather than silently accepting malformed or invalid key bytes. This prevents downstream code from operating on bad public keys, which could lead to incorrect behavior or crashes.