RB
← All projectsRust Bitcoin

rust-bitcoin

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

BitcoinCryptographic librariesNormal
Repository coverage

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

524security candidates506second-pass queue2193AI analyses
148commits · 30 days
304commits · 60 days
1150commits · 180 days
2055commits · 365 days
Backfill bands
Aug 5 → Feb 6787 seen32 candidatesComplete
Feb 6 → Jun 6878 seen53 candidatesComplete
Jun 6 → Jul 6211 seen15 candidatesComplete
Jul 6 → Aug 5184 seen2 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

66/100 average clarity
489Strong · 80–100
1083Adequate · 60–79
566Thin · 40–59
151Opaque · 0–39
20security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
Mitchell Bagot649193645068
Andrew Poelstra21072145089
Tobin C. Harding41566410063
jrakibi944994068
Nick Johnson19121190060
Jamil Lambert, PhD11919116061
satsfy (Renato Britto)381527066
Fmt Bot331431045
Trevor Arjeski111111069
Shing Him Ng31731056
Ismail Daif22622050
Martin Habovstiak28527069
Analysis record

Published AI watches

Last scanned 48 minutes ago

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

build(deps): bump dtolnay/rust-toolchain

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

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

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

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

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

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

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

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

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

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

API hardening: removes `Copy` from public error types to preserve future flexibilityPolicy update: docs/policy.md now explicitly discourages `Copy` on error typesNo vulnerability fix: change is defensive/preventive, not reactive to a disclosed issue
457cb9b5by Andrew Poelstra+14−146 files
No security note in commit
Informational 18 AI analysisMessage 96 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Incorrect implementation of a documented size/length contractPotential for callers to over-allocate buffers or miscompute transaction/witness sizesComposite encoder used in consensus-critical serialization paths
914365b4by Nick Johnson+19−13 files
No security note in commit
Informational 18 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6809: addresses: Add `AddressParams` type and remove most uses of network types

This is a routine API refactoring in the rust-bitcoin library. It introduces a new AddressParams type and replaces most public uses of the older Network/NetworkKind types when creating or validating Bitcoin addresses. There is no security …

No memory-safety issues, cryptographic errors, or input-validation changes observedNo new unsafe blocks, no new dependencies, no new parsing of untrusted dataAPI surface change only: parameter types replaced with semantically equivalent AddressParams
81032b1aby Andrew Poelstra+208−16414 files
No security note in commit
Low 38 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6886: units: preserve original err summing `NumOpResult`

This patch fixes a bug in how rust-bitcoin adds up a list of numeric operation results. Previously, if any item in the list already carried an error (for example, dividing by zero), the summing code would overwrite that error and falsely r…

Error-type confusion / misattribution in arithmetic result aggregationLoss of original failure context across iterator foldPotential for downstream logic to act on wrong `MathOp`/`MathErrorKind`
4af1ee1dby Andrew Poelstra+23−191 file
No security note in commit
Informational 15 AI analysisMessage 100 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6618: ci: disable fail-fast in weekly rustc update crons

This commit changes two GitHub Actions workflow files used for weekly automated Rust toolchain updates. It adds `fail-fast: false` so that if one branch's update job fails, the other branch jobs continue running instead of all being cancel…

c0a70548by Andrew Poelstra+2−02 files
No security note in commit
Moderate 62 AI analysisMessage 91 · Strong
RB Rust Bitcoinrust-bitcoin BitcoinCryptographic libraries

Merge rust-bitcoin/rust-bitcoin#6884: units: Fix div_by_fee_rate_floor precision

