RB
← All projectsRust Bitcoin

rust-bitcoin

Rust library for Bitcoin data structures, serialization, consensus encoding, and scripts.

BitcoinCryptographic librariesNormal
Repository coverage

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

531security candidates509second-pass queue2203AI analyses
133commits · 30 days
266commits · 60 days
1105commits · 180 days
2033commits · 365 days
Backfill bands
Aug 5 → Feb 6787 seen32 candidatesComplete
Feb 6 → Jun 6878 seen53 candidatesComplete
Jun 6 → Jul 6211 seen15 candidatesComplete
Jul 6 → Aug 5184 seen2 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.

66/100 average clarity
504Strong · 80–100
1085Adequate · 60–79
567Thin · 40–59
151Opaque · 0–39
20security 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.
Andrew Poelstra22578154290
Mitchell Bagot649193645068
Tobin C. Harding41566410063
jrakibi944994068
Nick Johnson19121190060
Jamil Lambert, PhD11919116061
satsfy (Renato Britto)381527066
Fmt Bot331431045
Trevor Arjeski111111069
Shing Him Ng31731056
Martin Habovstiak30628068
Ismail Daif22622050
Analysis record

Published AI watches

Last scanned 29 minutes ago

High 70 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6919: Sanitize serde size hints before allocating

This commit fixes a denial-of-service weakness in how the library deserializes lists of Bitcoin data (witnesses, amounts, fee rates) from untrusted input. Before the fix, a few bytes of attacker-controlled data could claim a list would con…

Untrusted serde size hint fed directly into Vec::with_capacityPotential memory exhaustion / OOM kill from small malicious inputDenial-of-service vector in deserialization paths
55ddbc0cby Andrew Poelstra+88−105 files
Vendor flagged security relevance
Moderate 60 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6945: bitcoin: handle OP_CODESEPARATOR in legacy

This commit fixes how the Rust Bitcoin library calculates old-style (legacy) transaction signatures when the spending script contains a special opcode called OP_CODESEPARATOR. Previously the library did not handle this opcode at all, which…

Protocol correctness fix for legacy sighash serializationOP_CODESEPARATOR handling added to match Bitcoin Core consensus behaviorPreviously omitted test vectors restored, indicating prior non-compliance
5b815281by Andrew Poelstra+600−3093 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6948: build(deps): bump taiki-e/install-action from 2.83.2 to 2.85.4

This is a routine update by Dependabot to the version of a third-party GitHub Action used in the project's automated testing workflows. The change only affects internal continuous integration (CI) scripts, not the actual Bitcoin library co…

d1431904by Andrew Poelstra+2−22 files
No security note in commit
Low 33 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6946: Fix integer overflow in `get_array`

This commit fixes a small but real bug in a Rust helper that reads fixed-size chunks from a data slice. The helper was supposed to safely return 'nothing' when asked to read past the end of the data, but it accidentally added two numbers t…

Integer overflow in bounds-checking helperContract violation: method documented to return None on out-of-bounds access could panic insteadDebug-build panic (denial of service) possible
c6e80843by Andrew Poelstra+2−11 file
Vendor flagged security relevance
Moderate 62 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Fix integer overflow in `get_array`

This commit fixes a bug in a Rust helper method called `get_array`, which is meant to safely read a fixed-size chunk from a slice and return nothing if the requested range is out of bounds. The bug was that the code added the caller's offs…

Integer overflow in bounds calculationPotential panic due to violated internal length expectationCaller-controlled arithmetic used for memory access bounds
56fb1287by Martin Habovstiak+2−11 file
Vendor flagged security relevance
High 71 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6915: primitives: Fix `Witness` handling of oversized items

This commit fixes a bug in how the Rust Bitcoin library counts and compares transaction witness data when a witness contains an oversized item. Previously, several functions relied on an iterator that silently skips oversized items, causin…

