RB
← All projectsRust Bitcoin

rust-bitcoin

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

BitcoinCryptographic librariesNormal
Repository coverage

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

459security candidates448second-pass queue2070AI analyses
181commits · 30 days
400commits · 60 days
1282commits · 180 days
2052commits · 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.

64/100 average clarity
311Strong · 80–100
1054Adequate · 60–79
555Thin · 40–59
150Opaque · 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 Bagot640192640068
Tobin C. Harding40965409063
jrakibi944994068
Nick Johnson18920189059
Andrew Poelstra512051075
Jamil Lambert, PhD11418114061
Fmt Bot311431045
Trevor Arjeski111111069
Shing Him Ng31731056
Ismail Daif22622050
satsfy (Renato Britto)17617066
Martin Habovstiak27527069
Analysis record

Published AI watches

Last scanned 1 minute ago

Informational 15 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6671: units: reword docs from height to count in relative locktime

This commit only changes documentation comments and variable names in the rust-bitcoin library. It rewords references to 'block height' as 'block count' for relative locktime, because a relative locktime measures elapsed blocks since a coi…

6ea4ff92by Andrew Poelstra+20−172 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6670: ci: fix labeller permissions

This is a routine GitHub Actions workflow fix. The change gives the automated PR labeler workflow permission to download artifacts and explicitly tells the GitHub CLI which repository to act on. It does not change the Bitcoin library code,…

CI workflow permission fixNo source code changesNo cryptographic or consensus changes
276e0a61by Andrew Poelstra+5−01 file
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6657: Release tracking PR: `base58ck 0.5.0`

This commit is a routine version bump for the base58ck crate from 0.4.0 to 0.5.0. It only updates version numbers in package manifests, lock files, and adds a changelog entry. There are no code changes and no security relevance.

9deb5de1by Andrew Poelstra+22−168 files
No security note in commit
Informational 21 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6440: base58: Introduce `decode_check_to_array` for alloc-less decoding

This commit is a routine feature addition to the rust-bitcoin base58 crate. It adds a new no-allocator function to decode short base58-check strings into fixed-size byte arrays, and renames the existing error type while keeping a deprecate…

No security-relevant bug fix is described in the commit message or diff.New decoding path uses a fixed 128-byte scratch buffer (`ArrayVec`) and rejects oversized inputs.Checksum verification and invalid-character handling are preserved from the existing alloc implementation.
c5fd1832by Andrew Poelstra+330−775 files
No security note in commit
Informational 15 AI analysisMessage 93 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6646: hashes: add several methods to `Midstate` and release 1.2.0

This commit is a routine feature release for the bitcoin_hashes crate. It adds new public methods and a constant to the SHA-256 Midstate type so developers can compute SHA-256 midstates in const contexts. There is no indication of a securi…

0f68fcb3by Andrew Poelstra+157−4210 files
No security note in commit
Informational 15 AI analysisMessage 73 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

units: reword docs to block count in relative locktime

This commit only rewords documentation comments and variable names in the codebase. It changes references from 'block height' to 'block count' for relative lock times, which is a terminology correction with no functional code changes. Ther…

8867fe2eby satsfy (Renato Britto)+20−172 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6667: Make the `WitnessesEncoder` private

This commit makes a small internal helper type called WitnessesEncoder private. It was previously exported as public API but is only used inside the transaction encoder. The change removes it from the public API surface and moves the code …

07d91f7fby Andrew Poelstra+54−1324 files
No security note in commit
Informational 12 AI analysisMessage 75 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

ci: fix labeller permissions

This commit adjusts a GitHub Actions workflow that automatically labels pull requests based on CI results. It adds a built-in repository token, tells the artifact download step to merge single-file artifacts, and explicitly sets the reposi…

Workflow-only change with no library code modificationsUses the default GITHUB_TOKEN rather than a custom secretRuns in workflow_run context, which already has elevated repository access by design
715f2bd6by Nick Johnson+5−01 file
No security note in commit
Informational 19 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6661: units: Remove `From<u16>` from `NumberOfBlocks`

This is a routine API cleanup, not a security fix. The developers removed a shortcut that let programmers create a 'number of blocks' value directly from any u16 number, replacing it with an existing named constructor called from_height. T…

ed5f1b68by Andrew Poelstra+18−358 files
No security note in commit
Informational 15 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6668: Scrub the transaction encoding logic