This commit fixes a precision bug in a Rust Bitcoin library function that calculates how much transaction weight a given amount of money can afford at a given fee rate. The old code rounded the fee rate up to a coarser unit (satoshis per k…

Incorrect fee-rate-to-weight conversion leading to understated affordable weightInteger rounding direction (ceil) used as divisor in floor division causing off-by-one or larger precision lossAddition of overflow handling for Weight::MAX
9caad2c1by Andrew Poelstra+23−52 files
Vendor flagged security relevance
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6866: units: fix abs locktime IncompatibleTimeError docby Andrew Poelstra · 23e073a1 · Sep 14, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6866: units: fix abs locktime IncompatibleTimeError doc

028087658eb6fadd90630f4686a747570d50bee8 units: fix abs locktime IncompatibleTimeError doc (satsfy (Renato Britto))

Pull request description:

The summary said error was caused by user attempting to satisfy a lock-by-height lock using height (?), which is not coherent.


ACKs for top commit:
tcharding:
ACK 028087658eb6fadd90630f4686a747570d50bee8
apoelstra:
ACK 028087658eb6fadd90630f4686a747570d50bee8; successfully ran local tests


Tree-SHA512: e940ecdca7ef0e29aac70a4bf0e4c1de505100ea7a7052ce1b03cc14e9c1155cace68401d778711456b306e214a071f485ead973f41a8768abb5296be8e036a2

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Lower-priorityMerge rust-bitcoin/rust-bitcoin#6857: units: use amount constants in encoding testsby Andrew Poelstra · 85974694 · Sep 13, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6857: units: use amount constants in encoding tests

1452bb3b687daae34aa64c3568aa9ad619ce35ea units: use amount constants in encoding tests (satsfy (Renato Britto))

Pull request description:

One thing that bothered me today it that encoding tests built 1 bitcoin and the money supply cap by hand with `from_sat`. But now that consts have be created for it, we can use `ONE_BTC` and `MAX_MONEY` throughout.


ACKs for top commit:
tcharding:
ACK 1452bb3b687daae34aa64c3568aa9ad619ce35ea
apoelstra:
ACK 1452bb3b687daae34aa64c3568aa9ad619ce35ea; successfully ran local tests


Tree-SHA512: f2b60295d6f40ede1239cd5406decb51f9532ad28cd3f1879564468aedaf3ac1af2254c6e4ad39beec1eecd537dc793b41b6e79cb0629f8e3b39008efb15e0c8

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
AI review queuedbuild(deps): bump taiki-e/install-action from 2.82.11 to 2.83.2by dependabot[bot] · 35095071 · Sep 13, 2026 · 2 filesMessage 93 · StrongInformational 15Details
Commit message · dependabot[bot]

build(deps): bump taiki-e/install-action from 2.82.11 to 2.83.2

Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.82.11 to 2.83.2.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/5ebac0d9522d786674368e47e92963ba13f2c376...43aecc8d72668fbcfe75c31400bc4f890f1c5853)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
dependency-version: 2.83.2
dependency-type: direct:production
update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

93/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discountautomated dependency-update discountsecond-pass: broader security terminology
AI analysis · Informational 15/100

This is a routine automated update by Dependabot that bumps a third-party GitHub Action used in testing workflows from version 2.82.11 to 2.83.2. It only changes two lines in CI configuration files and does not touch any application code, cryptographic logic, or user-facing behavior.

Security candidateMerge rust-bitcoin/rust-bitcoin#6851: units: Remove amount parsing limitby Andrew Poelstra · 563f98f2 · Sep 13, 2026 · 6 filesMessage 96 · StrongLow 25Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6851: units: Remove amount parsing limit

76a18b1c104e9f1fe2a839364b7b015910241ee4 units: Remove amount parsing limit (Tobin C. Harding)

Pull request description:

The limit is somewhat arbitrary. It was introduced as a DoS protection. This sort of attack vector is not really our concern.

Fix: #6828


ACKs for top commit:
apoelstra:
ACK 76a18b1c104e9f1fe2a839364b7b015910241ee4; successfully ran local tests
Kixunil:
ACK 76a18b1c104e9f1fe2a839364b7b015910241ee4


Tree-SHA512: 5ba260435f7018b1eef2ecf3fc6a66543d7514c3d7e65542e834522537fef4f3801f1868c70311f0c4bc508c2e8f8f91fe16a92bea918d2fc468f6e525933dfe

96/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagemerge-commit duplicate discount
AI analysis · Low 25/100

This commit removes a 50-character limit on strings that can be parsed as Bitcoin amounts. The limit was originally added as a basic defense against denial-of-service (DoS) attacks using very long inputs. The maintainers decided the limit was arbitrary and that DoS protection is not this library's responsibility. The change means slightly longer strings can now be parsed, but the actual numeric range checks remain in place, so extremely large values still produce an out-of-range error.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6849: docs: update policy version gating attributeby Andrew Poelstra · df7402af · Sep 13, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6849: docs: update policy version gating attribute

3d3182133164eccdf72c86b13780d98ad0fb930a docs: update the version gating attribute (satsfy (Renato Britto))

Pull request description:

Reading `docs/policy.md`, I noticed the policy doc described `#[cfg(rust_v_1_60)]` conditionals set by `bitcoin/build.rs`. That build script is gone and no `rust_v_` cfg anymore. Their replacement `rust_version!` macro is in `internals/build.rs`.


ACKs for top commit:
tcharding:
ACK 3d3182133164eccdf72c86b13780d98ad0fb930a
apoelstra:
ACK 3d3182133164eccdf72c86b13780d98ad0fb930a; successfully ran local tests


Tree-SHA512: 16a283d20bf97a8738be48d243e343c49f58650334d9bb9121a61b60be00b0a04d9357de9840be6f362e3a805c25c66d7e7b04d8169f808347fcc145d9136ae8

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
documentation-only discountmerge-commit duplicate discount
Security candidateMerge rust-bitcoin/rust-bitcoin#6843: Release tracking PR: `internals 0.7.0`by Andrew Poelstra · a5310124 · Sep 13, 2026 · 20 filesMessage 91 · StrongInformational 15Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6843: Release tracking PR: `internals 0.7.0`

d3767a2ceea27d20f1f49c0cd9df97df8a6ca605 internals: Bump version to 0.7.0 (Tobin C. Harding)