Inconsistent serialization/iterator behavior for oversized witness itemswtxid collision risk between transactions differing only in oversized witness bytesIncorrect witness equality for oversized single-item stacks
e1ed5884by Andrew Poelstra+106−273 files
Vendor flagged security relevance
Informational 19 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6922: Use `try_fold` instead of `fold` in `Sum` impl

This is a code-quality and performance improvement, not a security fix. It changes how the library adds up lists of Bitcoin amounts so that it stops early once an overflow is detected, rather than continuing to process the rest of the list…

No security-relevant signal in commit message or diffRefactor preserves overflow-checking behavior (short-circuits instead of continuing)New API method `NumOpResult::from_result` is a pure inverse of existing `into_result`
86e4d5daby Andrew Poelstra+60−562 files
No security note in commit
Moderate 52 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6893: units: Reject malformed amount strings

This update fixes a bug in how the library reads Bitcoin amount strings like '1.5 BTC'. Previously, certain malformed inputs such as '.', '._', '1_', '1_.0', and '1._0' were incorrectly accepted and treated as valid amounts (often zero), i…

Input validation bypass in amount parserMalformed strings silently parsed as zero or ordinary amountsUnderscore separator placement not enforced
fcb14622by Andrew Poelstra+88−343 files
Vendor flagged security relevance
Low 48 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6921: units: fix div_by_fee_rate_ceil precision

This commit fixes a rounding bug in how the rust-bitcoin library calculates the minimum transaction weight needed to pay a given fee at a given fee rate. The old code rounded the fee rate up too early, which could produce a weight slightly…

Incorrect fee-weight calculation due to premature integer roundingPotential transaction fee shortfall when using div_by_fee_rate_ceilOverflow protection added for Amount::MAX * 4_000_000 intermediate value
b31212e0by Andrew Poelstra+38−82 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6898: Release tracking PR: `consensus-encoding 1.3.0`

This is a routine release-management commit that bumps the version number of the `bitcoin-consensus-encoding` crate from 1.2.0 to 1.3.0 and updates lock files accordingly. It contains no code changes that fix or introduce a security issue.…

0cfc7908by Andrew Poelstra+37−349 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6909: build(deps): bump actions/labeler from 6.2.0 to 7.0.0

This commit updates a GitHub Actions automation tool (actions/labeler) used to automatically tag pull requests with labels. It is a routine dependency version bump from 6.2.0 to 7.0.0, with no indication of a security fix or vulnerability.…

4ed7c068by Andrew Poelstra+1−11 file
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6910: build(deps): bump actions/checkout from 7.0.0 to 7.0.1

This commit is a routine update to the GitHub Actions checkout tool used by the project's automated workflows. It only changes version numbers in configuration files and does not alter the actual Bitcoin library code that users run. There …

328c4ae9by Andrew Poelstra+37−3717 files
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6911: build(deps): bump astral-sh/setup-uv from 8.3.2 to 9.0.0

This commit updates a GitHub Actions helper used to install a Python tool called uv, which runs the zizmor security scanner. The change only bumps the pinned version of the helper from 8.3.2 to 9.0.0. The new version's release notes mentio…

No security-relevant signals in commit or upstream release notesDependency bump in CI only, not in library codeNo CVE or advisory referenced
67600795by Andrew Poelstra+2−22 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6912: build(deps): bump github/codeql-action/upload-sarif from 4.37.0 to 4.37.3

This is a routine Dependabot update that changes the pinned version of GitHub's official CodeQL upload-sarif action from 4.37.0 to 4.37.3 in a single CI workflow. The action only uploads static analysis results to GitHub; it does not touch…

b51cec63by Andrew Poelstra+1−11 file
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6913: build(deps): bump dtolnay/rust-toolchain from 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 to 02cb101ec7c40f2c49e1d9714d64511d8e1b74de

This is a routine update to a GitHub Actions helper used to install Rust during automated testing. It only changes the pinned version of the dtolnay/rust-toolchain action in workflow files. There is no change to the actual rust-bitcoin lib…

