@ledgerhq/live-common 34.34.0-nightly.4 → 34.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/lib/apps/logic.d.ts.map +1 -1
  2. package/lib/apps/logic.js +1 -2
  3. package/lib/apps/logic.js.map +1 -1
  4. package/lib/e2e/index.d.ts +0 -5
  5. package/lib/e2e/index.d.ts.map +1 -1
  6. package/lib/env.react.d.ts +1 -1
  7. package/lib/env.react.d.ts.map +1 -1
  8. package/lib/errors.d.ts +3 -0
  9. package/lib/errors.d.ts.map +1 -1
  10. package/lib/errors.js +2 -1
  11. package/lib/errors.js.map +1 -1
  12. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js +2 -2
  13. package/lib/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  14. package/lib/families/solana/setup.d.ts.map +1 -1
  15. package/lib/families/solana/setup.js +66 -2
  16. package/lib/families/solana/setup.js.map +1 -1
  17. package/lib/families/solana/setup.test.js +10 -12
  18. package/lib/families/solana/setup.test.js.map +1 -1
  19. package/lib/featureFlags/defaultFeatures.d.ts.map +1 -1
  20. package/lib/featureFlags/defaultFeatures.js +0 -14
  21. package/lib/featureFlags/defaultFeatures.js.map +1 -1
  22. package/lib/featureFlags/useFeature.d.ts +1 -1
  23. package/lib/featureFlags/useFeature.d.ts.map +1 -1
  24. package/lib/hw/connectApp.d.ts.map +1 -1
  25. package/lib/hw/connectApp.js +3 -2
  26. package/lib/hw/connectApp.js.map +1 -1
  27. package/lib-es/apps/logic.d.ts.map +1 -1
  28. package/lib-es/apps/logic.js +1 -2
  29. package/lib-es/apps/logic.js.map +1 -1
  30. package/lib-es/e2e/index.d.ts +0 -5
  31. package/lib-es/e2e/index.d.ts.map +1 -1
  32. package/lib-es/env.react.d.ts +1 -1
  33. package/lib-es/env.react.d.ts.map +1 -1
  34. package/lib-es/errors.d.ts +3 -0
  35. package/lib-es/errors.d.ts.map +1 -1
  36. package/lib-es/errors.js +1 -0
  37. package/lib-es/errors.js.map +1 -1
  38. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js +2 -2
  39. package/lib-es/exchange/swap/getIncompatibleCurrencyKeys.js.map +1 -1
  40. package/lib-es/families/solana/setup.d.ts.map +1 -1
  41. package/lib-es/families/solana/setup.js +66 -2
  42. package/lib-es/families/solana/setup.js.map +1 -1
  43. package/lib-es/families/solana/setup.test.js +10 -12
  44. package/lib-es/families/solana/setup.test.js.map +1 -1
  45. package/lib-es/featureFlags/defaultFeatures.d.ts.map +1 -1
  46. package/lib-es/featureFlags/defaultFeatures.js +0 -14
  47. package/lib-es/featureFlags/defaultFeatures.js.map +1 -1
  48. package/lib-es/featureFlags/useFeature.d.ts +1 -1
  49. package/lib-es/featureFlags/useFeature.d.ts.map +1 -1
  50. package/lib-es/hw/connectApp.d.ts.map +1 -1
  51. package/lib-es/hw/connectApp.js +2 -1
  52. package/lib-es/hw/connectApp.js.map +1 -1
  53. package/package.json +65 -63
  54. package/src/apps/logic.ts +1 -2
  55. package/src/errors.ts +4 -0
  56. package/src/exchange/swap/getIncompatibleCurrencyKeys.ts +2 -2
  57. package/src/families/aptos/__snapshots__/bridge.integration.test.ts.snap +6 -72
  58. package/src/families/bitcoin/__snapshots__/bridge.integration.test.ts.snap +745 -4351
  59. package/src/families/cosmos/datasets/__snapshots__/cosmos.integration.test.ts.snap +2 -2
  60. package/src/families/hedera/__snapshots__/bridge.integration.test.ts.snap +0 -1612
  61. package/src/families/solana/setup.test.ts +10 -12
  62. package/src/families/solana/setup.ts +85 -3
  63. package/src/families/stellar/__snapshots__/bridge.integration.test.ts.snap +14 -254
  64. package/src/featureFlags/defaultFeatures.ts +0 -15
  65. package/src/hw/connectApp.ts +1 -1
