@ledgerhq/coin-bitcoin 0.29.0-nightly.20260116024452 → 0.29.0-nightly.20260116124336

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 (85) hide show
  1. package/CHANGELOG.md +12 -10
  2. package/lib/bridge/js.d.ts +1 -1
  3. package/lib/bridge/js.d.ts.map +1 -1
  4. package/lib/bridge/js.js +2 -3
  5. package/lib/bridge/js.js.map +1 -1
  6. package/lib/buildOptimisticOperation.d.ts +13 -0
  7. package/lib/buildOptimisticOperation.d.ts.map +1 -0
  8. package/lib/buildOptimisticOperation.js +20 -0
  9. package/lib/buildOptimisticOperation.js.map +1 -0
  10. package/lib/observable.d.ts +4 -0
  11. package/lib/observable.d.ts.map +1 -0
  12. package/lib/observable.js +9 -0
  13. package/lib/observable.js.map +1 -0
  14. package/lib/psbtFees.d.ts +9 -0
  15. package/lib/psbtFees.d.ts.map +1 -0
  16. package/lib/psbtFees.js +73 -0
  17. package/lib/psbtFees.js.map +1 -0
  18. package/lib/signOperation.d.ts.map +1 -1
  19. package/lib/signOperation.js +94 -99
  20. package/lib/signOperation.js.map +1 -1
  21. package/lib/signRawOperation.d.ts +6 -0
  22. package/lib/signRawOperation.d.ts.map +1 -0
  23. package/lib/signRawOperation.js +70 -0
  24. package/lib/signRawOperation.js.map +1 -0
  25. package/lib/signer.d.ts +15 -0
  26. package/lib/signer.d.ts.map +1 -1
  27. package/lib/types.d.ts +2 -0
  28. package/lib/types.d.ts.map +1 -1
  29. package/lib-es/bridge/js.d.ts +1 -1
  30. package/lib-es/bridge/js.d.ts.map +1 -1
  31. package/lib-es/bridge/js.js +2 -3
  32. package/lib-es/bridge/js.js.map +1 -1
  33. package/lib-es/buildOptimisticOperation.d.ts +13 -0
  34. package/lib-es/buildOptimisticOperation.d.ts.map +1 -0
  35. package/lib-es/buildOptimisticOperation.js +16 -0
  36. package/lib-es/buildOptimisticOperation.js.map +1 -0
  37. package/lib-es/observable.d.ts +4 -0
  38. package/lib-es/observable.d.ts.map +1 -0
  39. package/lib-es/observable.js +5 -0
  40. package/lib-es/observable.js.map +1 -0
  41. package/lib-es/psbtFees.d.ts +9 -0
  42. package/lib-es/psbtFees.d.ts.map +1 -0
  43. package/lib-es/psbtFees.js +69 -0
  44. package/lib-es/psbtFees.js.map +1 -0
  45. package/lib-es/signOperation.d.ts.map +1 -1
  46. package/lib-es/signOperation.js +94 -99
  47. package/lib-es/signOperation.js.map +1 -1
  48. package/lib-es/signRawOperation.d.ts +6 -0
  49. package/lib-es/signRawOperation.d.ts.map +1 -0
  50. package/lib-es/signRawOperation.js +66 -0
  51. package/lib-es/signRawOperation.js.map +1 -0
  52. package/lib-es/signer.d.ts +15 -0
  53. package/lib-es/signer.d.ts.map +1 -1
  54. package/lib-es/types.d.ts +2 -0
  55. package/lib-es/types.d.ts.map +1 -1
  56. package/package.json +13 -12
  57. package/src/__tests__/fixtures/common.fixtures.ts +6 -0
  58. package/src/__tests__/unit/psbtFees.fromFixture.unit.test.ts +31 -0
  59. package/src/__tests__/unit/signOperation.test.ts +226 -0
  60. package/src/__tests__/unit/signRawOperation.test.ts +188 -0
  61. package/src/bridge/js.test.ts +30 -0
  62. package/src/bridge/js.ts +2 -3
  63. package/src/buildOptimisticOperation.ts +34 -0
  64. package/src/hw-signMessage.test.ts +1 -0
  65. package/src/observable.ts +12 -0
  66. package/src/observable.unit.test.ts +27 -0
  67. package/src/psbtFees.ts +77 -0
  68. package/src/signOperation.ts +140 -126
  69. package/src/signRawOperation.ts +104 -0
  70. package/src/signer.ts +13 -0
  71. package/src/types.ts +2 -0
  72. package/src/wallet-btc/__tests__/fixtures/common.fixtures.ts +64 -1
  73. package/src/wallet-btc/__tests__/wallet.integration.test.ts +1 -1
  74. package/src/wallet-btc/__tests__/xpub.txs.dogecoin.integration.test.ts +1 -1
  75. package/src/wallet-btc/__tests__/xpub.txs.zcash.integration.test.ts +1 -1
  76. package/tsconfig.json +3 -12
  77. package/lib/mockBtcSigner.d.ts +0 -20
  78. package/lib/mockBtcSigner.d.ts.map +0 -1
  79. package/lib/mockBtcSigner.js +0 -50
  80. package/lib/mockBtcSigner.js.map +0 -1
  81. package/lib-es/mockBtcSigner.d.ts +0 -20
  82. package/lib-es/mockBtcSigner.d.ts.map +0 -1
  83. package/lib-es/mockBtcSigner.js +0 -45
  84. package/lib-es/mockBtcSigner.js.map +0 -1
  85. package/src/mockBtcSigner.ts +0 -65