Pull request description:

In preparation for release add a changelog entry, bump the version number, and update the lock files.


ACKs for top commit:
apoelstra:
ACK d3767a2ceea27d20f1f49c0cd9df97df8a6ca605; successfully ran local tests


Tree-SHA512: 7e3183be5b4e3cd36e979226253881a343976243fa8d9050b22745bf188fa53b6c21770459a103acbb6875faa494334e4273d3232c77022819c60f5384040a5d

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathmerge-commit duplicate discount
AI analysis · Informational 15/100

This commit is a routine release-management change. It bumps the version number of the `bitcoin-internals` crate from 0.6.0 to 0.7.0, updates the changelog, and refreshes lock files and dependency declarations across the workspace. There are no code changes, bug fixes, or security patches in the diff.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6859: units: fix `Target::from_compact` sign bit handlingby Andrew Poelstra · d6a9b71b · Sep 13, 2026 · 1 fileMessage 100 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6859: units: fix `Target::from_compact` sign bit handling

a8e6ce184c27ef4d731b845ac2721723289ea368 units: test Target::from_compact sign bit handling (satsfy (Renato Britto))
57d2b894b2bbdef66fb0d7021b995ebb91b8e6a2 units: fix Target::from_compact sign bit handling (satsfy (Renato Britto))

Pull request description:

Closes https://github.com/project-loupe/audit-rust-bitcoin/issues/72

If you try to set a very high mining difficulty using compact target with 1 or 2 exponent and the negative sign bit set, `from_compact` configured a tiny valid target instead of `Target::ZERO`. e.g. `0x01800000` returned `Target(128)` but should be zero because its compact target representation is negative.

This is because the first mantissa bit, bit 23, does not belong to mantissa and instead represents the sign of compact target number. So any compact target second byte (first mantissa byte) >= 0x80 (MSB == 1) with exponent 1 or 2 got a mistaken positive value in `from_compact` instead of zero.

<img width="600" height="181" alt="image" src="https://github.com/user-attachments/assets/44a068ce-54ae-4c9e-9ad1-c9226ff0c917" />

