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
1283commits · 180 days
2053commits · 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 38 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 candidateIntroduce serialisation functions for PublicKeyby Mitchell Bagot · de942b87 · Mar 24, 2026 · 2 filesMessage 80 · StrongInformational 19Details
Commit message · Mitchell Bagot

Introduce serialisation functions for PublicKey

Currently, the bitcoin::PublicKey type cannot be serialised in a
controlled manner without first converting to an underlying secp256k1
type. Since we want to avoid users needing secp types, serialisation
should be possible with just the bitcoin wrapper type.

Introduce serialize_compressed and serialize_uncompressed functions
on PublicKey that pass through to the corresponding secp functions.

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

This commit adds two new helper methods, serialize_compressed and serialize_uncompressed, to the bitcoin::PublicKey type. Previously, users had to reach into the underlying secp256k1 library to serialize a public key. The change simply wraps that existing behavior in a more convenient API and updates internal callers to use the new methods. There is no indication of a security bug being fixed.

Security candidateAdd to_secret_bytes to PrivateKeyby Mitchell Bagot · 9feba0df · Mar 24, 2026 · 1 fileMessage 58 · ThinInformational 16Details
Commit message · Mitchell Bagot

Add to_secret_bytes to PrivateKey

Private keys have statically-known length of 32 bytes, unlike public
keys. To simplify roundtrips with from_byte_array and secp equivalents,
a function to return the fixed length array should be present.

Introduce to_secret_bytes function to PrivateKey. Replace to_vec range
implementation with to_secret_bytes().to_vec().

58/100 · ThinMessage clarity
✓ Descriptive subject✓ Provides detailed explanatory context
Why it was queued
secret or key materialcryptography-sensitive path
AI analysis · Informational 16/100

This commit adds a new helper method, to_secret_bytes, to the PrivateKey type in the rust-bitcoin library. It returns a private key as a fixed 32-byte array instead of a variable-length vector. The existing to_secret_vec method is rewritten to use the new helper. There is no visible security fix or behavior change; it is a routine API convenience addition.

Security candidateMake with_serialized a public function on PublicKeyby Mitchell Bagot · 2c08753a · Mar 24, 2026 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · Mitchell Bagot

Make with_serialized a public function on PublicKey

The with_serialized function on PublicKey allows for a callback
function to be called with the key serialised in a form based on the
compressedness flag. At present, this is only used internally in the
key module.

Make with_serialized pub and add docs.

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 commit simply changes an existing internal helper function to be publicly usable and adds documentation and examples. It does not fix a bug, change behavior, or introduce any new security-sensitive logic. The function already existed and behaved the same way; only its visibility changed from private to public.

Security candidateIntroduce roundtrip tests for all key typesby Mitchell Bagot · 65258cd1 · Mar 24, 2026 · 1 fileMessage 90 · StrongInformational 15Details
Commit message · Mitchell Bagot

Introduce roundtrip tests for all key types

In order to make sure that the key types can be converted to/from their
corresponding secp types, add tests that roundtrip from bitcoin ->
secp -> bitcoin for all main key types.

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

This commit only adds new automated tests that check whether Bitcoin-style cryptographic keys can be converted to and from the underlying secp256k1 library's key types. It does not change any production code, fix a bug, or alter behavior. There is no security issue here.

Lower-priorityCI: Delete the readmeby Tobin C. Harding · 20f2e382 · Mar 23, 2026 · 1 fileMessage 63 · AdequateInformational 15Details
Commit message · Tobin C. Harding

CI: Delete the readme

The readme is stale now. Furthermore, when I originally wrote it I
thought the 20 job limit was per user as in the user pushing PRs but
its per user/org as in the thing holding each repo. So for us its per
`rust-bitcoin` org - all the repos and all the devs pushing to those
repos. Feels like we are too poor to have proper CI which is horeshit
right there.

Anyways, we are leaving GitHub soon so it doesn't matter now but lets
delete the stale readme before we go.

63/100 · AdequateMessage clarity
✓ Subject identifies a change✓ Uses a recognizable type or scope✓ Provides detailed explanatory context
Why it was queued
documentation-only discount
AI analysis · Informational 15/100

This commit simply deletes a stale README file inside the GitHub workflows folder. It contains only documentation about CI job names and GitHub Actions usage limits. No code, configuration, or security controls were changed.

Security candidatehashes: Add SHA256d dispatch and public APIby jrakibi · 629cfcb7 · Mar 23, 2026 · 2 filesMessage 68 · AdequateInformational 16Details
Commit message · jrakibi

hashes: Add SHA256d dispatch and public API

Add sha256d dispatcher that currently handles 2-way ARM,
with the idea to extend to 4-way, 8-way, and 2-way x86.
we also expose a public API that will be used in merkle
root computation (in a follow up PR)

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