This commit is a pure code reorganization (refactor) in the rust-bitcoin library. It moves transaction encoding and decoding definitions around within a single file so the code follows the project's preferred layout. No logic, behavior, or…

c5588ba5by Andrew Poelstra+57−571 file
No security note in commit
Informational 18 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6662: build(deps): bump actions/checkout from 6.0.2 to 6.0.3

This commit is a routine update to the GitHub Actions checkout tool used by the project's automated workflows. It changes the pinned version from 6.0.2 to 6.0.3 across many workflow files. The newer version fixes minor bugs related to SHA-…

Dependency bump of actions/checkout to a patch releaseUpstream fixes for SHA-256 repository checkout and merge commit regexAll affected workflows already disable persisted credentials
f7d364cdby Andrew Poelstra+29−2915 files
No security note in commit
Informational 15 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6663: build(deps): bump taiki-e/install-action from 2.79.12 to 2.81.4

This is a routine Dependabot update that bumps the version of a third-party GitHub Action used only in automated testing workflows. The change does not touch the project's actual Bitcoin library code, and there is no indication it fixes or…

5c92c0b0by Andrew Poelstra+2−22 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Update the API text files

This commit only updates two generated API text files that list the public surface of the Rust crate. It removes entries for a `WitnessesEncoder` type, reflecting that the type is no longer part of the public API. There is no source code c…

9c391145by Tobin C. Harding+0−782 files
No security note in commit
Informational 15 AI analysisMessage 68 · Adequate
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Scrub the transaction encoding logic

This commit is a pure code reorganization: it moves existing transaction encoding and decoding definitions around within a single file so they follow the project's preferred layout. No logic was changed, no security bug was fixed, and no n…

80dcef15by Tobin C. Harding+57−571 file
No security note in commit
Informational 15 AI analysisMessage 58 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Make the WitnessesEncoder private

This commit simply hides an internal helper type called WitnessesEncoder from public view. It is a routine API-cleanup change with no security relevance visible in the code or commit message.

b37accc3by Tobin C. Harding+54−542 files
No security note in commit
Informational 15 AI analysisMessage 45 · Thin
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

release bitcoin_hashes 1.2.0

This commit is a routine version bump for the bitcoin_hashes library from version 1.1.0 to 1.2.0. It only updates lock files, the package version number, and the changelog. There is no code change and no security relevance visible in the c…

8899dfd2by Andrew Poelstra+27−224 files
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.1.0 to 8.2.0

This is a routine automated update by Dependabot that changes the pinned version of a GitHub Action used to install the 'uv' Python tool in two workflow files. The new commit hash corresponds to the legitimate 8.2.0 release of astral-sh/se…

1c438632by dependabot[bot]+2−22 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 automated update by Dependabot that changes the pinned version of a GitHub-provided security scanning helper used in a workflow. It does not modify the project's actual Bitcoin library code, its cryptographic logic, or an…

5293bee4by 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 taiki-e/install-action from 2.79.12 to 2.81.4

This is a routine Dependabot update that bumps a GitHub Actions helper used in automated testing workflows from version 2.79.12 to 2.81.4. It only changes which version of the action is invoked during CI runs; it does not modify the Rust B…

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

build(deps): bump actions/checkout from 6.0.2 to 6.0.3

This is a routine automated update by Dependabot that bumps the GitHub Actions 'actions/checkout' dependency from version 6.0.2 to 6.0.3 across all project workflow files. It only changes pinned commit hashes and version comments for the a…

Routine patch-level dependency bumpNo changes to permissions, inputs, or workflow logicpersist-credentials: false already present on all checkout steps
ae935fadby dependabot[bot]+29−2915 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 candidatehashes: Refactor process_block to process_block(state, data)by jrakibi · 14162914 · Feb 28, 2026 · 6 filesMessage 73 · AdequateInformational 15Details
Commit message · jrakibi

hashes: Refactor process_block to process_block(state, data)

decouple process_block from HashEngine.
now it accepts block buffer as an explicit parameter.

this will allow us to:
- process multiple blocks
- callers can pass data directly without copying to self.buffer

no logic change

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 15/100

This is a routine internal code cleanup in the project's hash-function code. It changes how a low-level helper function is called so it takes the hash state and data block as explicit arguments, rather than reading them from a surrounding object. The commit message and diff show no change to the actual hashing math or results. There is no security issue here.

