@bitgo-beta/abstract-utxo 1.6.1-alpha.38 → 1.6.1-alpha.380

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 (172) hide show
  1. package/dist/src/abstractUtxoCoin.d.ts +200 -98
  2. package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/src/abstractUtxoCoin.js +314 -541
  4. package/dist/src/descriptor/NamedDescriptor.d.ts +20 -0
  5. package/dist/src/descriptor/NamedDescriptor.d.ts.map +1 -0
  6. package/dist/src/descriptor/NamedDescriptor.js +79 -0
  7. package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  8. package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  9. package/dist/src/descriptor/assertDescriptorWalletAddress.js +66 -0
  10. package/dist/src/descriptor/builder/builder.d.ts +13 -0
  11. package/dist/src/descriptor/builder/builder.d.ts.map +1 -0
  12. package/dist/src/descriptor/builder/builder.js +37 -0
  13. package/dist/src/descriptor/builder/index.d.ts +3 -0
  14. package/dist/src/descriptor/builder/index.d.ts.map +1 -0
  15. package/dist/src/descriptor/builder/index.js +8 -0
  16. package/dist/src/descriptor/builder/parse.d.ts +5 -0
  17. package/dist/src/descriptor/builder/parse.d.ts.map +1 -0
  18. package/dist/src/descriptor/builder/parse.js +149 -0
  19. package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  20. package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  21. package/dist/src/descriptor/createWallet/createDescriptorWallet.js +74 -0
  22. package/dist/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
  23. package/dist/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  24. package/dist/src/descriptor/createWallet/createDescriptors.js +33 -0
  25. package/dist/src/descriptor/createWallet/index.d.ts +3 -0
  26. package/dist/src/descriptor/createWallet/index.d.ts.map +1 -0
  27. package/dist/src/descriptor/createWallet/index.js +19 -0
  28. package/dist/src/descriptor/descriptorWallet.d.ts +19 -0
  29. package/dist/src/descriptor/descriptorWallet.d.ts.map +1 -0
  30. package/dist/src/descriptor/descriptorWallet.js +54 -0
  31. package/dist/src/descriptor/index.d.ts +8 -0
  32. package/dist/src/descriptor/index.d.ts.map +1 -0
  33. package/dist/src/descriptor/index.js +53 -0
  34. package/dist/src/descriptor/validatePolicy.d.ts +22 -0
  35. package/dist/src/descriptor/validatePolicy.d.ts.map +1 -0
  36. package/dist/src/descriptor/validatePolicy.js +92 -0
  37. package/dist/src/index.d.ts +3 -0
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +31 -2
  40. package/dist/src/keychains.d.ts +48 -0
  41. package/dist/src/keychains.d.ts.map +1 -0
  42. package/dist/src/keychains.js +104 -0
  43. package/dist/src/names.d.ts +26 -0
  44. package/dist/src/names.d.ts.map +1 -0
  45. package/dist/src/names.js +214 -0
  46. package/dist/src/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
  47. package/dist/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  48. package/dist/src/offlineVault/OfflineVaultHalfSigned.js +59 -0
  49. package/dist/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
  50. package/dist/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  51. package/dist/src/offlineVault/OfflineVaultSignable.js +55 -0
  52. package/dist/src/offlineVault/TransactionExplanation.d.ts +15 -0
  53. package/dist/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
  54. package/dist/src/offlineVault/TransactionExplanation.js +16 -0
  55. package/dist/src/offlineVault/descriptor/index.d.ts +2 -0
  56. package/dist/src/offlineVault/descriptor/index.d.ts.map +1 -0
  57. package/dist/src/offlineVault/descriptor/index.js +18 -0
  58. package/dist/src/offlineVault/descriptor/transaction.d.ts +38 -0
  59. package/dist/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
  60. package/dist/src/offlineVault/descriptor/transaction.js +80 -0
  61. package/dist/src/offlineVault/index.d.ts +6 -0
  62. package/dist/src/offlineVault/index.d.ts.map +1 -0
  63. package/dist/src/offlineVault/index.js +44 -0
  64. package/dist/src/recovery/RecoveryProvider.d.ts +1 -1
  65. package/dist/src/recovery/RecoveryProvider.d.ts.map +1 -1
  66. package/dist/src/recovery/RecoveryProvider.js +2 -4
  67. package/dist/src/recovery/backupKeyRecovery.d.ts +42 -16
  68. package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  69. package/dist/src/recovery/backupKeyRecovery.js +174 -102
  70. package/dist/src/recovery/baseApi.d.ts +3 -6
  71. package/dist/src/recovery/baseApi.d.ts.map +1 -1
  72. package/dist/src/recovery/baseApi.js +6 -6
  73. package/dist/src/recovery/coingeckoApi.d.ts +0 -3
  74. package/dist/src/recovery/coingeckoApi.d.ts.map +1 -1
  75. package/dist/src/recovery/coingeckoApi.js +1 -4
  76. package/dist/src/recovery/crossChainRecovery.d.ts +5 -4
  77. package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
  78. package/dist/src/recovery/crossChainRecovery.js +95 -25
  79. package/dist/src/recovery/index.d.ts +0 -1
  80. package/dist/src/recovery/index.d.ts.map +1 -1
  81. package/dist/src/recovery/index.js +6 -3
  82. package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
  83. package/dist/src/recovery/mempoolApi.js +10 -7
  84. package/dist/src/replayProtection.js +37 -5
  85. package/dist/src/sign.d.ts +31 -8
  86. package/dist/src/sign.d.ts.map +1 -1
  87. package/dist/src/sign.js +116 -15
  88. package/dist/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
  89. package/dist/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  90. package/dist/src/transaction/common/verifyPayGoAmount.js +3 -0
  91. package/dist/src/transaction/descriptor/explainPsbt.d.ts +5 -0
  92. package/dist/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  93. package/dist/src/transaction/descriptor/explainPsbt.js +80 -0
  94. package/dist/src/transaction/descriptor/index.d.ts +7 -0
  95. package/dist/src/transaction/descriptor/index.d.ts.map +1 -0
  96. package/dist/src/transaction/descriptor/index.js +14 -0
  97. package/dist/src/transaction/descriptor/parse.d.ts +15 -0
  98. package/dist/src/transaction/descriptor/parse.d.ts.map +1 -0
  99. package/dist/src/transaction/descriptor/parse.js +116 -0
  100. package/dist/src/transaction/descriptor/parseToAmountType.d.ts +13 -0
  101. package/dist/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  102. package/dist/src/transaction/descriptor/parseToAmountType.js +60 -0
  103. package/dist/src/transaction/descriptor/recipient.d.ts +5 -0
  104. package/dist/src/transaction/descriptor/recipient.d.ts.map +1 -0
  105. package/dist/src/transaction/descriptor/recipient.js +3 -0
  106. package/dist/src/transaction/descriptor/signPsbt.d.ts +25 -0
  107. package/dist/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
  108. package/dist/src/transaction/descriptor/signPsbt.js +43 -0
  109. package/dist/src/transaction/descriptor/verifyTransaction.d.ts +33 -0
  110. package/dist/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  111. package/dist/src/transaction/descriptor/verifyTransaction.js +105 -0
  112. package/dist/src/transaction/explainTransaction.d.ts +17 -0
  113. package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
  114. package/dist/src/transaction/explainTransaction.js +67 -0
  115. package/dist/src/transaction/fetchInputs.d.ts +26 -0
  116. package/dist/src/transaction/fetchInputs.d.ts.map +1 -0
  117. package/dist/src/transaction/fetchInputs.js +109 -0
  118. package/dist/src/transaction/fixedScript/explainTransaction.d.ts +32 -0
  119. package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  120. package/dist/src/transaction/fixedScript/explainTransaction.js +255 -0
  121. package/dist/src/transaction/fixedScript/index.d.ts +6 -0
  122. package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
  123. package/dist/src/transaction/fixedScript/index.js +13 -0
  124. package/dist/src/transaction/fixedScript/parseOutput.d.ts +26 -0
  125. package/dist/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  126. package/dist/src/transaction/fixedScript/parseOutput.js +213 -0
  127. package/dist/src/transaction/fixedScript/parseTransaction.d.ts +7 -0
  128. package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  129. package/dist/src/transaction/fixedScript/parseTransaction.js +203 -0
  130. package/dist/src/transaction/fixedScript/signTransaction.d.ts +18 -0
  131. package/dist/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  132. package/dist/src/transaction/fixedScript/signTransaction.js +100 -0
  133. package/dist/src/transaction/fixedScript/verifyTransaction.d.ts +4 -0
  134. package/dist/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  135. package/dist/src/transaction/fixedScript/verifyTransaction.js +176 -0
  136. package/dist/src/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  137. package/dist/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  138. package/dist/src/transaction/getPayGoVerificationPubkey.js +53 -0
  139. package/dist/src/transaction/index.d.ts +6 -0
  140. package/dist/src/transaction/index.d.ts.map +1 -0
  141. package/dist/src/transaction/index.js +26 -0
  142. package/dist/src/transaction/outputDifference.d.ts +40 -0
  143. package/dist/src/transaction/outputDifference.d.ts.map +1 -0
  144. package/dist/src/transaction/outputDifference.js +47 -0
  145. package/dist/src/transaction/parseTransaction.d.ts +3 -0
  146. package/dist/src/transaction/parseTransaction.d.ts.map +1 -0
  147. package/dist/src/transaction/parseTransaction.js +48 -0
  148. package/dist/src/transaction/recipient.d.ts +29 -0
  149. package/dist/src/transaction/recipient.d.ts.map +1 -0
  150. package/dist/src/transaction/recipient.js +88 -0
  151. package/dist/src/transaction/signTransaction.d.ts +6 -0
  152. package/dist/src/transaction/signTransaction.d.ts.map +1 -0
  153. package/dist/src/transaction/signTransaction.js +102 -0
  154. package/dist/src/transaction/verifyTransaction.d.ts +4 -0
  155. package/dist/src/transaction/verifyTransaction.d.ts.map +1 -0
  156. package/dist/src/transaction/verifyTransaction.js +50 -0
  157. package/dist/src/verifyKey.d.ts +28 -0
  158. package/dist/src/verifyKey.d.ts.map +1 -0
  159. package/dist/src/verifyKey.js +164 -0
  160. package/dist/src/wallet.d.ts +15 -0
  161. package/dist/src/wallet.d.ts.map +1 -0
  162. package/dist/src/wallet.js +8 -0
  163. package/package.json +19 -13
  164. package/.eslintignore +0 -5
  165. package/CHANGELOG.md +0 -235
  166. package/dist/src/parseOutput.d.ts +0 -22
  167. package/dist/src/parseOutput.d.ts.map +0 -1
  168. package/dist/src/parseOutput.js +0 -170
  169. package/dist/src/recovery/smartbitApi.d.ts +0 -11
  170. package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
  171. package/dist/src/recovery/smartbitApi.js +0 -36
  172. package/dist/tsconfig.tsbuildinfo +0 -8017
