@ledgerhq/coin-internet_computer 1.9.0 → 1.9.1-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 (105) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/lib/api/api.d.ts +6 -11
  3. package/lib/api/api.d.ts.map +1 -1
  4. package/lib/api/api.js +84 -64
  5. package/lib/api/api.js.map +1 -1
  6. package/lib/bridge/bridgeHelpers/account.d.ts.map +1 -1
  7. package/lib/bridge/bridgeHelpers/account.js +52 -33
  8. package/lib/bridge/bridgeHelpers/account.js.map +1 -1
  9. package/lib/bridge/bridgeHelpers/addresses.d.ts +0 -6
  10. package/lib/bridge/bridgeHelpers/addresses.d.ts.map +1 -1
  11. package/lib/bridge/bridgeHelpers/addresses.js +1 -29
  12. package/lib/bridge/bridgeHelpers/addresses.js.map +1 -1
  13. package/lib/bridge/broadcast.d.ts.map +1 -1
  14. package/lib/bridge/broadcast.js +22 -6
  15. package/lib/bridge/broadcast.js.map +1 -1
  16. package/lib/bridge/getTransactionStatus.d.ts.map +1 -1
  17. package/lib/bridge/getTransactionStatus.js +4 -3
  18. package/lib/bridge/getTransactionStatus.js.map +1 -1
  19. package/lib/bridge/prepareTransaction.d.ts.map +1 -1
  20. package/lib/bridge/prepareTransaction.js +2 -1
  21. package/lib/bridge/prepareTransaction.js.map +1 -1
  22. package/lib/bridge/signOperation.d.ts +2 -2
  23. package/lib/bridge/signOperation.d.ts.map +1 -1
  24. package/lib/bridge/signOperation.js +44 -13
  25. package/lib/bridge/signOperation.js.map +1 -1
  26. package/lib/consts.d.ts +2 -0
  27. package/lib/consts.d.ts.map +1 -1
  28. package/lib/consts.js +8 -1
  29. package/lib/consts.js.map +1 -1
  30. package/lib/hw-signMessage.d.ts.map +1 -1
  31. package/lib/hw-signMessage.js +1 -2
  32. package/lib/hw-signMessage.js.map +1 -1
  33. package/lib/types/signer.d.ts +1 -1
  34. package/lib/types/signer.d.ts.map +1 -1
  35. package/lib-es/api/api.d.ts +6 -11
  36. package/lib-es/api/api.d.ts.map +1 -1
  37. package/lib-es/api/api.js +81 -60
  38. package/lib-es/api/api.js.map +1 -1
  39. package/lib-es/bridge/bridgeHelpers/account.d.ts.map +1 -1
  40. package/lib-es/bridge/bridgeHelpers/account.js +52 -33
  41. package/lib-es/bridge/bridgeHelpers/account.js.map +1 -1
  42. package/lib-es/bridge/bridgeHelpers/addresses.d.ts +0 -6
  43. package/lib-es/bridge/bridgeHelpers/addresses.d.ts.map +1 -1
  44. package/lib-es/bridge/bridgeHelpers/addresses.js +0 -23
  45. package/lib-es/bridge/bridgeHelpers/addresses.js.map +1 -1
  46. package/lib-es/bridge/broadcast.d.ts.map +1 -1
  47. package/lib-es/bridge/broadcast.js +19 -6
  48. package/lib-es/bridge/broadcast.js.map +1 -1
  49. package/lib-es/bridge/getTransactionStatus.d.ts.map +1 -1
  50. package/lib-es/bridge/getTransactionStatus.js +2 -1
  51. package/lib-es/bridge/getTransactionStatus.js.map +1 -1
  52. package/lib-es/bridge/prepareTransaction.d.ts.map +1 -1
  53. package/lib-es/bridge/prepareTransaction.js +2 -1
  54. package/lib-es/bridge/prepareTransaction.js.map +1 -1
  55. package/lib-es/bridge/signOperation.d.ts +2 -2
  56. package/lib-es/bridge/signOperation.d.ts.map +1 -1
  57. package/lib-es/bridge/signOperation.js +41 -13
  58. package/lib-es/bridge/signOperation.js.map +1 -1
  59. package/lib-es/consts.d.ts +2 -0
  60. package/lib-es/consts.d.ts.map +1 -1
  61. package/lib-es/consts.js +3 -0
  62. package/lib-es/consts.js.map +1 -1
  63. package/lib-es/hw-signMessage.d.ts.map +1 -1
  64. package/lib-es/hw-signMessage.js +1 -2
  65. package/lib-es/hw-signMessage.js.map +1 -1
  66. package/lib-es/types/signer.d.ts +1 -1
  67. package/lib-es/types/signer.d.ts.map +1 -1
  68. package/package.json +7 -13
  69. package/src/api/api.ts +126 -71
  70. package/src/bridge/bridgeHelpers/account.ts +70 -43
  71. package/src/bridge/bridgeHelpers/addresses.ts +0 -25
  72. package/src/bridge/broadcast.ts +31 -6
  73. package/src/bridge/getTransactionStatus.ts +2 -1
  74. package/src/bridge/prepareTransaction.ts +2 -1
  75. package/src/bridge/signOperation.ts +68 -18
  76. package/src/consts.ts +10 -0
  77. package/src/hw-signMessage.ts +1 -6
  78. package/src/types/signer.ts +1 -1
  79. package/lib/bridge/bridgeHelpers/icpRosetta/index.d.ts +0 -30
  80. package/lib/bridge/bridgeHelpers/icpRosetta/index.d.ts.map +0 -1
  81. package/lib/bridge/bridgeHelpers/icpRosetta/index.js +0 -88
  82. package/lib/bridge/bridgeHelpers/icpRosetta/index.js.map +0 -1
  83. package/lib/bridge/bridgeHelpers/icpRosetta/types.d.ts +0 -145
  84. package/lib/bridge/bridgeHelpers/icpRosetta/types.d.ts.map +0 -1
  85. package/lib/bridge/bridgeHelpers/icpRosetta/types.js +0 -3
  86. package/lib/bridge/bridgeHelpers/icpRosetta/types.js.map +0 -1
  87. package/lib/bridge/bridgeHelpers/icpRosetta/utils.d.ts +0 -17
  88. package/lib/bridge/bridgeHelpers/icpRosetta/utils.d.ts.map +0 -1
  89. package/lib/bridge/bridgeHelpers/icpRosetta/utils.js +0 -155
  90. package/lib/bridge/bridgeHelpers/icpRosetta/utils.js.map +0 -1
  91. package/lib-es/bridge/bridgeHelpers/icpRosetta/index.d.ts +0 -30
  92. package/lib-es/bridge/bridgeHelpers/icpRosetta/index.d.ts.map +0 -1
  93. package/lib-es/bridge/bridgeHelpers/icpRosetta/index.js +0 -76
  94. package/lib-es/bridge/bridgeHelpers/icpRosetta/index.js.map +0 -1
  95. package/lib-es/bridge/bridgeHelpers/icpRosetta/types.d.ts +0 -145
  96. package/lib-es/bridge/bridgeHelpers/icpRosetta/types.d.ts.map +0 -1
  97. package/lib-es/bridge/bridgeHelpers/icpRosetta/types.js +0 -2
  98. package/lib-es/bridge/bridgeHelpers/icpRosetta/types.js.map +0 -1
  99. package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.d.ts +0 -17
  100. package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.d.ts.map +0 -1
  101. package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.js +0 -123
  102. package/lib-es/bridge/bridgeHelpers/icpRosetta/utils.js.map +0 -1
  103. package/src/bridge/bridgeHelpers/icpRosetta/index.ts +0 -154
  104. package/src/bridge/bridgeHelpers/icpRosetta/types.ts +0 -166
  105. package/src/bridge/bridgeHelpers/icpRosetta/utils.ts +0 -151