[Read this article](https://developer.bitcoin.org/reference/block_chain.html#target-nbits).

Why exponent 1 and 2? The shift is `8 * (3 - exponent)`, so it moves bit 23 down to position 7 or 15, where the `mant > 0x7F_FFFF` check no longer looks. The exponent 3 shifts by zero and exponent 0 shifts the bit out entirely (correct). Bitmasking was done with `0xFF_FFFF` when it should have been `0x7F_FFFF` to exclude that bit.


Compliments to my fuzzer.


ACKs for top commit:
apoelstra:
ACK a8e6ce184c27ef4d731b845ac2721723289ea368; successfully ran local tests


Tree-SHA512: 74263aad44c01cb5a979ce11070588b3403258a2d66b534a6b6d8467f382a0a742e3ad63f652017b221da971566d2fc3e71d01f4ae3e0cb4e53db92e8097c90e

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencemerge-commit duplicate discount
Security candidateMerge rust-bitcoin/rust-bitcoin#6871: Remove uses of `Index` on `secp256k1::SecretKey`by Andrew Poelstra · 61626a16 · Sep 12, 2026 · 2 filesMessage 91 · StrongInformational 19Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6871: Remove uses of `Index` on `secp256k1::SecretKey`

72d03eb1cec3daf26290fd0913140915d03ce1b2 Remove uses of Index on secp256k1::SecretKey (Mitchell Bagot)

Pull request description:

The Index impl on secp256k1::SecretKey is considered upstream to be something we want to remove. In preparation for that, we should replace relevant uses of that trait with equivalent as_secret_bytes() calls.

Remove uses of the Index trait on the secp256k1::SecretKey.


ACKs for top commit:
apoelstra:
ACK 72d03eb1cec3daf26290fd0913140915d03ce1b2; successfully ran local tests


Tree-SHA512: d9f692403791c3a075a1fd2cc98fe3a62bebf6a7dcc58c8b93fbf62207e576c16fd304d9462156910fbef2ab113ae9d0f3631b9babd4129390445cfdb568b6c7

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
cryptography-sensitive pathmerge-commit duplicate discount
AI analysis · Informational 19/100

This is a small code cleanup change in a Bitcoin cryptography library. It replaces an older way of reading secret key bytes with a newer, more explicit method. There is no direct evidence in the commit that this fixes an active security bug, but it removes reliance on a trait that upstream developers want to eliminate, likely because it is considered a poor API for handling secret data.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6865: units: fix relative locktime error docsby Andrew Poelstra · e19739bc · Sep 12, 2026 · 1 fileMessage 91 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6865: units: fix relative locktime error docs

cb28d286d94b1c75e00880c445d3ddcd510dc102 units: fix inverted relative locktime error docs (satsfy (Renato Britto))

Pull request description:

Originates from observation at https://github.com/rust-bitcoin/rust-bitcoin/pull/6854#discussion_r3981435641

`Incompatible` docs name the wrong lock type. `is_satisfied_by_height` errors on lock-by-time locks, not lock-by-height. Also links each error to its method.


ACKs for top commit:
apoelstra:
ACK cb28d286d94b1c75e00880c445d3ddcd510dc102; successfully ran local tests


Tree-SHA512: c33dccbc4ffe4e831e8e8e3288afa5beb0d4473c5a32e0b04509b57f436d805d3ca816dd1428ea9d6d38325bc5e4ca92625a1286df40069e8b7c6bfbe65f0e9c

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Security candidateMerge rust-bitcoin/rust-bitcoin#6858: base58: saturate the reserve len multiplicationby Andrew Poelstra · aa91cf66 · Sep 12, 2026 · 1 fileMessage 100 · StrongLow 37Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6858: base58: saturate the reserve len multiplication

898da6ed12fcef49180d4b622d1a0a4dd5850f3d base58: saturate the reserve len multiplication (satsfy (Renato Britto))

Pull request description:

Use a `saturating_mul()` to handle overflows on `encoded_reserve_len`.

Didn't think this was worth a test because of the input needed to overflow this isn't allocatable on 64-bit and debug already catches it, so this is just fixing the release wrap.

Per https://github.com/project-loupe/audit-rust-bitcoin/issues/60

_This finding was discovered by [Project Loupe](https://github.com/project-loupe/loupe)._


ACKs for top commit:
apoelstra:
ACK 898da6ed12fcef49180d4b622d1a0a4dd5850f3d; successfully ran local tests


Tree-SHA512: 399b3e503a800de672ce8661b014d9ea2b60081ea427701542736f1e511167195a9c38415fe028edfe556d5f7961566f52580fa61c2941abe0a1d96a3e490779

100/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✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
memory safetymerge-commit duplicate discount
AI analysis · Low 37/100

This commit fixes a tiny but real arithmetic bug in the library's base58 string encoder. When asked to reserve memory for an extremely large encoded string, the old code could multiply two numbers together and silently wrap around to a small value on release builds (integer overflow), causing the program to reserve far less memory than needed and then write past the end. The fix uses saturating multiplication so the value stays at the maximum safe size instead of wrapping. The practical impact is limited because the input sizes needed to trigger this are not realistically allocatable on 64-bit systems, and debug builds already panic on overflow.

Security candidateMerge rust-bitcoin/rust-bitcoin#6874: p2p: fix ServiceFlags BitXor semanticsby Andrew Poelstra · 0de39318 · Sep 12, 2026 · 1 fileMessage 91 · StrongLow 49Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6874: p2p: fix ServiceFlags BitXor semantics

7d883da4013e5f787b30ce6844ecb20f562fa52e p2p: fix ServiceFlags BitXor semantics (wangjingshuiku)

Pull request description:

Fix `ServiceFlags` bitwise XOR implementations to perform actual XOR instead of delegating to `remove`.

`remove` uses `&= !other`, so reusing it for `BitXor` made toggling an unset flag a no-op. For example, `ServiceFlags::NONE ^ ServiceFlags::WITNESS` incorrectly returned `ServiceFlags::NONE`.

Implement `BitXor` and `BitXorAssign` directly using `^`, and add regression coverage for toggling both unset and set service flags.


ACKs for top commit:
apoelstra:
ACK 7d883da4013e5f787b30ce6844ecb20f562fa52e; successfully ran local tests


Tree-SHA512: f90258fc76651b6474609d3c2478b412c460754fbd02c3bee58cc3c09e46065c4be52ac5bd66c593a71f02fead779f75f6e2bb5ca378b0768b0340edb9ab9dbc

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
access controlmerge-commit duplicate discount
AI analysis · Low 49/100

This commit fixes a bug in how the rust-bitcoin library handled the XOR (exclusive-or) operator for Bitcoin network service flags. XOR is supposed to toggle bits on if they are off and off if they are on. The old code incorrectly used a 'remove' operation instead, which only turned bits off. That meant expressions like 'no flags XOR witness' wrongly stayed at 'no flags' instead of becoming 'witness'. The fix implements XOR directly with the proper bitwise operator and adds tests to prevent the bug from returning.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6873: ci: skip 7 very long miri testsby Andrew Poelstra · b58b6067 · Sep 12, 2026 · 2 filesMessage 100 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6873: ci: skip 7 very long miri tests

6e2b29311ada672293f30398789d44bbfddba8e2 ci: skip tests that never finish under miri (satsfy (Renato Britto))

Pull request description:

Closes https://github.com/rust-bitcoin/rust-bitcoin/issues/6864

The nightly miri job hits the five hour runner limit then GA kills it.

Why not run the limit anyway? Running them prevents the rest from being run. The timeout kills the job midway, so later crates never get executed at all.

So this PR skips from miri any the tests runs that take too long, to avoid timeout. We have 5 hour / 300 minutes budget.

Jobs skipped:
- The witness test that builds 4000001 elements, took 118.7 minutes and still unfinished when the runner died on [this run](https://github.com/rust-bitcoin/rust-bitcoin/actions/runs/34487698737).
- 6 NIST `long_msg` vectors tests that hash megabytes of data, 140 minutes across the six of them. They are generated by one macro, so two of them cost only a few minutes each but get gated with the rest.

The correct way to gate it is `#[cfg_attr(miri, ignore)]` https://github.com/rust-lang/miri#using-miri.

This PR is problematic because I can't prove the remaining tests would finish in the freed up time, but they certainly are not running now. That 6 NIST tests, had they not been skipped, may just fit within the time limit, but with the whole p2p crate supposed to be miri tested ahead of it that leaves us at only 13% time budget left.


ACKs for top commit:
apoelstra:
ACK 6e2b29311ada672293f30398789d44bbfddba8e2; successfully ran local tests


Tree-SHA512: 771c474a262b85ed708059beb08abb887fda2d5fc1f3e8d11c4e4fc612be7dcb4e2c553589f0c5ce079c2891ea7eae40e230aab1aef634850e4457993d4ec565

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Security candidateMerge rust-bitcoin/rust-bitcoin#6856: hashes: Fix Hkdf::expand panicby Andrew Poelstra · 4cc6f0d2 · Sep 11, 2026 · 1 fileMessage 96 · StrongModerate 62Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6856: hashes: Fix Hkdf::expand panic

9e71cce17be751cabd63f58eee27b9250ba80e9b hashes: Test Hkdf::expand at maximum output length (Jamil Lambert, PhD)
c61576fea722b164abd6aa230bf34f514078eda4 hashes: Fix Hkdf::expand panic at max length (Jamil Lambert, PhD)

Pull request description:

Hkdf::expand accepts an output buffer up to the RFC-5869 maximum of 255 * T::Hash::LEN bytes, but the per-block counter was a u8. At the maximum length the counter reaches 255 on the final block and the subsequent counter += 1 overflows.

Replace the u8 counter with a for loop which cannot overflow.

Closes project-loupe/audit-rust-bitcoin#5


ACKs for top commit:
satsfy:
tACK 9e71cce17be751cabd63f58eee27b9250ba80e9b
tcharding:
ACK 9e71cce17be751cabd63f58eee27b9250ba80e9b
apoelstra:
ACK 9e71cce17be751cabd63f58eee27b9250ba80e9b; successfully ran local tests


Tree-SHA512: 07838b649685d88d334dd05216ddbc11ba0f52a0a3e40f40bc52f5b55d75bd68d5ee14ffc666314d4bafd1013bae52b3598300b47095ab851fb33aabaa07d516

96/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference✓ Names security-relevant behavior explicitly
Why it was queued
memory safetymerge-commit duplicate discount
AI analysis · Moderate 62/100

This commit fixes a panic (sudden crash) in the HKDF key-derivation function when a caller asks for the maximum allowed output length. The previous code used an 8-bit counter that overflowed on the final block, causing the program to abort. The fix replaces the counter with a loop that cannot overflow. This is a denial-of-service-style bug: a valid, RFC-compliant request could crash the library.

Lower-priorityci: skip tests that never finish under miriby satsfy (Renato Britto) · 6e2b2931 · Sep 11, 2026 · 2 filesMessage 90 · StrongTriage 0Details
Commit message · satsfy (Renato Britto)

ci: skip tests that never finish under miri

The nightly miri job runs five hours and the runner is
timed out mid way without finish all remaining tests.

One witness test builds four million elements, and the
NIST long_msg vectors hash megabytes of data, both skipped
should free up enough miri time.

90/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Provides detailed explanatory context✓ Mentions testing or verification
Security candidateMerge rust-bitcoin/rust-bitcoin#6847: Manual weekly update to rustc (to nightly-2026-09-05) on masterby Andrew Poelstra · cb240433 · Sep 11, 2026 · 8 filesMessage 91 · StrongInformational 15Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6847: Manual weekly update to rustc (to nightly-2026-09-05) on master

d69e1768d77d6bb8fb6f42cad8956d096674c5d5 crypto: reformat with new rustfmt (satsfy (Renato Britto))
5259213e3b44afebe4c389644dcaa9aed9934b6e fuzz: drop the single element loop (satsfy (Renato Britto))
b4bec57170dda6e100600f86d26b3ef26134f704 p2p: remove else block, return early on conn err (satsfy (Renato Britto))
e04ef36d845b072214d08af4e4d5e90640680539 hashes: allow empty_enums for typestate markers (satsfy (Renato Britto))
2f03a216b4e83734e0a2c5c1e59754e10009dd6e hashes: mark deprecation on cpufeatures macro (satsfy (Renato Britto))
0dc4994d8d36b8994b0fa09bf0a74839d5707f8d units: use NonZero operands directly (satsfy (Renato Britto))
6698dc881ddb3c3382d233d730f046aa457ddae9 Automated update to rustc nightly-2026-09-05 (Update Nightly Rustc Bot)

Pull request description:

Supersedes https://github.com/rust-bitcoin/rust-bitcoin/pull/6833

Required many changes:
- units: drop `.get()` on NonZero operands
- hashes: allow `deprecated` on cpufeatures modules
- workspace: allow `empty_enums` for typestate markers
- p2p: let-else early return in example
- fuzz: unroll single element loop
- crypto: reformat with new nightly rustfmt


ACKs for top commit:
apoelstra:
ACK d69e1768d77d6bb8fb6f42cad8956d096674c5d5; successfully ran local tests
tcharding:
ACK d69e1768d77d6bb8fb6f42cad8956d096674c5d5


Tree-SHA512: 9200ea32bb5b3775a6ca9a5c604de503a68ed01feef3806ca6e18b9e4a426e34ac2de265f6ffad53b6921cd6514ae62e2c5cbf28afba0ffb7cef0b2a218091a6

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencecryptography-sensitive pathauthentication pathmerge-commit duplicate discount
AI analysis · Informational 15/100

This is a routine maintenance update that switches the project's pinned nightly Rust compiler version and makes the small code changes needed to keep the project compiling cleanly under the new compiler and its updated linting/formatting rules. There is no security-relevant change here.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6863: units: Escape control characters in parse errorsby Andrew Poelstra · 296674b0 · Sep 11, 2026 · 4 filesMessage 91 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6863: units: Escape control characters in parse errors

83c0bda64447dec824b62a462000b1be6683d566 units: Test parse errors escape control characters (Jamil Lambert, PhD)
be40b1497f8a2b767e863306798be211c8c3f649 units: Escape control chars in invalid char error (Jamil Lambert, PhD)
ef30002b4159cc8025487f33cd68508a056becf7 internals: Escape control chars in parse errors (Jamil Lambert, PhD)

Pull request description:

Parse errors rendered input verbatim in their `Display` output, letting newlines or terminal escapes through.

Escape the stored input with `escape_debug` before formatting.

Closes project-loupe/audit-rust-bitcoin#88
Closes project-loupe/audit-rust-bitcoin#158
Closes project-loupe/audit-rust-bitcoin#163
Closes project-loupe/audit-rust-bitcoin#165
Closes project-loupe/audit-rust-bitcoin#166


ACKs for top commit:
apoelstra:
ACK 83c0bda64447dec824b62a462000b1be6683d566; successfully ran local tests
tcharding:
ACK 83c0bda64447dec824b62a462000b1be6683d566


Tree-SHA512: 4f476349ce8c37bf239d7d2537206a4537787756a690da571479e79d27a53c7c2563e955de52010bb8e51a1c27aa4c50489e427f0c1a6becacbd73bf3a614544

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
Lower-priorityunits: Escape control chars in invalid char errorby Jamil Lambert, PhD · be40b149 · Sep 10, 2026 · 1 fileMessage 68 · AdequateTriage 0Details
Commit message · Jamil Lambert, PhD

units: Escape control chars in invalid char error

InvalidCharacterError rendered the rejected character verbatim, allowing
control characters into the Display output.

Escape it with escape_debug.

Assisted-by: Claude Opus 4.8

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
AI review queuedinternals: Escape control chars in parse errorsby Jamil Lambert, PhD · ef30002b · Sep 10, 2026 · 1 fileMessage 68 · AdequateLow 49Details
Commit message · Jamil Lambert, PhD

internals: Escape control chars in parse errors

InputString rendered input verbatim in its cannot_parse and
unknown_variant Display helpers, allowing control characters
(e.g. newlines) into error output and enabling log injection.

Escape the input with escape_debug.

Assisted-by: Claude Opus 4.8

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
second-pass: broader security terminology
AI analysis · Low 49/100

This commit fixes a log-injection-style issue in error messages. When the library failed to parse a string, it would print the user's raw input directly into the error text. If that input contained hidden control characters such as newlines or tabs, those characters would appear in logs or other output, potentially confusing log parsers, hiding malicious content, or making errors harder to read. The fix escapes those characters so they appear as visible symbols instead of being executed as formatting.

Lower-priorityunits: Test parse errors escape control charactersby Jamil Lambert, PhD · 83c0bda6 · Sep 10, 2026 · 3 filesMessage 83 · StrongTriage 5Details
Commit message · Jamil Lambert, PhD

units: Test parse errors escape control characters

Add regression tests that denomination, amount, absolute locktime, and
hex-prefix parse errors do not emit raw control characters in their
Display output.

Assisted-by: Claude Opus 4.8

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
fuzzing or regression evidence
AI review queuedMerge rust-bitcoin/rust-bitcoin#6845: ci: install rbmt from crates.io in replay jobby Andrew Poelstra · 2f3cf11b · Sep 10, 2026 · 1 fileMessage 91 · StrongInformational 15Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6845: ci: install rbmt from crates.io in replay job

bfc3703872c07560c3ed442a2bedb756596a3817 ci: install rbmt from crates.io in replay job (satsfy (Renato Britto))

Pull request description:

Closes https://github.com/rust-bitcoin/rust-bitcoin/issues/6838

The newly added `replay-crash-store` job of corpus fuzzing installed `cargo-rbmt` from version of an outdated file `rbmt-version` file that doesn't exist anymore. Pull info from `Cargo.toml` `rbmt.version`. 100% my mistake here.


ACKs for top commit:
tcharding:
ACK bfc3703872c07560c3ed442a2bedb756596a3817
apoelstra:
ACK bfc3703872c07560c3ed442a2bedb756596a3817; successfully ran local tests


Tree-SHA512: 3767090700ebf85e058acdae1fb741db2a26444ff404ea3f3036dddef58fb4a84412687b56ebf3b5f0e1a58621393782e2e7d1a6af8f84bc633cc6ab29351bd9

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
fuzzing or regression evidencedocumentation-only discountmerge-commit duplicate discountsecond-pass: broader security terminology
AI analysis · Informational 15/100

This is a routine CI maintenance fix. It changes how an internal developer tool (cargo-rbmt) is installed during an automated fuzzing replay job, switching from a pinned git revision to a version number read from the project's Cargo.toml. There is no security issue here.

Lower-priorityMerge rust-bitcoin/rust-bitcoin#6788: addresses: Remove version extraction from `Address::from_script` and error variantby Andrew Poelstra · 549bab63 · Sep 10, 2026 · 2 filesMessage 91 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6788: addresses: Remove version extraction from `Address::from_script` and error variant

0ce80be1e17123cf18ede2d22d977ce28ff9977e addresses: Remove FromScriptError::WitnessVersion variant (Mitchell Bagot)
00abe88f27d2a8b336137616740003cc75c3926c addresses: Remove opcode + version construction from Address::from_script (Mitchell Bagot)

Pull request description:

In Address::from_script, the script is checked to be a witness program. If so, the first opcode is extracted and fallibly converted to a WitnessVersion. However, the check for script as a witness program only checks that the witness version is some. Instead, we can directly check if let Some(version) = script.witness_version() and thus only extract the version once while performing the same check.

Remove manual opcode extraction and version construction in favour of if let Some(version) = script.witness_version().
Remove impossible FromScriptError::WitnessVersion error variant.


ACKs for top commit:
tcharding:
ACK 0ce80be1e17123cf18ede2d22d977ce28ff9977e
apoelstra:
ACK 0ce80be1e17123cf18ede2d22d977ce28ff9977e; successfully ran local tests


Tree-SHA512: c37c7ab6fd196eedbadcf6e59240d19713234163517c033fd02b744191224d1c8c77649faaf13a6b545d077fe0518ac9e9477048467fbe7a1d6553062358f7b7

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount
AI review queuedMerge rust-bitcoin/rust-bitcoin#4675: Units improvementsby Andrew Poelstra · f57f3be6 · Sep 10, 2026 · 8 filesMessage 91 · StrongInformational 19Details
Commit message · Andrew Poelstra

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

f80747556c8c3e0abaa28585e11cc55f36d056cf Add test for `FeeRate::from_per_kvb` (Martin Habovstiak)
3c71e5361e1d53291ae118986578d42e74c72b15 Make infallible fns actually infallible (Martin Habovstiak)
d022dfaddf5de82029ce4911b30aaf046ec60088 Improve the precision of `div_by_weight_*` (Martin Habovstiak)
00f5be2b6757f737bd46da7d29e1644122bad998 Add `to_msat` conversion method to amount types (Martin Habovstiak)
7db4f2b33cd4adcc9846188127e7cef3545f333e Fix documentation of `checked_{div,rem}` (Martin Habovstiak)
3b29ac5b7fd4e81eb679f50f2be04e3664a189b2 Update the doc of amounts (Martin Habovstiak)
116ade8aaa5a0d952985efc02d371a9d87d31303 Improve the warning on float amount methods (Martin Habovstiak)
adc8c5f7704470f16766af1d260feeee0bf663e5 Fix stale comment about precision (Martin Habovstiak)
e86502cc494acd6b68efc52988cc8c862cc8990d Improve the documentation of `units` (Martin Habovstiak)
25ae539b6b1ffe854d44b3ca0a337299928d0f80 De-clutter the example in `units` (Martin Habovstiak)

Pull request description:

Various improvements that fell out of my review of `units` crate. My review is not over yet, but I need a break, so I'm at least publishing this for review. (Feel free to review, I'll just make another PR if I find more.)

These are just documentation improvements. See individual commits for details.


ACKs for top commit:
tcharding:
ACK f80747556c8c3e0abaa28585e11cc55f36d056cf
apoelstra:
ACK f80747556c8c3e0abaa28585e11cc55f36d056cf; successfully ran local tests


Tree-SHA512: 5266890a9bab7bccf274b40c40146fcbd4e6beb736ff9f160f2b767f75f04b7b94ae8f0dc24f0586b35511d3483d5018e01378c05cf6db29968670f182762239

91/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Links an issue, advisory, or supporting reference
Why it was queued
signing or wallet pathmerge-commit duplicate discountsecond-pass: security-sensitive path
AI analysis · Informational 19/100

This is a routine code-quality and documentation update for the Rust Bitcoin 'units' crate. It adds a few helper methods, improves precision of fee-rate calculations, and updates documentation and warnings. There is no indication of a security vulnerability being fixed, and the changes are described by the author as 'just documentation improvements' plus minor API refinements.

Security candidatehashes: Fix Hkdf::expand panic at max lengthby Jamil Lambert, PhD · c61576fe · Sep 9, 2026 · 1 fileMessage 73 · AdequateModerate 62Details
Commit message · Jamil Lambert, PhD

hashes: Fix Hkdf::expand panic at max length

Hkdf::expand accepts an output buffer up to the RFC-5869 maximum of
255 * T::Hash::LEN bytes, but the u8 counter overflows when incremented
past the final block at that max length.

Replace the u8 counter with a for loop which cannot overflow.

Assisted-by: Claude Opus 4.8

73/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Names security-relevant behavior explicitly
Why it was queued
memory safety
AI analysis · Moderate 62/100

This commit fixes a bug in the HKDF key-derivation function where requesting the maximum allowed output length could cause the program to panic (crash) due to a counter overflow. The fix replaces an 8-bit counter that could wrap around past 255 with a loop using a larger integer type, so the maximum-length expansion completes safely.

Lower-priorityhashes: Test Hkdf::expand at maximum output lengthby Jamil Lambert, PhD · 9e71cce1 · Sep 9, 2026 · 1 fileMessage 75 · AdequateTriage 5Details
Commit message · Jamil Lambert, PhD

hashes: Test Hkdf::expand at maximum output length

Add a regression test that calls expand with a max length output buffer.

Assisted-by: Claude Opus 4.8

75/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidence
Lower-priorityMerge rust-bitcoin/rust-bitcoin#6779: base58: Simplify and flatten error typesby Andrew Poelstra · 9a052166 · Sep 8, 2026 · 2 filesMessage 100 · StrongTriage 0Details
Commit message · Andrew Poelstra

Merge rust-bitcoin/rust-bitcoin#6779: base58: Simplify and flatten error types

e329d5f53a277c92a543617e826a8bfc096176c2 Remove and edit stale or incorrect comments (Mitchell Bagot)
e9d2792c2a45d2821df46a195115d2d941f9373d Flatten DecodeCheckArrayError (Mitchell Bagot)
cd97f2d2b6e34a79b51403cc396d953801184798 Move decoded length check before split in decode_check_to_array (Mitchell Bagot)
7b88ae9782b357f7dfea2be88c31d5067894108f Fix docs to clarify 128 decode limit (Mitchell Bagot)
8aeeab76b2e2189823ab1a62a4febb864aa2c364 Add compile-time length check to decode_check_to_array (Mitchell Bagot)
ab599dec816b8d1c5f09d692e5cb2dd91f64abc2 Simplify error case in build_base256 (Mitchell Bagot)
3f4ca25dce9d0f1eedfb6df15c2244e39194daf2 Replace unreachable! with static Infallible match (Mitchell Bagot)

Pull request description:

Following the overhaul of the base58 crate to introduce no-alloc functionality, many of the errors have become convoluted, and in some cases confused (byte vs characters, etc). In order to improve this situation, the DecodeCheckArrayError should ideally be separated from the DecodeCheckError and other tweaks made to simplify the error handling throughout.

- Patch 1 removes the unreachable in decode_check, replacing it with a match never {}.
- Patch 2 simplifies error catching in build_base256 by flattening an Option chain.
- Patch 3 adds a compile time range check on N in decode_check_to_array.
- Patch 4 adjusts the docs to clarify the 128 byte decoded payload + checksum limit from decode_check_to_array.
- Patch 5 rearranges length checks in decode_check_to_array to simplify the unexpected length cases to a single error variant.
- Patch 6 flattens the DecodeCheckArrayError::Decode variant into variants in DecodeCheckArrayError.
- Patch 7 removes stale or incorrect comments remaining from various recent changes.


ACKs for top commit:
apoelstra:
ACK e329d5f53a277c92a543617e826a8bfc096176c2; successfully ran local tests


Tree-SHA512: 234a905607ec791cfc491660a098d756c7482c7c6edfbdd3866585583ae42e19d0acf5af5c23811256c199074ce657a5f6777eeee4584615f6063b9a22ea0920

100/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✓ Links an issue, advisory, or supporting reference
Why it was queued
merge-commit duplicate discount