@bitgo-beta/utxo-core 0.0.0-semantic-release-managed

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 (132) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +6 -0
  3. package/dist/src/Output.d.ts +43 -0
  4. package/dist/src/Output.d.ts.map +1 -0
  5. package/dist/src/Output.js +60 -0
  6. package/dist/src/bip322/index.d.ts +5 -0
  7. package/dist/src/bip322/index.d.ts.map +1 -0
  8. package/dist/src/bip322/index.js +21 -0
  9. package/dist/src/bip322/toSign.d.ts +25 -0
  10. package/dist/src/bip322/toSign.d.ts.map +1 -0
  11. package/dist/src/bip322/toSign.js +126 -0
  12. package/dist/src/bip322/toSpend.d.ts +22 -0
  13. package/dist/src/bip322/toSpend.d.ts.map +1 -0
  14. package/dist/src/bip322/toSpend.js +72 -0
  15. package/dist/src/bip322/utils.d.ts +18 -0
  16. package/dist/src/bip322/utils.d.ts.map +1 -0
  17. package/dist/src/bip322/utils.js +115 -0
  18. package/dist/src/bip322/verify.d.ts +12 -0
  19. package/dist/src/bip322/verify.d.ts.map +1 -0
  20. package/dist/src/bip322/verify.js +115 -0
  21. package/dist/src/bip32utils.d.ts +16 -0
  22. package/dist/src/bip32utils.d.ts.map +1 -0
  23. package/dist/src/bip32utils.js +71 -0
  24. package/dist/src/bip65/index.d.ts +2 -0
  25. package/dist/src/bip65/index.d.ts.map +1 -0
  26. package/dist/src/bip65/index.js +18 -0
  27. package/dist/src/bip65/locktime.d.ts +8 -0
  28. package/dist/src/bip65/locktime.d.ts.map +1 -0
  29. package/dist/src/bip65/locktime.js +37 -0
  30. package/dist/src/descriptor/DescriptorMap.d.ts +9 -0
  31. package/dist/src/descriptor/DescriptorMap.d.ts.map +1 -0
  32. package/dist/src/descriptor/DescriptorMap.js +9 -0
  33. package/dist/src/descriptor/Output.d.ts +23 -0
  34. package/dist/src/descriptor/Output.d.ts.map +1 -0
  35. package/dist/src/descriptor/Output.js +41 -0
  36. package/dist/src/descriptor/VirtualSize.d.ts +23 -0
  37. package/dist/src/descriptor/VirtualSize.d.ts.map +1 -0
  38. package/dist/src/descriptor/VirtualSize.js +100 -0
  39. package/dist/src/descriptor/address.d.ts +5 -0
  40. package/dist/src/descriptor/address.d.ts.map +1 -0
  41. package/dist/src/descriptor/address.js +48 -0
  42. package/dist/src/descriptor/derive.d.ts +13 -0
  43. package/dist/src/descriptor/derive.d.ts.map +1 -0
  44. package/dist/src/descriptor/derive.js +45 -0
  45. package/dist/src/descriptor/fromFixedScriptWallet.d.ts +16 -0
  46. package/dist/src/descriptor/fromFixedScriptWallet.d.ts.map +1 -0
  47. package/dist/src/descriptor/fromFixedScriptWallet.js +88 -0
  48. package/dist/src/descriptor/index.d.ts +11 -0
  49. package/dist/src/descriptor/index.d.ts.map +1 -0
  50. package/dist/src/descriptor/index.js +27 -0
  51. package/dist/src/descriptor/parse/PatternMatcher.d.ts +14 -0
  52. package/dist/src/descriptor/parse/PatternMatcher.d.ts.map +1 -0
  53. package/dist/src/descriptor/parse/PatternMatcher.js +60 -0
  54. package/dist/src/descriptor/psbt/assertSatisfiable.d.ts +20 -0
  55. package/dist/src/descriptor/psbt/assertSatisfiable.d.ts.map +1 -0
  56. package/dist/src/descriptor/psbt/assertSatisfiable.js +74 -0
  57. package/dist/src/descriptor/psbt/createPsbt.d.ts +23 -0
  58. package/dist/src/descriptor/psbt/createPsbt.d.ts.map +1 -0
  59. package/dist/src/descriptor/psbt/createPsbt.js +107 -0
  60. package/dist/src/descriptor/psbt/findDescriptors.d.ts +26 -0
  61. package/dist/src/descriptor/psbt/findDescriptors.d.ts.map +1 -0
  62. package/dist/src/descriptor/psbt/findDescriptors.js +98 -0
  63. package/dist/src/descriptor/psbt/index.d.ts +7 -0
  64. package/dist/src/descriptor/psbt/index.d.ts.map +1 -0
  65. package/dist/src/descriptor/psbt/index.js +23 -0
  66. package/dist/src/descriptor/psbt/parse.d.ts +27 -0
  67. package/dist/src/descriptor/psbt/parse.d.ts.map +1 -0
  68. package/dist/src/descriptor/psbt/parse.js +87 -0
  69. package/dist/src/descriptor/psbt/sign.d.ts +26 -0
  70. package/dist/src/descriptor/psbt/sign.d.ts.map +1 -0
  71. package/dist/src/descriptor/psbt/sign.js +42 -0
  72. package/dist/src/descriptor/psbt/wrap.d.ts +12 -0
  73. package/dist/src/descriptor/psbt/wrap.d.ts.map +1 -0
  74. package/dist/src/descriptor/psbt/wrap.js +76 -0
  75. package/dist/src/dustThreshold.d.ts +4 -0
  76. package/dist/src/dustThreshold.d.ts.map +1 -0
  77. package/dist/src/dustThreshold.js +134 -0
  78. package/dist/src/index.d.ts +10 -0
  79. package/dist/src/index.d.ts.map +1 -0
  80. package/dist/src/index.js +49 -0
  81. package/dist/src/paygo/attestation.d.ts +11 -0
  82. package/dist/src/paygo/attestation.d.ts.map +1 -0
  83. package/dist/src/paygo/attestation.js +58 -0
  84. package/dist/src/paygo/index.d.ts +3 -0
  85. package/dist/src/paygo/index.d.ts.map +1 -0
  86. package/dist/src/paygo/index.js +19 -0
  87. package/dist/src/paygo/parsePayGoAttestation.d.ts +16 -0
  88. package/dist/src/paygo/parsePayGoAttestation.d.ts.map +1 -0
  89. package/dist/src/paygo/parsePayGoAttestation.js +50 -0
  90. package/dist/src/paygo/psbt/Errors.d.ts +22 -0
  91. package/dist/src/paygo/psbt/Errors.d.ts.map +1 -0
  92. package/dist/src/paygo/psbt/Errors.js +44 -0
  93. package/dist/src/paygo/psbt/index.d.ts +2 -0
  94. package/dist/src/paygo/psbt/index.d.ts.map +1 -0
  95. package/dist/src/paygo/psbt/index.js +18 -0
  96. package/dist/src/paygo/psbt/payGoAddressProof.d.ts +29 -0
  97. package/dist/src/paygo/psbt/payGoAddressProof.d.ts.map +1 -0
  98. package/dist/src/paygo/psbt/payGoAddressProof.js +124 -0
  99. package/dist/src/testutil/descriptor/descriptors.d.ts +13 -0
  100. package/dist/src/testutil/descriptor/descriptors.d.ts.map +1 -0
  101. package/dist/src/testutil/descriptor/descriptors.js +162 -0
  102. package/dist/src/testutil/descriptor/index.d.ts +4 -0
  103. package/dist/src/testutil/descriptor/index.d.ts.map +1 -0
  104. package/dist/src/testutil/descriptor/index.js +20 -0
  105. package/dist/src/testutil/descriptor/mock.utils.d.ts +36 -0
  106. package/dist/src/testutil/descriptor/mock.utils.d.ts.map +1 -0
  107. package/dist/src/testutil/descriptor/mock.utils.js +92 -0
  108. package/dist/src/testutil/descriptor/psbt.utils.d.ts +4 -0
  109. package/dist/src/testutil/descriptor/psbt.utils.d.ts.map +1 -0
  110. package/dist/src/testutil/descriptor/psbt.utils.js +21 -0
  111. package/dist/src/testutil/fixtures.utils.d.ts +15 -0
  112. package/dist/src/testutil/fixtures.utils.d.ts.map +1 -0
  113. package/dist/src/testutil/fixtures.utils.js +127 -0
  114. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts +12 -0
  115. package/dist/src/testutil/generatePayGoAttestationProof.utils.d.ts.map +1 -0
  116. package/dist/src/testutil/generatePayGoAttestationProof.utils.js +38 -0
  117. package/dist/src/testutil/index.d.ts +6 -0
  118. package/dist/src/testutil/index.d.ts.map +1 -0
  119. package/dist/src/testutil/index.js +22 -0
  120. package/dist/src/testutil/key.utils.d.ts +16 -0
  121. package/dist/src/testutil/key.utils.d.ts.map +1 -0
  122. package/dist/src/testutil/key.utils.js +59 -0
  123. package/dist/src/testutil/toPlainObject.utils.d.ts +11 -0
  124. package/dist/src/testutil/toPlainObject.utils.d.ts.map +1 -0
  125. package/dist/src/testutil/toPlainObject.utils.js +89 -0
  126. package/dist/src/testutil/trimMessagePrefix.d.ts +11 -0
  127. package/dist/src/testutil/trimMessagePrefix.d.ts.map +1 -0
  128. package/dist/src/testutil/trimMessagePrefix.js +60 -0
  129. package/dist/src/xOnlyPubkey.d.ts +2 -0
  130. package/dist/src/xOnlyPubkey.d.ts.map +1 -0
  131. package/dist/src/xOnlyPubkey.js +18 -0
  132. package/package.json +63 -0