Security candidateImprove error documentation for key typesby Mitchell Bagot · 8582214e · Feb 27, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Improve error documentation for key types

Many of the functions in the crypto key module can error, yet are
missing documentation on the possible error types and how they occur.

Introduce error documentation and add explicit lint allows for
functions that can panic but will not.

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 only adds and improves documentation comments for error conditions in the cryptographic key module. No code behavior, logic, or security properties were changed. It is a documentation-only change.

Security candidatekey: Fix PublicKey::from_slice compressed key prefix checkby Mitchell Bagot · 58c73f3b · Feb 27, 2026 · 1 fileMessage 85 · StrongModerate 60Details
Commit message · Mitchell Bagot

key: Fix PublicKey::from_slice compressed key prefix check

Currently, PublicKey::from_slice only checks that the prefix byte for
uncompressed keys has a value of 4. Compressed keys should also be
checked to ensure that their prefix byte is either 2 or 3.

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

This commit fixes a bug in how the library reads Bitcoin public keys from raw bytes. Previously, when a caller said the key was 'compressed', the code did not verify that the first byte was a valid compressed-key prefix (2 or 3). That meant invalid or even attacker-chosen prefix bytes could be accepted for compressed keys, while uncompressed keys were already checked. The fix now rejects any compressed key whose first byte is not 2 or 3, matching the Bitcoin protocol rules.

Lower-priorityAutomated update to Github CI to rustc stable-1.93.1by Update Stable Rustc Bot · f39a6813 · Feb 27, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Update Stable Rustc Bot

Automated update to Github CI to rustc stable-1.93.1

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 used by the project's GitHub CI from Rust 1.93.0 to 1.93.1. It is a routine automated maintenance change to the continuous integration configuration and does not alter any source code, dependencies, or runtime behavior of the library.

Lower-priorityconsensus_encoding: move encoders inline tests to integrationby Nick Johnson · c4143bb6 · Feb 26, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding: move encoders inline tests to integration

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply moves existing unit tests from inside the source file to a separate integration test file. No production code behavior was changed, and nothing about how the library works in real use was modified. It is a routine test reorganization with no security relevance.

AI review queuedconsensus_encoding: move decoders inline tests to integrationby Nick Johnson · 976a2348 · Feb 26, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding: move decoders inline tests to integration

60/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply moves existing unit tests from inside the source file to a separate integration test file. No production code behavior was changed, so there is no security impact.

AI review queuedconsensus_encoding: move decode inline tests to integrationby Nick Johnson · 9d1810d3 · Feb 26, 2026 · 2 filesMessage 83 · StrongInformational 15Details
Commit message · Nick Johnson

consensus_encoding: move decode inline tests to integration

Prefer integration test over inline since they hit the exposed API. A test
can live in integration as long as every name it touches is reachable
through lib.rs.

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
parser or protocol pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply moves existing unit tests from inside the source file to a separate integration test file. No production code behavior was changed, so there is no security risk or fix.

Lower-priorityUpdate nightly toolchain to nightly-2026-02-21by Tobin C. Harding · f143ffe0 · Feb 26, 2026 · 16 filesMessage 88 · StrongInformational 15Details
Commit message · Tobin C. Harding

Update nightly toolchain to nightly-2026-02-21

Same as done by bot in #5717 but with a manual update to the API text
files because `UnsafeUnpin` impls now show up.

ref: https://doc.rust-lang.org/nightly/core/marker/trait.UnsafeUnpin.html

88/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode✓ Links an issue, advisory, or supporting reference
AI analysis · Informational 15/100

This commit only updates the pinned Rust nightly compiler version and refreshes the project's automatically-generated public API snapshot files. The new compiler version reports an additional standard Rust trait (`UnsafeUnpin`) in the snapshots, so the snapshots are updated to match. No source code behavior was changed, and there is no security fix or vulnerability introduced.

Lower-priorityconsensus_encoding, primitives, units: follow rust doc title conventionby Nick Johnson · 3fd32e95 · Feb 24, 2026 · 3 filesMessage 65 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding, primitives, units: follow rust doc title convention

Follow the standard H1 title convention from the rust standard library.

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