90330d15by Andrew Poelstra+8−84 files
No security note in commit
Informational 20 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6906: consensus_encoding, primitives: expose exact encoding size for block and transaction

This commit adds a way to ask, in advance, exactly how many bytes a Bitcoin block or transaction will take when serialized. It is a feature addition for the library's encoding system, not a fix for a vulnerability. There is no indication i…

No security-relevant signals in commit message or diffFeature addition: expose exact encoded sizeNo mention of vulnerability, CVE, bug bounty, or security report
1a365d53by Andrew Poelstra+129−1068 files
No security note in commit
Informational 15 AI analysisMessage 88 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump dtolnay/rust-toolchain

This is a routine update by Dependabot that changes which version of a popular GitHub Action (dtolnay/rust-toolchain) is used to install Rust in automated CI workflows. The commit only updates pinned commit hashes in workflow files; it doe…

a31e0b0eby dependabot[bot]+8−84 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump github/codeql-action/upload-sarif

This is a routine patch-version update of a GitHub-maintained action used only to upload static-analysis results (SARIF files) from a scheduled CI job. The change does not touch any project source code, cryptographic logic, or user-facing …

2cac6e38by dependabot[bot]+1−11 file
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

build(deps): bump astral-sh/setup-uv from 8.3.2 to 9.0.0

This is a routine automated update by Dependabot that changes the pinned version of a GitHub Action used to install a Python tool called 'uv' in two workflow files. The new version is a major release of the setup-uv action itself, but the …

7d7e7269by dependabot[bot]+2−22 files
No security note in commit
Informational 21 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6894: Harden `Copy` policy and apply to all pre-1.0 crates

This commit removes the automatic `Copy` trait from several public error types in the rust-bitcoin library and updates the project's written policy to discourage `Copy` on error types. `Copy` is a Rust trait that lets values be duplicated …

API hardening: removes `Copy` from public error types to preserve future flexibilityPolicy update: docs/policy.md now explicitly discourages `Copy` on error typesNo vulnerability fix: change is defensive/preventive, not reactive to a disclosed issue
457cb9b5by Andrew Poelstra+14−146 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 candidateRemove needless question markby Abeeujah · 2736f277 · May 8, 2026 · 6 filesMessage 66 · AdequateInformational 15Details
Commit message · Abeeujah

Remove needless question mark

Replace unwrapping and wrapping of the return value from functions
that return a `Result`, as simply returning the `Result` achieves
the exact same outcome without the extra unwrapping and re-wrapping
steps.

"There’s no reason to use ? to short-circuit when execution of the
body will end there anyway." See:
https://rust-lang.github.io/rust-clippy/rust-1.95.0/index.html#needless_question_mark

66/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit is a routine code cleanup. It removes unnecessary '?' operators in functions that already return a Result. The behavior of the code is unchanged; it just makes the code slightly cleaner and avoids a clippy lint warning.

AI review queuedImprove codec methods implementationby Abeeujah · 0a5f2762 · May 8, 2026 · 2 filesMessage 58 · ThinInformational 15Details
Commit message · Abeeujah

Improve codec methods implementation

Use Rust's Option methods and Pattern matching to collapse if_let_else
constructs in the `read_limit` method implementation, this maintains a
clearer and concise usage of the `Option<T>` API.

Leverage `Option<T>::is_some_and` method for the `advance` method impl,
which proceeds to propagate to `Encoder::advance` if the encoder is
`Some(T)` and returns false if the encoder is `None`.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit is a routine code cleanup in the Rust Bitcoin library. It rewrites a few internal helper methods to use more idiomatic Rust syntax (Option methods and pattern matching) instead of longer if/else blocks. There is no change to what the code actually does, no security fix, and no bug being patched.

Lower-priorityUpdate the security policy to mention reposby Tobin C. Harding · 45fb6864 · May 8, 2026 · 1 fileMessage 85 · StrongInformational 15Details
Commit message · Tobin C. Harding

