RB
← All projectsRust Bitcoin

rust-bitcoin

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

BitcoinCryptographic librariesNormal
Repository coverage

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

527security candidates507second-pass queue2197AI analyses
143commits · 30 days
279commits · 60 days
1156commits · 180 days
2045commits · 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
496Strong · 80–100
1083Adequate · 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.
Mitchell Bagot649193645068
Andrew Poelstra21775149089
Tobin C. Harding41566410063
jrakibi944994068
Nick Johnson19121190060
Jamil Lambert, PhD11919116061
satsfy (Renato Britto)381527066
Fmt Bot331431045
Trevor Arjeski111111069
Shing Him Ng31731056
Ismail Daif22622050
Martin Habovstiak29527068
Analysis record

Published AI watches

Last scanned 8 minutes ago

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
Informational 18 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6787: Move `from_script` to `Address` and drop `AddressExt`

This change is a routine code cleanup, not a security fix. It moves a method that converts Bitcoin output scripts into human-readable addresses from a temporary 'extension trait' directly onto the main Address type. The actual conversion l…

ed42dabdby Andrew Poelstra+38−414 files
No security note in commit
Low 35 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6061: Units improvements

This is a routine code-quality and API-expansion pull request for the rust-bitcoin library's 'units' crate. It widens some fee-rate constructors from 32-bit to 64-bit inputs, renames the old 32-bit versions, improves serde error messages, …

API surface change: new u64 fee-rate constructors return NumOpResult to prevent silent overflowRenaming of existing u32 constructors to *_u32 may break downstream callers at compile time (breaking API change)Removal of artificial restriction in from_per_vb allows larger valid inputs
f9460859by Andrew Poelstra+266−12211 files
No security note in commit
Low 49 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6862: units: Preserve error in NumOpResult add and sub

This commit fixes a bug in how the library handles math errors. Previously, if you added or subtracted two values and one of them already had an error (for example, dividing by zero), the library would silently replace that original error …

Error-state information loss in arithmetic wrapper typeIncorrect error propagation could mask prior failures such as division by zeroDefensive correctness fix in numeric operation result handling
5324e59aby Andrew Poelstra+26−41 file
No security note in commit
Low 37 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6896: Fix `cargo audit` findings

This is a routine dependency-maintenance merge that swaps out old, unmaintained helper libraries for newer, patched versions in the project's example embedded programs and benchmark harness. The changes are driven by automated security sca…

cargo audit advisory remediationdependency upgrade for known-vulnerable crate (rand 0.7 / jobserver)dependency upgrade for known-vulnerable crate (crossbeam-epoch)
5f5f666dby Andrew Poelstra+51−1849 files
Vendor flagged security relevance
Low 37 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6897: consensus_encoding: fix overcounting bug in the composite encoders exact size len calculation

This commit fixes a counting bug in a Rust Bitcoin library. The library has combined encoders that bundle multiple pieces of data together. A method called len() is supposed to report how many bytes are left to encode, but it was incorrect…

Violation of documented API contract (ExactSizeEncoder::len)Potential incorrect buffer-size or progress decisions by downstream callersComposite encoder state not fully isolated in size reporting before fix
22bbc326by Andrew Poelstra+19−13 files
No security note in commit
Low 37 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

consensus_encoding: fix bug in the composite encoder's exact size

This commit fixes a bookkeeping bug in a Rust Bitcoin library's composite encoder. The encoder is a tool that combines multiple pieces of data into a single byte stream, and it has a method that is supposed to report how many bytes are lef…

Incorrect implementation of a documented size/length contractPotential for callers to over-allocate buffers or miscompute transaction/witness sizesComposite encoder used in consensus-critical serialization paths
914365b4by Nick Johnson+19−13 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 Secp256k1 variant from taproot SigFromSliceErrorby Mitchell Bagot · f3920e7b · Jun 8, 2026 · 1 fileMessage 78 · AdequateInformational 19Details
Commit message · Mitchell Bagot

Remove Secp256k1 variant from taproot SigFromSliceError

The Secp256k1 variant of the SigFromSliceError is no longer needed.
The secp parsing of the signature is now infallible, meaning there
cannot be a secp error during parsing of a signature from a slice.