package/CHANGELOG.md CHANGED
@@ -1,23 +1,25 @@
1
1
  # @ledgerhq/coin-bitcoin
2
2
 
3
- ## 0.29.0-nightly.20260116024452
3
+ ## 0.29.0-nightly.20260116124336
4
4
 
5
5
  ### Minor Changes
6
6
 
7
+ - [#13340](https://github.com/LedgerHQ/ledger-live/pull/13340) [`85ed675`](https://github.com/LedgerHQ/ledger-live/commit/85ed67593945e396cfe995a13de7454850fa6436) Thanks [@Justkant](https://github.com/Justkant)! - feat(coin-bitcoin): support psbt signature in wallet-api
8
+
7
9
  - [#13396](https://github.com/LedgerHQ/ledger-live/pull/13396) [`b9a3e43`](https://github.com/LedgerHQ/ledger-live/commit/b9a3e431be33943ab4feb4294d6a7f27b966e61b) Thanks [@gre-ledger](https://github.com/gre-ledger)! - Update Jest to v30
8
10
 
9
11
  ### Patch Changes
10
12
 
11
13
  - Updated dependencies [[`537a975`](https://github.com/LedgerHQ/ledger-live/commit/537a975536ca3669d3b88371e1e1f651c4cb9a1b), [`cbcae7c`](https://github.com/LedgerHQ/ledger-live/commit/cbcae7c0ba9b54b1167d26e4227bd2b847207cb9), [`8754614`](https://github.com/LedgerHQ/ledger-live/commit/87546149a62b81f8a25bb6222626592ead629f62), [`50bae0f`](https://github.com/LedgerHQ/ledger-live/commit/50bae0f13a95ef166b2c5609ccbcf5ef01ba1579), [`cf08174`](https://github.com/LedgerHQ/ledger-live/commit/cf0817462e9f0210fceff29ec60b0699e4e69b71), [`b9a3e43`](https://github.com/LedgerHQ/ledger-live/commit/b9a3e431be33943ab4feb4294d6a7f27b966e61b), [`3ac5f26`](https://github.com/LedgerHQ/ledger-live/commit/3ac5f26111f8596327fa7e588e514509de3f8a59), [`7f05536`](https://github.com/LedgerHQ/ledger-live/commit/7f0553665e9c8721f263825cc79994bfc6729d9b)]:
12
- - @ledgerhq/cryptoassets@13.37.0-nightly.20260116024452
13
- - @ledgerhq/coin-framework@6.13.0-nightly.20260116024452
14
- - @ledgerhq/types-live@6.93.0-nightly.20260116024452
15
- - @ledgerhq/live-env@2.25.0-nightly.20260116024452
16
- - @ledgerhq/types-cryptoassets@7.32.0-nightly.20260116024452
17
- - @ledgerhq/devices@8.10.0-nightly.20260116024452
18
- - @ledgerhq/errors@6.29.0-nightly.20260116024452
19
- - @ledgerhq/logs@6.14.0-nightly.20260116024452
20
- - @ledgerhq/live-network@2.2.0-nightly.20260116024452
14
+ - @ledgerhq/cryptoassets@13.37.0-nightly.20260116124336
15
+ - @ledgerhq/coin-framework@6.13.0-nightly.20260116124336
16
+ - @ledgerhq/types-live@6.93.0-nightly.20260116124336
17
+ - @ledgerhq/live-env@2.25.0-nightly.20260116124336
18
+ - @ledgerhq/types-cryptoassets@7.32.0-nightly.20260116124336
19
+ - @ledgerhq/devices@8.10.0-nightly.20260116124336
20
+ - @ledgerhq/errors@6.29.0-nightly.20260116124336
21
+ - @ledgerhq/logs@6.14.0-nightly.20260116124336
22
+ - @ledgerhq/live-network@2.2.0-nightly.20260116124336
21
23
 
22
24
  ## 0.28.0
23
25
 
@@ -27,7 +27,7 @@ export declare function createBridges(signerContext: SignerContext, coinConfig:
27
27
  }) => import("rxjs").Observable<import("@ledgerhq/coin-framework/lib/derivation").Result>;
28
28
  sync: (initialAccount: BitcoinAccount, syncConfig: import("@ledgerhq/types-live").SyncConfig) => import("rxjs").Observable<(arg0: BitcoinAccount) => BitcoinAccount>;
29
29
  signOperation: import("@ledgerhq/types-live").SignOperationFnSignature<Transaction, import("@ledgerhq/types-live").Account>;
30
- signRawOperation: () => never;
30
+ signRawOperation: import("@ledgerhq/types-live").SignRawOperationFnSignature<import("@ledgerhq/types-live").Account>;
31
31
  broadcast: import("@ledgerhq/types-live").BroadcastFnSignature<BitcoinAccount>;
32
32
  assignFromAccountRaw: typeof assignFromAccountRaw;
33
33
  assignToAccountRaw: typeof assignToAccountRaw;
@@ -1 +1 @@
1
- {"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoErD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjF"}
1
+ {"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAmErD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjF"}
package/lib/bridge/js.js CHANGED
@@ -22,6 +22,7 @@ const broadcast_1 = require("../broadcast");
22
22
  const logic_1 = require("../logic");
23
23
  const hw_getAddress_1 = __importDefault(require("../hw-getAddress"));
24
24
  const validateAddress_1 = require("../validateAddress");
25
+ const signRawOperation_1 = __importDefault(require("../signRawOperation"));
25
26
  function buildCurrencyBridge(signerContext) {
26
27
  const getAddress = (0, hw_getAddress_1.default)(signerContext);
27
28
  const scanAccounts = (0, jsHelpers_1.makeScanAccounts)({
@@ -67,9 +68,7 @@ function buildAccountBridge(signerContext) {
67
68
  receive,
68
69
  sync,
69
70
  signOperation: (0, signOperation_1.buildSignOperation)(signerContext),
70
- signRawOperation: () => {
71
- throw new Error("signRawOperation is not supported");
72
- },
71
+ signRawOperation: (0, signRawOperation_1.default)(signerContext),
73
72
  broadcast: wrappedBroadcast,
74
73
  assignFromAccountRaw: serialization_1.assignFromAccountRaw,
75
74
  assignToAccountRaw: serialization_1.assignToAccountRaw,
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":";;;;;;AACA,yEAImD;AACnD,0GAAkF;AAClF,wDAAmE;AACnE,oDAA4E;AAE5E,+DAAuC;AACvC,kEAA+D;AAC/D,kEAA+D;AAC/D,0CAA6D;AAC7D,8DAA2D;AAC3D,4DAAyD;AACzD,4DAAyD;AACzD,oDAAsD;AACtD,sCAAsD;AACtD,sCAA2C;AAE3C,4CAAyC;AACzC,oCAAwC;AACxC,qEAAwC;AACxC,wDAAqD;AACrD,2EAAwD;AAExD,SAAS,mBAAmB,CAAC,aAA4B;IACvD,MAAM,UAAU,GAAG,IAAA,uBAAQ,EAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAA,4BAAgB,EAAiB;QACpD,eAAe,EAAE,IAAA,qCAAmB,EAAC,aAAa,CAAC;QACnD,YAAY,EAAE,IAAA,2BAAiB,EAAC,UAAU,CAAC;QAC3C,QAAQ,EAAR,0BAAQ;KACT,CAAC,CAAC;IAEH,OAAO;QACL,YAAY;QACZ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,aAA4B;IACtD,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAiD;QACpE,eAAe,EAAE,IAAA,qCAAmB,EAAC,aAAa,CAAC;QACnD,QAAQ,EAAR,0BAAQ;QACR,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAA,uBAAQ,EAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,sBAAsB,GAAG,CAAC,OAAuB,EAAO,EAAE;QAC9D,MAAM,OAAO,GAAG,oBAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,OAAO,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,IAAA,oCAAwB,EAAiB,IAAA,2BAAiB,EAAC,UAAU,CAAC,EAAE;QACtF,sBAAsB;KACvB,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAA4D,KAAK,EAAE,EACvF,OAAO,EACP,eAAe,GAChB,EAAE,EAAE;QACH,qBAAa,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,IAAA,qBAAS,EAAC;YACf,OAAO;YACP,eAAe;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,oBAAoB,EAApB,2CAAoB;QACpB,iBAAiB,EAAjB,qCAAiB;QACjB,kBAAkB,EAAlB,uCAAkB;QAClB,iBAAiB,EAAjB,qCAAiB;QACjB,oBAAoB,EAApB,2CAAoB;QACpB,OAAO;QACP,IAAI;QACJ,aAAa,EAAE,IAAA,kCAAkB,EAAC,aAAa,CAAC;QAChD,gBAAgB,EAAE,IAAA,0BAAqB,EAAC,aAAa,CAAC;QACtD,SAAS,EAAE,gBAAgB;QAC3B,oBAAoB,EAApB,oCAAoB;QACpB,kBAAkB,EAAlB,kCAAkB;QAClB,sBAAsB,EAAE,oBAAU,CAAC,sBAAsB;QACzD,8BAA8B,EAA9B,yCAA8B;QAC9B,eAAe,EAAf,iCAAe;KAChB,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAAC,aAA4B,EAAE,UAAsB;IAChF,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC;IAE1B,OAAO;QACL,cAAc,EAAE,mBAAmB,CAAC,aAAa,CAAC;QAClD,aAAa,EAAE,kBAAkB,CAAC,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC;AAPD,sCAOC"}
@@ -0,0 +1,13 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import type { Operation } from "@ledgerhq/types-live";
3
+ type BuildOptimisticOperationParams = {
4
+ accountId: string;
5
+ fee: BigNumber;
6
+ value?: BigNumber;
7
+ senders?: string[];
8
+ recipients?: string[];
9
+ extra?: Record<string, unknown>;
10
+ };
11
+ export declare const buildOptimisticOperation: ({ accountId, fee, value, senders, recipients, extra, }: BuildOptimisticOperationParams) => Operation;
12
+ export {};
13
+ //# sourceMappingURL=buildOptimisticOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOptimisticOperation.d.ts","sourceRoot":"","sources":["../src/buildOptimisticOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,KAAK,8BAA8B,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,2DAOlC,8BAA8B,KAAG,SAalC,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildOptimisticOperation = void 0;
4
+ const operation_1 = require("@ledgerhq/coin-framework/operation");
5
+ const buildOptimisticOperation = ({ accountId, fee, value, senders = [], recipients = [], extra = {}, }) => ({
6
+ id: (0, operation_1.encodeOperationId)(accountId, "", "OUT"),
7
+ hash: "",
8
+ type: "OUT",
9
+ value: value ?? fee,
10
+ fee,
11
+ blockHash: null,
12
+ blockHeight: null,
13
+ senders,
14
+ recipients,
15
+ accountId,
16
+ date: new Date(),
17
+ extra,
18
+ });
19
+ exports.buildOptimisticOperation = buildOptimisticOperation;
20
+ //# sourceMappingURL=buildOptimisticOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOptimisticOperation.js","sourceRoot":"","sources":["../src/buildOptimisticOperation.ts"],"names":[],"mappings":";;;AAEA,kEAAuE;AAWhE,MAAM,wBAAwB,GAAG,CAAC,EACvC,SAAS,EACT,GAAG,EACH,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,UAAU,GAAG,EAAE,EACf,KAAK,GAAG,EAAE,GACqB,EAAa,EAAE,CAAC,CAAC;IAChD,EAAE,EAAE,IAAA,6BAAiB,EAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC;IAC3C,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK,IAAI,GAAG;IACnB,GAAG;IACH,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,OAAO;IACP,UAAU;IACV,SAAS;IACT,IAAI,EAAE,IAAI,IAAI,EAAE;IAChB,KAAK;CACN,CAAC,CAAC;AApBU,QAAA,wBAAwB,4BAoBlC"}
@@ -0,0 +1,4 @@
1
+ import { Observable } from "rxjs";
2
+ import type { Observer } from "rxjs";
3
+ export declare const fromAsyncOperation: <T>(main: (observer: Observer<T>) => Promise<void>) => Observable<T>;
4
+ //# sourceMappingURL=observable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,eAAO,MAAM,kBAAkB,uBACZ,SAAS,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAC7C,WAAW,CAAC,CAMX,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromAsyncOperation = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const fromAsyncOperation = (main) => new rxjs_1.Observable(observer => {
6
+ main(observer).then(() => observer.complete(), error => observer.error(error));
7
+ });
8
+ exports.fromAsyncOperation = fromAsyncOperation;
9
+ //# sourceMappingURL=observable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.js","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":";;;AAAA,+BAAkC;AAG3B,MAAM,kBAAkB,GAAG,CAChC,IAA8C,EAC/B,EAAE,CACjB,IAAI,iBAAU,CAAI,QAAQ,CAAC,EAAE;IAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EACzB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/B,CAAC;AACJ,CAAC,CAAC,CAAC;AARQ,QAAA,kBAAkB,sBAQ1B"}
@@ -0,0 +1,9 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ /**
3
+ * Compute fee from a PSBT (v2 preferred).
4
+ * Returns:
5
+ * - BigNumber(fee) on success
6
+ * - null if cannot parse (caller should fallback to calculateFees()).
7
+ */
8
+ export declare function feeFromPsbt(buf: Buffer): BigNumber | null;
9
+ //# sourceMappingURL=psbtFees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbtFees.d.ts","sourceRoot":"","sources":["../src/psbtFees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmBzC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAmDzD"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.feeFromPsbt = void 0;
4
+ const bignumber_js_1 = require("bignumber.js");
5
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
6
+ const psbtv2_1 = require("@ledgerhq/psbtv2");
7
+ /** read uint64 little-endian into JS number (safe for BTC amounts) */
8
+ function readUInt64LE(buf) {
9
+ const lo = buf.readUInt32LE(0);
10
+ const hi = buf.readUInt32LE(4);
11
+ const loBig = BigInt(lo);
12
+ const hiBig = BigInt(hi);
13
+ const value = loBig + (hiBig << 32n);
14
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
15
+ throw new Error("readUInt64LE: value exceeds Number.MAX_SAFE_INTEGER");
16
+ }
17
+ return value;
18
+ }
19
+ /**
20
+ * Compute fee from a PSBT (v2 preferred).
21
+ * Returns:
22
+ * - BigNumber(fee) on success
23
+ * - null if cannot parse (caller should fallback to calculateFees()).
24
+ */
25
+ function feeFromPsbt(buf) {
26
+ if (!buf || buf.length < 5)
27
+ return null;
28
+ try {
29
+ // Check PSBT version and use appropriate deserialization method
30
+ const psbtVersion = psbtv2_1.PsbtV2.getPsbtVersionNumber(buf);
31
+ const psbt = psbtVersion === 2 ? new psbtv2_1.PsbtV2() : psbtv2_1.PsbtV2.fromV0(buf, true);
32
+ if (psbtVersion === 2) {
33
+ psbt.deserialize(buf);
34
+ }
35
+ // Sum inputs (prefer WITNESS_UTXO; fall back to NON_WITNESS_UTXO)
36
+ let inSum = 0n;
37
+ const nIn = psbt.getGlobalInputCount();
38
+ for (let i = 0; i < nIn; i++) {
39
+ const w = psbt.getInputWitnessUtxo(i);
40
+ if (w) {
41
+ inSum += readUInt64LE(w.amount);
42
+ continue;
43
+ }
44
+ const nonWitness = psbt.getInputNonWitnessUtxo(i);
45
+ if (!nonWitness) {
46
+ return null;
47
+ }
48
+ // NON_WITNESS_UTXO is the full previous transaction. Use the PSBT
49
+ // input's referenced output index to locate the amount.
50
+ const prevTx = bitcoinjs_lib_1.Transaction.fromBuffer(nonWitness);
51
+ const prevOutIndex = psbt.getInputOutputIndex(i);
52
+ const prevOut = prevTx.outs[prevOutIndex];
53
+ if (!prevOut) {
54
+ return null;
55
+ }
56
+ inSum += BigInt(prevOut.value);
57
+ }
58
+ // Sum outputs
59
+ let outSum = 0n;
60
+ const nOut = psbt.getGlobalOutputCount();
61
+ for (let i = 0; i < nOut; i++) {
62
+ outSum += BigInt(psbt.getOutputAmount(i)); // number
63
+ }
64
+ if (inSum < outSum)
65
+ return null;
66
+ return new bignumber_js_1.BigNumber((inSum - outSum).toString());
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ exports.feeFromPsbt = feeFromPsbt;
73
+ //# sourceMappingURL=psbtFees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbtFees.js","sourceRoot":"","sources":["../src/psbtFees.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAA6B,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,kBAAkB,kBACb,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,eAAe,CA4HtE,CAAC;AAEP,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,aAAa,EAAa,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAO3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0IzC,eAAO,MAAM,kBAAkB,kBACb,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,eAAe,CAEuB,CAAC;AAEpG,eAAe,kBAAkB,CAAC"}
@@ -25,115 +25,110 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.buildSignOperation = void 0;
27
27
  const bignumber_js_1 = require("bignumber.js");
28
- const rxjs_1 = require("rxjs");
29
28
  const logs_1 = require("@ledgerhq/logs");
30
29
  const derivation_1 = require("@ledgerhq/coin-framework/derivation");
31
- const operation_1 = require("@ledgerhq/coin-framework/operation");
32
30
  const networks_1 = require("./networks");
31
+ const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
33
32
  const buildTransaction_1 = require("./buildTransaction");
34
33
  const cache_1 = require("./cache");
35
34
  const wallet_btc_1 = __importStar(require("./wallet-btc"));
36
35
  const logic_1 = require("./logic");
37
- const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => new rxjs_1.Observable(o => {
38
- async function main() {
39
- const { currency } = account;
40
- const walletAccount = (0, wallet_btc_1.getWalletAccount)(account);
41
- (0, logs_1.log)("hw", `signTransaction ${currency.id} for account ${account.id}`);
42
- const txInfo = await (0, buildTransaction_1.buildTransaction)(account, transaction);
43
- let senders = new Set();
44
- let recipients = [];
45
- let fee = new bignumber_js_1.BigNumber(0);
46
- // Maybe better not re-calculate these fields here, instead include them
47
- // in Transaction type and set them in prepareTransaction?
48
- await (0, cache_1.calculateFees)({
49
- account,
36
+ const observable_1 = require("./observable");
37
+ function buildAdditionals(currencyId, derivationMode, transaction) {
38
+ const perCoin = logic_1.perCoinLogic[currencyId];
39
+ let additionals = [currencyId];
40
+ if (derivationMode === "native_segwit") {
41
+ additionals.push("bech32");
42
+ }
43
+ if (derivationMode === "taproot") {
44
+ additionals.push("bech32m");
45
+ }
46
+ if (perCoin?.getAdditionals) {
47
+ additionals = additionals.concat(perCoin.getAdditionals({
50
48
  transaction,
51
- }).then(res => {
52
- senders = new Set(res.txInputs.map(i => i.address).filter(Boolean));
53
- recipients = res.txOutputs
54
- .filter(o => o.address && !o.isChange)
55
- .map(o => o.address);
56
- fee = res.fees;
57
- });
58
- let lockTime;
59
- // (legacy) Set lockTime for Komodo to enable reward claiming on UTXOs created by
60
- // Ledger Live. We should only set this if the currency is Komodo and
61
- // lockTime isn't already defined.
62
- if (currency.id === "komodo" && lockTime === undefined) {
63
- const unixtime = Math.floor(Date.now() / 1000);
64
- lockTime = unixtime - 777;
65
- }
66
- const networkParams = (0, networks_1.getNetworkParameters)(currency.id);
67
- const sigHashType = networkParams.sigHash;
68
- if (isNaN(sigHashType)) {
69
- throw new Error("sigHashType should not be NaN");
70
- }
71
- const segwit = (0, derivation_1.isSegwitDerivationMode)(account.derivationMode);
72
- const perCoin = logic_1.perCoinLogic[currency.id];
73
- let additionals = [currency.id];
74
- if (account.derivationMode === "native_segwit") {
75
- additionals.push("bech32");
76
- }
77
- if (account.derivationMode === "taproot") {
78
- additionals.push("bech32m");
79
- }
80
- if (perCoin?.getAdditionals) {
81
- additionals = additionals.concat(perCoin.getAdditionals({
82
- transaction,
83
- }));
84
- }
85
- const expiryHeight = perCoin?.hasExpiryHeight
86
- ? Buffer.from([0x00, 0x00, 0x00, 0x00])
87
- : undefined;
88
- const hasExtraData = perCoin?.hasExtraData || false;
89
- const signature = await signerContext(deviceId, currency, signer => wallet_btc_1.default.signAccountTx({
90
- btc: signer,
91
- fromAccount: walletAccount,
92
- txInfo,
93
- lockTime,
94
- sigHashType,
95
- segwit,
96
- additionals,
97
- expiryHeight,
98
- hasExtraData,
99
- onDeviceSignatureGranted: () => o.next({
100
- type: "device-signature-granted",
101
- }),
102
- onDeviceSignatureRequested: () => o.next({
103
- type: "device-signature-requested",
104
- }),
105
- onDeviceStreaming: ({ progress, index, total }) => o.next({
106
- type: "device-streaming",
107
- progress,
108
- index,
109
- total,
110
- }),
111
49
  }));
112
- // Build the optimistic operation
113
- const operation = {
114
- id: (0, operation_1.encodeOperationId)(account.id, "", "OUT"),
115
- hash: "", // Will be resolved in broadcast()
116
- type: "OUT",
117
- value: new bignumber_js_1.BigNumber(transaction.amount).plus(fee),
118
- fee,
119
- blockHash: null,
120
- blockHeight: null,
121
- senders: Array.from(senders),
122
- recipients,
123
- accountId: account.id,
124
- date: new Date(),
125
- extra: {},
126
- };
127
- o.next({
128
- type: "signed",
129
- signedOperation: {
130
- operation,
131
- signature,
132
- },
133
- });
134
50
  }
135
- main().then(() => o.complete(), e => o.error(e));
136
- });
51
+ return additionals;
52
+ }
53
+ async function executeSignOperation(o, account, deviceId, transaction, signerContext) {
54
+ const { currency } = account;
55
+ const walletAccount = (0, wallet_btc_1.getWalletAccount)(account);
56
+ (0, logs_1.log)("hw", `signTransaction ${currency.id} for account ${account.id}`);
57
+ const txInfo = await (0, buildTransaction_1.buildTransaction)(account, transaction);
58
+ // Maybe better not re-calculate these fields here, instead include them
59
+ // in Transaction type and set them in prepareTransaction?
60
+ const res = await (0, cache_1.calculateFees)({
61
+ account,
62
+ transaction,
63
+ });
64
+ const senders = res.txInputs.reduce((acc, i) => {
65
+ if (i.address)
66
+ acc.add(i.address);
67
+ return acc;
68
+ }, new Set());
69
+ const recipients = res.txOutputs.reduce((acc, o) => {
70
+ if (!o.isChange && o.address)
71
+ acc.push(o.address);
72
+ return acc;
73
+ }, []);
74
+ const fee = res.fees;
75
+ let lockTime;
76
+ // (legacy) Set lockTime for Komodo to enable reward claiming on UTXOs created by
77
+ // Ledger Live. We should only set this if the currency is Komodo and
78
+ // lockTime isn't already defined.
79
+ if (currency.id === "komodo" && lockTime === undefined) {
80
+ const unixtime = Math.floor(Date.now() / 1000);
81
+ lockTime = unixtime - 777;
82
+ }
83
+ const networkParams = (0, networks_1.getNetworkParameters)(currency.id);
84
+ const sigHashType = networkParams.sigHash;
85
+ if (isNaN(sigHashType)) {
86
+ throw new Error("sigHashType should not be NaN");
87
+ }
88
+ const segwit = (0, derivation_1.isSegwitDerivationMode)(account.derivationMode);
89
+ const additionals = buildAdditionals(currency.id, account.derivationMode, transaction);
90
+ const perCoin = logic_1.perCoinLogic[currency.id];
91
+ const expiryHeight = perCoin?.hasExpiryHeight ? Buffer.from([0x00, 0x00, 0x00, 0x00]) : undefined;
92
+ const hasExtraData = perCoin?.hasExtraData || false;
93
+ const signature = await signerContext(deviceId, currency, signer => wallet_btc_1.default.signAccountTx({
94
+ btc: signer,
95
+ fromAccount: walletAccount,
96
+ txInfo,
97
+ lockTime,
98
+ sigHashType,
99
+ segwit,
100
+ additionals,
101
+ expiryHeight,
102
+ hasExtraData,
103
+ onDeviceSignatureGranted: () => o.next({
104
+ type: "device-signature-granted",
105
+ }),
106
+ onDeviceSignatureRequested: () => o.next({
107
+ type: "device-signature-requested",
108
+ }),
109
+ onDeviceStreaming: ({ progress, index, total }) => o.next({
110
+ type: "device-streaming",
111
+ progress,
112
+ index,
113
+ total,
114
+ }),
115
+ }));
116
+ const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)({
117
+ accountId: account.id,
118
+ fee,
119
+ value: new bignumber_js_1.BigNumber(transaction.amount).plus(fee),
120
+ senders: Array.from(senders),
121
+ recipients,
122
+ });
123
+ o.next({
124
+ type: "signed",
125
+ signedOperation: {
126
+ operation,
127
+ signature,
128
+ },
129
+ });
130
+ }
131
+ const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => (0, observable_1.fromAsyncOperation)(o => executeSignOperation(o, account, deviceId, transaction, signerContext));
137
132
  exports.buildSignOperation = buildSignOperation;
138
133
  exports.default = exports.buildSignOperation;
139
134
  //# sourceMappingURL=signOperation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyC;AACzC,+BAAkC;AAClC,yCAAqC;AACrC,oEAA6E;AAE7E,kEAAuE;AAEvE,yCAAkD;AAClD,yDAAsD;AACtD,mCAAwC;AACxC,2DAAwD;AACxD,mCAAuC;AAGhC,MAAM,kBAAkB,GAC7B,CAAC,aAA4B,EAA+C,EAAE,CAC9E,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CACrC,IAAI,iBAAU,CAAC,CAAC,CAAC,EAAE;IACjB,KAAK,UAAU,IAAI;QACjB,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC7B,MAAM,aAAa,GAAG,IAAA,6BAAgB,EAAC,OAAO,CAAC,CAAC;QAEhD,IAAA,UAAG,EAAC,IAAI,EAAE,mBAAmB,QAAQ,CAAC,EAAE,gBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,IAAA,mCAAgB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,GAAG,GAAG,IAAI,wBAAS,CAAC,CAAC,CAAC,CAAC;QAC3B,wEAAwE;QACxE,0DAA0D;QAC1D,MAAM,IAAA,qBAAa,EAAC;YAClB,OAAO;YACP,WAAW;SACZ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACZ,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC,CAAC;YAChF,UAAU,GAAG,GAAG,CAAC,SAAS;iBACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAa,CAAC;YACnC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,QAA4B,CAAC;QAEjC,iFAAiF;QACjF,qEAAqE;QACrE,kCAAkC;QAClC,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAC/C,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;QAC5B,CAAC;QAED,MAAM,aAAa,GAAG,IAAA,+BAAoB,EAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC;QAC1C,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,mCAAsB,EAAC,OAAO,CAAC,cAAgC,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,oBAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,WAAW,GAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE1C,IAAI,OAAO,CAAC,cAAc,KAAK,eAAe,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,OAAO,EAAE,cAAc,EAAE,CAAC;YAC5B,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,OAAO,CAAC,cAAc,CAAC;gBACrB,WAAW;aACZ,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,EAAE,eAAe;YAC3C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC;QAEpD,MAAM,SAAS,GAAW,MAAM,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CACzE,oBAAM,CAAC,aAAa,CAAC;YACnB,GAAG,EAAE,MAAM;YACX,WAAW,EAAE,aAAa;YAC1B,MAAM;YACN,QAAQ;YACR,WAAW;YACX,MAAM;YACN,WAAW;YACX,YAAY;YACZ,YAAY;YACZ,wBAAwB,EAAE,GAAG,EAAE,CAC7B,CAAC,CAAC,IAAI,CAAC;gBACL,IAAI,EAAE,0BAA0B;aACjC,CAAC;YACJ,0BAA0B,EAAE,GAAG,EAAE,CAC/B,CAAC,CAAC,IAAI,CAAC;gBACL,IAAI,EAAE,4BAA4B;aACnC,CAAC;YACJ,iBAAiB,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAChD,CAAC,CAAC,IAAI,CAAC;gBACL,IAAI,EAAE,kBAAkB;gBACxB,QAAQ;gBACR,KAAK;gBACL,KAAK;aACN,CAAC;SACL,CAAC,CACH,CAAC;QACF,iCAAiC;QACjC,MAAM,SAAS,GAAc;YAC3B,EAAE,EAAE,IAAA,6BAAiB,EAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC;YAC5C,IAAI,EAAE,EAAE,EAAE,kCAAkC;YAC5C,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI,wBAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAClD,GAAG;YACH,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;YAC5B,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,IAAI,EAAE,IAAI,IAAI,EAAE;YAChB,KAAK,EAAE,EAAE;SACV,CAAC;QACF,CAAC,CAAC,IAAI,CAAC;YACL,IAAI,EAAE,QAAQ;YACd,eAAe,EAAE;gBACf,SAAS;gBACT,SAAS;aACV;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;AA7HM,QAAA,kBAAkB,sBA6HxB;AAEP,kBAAe,0BAAkB,CAAC"}
1
+ {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AccountBridge } from "@ledgerhq/types-live";
2
+ import type { Transaction } from "./types";
3
+ import { SignerContext } from "./signer";
4
+ export declare const buildSignRawOperation: (signerContext: SignerContext) => AccountBridge<Transaction>["signRawOperation"];
5
+ export default buildSignRawOperation;
6
+ //# sourceMappingURL=signRawOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signRawOperation.d.ts","sourceRoot":"","sources":["../src/signRawOperation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,EAAiB,aAAa,EAAE,MAAM,UAAU,CAAC;AAmCxD,eAAO,MAAM,qBAAqB,kBAChB,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,kBAAkB,CAuDzE,CAAC;AAEP,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSignRawOperation = void 0;
4
+ const bignumber_js_1 = require("bignumber.js");
5
+ const logs_1 = require("@ledgerhq/logs");
6
+ const derivation_1 = require("@ledgerhq/coin-framework/derivation");
7
+ const psbtv2_1 = require("@ledgerhq/psbtv2");
8
+ const networks_1 = require("./networks");
9
+ const buildOptimisticOperation_1 = require("./buildOptimisticOperation");
10
+ const wallet_btc_1 = require("./wallet-btc");
11
+ const psbtFees_1 = require("./psbtFees");
12
+ const observable_1 = require("./observable");
13
+ const signPsbtWithDevice = async (signerContext, deviceId, currency, psbtBuffer, options) => signerContext(deviceId, currency, signer => {
14
+ if (!signer.signPsbtBuffer) {
15
+ throw new Error("signPsbtBuffer not available");
16
+ }
17
+ return signer.signPsbtBuffer(psbtBuffer, {
18
+ accountPath: options.accountPath,
19
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
20
+ addressFormat: options.addressFormat,
21
+ finalizePsbt: true,
22
+ onDeviceSignatureRequested: options.onDeviceSignatureRequested,
23
+ onDeviceSignatureGranted: options.onDeviceSignatureGranted,
24
+ onDeviceStreaming: options.onDeviceStreaming,
25
+ });
26
+ });
27
+ const buildSignRawOperation = (signerContext) => ({ account, deviceId, transaction: psbt }) => (0, observable_1.fromAsyncOperation)(async (o) => {
28
+ const { currency } = account;
29
+ const walletAccount = (0, wallet_btc_1.getWalletAccount)(account);
30
+ (0, logs_1.log)("hw", `signRawTransaction ${currency.id} for account ${account.id}`);
31
+ const networkParams = (0, networks_1.getNetworkParameters)(currency.id);
32
+ const sigHashType = networkParams.sigHash;
33
+ if (Number.isNaN(sigHashType)) {
34
+ throw new TypeError("sigHashType should not be NaN");
35
+ }
36
+ const psbtBuffer = (0, psbtv2_1.parsePsbt)(psbt);
37
+ const psbtResult = await signPsbtWithDevice(signerContext, deviceId, currency, psbtBuffer, {
38
+ accountPath: `${walletAccount.params.path}/${walletAccount.params.index}'`,
39
+ addressFormat: (0, derivation_1.getAddressFormatDerivationMode)(account.derivationMode),
40
+ onDeviceSignatureRequested: () => o.next({ type: "device-signature-requested" }),
41
+ onDeviceSignatureGranted: () => o.next({ type: "device-signature-granted" }),
42
+ onDeviceStreaming: arg => o.next({ type: "device-streaming", ...arg }),
43
+ });
44
+ if (!psbtResult) {
45
+ throw new Error(`PSBT signing failed: no result from device for account ${account.id} (${currency.id})`);
46
+ }
47
+ const parsedPsbtFee = (0, psbtFees_1.feeFromPsbt)(psbtBuffer);
48
+ if (!parsedPsbtFee) {
49
+ (0, logs_1.log)("hw", `Failed to extract fee from PSBT for account ${account.id} (${currency.id}); falling back to fee=0`);
50
+ }
51
+ const psbtFee = parsedPsbtFee || (0, bignumber_js_1.BigNumber)(0);
52
+ // Optimistic operation for PSBT (we don't know recipients/amount here)
53
+ const operation = (0, buildOptimisticOperation_1.buildOptimisticOperation)({
54
+ accountId: account.id,
55
+ fee: psbtFee,
56
+ extra: { psbt: true },
57
+ });
58
+ o.next({
59
+ type: "signed",
60
+ signedOperation: {
61
+ operation,
62
+ // Ensure non-empty signature: if not finalized, fall back to the PSBT (base64)
63
+ signature: psbtResult.tx || psbtResult.psbt.toString("base64"),
64
+ rawData: { psbtSigned: psbtResult.psbt.toString("base64") },
65
+ },
66
+ });
67
+ });
68
+ exports.buildSignRawOperation = buildSignRawOperation;
69
+ exports.default = exports.buildSignRawOperation;
70
+ //# sourceMappingURL=signRawOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signRawOperation.js","sourceRoot":"","sources":["../src/signRawOperation.ts"],"names":[],"mappings":"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"}
package/lib/signer.d.ts CHANGED
@@ -23,6 +23,21 @@ export interface BitcoinSigner {
23
23
  signMessage(path: string, messageHex: string): Promise<BitcoinSignature>;
24
24
  splitTransaction(transactionHex: string, isSegwitSupported: boolean | null | undefined, hasExtraData: boolean | null | undefined, additionals: Array<string> | null | undefined): SignerTransaction;
25
25
  createPaymentTransaction(arg: CreateTransaction): Promise<string>;
26
+ signPsbtBuffer?(psbtBuffer: Buffer, options?: {
27
+ finalizePsbt?: boolean;
28
+ accountPath?: string;
29
+ addressFormat?: AddressFormat;
30
+ onDeviceSignatureRequested: (() => void) | undefined;
31
+ onDeviceSignatureGranted: (() => void) | undefined;
32
+ onDeviceStreaming: ((arg: {
33
+ progress: number;
34
+ total: number;
35
+ index: number;
36
+ }) => void) | undefined;
37
+ }): Promise<{
38
+ psbt: Buffer;
39
+ tx: string;
40
+ }>;
26
41
  }
27
42
  export type SignerResult = BitcoinXPub | BitcoinAddress | BitcoinSignature;
28
43
  export type SignerContext = <T>(deviceId: string, crypto: CryptoCurrency, fn: (signer: BitcoinSigner) => Promise<T>) => Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}