This commit only rewrites the top-of-file documentation headings in three Rust library crates to follow the Rust standard library's H1 title convention. It changes comments, not executable code, so it cannot affect program behavior or security.

AI review queuedconsensus_encoding: beef up module docsby Nick Johnson · 3e765dba · Feb 24, 2026 · 3 filesMessage 68 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding: beef up module docs

More conventional C-CRATE-DOC and C-EXAMPLE. The crate doc is essentially
a stripped down version of the original ADR doc. C-EXAMPLE calls for an
example on every public item within reason. It would be very repetative
to apply examples on every item in this crate, a single encoder and
decoder example can probably be used by all items.

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 15/100

This commit only adds documentation and code examples to a Rust Bitcoin encoding/decoding library. It does not change any actual program logic, fix bugs, or alter behavior. There is no security issue here.

Lower-priorityunits: Introduce coverage for Display on error typesby Mitchell Bagot · 1af0abd1 · Feb 24, 2026 · 8 filesMessage 95 · StrongInformational 15Details
Commit message · Mitchell Bagot

units: Introduce coverage for Display on error types

The error types in units are largely untested by existing tests.
Since it's important to ensure that error display some content, we
should include assertions that error display messages are non-empty.

Introduce tests to cover Display impls for all error types in units

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

This commit only adds new tests that check error messages are non-empty. It does not change any production code, so it cannot introduce a security vulnerability or fix one. It is a routine improvement to test coverage.

Lower-priorityFix Error source for ParseDenominationErrorby Mitchell Bagot · 676907c6 · Feb 24, 2026 · 1 fileMessage 68 · AdequateInformational 17Details
Commit message · Mitchell Bagot

Fix Error source for ParseDenominationError

The ParseDenominationError return None for the error source in the
std::error::Error trait implementation. Since the type is a wrapper
enum for other errors, it should return the inner error in source().

Return the inner error types for ParseDenominationError in source().

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

This is a tiny Rust bug fix in how one error type reports its underlying cause. It does not create a security vulnerability and cannot be exploited; it only affects how detailed error messages are produced when parsing Bitcoin amount denominations fails.

Lower-priorityRearrange types in hex_codecby Mitchell Bagot · 7aba40d7 · Feb 24, 2026 · 1 fileMessage 58 · ThinInformational 15Details
Commit message · Mitchell Bagot

Rearrange types in hex_codec

The hex_codec module was created over various patches and thus doesn't
follow best practice for ordering. Errors should be near the bottom,
with important types near the top.

Rearrange hex_codec to put HexPrimitive at the top, and
ParsePrimitiveError at the bottom.

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

This commit simply moves two code blocks around within a single file. It is a cosmetic reorganization with no functional changes, no bug fixes, and no security implications.

Lower-priorityprimitives: Move hex_codec to independent moduleby Mitchell Bagot · 58cf5011 · Feb 24, 2026 · 2 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

primitives: Move hex_codec to independent module

The hex_codec module in lib.rs of primitives now makes up 2/3rds of
the file. At this scale, it is better suited to be moved into its
own file.

Move the hex_codec module in lib.rs to a new module file, and import
it as a pub(crate) mod.

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

This commit simply moves an existing block of hex-encoding code from one file to another within the project. It does not change what the code does, fix a bug, or alter any public behavior. There is no security relevance.

Lower-priorityClean up function comments and visibility in hex_codecby Mitchell Bagot · 118791e4 · Feb 24, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Clean up function comments and visibility in hex_codec

The hex_codec module should be entirely hidden to outside the crate.
While all types are pub(crate), the inner field of HexPrimitive was
pub.

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

This is a minor code cleanup change in a Rust Bitcoin library. It changes one internal field from being publicly visible to being visible only within the crate, and updates some documentation comments. There is no security issue here.

AI review queuedRemove alloc requirement for HexPrimitiveby Mitchell Bagot · 032c5db4 · Feb 24, 2026 · 3 filesMessage 80 · StrongInformational 18Details
Commit message · Mitchell Bagot

Remove alloc requirement for HexPrimitive

The Display/Debug/UpperHex/LowerHex implementations on HexPrimitive
all relied on alloc due to the implementation of hex_write_with_case.
This locks LowerHex and UpperHex on Header behind alloc, and led to
an unnecessary custom implementation of Display.