Remove Secp256k1 error variant from taproot::SigFromSliceError.

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
signing boundarycryptography-sensitive path
AI analysis · Informational 19/100

This commit removes an unused error category from a Bitcoin cryptography library. It is a cleanup change because the underlying signature-parsing code can no longer fail in the way that error category described. There is no direct evidence this fixes an active security bug, but it does slightly reduce the library's public error surface, which can help downstream code handle errors more reliably.

Security candidateIntroduce errors for byte parsing and verificationby Mitchell Bagot · 1a337804 · Jun 8, 2026 · 2 filesMessage 83 · StrongInformational 18Details
Commit message · Mitchell Bagot

Introduce errors for byte parsing and verification

At present, the from_bytes, from_secret_bytes and verify methods on
the key types all return secp256k1::Error. In all of these methods,
only a single variant of that error type is returned. To both hide
the secp type, and to provide the possibility for more meaningful
error values, new error types should be introduced.

Add FromSecretBytesError, InvalidPublicKeyError and VerifyError to
key errors.
Add InvalidDerError error type to ecdsa error submodule.

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
defensive validationcryptography-sensitive path
AI analysis · Informational 18/100

This commit is a routine code-quality refactor. It introduces new, more specific Rust error types for parsing keys and signatures, replacing a generic underlying library error type. There is no change to cryptographic behavior, validation logic, or security boundaries. It only changes what kind of error message callers receive when parsing fails.

AI review queuedconsensus_encoding: Update API filesby Mitchell Bagot · dae7e7da · Jun 8, 2026 · 3 filesMessage 35 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

consensus_encoding: Update API files

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit only updates generated API snapshot files (text listings of public functions) for the consensus_encoding crate. It adds entries for three new public functions that decode data using an explicit decoder type. There is no source code change, no bug fix, and no security relevance visible in the diff.

AI review queuedconsensus_encoding: Add decode_from_*_with functionsby Mitchell Bagot · ec439600 · Jun 8, 2026 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Mitchell Bagot

consensus_encoding: Add decode_from_*_with functions

Currently, users of the old encoding traits can call functions to
decode many types (like Vec<u8> or u64) from byte slices. With the new
encoding/decoding traits, there exists no convenient method for users
to decode types without a dedicated Decode impl.

Introduce decode_from_*_with variant functions that are generic on
Decoder + Default instead of Decode.

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit adds new public helper functions to a Rust Bitcoin encoding library. The functions let callers decode data using a decoder type directly, rather than only through types that implement a specific trait. It is a pure API convenience addition and does not change existing behavior or fix any bug.

Lower-priorityio: Introduce decode_from_read_with functionby Mitchell Bagot · dc95b41e · Jun 8, 2026 · 1 fileMessage 58 · ThinInformational 16Details
Commit message · Mitchell Bagot

io: Introduce decode_from_read_with function

Currently, users of the old encoding traits can call functions like
reader.read_compact_size. With the new encoding/decoding traits, there
exists no convenient method for users to interact with bitcoin io
readers with decoders that don't have a dedicated Decode implementer.

Introduce decode_from_read_with variant function that is generic on
Decoder + Default instead of Decode.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
AI analysis · Informational 16/100

This commit adds a new helper function to the rust-bitcoin library that lets developers decode data from a reader using any decoder type that can be created with default settings. It is a pure API addition: it refactors an existing function into a shared internal helper and exposes a new public entry point. There is no bug fix, behavior change, or security-related content in the diff.

Security candidatetaproot: Remove From<&Signature> for SerializedSignatureby Mitchell Bagot · 3af1119f · Jun 7, 2026 · 1 fileMessage 78 · AdequateInformational 17Details
Commit message · Mitchell Bagot

taproot: Remove From<&Signature> for SerializedSignature

The From<&'a Signature> for SerializedSignature impl functions by
derefing the signature and then serializing it. The presence of the
trait implies that SerializedSignature is some sort of reference to
the signature, when it is instead a type owning its own data.

Remove From<&Signature> impl from taproot::SerializedSignature.

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
signing boundarycryptography-sensitive path
AI analysis · Informational 17/100

This commit removes a convenience conversion that let users turn a borrowed Taproot signature into an owned, serialized byte form. The change is API-cleanup: the old trait made it look like the serialized form was just a view of the original signature, when it actually copies/owns the bytes. There is no direct security bug fixed here, but removing the misleading conversion reduces the chance that future callers misunderstand ownership and accidentally clone or mishandle signature data.

