@ledgerhq/coin-bitcoin 0.29.0-nightly.20260115024415 → 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 (102) 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/explorer.d.ts.map +1 -1
  11. package/lib/explorer.js +0 -7
  12. package/lib/explorer.js.map +1 -1
  13. package/lib/observable.d.ts +4 -0
  14. package/lib/observable.d.ts.map +1 -0
  15. package/lib/observable.js +9 -0
  16. package/lib/observable.js.map +1 -0
  17. package/lib/psbtFees.d.ts +9 -0
  18. package/lib/psbtFees.d.ts.map +1 -0
  19. package/lib/psbtFees.js +73 -0
  20. package/lib/psbtFees.js.map +1 -0
  21. package/lib/signOperation.d.ts.map +1 -1
  22. package/lib/signOperation.js +94 -99
  23. package/lib/signOperation.js.map +1 -1
  24. package/lib/signRawOperation.d.ts +6 -0
  25. package/lib/signRawOperation.d.ts.map +1 -0
  26. package/lib/signRawOperation.js +70 -0
  27. package/lib/signRawOperation.js.map +1 -0
  28. package/lib/signer.d.ts +15 -0
  29. package/lib/signer.d.ts.map +1 -1
  30. package/lib/types.d.ts +2 -0
  31. package/lib/types.d.ts.map +1 -1
  32. package/lib-es/bridge/js.d.ts +1 -1
  33. package/lib-es/bridge/js.d.ts.map +1 -1
  34. package/lib-es/bridge/js.js +2 -3
  35. package/lib-es/bridge/js.js.map +1 -1
  36. package/lib-es/buildOptimisticOperation.d.ts +13 -0
  37. package/lib-es/buildOptimisticOperation.d.ts.map +1 -0
  38. package/lib-es/buildOptimisticOperation.js +16 -0
  39. package/lib-es/buildOptimisticOperation.js.map +1 -0
  40. package/lib-es/explorer.d.ts.map +1 -1
  41. package/lib-es/explorer.js +0 -7
  42. package/lib-es/explorer.js.map +1 -1
  43. package/lib-es/observable.d.ts +4 -0
  44. package/lib-es/observable.d.ts.map +1 -0
  45. package/lib-es/observable.js +5 -0
  46. package/lib-es/observable.js.map +1 -0
  47. package/lib-es/psbtFees.d.ts +9 -0
  48. package/lib-es/psbtFees.d.ts.map +1 -0
  49. package/lib-es/psbtFees.js +69 -0
  50. package/lib-es/psbtFees.js.map +1 -0
  51. package/lib-es/signOperation.d.ts.map +1 -1
  52. package/lib-es/signOperation.js +94 -99
  53. package/lib-es/signOperation.js.map +1 -1
  54. package/lib-es/signRawOperation.d.ts +6 -0
  55. package/lib-es/signRawOperation.d.ts.map +1 -0
  56. package/lib-es/signRawOperation.js +66 -0
  57. package/lib-es/signRawOperation.js.map +1 -0
  58. package/lib-es/signer.d.ts +15 -0
  59. package/lib-es/signer.d.ts.map +1 -1
  60. package/lib-es/types.d.ts +2 -0
  61. package/lib-es/types.d.ts.map +1 -1
  62. package/package.json +13 -12
  63. package/src/__tests__/fixtures/common.fixtures.ts +6 -0
  64. package/src/__tests__/unit/psbtFees.fromFixture.unit.test.ts +31 -0
  65. package/src/__tests__/unit/signOperation.test.ts +226 -0
  66. package/src/__tests__/unit/signRawOperation.test.ts +188 -0
  67. package/src/bridge/js.test.ts +30 -0
  68. package/src/bridge/js.ts +2 -3
  69. package/src/buildOptimisticOperation.ts +34 -0
  70. package/src/explorer.ts +0 -8
  71. package/src/hw-signMessage.test.ts +1 -0
  72. package/src/observable.ts +12 -0
  73. package/src/observable.unit.test.ts +27 -0
  74. package/src/psbtFees.ts +77 -0
  75. package/src/signOperation.ts +140 -126
  76. package/src/signRawOperation.ts +104 -0
  77. package/src/signer.ts +13 -0
  78. package/src/types.ts +2 -0
  79. package/src/wallet-btc/__tests__/fixtures/common.fixtures.ts +64 -1
  80. package/src/wallet-btc/__tests__/wallet.integration.test.ts +1 -1
  81. package/src/wallet-btc/__tests__/xpub.txs.dogecoin.integration.test.ts +1 -1
  82. package/src/wallet-btc/__tests__/xpub.txs.zcash.integration.test.ts +1 -1
  83. package/tsconfig.json +3 -12
  84. package/lib/descriptor.d.ts +0 -19
  85. package/lib/descriptor.d.ts.map +0 -1
  86. package/lib/descriptor.js +0 -127
  87. package/lib/descriptor.js.map +0 -1
  88. package/lib/mockBtcSigner.d.ts +0 -20
  89. package/lib/mockBtcSigner.d.ts.map +0 -1
  90. package/lib/mockBtcSigner.js +0 -50
  91. package/lib/mockBtcSigner.js.map +0 -1
  92. package/lib-es/descriptor.d.ts +0 -19
  93. package/lib-es/descriptor.d.ts.map +0 -1
  94. package/lib-es/descriptor.js +0 -118
  95. package/lib-es/descriptor.js.map +0 -1
  96. package/lib-es/mockBtcSigner.d.ts +0 -20
  97. package/lib-es/mockBtcSigner.d.ts.map +0 -1
  98. package/lib-es/mockBtcSigner.js +0 -45
  99. package/lib-es/mockBtcSigner.js.map +0 -1
  100. package/src/descriptor.test.ts +0 -76
  101. package/src/descriptor.ts +0 -204
  102. 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.20260115024415
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.20260115024415
13
- - @ledgerhq/coin-framework@6.13.0-nightly.20260115024415
14
- - @ledgerhq/types-live@6.93.0-nightly.20260115024415
15
- - @ledgerhq/live-env@2.25.0-nightly.20260115024415
16
- - @ledgerhq/types-cryptoassets@7.32.0-nightly.20260115024415
17
- - @ledgerhq/devices@8.10.0-nightly.20260115024415
18
- - @ledgerhq/errors@6.29.0-nightly.20260115024415
19
- - @ledgerhq/logs@6.14.0-nightly.20260115024415
20
- - @ledgerhq/live-network@2.2.0-nightly.20260115024415
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":";;;;;;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;AAErD,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,GAAG,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA6BF,eAAO,MAAM,mBAAmB,aAAc,cAAc,KAAG,cAI9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,cAAc,KAAG,MAG5D,CAAC"}
1
+ {"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAqBF,eAAO,MAAM,mBAAmB,aAAc,cAAc,KAAG,cAI9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,cAAc,KAAG,MAG5D,CAAC"}
package/lib/explorer.js CHANGED
@@ -7,13 +7,6 @@ exports.blockchainBaseURL = exports.getCurrencyExplorer = void 0;
7
7
  const invariant_1 = __importDefault(require("invariant"));
