@bitgo-beta/utxo-staking 1.1.1-beta.147 → 1.1.1-beta.1471

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 (161) hide show
  1. package/dist/cjs/scripts/babylon-sync.d.ts +2 -0
  2. package/dist/cjs/scripts/babylon-sync.d.ts.map +1 -0
  3. package/dist/cjs/scripts/babylon-sync.js +126 -0
  4. package/dist/cjs/src/babylon/delegationMessage.d.ts +38 -0
  5. package/dist/cjs/src/babylon/delegationMessage.d.ts.map +1 -0
  6. package/dist/cjs/src/babylon/delegationMessage.js +285 -0
  7. package/dist/cjs/src/babylon/descriptor.d.ts +48 -0
  8. package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
  9. package/dist/cjs/src/babylon/descriptor.js +97 -0
  10. package/dist/cjs/src/babylon/index.d.ts +8 -0
  11. package/dist/cjs/src/babylon/index.d.ts.map +1 -0
  12. package/dist/cjs/src/babylon/index.js +51 -0
  13. package/dist/cjs/src/babylon/network.d.ts +7 -0
  14. package/dist/cjs/src/babylon/network.d.ts.map +1 -0
  15. package/dist/cjs/src/babylon/network.js +66 -0
  16. package/dist/cjs/src/babylon/params.mainnet.json +182 -0
  17. package/dist/cjs/src/babylon/params.testnet.json +206 -0
  18. package/dist/cjs/src/babylon/parseDescriptor.d.ts +26 -0
  19. package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
  20. package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
  21. package/dist/cjs/src/babylon/stakingManager.d.ts +6 -0
  22. package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
  23. package/dist/cjs/src/babylon/stakingManager.js +120 -0
  24. package/dist/cjs/src/babylon/stakingParams.d.ts +40 -0
  25. package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
  26. package/dist/cjs/src/babylon/stakingParams.js +132 -0
  27. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  28. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  29. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.js +55 -0
  30. package/dist/cjs/src/babylon/undelegation/index.d.ts +3 -0
  31. package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
  32. package/dist/cjs/src/babylon/undelegation/index.js +19 -0
  33. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts +16 -0
  34. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
  35. package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
  36. package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
  37. package/dist/cjs/src/coreDao/descriptor.js +38 -0
  38. package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
  39. package/dist/{src → cjs/src}/coreDao/index.js +1 -1
  40. package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
  41. package/dist/cjs/src/coreDao/opReturn.js +183 -0
  42. package/dist/{src → cjs/src}/coreDao/transaction.d.ts +16 -7
  43. package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
  44. package/dist/cjs/src/coreDao/transaction.js +34 -0
  45. package/dist/cjs/src/index.d.ts +4 -0
  46. package/dist/cjs/src/index.d.ts.map +1 -0
  47. package/dist/cjs/src/index.js +40 -0
  48. package/dist/cjs/src/pox5/index.d.ts +3 -0
  49. package/dist/cjs/src/pox5/index.d.ts.map +1 -0
  50. package/dist/{src → cjs/src/pox5}/index.js +3 -4
  51. package/dist/cjs/src/pox5/recovery.d.ts +13 -0
  52. package/dist/cjs/src/pox5/recovery.d.ts.map +1 -0
  53. package/dist/cjs/src/pox5/recovery.js +75 -0
  54. package/dist/cjs/src/pox5/witness.d.ts +13 -0
  55. package/dist/cjs/src/pox5/witness.d.ts.map +1 -0
  56. package/dist/cjs/src/pox5/witness.js +25 -0
  57. package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
  58. package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
  59. package/dist/cjs/test/unit/babylon/bug71.js +108 -0
  60. package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
  61. package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
  62. package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
  63. package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
  64. package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
  65. package/dist/cjs/test/unit/babylon/transactions.js +338 -0
  66. package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
  67. package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
  68. package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
  69. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
  70. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
  71. package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
  72. package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
  73. package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
  74. package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
  75. package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
  76. package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
  77. package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
  78. package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
  79. package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
  80. package/dist/cjs/test/unit/coreDao/utils.js +54 -0
  81. package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
  82. package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
  83. package/dist/cjs/test/unit/fixtures.utils.js +91 -0
  84. package/dist/cjs/test/unit/pox5/recovery.d.ts +2 -0
  85. package/dist/cjs/test/unit/pox5/recovery.d.ts.map +1 -0
  86. package/dist/cjs/test/unit/pox5/recovery.js +88 -0
  87. package/dist/cjs/test/unit/pox5/witness.d.ts +2 -0
  88. package/dist/cjs/test/unit/pox5/witness.d.ts.map +1 -0
  89. package/dist/cjs/test/unit/pox5/witness.js +87 -0
  90. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  91. package/dist/esm/babylon/delegationMessage.d.ts +38 -0
  92. package/dist/esm/babylon/delegationMessage.d.ts.map +1 -0
  93. package/dist/esm/babylon/delegationMessage.js +239 -0
  94. package/dist/esm/babylon/descriptor.d.ts +48 -0
  95. package/dist/esm/babylon/descriptor.d.ts.map +1 -0
  96. package/dist/esm/babylon/descriptor.js +91 -0
  97. package/dist/esm/babylon/index.d.ts +8 -0
  98. package/dist/esm/babylon/index.d.ts.map +1 -0
  99. package/dist/esm/babylon/index.js +13 -0
  100. package/dist/esm/babylon/network.d.ts +7 -0
  101. package/dist/esm/babylon/network.d.ts.map +1 -0
  102. package/dist/esm/babylon/network.js +29 -0
  103. package/dist/esm/babylon/params.mainnet.json +182 -0
  104. package/dist/esm/babylon/params.testnet.json +206 -0
  105. package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
  106. package/dist/esm/babylon/parseDescriptor.d.ts.map +1 -0
  107. package/dist/esm/babylon/parseDescriptor.js +155 -0
  108. package/dist/esm/babylon/stakingManager.d.ts +6 -0
  109. package/dist/esm/babylon/stakingManager.d.ts.map +1 -0
  110. package/dist/esm/babylon/stakingManager.js +83 -0
  111. package/dist/esm/babylon/stakingParams.d.ts +40 -0
  112. package/dist/esm/babylon/stakingParams.d.ts.map +1 -0
  113. package/dist/esm/babylon/stakingParams.js +86 -0
  114. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  115. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  116. package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
  117. package/dist/esm/babylon/undelegation/index.d.ts +3 -0
  118. package/dist/esm/babylon/undelegation/index.d.ts.map +1 -0
  119. package/dist/esm/babylon/undelegation/index.js +3 -0
  120. package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
  121. package/dist/esm/babylon/undelegation/unbonding.d.ts.map +1 -0
  122. package/dist/esm/babylon/undelegation/unbonding.js +70 -0
  123. package/dist/esm/coreDao/descriptor.d.ts +18 -0
  124. package/dist/{src → esm}/coreDao/descriptor.d.ts.map +1 -1
  125. package/dist/esm/coreDao/descriptor.js +35 -0
  126. package/dist/esm/coreDao/index.d.ts +4 -0
  127. package/dist/esm/coreDao/index.js +4 -0
  128. package/dist/esm/coreDao/opReturn.d.ts +41 -0
  129. package/dist/esm/coreDao/opReturn.js +175 -0
  130. package/dist/esm/coreDao/transaction.d.ts +28 -0
  131. package/dist/esm/coreDao/transaction.d.ts.map +1 -0
  132. package/dist/esm/coreDao/transaction.js +30 -0
  133. package/dist/esm/index.d.ts +4 -0
  134. package/dist/{src → esm}/index.d.ts.map +1 -1
  135. package/dist/esm/index.js +4 -0
  136. package/dist/esm/pox5/index.d.ts +3 -0
  137. package/dist/esm/pox5/index.d.ts.map +1 -0
  138. package/dist/esm/pox5/index.js +3 -0
  139. package/dist/esm/pox5/recovery.d.ts +13 -0
  140. package/dist/esm/pox5/recovery.d.ts.map +1 -0
  141. package/dist/esm/pox5/recovery.js +68 -0
  142. package/dist/esm/pox5/witness.d.ts +13 -0
  143. package/dist/esm/pox5/witness.d.ts.map +1 -0
  144. package/dist/esm/pox5/witness.js +21 -0
  145. package/package.json +43 -12
  146. package/.eslintignore +0 -5
  147. package/.mocharc.yml +0 -8
  148. package/CHANGELOG.md +0 -63
  149. package/dist/src/coreDao/descriptor.js +0 -37
  150. package/dist/src/coreDao/opReturn.js +0 -183
  151. package/dist/src/coreDao/transaction.d.ts.map +0 -1
  152. package/dist/src/coreDao/transaction.js +0 -26
  153. package/dist/src/index.d.ts +0 -3
  154. package/dist/src/transaction.d.ts +0 -32
  155. package/dist/src/transaction.d.ts.map +0 -1
  156. package/dist/src/transaction.js +0 -54
  157. /package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +0 -0
  158. /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
  159. /package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +0 -0
  160. /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
  161. /package/dist/{src → esm}/coreDao/opReturn.d.ts.map +0 -0