Lower-priority2026-06-07 automated rustfmt nightlyby Fmt Bot · f34abf02 · Jun 7, 2026 · 2 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-06-07 automated rustfmt nightly

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This is an automated code-formatting commit from rustfmt. It only changes whitespace, line breaks, and adds a missing semicolon after a return statement. There is no functional change and no security relevance.

Security candidateBump key-expression crate versionby Mitchell Bagot · c1fbe98c · Jun 6, 2026 · 5 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Bump key-expression crate version

With the bip32 module moved, the key-expression crate should now have
a new version release before the next bitcoin release.

Bump key-expression version number to 0.1.0.
Update changelog.
Adjust bitcoin manifest to match new version number.
Update lock files.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key material
AI analysis · Informational 15/100

This commit is purely a housekeeping release step. It bumps the version number of the bitcoin-key-expression crate from 0.0.0 to 0.1.0, updates the changelog, and adjusts the main bitcoin package and lock files to match. There are no code changes, bug fixes, or security patches in the diff.

Lower-priorityAutomated update to Github CI to cargo-semver-checks version-0.48.0by Update cargo-semver-checks Bot · 443700c8 · Jun 6, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Update cargo-semver-checks Bot

Automated update to Github CI to cargo-semver-checks version-0.48.0

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

This commit simply bumps the version number of a CI linting tool (cargo-semver-checks) used in GitHub Actions from 0.47.0 to 0.48.0. It changes one line in a workflow configuration file and has no effect on the actual Bitcoin library code that users run.

Security candidateAdd From<Infallible> to sighash errorsby Mitchell Bagot · d8d8c334 · Jun 5, 2026 · 1 fileMessage 80 · StrongInformational 15Details
Commit message · Mitchell Bagot

Add From<Infallible> to sighash errors

In order to facilitate use in generics, all error types should have a
From<Infallible> implementation.

Add From<Infallible> to all sighash error types.

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

This commit adds standard Rust trait implementations that allow certain Bitcoin signature-hash error types to be created from the Infallible type. Infallible is a type that can never actually exist, so these conversions can never be invoked at runtime. The change is purely an ergonomic improvement for generic programming and has no security relevance.

Security candidateMake sighash error fields privateby Mitchell Bagot · 1d583d6f · Jun 5, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Make sighash error fields private

The sighash error types in crypto currently all have pub fields. This
prevents any future changes to their structure after a 1.0 and is not
required for any functionality.

Make all inner fields in sighash errors pub(super) or pub(crate).

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 reduces the visibility of internal fields on three error types in the crypto/sighash module from public to crate-internal. It is a routine API-hardening change to preserve future flexibility before a 1.0 stable release. There is no security vulnerability here.

Lower-priorityAutomated update to rustc stable-1.96.0by Update Stable Rustc Bot · 65f76a7d · Jun 5, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Update Stable Rustc Bot

Automated update to rustc stable-1.96.0

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This is a routine automated update that changes one version number in a project configuration file, bumping the recommended stable Rust compiler from 1.95.0 to 1.96.0. There is no code change and no security-relevant content.

Lower-priorityp2p: error on `CommandString` interior null bytesby yancy · 1e371352 · Jun 4, 2026 · 1 fileMessage 68 · AdequateLow 48Details
Commit message · yancy

p2p: error on `CommandString` interior null bytes

Add an invariant that a `CommandString` cannot have a null byte
preceding a non null byte as part of the command string.

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

This commit tightens validation for Bitcoin P2P message command strings. Previously, a command string could contain a null byte in the middle followed by more characters (for example "And\0rew"). Such malformed strings are now rejected both when created from Rust code and when received from the network. This prevents odd or potentially dangerous command strings from being accepted as valid.

Lower-priorityImplement fmt::LowerHex and fmt::UpperHex for Witnessby Henry Romp · 9bd17308 · Jun 4, 2026 · 2 filesMessage 91 · StrongInformational 15Details
Commit message · Henry Romp

Implement fmt::LowerHex and fmt::UpperHex for Witness

