@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.
- package/dist/cjs/scripts/babylon-sync.d.ts +2 -0
- package/dist/cjs/scripts/babylon-sync.d.ts.map +1 -0
- package/dist/cjs/scripts/babylon-sync.js +126 -0
- package/dist/cjs/src/babylon/delegationMessage.d.ts +38 -0
- package/dist/cjs/src/babylon/delegationMessage.d.ts.map +1 -0
- package/dist/cjs/src/babylon/delegationMessage.js +285 -0
- package/dist/cjs/src/babylon/descriptor.d.ts +48 -0
- package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/babylon/descriptor.js +97 -0
- package/dist/cjs/src/babylon/index.d.ts +8 -0
- package/dist/cjs/src/babylon/index.d.ts.map +1 -0
- package/dist/cjs/src/babylon/index.js +51 -0
- package/dist/cjs/src/babylon/network.d.ts +7 -0
- package/dist/cjs/src/babylon/network.d.ts.map +1 -0
- package/dist/cjs/src/babylon/network.js +66 -0
- package/dist/cjs/src/babylon/params.mainnet.json +182 -0
- package/dist/cjs/src/babylon/params.testnet.json +206 -0
- package/dist/cjs/src/babylon/parseDescriptor.d.ts +26 -0
- package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
- package/dist/cjs/src/babylon/stakingManager.d.ts +6 -0
- package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
- package/dist/cjs/src/babylon/stakingManager.js +120 -0
- package/dist/cjs/src/babylon/stakingParams.d.ts +40 -0
- package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
- package/dist/cjs/src/babylon/stakingParams.js +132 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
- package/dist/cjs/src/babylon/undelegation/UndelegationResponse.js +55 -0
- package/dist/cjs/src/babylon/undelegation/index.d.ts +3 -0
- package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
- package/dist/cjs/src/babylon/undelegation/index.js +19 -0
- package/dist/cjs/src/babylon/undelegation/unbonding.d.ts +16 -0
- package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
- package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
- package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/descriptor.js +38 -0
- package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/coreDao/index.js +1 -1
- package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/opReturn.js +183 -0
- package/dist/{src → cjs/src}/coreDao/transaction.d.ts +16 -7
- package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
- package/dist/cjs/src/coreDao/transaction.js +34 -0
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +40 -0
- package/dist/cjs/src/pox5/index.d.ts +3 -0
- package/dist/cjs/src/pox5/index.d.ts.map +1 -0
- package/dist/{src → cjs/src/pox5}/index.js +3 -4
- package/dist/cjs/src/pox5/recovery.d.ts +13 -0
- package/dist/cjs/src/pox5/recovery.d.ts.map +1 -0
- package/dist/cjs/src/pox5/recovery.js +75 -0
- package/dist/cjs/src/pox5/witness.d.ts +13 -0
- package/dist/cjs/src/pox5/witness.d.ts.map +1 -0
- package/dist/cjs/src/pox5/witness.js +25 -0
- package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/bug71.js +108 -0
- package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
- package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
- package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/transactions.js +338 -0
- package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
- package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
- package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
- package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
- package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
- package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
- package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
- package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/coreDao/utils.js +54 -0
- package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
- package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures.utils.js +91 -0
- package/dist/cjs/test/unit/pox5/recovery.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/recovery.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/recovery.js +88 -0
- package/dist/cjs/test/unit/pox5/witness.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/witness.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/witness.js +87 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/babylon/delegationMessage.d.ts +38 -0
- package/dist/esm/babylon/delegationMessage.d.ts.map +1 -0
- package/dist/esm/babylon/delegationMessage.js +239 -0
- package/dist/esm/babylon/descriptor.d.ts +48 -0
- package/dist/esm/babylon/descriptor.d.ts.map +1 -0
- package/dist/esm/babylon/descriptor.js +91 -0
- package/dist/esm/babylon/index.d.ts +8 -0
- package/dist/esm/babylon/index.d.ts.map +1 -0
- package/dist/esm/babylon/index.js +13 -0
- package/dist/esm/babylon/network.d.ts +7 -0
- package/dist/esm/babylon/network.d.ts.map +1 -0
- package/dist/esm/babylon/network.js +29 -0
- package/dist/esm/babylon/params.mainnet.json +182 -0
- package/dist/esm/babylon/params.testnet.json +206 -0
- package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
- package/dist/esm/babylon/parseDescriptor.d.ts.map +1 -0
- package/dist/esm/babylon/parseDescriptor.js +155 -0
- package/dist/esm/babylon/stakingManager.d.ts +6 -0
- package/dist/esm/babylon/stakingManager.d.ts.map +1 -0
- package/dist/esm/babylon/stakingManager.js +83 -0
- package/dist/esm/babylon/stakingParams.d.ts +40 -0
- package/dist/esm/babylon/stakingParams.d.ts.map +1 -0
- package/dist/esm/babylon/stakingParams.js +86 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
- package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
- package/dist/esm/babylon/undelegation/index.d.ts +3 -0
- package/dist/esm/babylon/undelegation/index.d.ts.map +1 -0
- package/dist/esm/babylon/undelegation/index.js +3 -0
- package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
- package/dist/esm/babylon/undelegation/unbonding.d.ts.map +1 -0
- package/dist/esm/babylon/undelegation/unbonding.js +70 -0
- package/dist/esm/coreDao/descriptor.d.ts +18 -0
- package/dist/{src → esm}/coreDao/descriptor.d.ts.map +1 -1
- package/dist/esm/coreDao/descriptor.js +35 -0
- package/dist/esm/coreDao/index.d.ts +4 -0
- package/dist/esm/coreDao/index.js +4 -0
- package/dist/esm/coreDao/opReturn.d.ts +41 -0
- package/dist/esm/coreDao/opReturn.js +175 -0
- package/dist/esm/coreDao/transaction.d.ts +28 -0
- package/dist/esm/coreDao/transaction.d.ts.map +1 -0
- package/dist/esm/coreDao/transaction.js +30 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/{src → esm}/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/pox5/index.d.ts +3 -0
- package/dist/esm/pox5/index.d.ts.map +1 -0
- package/dist/esm/pox5/index.js +3 -0
- package/dist/esm/pox5/recovery.d.ts +13 -0
- package/dist/esm/pox5/recovery.d.ts.map +1 -0
- package/dist/esm/pox5/recovery.js +68 -0
- package/dist/esm/pox5/witness.d.ts +13 -0
- package/dist/esm/pox5/witness.d.ts.map +1 -0
- package/dist/esm/pox5/witness.js +21 -0
- package/package.json +43 -12
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -63
- package/dist/src/coreDao/descriptor.js +0 -37
- package/dist/src/coreDao/opReturn.js +0 -183
- package/dist/src/coreDao/transaction.d.ts.map +0 -1
- package/dist/src/coreDao/transaction.js +0 -26
- package/dist/src/index.d.ts +0 -3
- package/dist/src/transaction.d.ts +0 -32
- package/dist/src/transaction.d.ts.map +0 -1
- package/dist/src/transaction.js +0 -54
- /package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +0 -0
- /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
- /package/dist/{src → esm}/coreDao/opReturn.d.ts.map +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
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.pox5 = exports.babylon = exports.coreDao = void 0;
|
|
37
|
+
exports.coreDao = __importStar(require("./coreDao"));
|
|
38
|
+
exports.babylon = __importStar(require("./babylon"));
|
|
39
|
+
exports.pox5 = __importStar(require("./pox5"));
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQXFDO0FBQ3JDLHFEQUFxQztBQUNyQywrQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBjb3JlRGFvIGZyb20gJy4vY29yZURhbyc7XG5leHBvcnQgKiBhcyBiYWJ5bG9uIGZyb20gJy4vYmFieWxvbic7XG5leHBvcnQgKiBhcyBwb3g1IGZyb20gJy4vcG94NSc7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/pox5/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC"}
|
|
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBcUM7QUFFckMsZ0RBQThCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgY29yZURhbyBmcm9tICcuL2NvcmVEYW8nO1xuXG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbiJdfQ==
|
|
17
|
+
__exportStar(require("./witness"), exports);
|
|
18
|
+
__exportStar(require("./recovery"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcG94NS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2l0bmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL3JlY292ZXJ5JztcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Psbt } from '@bitgo/wasm-utxo';
|
|
2
|
+
import { pox5 } from '@bitgo-beta/utxo-descriptors';
|
|
3
|
+
export declare const POX5_MAX_UNLOCK_HEIGHT = 500000000;
|
|
4
|
+
/** Validate the post-CLTV policy for all canonical PoX-5 inputs in a recovery PSBT. */
|
|
5
|
+
export declare function assertPox5LocktimeSpend(psbt: Psbt, inputs: readonly pox5.Pox5InputMatch[]): void;
|
|
6
|
+
/** Validate that a canonical PoX-5 input can use the principal-preimage branch. */
|
|
7
|
+
export declare function assertPox5EarlyExitSpend(psbt: Psbt, input: pox5.Pox5InputMatch): void;
|
|
8
|
+
export type Pox5SpendBranch = 'locktime' | 'early-exit';
|
|
9
|
+
/** Classify a PoX-5 spend from native principal-preimage metadata. */
|
|
10
|
+
export declare function classifyPox5Spend(psbt: Psbt, input: pox5.Pox5InputMatch): Pox5SpendBranch;
|
|
11
|
+
/** Add validated principal-preimage metadata for an early-exit spend. */
|
|
12
|
+
export declare function preparePox5EarlyExit(psbt: Psbt, inputIndex: number, input: pox5.Pox5InputMatch, principalPreimage: Uint8Array): void;
|
|
13
|
+
//# sourceMappingURL=recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../../../src/pox5/recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAEpD,eAAO,MAAM,sBAAsB,YAAc,CAAC;AA4BlD,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAqBhG;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAErF;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,CAAC;AAExD,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,GAAG,eAAe,CAMzF;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,IAAI,CAAC,cAAc,EAC1B,iBAAiB,EAAE,UAAU,GAC5B,IAAI,CAON"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POX5_MAX_UNLOCK_HEIGHT = void 0;
|
|
4
|
+
exports.assertPox5LocktimeSpend = assertPox5LocktimeSpend;
|
|
5
|
+
exports.assertPox5EarlyExitSpend = assertPox5EarlyExitSpend;
|
|
6
|
+
exports.classifyPox5Spend = classifyPox5Spend;
|
|
7
|
+
exports.preparePox5EarlyExit = preparePox5EarlyExit;
|
|
8
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
9
|
+
const utxo_descriptors_1 = require("@bitgo-beta/utxo-descriptors");
|
|
10
|
+
exports.POX5_MAX_UNLOCK_HEIGHT = 500000000;
|
|
11
|
+
function assertPox5UnlockHeight(unlockHeight) {
|
|
12
|
+
if (!Number.isSafeInteger(unlockHeight) || unlockHeight <= 0 || unlockHeight >= exports.POX5_MAX_UNLOCK_HEIGHT) {
|
|
13
|
+
throw new Error(`PoX-5 unlock height must be a positive block height below ${exports.POX5_MAX_UNLOCK_HEIGHT}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function assertPox5BlockHeightLocktime(lockTime) {
|
|
17
|
+
if (!Number.isSafeInteger(lockTime) || lockTime < 0 || lockTime >= exports.POX5_MAX_UNLOCK_HEIGHT) {
|
|
18
|
+
throw new Error(`PoX-5 nLockTime must be a block height below ${exports.POX5_MAX_UNLOCK_HEIGHT}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function getMatchedTransactionInput(psbt, match) {
|
|
22
|
+
const psbtInput = psbt.getInputs()[match.inputIndex];
|
|
23
|
+
const transactionInput = wasm_utxo_1.Transaction.fromBytes(psbt.getUnsignedTx()).getInputs()[match.inputIndex];
|
|
24
|
+
const descriptorScript = Buffer.from(match.descriptor.scriptPubkey());
|
|
25
|
+
if (!psbtInput?.witnessUtxo ||
|
|
26
|
+
!transactionInput ||
|
|
27
|
+
!Buffer.from(psbtInput.witnessUtxo.script).equals(descriptorScript)) {
|
|
28
|
+
throw new Error(`PoX-5 descriptor match does not match PSBT input ${match.inputIndex}`);
|
|
29
|
+
}
|
|
30
|
+
return transactionInput;
|
|
31
|
+
}
|
|
32
|
+
/** Validate the post-CLTV policy for all canonical PoX-5 inputs in a recovery PSBT. */
|
|
33
|
+
function assertPox5LocktimeSpend(psbt, inputs) {
|
|
34
|
+
if (inputs.length === 0) {
|
|
35
|
+
throw new Error('PoX-5 lockup descriptor match is required');
|
|
36
|
+
}
|
|
37
|
+
const unlockHeights = inputs.map((input) => {
|
|
38
|
+
const { unlockHeight } = input.info;
|
|
39
|
+
assertPox5UnlockHeight(unlockHeight);
|
|
40
|
+
return unlockHeight;
|
|
41
|
+
});
|
|
42
|
+
const lockTime = psbt.lockTime();
|
|
43
|
+
assertPox5BlockHeightLocktime(lockTime);
|
|
44
|
+
const requiredLockTime = Math.max(...unlockHeights);
|
|
45
|
+
if (lockTime < requiredLockTime) {
|
|
46
|
+
throw new Error(`PoX-5 nLockTime must be at least ${requiredLockTime}`);
|
|
47
|
+
}
|
|
48
|
+
for (const input of inputs) {
|
|
49
|
+
if (getMatchedTransactionInput(psbt, input).sequence === 0xffffffff) {
|
|
50
|
+
throw new Error(`PoX-5 locktime spend input ${input.inputIndex} must use a non-final sequence`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** Validate that a canonical PoX-5 input can use the principal-preimage branch. */
|
|
55
|
+
function assertPox5EarlyExitSpend(psbt, input) {
|
|
56
|
+
getMatchedTransactionInput(psbt, input);
|
|
57
|
+
}
|
|
58
|
+
/** Classify a PoX-5 spend from native principal-preimage metadata. */
|
|
59
|
+
function classifyPox5Spend(psbt, input) {
|
|
60
|
+
getMatchedTransactionInput(psbt, input);
|
|
61
|
+
const hasPrincipalPreimage = psbt
|
|
62
|
+
.getInputKeyValues(input.inputIndex)
|
|
63
|
+
.some((record) => record.type === 'known' && record.key === 'PSBT_IN_SHA256');
|
|
64
|
+
return hasPrincipalPreimage ? 'early-exit' : 'locktime';
|
|
65
|
+
}
|
|
66
|
+
/** Add validated principal-preimage metadata for an early-exit spend. */
|
|
67
|
+
function preparePox5EarlyExit(psbt, inputIndex, input, principalPreimage) {
|
|
68
|
+
if (inputIndex !== input.inputIndex) {
|
|
69
|
+
throw new Error(`PoX-5 descriptor match belongs to PSBT input ${input.inputIndex}, not ${inputIndex}`);
|
|
70
|
+
}
|
|
71
|
+
assertPox5EarlyExitSpend(psbt, input);
|
|
72
|
+
utxo_descriptors_1.pox5.assertPox5PrincipalPreimage(input.info, principalPreimage);
|
|
73
|
+
psbt.addSha256Preimage(inputIndex, principalPreimage);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcG94NS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQ0EsMERBcUJDO0FBR0QsNERBRUM7QUFLRCw4Q0FNQztBQUdELG9EQVlDO0FBcEZELGdEQUFxRDtBQUNyRCxtRUFBb0Q7QUFFdkMsUUFBQSxzQkFBc0IsR0FBRyxTQUFXLENBQUM7QUFFbEQsU0FBUyxzQkFBc0IsQ0FBQyxZQUFvQjtJQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxJQUFJLFlBQVksSUFBSSw4QkFBc0IsRUFBRSxDQUFDO1FBQ3ZHLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELDhCQUFzQixFQUFFLENBQUMsQ0FBQztJQUN6RyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsUUFBZ0I7SUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksOEJBQXNCLEVBQUUsQ0FBQztRQUMxRixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCw4QkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLElBQVUsRUFBRSxLQUEwQjtJQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsdUJBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxL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LDJCQUEyQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBzYnQsIFRyYW5zYWN0aW9uIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBwb3g1IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1kZXNjcmlwdG9ycyc7XG5cbmV4cG9ydCBjb25zdCBQT1g1X01BWF9VTkxPQ0tfSEVJR0hUID0gNTAwXzAwMF8wMDA7XG5cbmZ1bmN0aW9uIGFzc2VydFBveDVVbmxvY2tIZWlnaHQodW5sb2NrSGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcih1bmxvY2tIZWlnaHQpIHx8IHVubG9ja0hlaWdodCA8PSAwIHx8IHVubG9ja0hlaWdodCA+PSBQT1g1X01BWF9VTkxPQ0tfSEVJR0hUKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQb1gtNSB1bmxvY2sgaGVpZ2h0IG11c3QgYmUgYSBwb3NpdGl2ZSBibG9jayBoZWlnaHQgYmVsb3cgJHtQT1g1X01BWF9VTkxPQ0tfSEVJR0hUfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFBveDVCbG9ja0hlaWdodExvY2t0aW1lKGxvY2tUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihsb2NrVGltZSkgfHwgbG9ja1RpbWUgPCAwIHx8IGxvY2tUaW1lID49IFBPWDVfTUFYX1VOTE9DS19IRUlHSFQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBvWC01IG5Mb2NrVGltZSBtdXN0IGJlIGEgYmxvY2sgaGVpZ2h0IGJlbG93ICR7UE9YNV9NQVhfVU5MT0NLX0hFSUdIVH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYXRjaGVkVHJhbnNhY3Rpb25JbnB1dChwc2J0OiBQc2J0LCBtYXRjaDogcG94NS5Qb3g1SW5wdXRNYXRjaCkge1xuICBjb25zdCBwc2J0SW5wdXQgPSBwc2J0LmdldElucHV0cygpW21hdGNoLmlucHV0SW5kZXhdO1xuICBjb25zdCB0cmFuc2FjdGlvbklucHV0ID0gVHJhbnNhY3Rpb24uZnJvbUJ5dGVzKHBzYnQuZ2V0VW5zaWduZWRUeCgpKS5nZXRJbnB1dHMoKVttYXRjaC5pbnB1dEluZGV4XTtcbiAgY29uc3QgZGVzY3JpcHRvclNjcmlwdCA9IEJ1ZmZlci5mcm9tKG1hdGNoLmRlc2NyaXB0b3Iuc2NyaXB0UHVia2V5KCkpO1xuICBpZiAoXG4gICAgIXBzYnRJbnB1dD8ud2l0bmVzc1V0eG8gfHxcbiAgICAhdHJhbnNhY3Rpb25JbnB1dCB8fFxuICAgICFCdWZmZXIuZnJvbShwc2J0SW5wdXQud2l0bmVzc1V0eG8uc2NyaXB0KS5lcXVhbHMoZGVzY3JpcHRvclNjcmlwdClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQb1gtNSBkZXNjcmlwdG9yIG1hdGNoIGRvZXMgbm90IG1hdGNoIFBTQlQgaW5wdXQgJHttYXRjaC5pbnB1dEluZGV4fWApO1xuICB9XG4gIHJldHVybiB0cmFuc2FjdGlvbklucHV0O1xufVxuXG4vKiogVmFsaWRhdGUgdGhlIHBvc3QtQ0xUViBwb2xpY3kgZm9yIGFsbCBjYW5vbmljYWwgUG9YLTUgaW5wdXRzIGluIGEgcmVjb3ZlcnkgUFNCVC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChwc2J0OiBQc2J0LCBpbnB1dHM6IHJlYWRvbmx5IHBveDUuUG94NUlucHV0TWF0Y2hbXSk6IHZvaWQge1xuICBpZiAoaW5wdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUG9YLTUgbG9ja3VwIGRlc2NyaXB0b3IgbWF0Y2ggaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGNvbnN0IHVubG9ja0hlaWdodHMgPSBpbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgIGNvbnN0IHsgdW5sb2NrSGVpZ2h0IH0gPSBpbnB1dC5pbmZvO1xuICAgIGFzc2VydFBveDVVbmxvY2tIZWlnaHQodW5sb2NrSGVpZ2h0KTtcbiAgICByZXR1cm4gdW5sb2NrSGVpZ2h0O1xuICB9KTtcbiAgY29uc3QgbG9ja1RpbWUgPSBwc2J0LmxvY2tUaW1lKCk7XG4gIGFzc2VydFBveDVCbG9ja0hlaWdodExvY2t0aW1lKGxvY2tUaW1lKTtcbiAgY29uc3QgcmVxdWlyZWRMb2NrVGltZSA9IE1hdGgubWF4KC4uLnVubG9ja0hlaWdodHMpO1xuICBpZiAobG9ja1RpbWUgPCByZXF1aXJlZExvY2tUaW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQb1gtNSBuTG9ja1RpbWUgbXVzdCBiZSBhdCBsZWFzdCAke3JlcXVpcmVkTG9ja1RpbWV9YCk7XG4gIH1cbiAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcbiAgICBpZiAoZ2V0TWF0Y2hlZFRyYW5zYWN0aW9uSW5wdXQocHNidCwgaW5wdXQpLnNlcXVlbmNlID09PSAweGZmZmZmZmZmKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvWC01IGxvY2t0aW1lIHNwZW5kIGlucHV0ICR7aW5wdXQuaW5wdXRJbmRleH0gbXVzdCB1c2UgYSBub24tZmluYWwgc2VxdWVuY2VgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqIFZhbGlkYXRlIHRoYXQgYSBjYW5vbmljYWwgUG9YLTUgaW5wdXQgY2FuIHVzZSB0aGUgcHJpbmNpcGFsLXByZWltYWdlIGJyYW5jaC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQb3g1RWFybHlFeGl0U3BlbmQocHNidDogUHNidCwgaW5wdXQ6IHBveDUuUG94NUlucHV0TWF0Y2gpOiB2b2lkIHtcbiAgZ2V0TWF0Y2hlZFRyYW5zYWN0aW9uSW5wdXQocHNidCwgaW5wdXQpO1xufVxuXG5leHBvcnQgdHlwZSBQb3g1U3BlbmRCcmFuY2ggPSAnbG9ja3RpbWUnIHwgJ2Vhcmx5LWV4aXQnO1xuXG4vKiogQ2xhc3NpZnkgYSBQb1gtNSBzcGVuZCBmcm9tIG5hdGl2ZSBwcmluY2lwYWwtcHJlaW1hZ2UgbWV0YWRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlQb3g1U3BlbmQocHNidDogUHNidCwgaW5wdXQ6IHBveDUuUG94NUlucHV0TWF0Y2gpOiBQb3g1U3BlbmRCcmFuY2gge1xuICBnZXRNYXRjaGVkVHJhbnNhY3Rpb25JbnB1dChwc2J0LCBpbnB1dCk7XG4gIGNvbnN0IGhhc1ByaW5jaXBhbFByZWltYWdlID0gcHNidFxuICAgIC5nZXRJbnB1dEtleVZhbHVlcyhpbnB1dC5pbnB1dEluZGV4KVxuICAgIC5zb21lKChyZWNvcmQpID0+IHJlY29yZC50eXBlID09PSAna25vd24nICYmIHJlY29yZC5rZXkgPT09ICdQU0JUX0lOX1NIQTI1NicpO1xuICByZXR1cm4gaGFzUHJpbmNpcGFsUHJlaW1hZ2UgPyAnZWFybHktZXhpdCcgOiAnbG9ja3RpbWUnO1xufVxuXG4vKiogQWRkIHZhbGlkYXRlZCBwcmluY2lwYWwtcHJlaW1hZ2UgbWV0YWRhdGEgZm9yIGFuIGVhcmx5LWV4aXQgc3BlbmQuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBveDVFYXJseUV4aXQoXG4gIHBzYnQ6IFBzYnQsXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgaW5wdXQ6IHBveDUuUG94NUlucHV0TWF0Y2gsXG4gIHByaW5jaXBhbFByZWltYWdlOiBVaW50OEFycmF5XG4pOiB2b2lkIHtcbiAgaWYgKGlucHV0SW5kZXggIT09IGlucHV0LmlucHV0SW5kZXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBvWC01IGRlc2NyaXB0b3IgbWF0Y2ggYmVsb25ncyB0byBQU0JUIGlucHV0ICR7aW5wdXQuaW5wdXRJbmRleH0sIG5vdCAke2lucHV0SW5kZXh9YCk7XG4gIH1cbiAgYXNzZXJ0UG94NUVhcmx5RXhpdFNwZW5kKHBzYnQsIGlucHV0KTtcbiAgcG94NS5hc3NlcnRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UoaW5wdXQuaW5mbywgcHJpbmNpcGFsUHJlaW1hZ2UpO1xuICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKGlucHV0SW5kZXgsIHByaW5jaXBhbFByZWltYWdlKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Psbt } from '@bitgo/wasm-utxo';
|
|
2
|
+
import { pox5 } from '@bitgo-beta/utxo-descriptors';
|
|
3
|
+
export type Pox5FinalizerParams = {
|
|
4
|
+
/** The canonical descriptor match for the input being finalized. */
|
|
5
|
+
match: pox5.Pox5InputMatch;
|
|
6
|
+
};
|
|
7
|
+
/** Finalize the post-CLTV 2-of-3 PoX-5 spend branch. */
|
|
8
|
+
export declare function finalizePox5LocktimePath(psbt: Psbt, inputIndex: number, params: Pox5FinalizerParams): void;
|
|
9
|
+
/** Finalize the principal-preimage early-exit 2-of-3 PoX-5 spend branch. */
|
|
10
|
+
export declare function finalizePox5EarlyExitPath(psbt: Psbt, inputIndex: number, params: Pox5FinalizerParams & {
|
|
11
|
+
principalPreimage: Uint8Array;
|
|
12
|
+
}): void;
|
|
13
|
+
//# sourceMappingURL=witness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../../../../src/pox5/witness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAIpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,oEAAoE;IACpE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC;CAC5B,CAAC;AAQF,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAK1G;AAED,4EAA4E;AAC5E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,mBAAmB,GAAG;IAAE,iBAAiB,EAAE,UAAU,CAAA;CAAE,GAC9D,IAAI,CAKN"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.finalizePox5LocktimePath = finalizePox5LocktimePath;
|
|
4
|
+
exports.finalizePox5EarlyExitPath = finalizePox5EarlyExitPath;
|
|
5
|
+
const recovery_1 = require("./recovery");
|
|
6
|
+
function assertFinalizerInputIndex(inputIndex, match) {
|
|
7
|
+
if (inputIndex !== match.inputIndex) {
|
|
8
|
+
throw new Error(`PoX-5 descriptor match belongs to PSBT input ${match.inputIndex}, not ${inputIndex}`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** Finalize the post-CLTV 2-of-3 PoX-5 spend branch. */
|
|
12
|
+
function finalizePox5LocktimePath(psbt, inputIndex, params) {
|
|
13
|
+
assertFinalizerInputIndex(inputIndex, params.match);
|
|
14
|
+
(0, recovery_1.assertPox5LocktimeSpend)(psbt, [params.match]);
|
|
15
|
+
psbt.updateInputWithDescriptor(inputIndex, params.match.descriptor);
|
|
16
|
+
psbt.finalizeInput(inputIndex);
|
|
17
|
+
}
|
|
18
|
+
/** Finalize the principal-preimage early-exit 2-of-3 PoX-5 spend branch. */
|
|
19
|
+
function finalizePox5EarlyExitPath(psbt, inputIndex, params) {
|
|
20
|
+
assertFinalizerInputIndex(inputIndex, params.match);
|
|
21
|
+
(0, recovery_1.preparePox5EarlyExit)(psbt, inputIndex, params.match, params.principalPreimage);
|
|
22
|
+
psbt.updateInputWithDescriptor(inputIndex, params.match.descriptor);
|
|
23
|
+
psbt.finalizeInput(inputIndex);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wb3g1L3dpdG5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsNERBS0M7QUFHRCw4REFTQztBQS9CRCx5Q0FBMkU7QUFPM0UsU0FBUyx5QkFBeUIsQ0FBQyxVQUFrQixFQUFFLEtBQTBCO0lBQy9FLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxLQUFLLENBQUMsVUFBVSxTQUFTLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDekcsQ0FBQztBQUNILENBQUM7QUFFRCx3REFBd0Q7QUFDeEQsU0FBZ0Isd0JBQXdCLENBQUMsSUFBVSxFQUFFLFVBQWtCLEVBQUUsTUFBMkI7SUFDbEcseUJBQXlCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFBLGtDQUF1QixFQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsU0FBZ0IseUJBQXlCLENBQ3ZDLElBQVUsRUFDVixVQUFrQixFQUNsQixNQUErRDtJQUUvRCx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELElBQUEsK0JBQW9CLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9FLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBwb3g1IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1kZXNjcmlwdG9ycyc7XG5cbmltcG9ydCB7IGFzc2VydFBveDVMb2NrdGltZVNwZW5kLCBwcmVwYXJlUG94NUVhcmx5RXhpdCB9IGZyb20gJy4vcmVjb3ZlcnknO1xuXG5leHBvcnQgdHlwZSBQb3g1RmluYWxpemVyUGFyYW1zID0ge1xuICAvKiogVGhlIGNhbm9uaWNhbCBkZXNjcmlwdG9yIG1hdGNoIGZvciB0aGUgaW5wdXQgYmVpbmcgZmluYWxpemVkLiAqL1xuICBtYXRjaDogcG94NS5Qb3g1SW5wdXRNYXRjaDtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydEZpbmFsaXplcklucHV0SW5kZXgoaW5wdXRJbmRleDogbnVtYmVyLCBtYXRjaDogcG94NS5Qb3g1SW5wdXRNYXRjaCk6IHZvaWQge1xuICBpZiAoaW5wdXRJbmRleCAhPT0gbWF0Y2guaW5wdXRJbmRleCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUG9YLTUgZGVzY3JpcHRvciBtYXRjaCBiZWxvbmdzIHRvIFBTQlQgaW5wdXQgJHttYXRjaC5pbnB1dEluZGV4fSwgbm90ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxufVxuXG4vKiogRmluYWxpemUgdGhlIHBvc3QtQ0xUViAyLW9mLTMgUG9YLTUgc3BlbmQgYnJhbmNoLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplUG94NUxvY2t0aW1lUGF0aChwc2J0OiBQc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIHBhcmFtczogUG94NUZpbmFsaXplclBhcmFtcyk6IHZvaWQge1xuICBhc3NlcnRGaW5hbGl6ZXJJbnB1dEluZGV4KGlucHV0SW5kZXgsIHBhcmFtcy5tYXRjaCk7XG4gIGFzc2VydFBveDVMb2NrdGltZVNwZW5kKHBzYnQsIFtwYXJhbXMubWF0Y2hdKTtcbiAgcHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKGlucHV0SW5kZXgsIHBhcmFtcy5tYXRjaC5kZXNjcmlwdG9yKTtcbiAgcHNidC5maW5hbGl6ZUlucHV0KGlucHV0SW5kZXgpO1xufVxuXG4vKiogRmluYWxpemUgdGhlIHByaW5jaXBhbC1wcmVpbWFnZSBlYXJseS1leGl0IDItb2YtMyBQb1gtNSBzcGVuZCBicmFuY2guICovXG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVQb3g1RWFybHlFeGl0UGF0aChcbiAgcHNidDogUHNidCxcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBwYXJhbXM6IFBveDVGaW5hbGl6ZXJQYXJhbXMgJiB7IHByaW5jaXBhbFByZWltYWdlOiBVaW50OEFycmF5IH1cbik6IHZvaWQge1xuICBhc3NlcnRGaW5hbGl6ZXJJbnB1dEluZGV4KGlucHV0SW5kZXgsIHBhcmFtcy5tYXRjaCk7XG4gIHByZXBhcmVQb3g1RWFybHlFeGl0KHBzYnQsIGlucHV0SW5kZXgsIHBhcmFtcy5tYXRjaCwgcGFyYW1zLnByaW5jaXBhbFByZWltYWdlKTtcbiAgcHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKGlucHV0SW5kZXgsIHBhcmFtcy5tYXRjaC5kZXNjcmlwdG9yKTtcbiAgcHNidC5maW5hbGl6ZUlucHV0KGlucHV0SW5kZXgpO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bug71.d.ts","sourceRoot":"","sources":["../../../../../test/unit/babylon/bug71.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const assert_1 = __importDefault(require("assert"));
|
|
41
|
+
const bitcoinjs = __importStar(require("bitcoinjs-lib"));
|
|
42
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
43
|
+
const wasmMiniscript = __importStar(require("@bitgo/wasm-utxo"));
|
|
44
|
+
// demonstrate https://github.com/babylonlabs-io/btc-staking-ts/issues/71
|
|
45
|
+
describe('btc-staking-ts bug #71', function () {
|
|
46
|
+
let buf;
|
|
47
|
+
before('load half-signed transaction', async function () {
|
|
48
|
+
const fixture = JSON.parse(await fs.promises.readFile(__dirname + '/../../fixtures/babylon/txTree.testnet.json', 'utf-8'));
|
|
49
|
+
const base64 = fixture.slashingSignedBase64;
|
|
50
|
+
(0, assert_1.default)(typeof base64 === 'string');
|
|
51
|
+
buf = Buffer.from(base64, 'base64');
|
|
52
|
+
});
|
|
53
|
+
it('can finalize with bitcoinjs-lib', function () {
|
|
54
|
+
const psbt = bitcoinjs.Psbt.fromBuffer(buf);
|
|
55
|
+
// this does not throw because of a bug in bitcoinjs-lib
|
|
56
|
+
psbt.finalizeAllInputs();
|
|
57
|
+
});
|
|
58
|
+
it('cannot finalize with utxolib', function () {
|
|
59
|
+
const psbt = utxolib.Psbt.fromBuffer(buf);
|
|
60
|
+
assert_1.default.throws(() => {
|
|
61
|
+
psbt.finalizeAllInputs();
|
|
62
|
+
}, /Error: Can not finalize input #0/);
|
|
63
|
+
});
|
|
64
|
+
it('cannot finalize with wasm-miniscript', function () {
|
|
65
|
+
const psbt = wasmMiniscript.Psbt.deserialize(buf);
|
|
66
|
+
assert_1.default.throws(() => {
|
|
67
|
+
psbt.finalize();
|
|
68
|
+
}, /Could not satisfy Tr descriptor/);
|
|
69
|
+
});
|
|
70
|
+
it('cannot finalize with bitcoind', async function () {
|
|
71
|
+
let cookie;
|
|
72
|
+
try {
|
|
73
|
+
cookie = await fs.promises.readFile(process.env.HOME + '/.bitcoin/regtest/.cookie', 'utf-8');
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
if (e.code === 'ENOENT') {
|
|
77
|
+
console.log('No cookie file found, skipping test');
|
|
78
|
+
this.skip();
|
|
79
|
+
}
|
|
80
|
+
throw e;
|
|
81
|
+
}
|
|
82
|
+
// make regtest JSON-RPC request with cookie
|
|
83
|
+
const url = 'http://localhost:18443';
|
|
84
|
+
const headers = {
|
|
85
|
+
'Content-Type': 'application/json',
|
|
86
|
+
Authorization: 'Basic ' + Buffer.from(cookie, 'utf-8').toString('base64'),
|
|
87
|
+
};
|
|
88
|
+
// Create the request payload for finalizepsbt RPC call
|
|
89
|
+
const body = JSON.stringify({
|
|
90
|
+
jsonrpc: '1.0',
|
|
91
|
+
id: 'bitgo-test',
|
|
92
|
+
method: 'finalizepsbt',
|
|
93
|
+
params: [buf.toString('base64')],
|
|
94
|
+
});
|
|
95
|
+
// Make the RPC request
|
|
96
|
+
const response = await fetch(url, {
|
|
97
|
+
method: 'POST',
|
|
98
|
+
headers,
|
|
99
|
+
body,
|
|
100
|
+
});
|
|
101
|
+
assert_1.default.deepStrictEqual((await response.json()).result, {
|
|
102
|
+
// the response psbt is the same as the input psbt - not finalized
|
|
103
|
+
psbt: buf.toString('base64'),
|
|
104
|
+
complete: false,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVnNzEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYmFieWxvbi9idWc3MS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QixvREFBNEI7QUFFNUIseURBQTJDO0FBQzNDLDhEQUFnRDtBQUNoRCxpRUFBbUQ7QUFFbkQseUVBQXlFO0FBQ3pFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxJQUFJLEdBQVcsQ0FBQztJQUNoQixNQUFNLENBQUMsOEJBQThCLEVBQUUsS0FBSztRQUMxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN4QixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyw2Q0FBNkMsRUFBRSxPQUFPLENBQUMsQ0FDL0YsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUM1QyxJQUFBLGdCQUFNLEVBQUMsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDbkMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUU7UUFDekMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxLQUFLO1FBQ3ZDLElBQUksTUFBYyxDQUFDO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7UUFDRCw0Q0FBNEM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsd0JBQXdCLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUc7WUFDZCxjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLGFBQWEsRUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztTQUMxRSxDQUFDO1FBRUYsdURBQXVEO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUIsT0FBTyxFQUFFLEtBQUs7WUFDZCxFQUFFLEVBQUUsWUFBWTtZQUNoQixNQUFNLEVBQUUsY0FBYztZQUN0QixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUVILHVCQUF1QjtRQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPO1lBQ1AsSUFBSTtTQUNMLENBQUMsQ0FBQztRQUVILGdCQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDckQsa0VBQWtFO1lBQ2xFLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUM1QixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyBiaXRjb2luanMgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHdhc21NaW5pc2NyaXB0IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG4vLyBkZW1vbnN0cmF0ZSBodHRwczovL2dpdGh1Yi5jb20vYmFieWxvbmxhYnMtaW8vYnRjLXN0YWtpbmctdHMvaXNzdWVzLzcxXG5kZXNjcmliZSgnYnRjLXN0YWtpbmctdHMgYnVnICM3MScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJ1ZjogQnVmZmVyO1xuICBiZWZvcmUoJ2xvYWQgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZml4dHVyZSA9IEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShfX2Rpcm5hbWUgKyAnLy4uLy4uL2ZpeHR1cmVzL2JhYnlsb24vdHhUcmVlLnRlc3RuZXQuanNvbicsICd1dGYtOCcpXG4gICAgKTtcbiAgICBjb25zdCBiYXNlNjQgPSBmaXh0dXJlLnNsYXNoaW5nU2lnbmVkQmFzZTY0O1xuICAgIGFzc2VydCh0eXBlb2YgYmFzZTY0ID09PSAnc3RyaW5nJyk7XG4gICAgYnVmID0gQnVmZmVyLmZyb20oYmFzZTY0LCAnYmFzZTY0Jyk7XG4gIH0pO1xuXG4gIGl0KCdjYW4gZmluYWxpemUgd2l0aCBiaXRjb2luanMtbGliJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSBiaXRjb2luanMuUHNidC5mcm9tQnVmZmVyKGJ1Zik7XG4gICAgLy8gdGhpcyBkb2VzIG5vdCB0aHJvdyBiZWNhdXNlIG9mIGEgYnVnIGluIGJpdGNvaW5qcy1saWJcbiAgICBwc2J0LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gIH0pO1xuXG4gIGl0KCdjYW5ub3QgZmluYWxpemUgd2l0aCB1dHhvbGliJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSB1dHhvbGliLlBzYnQuZnJvbUJ1ZmZlcihidWYpO1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgcHNidC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgIH0sIC9FcnJvcjogQ2FuIG5vdCBmaW5hbGl6ZSBpbnB1dCAjMC8pO1xuICB9KTtcblxuICBpdCgnY2Fubm90IGZpbmFsaXplIHdpdGggd2FzbS1taW5pc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBzYnQgPSB3YXNtTWluaXNjcmlwdC5Qc2J0LmRlc2VyaWFsaXplKGJ1Zik7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICBwc2J0LmZpbmFsaXplKCk7XG4gICAgfSwgL0NvdWxkIG5vdCBzYXRpc2Z5IFRyIGRlc2NyaXB0b3IvKTtcbiAgfSk7XG5cbiAgaXQoJ2Nhbm5vdCBmaW5hbGl6ZSB3aXRoIGJpdGNvaW5kJywgYXN5bmMgZnVuY3Rpb24gKHRoaXM6IE1vY2hhLkNvbnRleHQpIHtcbiAgICBsZXQgY29va2llOiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGNvb2tpZSA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKHByb2Nlc3MuZW52LkhPTUUgKyAnLy5iaXRjb2luL3JlZ3Rlc3QvLmNvb2tpZScsICd1dGYtOCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdObyBjb29raWUgZmlsZSBmb3VuZCwgc2tpcHBpbmcgdGVzdCcpO1xuICAgICAgICB0aGlzLnNraXAoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIC8vIG1ha2UgcmVndGVzdCBKU09OLVJQQyByZXF1ZXN0IHdpdGggY29va2llXG4gICAgY29uc3QgdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MTg0NDMnO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgQXV0aG9yaXphdGlvbjogJ0Jhc2ljICcgKyBCdWZmZXIuZnJvbShjb29raWUsICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IHBheWxvYWQgZm9yIGZpbmFsaXplcHNidCBSUEMgY2FsbFxuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBqc29ucnBjOiAnMS4wJyxcbiAgICAgIGlkOiAnYml0Z28tdGVzdCcsXG4gICAgICBtZXRob2Q6ICdmaW5hbGl6ZXBzYnQnLFxuICAgICAgcGFyYW1zOiBbYnVmLnRvU3RyaW5nKCdiYXNlNjQnKV0sXG4gICAgfSk7XG5cbiAgICAvLyBNYWtlIHRoZSBSUEMgcmVxdWVzdFxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCgoYXdhaXQgcmVzcG9uc2UuanNvbigpKS5yZXN1bHQsIHtcbiAgICAgIC8vIHRoZSByZXNwb25zZSBwc2J0IGlzIHRoZSBzYW1lIGFzIHRoZSBpbnB1dCBwc2J0IC0gbm90IGZpbmFsaXplZFxuICAgICAgcHNidDogYnVmLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIGNvbXBsZXRlOiBmYWxzZSxcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ECPairInterface } from '@bitgo-beta/utxo-lib';
|
|
2
|
+
export declare function getECKey(seed: string): ECPairInterface;
|
|
3
|
+
export declare function getECKeys(key: string, count: number): ECPairInterface[];
|
|
4
|
+
export declare function getXOnlyPubkey(key: ECPairInterface): Buffer;
|
|
5
|
+
export declare function fromXOnlyPublicKey(key: Buffer): ECPairInterface;
|
|
6
|
+
//# sourceMappingURL=key.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.utils.d.ts","sourceRoot":"","sources":["../../../../../test/unit/babylon/key.utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAItD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAEvE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAS/D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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.getECKey = getECKey;
|
|
40
|
+
exports.getECKeys = getECKeys;
|
|
41
|
+
exports.getXOnlyPubkey = getXOnlyPubkey;
|
|
42
|
+
exports.fromXOnlyPublicKey = fromXOnlyPublicKey;
|
|
43
|
+
const assert_1 = __importDefault(require("assert"));
|
|
44
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
45
|
+
const testutil_1 = require("@bitgo-beta/utxo-core/testutil");
|
|
46
|
+
function getECKey(seed) {
|
|
47
|
+
const { privateKey } = (0, testutil_1.getKey)(seed);
|
|
48
|
+
(0, assert_1.default)(privateKey);
|
|
49
|
+
return utxolib.ECPair.fromPrivateKey(privateKey);
|
|
50
|
+
}
|
|
51
|
+
function getECKeys(key, count) {
|
|
52
|
+
return Array.from({ length: count }, (_, i) => getECKey(`${key}${i}`));
|
|
53
|
+
}
|
|
54
|
+
function getXOnlyPubkey(key) {
|
|
55
|
+
return key.publicKey.subarray(1);
|
|
56
|
+
}
|
|
57
|
+
function fromXOnlyPublicKey(key) {
|
|
58
|
+
for (const prefix of [0x02, 0x03]) {
|
|
59
|
+
try {
|
|
60
|
+
return utxolib.ECPair.fromPublicKey(Buffer.concat([Buffer.from([prefix]), key]));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw new Error('Invalid x-only public key');
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JhYnlsb24va2V5LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsNEJBSUM7QUFFRCw4QkFFQztBQUVELHdDQUVDO0FBRUQsZ0RBU0M7QUE3QkQsb0RBQTRCO0FBRTVCLDhEQUFnRDtBQUVoRCw2REFBd0Q7QUFFeEQsU0FBZ0IsUUFBUSxDQUFDLElBQVk7SUFDbkMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUEsaUJBQU0sRUFBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ2xELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxHQUFvQjtJQUNqRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXO0lBQzVDLEtBQUssTUFBTSxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IEVDUGFpckludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGdldEtleSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tY29yZS90ZXN0dXRpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFQ0tleShzZWVkOiBzdHJpbmcpOiBFQ1BhaXJJbnRlcmZhY2Uge1xuICBjb25zdCB7IHByaXZhdGVLZXkgfSA9IGdldEtleShzZWVkKTtcbiAgYXNzZXJ0KHByaXZhdGVLZXkpO1xuICByZXR1cm4gdXR4b2xpYi5FQ1BhaXIuZnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFQ0tleXMoa2V5OiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiBFQ1BhaXJJbnRlcmZhY2VbXSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoXywgaSkgPT4gZ2V0RUNLZXkoYCR7a2V5fSR7aX1gKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRYT25seVB1YmtleShrZXk6IEVDUGFpckludGVyZmFjZSk6IEJ1ZmZlciB7XG4gIHJldHVybiBrZXkucHVibGljS2V5LnN1YmFycmF5KDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVhPbmx5UHVibGljS2V5KGtleTogQnVmZmVyKTogRUNQYWlySW50ZXJmYWNlIHtcbiAgZm9yIChjb25zdCBwcmVmaXggb2YgWzB4MDIsIDB4MDNdKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1dHhvbGliLkVDUGFpci5mcm9tUHVibGljS2V5KEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFtwcmVmaXhdKSwga2V5XSkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB4LW9ubHkgcHVibGljIGtleScpO1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../../../test/unit/babylon/transactions.ts"],"names":[],"mappings":""}
|