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 queue1033AI analyses
184commits · 30 days
403commits · 60 days
1283commits · 180 days
2062commits · 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 Bagot640192359068
Tobin C. Harding40965156063
jrakibi944963068
Nick Johnson18920112059
Andrew Poelstra512035075
Jamil Lambert, PhD1141849061
Fmt Bot311422045
Trevor Arjeski111111069
Shing Him Ng31724056
Ismail Daif22612050
satsfy (Renato Britto)17612066
Martin Habovstiak27512069
Analysis record

Published AI watches

Last scanned 3 minutes 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 candidatebitcoin: Split cfg(all(...)) into stacked attributesby Ismail Daif · d57e8346 · Mar 31, 2026 · 9 filesMessage 50 · ThinInformational 15Details
Commit message · Ismail Daif

bitcoin: Split cfg(all(...)) into stacked attributes

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

This commit is a code-style refactor. It replaces single-line Rust conditional annotations like #[cfg(all(A, B))] with stacked separate lines like #[cfg(A)] #[cfg(B)]. The behavior is identical; no security issue is introduced or fixed.

Security candidatehashes: Adjust hash newtype doc commentsby Mitchell Bagot · 7064e44d · Mar 31, 2026 · 4 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

hashes: Adjust hash newtype doc comments

In hashes, a handful of the transparent_newtype invocations for hashes
use doc comments that are missing backticks around names or are
generally unclean. These should be normalised to suit typical style.

Adjust doc comments on sha256t, sha256d, muhash and siphash hash
newtypes.

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 fixes the wording and formatting of documentation comments in four source files. It adds backticks around hash function names like `SHA256d` and `SipHash24` so the generated documentation looks consistent. No code behavior changes.

Security candidateMove transparent_newtype to use include!by Mitchell Bagot · ac8f61f8 · Mar 31, 2026 · 17 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Move transparent_newtype to use include!

The transparent_newtype macro from internals is one of many cross-crate
macros which we'd like to remove over time.

Copy transparent_newtype macro to include directory. Replace all uses
of internals::transparent_newtype with include! calls and direct usage
of the macro.

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

This commit is a routine internal refactoring of the rust-bitcoin project. It moves a helper macro called transparent_newtype from one internal crate to a shared include file, then updates all crates to use the shared version. There is no change to user-facing behavior, no bug fix, and no security relevance.

AI review queuedci: switch to rbmt api commandby Nick Johnson · 752c98ee · Mar 31, 2026 · 36 filesMessage 72 · AdequateInformational 15Details
Commit message · Nick Johnson

ci: switch to rbmt api command

API files have been moved into the package directories themselves instead
of the shared root level api/ directory.

72/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides an explanatory body
Why it was queued
second-pass: unusually broad change
AI analysis · Informational 15/100

This commit is purely a housekeeping change to the project's continuous integration (CI) setup. It moves the files that record the library's public API surface from a shared top-level directory into each individual crate's own directory, and switches the CI workflow to use a different command to check those API files. There is no change to the actual Bitcoin library code that users run, and no security impact.

Security candidateRun the formatterby Tobin C. Harding · 8ba4bbfe · Mar 31, 2026 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Tobin C. Harding

Run the formatter

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit is purely a code formatting cleanup. It only reorders an import statement, removes extra blank lines, and reformats an array literal to fit style guidelines. There are no functional changes to the SHA-256 hashing code.

Security candidatehashes: fmt skip a bunch of stuffby Tobin C. Harding · 3be528f5 · Mar 31, 2026 · 1 fileMessage 68 · AdequateInformational 15Details
Commit message · Tobin C. Harding

hashes: fmt skip a bunch of stuff

Add attribute to a bunch of stuff recently introduced in #5888.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only adds `#[rustfmt::skip]` annotations to three places in a SHA-256 cryptographic implementation file. These annotations tell Rust's automatic code formatter to leave those blocks alone. There is no change to program logic, constants, memory handling, or any behavior that could affect security.

AI review queuedconsensus_encoding: Move errors to submoduleby Tobin C. Harding · 34281a57 · Mar 31, 2026 · 5 filesMessage 80 · StrongInformational 15Details
Commit message · Tobin C. Harding

consensus_encoding: Move errors to submodule