The Witness type can be constructed from a hex string via from_hex but
provides no way to render itself back to hex. Other types in primitives
expose hex rendering through fmt::LowerHex (the to_hex functions were
deprecated in favour of it), so Witness should follow the same
convention.

Implement fmt::LowerHex and fmt::UpperHex for Witness by delegating to
the existing HexPrimitive helper, which formats the consensus encoding
as hex. Add tests covering empty and non-empty witnesses for both cases
and record the new trait impls in the public API surface.

See #6314

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit adds the ability to print a Bitcoin transaction witness as a hexadecimal string, mirroring functionality already available for other types. It is a routine feature addition with no security relevance visible in the code or commit message.

Lower-prioritybitcoin: port 0.32.x changelog entries to masterby Nick Johnson · 347ee51a · Jun 3, 2026 · 1 fileMessage 60 · AdequateInformational 15Details
Commit message · Nick Johnson

bitcoin: port 0.32.x changelog entries to master

Co-authored-by: Tobin C. Harding <me@tobin.cc>

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit only edits the project's changelog file (CHANGELOG.md). It adds historical release notes for versions 0.32.9, 0.32.10, and 0.32.100, and updates comparison links. No source code, build scripts, tests, or dependencies were changed. It is a documentation-only commit and does not alter program behavior or fix any vulnerability directly.

Security candidateFixup changelog links and follow new policyby Nick Johnson · ef718dcc · Jun 3, 2026 · 14 filesMessage 68 · AdequateInformational 15Details
Commit message · Nick Johnson

Fixup changelog links and follow new policy

* Fixup off-by-one error in `bitcoin` links.
* bip158 does not have any tags yet.
* Not adding links for 0.32.x tags, the diff compare gets a little
wonky as the branch drifts further from master.
* `internals` and `units` have some inconsistent tag formatting.

Drop all links which are not helpful compares. Links to a single tag
are not all the helpful and niether is comparing to the beginning of time.

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

This commit only edits changelog files. It fixes Markdown link formatting, corrects a few typoed pull request numbers, updates release heading levels, and adjusts version compare links. No program code was changed, so it cannot introduce or fix a security vulnerability in the software itself.

Security candidatecrypto: Gate all usage of hex-conservative behind hex featureby Mitchell Bagot · 745f4fe4 · Jun 3, 2026 · 6 filesMessage 73 · AdequateInformational 19Details
Commit message · Mitchell Bagot

crypto: Gate all usage of hex-conservative behind hex feature

Typically, all of the crates upstream of bitcoin have a hex feature
that gates the usage and inclusion of the hex-conservative crate.
Since the crypto crate functionality was crudely pulled from bitcoin,
this feature was not present but instead baked in as part of the
default functionality.

Introduce a hex feature which gates hex 1.1.0.
Add hex feature gates as necessary for existing functionality.

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

This commit reorganizes how an optional hex-encoding helper library is enabled in the bitcoin-crypto crate. It makes the hex-conservative dependency optional and gated behind a new 'hex' feature, instead of being included by default. The main bitcoin crate explicitly enables this feature, so end-user behavior is unchanged. This is a build/configuration cleanup, not a fix for an exploitable vulnerability.

AI review queuedUpdate API filesby Mitchell Bagot · 633a99f9 · Jun 3, 2026 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

Update API files

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body
Why it was queued
documentation-only discountsecond-pass: opaque commit message
AI analysis · Informational 15/100

This commit only updates a generated text file that lists the public API surface of the crate. It adds entries for new public types and functions (a hex encoding/decoding error type and helper functions). There is no actual code change, no bug fix, and no security relevance visible in the diff.

AI review queuedconsensus_encoding: Add hex decoding functionby Mitchell Bagot · 7aa85ed6 · Jun 3, 2026 · 4 filesMessage 68 · AdequateInformational 17Details
Commit message · Mitchell Bagot

consensus_encoding: Add hex decoding function

Building on the iter decoding functionality, the use of the hex feature
can also provide a decode_from_hex function that allows users to
directly decode a hex &str to a type, without working via a heap vec
and using decode_from_slice.

Introduce decode_from_hex for decoding hex &str to decode types without
heap allocations.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit adds a new public helper function that lets users decode Bitcoin consensus data directly from a hexadecimal string, without needing to allocate a temporary byte vector. It is a pure feature addition: it introduces a new error type, exports the function under a feature flag, and includes unit tests. There is no indication in the commit that it fixes a security bug or that the change itself creates one.