8
8
  const live_env_1 = require("@ledgerhq/live-env");
9
9
  const findCurrencyExplorer = (currency) => {
10
- if ((0, live_env_1.getEnv)("SATSTACK") && currency.id === "bitcoin") {
11
- return {
12
- endpoint: (0, live_env_1.getEnv)("EXPLORER_SATSTACK"),
13
- id: "btc",
14
- version: "v3",
15
- };
16
- }
17
10
  if (!currency.explorerId) {
18
11
  console.warn("no explorerId for", currency.id);
19
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.js","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":";;;;;;AACA,0DAAkC;AAClC,iDAA4C;AAQ5C,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAqC,EAAE;IAC3F,IAAI,IAAA,iBAAM,EAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO;YACL,QAAQ,EAAE,IAAA,iBAAM,EAAC,mBAAmB,CAAC;YACrC,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE,KAAK,iBAAiB,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,IAAA,iBAAM,EAAC,kBAAkB,CAAC;YACpC,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,IAAA,iBAAM,EAAC,UAAU,CAAC;QAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE;QACtC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAkB,EAAE;IAC9E,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAA,mBAAS,EAAC,GAAG,EAAE,0BAA0B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAU,EAAE;IACpE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,GAAG,QAAQ,eAAe,OAAO,IAAI,EAAE,EAAE,CAAC;AACnD,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B"}
1
+ {"version":3,"file":"explorer.js","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":";;;;;;AACA,0DAAkC;AAClC,iDAA4C;AAQ5C,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAqC,EAAE;IAC3F,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE,KAAK,iBAAiB,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,IAAA,iBAAM,EAAC,kBAAkB,CAAC;YACpC,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,IAAA,iBAAM,EAAC,UAAU,CAAC;QAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE;QACtC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAkB,EAAE;IAC9E,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAA,mBAAS,EAAC,GAAG,EAAE,0BAA0B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAJW,QAAA,mBAAmB,uBAI9B;AAEK,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAU,EAAE;IACpE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,GAAG,QAAQ,eAAe,OAAO,IAAI,EAAE,EAAE,CAAC;AACnD,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B"}
@@ -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":"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"}
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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"}