chore(deps): drop the unused async esplora client - #352
Merged
Conversation
RUSTSEC-2026-0258 (h2 unbounded empty DATA frames) landed in the
advisory database on 2026-08-17 and started failing cargo audit on main
the next morning. The vulnerable h2 0.3.27 reached us through exactly
one chain:
ghostkey-{server,cli}
-> bdk_esplora 0.20 (async-https-rustls)
-> esplora-client 0.11
-> reqwest 0.11 -> hyper 0.14 -> h2 0.3.27
We never use it. There is no AsyncClient, build_async or
EsploraAsyncExt anywhere in the workspace; the only Esplora client we
build is build_blocking() in psbt_routes.rs, which goes through minreq.
The async feature was linking in a second HTTP stack purely so it could
sit there unused, and bringing its advisories along.
Dropping the feature removes reqwest 0.11 and everything under it, 21
crates in all, and clears two advisories:
RUSTSEC-2026-0258 h2 0.3.27, no fix available for the 0.3 line
RUSTSEC-2025-0134 rustls-pemfile 1.x unmaintained, previously ignored
The rustls-webpki entries stay ignored. Those come through minreq on the
blocking path, which we do use.
cargo audit now exits 0 with no new ignores. Workspace builds, clippy
under -D warnings is clean, 323 tests pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
RUSTSEC-2026-0258(h2 unbounded empty DATA frames) was published 2026-08-17 and started failingcargo auditon main the next morning. Main's scheduledrustrun at 04:52 on 2026-08-19 failed; the run 24 hours earlier passed. It blocks every PR.The vulnerable
h2 0.3.27reached us through exactly one chain:h2 0.3has no patched release. The advisory says upgrade to>= 0.4.16, which needs reqwest 0.12, which needs esplora-client past 0.11, which is the semver-incompatible BDK bump.cargo/audit.tomlalready describes as unplanned.The actual fix
We never use the async client.
grep -rn "build_async\|AsyncClient\|EsploraAsyncExt" --include=*.rs .returns nothing. The only Esplora client the workspace builds isbuild_blocking()atcrates/ghostkey-server/src/psbt_routes.rs:151, which goes through minreq, not reqwest.So
async-https-rustlswas linking a second HTTP stack purely so it could sit there unused, and dragging its advisories in with it. This drops the feature.Removed from the lockfile: 21 crates including
reqwest 0.11,hyper 0.14,h2,rustls-pemfile 1.x,tokio-socks,winreg.Cargo.lockshrinks by 275 lines and noh2entry remains at all. Our ownreqwest 0.12is untouched (it runs withdefault-features = false, so it has no h2 either).Advisories cleared
RUSTSEC-2026-0258RUSTSEC-2025-0134.cargo/audit.tomlRUSTSEC-2026-0098/0099/0104(rustls-webpki) stay ignored. Those come through minreq on the blocking path, which we do use, and the reasoning in.cargo/audit.tomlstill holds.No new ignores. This fixes the advisory rather than silencing it.
Testing
cargo audit --deny warningsexit 0cargo check --workspace --all-targetscleanRUSTFLAGS=-D warnings cargo clippy --workspace --all-targetscleancargo fmt --all --checkcleancargo test --workspace323 passed, 0 failed🤖 Generated with Claude Code