Update the security policy to mention repos

Now that we have crate smashed the repository a bunch the security
policy is a bit stale.

Use repositories in the list of things to apply our security policy to
instead of individual crates. Saves us from the long list of crates
now in this repository.

Also remove the mention of cryptography because now we list repos its
not so relevant.

Adds `rust-bech32` because a bug in address generation could lead to
loss of funds which is explicitly defined as a security issue.

Adds `hex-conservative` because we depend on it in `rust-bitcoin` so
bugs there are bugs here.

85/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Names security-relevant behavior explicitly
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only updates the project's SECURITY.md policy document. It changes the list of covered items from individual Rust crates to whole GitHub repositories, removes a mention of cryptography, and adds two additional repositories (rust-bech32 and hex-conservative) to the security policy. No code, logic, or cryptographic behavior was changed, so there is no security vulnerability or fix in the commit itself.

Lower-priorityRemove redundant rust version filesby Jamil Lambert, PhD · b2b58e24 · May 8, 2026 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · Jamil Lambert, PhD

Remove redundant rust version files

The move to rbmt no longer requires the stable and nightly version
files.

Remove them and update the semver checks workflow to select the
stable version from the workspace metadata.

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

This commit is a routine cleanup of build configuration files. It removes two text files that previously stored Rust compiler version numbers and updates one CI workflow to read the same version information from project metadata instead. There is no security relevance.

Security candidateRearrange impls and traits for typesby Mitchell Bagot · 3816b5ac · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Rearrange impls and traits for types

At the moment, there are a handful of different orderings used for
traits + impl blocks on the types in crypto keys.

Unify trait + impl ordering to impl -> FromStr -> TryFrom -> From ->
LowerHex -> Display -> Debug.

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

This commit is a pure code cleanup: it reorders where certain trait implementations (like FromStr, From, Display, Debug) appear in the source file so all types follow the same consistent pattern. No code behavior is changed, no security bug is fixed, and no vulnerability is introduced.

Security candidateMove XOnlyPublicKey serde to the other serde implsby Mitchell Bagot · 6ed3b35d · May 8, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Mitchell Bagot

Move XOnlyPublicKey serde to the other serde impls

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit simply moves the code that handles serializing and deserializing XOnlyPublicKey values (when the optional serde feature is enabled) from one location in the file to another location alongside similar implementations. The actual behavior of the code is unchanged; it is a pure code organization or cleanup change with no security relevance.

Security candidateDrop From<Keypair> for secp256k1::PublicKeyby Mitchell Bagot · d1d70dfa · May 8, 2026 · 1 fileMessage 90 · StrongInformational 16Details
Commit message · Mitchell Bagot

Drop From<Keypair> for secp256k1::PublicKey

Generally, we want to avoid allowing users to trivially convert to secp
types from the bitcoin types. In the case of Keypair, the implicit
conversion to a secp PublicKey is only used in a single test case. It
should instead be removed.

Drop From<Keypair> for secp256k1::PublicKey and adjust
public_key_constructors test accordingly.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
cryptography-sensitive path
AI analysis · Informational 16/100

This commit removes a convenience conversion that let users turn a Bitcoin-style key pair directly into a lower-level secp256k1 public key. The change is defensive: it makes it slightly harder to accidentally mix the library's own key types with raw secp256k1 types, which can help prevent API misuse. There is no direct bug or exploit being fixed.

Security candidateAdd From<Infallible> to all error typesby Mitchell Bagot · 09e0baf5 · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Add From<Infallible> to all error types

As has been decided in bitcoin, all error types should have a
From<Infallible> impl to aid in possible usage with generics.

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

This commit adds standard Rust helper code that lets several error types be automatically converted from Rust's Infallible type. Infallible is a type that can never actually exist, so these conversions are safe, cannot be triggered by user input, and have no security impact. It is a routine API ergonomics improvement.

