Skip to content

fix: WebHID/WebUSB transport for modern browsers - #36

Open
christopheSeeka wants to merge 3 commits into
wavesplatform:masterfrom
christopheSeeka:fix/webhid-transport
Open

fix: WebHID/WebUSB transport for modern browsers#36
christopheSeeka wants to merge 3 commits into
wavesplatform:masterfrom
christopheSeeka:fix/webhid-transport

Conversation

@christopheSeeka

Copy link
Copy Markdown

Summary

Fixes @waves/ledger for modern Chrome/Edge browsers. Ledger WAVES holders have been unable to sign transactions because the library defaults to deprecated U2F transport (removed from browsers in 2022).

Changes

  • WavesLedgerSync — new recommended API with WebHID → WebUSB auto-connect
  • transport.tscreateLedgerTransport() used by default
  • buildSignPayload() — extracted signing logic + unit tests (no device required)
  • Auto signing protocolsignProtocol: 'auto' (default) picks v1.0 / v1.1 / v1.2 from Waves app version via getVersion()
  • Better error messages for common Ledger status codes (including 0x9102 deprecated protocol)
  • Bump @ledgerhq/logs to v6 — fixes LocalTracer is not a constructor with hw-transport v6
  • Legacy WavesLedger unchanged (U2F default preserved for backward compatibility)
  • Version bump to 4.0.2

Motivation

  • @waves/ledger@4.0.1 is broken in all current browsers (U2F dead)
  • Unpublished 4.0.2-beta.3 added WebUSB-only WavesLedgerSync but was never merged to master
  • Community workaround: https://github.com/fadi47at/-waves-ledger-web (WebHID + v1.1 signing)
  • @waves/provider-ledger depends on the unpublished beta

Test plan

  • npm test — 8 protocol unit tests pass (no Ledger device)
  • npm run build — TypeScript compiles
  • Chrome + Ledger Nano — connect & get public key
  • Sign transfer on mainnet
  • Sign lease + cancel lease
  • Sign invoke script v1 (binary payload) on mainnet
  • Sign invoke script v2 (protobuf payload) on mainnet

Hardware validation used a test UI at https://ledger.blockai.dev with vendored build from this branch (WavesLedgerSync, outer signing protocol v1.1).

Test dApp on mainnet: 3PDBYhfP8JtGkUPEWSoHzXaHbs8MsJbsF67 — callable dummy(str: String).

Breaking changes

None for existing WavesLedger callers. New integrations should use WavesLedgerSync.

christopheSeeka and others added 3 commits September 1, 2026 10:32
Restore Ledger connectivity in modern Chrome/Edge. U2F default preserved for legacy WavesLedger. Adds unit tests and bumps version to 4.0.2.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant