Skip to content

feat: add QR hardware wallet support#1757

Open
ethermachine wants to merge 7 commits intofloating:developfrom
ethermachine:wallets-qr
Open

feat: add QR hardware wallet support#1757
ethermachine wants to merge 7 commits intofloating:developfrom
ethermachine:wallets-qr

Conversation

@ethermachine
Copy link

Summary

  • Add support for QR-based hardware wallets (Keycard Shell, Keystone, Ngrave, Ellipal, and more)
  • Implement QR scanner component with macOS camera permission handling
  • Create QRSigner class with HD wallet address derivation (BIP44)
  • Add UR (Uniform Resources) encoding/decoding for device communication
  • Support animated QR codes for large transaction payloads
  • Integrate with existing signer infrastructure

Features

  • Import hardware wallets via crypto-account sync QR code
  • Sign transactions, messages, and typed data via airgapped QR flow
  • Multi-frame animated QR support for large payloads

Test plan

  • Import a QR hardware wallet using the sync QR code
  • Verify imported addresses match the device
  • Sign a transaction and verify the QR flow works
  • Test with animated QR codes (large transactions)

Implement QR-based hardware wallet integration for airgapped signing:

- Add QRSigner class with HD wallet address derivation (BIP44)
- Implement UR (Uniform Resources) encoding/decoding for device communication
- Add QR scanner component with camera permission handling
- Create QR sign request overlay for transaction/message signing
- Support animated QR codes for large payloads
- Add device import via crypto-account sync QR codes
- Integrate with existing signer infrastructure

Supports Keycard Shell, Keystone, Ngrave, Ellipal, and other compatible QR hardware wallets.
@socket-security
Copy link

socket-security bot commented Jan 12, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​keystonehq/​bc-ur-registry-eth@​0.22.11001007584100
Added@​zxing/​browser@​0.1.59910010082100
Added@​zxing/​library@​0.21.3951001008270
Added@​ngraveio/​bc-ur@​1.1.131001009887100

View full report

- Change label from 'QR Hardware (Keystone)' to 'QR Device' for clarity.
- Refactor conditional statement for hardware signers to enhance readability by formatting it across multiple lines.
- Simplify JSX structure in AddHardwareQR component by merging div elements.
- Enhance error handling display in QRScanner and QRSignRequest components for better readability.
- Standardize logging format in QRSignerAdapter for consistency.
- Clean up signature parsing in ur-utils for improved clarity.
…a, normalizing signature `v` values, and enhancing QR code display and encoding.
…on details and update signer management to use it, along with new `accountSource` and `childrenPath` fields.
Remove double-encoding of message data in QR adapter. The message is
already hex-encoded, so passing it through Buffer.from().toString('hex')
was causing the QR device to sign incorrect data, leading to ecRecover
check failures.
…ancing signature verification with flipped recovery IDs for legacy transactions.
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