@bitgo-beta/utxo-core 1.8.1-beta.18 → 1.8.1-beta.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/src/bip322/index.d.ts +3 -0
  2. package/dist/src/bip322/index.d.ts.map +1 -0
  3. package/dist/src/bip322/index.js +19 -0
  4. package/dist/src/bip322/toSign.d.ts +16 -0
  5. package/dist/src/bip322/toSign.d.ts.map +1 -0
  6. package/dist/src/bip322/toSign.js +45 -0
  7. package/dist/src/bip322/toSpend.d.ts +21 -0
  8. package/dist/src/bip322/toSpend.d.ts.map +1 -0
  9. package/dist/src/bip322/toSpend.js +67 -0
  10. package/dist/src/bip32utils.d.ts +16 -0
  11. package/dist/src/bip32utils.d.ts.map +1 -0
  12. package/dist/src/bip32utils.js +71 -0
  13. package/dist/src/descriptor/fromFixedScriptWallet.d.ts +16 -0
  14. package/dist/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  15. package/dist/src/descriptor/fromFixedScriptWallet.js +88 -0
  16. package/dist/src/descriptor/index.d.ts +2 -0
  17. package/dist/src/descriptor/index.d.ts.map +1 -1
  18. package/dist/src/descriptor/index.js +3 -1
  19. package/dist/src/descriptor/parse/PatternMatcher.d.ts +14 -0
  20. package/dist/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  21. package/dist/src/descriptor/parse/PatternMatcher.js +60 -0
  22. package/dist/src/descriptor/psbt/createPsbt.d.ts +4 -0
  23. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +1 -1
  24. package/dist/src/descriptor/psbt/createPsbt.js +34 -9
  25. package/dist/src/index.d.ts +3 -0
  26. package/dist/src/index.d.ts.map +1 -1
  27. package/dist/src/index.js +5 -2
  28. package/dist/src/paygo/attestation.d.ts +11 -0
  29. package/dist/src/paygo/attestation.d.ts.map +1 -0
  30. package/dist/src/paygo/attestation.js +58 -0
  31. package/dist/src/paygo/index.d.ts +3 -0
  32. package/dist/src/paygo/index.d.ts.map +1 -0
  33. package/dist/src/paygo/index.js +19 -0
  34. package/dist/src/paygo/parsePayGoAttestation.d.ts +16 -0
  35. package/dist/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  36. package/dist/src/paygo/parsePayGoAttestation.js +50 -0
  37. package/dist/src/paygo/psbt/Errors.d.ts +22 -0
  38. package/dist/src/paygo/psbt/Errors.d.ts.map +1 -0
  39. package/dist/src/paygo/psbt/Errors.js +44 -0
  40. package/dist/src/paygo/psbt/index.d.ts +2 -0
  41. package/dist/src/paygo/psbt/index.d.ts.map +1 -0
  42. package/dist/src/paygo/psbt/index.js +18 -0
  43. package/dist/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
  44. package/dist/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  45. package/dist/src/paygo/psbt/payGoAddressProof.js +124 -0
  46. package/dist/src/testutil/descriptor/descriptors.d.ts +4 -1
  47. package/dist/src/testutil/descriptor/descriptors.d.ts.map +1 -1
  48. package/dist/src/testutil/descriptor/descriptors.js +38 -1
  49. package/dist/src/testutil/descriptor/mock.utils.d.ts +3 -1
  50. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +1 -1
  51. package/dist/src/testutil/descriptor/mock.utils.js +2 -1
  52. package/dist/src/testutil/descriptor/psbt.utils.d.ts.map +1 -1
  53. package/dist/src/testutil/descriptor/psbt.utils.js +2 -1
  54. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  55. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  56. package/dist/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  57. package/dist/src/testutil/index.d.ts +2 -0
  58. package/dist/src/testutil/index.d.ts.map +1 -1
  59. package/dist/src/testutil/index.js +3 -1
  60. package/dist/src/testutil/toPlainObject.utils.d.ts.map +1 -1
  61. package/dist/src/testutil/toPlainObject.utils.js +16 -2
  62. package/dist/src/testutil/trimMessagePrefix.d.ts +11 -0
  63. package/dist/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  64. package/dist/src/testutil/trimMessagePrefix.js +60 -0
  65. package/package.json +9 -6