Change hex_write_with_case to remove alloc requirement, and remove
corresponding feature gates. Move hex_write_with_case to inherent
function on HexPrimitive, and rename to fmt_hex. Replace Display impl
on Header with call through to HexPrimitive. Remove feature gates on
Header Upper/LowerHex.

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 18/100

This is a routine code cleanup in the rust-bitcoin library. It removes the need for the 'alloc' feature when formatting certain Bitcoin data types as hex, making the hex formatting work in more constrained environments. There is no indication this fixes a security vulnerability.

AI review queuedAdjust from_str in HexPrimitive to be no-allocby Mitchell Bagot · 8b4b80b3 · Feb 24, 2026 · 4 filesMessage 80 · StrongInformational 17Details
Commit message · Mitchell Bagot

Adjust from_str in HexPrimitive to be no-alloc

The from_str implementation for parsing types from hex strings currently
relies on alloc due to the use of hex::decode_to_vec. This locks Header
FromStr decoding behind alloc.

Implement from_str without alloc, and adjust feature gates on
HeaderDecoder to match new relaxed requirements.

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 or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 17/100

This commit is a routine refactoring of how hex strings are parsed into Bitcoin data structures in the rust-bitcoin library. It replaces an allocation-based hex decoder with a streaming, no-allocation decoder so the code can run in environments without a heap allocator. There is no direct security bug being fixed; it is a feature-gate and performance/capability cleanup.

Security candidateFix to_secret_key docs on Keypairby Mitchell Bagot · 1e84a774 · Feb 24, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Fix to_secret_key docs on Keypair

The to_secret_key function docs state that it returns a PrivateKey
type, but the function actually returns a secp256k1::SecretKey.

Fix to_secret_key docs on Keypair to correctly reference
secp256k1::SecretKey return type.

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 fixes a documentation comment for a Rust function. The comment previously said the function returned one type of private key object, but it actually returns a different, lower-level secret key type. There is no code behavior change and no security risk.

Security candidateReplace old encoding logic with new encoders in sighashby Mitchell Bagot · 9aceea29 · Feb 24, 2026 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · Mitchell Bagot

Replace old encoding logic with new encoders in sighash

The sighash module contains a lot of encoding logic for types that make
use of the old consensus::Encodable trait's consensus_encode function.
With the introduction of the new consensus_encoding crate and
associated encoders, this logic can all be replaced with call-throughs
to the new encoders.

Replace all uses of consensus::Encodable logic with equivalent encoding
logic from consensus_encoding::Encodable/Encoder impls.

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 16/100

This is a code cleanup commit in the rust-bitcoin library. It replaces old transaction-encoding helper functions with newer equivalent ones inside the signature-hash (sighash) code. There is no direct evidence in the commit message or diff that this fixes a security vulnerability; it reads as a refactoring to use a newer internal API. However, because the change touches the exact code that computes Bitcoin transaction signatures, any accidental change to the bytes produced could break compatibility with the Bitcoin protocol or wallets, so it is in a security-sensitive area.

Lower-priorityconsensus_encoding: expose vis fragment on exposed macrosby Nick Johnson · f0180702 · Feb 24, 2026 · 1 fileMessage 73 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding: expose vis fragment on exposed macros

Following the C-MACRO-VIS API convention, expose a vis fragment to allow
the caller to choose the output's visibility. This change is backwards
compatible.

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

This commit is a routine API ergonomics improvement. It changes two Rust macros so that the caller can specify the visibility of the generated struct and its constructor (e.g., public, private, or crate-visible), instead of always forcing public visibility. The change is explicitly described as backwards compatible and follows a documented Rust API convention.

Lower-priorityio: Add flush_to_writer functionby Mitchell Bagot · e44744ce · Feb 24, 2026 · 1 fileMessage 70 · AdequateInformational 15Details
Commit message · Mitchell Bagot

io: Add flush_to_writer function

In some cases, we may have an Encoder instance, without a corresponding
Encodable. In these cases, having a way to flush the encoder to an io
writer is extremely useful to avoid having to replicate the logic of
encode_to_writer inline.

Add flush_to_writer function to match flush_to_writer from
consensus_encoding.

70/100 · AdequateMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context✓ Explains rationale or failure mode
AI analysis · Informational 15/100

This commit adds a new helper function that lets developers flush an existing data encoder directly to an output writer. It is a straightforward code refactor that splits an existing function into two pieces; there is no indication of a security bug or fix.