@@ -1,4 +1,4 @@
1
- import { LegacySignerSolana } from "@ledgerhq/live-signer-solana";
1
+ import Solana from "@ledgerhq/hw-app-solana";
2
2
  import Transport from "@ledgerhq/hw-transport";
3
3
  import { Account, AnyMessage } from "@ledgerhq/types-live";
4
4
  import { PubKeyDisplayMode } from "@ledgerhq/coin-solana/signer";
@@ -29,22 +29,20 @@ const signOffchainMessageMock = jest.fn(() =>
29
29
  }),
30
30
  );
31
31
 
32
- jest.mock("@ledgerhq/live-signer-solana", () => {
33
- return {
34
- LegacySignerSolana: jest.fn().mockImplementation(() => {
35
- return {
36
- signMessage: signOffchainMessageMock,
37
- getAppConfiguration: getAppConfigurationMock,
38
- };
39
- }),
40
- };
32
+ jest.mock("@ledgerhq/hw-app-solana", () => {
33
+ return jest.fn().mockImplementation(() => {
34
+ return {
35
+ signOffchainMessage: signOffchainMessageMock,
36
+ getAppConfiguration: getAppConfigurationMock,
37
+ };
38
+ });
41
39
  });
42
40
 
43
41
  LiveConfig.setConfig(solanaConfig);
44
42
 
45
43
  describe("Testing setup on Solana", () => {
46
44
  describe("Testing message signer", () => {
47
- it("should call the underlying signer for off-chain message signature", async () => {
45
+ it("should call hardware for off-chain message signature", async () => {
48
46
  const freshAddressPath = "44'/60'/0'/0/0";
49
47
  const freshAddress = "8DpKDisipx6f76cEmuGvCX9TrA3SjeR76HaTRePxHBDe";
50
48
  const message = "4c6f6e67204f66662d436861696e2054657374204d6573736167652e";
@@ -54,7 +52,7 @@ describe("Testing setup on Solana", () => {
54
52
  { message: message } as AnyMessage,
55
53
  );
56
54
 
57
- expect(LegacySignerSolana).toHaveBeenCalledTimes(1);
55
+ expect(Solana).toHaveBeenCalledTimes(1);
58
56
  expect(signOffchainMessageMock).toHaveBeenCalledTimes(1);
59
57
 
60
58
  const args = signOffchainMessageMock.mock.calls[0] as unknown[];
@@ -1,5 +1,7 @@
1
1
  // Goal of this file is to inject all necessary device/signer dependency to coin-modules
2
2
 
3
+ import semver from "semver";
4
+ import Solana from "@ledgerhq/hw-app-solana";
3
5
  import Transport from "@ledgerhq/hw-transport";
4
6
  import type { Bridge } from "@ledgerhq/types-live";
5
7
  import { SolanaSigner } from "@ledgerhq/coin-solana/signer";
@@ -7,21 +9,101 @@ import { createBridges } from "@ledgerhq/coin-solana/bridge/js";
7
9
  import makeCliTools from "@ledgerhq/coin-solana/cli-transaction";
8
10
  import solanaResolver from "@ledgerhq/coin-solana/hw-getAddress";
9
11
  import { SolanaAccount, Transaction, TransactionStatus } from "@ledgerhq/coin-solana/types";
12
+ import { DeviceModelId } from "@ledgerhq/devices";
13
+ import { loadPKI } from "@ledgerhq/hw-bolos";
14
+ import calService from "@ledgerhq/ledger-cal-service";
15
+ import trustService from "@ledgerhq/ledger-trust-service";
16
+ import { TransportStatusError, UpdateYourApp } from "@ledgerhq/errors";
10
17
  import {
11
18
  CreateSigner,
12
19
  createMessageSigner,
13
20
  createResolver,
14
21
  executeWithSigner,
15
22
  } from "../../bridge/setup";
23
+ import { LatestFirmwareVersionRequired } from "../../errors";
16
24
  import type { Resolver } from "../../hw/getAddress/types";
17
25
  import { getCurrencyConfiguration } from "../../config";
18
26
  import { SolanaCoinConfig } from "@ledgerhq/coin-solana/config";
19
27
  import { getCryptoCurrencyById } from "../../currencies";
20
28
  import { signMessage } from "@ledgerhq/coin-solana/hw-signMessage";
21
- import { LegacySignerSolana } from "@ledgerhq/live-signer-solana";
22
29
 
23
- const createSigner: CreateSigner<SolanaSigner> = (transport: Transport) =>
24
- new LegacySignerSolana(transport);
30
+ const TRUSTED_NAME_MIN_VERSION = "1.7.1";
31
+ const MANAGER_APP_NAME = "Solana";
32
+
33
+ async function checkVersion(app: Solana) {
34
+ const { version } = await app.getAppConfiguration();
35
+ if (semver.lt(version, TRUSTED_NAME_MIN_VERSION)) {
36
+ throw new UpdateYourApp(undefined, {
37
+ managerAppName: MANAGER_APP_NAME,
38
+ });
39
+ }
40
+ }
41
+
42
+ function isPKIUnsupportedError(err: unknown): err is TransportStatusError {
43
+ return err instanceof TransportStatusError && err.message.includes("0x6a81");
44
+ }
45
+
46
+ const createSigner: CreateSigner<SolanaSigner> = (transport: Transport) => {
47
+ const app = new Solana(transport);
48
+ return {
49
+ getAppConfiguration: app.getAppConfiguration,
50
+ getAddress: app.getAddress,
51
+ signTransaction: async (path, tx, resolution) => {
52
+ if (resolution) {
53
+ if (!resolution.deviceModelId) {
54
+ throw new Error("Resolution provided without a deviceModelId");
55
+ }
56
+
57
+ if (resolution.deviceModelId !== DeviceModelId.nanoS) {
58
+ const { descriptor, signature } = await calService.getCertificate(
59
+ resolution.deviceModelId,
60
+ );
61
+
62
+ try {
63
+ await loadPKI(transport, "TRUSTED_NAME", descriptor, signature);
64
+ } catch (err) {
65
+ if (isPKIUnsupportedError(err)) {
66
+ throw new LatestFirmwareVersionRequired("LatestFirmwareVersionRequired");
67
+ }
68
+ }
69
+
70
+ if (resolution.tokenAddress) {
71
+ await checkVersion(app);
72
+
73
+ const challenge = await app.getChallenge();
74
+ const { signedDescriptor } = await trustService.getOwnerAddress(
75
+ resolution.tokenAddress,
76
+ challenge,
77
+ );
78
+
79
+ if (signedDescriptor) {
80
+ await app.provideTrustedName(signedDescriptor);
81
+ }
82
+ }
83
+ if (resolution.createATA) {
84
+ await checkVersion(app);
85
+
86
+ const challenge = await app.getChallenge();
87
+ const { signedDescriptor } = await trustService.computedTokenAddress(
88
+ resolution.createATA.address,
89
+ resolution.createATA.mintAddress,
90
+ challenge,
91
+ );
92
+
93
+ if (signedDescriptor) {
94
+ await app.provideTrustedName(signedDescriptor);
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ return app.signTransaction(path, tx);
101
+ },
102
+ signMessage: (path: string, messageHex: string) => {
103
+ return app.signOffchainMessage(path, Buffer.from(messageHex, "hex"));
104
+ },
105
+ };
106
+ };
25
107
 
26
108
  const getCurrencyConfig = () => {
27
109
  return getCurrencyConfiguration<SolanaCoinConfig>(getCryptoCurrencyById("solana"));
@@ -3,82 +3,82 @@
3
3
  exports[`stellar currency bridge scanAccounts stellar seed 1 1`] = `
4
4
  [
5
5
  {
6
- "balance": "341064626",
6
+ "balance": "341064624",
7
7
  "currencyId": "stellar",
8
8
  "derivationMode": "sep5",
9
9
  "freshAddress": "GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV",
10
10
  "freshAddressPath": "44'/148'/0'",
11
11
  "id": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5",
12
12
  "index": 0,
13
- "operationsCount": 69,
13
+ "operationsCount": 67,
14
14
  "pendingOperations": [],
15
15
  "seedIdentifier": "27c586f8499294c64d57f8d7956eef4431de58ab20e1c88001f6cf131c97d6f3",
16
- "spendableBalance": "311064526",
16
+ "spendableBalance": "311064524",
17
17
  "subAccounts": [],
18
18
  "swapHistory": [],
19
19
  "syncHash": undefined,
20
20
  "used": true,
21
21
  },
22
22
  {
23
- "balance": "89999840",
23
+ "balance": "89999837",
24
24
  "currencyId": "stellar",
25
25
  "derivationMode": "sep5",
26
26
  "freshAddress": "GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z",
27
27
  "freshAddressPath": "44'/148'/1'",
28
28
  "id": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5",
29
29
  "index": 1,
30
- "operationsCount": 23,
30
+ "operationsCount": 20,
31
31
  "pendingOperations": [],
32
32
  "seedIdentifier": "27c586f8499294c64d57f8d7956eef4431de58ab20e1c88001f6cf131c97d6f3",
33
- "spendableBalance": "79999740",
33
+ "spendableBalance": "79999737",
34
34
  "subAccounts": [],
35
35
  "swapHistory": [],
36
36
  "syncHash": undefined,
37
37
  "used": true,
38
38
  },
39
39
  {
40
- "balance": "59999341",
40
+ "balance": "59999338",
41
41
  "currencyId": "stellar",
42
42
  "derivationMode": "sep5",
43
43
  "freshAddress": "GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS",
44
44
  "freshAddressPath": "44'/148'/2'",
45
45
  "id": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
46
46
  "index": 2,
47
- "operationsCount": 17,
47
+ "operationsCount": 14,
48
48
  "pendingOperations": [],
49
49
  "seedIdentifier": "27c586f8499294c64d57f8d7956eef4431de58ab20e1c88001f6cf131c97d6f3",
50
- "spendableBalance": "44999241",
50
+ "spendableBalance": "44999238",
51
51
  "subAccounts": [],
52
52
  "swapHistory": [],
53
53
  "syncHash": undefined,
54
54
  "used": true,
55
55
  },
56
56
  {
57
- "balance": "20145821",
57
+ "balance": "20145820",
58
58
  "currencyId": "stellar",
59
59
  "derivationMode": "sep5",
60
60
  "freshAddress": "GAHQKL7UW5DSNJXWNA4ASJ6D2I7JYFWVHDFWYJZK3WDR4BUTG27K2PWC",
61
61
  "freshAddressPath": "44'/148'/3'",
62
62
  "id": "js:2:stellar:GAHQKL7UW5DSNJXWNA4ASJ6D2I7JYFWVHDFWYJZK3WDR4BUTG27K2PWC:sep5",
63
63
  "index": 3,
64
- "operationsCount": 17,
64
+ "operationsCount": 16,
65
65
  "pendingOperations": [],
66
66
  "seedIdentifier": "27c586f8499294c64d57f8d7956eef4431de58ab20e1c88001f6cf131c97d6f3",
67
- "spendableBalance": "10145721",
67
+ "spendableBalance": "10145720",
68
68
  "subAccounts": [],
69
69
  "swapHistory": [],
70
70
  "syncHash": undefined,
71
71
  "used": true,
72
72
  },
73
73
  {
74
- "balance": "10000001",
74
+ "balance": "10000000",
75
75
  "currencyId": "stellar",
76
76
  "derivationMode": "sep5",
77
77
  "freshAddress": "GBQMOU2WYJUP6AKY53FFKZJGQMDWCMTWSOUTZ5DVIAQPVW7AJUHSX2M5",
78
78
  "freshAddressPath": "44'/148'/4'",
79
79
  "id": "js:2:stellar:GBQMOU2WYJUP6AKY53FFKZJGQMDWCMTWSOUTZ5DVIAQPVW7AJUHSX2M5:sep5",
80
80
  "index": 4,
81
- "operationsCount": 4,
81
+ "operationsCount": 3,
82
82
  "pendingOperations": [],
83
83
  "seedIdentifier": "27c586f8499294c64d57f8d7956eef4431de58ab20e1c88001f6cf131c97d6f3",
84
84
  "spendableBalance": "0",
@@ -203,30 +203,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
203
203
  "type": "OUT",
204
204
  "value": "10000000",
205
205
  },
206
- {
207
- "accountId": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5",
208
- "blockHash": "ef457e3171c63398ecc9935759502cc1f41f472ee0b188553515bfa45b9404b0",
209
- "blockHeight": 56002611,
210
- "extra": {
211
- "blockTime": 2025-03-04T19:08:36.000Z,
212
- "ledgerOpType": "IN",
213
- "memo": "t.me/WealthAcademyStellar",
214
- "pagingToken": "240529382736080977",
215
- },
216
- "fee": "10000",
217
- "hasFailed": false,
218
- "hash": "05f4965e87c2a9b4ceb48246ec8278324156c8ea06e2b7a1d7ef49d178f79471",
219
- "id": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5-05f4965e87c2a9b4ceb48246ec8278324156c8ea06e2b7a1d7ef49d178f79471-IN",
220
- "recipients": [
221
- "GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV",
222
- ],
223
- "senders": [
224
- "GCVTUT4QMMCZFKOQTXFRHWFGBT6B4V3GUECDE6OVNC6HFKSPOBHHTBHI",
225
- ],
226
- "transactionSequenceNumber": 240200272276634700,
227
- "type": "IN",
228
- "value": "1",
229
- },
230
206
  {
231
207
  "accountId": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5",
232
208
  "blockHash": "a7769b7f7c72338772933bd009182489c81e44b2e7b73c8395b73726318fc139",
@@ -298,30 +274,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
298
274
  "type": "OUT",
299
275
  "value": "10000000",
300
276
  },
301
- {
302
- "accountId": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5",
303
- "blockHash": "de91876967432c18db672925858963de846140dc7cbfc8e73e016a09bec9f719",
304
- "blockHeight": 55972081,
305
- "extra": {
306
- "blockTime": 2025-03-02T17:43:03.000Z,
307
- "ledgerOpType": "IN",
308
- "memo": "Send XLM will return double",
309
- "pagingToken": "240398257385058400",
310
- },
311
- "fee": "10000",
312
- "hasFailed": false,
313
- "hash": "10f80f998201ebff68bccdd827700e9a0a9939de101961762a3db002f57e2a56",
314
- "id": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5-10f80f998201ebff68bccdd827700e9a0a9939de101961762a3db002f57e2a56-IN",
315
- "recipients": [
316
- "GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV",
317
- ],
318
- "senders": [
319
- "GBDBVQPLYTGE746IPBUZ2WVZIQ7ITEQI7WTAIRHOWDOJKFCZPUOFLLMC",
320
- ],
321
- "transactionSequenceNumber": 224182496688895580,
322
- "type": "IN",
323
- "value": "1",
324
- },
325
277
  {
326
278
  "accountId": "js:2:stellar:GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV:sep5",
327
279
  "blockHash": "9b53959e3850d83e925dbd0eb1bd7846e7b80c70f31ebb71494690aff354a43a",
@@ -1799,30 +1751,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
1799
1751
  "type": "IN",
1800
1752
  "value": "10000000",
1801
1753
  },
1802
- {
1803
- "accountId": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5",
1804
- "blockHash": "a503209c6c00b8266962e78a5737d64cf055b5fa4ed0b8ee9837cbd85a4aa1ae",
1805
- "blockHeight": 56007260,
1806
- "extra": {
1807
- "blockTime": 2025-03-05T02:35:15.000Z,
1808
- "ledgerOpType": "IN",
1809
- "memo": "t.me/WealthAcademyStellar",
1810
- "pagingToken": "240549350038851652",
1811
- },
1812
- "fee": "10000",
1813
- "hasFailed": false,
1814
- "hash": "11b3716f32c7cca29315d5c5f8531acde37c8f44564ef5683d1d4af491ee8369",
1815
- "id": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5-11b3716f32c7cca29315d5c5f8531acde37c8f44564ef5683d1d4af491ee8369-IN",
1816
- "recipients": [
1817
- "GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z",
1818
- ],
1819
- "senders": [
1820
- "GCVTUT4QMMCZFKOQTXFRHWFGBT6B4V3GUECDE6OVNC6HFKSPOBHHTBHI",
1821
- ],
1822
- "transactionSequenceNumber": 240200272276639000,
1823
- "type": "IN",
1824
- "value": "1",
1825
- },
1826
1754
  {
1827
1755
  "accountId": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5",
1828
1756
  "blockHash": "2ce97ae5ea75b59247c22d89a28ec88437603f5d5b8b020d53b2834d53a8f8cc",
@@ -2009,54 +1937,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
2009
1937
  "type": "IN",
2010
1938
  "value": "10000000",
2011
1939
  },
2012
- {
2013
- "accountId": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5",
2014
- "blockHash": "c3a1c60c55f04bdb4f6f9ec2debc88ef3306397763b998307f4d2514e6132ae9",
2015
- "blockHeight": 55927470,
2016
- "extra": {
2017
- "blockTime": 2025-02-27T17:17:18.000Z,
2018
- "ledgerOpType": "IN",
2019
- "memo": "Send XLM will return double",
2020
- "pagingToken": "240206654598270996",
2021
- },
2022
- "fee": "10000",
2023
- "hasFailed": false,
2024
- "hash": "6b019b55c20a4a160ecc6d3416b7bcf275eb080755e8b1c4f7885606ef4dedda",
2025
- "id": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5-6b019b55c20a4a160ecc6d3416b7bcf275eb080755e8b1c4f7885606ef4dedda-IN",
2026
- "recipients": [
2027
- "GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z",
2028
- ],
2029
- "senders": [
2030
- "GAN5MKWRBXUZSOMS4WJUWCWIMO4YV3MEVB4UN6LQDNJ46KCZA6ZTQHZM",
2031
- ],
2032
- "transactionSequenceNumber": 224182410789546850,
2033
- "type": "IN",
2034
- "value": "1",
2035
- },
2036
- {
2037
- "accountId": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5",
2038
- "blockHash": "7cc5f24068f69a7d0405ca2c1bc836f291bd3ebb848bf512a923d2f7951cfaf7",
2039
- "blockHeight": 55968678,
2040
- "extra": {
2041
- "blockTime": 2025-03-02T12:03:54.000Z,
2042
- "ledgerOpType": "IN",
2043
- "memo": "Send XLM will return double",
2044
- "pagingToken": "240383641610809364",
2045
- },
2046
- "fee": "10000",
2047
- "hasFailed": false,
2048
- "hash": "707fe3c97df2a0df4df5922615635ca3b8901cb2eee555790b9aa5ddc48f73f1",
2049
- "id": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5-707fe3c97df2a0df4df5922615635ca3b8901cb2eee555790b9aa5ddc48f73f1-IN",
2050
- "recipients": [
2051
- "GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z",
2052
- ],
2053
- "senders": [
2054
- "GAN5MKWRBXUZSOMS4WJUWCWIMO4YV3MEVB4UN6LQDNJ46KCZA6ZTQHZM",
2055
- ],
2056
- "transactionSequenceNumber": 224182410789548900,
2057
- "type": "IN",
2058
- "value": "1",
2059
- },
2060
1940
  {
2061
1941
  "accountId": "js:2:stellar:GAIXIJBMYPTSF2CDVQ35WOTULCLZIE4W2SDEK3RQGAA3A22BPWY7R53Z:sep5",
2062
1942
  "blockHash": "940f6d55e324cad32a8f495d0d4816167f2dc527e98f38a4c05d2ec6a0dd1fa3",
@@ -2317,30 +2197,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
2317
2197
  "type": "IN",
2318
2198
  "value": "9999800",
2319
2199
  },
2320
- {
2321
- "accountId": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
2322
- "blockHash": "fb3194849fbdb434e8a40ed48118a9e33999499caec01d910cfc5921569fcc74",
2323
- "blockHeight": 55965218,
2324
- "extra": {
2325
- "blockTime": 2025-03-02T06:29:04.000Z,
2326
- "ledgerOpType": "IN",
2327
- "memo": "Send XLM will return double",
2328
- "pagingToken": "240368781023604799",
2329
- },
2330
- "fee": "10000",
2331
- "hasFailed": false,
2332
- "hash": "66275feac6a658704ca0dedd08eb4eb0c3aa4d93f8c4fbeb0445151608e221f3",
2333
- "id": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5-66275feac6a658704ca0dedd08eb4eb0c3aa4d93f8c4fbeb0445151608e221f3-IN",
2334
- "recipients": [
2335
- "GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS",
2336
- ],
2337
- "senders": [
2338
- "GBWVA367C4ZMEGRZQPNME3QYXSMJ6KZ3BWWDFC4W4AINAPA5JO22GAFM",
2339
- ],
2340
- "transactionSequenceNumber": 224182376429809540,
2341
- "type": "IN",
2342
- "value": "1",
2343
- },
2344
2200
  {
2345
2201
  "accountId": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
2346
2202
  "blockHash": "2583196005865980360213d8744c1b7fec8ca4c597bc7f02523b9f58e86b28b6",
@@ -2482,30 +2338,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
2482
2338
  "type": "OUT",
2483
2339
  "value": "20000000",
2484
2340
  },
2485
- {
2486
- "accountId": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
2487
- "blockHash": "059ac557d43c4f9abcf3761ae47a3a016ff22a53483ecd9e92747528747aca7b",
2488
- "blockHeight": 56008962,
2489
- "extra": {
2490
- "blockTime": 2025-03-05T05:20:29.000Z,
2491
- "ledgerOpType": "IN",
2492
- "memo": "t.me/WealthAcademyStellar",
2493
- "pagingToken": "240556660073410576",
2494
- },
2495
- "fee": "10000",
2496
- "hasFailed": false,
2497
- "hash": "cccc617abbe10c7f72105522d7142d33540684b1c43cdc663c1ac91bd4bd9375",
2498
- "id": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5-cccc617abbe10c7f72105522d7142d33540684b1c43cdc663c1ac91bd4bd9375-IN",
2499
- "recipients": [
2500
- "GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS",
2501
- ],
2502
- "senders": [
2503
- "GCVTUT4QMMCZFKOQTXFRHWFGBT6B4V3GUECDE6OVNC6HFKSPOBHHTBHI",
2504
- ],
2505
- "transactionSequenceNumber": 240200272276640450,
2506
- "type": "IN",
2507
- "value": "1",
2508
- },
2509
2341
  {
2510
2342
  "accountId": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
2511
2343
  "blockHash": "7fe0edcad6eda2aac460570e81b895da10a5f59457aa2f97dbe735758f2f4a24",
@@ -2576,30 +2408,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
2576
2408
  "type": "OUT",
2577
2409
  "value": "100",
2578
2410
  },
2579
- {
2580
- "accountId": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
2581
- "blockHash": "1fbe0399c6d69ee786a9bf8bc8c2d5367cece4a14978384a35270b68b9871ffd",
2582
- "blockHeight": 55924151,
2583
- "extra": {
2584
- "blockTime": 2025-02-27T11:56:15.000Z,
2585
- "ledgerOpType": "IN",
2586
- "memo": "Send XLM will return double",
2587
- "pagingToken": "240192399601573951",
2588
- },
2589
- "fee": "10000",
2590
- "hasFailed": false,
2591
- "hash": "e6ea018c4edb4cdadbe69505f884102d76a324eb963b03dc506b87fc68bfe6f3",
2592
- "id": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5-e6ea018c4edb4cdadbe69505f884102d76a324eb963b03dc506b87fc68bfe6f3-IN",
2593
- "recipients": [
2594
- "GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS",
2595
- ],
2596
- "senders": [
2597
- "GBWVA367C4ZMEGRZQPNME3QYXSMJ6KZ3BWWDFC4W4AINAPA5JO22GAFM",
2598
- ],
2599
- "transactionSequenceNumber": 224182376429807500,
2600
- "type": "IN",
2601
- "value": "1",
2602
- },
2603
2411
  {
2604
2412
  "accountId": "js:2:stellar:GCDDN6T2LJN3T7SPWJQV6BCCL5KNY5GBN7X4CMSZLDEXDHXAH32TOAHS:sep5",
2605
2413
  "blockHash": "8ddf2943fb33e1073e0465753c07f67c9b716870a4805de91b9628e355f91f83",
@@ -2717,30 +2525,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
2717
2525
  "type": "IN",
2718
2526
  "value": "1000",
2719
2527
  },
2720
- {
2721
- "accountId": "js:2:stellar:GAHQKL7UW5DSNJXWNA4ASJ6D2I7JYFWVHDFWYJZK3WDR4BUTG27K2PWC:sep5",
2722
- "blockHash": "702b748ceb91919b47aa60268bc388f13d21c74fe49738ea267c6bca2c32b6bb",
2723
- "blockHeight": 56031711,
2724
- "extra": {
2725
- "blockTime": 2025-03-06T18:17:33.000Z,
2726
- "ledgerOpType": "IN",
2727
- "memo": "t.me/WealthAcademyStellar",
2728
- "pagingToken": "240654366283989072",
2729
- },
2730
- "fee": "10000",
2731
- "hasFailed": false,
2732
- "hash": "214048caa2a53392a0e72182289e9b5569cb2de8841194785e896e2b4ec240d6",
2733
- "id": "js:2:stellar:GAHQKL7UW5DSNJXWNA4ASJ6D2I7JYFWVHDFWYJZK3WDR4BUTG27K2PWC:sep5-214048caa2a53392a0e72182289e9b5569cb2de8841194785e896e2b4ec240d6-IN",
2734
- "recipients": [
2735
- "GAHQKL7UW5DSNJXWNA4ASJ6D2I7JYFWVHDFWYJZK3WDR4BUTG27K2PWC",
2736
- ],
2737
- "senders": [
2738
- "GCVTUT4QMMCZFKOQTXFRHWFGBT6B4V3GUECDE6OVNC6HFKSPOBHHTBHI",
2739
- ],
2740
- "transactionSequenceNumber": 240200272276660830,
2741
- "type": "IN",
2742
- "value": "1",
2743
- },
2744
2528
  {
2745
2529
  "accountId": "js:2:stellar:GAHQKL7UW5DSNJXWNA4ASJ6D2I7JYFWVHDFWYJZK3WDR4BUTG27K2PWC:sep5",
2746
2530
  "blockHash": "7a8a04682794135315a774dbeda355e18774b081c418b7e3fb9b75e985a9b499",
@@ -3136,30 +2920,6 @@ exports[`stellar currency bridge scanAccounts stellar seed 1 2`] = `
3136
2920
  "type": "IN",
3137
2921
  "value": "10000000",
3138
2922
  },
3139
- {
3140
- "accountId": "js:2:stellar:GBQMOU2WYJUP6AKY53FFKZJGQMDWCMTWSOUTZ5DVIAQPVW7AJUHSX2M5:sep5",
3141
- "blockHash": "39c16b2810fc502733f411484db4bc41f40d9989db0a094e737e0b624e93522c",
3142
- "blockHeight": 56072035,
3143
- "extra": {
3144
- "blockTime": 2025-03-09T11:28:36.000Z,
3145
- "ledgerOpType": "IN",
3146
- "memo": "t.me/WealthAcademyStellar",
3147
- "pagingToken": "240827556545601633",
3148
- },
3149
- "fee": "10000",
3150
- "hasFailed": false,
3151
- "hash": "dffbcb57db47eda8f1ae59f94f82776b02beaf2e91b7e19079fc3d88882e1cc5",
3152
- "id": "js:2:stellar:GBQMOU2WYJUP6AKY53FFKZJGQMDWCMTWSOUTZ5DVIAQPVW7AJUHSX2M5:sep5-dffbcb57db47eda8f1ae59f94f82776b02beaf2e91b7e19079fc3d88882e1cc5-IN",
3153
- "recipients": [
3154
- "GBQMOU2WYJUP6AKY53FFKZJGQMDWCMTWSOUTZ5DVIAQPVW7AJUHSX2M5",
3155
- ],
3156
- "senders": [
3157
- "GCVTUT4QMMCZFKOQTXFRHWFGBT6B4V3GUECDE6OVNC6HFKSPOBHHTBHI",
3158
- ],
3159
- "transactionSequenceNumber": 240200272276696130,
3160
- "type": "IN",
3161
- "value": "1",
3162
- },
3163
2923
  ],
3164
2924
  [],
3165
2925
  ]
@@ -408,13 +408,6 @@ export const DEFAULT_FEATURES: Features = {
408
408
  },
409
409
  },
410
410
 
411
- ptxEarnLiveApp: {
412
- enabled: true,
413
- params: {
414
- manifest_id: "earn",
415
- },
416
- },
417
-
418
411
  ptxSwapLiveAppMobile: {
419
412
  enabled: false,
420
413
  params: {
@@ -608,14 +601,6 @@ export const DEFAULT_FEATURES: Features = {
608
601
  },
609
602
  },
610
603
  llNftSupport: DEFAULT_FEATURE,
611
- llNftEntryPoint: {
612
- ...DEFAULT_FEATURE,
613
- params: {
614
- opensea: false,
615
- magiceden: false,
616
- chains: ["ethereum", "polygon", "base", "arbitrum"],
617
- },
618
- },
619
604
  };
620
605
 
621
606
  // Firebase SDK treat JSON values as strings
@@ -11,7 +11,6 @@ import {
11
11
  DisconnectedDevice,
12
12
  StatusCodes,
13
13
  LockedDeviceError,
14
- LatestFirmwareVersionRequired,
15
14
  } from "@ledgerhq/errors";
16
15
  import type Transport from "@ledgerhq/hw-transport";
17
16
  import { type DerivationMode, DeviceInfo, FirmwareUpdateContext } from "@ledgerhq/types-live";
@@ -26,6 +25,7 @@ import getDeviceInfo from "./getDeviceInfo";
26
25
  import getAddress from "./getAddress";
27
26
  import openApp from "./openApp";
28
27
  import quitApp from "./quitApp";
28
+ import { LatestFirmwareVersionRequired } from "../errors";
29
29
  import { mustUpgrade } from "../apps";
30
30
  import isUpdateAvailable from "./isUpdateAvailable";
31
31
  import { LockedDeviceEvent } from "./actions/types";