@ledgerhq/coin-hedera 1.11.3-nightly.0 → 1.12.0-nightly.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 (61) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +38 -6
  3. package/lib/api/network.d.ts.map +1 -1
  4. package/lib/api/network.js +18 -9
  5. package/lib/api/network.js.map +1 -1
  6. package/lib/api/network.test.d.ts +2 -0
  7. package/lib/api/network.test.d.ts.map +1 -0
  8. package/lib/api/network.test.js +45 -0
  9. package/lib/api/network.test.js.map +1 -0
  10. package/lib/bridge/index.d.ts.map +1 -1
  11. package/lib/bridge/index.js +3 -0
  12. package/lib/bridge/index.js.map +1 -1
  13. package/lib/bridge/prepareTransaction.d.ts.map +1 -1
  14. package/lib/bridge/prepareTransaction.js +23 -1
  15. package/lib/bridge/prepareTransaction.js.map +1 -1
  16. package/lib/bridge/prepareTransaction.test.d.ts +2 -0
  17. package/lib/bridge/prepareTransaction.test.d.ts.map +1 -0
  18. package/lib/bridge/prepareTransaction.test.js +58 -0
  19. package/lib/bridge/prepareTransaction.test.js.map +1 -0
  20. package/lib/bridge/synchronisation.d.ts.map +1 -1
  21. package/lib/bridge/synchronisation.js +3 -2
  22. package/lib/bridge/synchronisation.js.map +1 -1
  23. package/lib/transaction.d.ts.map +1 -1
  24. package/lib/transaction.js +6 -0
  25. package/lib/transaction.js.map +1 -1
  26. package/lib/types/bridge.d.ts +4 -1
  27. package/lib/types/bridge.d.ts.map +1 -1
  28. package/lib-es/api/network.d.ts.map +1 -1
  29. package/lib-es/api/network.js +18 -9
  30. package/lib-es/api/network.js.map +1 -1
  31. package/lib-es/api/network.test.d.ts +2 -0
  32. package/lib-es/api/network.test.d.ts.map +1 -0
  33. package/lib-es/api/network.test.js +40 -0
  34. package/lib-es/api/network.test.js.map +1 -0
  35. package/lib-es/bridge/index.d.ts.map +1 -1
  36. package/lib-es/bridge/index.js +3 -0
  37. package/lib-es/bridge/index.js.map +1 -1
  38. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
  39. package/lib-es/bridge/prepareTransaction.js +24 -2
  40. package/lib-es/bridge/prepareTransaction.js.map +1 -1
  41. package/lib-es/bridge/prepareTransaction.test.d.ts +2 -0
  42. package/lib-es/bridge/prepareTransaction.test.d.ts.map +1 -0
  43. package/lib-es/bridge/prepareTransaction.test.js +30 -0
  44. package/lib-es/bridge/prepareTransaction.test.js.map +1 -0
  45. package/lib-es/bridge/synchronisation.d.ts.map +1 -1
  46. package/lib-es/bridge/synchronisation.js +3 -2
  47. package/lib-es/bridge/synchronisation.js.map +1 -1
  48. package/lib-es/transaction.d.ts.map +1 -1
  49. package/lib-es/transaction.js +3 -0
  50. package/lib-es/transaction.js.map +1 -1
  51. package/lib-es/types/bridge.d.ts +4 -1
  52. package/lib-es/types/bridge.d.ts.map +1 -1
  53. package/package.json +10 -10
  54. package/src/api/network.test.ts +49 -0
  55. package/src/api/network.ts +24 -9
  56. package/src/bridge/index.ts +3 -0
  57. package/src/bridge/prepareTransaction.test.ts +38 -0
  58. package/src/bridge/prepareTransaction.ts +26 -2
  59. package/src/bridge/synchronisation.ts +4 -2
  60. package/src/transaction.ts +3 -0
  61. package/src/types/bridge.ts +4 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAW1E,OAAO,KAAK,EAAE,WAAW,EAAqB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA2C5F,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC;;;EAKvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAW1E,OAAO,KAAK,EAAE,WAAW,EAAqB,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA8C5F,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC;;;EAKvE"}