This commit adds a new performance-oriented function for computing many double-SHA256 hashes at once, with a special two-at-a-time path for ARM CPUs that support SHA2 hardware instructions. It also exposes that function as a new public API. There is nothing in the diff that fixes a bug, checks bounds incorrectly, or introduces an obvious security flaw; it appears to be a routine optimization and API addition.

Security candidatehashes: interleave two independent hashes for 2-way SHA256dby jrakibi · 0fbfbd14 · Mar 23, 2026 · 1 fileMessage 81 · StrongInformational 18Details
Commit message · jrakibi

hashes: interleave two independent hashes for 2-way SHA256d

ARM SHA256H/H2 instructions take 4 cycles to produce a
result. the next `SHA256H` needs the result of the current
one as input, so the CPU has to wait until it is ready.
(in Transform 2 for eg, 3 out of every 4 cycles are wasted
doing nothing)

we fill those wasted cycles by computing a second independent
hash alongside the first.

See https://developer.arm.com/documentation/PJDOC-466751330-7215/r4p1/
(Section 3.20) for Cortex-A76 instruction timings. The exact
latency may differ on other ARM chips but the concept is the
same

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive path
AI analysis · Informational 18/100

This commit is a performance optimization for SHA256 double hashing on 64-bit ARM processors. It rewrites a single-hash ARM hardware-accelerated routine to compute two independent hashes at the same time, filling otherwise wasted CPU cycles. There is no security bug being fixed and no new attack surface introduced; it is purely a speed improvement.

Security candidatehashes: Add optimized ARM SHA256d for 64-byte inputby jrakibi · c37ab856 · Mar 23, 2026 · 1 fileMessage 73 · AdequateInformational 16Details
Commit message · jrakibi

hashes: Add optimized ARM SHA256d for 64-byte input

Add the three transforms for sha256(sha256(64_bytes))

Transforms 1 & 2 compute the inner `sha256(64_bytes)`:

- Transform 1: 64 bytes already fill the first block (no
padding needed), so we apply 64 rounds of compression
normally.
After T1: state = state + initial_state

- Transform 2: the message schedule at this step is constant
and known in advance (64 bytes of padding), so
we precompute W[i]+K[i] into MIDS and apply 64 rounds (no
schedule expansion needed).
After T2: state = state + saved_T1_state
(state now contains sha256(64_bytes))

- Transform 3 computes sha256(output_of_T1_and_T2). The output
is 32 bytes, so the block contains 32 bytes and the rest is
known padding. we precompute the message
schedule for the known words (w8-w15) into FINS.
After T3: state = state + initial_state
(state now contains the sha256d result)

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 commit adds a new, highly optimized way to compute a double SHA-256 hash on 64-byte inputs for 64-bit ARM processors (aarch64) using special CPU instructions. It is a pure performance improvement and does not change any public APIs or fix any known bug. There is no indication in the commit that it addresses a security vulnerability.

Lower-prioritytest(p2p): Update deser tests for `AddrV2Payload`by rustaceanrob · cbfdb804 · Mar 23, 2026 · 1 fileMessage 67 · AdequateInformational 15Details
Commit message · rustaceanrob

test(p2p): Update deser tests for `AddrV2Payload`

67/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body
AI analysis · Informational 15/100

This commit only adds new unit tests for serializing and deserializing Bitcoin peer-to-peer address messages. It does not change any production code, fix a bug, or alter behavior. There is no security relevance.

Lower-priorityp2p: Implement `encoding` traits for `AddrV2Payload`by rustaceanrob · 514f36b0 · Mar 23, 2026 · 1 fileMessage 65 · AdequateInformational 17Details
Commit message · rustaceanrob

p2p: Implement `encoding` traits for `AddrV2Payload`

Vector counterpart of the previous commit.

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

This commit adds standard encoding and decoding support for a new P2P network message container (AddrV2Payload). It is a routine, vector-counterpart follow-up to a previous commit and does not appear to fix or introduce any security issue on its own.

Lower-priorityp2p: Implement `encoding` traits for `AddrV2Message`by rustaceanrob · 22b4c73f · Mar 23, 2026 · 1 fileMessage 81 · StrongLow 27Details
Commit message · rustaceanrob

p2p: Implement `encoding` traits for `AddrV2Message`

Member of `AddrV2Payload` which is ultimately apart of
`NetworkMessage`.

Some non-zero number of clients advertise services outside of 32 bits of
precision, which requires decoding arbitrarily large compact sizes. As
these integers do not represent collection lengths and will not be used
for allocation, this is acceptable.

ref: https://github.com/bitcoin/bitcoin/blob/4d7d5f6b79d4c11c47e7a828d81296918fd11d4d/src/protocol.h#L332
ref: https://github.com/bitcoin/bitcoin/issues/34768

