@bitgo-beta/utxo-staking 1.1.1-beta.1423 → 1.1.1-beta.1425

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.
@@ -1,3 +1,4 @@
1
1
  export * as coreDao from './coreDao';
2
2
  export * as babylon from './babylon';
3
+ export * as pox5 from './pox5';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC"}
@@ -33,7 +33,8 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.babylon = exports.coreDao = void 0;
36
+ exports.pox5 = exports.babylon = exports.coreDao = void 0;
37
37
  exports.coreDao = __importStar(require("./coreDao"));
38
38
  exports.babylon = __importStar(require("./babylon"));
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQXFDO0FBQ3JDLHFEQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGNvcmVEYW8gZnJvbSAnLi9jb3JlRGFvJztcbmV4cG9ydCAqIGFzIGJhYnlsb24gZnJvbSAnLi9iYWJ5bG9uJztcbiJdfQ==
39
+ exports.pox5 = __importStar(require("./pox5"));
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQXFDO0FBQ3JDLHFEQUFxQztBQUNyQywrQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBjb3JlRGFvIGZyb20gJy4vY29yZURhbyc7XG5leHBvcnQgKiBhcyBiYWJ5bG9uIGZyb20gJy4vYmFieWxvbic7XG5leHBvcnQgKiBhcyBwb3g1IGZyb20gJy4vcG94NSc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './witness';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pox5/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,18 @@
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("./witness"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcG94NS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi93aXRuZXNzJztcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { ast, Descriptor, Psbt } from '@bitgo/wasm-utxo';
2
+ type Pox5Descriptor = Descriptor | ast.DescriptorNode;
3
+ export type Pox5FinalizerParams = {
4
+ /** A definite or derivation-indexed canonical PoX-5 descriptor. */
5
+ descriptor: Pox5Descriptor;
6
+ /** The derived user, backup, and BitGo keys in descriptor order. */
7
+ stakerKeys: [Buffer, Buffer, Buffer];
8
+ };
9
+ /** Finalize the post-CLTV 2-of-3 PoX-5 spend branch. */
10
+ export declare function finalizePox5LocktimePath(psbt: Psbt, inputIndex: number, params: Pox5FinalizerParams): void;
11
+ /** Finalize the principal-preimage early-exit 2-of-3 PoX-5 spend branch. */
12
+ export declare function finalizePox5EarlyExitPath(psbt: Psbt, inputIndex: number, params: Pox5FinalizerParams & {
13
+ principalPreimage: Buffer;
14
+ }): void;
15
+ export {};
16
+ //# sourceMappingURL=witness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../../../../src/pox5/witness.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGzD,KAAK,cAAc,GAAG,UAAU,GAAG,GAAG,CAAC,cAAc,CAAC;AAEtD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mEAAmE;IACnE,UAAU,EAAE,cAAc,CAAC;IAC3B,oEAAoE;IACpE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,CAAC;AAuBF,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAM1G;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,mBAAmB,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GAC1D,IAAI,CAQN"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.finalizePox5LocktimePath = finalizePox5LocktimePath;
4
+ exports.finalizePox5EarlyExitPath = finalizePox5EarlyExitPath;
5
+ const crypto_1 = require("crypto");
6
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
7
+ const utxo_descriptors_1 = require("@bitgo-beta/utxo-descriptors");
8
+ function getParsedDescriptor(params) {
9
+ const parsed = utxo_descriptors_1.pox5.parsePox5LockupDescriptor(params.descriptor);
10
+ if (!parsed || !parsed.stakerKeys) {
11
+ throw new Error('descriptor must be a definite or derivation-indexed canonical PoX-5 descriptor');
12
+ }
13
+ if (!parsed.stakerKeys.every((key, index) => key.equals(params.stakerKeys[index]))) {
14
+ throw new Error('stakerKeys must match the canonical descriptor order');
15
+ }
16
+ return parsed;
17
+ }
18
+ function getDescriptor(descriptor) {
19
+ return descriptor instanceof wasm_utxo_1.Descriptor ? descriptor : wasm_utxo_1.Descriptor.fromString(wasm_utxo_1.ast.formatNode(descriptor), 'definite');
20
+ }
21
+ function prepareInput(psbt, inputIndex, params) {
22
+ const parsed = getParsedDescriptor(params);
23
+ psbt.updateInputWithDescriptor(inputIndex, getDescriptor(params.descriptor));
24
+ return parsed;
25
+ }
26
+ /** Finalize the post-CLTV 2-of-3 PoX-5 spend branch. */
27
+ function finalizePox5LocktimePath(psbt, inputIndex, params) {
28
+ const parsed = prepareInput(psbt, inputIndex, params);
29
+ if (psbt.lockTime() < parsed.unlockHeight) {
30
+ throw new Error(`transaction locktime must be at least ${parsed.unlockHeight}`);
31
+ }
32
+ psbt.finalizeInput(inputIndex);
33
+ }
34
+ /** Finalize the principal-preimage early-exit 2-of-3 PoX-5 spend branch. */
35
+ function finalizePox5EarlyExitPath(psbt, inputIndex, params) {
36
+ const parsed = prepareInput(psbt, inputIndex, params);
37
+ const preimageHash = (0, crypto_1.createHash)('sha256').update(params.principalPreimage).digest();
38
+ if (!preimageHash.equals(parsed.stakerCommitment)) {
39
+ throw new Error('principalPreimage does not match the descriptor stakerCommitment');
40
+ }
41
+ psbt.addSha256Preimage(inputIndex, params.principalPreimage);
42
+ psbt.finalizeInput(inputIndex);
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wb3g1L3dpdG5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQ0EsNERBTUM7QUFHRCw4REFZQztBQXpERCxtQ0FBb0M7QUFFcEMsZ0RBQXlEO0FBQ3pELG1FQUFvRDtBQVdwRCxTQUFTLG1CQUFtQixDQUFDLE1BQTJCO0lBQ3RELE1BQU0sTUFBTSxHQUFHLHVCQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkYsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBMEI7SUFDL0MsT0FBTyxVQUFVLFlBQVksc0JBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxzQkFBVSxDQUFDLFVBQVUsQ0FBQyxlQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFVLEVBQUUsVUFBa0IsRUFBRSxNQUEyQjtJQUMvRSxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELFNBQWdCLHdCQUF3QixDQUFDLElBQVUsRUFBRSxVQUFrQixFQUFFLE1BQTJCO0lBQ2xHLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsNEVBQTRFO0FBQzVFLFNBQWdCLHlCQUF5QixDQUN2QyxJQUFVLEVBQ1YsVUFBa0IsRUFDbEIsTUFBMkQ7SUFFM0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IHsgYXN0LCBEZXNjcmlwdG9yLCBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBwb3g1IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1kZXNjcmlwdG9ycyc7XG5cbnR5cGUgUG94NURlc2NyaXB0b3IgPSBEZXNjcmlwdG9yIHwgYXN0LkRlc2NyaXB0b3JOb2RlO1xuXG5leHBvcnQgdHlwZSBQb3g1RmluYWxpemVyUGFyYW1zID0ge1xuICAvKiogQSBkZWZpbml0ZSBvciBkZXJpdmF0aW9uLWluZGV4ZWQgY2Fub25pY2FsIFBvWC01IGRlc2NyaXB0b3IuICovXG4gIGRlc2NyaXB0b3I6IFBveDVEZXNjcmlwdG9yO1xuICAvKiogVGhlIGRlcml2ZWQgdXNlciwgYmFja3VwLCBhbmQgQml0R28ga2V5cyBpbiBkZXNjcmlwdG9yIG9yZGVyLiAqL1xuICBzdGFrZXJLZXlzOiBbQnVmZmVyLCBCdWZmZXIsIEJ1ZmZlcl07XG59O1xuXG5mdW5jdGlvbiBnZXRQYXJzZWREZXNjcmlwdG9yKHBhcmFtczogUG94NUZpbmFsaXplclBhcmFtcykge1xuICBjb25zdCBwYXJzZWQgPSBwb3g1LnBhcnNlUG94NUxvY2t1cERlc2NyaXB0b3IocGFyYW1zLmRlc2NyaXB0b3IpO1xuICBpZiAoIXBhcnNlZCB8fCAhcGFyc2VkLnN0YWtlcktleXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Rlc2NyaXB0b3IgbXVzdCBiZSBhIGRlZmluaXRlIG9yIGRlcml2YXRpb24taW5kZXhlZCBjYW5vbmljYWwgUG9YLTUgZGVzY3JpcHRvcicpO1xuICB9XG4gIGlmICghcGFyc2VkLnN0YWtlcktleXMuZXZlcnkoKGtleSwgaW5kZXgpID0+IGtleS5lcXVhbHMocGFyYW1zLnN0YWtlcktleXNbaW5kZXhdKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YWtlcktleXMgbXVzdCBtYXRjaCB0aGUgY2Fub25pY2FsIGRlc2NyaXB0b3Igb3JkZXInKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yKGRlc2NyaXB0b3I6IFBveDVEZXNjcmlwdG9yKTogRGVzY3JpcHRvciB7XG4gIHJldHVybiBkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGVzY3JpcHRvciA/IGRlc2NyaXB0b3IgOiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUoZGVzY3JpcHRvciksICdkZWZpbml0ZScpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlSW5wdXQocHNidDogUHNidCwgaW5wdXRJbmRleDogbnVtYmVyLCBwYXJhbXM6IFBveDVGaW5hbGl6ZXJQYXJhbXMpIHtcbiAgY29uc3QgcGFyc2VkID0gZ2V0UGFyc2VkRGVzY3JpcHRvcihwYXJhbXMpO1xuICBwc2J0LnVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IoaW5wdXRJbmRleCwgZ2V0RGVzY3JpcHRvcihwYXJhbXMuZGVzY3JpcHRvcikpO1xuICByZXR1cm4gcGFyc2VkO1xufVxuXG4vKiogRmluYWxpemUgdGhlIHBvc3QtQ0xUViAyLW9mLTMgUG9YLTUgc3BlbmQgYnJhbmNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplUG94NUxvY2t0aW1lUGF0aChwc2J0OiBQc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIHBhcmFtczogUG94NUZpbmFsaXplclBhcmFtcyk6IHZvaWQge1xuICBjb25zdCBwYXJzZWQgPSBwcmVwYXJlSW5wdXQocHNidCwgaW5wdXRJbmRleCwgcGFyYW1zKTtcbiAgaWYgKHBzYnQubG9ja1RpbWUoKSA8IHBhcnNlZC51bmxvY2tIZWlnaHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRyYW5zYWN0aW9uIGxvY2t0aW1lIG11c3QgYmUgYXQgbGVhc3QgJHtwYXJzZWQudW5sb2NrSGVpZ2h0fWApO1xuICB9XG4gIHBzYnQuZmluYWxpemVJbnB1dChpbnB1dEluZGV4KTtcbn1cblxuLyoqIEZpbmFsaXplIHRoZSBwcmluY2lwYWwtcHJlaW1hZ2UgZWFybHktZXhpdCAyLW9mLTMgUG9YLTUgc3BlbmQgYnJhbmNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplUG94NUVhcmx5RXhpdFBhdGgoXG4gIHBzYnQ6IFBzYnQsXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcGFyYW1zOiBQb3g1RmluYWxpemVyUGFyYW1zICYgeyBwcmluY2lwYWxQcmVpbWFnZTogQnVmZmVyIH1cbik6IHZvaWQge1xuICBjb25zdCBwYXJzZWQgPSBwcmVwYXJlSW5wdXQocHNidCwgaW5wdXRJbmRleCwgcGFyYW1zKTtcbiAgY29uc3QgcHJlaW1hZ2VIYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHBhcmFtcy5wcmluY2lwYWxQcmVpbWFnZSkuZGlnZXN0KCk7XG4gIGlmICghcHJlaW1hZ2VIYXNoLmVxdWFscyhwYXJzZWQuc3Rha2VyQ29tbWl0bWVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ByaW5jaXBhbFByZWltYWdlIGRvZXMgbm90IG1hdGNoIHRoZSBkZXNjcmlwdG9yIHN0YWtlckNvbW1pdG1lbnQnKTtcbiAgfVxuICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKGlucHV0SW5kZXgsIHBhcmFtcy5wcmluY2lwYWxQcmVpbWFnZSk7XG4gIHBzYnQuZmluYWxpemVJbnB1dChpbnB1dEluZGV4KTtcbn1cbiJdfQ==
@@ -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 params = {
52
+ descriptor: wasm_utxo_1.Descriptor.fromString(utxo_descriptors_1.pox5.createPox5LockupDescriptor({
53
+ unlockHeight: UNLOCK_HEIGHT,
54
+ stakerCommitment: sha256(principalPreimage),
55
+ earlyExitKey: Buffer.from(earlyExit.publicKey),
56
+ stakerKeys,
57
+ }), 'definite'),
58
+ stakerKeys,
59
+ };
60
+ const descriptor = params.descriptor;
61
+ const scriptPubKey = descriptor.scriptPubkey();
62
+ const psbt = wasm_utxo_1.Psbt.create(2, lockTime);
63
+ psbt.addInput('01'.repeat(32), 0, 100000n, scriptPubKey, 0xfffffffe);
64
+ psbt.addOutput(scriptPubKey, 90000n);
65
+ psbt.updateInputWithDescriptor(0, descriptor);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wb3g1L3dpdG5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQW9DO0FBRXBDLG1FQUFvRDtBQUNwRCxnREFBb0Q7QUFDcEQsMERBQWtFO0FBRWxFLDRDQUE2RztBQUU3RyxNQUFNLGFBQWEsR0FBRyxNQUFPLENBQUM7QUFFOUIsU0FBUyxNQUFNLENBQUMsS0FBaUI7SUFDL0IsT0FBTyxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FDckIsUUFBZ0IsRUFDaEIseUJBQWtDO0lBTWxDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUEsd0JBQVksRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sU0FBUyxHQUFHLElBQUEsa0JBQU0sRUFBQyw4QkFBOEIsQ0FBQyxDQUFDO0lBQ3pELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FJM0csQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUF3QjtRQUNsQyxVQUFVLEVBQUUsc0JBQVUsQ0FBQyxVQUFVLENBQy9CLHVCQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDOUIsWUFBWSxFQUFF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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBwb3g1IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1kZXNjcmlwdG9ycyc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yLCBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXksIGdldEtleVRyaXBsZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8vdGVzdHV0aWxzJztcblxuaW1wb3J0IHsgZmluYWxpemVQb3g1RWFybHlFeGl0UGF0aCwgZmluYWxpemVQb3g1TG9ja3RpbWVQYXRoLCBQb3g1RmluYWxpemVyUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3BveDUnO1xuXG5jb25zdCBVTkxPQ0tfSEVJR0hUID0gODQwXzAwMDtcblxuZnVuY3Rpb24gc2hhMjU2KHZhbHVlOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBveDVQc2J0KFxuICBsb2NrVGltZTogbnVtYmVyLFxuICBpbmNsdWRlRWFybHlFeGl0U2lnbmF0dXJlOiBib29sZWFuXG4pOiB7XG4gIHBzYnQ6IFBzYnQ7XG4gIHBhcmFtczogUG94NUZpbmFsaXplclBhcmFtcztcbiAgcHJpbmNpcGFsUHJlaW1hZ2U6IEJ1ZmZlcjtcbn0ge1xuICBjb25zdCBbdXNlciwgYmFja3VwLCBiaXRnb10gPSBnZXRLZXlUcmlwbGUoJ3V0eG8tc3Rha2luZy1wb3g1Jyk7XG4gIGNvbnN0IGVhcmx5RXhpdCA9IGdldEtleSgndXR4by1zdGFraW5nLXBveDUtZWFybHktZXhpdCcpO1xuICBjb25zdCBwcmluY2lwYWxQcmVpbWFnZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHg0Mik7XG4gIGNvbnN0IHN0YWtlcktleXMgPSBbQnVmZmVyLmZyb20odXNlci5wdWJsaWNLZXkpLCBCdWZmZXIuZnJvbShiYWNrdXAucHVibGljS2V5KSwgQnVmZmVyLmZyb20oYml0Z28ucHVibGljS2V5KV0gYXMgW1xuICAgIEJ1ZmZlcixcbiAgICBCdWZmZXIsXG4gICAgQnVmZmVyXG4gIF07XG4gIGNvbnN0IHBhcmFtczogUG94NUZpbmFsaXplclBhcmFtcyA9IHtcbiAgICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoXG4gICAgICBwb3g1LmNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKHtcbiAgICAgICAgdW5sb2NrSGVpZ2h0OiBVTkxPQ0tfSEVJR0hULFxuICAgICAgICBzdGFrZXJDb21taXRtZW50OiBzaGEyNTYocHJpbmNpcGFsUHJlaW1hZ2UpLFxuICAgICAgICBlYXJseUV4aXRLZXk6IEJ1ZmZlci5mcm9tKGVhcmx5RXhpdC5wdWJsaWNLZXkpLFxuICAgICAgICBzdGFrZXJLZXlzLFxuICAgICAgfSksXG4gICAgICAnZGVmaW5pdGUnXG4gICAgKSxcbiAgICBzdGFrZXJLZXlzLFxuICB9O1xuICBjb25zdCBkZXNjcmlwdG9yID0gcGFyYW1zLmRlc2NyaXB0b3IgYXMgRGVzY3JpcHRvcjtcbiAgY29uc3Qgc2NyaXB0UHViS2V5ID0gZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKTtcbiAgY29uc3QgcHNidCA9IFBzYnQuY3JlYXRlKDIsIGxvY2tUaW1lKTtcbiAgcHNidC5hZGRJbnB1dCgnMDEnLnJlcGVhdCgzMiksIDAsIDEwMF8wMDBuLCBzY3JpcHRQdWJLZXksIDB4ZmZmZmZmZmUpO1xuICBwc2J0LmFkZE91dHB1dChzY3JpcHRQdWJLZXksIDkwXzAwMG4pO1xuICBwc2J0LnVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IoMCwgZGVzY3JpcHRvcik7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgaW5jbHVkZUVhcmx5RXhpdFNpZ25hdHVyZSA/IFt1c2VyLCBiYWNrdXAsIGVhcmx5RXhpdF0gOiBbdXNlciwgYmFja3VwXSkge1xuICAgIGFzc2VydC5vayhrZXkucHJpdmF0ZUtleSwgJ3Rlc3Qga2V5IG11c3QgaW5jbHVkZSBwcml2YXRlIGtleSBtYXRlcmlhbCcpO1xuICAgIHBzYnQuc2lnbldpdGhQcnYoa2V5LnByaXZhdGVLZXkpO1xuICB9XG4gIHJldHVybiB7IHBzYnQsIHBhcmFtcywgcHJpbmNpcGFsUHJlaW1hZ2UgfTtcbn1cblxuZGVzY3JpYmUoJ1BvWC01IHdpdG5lc3MgZmluYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZmluYWxpemVzIHRoZSBDTFRWIGJyYW5jaCB0aHJvdWdoIHRoZSBuYXRpdmUgTWluaXNjcmlwdCBmaW5hbGl6ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBwc2J0LCBwYXJhbXMgfSA9IGNyZWF0ZVBveDVQc2J0KFVOTE9DS19IRUlHSFQsIGZhbHNlKTtcblxuICAgIGZpbmFsaXplUG94NUxvY2t0aW1lUGF0aChwc2J0LCAwLCBwYXJhbXMpO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwc2J0LmdldFBhcnRpYWxTaWduYXR1cmVzKDApLCBbXSk7XG4gICAgYXNzZXJ0Lm9rKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CeXRlcygpLmxlbmd0aCA+IDApO1xuICB9KTtcblxuICBpdCgncmVnaXN0ZXJzIHRoZSBwcmluY2lwYWwgcHJlaW1hZ2UgYW5kIGZpbmFsaXplcyB0aGUgZWFybHktZXhpdCBicmFuY2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBwc2J0LCBwYXJhbXMsIHByaW5jaXBhbFByZWltYWdlIH0gPSBjcmVhdGVQb3g1UHNidCgwLCB0cnVlKTtcblxuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PiBmaW5hbGl6ZVBveDVFYXJseUV4aXRQYXRoKHBzYnQsIDAsIHsgLi4ucGFyYW1zLCBwcmluY2lwYWxQcmVpbWFnZTogQnVmZmVyLmFsbG9jKDMyKSB9KSxcbiAgICAgIC9wcmluY2lwYWxQcmVpbWFnZS9cbiAgICApO1xuICAgIGZpbmFsaXplUG94NUVhcmx5RXhpdFBhdGgocHNidCwgMCwgeyAuLi5wYXJhbXMsIHByaW5jaXBhbFByZWltYWdlIH0pO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwc2J0LmdldFBhcnRpYWxTaWduYXR1cmVzKDApLCBbXSk7XG4gICAgYXNzZXJ0Lm9rKHBzYnQuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CeXRlcygpLmxlbmd0aCA+IDApO1xuICB9KTtcbn0pO1xuIl19