@@ -38,6 +38,9 @@ function buildAccountBridge(signerContext) {
38
38
  sync,
39
39
  receive: receive(getAddressWrapper(getAddress)),
40
40
  signOperation,
41
+ signRawOperation: () => {
42
+ throw new Error("signRawOperation is not supported");
43
+ },
41
44
  broadcast,
42
45
  getSerializedAddressParameters,
43
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,GAClB,MAAM,2CAA2C,CAAC;AACnD,OAAO,iBAAiB,MAAM,mDAAmD,CAAC;AAGlF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAGvC,SAAS,mBAAmB,CAAC,aAA0C;IACrE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,eAAe;QACf,kBAAkB;QAClB,YAAY,EAAE,iBAAiB,CAAC,UAAU,CAAC;KAC5C,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;AAE3C,SAAS,kBAAkB,CACzB,aAA0C;IAE1C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE3C,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAExD,OAAO;QACL,oBAAoB;QACpB,iBAAiB;QACjB,iBAAiB;QACjB,oBAAoB;QACpB,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,IAAI;QACJ,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC/C,aAAa;QACb,SAAS;QACT,8BAA8B;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAA0C;IACtE,OAAO;QACL,cAAc,EAAE,mBAAmB,CAAC,aAAa,CAAC;QAClD,aAAa,EAAE,kBAAkB,CAAC,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,GAClB,MAAM,2CAA2C,CAAC;AACnD,OAAO,iBAAiB,MAAM,mDAAmD,CAAC;AAGlF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAGvC,SAAS,mBAAmB,CAAC,aAA0C;IACrE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,gBAAgB,CAAC;QACpC,eAAe;QACf,kBAAkB;QAClB,YAAY,EAAE,iBAAiB,CAAC,UAAU,CAAC;KAC5C,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;QACjB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;AAE3C,SAAS,kBAAkB,CACzB,aAA0C;IAE1C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE3C,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAExD,OAAO;QACL,oBAAoB;QACpB,iBAAiB;QACjB,iBAAiB;QACjB,oBAAoB;QACpB,kBAAkB;QAClB,kBAAkB;QAClB,oBAAoB;QACpB,IAAI;QACJ,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC/C,aAAa;QACb,gBAAgB,EAAE,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,SAAS;QACT,8BAA8B;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAA0C;IACtE,OAAO;QACL,cAAc,EAAE,mBAAmB,CAAC,aAAa,CAAC;QAClD,aAAa,EAAE,kBAAkB,CAAC,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAU/E,CAAC"}
1
+ {"version":3,"file":"prepareTransaction.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,oBAAoB,CA+B/E,CAAC"}
@@ -1,4 +1,7 @@
1
- import { calculateAmount } from "./utils";
1
+ import { findSubAccountById, isTokenAccount } from "@ledgerhq/coin-framework/account/helpers";
2
+ import { calculateAmount, getEstimatedFees } from "./utils";
3
+ import { HEDERA_OPERATION_TYPES } from "../constants";
4
+ import { isTokenAssociateTransaction } from "../logic";
2
5
  /**
3
6
  * Gather any more neccessary information for a transaction,
4
7
  * potentially from a network.
@@ -8,9 +11,28 @@ import { calculateAmount } from "./utils";
8
11
  *
9
12
  */
10
13
  export const prepareTransaction = async (account, transaction) => {
14
+ const subAccount = findSubAccountById(account, transaction?.subAccountId || "");
15
+ const isTokenTransaction = isTokenAccount(subAccount);
16
+ let operationType;
17
+ if (isTokenAssociateTransaction(transaction)) {
18
+ operationType = HEDERA_OPERATION_TYPES.TokenAssociate;
19
+ }
20
+ else if (isTokenTransaction) {
21
+ operationType = HEDERA_OPERATION_TYPES.TokenTransfer;
22
+ }
23
+ else {
24
+ operationType = HEDERA_OPERATION_TYPES.CryptoTransfer;
25
+ }
11
26
  // explicitly calculate transaction amount to account for `useAllAmount` flag (send max flow)
12
27
  // i.e. if `useAllAmount` has been toggled to true, this is where it will update the transaction to reflect that action
13
- const { amount } = await calculateAmount({ account, transaction });
28
+ const [{ amount }, estimatedFees] = await Promise.all([
29
+ calculateAmount({ account, transaction }),
30
+ getEstimatedFees(account, operationType),
31
+ ]);
32
+ // `maxFee` must be explicitly set to avoid the @hashgraph/sdk default fallback
33
+ // this ensures device app validation passes (e.g. during swap flow)
34
+ // it's applied via `tx.setMaxTransactionFee` when building the transaction
35
+ transaction.maxFee = estimatedFees;
14
36
  transaction.amount = amount;
15
37
  return transaction;
16
38
  };
@@ -1 +1 @@
1
- {"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACW,EAAE;IACxB,6FAA6F;IAC7F,uHAAuH;IACvH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACnE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
1
+ {"version":3,"file":"prepareTransaction.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAG9F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAqD,KAAK,EACvF,OAAO,EACP,WAAW,EACW,EAAE;IACxB,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IAChF,MAAM,kBAAkB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,aAAqC,CAAC;IAE1C,IAAI,2BAA2B,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,aAAa,GAAG,sBAAsB,CAAC,cAAc,CAAC;IACxD,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC9B,aAAa,GAAG,sBAAsB,CAAC,aAAa,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,sBAAsB,CAAC,cAAc,CAAC;IACxD,CAAC;IAED,6FAA6F;IAC7F,uHAAuH;IACvH,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QACzC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC;KACzC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,oEAAoE;IACpE,2EAA2E;IAC3E,WAAW,CAAC,MAAM,GAAG,aAAa,CAAC;IAEnC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAE5B,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prepareTransaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareTransaction.test.d.ts","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,30 @@
1
+ import BigNumber from "bignumber.js";
2
+ import * as utils from "./utils";
3
+ import { prepareTransaction } from "./prepareTransaction";
4
+ describe("prepareTransaction", () => {
5
+ const mockAccount = {
6
+ id: "hedera:0:testAccount",
7
+ freshAddress: "0.0.123",
8
+ spendableBalance: new BigNumber(1000000),
9
+ currency: { id: "hedera" },
10
+ };
11
+ const mockTx = {
12
+ family: "hedera",
13
+ amount: new BigNumber(0),
14
+ recipient: "",
15
+ useAllAmount: false,
16
+ };
17
+ beforeEach(() => {
18
+ jest.clearAllMocks();
19
+ jest.spyOn(utils, "getEstimatedFees").mockResolvedValue(Promise.resolve(new BigNumber(10)));
20
+ jest
21
+ .spyOn(utils, "calculateAmount")
22
+ .mockResolvedValue(Promise.resolve({ amount: new BigNumber(100), totalSpent: new BigNumber(100) }));
23
+ });
24
+ test("should set amount and maxFee from utils", async () => {
25
+ const result = await prepareTransaction(mockAccount, mockTx);
26
+ expect(result.amount).toStrictEqual(new BigNumber(100));
27
+ expect(result.maxFee).toStrictEqual(new BigNumber(10));
28
+ });
29
+ });
30
+ //# sourceMappingURL=prepareTransaction.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareTransaction.test.js","sourceRoot":"","sources":["../../src/bridge/prepareTransaction.test.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,WAAW,GAAG;QAClB,EAAE,EAAE,sBAAsB;QAC1B,YAAY,EAAE,SAAS;QACvB,gBAAgB,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;QACxC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;KAChB,CAAC;IAEb,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC;QACxB,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,KAAK;KACL,CAAC;IAEjB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5F,IAAI;aACD,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC;aAC/B,iBAAiB,CAChB,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAChF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,aAAa,CA4E1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAqBhC,CAAC"}
1
+ {"version":3,"file":"synchronisation.d.ts","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,aAAa,CA8E1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAqBhC,CAAC"}
@@ -23,6 +23,7 @@ export const getAccountShape = async (info, { blacklistedTokenIds }) => {
23
23
  getAccount(address),
24
24
  getAccountTokens(address),
25
25
  ]);
26
+ const accountBalance = new BigNumber(mirrorAccount.balance.balance);
26
27
  // we should sync again when new tokens are added or blacklist changes
27
28
  const syncHash = getSyncHash(currency, blacklistedTokenIds);
28
29
  const shouldSyncFromScratch = !initialAccount || syncHash !== initialAccount?.syncHash;
@@ -45,8 +46,8 @@ export const getAccountShape = async (info, { blacklistedTokenIds }) => {
45
46
  freshAddress: address,
46
47
  syncHash,
47
48
  lastSyncDate: new Date(),
48
- balance: new BigNumber(mirrorAccount.balance.balance),
49
- spendableBalance: new BigNumber(mirrorAccount.balance.balance),
49
+ balance: accountBalance,
50
+ spendableBalance: accountBalance,
50
51
  operations,
51
52
  operationsCount: operations.length,
52
53
  // NOTE: there are no "blocks" in hedera
@@ -1 +1 @@
1
- {"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synchronisation.js","sourceRoot":"","sources":["../../src/bridge/synchronisation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAOpF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CAQlE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAQ/D;;;;;;;;;AAED,wBAOE"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAQ3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIpD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAOpF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,WAAW,CASlE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,GAAG,cAAc,CAS/D;;;;;;;;;AAED,wBAOE"}
@@ -1,3 +1,4 @@
1
+ import BigNumber from "bignumber.js";
1
2
  import { formatTransactionStatus } from "@ledgerhq/coin-framework/formatters";
2
3
  import { fromTransactionCommonRaw, fromTransactionStatusRawCommon as fromTransactionStatusRaw, toTransactionCommonRaw, toTransactionStatusRawCommon as toTransactionStatusRaw, } from "@ledgerhq/coin-framework/serialization";
3
4
  import { getAccountCurrency } from "@ledgerhq/coin-framework/account/index";
@@ -15,6 +16,7 @@ export function fromTransactionRaw(tr) {
15
16
  ...common,
16
17
  family: tr.family,
17
18
  memo: tr.memo,
19
+ ...(tr.maxFee && { maxFee: new BigNumber(tr.maxFee) }),
18
20
  };
19
21
  }
20
22
  export function toTransactionRaw(t) {
@@ -23,6 +25,7 @@ export function toTransactionRaw(t) {
23
25
  ...common,
24
26
  family: t.family,
25
27
  memo: t.memo,
28
+ ...(t.maxFee && { maxFee: t.maxFee.toString() }),
26
29
  };
27
30
  }
28
31
  export default {
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACL,wBAAwB,EACxB,8BAA8B,IAAI,wBAAwB,EAC1D,sBAAsB,EACtB,4BAA4B,IAAI,sBAAsB,GACvD,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,MAAM,UAAU,iBAAiB,CAAC,WAAwB,EAAE,OAAgB;IAC1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE;QAC1F,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,QAAQ,MAAM,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAkB;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,EAAE,CAAC,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAc;IAC7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAEzC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC;AACJ,CAAC;AAED,eAAe;IACb,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,wBAAwB;IACxB,sBAAsB;IACtB,uBAAuB;CACxB,CAAC"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACL,wBAAwB,EACxB,8BAA8B,IAAI,wBAAwB,EAC1D,sBAAsB,EACtB,4BAA4B,IAAI,sBAAsB,GACvD,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,MAAM,UAAU,iBAAiB,CAAC,WAAwB,EAAE,OAAgB;IAC1E,MAAM,MAAM,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE;QAC1F,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO,QAAQ,MAAM,QAAQ,WAAW,CAAC,SAAS,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAkB;IACnD,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAc;IAC7C,MAAM,MAAM,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAEzC,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,eAAe;IACb,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,wBAAwB;IACxB,sBAAsB;IACtB,uBAAuB;CACxB,CAAC"}
@@ -1,4 +1,5 @@
1
- import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
1
+ import BigNumber from "bignumber.js";
2
+ import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
2
3
  import type { Account, AccountRaw, Operation, TransactionCommon, TransactionCommonRaw, TransactionStatusCommon, TransactionStatusCommonRaw } from "@ledgerhq/types-live";
3
4
  import { HEDERA_TRANSACTION_KINDS } from "../constants";
4
5
  export type NetworkInfo = {
@@ -14,11 +15,13 @@ export type TokenAssociateProperties = {
14
15
  export type Transaction = TransactionCommon & {
15
16
  family: "hedera";
16
17
  memo?: string | undefined;
18
+ maxFee?: BigNumber;
17
19
  properties?: TokenAssociateProperties;
18
20
  };
19
21
  export type TransactionRaw = TransactionCommonRaw & {
20
22
  family: "hedera";
21
23
  memo?: string | undefined;
24
+ maxFee?: string;
22
25
  properties?: TokenAssociateProperties;
23
26
  };
24
27
  export type TransactionStatus = TransactionStatusCommon;
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC;IAC1D,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC;IAC1D,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG;IAClD,MAAM,EAAE,QAAQ,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,6BAA6B,EAAE,MAAM,CAAC;IACtC,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG;IAC1C,eAAe,CAAC,EAAE,kBAAkB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/coin-hedera",
3
- "version": "1.11.3-nightly.0",
3
+ "version": "1.12.0-nightly.0",
4
4
  "description": "Ledger Hedera Coin integration",
5
5
  "keywords": [
6
6
  "Ledger",
@@ -82,14 +82,14 @@
82
82
  "invariant": "^2.2.2",
83
83
  "lodash": "^4.17.21",
84
84
  "rxjs": "^7.8.1",
85
- "@ledgerhq/coin-framework": "^6.6.0-nightly.0",
86
- "@ledgerhq/cryptoassets": "^13.30.0-nightly.0",
87
- "@ledgerhq/devices": "8.6.0",
88
- "@ledgerhq/errors": "^6.26.0-nightly.0",
89
- "@ledgerhq/live-countervalues": "^0.7.3-nightly.0",
90
- "@ledgerhq/live-env": "^2.17.0",
91
- "@ledgerhq/live-network": "^2.0.18",
92
- "@ledgerhq/types-live": "^6.86.0-nightly.0"
85
+ "@ledgerhq/coin-framework": "^6.7.0-nightly.0",
86
+ "@ledgerhq/cryptoassets": "^13.31.0-nightly.0",
87
+ "@ledgerhq/devices": "8.6.1",
88
+ "@ledgerhq/errors": "^6.26.0",
89
+ "@ledgerhq/live-countervalues": "^0.7.4-nightly.0",
90
+ "@ledgerhq/live-env": "^2.18.0",
91
+ "@ledgerhq/live-network": "^2.0.19",
92
+ "@ledgerhq/types-live": "^6.87.0-nightly.0"
93
93
  },
94
94
  "devDependencies": {
95
95
  "@types/imurmurhash": "^0.1.4",
@@ -100,7 +100,7 @@
100
100
  "jest": "^29.7.0",
101
101
  "ts-jest": "^29.1.1",
102
102
  "@ledgerhq/disable-network-setup": "^0.0.0",
103
- "@ledgerhq/types-cryptoassets": "^7.28.0-nightly.0"
103
+ "@ledgerhq/types-cryptoassets": "^7.29.0-nightly.0"
104
104
  },
105
105
  "scripts": {
106
106
  "clean": "rimraf lib lib-es",
@@ -0,0 +1,49 @@
1
+ import BigNumber from "bignumber.js";
2
+ import { TransferTransaction } from "@hashgraph/sdk";
3
+ import type { Account } from "@ledgerhq/types-live";
4
+ import { buildUnsignedTransaction } from "./network";
5
+ import { Transaction } from "../types";
6
+ import invariant from "invariant";
7
+
8
+ describe("buildUnsignedTransaction", () => {
9
+ const mockAccount = {
10
+ freshAddress: "0.0.123",
11
+ id: "hedera:0:0.0.123",
12
+ balance: new BigNumber(1000),
13
+ } as Account;
14
+
15
+ test("builds basic transaction without maxFee", async () => {
16
+ const transaction: Transaction = {
17
+ family: "hedera",
18
+ amount: new BigNumber(100),
19
+ recipient: "0.0.456",
20
+ memo: "test memo",
21
+ };
22
+
23
+ const result = await buildUnsignedTransaction({ account: mockAccount, transaction });
24
+
25
+ expect(result).toBeInstanceOf(TransferTransaction);
26
+ invariant(result instanceof TransferTransaction, "hedera: TransferTransaction type guard");
27
+ expect(result.transactionMemo).toBe("test memo");
28
+ expect(result.isFrozen()).toBe(true);
29
+ expect(result.hbarTransfers.size).toBe(2);
30
+
31
+ const senderTransfer = result.hbarTransfers.get("0.0.123");
32
+ const recipientTransfer = result.hbarTransfers.get("0.0.456");
33
+
34
+ expect(senderTransfer?.toTinybars().toNumber()).toBe(-100);
35
+ expect(recipientTransfer?.toTinybars().toNumber()).toBe(100);
36
+ });
37
+
38
+ test("sets max transaction fee when provided", async () => {
39
+ const transaction: Transaction = {
40
+ family: "hedera",
41
+ amount: new BigNumber(100),
42
+ recipient: "0.0.456",
43
+ maxFee: new BigNumber(50),
44
+ };
45
+
46
+ const result = await buildUnsignedTransaction({ account: mockAccount, transaction });
47
+ expect(result.maxTransactionFee?.toTinybars().toNumber()).toBe(50);
48
+ });
49
+ });
@@ -34,13 +34,18 @@ async function buildUnsignedCoinTransaction({
34
34
  const accountId = account.freshAddress;
35
35
  const hbarAmount = Hbar.fromTinybars(transaction.amount);
36
36
 
37
- return new TransferTransaction()
37
+ const tx = new TransferTransaction()
38
38
  .setNodeAccountIds(nodeAccountIds)
39
39
  .setTransactionId(TransactionId.generate(accountId))
40
40
  .setTransactionMemo(transaction.memo ?? "")
41
41
  .addHbarTransfer(accountId, hbarAmount.negated())
42
- .addHbarTransfer(transaction.recipient, hbarAmount)
43
- .freeze();
42
+ .addHbarTransfer(transaction.recipient, hbarAmount);
43
+
44
+ if (transaction.maxFee) {
45
+ tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
46
+ }
47
+
48
+ return tx.freeze();
44
49
  }
45
50
 
46
51
  async function buildUnsignedTokenTransaction({
@@ -55,13 +60,18 @@ async function buildUnsignedTokenTransaction({
55
60
  const accountId = account.freshAddress;
56
61
  const tokenId = tokenAccount.token.contractAddress;
57
62
 
58
- return new TransferTransaction()
63
+ const tx = new TransferTransaction()
59
64
  .setNodeAccountIds(nodeAccountIds)
60
65
  .setTransactionId(TransactionId.generate(accountId))
61
66
  .setTransactionMemo(transaction.memo ?? "")
62
67
  .addTokenTransfer(tokenId, accountId, transaction.amount.negated().toNumber())
63
- .addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber())
64
- .freeze();
68
+ .addTokenTransfer(tokenId, transaction.recipient, transaction.amount.toNumber());
69
+
70
+ if (transaction.maxFee) {
71
+ tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
72
+ }
73
+
74
+ return tx.freeze();
65
75
  }
66
76
 
67
77
  async function buildTokenAssociateTransaction({
@@ -75,13 +85,18 @@ async function buildTokenAssociateTransaction({
75
85
 
76
86
  const accountId = account.freshAddress;
77
87
 
78
- return new TokenAssociateTransaction()
88
+ const tx = new TokenAssociateTransaction()
79
89
  .setNodeAccountIds(nodeAccountIds)
80
90
  .setTransactionId(TransactionId.generate(accountId))
81
91
  .setTransactionMemo(transaction.memo ?? "")
82
92
  .setAccountId(accountId)
83
- .setTokenIds([transaction.properties.token.contractAddress])
84
- .freeze();
93
+ .setTokenIds([transaction.properties.token.contractAddress]);
94
+
95
+ if (transaction.maxFee) {
96
+ tx.setMaxTransactionFee(Hbar.fromTinybars(transaction.maxFee.toNumber()));
97
+ }
98
+
99
+ return tx.freeze();
85
100
  }
86
101
 
87
102
  export async function buildUnsignedTransaction({
@@ -55,6 +55,9 @@ function buildAccountBridge(
55
55
  sync,
56
56
  receive: receive(getAddressWrapper(getAddress)),
57
57
  signOperation,
58
+ signRawOperation: () => {
59
+ throw new Error("signRawOperation is not supported");
60
+ },
58
61
  broadcast,
59
62
  getSerializedAddressParameters,
60
63
  };
@@ -0,0 +1,38 @@
1
+ import BigNumber from "bignumber.js";
2
+ import type { Account } from "@ledgerhq/types-live";
3
+ import * as utils from "./utils";
4
+ import { prepareTransaction } from "./prepareTransaction";
5
+ import { Transaction } from "../types";
6
+
7
+ describe("prepareTransaction", () => {
8
+ const mockAccount = {
9
+ id: "hedera:0:testAccount",
10
+ freshAddress: "0.0.123",
11
+ spendableBalance: new BigNumber(1000000),
12
+ currency: { id: "hedera" },
13
+ } as Account;
14
+
15
+ const mockTx = {
16
+ family: "hedera",
17
+ amount: new BigNumber(0),
18
+ recipient: "",
19
+ useAllAmount: false,
20
+ } as Transaction;
21
+
22
+ beforeEach(() => {
23
+ jest.clearAllMocks();
24
+
25
+ jest.spyOn(utils, "getEstimatedFees").mockResolvedValue(Promise.resolve(new BigNumber(10)));
26
+ jest
27
+ .spyOn(utils, "calculateAmount")
28
+ .mockResolvedValue(
29
+ Promise.resolve({ amount: new BigNumber(100), totalSpent: new BigNumber(100) }),
30
+ );
31
+ });
32
+
33
+ test("should set amount and maxFee from utils", async () => {
34
+ const result = await prepareTransaction(mockAccount, mockTx);
35
+ expect(result.amount).toStrictEqual(new BigNumber(100));
36
+ expect(result.maxFee).toStrictEqual(new BigNumber(10));
37
+ });
38
+ });
@@ -1,6 +1,9 @@
1
+ import { findSubAccountById, isTokenAccount } from "@ledgerhq/coin-framework/account/helpers";
1
2
  import type { AccountBridge } from "@ledgerhq/types-live";
2
3
  import type { Transaction } from "../types";
3
- import { calculateAmount } from "./utils";
4
+ import { calculateAmount, getEstimatedFees } from "./utils";
5
+ import { HEDERA_OPERATION_TYPES } from "../constants";
6
+ import { isTokenAssociateTransaction } from "../logic";
4
7
 
5
8
  /**
6
9
  * Gather any more neccessary information for a transaction,
@@ -14,9 +17,30 @@ export const prepareTransaction: AccountBridge<Transaction>["prepareTransaction"
14
17
  account,
15
18
  transaction,
16
19
  ): Promise<Transaction> => {
20
+ const subAccount = findSubAccountById(account, transaction?.subAccountId || "");
21
+ const isTokenTransaction = isTokenAccount(subAccount);
22
+ let operationType: HEDERA_OPERATION_TYPES;
23
+
24
+ if (isTokenAssociateTransaction(transaction)) {
25
+ operationType = HEDERA_OPERATION_TYPES.TokenAssociate;
26
+ } else if (isTokenTransaction) {
27
+ operationType = HEDERA_OPERATION_TYPES.TokenTransfer;
28
+ } else {
29
+ operationType = HEDERA_OPERATION_TYPES.CryptoTransfer;
30
+ }
31
+
17
32
  // explicitly calculate transaction amount to account for `useAllAmount` flag (send max flow)
18
33
  // i.e. if `useAllAmount` has been toggled to true, this is where it will update the transaction to reflect that action
19
- const { amount } = await calculateAmount({ account, transaction });
34
+ const [{ amount }, estimatedFees] = await Promise.all([
35
+ calculateAmount({ account, transaction }),
36
+ getEstimatedFees(account, operationType),
37
+ ]);
38
+
39
+ // `maxFee` must be explicitly set to avoid the @hashgraph/sdk default fallback
40
+ // this ensures device app validation passes (e.g. during swap flow)
41
+ // it's applied via `tx.setMaxTransactionFee` when building the transaction
42
+ transaction.maxFee = estimatedFees;
43
+
20
44
  transaction.amount = amount;
21
45
 
22
46
  return transaction;
@@ -43,6 +43,8 @@ export const getAccountShape: GetAccountShape<HederaAccount> = async (
43
43
  getAccountTokens(address),
44
44
  ]);
45
45
 
46
+ const accountBalance = new BigNumber(mirrorAccount.balance.balance);
47
+
46
48
  // we should sync again when new tokens are added or blacklist changes
47
49
  const syncHash = getSyncHash(currency, blacklistedTokenIds);
48
50
  const shouldSyncFromScratch = !initialAccount || syncHash !== initialAccount?.syncHash;
@@ -82,8 +84,8 @@ export const getAccountShape: GetAccountShape<HederaAccount> = async (
82
84
  freshAddress: address,
83
85
  syncHash,
84
86
  lastSyncDate: new Date(),
85
- balance: new BigNumber(mirrorAccount.balance.balance),
86
- spendableBalance: new BigNumber(mirrorAccount.balance.balance),
87
+ balance: accountBalance,
88
+ spendableBalance: accountBalance,
87
89
  operations,
88
90
  operationsCount: operations.length,
89
91
  // NOTE: there are no "blocks" in hedera
@@ -1,3 +1,4 @@
1
+ import BigNumber from "bignumber.js";
1
2
  import type { Transaction, TransactionRaw } from "./types";
2
3
  import { formatTransactionStatus } from "@ledgerhq/coin-framework/formatters";
3
4
  import {
@@ -26,6 +27,7 @@ export function fromTransactionRaw(tr: TransactionRaw): Transaction {
26
27
  ...common,
27
28
  family: tr.family,
28
29
  memo: tr.memo,
30
+ ...(tr.maxFee && { maxFee: new BigNumber(tr.maxFee) }),
29
31
  };
30
32
  }
31
33
 
@@ -36,6 +38,7 @@ export function toTransactionRaw(t: Transaction): TransactionRaw {
36
38
  ...common,
37
39
  family: t.family,
38
40
  memo: t.memo,
41
+ ...(t.maxFee && { maxFee: t.maxFee.toString() }),
39
42
  };
40
43
  }
41
44
 
@@ -1,4 +1,5 @@
1
- import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
1
+ import BigNumber from "bignumber.js";
2
+ import type { TokenCurrency } from "@ledgerhq/types-cryptoassets";
2
3
  import type {
3
4
  Account,
4
5
  AccountRaw,
@@ -26,12 +27,14 @@ export type TokenAssociateProperties = {
26
27
  export type Transaction = TransactionCommon & {
27
28
  family: "hedera";
28
29
  memo?: string | undefined;
30
+ maxFee?: BigNumber;
29
31
  properties?: TokenAssociateProperties;
30
32
  };
31
33
 
32
34
  export type TransactionRaw = TransactionCommonRaw & {
33
35
  family: "hedera";
34
36
  memo?: string | undefined;
37
+ maxFee?: string;
35
38
  properties?: TokenAssociateProperties;
36
39
  };
37
40