@@ -0,0 +1,5 @@
1
+ import { Descriptor } from '@bitgo/wasm-utxo';
2
+ import * as utxolib from '@bitgo-beta/utxo-lib';
3
+ export declare function updateInputWithDescriptor(psbt: utxolib.Psbt, inputIndex: number, descriptor: Descriptor): void;
4
+ export declare function finalizePsbt(psbt: utxolib.Psbt): utxolib.bitgo.UtxoPsbt;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coreDao/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAM9G;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAMvE"}
@@ -0,0 +1,54 @@
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.updateInputWithDescriptor = updateInputWithDescriptor;
37
+ exports.finalizePsbt = finalizePsbt;
38
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
39
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
40
+ function updateInputWithDescriptor(psbt, inputIndex, descriptor) {
41
+ const wrappedPsbt = wasm_utxo_1.Psbt.deserialize(psbt.toBuffer());
42
+ wrappedPsbt.updateInputWithDescriptor(inputIndex, descriptor);
43
+ psbt.data.inputs[inputIndex] = utxolib.bitgo.UtxoPsbt.fromBuffer(Buffer.from(wrappedPsbt.serialize()), {
44
+ network: utxolib.networks.bitcoin,
45
+ }).data.inputs[inputIndex];
46
+ }
47
+ function finalizePsbt(psbt) {
48
+ const wrappedPsbt = wasm_utxo_1.Psbt.deserialize(psbt.toBuffer());
49
+ wrappedPsbt.finalize();
50
+ return utxolib.bitgo.UtxoPsbt.fromBuffer(Buffer.from(wrappedPsbt.serialize()), {
51
+ network: utxolib.networks.bitcoin,
52
+ });
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvY29yZURhby91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLDhEQU1DO0FBRUQsb0NBTUM7QUFqQkQsZ0RBQW9EO0FBQ3BELDhEQUFnRDtBQUVoRCxTQUFnQix5QkFBeUIsQ0FBQyxJQUFrQixFQUFFLFVBQWtCLEVBQUUsVUFBc0I7SUFDdEcsTUFBTSxXQUFXLEdBQUcsZ0JBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTtRQUNyRyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO0tBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQUMsSUFBa0I7SUFDN0MsTUFBTSxXQUFXLEdBQUcsZ0JBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEQsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUU7UUFDN0UsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztLQUNsQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciwgUHNidCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKHBzYnQ6IHV0eG9saWIuUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yKTogdm9pZCB7XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gUHNidC5kZXNlcmlhbGl6ZShwc2J0LnRvQnVmZmVyKCkpO1xuICB3cmFwcGVkUHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKGlucHV0SW5kZXgsIGRlc2NyaXB0b3IpO1xuICBwc2J0LmRhdGEuaW5wdXRzW2lucHV0SW5kZXhdID0gdXR4b2xpYi5iaXRnby5VdHhvUHNidC5mcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKHdyYXBwZWRQc2J0LnNlcmlhbGl6ZSgpKSwge1xuICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgfSkuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZVBzYnQocHNidDogdXR4b2xpYi5Qc2J0KTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHdyYXBwZWRQc2J0ID0gUHNidC5kZXNlcmlhbGl6ZShwc2J0LnRvQnVmZmVyKCkpO1xuICB3cmFwcGVkUHNidC5maW5hbGl6ZSgpO1xuICByZXR1cm4gdXR4b2xpYi5iaXRnby5VdHhvUHNidC5mcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKHdyYXBwZWRQc2J0LnNlcmlhbGl6ZSgpKSwge1xuICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import assert from 'assert';
2
+ import { ast } from '@bitgo/wasm-utxo';
3
+ export declare function normalize(v: unknown): unknown;
4
+ type EqualsAssertion = typeof assert.deepStrictEqual;
5
+ export declare function assertEqualsFixture(fixtureName: string, value: unknown, n?: typeof normalize, eq?: EqualsAssertion): Promise<void>;
6
+ export declare function assertTransactionEqualsFixture(fixtureName: string, tx: unknown): Promise<void>;
7
+ export declare function assertEqualsMiniscript(script: Buffer, miniscript: ast.MiniscriptNode): void;
8
+ export {};
9
+ //# sourceMappingURL=fixtures.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.utils.d.ts","sourceRoot":"","sources":["../../../../test/unit/fixtures.utils.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,GAAG,EAA0B,MAAM,kBAAkB,CAAC;AAM/D,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CA6B7C;AAED,KAAK,eAAe,GAAG,OAAO,MAAM,CAAC,eAAe,CAAC;AAErD,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,EACd,CAAC,mBAAY,EACb,EAAE,GAAE,eAAwC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAGf;AAED,wBAAsB,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,cAAc,GAAG,IAAI,CAO3F"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.normalize = normalize;
40
+ exports.assertEqualsFixture = assertEqualsFixture;
41
+ exports.assertTransactionEqualsFixture = assertTransactionEqualsFixture;
42
+ exports.assertEqualsMiniscript = assertEqualsMiniscript;
43
+ const assert_1 = __importDefault(require("assert"));
44
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
45
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
46
+ const bitcoinjslib = __importStar(require("bitcoinjs-lib"));
47
+ const testutil_1 = require("@bitgo-beta/utxo-core/testutil");
48
+ const descriptor_1 = require("@bitgo-beta/utxo-core/testutil/descriptor");
49
+ function normalize(v) {
50
+ if (typeof v === 'bigint') {
51
+ return v.toString();
52
+ }
53
+ if (v instanceof wasm_utxo_1.Descriptor) {
54
+ return v.toString();
55
+ }
56
+ if (v instanceof Uint8Array) {
57
+ v = Buffer.from(v);
58
+ }
59
+ if (v instanceof Buffer) {
60
+ return v.toString('hex');
61
+ }
62
+ if (v instanceof bitcoinjslib.Psbt) {
63
+ v = utxolib.Psbt.fromBuffer(v.toBuffer());
64
+ }
65
+ if (v instanceof utxolib.Psbt) {
66
+ return (0, descriptor_1.toPlainObjectFromPsbt)(v);
67
+ }
68
+ if (v instanceof utxolib.Transaction) {
69
+ return (0, descriptor_1.toPlainObjectFromTx)(v);
70
+ }
71
+ if (Array.isArray(v)) {
72
+ return v.map(normalize);
73
+ }
74
+ if (typeof v === 'object' && v !== null) {
75
+ return Object.fromEntries(Object.entries(v).flatMap(([k, v]) => (v === undefined ? [] : [[k, normalize(v)]])));
76
+ }
77
+ return v;
78
+ }
79
+ async function assertEqualsFixture(fixtureName, value, n = normalize, eq = assert_1.default.deepStrictEqual) {
80
+ value = n(value);
81
+ eq(await (0, testutil_1.getFixture)(fixtureName, value), value);
82
+ }
83
+ async function assertTransactionEqualsFixture(fixtureName, tx) {
84
+ await assertEqualsFixture(fixtureName, normalize(tx));
85
+ }
86
+ function assertEqualsMiniscript(script, miniscript) {
87
+ const ms = wasm_utxo_1.Miniscript.fromBitcoinScript(script, 'tap');
88
+ assert_1.default.deepStrictEqual(wasm_utxo_1.ast.fromMiniscript(ms), miniscript);
89
+ assert_1.default.deepStrictEqual(script.toString('hex'), Buffer.from(wasm_utxo_1.Miniscript.fromString(wasm_utxo_1.ast.formatNode(miniscript), 'tap').encode()).toString('hex'));
90
+ }
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvZml4dHVyZXMudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSw4QkE2QkM7QUFJRCxrREFRQztBQUVELHdFQUVDO0FBRUQsd0RBT0M7QUE5REQsb0RBQTRCO0FBRTVCLGdEQUErRDtBQUMvRCw4REFBZ0Q7QUFDaEQsNERBQThDO0FBQzlDLDZEQUE0RDtBQUM1RCwwRUFBdUc7QUFFdkcsU0FBZ0IsU0FBUyxDQUFDLENBQVU7SUFDbEMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBSSxDQUFDLFlBQVksc0JBQVUsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUM1QixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUM7UUFDeEIsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsT0FBTyxJQUFBLGtDQUFxQixFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLENBQUMsWUFBWSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFBLGdDQUFtQixFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBSU0sS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxXQUFtQixFQUNuQixLQUFjLEVBQ2QsQ0FBQyxHQUFHLFNBQVMsRUFDYixLQUFzQixnQkFBTSxDQUFDLGVBQWU7SUFFNUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixFQUFFLENBQUMsTUFBTSxJQUFBLHFCQUFVLEVBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFFTSxLQUFLLFVBQVUsOEJBQThCLENBQUMsV0FBbUIsRUFBRSxFQUFXO0lBQ25GLE1BQU0sbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxNQUFjLEVBQUUsVUFBOEI7SUFDbkYsTUFBTSxFQUFFLEdBQUcsc0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsZUFBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRCxnQkFBTSxDQUFDLGVBQWUsQ0FDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBVSxDQUFDLFVBQVUsQ0FBQyxlQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUMvRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgYXN0LCBEZXNjcmlwdG9yLCBNaW5pc2NyaXB0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIGJpdGNvaW5qc2xpYiBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IGdldEZpeHR1cmUgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUvdGVzdHV0aWwnO1xuaW1wb3J0IHsgdG9QbGFpbk9iamVjdEZyb21UeCwgdG9QbGFpbk9iamVjdEZyb21Qc2J0IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlL3Rlc3R1dGlsL2Rlc2NyaXB0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHY6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2ID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHYgaW5zdGFuY2VvZiBEZXNjcmlwdG9yKSB7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoKTtcbiAgfVxuICBpZiAodiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICB2ID0gQnVmZmVyLmZyb20odik7XG4gIH1cbiAgaWYgKHYgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gdi50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgaWYgKHYgaW5zdGFuY2VvZiBiaXRjb2luanNsaWIuUHNidCkge1xuICAgIHYgPSB1dHhvbGliLlBzYnQuZnJvbUJ1ZmZlcih2LnRvQnVmZmVyKCkpO1xuICB9XG4gIGlmICh2IGluc3RhbmNlb2YgdXR4b2xpYi5Qc2J0KSB7XG4gICAgcmV0dXJuIHRvUGxhaW5PYmplY3RGcm9tUHNidCh2KTtcbiAgfVxuICBpZiAodiBpbnN0YW5jZW9mIHV0eG9saWIuVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdG9QbGFpbk9iamVjdEZyb21UeCh2KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgIHJldHVybiB2Lm1hcChub3JtYWxpemUpO1xuICB9XG4gIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModikuZmxhdE1hcCgoW2ssIHZdKSA9PiAodiA9PT0gdW5kZWZpbmVkID8gW10gOiBbW2ssIG5vcm1hbGl6ZSh2KV1dKSkpO1xuICB9XG4gIHJldHVybiB2O1xufVxuXG50eXBlIEVxdWFsc0Fzc2VydGlvbiA9IHR5cGVvZiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0RXF1YWxzRml4dHVyZShcbiAgZml4dHVyZU5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4gIG4gPSBub3JtYWxpemUsXG4gIGVxOiBFcXVhbHNBc3NlcnRpb24gPSBhc3NlcnQuZGVlcFN0cmljdEVxdWFsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdmFsdWUgPSBuKHZhbHVlKTtcbiAgZXEoYXdhaXQgZ2V0Rml4dHVyZShmaXh0dXJlTmFtZSwgdmFsdWUpLCB2YWx1ZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkVxdWFsc0ZpeHR1cmUoZml4dHVyZU5hbWU6IHN0cmluZywgdHg6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYXNzZXJ0RXF1YWxzRml4dHVyZShmaXh0dXJlTmFtZSwgbm9ybWFsaXplKHR4KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbHNNaW5pc2NyaXB0KHNjcmlwdDogQnVmZmVyLCBtaW5pc2NyaXB0OiBhc3QuTWluaXNjcmlwdE5vZGUpOiB2b2lkIHtcbiAgY29uc3QgbXMgPSBNaW5pc2NyaXB0LmZyb21CaXRjb2luU2NyaXB0KHNjcmlwdCwgJ3RhcCcpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFzdC5mcm9tTWluaXNjcmlwdChtcyksIG1pbmlzY3JpcHQpO1xuICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgIHNjcmlwdC50b1N0cmluZygnaGV4JyksXG4gICAgQnVmZmVyLmZyb20oTWluaXNjcmlwdC5mcm9tU3RyaW5nKGFzdC5mb3JtYXROb2RlKG1pbmlzY3JpcHQpLCAndGFwJykuZW5jb2RlKCkpLnRvU3RyaW5nKCdoZXgnKVxuICApO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../../test/unit/pox5/recovery.ts"],"names":[],"mappings":""}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("assert/strict"));
7
+ const crypto_1 = require("crypto");
8
+ const utxo_descriptors_1 = require("@bitgo-beta/utxo-descriptors");
9
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
10
+ const testutils_1 = require("@bitgo/wasm-utxo/testutils");
11
+ const pox5_1 = require("../../../src/pox5");
12
+ const UNLOCK_HEIGHT = 840000;
13
+ function sha256(value) {
14
+ return (0, crypto_1.createHash)('sha256').update(value).digest();
15
+ }
16
+ function createPox5RecoveryPsbt(lockTime, sequence = 0xfffffffe, unlockHeight = UNLOCK_HEIGHT) {
17
+ const [user, backup, bitgo] = (0, testutils_1.getKeyTriple)('utxo-staking-pox5-recovery');
18
+ const earlyExit = (0, testutils_1.getKey)('utxo-staking-pox5-recovery-early-exit');
19
+ const principalPreimage = Buffer.alloc(32, 0x42);
20
+ const descriptor = utxo_descriptors_1.pox5.createPox5LockupDescriptor({
21
+ unlockHeight,
22
+ stakerCommitment: sha256(principalPreimage),
23
+ earlyExitKey: Buffer.from(earlyExit.publicKey),
24
+ stakerKeys: [Buffer.from(user.publicKey), Buffer.from(backup.publicKey), Buffer.from(bitgo.publicKey)],
25
+ });
26
+ const concreteDescriptor = descriptor;
27
+ const psbt = wasm_utxo_1.Psbt.create(2, lockTime);
28
+ psbt.addInput('01'.repeat(32), 0, 100000n, concreteDescriptor.scriptPubkey(), sequence);
29
+ psbt.addOutput(concreteDescriptor.scriptPubkey(), 90000n);
30
+ psbt.updateInputWithDescriptor(0, concreteDescriptor);
31
+ const match = utxo_descriptors_1.pox5.matchPox5Input(psbt, 0, new Map([['pox5', concreteDescriptor]]));
32
+ strict_1.default.ok(match);
33
+ return { psbt, match: match, principalPreimage };
34
+ }
35
+ describe('PoX-5 spend policy', function () {
36
+ it('allows the early-exit branch regardless of nLockTime', function () {
37
+ const locktimeSpend = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
38
+ const earlyExitSpend = createPox5RecoveryPsbt(0);
39
+ const timestampLocktime = createPox5RecoveryPsbt(pox5_1.POX5_MAX_UNLOCK_HEIGHT);
40
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5EarlyExitSpend)(locktimeSpend.psbt, locktimeSpend.match));
41
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5EarlyExitSpend)(earlyExitSpend.psbt, earlyExitSpend.match));
42
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5EarlyExitSpend)(timestampLocktime.psbt, timestampLocktime.match));
43
+ });
44
+ it('classifies the spend from native principal-preimage metadata', function () {
45
+ const locktimeSpend = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
46
+ strict_1.default.equal((0, pox5_1.classifyPox5Spend)(locktimeSpend.psbt, locktimeSpend.match), 'locktime');
47
+ const earlyExitSpend = createPox5RecoveryPsbt(0);
48
+ (0, pox5_1.preparePox5EarlyExit)(earlyExitSpend.psbt, 0, earlyExitSpend.match, earlyExitSpend.principalPreimage);
49
+ strict_1.default.equal((0, pox5_1.classifyPox5Spend)(earlyExitSpend.psbt, earlyExitSpend.match), 'early-exit');
50
+ });
51
+ it('enforces the block-height and unlock-height boundaries', function () {
52
+ const atHeight = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
53
+ const aboveHeight = createPox5RecoveryPsbt(UNLOCK_HEIGHT + 1);
54
+ const belowHeight = createPox5RecoveryPsbt(UNLOCK_HEIGHT - 1);
55
+ const timestampLocktime = createPox5RecoveryPsbt(pox5_1.POX5_MAX_UNLOCK_HEIGHT);
56
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(atHeight.psbt, [atHeight.match]));
57
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(aboveHeight.psbt, [aboveHeight.match]));
58
+ strict_1.default.throws(() => (0, pox5_1.assertPox5LocktimeSpend)(belowHeight.psbt, [belowHeight.match]), /at least/);
59
+ strict_1.default.throws(() => (0, pox5_1.assertPox5LocktimeSpend)(timestampLocktime.psbt, [timestampLocktime.match]), /block height below/);
60
+ });
61
+ it('requires non-final sequences for locktime spends', function () {
62
+ const final = createPox5RecoveryPsbt(UNLOCK_HEIGHT, 0xffffffff);
63
+ const nonFinal = createPox5RecoveryPsbt(UNLOCK_HEIGHT, 0xfffffffe);
64
+ strict_1.default.throws(() => (0, pox5_1.assertPox5LocktimeSpend)(final.psbt, [final.match]), /non-final sequence/);
65
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(nonFinal.psbt, [nonFinal.match]));
66
+ });
67
+ it('allows final sequences on unrelated transaction inputs', function () {
68
+ const { psbt, match } = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
69
+ psbt.addInput('02'.repeat(32), 0, 10000n, new Uint8Array([0x51]), 0xffffffff);
70
+ strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(psbt, [match]));
71
+ });
72
+ it('requires an input match to remain bound to its original PSBT input', function () {
73
+ const { psbt, match, principalPreimage } = createPox5RecoveryPsbt(0);
74
+ strict_1.default.throws(() => (0, pox5_1.preparePox5EarlyExit)(psbt, 1, match, principalPreimage), /belongs to PSBT input/);
75
+ });
76
+ it('adds a validated principal preimage through the native PSBT API', function () {
77
+ const earlyExitSpend = createPox5RecoveryPsbt(0);
78
+ (0, pox5_1.preparePox5EarlyExit)(earlyExitSpend.psbt, 0, earlyExitSpend.match, earlyExitSpend.principalPreimage);
79
+ const records = earlyExitSpend.psbt
80
+ .getInputKeyValues(0)
81
+ .filter((record) => record.type === 'known' && record.key === 'PSBT_IN_SHA256');
82
+ strict_1.default.equal(records.length, 1);
83
+ const [record] = records;
84
+ strict_1.default.deepStrictEqual(Buffer.from(record.keyData), sha256(earlyExitSpend.principalPreimage));
85
+ strict_1.default.deepStrictEqual(Buffer.from(record.value), earlyExitSpend.principalPreimage);
86
+ });
87
+ });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcG94NS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJEQUFtQztBQUNuQyxtQ0FBb0M7QUFFcEMsbUVBQW9EO0FBQ3BELGdEQUF5RDtBQUN6RCwwREFBa0U7QUFFbEUsNENBTTJCO0FBSTNCLE1BQU0sYUFBYSxHQUFHLE1BQU8sQ0FBQztBQUU5QixTQUFTLE1BQU0sQ0FBQyxLQUFpQjtJQUMvQixPQUFPLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDckQsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQzdCLFFBQWdCLEVBQ2hCLFFBQVEsR0FBRyxVQUFVLEVBQ3JCLFlBQVksR0FBRyxhQUFhO0lBTTVCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUEsd0JBQVksRUFBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUEsa0JBQU0sRUFBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsdUJBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUNqRCxZQUFZO1FBQ1osZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQzNDLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDOUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUs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LGlCQUFpQixDQUFDLENBQUM7UUFFckcsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUk7YUFDaEMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2FBQ3BCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xGLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN6QixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM5RixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQvc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBwb3g1IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1kZXNjcmlwdG9ycyc7XG5pbXBvcnQgeyBQc2J0LCB0eXBlIERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleSwgZ2V0S2V5VHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4by90ZXN0dXRpbHMnO1xuXG5pbXBvcnQge1xuICBhc3NlcnRQb3g1RWFybHlFeGl0U3BlbmQsXG4gIGFzc2VydFBveDVMb2NrdGltZVNwZW5kLFxuICBjbGFzc2lmeVBveDVTcGVuZCxcbiAgUE9YNV9NQVhfVU5MT0NLX0hFSUdIVCxcbiAgcHJlcGFyZVBveDVFYXJseUV4aXQsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9wb3g1JztcblxudHlwZSBQb3g1SW5wdXRNYXRjaCA9IHBveDUuUG94NUlucHV0TWF0Y2g7XG5cbmNvbnN0IFVOTE9DS19IRUlHSFQgPSA4NDBfMDAwO1xuXG5mdW5jdGlvbiBzaGEyNTYodmFsdWU6IFVpbnQ4QXJyYXkpOiBCdWZmZXIge1xuICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHZhbHVlKS5kaWdlc3QoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUG94NVJlY292ZXJ5UHNidChcbiAgbG9ja1RpbWU6IG51bWJlcixcbiAgc2VxdWVuY2UgPSAweGZmZmZmZmZlLFxuICB1bmxvY2tIZWlnaHQgPSBVTkxPQ0tfSEVJR0hUXG4pOiB7XG4gIHBzYnQ6IFBzYnQ7XG4gIG1hdGNoOiBQb3g1SW5wdXRNYXRjaDtcbiAgcHJpbmNpcGFsUHJlaW1hZ2U6IEJ1ZmZlcjtcbn0ge1xuICBjb25zdCBbdXNlciwgYmFja3VwLCBiaXRnb10gPSBnZXRLZXlUcmlwbGUoJ3V0eG8tc3Rha2luZy1wb3g1LXJlY292ZXJ5Jyk7XG4gIGNvbnN0IGVhcmx5RXhpdCA9IGdldEtleSgndXR4by1zdGFraW5nLXBveDUtcmVjb3ZlcnktZWFybHktZXhpdCcpO1xuICBjb25zdCBwcmluY2lwYWxQcmVpbWFnZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHg0Mik7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBwb3g1LmNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKHtcbiAgICB1bmxvY2tIZWlnaHQsXG4gICAgc3Rha2VyQ29tbWl0bWVudDogc2hhMjU2KHByaW5jaXBhbFByZWltYWdlKSxcbiAgICBlYXJseUV4aXRLZXk6IEJ1ZmZlci5mcm9tKGVhcmx5RXhpdC5wdWJsaWNLZXkpLFxuICAgIHN0YWtlcktleXM6IFtCdWZmZXIuZnJvbSh1c2VyLnB1YmxpY0tleSksIEJ1ZmZlci5mcm9tKGJhY2t1cC5wdWJsaWNLZXkpLCBCdWZmZXIuZnJvbShiaXRnby5wdWJsaWNLZXkpXSxcbiAgfSk7XG4gIGNvbnN0IGNvbmNyZXRlRGVzY3JpcHRvciA9IGRlc2NyaXB0b3IgYXMgRGVzY3JpcHRvcjtcbiAgY29uc3QgcHNidCA9IFBzYnQuY3JlYXRlKDIsIGxvY2tUaW1lKTtcbiAgcHNidC5hZGRJbnB1dCgnMDEnLnJlcGVhdCgzMiksIDAsIDEwMF8wMDBuLCBjb25jcmV0ZURlc2NyaXB0b3Iuc2NyaXB0UHVia2V5KCksIHNlcXVlbmNlKTtcbiAgcHNidC5hZGRPdXRwdXQoY29uY3JldGVEZXNjcmlwdG9yLnNjcmlwdFB1YmtleSgpLCA5MF8wMDBuKTtcbiAgcHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKDAsIGNvbmNyZXRlRGVzY3JpcHRvcik7XG5cbiAgY29uc3QgbWF0Y2ggPSBwb3g1Lm1hdGNoUG94NUlucHV0KHBzYnQsIDAsIG5ldyBNYXAoW1sncG94NScsIGNvbmNyZXRlRGVzY3JpcHRvcl1dKSk7XG4gIGFzc2VydC5vayhtYXRjaCk7XG4gIHJldHVybiB7IHBzYnQsIG1hdGNoOiBtYXRjaCBhcyBQb3g1SW5wdXRNYXRjaCwgcHJpbmNpcGFsUHJlaW1hZ2UgfTtcbn1cblxuZGVzY3JpYmUoJ1BvWC01IHNwZW5kIHBvbGljeScsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ2FsbG93cyB0aGUgZWFybHktZXhpdCBicmFuY2ggcmVnYXJkbGVzcyBvZiBuTG9ja1RpbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbG9ja3RpbWVTcGVuZCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoVU5MT0NLX0hFSUdIVCk7XG4gICAgY29uc3QgZWFybHlFeGl0U3BlbmQgPSBjcmVhdGVQb3g1UmVjb3ZlcnlQc2J0KDApO1xuICAgIGNvbnN0IHRpbWVzdGFtcExvY2t0aW1lID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChQT1g1X01BWF9VTkxPQ0tfSEVJR0hUKTtcblxuICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYXNzZXJ0UG94NUVhcmx5RXhpdFNwZW5kKGxvY2t0aW1lU3BlbmQucHNidCwgbG9ja3RpbWVTcGVuZC5tYXRjaCkpO1xuICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYXNzZXJ0UG94NUVhcmx5RXhpdFNwZW5kKGVhcmx5RXhpdFNwZW5kLnBzYnQsIGVhcmx5RXhpdFNwZW5kLm1hdGNoKSk7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1RWFybHlFeGl0U3BlbmQodGltZXN0YW1wTG9ja3RpbWUucHNidCwgdGltZXN0YW1wTG9ja3RpbWUubWF0Y2gpKTtcbiAgfSk7XG5cbiAgaXQoJ2NsYXNzaWZpZXMgdGhlIHNwZW5kIGZyb20gbmF0aXZlIHByaW5jaXBhbC1wcmVpbWFnZSBtZXRhZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBsb2NrdGltZVNwZW5kID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUKTtcbiAgICBhc3NlcnQuZXF1YWwoY2xhc3NpZnlQb3g1U3BlbmQobG9ja3RpbWVTcGVuZC5wc2J0LCBsb2NrdGltZVNwZW5kLm1hdGNoKSwgJ2xvY2t0aW1lJyk7XG5cbiAgICBjb25zdCBlYXJseUV4aXRTcGVuZCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoMCk7XG4gICAgcHJlcGFyZVBveDVFYXJseUV4aXQoZWFybHlFeGl0U3BlbmQucHNidCwgMCwgZWFybHlFeGl0U3BlbmQubWF0Y2gsIGVhcmx5RXhpdFNwZW5kLnByaW5jaXBhbFByZWltYWdlKTtcbiAgICBhc3NlcnQuZXF1YWwoY2xhc3NpZnlQb3g1U3BlbmQoZWFybHlFeGl0U3BlbmQucHNidCwgZWFybHlFeGl0U3BlbmQubWF0Y2gpLCAnZWFybHktZXhpdCcpO1xuICB9KTtcblxuICBpdCgnZW5mb3JjZXMgdGhlIGJsb2NrLWhlaWdodCBhbmQgdW5sb2NrLWhlaWdodCBib3VuZGFyaWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGF0SGVpZ2h0ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUKTtcbiAgICBjb25zdCBhYm92ZUhlaWdodCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoVU5MT0NLX0hFSUdIVCArIDEpO1xuICAgIGNvbnN0IGJlbG93SGVpZ2h0ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUIC0gMSk7XG4gICAgY29uc3QgdGltZXN0YW1wTG9ja3RpbWUgPSBjcmVhdGVQb3g1UmVjb3ZlcnlQc2J0KFBPWDVfTUFYX1VOTE9DS19IRUlHSFQpO1xuXG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChhdEhlaWdodC5wc2J0LCBbYXRIZWlnaHQubWF0Y2hdKSk7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChhYm92ZUhlaWdodC5wc2J0LCBbYWJvdmVIZWlnaHQubWF0Y2hdKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChiZWxvd0hlaWdodC5wc2J0LCBbYmVsb3dIZWlnaHQubWF0Y2hdKSwgL2F0IGxlYXN0Lyk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGFzc2VydFBveDVMb2NrdGltZVNwZW5kKHRpbWVzdGFtcExvY2t0aW1lLnBzYnQsIFt0aW1lc3RhbXBMb2NrdGltZS5tYXRjaF0pLFxuICAgICAgL2Jsb2NrIGhlaWdodCBiZWxvdy9cbiAgICApO1xuICB9KTtcblxuICBpdCgncmVxdWlyZXMgbm9uLWZpbmFsIHNlcXVlbmNlcyBmb3IgbG9ja3RpbWUgc3BlbmRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZpbmFsID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hULCAweGZmZmZmZmZmKTtcbiAgICBjb25zdCBub25GaW5hbCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoVU5MT0NLX0hFSUdIVCwgMHhmZmZmZmZmZSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFzc2VydFBveDVMb2NrdGltZVNwZW5kKGZpbmFsLnBzYnQsIFtmaW5hbC5tYXRjaF0pLCAvbm9uLWZpbmFsIHNlcXVlbmNlLyk7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChub25GaW5hbC5wc2J0LCBbbm9uRmluYWwubWF0Y2hdKSk7XG4gIH0pO1xuXG4gIGl0KCdhbGxvd3MgZmluYWwgc2VxdWVuY2VzIG9uIHVucmVsYXRlZCB0cmFuc2FjdGlvbiBpbnB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBwc2J0LCBtYXRjaCB9ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUKTtcbiAgICBwc2J0LmFkZElucHV0KCcwMicucmVwZWF0KDMyKSwgMCwgMTBfMDAwbiwgbmV3IFVpbnQ4QXJyYXkoWzB4NTFdKSwgMHhmZmZmZmZmZik7XG5cbiAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGFzc2VydFBveDVMb2NrdGltZVNwZW5kKHBzYnQsIFttYXRjaF0pKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcXVpcmVzIGFuIGlucHV0IG1hdGNoIHRvIHJlbWFpbiBib3VuZCB0byBpdHMgb3JpZ2luYWwgUFNCVCBpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IHBzYnQsIG1hdGNoLCBwcmluY2lwYWxQcmVpbWFnZSB9ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidCgwKTtcblxuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHJlcGFyZVBveDVFYXJseUV4aXQocHNidCwgMSwgbWF0Y2gsIHByaW5jaXBhbFByZWltYWdlKSwgL2JlbG9uZ3MgdG8gUFNCVCBpbnB1dC8pO1xuICB9KTtcblxuICBpdCgnYWRkcyBhIHZhbGlkYXRlZCBwcmluY2lwYWwgcHJlaW1hZ2UgdGhyb3VnaCB0aGUgbmF0aXZlIFBTQlQgQVBJJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVhcmx5RXhpdFNwZW5kID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidCgwKTtcblxuICAgIHByZXBhcmVQb3g1RWFybHlFeGl0KGVhcmx5RXhpdFNwZW5kLnBzYnQsIDAsIGVhcmx5RXhpdFNwZW5kLm1hdGNoLCBlYXJseUV4aXRTcGVuZC5wcmluY2lwYWxQcmVpbWFnZSk7XG5cbiAgICBjb25zdCByZWNvcmRzID0gZWFybHlFeGl0U3BlbmQucHNidFxuICAgICAgLmdldElucHV0S2V5VmFsdWVzKDApXG4gICAgICAuZmlsdGVyKChyZWNvcmQpID0+IHJlY29yZC50eXBlID09PSAna25vd24nICYmIHJlY29yZC5rZXkgPT09ICdQU0JUX0lOX1NIQTI1NicpO1xuICAgIGFzc2VydC5lcXVhbChyZWNvcmRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgW3JlY29yZF0gPSByZWNvcmRzO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjb3JkLmtleURhdGEpLCBzaGEyNTYoZWFybHlFeGl0U3BlbmQucHJpbmNpcGFsUHJlaW1hZ2UpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHJlY29yZC52YWx1ZSksIGVhcmx5RXhpdFNwZW5kLnByaW5jaXBhbFByZWltYWdlKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../../../../../test/unit/pox5/witness.ts"],"names":[],"mappings":""}
@@ -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
+ const assert = __importStar(require("assert"));
37
+ const crypto_1 = require("crypto");
38
+ const utxo_descriptors_1 = require("@bitgo-beta/utxo-descriptors");
39
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
40
+ const testutils_1 = require("@bitgo/wasm-utxo/testutils");
41
+ const pox5_1 = require("../../../src/pox5");
42
+ const UNLOCK_HEIGHT = 840000;
43
+ function sha256(value) {
44
+ return (0, crypto_1.createHash)('sha256').update(value).digest();
45
+ }
46
+ function createPox5Psbt(lockTime, includeEarlyExitSignature) {
47
+ const [user, backup, bitgo] = (0, testutils_1.getKeyTriple)('utxo-staking-pox5');
48
+ const earlyExit = (0, testutils_1.getKey)('utxo-staking-pox5-early-exit');
49
+ const principalPreimage = Buffer.alloc(32, 0x42);
50
+ const stakerKeys = [Buffer.from(user.publicKey), Buffer.from(backup.publicKey), Buffer.from(bitgo.publicKey)];
51
+ const descriptor = utxo_descriptors_1.pox5.createPox5LockupDescriptor({
52
+ unlockHeight: UNLOCK_HEIGHT,
53
+ stakerCommitment: sha256(principalPreimage),
54
+ earlyExitKey: Buffer.from(earlyExit.publicKey),
55
+ stakerKeys,
56
+ });
57
+ const paramsDescriptor = descriptor;
58
+ const scriptPubKey = paramsDescriptor.scriptPubkey();
59
+ const psbt = wasm_utxo_1.Psbt.create(2, lockTime);
60
+ psbt.addInput('01'.repeat(32), 0, 100000n, scriptPubKey, 0xfffffffe);
61
+ psbt.addOutput(scriptPubKey, 90000n);
62
+ psbt.updateInputWithDescriptor(0, paramsDescriptor);
63
+ const match = utxo_descriptors_1.pox5.matchPox5Input(psbt, 0, new Map([['pox5', paramsDescriptor]]));
64
+ assert.ok(match);
65
+ const params = { match: match };
66
+ for (const key of includeEarlyExitSignature ? [user, backup, earlyExit] : [user, backup]) {
67
+ assert.ok(key.privateKey, 'test key must include private key material');
68
+ psbt.signWithPrv(key.privateKey);
69
+ }
70
+ return { psbt, params, principalPreimage };
71
+ }
72
+ describe('PoX-5 witness finalization', function () {
73
+ it('finalizes the CLTV branch through the native Miniscript finalizer', function () {
74
+ const { psbt, params } = createPox5Psbt(UNLOCK_HEIGHT, false);
75
+ (0, pox5_1.finalizePox5LocktimePath)(psbt, 0, params);
76
+ assert.deepStrictEqual(psbt.getPartialSignatures(0), []);
77
+ assert.ok(psbt.extractTransaction().toBytes().length > 0);
78
+ });
79
+ it('registers the principal preimage and finalizes the early-exit branch', function () {
80
+ const { psbt, params, principalPreimage } = createPox5Psbt(0, true);
81
+ assert.throws(() => (0, pox5_1.finalizePox5EarlyExitPath)(psbt, 0, { ...params, principalPreimage: Buffer.alloc(32) }), /principalPreimage/);
82
+ (0, pox5_1.finalizePox5EarlyExitPath)(psbt, 0, { ...params, principalPreimage });
83
+ assert.deepStrictEqual(psbt.getPartialSignatures(0), []);
84
+ assert.ok(psbt.extractTransaction().toBytes().length > 0);
85
+ });
86
+ });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wb3g1L3dpdG5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQW9DO0FBRXBDLG1FQUFvRDtBQUNwRCxnREFBeUQ7QUFDekQsMERBQWtFO0FBRWxFLDRDQUFrSDtBQUlsSCxNQUFNLGFBQWEsR0FBRyxNQUFPLENBQUM7QUFFOUIsU0FBUyxNQUFNLENBQUMsS0FBaUI7SUFDL0IsT0FBTyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDckIsUUFBZ0IsRUFDaEIseUJBQWtDO0lBTWxDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUEsd0JBQVksRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sU0FBUyxHQUFHLElBQUEsa0JBQU0sRUFBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3pELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FJM0csQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLHVCQUFJLENBQUMsMEJBQTBCLENBQUM7UUFDakQsWUFBWSxFQUFFLGFBQWE7UUFDM0IsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGlCQUFp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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBwb3g1IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1kZXNjcmlwdG9ycyc7XG5pbXBvcnQgeyBQc2J0LCB0eXBlIERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleSwgZ2V0S2V5VHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4by90ZXN0dXRpbHMnO1xuXG5pbXBvcnQgeyBmaW5hbGl6ZVBveDVFYXJseUV4aXRQYXRoLCBmaW5hbGl6ZVBveDVMb2NrdGltZVBhdGgsIHR5cGUgUG94NUZpbmFsaXplclBhcmFtcyB9IGZyb20gJy4uLy4uLy4uL3NyYy9wb3g1JztcblxudHlwZSBQb3g1SW5wdXRNYXRjaCA9IHBveDUuUG94NUlucHV0TWF0Y2g7XG5cbmNvbnN0IFVOTE9DS19IRUlHSFQgPSA4NDBfMDAwO1xuXG5mdW5jdGlvbiBzaGEyNTYodmFsdWU6IFVpbnQ4QXJyYXkpOiBCdWZmZXIge1xuICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHZhbHVlKS5kaWdlc3QoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUG94NVBzYnQoXG4gIGxvY2tUaW1lOiBudW1iZXIsXG4gIGluY2x1ZGVFYXJseUV4aXRTaWduYXR1cmU6IGJvb2xlYW5cbik6IHtcbiAgcHNidDogUHNidDtcbiAgcGFyYW1zOiBQb3g1RmluYWxpemVyUGFyYW1zO1xuICBwcmluY2lwYWxQcmVpbWFnZTogQnVmZmVyO1xufSB7XG4gIGNvbnN0IFt1c2VyLCBiYWNrdXAsIGJpdGdvXSA9IGdldEtleVRyaXBsZSgndXR4by1zdGFraW5nLXBveDUnKTtcbiAgY29uc3QgZWFybHlFeGl0ID0gZ2V0S2V5KCd1dHhvLXN0YWtpbmctcG94NS1lYXJseS1leGl0Jyk7XG4gIGNvbnN0IHByaW5jaXBhbFByZWltYWdlID0gQnVmZmVyLmFsbG9jKDMyLCAweDQyKTtcbiAgY29uc3Qgc3Rha2VyS2V5cyA9IFtCdWZmZXIuZnJvbSh1c2VyLnB1YmxpY0tleSksIEJ1ZmZlci5mcm9tKGJhY2t1cC5wdWJsaWNLZXkpLCBCdWZmZXIuZnJvbShiaXRnby5wdWJsaWNLZXkpXSBhcyBbXG4gICAgQnVmZmVyLFxuICAgIEJ1ZmZlcixcbiAgICBCdWZmZXJcbiAgXTtcbiAgY29uc3QgZGVzY3JpcHRvciA9IHBveDUuY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3Ioe1xuICAgIHVubG9ja0hlaWdodDogVU5MT0NLX0hFSUdIVCxcbiAgICBzdGFrZXJDb21taXRtZW50OiBzaGEyNTYocHJpbmNpcGFsUHJlaW1hZ2UpLFxuICAgIGVhcmx5RXhpdEtleTogQnVmZmVyLmZyb20oZWFybHlFeGl0LnB1YmxpY0tleSksXG4gICAgc3Rha2VyS2V5cyxcbiAgfSk7XG4gIGNvbnN0IHBhcmFtc0Rlc2NyaXB0b3IgPSBkZXNjcmlwdG9yIGFzIERlc2NyaXB0b3I7XG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IHBhcmFtc0Rlc2NyaXB0b3Iuc2NyaXB0UHVia2V5KCk7XG4gIGNvbnN0IHBzYnQgPSBQc2J0LmNyZWF0ZSgyLCBsb2NrVGltZSk7XG4gIHBzYnQuYWRkSW5wdXQoJzAxJy5yZXBlYXQoMzIpLCAwLCAxMDBfMDAwbiwgc2NyaXB0UHViS2V5LCAweGZmZmZmZmZlKTtcbiAgcHNidC5hZGRPdXRwdXQoc2NyaXB0UHViS2V5LCA5MF8wMDBuKTtcbiAgcHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKDAsIHBhcmFtc0Rlc2NyaXB0b3IpO1xuXG4gIGNvbnN0IG1hdGNoID0gcG94NS5tYXRjaFBveDVJbnB1dChwc2J0LCAwLCBuZXcgTWFwKFtbJ3BveDUnLCBwYXJhbXNEZXNjcmlwdG9yXV0pKTtcbiAgYXNzZXJ0Lm9rKG1hdGNoKTtcbiAgY29uc3QgcGFyYW1zOiBQb3g1RmluYWxpemVyUGFyYW1zID0geyBtYXRjaDogbWF0Y2ggYXMgUG94NUlucHV0TWF0Y2ggfTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBpbmNsdWRlRWFybHlFeGl0U2lnbmF0dXJlID8gW3VzZXIsIGJhY2t1cCwgZWFybHlFeGl0XSA6IFt1c2VyLCBiYWNrdXBdKSB7XG4gICAgYXNzZXJ0Lm9rKGtleS5wcml2YXRlS2V5LCAndGVzdCBrZXkgbXVzdCBpbmNsdWRlIHByaXZhdGUga2V5IG1hdGVyaWFsJyk7XG4gICAgcHNidC5zaWduV2l0aFBydihrZXkucHJpdmF0ZUtleSk7XG4gIH1cbiAgcmV0dXJuIHsgcHNidCwgcGFyYW1zLCBwcmluY2lwYWxQcmVpbWFnZSB9O1xufVxuXG5kZXNjcmliZSgnUG9YLTUgd2l0bmVzcyBmaW5hbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGl0KCdmaW5hbGl6ZXMgdGhlIENMVFYgYnJhbmNoIHRocm91Z2ggdGhlIG5hdGl2ZSBNaW5pc2NyaXB0IGZpbmFsaXplcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IHBzYnQsIHBhcmFtcyB9ID0gY3JlYXRlUG94NVBzYnQoVU5MT0NLX0hFSUdIVCwgZmFsc2UpO1xuXG4gICAgZmluYWxpemVQb3g1TG9ja3RpbWVQYXRoKHBzYnQsIDAsIHBhcmFtcyk7XG5cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBzYnQuZ2V0UGFydGlhbFNpZ25hdHVyZXMoMCksIFtdKTtcbiAgICBhc3NlcnQub2socHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKS50b0J5dGVzKCkubGVuZ3RoID4gMCk7XG4gIH0pO1xuXG4gIGl0KCdyZWdpc3RlcnMgdGhlIHByaW5jaXBhbCBwcmVpbWFnZSBhbmQgZmluYWxpemVzIHRoZSBlYXJseS1leGl0IGJyYW5jaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IHBzYnQsIHBhcmFtcywgcHJpbmNpcGFsUHJlaW1hZ2UgfSA9IGNyZWF0ZVBveDVQc2J0KDAsIHRydWUpO1xuXG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGZpbmFsaXplUG94NUVhcmx5RXhpdFBhdGgocHNidCwgMCwgeyAuLi5wYXJhbXMsIHByaW5jaXBhbFByZWltYWdlOiBCdWZmZXIuYWxsb2MoMzIpIH0pLFxuICAgICAgL3ByaW5jaXBhbFByZWltYWdlL1xuICAgICk7XG4gICAgZmluYWxpemVQb3g1RWFybHlFeGl0UGF0aChwc2J0LCAwLCB7IC4uLnBhcmFtcywgcHJpbmNpcGFsUHJlaW1hZ2UgfSk7XG5cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBzYnQuZ2V0UGFydGlhbFNpZ25hdHVyZXMoMCksIFtdKTtcbiAgICBhc3NlcnQub2socHNidC5leHRyYWN0VHJhbnNhY3Rpb24oKS50b0J5dGVzKCkubGVuZ3RoID4gMCk7XG4gIH0pO1xufSk7XG4iXX0=