Security candidateReplace TBD in deprecations with 0.1.0by Mitchell Bagot · 46823b51 · May 8, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Mitchell Bagot

Replace TBD in deprecations with 0.1.0

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

This commit only changes placeholder version strings ('TBD') in deprecation notices to a concrete version number ('0.1.0'). It does not alter any program logic, cryptographic operations, or security behavior. There is no security impact.

Security candidateMove From impls on keysby Mitchell Bagot · 51eb2baf · May 8, 2026 · 1 fileMessage 61 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move From impls on keys

The From impls should always be placed directly underneath the type
they yield. In the keys module, some are placed under the type they
convert from, and others are arbitrarily located.

Move all From<> impls to be located under the impl block for the type
they convert to.y

61/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a pure code reorganization: it moves existing Rust 'From' conversion implementations so they sit directly underneath the type they produce, rather than being scattered near the source type. No logic, behavior, or public API changes are visible in the diff.

Security candidateAdd #[inline] to all simple functionsby Mitchell Bagot · 541d078d · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 20Details
Commit message · Mitchell Bagot

Add #[inline] to all simple functions

Functions that either only call into other functions, or perform a
couple of simple checks can be tagged with #[inline] to tell the
compiler to try and inline them to remove the function call overhead.

Add #[inline] to all simple functions in the key module.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 20/100

This commit only adds the #[inline] compiler hint to many small functions in the cryptographic key module. It does not change what any function does, what data it accepts, or how secrets are handled. There is no security bug being fixed or introduced here; it is a routine performance optimization.

Security candidateRemove redundant code on Legacy -> XOnly key Fromby Mitchell Bagot · 5ad31d4c · May 8, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Remove redundant code on Legacy -> XOnly key From

The From<LegacyPublicKey> for XOnlyPublicKey conversion is a duplicate
of the From<secp256k1::PublicKey> impl, with the addition of a to_inner
call.

Simplify From<LegacyPublicKey> for XOnlyPublicKey by calling to
From<secp256k1::PublicKey> for XOnlyPublicKey.

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

This is a small internal code cleanup in the rust-bitcoin library. It replaces a slightly longer implementation of converting one public key type to another with a shorter one that calls an existing conversion. There is no change in behavior and no security issue.

Security candidateMove Keypair Drop impl under Keypair implby Mitchell Bagot · f9867c95 · May 8, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Mitchell Bagot

Move Keypair Drop impl under Keypair impl

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

This commit simply moves an existing implementation of the Drop trait for the Keypair type to a different location in the same source file. It does not change what the code does, only where it appears in the file. There is no security impact.

Security candidateShorten fmt callsby Mitchell Bagot · 26fba31f · May 8, 2026 · 1 fileMessage 51 · ThinInformational 15Details
Commit message · Mitchell Bagot

Shorten fmt calls

Certain calls to fmt() functions within fmt trait impls use the
longform path for the trait + fmt method. These can be simplified to
calling .fmt() on the data type.

Replace full length fmt::Foo::fmt calls with data.fmt().

51/100 · ThinMessage clarity
✓ Subject identifies a change✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is a simple code cleanup with no security relevance. It replaces long-form calls like `fmt::Display::fmt(value, formatter)` with shorter `value.fmt(formatter)` calls inside formatting trait implementations. The behavior is identical; only the syntax is shorter.

Lower-priorityBump old bitcoin version to 0.32.9 in fuzzby Mitchell Bagot · b1c71405 · May 7, 2026 · 4 filesMessage 55 · ThinInformational 15Details
Commit message · Mitchell Bagot

Bump old bitcoin version to 0.32.9 in fuzz

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

This commit simply updates a dependency version number used only in fuzz testing infrastructure. It changes the pinned version of an older 'bitcoin' crate from 0.32.8 to 0.32.9 in lock files and fuzz configuration files. There is no indication this is a security fix for the main project, nor does the commit itself describe any security relevance.

