Skip to content

Commit 4763c6d

Browse files
fix(cardano): update ledger dependencies and improve hardware wallet integration (#1600)
1 parent 75450a0 commit 4763c6d

File tree

4 files changed

+31
-83
lines changed

4 files changed

+31
-83
lines changed

packages/cardano/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"@cardano-sdk/wallet": "0.46.2",
5252
"@cardano-sdk/web-extension": "0.36.1",
5353
"@lace/common": "0.1.0",
54-
"@ledgerhq/devices": "^8.2.1",
54+
"@ledgerhq/devices": "^8.4.4",
5555
"@stablelib/chacha20poly1305": "1.0.1",
5656
"@trezor/transport": "^1.1.18",
5757
"bignumber.js": "9.0.1",

packages/cardano/src/wallet/lib/hardware-wallet.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { HardwareWalletConnection, DeviceConnection, HardwareWallets, LedgerConn
55
import * as HardwareLedger from '@cardano-sdk/hardware-ledger';
66
import * as HardwareTrezor from '@cardano-sdk/hardware-trezor';
77
import { WalletType } from '@cardano-sdk/web-extension';
8-
import { ledgerUSBVendorId } from '@ledgerhq/devices';
8+
import { DeviceModelId, getDeviceModel, ledgerUSBVendorId } from '@ledgerhq/devices';
99
import { TREZOR_USB_DESCRIPTORS } from '@trezor/transport';
1010

1111
const isTrezorHWSupported = (): boolean => process.env.USE_TREZOR_HW === 'true';
@@ -46,19 +46,35 @@ const isDeviceDescribedBy = (device: USBDevice, descriptors: Descriptor[]) =>
4646
(Object.entries(descriptor) as DescriptorEntries<Descriptor>).every(([key, value]) => device[key] === value)
4747
);
4848

49+
/** ProductId returned by `navigator.usb.requestDevice` uses two bytes (e.g. `0x5000`), but the `productIMM`
50+
* stores only the most significant byte (e.g. `0x50`). We need to shift to get the correct filter value.
51+
*/
52+
// eslint-disable-next-line no-bitwise, no-magic-numbers
53+
const productImmToID = (productId: number) => productId << 8;
4954
const ledgerNanoSWithNoAppOpenProductId = 4113;
5055
const ledgerNanoSWithCardanoAppOpenProductId = 4117;
5156
const ledgerNanoSPlusWithNoAppOpenProductId = 20_497;
5257
const ledgerNanoSPlusWithCardanoAppOpenProductId = 20_501;
5358
const ledgerNanoXWithNoAppOpenProductId = 16_401;
5459
const ledgerNanoXWithCardanoAppOpenProductId = 16_405;
60+
let ledgerProductIdFromLedgerHq: number[] = [];
61+
try {
62+
ledgerProductIdFromLedgerHq = [
63+
productImmToID(getDeviceModel(DeviceModelId.nanoS).productIdMM),
64+
productImmToID(getDeviceModel(DeviceModelId.nanoSP).productIdMM),
65+
productImmToID(getDeviceModel(DeviceModelId.nanoX).productIdMM)
66+
];
67+
} catch (error) {
68+
console.error('Failed to get Ledger device model', error);
69+
}
5570
export const ledgerDescriptors = [
5671
ledgerNanoSWithNoAppOpenProductId,
5772
ledgerNanoSWithCardanoAppOpenProductId,
5873
ledgerNanoSPlusWithNoAppOpenProductId,
5974
ledgerNanoSPlusWithCardanoAppOpenProductId,
6075
ledgerNanoXWithNoAppOpenProductId,
61-
ledgerNanoXWithCardanoAppOpenProductId
76+
ledgerNanoXWithCardanoAppOpenProductId,
77+
...ledgerProductIdFromLedgerHq
6278
].map((productId) => ({
6379
vendorId: ledgerUSBVendorId,
6480
productId

packages/nami/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
},
5858
"dependencies": {
5959
"@biglup/is-cid": "^1.0.3",
60-
"@cardano-foundation/ledgerjs-hw-app-cardano": "^6.0.0",
60+
"@cardano-foundation/ledgerjs-hw-app-cardano": "^7.1.4",
6161
"@cardano-sdk/core": "0.42.1",
6262
"@cardano-sdk/crypto": "0.1.32",
6363
"@cardano-sdk/tx-construction": "0.23.0",

yarn.lock

Lines changed: 11 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -9060,18 +9060,6 @@ __metadata:
90609060
languageName: node
90619061
linkType: hard
90629062

9063-
"@cardano-foundation/ledgerjs-hw-app-cardano@npm:^6.0.0":
9064-
version: 6.0.1
9065-
resolution: "@cardano-foundation/ledgerjs-hw-app-cardano@npm:6.0.1"
9066-
dependencies:
9067-
"@ledgerhq/hw-transport": ^6.27.10
9068-
base-x: ^3.0.5
9069-
bech32: ^1.1.4
9070-
int64-buffer: ^1.0.1
9071-
checksum: 7c4dc9f272e625d894eb6c0ca49986903397fda35a8525bab7e08dc2d3652619acc0c310119f3f985fc31c8404f7c29ab1ee9b34b987f02187544968913b6f54
9072-
languageName: node
9073-
linkType: hard
9074-
90759063
"@cardano-foundation/ledgerjs-hw-app-cardano@npm:^7.1.4":
90769064
version: 7.1.4
90779065
resolution: "@cardano-foundation/ledgerjs-hw-app-cardano@npm:7.1.4"
@@ -13597,7 +13585,7 @@ __metadata:
1359713585
"@cardano-sdk/web-extension": 0.36.1
1359813586
"@emurgo/cardano-message-signing-browser": 1.0.1
1359913587
"@lace/common": 0.1.0
13600-
"@ledgerhq/devices": ^8.2.1
13588+
"@ledgerhq/devices": ^8.4.4
1360113589
"@stablelib/chacha20poly1305": 1.0.1
1360213590
"@trezor/transport": ^1.1.18
1360313591
"@types/webextension-polyfill": 0.10.0
@@ -13755,7 +13743,7 @@ __metadata:
1375513743
resolution: "@lace/nami@workspace:packages/nami"
1375613744
dependencies:
1375713745
"@biglup/is-cid": ^1.0.3
13758-
"@cardano-foundation/ledgerjs-hw-app-cardano": ^6.0.0
13746+
"@cardano-foundation/ledgerjs-hw-app-cardano": ^7.1.4
1375913747
"@cardano-sdk/core": 0.42.1
1376013748
"@cardano-sdk/crypto": 0.1.32
1376113749
"@cardano-sdk/tx-construction": 0.23.0
@@ -13952,30 +13940,6 @@ __metadata:
1395213940
languageName: unknown
1395313941
linkType: soft
1395413942

13955-
"@ledgerhq/devices@npm:^8.0.0":
13956-
version: 8.0.0
13957-
resolution: "@ledgerhq/devices@npm:8.0.0"
13958-
dependencies:
13959-
"@ledgerhq/errors": ^6.12.3
13960-
"@ledgerhq/logs": ^6.10.1
13961-
rxjs: 6
13962-
semver: ^7.3.5
13963-
checksum: 467bc30c8e60753762e52de708d5231234be4c35e0e73e39f8a0d0c7cf795a566208de4687f491de801a0f5642b16ae7de6527813f5283e247b800066ae4c4d0
13964-
languageName: node
13965-
linkType: hard
13966-
13967-
"@ledgerhq/devices@npm:^8.2.1":
13968-
version: 8.2.1
13969-
resolution: "@ledgerhq/devices@npm:8.2.1"
13970-
dependencies:
13971-
"@ledgerhq/errors": ^6.16.2
13972-
"@ledgerhq/logs": ^6.12.0
13973-
rxjs: ^7.8.1
13974-
semver: ^7.3.5
13975-
checksum: 5c7fa3004a4ebd30b0dcb8563642db308478bbec115102e5404dd0affcc99f880d094137e88c1f2cc064f78d65a5e946d5ebd8db89141977e32860885ea23ebe
13976-
languageName: node
13977-
linkType: hard
13978-
1397913943
"@ledgerhq/devices@npm:^8.4.4":
1398013944
version: 8.4.4
1398113945
resolution: "@ledgerhq/devices@npm:8.4.4"
@@ -13988,20 +13952,6 @@ __metadata:
1398813952
languageName: node
1398913953
linkType: hard
1399013954

13991-
"@ledgerhq/errors@npm:^6.12.3":
13992-
version: 6.12.3
13993-
resolution: "@ledgerhq/errors@npm:6.12.3"
13994-
checksum: 3284cbc85dc2df24f17a6e3899eb5afdff96e63d073b5914906c45ed8f1a93c7daa1e2b847d621610a1088b63c0abb9379e6b6ca395144c2d50855a4606c1d3f
13995-
languageName: node
13996-
linkType: hard
13997-
13998-
"@ledgerhq/errors@npm:^6.16.2":
13999-
version: 6.16.2
14000-
resolution: "@ledgerhq/errors@npm:6.16.2"
14001-
checksum: 2dd796c78b8428339c8906cfe2325e62c211f484576835198a9bf4efc8fed38b4ca5d342bfb08aef6c623720753ea3e5ce77e50367f2808ad5610e3ff54cec70
14002-
languageName: node
14003-
linkType: hard
14004-
1400513955
"@ledgerhq/errors@npm:^6.19.1":
1400613956
version: 6.19.1
1400713957
resolution: "@ledgerhq/errors@npm:6.19.1"
@@ -14034,17 +13984,6 @@ __metadata:
1403413984
languageName: node
1403513985
linkType: hard
1403613986

14037-
"@ledgerhq/hw-transport@npm:^6.27.10":
14038-
version: 6.28.1
14039-
resolution: "@ledgerhq/hw-transport@npm:6.28.1"
14040-
dependencies:
14041-
"@ledgerhq/devices": ^8.0.0
14042-
"@ledgerhq/errors": ^6.12.3
14043-
events: ^3.3.0
14044-
checksum: 69bf0f72e112c0c2f538c66d0b1dd2b24b19f1fcf5d671fdcfd50838e86dc55702555e0c639bbc55889a42a8ebd07243ad31798c2ff237dc21a1573581caf5ab
14045-
languageName: node
14046-
linkType: hard
14047-
1404813987
"@ledgerhq/hw-transport@npm:^6.31.2, @ledgerhq/hw-transport@npm:^6.31.4":
1404913988
version: 6.31.4
1405013989
resolution: "@ledgerhq/hw-transport@npm:6.31.4"
@@ -14057,13 +13996,6 @@ __metadata:
1405713996
languageName: node
1405813997
linkType: hard
1405913998

14060-
"@ledgerhq/logs@npm:^6.10.1":
14061-
version: 6.10.1
14062-
resolution: "@ledgerhq/logs@npm:6.10.1"
14063-
checksum: 4dde46557d9daa6028f7040d26585aaa7260445212ad8348ae4a01463b7d76a1592dfc36921e47f5fc477c50b5d73e840070ac167e3cbe5b45123f36a4f96b08
14064-
languageName: node
14065-
linkType: hard
14066-
1406713999
"@ledgerhq/logs@npm:^6.12.0":
1406814000
version: 6.12.0
1406914001
resolution: "@ledgerhq/logs@npm:6.12.0"
@@ -53802,15 +53734,6 @@ __metadata:
5380253734
languageName: node
5380353735
linkType: hard
5380453736

53805-
"rxjs@npm:6, rxjs@npm:^6.4.0, rxjs@npm:^6.6.3, rxjs@npm:^6.6.7":
53806-
version: 6.6.7
53807-
resolution: "rxjs@npm:6.6.7"
53808-
dependencies:
53809-
tslib: ^1.9.0
53810-
checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b
53811-
languageName: node
53812-
linkType: hard
53813-
5381453737
"rxjs@npm:7.4.0, rxjs@npm:^7.4.0":
5381553738
version: 7.4.0
5381653739
resolution: "rxjs@npm:7.4.0"
@@ -53820,6 +53743,15 @@ __metadata:
5382053743
languageName: node
5382153744
linkType: hard
5382253745

53746+
"rxjs@npm:^6.4.0, rxjs@npm:^6.6.3, rxjs@npm:^6.6.7":
53747+
version: 6.6.7
53748+
resolution: "rxjs@npm:6.6.7"
53749+
dependencies:
53750+
tslib: ^1.9.0
53751+
checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b
53752+
languageName: node
53753+
linkType: hard
53754+
5382353755
"rxjs@npm:^7.8.0":
5382453756
version: 7.8.0
5382553757
resolution: "rxjs@npm:7.8.0"

0 commit comments

Comments
 (0)