@@ -0,0 +1,3 @@
1
+ export * from './toSpend';
2
+ export * from './toSign';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/bip322/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,19 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./toSpend"), exports);
18
+ __exportStar(require("./toSign"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmlwMzIyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEI7QUFDMUIsMkNBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90b1NwZW5kJztcbmV4cG9ydCAqIGZyb20gJy4vdG9TaWduJztcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { Psbt, Transaction } from '@bitgo-beta/utxo-lib';
2
+ export type AddressDetails = {
3
+ redeemScript?: Buffer;
4
+ witnessScript?: Buffer;
5
+ };
6
+ /**
7
+ * Construct the toSign PSBT for a BIP322 verification.
8
+ * Source implementation:
9
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
10
+ *
11
+ * @param {string} toSpendTxHex - The hex representation of the `toSpend` transaction.
12
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
13
+ * @returns {string} - The hex representation of the constructed PSBT.
14
+ */
15
+ export declare function buildToSignPsbt(toSpendTx: Transaction<bigint>, addressDetails: AddressDetails): Psbt;
16
+ //# sourceMappingURL=toSign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSign.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CAgCpG"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildToSignPsbt = buildToSignPsbt;
4
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
5
+ /**
6
+ * Construct the toSign PSBT for a BIP322 verification.
7
+ * Source implementation:
8
+ * https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
9
+ *
10
+ * @param {string} toSpendTxHex - The hex representation of the `toSpend` transaction.
11
+ * @param {AddressDetails} addressDetails - The details of the address, including redeemScript and/or witnessScript.
12
+ * @returns {string} - The hex representation of the constructed PSBT.
13
+ */
14
+ function buildToSignPsbt(toSpendTx, addressDetails) {
15
+ if (!addressDetails.redeemScript && !addressDetails.witnessScript) {
16
+ throw new Error('redeemScript and/or witnessScript must be provided');
17
+ }
18
+ // Create PSBT object for constructing the transaction
19
+ const psbt = new utxo_lib_1.Psbt();
20
+ // Set default value for nVersion and nLockTime
21
+ psbt.setVersion(0); // nVersion = 0
22
+ psbt.setLocktime(0); // nLockTime = 0
23
+ // Set the input
24
+ psbt.addInput({
25
+ hash: toSpendTx.getId(), // vin[0].prevout.hash = to_spend.txid
26
+ index: 0, // vin[0].prevout.n = 0
27
+ sequence: 0, // vin[0].nSequence = 0
28
+ nonWitnessUtxo: toSpendTx.toBuffer(), // previous transaction for us to rebuild later to verify
29
+ });
30
+ if (addressDetails.redeemScript) {
31
+ psbt.updateInput(0, { redeemScript: addressDetails.redeemScript });
32
+ }
33
+ if (addressDetails.witnessScript) {
34
+ psbt.updateInput(0, {
35
+ witnessUtxo: { value: BigInt(0), script: addressDetails.witnessScript },
36
+ });
37
+ }
38
+ // Set the output
39
+ psbt.addOutput({
40
+ value: BigInt(0), // vout[0].nValue = 0
41
+ script: Buffer.from([0x6a]), // vout[0].scriptPubKey = OP_RETURN
42
+ });
43
+ return psbt;
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TaWduLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpcDMyMi90b1NpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsMENBZ0NDO0FBaERELG1EQUF5RDtBQU96RDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxTQUE4QixFQUFFLGNBQThCO0lBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksZUFBSSxFQUFFLENBQUM7SUFDeEIsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlO0lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7SUFDckMsZ0JBQWdCO0lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDWixJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLHNDQUFzQztRQUMvRCxLQUFLLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtRQUNqQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QjtRQUNwQyxjQUFjLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLHlEQUF5RDtLQUNoRyxDQUFDLENBQUM7SUFDSCxJQUFJLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBSSxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLGFBQWEsRUFBRTtTQUN4RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLHFCQUFxQjtRQUN2QyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsbUNBQW1DO0tBQ2pFLENBQUMsQ0FBQztJQUNILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBzYnQsIFRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5leHBvcnQgdHlwZSBBZGRyZXNzRGV0YWlscyA9IHtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgdGhlIHRvU2lnbiBQU0JUIGZvciBhIEJJUDMyMiB2ZXJpZmljYXRpb24uXG4gKiBTb3VyY2UgaW1wbGVtZW50YXRpb246XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMzIyLm1lZGlhd2lraSNmdWxsXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvU3BlbmRUeEhleCAtIFRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGB0b1NwZW5kYCB0cmFuc2FjdGlvbi5cbiAqIEBwYXJhbSB7QWRkcmVzc0RldGFpbHN9IGFkZHJlc3NEZXRhaWxzIC0gVGhlIGRldGFpbHMgb2YgdGhlIGFkZHJlc3MsIGluY2x1ZGluZyByZWRlZW1TY3JpcHQgYW5kL29yIHdpdG5lc3NTY3JpcHQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnN0cnVjdGVkIFBTQlQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU2lnblBzYnQodG9TcGVuZFR4OiBUcmFuc2FjdGlvbjxiaWdpbnQ+LCBhZGRyZXNzRGV0YWlsczogQWRkcmVzc0RldGFpbHMpOiBQc2J0IHtcbiAgaWYgKCFhZGRyZXNzRGV0YWlscy5yZWRlZW1TY3JpcHQgJiYgIWFkZHJlc3NEZXRhaWxzLndpdG5lc3NTY3JpcHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZGVlbVNjcmlwdCBhbmQvb3Igd2l0bmVzc1NjcmlwdCBtdXN0IGJlIHByb3ZpZGVkJyk7XG4gIH1cblxuICAvLyBDcmVhdGUgUFNCVCBvYmplY3QgZm9yIGNvbnN0cnVjdGluZyB0aGUgdHJhbnNhY3Rpb25cbiAgY29uc3QgcHNidCA9IG5ldyBQc2J0KCk7XG4gIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciBuVmVyc2lvbiBhbmQgbkxvY2tUaW1lXG4gIHBzYnQuc2V0VmVyc2lvbigwKTsgLy8gblZlcnNpb24gPSAwXG4gIHBzYnQuc2V0TG9ja3RpbWUoMCk7IC8vIG5Mb2NrVGltZSA9IDBcbiAgLy8gU2V0IHRoZSBpbnB1dFxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0b1NwZW5kVHguZ2V0SWQoKSwgLy8gdmluWzBdLnByZXZvdXQuaGFzaCA9IHRvX3NwZW5kLnR4aWRcbiAgICBpbmRleDogMCwgLy8gdmluWzBdLnByZXZvdXQubiA9IDBcbiAgICBzZXF1ZW5jZTogMCwgLy8gdmluWzBdLm5TZXF1ZW5jZSA9IDBcbiAgICBub25XaXRuZXNzVXR4bzogdG9TcGVuZFR4LnRvQnVmZmVyKCksIC8vIHByZXZpb3VzIHRyYW5zYWN0aW9uIGZvciB1cyB0byByZWJ1aWxkIGxhdGVyIHRvIHZlcmlmeVxuICB9KTtcbiAgaWYgKGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoMCwgeyByZWRlZW1TY3JpcHQ6IGFkZHJlc3NEZXRhaWxzLnJlZGVlbVNjcmlwdCB9KTtcbiAgfVxuICBpZiAoYWRkcmVzc0RldGFpbHMud2l0bmVzc1NjcmlwdCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQoMCwge1xuICAgICAgd2l0bmVzc1V0eG86IHsgdmFsdWU6IEJpZ0ludCgwKSwgc2NyaXB0OiBhZGRyZXNzRGV0YWlscy53aXRuZXNzU2NyaXB0IH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBTZXQgdGhlIG91dHB1dFxuICBwc2J0LmFkZE91dHB1dCh7XG4gICAgdmFsdWU6IEJpZ0ludCgwKSwgLy8gdm91dFswXS5uVmFsdWUgPSAwXG4gICAgc2NyaXB0OiBCdWZmZXIuZnJvbShbMHg2YV0pLCAvLyB2b3V0WzBdLnNjcmlwdFB1YktleSA9IE9QX1JFVFVSTlxuICB9KTtcbiAgcmV0dXJuIHBzYnQ7XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { Transaction } from '@bitgo-beta/utxo-lib';
2
+ export declare const BIP322_TAG = "BIP0322-signed-message";
3
+ /**
4
+ * Perform a tagged hash
5
+ *
6
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
7
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
8
+ * @returns {Buffer} - The resulting hash of the message with the tag.
9
+ */
10
+ export declare function hashMessageWithTag(message: string | Buffer, tag?: string): Buffer;
11
+ /**
12
+ * Build a BIP322 "to spend" transaction
13
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
14
+ *
15
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
16
+ * @param {string | Buffer} message - The message to include in the transaction
17
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
18
+ * @returns {Transaction} - The constructed transaction
19
+ */
20
+ export declare function buildToSpendTransaction(scriptPubKey: Buffer, message: string | Buffer, tag?: string): Transaction<bigint>;
21
+ //# sourceMappingURL=toSpend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSpend.d.ts","sourceRoot":"","sources":["../../../src/bip322/toSpend.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAO,MAAM,UAAU,2BAA2B,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM,CAYrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,GAAG,SAAa,GACf,WAAW,CAAC,MAAM,CAAC,CA4BrB"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BIP322_TAG = void 0;
4
+ exports.hashMessageWithTag = hashMessageWithTag;
5
+ exports.buildToSpendTransaction = buildToSpendTransaction;
6
+ const fast_sha256_1 = require("fast-sha256");
7
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
8
+ exports.BIP322_TAG = 'BIP0322-signed-message';
9
+ /**
10
+ * Perform a tagged hash
11
+ *
12
+ * @param {string | Buffer} message - The message to hash as a Buffer or utf-8 string
13
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
14
+ * @returns {Buffer} - The resulting hash of the message with the tag.
15
+ */
16
+ function hashMessageWithTag(message, tag = exports.BIP322_TAG) {
17
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
18
+ // Reference: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
19
+ const tagHasher = new fast_sha256_1.Hash();
20
+ tagHasher.update(Buffer.from(exports.BIP322_TAG));
21
+ const tagHash = tagHasher.digest();
22
+ const messageHasher = new fast_sha256_1.Hash();
23
+ messageHasher.update(tagHash);
24
+ messageHasher.update(tagHash);
25
+ messageHasher.update(Buffer.from(message));
26
+ const messageHash = messageHasher.digest();
27
+ return Buffer.from(messageHash);
28
+ }
29
+ /**
30
+ * Build a BIP322 "to spend" transaction
31
+ * Source: https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#full
32
+ *
33
+ * @param {Buffer} scriptPubKey - The scriptPubKey to use for the output
34
+ * @param {string | Buffer} message - The message to include in the transaction
35
+ * @param {Buffer} [tag=BIP322_TAG] - The tag to use for hashing, defaults to BIP322_TAG.
36
+ * @returns {Transaction} - The constructed transaction
37
+ */
38
+ function buildToSpendTransaction(scriptPubKey, message, tag = exports.BIP322_TAG) {
39
+ // Create PSBT object for constructing the transaction
40
+ const psbt = new utxo_lib_1.Psbt();
41
+ // Set default value for nVersion and nLockTime
42
+ psbt.setVersion(0); // nVersion = 0
43
+ psbt.setLocktime(0); // nLockTime = 0
44
+ // Compute the message hash - SHA256(SHA256(tag) || SHA256(tag) || message)
45
+ const messageHash = hashMessageWithTag(message, tag);
46
+ // Construct the scriptSig - OP_0 PUSH32[ message_hash ]
47
+ const scriptSigPartOne = new Uint8Array([0x00, 0x20]); // OP_0 PUSH32
48
+ const scriptSig = new Uint8Array(scriptSigPartOne.length + messageHash.length);
49
+ scriptSig.set(scriptSigPartOne);
50
+ scriptSig.set(messageHash, scriptSigPartOne.length);
51
+ // Set the input
52
+ psbt.addInput({
53
+ hash: '0'.repeat(64), // vin[0].prevout.hash = 0000...000
54
+ index: 0xffffffff, // vin[0].prevout.n = 0xFFFFFFFF
55
+ sequence: 0, // vin[0].nSequence = 0
56
+ finalScriptSig: Buffer.from(scriptSig), // vin[0].scriptSig = OP_0 PUSH32[ message_hash ]
57
+ witnessScript: Buffer.from([]), // vin[0].scriptWitness = []
58
+ });
59
+ // Set the output
60
+ psbt.addOutput({
61
+ value: BigInt(0), // vout[0].nValue = 0
62
+ script: scriptPubKey, // vout[0].scriptPubKey = message_challenge
63
+ });
64
+ // Return transaction
65
+ return psbt.extractTransaction();
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TcGVuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXAzMjIvdG9TcGVuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFZQSxnREFZQztBQVdELDBEQWdDQztBQW5FRCw2Q0FBbUM7QUFDbkMsbURBQXlEO0FBRTVDLFFBQUEsVUFBVSxHQUFHLHdCQUF3QixDQUFDO0FBRW5EOzs7Ozs7R0FNRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE9BQXdCLEVBQUUsR0FBRyxHQUFHLGtCQUFVO0lBQzNFLDJFQUEyRTtJQUMzRSxpRkFBaUY7SUFDakYsTUFBTSxTQUFTLEdBQUcsSUFBSSxrQkFBSSxFQUFFLENBQUM7SUFDN0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGtCQUFJLEVBQUUsQ0FBQztJQUNqQyxhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsWUFBb0IsRUFDcEIsT0FBd0IsRUFDeEIsR0FBRyxHQUFHLGtCQUFVO0lBRWhCLHNEQUFzRDtJQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLGVBQUksRUFBRSxDQUFDO0lBQ3hCLCtDQUErQztJQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZTtJQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO0lBQ3JDLDJFQUEyRTtJQUMzRSxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckQsd0RBQXdEO0lBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWM7SUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRSxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsZ0JBQWdCO0lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDWixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxtQ0FBbUM7UUFDekQsS0FBSyxFQUFFLFVBQVUsRUFBRSxnQ0FBZ0M7UUFDbkQsUUFBUSxFQUFFLENBQUMsRUFBRSx1QkFBdUI7UUFDcEMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsaURBQWlEO1FBQ3pGLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLDRCQUE0QjtLQUM3RCxDQUFDLENBQUM7SUFDSCxpQkFBaUI7SUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCO1FBQ3ZDLE1BQU0sRUFBRSxZQUFZLEVBQUUsMkNBQTJDO0tBQ2xFLENBQUMsQ0FBQztJQUNILHFCQUFxQjtJQUNyQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIYXNoIH0gZnJvbSAnZmFzdC1zaGEyNTYnO1xuaW1wb3J0IHsgUHNidCwgVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCBjb25zdCBCSVAzMjJfVEFHID0gJ0JJUDAzMjItc2lnbmVkLW1lc3NhZ2UnO1xuXG4vKipcbiAqIFBlcmZvcm0gYSB0YWdnZWQgaGFzaFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gaGFzaCBhcyBhIEJ1ZmZlciBvciB1dGYtOCBzdHJpbmdcbiAqIEBwYXJhbSB7QnVmZmVyfSBbdGFnPUJJUDMyMl9UQUddIC0gVGhlIHRhZyB0byB1c2UgZm9yIGhhc2hpbmcsIGRlZmF1bHRzIHRvIEJJUDMyMl9UQUcuXG4gKiBAcmV0dXJucyB7QnVmZmVyfSAtIFRoZSByZXN1bHRpbmcgaGFzaCBvZiB0aGUgbWVzc2FnZSB3aXRoIHRoZSB0YWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoTWVzc2FnZVdpdGhUYWcobWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLCB0YWcgPSBCSVAzMjJfVEFHKTogQnVmZmVyIHtcbiAgLy8gQ29tcHV0ZSB0aGUgbWVzc2FnZSBoYXNoIC0gU0hBMjU2KFNIQTI1Nih0YWcpIHx8IFNIQTI1Nih0YWcpIHx8IG1lc3NhZ2UpXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9ibG9iL21hc3Rlci9iaXAtMDMyMi5tZWRpYXdpa2kjZnVsbFxuICBjb25zdCB0YWdIYXNoZXIgPSBuZXcgSGFzaCgpO1xuICB0YWdIYXNoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKEJJUDMyMl9UQUcpKTtcbiAgY29uc3QgdGFnSGFzaCA9IHRhZ0hhc2hlci5kaWdlc3QoKTtcbiAgY29uc3QgbWVzc2FnZUhhc2hlciA9IG5ldyBIYXNoKCk7XG4gIG1lc3NhZ2VIYXNoZXIudXBkYXRlKHRhZ0hhc2gpO1xuICBtZXNzYWdlSGFzaGVyLnVwZGF0ZSh0YWdIYXNoKTtcbiAgbWVzc2FnZUhhc2hlci51cGRhdGUoQnVmZmVyLmZyb20obWVzc2FnZSkpO1xuICBjb25zdCBtZXNzYWdlSGFzaCA9IG1lc3NhZ2VIYXNoZXIuZGlnZXN0KCk7XG4gIHJldHVybiBCdWZmZXIuZnJvbShtZXNzYWdlSGFzaCk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBCSVAzMjIgXCJ0byBzcGVuZFwiIHRyYW5zYWN0aW9uXG4gKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAzMjIubWVkaWF3aWtpI2Z1bGxcbiAqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc2NyaXB0UHViS2V5IC0gVGhlIHNjcmlwdFB1YktleSB0byB1c2UgZm9yIHRoZSBvdXRwdXRcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gaW5jbHVkZSBpbiB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7QnVmZmVyfSBbdGFnPUJJUDMyMl9UQUddIC0gVGhlIHRhZyB0byB1c2UgZm9yIGhhc2hpbmcsIGRlZmF1bHRzIHRvIEJJUDMyMl9UQUcuXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259IC0gVGhlIGNvbnN0cnVjdGVkIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvU3BlbmRUcmFuc2FjdGlvbihcbiAgc2NyaXB0UHViS2V5OiBCdWZmZXIsXG4gIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgdGFnID0gQklQMzIyX1RBR1xuKTogVHJhbnNhY3Rpb248YmlnaW50PiB7XG4gIC8vIENyZWF0ZSBQU0JUIG9iamVjdCBmb3IgY29uc3RydWN0aW5nIHRoZSB0cmFuc2FjdGlvblxuICBjb25zdCBwc2J0ID0gbmV3IFBzYnQoKTtcbiAgLy8gU2V0IGRlZmF1bHQgdmFsdWUgZm9yIG5WZXJzaW9uIGFuZCBuTG9ja1RpbWVcbiAgcHNidC5zZXRWZXJzaW9uKDApOyAvLyBuVmVyc2lvbiA9IDBcbiAgcHNidC5zZXRMb2NrdGltZSgwKTsgLy8gbkxvY2tUaW1lID0gMFxuICAvLyBDb21wdXRlIHRoZSBtZXNzYWdlIGhhc2ggLSBTSEEyNTYoU0hBMjU2KHRhZykgfHwgU0hBMjU2KHRhZykgfHwgbWVzc2FnZSlcbiAgY29uc3QgbWVzc2FnZUhhc2ggPSBoYXNoTWVzc2FnZVdpdGhUYWcobWVzc2FnZSwgdGFnKTtcbiAgLy8gQ29uc3RydWN0IHRoZSBzY3JpcHRTaWcgLSBPUF8wIFBVU0gzMlsgbWVzc2FnZV9oYXNoIF1cbiAgY29uc3Qgc2NyaXB0U2lnUGFydE9uZSA9IG5ldyBVaW50OEFycmF5KFsweDAwLCAweDIwXSk7IC8vIE9QXzAgUFVTSDMyXG4gIGNvbnN0IHNjcmlwdFNpZyA9IG5ldyBVaW50OEFycmF5KHNjcmlwdFNpZ1BhcnRPbmUubGVuZ3RoICsgbWVzc2FnZUhhc2gubGVuZ3RoKTtcbiAgc2NyaXB0U2lnLnNldChzY3JpcHRTaWdQYXJ0T25lKTtcbiAgc2NyaXB0U2lnLnNldChtZXNzYWdlSGFzaCwgc2NyaXB0U2lnUGFydE9uZS5sZW5ndGgpO1xuICAvLyBTZXQgdGhlIGlucHV0XG4gIHBzYnQuYWRkSW5wdXQoe1xuICAgIGhhc2g6ICcwJy5yZXBlYXQoNjQpLCAvLyB2aW5bMF0ucHJldm91dC5oYXNoID0gMDAwMC4uLjAwMFxuICAgIGluZGV4OiAweGZmZmZmZmZmLCAvLyB2aW5bMF0ucHJldm91dC5uID0gMHhGRkZGRkZGRlxuICAgIHNlcXVlbmNlOiAwLCAvLyB2aW5bMF0ublNlcXVlbmNlID0gMFxuICAgIGZpbmFsU2NyaXB0U2lnOiBCdWZmZXIuZnJvbShzY3JpcHRTaWcpLCAvLyB2aW5bMF0uc2NyaXB0U2lnID0gT1BfMCBQVVNIMzJbIG1lc3NhZ2VfaGFzaCBdXG4gICAgd2l0bmVzc1NjcmlwdDogQnVmZmVyLmZyb20oW10pLCAvLyB2aW5bMF0uc2NyaXB0V2l0bmVzcyA9IFtdXG4gIH0pO1xuICAvLyBTZXQgdGhlIG91dHB1dFxuICBwc2J0LmFkZE91dHB1dCh7XG4gICAgdmFsdWU6IEJpZ0ludCgwKSwgLy8gdm91dFswXS5uVmFsdWUgPSAwXG4gICAgc2NyaXB0OiBzY3JpcHRQdWJLZXksIC8vIHZvdXRbMF0uc2NyaXB0UHViS2V5ID0gbWVzc2FnZV9jaGFsbGVuZ2VcbiAgfSk7XG4gIC8vIFJldHVybiB0cmFuc2FjdGlvblxuICByZXR1cm4gcHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { BIP32Interface } from '@bitgo-beta/utxo-lib';
2
+ /**
3
+ * bip32-aware wrapper around bitcoin-message package
4
+ * @see {bitcoinMessage.sign}
5
+ */
6
+ export declare function signMessage(message: string | Buffer, privateKey: BIP32Interface | Buffer, network: {
7
+ messagePrefix: string;
8
+ }): Buffer;
9
+ /**
10
+ * bip32-aware wrapper around bitcoin-message package
11
+ * @see {bitcoinMessage.verify}
12
+ */
13
+ export declare function verifyMessage(message: string | Buffer, publicKey: BIP32Interface | Buffer, signature: Buffer, network: {
14
+ messagePrefix: string;
15
+ }): boolean;
16
+ //# sourceMappingURL=bip32utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32utils.d.ts","sourceRoot":"","sources":["../../src/bip32utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,UAAU,EAAE,cAAc,GAAG,MAAM,EACnC,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,MAAM,CAYR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,cAAc,GAAG,MAAM,EAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACjC,OAAO,CAcT"}
@@ -0,0 +1,71 @@
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.signMessage = signMessage;
37
+ exports.verifyMessage = verifyMessage;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const bitcoinMessage = __importStar(require("bitcoinjs-message"));
40
+ /**
41
+ * bip32-aware wrapper around bitcoin-message package
42
+ * @see {bitcoinMessage.sign}
43
+ */
44
+ function signMessage(message, privateKey, network) {
45
+ if (!Buffer.isBuffer(privateKey)) {
46
+ privateKey = privateKey.privateKey;
47
+ if (!privateKey) {
48
+ throw new Error(`must provide privateKey`);
49
+ }
50
+ }
51
+ if (network === null || typeof network !== 'object' || typeof network.messagePrefix !== 'string') {
52
+ throw new Error(`invalid argument 'network'`);
53
+ }
54
+ const compressed = true;
55
+ return bitcoinMessage.sign(message, privateKey, compressed, network.messagePrefix);
56
+ }
57
+ /**
58
+ * bip32-aware wrapper around bitcoin-message package
59
+ * @see {bitcoinMessage.verify}
60
+ */
61
+ function verifyMessage(message, publicKey, signature, network) {
62
+ if (!Buffer.isBuffer(publicKey)) {
63
+ publicKey = publicKey.publicKey;
64
+ }
65
+ if (network === null || typeof network !== 'object' || typeof network.messagePrefix !== 'string') {
66
+ throw new Error(`invalid argument 'network'`);
67
+ }
68
+ const address = utxolib.address.toBase58Check(utxolib.crypto.hash160(publicKey), utxolib.networks.bitcoin.pubKeyHash, utxolib.networks.bitcoin);
69
+ return bitcoinMessage.verify(message, address, signature, network.messagePrefix);
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzJ1dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXAzMnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0Esa0NBZ0JDO0FBTUQsc0NBbUJDO0FBaERELDhEQUFnRDtBQUNoRCxrRUFBb0Q7QUFFcEQ7OztHQUdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUN6QixPQUF3QixFQUN4QixVQUFtQyxFQUNuQyxPQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBb0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDakcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDeEIsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsYUFBYSxDQUMzQixPQUF3QixFQUN4QixTQUFrQyxFQUNsQyxTQUFpQixFQUNqQixPQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqRyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDekIsQ0FBQztJQUNGLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgYml0Y29pbk1lc3NhZ2UgZnJvbSAnYml0Y29pbmpzLW1lc3NhZ2UnO1xuaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG4vKipcbiAqIGJpcDMyLWF3YXJlIHdyYXBwZXIgYXJvdW5kIGJpdGNvaW4tbWVzc2FnZSBwYWNrYWdlXG4gKiBAc2VlIHtiaXRjb2luTWVzc2FnZS5zaWdufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbk1lc3NhZ2UoXG4gIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcixcbiAgcHJpdmF0ZUtleTogQklQMzJJbnRlcmZhY2UgfCBCdWZmZXIsXG4gIG5ldHdvcms6IHsgbWVzc2FnZVByZWZpeDogc3RyaW5nIH1cbik6IEJ1ZmZlciB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHByaXZhdGVLZXkpKSB7XG4gICAgcHJpdmF0ZUtleSA9IHByaXZhdGVLZXkucHJpdmF0ZUtleSBhcyBCdWZmZXI7XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBwcml2YXRlS2V5YCk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrID09PSBudWxsIHx8IHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV0d29yay5tZXNzYWdlUHJlZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudCAnbmV0d29yaydgKTtcbiAgfVxuICBjb25zdCBjb21wcmVzc2VkID0gdHJ1ZTtcbiAgcmV0dXJuIGJpdGNvaW5NZXNzYWdlLnNpZ24obWVzc2FnZSwgcHJpdmF0ZUtleSwgY29tcHJlc3NlZCwgbmV0d29yay5tZXNzYWdlUHJlZml4KTtcbn1cblxuLyoqXG4gKiBiaXAzMi1hd2FyZSB3cmFwcGVyIGFyb3VuZCBiaXRjb2luLW1lc3NhZ2UgcGFja2FnZVxuICogQHNlZSB7Yml0Y29pbk1lc3NhZ2UudmVyaWZ5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5TWVzc2FnZShcbiAgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLFxuICBwdWJsaWNLZXk6IEJJUDMySW50ZXJmYWNlIHwgQnVmZmVyLFxuICBzaWduYXR1cmU6IEJ1ZmZlcixcbiAgbmV0d29yazogeyBtZXNzYWdlUHJlZml4OiBzdHJpbmcgfVxuKTogYm9vbGVhbiB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YmxpY0tleSkpIHtcbiAgICBwdWJsaWNLZXkgPSBwdWJsaWNLZXkucHVibGljS2V5O1xuICB9XG4gIGlmIChuZXR3b3JrID09PSBudWxsIHx8IHR5cGVvZiBuZXR3b3JrICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV0d29yay5tZXNzYWdlUHJlZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcmd1bWVudCAnbmV0d29yaydgKTtcbiAgfVxuXG4gIGNvbnN0IGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MudG9CYXNlNThDaGVjayhcbiAgICB1dHhvbGliLmNyeXB0by5oYXNoMTYwKHB1YmxpY0tleSksXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luLnB1YktleUhhc2gsXG4gICAgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luXG4gICk7XG4gIHJldHVybiBiaXRjb2luTWVzc2FnZS52ZXJpZnkobWVzc2FnZSwgYWRkcmVzcywgc2lnbmF0dXJlLCBuZXR3b3JrLm1lc3NhZ2VQcmVmaXgpO1xufVxuIl19
@@ -0,0 +1,16 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { Descriptor } from '@bitgo/wasm-miniscript';
3
+ /**
4
+ * Get a standard output descriptor that corresponds to the proprietary HD wallet setup
5
+ * used in BitGo wallets.
6
+ * Only supports a subset of script types.
7
+ */
8
+ export declare function getDescriptorForScriptType(rootWalletKeys: utxolib.bitgo.RootWalletKeys, scriptType: 'p2sh' | 'p2shP2wsh' | 'p2wsh', scope: 'internal' | 'external'): Descriptor;
9
+ /**
10
+ * Get a map of named descriptors for the given root wallet keys.
11
+ * Unsupported script types will have a value of null.
12
+ * Currently supports p2sh, p2shP2wsh, and p2wsh script types.
13
+ * @param rootWalletKeys
14
+ */
15
+ export declare function getNamedDescriptorsForRootWalletKeys(rootWalletKeys: utxolib.bitgo.RootWalletKeys): Map<string, Descriptor | null>;
16
+ //# sourceMappingURL=fromFixedScriptWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromFixedScriptWallet.d.ts","sourceRoot":"","sources":["../../../src/descriptor/fromFixedScriptWallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAO,MAAM,wBAAwB,CAAC;AAYzD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,EAC5C,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,EAC1C,KAAK,EAAE,UAAU,GAAG,UAAU,GAC7B,UAAU,CAkBZ;AAQD;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,GAC3C,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,CAUhC"}
@@ -0,0 +1,88 @@
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.getDescriptorForScriptType = getDescriptorForScriptType;
37
+ exports.getNamedDescriptorsForRootWalletKeys = getNamedDescriptorsForRootWalletKeys;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
40
+ /** Expand a template with the given root wallet keys and chain code */
41
+ function expand(rootWalletKeys, keyIndex, chainCode) {
42
+ if (keyIndex !== 0 && keyIndex !== 1 && keyIndex !== 2) {
43
+ throw new Error('Invalid key index');
44
+ }
45
+ const xpub = rootWalletKeys.triple[keyIndex].neutered().toBase58();
46
+ const prefix = rootWalletKeys.derivationPrefixes[keyIndex];
47
+ return xpub + '/' + prefix + '/' + chainCode + '/*';
48
+ }
49
+ /**
50
+ * Get a standard output descriptor that corresponds to the proprietary HD wallet setup
51
+ * used in BitGo wallets.
52
+ * Only supports a subset of script types.
53
+ */
54
+ function getDescriptorForScriptType(rootWalletKeys, scriptType, scope) {
55
+ const chain = scope === 'external'
56
+ ? utxolib.bitgo.getExternalChainCode(scriptType)
57
+ : utxolib.bitgo.getInternalChainCode(scriptType);
58
+ const multi = {
59
+ multi: [2, ...rootWalletKeys.triple.map((_, i) => expand(rootWalletKeys, i, chain))],
60
+ };
61
+ switch (scriptType) {
62
+ case 'p2sh':
63
+ return wasm_miniscript_1.Descriptor.fromString(wasm_miniscript_1.ast.formatNode({ sh: multi }), 'derivable');
64
+ case 'p2shP2wsh':
65
+ return wasm_miniscript_1.Descriptor.fromString(wasm_miniscript_1.ast.formatNode({ sh: { wsh: multi } }), 'derivable');
66
+ case 'p2wsh':
67
+ return wasm_miniscript_1.Descriptor.fromString(wasm_miniscript_1.ast.formatNode({ wsh: multi }), 'derivable');
68
+ default:
69
+ throw new Error(`Unsupported script type ${scriptType}`);
70
+ }
71
+ }
72
+ function isSupportedScriptType(scriptType) {
73
+ return ['p2sh', 'p2shP2wsh', 'p2wsh'].includes(scriptType);
74
+ }
75
+ /**
76
+ * Get a map of named descriptors for the given root wallet keys.
77
+ * Unsupported script types will have a value of null.
78
+ * Currently supports p2sh, p2shP2wsh, and p2wsh script types.
79
+ * @param rootWalletKeys
80
+ */
81
+ function getNamedDescriptorsForRootWalletKeys(rootWalletKeys) {
82
+ const scopes = ['external', 'internal'];
83
+ return new Map(utxolib.bitgo.outputScripts.scriptTypes2Of3.flatMap((scriptType) => scopes.map((scope) => [
84
+ `${scriptType}/${scope}`,
85
+ isSupportedScriptType(scriptType) ? getDescriptorForScriptType(rootWalletKeys, scriptType, scope) : null,
86
+ ])));
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUZpeGVkU2NyaXB0V2FsbGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvZnJvbUZpeGVkU2NyaXB0V2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLGdFQXNCQztBQWNELG9GQVlDO0FBbEVELDhEQUFnRDtBQUNoRCw0REFBeUQ7QUFFekQsdUVBQXVFO0FBQ3ZFLFNBQVMsTUFBTSxDQUFDLGNBQTRDLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtJQUMvRixJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxPQUFPLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQ3hDLGNBQTRDLEVBQzVDLFVBQTBDLEVBQzFDLEtBQThCO0lBRTlCLE1BQU0sS0FBSyxHQUNULEtBQUssS0FBSyxVQUFVO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztRQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxNQUFNLEtBQUssR0FBdUI7UUFDaEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQ3JGLENBQUM7SUFDRixRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssTUFBTTtZQUNULE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMscUJBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzRSxLQUFLLFdBQVc7WUFDZCxPQUFPLDRCQUFVLENBQUMsVUFBVSxDQUFDLHFCQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRixLQUFLLE9BQU87WUFDVixPQUFPLDRCQUFVLENBQUMsVUFBVSxDQUFDLHFCQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUU7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FDNUIsVUFBc0Q7SUFFdEQsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLG9DQUFvQyxDQUNsRCxjQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQVUsQ0FBQztJQUNqRCxPQUFPLElBQUksR0FBRyxDQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNqRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNwQixHQUFHLFVBQVUsSUFBSSxLQUFLLEVBQUU7UUFDeEIscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7S0FDekcsQ0FBQyxDQUNILENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG4vKiogRXhwYW5kIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gcm9vdCB3YWxsZXQga2V5cyBhbmQgY2hhaW4gY29kZSAqL1xuZnVuY3Rpb24gZXhwYW5kKHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLCBrZXlJbmRleDogbnVtYmVyLCBjaGFpbkNvZGU6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChrZXlJbmRleCAhPT0gMCAmJiBrZXlJbmRleCAhPT0gMSAmJiBrZXlJbmRleCAhPT0gMikge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgaW5kZXgnKTtcbiAgfVxuICBjb25zdCB4cHViID0gcm9vdFdhbGxldEtleXMudHJpcGxlW2tleUluZGV4XS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gIGNvbnN0IHByZWZpeCA9IHJvb3RXYWxsZXRLZXlzLmRlcml2YXRpb25QcmVmaXhlc1trZXlJbmRleF07XG4gIHJldHVybiB4cHViICsgJy8nICsgcHJlZml4ICsgJy8nICsgY2hhaW5Db2RlICsgJy8qJztcbn1cblxuLyoqXG4gKiBHZXQgYSBzdGFuZGFyZCBvdXRwdXQgZGVzY3JpcHRvciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm9wcmlldGFyeSBIRCB3YWxsZXQgc2V0dXBcbiAqIHVzZWQgaW4gQml0R28gd2FsbGV0cy5cbiAqIE9ubHkgc3VwcG9ydHMgYSBzdWJzZXQgb2Ygc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckZvclNjcmlwdFR5cGUoXG4gIHJvb3RXYWxsZXRLZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBzY3JpcHRUeXBlOiAncDJzaCcgfCAncDJzaFAyd3NoJyB8ICdwMndzaCcsXG4gIHNjb3BlOiAnaW50ZXJuYWwnIHwgJ2V4dGVybmFsJ1xuKTogRGVzY3JpcHRvciB7XG4gIGNvbnN0IGNoYWluID1cbiAgICBzY29wZSA9PT0gJ2V4dGVybmFsJ1xuICAgICAgPyB1dHhvbGliLmJpdGdvLmdldEV4dGVybmFsQ2hhaW5Db2RlKHNjcmlwdFR5cGUpXG4gICAgICA6IHV0eG9saWIuYml0Z28uZ2V0SW50ZXJuYWxDaGFpbkNvZGUoc2NyaXB0VHlwZSk7XG4gIGNvbnN0IG11bHRpOiBhc3QuTWluaXNjcmlwdE5vZGUgPSB7XG4gICAgbXVsdGk6IFsyLCAuLi5yb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChfLCBpKSA9PiBleHBhbmQocm9vdFdhbGxldEtleXMsIGksIGNoYWluKSldLFxuICB9O1xuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICAgIHJldHVybiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUoeyBzaDogbXVsdGkgfSksICdkZXJpdmFibGUnKTtcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgICAgcmV0dXJuIERlc2NyaXB0b3IuZnJvbVN0cmluZyhhc3QuZm9ybWF0Tm9kZSh7IHNoOiB7IHdzaDogbXVsdGkgfSB9KSwgJ2Rlcml2YWJsZScpO1xuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICAgIHJldHVybiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUoeyB3c2g6IG11bHRpIH0pLCAnZGVyaXZhYmxlJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc2NyaXB0IHR5cGUgJHtzY3JpcHRUeXBlfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkU2NyaXB0VHlwZShcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzXG4pOiBzY3JpcHRUeXBlIGlzICdwMnNoJyB8ICdwMnNoUDJ3c2gnIHwgJ3Ayd3NoJyB7XG4gIHJldHVybiBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ10uaW5jbHVkZXMoc2NyaXB0VHlwZSk7XG59XG5cbi8qKlxuICogR2V0IGEgbWFwIG9mIG5hbWVkIGRlc2NyaXB0b3JzIGZvciB0aGUgZ2l2ZW4gcm9vdCB3YWxsZXQga2V5cy5cbiAqIFVuc3VwcG9ydGVkIHNjcmlwdCB0eXBlcyB3aWxsIGhhdmUgYSB2YWx1ZSBvZiBudWxsLlxuICogQ3VycmVudGx5IHN1cHBvcnRzIHAyc2gsIHAyc2hQMndzaCwgYW5kIHAyd3NoIHNjcmlwdCB0eXBlcy5cbiAqIEBwYXJhbSByb290V2FsbGV0S2V5c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yc0ZvclJvb3RXYWxsZXRLZXlzKFxuICByb290V2FsbGV0S2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5c1xuKTogTWFwPHN0cmluZywgRGVzY3JpcHRvciB8IG51bGw+IHtcbiAgY29uc3Qgc2NvcGVzID0gWydleHRlcm5hbCcsICdpbnRlcm5hbCddIGFzIGNvbnN0O1xuICByZXR1cm4gbmV3IE1hcChcbiAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZsYXRNYXAoKHNjcmlwdFR5cGUpID0+XG4gICAgICBzY29wZXMubWFwKChzY29wZSkgPT4gW1xuICAgICAgICBgJHtzY3JpcHRUeXBlfS8ke3Njb3BlfWAsXG4gICAgICAgIGlzU3VwcG9ydGVkU2NyaXB0VHlwZShzY3JpcHRUeXBlKSA/IGdldERlc2NyaXB0b3JGb3JTY3JpcHRUeXBlKHJvb3RXYWxsZXRLZXlzLCBzY3JpcHRUeXBlLCBzY29wZSkgOiBudWxsLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG4iXX0=
@@ -4,6 +4,8 @@ export * from './DescriptorMap';
4
4
  export * from './derive';
5
5
  export * from './Output';
6
6
  export * from './VirtualSize';
7
+ export * from './fromFixedScriptWallet';
8
+ export * from './parse/PatternMatcher';
7
9
  /** @deprecated - import from @bitgo-beta/utxo-core directly instead */
8
10
  export * from '../Output';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAE9B,uEAAuE;AACvE,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AAEvC,uEAAuE;AACvE,cAAc,WAAW,CAAC"}
@@ -20,6 +20,8 @@ __exportStar(require("./DescriptorMap"), exports);
20
20
  __exportStar(require("./derive"), exports);
21
21
  __exportStar(require("./Output"), exports);
22
22
  __exportStar(require("./VirtualSize"), exports);
23
+ __exportStar(require("./fromFixedScriptWallet"), exports);
24
+ __exportStar(require("./parse/PatternMatcher"), exports);
23
25
  /** @deprecated - import from @bitgo-beta/utxo-core directly instead */
24
26
  __exportStar(require("../Output"), exports);
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6QixnREFBOEI7QUFFOUIsdUVBQXVFO0FBQ3ZFLDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHNidCc7XG5leHBvcnQgKiBmcm9tICcuL2FkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9EZXNjcmlwdG9yTWFwJztcbmV4cG9ydCAqIGZyb20gJy4vZGVyaXZlJztcbmV4cG9ydCAqIGZyb20gJy4vT3V0cHV0JztcbmV4cG9ydCAqIGZyb20gJy4vVmlydHVhbFNpemUnO1xuXG4vKiogQGRlcHJlY2F0ZWQgLSBpbXBvcnQgZnJvbSBAYml0Z28tYmV0YS91dHhvLWNvcmUgZGlyZWN0bHkgaW5zdGVhZCAqL1xuZXhwb3J0ICogZnJvbSAnLi4vT3V0cHV0JztcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQXVCO0FBQ3ZCLDRDQUEwQjtBQUMxQixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIsMERBQXdDO0FBQ3hDLHlEQUF1QztBQUV2Qyx1RUFBdUU7QUFDdkUsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wc2J0JztcbmV4cG9ydCAqIGZyb20gJy4vYWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL0Rlc2NyaXB0b3JNYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXJpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9PdXRwdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9WaXJ0dWFsU2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zyb21GaXhlZFNjcmlwdFdhbGxldCc7XG5leHBvcnQgKiBmcm9tICcuL3BhcnNlL1BhdHRlcm5NYXRjaGVyJztcblxuLyoqIEBkZXByZWNhdGVkIC0gaW1wb3J0IGZyb20gQGJpdGdvLWJldGEvdXR4by1jb3JlIGRpcmVjdGx5IGluc3RlYWQgKi9cbmV4cG9ydCAqIGZyb20gJy4uL091dHB1dCc7XG4iXX0=
@@ -0,0 +1,14 @@
1
+ export type PatternVar = {
2
+ $var: string;
3
+ };
4
+ export type Pattern = PatternVar | string | number | {
5
+ [key: string]: Pattern | Pattern[];
6
+ } | Pattern[];
7
+ export type ExtractedVars = Record<string, unknown>;
8
+ export declare class PatternMatcher {
9
+ match(node: unknown, pattern: Pattern): ExtractedVars | null;
10
+ private matchNode;
11
+ private isPatternVar;
12
+ private deepEqual;
13
+ }
14
+ //# sourceMappingURL=PatternMatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternMatcher.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/parse/PatternMatcher.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1C,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,CAAA;CAAE,GAAG,OAAO,EAAE,CAAC;AAExG,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,qBAAa,cAAc;IACzB,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI;IAK5D,OAAO,CAAC,SAAS;IAwCjB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAgBlB"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PatternMatcher = void 0;
4
+ class PatternMatcher {
5
+ match(node, pattern) {
6
+ const vars = {};
7
+ return this.matchNode(node, pattern, vars) ? vars : null;
8
+ }
9
+ matchNode(node, pattern, vars) {
10
+ // Variable placeholder
11
+ if (this.isPatternVar(pattern)) {
12
+ const varName = pattern.$var;
13
+ if (varName in vars) {
14
+ return this.deepEqual(vars[varName], node);
15
+ }
16
+ vars[varName] = node;
17
+ return true;
18
+ }
19
+ // Primitive values
20
+ if (typeof node !== typeof pattern)
21
+ return false;
22
+ if (typeof node === 'string' || typeof node === 'number') {
23
+ return node === pattern;
24
+ }
25
+ // Arrays
26
+ if (Array.isArray(node) && Array.isArray(pattern)) {
27
+ return node.length === pattern.length && node.every((item, i) => this.matchNode(item, pattern[i], vars));
28
+ }
29
+ // Objects
30
+ if (typeof node === 'object' && typeof pattern === 'object' && node !== null && pattern !== null) {
31
+ const nodeKeys = Object.keys(node);
32
+ const patternKeys = Object.keys(pattern);
33
+ return (nodeKeys.length === patternKeys.length &&
34
+ nodeKeys.every((key) => patternKeys.includes(key) &&
35
+ this.matchNode(node[key], pattern[key], vars)));
36
+ }
37
+ return false;
38
+ }
39
+ isPatternVar(value) {
40
+ return value !== null && typeof value === 'object' && '$var' in value;
41
+ }
42
+ deepEqual(a, b) {
43
+ if (a === b)
44
+ return true;
45
+ if (typeof a !== typeof b)
46
+ return false;
47
+ if (Array.isArray(a) && Array.isArray(b)) {
48
+ return a.length === b.length && a.every((item, i) => this.deepEqual(item, b[i]));
49
+ }
50
+ if (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null) {
51
+ const keysA = Object.keys(a);
52
+ const keysB = Object.keys(b);
53
+ return (keysA.length === keysB.length &&
54
+ keysA.every((key) => this.deepEqual(a[key], b[key])));
55
+ }
56
+ return false;
57
+ }
58
+ }
59
+ exports.PatternMatcher = PatternMatcher;
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0dGVybk1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wYXJzZS9QYXR0ZXJuTWF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxNQUFhLGNBQWM7SUFDekIsS0FBSyxDQUFDLElBQWEsRUFBRSxPQUFnQjtRQUNuQyxNQUFNLElBQUksR0FBa0IsRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMzRCxDQUFDO0lBRU8sU0FBUyxDQUFDLElBQWEsRUFBRSxPQUFnQixFQUFFLElBQW1CO1FBQ3BFLHVCQUF1QjtRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzdCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLE9BQU8sSUFBSSxLQUFLLE9BQU8sT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxLQUFLLE9BQU8sQ0FBQztRQUMxQixDQUFDO1FBRUQsU0FBUztRQUNULElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNHLENBQUM7UUFFRCxVQUFVO1FBQ1YsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pHLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6QyxPQUFPLENBQ0wsUUFBUSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTTtnQkFDdEMsUUFBUSxDQUFDLEtBQUssQ0FDWixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUUsSUFBZ0MsQ0FBQyxHQUFHLENBQUMsRUFBRyxPQUFtQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUMxRyxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWM7UUFDakMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxTQUFTLENBQUMsQ0FBVSxFQUFFLENBQVU7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pCLElBQUksT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQy9FLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixPQUFPLENBQ0wsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTTtnQkFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBRSxDQUE2QixDQUFDLEdBQUcsQ0FBQyxFQUFHLENBQTZCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUMvRyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBbEVELHdDQWtFQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFBhdHRlcm4gbWF0Y2hpbmcgdHlwZXNcbmV4cG9ydCB0eXBlIFBhdHRlcm5WYXIgPSB7ICR2YXI6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgUGF0dGVybiA9IFBhdHRlcm5WYXIgfCBzdHJpbmcgfCBudW1iZXIgfCB7IFtrZXk6IHN0cmluZ106IFBhdHRlcm4gfCBQYXR0ZXJuW10gfSB8IFBhdHRlcm5bXTtcblxuZXhwb3J0IHR5cGUgRXh0cmFjdGVkVmFycyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgY2xhc3MgUGF0dGVybk1hdGNoZXIge1xuICBtYXRjaChub2RlOiB1bmtub3duLCBwYXR0ZXJuOiBQYXR0ZXJuKTogRXh0cmFjdGVkVmFycyB8IG51bGwge1xuICAgIGNvbnN0IHZhcnM6IEV4dHJhY3RlZFZhcnMgPSB7fTtcbiAgICByZXR1cm4gdGhpcy5tYXRjaE5vZGUobm9kZSwgcGF0dGVybiwgdmFycykgPyB2YXJzIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hOb2RlKG5vZGU6IHVua25vd24sIHBhdHRlcm46IFBhdHRlcm4sIHZhcnM6IEV4dHJhY3RlZFZhcnMpOiBib29sZWFuIHtcbiAgICAvLyBWYXJpYWJsZSBwbGFjZWhvbGRlclxuICAgIGlmICh0aGlzLmlzUGF0dGVyblZhcihwYXR0ZXJuKSkge1xuICAgICAgY29uc3QgdmFyTmFtZSA9IHBhdHRlcm4uJHZhcjtcbiAgICAgIGlmICh2YXJOYW1lIGluIHZhcnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVlcEVxdWFsKHZhcnNbdmFyTmFtZV0sIG5vZGUpO1xuICAgICAgfVxuICAgICAgdmFyc1t2YXJOYW1lXSA9IG5vZGU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBQcmltaXRpdmUgdmFsdWVzXG4gICAgaWYgKHR5cGVvZiBub2RlICE9PSB0eXBlb2YgcGF0dGVybikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5vZGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbm9kZSA9PT0gcGF0dGVybjtcbiAgICB9XG5cbiAgICAvLyBBcnJheXNcbiAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSAmJiBBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gbm9kZS5sZW5ndGggPT09IHBhdHRlcm4ubGVuZ3RoICYmIG5vZGUuZXZlcnkoKGl0ZW0sIGkpID0+IHRoaXMubWF0Y2hOb2RlKGl0ZW0sIHBhdHRlcm5baV0sIHZhcnMpKTtcbiAgICB9XG5cbiAgICAvLyBPYmplY3RzXG4gICAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGF0dGVybiA9PT0gJ29iamVjdCcgJiYgbm9kZSAhPT0gbnVsbCAmJiBwYXR0ZXJuICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlS2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpO1xuICAgICAgY29uc3QgcGF0dGVybktleXMgPSBPYmplY3Qua2V5cyhwYXR0ZXJuKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZUtleXMubGVuZ3RoID09PSBwYXR0ZXJuS2V5cy5sZW5ndGggJiZcbiAgICAgICAgbm9kZUtleXMuZXZlcnkoXG4gICAgICAgICAgKGtleSkgPT5cbiAgICAgICAgICAgIHBhdHRlcm5LZXlzLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgIHRoaXMubWF0Y2hOb2RlKChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLCAocGF0dGVybiBhcyBSZWNvcmQ8c3RyaW5nLCBQYXR0ZXJuPilba2V5XSwgdmFycylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGlzUGF0dGVyblZhcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdHRlcm5WYXIge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICckdmFyJyBpbiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeSgoaXRlbSwgaSkgPT4gdGhpcy5kZWVwRXF1YWwoaXRlbSwgYltpXSkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEgIT09IG51bGwgJiYgdHlwZW9mIGIgPT09ICdvYmplY3QnICYmIGIgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiZcbiAgICAgICAga2V5c0EuZXZlcnkoKGtleSkgPT4gdGhpcy5kZWVwRXF1YWwoKGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sIChiIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
@@ -1,4 +1,6 @@
1
+ import { TapLeafScript } from 'bip174/src/lib/interfaces';
1
2
  import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { Miniscript } from '@bitgo/wasm-miniscript';
2
4
  import { DerivedDescriptorWalletOutput, WithOptDescriptor } from '../Output';
3
5
  import { Output } from '../../Output';
4
6
  /**
@@ -6,6 +8,7 @@ import { Output } from '../../Output';
6
8
  * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
7
9
  * */
8
10
  export declare const MAX_BIP125_RBF_SEQUENCE: number;
11
+ export declare function findTapLeafScript(input: TapLeafScript[], script: Buffer | Miniscript): TapLeafScript;
9
12
  export type PsbtParams = {
10
13
  network: utxolib.Network;
11
14
  version?: number;
@@ -13,6 +16,7 @@ export type PsbtParams = {
13
16
  sequence?: number;
14
17
  };
15
18
  export type DerivedDescriptorTransactionInput = DerivedDescriptorWalletOutput & {
19
+ selectTapLeafScript?: Miniscript;
16
20
  sequence?: number;
17
21
  };
18
22
  export declare function createPsbt(params: PsbtParams, inputs: DerivedDescriptorTransactionInput[], outputs: WithOptDescriptor<Output>[]): utxolib.bitgo.UtxoPsbt;
@@ -1 +1 @@
1
- {"version":3,"file":"createPsbt.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/createPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC;;;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,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,GAAG;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,iCAAiC,EAAE,EAC3C,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,GACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAYxB"}
1
+ {"version":3,"file":"createPsbt.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/createPsbt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAc,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtC;;;KAGK;AACL,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,aAAa,CAcpG;AAuCD,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,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,GAAG;IAC9E,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,iCAAiC,EAAE,EAC3C,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,GACnC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAexB"}