81/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
AI analysis · Low 27/100

This commit adds encoding and decoding support for a Bitcoin peer-to-peer network address message type (AddrV2Message). It changes how the 'services' field is decoded so it can accept very large numbers sent by some real Bitcoin nodes, instead of being limited to 32-bit values. The commit message says this is safe because the value is not used to allocate memory. There is no direct evidence in the commit that this fixes a security vulnerability, but handling unexpectedly large input values is a common place where bugs can occur.

Security candidatekey: Rename PrivateKey::public_key to to_public_keyby Mitchell Bagot · d97484c4 · Mar 23, 2026 · 3 filesMessage 73 · AdequateInformational 20Details
Commit message · Mitchell Bagot

key: Rename PrivateKey::public_key to to_public_key

The public_key function on PrivateKey converts the key into a matching
PublicKey. Since this function is not a getter but a conversion
function, it should use the {to_,as_,into_} naming scheme. In this
case, to_public_key matches the naming used for the equivalent function
on the Keypair type.

Rename PrivateKey::public_key function to to_public_key, deprecating
the old function name.

73/100 · AdequateMessage clarity
✓ Specific, 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 20/100

This commit is a routine API cleanup: it renames a method on the PrivateKey type from public_key to to_public_key and keeps the old name as a deprecated alias. It does not change what the code does, only how callers spell the function name. There is no security bug being fixed.

AI review queuedconsensus_encoding: Error on byte-less end for VecDecoderby Mitchell Bagot · 4d6e7554 · Mar 23, 2026 · 1 fileMessage 73 · AdequateModerate 51Details
Commit message · Mitchell Bagot

consensus_encoding: Error on byte-less end for VecDecoder

In the existing encoding, Vec<T> would error when attempting to decode
an empty byte slice (i.e. one without a length prefix). In the new
consensus_encoding crate, a VecDecoder successfully decodes a
completely empty byte slice as 0 length Vec<T>. This difference in
behaviour manifests in various decoders throughout the stack and thus
results in differences in decoding behaviour.

Throw Eof error in VecDecoder::end() if no length prefix has been
provided to the decoder.

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 · Moderate 51/100

This commit fixes a behavioral mismatch in a new Bitcoin data-decoding library. Previously, the new decoder would silently accept an empty byte slice as an empty list, while the older code rejected it because it lacked a length prefix. The change makes the new decoder reject empty inputs too, preventing subtle parsing differences that could affect how transactions or network messages are interpreted across versions.

AI review queuedprimitives: Update API filesby Mitchell Bagot · da3f0930 · Mar 23, 2026 · 3 filesMessage 35 · OpaqueInformational 15Details
Commit message · Mitchell Bagot

primitives: 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 that list what public types and functions exist in the rust-bitcoin 'primitives' crate. No actual source code was changed, and nothing in the commit message or diff suggests a security fix or vulnerability. It is a routine housekeeping change.

Lower-priorityUpdate api.rs test filesby Mitchell Bagot · 75aa7122 · Mar 23, 2026 · 2 filesMessage 83 · StrongInformational 15Details
Commit message · Mitchell Bagot

Update api.rs test files

In order to reduce the change of regressions, the presence of the
Default impl and new on all decoder types should be checked in the api
test files for units and primitives.

Update api.rs test files in primitives and units to verify the presence
of Default impl and new function on all decoders.

83/100 · StrongMessage clarity
✓ Subject identifies a change✓ 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 test code to check that certain 'decoder' types can be created with a default value and a `new()` function. It does not change any production code, fix a bug, or alter behavior. There is no security issue here.

AI review queuedprimitives: Add Default and new to all decodersby Mitchell Bagot · 9804591b · Mar 23, 2026 · 2 filesMessage 80 · StrongInformational 15Details
Commit message · Mitchell Bagot

primitives: Add Default and new to all decoders

In order to simplify composition of decoder types, the Default trait
and new() function should be provided for all decoder types.

Add Default and new to BlockDecoder, HeaderDecoder, TxInDecoder and
TxOutDecoder.

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

This commit adds convenient ways to create certain Bitcoin data decoders (Default and new()) in the rust-bitcoin library. It does not change how data is parsed or validated, and there is no indication it fixes or introduces a security problem.

Security candidatehashes: use Rust-like syntax in hash type macrosby Jamil Lambert, PhD · 8b91b42f · Mar 23, 2026 · 11 filesMessage 45 · ThinInformational 15Details
Commit message · Jamil Lambert, PhD

hashes: use Rust-like syntax in hash type macros

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

This commit is a purely cosmetic refactor of how hash types are declared in the rust-bitcoin library. It changes the internal macro syntax from a custom list of numbers and flags to something that looks more like ordinary Rust code. There is no change to the actual hashing behavior, output, or public API.