Security candidatebitcoin: reject 65 bytes signature with sighash 0x00by jrakibi · 371b17e3 · Feb 24, 2026 · 1 fileMessage 98 · StrongModerate 60Details
Commit message · jrakibi

bitcoin: reject 65 bytes signature with sighash 0x00

According to BIP341, if taproot signature is 65 bytes long, the last byte (sighash)
must be different from 0x00, otherwise, it is invalid.
currently, we are accepting it as a valid signature.
this might also break the roundtrip of from_slice -> serialize

ref: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#taproot-key-path-spending-signature-validation

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

This commit fixes a bug where the Rust Bitcoin library incorrectly accepted 65-byte Taproot signatures whose final byte was 0x00. Under Bitcoin's BIP-341 rules, such signatures are invalid. Accepting them could let invalid transactions or signatures slip through, and it could break the library's own round-trip serialization (reading a signature in and writing it back out).

AI review queuedconsensus_encoding: add track_caller to panic-able sitesby Nick Johnson · 0276325e · Feb 23, 2026 · 1 fileMessage 65 · AdequateInformational 15Details
Commit message · Nick Johnson

consensus_encoding: add track_caller to panic-able sites

Defensively added to the Decoder trait itself since the performance
impact is negligible.

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

This commit adds Rust's #[track_caller] attribute to two methods in a decoding trait. This is a diagnostic improvement: if the code ever panics, the error message will point to the caller's location instead of deep inside the library. It does not change what the code does, what data it accepts, or whether it panics. There is no security fix here.

AI review queuedRe-release without rc suffixby Tobin C. Harding · 418685a9 · Feb 23, 2026 · 20 filesMessage 90 · StrongInformational 20Details
Commit message · Tobin C. Harding

Re-release without rc suffix

Turns out that the `-rc.0` suffix causes way more problems than it
solves because of how `cargo` resolves the version numbers and what we
intended on using the RC releases for.

In brief

- We wanted to be able to do breaking changes if required
- We wanted to signal that these releases were almost there (TM)
- We wanted to be able to do downstream testing including releasing
downstream crates with the RC releases as part of their public API.

In hindsite we messed up and should have just kept iterating as normal
until we were ready.

Re-release the whole stack without any rc suffix's. However keep
`bitcoin 0.33.0-beta` because we want 0.32.0 to be the latest stable
release and its important that it shows as such on docs.rs

Also, for pre-1.0 crates that had an rc release just jump to the next
version i.e., `io 0.4.0-rc.0` goes to `io 0.5.0`. Just for good
measure.


crate | latest stable | latest RC | with this applied
-----------------------------------------------------------
consensus_encoding 0.0.0 1.0.0-rc.3 0.1.0
units 0.2.0 1.0.0-rc.4 0.3.0
primitives 0.101.0 1.0.0-rc.2 0.102.0
hashes 0.19.0 - 0.20.0
io 0.3.0 0.4.0-rc.0 0.5.0
base58ck 0.3.0 - 0.4.0


bitcoin - 0.33.0-beta.0 to be yanked. Release as 0.33.0-beta

p2p - updated deps, unrelased so no other changes.
internals - not touched (currently 0.5.0)
chacha20_poly1305 - not touched

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
second-pass: unusually broad change
AI analysis · Informational 20/100

This commit is a routine release-management change for the rust-bitcoin project. It re-releases several crates without the '-rc' (release candidate) suffix in their version numbers and updates internal dependency version requirements accordingly. There are no code logic changes, bug fixes, or security patches in the diff—only version numbers, lock files, changelogs, and README text.

Security candidatebitcoin: preserve parity for XOnlyPublicKeyby jrakibi · f4e9fcae · Feb 22, 2026 · 1 fileMessage 80 · StrongLow 49Details
Commit message · jrakibi

bitcoin: preserve parity for XOnlyPublicKey

both From impls for XOnlyPublicKey lose parity because they call `from_secp(`,
which defaults to Parity::Even. we now preserve parity by extracting it from
x_only_public_key() instead

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 · Low 49/100

This commit fixes a bug in how X-only public keys were created from full public keys. An X-only key is just the X coordinate of a point, but a point can have an even or odd Y coordinate (parity). The old code always assumed even parity, which could silently produce the wrong key for odd-parity inputs. The fix preserves the actual parity from the source key.