@bitgo-beta/utxo-lib 8.0.3-beta.7 → 8.0.3-beta.700
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.
- package/README.md +19 -16
- package/dist/src/address.d.ts +0 -1
- package/dist/src/address.d.ts.map +1 -1
- package/dist/src/address.js +10 -10
- package/dist/src/addressFormat.d.ts +1 -2
- package/dist/src/addressFormat.d.ts.map +1 -1
- package/dist/src/addressFormat.js +21 -26
- package/dist/src/bitgo/Musig2.d.ts +5 -11
- package/dist/src/bitgo/Musig2.d.ts.map +1 -1
- package/dist/src/bitgo/Musig2.js +63 -88
- package/dist/src/bitgo/PsbtUtil.d.ts +70 -0
- package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -0
- package/dist/src/bitgo/PsbtUtil.js +132 -0
- package/dist/src/bitgo/Unspent.d.ts +2 -3
- package/dist/src/bitgo/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/Unspent.js +14 -15
- package/dist/src/bitgo/UtxoPsbt.d.ts +26 -40
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoPsbt.js +220 -205
- package/dist/src/bitgo/UtxoTransaction.d.ts +0 -1
- package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoTransaction.js +12 -12
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -1
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoTransactionBuilder.js +1 -1
- package/dist/src/bitgo/bitcoincash/address.d.ts +0 -1
- package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -1
- package/dist/src/bitgo/bitcoincash/address.js +11 -12
- package/dist/src/bitgo/bitcoincash/index.js +6 -2
- package/dist/src/bitgo/dash/DashPsbt.d.ts +0 -1
- package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -1
- package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/dash/DashTransaction.js +3 -3
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -1
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/dash/DashTransactionBuilder.js +1 -1
- package/dist/src/bitgo/dash/index.js +6 -2
- package/dist/src/bitgo/index.d.ts +10 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +10 -3
- package/dist/src/bitgo/keyutil.d.ts +9 -1
- package/dist/src/bitgo/keyutil.d.ts.map +1 -1
- package/dist/src/bitgo/keyutil.js +25 -4
- package/dist/src/bitgo/legacysafe/index.d.ts +14 -0
- package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
- package/dist/src/bitgo/legacysafe/index.js +60 -0
- package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +0 -1
- package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -2
- package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
- package/dist/src/bitgo/litecoin/index.js +6 -2
- package/dist/src/bitgo/nonStandardHalfSigned.js +2 -3
- package/dist/src/bitgo/outputScripts.d.ts +7 -7
- package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
- package/dist/src/bitgo/outputScripts.js +48 -33
- package/dist/src/bitgo/parseInput.d.ts +11 -8
- package/dist/src/bitgo/parseInput.d.ts.map +1 -1
- package/dist/src/bitgo/parseInput.js +31 -16
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -1
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
- package/dist/src/bitgo/psbt/fromHalfSigned.js +7 -8
- package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -1
- package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -1
- package/dist/src/bitgo/psbt/scriptTypes.js +7 -8
- package/dist/src/bitgo/signature.d.ts +4 -5
- package/dist/src/bitgo/signature.d.ts.map +1 -1
- package/dist/src/bitgo/signature.js +32 -18
- package/dist/src/bitgo/tnumber.js +2 -3
- package/dist/src/bitgo/transaction.d.ts +31 -4
- package/dist/src/bitgo/transaction.d.ts.map +1 -1
- package/dist/src/bitgo/transaction.js +55 -27
- package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
- package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
- package/dist/src/bitgo/transactionAmounts.js +32 -0
- package/dist/src/bitgo/types.d.ts +8 -2
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/types.js +12 -4
- package/dist/src/bitgo/wallet/Psbt.d.ts +90 -27
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Psbt.js +246 -108
- package/dist/src/bitgo/wallet/Unspent.d.ts +43 -10
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Unspent.js +174 -81
- package/dist/src/bitgo/wallet/WalletKeys.d.ts +1 -2
- package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletKeys.js +3 -3
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletOutput.js +67 -27
- package/dist/src/bitgo/wallet/WalletScripts.js +4 -5
- package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
- package/dist/src/bitgo/wallet/chains.d.ts +2 -2
- package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/chains.js +10 -10
- package/dist/src/bitgo/wallet/index.d.ts +2 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/index.js +8 -2
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +85 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.js +123 -0
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +1 -2
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashBufferutils.js +15 -15
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -2
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.js +12 -19
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +3 -2
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashTransaction.js +31 -21
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -1
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +6 -4
- package/dist/src/bitgo/zcash/address.d.ts +0 -1
- package/dist/src/bitgo/zcash/address.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/address.js +7 -8
- package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -2
- package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/hashZip0244.js +9 -10
- package/dist/src/bitgo/zcash/index.js +6 -2
- package/dist/src/classify.d.ts +0 -1
- package/dist/src/classify.d.ts.map +1 -1
- package/dist/src/classify.js +5 -5
- package/dist/src/index.js +6 -2
- package/dist/src/networks.d.ts +2 -2
- package/dist/src/networks.d.ts.map +1 -1
- package/dist/src/networks.js +67 -21
- package/dist/src/noble_ecc.d.ts +7 -7
- package/dist/src/noble_ecc.d.ts.map +1 -1
- package/dist/src/noble_ecc.js +5 -5
- package/dist/src/payments/p2tr.js +11 -16
- package/dist/src/payments/p2tr_ns.js +3 -5
- package/dist/src/taproot.d.ts +1 -2
- package/dist/src/taproot.d.ts.map +1 -1
- package/dist/src/taproot.js +21 -22
- package/dist/src/templates/multisig/input.d.ts +0 -1
- package/dist/src/templates/multisig/input.d.ts.map +1 -1
- package/dist/src/templates/multisig/input.js +2 -3
- package/dist/src/templates/multisig/output.d.ts +0 -1
- package/dist/src/templates/multisig/output.d.ts.map +1 -1
- package/dist/src/templates/multisig/output.js +2 -3
- package/dist/src/templates/nulldata.d.ts +0 -1
- package/dist/src/templates/nulldata.d.ts.map +1 -1
- package/dist/src/templates/nulldata.js +3 -3
- package/dist/src/templates/pubkey/input.d.ts +0 -1
- package/dist/src/templates/pubkey/input.d.ts.map +1 -1
- package/dist/src/templates/pubkey/input.js +2 -3
- package/dist/src/templates/pubkey/output.d.ts +0 -1
- package/dist/src/templates/pubkey/output.d.ts.map +1 -1
- package/dist/src/templates/pubkey/output.js +2 -3
- package/dist/src/templates/pubkeyhash/input.d.ts +0 -1
- package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -1
- package/dist/src/templates/pubkeyhash/input.js +2 -3
- package/dist/src/templates/pubkeyhash/output.d.ts +0 -1
- package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -1
- package/dist/src/templates/pubkeyhash/output.js +2 -3
- package/dist/src/templates/scripthash/input.d.ts +0 -1
- package/dist/src/templates/scripthash/input.d.ts.map +1 -1
- package/dist/src/templates/scripthash/input.js +2 -3
- package/dist/src/templates/scripthash/output.d.ts +0 -1
- package/dist/src/templates/scripthash/output.d.ts.map +1 -1
- package/dist/src/templates/scripthash/output.js +2 -3
- package/dist/src/templates/taproot/input.d.ts +0 -1
- package/dist/src/templates/taproot/input.d.ts.map +1 -1
- package/dist/src/templates/taproot/input.js +2 -3
- package/dist/src/templates/taproot/output.d.ts +0 -1
- package/dist/src/templates/taproot/output.d.ts.map +1 -1
- package/dist/src/templates/taproot/output.js +2 -3
- package/dist/src/templates/taprootnofn/input.d.ts +0 -1
- package/dist/src/templates/taprootnofn/input.d.ts.map +1 -1
- package/dist/src/templates/taprootnofn/input.js +2 -3
- package/dist/src/templates/taprootnofn/output.d.ts +0 -1
- package/dist/src/templates/taprootnofn/output.d.ts.map +1 -1
- package/dist/src/templates/taprootnofn/output.js +2 -3
- package/dist/src/templates/witnesscommitment/output.d.ts +0 -1
- package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -1
- package/dist/src/templates/witnesscommitment/output.js +4 -5
- package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -1
- package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -1
- package/dist/src/templates/witnesspubkeyhash/input.js +2 -3
- package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -1
- package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -1
- package/dist/src/templates/witnesspubkeyhash/output.js +2 -3
- package/dist/src/templates/witnessscripthash/input.d.ts +0 -1
- package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -1
- package/dist/src/templates/witnessscripthash/input.js +2 -3
- package/dist/src/templates/witnessscripthash/output.d.ts +0 -1
- package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -1
- package/dist/src/templates/witnessscripthash/output.js +2 -3
- package/dist/src/testutil/index.d.ts +1 -0
- package/dist/src/testutil/index.d.ts.map +1 -1
- package/dist/src/testutil/index.js +7 -2
- package/dist/src/testutil/keys.d.ts +4 -1
- package/dist/src/testutil/keys.d.ts.map +1 -1
- package/dist/src/testutil/keys.js +22 -8
- package/dist/src/testutil/mock.d.ts +2 -3
- package/dist/src/testutil/mock.d.ts.map +1 -1
- package/dist/src/testutil/mock.js +31 -23
- package/dist/src/testutil/psbt.d.ts +40 -16
- package/dist/src/testutil/psbt.d.ts.map +1 -1
- package/dist/src/testutil/psbt.js +54 -39
- package/dist/src/testutil/transaction.d.ts +18 -7
- package/dist/src/testutil/transaction.d.ts.map +1 -1
- package/dist/src/testutil/transaction.js +33 -26
- package/dist/src/transaction_builder.d.ts +0 -1
- package/dist/src/transaction_builder.d.ts.map +1 -1
- package/dist/src/transaction_builder.js +13 -18
- package/package.json +8 -8
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contains helper methods for determining if a transaction output belongs to a given BitGo wallet
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.deriveKeyPairForOutput = deriveKeyPairForOutput;
|
|
7
|
+
exports.isWalletOutput = isWalletOutput;
|
|
8
|
+
exports.findWalletOutputIndices = findWalletOutputIndices;
|
|
9
|
+
exports.getTotalAmountOfWalletOutputs = getTotalAmountOfWalletOutputs;
|
|
10
|
+
exports.findInternalOutputIndices = findInternalOutputIndices;
|
|
11
|
+
exports.getTotalAmountOfInternalOutputs = getTotalAmountOfInternalOutputs;
|
|
12
|
+
const types_1 = require("../../types");
|
|
13
|
+
const outputScripts_1 = require("../../outputScripts");
|
|
14
|
+
const UtxoPsbt_1 = require("../../UtxoPsbt");
|
|
15
|
+
const utils_1 = require("bip174/src/lib/utils");
|
|
16
|
+
const RootNodes_1 = require("./RootNodes");
|
|
17
|
+
/**
|
|
18
|
+
* Derives the appropriate BIP32 key pair for a given output.
|
|
19
|
+
* It uses either tapBip32Derivation or bip32Derivation paths from the output.
|
|
20
|
+
* @param bip32 - The BIP32Interface object to derive from.
|
|
21
|
+
* @param output - The specific PSBT output to derive for.
|
|
22
|
+
* @returns The derived BIP32 key pair if master fingerprint matches, or undefined.
|
|
23
|
+
*/
|
|
24
|
+
function deriveKeyPairForOutput(bip32, output) {
|
|
25
|
+
return output.tapBip32Derivation?.length
|
|
26
|
+
? UtxoPsbt_1.UtxoPsbt.deriveKeyPair(bip32, output.tapBip32Derivation, { ignoreY: true })
|
|
27
|
+
: output.bip32Derivation?.length
|
|
28
|
+
? UtxoPsbt_1.UtxoPsbt.deriveKeyPair(bip32, output.bip32Derivation, { ignoreY: false })
|
|
29
|
+
: undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Determines if a specified output in a PSBT is an output of the wallet represented by the given root nodes.
|
|
33
|
+
* @param psbt - The PSBT to check.
|
|
34
|
+
* @param outputIndex - The index of the output to check.
|
|
35
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
36
|
+
* @returns A boolean indicating if the output belongs to the wallet.
|
|
37
|
+
*/
|
|
38
|
+
function isWalletOutput(psbt, outputIndex, rootWalletNodes) {
|
|
39
|
+
const output = (0, utils_1.checkForOutput)(psbt.data.outputs, outputIndex);
|
|
40
|
+
const pubKeys = rootWalletNodes.map((rootNode) => deriveKeyPairForOutput(rootNode, output)?.publicKey);
|
|
41
|
+
if (!(0, types_1.isBufferArray)(pubKeys)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const outputScript = psbt.getOutputScript(outputIndex);
|
|
45
|
+
return outputScripts_1.scriptTypes2Of3.some((scriptType) => (0, outputScripts_1.createOutputScript2of3)(pubKeys, scriptType).scriptPubKey.equals(outputScript));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Finds indices of all outputs in a PSBT that belong to the wallet represented by the given root nodes.
|
|
49
|
+
* @param psbt - The PSBT to search through.
|
|
50
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
51
|
+
* @returns An array of indices corresponding to wallet outputs.
|
|
52
|
+
*/
|
|
53
|
+
function findWalletOutputIndices(psbt, rootWalletNodes) {
|
|
54
|
+
return psbt.data.outputs.flatMap((_, i) => (isWalletOutput(psbt, i, rootWalletNodes) ? [i] : []));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Calculates the total amount of all wallet outputs in a PSBT for the wallet represented by the given root nodes.
|
|
58
|
+
* @param psbt - The PSBT to calculate for.
|
|
59
|
+
* @param rootWalletNodes - The root nodes representing the wallet.
|
|
60
|
+
* @returns The total amount of wallet outputs.
|
|
61
|
+
*/
|
|
62
|
+
function getTotalAmountOfWalletOutputs(psbt, rootWalletNodes) {
|
|
63
|
+
const indices = findWalletOutputIndices(psbt, rootWalletNodes);
|
|
64
|
+
const txOutputs = psbt.txOutputs;
|
|
65
|
+
return indices.reduce((sum, i) => sum + txOutputs[i].value, BigInt(0));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Finds indices of all internal outputs in a PSBT, identified as outputs belonging to the wallet's root nodes within the PSBT.
|
|
69
|
+
* @param psbt - The PSBT containing the wallet's root nodes as indicated by global Xpubs.
|
|
70
|
+
* @returns An array of indices of internal outputs.
|
|
71
|
+
*/
|
|
72
|
+
function findInternalOutputIndices(psbt) {
|
|
73
|
+
const rootNodes = (0, RootNodes_1.getSortedRootNodes)(psbt);
|
|
74
|
+
return findWalletOutputIndices(psbt, rootNodes);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Calculates the total amount of all internal outputs in a PSBT, identified as outputs belonging to the wallet's root nodes within the PSBT.
|
|
78
|
+
* @param psbt - The PSBT containing the wallet's root nodes as indicated by global Xpubs.
|
|
79
|
+
* @returns The total amount of internal outputs.
|
|
80
|
+
*/
|
|
81
|
+
function getTotalAmountOfInternalOutputs(psbt) {
|
|
82
|
+
const rootNodes = (0, RootNodes_1.getSortedRootNodes)(psbt);
|
|
83
|
+
return getTotalAmountOfWalletOutputs(psbt, rootNodes);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHNidE91dHB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3BzYnQvUHNidE91dHB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOztBQWlCSCx3REFNQztBQVNELHdDQWFDO0FBUUQsMERBRUM7QUFRRCxzRUFJQztBQU9ELDhEQUdDO0FBT0QsMEVBR0M7QUFyRkQsdUNBQW9EO0FBQ3BELHVEQUE4RTtBQUM5RSw2Q0FBMEM7QUFFMUMsZ0RBQXNEO0FBRXRELDJDQUFpRDtBQUVqRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxLQUFxQixFQUFFLE1BQWtCO0lBQzlFLE9BQU8sTUFBTSxDQUFDLGtCQUFrQixFQUFFLE1BQU07UUFDdEMsQ0FBQyxDQUFDLG1CQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTTtZQUNoQyxDQUFDLENBQUMsbUJBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDM0UsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLElBQWMsRUFBRSxXQUFtQixFQUFFLGVBQXVDO0lBQ3pHLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUU5RCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFdkcsSUFBSSxDQUFDLElBQUEscUJBQWEsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkQsT0FBTywrQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ3pDLElBQUEsc0NBQXNCLEVBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQzlFLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxJQUFjLEVBQUUsZUFBdUM7SUFDN0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDZCQUE2QixDQUFDLElBQWMsRUFBRSxlQUF1QztJQUNuRyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLElBQWM7SUFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBQSw4QkFBa0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxPQUFPLHVCQUF1QixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLCtCQUErQixDQUFDLElBQWM7SUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBQSw4QkFBa0IsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxPQUFPLDZCQUE2QixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250YWlucyBoZWxwZXIgbWV0aG9kcyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSB0cmFuc2FjdGlvbiBvdXRwdXQgYmVsb25ncyB0byBhIGdpdmVuIEJpdEdvIHdhbGxldFxuICovXG5cbmltcG9ydCB7IGlzQnVmZmVyQXJyYXksIFRyaXBsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMsIHNjcmlwdFR5cGVzMk9mMyB9IGZyb20gJy4uLy4uL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHsgVXR4b1BzYnQgfSBmcm9tICcuLi8uLi9VdHhvUHNidCc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCB7IGNoZWNrRm9yT3V0cHV0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgUHNidE91dHB1dCB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U29ydGVkUm9vdE5vZGVzIH0gZnJvbSAnLi9Sb290Tm9kZXMnO1xuXG4vKipcbiAqIERlcml2ZXMgdGhlIGFwcHJvcHJpYXRlIEJJUDMyIGtleSBwYWlyIGZvciBhIGdpdmVuIG91dHB1dC5cbiAqIEl0IHVzZXMgZWl0aGVyIHRhcEJpcDMyRGVyaXZhdGlvbiBvciBiaXAzMkRlcml2YXRpb24gcGF0aHMgZnJvbSB0aGUgb3V0cHV0LlxuICogQHBhcmFtIGJpcDMyIC0gVGhlIEJJUDMySW50ZXJmYWNlIG9iamVjdCB0byBkZXJpdmUgZnJvbS5cbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgc3BlY2lmaWMgUFNCVCBvdXRwdXQgdG8gZGVyaXZlIGZvci5cbiAqIEByZXR1cm5zIFRoZSBkZXJpdmVkIEJJUDMyIGtleSBwYWlyIGlmIG1hc3RlciBmaW5nZXJwcmludCBtYXRjaGVzLCBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVLZXlQYWlyRm9yT3V0cHV0KGJpcDMyOiBCSVAzMkludGVyZmFjZSwgb3V0cHV0OiBQc2J0T3V0cHV0KTogQklQMzJJbnRlcmZhY2UgfCB1bmRlZmluZWQge1xuICByZXR1cm4gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbj8ubGVuZ3RoXG4gICAgPyBVdHhvUHNidC5kZXJpdmVLZXlQYWlyKGJpcDMyLCBvdXRwdXQudGFwQmlwMzJEZXJpdmF0aW9uLCB7IGlnbm9yZVk6IHRydWUgfSlcbiAgICA6IG91dHB1dC5iaXAzMkRlcml2YXRpb24/Lmxlbmd0aFxuICAgID8gVXR4b1BzYnQuZGVyaXZlS2V5UGFpcihiaXAzMiwgb3V0cHV0LmJpcDMyRGVyaXZhdGlvbiwgeyBpZ25vcmVZOiBmYWxzZSB9KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgYSBzcGVjaWZpZWQgb3V0cHV0IGluIGEgUFNCVCBpcyBhbiBvdXRwdXQgb2YgdGhlIHdhbGxldCByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gcm9vdCBub2Rlcy5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gY2hlY2suXG4gKiBAcGFyYW0gb3V0cHV0SW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIG91dHB1dCB0byBjaGVjay5cbiAqIEBwYXJhbSByb290V2FsbGV0Tm9kZXMgLSBUaGUgcm9vdCBub2RlcyByZXByZXNlbnRpbmcgdGhlIHdhbGxldC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvdXRwdXQgYmVsb25ncyB0byB0aGUgd2FsbGV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXYWxsZXRPdXRwdXQocHNidDogVXR4b1BzYnQsIG91dHB1dEluZGV4OiBudW1iZXIsIHJvb3RXYWxsZXROb2RlczogVHJpcGxlPEJJUDMySW50ZXJmYWNlPik6IGJvb2xlYW4ge1xuICBjb25zdCBvdXRwdXQgPSBjaGVja0Zvck91dHB1dChwc2J0LmRhdGEub3V0cHV0cywgb3V0cHV0SW5kZXgpO1xuXG4gIGNvbnN0IHB1YktleXMgPSByb290V2FsbGV0Tm9kZXMubWFwKChyb290Tm9kZSkgPT4gZGVyaXZlS2V5UGFpckZvck91dHB1dChyb290Tm9kZSwgb3V0cHV0KT8ucHVibGljS2V5KTtcblxuICBpZiAoIWlzQnVmZmVyQXJyYXkocHViS2V5cykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdXRwdXRTY3JpcHQgPSBwc2J0LmdldE91dHB1dFNjcmlwdChvdXRwdXRJbmRleCk7XG4gIHJldHVybiBzY3JpcHRUeXBlczJPZjMuc29tZSgoc2NyaXB0VHlwZSkgPT5cbiAgICBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YktleXMsIHNjcmlwdFR5cGUpLnNjcmlwdFB1YktleS5lcXVhbHMob3V0cHV0U2NyaXB0KVxuICApO1xufVxuXG4vKipcbiAqIEZpbmRzIGluZGljZXMgb2YgYWxsIG91dHB1dHMgaW4gYSBQU0JUIHRoYXQgYmVsb25nIHRvIHRoZSB3YWxsZXQgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvb3Qgbm9kZXMuXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIHRvIHNlYXJjaCB0aHJvdWdoLlxuICogQHBhcmFtIHJvb3RXYWxsZXROb2RlcyAtIFRoZSByb290IG5vZGVzIHJlcHJlc2VudGluZyB0aGUgd2FsbGV0LlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgaW5kaWNlcyBjb3JyZXNwb25kaW5nIHRvIHdhbGxldCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFdhbGxldE91dHB1dEluZGljZXMocHNidDogVXR4b1BzYnQsIHJvb3RXYWxsZXROb2RlczogVHJpcGxlPEJJUDMySW50ZXJmYWNlPik6IG51bWJlcltdIHtcbiAgcmV0dXJuIHBzYnQuZGF0YS5vdXRwdXRzLmZsYXRNYXAoKF8sIGkpID0+IChpc1dhbGxldE91dHB1dChwc2J0LCBpLCByb290V2FsbGV0Tm9kZXMpID8gW2ldIDogW10pKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBhbW91bnQgb2YgYWxsIHdhbGxldCBvdXRwdXRzIGluIGEgUFNCVCBmb3IgdGhlIHdhbGxldCByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gcm9vdCBub2Rlcy5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gY2FsY3VsYXRlIGZvci5cbiAqIEBwYXJhbSByb290V2FsbGV0Tm9kZXMgLSBUaGUgcm9vdCBub2RlcyByZXByZXNlbnRpbmcgdGhlIHdhbGxldC5cbiAqIEByZXR1cm5zIFRoZSB0b3RhbCBhbW91bnQgb2Ygd2FsbGV0IG91dHB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb3RhbEFtb3VudE9mV2FsbGV0T3V0cHV0cyhwc2J0OiBVdHhvUHNidCwgcm9vdFdhbGxldE5vZGVzOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+KTogYmlnaW50IHtcbiAgY29uc3QgaW5kaWNlcyA9IGZpbmRXYWxsZXRPdXRwdXRJbmRpY2VzKHBzYnQsIHJvb3RXYWxsZXROb2Rlcyk7XG4gIGNvbnN0IHR4T3V0cHV0cyA9IHBzYnQudHhPdXRwdXRzO1xuICByZXR1cm4gaW5kaWNlcy5yZWR1Y2UoKHN1bSwgaSkgPT4gc3VtICsgdHhPdXRwdXRzW2ldLnZhbHVlLCBCaWdJbnQoMCkpO1xufVxuXG4vKipcbiAqIEZpbmRzIGluZGljZXMgb2YgYWxsIGludGVybmFsIG91dHB1dHMgaW4gYSBQU0JULCBpZGVudGlmaWVkIGFzIG91dHB1dHMgYmVsb25naW5nIHRvIHRoZSB3YWxsZXQncyByb290IG5vZGVzIHdpdGhpbiB0aGUgUFNCVC5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgY29udGFpbmluZyB0aGUgd2FsbGV0J3Mgcm9vdCBub2RlcyBhcyBpbmRpY2F0ZWQgYnkgZ2xvYmFsIFhwdWJzLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgaW5kaWNlcyBvZiBpbnRlcm5hbCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEludGVybmFsT3V0cHV0SW5kaWNlcyhwc2J0OiBVdHhvUHNidCk6IG51bWJlcltdIHtcbiAgY29uc3Qgcm9vdE5vZGVzID0gZ2V0U29ydGVkUm9vdE5vZGVzKHBzYnQpO1xuICByZXR1cm4gZmluZFdhbGxldE91dHB1dEluZGljZXMocHNidCwgcm9vdE5vZGVzKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBhbW91bnQgb2YgYWxsIGludGVybmFsIG91dHB1dHMgaW4gYSBQU0JULCBpZGVudGlmaWVkIGFzIG91dHB1dHMgYmVsb25naW5nIHRvIHRoZSB3YWxsZXQncyByb290IG5vZGVzIHdpdGhpbiB0aGUgUFNCVC5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgY29udGFpbmluZyB0aGUgd2FsbGV0J3Mgcm9vdCBub2RlcyBhcyBpbmRpY2F0ZWQgYnkgZ2xvYmFsIFhwdWJzLlxuICogQHJldHVybnMgVGhlIHRvdGFsIGFtb3VudCBvZiBpbnRlcm5hbCBvdXRwdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG90YWxBbW91bnRPZkludGVybmFsT3V0cHV0cyhwc2J0OiBVdHhvUHNidCk6IGJpZ2ludCB7XG4gIGNvbnN0IHJvb3ROb2RlcyA9IGdldFNvcnRlZFJvb3ROb2Rlcyhwc2J0KTtcbiAgcmV0dXJuIGdldFRvdGFsQW1vdW50T2ZXYWxsZXRPdXRwdXRzKHBzYnQsIHJvb3ROb2Rlcyk7XG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contains helper methods for getting and sorting root nodes from a PSBT.
|
|
3
|
+
*/
|
|
4
|
+
import { UtxoPsbt } from '../../UtxoPsbt';
|
|
5
|
+
import { Triple } from '../../types';
|
|
6
|
+
import { BIP32Interface } from 'bip32';
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when no multi-sig input is found in a PSBT.
|
|
9
|
+
* */
|
|
10
|
+
export declare class ErrorNoMultiSigInputFound extends Error {
|
|
11
|
+
constructor(message: string);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Retrieves unsorted root BIP32Interface nodes from a PSBT if available.
|
|
15
|
+
* @param psbt - The PSBT from which to extract the global Xpubs.
|
|
16
|
+
* @returns An array of BIP32Interface objects or undefined if not available.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getUnsortedRootNodes(psbt: UtxoPsbt): Triple<BIP32Interface> | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Sorts given root nodes based on the script compatibility with the PSBT's multi-sig inputs.
|
|
21
|
+
* @param psbt - The PSBT containing multi-sig inputs.
|
|
22
|
+
* @param rootNodes - Array of root nodes to sort.
|
|
23
|
+
* @returns An array of BIP32Interface objects in the order that matches the multi-sig script.
|
|
24
|
+
*/
|
|
25
|
+
export declare function sortRootNodes(psbt: UtxoPsbt, rootNodes: Triple<BIP32Interface>): Triple<BIP32Interface>;
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves sorted root nodes from a PSBT, ensuring they are ordered according to script compatibility.
|
|
28
|
+
* @param psbt - The PSBT to extract and sort root nodes from.
|
|
29
|
+
* @returns An array of sorted BIP32Interface root nodes.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getSortedRootNodes(psbt: UtxoPsbt): Triple<BIP32Interface>;
|
|
32
|
+
//# sourceMappingURL=RootNodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RootNodes.d.ts","sourceRoot":"","sources":["../../../../../src/bitgo/wallet/psbt/RootNodes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAY,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAgB,cAAc,EAAE,MAAM,OAAO,CAAC;AASrD;;KAEK;AACL,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAG5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,SAAS,CAMvF;AAkGD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAKvG;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAIzE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contains helper methods for getting and sorting root nodes from a PSBT.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ErrorNoMultiSigInputFound = void 0;
|
|
7
|
+
exports.getUnsortedRootNodes = getUnsortedRootNodes;
|
|
8
|
+
exports.sortRootNodes = sortRootNodes;
|
|
9
|
+
exports.getSortedRootNodes = getSortedRootNodes;
|
|
10
|
+
const assert = require("assert");
|
|
11
|
+
const bs58check = require("bs58check");
|
|
12
|
+
const types_1 = require("../../types");
|
|
13
|
+
const bip32_1 = require("bip32");
|
|
14
|
+
const noble_ecc_1 = require("../../../noble_ecc");
|
|
15
|
+
const outputScripts_1 = require("../../outputScripts");
|
|
16
|
+
const transaction_1 = require("../../transaction");
|
|
17
|
+
const Psbt_1 = require("../Psbt");
|
|
18
|
+
/**
|
|
19
|
+
* Error thrown when no multi-sig input is found in a PSBT.
|
|
20
|
+
* */
|
|
21
|
+
class ErrorNoMultiSigInputFound extends Error {
|
|
22
|
+
constructor(message) {
|
|
23
|
+
super(message);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ErrorNoMultiSigInputFound = ErrorNoMultiSigInputFound;
|
|
27
|
+
/**
|
|
28
|
+
* Retrieves unsorted root BIP32Interface nodes from a PSBT if available.
|
|
29
|
+
* @param psbt - The PSBT from which to extract the global Xpubs.
|
|
30
|
+
* @returns An array of BIP32Interface objects or undefined if not available.
|
|
31
|
+
*/
|
|
32
|
+
function getUnsortedRootNodes(psbt) {
|
|
33
|
+
const bip32s = psbt.data.globalMap.globalXpub?.map((xpub) => (0, bip32_1.BIP32Factory)(noble_ecc_1.ecc).fromBase58(bs58check.encode(xpub.extendedPubkey)));
|
|
34
|
+
assert(!bip32s || (0, types_1.isTriple)(bip32s), `Invalid globalXpubs in PSBT. Expected 3 or none. Got ${bip32s?.length}`);
|
|
35
|
+
return bip32s;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Determines if the given public keys' permutation matches a specified script.
|
|
39
|
+
* @param params - Object containing public keys, permutation, script public key, script type, and network.
|
|
40
|
+
* @returns A boolean indicating if the permutation matches the script.
|
|
41
|
+
*/
|
|
42
|
+
function matchesScript({ pubKeys, perm, scriptPubKey, parsedScriptType, network, }) {
|
|
43
|
+
const pubKeysPerm = [pubKeys[perm[0]], pubKeys[perm[1]], pubKeys[perm[2]]];
|
|
44
|
+
const scriptTypes = (0, Psbt_1.toScriptType2Of3s)(parsedScriptType);
|
|
45
|
+
return scriptTypes.some((scriptType) => (0, outputScripts_1.createOutputScript2of3)(pubKeysPerm, scriptType, network).scriptPubKey.equals(scriptPubKey));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Finds the correct order of public keys to match a given script.
|
|
49
|
+
* @param pubKeys - Array of public keys involved in the script.
|
|
50
|
+
* @param scriptPubKey - The script public key to match against.
|
|
51
|
+
* @param parsedScriptType - The parsed script type.
|
|
52
|
+
* @param network - Bitcoin network.
|
|
53
|
+
* @returns The order of public keys that match the script.
|
|
54
|
+
*/
|
|
55
|
+
function findSortOrderOfPubKeys(pubKeys, scriptPubKey, parsedScriptType, network) {
|
|
56
|
+
const permutations = [
|
|
57
|
+
[0, 1, 2],
|
|
58
|
+
[0, 2, 1],
|
|
59
|
+
[1, 0, 2],
|
|
60
|
+
[1, 2, 0],
|
|
61
|
+
[2, 0, 1],
|
|
62
|
+
[2, 1, 0],
|
|
63
|
+
];
|
|
64
|
+
const order = permutations.find((perm) => matchesScript({ pubKeys, perm, scriptPubKey, parsedScriptType, network }));
|
|
65
|
+
assert(order, 'Could not find sort order of multi sig public keys');
|
|
66
|
+
return order;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extracts multi-sig input data, including script type, script public key, and derivation path, from the first relevant PSBT input.
|
|
70
|
+
* @param psbt - The PSBT to extract data from.
|
|
71
|
+
* @returns An object containing the parsed script type, script public key, and derivation path.
|
|
72
|
+
*/
|
|
73
|
+
function getFirstMultiSigInputData(psbt) {
|
|
74
|
+
function getScriptPubKey(input, prevOutIndex) {
|
|
75
|
+
const scriptPubKey = input.witnessUtxo?.script ??
|
|
76
|
+
(input.nonWitnessUtxo
|
|
77
|
+
? (0, transaction_1.createTransactionFromBuffer)(input.nonWitnessUtxo, psbt.network, { amountType: 'bigint' }).outs[prevOutIndex]
|
|
78
|
+
.script
|
|
79
|
+
: undefined);
|
|
80
|
+
assert(scriptPubKey, 'Input scriptPubKey can not be found');
|
|
81
|
+
return scriptPubKey;
|
|
82
|
+
}
|
|
83
|
+
function getDerivationPath(input) {
|
|
84
|
+
const bip32Dv = input?.bip32Derivation ?? input?.tapBip32Derivation;
|
|
85
|
+
assert(bip32Dv?.length, 'Input Bip32Derivation can not be found');
|
|
86
|
+
return bip32Dv[0].path;
|
|
87
|
+
}
|
|
88
|
+
const txInputs = psbt.txInputs;
|
|
89
|
+
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
90
|
+
const input = psbt.data.inputs[i];
|
|
91
|
+
const parsedScriptType = (0, Psbt_1.getPsbtInputScriptType)(input);
|
|
92
|
+
if (parsedScriptType === 'p2shP2pk') {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const scriptPubKey = getScriptPubKey(input, txInputs[i].index);
|
|
96
|
+
const derivationPath = getDerivationPath(input);
|
|
97
|
+
return { parsedScriptType, scriptPubKey, derivationPath };
|
|
98
|
+
}
|
|
99
|
+
throw new ErrorNoMultiSigInputFound('No multi sig input found');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Sorts given root nodes based on the script compatibility with the PSBT's multi-sig inputs.
|
|
103
|
+
* @param psbt - The PSBT containing multi-sig inputs.
|
|
104
|
+
* @param rootNodes - Array of root nodes to sort.
|
|
105
|
+
* @returns An array of BIP32Interface objects in the order that matches the multi-sig script.
|
|
106
|
+
*/
|
|
107
|
+
function sortRootNodes(psbt, rootNodes) {
|
|
108
|
+
const { parsedScriptType, scriptPubKey, derivationPath } = getFirstMultiSigInputData(psbt);
|
|
109
|
+
const pubKeys = rootNodes.map((rootNode) => rootNode.derivePath(derivationPath).publicKey);
|
|
110
|
+
const order = findSortOrderOfPubKeys(pubKeys, scriptPubKey, parsedScriptType, psbt.network);
|
|
111
|
+
return order.map((i) => rootNodes[i]);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Retrieves sorted root nodes from a PSBT, ensuring they are ordered according to script compatibility.
|
|
115
|
+
* @param psbt - The PSBT to extract and sort root nodes from.
|
|
116
|
+
* @returns An array of sorted BIP32Interface root nodes.
|
|
117
|
+
*/
|
|
118
|
+
function getSortedRootNodes(psbt) {
|
|
119
|
+
const unsortedRootNodes = getUnsortedRootNodes(psbt);
|
|
120
|
+
assert(unsortedRootNodes, 'Could not find root nodes in PSBT');
|
|
121
|
+
return sortRootNodes(psbt, unsortedRootNodes);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm9vdE5vZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3dhbGxldC9wc2J0L1Jvb3ROb2Rlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQThCSCxvREFNQztBQXdHRCxzQ0FLQztBQU9ELGdEQUlDO0FBMUpELGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFHdkMsdUNBQStDO0FBQy9DLGlDQUFxRDtBQUNyRCxrREFBbUQ7QUFHbkQsdURBQTZEO0FBRTdELG1EQUFnRTtBQUNoRSxrQ0FBb0U7QUFFcEU7O0tBRUs7QUFDTCxNQUFhLHlCQUEwQixTQUFRLEtBQUs7SUFDbEQsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFKRCw4REFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFjO0lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUMxRCxJQUFBLG9CQUFZLEVBQUMsZUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7SUFDRixNQUFNLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBQSxnQkFBUSxFQUFDLE1BQU0sQ0FBQyxFQUFFLHdEQUF3RCxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQ3JCLE9BQU8sRUFDUCxJQUFJLEVBQ0osWUFBWSxFQUNaLGdCQUFnQixFQUNoQixPQUFPLEdBT1I7SUFDQyxNQUFNLFdBQVcsR0FBbUIsQ0FBQyxPQUFPLENBQUMsSUFB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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRhaW5zIGhlbHBlciBtZXRob2RzIGZvciBnZXR0aW5nIGFuZCBzb3J0aW5nIHJvb3Qgbm9kZXMgZnJvbSBhIFBTQlQuXG4gKi9cblxuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBiczU4Y2hlY2sgZnJvbSAnYnM1OGNoZWNrJztcblxuaW1wb3J0IHsgVXR4b1BzYnQgfSBmcm9tICcuLi8uLi9VdHhvUHNidCc7XG5pbXBvcnQgeyBpc1RyaXBsZSwgVHJpcGxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQklQMzJGYWN0b3J5LCBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIgfSBmcm9tICcuLi8uLi8uLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgUGFyc2VkU2NyaXB0VHlwZTJPZjMgfSBmcm9tICcuLi8uLi9wYXJzZUlucHV0JztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi8uLi8uLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzIH0gZnJvbSAnLi4vLi4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyBQc2J0SW5wdXQgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlciB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IGdldFBzYnRJbnB1dFNjcmlwdFR5cGUsIHRvU2NyaXB0VHlwZTJPZjNzIH0gZnJvbSAnLi4vUHNidCc7XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gbm8gbXVsdGktc2lnIGlucHV0IGlzIGZvdW5kIGluIGEgUFNCVC5cbiAqICovXG5leHBvcnQgY2xhc3MgRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdW5zb3J0ZWQgcm9vdCBCSVAzMkludGVyZmFjZSBub2RlcyBmcm9tIGEgUFNCVCBpZiBhdmFpbGFibGUuXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZ2xvYmFsIFhwdWJzLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgQklQMzJJbnRlcmZhY2Ugb2JqZWN0cyBvciB1bmRlZmluZWQgaWYgbm90IGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuc29ydGVkUm9vdE5vZGVzKHBzYnQ6IFV0eG9Qc2J0KTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGJpcDMycyA9IHBzYnQuZGF0YS5nbG9iYWxNYXAuZ2xvYmFsWHB1Yj8ubWFwKCh4cHViKSA9PlxuICAgIEJJUDMyRmFjdG9yeShlY2NMaWIpLmZyb21CYXNlNTgoYnM1OGNoZWNrLmVuY29kZSh4cHViLmV4dGVuZGVkUHVia2V5KSlcbiAgKTtcbiAgYXNzZXJ0KCFiaXAzMnMgfHwgaXNUcmlwbGUoYmlwMzJzKSwgYEludmFsaWQgZ2xvYmFsWHB1YnMgaW4gUFNCVC4gRXhwZWN0ZWQgMyBvciBub25lLiBHb3QgJHtiaXAzMnM/Lmxlbmd0aH1gKTtcbiAgcmV0dXJuIGJpcDMycztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBwdWJsaWMga2V5cycgcGVybXV0YXRpb24gbWF0Y2hlcyBhIHNwZWNpZmllZCBzY3JpcHQuXG4gKiBAcGFyYW0gcGFyYW1zIC0gT2JqZWN0IGNvbnRhaW5pbmcgcHVibGljIGtleXMsIHBlcm11dGF0aW9uLCBzY3JpcHQgcHVibGljIGtleSwgc2NyaXB0IHR5cGUsIGFuZCBuZXR3b3JrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHBlcm11dGF0aW9uIG1hdGNoZXMgdGhlIHNjcmlwdC5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1NjcmlwdCh7XG4gIHB1YktleXMsXG4gIHBlcm0sXG4gIHNjcmlwdFB1YktleSxcbiAgcGFyc2VkU2NyaXB0VHlwZSxcbiAgbmV0d29yayxcbn06IHtcbiAgcHViS2V5czogQnVmZmVyW107XG4gIHBlcm06IFRyaXBsZTxudW1iZXI+O1xuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcjtcbiAgcGFyc2VkU2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjM7XG4gIG5ldHdvcms6IE5ldHdvcms7XG59KTogYm9vbGVhbiB7XG4gIGNvbnN0IHB1YktleXNQZXJtOiBUcmlwbGU8QnVmZmVyPiA9IFtwdWJLZXlzW3Blcm1bMF1dLCBwdWJLZXlzW3Blcm1bMV1dLCBwdWJLZXlzW3Blcm1bMl1dXTtcbiAgY29uc3Qgc2NyaXB0VHlwZXMgPSB0b1NjcmlwdFR5cGUyT2YzcyhwYXJzZWRTY3JpcHRUeXBlKTtcbiAgcmV0dXJuIHNjcmlwdFR5cGVzLnNvbWUoKHNjcmlwdFR5cGUpID0+XG4gICAgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhwdWJLZXlzUGVybSwgc2NyaXB0VHlwZSwgbmV0d29yaykuc2NyaXB0UHViS2V5LmVxdWFscyhzY3JpcHRQdWJLZXkpXG4gICk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNvcnJlY3Qgb3JkZXIgb2YgcHVibGljIGtleXMgdG8gbWF0Y2ggYSBnaXZlbiBzY3JpcHQuXG4gKiBAcGFyYW0gcHViS2V5cyAtIEFycmF5IG9mIHB1YmxpYyBrZXlzIGludm9sdmVkIGluIHRoZSBzY3JpcHQuXG4gKiBAcGFyYW0gc2NyaXB0UHViS2V5IC0gVGhlIHNjcmlwdCBwdWJsaWMga2V5IHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyc2VkU2NyaXB0VHlwZSAtIFRoZSBwYXJzZWQgc2NyaXB0IHR5cGUuXG4gKiBAcGFyYW0gbmV0d29yayAtIEJpdGNvaW4gbmV0d29yay5cbiAqIEByZXR1cm5zIFRoZSBvcmRlciBvZiBwdWJsaWMga2V5cyB0aGF0IG1hdGNoIHRoZSBzY3JpcHQuXG4gKi9cbmZ1bmN0aW9uIGZpbmRTb3J0T3JkZXJPZlB1YktleXMoXG4gIHB1YktleXM6IFRyaXBsZTxCdWZmZXI+LFxuICBzY3JpcHRQdWJLZXk6IEJ1ZmZlcixcbiAgcGFyc2VkU2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjMsXG4gIG5ldHdvcms6IE5ldHdvcmtcbik6IFRyaXBsZTxudW1iZXI+IHtcbiAgY29uc3QgcGVybXV0YXRpb25zOiBBcnJheTxUcmlwbGU8bnVtYmVyPj4gPSBbXG4gICAgWzAsIDEsIDJdLFxuICAgIFswLCAyLCAxXSxcbiAgICBbMSwgMCwgMl0sXG4gICAgWzEsIDIsIDBdLFxuICAgIFsyLCAwLCAxXSxcbiAgICBbMiwgMSwgMF0sXG4gIF07XG5cbiAgY29uc3Qgb3JkZXIgPSBwZXJtdXRhdGlvbnMuZmluZCgocGVybSkgPT4gbWF0Y2hlc1NjcmlwdCh7IHB1YktleXMsIHBlcm0sIHNjcmlwdFB1YktleSwgcGFyc2VkU2NyaXB0VHlwZSwgbmV0d29yayB9KSk7XG4gIGFzc2VydChvcmRlciwgJ0NvdWxkIG5vdCBmaW5kIHNvcnQgb3JkZXIgb2YgbXVsdGkgc2lnIHB1YmxpYyBrZXlzJyk7XG4gIHJldHVybiBvcmRlcjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBtdWx0aS1zaWcgaW5wdXQgZGF0YSwgaW5jbHVkaW5nIHNjcmlwdCB0eXBlLCBzY3JpcHQgcHVibGljIGtleSwgYW5kIGRlcml2YXRpb24gcGF0aCwgZnJvbSB0aGUgZmlyc3QgcmVsZXZhbnQgUFNCVCBpbnB1dC5cbiAqIEBwYXJhbSBwc2J0IC0gVGhlIFBTQlQgdG8gZXh0cmFjdCBkYXRhIGZyb20uXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyc2VkIHNjcmlwdCB0eXBlLCBzY3JpcHQgcHVibGljIGtleSwgYW5kIGRlcml2YXRpb24gcGF0aC5cbiAqL1xuZnVuY3Rpb24gZ2V0Rmlyc3RNdWx0aVNpZ0lucHV0RGF0YShwc2J0OiBVdHhvUHNidCk6IHtcbiAgcGFyc2VkU2NyaXB0VHlwZTogUGFyc2VkU2NyaXB0VHlwZTJPZjM7XG4gIHNjcmlwdFB1YktleTogQnVmZmVyO1xuICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xufSB7XG4gIGZ1bmN0aW9uIGdldFNjcmlwdFB1YktleShpbnB1dDogUHNidElucHV0LCBwcmV2T3V0SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHNjcmlwdFB1YktleSA9XG4gICAgICBpbnB1dC53aXRuZXNzVXR4bz8uc2NyaXB0ID8/XG4gICAgICAoaW5wdXQubm9uV2l0bmVzc1V0eG9cbiAgICAgICAgPyBjcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoaW5wdXQubm9uV2l0bmVzc1V0eG8sIHBzYnQubmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KS5vdXRzW3ByZXZPdXRJbmRleF1cbiAgICAgICAgICAgIC5zY3JpcHRcbiAgICAgICAgOiB1bmRlZmluZWQpO1xuICAgIGFzc2VydChzY3JpcHRQdWJLZXksICdJbnB1dCBzY3JpcHRQdWJLZXkgY2FuIG5vdCBiZSBmb3VuZCcpO1xuICAgIHJldHVybiBzY3JpcHRQdWJLZXk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREZXJpdmF0aW9uUGF0aChpbnB1dDogUHNidElucHV0KSB7XG4gICAgY29uc3QgYmlwMzJEdiA9IGlucHV0Py5iaXAzMkRlcml2YXRpb24gPz8gaW5wdXQ/LnRhcEJpcDMyRGVyaXZhdGlvbjtcbiAgICBhc3NlcnQoYmlwMzJEdj8ubGVuZ3RoLCAnSW5wdXQgQmlwMzJEZXJpdmF0aW9uIGNhbiBub3QgYmUgZm91bmQnKTtcbiAgICByZXR1cm4gYmlwMzJEdlswXS5wYXRoO1xuICB9XG5cbiAgY29uc3QgdHhJbnB1dHMgPSBwc2J0LnR4SW5wdXRzO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGlucHV0ID0gcHNidC5kYXRhLmlucHV0c1tpXTtcbiAgICBjb25zdCBwYXJzZWRTY3JpcHRUeXBlID0gZ2V0UHNidElucHV0U2NyaXB0VHlwZShpbnB1dCk7XG4gICAgaWYgKHBhcnNlZFNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBzY3JpcHRQdWJLZXkgPSBnZXRTY3JpcHRQdWJLZXkoaW5wdXQsIHR4SW5wdXRzW2ldLmluZGV4KTtcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9IGdldERlcml2YXRpb25QYXRoKGlucHV0KTtcbiAgICByZXR1cm4geyBwYXJzZWRTY3JpcHRUeXBlLCBzY3JpcHRQdWJLZXksIGRlcml2YXRpb25QYXRoIH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCgnTm8gbXVsdGkgc2lnIGlucHV0IGZvdW5kJyk7XG59XG5cbi8qKlxuICogU29ydHMgZ2l2ZW4gcm9vdCBub2RlcyBiYXNlZCBvbiB0aGUgc2NyaXB0IGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUFNCVCdzIG11bHRpLXNpZyBpbnB1dHMuXG4gKiBAcGFyYW0gcHNidCAtIFRoZSBQU0JUIGNvbnRhaW5pbmcgbXVsdGktc2lnIGlucHV0cy5cbiAqIEBwYXJhbSByb290Tm9kZXMgLSBBcnJheSBvZiByb290IG5vZGVzIHRvIHNvcnQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBCSVAzMkludGVyZmFjZSBvYmplY3RzIGluIHRoZSBvcmRlciB0aGF0IG1hdGNoZXMgdGhlIG11bHRpLXNpZyBzY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0Um9vdE5vZGVzKHBzYnQ6IFV0eG9Qc2J0LCByb290Tm9kZXM6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4pOiBUcmlwbGU8QklQMzJJbnRlcmZhY2U+IHtcbiAgY29uc3QgeyBwYXJzZWRTY3JpcHRUeXBlLCBzY3JpcHRQdWJLZXksIGRlcml2YXRpb25QYXRoIH0gPSBnZXRGaXJzdE11bHRpU2lnSW5wdXREYXRhKHBzYnQpO1xuICBjb25zdCBwdWJLZXlzID0gcm9vdE5vZGVzLm1hcCgocm9vdE5vZGUpID0+IHJvb3ROb2RlLmRlcml2ZVBhdGgoZGVyaXZhdGlvblBhdGgpLnB1YmxpY0tleSkgYXMgVHJpcGxlPEJ1ZmZlcj47XG4gIGNvbnN0IG9yZGVyID0gZmluZFNvcnRPcmRlck9mUHViS2V5cyhwdWJLZXlzLCBzY3JpcHRQdWJLZXksIHBhcnNlZFNjcmlwdFR5cGUsIHBzYnQubmV0d29yayk7XG4gIHJldHVybiBvcmRlci5tYXAoKGkpID0+IHJvb3ROb2Rlc1tpXSkgYXMgVHJpcGxlPEJJUDMySW50ZXJmYWNlPjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgc29ydGVkIHJvb3Qgbm9kZXMgZnJvbSBhIFBTQlQsIGVuc3VyaW5nIHRoZXkgYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHNjcmlwdCBjb21wYXRpYmlsaXR5LlxuICogQHBhcmFtIHBzYnQgLSBUaGUgUFNCVCB0byBleHRyYWN0IGFuZCBzb3J0IHJvb3Qgbm9kZXMgZnJvbS5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHNvcnRlZCBCSVAzMkludGVyZmFjZSByb290IG5vZGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGVkUm9vdE5vZGVzKHBzYnQ6IFV0eG9Qc2J0KTogVHJpcGxlPEJJUDMySW50ZXJmYWNlPiB7XG4gIGNvbnN0IHVuc29ydGVkUm9vdE5vZGVzID0gZ2V0VW5zb3J0ZWRSb290Tm9kZXMocHNidCk7XG4gIGFzc2VydCh1bnNvcnRlZFJvb3ROb2RlcywgJ0NvdWxkIG5vdCBmaW5kIHJvb3Qgbm9kZXMgaW4gUFNCVCcpO1xuICByZXR1cm4gc29ydFJvb3ROb2Rlcyhwc2J0LCB1bnNvcnRlZFJvb3ROb2Rlcyk7XG59XG4iXX0=
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
/**
|
|
3
2
|
* Transaction (de)serialization helpers.
|
|
4
3
|
* Only supports full transparent transactions without shielded inputs or outputs.
|
|
@@ -9,7 +8,7 @@
|
|
|
9
8
|
import { TxInput, TxOutput } from 'bitcoinjs-lib';
|
|
10
9
|
import { BufferReader, BufferWriter } from 'bitcoinjs-lib/src/bufferutils';
|
|
11
10
|
import { ZcashTransaction } from './ZcashTransaction';
|
|
12
|
-
export declare const VALUE_INT64_ZERO: Buffer
|
|
11
|
+
export declare const VALUE_INT64_ZERO: Buffer<ArrayBuffer>;
|
|
13
12
|
export declare function readInputs(bufferReader: BufferReader): TxInput[];
|
|
14
13
|
export declare function readOutputs<TNumber extends number | bigint>(bufferReader: BufferReader, amountType?: 'number' | 'bigint'): TxOutput<TNumber>[];
|
|
15
14
|
export declare function readEmptyVector(bufferReader: BufferReader): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZcashBufferutils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashBufferutils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ZcashBufferutils.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashBufferutils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAA+B,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,eAAO,MAAM,gBAAgB,qBAAyC,CAAC;AAEvE,wBAAgB,UAAU,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,EAAE,CAahE;AAED,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACzD,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAUrB;AAED,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAKhE;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAOvE;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIxE;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIvE;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,CAIzE;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,IAAI,CAyBN;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,UAAU,GAAE,QAAQ,GAAG,QAAmB,GACzC,IAAI,CAaN;AAED,wBAAgB,WAAW,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAQ5E;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,GACxB,IAAI,CAWN;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxD,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC5B,IAAI,CAoBN;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACxD,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAC5B,IAAI,CAYN"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.VALUE_INT64_ZERO = void 0;
|
|
4
|
+
exports.readInputs = readInputs;
|
|
5
|
+
exports.readOutputs = readOutputs;
|
|
6
|
+
exports.readEmptyVector = readEmptyVector;
|
|
7
|
+
exports.readEmptyOrchardBundle = readEmptyOrchardBundle;
|
|
8
|
+
exports.writeEmptyOrchardBundle = writeEmptyOrchardBundle;
|
|
9
|
+
exports.readEmptySaplingBundle = readEmptySaplingBundle;
|
|
10
|
+
exports.writeEmptySamplingBundle = writeEmptySamplingBundle;
|
|
11
|
+
exports.fromBufferV4 = fromBufferV4;
|
|
12
|
+
exports.fromBufferV5 = fromBufferV5;
|
|
13
|
+
exports.writeInputs = writeInputs;
|
|
14
|
+
exports.writeOutputs = writeOutputs;
|
|
15
|
+
exports.toBufferV4 = toBufferV4;
|
|
16
|
+
exports.toBufferV5 = toBufferV5;
|
|
4
17
|
const ZcashTransaction_1 = require("./ZcashTransaction");
|
|
5
18
|
exports.VALUE_INT64_ZERO = Buffer.from('0000000000000000', 'hex');
|
|
6
19
|
function readInputs(bufferReader) {
|
|
@@ -17,7 +30,6 @@ function readInputs(bufferReader) {
|
|
|
17
30
|
}
|
|
18
31
|
return ins;
|
|
19
32
|
}
|
|
20
|
-
exports.readInputs = readInputs;
|
|
21
33
|
function readOutputs(bufferReader, amountType = 'number') {
|
|
22
34
|
const voutLen = bufferReader.readVarInt();
|
|
23
35
|
const outs = [];
|
|
@@ -29,14 +41,12 @@ function readOutputs(bufferReader, amountType = 'number') {
|
|
|
29
41
|
}
|
|
30
42
|
return outs;
|
|
31
43
|
}
|
|
32
|
-
exports.readOutputs = readOutputs;
|
|
33
44
|
function readEmptyVector(bufferReader) {
|
|
34
45
|
const n = bufferReader.readVarInt();
|
|
35
46
|
if (n !== 0) {
|
|
36
47
|
throw new ZcashTransaction_1.UnsupportedTransactionError(`expected empty vector`);
|
|
37
48
|
}
|
|
38
49
|
}
|
|
39
|
-
exports.readEmptyVector = readEmptyVector;
|
|
40
50
|
function readEmptyOrchardBundle(bufferReader) {
|
|
41
51
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/orchard.h#L66
|
|
42
52
|
// https://github.com/zcash/librustzcash/blob/edcde252de221d4851f1e5145306c2caf95453bc/zcash_primitives/src/transaction/components/orchard.rs#L36
|
|
@@ -45,25 +55,21 @@ function readEmptyOrchardBundle(bufferReader) {
|
|
|
45
55
|
throw new ZcashTransaction_1.UnsupportedTransactionError(`expected byte 0x00`);
|
|
46
56
|
}
|
|
47
57
|
}
|
|
48
|
-
exports.readEmptyOrchardBundle = readEmptyOrchardBundle;
|
|
49
58
|
function writeEmptyOrchardBundle(bufferWriter) {
|
|
50
59
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/orchard.h#L66
|
|
51
60
|
// https://github.com/zcash/librustzcash/blob/edcde252de221d4851f1e5145306c2caf95453bc/zcash_primitives/src/transaction/components/orchard.rs#L201
|
|
52
61
|
bufferWriter.writeUInt8(0);
|
|
53
62
|
}
|
|
54
|
-
exports.writeEmptyOrchardBundle = writeEmptyOrchardBundle;
|
|
55
63
|
function readEmptySaplingBundle(bufferReader) {
|
|
56
64
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L283
|
|
57
65
|
readEmptyVector(bufferReader) /* vSpendsSapling */;
|
|
58
66
|
readEmptyVector(bufferReader) /* vOutputsSapling */;
|
|
59
67
|
}
|
|
60
|
-
exports.readEmptySaplingBundle = readEmptySaplingBundle;
|
|
61
68
|
function writeEmptySamplingBundle(bufferWriter) {
|
|
62
69
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L283
|
|
63
70
|
bufferWriter.writeVarInt(0) /* vSpendsSapling */;
|
|
64
71
|
bufferWriter.writeVarInt(0) /* vOutputsSapling */;
|
|
65
72
|
}
|
|
66
|
-
exports.writeEmptySamplingBundle = writeEmptySamplingBundle;
|
|
67
73
|
function fromBufferV4(bufferReader, tx, amountType = 'number') {
|
|
68
74
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L855-L857
|
|
69
75
|
tx.ins = readInputs(bufferReader);
|
|
@@ -86,7 +92,6 @@ function fromBufferV4(bufferReader, tx, amountType = 'number') {
|
|
|
86
92
|
readEmptyVector(bufferReader) /* vJoinSplit */;
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
|
-
exports.fromBufferV4 = fromBufferV4;
|
|
90
95
|
function fromBufferV5(bufferReader, tx, amountType = 'number') {
|
|
91
96
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L815
|
|
92
97
|
tx.consensusBranchId = bufferReader.readUInt32();
|
|
@@ -99,7 +104,6 @@ function fromBufferV5(bufferReader, tx, amountType = 'number') {
|
|
|
99
104
|
readEmptySaplingBundle(bufferReader);
|
|
100
105
|
readEmptyOrchardBundle(bufferReader);
|
|
101
106
|
}
|
|
102
|
-
exports.fromBufferV5 = fromBufferV5;
|
|
103
107
|
function writeInputs(bufferWriter, ins) {
|
|
104
108
|
bufferWriter.writeVarInt(ins.length);
|
|
105
109
|
ins.forEach(function (txIn) {
|
|
@@ -109,7 +113,6 @@ function writeInputs(bufferWriter, ins) {
|
|
|
109
113
|
bufferWriter.writeUInt32(txIn.sequence);
|
|
110
114
|
});
|
|
111
115
|
}
|
|
112
|
-
exports.writeInputs = writeInputs;
|
|
113
116
|
function writeOutputs(bufferWriter, outs) {
|
|
114
117
|
bufferWriter.writeVarInt(outs.length);
|
|
115
118
|
outs.forEach(function (txOut) {
|
|
@@ -122,7 +125,6 @@ function writeOutputs(bufferWriter, outs) {
|
|
|
122
125
|
bufferWriter.writeVarSlice(txOut.script);
|
|
123
126
|
});
|
|
124
127
|
}
|
|
125
|
-
exports.writeOutputs = writeOutputs;
|
|
126
128
|
function toBufferV4(bufferWriter, tx) {
|
|
127
129
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L1083
|
|
128
130
|
writeInputs(bufferWriter, tx.ins);
|
|
@@ -140,7 +142,6 @@ function toBufferV4(bufferWriter, tx) {
|
|
|
140
142
|
bufferWriter.writeVarInt(0); // joinsSplits length
|
|
141
143
|
}
|
|
142
144
|
}
|
|
143
|
-
exports.toBufferV4 = toBufferV4;
|
|
144
145
|
function toBufferV5(bufferWriter, tx) {
|
|
145
146
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L825-L826
|
|
146
147
|
bufferWriter.writeUInt32(tx.consensusBranchId);
|
|
@@ -153,5 +154,4 @@ function toBufferV5(bufferWriter, tx) {
|
|
|
153
154
|
// https://github.com/zcash/zcash/blob/v4.5.1/src/primitives/transaction.h#L1081
|
|
154
155
|
writeEmptyOrchardBundle(bufferWriter);
|
|
155
156
|
}
|
|
156
|
-
exports.toBufferV5 = toBufferV5;
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hCdWZmZXJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby96Y2FzaC9aY2FzaEJ1ZmZlcnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLHlEQUFtRjtBQUV0RSxRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFdkUsU0FBZ0IsVUFBVSxDQUFDLFlBQTBCO0lBQ25ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtRQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsSUFBSSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEtBQUssRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFO1lBQ25DLFFBQVEsRUFBRSxZQUFZLENBQUMsVUFBVSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFiRCxnQ0FhQztBQUVELFNBQWdCLFdBQVcsQ0FDekIsWUFBMEIsRUFDMUIsYUFBa0MsUUFBUTtJQUUxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUMsTUFBTSxJQUFJLEdBQXdCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDUixLQUFLLEVBQUUs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QUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLFlBQVksQ0FBVSxZQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdDLGdGQUFnRjtJQUNoRix3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxnRkFBZ0Y7SUFDaEYsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQWZELGdDQWVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUcmFuc2FjdGlvbiAoZGUpc2VyaWFsaXphdGlvbiBoZWxwZXJzLlxuICogT25seSBzdXBwb3J0cyBmdWxsIHRyYW5zcGFyZW50IHRyYW5zYWN0aW9ucyB3aXRob3V0IHNoaWVsZGVkIGlucHV0cyBvciBvdXRwdXRzLlxuICpcbiAqIFJlZmVyZW5jZXM6XG4gKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w3NzFcbiAqL1xuaW1wb3J0IHsgVHhJbnB1dCwgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IEJ1ZmZlclJlYWRlciwgQnVmZmVyV3JpdGVyIH0gZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvYnVmZmVydXRpbHMnO1xuXG5pbXBvcnQgeyBVbnN1cHBvcnRlZFRyYW5zYWN0aW9uRXJyb3IsIFpjYXNoVHJhbnNhY3Rpb24gfSBmcm9tICcuL1pjYXNoVHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgVkFMVUVfSU5UNjRfWkVSTyA9IEJ1ZmZlci5mcm9tKCcwMDAwMDAwMDAwMDAwMDAwJywgJ2hleCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVhZElucHV0cyhidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcik6IFR4SW5wdXRbXSB7XG4gIGNvbnN0IHZpbkxlbiA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gIGNvbnN0IGluczogVHhJbnB1dFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmluTGVuOyArK2kpIHtcbiAgICBpbnMucHVzaCh7XG4gICAgICBoYXNoOiBidWZmZXJSZWFkZXIucmVhZFNsaWNlKDMyKSxcbiAgICAgIGluZGV4OiBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpLFxuICAgICAgc2NyaXB0OiBidWZmZXJSZWFkZXIucmVhZFZhclNsaWNlKCksXG4gICAgICBzZXF1ZW5jZTogYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKSxcbiAgICAgIHdpdG5lc3M6IFtdLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBpbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkT3V0cHV0czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIsXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogVHhPdXRwdXQ8VE51bWJlcj5bXSB7XG4gIGNvbnN0IHZvdXRMZW4gPSBidWZmZXJSZWFkZXIucmVhZFZhckludCgpO1xuICBjb25zdCBvdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdm91dExlbjsgKytpKSB7XG4gICAgb3V0cy5wdXNoKHtcbiAgICAgIHZhbHVlOiAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcgPyBidWZmZXJSZWFkZXIucmVhZFVJbnQ2NEJpZ0ludCgpIDogYnVmZmVyUmVhZGVyLnJlYWRVSW50NjQoKSkgYXMgVE51bWJlcixcbiAgICAgIHNjcmlwdDogYnVmZmVyUmVhZGVyLnJlYWRWYXJTbGljZSgpLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogdm9pZCB7XG4gIGNvbnN0IG4gPSBidWZmZXJSZWFkZXIucmVhZFZhckludCgpO1xuICBpZiAobiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFRyYW5zYWN0aW9uRXJyb3IoYGV4cGVjdGVkIGVtcHR5IHZlY3RvcmApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRW1wdHlPcmNoYXJkQnVuZGxlKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy9vcmNoYXJkLmgjTDY2XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC9saWJydXN0emNhc2gvYmxvYi9lZGNkZTI1MmRlMjIxZDQ4NTFmMWU1MTQ1MzA2YzJjYWY5NTQ1M2JjL3pjYXNoX3ByaW1pdGl2ZXMvc3JjL3RyYW5zYWN0aW9uL2NvbXBvbmVudHMvb3JjaGFyZC5ycyNMMzZcbiAgY29uc3QgdiA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDgoKTtcbiAgaWYgKHYgIT09IDB4MDApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRUcmFuc2FjdGlvbkVycm9yKGBleHBlY3RlZCBieXRlIDB4MDBgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyV3JpdGVyOiBCdWZmZXJXcml0ZXIpOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL29yY2hhcmQuaCNMNjZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL2xpYnJ1c3R6Y2FzaC9ibG9iL2VkY2RlMjUyZGUyMjFkNDg1MWYxZTUxNDUzMDZjMmNhZjk1NDUzYmMvemNhc2hfcHJpbWl0aXZlcy9zcmMvdHJhbnNhY3Rpb24vY29tcG9uZW50cy9vcmNoYXJkLnJzI0wyMDFcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDgoMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRW1wdHlTYXBsaW5nQnVuZGxlKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wyODNcbiAgcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcikgLyogdlNwZW5kc1NhcGxpbmcgKi87XG4gIHJlYWRFbXB0eVZlY3RvcihidWZmZXJSZWFkZXIpIC8qIHZPdXRwdXRzU2FwbGluZyAqLztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRW1wdHlTYW1wbGluZ0J1bmRsZShidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMMjgzXG4gIGJ1ZmZlcldyaXRlci53cml0ZVZhckludCgwKSAvKiB2U3BlbmRzU2FwbGluZyAqLztcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApIC8qIHZPdXRwdXRzU2FwbGluZyAqLztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21CdWZmZXJWNDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIsXG4gIHR4OiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODU1LUw4NTdcbiAgdHguaW5zID0gcmVhZElucHV0cyhidWZmZXJSZWFkZXIpO1xuICB0eC5vdXRzID0gcmVhZE91dHB1dHM8VE51bWJlcj4oYnVmZmVyUmVhZGVyLCBhbW91bnRUeXBlKTtcbiAgdHgubG9ja3RpbWUgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuXG4gIGlmICh0eC5pc092ZXJ3aW50ZXJDb21wYXRpYmxlKCkpIHtcbiAgICB0eC5leHBpcnlIZWlnaHQgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuICB9XG5cbiAgaWYgKHR4LmlzU2FwbGluZ0NvbXBhdGlibGUoKSkge1xuICAgIGNvbnN0IHZhbHVlQmFsYW5jZSA9IGJ1ZmZlclJlYWRlci5yZWFkU2xpY2UoOCk7XG4gICAgaWYgKCF2YWx1ZUJhbGFuY2UuZXF1YWxzKFZBTFVFX0lOVDY0X1pFUk8pKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVHJhbnNhY3Rpb25FcnJvcihgdmFsdWVCYWxhbmNlIG11c3QgYmUgemVyb2ApO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4NjNcbiAgICByZWFkRW1wdHlTYXBsaW5nQnVuZGxlKGJ1ZmZlclJlYWRlcik7XG4gIH1cblxuICBpZiAodHguc3VwcG9ydHNKb2luU3BsaXRzKCkpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODY5XG4gICAgcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcikgLyogdkpvaW5TcGxpdCAqLztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUJ1ZmZlclY1PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcixcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4MTVcbiAgdHguY29uc2Vuc3VzQnJhbmNoSWQgPSBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpO1xuICB0eC5sb2NrdGltZSA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gIHR4LmV4cGlyeUhlaWdodCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDgyOFxuICB0eC5pbnMgPSByZWFkSW5wdXRzKGJ1ZmZlclJlYWRlcik7XG4gIHR4Lm91dHMgPSByZWFkT3V0cHV0czxUTnVtYmVyPihidWZmZXJSZWFkZXIsIGFtb3VudFR5cGUpO1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4MzVcbiAgcmVhZEVtcHR5U2FwbGluZ0J1bmRsZShidWZmZXJSZWFkZXIpO1xuICByZWFkRW1wdHlPcmNoYXJkQnVuZGxlKGJ1ZmZlclJlYWRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUlucHV0cyhidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlciwgaW5zOiBUeElucHV0W10pOiB2b2lkIHtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KGlucy5sZW5ndGgpO1xuICBpbnMuZm9yRWFjaChmdW5jdGlvbiAodHhJbikge1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKHR4SW4uaGFzaCk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4SW4uaW5kZXgpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhclNsaWNlKHR4SW4uc2NyaXB0KTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5zZXF1ZW5jZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcixcbiAgb3V0czogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogdm9pZCB7XG4gIGJ1ZmZlcldyaXRlci53cml0ZVZhckludChvdXRzLmxlbmd0aCk7XG4gIG91dHMuZm9yRWFjaChmdW5jdGlvbiAodHhPdXQpIHtcbiAgICBpZiAoKHR4T3V0IGFzIGFueSkudmFsdWVCdWZmZXIpIHtcbiAgICAgIGJ1ZmZlcldyaXRlci53cml0ZVNsaWNlKCh0eE91dCBhcyBhbnkpLnZhbHVlQnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDY0KHR4T3V0LnZhbHVlKTtcbiAgICB9XG5cbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJTbGljZSh0eE91dC5zY3JpcHQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQnVmZmVyVjQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLFxuICB0eDogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wxMDgzXG4gIHdyaXRlSW5wdXRzKGJ1ZmZlcldyaXRlciwgdHguaW5zKTtcbiAgd3JpdGVPdXRwdXRzPFROdW1iZXI+KGJ1ZmZlcldyaXRlciwgdHgub3V0cyk7XG5cbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmxvY2t0aW1lKTtcblxuICBpZiAodHguaXNPdmVyd2ludGVyQ29tcGF0aWJsZSgpKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmV4cGlyeUhlaWdodCk7XG4gIH1cblxuICBpZiAodHguaXNTYXBsaW5nQ29tcGF0aWJsZSgpKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UoVkFMVUVfSU5UNjRfWkVSTyk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApOyAvLyB2U2hpZWxkZWRTcGVuZExlbmd0aFxuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhckludCgwKTsgLy8gdlNoaWVsZGVkT3V0cHV0TGVuZ3RoXG4gIH1cblxuICBpZiAodHguc3VwcG9ydHNKb2luU3BsaXRzKCkpIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoMCk7IC8vIGpvaW5zU3BsaXRzIGxlbmd0aFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0J1ZmZlclY1PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcixcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj5cbik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODI1LUw4MjZcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmNvbnNlbnN1c0JyYW5jaElkKTtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmxvY2t0aW1lKTtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4LmV4cGlyeUhlaWdodCk7XG4gIHdyaXRlSW5wdXRzKGJ1ZmZlcldyaXRlciwgdHguaW5zKTtcbiAgd3JpdGVPdXRwdXRzPFROdW1iZXI+KGJ1ZmZlcldyaXRlciwgdHgub3V0cyk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDEwNjNcbiAgd3JpdGVFbXB0eVNhbXBsaW5nQnVuZGxlKGJ1ZmZlcldyaXRlcik7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wxMDgxXG4gIHdyaXRlRW1wdHlPcmNoYXJkQnVuZGxlKGJ1ZmZlcldyaXRlcik7XG59XG4iXX0=
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hCdWZmZXJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby96Y2FzaC9aY2FzaEJ1ZmZlcnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLGdDQWFDO0FBRUQsa0NBYUM7QUFFRCwwQ0FLQztBQUVELHdEQU9DO0FBRUQsMERBSUM7QUFFRCx3REFJQztBQUVELDREQUlDO0FBRUQsb0NBNkJDO0FBRUQsb0NBaUJDO0FBRUQsa0NBUUM7QUFFRCxvQ0FjQztBQUVELGdDQXVCQztBQUVELGdDQWVDO0FBeExELHlEQUFtRjtBQUV0RSxRQUFBLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFdkUsU0FBZ0IsVUFBVSxDQUFDLFlBQTBCO0lBQ25ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEdBQUcsR0FBYyxFQUFFLENBQUM7SUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDaEMsTUFBTSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUU7WUFDbkMsUUFBUSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUU7WUFDbkMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUN6QixZQUEwQixFQUMxQixhQUFrQyxRQUFRO0lBRTFDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FB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LENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO0lBQ3BELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUN4QixZQUEwQixFQUMxQixFQUE2QjtJQUU3QixvRkFBb0Y7SUFDcEYsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxXQUFXLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxZQUFZLENBQVUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3QyxnRkFBZ0Y7SUFDaEYsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsZ0ZBQWdGO0lBQ2hGLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zYWN0aW9uIChkZSlzZXJpYWxpemF0aW9uIGhlbHBlcnMuXG4gKiBPbmx5IHN1cHBvcnRzIGZ1bGwgdHJhbnNwYXJlbnQgdHJhbnNhY3Rpb25zIHdpdGhvdXQgc2hpZWxkZWQgaW5wdXRzIG9yIG91dHB1dHMuXG4gKlxuICogUmVmZXJlbmNlczpcbiAqIC0gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDc3MVxuICovXG5pbXBvcnQgeyBUeElucHV0LCBUeE91dHB1dCB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgQnVmZmVyUmVhZGVyLCBCdWZmZXJXcml0ZXIgfSBmcm9tICdiaXRjb2luanMtbGliL3NyYy9idWZmZXJ1dGlscyc7XG5cbmltcG9ydCB7IFVuc3VwcG9ydGVkVHJhbnNhY3Rpb25FcnJvciwgWmNhc2hUcmFuc2FjdGlvbiB9IGZyb20gJy4vWmNhc2hUcmFuc2FjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBWQUxVRV9JTlQ2NF9aRVJPID0gQnVmZmVyLmZyb20oJzAwMDAwMDAwMDAwMDAwMDAnLCAnaGV4Jyk7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkSW5wdXRzKGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyKTogVHhJbnB1dFtdIHtcbiAgY29uc3QgdmluTGVuID0gYnVmZmVyUmVhZGVyLnJlYWRWYXJJbnQoKTtcbiAgY29uc3QgaW5zOiBUeElucHV0W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aW5MZW47ICsraSkge1xuICAgIGlucy5wdXNoKHtcbiAgICAgIGhhc2g6IGJ1ZmZlclJlYWRlci5yZWFkU2xpY2UoMzIpLFxuICAgICAgaW5kZXg6IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCksXG4gICAgICBzY3JpcHQ6IGJ1ZmZlclJlYWRlci5yZWFkVmFyU2xpY2UoKSxcbiAgICAgIHNlcXVlbmNlOiBidWZmZXJSZWFkZXIucmVhZFVJbnQzMigpLFxuICAgICAgd2l0bmVzczogW10sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIGlucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRPdXRwdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcixcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiBUeE91dHB1dDxUTnVtYmVyPltdIHtcbiAgY29uc3Qgdm91dExlbiA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gIGNvbnN0IG91dHM6IFR4T3V0cHV0PFROdW1iZXI+W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2b3V0TGVuOyArK2kpIHtcbiAgICBvdXRzLnB1c2goe1xuICAgICAgdmFsdWU6IChhbW91bnRUeXBlID09PSAnYmlnaW50JyA/IGJ1ZmZlclJlYWRlci5yZWFkVUludDY0QmlnSW50KCkgOiBidWZmZXJSZWFkZXIucmVhZFVJbnQ2NCgpKSBhcyBUTnVtYmVyLFxuICAgICAgc2NyaXB0OiBidWZmZXJSZWFkZXIucmVhZFZhclNsaWNlKCksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkRW1wdHlWZWN0b3IoYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIpOiB2b2lkIHtcbiAgY29uc3QgbiA9IGJ1ZmZlclJlYWRlci5yZWFkVmFySW50KCk7XG4gIGlmIChuICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkVHJhbnNhY3Rpb25FcnJvcihgZXhwZWN0ZWQgZW1wdHkgdmVjdG9yYCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIpOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL29yY2hhcmQuaCNMNjZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL2xpYnJ1c3R6Y2FzaC9ibG9iL2VkY2RlMjUyZGUyMjFkNDg1MWYxZTUxNDUzMDZjMmNhZjk1NDUzYmMvemNhc2hfcHJpbWl0aXZlcy9zcmMvdHJhbnNhY3Rpb24vY29tcG9uZW50cy9vcmNoYXJkLnJzI0wzNlxuICBjb25zdCB2ID0gYnVmZmVyUmVhZGVyLnJlYWRVSW50OCgpO1xuICBpZiAodiAhPT0gMHgwMCkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFRyYW5zYWN0aW9uRXJyb3IoYGV4cGVjdGVkIGJ5dGUgMHgwMGApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUVtcHR5T3JjaGFyZEJ1bmRsZShidWZmZXJXcml0ZXI6IEJ1ZmZlcldyaXRlcik6IHZvaWQge1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvb3JjaGFyZC5oI0w2NlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvbGlicnVzdHpjYXNoL2Jsb2IvZWRjZGUyNTJkZTIyMWQ0ODUxZjFlNTE0NTMwNmMyY2FmOTU0NTNiYy96Y2FzaF9wcmltaXRpdmVzL3NyYy90cmFuc2FjdGlvbi9jb21wb25lbnRzL29yY2hhcmQucnMjTDIwMVxuICBidWZmZXJXcml0ZXIud3JpdGVVSW50OCgwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRFbXB0eVNhcGxpbmdCdW5kbGUoYnVmZmVyUmVhZGVyOiBCdWZmZXJSZWFkZXIpOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDI4M1xuICByZWFkRW1wdHlWZWN0b3IoYnVmZmVyUmVhZGVyKSAvKiB2U3BlbmRzU2FwbGluZyAqLztcbiAgcmVhZEVtcHR5VmVjdG9yKGJ1ZmZlclJlYWRlcikgLyogdk91dHB1dHNTYXBsaW5nICovO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVFbXB0eVNhbXBsaW5nQnVuZGxlKGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0wyODNcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApIC8qIHZTcGVuZHNTYXBsaW5nICovO1xuICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoMCkgLyogdk91dHB1dHNTYXBsaW5nICovO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUJ1ZmZlclY0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBidWZmZXJSZWFkZXI6IEJ1ZmZlclJlYWRlcixcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJ1xuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4NTUtTDg1N1xuICB0eC5pbnMgPSByZWFkSW5wdXRzKGJ1ZmZlclJlYWRlcik7XG4gIHR4Lm91dHMgPSByZWFkT3V0cHV0czxUTnVtYmVyPihidWZmZXJSZWFkZXIsIGFtb3VudFR5cGUpO1xuICB0eC5sb2NrdGltZSA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG5cbiAgaWYgKHR4LmlzT3ZlcndpbnRlckNvbXBhdGlibGUoKSkge1xuICAgIHR4LmV4cGlyeUhlaWdodCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gIH1cblxuICBpZiAodHguaXNTYXBsaW5nQ29tcGF0aWJsZSgpKSB7XG4gICAgY29uc3QgdmFsdWVCYWxhbmNlID0gYnVmZmVyUmVhZGVyLnJlYWRTbGljZSg4KTtcbiAgICBpZiAoIXZhbHVlQmFsYW5jZS5lcXVhbHMoVkFMVUVfSU5UNjRfWkVSTykpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRUcmFuc2FjdGlvbkVycm9yKGB2YWx1ZUJhbGFuY2UgbXVzdCBiZSB6ZXJvYCk7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDg2M1xuICAgIHJlYWRFbXB0eVNhcGxpbmdCdW5kbGUoYnVmZmVyUmVhZGVyKTtcbiAgfVxuXG4gIGlmICh0eC5zdXBwb3J0c0pvaW5TcGxpdHMoKSkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4NjlcbiAgICByZWFkRW1wdHlWZWN0b3IoYnVmZmVyUmVhZGVyKSAvKiB2Sm9pblNwbGl0ICovO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQnVmZmVyVjU8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlclJlYWRlcjogQnVmZmVyUmVhZGVyLFxuICB0eDogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JyA9ICdudW1iZXInXG4pOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDgxNVxuICB0eC5jb25zZW5zdXNCcmFuY2hJZCA9IGJ1ZmZlclJlYWRlci5yZWFkVUludDMyKCk7XG4gIHR4LmxvY2t0aW1lID0gYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKTtcbiAgdHguZXhwaXJ5SGVpZ2h0ID0gYnVmZmVyUmVhZGVyLnJlYWRVSW50MzIoKTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMODI4XG4gIHR4LmlucyA9IHJlYWRJbnB1dHMoYnVmZmVyUmVhZGVyKTtcbiAgdHgub3V0cyA9IHJlYWRPdXRwdXRzPFROdW1iZXI+KGJ1ZmZlclJlYWRlciwgYW1vdW50VHlwZSk7XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDgzNVxuICByZWFkRW1wdHlTYXBsaW5nQnVuZGxlKGJ1ZmZlclJlYWRlcik7XG4gIHJlYWRFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyUmVhZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlSW5wdXRzKGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLCBpbnM6IFR4SW5wdXRbXSk6IHZvaWQge1xuICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoaW5zLmxlbmd0aCk7XG4gIGlucy5mb3JFYWNoKGZ1bmN0aW9uICh0eEluKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UodHhJbi5oYXNoKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHhJbi5pbmRleCk7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFyU2xpY2UodHhJbi5zY3JpcHQpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMih0eEluLnNlcXVlbmNlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU91dHB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLFxuICBvdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdXG4pOiB2b2lkIHtcbiAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KG91dHMubGVuZ3RoKTtcbiAgb3V0cy5mb3JFYWNoKGZ1bmN0aW9uICh0eE91dCkge1xuICAgIGlmICgodHhPdXQgYXMgYW55KS52YWx1ZUJ1ZmZlcikge1xuICAgICAgYnVmZmVyV3JpdGVyLndyaXRlU2xpY2UoKHR4T3V0IGFzIGFueSkudmFsdWVCdWZmZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50NjQodHhPdXQudmFsdWUpO1xuICAgIH1cblxuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhclNsaWNlKHR4T3V0LnNjcmlwdCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9CdWZmZXJWNDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgYnVmZmVyV3JpdGVyOiBCdWZmZXJXcml0ZXIsXG4gIHR4OiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+XG4pOiB2b2lkIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDEwODNcbiAgd3JpdGVJbnB1dHMoYnVmZmVyV3JpdGVyLCB0eC5pbnMpO1xuICB3cml0ZU91dHB1dHM8VE51bWJlcj4oYnVmZmVyV3JpdGVyLCB0eC5vdXRzKTtcblxuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHgubG9ja3RpbWUpO1xuXG4gIGlmICh0eC5pc092ZXJ3aW50ZXJDb21wYXRpYmxlKCkpIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHguZXhwaXJ5SGVpZ2h0KTtcbiAgfVxuXG4gIGlmICh0eC5pc1NhcGxpbmdDb21wYXRpYmxlKCkpIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVTbGljZShWQUxVRV9JTlQ2NF9aRVJPKTtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVWYXJJbnQoMCk7IC8vIHZTaGllbGRlZFNwZW5kTGVuZ3RoXG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVmFySW50KDApOyAvLyB2U2hpZWxkZWRPdXRwdXRMZW5ndGhcbiAgfVxuXG4gIGlmICh0eC5zdXBwb3J0c0pvaW5TcGxpdHMoKSkge1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhckludCgwKTsgLy8gam9pbnNTcGxpdHMgbGVuZ3RoXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQnVmZmVyVjU8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGJ1ZmZlcldyaXRlcjogQnVmZmVyV3JpdGVyLFxuICB0eDogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPlxuKTogdm9pZCB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC96Y2FzaC9ibG9iL3Y0LjUuMS9zcmMvcHJpbWl0aXZlcy90cmFuc2FjdGlvbi5oI0w4MjUtTDgyNlxuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHguY29uc2Vuc3VzQnJhbmNoSWQpO1xuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHgubG9ja3RpbWUpO1xuICBidWZmZXJXcml0ZXIud3JpdGVVSW50MzIodHguZXhwaXJ5SGVpZ2h0KTtcbiAgd3JpdGVJbnB1dHMoYnVmZmVyV3JpdGVyLCB0eC5pbnMpO1xuICB3cml0ZU91dHB1dHM8VE51bWJlcj4oYnVmZmVyV3JpdGVyLCB0eC5vdXRzKTtcblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemNhc2gvemNhc2gvYmxvYi92NC41LjEvc3JjL3ByaW1pdGl2ZXMvdHJhbnNhY3Rpb24uaCNMMTA2M1xuICB3cml0ZUVtcHR5U2FtcGxpbmdCdW5kbGUoYnVmZmVyV3JpdGVyKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoL3pjYXNoL2Jsb2IvdjQuNS4xL3NyYy9wcmltaXRpdmVzL3RyYW5zYWN0aW9uLmgjTDEwODFcbiAgd3JpdGVFbXB0eU9yY2hhcmRCdW5kbGUoYnVmZmVyV3JpdGVyKTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { PsbtOpts, UtxoPsbt } from '../UtxoPsbt';
|
|
3
2
|
import { ZcashTransaction } from './ZcashTransaction';
|
|
4
3
|
import { Network, Signer } from '../../';
|
|
@@ -27,7 +26,6 @@ export declare class ZcashPsbt extends UtxoPsbt<ZcashTransaction<bigint>> {
|
|
|
27
26
|
setDefaultsForVersion(network: Network, version: number): void;
|
|
28
27
|
signInput(inputIndex: number, keyPair: Signer, sighashTypes?: number[]): this;
|
|
29
28
|
validateSignaturesOfInput(inputIndex: number, validator: ValidateSigFunction, pubkey?: Buffer): boolean;
|
|
30
|
-
private withUnsafeSignNonSegwitTrue;
|
|
31
29
|
private setPropertyCheckSignatures;
|
|
32
30
|
setConsensusBranchId(consensusBranchId: number): void;
|
|
33
31
|
setVersionGroupId(versionGroupId: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZcashPsbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashPsbt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ZcashPsbt.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAGL,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAW7D,qBAAa,SAAU,SAAQ,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAIlG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS;IAO7D;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAqCrF;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAelB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI;IAOpD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB9D,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7E,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO;IAIvG,OAAO,CAAC,0BAA0B;IAQlC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAKrD,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CAI5C"}
|