@bitgo-beta/utxo-staking 1.1.1-beta.477 → 1.1.1-beta.478
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/src/babylon/descriptor.d.ts +1 -0
- package/dist/src/babylon/descriptor.d.ts.map +1 -1
- package/dist/src/babylon/descriptor.js +2 -1
- package/dist/src/babylon/parseDescriptor.d.ts +16 -2
- package/dist/src/babylon/parseDescriptor.d.ts.map +1 -1
- package/dist/src/babylon/parseDescriptor.js +114 -25
- package/package.json +5 -5
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { Descriptor, ast } from '@bitgo/wasm-miniscript';
|
|
7
7
|
import { StakingParams } from '@bitgo-beta/babylonlabs-io-btc-staking-ts';
|
|
8
8
|
export declare function getUnspendableKey(): string;
|
|
9
|
+
export declare function sortedKeys(keys: Buffer[]): Buffer[];
|
|
9
10
|
export declare class BabylonDescriptorBuilder {
|
|
10
11
|
stakerKey: Buffer;
|
|
11
12
|
finalityProviderKeys: Buffer[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/babylon/descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/babylon/descriptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAOD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEnD;AAUD,qBAAa,wBAAwB;IAE1B,SAAS,EAAE,MAAM;IACjB,oBAAoB,EAAE,MAAM,EAAE;IAC9B,YAAY,EAAE,MAAM,EAAE;IACtB,iBAAiB,EAAE,MAAM;IACzB,eAAe,EAAE,MAAM;IACvB,iBAAiB,EAAE,MAAM;gBALzB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,MAAM,EAAE,EAC9B,YAAY,EAAE,MAAM,EAAE,EACtB,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM;IAGlC,MAAM,CAAC,UAAU,CACf,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,oBAAoB,EAAE,MAAM,EAAE,CAAC;KAChC,GAAG,aAAa,GAChB,wBAAwB;IAW3B,8DAA8D;IAC9D,gCAAgC,IAAI,GAAG,CAAC,cAAc;IAItD,gEAAgE;IAChE,kCAAkC,IAAI,GAAG,CAAC,cAAc;IAIxD,2DAA2D;IAC3D,0BAA0B,IAAI,GAAG,CAAC,cAAc;IAIhD,uEAAuE;IACvE,yBAAyB,IAAI,GAAG,CAAC,cAAc;IAgB/C;;;;;;;OAOG;IACH,oBAAoB,IAAI,UAAU;IAOlC;;OAEG;IACH,8BAA8B,IAAI,UAAU;IAI5C;;OAEG;IACH,sBAAsB,IAAI,UAAU;CAGrC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.BabylonDescriptorBuilder = void 0;
|
|
9
9
|
exports.getUnspendableKey = getUnspendableKey;
|
|
10
|
+
exports.sortedKeys = sortedKeys;
|
|
10
11
|
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
11
12
|
function getUnspendableKey() {
|
|
12
13
|
// https://github.com/babylonlabs-io/btc-staking-ts/blob/v0.4.0-rc.2/src/constants/internalPubkey.ts
|
|
@@ -93,4 +94,4 @@ class BabylonDescriptorBuilder {
|
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
exports.BabylonDescriptorBuilder = BabylonDescriptorBuilder;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWJ5bG9uL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUtILDhDQUdDO0FBT0QsZ0NBRUM7QUFmRCw0REFBeUQ7QUFHekQsU0FBZ0IsaUJBQWlCO0lBQy9CLG9HQUFvRztJQUNwRyxPQUFPLGtFQUFrRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxFQUFFLENBQUMsQ0FBUztJQUNuQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQWM7SUFDdkMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxTQUFpQixFQUFFLElBQWM7SUFDbEQsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLENBQWtCO0lBQ2xELE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMscUJBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQsTUFBYSx3QkFBd0I7SUFDbkMsWUFDUyxTQUFpQixF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eUIsRUFBRSxFQUFFLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0NBQ0Y7QUF0RkQsNERBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmFieWxvbmxhYnMtaW8vYmFieWxvbi90cmVlL21haW4vZG9jc1xuICogaHR0cHM6Ly9naXRodWIuY29tL2JhYnlsb25sYWJzLWlvL2JhYnlsb24vYmxvYi9tYWluL2RvY3Mvc3Rha2luZy1zY3JpcHQubWRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJ5bG9ubGFicy1pby9iYWJ5bG9uL2Jsb2IvdjEuOTkuMC1zbmFwc2hvdC4yNTAyMTEvYnRjc3Rha2luZy9zdGFraW5nLmdvXG4gKi9cblxuaW1wb3J0IHsgRGVzY3JpcHRvciwgYXN0IH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgeyBTdGFraW5nUGFyYW1zIH0gZnJvbSAnQGJpdGdvLWJldGEvYmFieWxvbmxhYnMtaW8tYnRjLXN0YWtpbmctdHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5zcGVuZGFibGVLZXkoKTogc3RyaW5nIHtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JhYnlsb25sYWJzLWlvL2J0Yy1zdGFraW5nLXRzL2Jsb2IvdjAuNC4wLXJjLjIvc3JjL2NvbnN0YW50cy9pbnRlcm5hbFB1YmtleS50c1xuICByZXR1cm4gJzUwOTI5Yjc0YzFhMDQ5NTRiNzhiNGI2MDM1ZTk3YTVlMDc4YTVhMGYyOGVjOTZkNTQ3YmZlZTlhY2U4MDNhYzAnO1xufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBjcmVhdGluZyBtaW5pc2NyaXB0IG5vZGVzXG5mdW5jdGlvbiBwayhiOiBCdWZmZXIpOiBhc3QuTWluaXNjcmlwdE5vZGUge1xuICByZXR1cm4geyAndjpwayc6IGIudG9TdHJpbmcoJ2hleCcpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0ZWRLZXlzKGtleXM6IEJ1ZmZlcltdKTogQnVmZmVyW10ge1xuICByZXR1cm4gWy4uLmtleXNdLnNvcnQoKGEsIGIpID0+IGEuY29tcGFyZShiKSk7XG59XG5cbmZ1bmN0aW9uIG11bHRpQXJncyh0aHJlc2hvbGQ6IG51bWJlciwga2V5czogQnVmZmVyW10pOiBbbnVtYmVyLCAuLi5zdHJpbmdbXV0ge1xuICByZXR1cm4gW3RocmVzaG9sZCwgLi4uc29ydGVkS2V5cyhrZXlzKS5tYXAoKGspID0+IGsudG9TdHJpbmcoJ2hleCcpKV07XG59XG5cbmZ1bmN0aW9uIHRhcHJvb3RTY3JpcHRPbmx5RnJvbUFzdChuOiBhc3QuVGFwVHJlZU5vZGUpOiBEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIERlc2NyaXB0b3IuZnJvbVN0cmluZyhhc3QuZm9ybWF0Tm9kZSh7IHRyOiBbZ2V0VW5zcGVuZGFibGVLZXkoKSwgbl0gfSksICdkZWZpbml0ZScpO1xufVxuXG5leHBvcnQgY2xhc3MgQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YWtlcktleTogQnVmZmVyLFxuICAgIHB1YmxpYyBmaW5hbGl0eVByb3ZpZGVyS2V5czogQnVmZmVyW10sXG4gICAgcHVibGljIGNvdmVuYW50S2V5czogQnVmZmVyW10sXG4gICAgcHVibGljIGNvdmVuYW50VGhyZXNob2xkOiBudW1iZXIsXG4gICAgcHVibGljIHN0YWtpbmdUaW1lTG9jazogbnVtYmVyLFxuICAgIHB1YmxpYyB1bmJvbmRpbmdUaW1lTG9jazogbnVtYmVyXG4gICkge31cblxuICBzdGF0aWMgZnJvbVBhcmFtcyhcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YWtlcktleTogQnVmZmVyO1xuICAgICAgZmluYWxpdHlQcm92aWRlcktleXM6IEJ1ZmZlcltdO1xuICAgIH0gJiBTdGFraW5nUGFyYW1zXG4gICk6IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBCYWJ5bG9uRGVzY3JpcHRvckJ1aWxkZXIoXG4gICAgICBwYXJhbXMuc3Rha2VyS2V5LFxuICAgICAgcGFyYW1zLmZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgICAgcGFyYW1zLmNvdmVuYW50Tm9Db29yZFBrcy5tYXAoKGspID0+IEJ1ZmZlci5mcm9tKGssICdoZXgnKSksXG4gICAgICBwYXJhbXMuY292ZW5hbnRRdW9ydW0sXG4gICAgICBwYXJhbXMubWluU3Rha2luZ1RpbWVCbG9ja3MsXG4gICAgICBwYXJhbXMudW5ib25kaW5nVGltZVxuICAgICk7XG4gIH1cblxuICAvKiogU3BlbmQgcGF0aCB3aXRoIHRoZSBzdGFrZXIga2V5IGFuZCB0aGUgc3Rha2luZyB0aW1lbG9jayAqL1xuICBnZXRTdGFraW5nVGltZWxvY2tNaW5pc2NyaXB0Tm9kZSgpOiBhc3QuTWluaXNjcmlwdE5vZGUge1xuICAgIHJldHVybiB7IGFuZF92OiBbcGsodGhpcy5zdGFrZXJLZXkpLCB7IG9sZGVyOiB0aGlzLnN0YWtpbmdUaW1lTG9jayB9XSB9O1xuICB9XG5cbiAgLyoqIFNwZW5kIHBhdGggd2l0aCB0aGUgc3Rha2VyIGtleSBhbmQgdGhlIHVuYm9uZGluZyB0aW1lbG9jayAqL1xuICBnZXRVbmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlKCk6IGFzdC5NaW5pc2NyaXB0Tm9kZSB7XG4gICAgcmV0dXJuIHsgYW5kX3Y6IFtwayh0aGlzLnN0YWtlcktleSksIHsgb2xkZXI6IHRoaXMudW5ib25kaW5nVGltZUxvY2sgfV0gfTtcbiAgfVxuXG4gIC8qKiBTcGVuZCBwYXRoIHdpdGggdGhlIHN0YWtlciBrZXkgYW5kIHRoZSBjb3ZlbmFudCBrZXlzICovXG4gIGdldFVuYm9uZGluZ01pbmlzY3JpcHROb2RlKCk6IGFzdC5NaW5pc2NyaXB0Tm9kZSB7XG4gICAgcmV0dXJuIHsgYW5kX3Y6IFtwayh0aGlzLnN0YWtlcktleSksIHsgbXVsdGlfYTogbXVsdGlBcmdzKHRoaXMuY292ZW5hbnRUaHJlc2hvbGQsIHRoaXMuY292ZW5hbnRLZXlzKSB9XSB9O1xuICB9XG5cbiAgLyoqIFNwZW5kIHBhdGggd2l0aCB0aGUgZmluYWxpdHkgcHJvdmlkZXIga2V5cyBhbmQgdGhlIGNvdmVuYW50IGtleXMgKi9cbiAgZ2V0U2xhc2hpbmdNaW5pc2NyaXB0Tm9kZSgpOiBhc3QuTWluaXNjcmlwdE5vZGUge1xuICAgIHJldHVybiB7XG4gICAgICBhbmRfdjogW1xuICAgICAgICB7XG4gICAgICAgICAgYW5kX3Y6IFtcbiAgICAgICAgICAgIHBrKHRoaXMuc3Rha2VyS2V5KSxcbiAgICAgICAgICAgIHRoaXMuZmluYWxpdHlQcm92aWRlcktleXMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgID8geyAndjpwayc6IHRoaXMuZmluYWxpdHlQcm92aWRlcktleXNbMF0udG9TdHJpbmcoJ2hleCcpIH1cbiAgICAgICAgICAgICAgOiB7ICd2Om11bHRpX2EnOiBtdWx0aUFyZ3MoMSwgdGhpcy5maW5hbGl0eVByb3ZpZGVyS2V5cykgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7IG11bHRpX2E6IG11bHRpQXJncyh0aGlzLmNvdmVuYW50VGhyZXNob2xkLCB0aGlzLmNvdmVuYW50S2V5cykgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGVzY3JpcHRvciBmb3IgYSBzdGFraW5nIG91dHB1dC5cbiAgICpcbiAgICogVGhyZWUgc3BlbmQgcGF0aHM6XG4gICAqIC0gdGhlIHNsYXNoaW5nIHNjcmlwdCxcbiAgICogLSB0aGUgdW5ib25kaW5nIHNjcmlwdCxcbiAgICogLSB0aGUgdGltZWxvY2tlZCB1bnN0YWtpbmcgc2NyaXB0LlxuICAgKi9cbiAgZ2V0U3Rha2luZ0Rlc2NyaXB0b3IoKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHRhcHJvb3RTY3JpcHRPbmx5RnJvbUFzdChbXG4gICAgICB0aGlzLmdldFNsYXNoaW5nTWluaXNjcmlwdE5vZGUoKSxcbiAgICAgIFt0aGlzLmdldFVuYm9uZGluZ01pbmlzY3JpcHROb2RlKCksIHRoaXMuZ2V0U3Rha2luZ1RpbWVsb2NrTWluaXNjcmlwdE5vZGUoKV0sXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGRlc2NyaXB0b3IgZm9yIHRoZSB0aW1lbG9ja2VkIHVuYm9uZGluZyBzY3JpcHQuXG4gICAqL1xuICBnZXRVbmJvbmRpbmdUaW1lbG9ja0Rlc2NyaXB0b3IoKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHRhcHJvb3RTY3JpcHRPbmx5RnJvbUFzdCh0aGlzLmdldFVuYm9uZGluZ1RpbWVsb2NrTWluaXNjcmlwdE5vZGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGRlc2NyaXB0b3Igd2l0aCB0d28gc2NyaXB0IHBhdGhzOiB0aGUgc2xhc2hpbmcgc2NyaXB0IGFuZCB0aGUgdGltZWxvY2tlZCB1bmJvbmRpbmcgc2NyaXB0LlxuICAgKi9cbiAgZ2V0VW5ib25kaW5nRGVzY3JpcHRvcigpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gdGFwcm9vdFNjcmlwdE9ubHlGcm9tQXN0KFt0aGlzLmdldFNsYXNoaW5nTWluaXNjcmlwdE5vZGUoKSwgdGhpcy5nZXRVbmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlKCldKTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { Descriptor, ast } from '@bitgo/wasm-miniscript';
|
|
2
|
-
type ParsedStakingDescriptor = {
|
|
2
|
+
export type ParsedStakingDescriptor = {
|
|
3
|
+
stakerKey: Buffer;
|
|
4
|
+
finalityProviderKeys: Buffer[];
|
|
5
|
+
covenantKeys: Buffer[];
|
|
6
|
+
covenantThreshold: number;
|
|
7
|
+
stakingTimeLock: number;
|
|
3
8
|
slashingMiniscriptNode: ast.MiniscriptNode;
|
|
4
9
|
unbondingMiniscriptNode: ast.MiniscriptNode;
|
|
5
10
|
timelockMiniscriptNode: ast.MiniscriptNode;
|
|
@@ -8,5 +13,14 @@ type ParsedStakingDescriptor = {
|
|
|
8
13
|
* @return parsed staking descriptor components or null if the descriptor does not match the expected staking pattern.
|
|
9
14
|
*/
|
|
10
15
|
export declare function parseStakingDescriptor(descriptor: Descriptor | ast.DescriptorNode): ParsedStakingDescriptor | null;
|
|
11
|
-
export {
|
|
16
|
+
export type ParsedUnbondingDescriptor = {
|
|
17
|
+
stakerKey: Buffer;
|
|
18
|
+
finalityProviderKeys: Buffer[];
|
|
19
|
+
covenantKeys: Buffer[];
|
|
20
|
+
covenantThreshold: number;
|
|
21
|
+
unbondingTimeLock: number;
|
|
22
|
+
slashingMiniscriptNode: ast.MiniscriptNode;
|
|
23
|
+
unbondingTimelockMiniscriptNode: ast.MiniscriptNode;
|
|
24
|
+
};
|
|
25
|
+
export declare function parseUnbondingDescriptor(descriptor: Descriptor | ast.DescriptorNode): ParsedUnbondingDescriptor | null;
|
|
12
26
|
//# sourceMappingURL=parseDescriptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseDescriptor.d.ts","sourceRoot":"","sources":["../../../src/babylon/parseDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAKzD,
|
|
1
|
+
{"version":3,"file":"parseDescriptor.d.ts","sourceRoot":"","sources":["../../../src/babylon/parseDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAKzD,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,GAAG,CAAC,cAAc,CAAC;IAC3C,uBAAuB,EAAE,GAAG,CAAC,cAAc,CAAC;IAC5C,sBAAsB,EAAE,GAAG,CAAC,cAAc,CAAC;CAC5C,CAAC;AAwFF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,GAAG,CAAC,cAAc,GAAG,uBAAuB,GAAG,IAAI,CA+DlH;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,GAAG,CAAC,cAAc,CAAC;IAC3C,+BAA+B,EAAE,GAAG,CAAC,cAAc,CAAC;CACrD,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,GAAG,GAAG,CAAC,cAAc,GAC1C,yBAAyB,GAAG,IAAI,CA2ClC"}
|
|
@@ -1,9 +1,79 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseStakingDescriptor = parseStakingDescriptor;
|
|
4
|
+
exports.parseUnbondingDescriptor = parseUnbondingDescriptor;
|
|
4
5
|
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
5
6
|
const descriptor_1 = require("@bitgo-beta/utxo-core/descriptor");
|
|
6
7
|
const descriptor_2 = require("./descriptor");
|
|
8
|
+
function parseMulti(multi) {
|
|
9
|
+
if (!Array.isArray(multi) || multi.length < 1) {
|
|
10
|
+
throw new Error('Invalid multi structure: not an array or empty');
|
|
11
|
+
}
|
|
12
|
+
const [threshold, ...keys] = multi;
|
|
13
|
+
if (typeof threshold !== 'number') {
|
|
14
|
+
throw new Error('Invalid multi structure: threshold is not a number');
|
|
15
|
+
}
|
|
16
|
+
if (!keys.every((k) => typeof k === 'string')) {
|
|
17
|
+
throw new Error('Invalid multi structure: not all keys are strings');
|
|
18
|
+
}
|
|
19
|
+
return [threshold, keys];
|
|
20
|
+
}
|
|
21
|
+
function parseUnilateralTimelock(node, matcher) {
|
|
22
|
+
const pattern = {
|
|
23
|
+
and_v: [{ 'v:pk': { $var: 'key' } }, { older: { $var: 'timelock' } }],
|
|
24
|
+
};
|
|
25
|
+
const match = matcher.match(node, pattern);
|
|
26
|
+
if (!match) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
if (typeof match.key !== 'string') {
|
|
30
|
+
throw new Error('key must be a string');
|
|
31
|
+
}
|
|
32
|
+
if (typeof match.timelock !== 'number') {
|
|
33
|
+
throw new Error('timelock must be a number');
|
|
34
|
+
}
|
|
35
|
+
return { key: match.key, timelock: match.timelock };
|
|
36
|
+
}
|
|
37
|
+
function parseSlashingNode(slashingNode, matcher) {
|
|
38
|
+
const slashingPattern = {
|
|
39
|
+
and_v: [
|
|
40
|
+
{
|
|
41
|
+
and_v: [{ 'v:pk': { $var: 'stakerKey' } }, { $var: 'finalityProviderKeyOrMulti' }],
|
|
42
|
+
},
|
|
43
|
+
{ multi_a: { $var: 'covenantMulti' } },
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
const slashingMatch = matcher.match(slashingNode, slashingPattern);
|
|
47
|
+
if (!slashingMatch) {
|
|
48
|
+
throw new Error('Slashing node does not match expected pattern');
|
|
49
|
+
}
|
|
50
|
+
if (typeof slashingMatch.stakerKey !== 'string') {
|
|
51
|
+
throw new Error('stakerKey must be a string');
|
|
52
|
+
}
|
|
53
|
+
const [covenantThreshold, covenantKeyStrings] = parseMulti(slashingMatch.covenantMulti);
|
|
54
|
+
const covenantKeys = covenantKeyStrings.map((k) => Buffer.from(k, 'hex'));
|
|
55
|
+
let finalityProviderKeys;
|
|
56
|
+
const fpKeyOrMulti = slashingMatch.finalityProviderKeyOrMulti;
|
|
57
|
+
if ('v:pk' in fpKeyOrMulti) {
|
|
58
|
+
finalityProviderKeys = [Buffer.from(fpKeyOrMulti['v:pk'], 'hex')];
|
|
59
|
+
}
|
|
60
|
+
else if ('v:multi_a' in fpKeyOrMulti) {
|
|
61
|
+
const [threshold, keyStrings] = parseMulti(fpKeyOrMulti['v:multi_a']);
|
|
62
|
+
if (threshold !== 1) {
|
|
63
|
+
throw new Error('Finality provider multi threshold must be 1');
|
|
64
|
+
}
|
|
65
|
+
finalityProviderKeys = keyStrings.map((k) => Buffer.from(k, 'hex'));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
throw new Error('Invalid finality provider key structure');
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
stakerKey: slashingMatch.stakerKey,
|
|
72
|
+
finalityProviderKeys,
|
|
73
|
+
covenantKeys,
|
|
74
|
+
covenantThreshold,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
7
77
|
/**
|
|
8
78
|
* @return parsed staking descriptor components or null if the descriptor does not match the expected staking pattern.
|
|
9
79
|
*/
|
|
@@ -24,18 +94,7 @@ function parseStakingDescriptor(descriptor) {
|
|
|
24
94
|
const unbondingNode = result.unbondingMiniscriptNode;
|
|
25
95
|
const timelockNode = result.timelockMiniscriptNode;
|
|
26
96
|
// Verify slashing node shape: and_v([and_v([pk, pk/multi_a]), multi_a])
|
|
27
|
-
const
|
|
28
|
-
and_v: [
|
|
29
|
-
{
|
|
30
|
-
and_v: [{ 'v:pk': { $var: 'stakerKey1' } }, { $var: 'finalityProviderKeyOrMulti' }],
|
|
31
|
-
},
|
|
32
|
-
{ multi_a: { $var: 'covenantMulti' } },
|
|
33
|
-
],
|
|
34
|
-
};
|
|
35
|
-
const slashingMatch = matcher.match(slashingNode, slashingPattern);
|
|
36
|
-
if (!slashingMatch) {
|
|
37
|
-
throw new Error('Slashing node does not match expected pattern');
|
|
38
|
-
}
|
|
97
|
+
const { stakerKey: stakerKey1, finalityProviderKeys, covenantKeys, covenantThreshold, } = parseSlashingNode(slashingNode, matcher);
|
|
39
98
|
// Verify unbonding node shape: and_v([pk, multi_a])
|
|
40
99
|
const unbondingPattern = {
|
|
41
100
|
and_v: [{ 'v:pk': { $var: 'stakerKey2' } }, { multi_a: { $var: 'covenantMulti2' } }],
|
|
@@ -45,26 +104,56 @@ function parseStakingDescriptor(descriptor) {
|
|
|
45
104
|
throw new Error('Unbonding node does not match expected pattern');
|
|
46
105
|
}
|
|
47
106
|
// Verify unbonding timelock node shape: and_v([pk, older])
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const timelockMatch = matcher.match(timelockNode, timelockPattern);
|
|
52
|
-
if (!timelockMatch) {
|
|
53
|
-
throw new Error('Unbonding timelock node does not match expected pattern');
|
|
107
|
+
const unilateralTimelock = parseUnilateralTimelock(timelockNode, matcher);
|
|
108
|
+
if (!unilateralTimelock) {
|
|
109
|
+
return null;
|
|
54
110
|
}
|
|
111
|
+
const { key: stakerKey3, timelock: stakingTimeLock } = unilateralTimelock;
|
|
55
112
|
// Verify all staker keys are the same
|
|
56
|
-
if (
|
|
57
|
-
unbondingMatch.stakerKey2 !== timelockMatch.stakerKey3) {
|
|
113
|
+
if (stakerKey1 !== unbondingMatch.stakerKey2 || unbondingMatch.stakerKey2 !== stakerKey3) {
|
|
58
114
|
throw new Error('Staker keys must be identical across all nodes');
|
|
59
115
|
}
|
|
60
|
-
|
|
61
|
-
if (typeof timelockMatch.unbondingTimeLockValue !== 'number') {
|
|
62
|
-
throw new Error('Unbonding timelock value must be a number');
|
|
63
|
-
}
|
|
116
|
+
const stakerKey = Buffer.from(stakerKey1, 'hex');
|
|
64
117
|
return {
|
|
118
|
+
stakerKey,
|
|
119
|
+
finalityProviderKeys,
|
|
120
|
+
covenantKeys,
|
|
121
|
+
covenantThreshold,
|
|
122
|
+
stakingTimeLock,
|
|
65
123
|
slashingMiniscriptNode: slashingNode,
|
|
66
124
|
unbondingMiniscriptNode: unbondingNode,
|
|
67
125
|
timelockMiniscriptNode: timelockNode,
|
|
68
126
|
};
|
|
69
127
|
}
|
|
70
|
-
|
|
128
|
+
function parseUnbondingDescriptor(descriptor) {
|
|
129
|
+
const pattern = {
|
|
130
|
+
tr: [(0, descriptor_2.getUnspendableKey)(), [{ $var: 'slashingMiniscriptNode' }, { $var: 'unbondingTimelockMiniscriptNode' }]],
|
|
131
|
+
};
|
|
132
|
+
const matcher = new descriptor_1.PatternMatcher();
|
|
133
|
+
const descriptorNode = descriptor instanceof wasm_miniscript_1.Descriptor ? wasm_miniscript_1.ast.fromDescriptor(descriptor) : descriptor;
|
|
134
|
+
const result = matcher.match(descriptorNode, pattern);
|
|
135
|
+
if (!result) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
const slashingNode = result.slashingMiniscriptNode;
|
|
139
|
+
const unbondingTimelockNode = result.unbondingTimelockMiniscriptNode;
|
|
140
|
+
const { stakerKey: stakerKey1, finalityProviderKeys, covenantKeys, covenantThreshold, } = parseSlashingNode(slashingNode, matcher);
|
|
141
|
+
const unilateralTimelock = parseUnilateralTimelock(unbondingTimelockNode, matcher);
|
|
142
|
+
if (!unilateralTimelock) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
const { key: stakerKey2, timelock: unbondingTimeLock } = unilateralTimelock;
|
|
146
|
+
if (stakerKey1 !== stakerKey2) {
|
|
147
|
+
throw new Error('Staker keys must be identical across all nodes');
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
stakerKey: Buffer.from(stakerKey1, 'hex'),
|
|
151
|
+
finalityProviderKeys,
|
|
152
|
+
covenantKeys,
|
|
153
|
+
covenantThreshold,
|
|
154
|
+
unbondingTimeLock,
|
|
155
|
+
slashingMiniscriptNode: slashingNode,
|
|
156
|
+
unbondingTimelockMiniscriptNode: unbondingTimelockNode,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhYnlsb24vcGFyc2VEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUdBLHdEQStEQztBQVlELDREQTZDQztBQWpPRCw0REFBeUQ7QUFDekQsaUVBQTJFO0FBRTNFLDZDQUFpRDtBQWFqRCxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25DLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLElBQXdCLEVBQ3hCLE9BQXVCO0lBRXZCLE1BQU0sT0FBTyxHQUFZO1FBQ3ZCLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQztL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QUFDO1FBQ3pDLG9CQUFvQjtRQUNwQixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixzQkFBc0IsRUFBRSxZQUFZO1FBQ3BDLCtCQUErQixFQUFFLHFCQUFxQjtLQUN2RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IsIGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0IHsgUGF0dGVybk1hdGNoZXIsIFBhdHRlcm4gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUvZGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IGdldFVuc3BlbmRhYmxlS2V5IH0gZnJvbSAnLi9kZXNjcmlwdG9yJztcblxuZXhwb3J0IHR5cGUgUGFyc2VkU3Rha2luZ0Rlc2NyaXB0b3IgPSB7XG4gIHN0YWtlcktleTogQnVmZmVyO1xuICBmaW5hbGl0eVByb3ZpZGVyS2V5czogQnVmZmVyW107XG4gIGNvdmVuYW50S2V5czogQnVmZmVyW107XG4gIGNvdmVuYW50VGhyZXNob2xkOiBudW1iZXI7XG4gIHN0YWtpbmdUaW1lTG9jazogbnVtYmVyO1xuICBzbGFzaGluZ01pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIHVuYm9uZGluZ01pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIHRpbWVsb2NrTWluaXNjcmlwdE5vZGU6IGFzdC5NaW5pc2NyaXB0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlTXVsdGkobXVsdGk6IHVua25vd24pOiBbbnVtYmVyLCBzdHJpbmdbXV0ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobXVsdGkpIHx8IG11bHRpLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbXVsdGkgc3RydWN0dXJlOiBub3QgYW4gYXJyYXkgb3IgZW1wdHknKTtcbiAgfVxuICBjb25zdCBbdGhyZXNob2xkLCAuLi5rZXlzXSA9IG11bHRpO1xuICBpZiAodHlwZW9mIHRocmVzaG9sZCAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbXVsdGkgc3RydWN0dXJlOiB0aHJlc2hvbGQgaXMgbm90IGEgbnVtYmVyJyk7XG4gIH1cbiAgaWYgKCFrZXlzLmV2ZXJ5KChrKSA9PiB0eXBlb2YgayA9PT0gJ3N0cmluZycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG11bHRpIHN0cnVjdHVyZTogbm90IGFsbCBrZXlzIGFyZSBzdHJpbmdzJyk7XG4gIH1cbiAgcmV0dXJuIFt0aHJlc2hvbGQsIGtleXNdO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVuaWxhdGVyYWxUaW1lbG9jayhcbiAgbm9kZTogYXN0Lk1pbmlzY3JpcHROb2RlLFxuICBtYXRjaGVyOiBQYXR0ZXJuTWF0Y2hlclxuKTogeyBrZXk6IHN0cmluZzsgdGltZWxvY2s6IG51bWJlciB9IHwgbnVsbCB7XG4gIGNvbnN0IHBhdHRlcm46IFBhdHRlcm4gPSB7XG4gICAgYW5kX3Y6IFt7ICd2OnBrJzogeyAkdmFyOiAna2V5JyB9IH0sIHsgb2xkZXI6IHsgJHZhcjogJ3RpbWVsb2NrJyB9IH1dLFxuICB9O1xuICBjb25zdCBtYXRjaCA9IG1hdGNoZXIubWF0Y2gobm9kZSwgcGF0dGVybik7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoLmtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleSBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBtYXRjaC50aW1lbG9jayAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVsb2NrIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuICByZXR1cm4geyBrZXk6IG1hdGNoLmtleSwgdGltZWxvY2s6IG1hdGNoLnRpbWVsb2NrIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2xhc2hpbmdOb2RlKFxuICBzbGFzaGluZ05vZGU6IGFzdC5NaW5pc2NyaXB0Tm9kZSxcbiAgbWF0Y2hlcjogUGF0dGVybk1hdGNoZXJcbik6IHtcbiAgc3Rha2VyS2V5OiBzdHJpbmc7XG4gIGZpbmFsaXR5UHJvdmlkZXJLZXlzOiBCdWZmZXJbXTtcbiAgY292ZW5hbnRLZXlzOiBCdWZmZXJbXTtcbiAgY292ZW5hbnRUaHJlc2hvbGQ6IG51bWJlcjtcbn0ge1xuICBjb25zdCBzbGFzaGluZ1BhdHRlcm46IFBhdHRlcm4gPSB7XG4gICAgYW5kX3Y6IFtcbiAgICAgIHtcbiAgICAgICAgYW5kX3Y6IFt7ICd2OnBrJzogeyAkdmFyOiAnc3Rha2VyS2V5JyB9IH0sIHsgJHZhcjogJ2ZpbmFsaXR5UHJvdmlkZXJLZXlPck11bHRpJyB9XSxcbiAgICAgIH0sXG4gICAgICB7IG11bHRpX2E6IHsgJHZhcjogJ2NvdmVuYW50TXVsdGknIH0gfSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IHNsYXNoaW5nTWF0Y2ggPSBtYXRjaGVyLm1hdGNoKHNsYXNoaW5nTm9kZSwgc2xhc2hpbmdQYXR0ZXJuKTtcbiAgaWYgKCFzbGFzaGluZ01hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTbGFzaGluZyBub2RlIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHBhdHRlcm4nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2xhc2hpbmdNYXRjaC5zdGFrZXJLZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzdGFrZXJLZXkgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG5cbiAgY29uc3QgW2NvdmVuYW50VGhyZXNob2xkLCBjb3ZlbmFudEtleVN0cmluZ3NdID0gcGFyc2VNdWx0aShzbGFzaGluZ01hdGNoLmNvdmVuYW50TXVsdGkpO1xuICBjb25zdCBjb3ZlbmFudEtleXMgPSBjb3ZlbmFudEtleVN0cmluZ3MubWFwKChrKSA9PiBCdWZmZXIuZnJvbShrLCAnaGV4JykpO1xuXG4gIGxldCBmaW5hbGl0eVByb3ZpZGVyS2V5czogQnVmZmVyW107XG4gIGNvbnN0IGZwS2V5T3JNdWx0aSA9IHNsYXNoaW5nTWF0Y2guZmluYWxpdHlQcm92aWRlcktleU9yTXVsdGkgYXMgYXN0Lk1pbmlzY3JpcHROb2RlO1xuICBpZiAoJ3Y6cGsnIGluIGZwS2V5T3JNdWx0aSkge1xuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzID0gW0J1ZmZlci5mcm9tKGZwS2V5T3JNdWx0aVsndjpwayddLCAnaGV4JyldO1xuICB9IGVsc2UgaWYgKCd2Om11bHRpX2EnIGluIGZwS2V5T3JNdWx0aSkge1xuICAgIGNvbnN0IFt0aHJlc2hvbGQsIGtleVN0cmluZ3NdID0gcGFyc2VNdWx0aShmcEtleU9yTXVsdGlbJ3Y6bXVsdGlfYSddKTtcbiAgICBpZiAodGhyZXNob2xkICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbmFsaXR5IHByb3ZpZGVyIG11bHRpIHRocmVzaG9sZCBtdXN0IGJlIDEnKTtcbiAgICB9XG4gICAgZmluYWxpdHlQcm92aWRlcktleXMgPSBrZXlTdHJpbmdzLm1hcCgoaykgPT4gQnVmZmVyLmZyb20oaywgJ2hleCcpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmluYWxpdHkgcHJvdmlkZXIga2V5IHN0cnVjdHVyZScpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFrZXJLZXk6IHNsYXNoaW5nTWF0Y2guc3Rha2VyS2V5LFxuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgIGNvdmVuYW50S2V5cyxcbiAgICBjb3ZlbmFudFRocmVzaG9sZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHBhcnNlZCBzdGFraW5nIGRlc2NyaXB0b3IgY29tcG9uZW50cyBvciBudWxsIGlmIHRoZSBkZXNjcmlwdG9yIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzdGFraW5nIHBhdHRlcm4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0YWtpbmdEZXNjcmlwdG9yKGRlc2NyaXB0b3I6IERlc2NyaXB0b3IgfCBhc3QuRGVzY3JpcHRvck5vZGUpOiBQYXJzZWRTdGFraW5nRGVzY3JpcHRvciB8IG51bGwge1xuICBjb25zdCBwYXR0ZXJuOiBQYXR0ZXJuID0ge1xuICAgIHRyOiBbXG4gICAgICBnZXRVbnNwZW5kYWJsZUtleSgpLFxuICAgICAgW3sgJHZhcjogJ3NsYXNoaW5nTWluaXNjcmlwdE5vZGUnIH0sIFt7ICR2YXI6ICd1bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZScgfSwgeyAkdmFyOiAndGltZWxvY2tNaW5pc2NyaXB0Tm9kZScgfV1dLFxuICAgIF0sXG4gIH07XG5cbiAgY29uc3QgbWF0Y2hlciA9IG5ldyBQYXR0ZXJuTWF0Y2hlcigpO1xuICBjb25zdCBkZXNjcmlwdG9yTm9kZSA9IGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yID8gYXN0LmZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IpIDogZGVzY3JpcHRvcjtcbiAgY29uc3QgcmVzdWx0ID0gbWF0Y2hlci5tYXRjaChkZXNjcmlwdG9yTm9kZSwgcGF0dGVybik7XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNsYXNoaW5nTm9kZSA9IHJlc3VsdC5zbGFzaGluZ01pbmlzY3JpcHROb2RlIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZTtcbiAgY29uc3QgdW5ib25kaW5nTm9kZSA9IHJlc3VsdC51bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSBhcyBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIGNvbnN0IHRpbWVsb2NrTm9kZSA9IHJlc3VsdC50aW1lbG9ja01pbmlzY3JpcHROb2RlIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZTtcblxuICAvLyBWZXJpZnkgc2xhc2hpbmcgbm9kZSBzaGFwZTogYW5kX3YoW2FuZF92KFtwaywgcGsvbXVsdGlfYV0pLCBtdWx0aV9hXSlcbiAgY29uc3Qge1xuICAgIHN0YWtlcktleTogc3Rha2VyS2V5MSxcbiAgICBmaW5hbGl0eVByb3ZpZGVyS2V5cyxcbiAgICBjb3ZlbmFudEtleXMsXG4gICAgY292ZW5hbnRUaHJlc2hvbGQsXG4gIH0gPSBwYXJzZVNsYXNoaW5nTm9kZShzbGFzaGluZ05vZGUsIG1hdGNoZXIpO1xuXG4gIC8vIFZlcmlmeSB1bmJvbmRpbmcgbm9kZSBzaGFwZTogYW5kX3YoW3BrLCBtdWx0aV9hXSlcbiAgY29uc3QgdW5ib25kaW5nUGF0dGVybjogUGF0dGVybiA9IHtcbiAgICBhbmRfdjogW3sgJ3Y6cGsnOiB7ICR2YXI6ICdzdGFrZXJLZXkyJyB9IH0sIHsgbXVsdGlfYTogeyAkdmFyOiAnY292ZW5hbnRNdWx0aTInIH0gfV0sXG4gIH07XG5cbiAgY29uc3QgdW5ib25kaW5nTWF0Y2ggPSBtYXRjaGVyLm1hdGNoKHVuYm9uZGluZ05vZGUsIHVuYm9uZGluZ1BhdHRlcm4pO1xuICBpZiAoIXVuYm9uZGluZ01hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmJvbmRpbmcgbm9kZSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuJyk7XG4gIH1cblxuICAvLyBWZXJpZnkgdW5ib25kaW5nIHRpbWVsb2NrIG5vZGUgc2hhcGU6IGFuZF92KFtwaywgb2xkZXJdKVxuICBjb25zdCB1bmlsYXRlcmFsVGltZWxvY2sgPSBwYXJzZVVuaWxhdGVyYWxUaW1lbG9jayh0aW1lbG9ja05vZGUsIG1hdGNoZXIpO1xuICBpZiAoIXVuaWxhdGVyYWxUaW1lbG9jaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBrZXk6IHN0YWtlcktleTMsIHRpbWVsb2NrOiBzdGFraW5nVGltZUxvY2sgfSA9IHVuaWxhdGVyYWxUaW1lbG9jaztcblxuICAvLyBWZXJpZnkgYWxsIHN0YWtlciBrZXlzIGFyZSB0aGUgc2FtZVxuICBpZiAoc3Rha2VyS2V5MSAhPT0gdW5ib25kaW5nTWF0Y2guc3Rha2VyS2V5MiB8fCB1bmJvbmRpbmdNYXRjaC5zdGFrZXJLZXkyICE9PSBzdGFrZXJLZXkzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdGFrZXIga2V5cyBtdXN0IGJlIGlkZW50aWNhbCBhY3Jvc3MgYWxsIG5vZGVzJyk7XG4gIH1cblxuICBjb25zdCBzdGFrZXJLZXkgPSBCdWZmZXIuZnJvbShzdGFrZXJLZXkxLCAnaGV4Jyk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFrZXJLZXksXG4gICAgZmluYWxpdHlQcm92aWRlcktleXMsXG4gICAgY292ZW5hbnRLZXlzLFxuICAgIGNvdmVuYW50VGhyZXNob2xkLFxuICAgIHN0YWtpbmdUaW1lTG9jayxcbiAgICBzbGFzaGluZ01pbmlzY3JpcHROb2RlOiBzbGFzaGluZ05vZGUsXG4gICAgdW5ib25kaW5nTWluaXNjcmlwdE5vZGU6IHVuYm9uZGluZ05vZGUsXG4gICAgdGltZWxvY2tNaW5pc2NyaXB0Tm9kZTogdGltZWxvY2tOb2RlLFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBQYXJzZWRVbmJvbmRpbmdEZXNjcmlwdG9yID0ge1xuICBzdGFrZXJLZXk6IEJ1ZmZlcjtcbiAgZmluYWxpdHlQcm92aWRlcktleXM6IEJ1ZmZlcltdO1xuICBjb3ZlbmFudEtleXM6IEJ1ZmZlcltdO1xuICBjb3ZlbmFudFRocmVzaG9sZDogbnVtYmVyO1xuICB1bmJvbmRpbmdUaW1lTG9jazogbnVtYmVyO1xuICBzbGFzaGluZ01pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIHVuYm9uZGluZ1RpbWVsb2NrTWluaXNjcmlwdE5vZGU6IGFzdC5NaW5pc2NyaXB0Tm9kZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVuYm9uZGluZ0Rlc2NyaXB0b3IoXG4gIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IgfCBhc3QuRGVzY3JpcHRvck5vZGVcbik6IFBhcnNlZFVuYm9uZGluZ0Rlc2NyaXB0b3IgfCBudWxsIHtcbiAgY29uc3QgcGF0dGVybjogUGF0dGVybiA9IHtcbiAgICB0cjogW2dldFVuc3BlbmRhYmxlS2V5KCksIFt7ICR2YXI6ICdzbGFzaGluZ01pbmlzY3JpcHROb2RlJyB9LCB7ICR2YXI6ICd1bmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlJyB9XV0sXG4gIH07XG5cbiAgY29uc3QgbWF0Y2hlciA9IG5ldyBQYXR0ZXJuTWF0Y2hlcigpO1xuICBjb25zdCBkZXNjcmlwdG9yTm9kZSA9IGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yID8gYXN0LmZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IpIDogZGVzY3JpcHRvcjtcbiAgY29uc3QgcmVzdWx0ID0gbWF0Y2hlci5tYXRjaChkZXNjcmlwdG9yTm9kZSwgcGF0dGVybik7XG5cbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNsYXNoaW5nTm9kZSA9IHJlc3VsdC5zbGFzaGluZ01pbmlzY3JpcHROb2RlIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZTtcbiAgY29uc3QgdW5ib25kaW5nVGltZWxvY2tOb2RlID0gcmVzdWx0LnVuYm9uZGluZ1RpbWVsb2NrTWluaXNjcmlwdE5vZGUgYXMgYXN0Lk1pbmlzY3JpcHROb2RlO1xuXG4gIGNvbnN0IHtcbiAgICBzdGFrZXJLZXk6IHN0YWtlcktleTEsXG4gICAgZmluYWxpdHlQcm92aWRlcktleXMsXG4gICAgY292ZW5hbnRLZXlzLFxuICAgIGNvdmVuYW50VGhyZXNob2xkLFxuICB9ID0gcGFyc2VTbGFzaGluZ05vZGUoc2xhc2hpbmdOb2RlLCBtYXRjaGVyKTtcblxuICBjb25zdCB1bmlsYXRlcmFsVGltZWxvY2sgPSBwYXJzZVVuaWxhdGVyYWxUaW1lbG9jayh1bmJvbmRpbmdUaW1lbG9ja05vZGUsIG1hdGNoZXIpO1xuICBpZiAoIXVuaWxhdGVyYWxUaW1lbG9jaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBrZXk6IHN0YWtlcktleTIsIHRpbWVsb2NrOiB1bmJvbmRpbmdUaW1lTG9jayB9ID0gdW5pbGF0ZXJhbFRpbWVsb2NrO1xuXG4gIGlmIChzdGFrZXJLZXkxICE9PSBzdGFrZXJLZXkyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTdGFrZXIga2V5cyBtdXN0IGJlIGlkZW50aWNhbCBhY3Jvc3MgYWxsIG5vZGVzJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YWtlcktleTogQnVmZmVyLmZyb20oc3Rha2VyS2V5MSwgJ2hleCcpLFxuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgIGNvdmVuYW50S2V5cyxcbiAgICBjb3ZlbmFudFRocmVzaG9sZCxcbiAgICB1bmJvbmRpbmdUaW1lTG9jayxcbiAgICBzbGFzaGluZ01pbmlzY3JpcHROb2RlOiBzbGFzaGluZ05vZGUsXG4gICAgdW5ib25kaW5nVGltZWxvY2tNaW5pc2NyaXB0Tm9kZTogdW5ib25kaW5nVGltZWxvY2tOb2RlLFxuICB9O1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/utxo-staking",
|
|
3
|
-
"version": "1.1.1-beta.
|
|
3
|
+
"version": "1.1.1-beta.478",
|
|
4
4
|
"description": "BitGo SDK for build UTXO staking transactions",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@babylonlabs-io/babylon-proto-ts": "1.0.0",
|
|
46
|
-
"@bitgo-beta/babylonlabs-io-btc-staking-ts": "0.4.0-beta.
|
|
47
|
-
"@bitgo-beta/utxo-core": "1.8.1-beta.
|
|
48
|
-
"@bitgo-beta/utxo-lib": "8.0.3-beta.
|
|
46
|
+
"@bitgo-beta/babylonlabs-io-btc-staking-ts": "0.4.0-beta.283",
|
|
47
|
+
"@bitgo-beta/utxo-core": "1.8.1-beta.154",
|
|
48
|
+
"@bitgo-beta/utxo-lib": "8.0.3-beta.1038",
|
|
49
49
|
"@bitgo/wasm-miniscript": "2.0.0-beta.7",
|
|
50
50
|
"bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
|
|
51
51
|
"bip322-js": "^2.0.0",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"yargs": "^17.7.2"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "a95cb987d191427c2ed015279bd80f39c45f6a04"
|
|
61
61
|
}
|