Lower-priorityp2p: Error on invalid FeeRate in FeeFilter decodeby Mitchell Bagot · 6a2a98ce · May 7, 2026 · 1 fileMessage 68 · AdequateLow 44Details
Commit message · Mitchell Bagot

p2p: Error on invalid FeeRate in FeeFilter decode

The FeeFilterDecoder currently saturates invalid fee rate values (those
outside 0..=u32::MAX) to FeeRate::MAX. This prevents the type from
round-tripping and causes problems with checksum calculations in the
V1NetworkMessage. Instead, invalid fee rates should fail to decode and
the range of valid fee rates should be changed to 0..Amount::MAX_MONEY,
as it is in Core.

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

This commit fixes how the rust-bitcoin library handles malformed 'fee filter' messages from the Bitcoin peer-to-peer network. Previously, out-of-range fee values were silently clamped to the maximum allowed rate, which could make messages fail to 'round-trip' (encode back to the same bytes) and could subtly corrupt checksum calculations. Now those invalid values cause a clear decoding error instead, matching the behavior of Bitcoin Core.

Lower-priorityAdjust encodable fuzz target for known differencesby Mitchell Bagot · 6296c3ef · May 7, 2026 · 1 fileMessage 95 · StrongInformational 15Details
Commit message · Mitchell Bagot

Adjust encodable fuzz target for known differences

The encodable fuzzing target should ignore known differences between the
old and new encoders/decoders. Due to various limitations with error
types and such, some known differences are not accounted for yet.

Add ignores for transaction decoder errors with known differences.
Adjust ignores for AddrV2Messages for service flags limit.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 15/100

This commit only changes a fuzz testing target. It tells the fuzzer to ignore certain known, expected differences between old and new Bitcoin encoding/decoding code. It does not change the actual library code that handles transactions, addresses, or network messages, so it cannot directly affect real users or introduce a security vulnerability.

Lower-priorityp2p: Error on decode for addresses > 512 bytesby Mitchell Bagot · 56b5a24f · May 7, 2026 · 1 fileMessage 68 · AdequateLow 47Details
Commit message · Mitchell Bagot

p2p: Error on decode for addresses > 512 bytes

The AddrV2Decoder decodes the address type and the byte blob using
an ArrayDecoder + ByteVecDecoder. In the old version, a byte blob with
more than 512 bytes would throw an error, whilst the new version
successfully decodes it to an unknown address type.

Add check for address_bytes blob length > 512 bytes and throw error to
match old behaviour.

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

This commit fixes a regression in the Bitcoin peer-to-peer address decoder. A recent rewrite accidentally stopped rejecting oversized network addresses (over 512 bytes), which could let malformed or unusually large data pass through as an unknown address type. The patch restores the original safety check that rejects such oversized inputs with an explicit error.

Lower-prioritytaproot-primitives: Remove hashes/arbitraryby Mitchell Bagot · a7872b1b · May 6, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

taproot-primitives: Remove hashes/arbitrary

The hashes crate does not have an arbitrary feature, and it the
unreleased feature is not used in this crate, so there's no reason to
attempt to enable it when the taproot-primitives crate arbitrary is
enabled.

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

This is a tiny build-configuration cleanup. It removes a non-existent feature flag ('hashes/arbitrary') from a list of features that get enabled when the 'arbitrary' feature is turned on in the taproot-primitives crate. The flag pointed to a feature that does not exist in the hashes crate, so it had no effect and could not cause a security problem. The change simply prevents a harmless misconfiguration.

Security candidatep2p: change example to use configurable magic paramby yancy · 7ca8724f · May 5, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · yancy

p2p: change example to use configurable magic param

The example does not currently work as documented outside of regtest.

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

This is a one-line fix to a code example so it uses a configurable network parameter instead of always using the regtest network. It is not a security fix and does not change any library behavior.

Lower-priorityp2p: Wrap V1MessageHeaderDecoderError with V1NetworkMessage Header errby Mitchell Bagot · 4dc23d2d · May 5, 2026 · 1 fileMessage 73 · AdequateInformational 19Details
Commit message · Mitchell Bagot