Security candidate2026-03-22 automated rustfmt nightlyby Fmt Bot · 508986dc · Mar 22, 2026 · 76 filesMessage 45 · ThinInformational 15Details
Commit message · Fmt Bot

2026-03-22 automated rustfmt nightly

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

This is a routine automated code-formatting commit. It only changes whitespace, import order, line wrapping, and other stylistic details produced by the rustfmt tool. There are no functional changes, bug fixes, or security-related modifications.

Lower-priorityp2p: Convert encoders to ExactSizeEncoderby Mitchell Bagot · 3f238239 · Mar 21, 2026 · 9 filesMessage 68 · AdequateInformational 15Details
Commit message · Mitchell Bagot

p2p: Convert encoders to ExactSizeEncoder

With the recent introduction of p2p encoder types, various new encoders
have been implemented with encoder_newtype. Since encoder_newtype_exact
provides a strict superset of functionality on the encoder type, it
should be preferred where possible.

Replace uses of encoder_newtype with encoder_newtype_exact where the
wrapped encoder type can be trivially determined as an exact size.

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

This is a routine internal code cleanup in the rust-bitcoin peer-to-peer networking module. It swaps a general-purpose macro for a more specific one when building message encoders, because the newer macro can do everything the old one does and more. There is no user-facing behavior change and no security fix.

AI review queuedprimitives: Convert encoders to ExactSizeEncoderby Mitchell Bagot · 35c6e004 · Mar 21, 2026 · 3 filesMessage 68 · AdequateInformational 19Details
Commit message · Mitchell Bagot

primitives: Convert encoders to ExactSizeEncoder

For encoders, the use of the encoder_newtype_exact macro allows for the
implementation of the ExactSizeEncoder trait. This provides users with
the ability to determine the encoding length of types without needing
to perform the entire encoding process. The TxIn and TxOut encoders in
primitives can be made ExactSizeEncoders but are currently not.

Replace uses of encoder_newtype with encoder_newtype_exact for TxIn and
TxOut encoder types.

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

This is a routine library improvement that lets users ask 'how many bytes will this transaction input/output take up when encoded?' without actually encoding it. It adds a length method to two encoder types by switching to a macro that supports exact-size encoders. There is no security bug being fixed and no indication this change addresses any vulnerability.

Lower-priorityAutomated update to Github CI to rustc nightly-2026-03-20by Update Nightly Rustc Bot · e9524c66 · Mar 21, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Update Nightly Rustc Bot

Automated update to Github CI to rustc nightly-2026-03-20

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply updates the version of the Rust nightly compiler used by the project's automated GitHub CI tests from one weekly nightly build to the next. It changes only a single version string in a configuration file. There is no code change, no bug fix, and no security-relevant behavior change.

Lower-priorityAutomated update to Github CI to cargo-semver-checks version-0.47.0by Update cargo-semver-checks Bot · 9a9a9f47 · Mar 21, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Update cargo-semver-checks Bot

Automated update to Github CI to cargo-semver-checks version-0.47.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.46.0 to 0.47.0. It changes one line in a workflow configuration file and has no effect on the actual Bitcoin library code, runtime behavior, or security.

AI review queuedinternals, hashes, primivties: clean up optional depsby Nick Johnson · cecf021c · Mar 20, 2026 · 3 filesMessage 85 · StrongInformational 15Details
Commit message · Nick Johnson

internals, hashes, primivties: clean up optional deps

If you use the `dep:OPTIONAL_DEP` syntax in a package's feature, then
the implicit feature flag for the optional dependency is disabled. No need
to tell end users to avoid it.

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
second-pass: broader security terminology
AI analysis · Informational 15/100

This commit is a routine cleanup of how optional dependencies are declared in three Rust package configuration files. It changes feature flags to use the modern `dep:` syntax and updates comments to be clearer. There is no change to actual program logic, no security fix, and no vulnerability.

Lower-priorityAutomated update to Github CI to rustc stable-1.94.0by Update Stable Rustc Bot · 918ef120 · Mar 20, 2026 · 1 fileMessage 50 · ThinInformational 15Details
Commit message · Update Stable Rustc Bot

Automated update to Github CI to rustc stable-1.94.0

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
AI analysis · Informational 15/100

This commit simply updates a single version number in a CI configuration file from Rust compiler version 1.93.1 to 1.94.0. It changes no application code, no cryptographic logic, and no user-facing behavior. There is no security relevance.

Lower-priorityUpdate the API text filesby Tobin C. Harding · 2a7b0168 · Mar 19, 2026 · 1 fileMessage 45 · ThinInformational 15Details
Commit message · Tobin C. Harding

Update the API text files

45/100 · ThinMessage clarity
✓ 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 only updates a generated text file that lists the public API surface of the crate. No actual source code, logic, or behavior changed. It is a documentation/tracking update, not a security fix or functional change.