@bitgo/abstract-utxo 9.2.2 → 9.4.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 (123) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/src/abstractUtxoCoin.d.ts +9 -13
  3. package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
  4. package/dist/src/abstractUtxoCoin.js +130 -70
  5. package/dist/src/core/descriptor/DescriptorMap.d.ts +9 -0
  6. package/dist/src/core/descriptor/DescriptorMap.d.ts.map +1 -0
  7. package/dist/src/core/descriptor/DescriptorMap.js +9 -0
  8. package/dist/src/core/descriptor/Output.d.ts +24 -0
  9. package/dist/src/core/descriptor/Output.d.ts.map +1 -0
  10. package/dist/src/core/descriptor/Output.js +22 -0
  11. package/dist/src/core/descriptor/VirtualSize.d.ts +21 -0
  12. package/dist/src/core/descriptor/VirtualSize.d.ts.map +1 -0
  13. package/dist/src/core/descriptor/VirtualSize.js +83 -0
  14. package/dist/src/core/descriptor/address.d.ts +5 -0
  15. package/dist/src/core/descriptor/address.d.ts.map +1 -0
  16. package/dist/src/core/descriptor/address.js +48 -0
  17. package/dist/src/core/descriptor/index.d.ts +9 -0
  18. package/dist/src/core/descriptor/index.d.ts.map +1 -0
  19. package/dist/src/core/descriptor/index.js +17 -0
  20. package/dist/src/core/descriptor/psbt/assertSatisfiable.d.ts +20 -0
  21. package/dist/src/core/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  22. package/dist/src/core/descriptor/psbt/assertSatisfiable.js +75 -0
  23. package/dist/src/core/descriptor/psbt/createPsbt.d.ts +15 -0
  24. package/dist/src/core/descriptor/psbt/createPsbt.d.ts.map +1 -0
  25. package/dist/src/core/descriptor/psbt/createPsbt.js +83 -0
  26. package/dist/src/core/descriptor/psbt/findDescriptors.d.ts +22 -0
  27. package/dist/src/core/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  28. package/dist/src/core/descriptor/psbt/findDescriptors.js +75 -0
  29. package/dist/src/core/descriptor/psbt/index.d.ts +5 -0
  30. package/dist/src/core/descriptor/psbt/index.d.ts.map +1 -0
  31. package/dist/src/core/descriptor/psbt/index.js +10 -0
  32. package/dist/src/core/descriptor/psbt/parse.d.ts +27 -0
  33. package/dist/src/core/descriptor/psbt/parse.d.ts.map +1 -0
  34. package/dist/src/core/descriptor/psbt/parse.js +87 -0
  35. package/dist/src/core/descriptor/psbt/wrap.d.ts +12 -0
  36. package/dist/src/core/descriptor/psbt/wrap.d.ts.map +1 -0
  37. package/dist/src/core/descriptor/psbt/wrap.js +76 -0
  38. package/dist/src/core/descriptor/signTxLocal.d.ts +3 -0
  39. package/dist/src/core/descriptor/signTxLocal.d.ts.map +1 -0
  40. package/dist/src/core/descriptor/signTxLocal.js +9 -0
  41. package/dist/src/descriptor/NamedDescriptor.js +35 -2
  42. package/dist/src/descriptor/assertDescriptorWalletAddress.js +45 -10
  43. package/dist/src/index.js +24 -2
  44. package/dist/src/names.d.ts +13 -0
  45. package/dist/src/names.d.ts.map +1 -0
  46. package/dist/src/names.js +175 -0
  47. package/dist/src/parseOutput.d.ts +0 -3
  48. package/dist/src/parseOutput.d.ts.map +1 -1
  49. package/dist/src/parseOutput.js +16 -17
  50. package/dist/src/recovery/RecoveryProvider.js +2 -3
  51. package/dist/src/recovery/backupKeyRecovery.d.ts +0 -3
  52. package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  53. package/dist/src/recovery/backupKeyRecovery.js +50 -18
  54. package/dist/src/recovery/baseApi.d.ts +1 -4
  55. package/dist/src/recovery/baseApi.d.ts.map +1 -1
  56. package/dist/src/recovery/baseApi.js +6 -6
  57. package/dist/src/recovery/coingeckoApi.d.ts +0 -3
  58. package/dist/src/recovery/coingeckoApi.d.ts.map +1 -1
  59. package/dist/src/recovery/coingeckoApi.js +1 -4
  60. package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
  61. package/dist/src/recovery/crossChainRecovery.js +44 -12
  62. package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
  63. package/dist/src/recovery/mempoolApi.js +7 -7
  64. package/dist/src/replayProtection.js +37 -5
  65. package/dist/src/sign.d.ts +0 -3
  66. package/dist/src/sign.d.ts.map +1 -1
  67. package/dist/src/sign.js +44 -11
  68. package/dist/src/transaction/explainTransaction.d.ts +15 -0
  69. package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
  70. package/dist/src/transaction/explainTransaction.js +51 -0
  71. package/dist/src/transaction/fetchInputs.d.ts +26 -0
  72. package/dist/src/transaction/fetchInputs.d.ts.map +1 -0
  73. package/dist/src/transaction/fetchInputs.js +110 -0
  74. package/dist/src/transaction/fixedScript/explainTransaction.d.ts +30 -0
  75. package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  76. package/dist/src/transaction/fixedScript/explainTransaction.js +220 -0
  77. package/dist/src/transaction/fixedScript/index.d.ts +2 -0
  78. package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
  79. package/dist/src/transaction/fixedScript/index.js +7 -0
  80. package/dist/src/transaction/index.d.ts +4 -0
  81. package/dist/src/transaction/index.d.ts.map +1 -0
  82. package/dist/src/transaction/index.js +22 -0
  83. package/dist/src/transaction/recipient.d.ts +28 -0
  84. package/dist/src/transaction/recipient.d.ts.map +1 -0
  85. package/dist/src/transaction/recipient.js +80 -0
  86. package/dist/test/core/descriptor/descriptor.utils.d.ts +9 -0
  87. package/dist/test/core/descriptor/descriptor.utils.d.ts.map +1 -0
  88. package/dist/test/core/descriptor/descriptor.utils.js +57 -0
  89. package/dist/test/core/descriptor/psbt/VirtualSize.d.ts +2 -0
  90. package/dist/test/core/descriptor/psbt/VirtualSize.d.ts.map +1 -0
  91. package/dist/test/core/descriptor/psbt/VirtualSize.js +78 -0
  92. package/dist/test/core/descriptor/psbt/assertSatisfiable.d.ts +2 -0
  93. package/dist/test/core/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  94. package/dist/test/core/descriptor/psbt/assertSatisfiable.js +56 -0
  95. package/dist/test/core/descriptor/psbt/createPsbt.d.ts +2 -0
  96. package/dist/test/core/descriptor/psbt/createPsbt.d.ts.map +1 -0
  97. package/dist/test/core/descriptor/psbt/createPsbt.js +85 -0
  98. package/dist/test/core/descriptor/psbt/findDescriptors.d.ts +2 -0
  99. package/dist/test/core/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  100. package/dist/test/core/descriptor/psbt/findDescriptors.js +66 -0
  101. package/dist/test/core/descriptor/psbt/mock.utils.d.ts +34 -0
  102. package/dist/test/core/descriptor/psbt/mock.utils.d.ts.map +1 -0
  103. package/dist/test/core/descriptor/psbt/mock.utils.js +89 -0
  104. package/dist/test/core/descriptor/psbt/parse.d.ts +2 -0
  105. package/dist/test/core/descriptor/psbt/parse.d.ts.map +1 -0
  106. package/dist/test/core/descriptor/psbt/parse.js +32 -0
  107. package/dist/test/core/descriptor/psbt/psbt.utils.d.ts +4 -0
  108. package/dist/test/core/descriptor/psbt/psbt.utils.d.ts.map +1 -0
  109. package/dist/test/core/descriptor/psbt/psbt.utils.js +20 -0
  110. package/dist/test/core/fixtures.utils.d.ts +15 -0
  111. package/dist/test/core/fixtures.utils.d.ts.map +1 -0
  112. package/dist/test/core/fixtures.utils.js +114 -0
  113. package/dist/test/core/key.utils.d.ts +16 -0
  114. package/dist/test/core/key.utils.d.ts.map +1 -0
  115. package/dist/test/core/key.utils.js +59 -0
  116. package/dist/test/core/toPlainObject.utils.d.ts +11 -0
  117. package/dist/test/core/toPlainObject.utils.d.ts.map +1 -0
  118. package/dist/test/core/toPlainObject.utils.js +76 -0
  119. package/dist/tsconfig.tsbuildinfo +1 -1
  120. package/package.json +13 -10
  121. package/dist/src/transaction.d.ts +0 -64
  122. package/dist/src/transaction.d.ts.map +0 -1
  123. package/dist/src/transaction.js +0 -323