p2p: Wrap V1MessageHeaderDecoderError with V1NetworkMessage Header err

The V1NetworkMessageDecoderErrorInner has a Header error variant with
no internal information. This makes it less useful to decode a
V1NetworkMessage with the V1NetworkMessageDecoder than a
V1MessageHeaderDecoder in the case of an error. In order that users can
still retrieve meaningful error information, the header's error should
be wrapped by the Header error variant.

Add internal V1MessageHeaderDecoderError for
V1NetworkMessageDecoderErrorInner::Header variant.

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

This change improves error messages when decoding Bitcoin peer-to-peer network messages. Previously, if the message header failed to decode, the higher-level decoder would report a generic 'header error' with no details. Now it wraps and preserves the underlying header decoder error so callers can see what specifically went wrong. There is no security vulnerability being fixed here; it is a usability and diagnostics improvement.

Lower-priorityp2p: Use V1MessageHeaderDecoder in V1NetworkMessageDecoderby Mitchell Bagot · 15af74f4 · May 5, 2026 · 1 fileMessage 73 · AdequateInformational 12Details
Commit message · Mitchell Bagot

p2p: Use V1MessageHeaderDecoder in V1NetworkMessageDecoder

The V1NetworkMessageDecoder decodes the header fields at the start of
the decoding process using a manually defined Decoder4. Since the
header fields that it decodes are exactly equivalent to the existing
encoding of the V1MessageHeader, the decoder for the header should be
used. This also provides an opportunity to wrap the header decoder
error to provide more information to the user than the current error
does.

Replace manual Decoder4 header_decoder with V1MessageHeaderDecoder in
V1NetworkMessageDecoder.

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

This is a small internal code cleanup in the Bitcoin peer-to-peer message decoder. It replaces a hand-built four-part header decoder with an existing dedicated header decoder. There is no security bug being fixed; the change is purely for code reuse and slightly better error messages.

Lower-priorityp2p: Use parsed types in ReadingPayload stateby Mitchell Bagot · 065d991c · May 5, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

p2p: Use parsed types in ReadingPayload state

The ReadingPayload state in the V1NetworkMessageDecoder holds byte
arrays that are parsed later during the end() call. While this possibly
improves performance in an error case, it prevents efficient usage of
the V1MessageHeaderDecoder for parsing the header, complicating types.

Replace magic_bytes and payload_len_bytes with magic and length and use
Magic and u32 parsed types instead of [u8; 4] arrays.

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

This commit is a small internal code cleanup in the Bitcoin peer-to-peer message decoder. It changes how message length and network magic bytes are stored while being parsed, switching from raw byte arrays to already-parsed types. There is no security fix here; it is purely a refactoring to simplify the code and make future maintenance easier.

Lower-priorityAdjust encodable fuzz target for known differencesby Mitchell Bagot · e6034f67 · May 5, 2026 · 1 fileMessage 95 · StrongInformational 11Details
Commit message · Mitchell Bagot

Adjust encodable fuzz target for known differences

The encodable fuzzing target should ignore known differences between the
old and new encoders/decoders. Due to various limitations with error
types and such, some known differences are not accounted for yet.

Add ignores for decoder errors with known differences between 0.32 and
new decoders.

95/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
AI analysis · Informational 11/100

This commit only changes a fuzz testing target so it ignores additional known differences between old and new Bitcoin data decoders. It is a test-configuration update, not a fix to production code, and does not change how real transactions are validated.

Security candidateskip rustfmt for `software_sha256d_64`by jrakibi · 3e1f256b · May 5, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · jrakibi

skip rustfmt for `software_sha256d_64`

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit adds a single formatting directive (`#[rustfmt::skip]`) to tell Rust's automatic code formatter not to reformat a specific SHA-256 hashing function. It does not change any executable code, logic, or behavior. There is no security impact.