@bitgo/abstract-utxo 9.3.0 → 9.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/dist/src/abstractUtxoCoin.d.ts +19 -46
- package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/src/abstractUtxoCoin.js +100 -455
- 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 +45 -15
- 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 +54 -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 +5 -2
- package/dist/src/descriptor/validatePolicy.d.ts +14 -0
- package/dist/src/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/src/descriptor/validatePolicy.js +48 -0
- 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 +14 -0
- package/dist/src/keychains.d.ts.map +1 -0
- package/dist/src/keychains.js +61 -0
- package/dist/src/names.js +35 -2
- 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 +47 -14
- 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 +40 -7
- package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
- package/dist/src/recovery/mempoolApi.js +7 -7
- package/dist/src/replayProtection.js +35 -2
- package/dist/src/sign.d.ts +0 -3
- package/dist/src/sign.d.ts.map +1 -1
- package/dist/src/sign.js +41 -8
- 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/descriptor/outputDifference.d.ts +30 -0
- package/dist/src/transaction/descriptor/outputDifference.d.ts.map +1 -0
- package/dist/src/transaction/descriptor/outputDifference.js +38 -0
- package/dist/src/transaction/explainTransaction.d.ts +11 -8
- package/dist/src/transaction/explainTransaction.d.ts.map +1 -1
- package/dist/src/transaction/explainTransaction.js +46 -182
- package/dist/src/transaction/fetchInputs.js +35 -2
- 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 +3 -1
- package/dist/src/transaction/index.d.ts.map +1 -1
- package/dist/src/transaction/index.js +8 -2
- 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.js +35 -2
- 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 +11 -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 +27 -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/test/transaction/descriptor/outputDifference.d.ts +2 -0
- package/dist/test/transaction/descriptor/outputDifference.d.ts.map +1 -0
- package/dist/test/transaction/descriptor/outputDifference.js +60 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -7
- package/dist/src/parseOutput.d.ts.map +0 -1
- package/dist/src/parseOutput.js +0 -214
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findDescriptorForInput = findDescriptorForInput;
|
|
4
|
+
exports.findDescriptorForOutput = findDescriptorForOutput;
|
|
5
|
+
/**
|
|
6
|
+
* Find a descriptor in the descriptor map that matches the given script and derivation index.
|
|
7
|
+
* @param script
|
|
8
|
+
* @param index
|
|
9
|
+
* @param descriptorMap
|
|
10
|
+
* @returns DescriptorWithIndex if found, undefined otherwise
|
|
11
|
+
*/
|
|
12
|
+
function findDescriptorForDerivationIndex(script, index, descriptorMap) {
|
|
13
|
+
for (const descriptor of descriptorMap.values()) {
|
|
14
|
+
if (Buffer.from(descriptor.atDerivationIndex(index).scriptPubkey()).equals(script)) {
|
|
15
|
+
return { descriptor, index };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
function getDerivationIndexFromPath(path) {
|
|
21
|
+
const indexStr = path.split('/').pop();
|
|
22
|
+
if (!indexStr) {
|
|
23
|
+
throw new Error('Invalid derivation path');
|
|
24
|
+
}
|
|
25
|
+
const index = parseInt(indexStr, 10);
|
|
26
|
+
if (index.toString() !== indexStr) {
|
|
27
|
+
throw new Error(`Invalid derivation path ${path}`);
|
|
28
|
+
}
|
|
29
|
+
return index;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Wrapper around findDescriptorForDerivationPath that tries multiple derivation paths.
|
|
33
|
+
* @param script
|
|
34
|
+
* @param derivationPaths
|
|
35
|
+
* @param descriptorMap
|
|
36
|
+
*/
|
|
37
|
+
function findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap) {
|
|
38
|
+
const derivationIndexSet = new Set(derivationPaths.map((p) => getDerivationIndexFromPath(p)));
|
|
39
|
+
for (const index of [...derivationIndexSet]) {
|
|
40
|
+
const desc = findDescriptorForDerivationIndex(script, index, descriptorMap);
|
|
41
|
+
if (desc) {
|
|
42
|
+
return desc;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @param input
|
|
49
|
+
* @param descriptorMap
|
|
50
|
+
* @returns DescriptorWithIndex for the input if found, undefined otherwise
|
|
51
|
+
*/
|
|
52
|
+
function findDescriptorForInput(input, descriptorMap) {
|
|
53
|
+
var _a;
|
|
54
|
+
const script = (_a = input.witnessUtxo) === null || _a === void 0 ? void 0 : _a.script;
|
|
55
|
+
if (!script) {
|
|
56
|
+
throw new Error('Missing script');
|
|
57
|
+
}
|
|
58
|
+
if (!input.bip32Derivation) {
|
|
59
|
+
throw new Error('Missing derivation paths');
|
|
60
|
+
}
|
|
61
|
+
return findDescriptorForAnyDerivationPath(script, input.bip32Derivation.map((v) => v.path), descriptorMap);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* @param script - the output script
|
|
65
|
+
* @param output - the PSBT output
|
|
66
|
+
* @param descriptorMap
|
|
67
|
+
* @returns DescriptorWithIndex for the output if found, undefined otherwise
|
|
68
|
+
*/
|
|
69
|
+
function findDescriptorForOutput(script, output, descriptorMap) {
|
|
70
|
+
if (!output.bip32Derivation) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
return findDescriptorForAnyDerivationPath(script, output.bip32Derivation.map((d) => d.path), descriptorMap);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZERlc2NyaXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvcmUvZGVzY3JpcHRvci9wc2J0L2ZpbmREZXNjcmlwdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQThFQSx3REFnQkM7QUFRRCwwREFhQztBQWpHRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdDQUFnQyxDQUN2QyxNQUFjLEVBQ2QsS0FBYSxFQUNiLGFBQTRCO0lBRTVCLEtBQUssTUFBTSxVQUFVLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDaEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxrQ0FBa0MsQ0FDekMsTUFBYyxFQUNkLGVBQXlCLEVBQ3pCLGFBQTRCO0lBRTVCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FDcEMsS0FBZ0IsRUFDaEIsYUFBNEI7O0lBRTVCLE1BQU0sTUFBTSxHQUFHLE1BQUEsS0FBSyxDQUFDLFdBQVcsMENBQUUsTUFBTSxDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE9BQU8sa0NBQWtDLENBQ3ZDLE1BQU0sRUFDTixLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUN4QyxhQUFhLENBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxNQUFjLEVBQ2QsTUFBa0IsRUFDbEIsYUFBNEI7SUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxrQ0FBa0MsQ0FDdkMsTUFBTSxFQUNOLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQ3pDLGFBQWEsQ0FDZCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cblV0aWxpdGllcyBmb3IgbWFwcGluZyBiYWNrIGZyb20gUFNCVCBpbnB1dHMgdG8gZGVzY3JpcHRvcnMuXG5cblRoaXMgaXMgYSBzb21ld2hhdCBicnV0ZS1mb3JjZSBhdHRlbXB0IHRoYXQgcmVsaWVzIG9uIHRoZSBgYmlwMzJEZXJpdmF0aW9uYCBmaWVsZCB0byBiZSBzZXQuXG5cbkl0IHdpbGwgcHJvYmFibHkgb25seSB3b3JrIGNvcnJlY3RseSBpZiBhbGwgeHB1YnMgaW4gdGhlIGRlc2NyaXB0b3IgYXJlIGRlcml2YWJsZS5cblxuV2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IGEgbW9yZSByb2J1c3QgYW5kIHN0YW5kYXJkIGFwcHJvYWNoIGxpa2UgdGhpczogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9wdWxsLzE1NDhcblxuICovXG5pbXBvcnQgeyBQc2J0SW5wdXQsIFBzYnRPdXRwdXQgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL0Rlc2NyaXB0b3JNYXAnO1xuXG50eXBlIERlc2NyaXB0b3JXaXRoSW5kZXggPSB7IGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7IGluZGV4OiBudW1iZXIgfTtcblxuLyoqXG4gKiBGaW5kIGEgZGVzY3JpcHRvciBpbiB0aGUgZGVzY3JpcHRvciBtYXAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzY3JpcHQgYW5kIGRlcml2YXRpb24gaW5kZXguXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBkZXNjcmlwdG9yTWFwXG4gKiBAcmV0dXJucyBEZXNjcmlwdG9yV2l0aEluZGV4IGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGZpbmREZXNjcmlwdG9yRm9yRGVyaXZhdGlvbkluZGV4KFxuICBzY3JpcHQ6IEJ1ZmZlcixcbiAgaW5kZXg6IG51bWJlcixcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBkZXNjcmlwdG9yTWFwLnZhbHVlcygpKSB7XG4gICAgaWYgKEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoaW5kZXgpLnNjcmlwdFB1YmtleSgpKS5lcXVhbHMoc2NyaXB0KSkge1xuICAgICAgcmV0dXJuIHsgZGVzY3JpcHRvciwgaW5kZXggfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXREZXJpdmF0aW9uSW5kZXhGcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBpbmRleFN0ciA9IHBhdGguc3BsaXQoJy8nKS5wb3AoKTtcbiAgaWYgKCFpbmRleFN0cikge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXJpdmF0aW9uIHBhdGgnKTtcbiAgfVxuICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGluZGV4U3RyLCAxMCk7XG4gIGlmIChpbmRleC50b1N0cmluZygpICE9PSBpbmRleFN0cikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkZXJpdmF0aW9uIHBhdGggJHtwYXRofWApO1xuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBmaW5kRGVzY3JpcHRvckZvckRlcml2YXRpb25QYXRoIHRoYXQgdHJpZXMgbXVsdGlwbGUgZGVyaXZhdGlvbiBwYXRocy5cbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEBwYXJhbSBkZXJpdmF0aW9uUGF0aHNcbiAqIEBwYXJhbSBkZXNjcmlwdG9yTWFwXG4gKi9cbmZ1bmN0aW9uIGZpbmREZXNjcmlwdG9yRm9yQW55RGVyaXZhdGlvblBhdGgoXG4gIHNjcmlwdDogQnVmZmVyLFxuICBkZXJpdmF0aW9uUGF0aHM6IHN0cmluZ1tdLFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwXG4pOiBEZXNjcmlwdG9yV2l0aEluZGV4IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVyaXZhdGlvbkluZGV4U2V0ID0gbmV3IFNldChkZXJpdmF0aW9uUGF0aHMubWFwKChwKSA9PiBnZXREZXJpdmF0aW9uSW5kZXhGcm9tUGF0aChwKSkpO1xuICBmb3IgKGNvbnN0IGluZGV4IG9mIFsuLi5kZXJpdmF0aW9uSW5kZXhTZXRdKSB7XG4gICAgY29uc3QgZGVzYyA9IGZpbmREZXNjcmlwdG9yRm9yRGVyaXZhdGlvbkluZGV4KHNjcmlwdCwgaW5kZXgsIGRlc2NyaXB0b3JNYXApO1xuICAgIGlmIChkZXNjKSB7XG4gICAgICByZXR1cm4gZGVzYztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBwYXJhbSBpbnB1dFxuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqIEByZXR1cm5zIERlc2NyaXB0b3JXaXRoSW5kZXggZm9yIHRoZSBpbnB1dCBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlc2NyaXB0b3JGb3JJbnB1dChcbiAgaW5wdXQ6IFBzYnRJbnB1dCxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNjcmlwdCA9IGlucHV0LndpdG5lc3NVdHhvPy5zY3JpcHQ7XG4gIGlmICghc2NyaXB0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNjcmlwdCcpO1xuICB9XG4gIGlmICghaW5wdXQuYmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGRlcml2YXRpb24gcGF0aHMnKTtcbiAgfVxuICByZXR1cm4gZmluZERlc2NyaXB0b3JGb3JBbnlEZXJpdmF0aW9uUGF0aChcbiAgICBzY3JpcHQsXG4gICAgaW5wdXQuYmlwMzJEZXJpdmF0aW9uLm1hcCgodikgPT4gdi5wYXRoKSxcbiAgICBkZXNjcmlwdG9yTWFwXG4gICk7XG59XG5cbi8qKlxuICogQHBhcmFtIHNjcmlwdCAtIHRoZSBvdXRwdXQgc2NyaXB0XG4gKiBAcGFyYW0gb3V0cHV0IC0gdGhlIFBTQlQgb3V0cHV0XG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICogQHJldHVybnMgRGVzY3JpcHRvcldpdGhJbmRleCBmb3IgdGhlIG91dHB1dCBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlc2NyaXB0b3JGb3JPdXRwdXQoXG4gIHNjcmlwdDogQnVmZmVyLFxuICBvdXRwdXQ6IFBzYnRPdXRwdXQsXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXBcbik6IERlc2NyaXB0b3JXaXRoSW5kZXggfCB1bmRlZmluZWQge1xuICBpZiAoIW91dHB1dC5iaXAzMkRlcml2YXRpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBmaW5kRGVzY3JpcHRvckZvckFueURlcml2YXRpb25QYXRoKFxuICAgIHNjcmlwdCxcbiAgICBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uLm1hcCgoZCkgPT4gZC5wYXRoKSxcbiAgICBkZXNjcmlwdG9yTWFwXG4gICk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/descriptor/psbt/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.finalizePsbt = exports.parse = exports.createPsbt = void 0;
|
|
4
|
+
var createPsbt_1 = require("./createPsbt");
|
|
5
|
+
Object.defineProperty(exports, "createPsbt", { enumerable: true, get: function () { return createPsbt_1.createPsbt; } });
|
|
6
|
+
var parse_1 = require("./parse");
|
|
7
|
+
Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_1.parse; } });
|
|
8
|
+
var wrap_1 = require("./wrap");
|
|
9
|
+
Object.defineProperty(exports, "finalizePsbt", { enumerable: true, get: function () { return wrap_1.finalizePsbt; } });
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL3BzYnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkNBQTBDO0FBQWpDLHdHQUFBLFVBQVUsT0FBQTtBQUNuQixpQ0FBZ0M7QUFBdkIsOEZBQUEsS0FBSyxPQUFBO0FBRWQsK0JBQXNDO0FBQTdCLG9HQUFBLFlBQVksT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgUHNidFBhcmFtcyB9IGZyb20gJy4vY3JlYXRlUHNidCc7XG5leHBvcnQgeyBjcmVhdGVQc2J0IH0gZnJvbSAnLi9jcmVhdGVQc2J0JztcbmV4cG9ydCB7IHBhcnNlIH0gZnJvbSAnLi9wYXJzZSc7XG5cbmV4cG9ydCB7IGZpbmFsaXplUHNidCB9IGZyb20gJy4vd3JhcCc7XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
import { DescriptorMap } from '../DescriptorMap';
|
|
4
|
+
export type ScriptId = {
|
|
5
|
+
descriptor: Descriptor;
|
|
6
|
+
index: number;
|
|
7
|
+
};
|
|
8
|
+
export type ParsedInput = {
|
|
9
|
+
address: string;
|
|
10
|
+
value: bigint;
|
|
11
|
+
scriptId: ScriptId;
|
|
12
|
+
};
|
|
13
|
+
export type ParsedOutput = {
|
|
14
|
+
address?: string;
|
|
15
|
+
script: Buffer;
|
|
16
|
+
value: bigint;
|
|
17
|
+
scriptId?: ScriptId;
|
|
18
|
+
};
|
|
19
|
+
export type ParsedDescriptorTransaction = {
|
|
20
|
+
inputs: ParsedInput[];
|
|
21
|
+
outputs: ParsedOutput[];
|
|
22
|
+
spendAmount: bigint;
|
|
23
|
+
minerFee: bigint;
|
|
24
|
+
virtualSize: number;
|
|
25
|
+
};
|
|
26
|
+
export declare function parse(psbt: utxolib.Psbt, descriptorMap: DescriptorMap, network: utxolib.Network): ParsedDescriptorTransaction;
|
|
27
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../../src/core/descriptor/psbt/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,MAAM,MAAM,QAAQ,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAMF,wBAAgB,KAAK,CACnB,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,2BAA2B,CA0C7B"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parse = parse;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
38
|
+
const VirtualSize_1 = require("../VirtualSize");
|
|
39
|
+
const findDescriptors_1 = require("./findDescriptors");
|
|
40
|
+
const assertSatisfiable_1 = require("./assertSatisfiable");
|
|
41
|
+
function sum(...values) {
|
|
42
|
+
return values.reduce((a, b) => a + b, BigInt(0));
|
|
43
|
+
}
|
|
44
|
+
function parse(psbt, descriptorMap, network) {
|
|
45
|
+
const inputs = psbt.data.inputs.map((input, inputIndex) => {
|
|
46
|
+
if (!input.witnessUtxo) {
|
|
47
|
+
throw new Error('invalid input: no witnessUtxo');
|
|
48
|
+
}
|
|
49
|
+
if (!input.witnessUtxo.value) {
|
|
50
|
+
throw new Error('invalid input: no value');
|
|
51
|
+
}
|
|
52
|
+
const descriptorWithIndex = (0, findDescriptors_1.findDescriptorForInput)(input, descriptorMap);
|
|
53
|
+
if (!descriptorWithIndex) {
|
|
54
|
+
throw new Error('invalid input: no descriptor found');
|
|
55
|
+
}
|
|
56
|
+
(0, assertSatisfiable_1.assertSatisfiable)(psbt, inputIndex, descriptorWithIndex.descriptor);
|
|
57
|
+
return {
|
|
58
|
+
address: utxolib.address.fromOutputScript(input.witnessUtxo.script, network),
|
|
59
|
+
value: input.witnessUtxo.value,
|
|
60
|
+
scriptId: descriptorWithIndex,
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
const outputs = psbt.txOutputs.map((output, i) => {
|
|
64
|
+
if (output.value === undefined) {
|
|
65
|
+
throw new Error('invalid output: no value');
|
|
66
|
+
}
|
|
67
|
+
const descriptorWithIndex = (0, findDescriptors_1.findDescriptorForOutput)(output.script, psbt.data.outputs[i], descriptorMap);
|
|
68
|
+
return {
|
|
69
|
+
address: output.address,
|
|
70
|
+
script: output.script,
|
|
71
|
+
value: output.value,
|
|
72
|
+
scriptId: descriptorWithIndex,
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
const inputAmount = sum(...inputs.map((input) => input.value));
|
|
76
|
+
const outputSum = sum(...outputs.map((output) => output.value));
|
|
77
|
+
const spendAmount = sum(...outputs.filter((output) => !('descriptor' in output)).map((output) => output.value));
|
|
78
|
+
const minerFee = inputAmount - outputSum;
|
|
79
|
+
return {
|
|
80
|
+
inputs,
|
|
81
|
+
outputs,
|
|
82
|
+
spendAmount,
|
|
83
|
+
minerFee,
|
|
84
|
+
virtualSize: (0, VirtualSize_1.getVirtualSize)({ inputs: inputs.map((i) => i.scriptId.descriptor), outputs }),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL3BzYnQvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ0Esc0JBOENDO0FBaEZELHlEQUEyQztBQUczQyxnREFBZ0Q7QUFDaEQsdURBQW9GO0FBQ3BGLDJEQUF3RDtBQXlCeEQsU0FBUyxHQUFHLENBQUMsR0FBRyxNQUFnQjtJQUM5QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFnQixLQUFLLENBQ25CLElBQWtCLEVBQ2xCLGFBQTRCLEVBQzVCLE9BQXdCO0lBRXhCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQWUsRUFBRTtRQUNyRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxNQUFNLG1CQUFtQixHQUFHLElBQUEsd0NBQXNCLEVBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBQSxxQ0FBaUIsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLE9BQU87WUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDNUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSztZQUM5QixRQUFRLEVBQUUsbUJBQW1CO1NBQzlCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBZ0IsRUFBRTtRQUM3RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxNQUFNLG1CQUFtQixHQUFHLElBQUEseUNBQXVCLEVBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN4RyxPQUFPO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsUUFBUSxFQUFFLG1CQUFtQjtTQUM5QixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoSCxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDO0lBQ3pDLE9BQU87UUFDTCxNQUFNO1FBQ04sT0FBTztRQUNQLFdBQVc7UUFDWCxRQUFRO1FBQ1IsV0FBVyxFQUFFLElBQUEsNEJBQWMsRUFBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0tBQzNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vRGVzY3JpcHRvck1hcCc7XG5pbXBvcnQgeyBnZXRWaXJ0dWFsU2l6ZSB9IGZyb20gJy4uL1ZpcnR1YWxTaXplJztcbmltcG9ydCB7IGZpbmREZXNjcmlwdG9yRm9ySW5wdXQsIGZpbmREZXNjcmlwdG9yRm9yT3V0cHV0IH0gZnJvbSAnLi9maW5kRGVzY3JpcHRvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0U2F0aXNmaWFibGUgfSBmcm9tICcuL2Fzc2VydFNhdGlzZmlhYmxlJztcblxuZXhwb3J0IHR5cGUgU2NyaXB0SWQgPSB7IGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7IGluZGV4OiBudW1iZXIgfTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkSW5wdXQgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgdmFsdWU6IGJpZ2ludDtcbiAgc2NyaXB0SWQ6IFNjcmlwdElkO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkT3V0cHV0ID0ge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBzY3JpcHQ6IEJ1ZmZlcjtcbiAgdmFsdWU6IGJpZ2ludDtcbiAgc2NyaXB0SWQ/OiBTY3JpcHRJZDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbiA9IHtcbiAgaW5wdXRzOiBQYXJzZWRJbnB1dFtdO1xuICBvdXRwdXRzOiBQYXJzZWRPdXRwdXRbXTtcbiAgc3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgbWluZXJGZWU6IGJpZ2ludDtcbiAgdmlydHVhbFNpemU6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIHN1bSguLi52YWx1ZXM6IGJpZ2ludFtdKTogYmlnaW50IHtcbiAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCBCaWdJbnQoMCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoXG4gIHBzYnQ6IHV0eG9saWIuUHNidCxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcCxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBQYXJzZWREZXNjcmlwdG9yVHJhbnNhY3Rpb24ge1xuICBjb25zdCBpbnB1dHMgPSBwc2J0LmRhdGEuaW5wdXRzLm1hcCgoaW5wdXQsIGlucHV0SW5kZXgpOiBQYXJzZWRJbnB1dCA9PiB7XG4gICAgaWYgKCFpbnB1dC53aXRuZXNzVXR4bykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGlucHV0OiBubyB3aXRuZXNzVXR4bycpO1xuICAgIH1cbiAgICBpZiAoIWlucHV0LndpdG5lc3NVdHhvLnZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5wdXQ6IG5vIHZhbHVlJyk7XG4gICAgfVxuICAgIGNvbnN0IGRlc2NyaXB0b3JXaXRoSW5kZXggPSBmaW5kRGVzY3JpcHRvckZvcklucHV0KGlucHV0LCBkZXNjcmlwdG9yTWFwKTtcbiAgICBpZiAoIWRlc2NyaXB0b3JXaXRoSW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dDogbm8gZGVzY3JpcHRvciBmb3VuZCcpO1xuICAgIH1cbiAgICBhc3NlcnRTYXRpc2ZpYWJsZShwc2J0LCBpbnB1dEluZGV4LCBkZXNjcmlwdG9yV2l0aEluZGV4LmRlc2NyaXB0b3IpO1xuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQsIG5ldHdvcmspLFxuICAgICAgdmFsdWU6IGlucHV0LndpdG5lc3NVdHhvLnZhbHVlLFxuICAgICAgc2NyaXB0SWQ6IGRlc2NyaXB0b3JXaXRoSW5kZXgsXG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IG91dHB1dHMgPSBwc2J0LnR4T3V0cHV0cy5tYXAoKG91dHB1dCwgaSk6IFBhcnNlZE91dHB1dCA9PiB7XG4gICAgaWYgKG91dHB1dC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3V0cHV0OiBubyB2YWx1ZScpO1xuICAgIH1cbiAgICBjb25zdCBkZXNjcmlwdG9yV2l0aEluZGV4ID0gZmluZERlc2NyaXB0b3JGb3JPdXRwdXQob3V0cHV0LnNjcmlwdCwgcHNidC5kYXRhLm91dHB1dHNbaV0sIGRlc2NyaXB0b3JNYXApO1xuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBvdXRwdXQudmFsdWUsXG4gICAgICBzY3JpcHRJZDogZGVzY3JpcHRvcldpdGhJbmRleCxcbiAgICB9O1xuICB9KTtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSBzdW0oLi4uaW5wdXRzLm1hcCgoaW5wdXQpID0+IGlucHV0LnZhbHVlKSk7XG4gIGNvbnN0IG91dHB1dFN1bSA9IHN1bSguLi5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQudmFsdWUpKTtcbiAgY29uc3Qgc3BlbmRBbW91bnQgPSBzdW0oLi4ub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gISgnZGVzY3JpcHRvcicgaW4gb3V0cHV0KSkubWFwKChvdXRwdXQpID0+IG91dHB1dC52YWx1ZSkpO1xuICBjb25zdCBtaW5lckZlZSA9IGlucHV0QW1vdW50IC0gb3V0cHV0U3VtO1xuICByZXR1cm4ge1xuICAgIGlucHV0cyxcbiAgICBvdXRwdXRzLFxuICAgIHNwZW5kQW1vdW50LFxuICAgIG1pbmVyRmVlLFxuICAgIHZpcnR1YWxTaXplOiBnZXRWaXJ0dWFsU2l6ZSh7IGlucHV0czogaW5wdXRzLm1hcCgoaSkgPT4gaS5zY3JpcHRJZC5kZXNjcmlwdG9yKSwgb3V0cHV0cyB9KSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Psbt as WasmPsbt } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
export declare function toWrappedPsbt(psbt: utxolib.bitgo.UtxoPsbt | utxolib.Psbt | Buffer | Uint8Array): WasmPsbt;
|
|
4
|
+
export declare function toUtxoPsbt(psbt: WasmPsbt | Buffer | Uint8Array, network: utxolib.Network): utxolib.bitgo.UtxoPsbt;
|
|
5
|
+
/**
|
|
6
|
+
* Use `wasm-miniscript` to finalize a PSBT.
|
|
7
|
+
* Miniscript based finalization is more powerful than bitcoinjs-lib's / utxo-lib's finalization
|
|
8
|
+
* and can finalize more complex scripts (e.g. miniscript descriptors).
|
|
9
|
+
* @param psbt
|
|
10
|
+
*/
|
|
11
|
+
export declare function finalizePsbt(psbt: utxolib.bitgo.UtxoPsbt): void;
|
|
12
|
+
//# sourceMappingURL=wrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../../../src/core/descriptor/psbt/wrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAQzG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAQjH;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAU/D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.toWrappedPsbt = toWrappedPsbt;
|
|
37
|
+
exports.toUtxoPsbt = toUtxoPsbt;
|
|
38
|
+
exports.finalizePsbt = finalizePsbt;
|
|
39
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
40
|
+
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
41
|
+
function toWrappedPsbt(psbt) {
|
|
42
|
+
if (psbt instanceof utxolib.bitgo.UtxoPsbt || psbt instanceof utxolib.Psbt) {
|
|
43
|
+
psbt = psbt.toBuffer();
|
|
44
|
+
}
|
|
45
|
+
if (psbt instanceof Buffer || psbt instanceof Uint8Array) {
|
|
46
|
+
return wasm_miniscript_1.Psbt.deserialize(psbt);
|
|
47
|
+
}
|
|
48
|
+
throw new Error('Invalid input');
|
|
49
|
+
}
|
|
50
|
+
function toUtxoPsbt(psbt, network) {
|
|
51
|
+
if (psbt instanceof wasm_miniscript_1.Psbt) {
|
|
52
|
+
psbt = psbt.serialize();
|
|
53
|
+
}
|
|
54
|
+
if (psbt instanceof Buffer || psbt instanceof Uint8Array) {
|
|
55
|
+
return utxolib.bitgo.UtxoPsbt.fromBuffer(Buffer.from(psbt), { network });
|
|
56
|
+
}
|
|
57
|
+
throw new Error('Invalid input');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Use `wasm-miniscript` to finalize a PSBT.
|
|
61
|
+
* Miniscript based finalization is more powerful than bitcoinjs-lib's / utxo-lib's finalization
|
|
62
|
+
* and can finalize more complex scripts (e.g. miniscript descriptors).
|
|
63
|
+
* @param psbt
|
|
64
|
+
*/
|
|
65
|
+
function finalizePsbt(psbt) {
|
|
66
|
+
if (utxolib.getMainnet(psbt.network) !== utxolib.networks.bitcoin) {
|
|
67
|
+
throw new Error('only bitcoin and testnet are supported');
|
|
68
|
+
}
|
|
69
|
+
const wrappedPsbt = toWrappedPsbt(psbt);
|
|
70
|
+
wrappedPsbt.finalize();
|
|
71
|
+
const unwrappedPsbt = toUtxoPsbt(wrappedPsbt, psbt.network);
|
|
72
|
+
for (let i = 0; i < psbt.data.inputs.length; i++) {
|
|
73
|
+
psbt.data.inputs[i] = unwrappedPsbt.data.inputs[i];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvcHNidC93cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0Esc0NBUUM7QUFFRCxnQ0FRQztBQVFELG9DQVVDO0FBdkNELDREQUEwRDtBQUMxRCx5REFBMkM7QUFFM0MsU0FBZ0IsYUFBYSxDQUFDLElBQWlFO0lBQzdGLElBQUksSUFBSSxZQUFZLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksWUFBWSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0UsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxJQUFJLFlBQVksTUFBTSxJQUFJLElBQUksWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUN6RCxPQUFPLHNCQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsSUFBb0MsRUFBRSxPQUF3QjtJQUN2RixJQUFJLElBQUksWUFBWSxzQkFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxJQUFJLFlBQVksTUFBTSxJQUFJLElBQUksWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUN6RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixZQUFZLENBQUMsSUFBNEI7SUFDdkQsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQc2J0IGFzIFdhc21Qc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1dyYXBwZWRQc2J0KHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCB1dHhvbGliLlBzYnQgfCBCdWZmZXIgfCBVaW50OEFycmF5KTogV2FzbVBzYnQge1xuICBpZiAocHNidCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfHwgcHNidCBpbnN0YW5jZW9mIHV0eG9saWIuUHNidCkge1xuICAgIHBzYnQgPSBwc2J0LnRvQnVmZmVyKCk7XG4gIH1cbiAgaWYgKHBzYnQgaW5zdGFuY2VvZiBCdWZmZXIgfHwgcHNidCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICByZXR1cm4gV2FzbVBzYnQuZGVzZXJpYWxpemUocHNidCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1V0eG9Qc2J0KHBzYnQ6IFdhc21Qc2J0IHwgQnVmZmVyIHwgVWludDhBcnJheSwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGlmIChwc2J0IGluc3RhbmNlb2YgV2FzbVBzYnQpIHtcbiAgICBwc2J0ID0gcHNidC5zZXJpYWxpemUoKTtcbiAgfVxuICBpZiAocHNidCBpbnN0YW5jZW9mIEJ1ZmZlciB8fCBwc2J0IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LmZyb21CdWZmZXIoQnVmZmVyLmZyb20ocHNidCksIHsgbmV0d29yayB9KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQnKTtcbn1cblxuLyoqXG4gKiBVc2UgYHdhc20tbWluaXNjcmlwdGAgdG8gZmluYWxpemUgYSBQU0JULlxuICogTWluaXNjcmlwdCBiYXNlZCBmaW5hbGl6YXRpb24gaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIGJpdGNvaW5qcy1saWIncyAvIHV0eG8tbGliJ3MgZmluYWxpemF0aW9uXG4gKiBhbmQgY2FuIGZpbmFsaXplIG1vcmUgY29tcGxleCBzY3JpcHRzIChlLmcuIG1pbmlzY3JpcHQgZGVzY3JpcHRvcnMpLlxuICogQHBhcmFtIHBzYnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplUHNidChwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KTogdm9pZCB7XG4gIGlmICh1dHhvbGliLmdldE1haW5uZXQocHNidC5uZXR3b3JrKSAhPT0gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdvbmx5IGJpdGNvaW4gYW5kIHRlc3RuZXQgYXJlIHN1cHBvcnRlZCcpO1xuICB9XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gdG9XcmFwcGVkUHNidChwc2J0KTtcbiAgd3JhcHBlZFBzYnQuZmluYWxpemUoKTtcbiAgY29uc3QgdW53cmFwcGVkUHNidCA9IHRvVXR4b1BzYnQod3JhcHBlZFBzYnQsIHBzYnQubmV0d29yayk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHNidC5kYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgIHBzYnQuZGF0YS5pbnB1dHNbaV0gPSB1bndyYXBwZWRQc2J0LmRhdGEuaW5wdXRzW2ldO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signTxLocal.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/signTxLocal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAI3G"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signTxLocal = signTxLocal;
|
|
4
|
+
function signTxLocal(tx, key) {
|
|
5
|
+
tx = tx.clone();
|
|
6
|
+
tx.signAllInputsHD(key);
|
|
7
|
+
return tx;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblR4TG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL3NpZ25UeExvY2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0NBSUM7QUFKRCxTQUFnQixXQUFXLENBQUMsRUFBMEIsRUFBRSxHQUEyQjtJQUNqRixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hCLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEIsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5leHBvcnQgZnVuY3Rpb24gc2lnblR4TG9jYWwodHg6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGtleTogdXR4b2xpYi5CSVAzMkludGVyZmFjZSk6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICB0eCA9IHR4LmNsb25lKCk7XG4gIHR4LnNpZ25BbGxJbnB1dHNIRChrZXkpO1xuICByZXR1cm4gdHg7XG59XG4iXX0=
|
|
@@ -1,9 +1,42 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.NamedDescriptor = void 0;
|
|
4
|
-
const t = require("io-ts");
|
|
37
|
+
const t = __importStar(require("io-ts"));
|
|
5
38
|
exports.NamedDescriptor = t.type({
|
|
6
39
|
name: t.string,
|
|
7
40
|
value: t.string,
|
|
8
41
|
});
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvTmFtZWREZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlDQUEyQjtBQUVkLFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO0NBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuXG5leHBvcnQgY29uc3QgTmFtZWREZXNjcmlwdG9yID0gdC50eXBlKHtcbiAgbmFtZTogdC5zdHJpbmcsXG4gIHZhbHVlOiB0LnN0cmluZyxcbn0pO1xuXG5leHBvcnQgdHlwZSBOYW1lZERlc2NyaXB0b3IgPSB0LlR5cGVPZjx0eXBlb2YgTmFtZWREZXNjcmlwdG9yPjtcbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as utxolib from '@bitgo/utxo-lib';
|
|
2
2
|
import { UtxoCoinSpecific, VerifyAddressOptions } from '../abstractUtxoCoin';
|
|
3
|
-
|
|
3
|
+
import { DescriptorMap } from '../core/descriptor';
|
|
4
|
+
export declare function assertDescriptorWalletAddress(network: utxolib.Network, params: VerifyAddressOptions<UtxoCoinSpecific>, descriptors: DescriptorMap): void;
|
|
4
5
|
//# sourceMappingURL=assertDescriptorWalletAddress.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertDescriptorWalletAddress.d.ts","sourceRoot":"","sources":["../../../src/descriptor/assertDescriptorWalletAddress.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assertDescriptorWalletAddress.d.ts","sourceRoot":"","sources":["../../../src/descriptor/assertDescriptorWalletAddress.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUnD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,MAAM,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,EAC9C,WAAW,EAAE,aAAa,GACzB,IAAI,CAoBN"}
|
|
@@ -1,28 +1,58 @@
|
|
|
1
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
|
+
};
|
|
2
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
39
|
exports.assertDescriptorWalletAddress = assertDescriptorWalletAddress;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const utxolib = require("@bitgo/utxo-lib");
|
|
7
|
-
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
8
|
-
const NamedDescriptor_1 = require("./NamedDescriptor");
|
|
40
|
+
const assert_1 = __importDefault(require("assert"));
|
|
41
|
+
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
9
42
|
class DescriptorAddressMismatchError extends Error {
|
|
10
43
|
constructor(descriptor, index, derivedAddress, expectedAddress) {
|
|
11
44
|
super(`Address mismatch for descriptor ${descriptor.toString()} at index ${index}: ${derivedAddress} !== ${expectedAddress}`);
|
|
12
45
|
}
|
|
13
46
|
}
|
|
14
47
|
function assertDescriptorWalletAddress(network, params, descriptors) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
const namedDescriptor = descriptors.find((d) => d.name === descriptorName);
|
|
22
|
-
if (!namedDescriptor) {
|
|
48
|
+
(0, assert_1.default)(params.coinSpecific);
|
|
49
|
+
(0, assert_1.default)('descriptorName' in params.coinSpecific);
|
|
50
|
+
(0, assert_1.default)('descriptorChecksum' in params.coinSpecific);
|
|
51
|
+
const { descriptorName, descriptorChecksum } = params.coinSpecific;
|
|
52
|
+
const descriptor = descriptors.get(params.coinSpecific.descriptorName);
|
|
53
|
+
if (!descriptor) {
|
|
23
54
|
throw new Error(`Descriptor ${descriptorName} not found`);
|
|
24
55
|
}
|
|
25
|
-
const descriptor = wasm_miniscript_1.Descriptor.fromString(namedDescriptor.value, 'derivable');
|
|
26
56
|
const checksum = descriptor.toString().slice(-8);
|
|
27
57
|
if (checksum !== descriptorChecksum) {
|
|
28
58
|
throw new Error(`Descriptor checksum mismatch for descriptor name=${descriptorName}: ${checksum} !== ${descriptorChecksum}`);
|
|
@@ -33,4 +63,4 @@ function assertDescriptorWalletAddress(network, params, descriptors) {
|
|
|
33
63
|
throw new DescriptorAddressMismatchError(descriptor, params.index, derivedAddress, params.address);
|
|
34
64
|
}
|
|
35
65
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9hc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWVBLHNFQXdCQztBQXZDRCxvREFBNEI7QUFDNUIseURBQTJDO0FBTTNDLE1BQU0sOEJBQStCLFNBQVEsS0FBSztJQUNoRCxZQUFZLFVBQXNCLEVBQUUsS0FBYSxFQUFFLGNBQXNCLEVBQUUsZUFBdUI7UUFDaEcsS0FBSyxDQUNILG1DQUFtQyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsS0FBSyxLQUFLLGNBQWMsUUFBUSxlQUFlLEVBQUUsQ0FDdkgsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELFNBQWdCLDZCQUE2QixDQUMzQyxPQUF3QixFQUN4QixNQUE4QyxFQUM5QyxXQUEwQjtJQUUxQixJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLElBQUEsZ0JBQU0sRUFBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsSUFBQSxnQkFBTSxFQUFDLG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRCxNQUFNLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNuRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxjQUFjLFlBQVksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsSUFBSSxRQUFRLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLG9EQUFvRCxjQUFjLEtBQUssUUFBUSxRQUFRLGtCQUFrQixFQUFFLENBQzVHLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDN0YsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEYsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLGNBQWMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSw4QkFBOEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JHLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28vdXR4by1saWInO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG5pbXBvcnQgeyBVdHhvQ29pblNwZWNpZmljLCBWZXJpZnlBZGRyZXNzT3B0aW9ucyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL2NvcmUvZGVzY3JpcHRvcic7XG5cbmNsYXNzIERlc2NyaXB0b3JBZGRyZXNzTWlzbWF0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoZGVzY3JpcHRvcjogRGVzY3JpcHRvciwgaW5kZXg6IG51bWJlciwgZGVyaXZlZEFkZHJlc3M6IHN0cmluZywgZXhwZWN0ZWRBZGRyZXNzOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgIGBBZGRyZXNzIG1pc21hdGNoIGZvciBkZXNjcmlwdG9yICR7ZGVzY3JpcHRvci50b1N0cmluZygpfSBhdCBpbmRleCAke2luZGV4fTogJHtkZXJpdmVkQWRkcmVzc30gIT09ICR7ZXhwZWN0ZWRBZGRyZXNzfWBcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcyhcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICBwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zPFV0eG9Db2luU3BlY2lmaWM+LFxuICBkZXNjcmlwdG9yczogRGVzY3JpcHRvck1hcFxuKTogdm9pZCB7XG4gIGFzc2VydChwYXJhbXMuY29pblNwZWNpZmljKTtcbiAgYXNzZXJ0KCdkZXNjcmlwdG9yTmFtZScgaW4gcGFyYW1zLmNvaW5TcGVjaWZpYyk7XG4gIGFzc2VydCgnZGVzY3JpcHRvckNoZWNrc3VtJyBpbiBwYXJhbXMuY29pblNwZWNpZmljKTtcbiAgY29uc3QgeyBkZXNjcmlwdG9yTmFtZSwgZGVzY3JpcHRvckNoZWNrc3VtIH0gPSBwYXJhbXMuY29pblNwZWNpZmljO1xuICBjb25zdCBkZXNjcmlwdG9yID0gZGVzY3JpcHRvcnMuZ2V0KHBhcmFtcy5jb2luU3BlY2lmaWMuZGVzY3JpcHRvck5hbWUpO1xuICBpZiAoIWRlc2NyaXB0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlc2NyaXB0b3IgJHtkZXNjcmlwdG9yTmFtZX0gbm90IGZvdW5kYCk7XG4gIH1cbiAgY29uc3QgY2hlY2tzdW0gPSBkZXNjcmlwdG9yLnRvU3RyaW5nKCkuc2xpY2UoLTgpO1xuICBpZiAoY2hlY2tzdW0gIT09IGRlc2NyaXB0b3JDaGVja3N1bSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEZXNjcmlwdG9yIGNoZWNrc3VtIG1pc21hdGNoIGZvciBkZXNjcmlwdG9yIG5hbWU9JHtkZXNjcmlwdG9yTmFtZX06ICR7Y2hlY2tzdW19ICE9PSAke2Rlc2NyaXB0b3JDaGVja3N1bX1gXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZXJpdmVkU2NyaXB0ID0gQnVmZmVyLmZyb20oZGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleChwYXJhbXMuaW5kZXgpLnNjcmlwdFB1YmtleSgpKTtcbiAgY29uc3QgZGVyaXZlZEFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChkZXJpdmVkU2NyaXB0LCBuZXR3b3JrKTtcbiAgaWYgKHBhcmFtcy5hZGRyZXNzICE9PSBkZXJpdmVkQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBEZXNjcmlwdG9yQWRkcmVzc01pc21hdGNoRXJyb3IoZGVzY3JpcHRvciwgcGFyYW1zLmluZGV4LCBkZXJpdmVkQWRkcmVzcywgcGFyYW1zLmFkZHJlc3MpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BIP32Interface } from '@bitgo/utxo-lib';
|
|
2
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
3
|
+
type DescriptorWithKeys<TName extends string> = {
|
|
4
|
+
name: TName;
|
|
5
|
+
keys: BIP32Interface[];
|
|
6
|
+
path: string;
|
|
7
|
+
};
|
|
8
|
+
export type DescriptorBuilder = DescriptorWithKeys<'Wsh2Of2'> | DescriptorWithKeys<'Wsh2Of3'> | (DescriptorWithKeys<'ShWsh2Of3CltvDrop'> & {
|
|
9
|
+
locktime: number;
|
|
10
|
+
});
|
|
11
|
+
export declare function getDescriptorFromBuilder(builder: DescriptorBuilder): Descriptor;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/builder/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,KAAK,kBAAkB,CAAC,KAAK,SAAS,MAAM,IAAI;IAC9C,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,kBAAkB,CAAC,SAAS,CAAC,GAC7B,kBAAkB,CAAC,SAAS,CAAC,GAM7B,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAgCrE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAE/E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDescriptorFromBuilder = getDescriptorFromBuilder;
|
|
4
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
5
|
+
function toXPub(k) {
|
|
6
|
+
if (typeof k === 'string') {
|
|
7
|
+
return k;
|
|
8
|
+
}
|
|
9
|
+
return k.neutered().toBase58();
|
|
10
|
+
}
|
|
11
|
+
function multi(m, n, keys, path) {
|
|
12
|
+
if (n < m) {
|
|
13
|
+
throw new Error(`Cannot create ${m} of ${n} multisig`);
|
|
14
|
+
}
|
|
15
|
+
if (keys.length < n) {
|
|
16
|
+
throw new Error(`Not enough keys for ${m} of ${n} multisig: keys.length=${keys.length}`);
|
|
17
|
+
}
|
|
18
|
+
keys = keys.slice(0, n);
|
|
19
|
+
return `multi(${m},${keys.map((k) => `${toXPub(k)}/${path}`).join(',')})`;
|
|
20
|
+
}
|
|
21
|
+
function getDescriptorString(builder) {
|
|
22
|
+
switch (builder.name) {
|
|
23
|
+
case 'Wsh2Of3':
|
|
24
|
+
return `wsh(${multi(2, 3, builder.keys, builder.path)})`;
|
|
25
|
+
case 'Wsh2Of2':
|
|
26
|
+
return `wsh(${multi(2, 2, builder.keys, builder.path)})`;
|
|
27
|
+
case 'ShWsh2Of3CltvDrop':
|
|
28
|
+
return `sh(wsh(and_v(r:after(${builder.locktime}),${multi(2, 3, builder.keys, builder.path)})))`;
|
|
29
|
+
}
|
|
30
|
+
throw new Error(`Unknown descriptor template: ${builder}`);
|
|
31
|
+
}
|
|
32
|
+
function getDescriptorFromBuilder(builder) {
|
|
33
|
+
return wasm_miniscript_1.Descriptor.fromString(getDescriptorString(builder), 'derivable');
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL2J1aWxkZXIvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlEQSw0REFFQztBQWxERCw0REFBb0Q7QUFrQnBELFNBQVMsTUFBTSxDQUFDLENBQTBCO0lBQ3hDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsSUFBaUMsRUFBRSxJQUFZO0lBQ2xGLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQywwQkFBMEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUNELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QixPQUFPLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDNUUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsT0FBMEI7SUFDckQsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsS0FBSyxTQUFTO1lBQ1osT0FBTyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0QsS0FBSyxTQUFTO1lBQ1osT0FBTyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDM0QsS0FBSyxtQkFBbUI7WUFDdEIsT0FBTyx3QkFBd0IsT0FBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3JHLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxPQUEwQjtJQUNqRSxPQUFPLDRCQUFVLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5cbnR5cGUgRGVzY3JpcHRvcldpdGhLZXlzPFROYW1lIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgbmFtZTogVE5hbWU7XG4gIGtleXM6IEJJUDMySW50ZXJmYWNlW107XG4gIHBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlc2NyaXB0b3JCdWlsZGVyID1cbiAgfCBEZXNjcmlwdG9yV2l0aEtleXM8J1dzaDJPZjInPlxuICB8IERlc2NyaXB0b3JXaXRoS2V5czwnV3NoMk9mMyc+XG4gIC8qXG4gICAqIFRoaXMgaXMgYSB3cmFwcGVkIHNlZ3dpdCAyb2YzIG11bHRpc2lnIHRoYXQgYWxzbyB1c2VzIGEgcmVsYXRpdmUgbG9ja3RpbWUgd2l0aFxuICAgKiBhbiBPUF9EUk9QIChyZXF1aXJpbmcgYSBtaW5pc2NyaXB0IGV4dGVuc2lvbikuXG4gICAqIEl0IGlzIGJhc2ljYWxseSB3aGF0IGlzIHVzZWQgaW4gQ29yZURhbyBzdGFraW5nIHRyYW5zYWN0aW9ucy5cbiAgICovXG4gIHwgKERlc2NyaXB0b3JXaXRoS2V5czwnU2hXc2gyT2YzQ2x0dkRyb3AnPiAmIHsgbG9ja3RpbWU6IG51bWJlciB9KTtcblxuZnVuY3Rpb24gdG9YUHViKGs6IEJJUDMySW50ZXJmYWNlIHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBrID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBrO1xuICB9XG4gIHJldHVybiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbn1cblxuZnVuY3Rpb24gbXVsdGkobTogbnVtYmVyLCBuOiBudW1iZXIsIGtleXM6IEJJUDMySW50ZXJmYWNlW10gfCBzdHJpbmdbXSwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG4gPCBtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY3JlYXRlICR7bX0gb2YgJHtufSBtdWx0aXNpZ2ApO1xuICB9XG4gIGlmIChrZXlzLmxlbmd0aCA8IG4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBlbm91Z2gga2V5cyBmb3IgJHttfSBvZiAke259IG11bHRpc2lnOiBrZXlzLmxlbmd0aD0ke2tleXMubGVuZ3RofWApO1xuICB9XG4gIGtleXMgPSBrZXlzLnNsaWNlKDAsIG4pO1xuICByZXR1cm4gYG11bHRpKCR7bX0sJHtrZXlzLm1hcCgoaykgPT4gYCR7dG9YUHViKGspfS8ke3BhdGh9YCkuam9pbignLCcpfSlgO1xufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yU3RyaW5nKGJ1aWxkZXI6IERlc2NyaXB0b3JCdWlsZGVyKTogc3RyaW5nIHtcbiAgc3dpdGNoIChidWlsZGVyLm5hbWUpIHtcbiAgICBjYXNlICdXc2gyT2YzJzpcbiAgICAgIHJldHVybiBgd3NoKCR7bXVsdGkoMiwgMywgYnVpbGRlci5rZXlzLCBidWlsZGVyLnBhdGgpfSlgO1xuICAgIGNhc2UgJ1dzaDJPZjInOlxuICAgICAgcmV0dXJuIGB3c2goJHttdWx0aSgyLCAyLCBidWlsZGVyLmtleXMsIGJ1aWxkZXIucGF0aCl9KWA7XG4gICAgY2FzZSAnU2hXc2gyT2YzQ2x0dkRyb3AnOlxuICAgICAgcmV0dXJuIGBzaCh3c2goYW5kX3YocjphZnRlcigke2J1aWxkZXIubG9ja3RpbWV9KSwke211bHRpKDIsIDMsIGJ1aWxkZXIua2V5cywgYnVpbGRlci5wYXRoKX0pKSlgO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkZXNjcmlwdG9yIHRlbXBsYXRlOiAke2J1aWxkZXJ9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoYnVpbGRlcjogRGVzY3JpcHRvckJ1aWxkZXIpOiBEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIERlc2NyaXB0b3IuZnJvbVN0cmluZyhnZXREZXNjcmlwdG9yU3RyaW5nKGJ1aWxkZXIpLCAnZGVyaXZhYmxlJyk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseDescriptor = exports.getDescriptorFromBuilder = void 0;
|
|
4
|
+
var builder_1 = require("./builder");
|
|
5
|
+
Object.defineProperty(exports, "getDescriptorFromBuilder", { enumerable: true, get: function () { return builder_1.getDescriptorFromBuilder; } });
|
|
6
|
+
var parse_1 = require("./parse");
|
|
7
|
+
Object.defineProperty(exports, "parseDescriptor", { enumerable: true, get: function () { return parse_1.parseDescriptor; } });
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9idWlsZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF3RTtBQUEvRCxtSEFBQSx3QkFBd0IsT0FBQTtBQUNqQyxpQ0FBMEM7QUFBakMsd0dBQUEsZUFBZSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyLCBEZXNjcmlwdG9yQnVpbGRlciB9IGZyb20gJy4vYnVpbGRlcic7XG5leHBvcnQgeyBwYXJzZURlc2NyaXB0b3IgfSBmcm9tICcuL3BhcnNlJztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import { DescriptorBuilder } from './builder';
|
|
3
|
+
export declare function parseDescriptorNode(node: unknown): DescriptorBuilder;
|
|
4
|
+
export declare function parseDescriptor(descriptor: Descriptor): DescriptorBuilder;
|
|
5
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/builder/parse.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,WAAW,CAAC;AA0DxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CA2CpE;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,iBAAiB,CAMzE"}
|