Lower-priorityconsensus_encoding: Add hex encoding helpersby Mitchell Bagot · 5306ead4 · Jun 3, 2026 · 4 filesMessage 68 · AdequateInformational 16Details
Commit message · Mitchell Bagot

consensus_encoding: Add hex encoding helpers

By pairing hex 1.1 with the existing EncoderByteIter, it's trivial to
introduce hex encoding support into consensus encoding. This simplifies
hex encoding for consensus objects for downstream users.

Add drain_to_hex and encode_to_hex for encoding objects to hex String.

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

This commit adds new convenience functions that let users convert Bitcoin consensus data into hexadecimal text strings. It is a pure feature addition: it does not change existing behavior, fix a bug, or alter any security-critical logic. There is no indication this commit addresses a vulnerability.

Lower-priorityprimitives: Move block test to testsby Tobin C. Harding · 0601cea6 · Jun 3, 2026 · 2 filesMessage 78 · AdequateInformational 15Details
Commit message · Tobin C. Harding

primitives: Move block test to tests

This test uses the `include_bytes!` macro to include data from a file
that lives in `tests` but we exclude that directory when publishing.
Resulting in published source code having broken unit tests.

Move the test to `tests/`.

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

This commit simply moves a test from one file to another. It fixes a packaging problem where published source code would contain a broken unit test because a required data file was not included in the published package. There is no security issue in the code itself.

Lower-priorityClean up stale duplicate dep overridesby Nick Johnson · 136b37e7 · Jun 2, 2026 · 4 filesMessage 45 · ThinInformational 15Details
Commit message · Nick Johnson

Clean up stale duplicate dep overrides

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit removes leftover configuration entries that allowed duplicate references to a helper package called 'hex-conservative' in four sub-project files. It is a routine cleanup of stale build-tool metadata and does not change any executable code, dependencies, or security behavior.

Lower-priorityprimitives: Avoid allocating claimed size when decoding witness lengthby jrakibi · df76d348 · Jun 2, 2026 · 1 fileMessage 73 · AdequateModerate 51Details
Commit message · jrakibi

primitives: Avoid allocating claimed size when decoding witness length

Avoid allocating the claimed size when decoding witness length.

It's currently possible to claim a length and have the decoder
reserve up to `MAX_VECTOR_ALLOCATE` before any data bytes have
arrived, just from reading the length prefix.

Instead, we can reserve only the prefix, and let the buffer grow incrementally
as bytes arrive.

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

This change fixes a memory allocation quirk in how Bitcoin transaction witness data is decoded. Previously, when reading a witness element, the decoder would reserve memory equal to the full claimed size of the element immediately, even though no actual element bytes had been read yet. The patch makes it reserve only a small minimum amount and let the buffer grow as real data arrives. This reduces the risk of an attacker causing large memory reservations by supplying a misleading length prefix, though the actual allocation still cannot exceed a built-in maximum.

Security candidateCI: Fix nightly toolchain update to mention weeklyby Tobin C. Harding · a7778aac · Jun 2, 2026 · 1 fileMessage 77 · AdequateInformational 15Details
Commit message · Tobin C. Harding

CI: Fix nightly toolchain update to mention weekly

This job runs weekly not daily. Update the branch name and PR title.

77/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
boot or update pathdocumentation-only discount
AI analysis · Informational 15/100

This commit only fixes wording in an automated GitHub Actions workflow. It changes the pull request title and branch name from 'daily' to 'weekly' because the job actually runs once a week, not once a day. There is no code change, no security fix, and no vulnerability.

AI review queuedconsensus_encoding: Use crate alias in test codeby Tobin C. Harding · 79867081 · Jun 2, 2026 · 5 filesMessage 70 · AdequateInformational 15Details
Commit message · Tobin C. Harding

consensus_encoding: Use crate alias in test code

`bitcoin_consensus_encoding` is one hell of a mouthful. Add an alias
to `encoding`.

Test code only.

Run the formatter

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only renames a long crate name to a shorter alias inside test files. It does not change any real program code, behavior, or security properties. There is no security issue here.