@@ -0,0 +1,109 @@
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-beta/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
+ const transactionId = Buffer.from(currentInput.hash).reverse().toString('hex');
82
+ const txHex = txPrebuild.txInfo?.txHexes?.[transactionId];
83
+ if (txHex) {
84
+ const localTx = coin.createTransactionFromHex(txHex);
85
+ if (localTx.getId() !== transactionId) {
86
+ throw new Error('input transaction hex does not match id');
87
+ }
88
+ const currentOutput = localTx.outs[currentInput.index];
89
+ const address = utxolib.address.fromOutputScript(currentOutput.script, coin.network);
90
+ return {
91
+ address,
92
+ value: currentOutput.value,
93
+ valueString: currentOutput.value.toString(),
94
+ };
95
+ }
96
+ else if (!transactionCache[transactionId]) {
97
+ if (disableNetworking) {
98
+ throw new Error('attempting to retrieve transaction details externally with networking disabled');
99
+ }
100
+ if (reqId) {
101
+ bitgo.setRequestTracer(reqId);
102
+ }
103
+ transactionCache[transactionId] = await bitgo.get(coin.url(`/public/tx/${transactionId}`)).result();
104
+ }
105
+ const transactionDetails = transactionCache[transactionId];
106
+ return transactionDetails.outputs[currentInput.index];
107
+ }));
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hJbnB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZmV0Y2hJbnB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSwwQ0E0QkM7QUFLRCxrQ0EwQ0M7QUFuRkQsOERBQWdEO0FBS2hEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixPQUF3QyxFQUN4QyxPQUF3QjtJQUV4QixNQUFNLElBQUksR0FBRyxPQUFPLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQVMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUU7Z0JBQzFGLFVBQVUsRUFBRSxRQUFRO2FBQ3JCLENB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QUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztZQUNwRyxDQUFDO1lBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RHLENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJUmVxdWVzdFRyYWNlciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVHJhbnNhY3Rpb25QcmVidWlsZCB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG4vKipcbiAqIEdldCB0aGUgaW5wdXRzIGZvciBhIHBzYnQgZnJvbSBhIHByZWJ1aWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHNidFR4SW5wdXRzKFxuICBwc2J0QXJnOiBzdHJpbmcgfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IHsgYWRkcmVzczogc3RyaW5nOyB2YWx1ZTogYmlnaW50OyB2YWx1ZVN0cmluZzogc3RyaW5nIH1bXSB7XG4gIGNvbnN0IHBzYnQgPSBwc2J0QXJnIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCA/IHBzYnRBcmcgOiB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHBzYnRBcmcsIG5ldHdvcmspO1xuICBjb25zdCB0eElucHV0cyA9IHBzYnQudHhJbnB1dHM7XG4gIHJldHVybiBwc2J0LmRhdGEuaW5wdXRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgbGV0IGFkZHJlc3M6IHN0cmluZztcbiAgICBsZXQgdmFsdWU6IGJpZ2ludDtcbiAgICBpZiAoaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICAgIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgdmFsdWUgPSBpbnB1dC53aXRuZXNzVXR4by52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlucHV0Lm5vbldpdG5lc3NVdHhvKSB7XG4gICAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPGJpZ2ludD4oaW5wdXQubm9uV2l0bmVzc1V0eG8sIG5ldHdvcmssIHtcbiAgICAgICAgYW1vdW50VHlwZTogJ2JpZ2ludCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4SWQgPSAoQnVmZmVyLmZyb20odHhJbnB1dHNbaW5kZXhdLmhhc2gpLnJldmVyc2UoKSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGlmICh0eC5nZXRJZCgpICE9PSB0eElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgdHJhbnNhY3Rpb24gaGV4IGRvZXMgbm90IG1hdGNoIGlkJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2VHhPdXRwdXRJbmRleCA9IHR4SW5wdXRzW2luZGV4XS5pbmRleDtcbiAgICAgIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdCh0eC5vdXRzW3ByZXZUeE91dHB1dEluZGV4XS5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgdmFsdWUgPSB0eC5vdXRzW3ByZXZUeE91dHB1dEluZGV4XS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwc2J0IGlucHV0IGlzIG1pc3NpbmcgYm90aCB3aXRuZXNzVXR4byBhbmQgbm9uV2l0bmVzc1V0eG8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWRkcmVzcywgdmFsdWUsIHZhbHVlU3RyaW5nOiB2YWx1ZS50b1N0cmluZygpIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5wdXRzIGZvciBhIHRyYW5zYWN0aW9uIGZyb20gYSBwcmVidWlsZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFR4SW5wdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHBhcmFtczoge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICBiaXRnbzogQml0R29CYXNlO1xuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luO1xuICBkaXNhYmxlTmV0d29ya2luZzogYm9vbGVhbjtcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn0pOiBQcm9taXNlPHsgYWRkcmVzczogc3RyaW5nOyB2YWx1ZTogVE51bWJlcjsgdmFsdWVTdHJpbmc6IHN0cmluZyB9W10+IHtcbiAgY29uc3QgeyB0eFByZWJ1aWxkLCBiaXRnbywgY29pbiwgZGlzYWJsZU5ldHdvcmtpbmcsIHJlcUlkIH0gPSBwYXJhbXM7XG4gIGlmICghdHhQcmVidWlsZC50eEhleCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZC50eEhleCBub3Qgc2V0YCk7XG4gIH1cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBjb2luLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPih0eFByZWJ1aWxkLnR4SGV4KTtcbiAgY29uc3QgdHJhbnNhY3Rpb25DYWNoZSA9IHt9O1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdHJhbnNhY3Rpb24uaW5zLm1hcChhc3luYyAoY3VycmVudElucHV0KTogUHJvbWlzZTx7IGFkZHJlc3M6IHN0cmluZzsgdmFsdWU6IFROdW1iZXI7IHZhbHVlU3RyaW5nOiBzdHJpbmcgfT4gPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IChCdWZmZXIuZnJvbShjdXJyZW50SW5wdXQuaGFzaCkucmV2ZXJzZSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhIZXggPSB0eFByZWJ1aWxkLnR4SW5mbz8udHhIZXhlcz8uW3RyYW5zYWN0aW9uSWRdO1xuICAgICAgaWYgKHR4SGV4KSB7XG4gICAgICAgIGNvbnN0IGxvY2FsVHggPSBjb2luLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPih0eEhleCk7XG4gICAgICAgIGlmIChsb2NhbFR4LmdldElkKCkgIT09IHRyYW5zYWN0aW9uSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IHRyYW5zYWN0aW9uIGhleCBkb2VzIG5vdCBtYXRjaCBpZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPdXRwdXQgPSBsb2NhbFR4Lm91dHNbY3VycmVudElucHV0LmluZGV4XTtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KGN1cnJlbnRPdXRwdXQuc2NyaXB0LCBjb2luLm5ldHdvcmspO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IGN1cnJlbnRPdXRwdXQudmFsdWUsXG4gICAgICAgICAgdmFsdWVTdHJpbmc6IGN1cnJlbnRPdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoIXRyYW5zYWN0aW9uQ2FjaGVbdHJhbnNhY3Rpb25JZF0pIHtcbiAgICAgICAgaWYgKGRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHRyYW5zYWN0aW9uIGRldGFpbHMgZXh0ZXJuYWxseSB3aXRoIG5ldHdvcmtpbmcgZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxSWQpIHtcbiAgICAgICAgICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2FjdGlvbkNhY2hlW3RyYW5zYWN0aW9uSWRdID0gYXdhaXQgYml0Z28uZ2V0KGNvaW4udXJsKGAvcHVibGljL3R4LyR7dHJhbnNhY3Rpb25JZH1gKSkucmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbkRldGFpbHMgPSB0cmFuc2FjdGlvbkNhY2hlW3RyYW5zYWN0aW9uSWRdO1xuICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uRGV0YWlscy5vdXRwdXRzW2N1cnJlbnRJbnB1dC5pbmRleF07XG4gICAgfSlcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { bitgo } from '@bitgo-beta/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, { strict }?: {
19
+ strict?: boolean;
20
+ }): TransactionExplanation;
21
+ export declare function explainLegacyTx<TNumber extends number | bigint>(tx: bitgo.UtxoTransaction<TNumber>, params: {
22
+ pubs?: string[];
23
+ txInfo?: {
24
+ unspents?: bitgo.Unspent<TNumber>[];
25
+ };
26
+ changeInfo?: {
27
+ address: string;
28
+ chain: number;
29
+ index: number;
30
+ }[];
31
+ }, network: utxolib.Network): TransactionExplanation;
32
+ //# 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,sBAAsB,CAAC;AAChD,OAAO,EAAyB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIpE,OAAO,EAAU,sBAAsB,EAA2B,MAAM,wBAAwB,CAAC;AAIjG,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,EACxB,EAAE,MAAc,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5C,sBAAsB,CAoHxB;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,255 @@
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-beta/utxo-lib"));
39
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
40
+ const utxocore = __importStar(require("@bitgo-beta/utxo-core"));
41
+ const recipient_1 = require("../recipient");
42
+ const getPayGoVerificationPubkey_1 = require("../getPayGoVerificationPubkey");
43
+ function explainCommon(tx, params, network) {
44
+ const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs'];
45
+ let spendAmount = BigInt(0);
46
+ let changeAmount = BigInt(0);
47
+ const changeOutputs = [];
48
+ const outputs = [];
49
+ const { changeInfo } = params;
50
+ const changeAddresses = changeInfo?.map((info) => info.address) ?? [];
51
+ tx.outs.forEach((currentOutput) => {
52
+ // Try to encode the script pubkey with an address. If it fails, try to parse it as an OP_RETURN output with the prefix.
53
+ // If that fails, then it is an unrecognized scriptPubkey and should fail
54
+ const currentAddress = (0, recipient_1.toExtendedAddressFormat)(currentOutput.script, network);
55
+ const currentAmount = BigInt(currentOutput.value);
56
+ if (changeAddresses.includes(currentAddress)) {
57
+ // this is change
58
+ changeAmount += currentAmount;
59
+ const change = changeInfo?.find((change) => change.address === currentAddress);
60
+ if (!change) {
61
+ throw new Error('changeInfo must have change information for all change outputs');
62
+ }
63
+ changeOutputs.push({
64
+ address: currentAddress,
65
+ amount: currentAmount.toString(),
66
+ chain: change.chain,
67
+ index: change.index,
68
+ external: false,
69
+ });
70
+ return;
71
+ }
72
+ spendAmount += currentAmount;
73
+ outputs.push({
74
+ address: currentAddress,
75
+ amount: currentAmount.toString(),
76
+ // If changeInfo has a length greater than or equal to zero, it means that the change information
77
+ // was provided to the function but the output was not identified as change. In this case,
78
+ // the output is external, and we can set it as so. If changeInfo is undefined, it means we were
79
+ // given no information about change outputs, so we can't determine anything about the output,
80
+ // so we leave it undefined.
81
+ external: changeInfo ? true : undefined,
82
+ });
83
+ });
84
+ const outputDetails = {
85
+ outputAmount: spendAmount.toString(),
86
+ changeAmount: changeAmount.toString(),
87
+ outputs,
88
+ changeOutputs,
89
+ };
90
+ let fee;
91
+ let locktime;
92
+ if (params.feeInfo) {
93
+ displayOrder.push('fee');
94
+ fee = params.feeInfo;
95
+ }
96
+ if (Number.isInteger(tx.locktime) && tx.locktime > 0) {
97
+ displayOrder.push('locktime');
98
+ locktime = tx.locktime;
99
+ }
100
+ return { displayOrder, id: tx.getId(), ...outputDetails, fee, locktime };
101
+ }
102
+ function getRootWalletKeys(params) {
103
+ const keys = params.pubs?.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
+ const prevOutputs = params.txInfo?.unspents?.map((u) => utxo_lib_1.bitgo.toOutput(u, network));
114
+ const rootWalletKeys = getRootWalletKeys(params);
115
+ const { unspents = [] } = params.txInfo ?? {};
116
+ // get the number of signatures per input
117
+ return tx.ins.map((input, idx) => {
118
+ if (unspents.length !== tx.ins.length) {
119
+ return 0;
120
+ }
121
+ if (!prevOutputs) {
122
+ throw new Error(`invalid state`);
123
+ }
124
+ if (!rootWalletKeys) {
125
+ // no pub keys or incorrect number of pub keys
126
+ return 0;
127
+ }
128
+ try {
129
+ return utxo_lib_1.bitgo.verifySignatureWithUnspent(tx, idx, unspents, rootWalletKeys).filter((v) => v).length;
130
+ }
131
+ catch (e) {
132
+ // some other error occurred and we can't validate the signatures
133
+ return 0;
134
+ }
135
+ });
136
+ }
137
+ /**
138
+ * Decompose a raw psbt into useful information, such as the total amounts,
139
+ * change amounts, and transaction outputs.
140
+ */
141
+ function explainPsbt(psbt, params, network, { strict = false } = {}) {
142
+ const txOutputs = psbt.txOutputs;
143
+ function getChainAndIndexFromBip32Derivations(output) {
144
+ const derivations = output.bip32Derivation ?? output.tapBip32Derivation ?? undefined;
145
+ if (!derivations) {
146
+ return undefined;
147
+ }
148
+ const paths = derivations.map((d) => d.path);
149
+ if (!paths || paths.length !== 3) {
150
+ throw new Error('expected 3 paths in bip32Derivation or tapBip32Derivation');
151
+ }
152
+ if (!paths.every((p) => paths[0] === p)) {
153
+ throw new Error('expected all paths to be the same');
154
+ }
155
+ paths.forEach((path) => {
156
+ if (paths[0] !== path) {
157
+ throw new Error('Unable to get a single chain and index on the output because there are different paths for different keys');
158
+ }
159
+ });
160
+ return utxolib.bitgo.getChainAndIndexFromPath(paths[0]);
161
+ }
162
+ function getChangeInfo() {
163
+ try {
164
+ return utxolib.bitgo.findInternalOutputIndices(psbt).map((i) => {
165
+ const derivationInformation = getChainAndIndexFromBip32Derivations(psbt.data.outputs[i]);
166
+ if (!derivationInformation) {
167
+ throw new Error('could not find derivation information on bip32Derivation or tapBip32Derivation');
168
+ }
169
+ return {
170
+ address: utxolib.address.fromOutputScript(txOutputs[i].script, network),
171
+ external: false,
172
+ ...derivationInformation,
173
+ };
174
+ });
175
+ }
176
+ catch (e) {
177
+ if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
178
+ return undefined;
179
+ }
180
+ throw e;
181
+ }
182
+ }
183
+ /**
184
+ * Extract PayGo address proof information from the PSBT if present
185
+ * @returns Information about the PayGo proof, including the output index and address
186
+ */
187
+ function getPayGoVerificationInfo() {
188
+ let outputIndex = undefined;
189
+ let address = undefined;
190
+ // Check if this PSBT has any PayGo address proofs
191
+ if (!utxocore.paygo.psbtOutputIncludesPaygoAddressProof(psbt)) {
192
+ return undefined;
193
+ }
194
+ // This pulls the pubkey depending on given network
195
+ const verificationPubkey = (0, getPayGoVerificationPubkey_1.getPayGoVerificationPubkey)(network);
196
+ // find which output index that contains the PayGo proof
197
+ outputIndex = utxocore.paygo.getPayGoAddressProofOutputIndex(psbt);
198
+ if (outputIndex === undefined || !verificationPubkey) {
199
+ return undefined;
200
+ }
201
+ const output = txOutputs[outputIndex];
202
+ address = utxolib.address.fromOutputScript(output.script, network);
203
+ if (!address) {
204
+ throw new Error(`Can not derive address ${address} Pay Go Attestation.`);
205
+ }
206
+ return { outputIndex, verificationPubkey };
207
+ }
208
+ const payGoVerificationInfo = getPayGoVerificationInfo();
209
+ if (payGoVerificationInfo) {
210
+ try {
211
+ utxocore.paygo.verifyPayGoAddressProof(psbt, payGoVerificationInfo.outputIndex, utxolib.bip32.fromBase58(payGoVerificationInfo.verificationPubkey, utxolib.networks.bitcoin).publicKey);
212
+ }
213
+ catch (e) {
214
+ if (strict) {
215
+ throw e;
216
+ }
217
+ console.error(e);
218
+ }
219
+ }
220
+ const changeInfo = getChangeInfo();
221
+ const tx = psbt.getUnsignedTx();
222
+ const common = explainCommon(tx, { ...params, changeInfo }, network);
223
+ const inputSignaturesCount = getPsbtInputSignaturesCount(psbt, params);
224
+ // Set fee from subtracting inputs from outputs
225
+ const outputAmount = txOutputs.reduce((cumulative, curr) => cumulative + BigInt(curr.value), BigInt(0));
226
+ const inputAmount = psbt.txInputs.reduce((cumulative, txInput, i) => {
227
+ const data = psbt.data.inputs[i];
228
+ if (data.witnessUtxo) {
229
+ return cumulative + BigInt(data.witnessUtxo.value);
230
+ }
231
+ else if (data.nonWitnessUtxo) {
232
+ const tx = utxo_lib_1.bitgo.createTransactionFromBuffer(data.nonWitnessUtxo, network, { amountType: 'bigint' });
233
+ return cumulative + BigInt(tx.outs[txInput.index].value);
234
+ }
235
+ else {
236
+ throw new Error('could not find value on input');
237
+ }
238
+ }, BigInt(0));
239
+ return {
240
+ ...common,
241
+ fee: (inputAmount - outputAmount).toString(),
242
+ inputSignatures: inputSignaturesCount,
243
+ signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
244
+ };
245
+ }
246
+ function explainLegacyTx(tx, params, network) {
247
+ const common = explainCommon(tx, params, network);
248
+ const inputSignaturesCount = getTxInputSignaturesCount(tx, params, network);
249
+ return {
250
+ ...common,
251
+ inputSignatures: inputSignaturesCount,
252
+ signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
253
+ };
254
+ }
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThJQSxrQ0E0SEM7QUFFRCwwQ0FnQkM7QUE1UkQsOERBQWdEO0FBQ2hELG1EQUFvRTtBQUVwRSxnRUFBa0Q7QUFHbEQsNENBQXVEO0FBQ3ZELDhFQUEyRTtBQUkzRSxTQUFTLGFBQWEsQ0FDcEIsRUFBa0MsRUFDbEMsTUFHQyxFQUNELE9BQXdCO0lBRXhCLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3hGLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxhQUFhLEdBQThCLEVBQUUsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFFN0IsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUM5QixNQUFNLGVBQWUsR0FBRyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRXRFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7UUFDaEMsd0hBQXdIO1FBQ3hILHlFQUF5RTtRQUN6RSxNQUFNLGNBQWMsR0FBRyxJQUFBLG1DQUF1QixFQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFB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QUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5RCxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSwgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB1dHhvY29yZSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUnO1xuXG5pbXBvcnQgeyBPdXRwdXQsIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sIEZpeGVkU2NyaXB0V2FsbGV0T3V0cHV0IH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyB0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uL3JlY2lwaWVudCc7XG5pbXBvcnQgeyBnZXRQYXlHb1ZlcmlmaWNhdGlvblB1YmtleSB9IGZyb20gJy4uL2dldFBheUdvVmVyaWZpY2F0aW9uUHVia2V5JztcblxuZXhwb3J0IHR5cGUgQ2hhbmdlQWRkcmVzc0luZm8gPSB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9O1xuXG5mdW5jdGlvbiBleHBsYWluQ29tbW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBjaGFuZ2VJbmZvPzogQ2hhbmdlQWRkcmVzc0luZm9bXTtcbiAgICBmZWVJbmZvPzogc3RyaW5nO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbikge1xuICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJ107XG4gIGxldCBzcGVuZEFtb3VudCA9IEJpZ0ludCgwKTtcbiAgbGV0IGNoYW5nZUFtb3VudCA9IEJpZ0ludCgwKTtcbiAgY29uc3QgY2hhbmdlT3V0cHV0czogRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXRbXSA9IFtdO1xuICBjb25zdCBvdXRwdXRzOiBPdXRwdXRbXSA9IFtdO1xuXG4gIGNvbnN0IHsgY2hhbmdlSW5mbyB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGFuZ2VBZGRyZXNzZXMgPSBjaGFuZ2VJbmZvPy5tYXAoKGluZm8pID0+IGluZm8uYWRkcmVzcykgPz8gW107XG5cbiAgdHgub3V0cy5mb3JFYWNoKChjdXJyZW50T3V0cHV0KSA9PiB7XG4gICAgLy8gVHJ5IHRvIGVuY29kZSB0aGUgc2NyaXB0IHB1YmtleSB3aXRoIGFuIGFkZHJlc3MuIElmIGl0IGZhaWxzLCB0cnkgdG8gcGFyc2UgaXQgYXMgYW4gT1BfUkVUVVJOIG91dHB1dCB3aXRoIHRoZSBwcmVmaXguXG4gICAgLy8gSWYgdGhhdCBmYWlscywgdGhlbiBpdCBpcyBhbiB1bnJlY29nbml6ZWQgc2NyaXB0UHVia2V5IGFuZCBzaG91bGQgZmFpbFxuICAgIGNvbnN0IGN1cnJlbnRBZGRyZXNzID0gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoY3VycmVudE91dHB1dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgIGNvbnN0IGN1cnJlbnRBbW91bnQgPSBCaWdJbnQoY3VycmVudE91dHB1dC52YWx1ZSk7XG5cbiAgICBpZiAoY2hhbmdlQWRkcmVzc2VzLmluY2x1ZGVzKGN1cnJlbnRBZGRyZXNzKSkge1xuICAgICAgLy8gdGhpcyBpcyBjaGFuZ2VcbiAgICAgIGNoYW5nZUFtb3VudCArPSBjdXJyZW50QW1vdW50O1xuICAgICAgY29uc3QgY2hhbmdlID0gY2hhbmdlSW5mbz8uZmluZCgoY2hhbmdlKSA9PiBjaGFuZ2UuYWRkcmVzcyA9PT0gY3VycmVudEFkZHJlc3MpO1xuXG4gICAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoYW5nZUluZm8gbXVzdCBoYXZlIGNoYW5nZSBpbmZvcm1hdGlvbiBmb3IgYWxsIGNoYW5nZSBvdXRwdXRzJyk7XG4gICAgICB9XG4gICAgICBjaGFuZ2VPdXRwdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBjdXJyZW50QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiBjdXJyZW50QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNoYWluOiBjaGFuZ2UuY2hhaW4sXG4gICAgICAgIGluZGV4OiBjaGFuZ2UuaW5kZXgsXG4gICAgICAgIGV4dGVybmFsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNwZW5kQW1vdW50ICs9IGN1cnJlbnRBbW91bnQ7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IGN1cnJlbnRBZGRyZXNzLFxuICAgICAgYW1vdW50OiBjdXJyZW50QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAvLyBJZiBjaGFuZ2VJbmZvIGhhcyBhIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbWVhbnMgdGhhdCB0aGUgY2hhbmdlIGluZm9ybWF0aW9uXG4gICAgICAvLyB3YXMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGJ1dCB0aGUgb3V0cHV0IHdhcyBub3QgaWRlbnRpZmllZCBhcyBjaGFuZ2UuIEluIHRoaXMgY2FzZSxcbiAgICAgIC8vIHRoZSBvdXRwdXQgaXMgZXh0ZXJuYWwsIGFuZCB3ZSBjYW4gc2V0IGl0IGFzIHNvLiBJZiBjaGFuZ2VJbmZvIGlzIHVuZGVmaW5lZCwgaXQgbWVhbnMgd2Ugd2VyZVxuICAgICAgLy8gZ2l2ZW4gbm8gaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlIG91dHB1dHMsIHNvIHdlIGNhbid0IGRldGVybWluZSBhbnl0aGluZyBhYm91dCB0aGUgb3V0cHV0LFxuICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdW5kZWZpbmVkLlxuICAgICAgZXh0ZXJuYWw6IGNoYW5nZUluZm8gPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBvdXRwdXREZXRhaWxzID0ge1xuICAgIG91dHB1dEFtb3VudDogc3BlbmRBbW91bnQudG9TdHJpbmcoKSxcbiAgICBjaGFuZ2VBbW91bnQ6IGNoYW5nZUFtb3VudC50b1N0cmluZygpLFxuICAgIG91dHB1dHMsXG4gICAgY2hhbmdlT3V0cHV0cyxcbiAgfTtcblxuICBsZXQgZmVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBsb2NrdGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChwYXJhbXMuZmVlSW5mbykge1xuICAgIGRpc3BsYXlPcmRlci5wdXNoKCdmZWUnKTtcbiAgICBmZWUgPSBwYXJhbXMuZmVlSW5mbztcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHR4LmxvY2t0aW1lKSAmJiB0eC5sb2NrdGltZSA+IDApIHtcbiAgICBkaXNwbGF5T3JkZXIucHVzaCgnbG9ja3RpbWUnKTtcbiAgICBsb2NrdGltZSA9IHR4LmxvY2t0aW1lO1xuICB9XG5cbiAgcmV0dXJuIHsgZGlzcGxheU9yZGVyLCBpZDogdHguZ2V0SWQoKSwgLi4ub3V0cHV0RGV0YWlscywgZmVlLCBsb2NrdGltZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXM6IHsgcHVicz86IHN0cmluZ1tdIH0pIHtcbiAgY29uc3Qga2V5cyA9IHBhcmFtcy5wdWJzPy5tYXAoKHhwdWIpID0+IGJpcDMyLmZyb21CYXNlNTgoeHB1YikpO1xuICByZXR1cm4ga2V5cyAmJiBrZXlzLmxlbmd0aCA9PT0gMyA/IG5ldyBiaXRnby5Sb290V2FsbGV0S2V5cyhrZXlzIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT4pIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRQc2J0SW5wdXRTaWduYXR1cmVzQ291bnQoXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gIH1cbikge1xuICBjb25zdCByb290V2FsbGV0S2V5cyA9IGdldFJvb3RXYWxsZXRLZXlzKHBhcmFtcyk7XG4gIHJldHVybiByb290V2FsbGV0S2V5c1xuICAgID8gYml0Z28uZ2V0U2lnbmF0dXJlVmFsaWRhdGlvbkFycmF5UHNidChwc2J0LCByb290V2FsbGV0S2V5cykubWFwKChzdikgPT4gc3ZbMV0uZmlsdGVyKCh2KSA9PiB2KS5sZW5ndGgpXG4gICAgOiAoQXJyYXkocHNidC5kYXRhLmlucHV0cy5sZW5ndGgpIGFzIG51bWJlcltdKS5maWxsKDApO1xufVxuXG5mdW5jdGlvbiBnZXRUeElucHV0U2lnbmF0dXJlc0NvdW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICB0eEluZm8/OiB7IHVuc3BlbnRzPzogYml0Z28uVW5zcGVudDxUTnVtYmVyPltdIH07XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbikge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHBhcmFtcy50eEluZm8/LnVuc3BlbnRzPy5tYXAoKHUpID0+IGJpdGdvLnRvT3V0cHV0PFROdW1iZXI+KHUsIG5ldHdvcmspKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICBjb25zdCB7IHVuc3BlbnRzID0gW10gfSA9IHBhcmFtcy50eEluZm8gPz8ge307XG5cbiAgLy8gZ2V0IHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBwZXIgaW5wdXRcbiAgcmV0dXJuIHR4Lmlucy5tYXAoKGlucHV0LCBpZHgpOiBudW1iZXIgPT4ge1xuICAgIGlmICh1bnNwZW50cy5sZW5ndGggIT09IHR4Lmlucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgICB9XG4gICAgaWYgKCFyb290V2FsbGV0S2V5cykge1xuICAgICAgLy8gbm8gcHViIGtleXMgb3IgaW5jb3JyZWN0IG51bWJlciBvZiBwdWIga2V5c1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYml0Z28udmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQ8VE51bWJlcj4odHgsIGlkeCwgdW5zcGVudHMsIHJvb3RXYWxsZXRLZXlzKS5maWx0ZXIoKHYpID0+IHYpLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjYW4ndCB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWNvbXBvc2UgYSByYXcgcHNidCBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAqIGNoYW5nZSBhbW91bnRzLCBhbmQgdHJhbnNhY3Rpb24gb3V0cHV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Qc2J0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQsIFR4IGV4dGVuZHMgYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4+KFxuICBwc2J0OiBiaXRnby5VdHhvUHNidDxUeD4sXG4gIHBhcmFtczoge1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgICB0eEluZm8/OiB7IHVuc3BlbnRzPzogYml0Z28uVW5zcGVudDxUTnVtYmVyPltdIH07XG4gIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgeyBzdHJpY3QgPSBmYWxzZSB9OiB7IHN0cmljdD86IGJvb2xlYW4gfSA9IHt9XG4pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgY29uc3QgdHhPdXRwdXRzID0gcHNidC50eE91dHB1dHM7XG5cbiAgZnVuY3Rpb24gZ2V0Q2hhaW5BbmRJbmRleEZyb21CaXAzMkRlcml2YXRpb25zKG91dHB1dDogYml0Z28uUHNidE91dHB1dCkge1xuICAgIGNvbnN0IGRlcml2YXRpb25zID0gb3V0cHV0LmJpcDMyRGVyaXZhdGlvbiA/PyBvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uID8/IHVuZGVmaW5lZDtcbiAgICBpZiAoIWRlcml2YXRpb25zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBwYXRocyA9IGRlcml2YXRpb25zLm1hcCgoZCkgPT4gZC5wYXRoKTtcbiAgICBpZiAoIXBhdGhzIHx8IHBhdGhzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCAzIHBhdGhzIGluIGJpcDMyRGVyaXZhdGlvbiBvciB0YXBCaXAzMkRlcml2YXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFwYXRocy5ldmVyeSgocCkgPT4gcGF0aHNbMF0gPT09IHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGFsbCBwYXRocyB0byBiZSB0aGUgc2FtZScpO1xuICAgIH1cblxuICAgIHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgIGlmIChwYXRoc1swXSAhPT0gcGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1VuYWJsZSB0byBnZXQgYSBzaW5nbGUgY2hhaW4gYW5kIGluZGV4IG9uIHRoZSBvdXRwdXQgYmVjYXVzZSB0aGVyZSBhcmUgZGlmZmVyZW50IHBhdGhzIGZvciBkaWZmZXJlbnQga2V5cydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5nZXRDaGFpbkFuZEluZGV4RnJvbVBhdGgocGF0aHNbMF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2hhbmdlSW5mbygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28uZmluZEludGVybmFsT3V0cHV0SW5kaWNlcyhwc2J0KS5tYXAoKGkpID0+IHtcbiAgICAgICAgY29uc3QgZGVyaXZhdGlvbkluZm9ybWF0aW9uID0gZ2V0Q2hhaW5BbmRJbmRleEZyb21CaXAzMkRlcml2YXRpb25zKHBzYnQuZGF0YS5vdXRwdXRzW2ldKTtcbiAgICAgICAgaWYgKCFkZXJpdmF0aW9uSW5mb3JtYXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGRlcml2YXRpb24gaW5mb3JtYXRpb24gb24gYmlwMzJEZXJpdmF0aW9uIG9yIHRhcEJpcDMyRGVyaXZhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQodHhPdXRwdXRzW2ldLnNjcmlwdCwgbmV0d29yayksXG4gICAgICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgICAgIC4uLmRlcml2YXRpb25JbmZvcm1hdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5FcnJvck5vTXVsdGlTaWdJbnB1dEZvdW5kKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IFBheUdvIGFkZHJlc3MgcHJvb2YgaW5mb3JtYXRpb24gZnJvbSB0aGUgUFNCVCBpZiBwcmVzZW50XG4gICAqIEByZXR1cm5zIEluZm9ybWF0aW9uIGFib3V0IHRoZSBQYXlHbyBwcm9vZiwgaW5jbHVkaW5nIHRoZSBvdXRwdXQgaW5kZXggYW5kIGFkZHJlc3NcbiAgICovXG4gIGZ1bmN0aW9uIGdldFBheUdvVmVyaWZpY2F0aW9uSW5mbygpOiB7IG91dHB1dEluZGV4OiBudW1iZXI7IHZlcmlmaWNhdGlvblB1YmtleTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBvdXRwdXRJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBQU0JUIGhhcyBhbnkgUGF5R28gYWRkcmVzcyBwcm9vZnNcbiAgICBpZiAoIXV0eG9jb3JlLnBheWdvLnBzYnRPdXRwdXRJbmNsdWRlc1BheWdvQWRkcmVzc1Byb29mKHBzYnQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFRoaXMgcHVsbHMgdGhlIHB1YmtleSBkZXBlbmRpbmcgb24gZ2l2ZW4gbmV0d29ya1xuICAgIGNvbnN0IHZlcmlmaWNhdGlvblB1YmtleSA9IGdldFBheUdvVmVyaWZpY2F0aW9uUHVia2V5KG5ldHdvcmspO1xuICAgIC8vIGZpbmQgd2hpY2ggb3V0cHV0IGluZGV4IHRoYXQgY29udGFpbnMgdGhlIFBheUdvIHByb29mXG4gICAgb3V0cHV0SW5kZXggPSB1dHhvY29yZS5wYXlnby5nZXRQYXlHb0FkZHJlc3NQcm9vZk91dHB1dEluZGV4KHBzYnQpO1xuICAgIGlmIChvdXRwdXRJbmRleCA9PT0gdW5kZWZpbmVkIHx8ICF2ZXJpZmljYXRpb25QdWJrZXkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IHR4T3V0cHV0c1tvdXRwdXRJbmRleF07XG4gICAgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KG91dHB1dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGRlcml2ZSBhZGRyZXNzICR7YWRkcmVzc30gUGF5IEdvIEF0dGVzdGF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB7IG91dHB1dEluZGV4LCB2ZXJpZmljYXRpb25QdWJrZXkgfTtcbiAgfVxuXG4gIGNvbnN0IHBheUdvVmVyaWZpY2F0aW9uSW5mbyA9IGdldFBheUdvVmVyaWZpY2F0aW9uSW5mbygpO1xuICBpZiAocGF5R29WZXJpZmljYXRpb25JbmZvKSB7XG4gICAgdHJ5IHtcbiAgICAgIHV0eG9jb3JlLnBheWdvLnZlcmlmeVBheUdvQWRkcmVzc1Byb29mKFxuICAgICAgICBwc2J0LFxuICAgICAgICBwYXlHb1ZlcmlmaWNhdGlvbkluZm8ub3V0cHV0SW5kZXgsXG4gICAgICAgIHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OChwYXlHb1ZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uUHVia2V5LCB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pLnB1YmxpY0tleVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoYW5nZUluZm8gPSBnZXRDaGFuZ2VJbmZvKCk7XG4gIGNvbnN0IHR4ID0gcHNidC5nZXRVbnNpZ25lZFR4KCkgYXMgYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+O1xuICBjb25zdCBjb21tb24gPSBleHBsYWluQ29tbW9uKHR4LCB7IC4uLnBhcmFtcywgY2hhbmdlSW5mbyB9LCBuZXR3b3JrKTtcbiAgY29uc3QgaW5wdXRTaWduYXR1cmVzQ291bnQgPSBnZXRQc2J0SW5wdXRTaWduYXR1cmVzQ291bnQocHNidCwgcGFyYW1zKTtcblxuICAvLyBTZXQgZmVlIGZyb20gc3VidHJhY3RpbmcgaW5wdXRzIGZyb20gb3V0cHV0c1xuICBjb25zdCBvdXRwdXRBbW91bnQgPSB0eE91dHB1dHMucmVkdWNlKChjdW11bGF0aXZlLCBjdXJyKSA9PiBjdW11bGF0aXZlICsgQmlnSW50KGN1cnIudmFsdWUpLCBCaWdJbnQoMCkpO1xuICBjb25zdCBpbnB1dEFtb3VudCA9IHBzYnQudHhJbnB1dHMucmVkdWNlKChjdW11bGF0aXZlLCB0eElucHV0LCBpKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHBzYnQuZGF0YS5pbnB1dHNbaV07XG4gICAgaWYgKGRhdGEud2l0bmVzc1V0eG8pIHtcbiAgICAgIHJldHVybiBjdW11bGF0aXZlICsgQmlnSW50KGRhdGEud2l0bmVzc1V0eG8udmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5ub25XaXRuZXNzVXR4bykge1xuICAgICAgY29uc3QgdHggPSBiaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXI8YmlnaW50PihkYXRhLm5vbldpdG5lc3NVdHhvLCBuZXR3b3JrLCB7IGFtb3VudFR5cGU6ICdiaWdpbnQnIH0pO1xuICAgICAgcmV0dXJuIGN1bXVsYXRpdmUgKyBCaWdJbnQodHgub3V0c1t0eElucHV0LmluZGV4XS52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgdmFsdWUgb24gaW5wdXQnKTtcbiAgICB9XG4gIH0sIEJpZ0ludCgwKSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb24sXG4gICAgZmVlOiAoaW5wdXRBbW91bnQgLSBvdXRwdXRBbW91bnQpLnRvU3RyaW5nKCksXG4gICAgaW5wdXRTaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudCxcbiAgICBzaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCksXG4gIH0gYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5MZWdhY3lUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IGJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcGFyYW1zOiB7XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICAgIHR4SW5mbz86IHsgdW5zcGVudHM/OiBiaXRnby5VbnNwZW50PFROdW1iZXI+W10gfTtcbiAgICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBjb25zdCBjb21tb24gPSBleHBsYWluQ29tbW9uKHR4LCBwYXJhbXMsIG5ldHdvcmspO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFR4SW5wdXRTaWduYXR1cmVzQ291bnQodHgsIHBhcmFtcywgbmV0d29yayk7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbW9uLFxuICAgIGlucHV0U2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQsXG4gICAgc2lnbmF0dXJlczogaW5wdXRTaWduYXR1cmVzQ291bnQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoY3VyciA+IHByZXYgPyBjdXJyIDogcHJldiksIDApLFxuICB9IGFzIFRyYW5zYWN0aW9uRXhwbGFuYXRpb247XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export { explainPsbt, explainLegacyTx, ChangeAddressInfo } from './explainTransaction';
2
+ export { parseTransaction } from './parseTransaction';
3
+ export { CustomChangeOptions } from './parseOutput';
4
+ export { verifyTransaction } from './verifyTransaction';
5
+ export { signTransaction } from './signTransaction';
6
+ //# 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;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signTransaction = exports.verifyTransaction = exports.parseTransaction = 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
+ var parseTransaction_1 = require("./parseTransaction");
8
+ Object.defineProperty(exports, "parseTransaction", { enumerable: true, get: function () { return parseTransaction_1.parseTransaction; } });
9
+ var verifyTransaction_1 = require("./verifyTransaction");
10
+ Object.defineProperty(exports, "verifyTransaction", { enumerable: true, get: function () { return verifyTransaction_1.verifyTransaction; } });
11
+ var signTransaction_1 = require("./signTransaction");
12
+ Object.defineProperty(exports, "signTransaction", { enumerable: true, get: function () { return signTransaction_1.signTransaction; } });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXVGO0FBQTlFLGlIQUFBLFdBQVcsT0FBQTtBQUFFLHFIQUFBLGVBQWUsT0FBQTtBQUNyQyx1REFBc0Q7QUFBN0Msb0hBQUEsZ0JBQWdCLE9BQUE7QUFFekIseURBQXdEO0FBQS9DLHNIQUFBLGlCQUFpQixPQUFBO0FBQzFCLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBleHBsYWluUHNidCwgZXhwbGFpbkxlZ2FjeVR4LCBDaGFuZ2VBZGRyZXNzSW5mbyB9IGZyb20gJy4vZXhwbGFpblRyYW5zYWN0aW9uJztcbmV4cG9ydCB7IHBhcnNlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3BhcnNlVHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgQ3VzdG9tQ2hhbmdlT3B0aW9ucyB9IGZyb20gJy4vcGFyc2VPdXRwdXQnO1xuZXhwb3J0IHsgdmVyaWZ5VHJhbnNhY3Rpb24gfSBmcm9tICcuL3ZlcmlmeVRyYW5zYWN0aW9uJztcbmV4cG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vc2lnblRyYW5zYWN0aW9uJztcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { IRequestTracer, IWallet, TransactionPrebuild, VerificationOptions, ITransactionRecipient, Triple } from '@bitgo-beta/sdk-core';
2
+ import { AbstractUtxoCoin, Output } from '../../abstractUtxoCoin';
3
+ export interface CustomChangeOptions {
4
+ keys: Triple<{
5
+ pub: string;
6
+ }>;
7
+ signatures: Triple<string>;
8
+ }
9
+ export interface ParseOutputOptions {
10
+ currentOutput: Output;
11
+ coin: AbstractUtxoCoin;
12
+ txPrebuild: TransactionPrebuild;
13
+ verification: VerificationOptions;
14
+ keychainArray: Triple<{
15
+ pub: string;
16
+ }>;
17
+ wallet: IWallet;
18
+ txParams: {
19
+ recipients: ITransactionRecipient[];
20
+ changeAddress?: string;
21
+ };
22
+ customChange?: CustomChangeOptions;
23
+ reqId?: IRequestTracer;
24
+ }
25
+ export declare function parseOutput({ currentOutput, coin, txPrebuild, verification, keychainArray, wallet, txParams, customChange, reqId, }: ParseOutputOptions): Promise<Output>;
26
+ //# sourceMappingURL=parseOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseOutput.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseOutput.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EAEd,OAAO,EACP,mBAAmB,EAEnB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AA0KlF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE;QACR,UAAU,EAAE,qBAAqB,EAAE,CAAC;QACpC,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,wBAAsB,WAAW,CAAC,EAChC,aAAa,EACb,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+GtC"}