@bitgo/abstract-utxo 9.2.2 → 9.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/src/abstractUtxoCoin.d.ts +9 -13
- package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/src/abstractUtxoCoin.js +130 -70
- 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.js +45 -10
- package/dist/src/index.js +24 -2
- 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/parseOutput.d.ts +0 -3
- package/dist/src/parseOutput.d.ts.map +1 -1
- package/dist/src/parseOutput.js +16 -17
- 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/explainTransaction.d.ts +15 -0
- package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/src/transaction/explainTransaction.js +51 -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 +2 -0
- package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/src/transaction/fixedScript/index.js +7 -0
- package/dist/src/transaction/index.d.ts +4 -0
- package/dist/src/transaction/index.d.ts.map +1 -0
- package/dist/src/transaction/index.js +22 -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/test/core/descriptor/descriptor.utils.d.ts +9 -0
- package/dist/test/core/descriptor/descriptor.utils.d.ts.map +1 -0
- package/dist/test/core/descriptor/descriptor.utils.js +57 -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/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -10
- 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,9 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
/** Map from descriptor name to descriptor */
|
|
3
|
+
export type DescriptorMap = Map<string, Descriptor>;
|
|
4
|
+
/** Convert an array of descriptor name-value pairs to a descriptor map */
|
|
5
|
+
export declare function toDescriptorMap(descriptors: {
|
|
6
|
+
name: string;
|
|
7
|
+
value: string;
|
|
8
|
+
}[]): DescriptorMap;
|
|
9
|
+
//# sourceMappingURL=DescriptorMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,CAE7F"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toDescriptorMap = toDescriptorMap;
|
|
4
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
5
|
+
/** Convert an array of descriptor name-value pairs to a descriptor map */
|
|
6
|
+
function toDescriptorMap(descriptors) {
|
|
7
|
+
return new Map(descriptors.map((d) => [d.name, wasm_miniscript_1.Descriptor.fromString(d.value, 'derivable')]));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVzY3JpcHRvck1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvRGVzY3JpcHRvck1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBDQUVDO0FBUkQsNERBQW9EO0FBS3BELDBFQUEwRTtBQUMxRSxTQUFnQixlQUFlLENBQUMsV0FBOEM7SUFDNUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsNEJBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG4vKiogTWFwIGZyb20gZGVzY3JpcHRvciBuYW1lIHRvIGRlc2NyaXB0b3IgKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0b3JNYXAgPSBNYXA8c3RyaW5nLCBEZXNjcmlwdG9yPjtcblxuLyoqIENvbnZlcnQgYW4gYXJyYXkgb2YgZGVzY3JpcHRvciBuYW1lLXZhbHVlIHBhaXJzIHRvIGEgZGVzY3JpcHRvciBtYXAgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0b3JNYXAoZGVzY3JpcHRvcnM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSk6IERlc2NyaXB0b3JNYXAge1xuICByZXR1cm4gbmV3IE1hcChkZXNjcmlwdG9ycy5tYXAoKGQpID0+IFtkLm5hbWUsIERlc2NyaXB0b3IuZnJvbVN0cmluZyhkLnZhbHVlLCAnZGVyaXZhYmxlJyldKSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import { DescriptorMap } from './DescriptorMap';
|
|
3
|
+
export type Output = {
|
|
4
|
+
script: Buffer;
|
|
5
|
+
value: bigint;
|
|
6
|
+
};
|
|
7
|
+
export type WithDescriptor<T> = T & {
|
|
8
|
+
descriptor: Descriptor;
|
|
9
|
+
};
|
|
10
|
+
export type WithOptDescriptor<T> = T & {
|
|
11
|
+
descriptor?: Descriptor;
|
|
12
|
+
};
|
|
13
|
+
export type PrevOutput = {
|
|
14
|
+
hash: string;
|
|
15
|
+
index: number;
|
|
16
|
+
witnessUtxo: Output;
|
|
17
|
+
};
|
|
18
|
+
export type DescriptorWalletOutput = PrevOutput & {
|
|
19
|
+
descriptorName: string;
|
|
20
|
+
descriptorIndex: number;
|
|
21
|
+
};
|
|
22
|
+
export type DerivedDescriptorWalletOutput = WithDescriptor<PrevOutput>;
|
|
23
|
+
export declare function toDerivedDescriptorWalletOutput(output: DescriptorWalletOutput, descriptorMap: DescriptorMap): DerivedDescriptorWalletOutput;
|
|
24
|
+
//# sourceMappingURL=Output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Output.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/Output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG;IAClC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG;IACrC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AAEvE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,sBAAsB,EAC9B,aAAa,EAAE,aAAa,GAC3B,6BAA6B,CAgB/B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toDerivedDescriptorWalletOutput = toDerivedDescriptorWalletOutput;
|
|
4
|
+
const address_1 = require("./address");
|
|
5
|
+
function toDerivedDescriptorWalletOutput(output, descriptorMap) {
|
|
6
|
+
const descriptor = descriptorMap.get(output.descriptorName);
|
|
7
|
+
if (!descriptor) {
|
|
8
|
+
throw new Error(`Descriptor not found: ${output.descriptorName}`);
|
|
9
|
+
}
|
|
10
|
+
const derivedDescriptor = descriptor.atDerivationIndex(output.descriptorIndex);
|
|
11
|
+
const script = (0, address_1.createScriptPubKeyFromDescriptor)(derivedDescriptor);
|
|
12
|
+
if (!script.equals(output.witnessUtxo.script)) {
|
|
13
|
+
throw new Error(`Script mismatch: descriptor ${output.descriptorName} ${descriptor.toString()} script=${script}`);
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
hash: output.hash,
|
|
17
|
+
index: output.index,
|
|
18
|
+
witnessUtxo: output.witnessUtxo,
|
|
19
|
+
descriptor: descriptor.atDerivationIndex(output.descriptorIndex),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3V0cHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvcmUvZGVzY3JpcHRvci9PdXRwdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErQkEsMEVBbUJDO0FBL0NELHVDQUE2RDtBQTRCN0QsU0FBZ0IsK0JBQStCLENBQzdDLE1BQThCLEVBQzlCLGFBQTRCO0lBRTVCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUEsMENBQWdDLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsTUFBTSxDQUFDLGNBQWMsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFdBQVcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBQ0QsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLFVBQVUsRUFBRSxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztLQUNqRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4vRGVzY3JpcHRvck1hcCc7XG5pbXBvcnQgeyBjcmVhdGVTY3JpcHRQdWJLZXlGcm9tRGVzY3JpcHRvciB9IGZyb20gJy4vYWRkcmVzcyc7XG5cbmV4cG9ydCB0eXBlIE91dHB1dCA9IHtcbiAgc2NyaXB0OiBCdWZmZXI7XG4gIHZhbHVlOiBiaWdpbnQ7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoRGVzY3JpcHRvcjxUPiA9IFQgJiB7XG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7XG59O1xuXG5leHBvcnQgdHlwZSBXaXRoT3B0RGVzY3JpcHRvcjxUPiA9IFQgJiB7XG4gIGRlc2NyaXB0b3I/OiBEZXNjcmlwdG9yO1xufTtcblxuZXhwb3J0IHR5cGUgUHJldk91dHB1dCA9IHtcbiAgaGFzaDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICB3aXRuZXNzVXR4bzogT3V0cHV0O1xufTtcblxuZXhwb3J0IHR5cGUgRGVzY3JpcHRvcldhbGxldE91dHB1dCA9IFByZXZPdXRwdXQgJiB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JJbmRleDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQgPSBXaXRoRGVzY3JpcHRvcjxQcmV2T3V0cHV0PjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQoXG4gIG91dHB1dDogRGVzY3JpcHRvcldhbGxldE91dHB1dCxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQge1xuICBjb25zdCBkZXNjcmlwdG9yID0gZGVzY3JpcHRvck1hcC5nZXQob3V0cHV0LmRlc2NyaXB0b3JOYW1lKTtcbiAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdG9yIG5vdCBmb3VuZDogJHtvdXRwdXQuZGVzY3JpcHRvck5hbWV9YCk7XG4gIH1cbiAgY29uc3QgZGVyaXZlZERlc2NyaXB0b3IgPSBkZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KG91dHB1dC5kZXNjcmlwdG9ySW5kZXgpO1xuICBjb25zdCBzY3JpcHQgPSBjcmVhdGVTY3JpcHRQdWJLZXlGcm9tRGVzY3JpcHRvcihkZXJpdmVkRGVzY3JpcHRvcik7XG4gIGlmICghc2NyaXB0LmVxdWFscyhvdXRwdXQud2l0bmVzc1V0eG8uc2NyaXB0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2NyaXB0IG1pc21hdGNoOiBkZXNjcmlwdG9yICR7b3V0cHV0LmRlc2NyaXB0b3JOYW1lfSAke2Rlc2NyaXB0b3IudG9TdHJpbmcoKX0gc2NyaXB0PSR7c2NyaXB0fWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgaGFzaDogb3V0cHV0Lmhhc2gsXG4gICAgaW5kZXg6IG91dHB1dC5pbmRleCxcbiAgICB3aXRuZXNzVXR4bzogb3V0cHV0LndpdG5lc3NVdHhvLFxuICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgob3V0cHV0LmRlc2NyaXB0b3JJbmRleCksXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import { DescriptorMap } from './DescriptorMap';
|
|
3
|
+
export declare function getInputVSizesForDescriptors(descriptors: DescriptorMap): Record<string, number>;
|
|
4
|
+
export declare function getChangeOutputVSizesForDescriptor(d: Descriptor): {
|
|
5
|
+
inputVSize: number;
|
|
6
|
+
outputVSize: number;
|
|
7
|
+
};
|
|
8
|
+
type InputWithDescriptorName = {
|
|
9
|
+
descriptorName: string;
|
|
10
|
+
};
|
|
11
|
+
type OutputWithScript = {
|
|
12
|
+
script: Buffer;
|
|
13
|
+
};
|
|
14
|
+
type Tx<TInput> = {
|
|
15
|
+
inputs: TInput[];
|
|
16
|
+
outputs: OutputWithScript[];
|
|
17
|
+
};
|
|
18
|
+
export declare function getVirtualSize(tx: Tx<Descriptor>): number;
|
|
19
|
+
export declare function getVirtualSize(tx: Tx<InputWithDescriptorName>, descriptors: DescriptorMap): number;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=VirtualSize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VirtualSize.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/VirtualSize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA6ChD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM/F;AAED,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,UAAU,GAAG;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAKA;AAED,KAAK,uBAAuB,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1D,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,KAAK,EAAE,CAAC,MAAM,IAAI;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;AAC3D,wBAAgB,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getInputVSizesForDescriptors = getInputVSizesForDescriptors;
|
|
4
|
+
exports.getChangeOutputVSizesForDescriptor = getChangeOutputVSizesForDescriptor;
|
|
5
|
+
exports.getVirtualSize = getVirtualSize;
|
|
6
|
+
const unspents_1 = require("@bitgo/unspents");
|
|
7
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
8
|
+
function getScriptPubKeyLength(descType) {
|
|
9
|
+
// See https://bitcoinops.org/en/tools/calc-size/
|
|
10
|
+
switch (descType) {
|
|
11
|
+
case 'Wpkh':
|
|
12
|
+
// https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wpkh
|
|
13
|
+
return 22;
|
|
14
|
+
case 'Sh':
|
|
15
|
+
case 'ShWsh':
|
|
16
|
+
case 'ShWpkh':
|
|
17
|
+
// https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki#specification
|
|
18
|
+
return 23;
|
|
19
|
+
case 'Pkh':
|
|
20
|
+
return 25;
|
|
21
|
+
case 'Wsh':
|
|
22
|
+
// https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#p2wsh
|
|
23
|
+
return 34;
|
|
24
|
+
case 'Bare':
|
|
25
|
+
throw new Error('cannot determine scriptPubKey length for Bare descriptor');
|
|
26
|
+
default:
|
|
27
|
+
throw new Error('unexpected descriptor type ' + descType);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function getInputVSizeForDescriptor(descriptor) {
|
|
31
|
+
// FIXME(BTC-1489): this can overestimate the size of the input significantly
|
|
32
|
+
const maxWeight = descriptor.maxWeightToSatisfy();
|
|
33
|
+
const maxVSize = Math.ceil(maxWeight / 4);
|
|
34
|
+
const sizeOpPushdata1 = 1;
|
|
35
|
+
const sizeOpPushdata2 = 2;
|
|
36
|
+
return (
|
|
37
|
+
// inputId
|
|
38
|
+
32 +
|
|
39
|
+
// vOut
|
|
40
|
+
4 +
|
|
41
|
+
// nSequence
|
|
42
|
+
4 +
|
|
43
|
+
// script overhead
|
|
44
|
+
(maxVSize < 255 ? sizeOpPushdata1 : sizeOpPushdata2) +
|
|
45
|
+
// script
|
|
46
|
+
maxVSize);
|
|
47
|
+
}
|
|
48
|
+
function getInputVSizesForDescriptors(descriptors) {
|
|
49
|
+
return Object.fromEntries(Array.from(descriptors.entries()).map(([name, d]) => {
|
|
50
|
+
return [name, getInputVSizeForDescriptor(d)];
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
function getChangeOutputVSizesForDescriptor(d) {
|
|
54
|
+
return {
|
|
55
|
+
inputVSize: getInputVSizeForDescriptor(d),
|
|
56
|
+
outputVSize: getScriptPubKeyLength(d.descType()),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function getVirtualSize(tx, descriptorMap) {
|
|
60
|
+
const lookup = descriptorMap ? getInputVSizesForDescriptors(descriptorMap) : undefined;
|
|
61
|
+
const inputVSize = tx.inputs.reduce((sum, input) => {
|
|
62
|
+
if (input instanceof wasm_miniscript_1.Descriptor) {
|
|
63
|
+
return sum + getInputVSizeForDescriptor(input);
|
|
64
|
+
}
|
|
65
|
+
if ('descriptorName' in input) {
|
|
66
|
+
if (!lookup) {
|
|
67
|
+
throw new Error('missing descriptorMap');
|
|
68
|
+
}
|
|
69
|
+
const vsize = lookup[input.descriptorName];
|
|
70
|
+
if (!vsize) {
|
|
71
|
+
throw new Error(`Could not find descriptor ${input.descriptorName}`);
|
|
72
|
+
}
|
|
73
|
+
return sum + vsize;
|
|
74
|
+
}
|
|
75
|
+
throw new Error('unexpected input');
|
|
76
|
+
}, 0);
|
|
77
|
+
const outputVSize = tx.outputs.reduce((sum, o) => {
|
|
78
|
+
return sum + unspents_1.Dimensions.getVSizeForOutputWithScriptLength(o.script.length);
|
|
79
|
+
}, 0);
|
|
80
|
+
// we will just assume that we have at least one segwit input
|
|
81
|
+
return inputVSize + outputVSize + unspents_1.VirtualSizes.txSegOverheadVSize;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlydHVhbFNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL1ZpcnR1YWxTaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0RBLG9FQU1DO0FBRUQsZ0ZBUUM7QUFZRCx3Q0EwQkM7QUF0R0QsOENBQTJEO0FBQzNELDREQUFvRDtBQUlwRCxTQUFTLHFCQUFxQixDQUFDLFFBQWdCO0lBQzdDLGlEQUFpRDtJQUNqRCxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssTUFBTTtZQUNULHdFQUF3RTtZQUN4RSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFFBQVE7WUFDWCwrRUFBK0U7WUFDL0UsT0FBTyxFQUFFLENBQUM7UUFDWixLQUFLLEtBQUs7WUFDUixPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssS0FBSztZQUNSLHVFQUF1RTtZQUN2RSxPQUFPLEVBQUUsQ0FBQztRQUNaLEtBQUssTUFBTTtZQUNULE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztRQUM5RTtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDOUQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLFVBQXNCO0lBQ3hELDZFQUE2RTtJQUM3RSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDMUIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU87SUFDTCxVQUFVO0lBQ1YsRUFBRTtRQUNGLE9BQU87UUFDUCxDQUFDO1FBQ0QsWUFBWTtRQUNaLENBQUM7UUFDRCxrQkFBa0I7UUFDbEIsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUNwRCxTQUFTO1FBQ1QsUUFBUSxDQUNULENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsNEJBQTRCLENBQUMsV0FBMEI7SUFDckUsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbEQsT0FBTyxDQUFDLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0Isa0NBQWtDLENBQUMsQ0FBYTtJQUk5RCxPQUFPO1FBQ0wsVUFBVSxFQUFFLDBCQUEwQixDQUFDLENBQUMsQ0FBQztRQUN6QyxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ2pELENBQUM7QUFDSixDQUFDO0FBWUQsU0FBZ0IsY0FBYyxDQUM1QixFQUFnRCxFQUNoRCxhQUE2QjtJQUU3QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkYsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDakQsSUFBSSxLQUFLLFlBQVksNEJBQVUsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLGdCQUFnQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDTixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMvQyxPQUFPLEdBQUcsR0FBRyxxQkFBVSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0UsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ04sNkRBQTZEO0lBQzdELE9BQU8sVUFBVSxHQUFHLFdBQVcsR0FBRyx1QkFBWSxDQUFDLGtCQUFrQixDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaW1lbnNpb25zLCBWaXJ0dWFsU2l6ZXMgfSBmcm9tICdAYml0Z28vdW5zcGVudHMnO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi9EZXNjcmlwdG9yTWFwJztcblxuZnVuY3Rpb24gZ2V0U2NyaXB0UHViS2V5TGVuZ3RoKGRlc2NUeXBlOiBzdHJpbmcpOiBudW1iZXIge1xuICAvLyBTZWUgaHR0cHM6Ly9iaXRjb2lub3BzLm9yZy9lbi90b29scy9jYWxjLXNpemUvXG4gIHN3aXRjaCAoZGVzY1R5cGUpIHtcbiAgICBjYXNlICdXcGtoJzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAxNDEubWVkaWF3aWtpI3Ayd3BraFxuICAgICAgcmV0dXJuIDIyO1xuICAgIGNhc2UgJ1NoJzpcbiAgICBjYXNlICdTaFdzaCc6XG4gICAgY2FzZSAnU2hXcGtoJzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAwMTYubWVkaWF3aWtpI3NwZWNpZmljYXRpb25cbiAgICAgIHJldHVybiAyMztcbiAgICBjYXNlICdQa2gnOlxuICAgICAgcmV0dXJuIDI1O1xuICAgIGNhc2UgJ1dzaCc6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMTQxLm1lZGlhd2lraSNwMndzaFxuICAgICAgcmV0dXJuIDM0O1xuICAgIGNhc2UgJ0JhcmUnOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZGV0ZXJtaW5lIHNjcmlwdFB1YktleSBsZW5ndGggZm9yIEJhcmUgZGVzY3JpcHRvcicpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQgZGVzY3JpcHRvciB0eXBlICcgKyBkZXNjVHlwZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWU2l6ZUZvckRlc2NyaXB0b3IoZGVzY3JpcHRvcjogRGVzY3JpcHRvcik6IG51bWJlciB7XG4gIC8vIEZJWE1FKEJUQy0xNDg5KTogdGhpcyBjYW4gb3ZlcmVzdGltYXRlIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBzaWduaWZpY2FudGx5XG4gIGNvbnN0IG1heFdlaWdodCA9IGRlc2NyaXB0b3IubWF4V2VpZ2h0VG9TYXRpc2Z5KCk7XG4gIGNvbnN0IG1heFZTaXplID0gTWF0aC5jZWlsKG1heFdlaWdodCAvIDQpO1xuICBjb25zdCBzaXplT3BQdXNoZGF0YTEgPSAxO1xuICBjb25zdCBzaXplT3BQdXNoZGF0YTIgPSAyO1xuICByZXR1cm4gKFxuICAgIC8vIGlucHV0SWRcbiAgICAzMiArXG4gICAgLy8gdk91dFxuICAgIDQgK1xuICAgIC8vIG5TZXF1ZW5jZVxuICAgIDQgK1xuICAgIC8vIHNjcmlwdCBvdmVyaGVhZFxuICAgIChtYXhWU2l6ZSA8IDI1NSA/IHNpemVPcFB1c2hkYXRhMSA6IHNpemVPcFB1c2hkYXRhMikgK1xuICAgIC8vIHNjcmlwdFxuICAgIG1heFZTaXplXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFZTaXplc0ZvckRlc2NyaXB0b3JzKGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yTWFwKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgQXJyYXkuZnJvbShkZXNjcmlwdG9ycy5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIGRdKSA9PiB7XG4gICAgICByZXR1cm4gW25hbWUsIGdldElucHV0VlNpemVGb3JEZXNjcmlwdG9yKGQpXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlT3V0cHV0VlNpemVzRm9yRGVzY3JpcHRvcihkOiBEZXNjcmlwdG9yKToge1xuICBpbnB1dFZTaXplOiBudW1iZXI7XG4gIG91dHB1dFZTaXplOiBudW1iZXI7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBpbnB1dFZTaXplOiBnZXRJbnB1dFZTaXplRm9yRGVzY3JpcHRvcihkKSxcbiAgICBvdXRwdXRWU2l6ZTogZ2V0U2NyaXB0UHViS2V5TGVuZ3RoKGQuZGVzY1R5cGUoKSksXG4gIH07XG59XG5cbnR5cGUgSW5wdXRXaXRoRGVzY3JpcHRvck5hbWUgPSB7IGRlc2NyaXB0b3JOYW1lOiBzdHJpbmcgfTtcbnR5cGUgT3V0cHV0V2l0aFNjcmlwdCA9IHsgc2NyaXB0OiBCdWZmZXIgfTtcblxudHlwZSBUeDxUSW5wdXQ+ID0ge1xuICBpbnB1dHM6IFRJbnB1dFtdO1xuICBvdXRwdXRzOiBPdXRwdXRXaXRoU2NyaXB0W107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlydHVhbFNpemUodHg6IFR4PERlc2NyaXB0b3I+KTogbnVtYmVyO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpcnR1YWxTaXplKHR4OiBUeDxJbnB1dFdpdGhEZXNjcmlwdG9yTmFtZT4sIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yTWFwKTogbnVtYmVyO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpcnR1YWxTaXplKFxuICB0eDogVHg8RGVzY3JpcHRvcj4gfCBUeDxJbnB1dFdpdGhEZXNjcmlwdG9yTmFtZT4sXG4gIGRlc2NyaXB0b3JNYXA/OiBEZXNjcmlwdG9yTWFwXG4pOiBudW1iZXIge1xuICBjb25zdCBsb29rdXAgPSBkZXNjcmlwdG9yTWFwID8gZ2V0SW5wdXRWU2l6ZXNGb3JEZXNjcmlwdG9ycyhkZXNjcmlwdG9yTWFwKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaW5wdXRWU2l6ZSA9IHR4LmlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7XG4gICAgICByZXR1cm4gc3VtICsgZ2V0SW5wdXRWU2l6ZUZvckRlc2NyaXB0b3IoaW5wdXQpO1xuICAgIH1cbiAgICBpZiAoJ2Rlc2NyaXB0b3JOYW1lJyBpbiBpbnB1dCkge1xuICAgICAgaWYgKCFsb29rdXApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGRlc2NyaXB0b3JNYXAnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZzaXplID0gbG9va3VwW2lucHV0LmRlc2NyaXB0b3JOYW1lXTtcbiAgICAgIGlmICghdnNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBkZXNjcmlwdG9yICR7aW5wdXQuZGVzY3JpcHRvck5hbWV9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VtICsgdnNpemU7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCBpbnB1dCcpO1xuICB9LCAwKTtcbiAgY29uc3Qgb3V0cHV0VlNpemUgPSB0eC5vdXRwdXRzLnJlZHVjZSgoc3VtLCBvKSA9PiB7XG4gICAgcmV0dXJuIHN1bSArIERpbWVuc2lvbnMuZ2V0VlNpemVGb3JPdXRwdXRXaXRoU2NyaXB0TGVuZ3RoKG8uc2NyaXB0Lmxlbmd0aCk7XG4gIH0sIDApO1xuICAvLyB3ZSB3aWxsIGp1c3QgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgc2Vnd2l0IGlucHV0XG4gIHJldHVybiBpbnB1dFZTaXplICsgb3V0cHV0VlNpemUgKyBWaXJ0dWFsU2l6ZXMudHhTZWdPdmVyaGVhZFZTaXplO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
3
|
+
export declare function createScriptPubKeyFromDescriptor(descriptor: Descriptor, index?: number): Buffer;
|
|
4
|
+
export declare function createAddressFromDescriptor(descriptor: Descriptor, index: number | undefined, network: utxolib.Network): string;
|
|
5
|
+
//# sourceMappingURL=address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/F;AAED,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,MAAM,CAER"}
|
|
@@ -0,0 +1,48 @@
|
|
|
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.createScriptPubKeyFromDescriptor = createScriptPubKeyFromDescriptor;
|
|
37
|
+
exports.createAddressFromDescriptor = createAddressFromDescriptor;
|
|
38
|
+
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
39
|
+
function createScriptPubKeyFromDescriptor(descriptor, index) {
|
|
40
|
+
if (index === undefined) {
|
|
41
|
+
return Buffer.from(descriptor.scriptPubkey());
|
|
42
|
+
}
|
|
43
|
+
return createScriptPubKeyFromDescriptor(descriptor.atDerivationIndex(index));
|
|
44
|
+
}
|
|
45
|
+
function createAddressFromDescriptor(descriptor, index, network) {
|
|
46
|
+
return utxolib.address.fromOutputScript(createScriptPubKeyFromDescriptor(descriptor, index), network);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvYWRkcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLDRFQUtDO0FBRUQsa0VBTUM7QUFmRCx5REFBMkM7QUFFM0MsU0FBZ0IsZ0NBQWdDLENBQUMsVUFBc0IsRUFBRSxLQUFjO0lBQ3JGLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0QsT0FBTyxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQ3pDLFVBQXNCLEVBQ3RCLEtBQXlCLEVBQ3pCLE9BQXdCO0lBRXhCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjcmlwdFB1YktleUZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IsIGluZGV4PzogbnVtYmVyKTogQnVmZmVyIHtcbiAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKSk7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVNjcmlwdFB1YktleUZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoaW5kZXgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkZHJlc3NGcm9tRGVzY3JpcHRvcihcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBzdHJpbmcge1xuICByZXR1cm4gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoY3JlYXRlU2NyaXB0UHViS2V5RnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvciwgaW5kZXgpLCBuZXR3b3JrKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { Output, DescriptorWalletOutput, WithDescriptor, WithOptDescriptor } from './Output';
|
|
2
|
+
export type { DescriptorMap } from './DescriptorMap';
|
|
3
|
+
export type { PsbtParams } from './psbt';
|
|
4
|
+
export { createAddressFromDescriptor, createScriptPubKeyFromDescriptor } from './address';
|
|
5
|
+
export { createPsbt, finalizePsbt, parse } from './psbt';
|
|
6
|
+
export { toDescriptorMap } from './DescriptorMap';
|
|
7
|
+
export { toDerivedDescriptorWalletOutput } from './Output';
|
|
8
|
+
export { signTxLocal } from './signTxLocal';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClG,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,WAAW,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signTxLocal = exports.toDerivedDescriptorWalletOutput = exports.toDescriptorMap = exports.parse = exports.finalizePsbt = exports.createPsbt = exports.createScriptPubKeyFromDescriptor = exports.createAddressFromDescriptor = void 0;
|
|
4
|
+
var address_1 = require("./address");
|
|
5
|
+
Object.defineProperty(exports, "createAddressFromDescriptor", { enumerable: true, get: function () { return address_1.createAddressFromDescriptor; } });
|
|
6
|
+
Object.defineProperty(exports, "createScriptPubKeyFromDescriptor", { enumerable: true, get: function () { return address_1.createScriptPubKeyFromDescriptor; } });
|
|
7
|
+
var psbt_1 = require("./psbt");
|
|
8
|
+
Object.defineProperty(exports, "createPsbt", { enumerable: true, get: function () { return psbt_1.createPsbt; } });
|
|
9
|
+
Object.defineProperty(exports, "finalizePsbt", { enumerable: true, get: function () { return psbt_1.finalizePsbt; } });
|
|
10
|
+
Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return psbt_1.parse; } });
|
|
11
|
+
var DescriptorMap_1 = require("./DescriptorMap");
|
|
12
|
+
Object.defineProperty(exports, "toDescriptorMap", { enumerable: true, get: function () { return DescriptorMap_1.toDescriptorMap; } });
|
|
13
|
+
var Output_1 = require("./Output");
|
|
14
|
+
Object.defineProperty(exports, "toDerivedDescriptorWalletOutput", { enumerable: true, get: function () { return Output_1.toDerivedDescriptorWalletOutput; } });
|
|
15
|
+
var signTxLocal_1 = require("./signTxLocal");
|
|
16
|
+
Object.defineProperty(exports, "signTxLocal", { enumerable: true, get: function () { return signTxLocal_1.signTxLocal; } });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFDQUEwRjtBQUFqRixzSEFBQSwyQkFBMkIsT0FBQTtBQUFFLDJIQUFBLGdDQUFnQyxPQUFBO0FBQ3RFLCtCQUF5RDtBQUFoRCxrR0FBQSxVQUFVLE9BQUE7QUFBRSxvR0FBQSxZQUFZLE9BQUE7QUFBRSw2RkFBQSxLQUFLLE9BQUE7QUFDeEMsaURBQWtEO0FBQXpDLGdIQUFBLGVBQWUsT0FBQTtBQUN4QixtQ0FBMkQ7QUFBbEQseUhBQUEsK0JBQStCLE9BQUE7QUFDeEMsNkNBQTRDO0FBQW5DLDBHQUFBLFdBQVcsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIHsgT3V0cHV0LCBEZXNjcmlwdG9yV2FsbGV0T3V0cHV0LCBXaXRoRGVzY3JpcHRvciwgV2l0aE9wdERlc2NyaXB0b3IgfSBmcm9tICcuL091dHB1dCc7XG5leHBvcnQgdHlwZSB7IERlc2NyaXB0b3JNYXAgfSBmcm9tICcuL0Rlc2NyaXB0b3JNYXAnO1xuZXhwb3J0IHR5cGUgeyBQc2J0UGFyYW1zIH0gZnJvbSAnLi9wc2J0JztcblxuZXhwb3J0IHsgY3JlYXRlQWRkcmVzc0Zyb21EZXNjcmlwdG9yLCBjcmVhdGVTY3JpcHRQdWJLZXlGcm9tRGVzY3JpcHRvciB9IGZyb20gJy4vYWRkcmVzcyc7XG5leHBvcnQgeyBjcmVhdGVQc2J0LCBmaW5hbGl6ZVBzYnQsIHBhcnNlIH0gZnJvbSAnLi9wc2J0JztcbmV4cG9ydCB7IHRvRGVzY3JpcHRvck1hcCB9IGZyb20gJy4vRGVzY3JpcHRvck1hcCc7XG5leHBvcnQgeyB0b0Rlcml2ZWREZXNjcmlwdG9yV2FsbGV0T3V0cHV0IH0gZnJvbSAnLi9PdXRwdXQnO1xuZXhwb3J0IHsgc2lnblR4TG9jYWwgfSBmcm9tICcuL3NpZ25UeExvY2FsJztcbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* These are some helpers for testing satisfiability of descriptors in PSBTs.
|
|
3
|
+
*
|
|
4
|
+
* They are mostly a debugging aid - if an input cannot be satisified, the `finalizePsbt()` method will fail, but
|
|
5
|
+
* the error message is pretty vague.
|
|
6
|
+
*
|
|
7
|
+
* The methods here have the goal of catching certain cases earlier and with a better error message.
|
|
8
|
+
*
|
|
9
|
+
* The goal is not an exhaustive check, but to catch common mistakes.
|
|
10
|
+
*/
|
|
11
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
12
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
13
|
+
export declare const FINAL_SEQUENCE = 4294967295;
|
|
14
|
+
/**
|
|
15
|
+
* Get the required locktime for a descriptor.
|
|
16
|
+
* @param descriptor
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRequiredLocktime(descriptor: Descriptor | unknown): number | undefined;
|
|
19
|
+
export declare function assertSatisfiable(psbt: utxolib.Psbt, inputIndex: number, descriptor: Descriptor): void;
|
|
20
|
+
//# sourceMappingURL=assertSatisfiable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertSatisfiable.d.ts","sourceRoot":"","sources":["../../../../../src/core/descriptor/psbt/assertSatisfiable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAsCxF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAYtG"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FINAL_SEQUENCE = void 0;
|
|
4
|
+
exports.getRequiredLocktime = getRequiredLocktime;
|
|
5
|
+
exports.assertSatisfiable = assertSatisfiable;
|
|
6
|
+
/**
|
|
7
|
+
* These are some helpers for testing satisfiability of descriptors in PSBTs.
|
|
8
|
+
*
|
|
9
|
+
* They are mostly a debugging aid - if an input cannot be satisified, the `finalizePsbt()` method will fail, but
|
|
10
|
+
* the error message is pretty vague.
|
|
11
|
+
*
|
|
12
|
+
* The methods here have the goal of catching certain cases earlier and with a better error message.
|
|
13
|
+
*
|
|
14
|
+
* The goal is not an exhaustive check, but to catch common mistakes.
|
|
15
|
+
*/
|
|
16
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
17
|
+
exports.FINAL_SEQUENCE = 0xffffffff;
|
|
18
|
+
/**
|
|
19
|
+
* Get the required locktime for a descriptor.
|
|
20
|
+
* @param descriptor
|
|
21
|
+
*/
|
|
22
|
+
function getRequiredLocktime(descriptor) {
|
|
23
|
+
var _a;
|
|
24
|
+
if (descriptor instanceof wasm_miniscript_1.Descriptor) {
|
|
25
|
+
return getRequiredLocktime(descriptor.node());
|
|
26
|
+
}
|
|
27
|
+
if (typeof descriptor !== 'object' || descriptor === null) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
if ('Wsh' in descriptor) {
|
|
31
|
+
return getRequiredLocktime(descriptor.Wsh);
|
|
32
|
+
}
|
|
33
|
+
if ('Sh' in descriptor) {
|
|
34
|
+
return getRequiredLocktime(descriptor.Sh);
|
|
35
|
+
}
|
|
36
|
+
if ('Ms' in descriptor) {
|
|
37
|
+
return getRequiredLocktime(descriptor.Ms);
|
|
38
|
+
}
|
|
39
|
+
if ('AndV' in descriptor) {
|
|
40
|
+
if (!Array.isArray(descriptor.AndV)) {
|
|
41
|
+
throw new Error('Expected an array');
|
|
42
|
+
}
|
|
43
|
+
if (descriptor.AndV.length !== 2) {
|
|
44
|
+
throw new Error('Expected exactly two elements');
|
|
45
|
+
}
|
|
46
|
+
const [a, b] = descriptor.AndV;
|
|
47
|
+
return (_a = getRequiredLocktime(a)) !== null && _a !== void 0 ? _a : getRequiredLocktime(b);
|
|
48
|
+
}
|
|
49
|
+
if ('Drop' in descriptor) {
|
|
50
|
+
return getRequiredLocktime(descriptor.Drop);
|
|
51
|
+
}
|
|
52
|
+
if ('Verify' in descriptor) {
|
|
53
|
+
return getRequiredLocktime(descriptor.Verify);
|
|
54
|
+
}
|
|
55
|
+
if ('After' in descriptor && typeof descriptor.After === 'object' && descriptor.After !== null) {
|
|
56
|
+
if ('absLockTime' in descriptor.After && typeof descriptor.After.absLockTime === 'number') {
|
|
57
|
+
return descriptor.After.absLockTime;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
function assertSatisfiable(psbt, inputIndex, descriptor) {
|
|
63
|
+
// If the descriptor requires a locktime, the input must have a non-final sequence number
|
|
64
|
+
const requiredLocktime = getRequiredLocktime(descriptor);
|
|
65
|
+
if (requiredLocktime !== undefined) {
|
|
66
|
+
const input = psbt.txInputs[inputIndex];
|
|
67
|
+
if (input.sequence === exports.FINAL_SEQUENCE) {
|
|
68
|
+
throw new Error(`Input ${inputIndex} has a non-final sequence number, but requires a timelock`);
|
|
69
|
+
}
|
|
70
|
+
if (psbt.locktime !== requiredLocktime) {
|
|
71
|
+
throw new Error(`psbt locktime (${psbt.locktime}) does not match required locktime (${requiredLocktime})`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0U2F0aXNmaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9kZXNjcmlwdG9yL3BzYnQvYXNzZXJ0U2F0aXNmaWFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUJBLGtEQXNDQztBQUVELDhDQVlDO0FBdkVEOzs7Ozs7Ozs7R0FTRztBQUNILDREQUFvRDtBQUd2QyxRQUFBLGNBQWMsR0FBRyxVQUFVLENBQUM7QUFFekM7OztHQUdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsVUFBZ0M7O0lBQ2xFLElBQUksVUFBVSxZQUFZLDRCQUFVLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLE1BQUEsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG1DQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0IsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0YsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFGLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0IsRUFBRSxVQUFrQixFQUFFLFVBQXNCO0lBQzlGLHlGQUF5RjtJQUN6RixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssc0JBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxVQUFVLDJEQUEyRCxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxRQUFRLHVDQUF1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGVzZSBhcmUgc29tZSBoZWxwZXJzIGZvciB0ZXN0aW5nIHNhdGlzZmlhYmlsaXR5IG9mIGRlc2NyaXB0b3JzIGluIFBTQlRzLlxuICpcbiAqIFRoZXkgYXJlIG1vc3RseSBhIGRlYnVnZ2luZyBhaWQgLSBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgc2F0aXNpZmllZCwgdGhlIGBmaW5hbGl6ZVBzYnQoKWAgbWV0aG9kIHdpbGwgZmFpbCwgYnV0XG4gKiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBwcmV0dHkgdmFndWUuXG4gKlxuICogVGhlIG1ldGhvZHMgaGVyZSBoYXZlIHRoZSBnb2FsIG9mIGNhdGNoaW5nIGNlcnRhaW4gY2FzZXMgZWFybGllciBhbmQgd2l0aCBhIGJldHRlciBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFRoZSBnb2FsIGlzIG5vdCBhbiBleGhhdXN0aXZlIGNoZWNrLCBidXQgdG8gY2F0Y2ggY29tbW9uIG1pc3Rha2VzLlxuICovXG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmV4cG9ydCBjb25zdCBGSU5BTF9TRVFVRU5DRSA9IDB4ZmZmZmZmZmY7XG5cbi8qKlxuICogR2V0IHRoZSByZXF1aXJlZCBsb2NrdGltZSBmb3IgYSBkZXNjcmlwdG9yLlxuICogQHBhcmFtIGRlc2NyaXB0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvcjogRGVzY3JpcHRvciB8IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIERlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLm5vZGUoKSk7XG4gIH1cbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yICE9PSAnb2JqZWN0JyB8fCBkZXNjcmlwdG9yID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoJ1dzaCcgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuV3NoKTtcbiAgfVxuICBpZiAoJ1NoJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5TaCk7XG4gIH1cbiAgaWYgKCdNcycgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuTXMpO1xuICB9XG4gIGlmICgnQW5kVicgaW4gZGVzY3JpcHRvcikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZXNjcmlwdG9yLkFuZFYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdG9yLkFuZFYubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGV4YWN0bHkgdHdvIGVsZW1lbnRzJyk7XG4gICAgfVxuICAgIGNvbnN0IFthLCBiXSA9IGRlc2NyaXB0b3IuQW5kVjtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShhKSA/PyBnZXRSZXF1aXJlZExvY2t0aW1lKGIpO1xuICB9XG4gIGlmICgnRHJvcCcgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuRHJvcCk7XG4gIH1cbiAgaWYgKCdWZXJpZnknIGluIGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLlZlcmlmeSk7XG4gIH1cbiAgaWYgKCdBZnRlcicgaW4gZGVzY3JpcHRvciAmJiB0eXBlb2YgZGVzY3JpcHRvci5BZnRlciA9PT0gJ29iamVjdCcgJiYgZGVzY3JpcHRvci5BZnRlciAhPT0gbnVsbCkge1xuICAgIGlmICgnYWJzTG9ja1RpbWUnIGluIGRlc2NyaXB0b3IuQWZ0ZXIgJiYgdHlwZW9mIGRlc2NyaXB0b3IuQWZ0ZXIuYWJzTG9ja1RpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGVzY3JpcHRvci5BZnRlci5hYnNMb2NrVGltZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNhdGlzZmlhYmxlKHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKTogdm9pZCB7XG4gIC8vIElmIHRoZSBkZXNjcmlwdG9yIHJlcXVpcmVzIGEgbG9ja3RpbWUsIHRoZSBpbnB1dCBtdXN0IGhhdmUgYSBub24tZmluYWwgc2VxdWVuY2UgbnVtYmVyXG4gIGNvbnN0IHJlcXVpcmVkTG9ja3RpbWUgPSBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IpO1xuICBpZiAocmVxdWlyZWRMb2NrdGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgaW5wdXQgPSBwc2J0LnR4SW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmIChpbnB1dC5zZXF1ZW5jZSA9PT0gRklOQUxfU0VRVUVOQ0UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgJHtpbnB1dEluZGV4fSBoYXMgYSBub24tZmluYWwgc2VxdWVuY2UgbnVtYmVyLCBidXQgcmVxdWlyZXMgYSB0aW1lbG9ja2ApO1xuICAgIH1cbiAgICBpZiAocHNidC5sb2NrdGltZSAhPT0gcmVxdWlyZWRMb2NrdGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwc2J0IGxvY2t0aW1lICgke3BzYnQubG9ja3RpbWV9KSBkb2VzIG5vdCBtYXRjaCByZXF1aXJlZCBsb2NrdGltZSAoJHtyZXF1aXJlZExvY2t0aW1lfSlgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo/utxo-lib';
|
|
2
|
+
import { DerivedDescriptorWalletOutput, Output, WithOptDescriptor } from '../Output';
|
|
3
|
+
/**
|
|
4
|
+
* Non-Final (Replaceable)
|
|
5
|
+
* Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
|
|
6
|
+
* */
|
|
7
|
+
export declare const MAX_BIP125_RBF_SEQUENCE: number;
|
|
8
|
+
export type PsbtParams = {
|
|
9
|
+
network: utxolib.Network;
|
|
10
|
+
version?: number;
|
|
11
|
+
locktime?: number;
|
|
12
|
+
sequence?: number;
|
|
13
|
+
};
|
|
14
|
+
export declare function createPsbt(params: PsbtParams, inputs: DerivedDescriptorWalletOutput[], outputs: WithOptDescriptor<Output>[]): utxolib.bitgo.UtxoPsbt;
|
|
15
|
+
//# sourceMappingURL=createPsbt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPsbt.d.ts","sourceRoot":"","sources":["../../../../../src/core/descriptor/psbt/createPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKrF;;;KAGK;AACL,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AA8BtD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,6BAA6B,EAAE,EACvC,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,GACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAYxB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
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.MAX_BIP125_RBF_SEQUENCE = void 0;
|
|
37
|
+
exports.createPsbt = createPsbt;
|
|
38
|
+
const utxolib = __importStar(require("@bitgo/utxo-lib"));
|
|
39
|
+
const wrap_1 = require("./wrap");
|
|
40
|
+
const assertSatisfiable_1 = require("./assertSatisfiable");
|
|
41
|
+
/**
|
|
42
|
+
* Non-Final (Replaceable)
|
|
43
|
+
* Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
|
|
44
|
+
* */
|
|
45
|
+
exports.MAX_BIP125_RBF_SEQUENCE = 0xffffffff - 2;
|
|
46
|
+
function updateInputsWithDescriptors(psbt, descriptors) {
|
|
47
|
+
if (psbt.txInputs.length !== descriptors.length) {
|
|
48
|
+
throw new Error(`Input count mismatch (psbt=${psbt.txInputs.length}, descriptors=${descriptors.length})`);
|
|
49
|
+
}
|
|
50
|
+
const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
|
|
51
|
+
for (const [inputIndex, descriptor] of descriptors.entries()) {
|
|
52
|
+
(0, assertSatisfiable_1.assertSatisfiable)(psbt, inputIndex, descriptor);
|
|
53
|
+
wrappedPsbt.updateInputWithDescriptor(inputIndex, descriptor);
|
|
54
|
+
}
|
|
55
|
+
const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt, psbt.network);
|
|
56
|
+
for (const inputIndex in psbt.txInputs) {
|
|
57
|
+
psbt.data.inputs[inputIndex] = unwrappedPsbt.data.inputs[inputIndex];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function updateOutputsWithDescriptors(psbt, descriptors) {
|
|
61
|
+
const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
|
|
62
|
+
for (const [outputIndex, { descriptor }] of descriptors.entries()) {
|
|
63
|
+
if (descriptor) {
|
|
64
|
+
wrappedPsbt.updateOutputWithDescriptor(outputIndex, descriptor);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt, psbt.network);
|
|
68
|
+
for (const outputIndex in psbt.txOutputs) {
|
|
69
|
+
psbt.data.outputs[outputIndex] = unwrappedPsbt.data.outputs[outputIndex];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function createPsbt(params, inputs, outputs) {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
const psbt = utxolib.bitgo.UtxoPsbt.createPsbt({ network: params.network });
|
|
75
|
+
psbt.setVersion((_a = params.version) !== null && _a !== void 0 ? _a : 2);
|
|
76
|
+
psbt.setLocktime((_b = params.locktime) !== null && _b !== void 0 ? _b : 0);
|
|
77
|
+
psbt.addInputs(inputs.map((i) => { var _a; return ({ ...i, sequence: (_a = params.sequence) !== null && _a !== void 0 ? _a : exports.MAX_BIP125_RBF_SEQUENCE }); }));
|
|
78
|
+
psbt.addOutputs(outputs);
|
|
79
|
+
updateInputsWithDescriptors(psbt, inputs.map((i) => i.descriptor));
|
|
80
|
+
updateOutputsWithDescriptors(psbt, outputs);
|
|
81
|
+
return psbt;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvcHNidC9jcmVhdGVQc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlEQSxnQ0FnQkM7QUFqRUQseURBQTJDO0FBSzNDLGlDQUFtRDtBQUNuRCwyREFBd0Q7QUFFeEQ7OztLQUdLO0FBQ1EsUUFBQSx1QkFBdUIsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRXRELFNBQVMsMkJBQTJCLENBQUMsSUFBNEIsRUFBRSxXQUF5QjtJQUMxRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0saUJBQWlCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsS0FBSyxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzdELElBQUEscUNBQWlCLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxXQUFXLENBQUMseUJBQXlCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFBLGlCQUFVLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsSUFBNEIsRUFBRSxXQUF3QztJQUMxRyxNQUFNLFdBQVcsR0FBRyxJQUFBLG9CQUFhLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNsRSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsV0FBVyxDQUFDLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLElBQUEsaUJBQVUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVELEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7QUFDSCxDQUFDO0FBU0QsU0FBZ0IsVUFBVSxDQUN4QixNQUFrQixFQUNsQixNQUF1QyxFQUN2QyxPQUFvQzs7SUFFcEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBQSxNQUFNLENBQUMsT0FBTyxtQ0FBSSxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQUEsTUFBTSxDQUFDLFFBQVEsbUNBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBQyxPQUFBLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBQSxNQUFNLENBQUMsUUFBUSxtQ0FBSSwrQkFBdUIsRUFBRSxDQUFDLENBQUEsRUFBQSxDQUFDLENBQUMsQ0FBQztJQUNwRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLDJCQUEyQixDQUN6QixJQUFJLEVBQ0osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUNoQyxDQUFDO0lBQ0YsNEJBQTRCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQsIE91dHB1dCwgV2l0aE9wdERlc2NyaXB0b3IgfSBmcm9tICcuLi9PdXRwdXQnO1xuXG5pbXBvcnQgeyB0b1V0eG9Qc2J0LCB0b1dyYXBwZWRQc2J0IH0gZnJvbSAnLi93cmFwJztcbmltcG9ydCB7IGFzc2VydFNhdGlzZmlhYmxlIH0gZnJvbSAnLi9hc3NlcnRTYXRpc2ZpYWJsZSc7XG5cbi8qKlxuICogTm9uLUZpbmFsIChSZXBsYWNlYWJsZSlcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYml0Y29pbi9ibG9iL3YyNS4xL3NyYy9ycGMvcmF3dHJhbnNhY3Rpb25fdXRpbC5jcHAjTDQ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9CSVAxMjVfUkJGX1NFUVVFTkNFID0gMHhmZmZmZmZmZiAtIDI7XG5cbmZ1bmN0aW9uIHVwZGF0ZUlucHV0c1dpdGhEZXNjcmlwdG9ycyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBkZXNjcmlwdG9yczogRGVzY3JpcHRvcltdKSB7XG4gIGlmIChwc2J0LnR4SW5wdXRzLmxlbmd0aCAhPT0gZGVzY3JpcHRvcnMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBjb3VudCBtaXNtYXRjaCAocHNidD0ke3BzYnQudHhJbnB1dHMubGVuZ3RofSwgZGVzY3JpcHRvcnM9JHtkZXNjcmlwdG9ycy5sZW5ndGh9KWApO1xuICB9XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gdG9XcmFwcGVkUHNidChwc2J0KTtcbiAgZm9yIChjb25zdCBbaW5wdXRJbmRleCwgZGVzY3JpcHRvcl0gb2YgZGVzY3JpcHRvcnMuZW50cmllcygpKSB7XG4gICAgYXNzZXJ0U2F0aXNmaWFibGUocHNidCwgaW5wdXRJbmRleCwgZGVzY3JpcHRvcik7XG4gICAgd3JhcHBlZFBzYnQudXBkYXRlSW5wdXRXaXRoRGVzY3JpcHRvcihpbnB1dEluZGV4LCBkZXNjcmlwdG9yKTtcbiAgfVxuICBjb25zdCB1bndyYXBwZWRQc2J0ID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCwgcHNidC5uZXR3b3JrKTtcbiAgZm9yIChjb25zdCBpbnB1dEluZGV4IGluIHBzYnQudHhJbnB1dHMpIHtcbiAgICBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdID0gdW53cmFwcGVkUHNidC5kYXRhLmlucHV0c1tpbnB1dEluZGV4XTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPdXRwdXRzV2l0aERlc2NyaXB0b3JzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGRlc2NyaXB0b3JzOiBXaXRoT3B0RGVzY3JpcHRvcjxPdXRwdXQ+W10pIHtcbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICBmb3IgKGNvbnN0IFtvdXRwdXRJbmRleCwgeyBkZXNjcmlwdG9yIH1dIG9mIGRlc2NyaXB0b3JzLmVudHJpZXMoKSkge1xuICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICB3cmFwcGVkUHNidC51cGRhdGVPdXRwdXRXaXRoRGVzY3JpcHRvcihvdXRwdXRJbmRleCwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IHVud3JhcHBlZFBzYnQgPSB0b1V0eG9Qc2J0KHdyYXBwZWRQc2J0LCBwc2J0Lm5ldHdvcmspO1xuICBmb3IgKGNvbnN0IG91dHB1dEluZGV4IGluIHBzYnQudHhPdXRwdXRzKSB7XG4gICAgcHNidC5kYXRhLm91dHB1dHNbb3V0cHV0SW5kZXhdID0gdW53cmFwcGVkUHNidC5kYXRhLm91dHB1dHNbb3V0cHV0SW5kZXhdO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBzYnRQYXJhbXMgPSB7XG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgbG9ja3RpbWU/OiBudW1iZXI7XG4gIHNlcXVlbmNlPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBzYnQoXG4gIHBhcmFtczogUHNidFBhcmFtcyxcbiAgaW5wdXRzOiBEZXJpdmVkRGVzY3JpcHRvcldhbGxldE91dHB1dFtdLFxuICBvdXRwdXRzOiBXaXRoT3B0RGVzY3JpcHRvcjxPdXRwdXQ+W11cbik6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQge1xuICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5VdHhvUHNidC5jcmVhdGVQc2J0KHsgbmV0d29yazogcGFyYW1zLm5ldHdvcmsgfSk7XG4gIHBzYnQuc2V0VmVyc2lvbihwYXJhbXMudmVyc2lvbiA/PyAyKTtcbiAgcHNidC5zZXRMb2NrdGltZShwYXJhbXMubG9ja3RpbWUgPz8gMCk7XG4gIHBzYnQuYWRkSW5wdXRzKGlucHV0cy5tYXAoKGkpID0+ICh7IC4uLmksIHNlcXVlbmNlOiBwYXJhbXMuc2VxdWVuY2UgPz8gTUFYX0JJUDEyNV9SQkZfU0VRVUVOQ0UgfSkpKTtcbiAgcHNidC5hZGRPdXRwdXRzKG91dHB1dHMpO1xuICB1cGRhdGVJbnB1dHNXaXRoRGVzY3JpcHRvcnMoXG4gICAgcHNidCxcbiAgICBpbnB1dHMubWFwKChpKSA9PiBpLmRlc2NyaXB0b3IpXG4gICk7XG4gIHVwZGF0ZU91dHB1dHNXaXRoRGVzY3JpcHRvcnMocHNidCwgb3V0cHV0cyk7XG4gIHJldHVybiBwc2J0O1xufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PsbtInput, PsbtOutput } from 'bip174/src/lib/interfaces';
|
|
2
|
+
import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
3
|
+
import { DescriptorMap } from '../DescriptorMap';
|
|
4
|
+
type DescriptorWithIndex = {
|
|
5
|
+
descriptor: Descriptor;
|
|
6
|
+
index: number;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* @param input
|
|
10
|
+
* @param descriptorMap
|
|
11
|
+
* @returns DescriptorWithIndex for the input if found, undefined otherwise
|
|
12
|
+
*/
|
|
13
|
+
export declare function findDescriptorForInput(input: PsbtInput, descriptorMap: DescriptorMap): DescriptorWithIndex | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* @param script - the output script
|
|
16
|
+
* @param output - the PSBT output
|
|
17
|
+
* @param descriptorMap
|
|
18
|
+
* @returns DescriptorWithIndex for the output if found, undefined otherwise
|
|
19
|
+
*/
|
|
20
|
+
export declare function findDescriptorForOutput(script: Buffer, output: PsbtOutput, descriptorMap: DescriptorMap): DescriptorWithIndex | undefined;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=findDescriptors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findDescriptors.d.ts","sourceRoot":"","sources":["../../../../../src/core/descriptor/psbt/findDescriptors.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,KAAK,mBAAmB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAyDrE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,SAAS,CAajC;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,SAAS,CASjC"}
|