@@ -1,38 +1,69 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.buildSignOperation = void 0;
4
7
  const rxjs_1 = require("rxjs");
5
8
  const addresses_1 = require("./bridgeHelpers/addresses");
6
- const icpRosetta_1 = require("./bridgeHelpers/icpRosetta");
9
+ const utils_1 = require("@zondax/ledger-live-icp/utils");
10
+ const agent_1 = require("@zondax/ledger-live-icp/agent");
7
11
  const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
8
12
  const common_logic_1 = require("../common-logic");
13
+ const logs_1 = require("@ledgerhq/logs");
14
+ const invariant_1 = __importDefault(require("invariant"));
15
+ const signICPTransaction = async (unsignedTxn, derivationPath, signerContext, account, deviceId) => {
16
+ const blob = agent_1.Cbor.encode({ content: unsignedTxn });
17
+ (0, logs_1.log)("debug", "[signICPTransaction] blob", Buffer.from(blob).toString("hex"));
18
+ const signatures = await signerContext(deviceId, signer => signer.sign(derivationPath, Buffer.from(blob)));
19
+ (0, invariant_1.default)(signatures.signatureRS, "[ICP](signICPTransaction) Signature not found");
20
+ (0, invariant_1.default)(account.xpub, "[ICP](signICPTransaction) Account xpub is required");
21
+ return {
22
+ signature: Buffer.from(signatures.signatureRS).toString("hex"),
23
+ callBody: {
24
+ content: unsignedTxn,
25
+ sender_pubkey: (0, utils_1.pubkeyToDer)(account.xpub),
26
+ sender_sig: signatures.signatureRS,
27
+ },
28
+ };
29
+ };
9
30
  const buildSignOperation = (signerContext) => ({ account, transaction, deviceId }) => new rxjs_1.Observable(o => {
10
31
  async function main() {
32
+ (0, logs_1.log)("debug", "[signOperation] icp start fn");
33
+ (0, logs_1.log)("debug", "[signOperation] transaction", transaction);
11
34
  const { xpub } = account;
35
+ (0, invariant_1.default)(xpub, "[ICP](signOperation) Account xpub is required");
12
36
  const { derivationPath } = (0, addresses_1.getAddress)(account);
13
- const { unsignedTxn, payloads } = await (0, icpRosetta_1.getUnsignedTransaction)(transaction, account);
37
+ const { unsignedTransaction, transferRawRequest } = (0, utils_1.createUnsignedSendTransaction)(transaction, xpub);
14
38
  o.next({
15
39
  type: "device-signature-requested",
16
40
  });
17
- const { signedTxn } = await (0, icpRosetta_1.signICPTransaction)({
18
- signerContext,
19
- deviceId,
20
- unsignedTxn,
21
- path: (0, common_logic_1.getPath)(derivationPath),
22
- payloads,
23
- pubkey: xpub ?? "",
24
- });
41
+ let signature = "";
42
+ let encodedSignedCallBlob = "";
43
+ const res = await signICPTransaction(unsignedTransaction, (0, common_logic_1.getPath)(derivationPath), signerContext, account, deviceId);
44
+ signature = res.signature;
45
+ encodedSignedCallBlob = Buffer.from(agent_1.Cbor.encode(res.callBody)).toString("hex");
46
+ (0, invariant_1.default)(signature, "[ICP](signOperation) Signature not found");
25
47
  o.next({
26
48
  type: "device-signature-granted",
27
49
  });
28
- const { hash } = await (0, icpRosetta_1.getTxnMetadata)(signedTxn);
50
+ const hash = (0, utils_1.hashTransaction)({
51
+ from: account.freshAddress,
52
+ to: transaction.recipient,
53
+ amount: transferRawRequest.amount.e8s,
54
+ fee: transferRawRequest.fee.e8s,
55
+ memo: transferRawRequest.memo,
56
+ created_at_time: transferRawRequest.created_at_time[0]["timestamp_nanos"],
57
+ });
29
58
  const operation = await (0, buildOptimisticOperation_1.buildOptimisticOperation)(account, transaction, hash);
30
59
  o.next({
31
60
  type: "signed",
32
61
  signedOperation: {
33
62
  operation,
34
- signature: signedTxn,
35
- expirationDate: (0, icpRosetta_1.getTxnExpirationDate)(unsignedTxn),
63
+ signature,
64
+ rawData: {
65
+ encodedSignedCallBlob,
66
+ },
36
67
  },
37
68
  });
38
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../../src/bridge/signOperation.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAElC,yDAAuD;AACvD,2DAKoC;AACpC,yEAAsE;AAItE,kDAA0C;AAEnC,MAAM,kBAAkB,GAC7B,CAAC,aAAuC,EAAwD,EAAE,CAClG,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CACrC,IAAI,iBAAU,CAAC,CAAC,CAAC,EAAE;IACjB,KAAK,UAAU,IAAI;QACjB,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,sBAAU,EAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,mCAAsB,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAErF,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,4BAA4B;SACnC,CAAC,CAAC;QAEH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,+BAAkB,EAAC;YAC7C,aAAa;YACb,QAAQ;YACR,WAAW;YACX,IAAI,EAAE,IAAA,sBAAO,EAAC,cAAc,CAAC;YAC7B,QAAQ;YACR,MAAM,EAAE,IAAI,IAAI,EAAE;SACnB,CAAC,CAAC;QAEH,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,0BAA0B;SACjC,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,2BAAc,EAAC,SAAS,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,IAAA,mDAAwB,EAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7E,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,QAAQ;YACd,eAAe,EAAE;gBACf,SAAS;gBACT,SAAS,EAAE,SAAS;gBACpB,cAAc,EAAE,IAAA,iCAAoB,EAAC,WAAW,CAAC;aAClD;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,CACT,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAClB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAChB,CAAC;AACJ,CAAC,CAAC,CAAC;AA3CM,QAAA,kBAAkB,sBA2CxB"}
1
+ {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../../src/bridge/signOperation.ts"],"names":[],"mappings":"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"}
package/lib/consts.d.ts CHANGED
@@ -3,4 +3,6 @@ export declare const ICP_BLK_NAME_ROSETTA = "Internet Computer";
3
3
  export declare const ICP_NET_ID_ROSETTA = "00000000000000020101";
4
4
  export declare const ICP_FEES = 10000;
5
5
  export declare const MAX_MEMO_VALUE: number;
6
+ export declare const FETCH_TXNS_LIMIT = 100;
7
+ export { MAINNET_GOVERNANCE_CANISTER_ID, MAINNET_LEDGER_CANISTER_ID, MAINNET_INDEX_CANISTER_ID, ICP_NETWORK_URL, } from "@zondax/ledger-live-icp/neurons";
6
8
  //# sourceMappingURL=consts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAGnC,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAGzD,eAAO,MAAM,QAAQ,QAAM,CAAC;AAG5B,eAAO,MAAM,cAAc,QAA0B,CAAC"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAGnC,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAGzD,eAAO,MAAM,QAAQ,QAAM,CAAC;AAG5B,eAAO,MAAM,cAAc,QAA0B,CAAC;AAGtD,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,yBAAyB,EACzB,eAAe,GAChB,MAAM,iCAAiC,CAAC"}
package/lib/consts.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MAX_MEMO_VALUE = exports.ICP_FEES = exports.ICP_NET_ID_ROSETTA = exports.ICP_BLK_NAME_ROSETTA = exports.ICP_SEND_TXN_TYPE = void 0;
3
+ exports.ICP_NETWORK_URL = exports.MAINNET_INDEX_CANISTER_ID = exports.MAINNET_LEDGER_CANISTER_ID = exports.MAINNET_GOVERNANCE_CANISTER_ID = exports.FETCH_TXNS_LIMIT = exports.MAX_MEMO_VALUE = exports.ICP_FEES = exports.ICP_NET_ID_ROSETTA = exports.ICP_BLK_NAME_ROSETTA = exports.ICP_SEND_TXN_TYPE = void 0;
4
4
  exports.ICP_SEND_TXN_TYPE = 0;
5
5
  // ICP Rosetta ids
6
6
  exports.ICP_BLK_NAME_ROSETTA = "Internet Computer";
@@ -9,4 +9,11 @@ exports.ICP_NET_ID_ROSETTA = "00000000000000020101";
9
9
  exports.ICP_FEES = 1e4;
10
10
  // Max Memo value on ICP network
11
11
  exports.MAX_MEMO_VALUE = Number.MAX_SAFE_INTEGER;
12
+ // API limits
13
+ exports.FETCH_TXNS_LIMIT = 100;
14
+ var neurons_1 = require("@zondax/ledger-live-icp/neurons");
15
+ Object.defineProperty(exports, "MAINNET_GOVERNANCE_CANISTER_ID", { enumerable: true, get: function () { return neurons_1.MAINNET_GOVERNANCE_CANISTER_ID; } });
16
+ Object.defineProperty(exports, "MAINNET_LEDGER_CANISTER_ID", { enumerable: true, get: function () { return neurons_1.MAINNET_LEDGER_CANISTER_ID; } });
17
+ Object.defineProperty(exports, "MAINNET_INDEX_CANISTER_ID", { enumerable: true, get: function () { return neurons_1.MAINNET_INDEX_CANISTER_ID; } });
18
+ Object.defineProperty(exports, "ICP_NETWORK_URL", { enumerable: true, get: function () { return neurons_1.ICP_NETWORK_URL; } });
12
19
  //# sourceMappingURL=consts.js.map
package/lib/consts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,CAAC,CAAC;AAEnC,kBAAkB;AACL,QAAA,oBAAoB,GAAG,mBAAmB,CAAC;AAC3C,QAAA,kBAAkB,GAAG,sBAAsB,CAAC;AAEzD,eAAe;AACF,QAAA,QAAQ,GAAG,GAAG,CAAC;AAE5B,gCAAgC;AACnB,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC"}
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,iBAAiB,GAAG,CAAC,CAAC;AAEnC,kBAAkB;AACL,QAAA,oBAAoB,GAAG,mBAAmB,CAAC;AAC3C,QAAA,kBAAkB,GAAG,sBAAsB,CAAC;AAEzD,eAAe;AACF,QAAA,QAAQ,GAAG,GAAG,CAAC;AAE5B,gCAAgC;AACnB,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAEtD,aAAa;AACA,QAAA,gBAAgB,GAAG,GAAG,CAAC;AAEpC,2DAKyC;AAJvC,yHAAA,8BAA8B,OAAA;AAC9B,qHAAA,0BAA0B,OAAA;AAC1B,oHAAA,yBAAyB,OAAA;AACzB,0GAAA,eAAe,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"hw-signMessage.d.ts","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAO3D,eAAO,MAAM,WAAW,kBACN,cAAc,SAAS,CAAC,gBACvB,MAAM,WAAW,OAAO,eAAe,UAAU;;;;;;;EA2BjE,CAAC"}
1
+ {"version":3,"file":"hw-signMessage.d.ts","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAO3D,eAAO,MAAM,WAAW,kBACN,cAAc,SAAS,CAAC,gBACvB,MAAM,WAAW,OAAO,eAAe,UAAU;;;;;;;EAuBjE,CAAC"}
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.signMessage = void 0;
4
4
  const logs_1 = require("@ledgerhq/logs");
5
5
  const utils_1 = require("./common-logic/utils");
6
- const consts_1 = require("./consts");
7
6
  function bufferToArrayBuffer(buffer) {
8
7
  const sig = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
9
8
  return Buffer.from(sig);
@@ -15,7 +14,7 @@ const signMessage = (signerContext) => async (deviceId, account, { message }) =>
15
14
  if (typeof message !== "string")
16
15
  throw new Error("Message must be a string");
17
16
  const { r } = await signerContext(deviceId, async (signer) => {
18
- const r = await signer.sign(account.freshAddressPath, (0, utils_1.getBufferFromString)(message), consts_1.ICP_SEND_TXN_TYPE);
17
+ const r = await signer.sign(account.freshAddressPath, (0, utils_1.getBufferFromString)(message));
19
18
  return { r };
20
19
  });
21
20
  if (!r.signatureRS) {
@@ -1 +1 @@
1
- {"version":3,"file":"hw-signMessage.js","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AACrC,gDAA2D;AAC3D,qCAA6C;AAK7C,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAEM,MAAM,WAAW,GACtB,CAAC,aAAuC,EAAE,EAAE,CAC5C,KAAK,EAAE,QAAgB,EAAE,OAAgB,EAAE,EAAE,OAAO,EAAc,EAAE,EAAE;IACpE,IAAA,UAAG,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAE7E,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACzD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CACzB,OAAO,CAAC,gBAAgB,EACxB,IAAA,2BAAmB,EAAC,OAAO,CAAC,EAC5B,0BAAiB,CAClB,CAAC;QACF,OAAO,EAAE,CAAC,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,CAAC;SACL;QACD,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KAC9D,CAAC;AACJ,CAAC,CAAC;AA7BS,QAAA,WAAW,eA6BpB"}
1
+ {"version":3,"file":"hw-signMessage.js","sourceRoot":"","sources":["../src/hw-signMessage.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AACrC,gDAA2D;AAK3D,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAEM,MAAM,WAAW,GACtB,CAAC,aAAuC,EAAE,EAAE,CAC5C,KAAK,EAAE,QAAgB,EAAE,OAAgB,EAAE,EAAE,OAAO,EAAc,EAAE,EAAE;IACpE,IAAA,UAAG,EAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IAE1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAE7E,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACzD,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAA,2BAAmB,EAAC,OAAO,CAAC,CAAC,CAAC;QACpF,OAAO,EAAE,CAAC,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,CAAC;SACL;QACD,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;KAC9D,CAAC;AACJ,CAAC,CAAC;AAzBS,QAAA,WAAW,eAyBpB"}
@@ -16,6 +16,6 @@ export type ICPGetAddrResponse = {
16
16
  export interface ICPSigner {
17
17
  showAddressAndPubKey(path: string): Promise<ICPGetAddrResponse>;
18
18
  getAddressAndPubKey(path: string): Promise<ICPGetAddrResponse>;
19
- sign(path: string, message: Buffer, txtype: number): Promise<ICPSignature>;
19
+ sign(path: string, message: Buffer): Promise<ICPSignature>;
20
20
  }
21
21
  //# sourceMappingURL=signer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/types/signer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5E"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/types/signer.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChE,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5D"}
@@ -1,12 +1,7 @@
1
- import { ICPRosettaBlockHeightResponse, ICPRosettaGetBalancesResponse, ICPRosettaGetTxnsHistoryResponse } from "../bridge/bridgeHelpers/icpRosetta/types";
2
- export declare const getICPRosettaNetworkIdentifier: () => {
3
- network_identifier: {
4
- blockchain: string;
5
- network: string;
6
- };
7
- };
8
- export declare const fetchBlockHeight: () => Promise<ICPRosettaBlockHeightResponse>;
9
- export declare const fetchBalances: (accountId: string) => Promise<ICPRosettaGetBalancesResponse>;
10
- export declare const fetchTxns: (accountId: string) => Promise<ICPRosettaGetTxnsHistoryResponse>;
11
- export declare const constructionInvoke: <TRequest, TResponse>(opts: TRequest, method: string) => Promise<TResponse>;
1
+ import { TransactionWithId } from "@zondax/ledger-live-icp";
2
+ import BigNumber from "bignumber.js";
3
+ export declare const fetchBlockHeight: () => Promise<BigNumber>;
4
+ export declare const broadcastTxn: (payload: Buffer, canisterId: string, type: "call" | "read_state") => Promise<ArrayBuffer>;
5
+ export declare const fetchBalance: (address: string) => Promise<BigNumber>;
6
+ export declare const fetchTxns: (address: string, startBlockHeight: bigint, stopBlockHeight?: bigint) => Promise<TransactionWithId[]>;
12
7
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,gCAAgC,EACjC,MAAM,0CAA0C,CAAC;AA8BlD,eAAO,MAAM,8BAA8B;;;;;CAO1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAa,QAAQ,6BAA6B,CAM9E,CAAC;AAEF,eAAO,MAAM,aAAa,cAAqB,MAAM,KAAG,QAAQ,6BAA6B,CAU5F,CAAC;AAEF,eAAO,MAAM,SAAS,cAAqB,MAAM,KAAG,QAAQ,gCAAgC,CAU3F,CAAC;AAEF,eAAO,MAAM,kBAAkB,8BACvB,QAAQ,UACN,MAAM,KACb,QAAQ,SAAS,CAQnB,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"AAQA,OAAO,EAQL,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,SAAS,MAAM,cAAc,CAAC;AAKrC,eAAO,MAAM,gBAAgB,QAAa,QAAQ,SAAS,CA0B1D,CAAC;AAEF,eAAO,MAAM,YAAY,YACd,MAAM,cACH,MAAM,QACZ,MAAM,GAAG,YAAY,yBAgB5B,CAAC;AAEF,eAAO,MAAM,YAAY,YAAmB,MAAM,KAAG,QAAQ,SAAS,CAuBrE,CAAC;AAEF,eAAO,MAAM,SAAS,YACX,MAAM,oBACG,MAAM,+BAEvB,QAAQ,iBAAiB,EAAE,CA6C7B,CAAC"}
package/lib-es/api/api.js CHANGED
@@ -1,69 +1,90 @@
1
1
  import { log } from "@ledgerhq/logs";
2
- import { getEnv } from "@ledgerhq/live-env";
3
- import network from "@ledgerhq/live-network/network";
4
- import { ICP_BLK_NAME_ROSETTA, ICP_NET_ID_ROSETTA } from "../consts";
5
- const getICPURL = (path) => {
6
- const baseUrl = getEnv("API_ICP_ENDPOINT");
7
- if (!baseUrl)
8
- throw new Error("API base URL not available");
9
- return `${baseUrl}${path ? path : ""}`;
10
- };
11
- const ICPFetchWrapper = async (path, body) => {
12
- const url = getICPURL(path);
13
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
14
- const opts = {
15
- method: "POST",
16
- data: body,
17
- url,
18
- };
19
- const rawResponse = await network(opts);
20
- if (rawResponse && rawResponse.data && rawResponse.data.details?.error_message) {
21
- log("error", rawResponse.data.details?.error_message);
22
- }
23
- // We force data to this way as network func is not using the correct param type. Changing that func will generate errors in other implementations
24
- const { data } = rawResponse;
25
- log("http", url);
26
- return data;
27
- };
28
- export const getICPRosettaNetworkIdentifier = () => {
29
- return {
30
- network_identifier: {
31
- blockchain: ICP_BLK_NAME_ROSETTA,
32
- network: ICP_NET_ID_ROSETTA,
33
- },
34
- };
35
- };
2
+ import { FETCH_TXNS_LIMIT, MAINNET_INDEX_CANISTER_ID, MAINNET_LEDGER_CANISTER_ID, ICP_NETWORK_URL, } from "../consts";
3
+ import { ledgerIdlFactory, indexIdlFactory, getCanisterIdlFunc, Principal, encodeCanisterIdlFunc, decodeCanisterIdlFunc, } from "@zondax/ledger-live-icp";
4
+ import BigNumber from "bignumber.js";
5
+ import { fromNullable } from "@zondax/ledger-live-icp/utils";
6
+ import { getAgent } from "@zondax/ledger-live-icp/agent";
7
+ import invariant from "invariant";
36
8
  export const fetchBlockHeight = async () => {
37
- const data = await ICPFetchWrapper("network/status", getICPRosettaNetworkIdentifier());
38
- return data;
39
- };
40
- export const fetchBalances = async (accountId) => {
41
- const body = {
42
- ...getICPRosettaNetworkIdentifier(),
43
- account_identifier: {
44
- address: accountId,
45
- metadata: {},
46
- },
9
+ const canisterId = Principal.fromText(MAINNET_LEDGER_CANISTER_ID);
10
+ const queryBlocksRawRequest = {
11
+ start: BigInt(0),
12
+ length: BigInt(1),
47
13
  };
48
- const data = await ICPFetchWrapper("account/balance", body);
49
- return data;
14
+ const queryBlocksIdlFunc = getCanisterIdlFunc(ledgerIdlFactory, "query_blocks");
15
+ const queryBlocksargs = encodeCanisterIdlFunc(queryBlocksIdlFunc, [queryBlocksRawRequest]);
16
+ const agent = await getAgent(ICP_NETWORK_URL);
17
+ const blockHeightRes = await agent.query(canisterId, {
18
+ arg: queryBlocksargs,
19
+ methodName: "query_blocks",
20
+ });
21
+ invariant(blockHeightRes.status === "replied", "[ICP](fetchBlockHeight) Query failed");
22
+ const decodedIdl = decodeCanisterIdlFunc(queryBlocksIdlFunc, blockHeightRes.reply.arg);
23
+ const decoded = fromNullable(decodedIdl);
24
+ invariant(decoded, "[ICP](fetchBlockHeight) Decoding failed");
25
+ return BigNumber(decoded.chain_length.toString());
50
26
  };
51
- export const fetchTxns = async (accountId) => {
52
- const body = {
53
- ...getICPRosettaNetworkIdentifier(),
54
- account_identifier: {
55
- address: accountId,
56
- metadata: {},
27
+ export const broadcastTxn = async (payload, canisterId, type) => {
28
+ log("debug", `[ICP] Broadcasting ${type} to ${canisterId}, body: ${payload.toString("hex")}`);
29
+ const res = await fetch(`${ICP_NETWORK_URL}/api/v3/canister/${canisterId}/${type}`, {
30
+ body: payload,
31
+ method: "POST",
32
+ headers: {
33
+ "Content-Type": "application/cbor",
57
34
  },
58
- };
59
- const data = await ICPFetchWrapper("search/transactions", body);
60
- return data;
35
+ });
36
+ if (res.status === 200) {
37
+ return await res.arrayBuffer();
38
+ }
39
+ throw new Error(`Failed to broadcast transaction: ${res.text()}`);
61
40
  };
62
- export const constructionInvoke = async (opts, method) => {
63
- const body = {
64
- ...opts,
41
+ export const fetchBalance = async (address) => {
42
+ const agent = await getAgent(ICP_NETWORK_URL);
43
+ const indexCanister = Principal.fromText(MAINNET_INDEX_CANISTER_ID);
44
+ const getBalanceIdlFunc = getCanisterIdlFunc(indexIdlFactory, "get_account_identifier_balance");
45
+ const getBalanceArgs = encodeCanisterIdlFunc(getBalanceIdlFunc, [address]);
46
+ const balanceRes = await agent.query(indexCanister, {
47
+ arg: getBalanceArgs,
48
+ methodName: "get_account_identifier_balance",
49
+ });
50
+ if (balanceRes.status !== "replied") {
51
+ log("debug", `[ICP](fetchBalance) Query failed: ${balanceRes.status}`);
52
+ return BigNumber(0);
53
+ }
54
+ const decodedBalance = decodeCanisterIdlFunc(getBalanceIdlFunc, balanceRes.reply.arg);
55
+ const balance = fromNullable(decodedBalance);
56
+ if (!balance) {
57
+ return BigNumber(0);
58
+ }
59
+ return BigNumber(balance.toString());
60
+ };
61
+ export const fetchTxns = async (address, startBlockHeight, stopBlockHeight = BigInt(0)) => {
62
+ if (startBlockHeight <= stopBlockHeight) {
63
+ return [];
64
+ }
65
+ const agent = await getAgent(ICP_NETWORK_URL);
66
+ const canisterId = Principal.fromText(MAINNET_INDEX_CANISTER_ID);
67
+ const transactionsRawRequest = {
68
+ account_identifier: address,
69
+ start: [startBlockHeight],
70
+ max_results: BigInt(FETCH_TXNS_LIMIT),
65
71
  };
66
- const data = await ICPFetchWrapper(`construction/${method}`, body);
67
- return data;
72
+ const getTransactionsIdlFunc = getCanisterIdlFunc(indexIdlFactory, "get_account_identifier_transactions");
73
+ const getTransactionsArgs = encodeCanisterIdlFunc(getTransactionsIdlFunc, [
74
+ transactionsRawRequest,
75
+ ]);
76
+ const transactionsRes = await agent.query(canisterId, {
77
+ arg: getTransactionsArgs,
78
+ methodName: "get_account_identifier_transactions",
79
+ });
80
+ invariant(transactionsRes.status === "replied", "[ICP](fetchTxns) Query failed");
81
+ const decodedTransactions = decodeCanisterIdlFunc(getTransactionsIdlFunc, transactionsRes.reply.arg);
82
+ const response = fromNullable(decodedTransactions);
83
+ invariant(response, "[ICP](fetchTxns) Decoding failed");
84
+ if (response.Ok.transactions.length === 0) {
85
+ return [];
86
+ }
87
+ const nextTxns = await fetchTxns(address, response.Ok.transactions.at(-1)?.id ?? BigInt(0), stopBlockHeight);
88
+ return [...response.Ok.transactions, ...nextTxns];
68
89
  };
69
90
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAcjF,eAAO,MAAM,eAAe,EAAE,eAmC7B,CAAC"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAiBjF,eAAO,MAAM,eAAe,EAAE,eAyC7B,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { decodeAccountId, encodeAccountId } from "@ledgerhq/coin-framework/account/index";
2
- import { fetchBalances, fetchBlockHeight, fetchTxns } from "../../api";
2
+ import { fetchBalance, fetchBlockHeight, fetchTxns } from "../../api";
3
3
  import flatMap from "lodash/flatMap";
4
4
  import BigNumber from "bignumber.js";
5
5
  import { ICP_FEES } from "../../consts";
6
6
  import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
7
7
  import { normalizeEpochTimestamp } from "../../common-logic/utils";
8
8
  import invariant from "invariant";
9
- import { deriveAddressFromPubkey } from "./icpRosetta";
9
+ import { deriveAddressFromPubkey, hashTransaction, } from "@zondax/ledger-live-icp";
10
10
  export const getAccountShape = async (info) => {
11
11
  const { currency, derivationMode, rest = {}, initialAccount } = info;
12
12
  const publicKey = reconciliatePublicKey(rest.publicKey, initialAccount);
@@ -23,16 +23,15 @@ export const getAccountShape = async (info) => {
23
23
  });
24
24
  // log("debug", `Generation account shape for ${address}`);
25
25
  const blockHeight = await fetchBlockHeight();
26
- const balanceResp = await fetchBalances(address);
27
- const balance = balanceResp.balances[0];
28
- const txns = await fetchTxns(address);
26
+ const balance = await fetchBalance(address);
27
+ const txns = await fetchTxns(address, BigInt(blockHeight.toString()), initialAccount ? BigInt(initialAccount.blockHeight.toString()) : undefined);
29
28
  const result = {
30
29
  id: accountId,
31
- balance: BigNumber(balance.value),
32
- spendableBalance: BigNumber(balance.value),
33
- operations: flatMap(txns.transactions.reverse(), mapTxToOps(accountId, address)),
34
- blockHeight: blockHeight.current_block_identifier.index,
35
- operationsCount: txns.transactions.length,
30
+ balance,
31
+ spendableBalance: balance,
32
+ operations: flatMap(txns, mapTxToOps(accountId, address)),
33
+ blockHeight: blockHeight.toNumber(),
34
+ operationsCount: (initialAccount?.operations.length ?? 0) + txns.length,
36
35
  xpub: publicKey,
37
36
  };
38
37
  return result;
@@ -48,36 +47,56 @@ function reconciliatePublicKey(publicKey, initialAccount) {
48
47
  }
49
48
  const mapTxToOps = (accountId, address, fee = ICP_FEES) => {
50
49
  return (txInfo) => {
50
+ const { transaction: txn } = txInfo;
51
51
  const ops = [];
52
- const ownerOperation = txInfo.transaction.operations.find(cur => cur.account.address === address);
53
- const counterOperation = txInfo.transaction.operations.find(cur => cur.account.address !== address);
54
- if (!ownerOperation || !counterOperation)
55
- return ops;
56
- const timeStamp = txInfo.transaction.metadata.timestamp;
57
- const amount = BigNumber(ownerOperation.amount.value);
58
- const hash = txInfo.transaction.transaction_identifier.hash;
59
- const fromAccount = amount.isPositive()
60
- ? counterOperation.account.address
61
- : ownerOperation.account.address;
62
- const toAccount = amount.isNegative()
63
- ? counterOperation.account.address
64
- : ownerOperation.account.address;
65
- const memo = txInfo.transaction.metadata.memo.toString();
66
- const blockHeight = txInfo.transaction.metadata.block_height;
52
+ if (txn.operation === undefined) {
53
+ return [];
54
+ }
55
+ if ("Transfer" in txn.operation === undefined) {
56
+ return [];
57
+ }
58
+ const timeStamp = txn.timestamp[0]?.timestamp_nanos ?? Date.now();
59
+ let amount = BigNumber(0);
60
+ let fromAccount = "";
61
+ let toAccount = "";
62
+ let hash = "";
63
+ if ("Transfer" in txn.operation) {
64
+ amount = BigNumber(txn.operation.Transfer.amount.e8s.toString());
65
+ fromAccount = txn.operation.Transfer.from;
66
+ toAccount = txn.operation.Transfer.to;
67
+ hash = hashTransaction({
68
+ from: fromAccount,
69
+ to: toAccount,
70
+ amount: txn.operation.Transfer.amount.e8s,
71
+ fee: txn.operation.Transfer.fee.e8s,
72
+ memo: txn.memo,
73
+ created_at_time: txn.created_at_time[0]?.timestamp_nanos ?? BigInt(0),
74
+ });
75
+ }
76
+ const blockHeight = Number(txInfo.id);
77
+ const blockHash = "";
78
+ const memo = txInfo.transaction.memo.toString();
67
79
  const date = new Date(normalizeEpochTimestamp(timeStamp.toString()));
68
80
  const value = amount.abs();
69
81
  const feeToUse = BigNumber(fee);
70
- const isSending = amount.isNegative();
71
- const isReceiving = amount.isPositive();
82
+ const isSending = address === fromAccount;
83
+ const isReceiving = address === toAccount;
84
+ let type;
85
+ if (isSending) {
86
+ type = "OUT";
87
+ }
88
+ else {
89
+ type = "IN";
90
+ }
72
91
  if (isSending) {
73
92
  ops.push({
74
- id: encodeOperationId(accountId, hash, "OUT"),
93
+ id: encodeOperationId(accountId, hash, type),
75
94
  hash,
76
- type: "OUT",
95
+ type,
77
96
  value: value.plus(feeToUse),
78
97
  fee: feeToUse,
79
98
  blockHeight,
80
- blockHash: null,
99
+ blockHash,
81
100
  accountId,
82
101
  senders: [fromAccount],
83
102
  recipients: [toAccount],
@@ -89,13 +108,13 @@ const mapTxToOps = (accountId, address, fee = ICP_FEES) => {
89
108
  }
90
109
  if (isReceiving) {
91
110
  ops.push({
92
- id: encodeOperationId(accountId, hash, "IN"),
111
+ id: encodeOperationId(accountId, hash, type),
93
112
  hash,
94
- type: "IN",
113
+ type,
95
114
  value,
96
115
  fee: feeToUse,
97
116
  blockHeight,
98
- blockHash: null,
117
+ blockHash,
99
118
  accountId,
100
119
  senders: [fromAccount],
101
120
  recipients: [toAccount],
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/account.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,4 @@ export declare const getAddress: (a: Account) => {
3
3
  address: string;
4
4
  derivationPath: string;
5
5
  };
6
- export declare function validateAddress(address: string): Promise<{
7
- isValid: boolean;
8
- }>;
9
- export declare function validateMemo(memo?: string): {
10
- isValid: boolean;
11
- };
12
6
  //# sourceMappingURL=addresses.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAK/C,eAAO,MAAM,UAAU,MAClB,OAAO,KACT;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CAC6C,CAAC;AAEvE,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CASpF;AAED,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAQhE"}
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,eAAO,MAAM,UAAU,MAClB,OAAO,KACT;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CAC6C,CAAC"}
@@ -1,25 +1,2 @@
1
- import { log } from "@ledgerhq/logs";
2
- import BigNumber from "bignumber.js";
3
- import { MAX_MEMO_VALUE } from "../../consts";
4
- import { fetchBalances } from "../../api";
5
1
  export const getAddress = (a) => ({ address: a.freshAddress, derivationPath: a.freshAddressPath });
6
- export async function validateAddress(address) {
7
- try {
8
- const res = await fetchBalances(address);
9
- if (!res.balances)
10
- throw Error(res.details?.error_message);
11
- return { isValid: true };
12
- }
13
- catch (e) {
14
- log("error", e.message ?? "Failed to validate address");
15
- return { isValid: false };
16
- }
17
- }
18
- export function validateMemo(memo) {
19
- const res = BigNumber(memo ?? 0);
20
- if (res.isNaN() || res.lt(0) || res.gt(BigNumber(MAX_MEMO_VALUE))) {
21
- return { isValid: false };
22
- }
23
- return { isValid: true };
24
- }
25
2
  //# sourceMappingURL=addresses.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,CAAU,EAIV,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,4BAA4B,CAAC,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAEjC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/bridge/bridgeHelpers/addresses.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,CAAU,EAIV,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAU7D,CAAC"}
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/bridge/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAqBvC,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAgB7D,CAAC"}