In order to make the HTML docs render more clearly it would be nice to
have all the errors separate. We recently introduced a policy for
doing this repo wide.

Add a public `error` submodule and re-export all errors at the crate
root.

Because of anomalies in how `cargo` renders docs for re-exports
between types and modules explicitly use `doc(inline)` and `no_inline`
so we get exactly the behaviour we desire.

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

This commit is a pure code reorganization: it moves existing error type definitions from several source files into a new dedicated `error` submodule and re-exports them at the crate root. There are no functional changes to how data is encoded or decoded, no bug fixes, and no security-relevant behavior changes.

AI review queuedconsensus_encoding: Add whitespace between type and functionby Tobin C. Harding · cdf163e9 · Mar 31, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Tobin C. Harding

consensus_encoding: Add whitespace between type and function

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

This commit adds a single blank line in source code between a type declaration and a function declaration for formatting consistency. It does not change any behavior, logic, or security properties of the software.

AI review queuedconsensus_encoding: Set 100 column widthby Tobin C. Harding · d62cf812 · Mar 31, 2026 · 5 filesMessage 68 · AdequateInformational 15Details
Commit message · Tobin C. Harding

consensus_encoding: Set 100 column width

`rust-bitcoin` project uses 100 column width for rustdoc. Now that
`consensus_encoding` is a hair width away from 1.0 update all the
rustdocs to use it.

However do not be dogmatic; if a doc is better with slightly
different colum width then do so.

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 reformats documentation comments (rustdoc) in five source files to match the project's preferred 100-column line width. No executable code, logic, or behavior was changed. It is a cosmetic/style-only change with no security relevance.

AI review queuedconsensus_encoding: Pluralize rustdoc titleby Tobin C. Harding · 42e93486 · Mar 31, 2026 · 2 filesMessage 35 · OpaqueInformational 15Details
Commit message · Tobin C. Harding

consensus_encoding: Pluralize rustdoc title

35/100 · OpaqueMessage clarity
✓ Descriptive subject! No meaningful explanatory body
Why it was queued
parser or protocol pathsecond-pass: opaque commit messagesecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only fixes grammar in code comments (changing 'Push' to 'Pushes' and 'Complete' to 'Completes'). It does not change any actual program logic, function behavior, or security properties.

AI review queuedMatch manifest nightly versionby Nick Johnson · ad02d5c6 · Mar 30, 2026 · 1 fileMessage 35 · OpaqueInformational 15Details
Commit message · Nick Johnson

Match manifest nightly version

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

This commit simply updates a pinned nightly Rust compiler version in a project file from one weekly snapshot to the next. It is a routine tooling/maintenance change with no visible security relevance.

Security candidateIntroduce From conversion for PrivateKey -> Keypairby Mitchell Bagot · e8069cef · Mar 30, 2026 · 7 filesMessage 85 · StrongInformational 18Details
Commit message · Mitchell Bagot

Introduce From conversion for PrivateKey -> Keypair

In order to reduce the reliance on as_inner for creating keypairs
from private keys, a method of generating Keypairs from PrivateKey
objects should be introduced.

Introduce from_private_key and to_private_key on Keypair.
Introduce From<PrivateKey> for Keypair type.
Replace uses of from_secret_key and to_secret_key with from_private_key
and to_private_key.

85/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Explains rationale or failure mode
Why it was queued
secret or key materialcryptography-sensitive pathsigning or wallet path
AI analysis · Informational 18/100

This commit is a routine API cleanup in the rust-bitcoin library. It adds new helper methods so that developers can create cryptographic keypairs directly from PrivateKey objects instead of reaching into the underlying secp256k1 secret key. The change does not fix a bug, close a security hole, or alter cryptographic behavior; it only makes the public API more convenient and less error-prone.

Security candidateAdd Drop to PrivateKey and Keypairby Mitchell Bagot · aa597803 · Mar 27, 2026 · 1 fileMessage 68 · AdequateLow 27Details
Commit message · Mitchell Bagot

Add Drop to PrivateKey and Keypair

With Copy removed from both PrivateKey and Keypair, we can now
introduce drop on the types. This allows us to call through to
non_secure_erase on the underlying type when these types are dropped.

Introduce Drop implementation for Keypair and PrivateKey.

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