@@ -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-beta/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/descriptor/psbt/assertSatisfiable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,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,74 @@
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
+ if (descriptor instanceof wasm_miniscript_1.Descriptor) {
24
+ return getRequiredLocktime(descriptor.node());
25
+ }
26
+ if (typeof descriptor !== 'object' || descriptor === null) {
27
+ return undefined;
28
+ }
29
+ if ('Wsh' in descriptor) {
30
+ return getRequiredLocktime(descriptor.Wsh);
31
+ }
32
+ if ('Sh' in descriptor) {
33
+ return getRequiredLocktime(descriptor.Sh);
34
+ }
35
+ if ('Ms' in descriptor) {
36
+ return getRequiredLocktime(descriptor.Ms);
37
+ }
38
+ if ('AndV' in descriptor) {
39
+ if (!Array.isArray(descriptor.AndV)) {
40
+ throw new Error('Expected an array');
41
+ }
42
+ if (descriptor.AndV.length !== 2) {
43
+ throw new Error('Expected exactly two elements');
44
+ }
45
+ const [a, b] = descriptor.AndV;
46
+ return getRequiredLocktime(a) ?? getRequiredLocktime(b);
47
+ }
48
+ if ('Drop' in descriptor) {
49
+ return getRequiredLocktime(descriptor.Drop);
50
+ }
51
+ if ('Verify' in descriptor) {
52
+ return getRequiredLocktime(descriptor.Verify);
53
+ }
54
+ if ('After' in descriptor && typeof descriptor.After === 'object' && descriptor.After !== null) {
55
+ if ('absLockTime' in descriptor.After && typeof descriptor.After.absLockTime === 'number') {
56
+ return descriptor.After.absLockTime;
57
+ }
58
+ }
59
+ return undefined;
60
+ }
61
+ function assertSatisfiable(psbt, inputIndex, descriptor) {
62
+ // If the descriptor requires a locktime, the input must have a non-final sequence number
63
+ const requiredLocktime = getRequiredLocktime(descriptor);
64
+ if (requiredLocktime !== undefined) {
65
+ const input = psbt.txInputs[inputIndex];
66
+ if (input.sequence === exports.FINAL_SEQUENCE) {
67
+ throw new Error(`Input ${inputIndex} has a non-final sequence number, but requires a timelock`);
68
+ }
69
+ if (psbt.locktime !== requiredLocktime) {
70
+ throw new Error(`psbt locktime (${psbt.locktime}) does not match required locktime (${requiredLocktime})`);
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0U2F0aXNmaWFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2Fzc2VydFNhdGlzZmlhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSxrREFzQ0M7QUFFRCw4Q0FZQztBQXZFRDs7Ozs7Ozs7O0dBU0c7QUFDSCw0REFBb0Q7QUFHdkMsUUFBQSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRXpDOzs7R0FHRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLFVBQWdDO0lBQ2xFLElBQUksVUFBVSxZQUFZLDRCQUFVLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN2QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdkIsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUMvQixPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN6QixPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsSUFBSSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDM0IsT0FBTyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0YsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFGLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBa0IsRUFBRSxVQUFrQixFQUFFLFVBQXNCO0lBQzlGLHlGQUF5RjtJQUN6RixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssc0JBQWMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxVQUFVLDJEQUEyRCxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxRQUFRLHVDQUF1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGVzZSBhcmUgc29tZSBoZWxwZXJzIGZvciB0ZXN0aW5nIHNhdGlzZmlhYmlsaXR5IG9mIGRlc2NyaXB0b3JzIGluIFBTQlRzLlxuICpcbiAqIFRoZXkgYXJlIG1vc3RseSBhIGRlYnVnZ2luZyBhaWQgLSBpZiBhbiBpbnB1dCBjYW5ub3QgYmUgc2F0aXNpZmllZCwgdGhlIGBmaW5hbGl6ZVBzYnQoKWAgbWV0aG9kIHdpbGwgZmFpbCwgYnV0XG4gKiB0aGUgZXJyb3IgbWVzc2FnZSBpcyBwcmV0dHkgdmFndWUuXG4gKlxuICogVGhlIG1ldGhvZHMgaGVyZSBoYXZlIHRoZSBnb2FsIG9mIGNhdGNoaW5nIGNlcnRhaW4gY2FzZXMgZWFybGllciBhbmQgd2l0aCBhIGJldHRlciBlcnJvciBtZXNzYWdlLlxuICpcbiAqIFRoZSBnb2FsIGlzIG5vdCBhbiBleGhhdXN0aXZlIGNoZWNrLCBidXQgdG8gY2F0Y2ggY29tbW9uIG1pc3Rha2VzLlxuICovXG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuZXhwb3J0IGNvbnN0IEZJTkFMX1NFUVVFTkNFID0gMHhmZmZmZmZmZjtcblxuLyoqXG4gKiBHZXQgdGhlIHJlcXVpcmVkIGxvY2t0aW1lIGZvciBhIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0gZGVzY3JpcHRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yOiBEZXNjcmlwdG9yIHwgdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3Iubm9kZSgpKTtcbiAgfVxuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgIT09ICdvYmplY3QnIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmICgnV3NoJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Xc2gpO1xuICB9XG4gIGlmICgnU2gnIGluIGRlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gZ2V0UmVxdWlyZWRMb2NrdGltZShkZXNjcmlwdG9yLlNoKTtcbiAgfVxuICBpZiAoJ01zJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Ncyk7XG4gIH1cbiAgaWYgKCdBbmRWJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRlc2NyaXB0b3IuQW5kVikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IuQW5kVi5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgZXhhY3RseSB0d28gZWxlbWVudHMnKTtcbiAgICB9XG4gICAgY29uc3QgW2EsIGJdID0gZGVzY3JpcHRvci5BbmRWO1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGEpID8/IGdldFJlcXVpcmVkTG9ja3RpbWUoYik7XG4gIH1cbiAgaWYgKCdEcm9wJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvci5Ecm9wKTtcbiAgfVxuICBpZiAoJ1ZlcmlmeScgaW4gZGVzY3JpcHRvcikge1xuICAgIHJldHVybiBnZXRSZXF1aXJlZExvY2t0aW1lKGRlc2NyaXB0b3IuVmVyaWZ5KTtcbiAgfVxuICBpZiAoJ0FmdGVyJyBpbiBkZXNjcmlwdG9yICYmIHR5cGVvZiBkZXNjcmlwdG9yLkFmdGVyID09PSAnb2JqZWN0JyAmJiBkZXNjcmlwdG9yLkFmdGVyICE9PSBudWxsKSB7XG4gICAgaWYgKCdhYnNMb2NrVGltZScgaW4gZGVzY3JpcHRvci5BZnRlciAmJiB0eXBlb2YgZGVzY3JpcHRvci5BZnRlci5hYnNMb2NrVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yLkFmdGVyLmFic0xvY2tUaW1lO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2F0aXNmaWFibGUocHNidDogdXR4b2xpYi5Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiB2b2lkIHtcbiAgLy8gSWYgdGhlIGRlc2NyaXB0b3IgcmVxdWlyZXMgYSBsb2NrdGltZSwgdGhlIGlucHV0IG11c3QgaGF2ZSBhIG5vbi1maW5hbCBzZXF1ZW5jZSBudW1iZXJcbiAgY29uc3QgcmVxdWlyZWRMb2NrdGltZSA9IGdldFJlcXVpcmVkTG9ja3RpbWUoZGVzY3JpcHRvcik7XG4gIGlmIChyZXF1aXJlZExvY2t0aW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBpbnB1dCA9IHBzYnQudHhJbnB1dHNbaW5wdXRJbmRleF07XG4gICAgaWYgKGlucHV0LnNlcXVlbmNlID09PSBGSU5BTF9TRVFVRU5DRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCAke2lucHV0SW5kZXh9IGhhcyBhIG5vbi1maW5hbCBzZXF1ZW5jZSBudW1iZXIsIGJ1dCByZXF1aXJlcyBhIHRpbWVsb2NrYCk7XG4gICAgfVxuICAgIGlmIChwc2J0LmxvY2t0aW1lICE9PSByZXF1aXJlZExvY2t0aW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHBzYnQgbG9ja3RpbWUgKCR7cHNidC5sb2NrdGltZX0pIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIGxvY2t0aW1lICgke3JlcXVpcmVkTG9ja3RpbWV9KWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,23 @@
1
+ import { TapLeafScript } from 'bip174/src/lib/interfaces';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { Miniscript } from '@bitgo/wasm-miniscript';
4
+ import { DerivedDescriptorWalletOutput, WithOptDescriptor } from '../Output';
5
+ import { Output } from '../../Output';
6
+ /**
7
+ * Non-Final (Replaceable)
8
+ * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
9
+ * */
10
+ export declare const MAX_BIP125_RBF_SEQUENCE: number;
11
+ export declare function findTapLeafScript(input: TapLeafScript[], script: Buffer | Miniscript): TapLeafScript;
12
+ export type PsbtParams = {
13
+ network: utxolib.Network;
14
+ version?: number;
15
+ locktime?: number;
16
+ sequence?: number;
17
+ };
18
+ export type DerivedDescriptorTransactionInput = DerivedDescriptorWalletOutput & {
19
+ selectTapLeafScript?: Miniscript;
20
+ sequence?: number;
21
+ };
22
+ export declare function createPsbt(params: PsbtParams, inputs: DerivedDescriptorTransactionInput[], outputs: WithOptDescriptor<Output>[]): utxolib.bitgo.UtxoPsbt;
23
+ //# sourceMappingURL=createPsbt.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,107 @@
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.findTapLeafScript = findTapLeafScript;
38
+ exports.createPsbt = createPsbt;
39
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
40
+ const wrap_1 = require("./wrap");
41
+ const assertSatisfiable_1 = require("./assertSatisfiable");
42
+ /**
43
+ * Non-Final (Replaceable)
44
+ * Reference: https://github.com/bitcoin/bitcoin/blob/v25.1/src/rpc/rawtransaction_util.cpp#L49
45
+ * */
46
+ exports.MAX_BIP125_RBF_SEQUENCE = 0xffffffff - 2;
47
+ function findTapLeafScript(input, script) {
48
+ if (!Buffer.isBuffer(script)) {
49
+ script = Buffer.from(script.encode());
50
+ }
51
+ const matches = input.filter((leaf) => {
52
+ return leaf.script.equals(script);
53
+ });
54
+ if (matches.length === 0) {
55
+ throw new Error(`No tapLeafScript found for script: ${script.toString('hex')}`);
56
+ }
57
+ if (matches.length > 1) {
58
+ throw new Error(`Multiple tapLeafScripts found for script: ${script.toString('hex')}`);
59
+ }
60
+ return matches[0];
61
+ }
62
+ function updateInputsWithDescriptors(psbt, inputParams) {
63
+ if (psbt.txInputs.length !== inputParams.length) {
64
+ throw new Error(`Input count mismatch (psbt=${psbt.txInputs.length}, inputParams=${inputParams.length})`);
65
+ }
66
+ const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
67
+ for (const [inputIndex, v] of inputParams.entries()) {
68
+ (0, assertSatisfiable_1.assertSatisfiable)(psbt, inputIndex, v.descriptor);
69
+ wrappedPsbt.updateInputWithDescriptor(inputIndex, v.descriptor);
70
+ }
71
+ const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt, psbt.network);
72
+ for (const inputIndex in psbt.txInputs) {
73
+ const preparedInput = unwrappedPsbt.data.inputs[inputIndex];
74
+ const v = inputParams[inputIndex];
75
+ if (v.selectTapLeafScript && preparedInput.tapLeafScript) {
76
+ const selected = findTapLeafScript(preparedInput.tapLeafScript, v.selectTapLeafScript);
77
+ preparedInput.tapLeafScript = [selected];
78
+ }
79
+ psbt.data.inputs[inputIndex] = preparedInput;
80
+ }
81
+ }
82
+ function updateOutputsWithDescriptors(psbt, descriptors) {
83
+ const wrappedPsbt = (0, wrap_1.toWrappedPsbt)(psbt);
84
+ for (const [outputIndex, { descriptor }] of descriptors.entries()) {
85
+ if (descriptor) {
86
+ wrappedPsbt.updateOutputWithDescriptor(outputIndex, descriptor);
87
+ }
88
+ }
89
+ const unwrappedPsbt = (0, wrap_1.toUtxoPsbt)(wrappedPsbt, psbt.network);
90
+ for (const outputIndex in psbt.txOutputs) {
91
+ psbt.data.outputs[outputIndex] = unwrappedPsbt.data.outputs[outputIndex];
92
+ }
93
+ }
94
+ function createPsbt(params, inputs, outputs) {
95
+ const psbt = utxolib.bitgo.UtxoPsbt.createPsbt({ network: params.network });
96
+ psbt.setVersion(params.version ?? 2);
97
+ psbt.setLocktime(params.locktime ?? 0);
98
+ psbt.addInputs(inputs.map((i) => ({ ...i, sequence: i.sequence ?? params.sequence ?? exports.MAX_BIP125_RBF_SEQUENCE })));
99
+ psbt.addOutputs(outputs);
100
+ updateInputsWithDescriptors(psbt, inputs.map(({ descriptor, selectTapLeafScript }) => ({
101
+ descriptor,
102
+ selectTapLeafScript,
103
+ })));
104
+ updateOutputsWithDescriptors(psbt, outputs);
105
+ return psbt;
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL3BzYnQvY3JlYXRlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsOENBY0M7QUFtREQsZ0NBbUJDO0FBbkdELDhEQUFnRDtBQU1oRCxpQ0FBbUQ7QUFDbkQsMkRBQXdEO0FBRXhEOzs7S0FHSztBQUNRLFFBQUEsdUJBQXVCLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUV0RCxTQUFnQixpQkFBaUIsQ0FBQyxLQUFzQixFQUFFLE1BQTJCO0lBQ25GLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxD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QztJQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLCtCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QiwyQkFBMkIsQ0FDekIsSUFBSSxFQUNKLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELFVBQVU7UUFDVixtQkFBbUI7S0FDcEIsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNGLDRCQUE0QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYXBMZWFmU2NyaXB0IH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIE1pbmlzY3JpcHQgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQsIFdpdGhPcHREZXNjcmlwdG9yIH0gZnJvbSAnLi4vT3V0cHV0JztcbmltcG9ydCB7IE91dHB1dCB9IGZyb20gJy4uLy4uL091dHB1dCc7XG5cbmltcG9ydCB7IHRvVXR4b1BzYnQsIHRvV3JhcHBlZFBzYnQgfSBmcm9tICcuL3dyYXAnO1xuaW1wb3J0IHsgYXNzZXJ0U2F0aXNmaWFibGUgfSBmcm9tICcuL2Fzc2VydFNhdGlzZmlhYmxlJztcblxuLyoqXG4gKiBOb24tRmluYWwgKFJlcGxhY2VhYmxlKVxuICogUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXRjb2luL2Jsb2IvdjI1LjEvc3JjL3JwYy9yYXd0cmFuc2FjdGlvbl91dGlsLmNwcCNMNDlcbiAqICovXG5leHBvcnQgY29uc3QgTUFYX0JJUDEyNV9SQkZfU0VRVUVOQ0UgPSAweGZmZmZmZmZmIC0gMjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRUYXBMZWFmU2NyaXB0KGlucHV0OiBUYXBMZWFmU2NyaXB0W10sIHNjcmlwdDogQnVmZmVyIHwgTWluaXNjcmlwdCk6IFRhcExlYWZTY3JpcHQge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihzY3JpcHQpKSB7XG4gICAgc2NyaXB0ID0gQnVmZmVyLmZyb20oc2NyaXB0LmVuY29kZSgpKTtcbiAgfVxuICBjb25zdCBtYXRjaGVzID0gaW5wdXQuZmlsdGVyKChsZWFmKSA9PiB7XG4gICAgcmV0dXJuIGxlYWYuc2NyaXB0LmVxdWFscyhzY3JpcHQpO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyB0YXBMZWFmU2NyaXB0IGZvdW5kIGZvciBzY3JpcHQ6ICR7c2NyaXB0LnRvU3RyaW5nKCdoZXgnKX1gKTtcbiAgfVxuICBpZiAobWF0Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSB0YXBMZWFmU2NyaXB0cyBmb3VuZCBmb3Igc2NyaXB0OiAke3NjcmlwdC50b1N0cmluZygnaGV4Jyl9YCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUlucHV0c1dpdGhEZXNjcmlwdG9ycyhcbiAgcHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCxcbiAgaW5wdXRQYXJhbXM6IEFycmF5PHsgZGVzY3JpcHRvcjogRGVzY3JpcHRvcjsgc2VsZWN0VGFwTGVhZlNjcmlwdD86IE1pbmlzY3JpcHQgfT5cbikge1xuICBpZiAocHNidC50eElucHV0cy5sZW5ndGggIT09IGlucHV0UGFyYW1zLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW5wdXQgY291bnQgbWlzbWF0Y2ggKHBzYnQ9JHtwc2J0LnR4SW5wdXRzLmxlbmd0aH0sIGlucHV0UGFyYW1zPSR7aW5wdXRQYXJhbXMubGVuZ3RofSlgKTtcbiAgfVxuICBjb25zdCB3cmFwcGVkUHNidCA9IHRvV3JhcHBlZFBzYnQocHNidCk7XG4gIGZvciAoY29uc3QgW2lucHV0SW5kZXgsIHZdIG9mIGlucHV0UGFyYW1zLmVudHJpZXMoKSkge1xuICAgIGFzc2VydFNhdGlzZmlhYmxlKHBzYnQsIGlucHV0SW5kZXgsIHYuZGVzY3JpcHRvcik7XG4gICAgd3JhcHBlZFBzYnQudXBkYXRlSW5wdXRXaXRoRGVzY3JpcHRvcihpbnB1dEluZGV4LCB2LmRlc2NyaXB0b3IpO1xuICB9XG4gIGNvbnN0IHVud3JhcHBlZFBzYnQgPSB0b1V0eG9Qc2J0KHdyYXBwZWRQc2J0LCBwc2J0Lm5ldHdvcmspO1xuICBmb3IgKGNvbnN0IGlucHV0SW5kZXggaW4gcHNidC50eElucHV0cykge1xuICAgIGNvbnN0IHByZXBhcmVkSW5wdXQgPSB1bndyYXBwZWRQc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGNvbnN0IHYgPSBpbnB1dFBhcmFtc1tpbnB1dEluZGV4XTtcbiAgICBpZiAodi5zZWxlY3RUYXBMZWFmU2NyaXB0ICYmIHByZXBhcmVkSW5wdXQudGFwTGVhZlNjcmlwdCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBmaW5kVGFwTGVhZlNjcmlwdChwcmVwYXJlZElucHV0LnRhcExlYWZTY3JpcHQsIHYuc2VsZWN0VGFwTGVhZlNjcmlwdCk7XG4gICAgICBwcmVwYXJlZElucHV0LnRhcExlYWZTY3JpcHQgPSBbc2VsZWN0ZWRdO1xuICAgIH1cbiAgICBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdID0gcHJlcGFyZWRJbnB1dDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPdXRwdXRzV2l0aERlc2NyaXB0b3JzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIGRlc2NyaXB0b3JzOiBXaXRoT3B0RGVzY3JpcHRvcjxPdXRwdXQ+W10pIHtcbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICBmb3IgKGNvbnN0IFtvdXRwdXRJbmRleCwgeyBkZXNjcmlwdG9yIH1dIG9mIGRlc2NyaXB0b3JzLmVudHJpZXMoKSkge1xuICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICB3cmFwcGVkUHNidC51cGRhdGVPdXRwdXRXaXRoRGVzY3JpcHRvcihvdXRwdXRJbmRleCwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG4gIGNvbnN0IHVud3JhcHBlZFBzYnQgPSB0b1V0eG9Qc2J0KHdyYXBwZWRQc2J0LCBwc2J0Lm5ldHdvcmspO1xuICBmb3IgKGNvbnN0IG91dHB1dEluZGV4IGluIHBzYnQudHhPdXRwdXRzKSB7XG4gICAgcHNidC5kYXRhLm91dHB1dHNbb3V0cHV0SW5kZXhdID0gdW53cmFwcGVkUHNidC5kYXRhLm91dHB1dHNbb3V0cHV0SW5kZXhdO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFBzYnRQYXJhbXMgPSB7XG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgbG9ja3RpbWU/OiBudW1iZXI7XG4gIHNlcXVlbmNlPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRGVyaXZlZERlc2NyaXB0b3JUcmFuc2FjdGlvbklucHV0ID0gRGVyaXZlZERlc2NyaXB0b3JXYWxsZXRPdXRwdXQgJiB7XG4gIHNlbGVjdFRhcExlYWZTY3JpcHQ/OiBNaW5pc2NyaXB0O1xuICBzZXF1ZW5jZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQc2J0KFxuICBwYXJhbXM6IFBzYnRQYXJhbXMsXG4gIGlucHV0czogRGVyaXZlZERlc2NyaXB0b3JUcmFuc2FjdGlvbklucHV0W10sXG4gIG91dHB1dHM6IFdpdGhPcHREZXNjcmlwdG9yPE91dHB1dD5bXVxuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHBzYnQgPSB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LmNyZWF0ZVBzYnQoeyBuZXR3b3JrOiBwYXJhbXMubmV0d29yayB9KTtcbiAgcHNidC5zZXRWZXJzaW9uKHBhcmFtcy52ZXJzaW9uID8/IDIpO1xuICBwc2J0LnNldExvY2t0aW1lKHBhcmFtcy5sb2NrdGltZSA/PyAwKTtcbiAgcHNidC5hZGRJbnB1dHMoaW5wdXRzLm1hcCgoaSkgPT4gKHsgLi4uaSwgc2VxdWVuY2U6IGkuc2VxdWVuY2UgPz8gcGFyYW1zLnNlcXVlbmNlID8/IE1BWF9CSVAxMjVfUkJGX1NFUVVFTkNFIH0pKSk7XG4gIHBzYnQuYWRkT3V0cHV0cyhvdXRwdXRzKTtcbiAgdXBkYXRlSW5wdXRzV2l0aERlc2NyaXB0b3JzKFxuICAgIHBzYnQsXG4gICAgaW5wdXRzLm1hcCgoeyBkZXNjcmlwdG9yLCBzZWxlY3RUYXBMZWFmU2NyaXB0IH0pID0+ICh7XG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgc2VsZWN0VGFwTGVhZlNjcmlwdCxcbiAgICB9KSlcbiAgKTtcbiAgdXBkYXRlT3V0cHV0c1dpdGhEZXNjcmlwdG9ycyhwc2J0LCBvdXRwdXRzKTtcbiAgcmV0dXJuIHBzYnQ7XG59XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { PsbtInput, PsbtOutput } from 'bip174/src/lib/interfaces';
2
+ import { Descriptor } from '@bitgo/wasm-miniscript';
3
+ import { DescriptorMap } from '../DescriptorMap';
4
+ type DescriptorWithoutIndex = {
5
+ descriptor: Descriptor;
6
+ index: undefined;
7
+ };
8
+ type DescriptorWithIndex = {
9
+ descriptor: Descriptor;
10
+ index: number;
11
+ };
12
+ /**
13
+ * @param input
14
+ * @param descriptorMap
15
+ * @returns DescriptorWithIndex for the input if found, undefined otherwise
16
+ */
17
+ export declare function findDescriptorForInput(input: PsbtInput, descriptorMap: DescriptorMap): DescriptorWithIndex | DescriptorWithoutIndex | undefined;
18
+ /**
19
+ * @param script - the output script
20
+ * @param output - the PSBT output
21
+ * @param descriptorMap
22
+ * @returns DescriptorWithIndex for the output if found, undefined otherwise
23
+ */
24
+ export declare function findDescriptorForOutput(script: Buffer, output: PsbtOutput, descriptorMap: DescriptorMap): DescriptorWithIndex | DescriptorWithoutIndex | undefined;
25
+ export {};
26
+ //# sourceMappingURL=findDescriptors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/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,sBAAsB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAsB3E,KAAK,mBAAmB,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAsErE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,sBAAsB,GAAG,SAAS,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,aAAa,GAC3B,mBAAmB,GAAG,sBAAsB,GAAG,SAAS,CAQ1D"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findDescriptorForInput = findDescriptorForInput;
4
+ exports.findDescriptorForOutput = findDescriptorForOutput;
5
+ /**
6
+ * Find a definite descriptor in the descriptor map that matches the given script.
7
+ * @param script
8
+ * @param descriptorMap
9
+ */
10
+ function findDescriptorWithoutDerivation(script, descriptorMap) {
11
+ for (const descriptor of descriptorMap.values()) {
12
+ if (!descriptor.hasWildcard()) {
13
+ if (Buffer.from(descriptor.scriptPubkey()).equals(script)) {
14
+ return { descriptor, index: undefined };
15
+ }
16
+ }
17
+ }
18
+ return undefined;
19
+ }
20
+ /**
21
+ * Find a descriptor in the descriptor map that matches the given script and derivation index.
22
+ * @param script
23
+ * @param index
24
+ * @param descriptorMap
25
+ * @returns DescriptorWithIndex if found, undefined otherwise
26
+ */
27
+ function findDescriptorForDerivationIndex(script, index, descriptorMap) {
28
+ for (const descriptor of descriptorMap.values()) {
29
+ if (descriptor.hasWildcard() && Buffer.from(descriptor.atDerivationIndex(index).scriptPubkey()).equals(script)) {
30
+ return { descriptor, index };
31
+ }
32
+ }
33
+ return undefined;
34
+ }
35
+ function getDerivationIndexFromPath(path) {
36
+ const indexStr = path.split('/').pop();
37
+ if (!indexStr) {
38
+ throw new Error(`Invalid derivation path ${path}`);
39
+ }
40
+ const index = parseInt(indexStr, 10);
41
+ if (index.toString() !== indexStr) {
42
+ throw new Error(`Invalid derivation path ${path}`);
43
+ }
44
+ return index;
45
+ }
46
+ /**
47
+ * Wrapper around findDescriptorForDerivationPath that tries multiple derivation paths.
48
+ * @param script
49
+ * @param derivationPaths
50
+ * @param descriptorMap
51
+ */
52
+ function findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap) {
53
+ const derivationIndexSet = new Set(derivationPaths.map((p) => getDerivationIndexFromPath(p)));
54
+ for (const index of [...derivationIndexSet]) {
55
+ const desc = findDescriptorForDerivationIndex(script, index, descriptorMap);
56
+ if (desc) {
57
+ return desc;
58
+ }
59
+ }
60
+ return undefined;
61
+ }
62
+ function getDerivationPaths(v) {
63
+ if ('bip32Derivation' in v && v.bip32Derivation) {
64
+ return v.bip32Derivation.map((v) => v.path);
65
+ }
66
+ if ('tapBip32Derivation' in v && v.tapBip32Derivation) {
67
+ return v.tapBip32Derivation.map((v) => v.path).filter((v) => v !== '' && v !== 'm');
68
+ }
69
+ return undefined;
70
+ }
71
+ /**
72
+ * @param input
73
+ * @param descriptorMap
74
+ * @returns DescriptorWithIndex for the input if found, undefined otherwise
75
+ */
76
+ function findDescriptorForInput(input, descriptorMap) {
77
+ const script = input.witnessUtxo?.script;
78
+ if (!script) {
79
+ throw new Error('Missing script');
80
+ }
81
+ const derivationPaths = getDerivationPaths(input) ?? [];
82
+ return (findDescriptorWithoutDerivation(script, descriptorMap) ??
83
+ findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap));
84
+ }
85
+ /**
86
+ * @param script - the output script
87
+ * @param output - the PSBT output
88
+ * @param descriptorMap
89
+ * @returns DescriptorWithIndex for the output if found, undefined otherwise
90
+ */
91
+ function findDescriptorForOutput(script, output, descriptorMap) {
92
+ const derivationPaths = getDerivationPaths(output);
93
+ return (findDescriptorWithoutDerivation(script, descriptorMap) ??
94
+ (derivationPaths === undefined
95
+ ? undefined
96
+ : findDescriptorForAnyDerivationPath(script, derivationPaths, descriptorMap)));
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZERlc2NyaXB0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvcHNidC9maW5kRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpSEEsd0RBYUM7QUFRRCwwREFZQztBQWhJRDs7OztHQUlHO0FBQ0gsU0FBUywrQkFBK0IsQ0FDdEMsTUFBYyxFQUNkLGFBQTRCO0lBRTVCLEtBQUssTUFBTSxVQUFVLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQzlCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUlEOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0NBQWdDLENBQ3ZDLE1BQWMsRUFDZCxLQUFhLEVBQ2IsYUFBNEI7SUFFNUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoRCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQy9HLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUywwQkFB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WUFDNUIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsa0NBQWtDLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUNoRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cblV0aWxpdGllcyBmb3IgbWFwcGluZyBiYWNrIGZyb20gUFNCVCBpbnB1dHMgdG8gZGVzY3JpcHRvcnMuXG5cblRoaXMgaXMgYSBzb21ld2hhdCBicnV0ZS1mb3JjZSBhdHRlbXB0IHRoYXQgcmVsaWVzIG9uIHRoZSBgYmlwMzJEZXJpdmF0aW9uYCBmaWVsZCB0byBiZSBzZXQuXG5cbkl0IHdpbGwgcHJvYmFibHkgb25seSB3b3JrIGNvcnJlY3RseSBpZiBhbGwgeHB1YnMgaW4gdGhlIGRlc2NyaXB0b3IgYXJlIGRlcml2YWJsZS5cblxuV2Ugc2hvdWxkIHRha2UgYSBsb29rIGF0IGEgbW9yZSByb2J1c3QgYW5kIHN0YW5kYXJkIGFwcHJvYWNoIGxpa2UgdGhpczogaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYmlwcy9wdWxsLzE1NDhcblxuICovXG5pbXBvcnQgeyBQc2J0SW5wdXQsIFBzYnRPdXRwdXQgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCB9IGZyb20gJy4uL0Rlc2NyaXB0b3JNYXAnO1xuXG50eXBlIERlc2NyaXB0b3JXaXRob3V0SW5kZXggPSB7IGRlc2NyaXB0b3I6IERlc2NyaXB0b3I7IGluZGV4OiB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBGaW5kIGEgZGVmaW5pdGUgZGVzY3JpcHRvciBpbiB0aGUgZGVzY3JpcHRvciBtYXAgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzY3JpcHQuXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICovXG5mdW5jdGlvbiBmaW5kRGVzY3JpcHRvcldpdGhvdXREZXJpdmF0aW9uKFxuICBzY3JpcHQ6IEJ1ZmZlcixcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhvdXRJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZGVzY3JpcHRvciBvZiBkZXNjcmlwdG9yTWFwLnZhbHVlcygpKSB7XG4gICAgaWYgKCFkZXNjcmlwdG9yLmhhc1dpbGRjYXJkKCkpIHtcbiAgICAgIGlmIChCdWZmZXIuZnJvbShkZXNjcmlwdG9yLnNjcmlwdFB1YmtleSgpKS5lcXVhbHMoc2NyaXB0KSkge1xuICAgICAgICByZXR1cm4geyBkZXNjcmlwdG9yLCBpbmRleDogdW5kZWZpbmVkIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxudHlwZSBEZXNjcmlwdG9yV2l0aEluZGV4ID0geyBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yOyBpbmRleDogbnVtYmVyIH07XG5cbi8qKlxuICogRmluZCBhIGRlc2NyaXB0b3IgaW4gdGhlIGRlc2NyaXB0b3IgbWFwIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2NyaXB0IGFuZCBkZXJpdmF0aW9uIGluZGV4LlxuICogQHBhcmFtIHNjcmlwdFxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICogQHJldHVybnMgRGVzY3JpcHRvcldpdGhJbmRleCBpZiBmb3VuZCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBmaW5kRGVzY3JpcHRvckZvckRlcml2YXRpb25JbmRleChcbiAgc2NyaXB0OiBCdWZmZXIsXG4gIGluZGV4OiBudW1iZXIsXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXBcbik6IERlc2NyaXB0b3JXaXRoSW5kZXggfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGRlc2NyaXB0b3Igb2YgZGVzY3JpcHRvck1hcC52YWx1ZXMoKSkge1xuICAgIGlmIChkZXNjcmlwdG9yLmhhc1dpbGRjYXJkKCkgJiYgQnVmZmVyLmZyb20oZGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleChpbmRleCkuc2NyaXB0UHVia2V5KCkpLmVxdWFscyhzY3JpcHQpKSB7XG4gICAgICByZXR1cm4geyBkZXNjcmlwdG9yLCBpbmRleCB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldERlcml2YXRpb25JbmRleEZyb21QYXRoKHBhdGg6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGluZGV4U3RyID0gcGF0aC5zcGxpdCgnLycpLnBvcCgpO1xuICBpZiAoIWluZGV4U3RyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRlcml2YXRpb24gcGF0aCAke3BhdGh9YCk7XG4gIH1cbiAgY29uc3QgaW5kZXggPSBwYXJzZUludChpbmRleFN0ciwgMTApO1xuICBpZiAoaW5kZXgudG9TdHJpbmcoKSAhPT0gaW5kZXhTdHIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGVyaXZhdGlvbiBwYXRoICR7cGF0aH1gKTtcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgZmluZERlc2NyaXB0b3JGb3JEZXJpdmF0aW9uUGF0aCB0aGF0IHRyaWVzIG11bHRpcGxlIGRlcml2YXRpb24gcGF0aHMuXG4gKiBAcGFyYW0gc2NyaXB0XG4gKiBAcGFyYW0gZGVyaXZhdGlvblBhdGhzXG4gKiBAcGFyYW0gZGVzY3JpcHRvck1hcFxuICovXG5mdW5jdGlvbiBmaW5kRGVzY3JpcHRvckZvckFueURlcml2YXRpb25QYXRoKFxuICBzY3JpcHQ6IEJ1ZmZlcixcbiAgZGVyaXZhdGlvblBhdGhzOiBzdHJpbmdbXSxcbiAgZGVzY3JpcHRvck1hcDogRGVzY3JpcHRvck1hcFxuKTogRGVzY3JpcHRvcldpdGhJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlcml2YXRpb25JbmRleFNldCA9IG5ldyBTZXQoZGVyaXZhdGlvblBhdGhzLm1hcCgocCkgPT4gZ2V0RGVyaXZhdGlvbkluZGV4RnJvbVBhdGgocCkpKTtcbiAgZm9yIChjb25zdCBpbmRleCBvZiBbLi4uZGVyaXZhdGlvbkluZGV4U2V0XSkge1xuICAgIGNvbnN0IGRlc2MgPSBmaW5kRGVzY3JpcHRvckZvckRlcml2YXRpb25JbmRleChzY3JpcHQsIGluZGV4LCBkZXNjcmlwdG9yTWFwKTtcbiAgICBpZiAoZGVzYykge1xuICAgICAgcmV0dXJuIGRlc2M7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxudHlwZSBXaXRoQmlwMzJEZXJpdmF0aW9uID0geyBiaXAzMkRlcml2YXRpb24/OiB7IHBhdGg6IHN0cmluZyB9W10gfTtcbnR5cGUgV2l0aFRhcEJpcDMyRGVyaXZhdGlvbiA9IHsgdGFwQmlwMzJEZXJpdmF0aW9uPzogeyBwYXRoOiBzdHJpbmcgfVtdIH07XG5cbmZ1bmN0aW9uIGdldERlcml2YXRpb25QYXRocyh2OiBXaXRoQmlwMzJEZXJpdmF0aW9uIHwgV2l0aFRhcEJpcDMyRGVyaXZhdGlvbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCdiaXAzMkRlcml2YXRpb24nIGluIHYgJiYgdi5iaXAzMkRlcml2YXRpb24pIHtcbiAgICByZXR1cm4gdi5iaXAzMkRlcml2YXRpb24ubWFwKCh2KSA9PiB2LnBhdGgpO1xuICB9XG4gIGlmICgndGFwQmlwMzJEZXJpdmF0aW9uJyBpbiB2ICYmIHYudGFwQmlwMzJEZXJpdmF0aW9uKSB7XG4gICAgcmV0dXJuIHYudGFwQmlwMzJEZXJpdmF0aW9uLm1hcCgodikgPT4gdi5wYXRoKS5maWx0ZXIoKHYpID0+IHYgIT09ICcnICYmIHYgIT09ICdtJyk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEBwYXJhbSBkZXNjcmlwdG9yTWFwXG4gKiBAcmV0dXJucyBEZXNjcmlwdG9yV2l0aEluZGV4IGZvciB0aGUgaW5wdXQgaWYgZm91bmQsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREZXNjcmlwdG9yRm9ySW5wdXQoXG4gIGlucHV0OiBQc2J0SW5wdXQsXG4gIGRlc2NyaXB0b3JNYXA6IERlc2NyaXB0b3JNYXBcbik6IERlc2NyaXB0b3JXaXRoSW5kZXggfCBEZXNjcmlwdG9yV2l0aG91dEluZGV4IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2NyaXB0ID0gaW5wdXQud2l0bmVzc1V0eG8/LnNjcmlwdDtcbiAgaWYgKCFzY3JpcHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc2NyaXB0Jyk7XG4gIH1cbiAgY29uc3QgZGVyaXZhdGlvblBhdGhzID0gZ2V0RGVyaXZhdGlvblBhdGhzKGlucHV0KSA/PyBbXTtcbiAgcmV0dXJuIChcbiAgICBmaW5kRGVzY3JpcHRvcldpdGhvdXREZXJpdmF0aW9uKHNjcmlwdCwgZGVzY3JpcHRvck1hcCkgPz9cbiAgICBmaW5kRGVzY3JpcHRvckZvckFueURlcml2YXRpb25QYXRoKHNjcmlwdCwgZGVyaXZhdGlvblBhdGhzLCBkZXNjcmlwdG9yTWFwKVxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSBzY3JpcHQgLSB0aGUgb3V0cHV0IHNjcmlwdFxuICogQHBhcmFtIG91dHB1dCAtIHRoZSBQU0JUIG91dHB1dFxuICogQHBhcmFtIGRlc2NyaXB0b3JNYXBcbiAqIEByZXR1cm5zIERlc2NyaXB0b3JXaXRoSW5kZXggZm9yIHRoZSBvdXRwdXQgaWYgZm91bmQsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREZXNjcmlwdG9yRm9yT3V0cHV0KFxuICBzY3JpcHQ6IEJ1ZmZlcixcbiAgb3V0cHV0OiBQc2J0T3V0cHV0LFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwXG4pOiBEZXNjcmlwdG9yV2l0aEluZGV4IHwgRGVzY3JpcHRvcldpdGhvdXRJbmRleCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRlcml2YXRpb25QYXRocyA9IGdldERlcml2YXRpb25QYXRocyhvdXRwdXQpO1xuICByZXR1cm4gKFxuICAgIGZpbmREZXNjcmlwdG9yV2l0aG91dERlcml2YXRpb24oc2NyaXB0LCBkZXNjcmlwdG9yTWFwKSA/P1xuICAgIChkZXJpdmF0aW9uUGF0aHMgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogZmluZERlc2NyaXB0b3JGb3JBbnlEZXJpdmF0aW9uUGF0aChzY3JpcHQsIGRlcml2YXRpb25QYXRocywgZGVzY3JpcHRvck1hcCkpXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ export * from './assertSatisfiable';
2
+ export * from './createPsbt';
3
+ export * from './parse';
4
+ export * from './findDescriptors';
5
+ export * from './wrap';
6
+ export * from './sign';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,23 @@
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("./assertSatisfiable"), exports);
18
+ __exportStar(require("./createPsbt"), exports);
19
+ __exportStar(require("./parse"), exports);
20
+ __exportStar(require("./findDescriptors"), exports);
21
+ __exportStar(require("./wrap"), exports);
22
+ __exportStar(require("./sign"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsK0NBQTZCO0FBQzdCLDBDQUF3QjtBQUN4QixvREFBa0M7QUFDbEMseUNBQXVCO0FBQ3ZCLHlDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXNzZXJ0U2F0aXNmaWFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGVQc2J0JztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9maW5kRGVzY3JpcHRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi93cmFwJztcbmV4cG9ydCAqIGZyb20gJy4vc2lnbic7XG4iXX0=
@@ -0,0 +1,27 @@
1
+ import { Descriptor } from '@bitgo/wasm-miniscript';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ import { DescriptorMap } from '../DescriptorMap';
4
+ export type ScriptId = {
5
+ descriptor: Descriptor;
6
+ index: number | undefined;
7
+ };
8
+ export type ParsedInput = {
9
+ address: string;
10
+ value: bigint;
11
+ scriptId: ScriptId;
12
+ };
13
+ export type ParsedOutput = {
14
+ address?: string;
15
+ script: Buffer;
16
+ value: bigint;
17
+ scriptId?: ScriptId;
18
+ };
19
+ export type ParsedDescriptorTransaction = {
20
+ inputs: ParsedInput[];
21
+ outputs: ParsedOutput[];
22
+ spendAmount: bigint;
23
+ minerFee: bigint;
24
+ virtualSize: number;
25
+ };
26
+ export declare function parse(psbt: utxolib.Psbt, descriptorMap: DescriptorMap, network: utxolib.Network): ParsedDescriptorTransaction;
27
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMjD,MAAM,MAAM,QAAQ,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAMF,wBAAgB,KAAK,CACnB,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,2BAA2B,CA0C7B"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.parse = parse;
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const VirtualSize_1 = require("../VirtualSize");
39
+ const findDescriptors_1 = require("./findDescriptors");
40
+ const assertSatisfiable_1 = require("./assertSatisfiable");
41
+ function sum(...values) {
42
+ return values.reduce((a, b) => a + b, BigInt(0));
43
+ }
44
+ function parse(psbt, descriptorMap, network) {
45
+ const inputs = psbt.data.inputs.map((input, inputIndex) => {
46
+ if (!input.witnessUtxo) {
47
+ throw new Error('invalid input: no witnessUtxo');
48
+ }
49
+ if (!input.witnessUtxo.value) {
50
+ throw new Error('invalid input: no value');
51
+ }
52
+ const scriptId = (0, findDescriptors_1.findDescriptorForInput)(input, descriptorMap);
53
+ if (!scriptId) {
54
+ throw new Error('invalid input: no descriptor found');
55
+ }
56
+ (0, assertSatisfiable_1.assertSatisfiable)(psbt, inputIndex, scriptId.descriptor);
57
+ return {
58
+ address: utxolib.address.fromOutputScript(input.witnessUtxo.script, network),
59
+ value: input.witnessUtxo.value,
60
+ scriptId,
61
+ };
62
+ });
63
+ const outputs = psbt.txOutputs.map((output, i) => {
64
+ if (output.value === undefined) {
65
+ throw new Error('invalid output: no value');
66
+ }
67
+ const scriptId = (0, findDescriptors_1.findDescriptorForOutput)(output.script, psbt.data.outputs[i], descriptorMap);
68
+ return {
69
+ address: output.address,
70
+ script: output.script,
71
+ value: output.value,
72
+ scriptId,
73
+ };
74
+ });
75
+ const inputAmount = sum(...inputs.map((input) => input.value));
76
+ const outputSum = sum(...outputs.map((output) => output.value));
77
+ const spendAmount = sum(...outputs.filter((output) => !output.scriptId).map((output) => output.value));
78
+ const minerFee = inputAmount - outputSum;
79
+ return {
80
+ inputs,
81
+ outputs,
82
+ spendAmount,
83
+ minerFee,
84
+ virtualSize: (0, VirtualSize_1.getVirtualSize)({ inputs: inputs.map((i) => i.scriptId.descriptor), outputs }),
85
+ };
86
+ }
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9wc2J0L3BhcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0NBLHNCQThDQztBQWpGRCw4REFBZ0Q7QUFHaEQsZ0RBQWdEO0FBRWhELHVEQUFvRjtBQUNwRiwyREFBd0Q7QUF5QnhELFNBQVMsR0FBRyxDQUFDLEdBQUcsTUFBZ0I7SUFDOUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBZ0IsS0FBSyxDQUNuQixJQUFrQixFQUNsQixhQUE0QixFQUM1QixPQUF3QjtJQUV4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFlLEVBQUU7UUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBQSx3Q0FBc0IsRUFBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFBLHFDQUFpQixFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE9BQU87WUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDNUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSztZQUM5QixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFnQixFQUFFO1FBQzdELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUEseUNBQXVCLEVBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RixPQUFPO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDbkIsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkcsTUFBTSxRQUFRLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUN6QyxPQUFPO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxXQUFXO1FBQ1gsUUFBUTtRQUNSLFdBQVcsRUFBRSxJQUFBLDRCQUFjLEVBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUMzRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBEZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vRGVzY3JpcHRvck1hcCc7XG5pbXBvcnQgeyBnZXRWaXJ0dWFsU2l6ZSB9IGZyb20gJy4uL1ZpcnR1YWxTaXplJztcblxuaW1wb3J0IHsgZmluZERlc2NyaXB0b3JGb3JJbnB1dCwgZmluZERlc2NyaXB0b3JGb3JPdXRwdXQgfSBmcm9tICcuL2ZpbmREZXNjcmlwdG9ycyc7XG5pbXBvcnQgeyBhc3NlcnRTYXRpc2ZpYWJsZSB9IGZyb20gJy4vYXNzZXJ0U2F0aXNmaWFibGUnO1xuXG5leHBvcnQgdHlwZSBTY3JpcHRJZCA9IHsgZGVzY3JpcHRvcjogRGVzY3JpcHRvcjsgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCB9O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRJbnB1dCA9IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB2YWx1ZTogYmlnaW50O1xuICBzY3JpcHRJZDogU2NyaXB0SWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRPdXRwdXQgPSB7XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHNjcmlwdDogQnVmZmVyO1xuICB2YWx1ZTogYmlnaW50O1xuICBzY3JpcHRJZD86IFNjcmlwdElkO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkRGVzY3JpcHRvclRyYW5zYWN0aW9uID0ge1xuICBpbnB1dHM6IFBhcnNlZElucHV0W107XG4gIG91dHB1dHM6IFBhcnNlZE91dHB1dFtdO1xuICBzcGVuZEFtb3VudDogYmlnaW50O1xuICBtaW5lckZlZTogYmlnaW50O1xuICB2aXJ0dWFsU2l6ZTogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gc3VtKC4uLnZhbHVlczogYmlnaW50W10pOiBiaWdpbnQge1xuICByZXR1cm4gdmFsdWVzLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIEJpZ0ludCgwKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShcbiAgcHNidDogdXR4b2xpYi5Qc2J0LFxuICBkZXNjcmlwdG9yTWFwOiBEZXNjcmlwdG9yTWFwLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFBhcnNlZERlc2NyaXB0b3JUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IGlucHV0cyA9IHBzYnQuZGF0YS5pbnB1dHMubWFwKChpbnB1dCwgaW5wdXRJbmRleCk6IFBhcnNlZElucHV0ID0+IHtcbiAgICBpZiAoIWlucHV0LndpdG5lc3NVdHhvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5wdXQ6IG5vIHdpdG5lc3NVdHhvJyk7XG4gICAgfVxuICAgIGlmICghaW5wdXQud2l0bmVzc1V0eG8udmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dDogbm8gdmFsdWUnKTtcbiAgICB9XG4gICAgY29uc3Qgc2NyaXB0SWQgPSBmaW5kRGVzY3JpcHRvckZvcklucHV0KGlucHV0LCBkZXNjcmlwdG9yTWFwKTtcbiAgICBpZiAoIXNjcmlwdElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW5wdXQ6IG5vIGRlc2NyaXB0b3IgZm91bmQnKTtcbiAgICB9XG4gICAgYXNzZXJ0U2F0aXNmaWFibGUocHNidCwgaW5wdXRJbmRleCwgc2NyaXB0SWQuZGVzY3JpcHRvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KGlucHV0LndpdG5lc3NVdHhvLnNjcmlwdCwgbmV0d29yayksXG4gICAgICB2YWx1ZTogaW5wdXQud2l0bmVzc1V0eG8udmFsdWUsXG4gICAgICBzY3JpcHRJZCxcbiAgICB9O1xuICB9KTtcbiAgY29uc3Qgb3V0cHV0cyA9IHBzYnQudHhPdXRwdXRzLm1hcCgob3V0cHV0LCBpKTogUGFyc2VkT3V0cHV0ID0+IHtcbiAgICBpZiAob3V0cHV0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvdXRwdXQ6IG5vIHZhbHVlJyk7XG4gICAgfVxuICAgIGNvbnN0IHNjcmlwdElkID0gZmluZERlc2NyaXB0b3JGb3JPdXRwdXQob3V0cHV0LnNjcmlwdCwgcHNidC5kYXRhLm91dHB1dHNbaV0sIGRlc2NyaXB0b3JNYXApO1xuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBvdXRwdXQudmFsdWUsXG4gICAgICBzY3JpcHRJZCxcbiAgICB9O1xuICB9KTtcbiAgY29uc3QgaW5wdXRBbW91bnQgPSBzdW0oLi4uaW5wdXRzLm1hcCgoaW5wdXQpID0+IGlucHV0LnZhbHVlKSk7XG4gIGNvbnN0IG91dHB1dFN1bSA9IHN1bSguLi5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBvdXRwdXQudmFsdWUpKTtcbiAgY29uc3Qgc3BlbmRBbW91bnQgPSBzdW0oLi4ub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gIW91dHB1dC5zY3JpcHRJZCkubWFwKChvdXRwdXQpID0+IG91dHB1dC52YWx1ZSkpO1xuICBjb25zdCBtaW5lckZlZSA9IGlucHV0QW1vdW50IC0gb3V0cHV0U3VtO1xuICByZXR1cm4ge1xuICAgIGlucHV0cyxcbiAgICBvdXRwdXRzLFxuICAgIHNwZW5kQW1vdW50LFxuICAgIG1pbmVyRmVlLFxuICAgIHZpcnR1YWxTaXplOiBnZXRWaXJ0dWFsU2l6ZSh7IGlucHV0czogaW5wdXRzLm1hcCgoaSkgPT4gaS5zY3JpcHRJZC5kZXNjcmlwdG9yKSwgb3V0cHV0cyB9KSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { Psbt as WasmPsbt } from '@bitgo/wasm-miniscript';
3
+ /** These can be replaced when @bitgo/wasm-miniscript is updated */
4
+ export type SignPsbtInputResult = {
5
+ Schnorr: string[];
6
+ } | {
7
+ Ecdsa: string[];
8
+ };
9
+ export type SignPsbtResult = {
10
+ [inputIndex: number]: SignPsbtInputResult;
11
+ };
12
+ /**
13
+ * @param signResult
14
+ * @return the number of new signatures created by the signResult for a single input
15
+ */
16
+ export declare function getNewSignatureCountForInput(signResult: SignPsbtInputResult): number;
17
+ /**
18
+ * @param signResult
19
+ * @return the number of new signatures created by the signResult
20
+ */
21
+ export declare function getNewSignatureCount(signResult: SignPsbtResult): number;
22
+ type Key = Buffer | utxolib.BIP32Interface | utxolib.ECPairInterface;
23
+ /** Convenience function to sign a PSBT with a key */
24
+ export declare function signWithKey(psbt: WasmPsbt, key: Key): SignPsbtResult;
25
+ export {};
26
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/psbt/sign.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE1D,mEAAmE;AACnE,MAAM,MAAM,mBAAmB,GAAG;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAAC;CAC3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAQpF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,cAAc,GAAG,MAAM,CAEvE;AAED,KAAK,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;AAErE,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,cAAc,CAUpE"}