@@ -0,0 +1,26 @@
1
+ import * as utxolib from '@bitgo/utxo-lib';
2
+ import { BitGoBase, IRequestTracer } from '@bitgo/sdk-core';
3
+ import { AbstractUtxoCoin, TransactionPrebuild } from '../abstractUtxoCoin';
4
+ /**
5
+ * Get the inputs for a psbt from a prebuild.
6
+ */
7
+ export declare function getPsbtTxInputs(psbtArg: string | utxolib.bitgo.UtxoPsbt, network: utxolib.Network): {
8
+ address: string;
9
+ value: bigint;
10
+ valueString: string;
11
+ }[];
12
+ /**
13
+ * Get the inputs for a transaction from a prebuild.
14
+ */
15
+ export declare function getTxInputs<TNumber extends number | bigint>(params: {
16
+ txPrebuild: TransactionPrebuild<TNumber>;
17
+ bitgo: BitGoBase;
18
+ coin: AbstractUtxoCoin;
19
+ disableNetworking: boolean;
20
+ reqId?: IRequestTracer;
21
+ }): Promise<{
22
+ address: string;
23
+ value: TNumber;
24
+ valueString: string;
25
+ }[]>;
26
+ //# sourceMappingURL=fetchInputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchInputs.d.ts","sourceRoot":"","sources":["../../../src/transaction/fetchInputs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE5E;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EACxC,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAyB3D;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE;IACzE,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAoCtE"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getPsbtTxInputs = getPsbtTxInputs;
37
+ exports.getTxInputs = getTxInputs;
38
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
39
+ /**
40
+ * Get the inputs for a psbt from a prebuild.
41
+ */
42
+ function getPsbtTxInputs(psbtArg, network) {
43
+ const psbt = psbtArg instanceof utxolib.bitgo.UtxoPsbt ? psbtArg : utxolib.bitgo.createPsbtFromHex(psbtArg, network);
44
+ const txInputs = psbt.txInputs;
45
+ return psbt.data.inputs.map((input, index) => {
46
+ let address;
47
+ let value;
48
+ if (input.witnessUtxo) {
49
+ address = utxolib.address.fromOutputScript(input.witnessUtxo.script, network);
50
+ value = input.witnessUtxo.value;
51
+ }
52
+ else if (input.nonWitnessUtxo) {
53
+ const tx = utxolib.bitgo.createTransactionFromBuffer(input.nonWitnessUtxo, network, {
54
+ amountType: 'bigint',
55
+ });
56
+ const txId = Buffer.from(txInputs[index].hash).reverse().toString('hex');
57
+ if (tx.getId() !== txId) {
58
+ throw new Error('input transaction hex does not match id');
59
+ }
60
+ const prevTxOutputIndex = txInputs[index].index;
61
+ address = utxolib.address.fromOutputScript(tx.outs[prevTxOutputIndex].script, network);
62
+ value = tx.outs[prevTxOutputIndex].value;
63
+ }
64
+ else {
65
+ throw new Error('psbt input is missing both witnessUtxo and nonWitnessUtxo');
66
+ }
67
+ return { address, value, valueString: value.toString() };
68
+ });
69
+ }
70
+ /**
71
+ * Get the inputs for a transaction from a prebuild.
72
+ */
73
+ async function getTxInputs(params) {
74
+ const { txPrebuild, bitgo, coin, disableNetworking, reqId } = params;
75
+ if (!txPrebuild.txHex) {
76
+ throw new Error(`txPrebuild.txHex not set`);
77
+ }
78
+ const transaction = coin.createTransactionFromHex(txPrebuild.txHex);
79
+ const transactionCache = {};
80
+ return await Promise.all(transaction.ins.map(async (currentInput) => {
81
+ var _a, _b;
82
+ const transactionId = Buffer.from(currentInput.hash).reverse().toString('hex');
83
+ const txHex = (_b = (_a = txPrebuild.txInfo) === null || _a === void 0 ? void 0 : _a.txHexes) === null || _b === void 0 ? void 0 : _b[transactionId];
84
+ if (txHex) {
85
+ const localTx = coin.createTransactionFromHex(txHex);
86
+ if (localTx.getId() !== transactionId) {
87
+ throw new Error('input transaction hex does not match id');
88
+ }
89
+ const currentOutput = localTx.outs[currentInput.index];
90
+ const address = utxolib.address.fromOutputScript(currentOutput.script, coin.network);
91
+ return {
92
+ address,
93
+ value: currentOutput.value,
94
+ valueString: currentOutput.value.toString(),
95
+ };
96
+ }
97
+ else if (!transactionCache[transactionId]) {
98
+ if (disableNetworking) {
99
+ throw new Error('attempting to retrieve transaction details externally with networking disabled');
100
+ }
101
+ if (reqId) {
102
+ bitgo.setRequestTracer(reqId);
103
+ }
104
+ transactionCache[transactionId] = await bitgo.get(coin.url(`/public/tx/${transactionId}`)).result();
105
+ }
106
+ const transactionDetails = transactionCache[transactionId];
107
+ return transactionDetails.outputs[currentInput.index];
108
+ }));
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hJbnB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZmV0Y2hJbnB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSwwQ0E0QkM7QUFLRCxrQ0EwQ0M7QUFuRkQseURBQTJDO0FBSzNDOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixPQUF3QyxFQUN4QyxPQUF3QjtJQUV4QixNQUFNLElBQUksR0FBRyxPQUFPLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQVMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUU7Z0JBQzFGLFVBQVUsRUFBRSxRQUFRO2FBQ3JCLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRixJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDaEQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN2RixLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFdBQVcsQ0FBa0MsTUFNbEU7SUFDQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3JFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQVUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzVCLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUN0QixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFxRSxFQUFFOztRQUM1RyxNQUFNLGFBQWEsR0FBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0YsTUFBTSxLQUFLLEdBQUcsTUFBQSxNQUFBLFVBQVUsQ0FBQyxNQUFNLDBDQUFFLE9BQU8sMENBQUcsYUFBYSxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBVSxLQUFLLENBQUMsQ0FBQztZQUM5RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JGLE9BQU87Z0JBQ0wsT0FBTztnQkFDUCxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7Z0JBQzFCLFdBQVcsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTthQUM1QyxDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1lBQ3BHLENBQUM7WUFDRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEcsQ0FBQztRQUNELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJUmVxdWVzdFRyYWNlciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFRyYW5zYWN0aW9uUHJlYnVpbGQgfSBmcm9tICcuLi9hYnN0cmFjdFV0eG9Db2luJztcblxuLyoqXG4gKiBHZXQgdGhlIGlucHV0cyBmb3IgYSBwc2J0IGZyb20gYSBwcmVidWlsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBzYnRUeElucHV0cyhcbiAgcHNidEFyZzogc3RyaW5nIHwgdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB7IGFkZHJlc3M6IHN0cmluZzsgdmFsdWU6IGJpZ2ludDsgdmFsdWVTdHJpbmc6IHN0cmluZyB9W10ge1xuICBjb25zdCBwc2J0ID0gcHNidEFyZyBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgPyBwc2J0QXJnIDogdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleChwc2J0QXJnLCBuZXR3b3JrKTtcbiAgY29uc3QgdHhJbnB1dHMgPSBwc2J0LnR4SW5wdXRzO1xuICByZXR1cm4gcHNidC5kYXRhLmlucHV0cy5tYXAoKGlucHV0LCBpbmRleCkgPT4ge1xuICAgIGxldCBhZGRyZXNzOiBzdHJpbmc7XG4gICAgbGV0IHZhbHVlOiBiaWdpbnQ7XG4gICAgaWYgKGlucHV0LndpdG5lc3NVdHhvKSB7XG4gICAgICBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoaW5wdXQud2l0bmVzc1V0eG8uc2NyaXB0LCBuZXR3b3JrKTtcbiAgICAgIHZhbHVlID0gaW5wdXQud2l0bmVzc1V0eG8udmFsdWU7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5ub25XaXRuZXNzVXR4bykge1xuICAgICAgY29uc3QgdHggPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxiaWdpbnQ+KGlucHV0Lm5vbldpdG5lc3NVdHhvLCBuZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6ICdiaWdpbnQnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCB0eElkID0gKEJ1ZmZlci5mcm9tKHR4SW5wdXRzW2luZGV4XS5oYXNoKS5yZXZlcnNlKCkgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBpZiAodHguZ2V0SWQoKSAhPT0gdHhJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IHRyYW5zYWN0aW9uIGhleCBkb2VzIG5vdCBtYXRjaCBpZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJldlR4T3V0cHV0SW5kZXggPSB0eElucHV0c1tpbmRleF0uaW5kZXg7XG4gICAgICBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQodHgub3V0c1twcmV2VHhPdXRwdXRJbmRleF0uc2NyaXB0LCBuZXR3b3JrKTtcbiAgICAgIHZhbHVlID0gdHgub3V0c1twcmV2VHhPdXRwdXRJbmRleF0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHNidCBpbnB1dCBpcyBtaXNzaW5nIGJvdGggd2l0bmVzc1V0eG8gYW5kIG5vbldpdG5lc3NVdHhvJyk7XG4gICAgfVxuICAgIHJldHVybiB7IGFkZHJlc3MsIHZhbHVlLCB2YWx1ZVN0cmluZzogdmFsdWUudG9TdHJpbmcoKSB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGlucHV0cyBmb3IgYSB0cmFuc2FjdGlvbiBmcm9tIGEgcHJlYnVpbGQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRUeElucHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihwYXJhbXM6IHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgYml0Z286IEJpdEdvQmFzZTtcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbjtcbiAgZGlzYWJsZU5ldHdvcmtpbmc6IGJvb2xlYW47XG4gIHJlcUlkPzogSVJlcXVlc3RUcmFjZXI7XG59KTogUHJvbWlzZTx7IGFkZHJlc3M6IHN0cmluZzsgdmFsdWU6IFROdW1iZXI7IHZhbHVlU3RyaW5nOiBzdHJpbmcgfVtdPiB7XG4gIGNvbnN0IHsgdHhQcmVidWlsZCwgYml0Z28sIGNvaW4sIGRpc2FibGVOZXR3b3JraW5nLCByZXFJZCB9ID0gcGFyYW1zO1xuICBpZiAoIXR4UHJlYnVpbGQudHhIZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQudHhIZXggbm90IHNldGApO1xuICB9XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gY29pbi5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlcj4odHhQcmVidWlsZC50eEhleCk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uQ2FjaGUgPSB7fTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHRyYW5zYWN0aW9uLmlucy5tYXAoYXN5bmMgKGN1cnJlbnRJbnB1dCk6IFByb21pc2U8eyBhZGRyZXNzOiBzdHJpbmc7IHZhbHVlOiBUTnVtYmVyOyB2YWx1ZVN0cmluZzogc3RyaW5nIH0+ID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSAoQnVmZmVyLmZyb20oY3VycmVudElucHV0Lmhhc2gpLnJldmVyc2UoKSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHhQcmVidWlsZC50eEluZm8/LnR4SGV4ZXM/Llt0cmFuc2FjdGlvbklkXTtcbiAgICAgIGlmICh0eEhleCkge1xuICAgICAgICBjb25zdCBsb2NhbFR4ID0gY29pbi5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlcj4odHhIZXgpO1xuICAgICAgICBpZiAobG9jYWxUeC5nZXRJZCgpICE9PSB0cmFuc2FjdGlvbklkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnB1dCB0cmFuc2FjdGlvbiBoZXggZG9lcyBub3QgbWF0Y2ggaWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50T3V0cHV0ID0gbG9jYWxUeC5vdXRzW2N1cnJlbnRJbnB1dC5pbmRleF07XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChjdXJyZW50T3V0cHV0LnNjcmlwdCwgY29pbi5uZXR3b3JrKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50T3V0cHV0LnZhbHVlLFxuICAgICAgICAgIHZhbHVlU3RyaW5nOiBjdXJyZW50T3V0cHV0LnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKCF0cmFuc2FjdGlvbkNhY2hlW3RyYW5zYWN0aW9uSWRdKSB7XG4gICAgICAgIGlmIChkaXNhYmxlTmV0d29ya2luZykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0ZW1wdGluZyB0byByZXRyaWV2ZSB0cmFuc2FjdGlvbiBkZXRhaWxzIGV4dGVybmFsbHkgd2l0aCBuZXR3b3JraW5nIGRpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcUlkKSB7XG4gICAgICAgICAgYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNhY3Rpb25DYWNoZVt0cmFuc2FjdGlvbklkXSA9IGF3YWl0IGJpdGdvLmdldChjb2luLnVybChgL3B1YmxpYy90eC8ke3RyYW5zYWN0aW9uSWR9YCkpLnJlc3VsdCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNhY3Rpb25EZXRhaWxzID0gdHJhbnNhY3Rpb25DYWNoZVt0cmFuc2FjdGlvbklkXTtcbiAgICAgIHJldHVybiB0cmFuc2FjdGlvbkRldGFpbHMub3V0cHV0c1tjdXJyZW50SW5wdXQuaW5kZXhdO1xuICAgIH0pXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import * as utxolib from '@bitgo/utxo-lib';
2
+ import { bitgo } from '@bitgo/utxo-lib';
3
+ import { TransactionExplanation } from '../../abstractUtxoCoin';
4
+ export type ChangeAddressInfo = {
5
+ address: string;
6
+ chain: number;
7
+ index: number;
8
+ };
9
+ /**
10
+ * Decompose a raw psbt into useful information, such as the total amounts,
11
+ * change amounts, and transaction outputs.
12
+ */
13
+ export declare function explainPsbt<TNumber extends number | bigint, Tx extends bitgo.UtxoTransaction<bigint>>(psbt: bitgo.UtxoPsbt<Tx>, params: {
14
+ pubs?: string[];
15
+ txInfo?: {
16
+ unspents?: bitgo.Unspent<TNumber>[];
17
+ };
18
+ }, network: utxolib.Network): TransactionExplanation;
19
+ export declare function explainLegacyTx<TNumber extends number | bigint>(tx: bitgo.UtxoTransaction<TNumber>, params: {
20
+ pubs?: string[];
21
+ txInfo?: {
22
+ unspents?: bitgo.Unspent<TNumber>[];
23
+ };
24
+ changeInfo?: {
25
+ address: string;
26
+ chain: number;
27
+ index: number;
28
+ }[];
29
+ }, network: utxolib.Network): TransactionExplanation;
30
+ //# sourceMappingURL=explainTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/explainTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAyB,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAU,sBAAsB,EAA2B,MAAM,wBAAwB,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAiIlF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EACnG,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EACxB,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;CAClD,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,sBAAsB,CAuExB;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC7D,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAClC,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;IACjD,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,sBAAsB,CAQxB"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.explainPsbt = explainPsbt;
37
+ exports.explainLegacyTx = explainLegacyTx;
38
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
39
+ const utxo_lib_1 = require("@bitgo/utxo-lib");
40
+ const recipient_1 = require("../recipient");
41
+ function explainCommon(tx, params, network) {
42
+ var _a;
43
+ const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs'];
44
+ let spendAmount = BigInt(0);
45
+ let changeAmount = BigInt(0);
46
+ const changeOutputs = [];
47
+ const outputs = [];
48
+ const { changeInfo } = params;
49
+ const changeAddresses = (_a = changeInfo === null || changeInfo === void 0 ? void 0 : changeInfo.map((info) => info.address)) !== null && _a !== void 0 ? _a : [];
50
+ tx.outs.forEach((currentOutput) => {
51
+ // Try to encode the script pubkey with an address. If it fails, try to parse it as an OP_RETURN output with the prefix.
52
+ // If that fails, then it is an unrecognized scriptPubkey and should fail
53
+ const currentAddress = (0, recipient_1.toExtendedAddressFormat)(currentOutput.script, network);
54
+ const currentAmount = BigInt(currentOutput.value);
55
+ if (changeAddresses.includes(currentAddress)) {
56
+ // this is change
57
+ changeAmount += currentAmount;
58
+ const change = changeInfo === null || changeInfo === void 0 ? void 0 : changeInfo.find((change) => change.address === currentAddress);
59
+ if (!change) {
60
+ throw new Error('changeInfo must have change information for all change outputs');
61
+ }
62
+ changeOutputs.push({
63
+ address: currentAddress,
64
+ amount: currentAmount.toString(),
65
+ chain: change.chain,
66
+ index: change.index,
67
+ external: false,
68
+ });
69
+ return;
70
+ }
71
+ spendAmount += currentAmount;
72
+ outputs.push({
73
+ address: currentAddress,
74
+ amount: currentAmount.toString(),
75
+ // If changeInfo has a length greater than or equal to zero, it means that the change information
76
+ // was provided to the function but the output was not identified as change. In this case,
77
+ // the output is external, and we can set it as so. If changeInfo is undefined, it means we were
78
+ // given no information about change outputs, so we can't determine anything about the output,
79
+ // so we leave it undefined.
80
+ external: changeInfo ? true : undefined,
81
+ });
82
+ });
83
+ const outputDetails = {
84
+ outputAmount: spendAmount.toString(),
85
+ changeAmount: changeAmount.toString(),
86
+ outputs,
87
+ changeOutputs,
88
+ };
89
+ let fee;
90
+ let locktime;
91
+ if (params.feeInfo) {
92
+ displayOrder.push('fee');
93
+ fee = params.feeInfo;
94
+ }
95
+ if (Number.isInteger(tx.locktime) && tx.locktime > 0) {
96
+ displayOrder.push('locktime');
97
+ locktime = tx.locktime;
98
+ }
99
+ return { displayOrder, id: tx.getId(), ...outputDetails, fee, locktime };
100
+ }
101
+ function getRootWalletKeys(params) {
102
+ var _a;
103
+ const keys = (_a = params.pubs) === null || _a === void 0 ? void 0 : _a.map((xpub) => utxo_lib_1.bip32.fromBase58(xpub));
104
+ return keys && keys.length === 3 ? new utxo_lib_1.bitgo.RootWalletKeys(keys) : undefined;
105
+ }
106
+ function getPsbtInputSignaturesCount(psbt, params) {
107
+ const rootWalletKeys = getRootWalletKeys(params);
108
+ return rootWalletKeys
109
+ ? utxo_lib_1.bitgo.getSignatureValidationArrayPsbt(psbt, rootWalletKeys).map((sv) => sv[1].filter((v) => v).length)
110
+ : Array(psbt.data.inputs.length).fill(0);
111
+ }
112
+ function getTxInputSignaturesCount(tx, params, network) {
113
+ var _a, _b, _c;
114
+ const prevOutputs = (_b = (_a = params.txInfo) === null || _a === void 0 ? void 0 : _a.unspents) === null || _b === void 0 ? void 0 : _b.map((u) => utxo_lib_1.bitgo.toOutput(u, network));
115
+ const rootWalletKeys = getRootWalletKeys(params);
116
+ const { unspents = [] } = (_c = params.txInfo) !== null && _c !== void 0 ? _c : {};
117
+ // get the number of signatures per input
118
+ return tx.ins.map((input, idx) => {
119
+ if (unspents.length !== tx.ins.length) {
120
+ return 0;
121
+ }
122
+ if (!prevOutputs) {
123
+ throw new Error(`invalid state`);
124
+ }
125
+ if (!rootWalletKeys) {
126
+ // no pub keys or incorrect number of pub keys
127
+ return 0;
128
+ }
129
+ try {
130
+ return utxo_lib_1.bitgo.verifySignatureWithUnspent(tx, idx, unspents, rootWalletKeys).filter((v) => v).length;
131
+ }
132
+ catch (e) {
133
+ // some other error occurred and we can't validate the signatures
134
+ return 0;
135
+ }
136
+ });
137
+ }
138
+ /**
139
+ * Decompose a raw psbt into useful information, such as the total amounts,
140
+ * change amounts, and transaction outputs.
141
+ */
142
+ function explainPsbt(psbt, params, network) {
143
+ const txOutputs = psbt.txOutputs;
144
+ function getChainAndIndexFromBip32Derivations(output) {
145
+ var _a, _b;
146
+ const derivations = (_b = (_a = output.bip32Derivation) !== null && _a !== void 0 ? _a : output.tapBip32Derivation) !== null && _b !== void 0 ? _b : undefined;
147
+ if (!derivations) {
148
+ return undefined;
149
+ }
150
+ const paths = derivations.map((d) => d.path);
151
+ if (!paths || paths.length !== 3) {
152
+ throw new Error('expected 3 paths in bip32Derivation or tapBip32Derivation');
153
+ }
154
+ if (!paths.every((p) => paths[0] === p)) {
155
+ throw new Error('expected all paths to be the same');
156
+ }
157
+ paths.forEach((path) => {
158
+ if (paths[0] !== path) {
159
+ throw new Error('Unable to get a single chain and index on the output because there are different paths for different keys');
160
+ }
161
+ });
162
+ return utxolib.bitgo.getChainAndIndexFromPath(paths[0]);
163
+ }
164
+ function getChangeInfo() {
165
+ try {
166
+ return utxolib.bitgo.findInternalOutputIndices(psbt).map((i) => {
167
+ const derivationInformation = getChainAndIndexFromBip32Derivations(psbt.data.outputs[i]);
168
+ if (!derivationInformation) {
169
+ throw new Error('could not find derivation information on bip32Derivation or tapBip32Derivation');
170
+ }
171
+ return {
172
+ address: utxolib.address.fromOutputScript(txOutputs[i].script, network),
173
+ external: false,
174
+ ...derivationInformation,
175
+ };
176
+ });
177
+ }
178
+ catch (e) {
179
+ if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
180
+ return undefined;
181
+ }
182
+ throw e;
183
+ }
184
+ }
185
+ const changeInfo = getChangeInfo();
186
+ const tx = psbt.getUnsignedTx();
187
+ const common = explainCommon(tx, { ...params, changeInfo }, network);
188
+ const inputSignaturesCount = getPsbtInputSignaturesCount(psbt, params);
189
+ // Set fee from subtracting inputs from outputs
190
+ const outputAmount = txOutputs.reduce((cumulative, curr) => cumulative + BigInt(curr.value), BigInt(0));
191
+ const inputAmount = psbt.txInputs.reduce((cumulative, txInput, i) => {
192
+ const data = psbt.data.inputs[i];
193
+ if (data.witnessUtxo) {
194
+ return cumulative + BigInt(data.witnessUtxo.value);
195
+ }
196
+ else if (data.nonWitnessUtxo) {
197
+ const tx = utxo_lib_1.bitgo.createTransactionFromBuffer(data.nonWitnessUtxo, network, { amountType: 'bigint' });
198
+ return cumulative + BigInt(tx.outs[txInput.index].value);
199
+ }
200
+ else {
201
+ throw new Error('could not find value on input');
202
+ }
203
+ }, BigInt(0));
204
+ return {
205
+ ...common,
206
+ fee: (inputAmount - outputAmount).toString(),
207
+ inputSignatures: inputSignaturesCount,
208
+ signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
209
+ };
210
+ }
211
+ function explainLegacyTx(tx, params, network) {
212
+ const common = explainCommon(tx, params, network);
213
+ const inputSignaturesCount = getTxInputSignaturesCount(tx, params, network);
214
+ return {
215
+ ...common,
216
+ inputSignatures: inputSignaturesCount,
217
+ signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
218
+ };
219
+ }
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRJQSxrQ0E4RUM7QUFFRCwwQ0FnQkM7QUE1T0QseURBQTJDO0FBQzNDLDhDQUErRDtBQUkvRCw0Q0FBdUQ7QUFJdkQsU0FBUyxhQUFhLENBQ3BCLEVBQWtDLEVBQ2xDLE1BR0MsRUFDRCxPQUF3Qjs7SUFFeEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEYsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixNQUFNLGFBQWEsR0FBOEIsRUFBRSxDQUFDO0lBQ3BELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU3QixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQzlCLE1BQU0sZUFBZSxHQUFHLE1BQUEsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQ0FBSSxFQUFFLENBQUM7SUFFdEUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtRQUNoQyx3SEFBd0g7UUFDeEgseUVBQXlFO1FBQ3pFLE1BQU0sY0FBYyxHQUFHLElBQUEsbUNBQXVCLEVBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5RSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMs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QyxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWQsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULEdBQUcsRUFBRSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7UUFDNUMsZUFBZSxFQUFFLG9CQUFvQjtRQUNyQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5RCxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFnQixlQUFlLENBQzdCLEVBQWtDLEVBQ2xDLE1BSUMsRUFDRCxPQUF3QjtJQUV4QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRCxNQUFNLG9CQUFvQixHQUFHLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUUsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDOUQsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgYmlwMzIsIEJJUDMySW50ZXJmYWNlLCBiaXRnbyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBPdXRwdXQsIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uL3JlY2lwaWVudCc7XG5cbmV4cG9ydCB0eXBlIENoYW5nZUFkZHJlc3NJbmZvID0geyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfTtcblxuZnVuY3Rpb24gZXhwbGFpbkNvbW1vbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgY2hhbmdlSW5mbz86IENoYW5nZUFkZHJlc3NJbmZvW107XG4gICAgZmVlSW5mbz86IHN0cmluZztcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pIHtcbiAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cyddO1xuICBsZXQgc3BlbmRBbW91bnQgPSBCaWdJbnQoMCk7XG4gIGxldCBjaGFuZ2VBbW91bnQgPSBCaWdJbnQoMCk7XG4gIGNvbnN0IGNoYW5nZU91dHB1dHM6IEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0W10gPSBbXTtcbiAgY29uc3Qgb3V0cHV0czogT3V0cHV0W10gPSBbXTtcblxuICBjb25zdCB7IGNoYW5nZUluZm8gfSA9IHBhcmFtcztcbiAgY29uc3QgY2hhbmdlQWRkcmVzc2VzID0gY2hhbmdlSW5mbz8ubWFwKChpbmZvKSA9PiBpbmZvLmFkZHJlc3MpID8/IFtdO1xuXG4gIHR4Lm91dHMuZm9yRWFjaCgoY3VycmVudE91dHB1dCkgPT4ge1xuICAgIC8vIFRyeSB0byBlbmNvZGUgdGhlIHNjcmlwdCBwdWJrZXkgd2l0aCBhbiBhZGRyZXNzLiBJZiBpdCBmYWlscywgdHJ5IHRvIHBhcnNlIGl0IGFzIGFuIE9QX1JFVFVSTiBvdXRwdXQgd2l0aCB0aGUgcHJlZml4LlxuICAgIC8vIElmIHRoYXQgZmFpbHMsIHRoZW4gaXQgaXMgYW4gdW5yZWNvZ25pemVkIHNjcmlwdFB1YmtleSBhbmQgc2hvdWxkIGZhaWxcbiAgICBjb25zdCBjdXJyZW50QWRkcmVzcyA9IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGN1cnJlbnRPdXRwdXQuc2NyaXB0LCBuZXR3b3JrKTtcbiAgICBjb25zdCBjdXJyZW50QW1vdW50ID0gQmlnSW50KGN1cnJlbnRPdXRwdXQudmFsdWUpO1xuXG4gICAgaWYgKGNoYW5nZUFkZHJlc3Nlcy5pbmNsdWRlcyhjdXJyZW50QWRkcmVzcykpIHtcbiAgICAgIC8vIHRoaXMgaXMgY2hhbmdlXG4gICAgICBjaGFuZ2VBbW91bnQgKz0gY3VycmVudEFtb3VudDtcbiAgICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZUluZm8/LmZpbmQoKGNoYW5nZSkgPT4gY2hhbmdlLmFkZHJlc3MgPT09IGN1cnJlbnRBZGRyZXNzKTtcblxuICAgICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjaGFuZ2VJbmZvIG11c3QgaGF2ZSBjaGFuZ2UgaW5mb3JtYXRpb24gZm9yIGFsbCBjaGFuZ2Ugb3V0cHV0cycpO1xuICAgICAgfVxuICAgICAgY2hhbmdlT3V0cHV0cy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogY3VycmVudEFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogY3VycmVudEFtb3VudC50b1N0cmluZygpLFxuICAgICAgICBjaGFpbjogY2hhbmdlLmNoYWluLFxuICAgICAgICBpbmRleDogY2hhbmdlLmluZGV4LFxuICAgICAgICBleHRlcm5hbDogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzcGVuZEFtb3VudCArPSBjdXJyZW50QW1vdW50O1xuICAgIG91dHB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBjdXJyZW50QWRkcmVzcyxcbiAgICAgIGFtb3VudDogY3VycmVudEFtb3VudC50b1N0cmluZygpLFxuICAgICAgLy8gSWYgY2hhbmdlSW5mbyBoYXMgYSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG1lYW5zIHRoYXQgdGhlIGNoYW5nZSBpbmZvcm1hdGlvblxuICAgICAgLy8gd2FzIHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbiBidXQgdGhlIG91dHB1dCB3YXMgbm90IGlkZW50aWZpZWQgYXMgY2hhbmdlLiBJbiB0aGlzIGNhc2UsXG4gICAgICAvLyB0aGUgb3V0cHV0IGlzIGV4dGVybmFsLCBhbmQgd2UgY2FuIHNldCBpdCBhcyBzby4gSWYgY2hhbmdlSW5mbyBpcyB1bmRlZmluZWQsIGl0IG1lYW5zIHdlIHdlcmVcbiAgICAgIC8vIGdpdmVuIG5vIGluZm9ybWF0aW9uIGFib3V0IGNoYW5nZSBvdXRwdXRzLCBzbyB3ZSBjYW4ndCBkZXRlcm1pbmUgYW55dGhpbmcgYWJvdXQgdGhlIG91dHB1dCxcbiAgICAgIC8vIHNvIHdlIGxlYXZlIGl0IHVuZGVmaW5lZC5cbiAgICAgIGV4dGVybmFsOiBjaGFuZ2VJbmZvID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0RGV0YWlscyA9IHtcbiAgICBvdXRwdXRBbW91bnQ6IHNwZW5kQW1vdW50LnRvU3RyaW5nKCksXG4gICAgY2hhbmdlQW1vdW50OiBjaGFuZ2VBbW91bnQudG9TdHJpbmcoKSxcbiAgICBvdXRwdXRzLFxuICAgIGNoYW5nZU91dHB1dHMsXG4gIH07XG5cbiAgbGV0IGZlZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgbG9ja3RpbWU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBpZiAocGFyYW1zLmZlZUluZm8pIHtcbiAgICBkaXNwbGF5T3JkZXIucHVzaCgnZmVlJyk7XG4gICAgZmVlID0gcGFyYW1zLmZlZUluZm87XG4gIH1cblxuICBpZiAoTnVtYmVyLmlzSW50ZWdlcih0eC5sb2NrdGltZSkgJiYgdHgubG9ja3RpbWUgPiAwKSB7XG4gICAgZGlzcGxheU9yZGVyLnB1c2goJ2xvY2t0aW1lJyk7XG4gICAgbG9ja3RpbWUgPSB0eC5sb2NrdGltZTtcbiAgfVxuXG4gIHJldHVybiB7IGRpc3BsYXlPcmRlciwgaWQ6IHR4LmdldElkKCksIC4uLm91dHB1dERldGFpbHMsIGZlZSwgbG9ja3RpbWUgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdFdhbGxldEtleXMocGFyYW1zOiB7IHB1YnM/OiBzdHJpbmdbXSB9KSB7XG4gIGNvbnN0IGtleXMgPSBwYXJhbXMucHVicz8ubWFwKCh4cHViKSA9PiBiaXAzMi5mcm9tQmFzZTU4KHhwdWIpKTtcbiAgcmV0dXJuIGtleXMgJiYga2V5cy5sZW5ndGggPT09IDMgPyBuZXcgYml0Z28uUm9vdFdhbGxldEtleXMoa2V5cyBhcyBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UHNidElucHV0U2lnbmF0dXJlc0NvdW50KFxuICBwc2J0OiBiaXRnby5VdHhvUHNidCxcbiAgcGFyYW1zOiB7XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICB9XG4pIHtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICByZXR1cm4gcm9vdFdhbGxldEtleXNcbiAgICA/IGJpdGdvLmdldFNpZ25hdHVyZVZhbGlkYXRpb25BcnJheVBzYnQocHNidCwgcm9vdFdhbGxldEtleXMpLm1hcCgoc3YpID0+IHN2WzFdLmZpbHRlcigodikgPT4gdikubGVuZ3RoKVxuICAgIDogKEFycmF5KHBzYnQuZGF0YS5pbnB1dHMubGVuZ3RoKSBhcyBudW1iZXJbXSkuZmlsbCgwKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgfSxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pIHtcbiAgY29uc3QgcHJldk91dHB1dHMgPSBwYXJhbXMudHhJbmZvPy51bnNwZW50cz8ubWFwKCh1KSA9PiBiaXRnby50b091dHB1dDxUTnVtYmVyPih1LCBuZXR3b3JrKSk7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZ2V0Um9vdFdhbGxldEtleXMocGFyYW1zKTtcbiAgY29uc3QgeyB1bnNwZW50cyA9IFtdIH0gPSBwYXJhbXMudHhJbmZvID8/IHt9O1xuXG4gIC8vIGdldCB0aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgcGVyIGlucHV0XG4gIHJldHVybiB0eC5pbnMubWFwKChpbnB1dCwgaWR4KTogbnVtYmVyID0+IHtcbiAgICBpZiAodW5zcGVudHMubGVuZ3RoICE9PSB0eC5pbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHN0YXRlYCk7XG4gICAgfVxuICAgIGlmICghcm9vdFdhbGxldEtleXMpIHtcbiAgICAgIC8vIG5vIHB1YiBrZXlzIG9yIGluY29ycmVjdCBudW1iZXIgb2YgcHViIGtleXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGJpdGdvLnZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50PFROdW1iZXI+KHR4LCBpZHgsIHVuc3BlbnRzLCByb290V2FsbGV0S2V5cykuZmlsdGVyKCh2KSA9PiB2KS5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCBhbmQgd2UgY2FuJ3QgdmFsaWRhdGUgdGhlIHNpZ25hdHVyZXNcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRGVjb21wb3NlIGEgcmF3IHBzYnQgaW50byB1c2VmdWwgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIHRvdGFsIGFtb3VudHMsXG4gKiBjaGFuZ2UgYW1vdW50cywgYW5kIHRyYW5zYWN0aW9uIG91dHB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBsYWluUHNidDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50LCBUeCBleHRlbmRzIGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+PihcbiAgcHNidDogYml0Z28uVXR4b1BzYnQ8VHg+LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBjb25zdCB0eE91dHB1dHMgPSBwc2J0LnR4T3V0cHV0cztcblxuICBmdW5jdGlvbiBnZXRDaGFpbkFuZEluZGV4RnJvbUJpcDMyRGVyaXZhdGlvbnMob3V0cHV0OiBiaXRnby5Qc2J0T3V0cHV0KSB7XG4gICAgY29uc3QgZGVyaXZhdGlvbnMgPSBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uID8/IG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gPz8gdW5kZWZpbmVkO1xuICAgIGlmICghZGVyaXZhdGlvbnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHBhdGhzID0gZGVyaXZhdGlvbnMubWFwKChkKSA9PiBkLnBhdGgpO1xuICAgIGlmICghcGF0aHMgfHwgcGF0aHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDMgcGF0aHMgaW4gYmlwMzJEZXJpdmF0aW9uIG9yIHRhcEJpcDMyRGVyaXZhdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXBhdGhzLmV2ZXJ5KChwKSA9PiBwYXRoc1swXSA9PT0gcCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgYWxsIHBhdGhzIHRvIGJlIHRoZSBzYW1lJyk7XG4gICAgfVxuXG4gICAgcGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgICAgaWYgKHBhdGhzWzBdICE9PSBwYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnVW5hYmxlIHRvIGdldCBhIHNpbmdsZSBjaGFpbiBhbmQgaW5kZXggb24gdGhlIG91dHB1dCBiZWNhdXNlIHRoZXJlIGFyZSBkaWZmZXJlbnQgcGF0aHMgZm9yIGRpZmZlcmVudCBrZXlzJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmdldENoYWluQW5kSW5kZXhGcm9tUGF0aChwYXRoc1swXSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDaGFuZ2VJbmZvKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5maW5kSW50ZXJuYWxPdXRwdXRJbmRpY2VzKHBzYnQpLm1hcCgoaSkgPT4ge1xuICAgICAgICBjb25zdCBkZXJpdmF0aW9uSW5mb3JtYXRpb24gPSBnZXRDaGFpbkFuZEluZGV4RnJvbUJpcDMyRGVyaXZhdGlvbnMocHNidC5kYXRhLm91dHB1dHNbaV0pO1xuICAgICAgICBpZiAoIWRlcml2YXRpb25JbmZvcm1hdGlvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgZGVyaXZhdGlvbiBpbmZvcm1hdGlvbiBvbiBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdCh0eE91dHB1dHNbaV0uc2NyaXB0LCBuZXR3b3JrKSxcbiAgICAgICAgICBleHRlcm5hbDogZmFsc2UsXG4gICAgICAgICAgLi4uZGVyaXZhdGlvbkluZm9ybWF0aW9uLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLkVycm9yTm9NdWx0aVNpZ0lucHV0Rm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYW5nZUluZm8gPSBnZXRDaGFuZ2VJbmZvKCk7XG4gIGNvbnN0IHR4ID0gcHNidC5nZXRVbnNpZ25lZFR4KCkgYXMgYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+O1xuICBjb25zdCBjb21tb24gPSBleHBsYWluQ29tbW9uKHR4LCB7IC4uLnBhcmFtcywgY2hhbmdlSW5mbyB9LCBuZXR3b3JrKTtcbiAgY29uc3QgaW5wdXRTaWduYXR1cmVzQ291bnQgPSBnZXRQc2J0SW5wdXRTaWduYXR1cmVzQ291bnQocHNidCwgcGFyYW1zKTtcblxuICAvLyBTZXQgZmVlIGZyb20gc3VidHJhY3RpbmcgaW5wdXRzIGZyb20gb3V0cHV0c1xuICBjb25zdCBvdXRwdXRBbW91bnQgPSB0eE91dHB1dHMucmVkdWNlKChjdW11bGF0aXZlLCBjdXJyKSA9PiBjdW11bGF0aXZlICsgQmlnSW50KGN1cnIudmFsdWUpLCBCaWdJbnQoMCkpO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHBzYnQudHhJbnB1dHMucmVkdWNlKChjdW11bGF0aXZlLCB0eElucHV0LCBpKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHBzYnQuZGF0YS5pbnB1dHNbaV07XG4gICAgaWYgKGRhdGEud2l0bmVzc1V0eG8pIHtcbiAgICAgIHJldHVybiBjdW11bGF0aXZlICsgQmlnSW50KGRhdGEud2l0bmVzc1V0eG8udmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5ub25XaXRuZXNzVXR4bykge1xuICAgICAgY29uc3QgdHggPSBiaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXI8YmlnaW50PihkYXRhLm5vbldpdG5lc3NVdHhvLCBuZXR3b3JrLCB7IGFtb3VudFR5cGU6ICdiaWdpbnQnIH0pO1xuICAgICAgcmV0dXJuIGN1bXVsYXRpdmUgKyBCaWdJbnQodHgub3V0c1t0eElucHV0LmluZGV4XS52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgdmFsdWUgb24gaW5wdXQnKTtcbiAgICB9XG4gIH0sIEJpZ0ludCgwKSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb24sXG4gICAgZmVlOiAoaW5wdXRBbW91bnQgLSBvdXRwdXRBbW91bnQpLnRvU3RyaW5nKCksXG4gICAgaW5wdXRTaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudCxcbiAgICBzaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCksXG4gIH0gYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5MZWdhY3lUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICAgIHR4SW5mbz86IHsgdW5zcGVudHM/OiBiaXRnby5VbnNwZW50PFROdW1iZXI+W10gfTtcbiAgICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBjb25zdCBjb21tb24gPSBleHBsYWluQ29tbW9uKHR4LCBwYXJhbXMsIG5ldHdvcmspO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFR4SW5wdXRTaWduYXR1cmVzQ291bnQodHgsIHBhcmFtcywgbmV0d29yayk7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICB9IGFzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export { explainPsbt, explainLegacyTx, ChangeAddressInfo } from './explainTransaction';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.explainLegacyTx = exports.explainPsbt = void 0;
4
+ var explainTransaction_1 = require("./explainTransaction");
5
+ Object.defineProperty(exports, "explainPsbt", { enumerable: true, get: function () { return explainTransaction_1.explainPsbt; } });
6
+ Object.defineProperty(exports, "explainLegacyTx", { enumerable: true, get: function () { return explainTransaction_1.explainLegacyTx; } });
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXVGO0FBQTlFLGlIQUFBLFdBQVcsT0FBQTtBQUFFLHFIQUFBLGVBQWUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGV4cGxhaW5Qc2J0LCBleHBsYWluTGVnYWN5VHgsIENoYW5nZUFkZHJlc3NJbmZvIH0gZnJvbSAnLi9leHBsYWluVHJhbnNhY3Rpb24nO1xuIl19
@@ -0,0 +1,4 @@
1
+ export * from './recipient';
2
+ export { explainTx } from './explainTransaction';
3
+ export * from './fetchInputs';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transaction/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,cAAc,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.explainTx = void 0;
18
+ __exportStar(require("./recipient"), exports);
19
+ var explainTransaction_1 = require("./explainTransaction");
20
+ Object.defineProperty(exports, "explainTx", { enumerable: true, get: function () { return explainTransaction_1.explainTx; } });
21
+ __exportStar(require("./fetchInputs"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsMkRBQWlEO0FBQXhDLCtHQUFBLFNBQVMsT0FBQTtBQUNsQixnREFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3JlY2lwaWVudCc7XG5leHBvcnQgeyBleHBsYWluVHggfSBmcm9tICcuL2V4cGxhaW5UcmFuc2FjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2ZldGNoSW5wdXRzJztcbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import * as utxolib from '@bitgo/utxo-lib';
2
+ /**
3
+ * Check if the address is a script recipient (starts with `scriptPubKey:`).
4
+ * @param address
5
+ */
6
+ export declare function isScriptRecipient(address: string): boolean;
7
+ /**
8
+ * An extended address is one that encodes either a regular address or a hex encoded script with the prefix `scriptPubKey:`.
9
+ * This function converts the extended address format to either a script or an address.
10
+ * @param extendedAddress
11
+ */
12
+ export declare function fromExtendedAddressFormat(extendedAddress: string): {
13
+ address: string;
14
+ } | {
15
+ script: string;
16
+ };
17
+ /**
18
+ * Convert a script or address to the extended address format.
19
+ * @param script
20
+ * @param network
21
+ * @returns if the script is an OP_RETURN script, then it will be prefixed with `scriptPubKey:`, otherwise it will be converted to an address.
22
+ */
23
+ export declare function toExtendedAddressFormat(script: Buffer, network: utxolib.Network): string;
24
+ export declare function assertValidTransactionRecipient(output: {
25
+ amount: bigint | number | string;
26
+ address?: string;
27
+ }): void;
28
+ //# sourceMappingURL=recipient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient.d.ts","sourceRoot":"","sources":["../../../src/transaction/recipient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAK3G;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAIxF;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQpH"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.isScriptRecipient = isScriptRecipient;
37
+ exports.fromExtendedAddressFormat = fromExtendedAddressFormat;
38
+ exports.toExtendedAddressFormat = toExtendedAddressFormat;
39
+ exports.assertValidTransactionRecipient = assertValidTransactionRecipient;
40
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
41
+ const ScriptRecipientPrefix = 'scriptPubKey:';
42
+ /**
43
+ * Check if the address is a script recipient (starts with `scriptPubKey:`).
44
+ * @param address
45
+ */
46
+ function isScriptRecipient(address) {
47
+ return address.toLowerCase().startsWith(ScriptRecipientPrefix.toLowerCase());
48
+ }
49
+ /**
50
+ * An extended address is one that encodes either a regular address or a hex encoded script with the prefix `scriptPubKey:`.
51
+ * This function converts the extended address format to either a script or an address.
52
+ * @param extendedAddress
53
+ */
54
+ function fromExtendedAddressFormat(extendedAddress) {
55
+ if (isScriptRecipient(extendedAddress)) {
56
+ return { script: extendedAddress.slice(ScriptRecipientPrefix.length) };
57
+ }
58
+ return { address: extendedAddress };
59
+ }
60
+ /**
61
+ * Convert a script or address to the extended address format.
62
+ * @param script
63
+ * @param network
64
+ * @returns if the script is an OP_RETURN script, then it will be prefixed with `scriptPubKey:`, otherwise it will be converted to an address.
65
+ */
66
+ function toExtendedAddressFormat(script, network) {
67
+ return script[0] === utxolib.opcodes.OP_RETURN
68
+ ? `${ScriptRecipientPrefix}${script.toString('hex')}`
69
+ : utxolib.address.fromOutputScript(script, network);
70
+ }
71
+ function assertValidTransactionRecipient(output) {
72
+ // In the case that this is an OP_RETURN output or another non-encodable scriptPubkey, we dont have an address.
73
+ // We will verify that the amount is zero, and if it isnt then we will throw an error.
74
+ if (!output.address || isScriptRecipient(output.address)) {
75
+ if (output.amount.toString() !== '0') {
76
+ throw new Error(`Only zero amounts allowed for non-encodeable scriptPubkeys: ${JSON.stringify(output)}`);
77
+ }
78
+ }
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3JlY2lwaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLDhDQUVDO0FBT0QsOERBS0M7QUFRRCwwREFJQztBQUVELDBFQVFDO0FBNUNELHlEQUEyQztBQUUzQyxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQztBQUU5Qzs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxPQUFlO0lBQy9DLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsZUFBdUI7SUFDL0QsSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLE1BQWMsRUFBRSxPQUF3QjtJQUM5RSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVM7UUFDNUMsQ0FBQyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyRCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVELFNBQWdCLCtCQUErQixDQUFDLE1BQThEO0lBQzVHLCtHQUErRztJQUMvRyxzRkFBc0Y7SUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDekQsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNHLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuY29uc3QgU2NyaXB0UmVjaXBpZW50UHJlZml4ID0gJ3NjcmlwdFB1YktleTonO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIGEgc2NyaXB0IHJlY2lwaWVudCAoc3RhcnRzIHdpdGggYHNjcmlwdFB1YktleTpgKS5cbiAqIEBwYXJhbSBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NjcmlwdFJlY2lwaWVudChhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFNjcmlwdFJlY2lwaWVudFByZWZpeC50b0xvd2VyQ2FzZSgpKTtcbn1cblxuLyoqXG4gKiBBbiBleHRlbmRlZCBhZGRyZXNzIGlzIG9uZSB0aGF0IGVuY29kZXMgZWl0aGVyIGEgcmVndWxhciBhZGRyZXNzIG9yIGEgaGV4IGVuY29kZWQgc2NyaXB0IHdpdGggdGhlIHByZWZpeCBgc2NyaXB0UHViS2V5OmAuXG4gKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSBleHRlbmRlZCBhZGRyZXNzIGZvcm1hdCB0byBlaXRoZXIgYSBzY3JpcHQgb3IgYW4gYWRkcmVzcy5cbiAqIEBwYXJhbSBleHRlbmRlZEFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9IHtcbiAgaWYgKGlzU2NyaXB0UmVjaXBpZW50KGV4dGVuZGVkQWRkcmVzcykpIHtcbiAgICByZXR1cm4geyBzY3JpcHQ6IGV4dGVuZGVkQWRkcmVzcy5zbGljZShTY3JpcHRSZWNpcGllbnRQcmVmaXgubGVuZ3RoKSB9O1xuICB9XG4gIHJldHVybiB7IGFkZHJlc3M6IGV4dGVuZGVkQWRkcmVzcyB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzY3JpcHQgb3IgYWRkcmVzcyB0byB0aGUgZXh0ZW5kZWQgYWRkcmVzcyBmb3JtYXQuXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHJldHVybnMgaWYgdGhlIHNjcmlwdCBpcyBhbiBPUF9SRVRVUk4gc2NyaXB0LCB0aGVuIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBgc2NyaXB0UHViS2V5OmAsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0OiBCdWZmZXIsIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IHN0cmluZyB7XG4gIHJldHVybiBzY3JpcHRbMF0gPT09IHV0eG9saWIub3Bjb2Rlcy5PUF9SRVRVUk5cbiAgICA/IGAke1NjcmlwdFJlY2lwaWVudFByZWZpeH0ke3NjcmlwdC50b1N0cmluZygnaGV4Jyl9YFxuICAgIDogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0LCBuZXR3b3JrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQob3V0cHV0OiB7IGFtb3VudDogYmlnaW50IHwgbnVtYmVyIHwgc3RyaW5nOyBhZGRyZXNzPzogc3RyaW5nIH0pOiB2b2lkIHtcbiAgLy8gSW4gdGhlIGNhc2UgdGhhdCB0aGlzIGlzIGFuIE9QX1JFVFVSTiBvdXRwdXQgb3IgYW5vdGhlciBub24tZW5jb2RhYmxlIHNjcmlwdFB1YmtleSwgd2UgZG9udCBoYXZlIGFuIGFkZHJlc3MuXG4gIC8vIFdlIHdpbGwgdmVyaWZ5IHRoYXQgdGhlIGFtb3VudCBpcyB6ZXJvLCBhbmQgaWYgaXQgaXNudCB0aGVuIHdlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gIGlmICghb3V0cHV0LmFkZHJlc3MgfHwgaXNTY3JpcHRSZWNpcGllbnQob3V0cHV0LmFkZHJlc3MpKSB7XG4gICAgaWYgKG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6ICR7SlNPTi5zdHJpbmdpZnkob3V0cHV0KX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { Descriptor } from '@bitgo/wasm-miniscript';
2
+ import { DescriptorMap, PsbtParams } from '../../../src/core/descriptor';
3
+ export declare function getDefaultXPubs(seed?: string): string[];
4
+ export type DescriptorTemplate = 'Wsh2Of3' | 'Wsh2Of2' | 'ShWsh2Of3CltvDrop';
5
+ export declare function getPsbtParams(t: DescriptorTemplate): Partial<PsbtParams>;
6
+ export declare function getDescriptorString(template: DescriptorTemplate, keys?: string[], path?: string): string;
7
+ export declare function getDescriptor(template: DescriptorTemplate, keys?: string[], path?: string): Descriptor;
8
+ export declare function getDescriptorMap(template: DescriptorTemplate, keys?: string[]): DescriptorMap;
9
+ //# sourceMappingURL=descriptor.utils.d.ts.map