This commit adds automatic memory clearing when Bitcoin private key objects are destroyed. It is a defensive hardening change, not a fix for an active vulnerability. The change reduces the chance that secret key material lingers in memory after use, but the commit itself does not claim to fix any known exploit.

Security candidateRemove Copy from PrivateKeyby Mitchell Bagot · 90ae326a · Mar 27, 2026 · 3 filesMessage 58 · ThinInformational 22Details
Commit message · Mitchell Bagot

Remove Copy from PrivateKey

The PrivateKey type holds secret data, much like the keypair types. As
such, we would like to reduce the likelihood of data copies by
removing Copy. This also necessitates changes to various conversion
functions.

Remove Copy from PrivateKey. Adjust conversion and constructor
functions to take references instead of owned key objects.

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 22/100

This commit removes the automatic byte-by-byte copying trait (Copy) from the PrivateKey type in the rust-bitcoin library. The goal is defensive: secret key material is less likely to be silently duplicated in memory, which can reduce the number of places an attacker or memory-dump tool might find leftover private key bytes. It is a hardening change, not a fix for an active exploit or a specific bug.

Security candidateRemove Copy from TweakedKeypair and Keypairby Mitchell Bagot · bbf6e504 · Mar 27, 2026 · 4 filesMessage 68 · AdequateLow 37Details
Commit message · Mitchell Bagot

Remove Copy from TweakedKeypair and Keypair

The keypair types hold secret data. While we can't eliminate unwanted
copies of data by the compiler, we can reduce their likelihood by
eliminating Copy from the type types. According to the linting rules
this also requires some changes to conversion functions.

Remove Copy from Keypair and TweakedKeypair.
Rename to_keypair to into_keypair on Keypair.

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

This commit removes the automatic 'Copy' trait from two Bitcoin key types that hold secret data (Keypair and TweakedKeypair). In Rust, 'Copy' makes it easy for the compiler to silently duplicate values, which can increase the chances of secret key material being copied around in memory unexpectedly. The change also renames a method from 'to_keypair' to 'into_keypair' and adjusts related code. It is a defensive hardening measure, not a fix for a known active exploit.

AI review queuedInline merkle node encodingby Jamil Lambert, PhD · f5a49f10 · Mar 27, 2026 · 2 filesMessage 50 · ThinInformational 15Details
Commit message · Jamil Lambert, PhD

Inline merkle node encoding

Add inline to the merkle node encoder, decoder and constructors to match
BlockHash.

50/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit only adds Rust compiler hints (`#[inline]`) to a few small functions that convert Bitcoin merkle node values to and from bytes. It does not change what the code does, only gives the compiler a stronger suggestion to embed these tiny functions at call sites. There is no security relevance.

AI review queuedUse encoding:: prefix on encoding traitby Jamil Lambert, PhD · 04c7d01c · Mar 27, 2026 · 4 filesMessage 68 · AdequateInformational 15Details
Commit message · Jamil Lambert, PhD

Use encoding:: prefix on encoding trait

It makes it clearer that the trait is from another crate if
we use one level of path. This is also more consistent with other
`encoding` usage in the repo.

Update the import statements. Including using `as _` since these traits
are now only imported for their methods.

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

This commit is a routine code cleanup in the rust-bitcoin library. It changes how certain traits from another crate are imported and referenced, adding an 'encoding::' prefix and using 'as _' for traits that are only needed for their methods. There is no functional change to how the software behaves, and no security issue is present.

AI review queuedMake constructor constby Jamil Lambert, PhD · 0b6c7f7b · Mar 27, 2026 · 1 fileMessage 28 · OpaqueInformational 15Details
Commit message · Jamil Lambert, PhD

Make constructor const

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

This commit changes a single Rust function from a regular function to a constant-evaluable function. It allows the decoder constructor to be used in compile-time contexts, but it does not fix any security bug or change runtime behavior.

AI review queuedMove Encodable and Decodable trait implsby Jamil Lambert, PhD · 39889ed1 · Mar 27, 2026 · 2 filesMessage 60 · AdequateInformational 15Details
Commit message · Jamil Lambert, PhD

Move Encodable and Decodable trait impls

Put the merkle node encoding trait impls first to match the BlockHash
cleanup.

