@bitgo-beta/abstract-utxo 1.6.1-alpha.237 → 1.6.1-alpha.239
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/CHANGELOG.md +20 -0
- package/dist/src/abstractUtxoCoin.d.ts +28 -47
- package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/src/abstractUtxoCoin.js +140 -451
- package/dist/src/core/descriptor/DescriptorMap.d.ts +9 -0
- package/dist/src/core/descriptor/DescriptorMap.d.ts.map +1 -0
- package/dist/src/core/descriptor/DescriptorMap.js +9 -0
- package/dist/src/core/descriptor/Output.d.ts +24 -0
- package/dist/src/core/descriptor/Output.d.ts.map +1 -0
- package/dist/src/core/descriptor/Output.js +22 -0
- package/dist/src/core/descriptor/VirtualSize.d.ts +21 -0
- package/dist/src/core/descriptor/VirtualSize.d.ts.map +1 -0
- package/dist/src/core/descriptor/VirtualSize.js +83 -0
- package/dist/src/core/descriptor/address.d.ts +5 -0
- package/dist/src/core/descriptor/address.d.ts.map +1 -0
- package/dist/src/core/descriptor/address.js +48 -0
- package/dist/src/core/descriptor/index.d.ts +9 -0
- package/dist/src/core/descriptor/index.d.ts.map +1 -0
- package/dist/src/core/descriptor/index.js +17 -0
- package/dist/src/core/descriptor/psbt/assertSatisfiable.d.ts +20 -0
- package/dist/src/core/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/assertSatisfiable.js +75 -0
- package/dist/src/core/descriptor/psbt/createPsbt.d.ts +15 -0
- package/dist/src/core/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/createPsbt.js +83 -0
- package/dist/src/core/descriptor/psbt/findDescriptors.d.ts +22 -0
- package/dist/src/core/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/findDescriptors.js +75 -0
- package/dist/src/core/descriptor/psbt/index.d.ts +5 -0
- package/dist/src/core/descriptor/psbt/index.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/index.js +10 -0
- package/dist/src/core/descriptor/psbt/parse.d.ts +27 -0
- package/dist/src/core/descriptor/psbt/parse.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/parse.js +87 -0
- package/dist/src/core/descriptor/psbt/wrap.d.ts +12 -0
- package/dist/src/core/descriptor/psbt/wrap.d.ts.map +1 -0
- package/dist/src/core/descriptor/psbt/wrap.js +76 -0
- package/dist/src/core/descriptor/signTxLocal.d.ts +3 -0
- package/dist/src/core/descriptor/signTxLocal.d.ts.map +1 -0
- package/dist/src/core/descriptor/signTxLocal.js +9 -0
- package/dist/src/descriptor/NamedDescriptor.js +35 -2
- package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -1
- package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
- package/dist/src/descriptor/assertDescriptorWalletAddress.js +46 -17
- package/dist/src/descriptor/builder/builder.d.ts +13 -0
- package/dist/src/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/src/descriptor/builder/builder.js +35 -0
- package/dist/src/descriptor/builder/index.d.ts +3 -0
- package/dist/src/descriptor/builder/index.d.ts.map +1 -0
- package/dist/src/descriptor/builder/index.js +8 -0
- package/dist/src/descriptor/builder/parse.d.ts +5 -0
- package/dist/src/descriptor/builder/parse.d.ts.map +1 -0
- package/dist/src/descriptor/builder/parse.js +138 -0
- package/dist/src/descriptor/descriptorWallet.d.ts +19 -0
- package/dist/src/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/src/descriptor/descriptorWallet.js +58 -0
- package/dist/src/descriptor/index.d.ts +1 -0
- package/dist/src/descriptor/index.d.ts.map +1 -1
- package/dist/src/descriptor/index.js +7 -2
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +29 -3
- package/dist/src/keychains.d.ts +10 -0
- package/dist/src/keychains.d.ts.map +1 -0
- package/dist/src/keychains.js +20 -0
- package/dist/src/names.d.ts +13 -0
- package/dist/src/names.d.ts.map +1 -0
- package/dist/src/names.js +175 -0
- package/dist/src/recovery/RecoveryProvider.js +2 -3
- package/dist/src/recovery/backupKeyRecovery.d.ts +0 -3
- package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/src/recovery/backupKeyRecovery.js +50 -18
- package/dist/src/recovery/baseApi.d.ts +1 -4
- package/dist/src/recovery/baseApi.d.ts.map +1 -1
- package/dist/src/recovery/baseApi.js +6 -6
- package/dist/src/recovery/coingeckoApi.d.ts +0 -3
- package/dist/src/recovery/coingeckoApi.d.ts.map +1 -1
- package/dist/src/recovery/coingeckoApi.js +1 -4
- package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
- package/dist/src/recovery/crossChainRecovery.js +44 -12
- package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
- package/dist/src/recovery/mempoolApi.js +7 -7
- package/dist/src/replayProtection.js +37 -5
- package/dist/src/sign.d.ts +0 -3
- package/dist/src/sign.d.ts.map +1 -1
- package/dist/src/sign.js +44 -11
- package/dist/src/transaction/descriptor/explainPsbt.d.ts +5 -0
- package/dist/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/explainPsbt.js +80 -0
- package/dist/src/transaction/descriptor/index.d.ts +3 -0
- package/dist/src/transaction/descriptor/index.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/index.js +6 -0
- package/dist/src/transaction/explainTransaction.d.ts +17 -0
- package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/src/transaction/explainTransaction.js +55 -0
- package/dist/src/transaction/fetchInputs.d.ts +26 -0
- package/dist/src/transaction/fetchInputs.d.ts.map +1 -0
- package/dist/src/transaction/fetchInputs.js +110 -0
- package/dist/src/transaction/fixedScript/explainTransaction.d.ts +30 -0
- package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/explainTransaction.js +220 -0
- package/dist/src/transaction/fixedScript/index.d.ts +5 -0
- package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/index.js +11 -0
- package/dist/src/{parseOutput.d.ts → transaction/fixedScript/parseOutput.d.ts} +6 -6
- package/dist/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/parseOutput.js +214 -0
- package/dist/src/transaction/fixedScript/parseTransaction.d.ts +9 -0
- package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/parseTransaction.js +207 -0
- package/dist/src/transaction/fixedScript/verifyTransaction.d.ts +4 -0
- package/dist/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/verifyTransaction.js +177 -0
- package/dist/src/transaction/index.d.ts +6 -0
- package/dist/src/transaction/index.d.ts.map +1 -0
- package/dist/src/transaction/index.js +26 -0
- package/dist/src/transaction/parseTransaction.d.ts +3 -0
- package/dist/src/transaction/parseTransaction.d.ts.map +1 -0
- package/dist/src/transaction/parseTransaction.js +47 -0
- package/dist/src/transaction/recipient.d.ts +28 -0
- package/dist/src/transaction/recipient.d.ts.map +1 -0
- package/dist/src/transaction/recipient.js +80 -0
- package/dist/src/transaction/verifyTransaction.d.ts +4 -0
- package/dist/src/transaction/verifyTransaction.d.ts.map +1 -0
- package/dist/src/transaction/verifyTransaction.js +47 -0
- package/dist/src/verifyKey.d.ts +27 -0
- package/dist/src/verifyKey.d.ts.map +1 -0
- package/dist/src/verifyKey.js +168 -0
- package/dist/test/core/descriptor/descriptor.utils.d.ts +10 -0
- package/dist/test/core/descriptor/descriptor.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/descriptor.utils.js +63 -0
- package/dist/test/core/descriptor/psbt/VirtualSize.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/VirtualSize.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/VirtualSize.js +78 -0
- package/dist/test/core/descriptor/psbt/assertSatisfiable.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/assertSatisfiable.js +56 -0
- package/dist/test/core/descriptor/psbt/createPsbt.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/createPsbt.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/createPsbt.js +85 -0
- package/dist/test/core/descriptor/psbt/findDescriptors.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/findDescriptors.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/findDescriptors.js +66 -0
- package/dist/test/core/descriptor/psbt/mock.utils.d.ts +34 -0
- package/dist/test/core/descriptor/psbt/mock.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/mock.utils.js +89 -0
- package/dist/test/core/descriptor/psbt/parse.d.ts +2 -0
- package/dist/test/core/descriptor/psbt/parse.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/parse.js +32 -0
- package/dist/test/core/descriptor/psbt/psbt.utils.d.ts +4 -0
- package/dist/test/core/descriptor/psbt/psbt.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/psbt/psbt.utils.js +20 -0
- package/dist/test/core/fixtures.utils.d.ts +15 -0
- package/dist/test/core/fixtures.utils.d.ts.map +1 -0
- package/dist/test/core/fixtures.utils.js +114 -0
- package/dist/test/core/key.utils.d.ts +16 -0
- package/dist/test/core/key.utils.d.ts.map +1 -0
- package/dist/test/core/key.utils.js +59 -0
- package/dist/test/core/toPlainObject.utils.d.ts +11 -0
- package/dist/test/core/toPlainObject.utils.d.ts.map +1 -0
- package/dist/test/core/toPlainObject.utils.js +76 -0
- package/dist/test/descriptor/builder.d.ts +2 -0
- package/dist/test/descriptor/builder.d.ts.map +1 -0
- package/dist/test/descriptor/builder.js +70 -0
- package/dist/test/descriptor/descriptorWallet.d.ts +2 -0
- package/dist/test/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/test/descriptor/descriptorWallet.js +24 -0
- package/dist/test/outputDifference.d.ts +2 -0
- package/dist/test/outputDifference.d.ts.map +1 -0
- package/dist/test/outputDifference.js +86 -0
- package/dist/test/transaction/descriptor/explainPsbt.d.ts +2 -0
- package/dist/test/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/test/transaction/descriptor/explainPsbt.js +31 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -10
- package/dist/src/parseOutput.d.ts.map +0 -1
- package/dist/src/parseOutput.js +0 -215
- package/dist/src/transaction.d.ts +0 -64
- package/dist/src/transaction.d.ts.map +0 -1
- package/dist/src/transaction.js +0 -323
|
@@ -0,0 +1,168 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.verifyKeySignature = verifyKeySignature;
|
|
40
|
+
exports.verifyCustomChangeKeySignatures = verifyCustomChangeKeySignatures;
|
|
41
|
+
exports.verifyUserPublicKey = verifyUserPublicKey;
|
|
42
|
+
/*
|
|
43
|
+
|
|
44
|
+
These are actually not utxo-specific and belong in a more general module.
|
|
45
|
+
|
|
46
|
+
*/
|
|
47
|
+
const debug_1 = __importDefault(require("debug"));
|
|
48
|
+
const assert_1 = __importDefault(require("assert"));
|
|
49
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
50
|
+
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
51
|
+
const bitcoinMessage = __importStar(require("bitcoinjs-message"));
|
|
52
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
53
|
+
const debug = (0, debug_1.default)('bitgo:abstract-utxo:verifyKey');
|
|
54
|
+
/**
|
|
55
|
+
* Verify signatures produced by the user key over the backup and bitgo keys.
|
|
56
|
+
*
|
|
57
|
+
* If set, these signatures ensure that the wallet keys cannot be changed after the wallet has been created.
|
|
58
|
+
* @param {VerifyKeySignaturesOptions} params
|
|
59
|
+
* @return {{backup: boolean, bitgo: boolean}}
|
|
60
|
+
*/
|
|
61
|
+
function verifyKeySignature(params) {
|
|
62
|
+
// first, let's verify the integrity of the user key, whose public key is used for subsequent verifications
|
|
63
|
+
const { userKeychain, keychainToVerify, keySignature } = params;
|
|
64
|
+
if (!userKeychain) {
|
|
65
|
+
throw new Error('user keychain is required');
|
|
66
|
+
}
|
|
67
|
+
if (!keychainToVerify) {
|
|
68
|
+
throw new Error('keychain to verify is required');
|
|
69
|
+
}
|
|
70
|
+
if (!keySignature) {
|
|
71
|
+
throw new Error('key signature is required');
|
|
72
|
+
}
|
|
73
|
+
// verify the signature against the user public key
|
|
74
|
+
(0, assert_1.default)(userKeychain.pub);
|
|
75
|
+
const publicKey = utxo_lib_1.bip32.fromBase58(userKeychain.pub).publicKey;
|
|
76
|
+
// Due to interface of `bitcoinMessage`, we need to convert the public key to an address.
|
|
77
|
+
// Note that this address has no relationship to on-chain transactions. We are
|
|
78
|
+
// only interested in the address as a representation of the public key.
|
|
79
|
+
const signingAddress = utxolib.address.toBase58Check(utxolib.crypto.hash160(publicKey), utxolib.networks.bitcoin.pubKeyHash,
|
|
80
|
+
// we do not pass `this.network` here because it would fail for zcash
|
|
81
|
+
// the bitcoinMessage library decodes the address and throws away the first byte
|
|
82
|
+
// because zcash has a two-byte prefix, verify() decodes zcash addresses to an invalid pubkey hash
|
|
83
|
+
utxolib.networks.bitcoin);
|
|
84
|
+
// BG-5703: use BTC mainnet prefix for all key signature operations
|
|
85
|
+
// (this means do not pass a prefix parameter, and let it use the default prefix instead)
|
|
86
|
+
(0, assert_1.default)(keychainToVerify.pub);
|
|
87
|
+
try {
|
|
88
|
+
return bitcoinMessage.verify(keychainToVerify.pub, signingAddress, Buffer.from(keySignature, 'hex'));
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
debug('error thrown from bitcoinmessage while verifying key signature', e);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Verify signatures against the user private key over the change wallet extended keys
|
|
97
|
+
* @param {ParsedTransaction} tx
|
|
98
|
+
* @param {Keychain} userKeychain
|
|
99
|
+
* @return {boolean}
|
|
100
|
+
* @protected
|
|
101
|
+
*/
|
|
102
|
+
function verifyCustomChangeKeySignatures(tx, userKeychain) {
|
|
103
|
+
if (!tx.customChange) {
|
|
104
|
+
throw new Error('parsed transaction is missing required custom change verification data');
|
|
105
|
+
}
|
|
106
|
+
if (!Array.isArray(tx.customChange.keys) || !Array.isArray(tx.customChange.signatures)) {
|
|
107
|
+
throw new Error('customChange property is missing keys or signatures');
|
|
108
|
+
}
|
|
109
|
+
for (const keyIndex of [sdk_core_1.KeyIndices.USER, sdk_core_1.KeyIndices.BACKUP, sdk_core_1.KeyIndices.BITGO]) {
|
|
110
|
+
const keychainToVerify = tx.customChange.keys[keyIndex];
|
|
111
|
+
const keySignature = tx.customChange.signatures[keyIndex];
|
|
112
|
+
if (!keychainToVerify) {
|
|
113
|
+
throw new Error(`missing required custom change ${sdk_core_1.KeyIndices[keyIndex].toLowerCase()} keychain public key`);
|
|
114
|
+
}
|
|
115
|
+
if (!keySignature) {
|
|
116
|
+
throw new Error(`missing required custom change ${sdk_core_1.KeyIndices[keyIndex].toLowerCase()} keychain signature`);
|
|
117
|
+
}
|
|
118
|
+
if (!verifyKeySignature({
|
|
119
|
+
userKeychain: userKeychain,
|
|
120
|
+
keychainToVerify: keychainToVerify,
|
|
121
|
+
keySignature,
|
|
122
|
+
})) {
|
|
123
|
+
debug('failed to verify custom change %s key signature!', sdk_core_1.KeyIndices[keyIndex].toLowerCase());
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Decrypt the wallet's user private key and verify that the claimed public key matches
|
|
131
|
+
* @param {BitGoBase} bitgo
|
|
132
|
+
* @param {VerifyUserPublicKeyOptions} params
|
|
133
|
+
* @return {boolean}
|
|
134
|
+
* @protected
|
|
135
|
+
*/
|
|
136
|
+
function verifyUserPublicKey(bitgo, params) {
|
|
137
|
+
const { userKeychain, txParams, disableNetworking } = params;
|
|
138
|
+
if (!userKeychain) {
|
|
139
|
+
throw new Error('user keychain is required');
|
|
140
|
+
}
|
|
141
|
+
const userPub = userKeychain.pub;
|
|
142
|
+
// decrypt the user private key, so we can verify that the claimed public key is a match
|
|
143
|
+
let userPrv = userKeychain.prv;
|
|
144
|
+
if (!userPrv && txParams.walletPassphrase) {
|
|
145
|
+
userPrv = (0, sdk_core_1.decryptKeychainPrivateKey)(bitgo, userKeychain, txParams.walletPassphrase);
|
|
146
|
+
}
|
|
147
|
+
if (!userPrv) {
|
|
148
|
+
const errorMessage = 'user private key unavailable for verification';
|
|
149
|
+
if (disableNetworking) {
|
|
150
|
+
console.log(errorMessage);
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
throw new Error(errorMessage);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const userPrivateKey = utxo_lib_1.bip32.fromBase58(userPrv);
|
|
159
|
+
if (userPrivateKey.toBase58() === userPrivateKey.neutered().toBase58()) {
|
|
160
|
+
throw new Error('user private key is only public');
|
|
161
|
+
}
|
|
162
|
+
if (userPrivateKey.neutered().toBase58() !== userPub) {
|
|
163
|
+
throw new Error('user private key does not match public key');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5S2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZlcmlmeUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCQSxnREF1Q0M7QUFTRCwwRUFrQ0M7QUFTRCxrREFpQ0M7QUFqSkQ7Ozs7R0FJRztBQUNILGtEQUErQjtBQUMvQixvREFBNEI7QUFDNUIsOERBQWdEO0FBQ2hELG1EQUE2QztBQUM3QyxrRUFBb0Q7QUFDcEQsbURBQWtHO0FBRWxHLE1BQU0sS0FBSyxHQUFHLElBQUEsZUFBVSxFQUFDLCtCQUErQixDQUFDLENBQUM7QUFFMUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsTUFBa0M7SUFDbkUsMkdBQTJHO0lBQzNHLE1BQU0sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ2hFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUEsZ0JBQU0sRUFBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsTUFBTSxTQUFTLEdBQUcsZ0JBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUMvRCx5RkFBeUY7SUFDekYsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxNQUFNLGNBQWMsR0FB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IGJlbG9uZyBpbiBhIG1vcmUgZ2VuZXJhbCBtb2R1bGUuXG5cbiAqL1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBiaXAzMiB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIGJpdGNvaW5NZXNzYWdlIGZyb20gJ2JpdGNvaW5qcy1tZXNzYWdlJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgZGVjcnlwdEtleWNoYWluUHJpdmF0ZUtleSwgS2V5Y2hhaW4sIEtleUluZGljZXMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBQYXJzZWRUcmFuc2FjdGlvbiwgVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMsIFZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zIH0gZnJvbSAnLi9hYnN0cmFjdFV0eG9Db2luJztcbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygnYml0Z286YWJzdHJhY3QtdXR4bzp2ZXJpZnlLZXknKTtcblxuLyoqXG4gKiBWZXJpZnkgc2lnbmF0dXJlcyBwcm9kdWNlZCBieSB0aGUgdXNlciBrZXkgb3ZlciB0aGUgYmFja3VwIGFuZCBiaXRnbyBrZXlzLlxuICpcbiAqIElmIHNldCwgdGhlc2Ugc2lnbmF0dXJlcyBlbnN1cmUgdGhhdCB0aGUgd2FsbGV0IGtleXMgY2Fubm90IGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIHdhbGxldCBoYXMgYmVlbiBjcmVhdGVkLlxuICogQHBhcmFtIHtWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9uc30gcGFyYW1zXG4gKiBAcmV0dXJuIHt7YmFja3VwOiBib29sZWFuLCBiaXRnbzogYm9vbGVhbn19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zOiBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAvLyBmaXJzdCwgbGV0J3MgdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHVzZXIga2V5LCB3aG9zZSBwdWJsaWMga2V5IGlzIHVzZWQgZm9yIHN1YnNlcXVlbnQgdmVyaWZpY2F0aW9uc1xuICBjb25zdCB7IHVzZXJLZXljaGFpbiwga2V5Y2hhaW5Ub1ZlcmlmeSwga2V5U2lnbmF0dXJlIH0gPSBwYXJhbXM7XG4gIGlmICghdXNlcktleWNoYWluKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyIGtleWNoYWluIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIWtleWNoYWluVG9WZXJpZnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWluIHRvIHZlcmlmeSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFrZXlTaWduYXR1cmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleSBzaWduYXR1cmUgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIC8vIHZlcmlmeSB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIHVzZXIgcHVibGljIGtleVxuICBhc3NlcnQodXNlcktleWNoYWluLnB1Yik7XG4gIGNvbnN0IHB1YmxpY0tleSA9IGJpcDMyLmZyb21CYXNlNTgodXNlcktleWNoYWluLnB1YikucHVibGljS2V5O1xuICAvLyBEdWUgdG8gaW50ZXJmYWNlIG9mIGBiaXRjb2luTWVzc2FnZWAsIHdlIG5lZWQgdG8gY29udmVydCB0aGUgcHVibGljIGtleSB0byBhbiBhZGRyZXNzLlxuICAvLyBOb3RlIHRoYXQgdGhpcyBhZGRyZXNzIGhhcyBubyByZWxhdGlvbnNoaXAgdG8gb24tY2hhaW4gdHJhbnNhY3Rpb25zLiBXZSBhcmVcbiAgLy8gb25seSBpbnRlcmVzdGVkIGluIHRoZSBhZGRyZXNzIGFzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHB1YmxpYyBrZXkuXG4gIGNvbnN0IHNpZ25pbmdBZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLnRvQmFzZTU4Q2hlY2soXG4gICAgdXR4b2xpYi5jcnlwdG8uaGFzaDE2MChwdWJsaWNLZXkpLFxuICAgIHV0eG9saWIubmV0d29ya3MuYml0Y29pbi5wdWJLZXlIYXNoLFxuICAgIC8vIHdlIGRvIG5vdCBwYXNzIGB0aGlzLm5ldHdvcmtgIGhlcmUgYmVjYXVzZSBpdCB3b3VsZCBmYWlsIGZvciB6Y2FzaFxuICAgIC8vIHRoZSBiaXRjb2luTWVzc2FnZSBsaWJyYXJ5IGRlY29kZXMgdGhlIGFkZHJlc3MgYW5kIHRocm93cyBhd2F5IHRoZSBmaXJzdCBieXRlXG4gICAgLy8gYmVjYXVzZSB6Y2FzaCBoYXMgYSB0d28tYnl0ZSBwcmVmaXgsIHZlcmlmeSgpIGRlY29kZXMgemNhc2ggYWRkcmVzc2VzIHRvIGFuIGludmFsaWQgcHVia2V5IGhhc2hcbiAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5cbiAgKTtcblxuICAvLyBCRy01NzAzOiB1c2UgQlRDIG1haW5uZXQgcHJlZml4IGZvciBhbGwga2V5IHNpZ25hdHVyZSBvcGVyYXRpb25zXG4gIC8vICh0aGlzIG1lYW5zIGRvIG5vdCBwYXNzIGEgcHJlZml4IHBhcmFtZXRlciwgYW5kIGxldCBpdCB1c2UgdGhlIGRlZmF1bHQgcHJlZml4IGluc3RlYWQpXG4gIGFzc2VydChrZXljaGFpblRvVmVyaWZ5LnB1Yik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGJpdGNvaW5NZXNzYWdlLnZlcmlmeShrZXljaGFpblRvVmVyaWZ5LnB1Yiwgc2lnbmluZ0FkZHJlc3MsIEJ1ZmZlci5mcm9tKGtleVNpZ25hdHVyZSwgJ2hleCcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGRlYnVnKCdlcnJvciB0aHJvd24gZnJvbSBiaXRjb2lubWVzc2FnZSB3aGlsZSB2ZXJpZnlpbmcga2V5IHNpZ25hdHVyZScsIGUpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmeSBzaWduYXR1cmVzIGFnYWluc3QgdGhlIHVzZXIgcHJpdmF0ZSBrZXkgb3ZlciB0aGUgY2hhbmdlIHdhbGxldCBleHRlbmRlZCBrZXlzXG4gKiBAcGFyYW0ge1BhcnNlZFRyYW5zYWN0aW9ufSB0eFxuICogQHBhcmFtIHtLZXljaGFpbn0gdXNlcktleWNoYWluXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQHByb3RlY3RlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5Q3VzdG9tQ2hhbmdlS2V5U2lnbmF0dXJlczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICB1c2VyS2V5Y2hhaW46IEtleWNoYWluXG4pOiBib29sZWFuIHtcbiAgaWYgKCF0eC5jdXN0b21DaGFuZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcnNlZCB0cmFuc2FjdGlvbiBpcyBtaXNzaW5nIHJlcXVpcmVkIGN1c3RvbSBjaGFuZ2UgdmVyaWZpY2F0aW9uIGRhdGEnKTtcbiAgfVxuXG4gIGlmICghQXJyYXkuaXNBcnJheSh0eC5jdXN0b21DaGFuZ2Uua2V5cykgfHwgIUFycmF5LmlzQXJyYXkodHguY3VzdG9tQ2hhbmdlLnNpZ25hdHVyZXMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjdXN0b21DaGFuZ2UgcHJvcGVydHkgaXMgbWlzc2luZyBrZXlzIG9yIHNpZ25hdHVyZXMnKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5SW5kZXggb2YgW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dKSB7XG4gICAgY29uc3Qga2V5Y2hhaW5Ub1ZlcmlmeSA9IHR4LmN1c3RvbUNoYW5nZS5rZXlzW2tleUluZGV4XTtcbiAgICBjb25zdCBrZXlTaWduYXR1cmUgPSB0eC5jdXN0b21DaGFuZ2Uuc2lnbmF0dXJlc1trZXlJbmRleF07XG4gICAgaWYgKCFrZXljaGFpblRvVmVyaWZ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3NpbmcgcmVxdWlyZWQgY3VzdG9tIGNoYW5nZSAke0tleUluZGljZXNba2V5SW5kZXhdLnRvTG93ZXJDYXNlKCl9IGtleWNoYWluIHB1YmxpYyBrZXlgKTtcbiAgICB9XG4gICAgaWYgKCFrZXlTaWduYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbWlzc2luZyByZXF1aXJlZCBjdXN0b20gY2hhbmdlICR7S2V5SW5kaWNlc1trZXlJbmRleF0udG9Mb3dlckNhc2UoKX0ga2V5Y2hhaW4gc2lnbmF0dXJlYCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICF2ZXJpZnlLZXlTaWduYXR1cmUoe1xuICAgICAgICB1c2VyS2V5Y2hhaW46IHVzZXJLZXljaGFpbiBhcyB7IHB1Yjogc3RyaW5nIH0sXG4gICAgICAgIGtleWNoYWluVG9WZXJpZnk6IGtleWNoYWluVG9WZXJpZnkgYXMgeyBwdWI6IHN0cmluZyB9LFxuICAgICAgICBrZXlTaWduYXR1cmUsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgZGVidWcoJ2ZhaWxlZCB0byB2ZXJpZnkgY3VzdG9tIGNoYW5nZSAlcyBrZXkgc2lnbmF0dXJlIScsIEtleUluZGljZXNba2V5SW5kZXhdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERlY3J5cHQgdGhlIHdhbGxldCdzIHVzZXIgcHJpdmF0ZSBrZXkgYW5kIHZlcmlmeSB0aGF0IHRoZSBjbGFpbWVkIHB1YmxpYyBrZXkgbWF0Y2hlc1xuICogQHBhcmFtIHtCaXRHb0Jhc2V9IGJpdGdvXG4gKiBAcGFyYW0ge1ZlcmlmeVVzZXJQdWJsaWNLZXlPcHRpb25zfSBwYXJhbXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAcHJvdGVjdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlVc2VyUHVibGljS2V5KGJpdGdvOiBCaXRHb0Jhc2UsIHBhcmFtczogVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMpOiBib29sZWFuIHtcbiAgY29uc3QgeyB1c2VyS2V5Y2hhaW4sIHR4UGFyYW1zLCBkaXNhYmxlTmV0d29ya2luZyB9ID0gcGFyYW1zO1xuICBpZiAoIXVzZXJLZXljaGFpbikge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlciBrZXljaGFpbiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgY29uc3QgdXNlclB1YiA9IHVzZXJLZXljaGFpbi5wdWI7XG5cbiAgLy8gZGVjcnlwdCB0aGUgdXNlciBwcml2YXRlIGtleSwgc28gd2UgY2FuIHZlcmlmeSB0aGF0IHRoZSBjbGFpbWVkIHB1YmxpYyBrZXkgaXMgYSBtYXRjaFxuICBsZXQgdXNlclBydiA9IHVzZXJLZXljaGFpbi5wcnY7XG4gIGlmICghdXNlclBydiAmJiB0eFBhcmFtcy53YWxsZXRQYXNzcGhyYXNlKSB7XG4gICAgdXNlclBydiA9IGRlY3J5cHRLZXljaGFpblByaXZhdGVLZXkoYml0Z28sIHVzZXJLZXljaGFpbiwgdHhQYXJhbXMud2FsbGV0UGFzc3BocmFzZSk7XG4gIH1cblxuICBpZiAoIXVzZXJQcnYpIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAndXNlciBwcml2YXRlIGtleSB1bmF2YWlsYWJsZSBmb3IgdmVyaWZpY2F0aW9uJztcbiAgICBpZiAoZGlzYWJsZU5ldHdvcmtpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yTWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1c2VyUHJpdmF0ZUtleSA9IGJpcDMyLmZyb21CYXNlNTgodXNlclBydik7XG4gICAgaWYgKHVzZXJQcml2YXRlS2V5LnRvQmFzZTU4KCkgPT09IHVzZXJQcml2YXRlS2V5Lm5ldXRlcmVkKCkudG9CYXNlNTgoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1c2VyIHByaXZhdGUga2V5IGlzIG9ubHkgcHVibGljJyk7XG4gICAgfVxuICAgIGlmICh1c2VyUHJpdmF0ZUtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkgIT09IHVzZXJQdWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXNlciBwcml2YXRlIGtleSBkb2VzIG5vdCBtYXRjaCBwdWJsaWMga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import { DescriptorMap, PsbtParams } from '../../../src/core/descriptor';
|
|
3
|
+
import { KeyTriple } from '../key.utils';
|
|
4
|
+
export declare function getDefaultXPubs(seed?: string): string[];
|
|
5
|
+
export type DescriptorTemplate = 'Wsh2Of3' | 'Wsh2Of2' | 'ShWsh2Of3CltvDrop';
|
|
6
|
+
export declare function getPsbtParams(t: DescriptorTemplate): Partial<PsbtParams>;
|
|
7
|
+
export declare function getDescriptorString(template: DescriptorTemplate, keys?: KeyTriple | string[], path?: string): string;
|
|
8
|
+
export declare function getDescriptor(template: DescriptorTemplate, keys?: KeyTriple | string[], path?: string): Descriptor;
|
|
9
|
+
export declare function getDescriptorMap(template: DescriptorTemplate, keys?: KeyTriple | string[]): DescriptorMap;
|
|
10
|
+
//# sourceMappingURL=descriptor.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.utils.d.ts","sourceRoot":"","sources":["../../../../test/core/descriptor/descriptor.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAgB,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvD;AAMD,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,SAAS,GAMT,mBAAmB,CAAC;AAoBxB,wBAAgB,aAAa,CAAC,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAQxE;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,GAAE,SAAS,GAAG,MAAM,EAAsB,EAC9C,IAAI,SAAQ,GACX,MAAM,CAYR;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,GAAE,SAAS,GAAG,MAAM,EAAsB,EAC9C,IAAI,SAAQ,GACX,UAAU,CAEZ;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,kBAAkB,EAC5B,IAAI,GAAE,SAAS,GAAG,MAAM,EAAsB,GAC7C,aAAa,CAKf"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefaultXPubs = getDefaultXPubs;
|
|
4
|
+
exports.getPsbtParams = getPsbtParams;
|
|
5
|
+
exports.getDescriptorString = getDescriptorString;
|
|
6
|
+
exports.getDescriptor = getDescriptor;
|
|
7
|
+
exports.getDescriptorMap = getDescriptorMap;
|
|
8
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
9
|
+
const key_utils_1 = require("../key.utils");
|
|
10
|
+
function getDefaultXPubs(seed) {
|
|
11
|
+
return (0, key_utils_1.getKeyTriple)(seed).map((k) => k.neutered().toBase58());
|
|
12
|
+
}
|
|
13
|
+
function toDescriptorMap(v) {
|
|
14
|
+
return new Map(Object.entries(v).map(([k, v]) => [k, wasm_miniscript_1.Descriptor.fromString(v, 'derivable')]));
|
|
15
|
+
}
|
|
16
|
+
function toXPub(k) {
|
|
17
|
+
if (typeof k === 'string') {
|
|
18
|
+
return k;
|
|
19
|
+
}
|
|
20
|
+
return k.neutered().toBase58();
|
|
21
|
+
}
|
|
22
|
+
function multi(m, n, keys, path) {
|
|
23
|
+
if (n < m) {
|
|
24
|
+
throw new Error(`Cannot create ${m} of ${n} multisig`);
|
|
25
|
+
}
|
|
26
|
+
if (keys.length < n) {
|
|
27
|
+
throw new Error(`Not enough keys for ${m} of ${n} multisig: keys.length=${keys.length}`);
|
|
28
|
+
}
|
|
29
|
+
keys = keys.slice(0, n);
|
|
30
|
+
return `multi(${m},${keys.map((k) => `${toXPub(k)}/${path}`).join(',')})`;
|
|
31
|
+
}
|
|
32
|
+
function getPsbtParams(t) {
|
|
33
|
+
switch (t) {
|
|
34
|
+
case 'Wsh2Of3':
|
|
35
|
+
case 'Wsh2Of2':
|
|
36
|
+
return {};
|
|
37
|
+
case 'ShWsh2Of3CltvDrop':
|
|
38
|
+
return { locktime: 1 };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function getDescriptorString(template, keys = getDefaultXPubs(), path = '0/*') {
|
|
42
|
+
switch (template) {
|
|
43
|
+
case 'Wsh2Of3':
|
|
44
|
+
return `wsh(${multi(2, 3, keys, path)})`;
|
|
45
|
+
case 'ShWsh2Of3CltvDrop':
|
|
46
|
+
const { locktime } = getPsbtParams(template);
|
|
47
|
+
return `sh(wsh(and_v(r:after(${locktime}),${multi(2, 3, keys, path)})))`;
|
|
48
|
+
case 'Wsh2Of2': {
|
|
49
|
+
return `wsh(${multi(2, 2, keys, path)})`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
throw new Error(`Unknown descriptor template: ${template}`);
|
|
53
|
+
}
|
|
54
|
+
function getDescriptor(template, keys = getDefaultXPubs(), path = '0/*') {
|
|
55
|
+
return wasm_miniscript_1.Descriptor.fromString(getDescriptorString(template, keys, path), 'derivable');
|
|
56
|
+
}
|
|
57
|
+
function getDescriptorMap(template, keys = getDefaultXPubs()) {
|
|
58
|
+
return toDescriptorMap({
|
|
59
|
+
external: getDescriptor(template, keys, '0/*').toString(),
|
|
60
|
+
internal: getDescriptor(template, keys, '1/*').toString(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvY29yZS9kZXNjcmlwdG9yL2Rlc2NyaXB0b3IudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSwwQ0FFQztBQWtDRCxzQ0FRQztBQUVELGtEQWdCQztBQUVELHNDQU1DO0FBRUQsNENBUUM7QUF0RkQsNERBQW9EO0FBR3BELDRDQUF1RDtBQUd2RCxTQUFnQixlQUFlLENBQUMsSUFBYTtJQUMzQyxPQUFPLElBQUEsd0JBQVksRUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxDQUF5QjtJQUNoRCxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLDRCQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBWUQsU0FBUyxNQUFNLENBQUMsQ0FBMEI7SUFDeEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxJQUFpQyxFQUFFLElBQVk7SUFDbEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLDBCQUEwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE9BQU8sU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLENBQXFCO0lBQ2pELFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDVixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssU0FBUztZQUNaLE9BQU8sRUFBRSxDQUFDO1FBQ1osS0FBSyxtQkFBbUI7WUFDdEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUNqQyxRQUE0QixFQUM1QixPQUE2QixlQUFlLEVBQUUsRUFDOUMsSUFBSSxHQUFHLEtBQUs7SUFFWixRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssU0FBUztZQUNaLE9BQU8sT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMzQyxLQUFLLG1CQUFtQjtZQUN0QixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sd0JBQXdCLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMzRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDZixPQUFPLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFRCxTQUFnQixhQUFhLENBQzNCLFFBQTRCLEVBQzVCLE9BQTZCLGVBQWUsRUFBRSxFQUM5QyxJQUFJLEdBQUcsS0FBSztJQUVaLE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN2RixDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLFFBQTRCLEVBQzVCLE9BQTZCLGVBQWUsRUFBRTtJQUU5QyxPQUFPLGVBQWUsQ0FBQztRQUNyQixRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO1FBQ3pELFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7S0FDMUQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCwgUHNidFBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgZ2V0S2V5VHJpcGxlLCBLZXlUcmlwbGUgfSBmcm9tICcuLi9rZXkudXRpbHMnO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0WFB1YnMoc2VlZD86IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGdldEtleVRyaXBsZShzZWVkKS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbn1cblxuZnVuY3Rpb24gdG9EZXNjcmlwdG9yTWFwKHY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBEZXNjcmlwdG9yTWFwIHtcbiAgcmV0dXJuIG5ldyBNYXAoT2JqZWN0LmVudHJpZXModikubWFwKChbaywgdl0pID0+IFtrLCBEZXNjcmlwdG9yLmZyb21TdHJpbmcodiwgJ2Rlcml2YWJsZScpXSkpO1xufVxuXG5leHBvcnQgdHlwZSBEZXNjcmlwdG9yVGVtcGxhdGUgPVxuICB8ICdXc2gyT2YzJ1xuICB8ICdXc2gyT2YyJ1xuICAvKlxuICAgKiBUaGlzIGlzIGEgd3JhcHBlZCBzZWd3aXQgMm9mMyBtdWx0aXNpZyB0aGF0IGFsc28gdXNlcyBhIHJlbGF0aXZlIGxvY2t0aW1lIHdpdGhcbiAgICogYW4gT1BfRFJPUCAocmVxdWlyaW5nIGEgbWluaXNjcmlwdCBleHRlbnNpb24pLlxuICAgKiBJdCBpcyBiYXNpY2FsbHkgd2hhdCBpcyB1c2VkIGluIENvcmVEYW8gc3Rha2luZyB0cmFuc2FjdGlvbnMuXG4gICAqL1xuICB8ICdTaFdzaDJPZjNDbHR2RHJvcCc7XG5cbmZ1bmN0aW9uIHRvWFB1YihrOiBCSVAzMkludGVyZmFjZSB8IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaztcbiAgfVxuICByZXR1cm4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG59XG5cbmZ1bmN0aW9uIG11bHRpKG06IG51bWJlciwgbjogbnVtYmVyLCBrZXlzOiBCSVAzMkludGVyZmFjZVtdIHwgc3RyaW5nW10sIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChuIDwgbSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNyZWF0ZSAke219IG9mICR7bn0gbXVsdGlzaWdgKTtcbiAgfVxuICBpZiAoa2V5cy5sZW5ndGggPCBuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgZW5vdWdoIGtleXMgZm9yICR7bX0gb2YgJHtufSBtdWx0aXNpZzoga2V5cy5sZW5ndGg9JHtrZXlzLmxlbmd0aH1gKTtcbiAgfVxuICBrZXlzID0ga2V5cy5zbGljZSgwLCBuKTtcbiAgcmV0dXJuIGBtdWx0aSgke219LCR7a2V5cy5tYXAoKGspID0+IGAke3RvWFB1YihrKX0vJHtwYXRofWApLmpvaW4oJywnKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBzYnRQYXJhbXModDogRGVzY3JpcHRvclRlbXBsYXRlKTogUGFydGlhbDxQc2J0UGFyYW1zPiB7XG4gIHN3aXRjaCAodCkge1xuICAgIGNhc2UgJ1dzaDJPZjMnOlxuICAgIGNhc2UgJ1dzaDJPZjInOlxuICAgICAgcmV0dXJuIHt9O1xuICAgIGNhc2UgJ1NoV3NoMk9mM0NsdHZEcm9wJzpcbiAgICAgIHJldHVybiB7IGxvY2t0aW1lOiAxIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlc2NyaXB0b3JTdHJpbmcoXG4gIHRlbXBsYXRlOiBEZXNjcmlwdG9yVGVtcGxhdGUsXG4gIGtleXM6IEtleVRyaXBsZSB8IHN0cmluZ1tdID0gZ2V0RGVmYXVsdFhQdWJzKCksXG4gIHBhdGggPSAnMC8qJ1xuKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0ZW1wbGF0ZSkge1xuICAgIGNhc2UgJ1dzaDJPZjMnOlxuICAgICAgcmV0dXJuIGB3c2goJHttdWx0aSgyLCAzLCBrZXlzLCBwYXRoKX0pYDtcbiAgICBjYXNlICdTaFdzaDJPZjNDbHR2RHJvcCc6XG4gICAgICBjb25zdCB7IGxvY2t0aW1lIH0gPSBnZXRQc2J0UGFyYW1zKHRlbXBsYXRlKTtcbiAgICAgIHJldHVybiBgc2god3NoKGFuZF92KHI6YWZ0ZXIoJHtsb2NrdGltZX0pLCR7bXVsdGkoMiwgMywga2V5cywgcGF0aCl9KSkpYDtcbiAgICBjYXNlICdXc2gyT2YyJzoge1xuICAgICAgcmV0dXJuIGB3c2goJHttdWx0aSgyLCAyLCBrZXlzLCBwYXRoKX0pYDtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGRlc2NyaXB0b3IgdGVtcGxhdGU6ICR7dGVtcGxhdGV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdG9yKFxuICB0ZW1wbGF0ZTogRGVzY3JpcHRvclRlbXBsYXRlLFxuICBrZXlzOiBLZXlUcmlwbGUgfCBzdHJpbmdbXSA9IGdldERlZmF1bHRYUHVicygpLFxuICBwYXRoID0gJzAvKidcbik6IERlc2NyaXB0b3Ige1xuICByZXR1cm4gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGdldERlc2NyaXB0b3JTdHJpbmcodGVtcGxhdGUsIGtleXMsIHBhdGgpLCAnZGVyaXZhYmxlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdG9yTWFwKFxuICB0ZW1wbGF0ZTogRGVzY3JpcHRvclRlbXBsYXRlLFxuICBrZXlzOiBLZXlUcmlwbGUgfCBzdHJpbmdbXSA9IGdldERlZmF1bHRYUHVicygpXG4pOiBEZXNjcmlwdG9yTWFwIHtcbiAgcmV0dXJuIHRvRGVzY3JpcHRvck1hcCh7XG4gICAgZXh0ZXJuYWw6IGdldERlc2NyaXB0b3IodGVtcGxhdGUsIGtleXMsICcwLyonKS50b1N0cmluZygpLFxuICAgIGludGVybmFsOiBnZXREZXNjcmlwdG9yKHRlbXBsYXRlLCBrZXlzLCAnMS8qJykudG9TdHJpbmcoKSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualSize.d.ts","sourceRoot":"","sources":["../../../../../test/core/descriptor/psbt/VirtualSize.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const VirtualSize_1 = require("../../../../src/core/descriptor/VirtualSize");
|
|
38
|
+
const descriptor_utils_1 = require("../descriptor.utils");
|
|
39
|
+
describe('VirtualSize', function () {
|
|
40
|
+
describe('getInputVSizesForDescriptorWallet', function () {
|
|
41
|
+
it('returns the input virtual sizes for a descriptor wallet', function () {
|
|
42
|
+
assert.deepStrictEqual((0, VirtualSize_1.getInputVSizesForDescriptors)(new Map([
|
|
43
|
+
['foo', (0, descriptor_utils_1.getDescriptor)('Wsh2Of2')],
|
|
44
|
+
['bar', (0, descriptor_utils_1.getDescriptor)('Wsh2Of2')],
|
|
45
|
+
])), {
|
|
46
|
+
foo: 96,
|
|
47
|
+
bar: 96,
|
|
48
|
+
});
|
|
49
|
+
assert.deepStrictEqual((0, VirtualSize_1.getInputVSizesForDescriptors)((0, descriptor_utils_1.getDescriptorMap)('Wsh2Of3')), {
|
|
50
|
+
external: 105,
|
|
51
|
+
internal: 105,
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('getChangeOutputVSizesForDescriptor', function () {
|
|
56
|
+
it('returns the output virtual sizes for a descriptor', function () {
|
|
57
|
+
assert.deepStrictEqual((0, VirtualSize_1.getChangeOutputVSizesForDescriptor)((0, descriptor_utils_1.getDescriptor)('Wsh2Of2')), {
|
|
58
|
+
inputVSize: 96,
|
|
59
|
+
outputVSize: 34,
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('getVirtualSize', function () {
|
|
64
|
+
it('returns expected virtual size', function () {
|
|
65
|
+
assert.deepStrictEqual((0, VirtualSize_1.getVirtualSize)({
|
|
66
|
+
inputs: [{ descriptorName: 'internal' }],
|
|
67
|
+
outputs: [{ script: Buffer.alloc(32) }],
|
|
68
|
+
}, (0, descriptor_utils_1.getDescriptorMap)('Wsh2Of3')), 157);
|
|
69
|
+
const descriptor = (0, descriptor_utils_1.getDescriptor)('Wsh2Of3');
|
|
70
|
+
assert.deepStrictEqual((0, VirtualSize_1.getVirtualSize)({
|
|
71
|
+
/* as proof we can pass 10_000 inputs */
|
|
72
|
+
inputs: Array.from({ length: 10000 }).map(() => descriptor),
|
|
73
|
+
outputs: [{ script: Buffer.alloc(32) }],
|
|
74
|
+
}), 1050052);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlydHVhbFNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L2NvcmUvZGVzY3JpcHRvci9wc2J0L1ZpcnR1YWxTaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLDZFQUlxRDtBQUNyRCwwREFBc0U7QUFFdEUsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixRQUFRLENBQUMsbUNBQW1DLEVBQUU7UUFDNUMsRUFBRSxDQUFDLHlEQUF5RCxFQUFFO1lBQzVELE1BQU0sQ0FBQyxlQUFlLENBQ3BCLElBQUEsMENBQTRCLEVBQzFCLElBQUksR0FBRyxDQUFDO2dCQUNOLENBQUMsS0FBSyxFQUFFLElBQUEsZ0NBQWEsRUFBQyxTQUFTLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxLQUFLLEVBQUUsSUFBQSxnQ0FBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ2xDLENBQUMsQ0FDSCxFQUNEO2dCQUNFLEdBQUcsRUFBRSxFQUFFO2dCQUNQLEdBQUcsRUFBRSxFQUFFO2FBQ1IsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFBLDBDQUE0QixFQUFDLElBQUEsbUNBQWdCLEVBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtnQkFDaEYsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsUUFBUSxFQUFFLEdBQUc7YUFDZCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO1FBQzdDLEVBQUUsQ0FBQyxtREFBbUQsRUFBRTtZQUN0RCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUEsZ0RBQWtDLEVBQUMsSUFBQSxnQ0FBYSxFQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25GLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFdBQVcsRUFBRSxFQUFFO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7UUFDekIsRUFBRSxDQUFDLCtCQUErQixFQUFFO1lBQ2xDLE1BQU0sQ0FBQyxlQUFlLENBQ3BCLElBQUEsNEJBQWMsRUFDWjtnQkFDRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ3hDLEVBQ0QsSUFBQSxtQ0FBZ0IsRUFBQyxTQUFTLENBQUMsQ0FDNUIsRUFDRCxHQUFHLENBQ0osQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLElBQUEsZ0NBQWEsRUFBQyxTQUFTLENBQUMsQ0FBQztZQUU1QyxNQUFNLENBQUMsZUFBZSxDQUNwQixJQUFBLDRCQUFjLEVBQUM7Z0JBQ2Isd0NBQXdDO2dCQUN4QyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQzVELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUN4QyxDQUFDLEVBQ0YsT0FBUyxDQUNWLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgZ2V0Q2hhbmdlT3V0cHV0VlNpemVzRm9yRGVzY3JpcHRvcixcbiAgZ2V0SW5wdXRWU2l6ZXNGb3JEZXNjcmlwdG9ycyxcbiAgZ2V0VmlydHVhbFNpemUsXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvVmlydHVhbFNpemUnO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvciwgZ2V0RGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL2Rlc2NyaXB0b3IudXRpbHMnO1xuXG5kZXNjcmliZSgnVmlydHVhbFNpemUnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdnZXRJbnB1dFZTaXplc0ZvckRlc2NyaXB0b3JXYWxsZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3JldHVybnMgdGhlIGlucHV0IHZpcnR1YWwgc2l6ZXMgZm9yIGEgZGVzY3JpcHRvciB3YWxsZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICBnZXRJbnB1dFZTaXplc0ZvckRlc2NyaXB0b3JzKFxuICAgICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWydmb28nLCBnZXREZXNjcmlwdG9yKCdXc2gyT2YyJyldLFxuICAgICAgICAgICAgWydiYXInLCBnZXREZXNjcmlwdG9yKCdXc2gyT2YyJyldLFxuICAgICAgICAgIF0pXG4gICAgICAgICksXG4gICAgICAgIHtcbiAgICAgICAgICBmb286IDk2LFxuICAgICAgICAgIGJhcjogOTYsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGdldElucHV0VlNpemVzRm9yRGVzY3JpcHRvcnMoZ2V0RGVzY3JpcHRvck1hcCgnV3NoMk9mMycpKSwge1xuICAgICAgICBleHRlcm5hbDogMTA1LFxuICAgICAgICBpbnRlcm5hbDogMTA1LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRDaGFuZ2VPdXRwdXRWU2l6ZXNGb3JEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdyZXR1cm5zIHRoZSBvdXRwdXQgdmlydHVhbCBzaXplcyBmb3IgYSBkZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChnZXRDaGFuZ2VPdXRwdXRWU2l6ZXNGb3JEZXNjcmlwdG9yKGdldERlc2NyaXB0b3IoJ1dzaDJPZjInKSksIHtcbiAgICAgICAgaW5wdXRWU2l6ZTogOTYsXG4gICAgICAgIG91dHB1dFZTaXplOiAzNCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VmlydHVhbFNpemUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3JldHVybnMgZXhwZWN0ZWQgdmlydHVhbCBzaXplJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgICAgZ2V0VmlydHVhbFNpemUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXRzOiBbeyBkZXNjcmlwdG9yTmFtZTogJ2ludGVybmFsJyB9XSxcbiAgICAgICAgICAgIG91dHB1dHM6IFt7IHNjcmlwdDogQnVmZmVyLmFsbG9jKDMyKSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldERlc2NyaXB0b3JNYXAoJ1dzaDJPZjMnKVxuICAgICAgICApLFxuICAgICAgICAxNTdcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXREZXNjcmlwdG9yKCdXc2gyT2YzJyk7XG5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgIGdldFZpcnR1YWxTaXplKHtcbiAgICAgICAgICAvKiBhcyBwcm9vZiB3ZSBjYW4gcGFzcyAxMF8wMDAgaW5wdXRzICovXG4gICAgICAgICAgaW5wdXRzOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMF8wMDAgfSkubWFwKCgpID0+IGRlc2NyaXB0b3IpLFxuICAgICAgICAgIG91dHB1dHM6IFt7IHNjcmlwdDogQnVmZmVyLmFsbG9jKDMyKSB9XSxcbiAgICAgICAgfSksXG4gICAgICAgIDFfMDUwXzA1MlxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertSatisfiable.d.ts","sourceRoot":"","sources":["../../../../../test/core/descriptor/psbt/assertSatisfiable.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
38
|
+
const descriptor_utils_1 = require("../descriptor.utils");
|
|
39
|
+
const assertSatisfiable_1 = require("../../../../src/core/descriptor/psbt/assertSatisfiable");
|
|
40
|
+
function d(s) {
|
|
41
|
+
return wasm_miniscript_1.Descriptor.fromString(s, 'derivable');
|
|
42
|
+
}
|
|
43
|
+
describe('assertSatisfiable', function () {
|
|
44
|
+
describe('getRequiredLocktime', function () {
|
|
45
|
+
const xpubs = (0, descriptor_utils_1.getDefaultXPubs)();
|
|
46
|
+
it('has expected result', function () {
|
|
47
|
+
// OP_DROP
|
|
48
|
+
assert.strictEqual((0, assertSatisfiable_1.getRequiredLocktime)(d(`wsh(and_v(r:after(100),pk(${xpubs[0]})))`)), 100);
|
|
49
|
+
// OP_VERIFY
|
|
50
|
+
assert.strictEqual((0, assertSatisfiable_1.getRequiredLocktime)(d(`wsh(and_v(v:after(100),pk(${xpubs[0]})))`)), 100);
|
|
51
|
+
// no locktime at all
|
|
52
|
+
assert.strictEqual((0, assertSatisfiable_1.getRequiredLocktime)(d(`wsh(pk(${xpubs[0]}))`)), undefined);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0U2F0aXNmaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L2NvcmUvZGVzY3JpcHRvci9wc2J0L2Fzc2VydFNhdGlzZmlhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLDREQUFvRDtBQUVwRCwwREFBc0Q7QUFDdEQsOEZBQTZGO0FBRTdGLFNBQVMsQ0FBQyxDQUFDLENBQVM7SUFDbEIsT0FBTyw0QkFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtJQUM1QixRQUFRLENBQUMscUJBQXFCLEVBQUU7UUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBQSxrQ0FBZSxHQUFFLENBQUM7UUFDaEMsRUFBRSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hCLFVBQVU7WUFDVixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsdUNBQW1CLEVBQUMsQ0FBQyxDQUFDLDZCQUE2QixLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUYsWUFBWTtZQUNaLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSx1Q0FBbUIsRUFBQyxDQUFDLENBQUMsNkJBQTZCLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1RixxQkFBcUI7WUFDckIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHVDQUFtQixFQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG5pbXBvcnQgeyBnZXREZWZhdWx0WFB1YnMgfSBmcm9tICcuLi9kZXNjcmlwdG9yLnV0aWxzJztcbmltcG9ydCB7IGdldFJlcXVpcmVkTG9ja3RpbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL3BzYnQvYXNzZXJ0U2F0aXNmaWFibGUnO1xuXG5mdW5jdGlvbiBkKHM6IHN0cmluZyk6IERlc2NyaXB0b3Ige1xuICByZXR1cm4gRGVzY3JpcHRvci5mcm9tU3RyaW5nKHMsICdkZXJpdmFibGUnKTtcbn1cblxuZGVzY3JpYmUoJ2Fzc2VydFNhdGlzZmlhYmxlJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnZ2V0UmVxdWlyZWRMb2NrdGltZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB4cHVicyA9IGdldERlZmF1bHRYUHVicygpO1xuICAgIGl0KCdoYXMgZXhwZWN0ZWQgcmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gT1BfRFJPUFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFJlcXVpcmVkTG9ja3RpbWUoZChgd3NoKGFuZF92KHI6YWZ0ZXIoMTAwKSxwaygke3hwdWJzWzBdfSkpKWApKSwgMTAwKTtcbiAgICAgIC8vIE9QX1ZFUklGWVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFJlcXVpcmVkTG9ja3RpbWUoZChgd3NoKGFuZF92KHY6YWZ0ZXIoMTAwKSxwaygke3hwdWJzWzBdfSkpKWApKSwgMTAwKTtcbiAgICAgIC8vIG5vIGxvY2t0aW1lIGF0IGFsbFxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFJlcXVpcmVkTG9ja3RpbWUoZChgd3NoKHBrKCR7eHB1YnNbMF19KSlgKSksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPsbt.d.ts","sourceRoot":"","sources":["../../../../../test/core/descriptor/psbt/createPsbt.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const descriptor_utils_1 = require("../descriptor.utils");
|
|
39
|
+
const fixtures_utils_1 = require("../../fixtures.utils");
|
|
40
|
+
const descriptor_1 = require("../../../../src/core/descriptor");
|
|
41
|
+
const key_utils_1 = require("../../key.utils");
|
|
42
|
+
const mock_utils_1 = require("./mock.utils");
|
|
43
|
+
const psbt_utils_1 = require("./psbt.utils");
|
|
44
|
+
async function assertEqualsFixture(t, filename, value) {
|
|
45
|
+
filename = __dirname + '/fixtures/' + t + '.' + filename;
|
|
46
|
+
if (value instanceof Buffer) {
|
|
47
|
+
return assert.deepStrictEqual(value.toString('hex'), (await (0, fixtures_utils_1.getFixture)(filename, value)).toString('hex'));
|
|
48
|
+
}
|
|
49
|
+
if (value instanceof utxolib.Psbt) {
|
|
50
|
+
return assert.deepStrictEqual((0, psbt_utils_1.toPlainObjectFromPsbt)(value), await (0, fixtures_utils_1.getFixture)(filename, (0, psbt_utils_1.toPlainObjectFromPsbt)(value)));
|
|
51
|
+
}
|
|
52
|
+
if (value instanceof utxolib.Transaction) {
|
|
53
|
+
return assert.deepStrictEqual((0, psbt_utils_1.toPlainObjectFromTx)(value), await (0, fixtures_utils_1.getFixture)(filename, (0, psbt_utils_1.toPlainObjectFromTx)(value)));
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`unknown value type: ${typeof value}`);
|
|
56
|
+
}
|
|
57
|
+
function describeCreatePsbt(t) {
|
|
58
|
+
describe(`createPsbt ${t}`, function () {
|
|
59
|
+
const keysA = (0, key_utils_1.getKeyTriple)('a');
|
|
60
|
+
function getSignedPsbt(psbt, keys) {
|
|
61
|
+
const cloned = utxolib.bitgo.createPsbtFromBuffer(psbt.toBuffer(), psbt.network);
|
|
62
|
+
for (const key of keys) {
|
|
63
|
+
cloned.signAllInputsHD(key);
|
|
64
|
+
}
|
|
65
|
+
return cloned;
|
|
66
|
+
}
|
|
67
|
+
it('creates psbt with expected properties', async function () {
|
|
68
|
+
const psbt = (0, mock_utils_1.mockPsbtDefaultWithDescriptorTemplate)(t, (0, descriptor_utils_1.getPsbtParams)(t));
|
|
69
|
+
await assertEqualsFixture(t, 'createPsbt.json', psbt);
|
|
70
|
+
const psbtSignedA = getSignedPsbt(psbt, keysA.slice(0, 1));
|
|
71
|
+
await assertEqualsFixture(t, 'createPsbtSignedA.json', psbtSignedA);
|
|
72
|
+
const psbtSignedAB = getSignedPsbt(psbt, keysA.slice(0, 2));
|
|
73
|
+
await assertEqualsFixture(t, 'createPsbtSignedAB.json', psbtSignedAB);
|
|
74
|
+
const psbtFinal = psbtSignedAB.clone();
|
|
75
|
+
(0, descriptor_1.finalizePsbt)(psbtFinal);
|
|
76
|
+
await assertEqualsFixture(t, 'createPsbtFinal.json', psbtFinal);
|
|
77
|
+
const networkTx = psbtFinal.extractTransaction();
|
|
78
|
+
await assertEqualsFixture(t, 'createPsbtFinalTx.json', networkTx);
|
|
79
|
+
await assertEqualsFixture(t, 'createPsbtFinalTx.hex', networkTx.toBuffer());
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
describeCreatePsbt('Wsh2Of3');
|
|
84
|
+
describeCreatePsbt('ShWsh2Of3CltvDrop');
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvY29yZS9kZXNjcmlwdG9yL3BzYnQvY3JlYXRlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyw4REFBZ0Q7QUFHaEQsMERBQXdFO0FBQ3hFLHlEQUFrRDtBQUNsRCxnRUFBK0Q7QUFDL0QsK0NBQStDO0FBRS9DLDZDQUFxRTtBQUNyRSw2Q0FBMEU7QUFFMUUsS0FBSyxVQUFVLG1CQUFtQixDQUFDLENBQXFCLEVBQUUsUUFBZ0IsRUFBRSxLQUFjO0lBQ3hGLFFBQVEsR0FBRyxTQUFTLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0lBQ3pELElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFBLDJCQUFVLEVBQVMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELElBQUksS0FBSyxZQUFZLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxlQUFlLENBQzNCLElBQUEsa0NBQXFCLEVBQUMsS0FBSyxDQUFDLEVBQzVCLE1BQU0sSUFBQSwyQkFBVSxFQUFDLFFBQVEsRUFBRSxJQUFBLGtDQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFLLFlBQVksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFBLGdDQUFtQixFQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sSUFBQSwyQkFBVSxFQUFDLFFBQVEsRUFBRSxJQUFBLGdDQUFtQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLENBQXFCO0lBQy9DLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUEsd0JBQVksRUFBQyxHQUFHLENBQUMsQ0FBQztRQUVoQyxTQUFTLGFBQWEsQ0FBQyxJQUE0QixFQUFFLElBQXNCO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEtBQUs7WUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBQSxrREFBcUMsRUFBQyxDQUFDLEVBQUUsSUFBQSxnQ0FBYSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsTUFBTSxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLG1CQUFtQixDQUFDLENBQUMsRUFBRSx5QkFBeUIsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN0RSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkMsSUFBQSx5QkFBWSxFQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pELE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yVGVtcGxhdGUsIGdldFBzYnRQYXJhbXMgfSBmcm9tICcuLi9kZXNjcmlwdG9yLnV0aWxzJztcbmltcG9ydCB7IGdldEZpeHR1cmUgfSBmcm9tICcuLi8uLi9maXh0dXJlcy51dGlscyc7XG5pbXBvcnQgeyBmaW5hbGl6ZVBzYnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yJztcbmltcG9ydCB7IGdldEtleVRyaXBsZSB9IGZyb20gJy4uLy4uL2tleS51dGlscyc7XG5cbmltcG9ydCB7IG1vY2tQc2J0RGVmYXVsdFdpdGhEZXNjcmlwdG9yVGVtcGxhdGUgfSBmcm9tICcuL21vY2sudXRpbHMnO1xuaW1wb3J0IHsgdG9QbGFpbk9iamVjdEZyb21Qc2J0LCB0b1BsYWluT2JqZWN0RnJvbVR4IH0gZnJvbSAnLi9wc2J0LnV0aWxzJztcblxuYXN5bmMgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzRml4dHVyZSh0OiBEZXNjcmlwdG9yVGVtcGxhdGUsIGZpbGVuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gIGZpbGVuYW1lID0gX19kaXJuYW1lICsgJy9maXh0dXJlcy8nICsgdCArICcuJyArIGZpbGVuYW1lO1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh2YWx1ZS50b1N0cmluZygnaGV4JyksIChhd2FpdCBnZXRGaXh0dXJlPEJ1ZmZlcj4oZmlsZW5hbWUsIHZhbHVlKSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHV0eG9saWIuUHNidCkge1xuICAgIHJldHVybiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgdG9QbGFpbk9iamVjdEZyb21Qc2J0KHZhbHVlKSxcbiAgICAgIGF3YWl0IGdldEZpeHR1cmUoZmlsZW5hbWUsIHRvUGxhaW5PYmplY3RGcm9tUHNidCh2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHV0eG9saWIuVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh0b1BsYWluT2JqZWN0RnJvbVR4KHZhbHVlKSwgYXdhaXQgZ2V0Rml4dHVyZShmaWxlbmFtZSwgdG9QbGFpbk9iamVjdEZyb21UeCh2YWx1ZSkpKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgdW5rbm93biB2YWx1ZSB0eXBlOiAke3R5cGVvZiB2YWx1ZX1gKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVDcmVhdGVQc2J0KHQ6IERlc2NyaXB0b3JUZW1wbGF0ZSkge1xuICBkZXNjcmliZShgY3JlYXRlUHNidCAke3R9YCwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGtleXNBID0gZ2V0S2V5VHJpcGxlKCdhJyk7XG5cbiAgICBmdW5jdGlvbiBnZXRTaWduZWRQc2J0KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGtleXM6IEJJUDMySW50ZXJmYWNlW10pIHtcbiAgICAgIGNvbnN0IGNsb25lZCA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIocHNidC50b0J1ZmZlcigpLCBwc2J0Lm5ldHdvcmspO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBjbG9uZWQuc2lnbkFsbElucHV0c0hEKGtleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGl0KCdjcmVhdGVzIHBzYnQgd2l0aCBleHBlY3RlZCBwcm9wZXJ0aWVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHNidCA9IG1vY2tQc2J0RGVmYXVsdFdpdGhEZXNjcmlwdG9yVGVtcGxhdGUodCwgZ2V0UHNidFBhcmFtcyh0KSk7XG4gICAgICBhd2FpdCBhc3NlcnRFcXVhbHNGaXh0dXJlKHQsICdjcmVhdGVQc2J0Lmpzb24nLCBwc2J0KTtcbiAgICAgIGNvbnN0IHBzYnRTaWduZWRBID0gZ2V0U2lnbmVkUHNidChwc2J0LCBrZXlzQS5zbGljZSgwLCAxKSk7XG4gICAgICBhd2FpdCBhc3NlcnRFcXVhbHNGaXh0dXJlKHQsICdjcmVhdGVQc2J0U2lnbmVkQS5qc29uJywgcHNidFNpZ25lZEEpO1xuICAgICAgY29uc3QgcHNidFNpZ25lZEFCID0gZ2V0U2lnbmVkUHNidChwc2J0LCBrZXlzQS5zbGljZSgwLCAyKSk7XG4gICAgICBhd2FpdCBhc3NlcnRFcXVhbHNGaXh0dXJlKHQsICdjcmVhdGVQc2J0U2lnbmVkQUIuanNvbicsIHBzYnRTaWduZWRBQik7XG4gICAgICBjb25zdCBwc2J0RmluYWwgPSBwc2J0U2lnbmVkQUIuY2xvbmUoKTtcbiAgICAgIGZpbmFsaXplUHNidChwc2J0RmluYWwpO1xuICAgICAgYXdhaXQgYXNzZXJ0RXF1YWxzRml4dHVyZSh0LCAnY3JlYXRlUHNidEZpbmFsLmpzb24nLCBwc2J0RmluYWwpO1xuICAgICAgY29uc3QgbmV0d29ya1R4ID0gcHNidEZpbmFsLmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICAgICAgYXdhaXQgYXNzZXJ0RXF1YWxzRml4dHVyZSh0LCAnY3JlYXRlUHNidEZpbmFsVHguanNvbicsIG5ldHdvcmtUeCk7XG4gICAgICBhd2FpdCBhc3NlcnRFcXVhbHNGaXh0dXJlKHQsICdjcmVhdGVQc2J0RmluYWxUeC5oZXgnLCBuZXR3b3JrVHgudG9CdWZmZXIoKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5kZXNjcmliZUNyZWF0ZVBzYnQoJ1dzaDJPZjMnKTtcbmRlc2NyaWJlQ3JlYXRlUHNidCgnU2hXc2gyT2YzQ2x0dkRyb3AnKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findDescriptors.d.ts","sourceRoot":"","sources":["../../../../../test/core/descriptor/psbt/findDescriptors.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const descriptor_utils_1 = require("../descriptor.utils");
|
|
38
|
+
const findDescriptors_1 = require("../../../../src/core/descriptor/psbt/findDescriptors");
|
|
39
|
+
const mock_utils_1 = require("./mock.utils");
|
|
40
|
+
describe('parsePsbt', function () {
|
|
41
|
+
const descriptorA = (0, descriptor_utils_1.getDescriptor)('Wsh2Of3', (0, descriptor_utils_1.getDefaultXPubs)('a'));
|
|
42
|
+
const descriptorB = (0, descriptor_utils_1.getDescriptor)('Wsh2Of3', (0, descriptor_utils_1.getDefaultXPubs)('b'));
|
|
43
|
+
const descriptorMap = new Map([
|
|
44
|
+
['a', descriptorA],
|
|
45
|
+
['b', descriptorB],
|
|
46
|
+
]);
|
|
47
|
+
it('finds descriptors for PSBT inputs/outputs', function () {
|
|
48
|
+
const psbt = (0, mock_utils_1.mockPsbt)([
|
|
49
|
+
{ descriptor: descriptorA, index: 0 },
|
|
50
|
+
{ descriptor: descriptorB, index: 1, id: { vout: 1 } },
|
|
51
|
+
], [{ descriptor: descriptorA, index: 2, value: BigInt(1e6) }]);
|
|
52
|
+
assert.deepStrictEqual((0, findDescriptors_1.findDescriptorForInput)(psbt.data.inputs[0], descriptorMap), {
|
|
53
|
+
descriptor: descriptorA,
|
|
54
|
+
index: 0,
|
|
55
|
+
});
|
|
56
|
+
assert.deepStrictEqual((0, findDescriptors_1.findDescriptorForInput)(psbt.data.inputs[1], descriptorMap), {
|
|
57
|
+
descriptor: descriptorB,
|
|
58
|
+
index: 1,
|
|
59
|
+
});
|
|
60
|
+
assert.deepStrictEqual((0, findDescriptors_1.findDescriptorForOutput)(psbt.txOutputs[0].script, psbt.data.outputs[0], descriptorMap), {
|
|
61
|
+
descriptor: descriptorA,
|
|
62
|
+
index: 2,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZERlc2NyaXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC9jb3JlL2Rlc2NyaXB0b3IvcHNidC9maW5kRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsMERBQXFFO0FBQ3JFLDBGQUF1SDtBQUV2SCw2Q0FBd0M7QUFFeEMsUUFBUSxDQUFDLFdBQVcsRUFBRTtJQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFBLGdDQUFhLEVBQUMsU0FBUyxFQUFFLElBQUEsa0NBQWUsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUEsZ0NBQWEsRUFBQyxTQUFTLEVBQUUsSUFBQSxrQ0FBZSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDNUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDO1FBQ2xCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQztLQUNuQixDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUU7UUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBUSxFQUNuQjtZQUNFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ3JDLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtTQUN2RCxFQUNELENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQzVELENBQUM7UUFFRixNQUFNLENBQUMsZUFBZSxDQUFDLElBQUEsd0NBQXNCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDakYsVUFBVSxFQUFFLFdBQVc7WUFDdkIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUEsd0NBQXNCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDakYsVUFBVSxFQUFFLFdBQVc7WUFDdkIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUEseUNBQXVCLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDN0csVUFBVSxFQUFFLFdBQVc7WUFDdkIsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IGdldERlZmF1bHRYUHVicywgZ2V0RGVzY3JpcHRvciB9IGZyb20gJy4uL2Rlc2NyaXB0b3IudXRpbHMnO1xuaW1wb3J0IHsgZmluZERlc2NyaXB0b3JGb3JJbnB1dCwgZmluZERlc2NyaXB0b3JGb3JPdXRwdXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL3BzYnQvZmluZERlc2NyaXB0b3JzJztcblxuaW1wb3J0IHsgbW9ja1BzYnQgfSBmcm9tICcuL21vY2sudXRpbHMnO1xuXG5kZXNjcmliZSgncGFyc2VQc2J0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZXNjcmlwdG9yQSA9IGdldERlc2NyaXB0b3IoJ1dzaDJPZjMnLCBnZXREZWZhdWx0WFB1YnMoJ2EnKSk7XG4gIGNvbnN0IGRlc2NyaXB0b3JCID0gZ2V0RGVzY3JpcHRvcignV3NoMk9mMycsIGdldERlZmF1bHRYUHVicygnYicpKTtcbiAgY29uc3QgZGVzY3JpcHRvck1hcCA9IG5ldyBNYXAoW1xuICAgIFsnYScsIGRlc2NyaXB0b3JBXSxcbiAgICBbJ2InLCBkZXNjcmlwdG9yQl0sXG4gIF0pO1xuXG4gIGl0KCdmaW5kcyBkZXNjcmlwdG9ycyBmb3IgUFNCVCBpbnB1dHMvb3V0cHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwc2J0ID0gbW9ja1BzYnQoXG4gICAgICBbXG4gICAgICAgIHsgZGVzY3JpcHRvcjogZGVzY3JpcHRvckEsIGluZGV4OiAwIH0sXG4gICAgICAgIHsgZGVzY3JpcHRvcjogZGVzY3JpcHRvckIsIGluZGV4OiAxLCBpZDogeyB2b3V0OiAxIH0gfSxcbiAgICAgIF0sXG4gICAgICBbeyBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yQSwgaW5kZXg6IDIsIHZhbHVlOiBCaWdJbnQoMWU2KSB9XVxuICAgICk7XG5cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGZpbmREZXNjcmlwdG9yRm9ySW5wdXQocHNidC5kYXRhLmlucHV0c1swXSwgZGVzY3JpcHRvck1hcCksIHtcbiAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3JBLFxuICAgICAgaW5kZXg6IDAsXG4gICAgfSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChmaW5kRGVzY3JpcHRvckZvcklucHV0KHBzYnQuZGF0YS5pbnB1dHNbMV0sIGRlc2NyaXB0b3JNYXApLCB7XG4gICAgICBkZXNjcmlwdG9yOiBkZXNjcmlwdG9yQixcbiAgICAgIGluZGV4OiAxLFxuICAgIH0pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZmluZERlc2NyaXB0b3JGb3JPdXRwdXQocHNidC50eE91dHB1dHNbMF0uc2NyaXB0LCBwc2J0LmRhdGEub3V0cHV0c1swXSwgZGVzY3JpcHRvck1hcCksIHtcbiAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3JBLFxuICAgICAgaW5kZXg6IDIsXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|