Code move only.

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing or wallet pathsecond-pass: security-sensitive path
AI analysis · Informational 15/100

This commit simply rearranges the order of code blocks in two files. It moves the implementations of the Encodable and Decodable traits so they appear before the helper encoder/decoder struct definitions, matching a previous cleanup done for BlockHash. No logic, behavior, or security properties are changed.

Security candidateRun the formatterby Jamil Lambert, PhD · 6ed905d0 · Mar 27, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Jamil Lambert, PhD

Run the formatter

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only runs an automatic code formatter (rustfmt) across three source files. It changes whitespace, line breaks, and indentation but does not alter any program logic, function behavior, or security properties. There is no security issue here.

AI review queuedUpdate API filesby Mitchell Bagot · 66306a21 · Mar 27, 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 records that three error types now automatically implement Clone and equality comparison traits. No actual source code behavior changed, and nothing in the commit suggests a security fix or vulnerability.

AI review queuedReplace Debug impl with derive on ParsePrimitiveError wrappersby Mitchell Bagot · 3babc8b6 · Mar 27, 2026 · 2 filesMessage 73 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Replace Debug impl with derive on ParsePrimitiveError wrappers

We currently have three public error types which wrap the
ParsePrimitiveError type. Currently, none of these have trait derives
on them, and thus do not implement our required traits. Now that
ParsePrimitiveError has the correct traits, adding the derive attribute
will provide correct trait impls for us.

Remove manual Debug impl and add derive for Debug, Clone, PartialEq and
Eq to ParseBlockError, ParseHeaderError and ParseTransactionError.

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

This commit is a routine code cleanup. It removes hand-written Debug formatting code for three error types and instead lets Rust automatically generate Debug, Clone, PartialEq, and Eq behavior. There is no security-relevant change here.

Security candidateRun the formatterby Mitchell Bagot · 324bc206 · Mar 27, 2026 · 3 filesMessage 28 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

Run the formatter

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
cryptography-sensitive path
AI analysis · Informational 15/100

This commit only runs an automated code formatter (rustfmt) across three files. It changes whitespace, line breaks, and indentation but does not alter any program logic, function behavior, or security-relevant code paths.

Security candidateIntroduce ecdsa signing function for PrivateKeyby Mitchell Bagot · 7a057305 · Mar 27, 2026 · 3 filesMessage 85 · StrongInformational 19Details
Commit message · Mitchell Bagot

Introduce ecdsa signing function for PrivateKey

In psbt, ecdsa signing is required to generate the partial signatures
from the bip32 derivation paths. At present, this requires the user to
call through to secp256k1 to use the ecdsa::sign function with the
inner secp key type. Since we want to avoid the as_inner accessors
entirely, a method for ecdsa signing with a wrapped PrivateKey is
necessary.

Introduce raw_ecdsa_sign function on PrivateKey to sign a message and
return a secp256k1::ecdsa::Signature.
Adjust sign-tx-segwit-v0 example to use signing function on PrivateKey.

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

This commit adds a convenience method so that a Bitcoin private key object can directly create an ECDSA signature, instead of forcing callers to reach into the underlying secp256k1 library. It also updates internal code and an example to use the new method. There is no obvious security bug in the change itself, but it slightly changes how nonces are generated for signatures: the new helper uses a 'low-R' nonce-grinding scheme, whereas the previous PSBT code used the default signing path. That is generally a compatibility improvement, not a vulnerability, but it is a behavior change worth noting.

Security candidateRemove various assertions from BIP-174 testby Mitchell Bagot · fa7e5aa0 · Mar 27, 2026 · 1 fileMessage 78 · AdequateInformational 15Details
Commit message · Mitchell Bagot

Remove various assertions from BIP-174 test

The BIP-174 test case makes various assertions based on the test
vector from the BIP. Since we want to use low_r signing for PSBTs,
the signatures will be non-deterministic, and will thus not match the
BIP. Since this cascades, this requires the removal of various
assertions from the test case.

Remove test vector assertions that will fail with low_r ecdsa signing.

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

This commit only changes a test file. It removes some test assertions that compared the library's PSBT output against fixed BIP-174 test vectors, because the project is switching to a different default signature style (low_r) that produces different but still valid signatures. No production code is changed, and no security vulnerability is introduced or fixed.