@bitgo/utxo-staking 1.18.1 → 1.20.0

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.
@@ -6,6 +6,7 @@
6
6
  import { Descriptor, ast } from '@bitgo/wasm-miniscript';
7
7
  import { StakingParams } from '@bitgo/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[];
@@ -18,12 +19,30 @@ export declare class BabylonDescriptorBuilder {
18
19
  stakerKey: Buffer;
19
20
  finalityProviderKeys: Buffer[];
20
21
  } & StakingParams): BabylonDescriptorBuilder;
21
- getTimelockMiniscript(): ast.MiniscriptNode;
22
- getUnbondingMiniscript(): ast.MiniscriptNode;
23
- getSlashingMiniscript(): ast.MiniscriptNode;
24
- getUnbondingTimelockMiniscript(): ast.MiniscriptNode;
22
+ /** Spend path with the staker key and the staking timelock */
23
+ getStakingTimelockMiniscriptNode(): ast.MiniscriptNode;
24
+ /** Spend path with the staker key and the unbonding timelock */
25
+ getUnbondingTimelockMiniscriptNode(): ast.MiniscriptNode;
26
+ /** Spend path with the staker key and the covenant keys */
27
+ getUnbondingMiniscriptNode(): ast.MiniscriptNode;
28
+ /** Spend path with the finality provider keys and the covenant keys */
29
+ getSlashingMiniscriptNode(): ast.MiniscriptNode;
30
+ /**
31
+ * Creates a descriptor for a staking output.
32
+ *
33
+ * Three spend paths:
34
+ * - the slashing script,
35
+ * - the unbonding script,
36
+ * - the timelocked unstaking script.
37
+ */
25
38
  getStakingDescriptor(): Descriptor;
26
- getSlashingDescriptor(): Descriptor;
39
+ /**
40
+ * Creates a descriptor for the timelocked unbonding script.
41
+ */
42
+ getUnbondingTimelockDescriptor(): Descriptor;
43
+ /**
44
+ * Creates a descriptor with two script paths: the slashing script and the timelocked unbonding script.
45
+ */
27
46
  getUnbondingDescriptor(): Descriptor;
28
47
  }
29
48
  //# sourceMappingURL=descriptor.d.ts.map
@@ -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,sCAAsC,CAAC;AAErE,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAmBD,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,qBAAqB,IAAI,GAAG,CAAC,cAAc;IAI3C,sBAAsB,IAAI,GAAG,CAAC,cAAc;IAI5C,qBAAqB,IAAI,GAAG,CAAC,cAAc;IAgB3C,8BAA8B,IAAI,GAAG,CAAC,cAAc;IAIpD,oBAAoB,IAAI,UAAU;IAOlC,qBAAqB,IAAI,UAAU;IAInC,sBAAsB,IAAI,UAAU;CAGrC"}
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,sCAAsC,CAAC;AAErE,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
@@ -37,13 +38,20 @@ class BabylonDescriptorBuilder {
37
38
  static fromParams(params) {
38
39
  return new BabylonDescriptorBuilder(params.stakerKey, params.finalityProviderKeys, params.covenantNoCoordPks.map((k) => Buffer.from(k, 'hex')), params.covenantQuorum, params.minStakingTimeBlocks, params.unbondingTime);
39
40
  }
40
- getTimelockMiniscript() {
41
+ /** Spend path with the staker key and the staking timelock */
42
+ getStakingTimelockMiniscriptNode() {
41
43
  return { and_v: [pk(this.stakerKey), { older: this.stakingTimeLock }] };
42
44
  }
43
- getUnbondingMiniscript() {
45
+ /** Spend path with the staker key and the unbonding timelock */
46
+ getUnbondingTimelockMiniscriptNode() {
47
+ return { and_v: [pk(this.stakerKey), { older: this.unbondingTimeLock }] };
48
+ }
49
+ /** Spend path with the staker key and the covenant keys */
50
+ getUnbondingMiniscriptNode() {
44
51
  return { and_v: [pk(this.stakerKey), { multi_a: multiArgs(this.covenantThreshold, this.covenantKeys) }] };
45
52
  }
46
- getSlashingMiniscript() {
53
+ /** Spend path with the finality provider keys and the covenant keys */
54
+ getSlashingMiniscriptNode() {
47
55
  return {
48
56
  and_v: [
49
57
  {
@@ -58,21 +66,32 @@ class BabylonDescriptorBuilder {
58
66
  ],
59
67
  };
60
68
  }
61
- getUnbondingTimelockMiniscript() {
62
- return { and_v: [pk(this.stakerKey), { older: this.unbondingTimeLock }] };
63
- }
69
+ /**
70
+ * Creates a descriptor for a staking output.
71
+ *
72
+ * Three spend paths:
73
+ * - the slashing script,
74
+ * - the unbonding script,
75
+ * - the timelocked unstaking script.
76
+ */
64
77
  getStakingDescriptor() {
65
78
  return taprootScriptOnlyFromAst([
66
- this.getSlashingMiniscript(),
67
- [this.getUnbondingMiniscript(), this.getTimelockMiniscript()],
79
+ this.getSlashingMiniscriptNode(),
80
+ [this.getUnbondingMiniscriptNode(), this.getStakingTimelockMiniscriptNode()],
68
81
  ]);
69
82
  }
70
- getSlashingDescriptor() {
71
- return taprootScriptOnlyFromAst(this.getUnbondingTimelockMiniscript());
83
+ /**
84
+ * Creates a descriptor for the timelocked unbonding script.
85
+ */
86
+ getUnbondingTimelockDescriptor() {
87
+ return taprootScriptOnlyFromAst(this.getUnbondingTimelockMiniscriptNode());
72
88
  }
89
+ /**
90
+ * Creates a descriptor with two script paths: the slashing script and the timelocked unbonding script.
91
+ */
73
92
  getUnbondingDescriptor() {
74
- return taprootScriptOnlyFromAst([this.getSlashingMiniscript(), this.getUnbondingTimelockMiniscript()]);
93
+ return taprootScriptOnlyFromAst([this.getSlashingMiniscriptNode(), this.getUnbondingTimelockMiniscriptNode()]);
75
94
  }
76
95
  }
77
96
  exports.BabylonDescriptorBuilder = BabylonDescriptorBuilder;
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWJ5bG9uL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUtILDhDQUdDO0FBTkQsNERBQXlEO0FBR3pELFNBQWdCLGlCQUFpQjtJQUMvQixvR0FBb0c7SUFDcEcsT0FBTyxrRUFBa0UsQ0FBQztBQUM1RSxDQUFDO0FBRUQsaURBQWlEO0FBQ2pELFNBQVMsRUFBRSxDQUFDLENBQVM7SUFDbkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWM7SUFDaEMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxTQUFpQixFQUFFLElBQWM7SUFDbEQsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLENBQWtCO0lBQ2xELE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMscUJBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQsTUFBYSx3QkFBd0I7SUFDbkMsWUFDUyxTQUFpQixFQUNqQixvQkFBOEIs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XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmFieWxvbmxhYnMtaW8vYmFieWxvbi90cmVlL21haW4vZG9jc1xuICogaHR0cHM6Ly9naXRodWIuY29tL2JhYnlsb25sYWJzLWlvL2JhYnlsb24vYmxvYi9tYWluL2RvY3Mvc3Rha2luZy1zY3JpcHQubWRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJ5bG9ubGFicy1pby9iYWJ5bG9uL2Jsb2IvdjEuOTkuMC1zbmFwc2hvdC4yNTAyMTEvYnRjc3Rha2luZy9zdGFraW5nLmdvXG4gKi9cblxuaW1wb3J0IHsgRGVzY3JpcHRvciwgYXN0IH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgeyBTdGFraW5nUGFyYW1zIH0gZnJvbSAnQGJpdGdvL2JhYnlsb25sYWJzLWlvLWJ0Yy1zdGFraW5nLXRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuc3BlbmRhYmxlS2V5KCk6IHN0cmluZyB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJ5bG9ubGFicy1pby9idGMtc3Rha2luZy10cy9ibG9iL3YwLjQuMC1yYy4yL3NyYy9jb25zdGFudHMvaW50ZXJuYWxQdWJrZXkudHNcbiAgcmV0dXJuICc1MDkyOWI3NGMxYTA0OTU0Yjc4YjRiNjAzNWU5N2E1ZTA3OGE1YTBmMjhlYzk2ZDU0N2JmZWU5YWNlODAzYWMwJztcbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgbWluaXNjcmlwdCBub2Rlc1xuZnVuY3Rpb24gcGsoYjogQnVmZmVyKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgcmV0dXJuIHsgJ3Y6cGsnOiBiLnRvU3RyaW5nKCdoZXgnKSB9O1xufVxuXG5mdW5jdGlvbiBzb3J0ZWRLZXlzKGtleXM6IEJ1ZmZlcltdKTogQnVmZmVyW10ge1xuICByZXR1cm4gWy4uLmtleXNdLnNvcnQoKGEsIGIpID0+IGEuY29tcGFyZShiKSk7XG59XG5cbmZ1bmN0aW9uIG11bHRpQXJncyh0aHJlc2hvbGQ6IG51bWJlciwga2V5czogQnVmZmVyW10pOiBbbnVtYmVyLCAuLi5zdHJpbmdbXV0ge1xuICByZXR1cm4gW3RocmVzaG9sZCwgLi4uc29ydGVkS2V5cyhrZXlzKS5tYXAoKGspID0+IGsudG9TdHJpbmcoJ2hleCcpKV07XG59XG5cbmZ1bmN0aW9uIHRhcHJvb3RTY3JpcHRPbmx5RnJvbUFzdChuOiBhc3QuVGFwVHJlZU5vZGUpOiBEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIERlc2NyaXB0b3IuZnJvbVN0cmluZyhhc3QuZm9ybWF0Tm9kZSh7IHRyOiBbZ2V0VW5zcGVuZGFibGVLZXkoKSwgbl0gfSksICdkZWZpbml0ZScpO1xufVxuXG5leHBvcnQgY2xhc3MgQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YWtlcktleTogQnVmZmVyLFxuICAgIHB1YmxpYyBmaW5hbGl0eVByb3ZpZGVyS2V5czogQnVmZmVyW10sXG4gICAgcHVibGljIGNvdmVuYW50S2V5czogQnVmZmVyW10sXG4gICAgcHVibGljIGNvdmVuYW50VGhyZXNob2xkOiBudW1iZXIsXG4gICAgcHVibGljIHN0YWtpbmdUaW1lTG9jazogbnVtYmVyLFxuICAgIHB1YmxpYyB1bmJvbmRpbmdUaW1lTG9jazogbnVtYmVyXG4gICkge31cblxuICBzdGF0aWMgZnJvbVBhcmFtcyhcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YWtlcktleTogQnVmZmVyO1xuICAgICAgZmluYWxpdHlQcm92aWRlcktleXM6IEJ1ZmZlcltdO1xuICAgIH0gJiBTdGFraW5nUGFyYW1zXG4gICk6IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBCYWJ5bG9uRGVzY3JpcHRvckJ1aWxkZXIoXG4gICAgICBwYXJhbXMuc3Rha2VyS2V5LFxuICAgICAgcGFyYW1zLmZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgICAgcGFyYW1zLmNvdmVuYW50Tm9Db29yZFBrcy5tYXAoKGspID0+IEJ1ZmZlci5mcm9tKGssICdoZXgnKSksXG4gICAgICBwYXJhbXMuY292ZW5hbnRRdW9ydW0sXG4gICAgICBwYXJhbXMubWluU3Rha2luZ1RpbWVCbG9ja3MsXG4gICAgICBwYXJhbXMudW5ib25kaW5nVGltZVxuICAgICk7XG4gIH1cblxuICBnZXRUaW1lbG9ja01pbmlzY3JpcHQoKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgICByZXR1cm4geyBhbmRfdjogW3BrKHRoaXMuc3Rha2VyS2V5KSwgeyBvbGRlcjogdGhpcy5zdGFraW5nVGltZUxvY2sgfV0gfTtcbiAgfVxuXG4gIGdldFVuYm9uZGluZ01pbmlzY3JpcHQoKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgICByZXR1cm4geyBhbmRfdjogW3BrKHRoaXMuc3Rha2VyS2V5KSwgeyBtdWx0aV9hOiBtdWx0aUFyZ3ModGhpcy5jb3ZlbmFudFRocmVzaG9sZCwgdGhpcy5jb3ZlbmFudEtleXMpIH1dIH07XG4gIH1cblxuICBnZXRTbGFzaGluZ01pbmlzY3JpcHQoKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5kX3Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFuZF92OiBbXG4gICAgICAgICAgICBwayh0aGlzLnN0YWtlcktleSksXG4gICAgICAgICAgICB0aGlzLmZpbmFsaXR5UHJvdmlkZXJLZXlzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICA/IHsgJ3Y6cGsnOiB0aGlzLmZpbmFsaXR5UHJvdmlkZXJLZXlzWzBdLnRvU3RyaW5nKCdoZXgnKSB9XG4gICAgICAgICAgICAgIDogeyAndjptdWx0aV9hJzogbXVsdGlBcmdzKDEsIHRoaXMuZmluYWxpdHlQcm92aWRlcktleXMpIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBtdWx0aV9hOiBtdWx0aUFyZ3ModGhpcy5jb3ZlbmFudFRocmVzaG9sZCwgdGhpcy5jb3ZlbmFudEtleXMpIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBnZXRVbmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHQoKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgICByZXR1cm4geyBhbmRfdjogW3BrKHRoaXMuc3Rha2VyS2V5KSwgeyBvbGRlcjogdGhpcy51bmJvbmRpbmdUaW1lTG9jayB9XSB9O1xuICB9XG5cbiAgZ2V0U3Rha2luZ0Rlc2NyaXB0b3IoKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHRhcHJvb3RTY3JpcHRPbmx5RnJvbUFzdChbXG4gICAgICB0aGlzLmdldFNsYXNoaW5nTWluaXNjcmlwdCgpLFxuICAgICAgW3RoaXMuZ2V0VW5ib25kaW5nTWluaXNjcmlwdCgpLCB0aGlzLmdldFRpbWVsb2NrTWluaXNjcmlwdCgpXSxcbiAgICBdKTtcbiAgfVxuXG4gIGdldFNsYXNoaW5nRGVzY3JpcHRvcigpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gdGFwcm9vdFNjcmlwdE9ubHlGcm9tQXN0KHRoaXMuZ2V0VW5ib25kaW5nVGltZWxvY2tNaW5pc2NyaXB0KCkpO1xuICB9XG5cbiAgZ2V0VW5ib25kaW5nRGVzY3JpcHRvcigpOiBEZXNjcmlwdG9yIHtcbiAgICByZXR1cm4gdGFwcm9vdFNjcmlwdE9ubHlGcm9tQXN0KFt0aGlzLmdldFNsYXNoaW5nTWluaXNjcmlwdCgpLCB0aGlzLmdldFVuYm9uZGluZ1RpbWVsb2NrTWluaXNjcmlwdCgpXSk7XG4gIH1cbn1cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWJ5bG9uL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUtILDhDQUdDO0FBT0QsZ0NBRUM7QUFmRCw0REFBeUQ7QUFHekQsU0FBZ0IsaUJBQWlCO0lBQy9CLG9HQUFvRztJQUNwRyxPQUFPLGtFQUFrRSxDQUFDO0FBQzVFLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxFQUFFLENBQUMsQ0FBUztJQUNuQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQWM7SUFDdkMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxTQUFpQixFQUFFLElBQWM7SUFDbEQsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLENBQWtCO0lBQ2xELE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMscUJBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQsTUFBYSx3QkFBd0I7SUFDbkMsWUFDUyxTQUFpQixF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eUIsRUFBRSxFQUFFLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0NBQ0Y7QUF0RkQsNERBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmFieWxvbmxhYnMtaW8vYmFieWxvbi90cmVlL21haW4vZG9jc1xuICogaHR0cHM6Ly9naXRodWIuY29tL2JhYnlsb25sYWJzLWlvL2JhYnlsb24vYmxvYi9tYWluL2RvY3Mvc3Rha2luZy1zY3JpcHQubWRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJ5bG9ubGFicy1pby9iYWJ5bG9uL2Jsb2IvdjEuOTkuMC1zbmFwc2hvdC4yNTAyMTEvYnRjc3Rha2luZy9zdGFraW5nLmdvXG4gKi9cblxuaW1wb3J0IHsgRGVzY3JpcHRvciwgYXN0IH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgeyBTdGFraW5nUGFyYW1zIH0gZnJvbSAnQGJpdGdvL2JhYnlsb25sYWJzLWlvLWJ0Yy1zdGFraW5nLXRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuc3BlbmRhYmxlS2V5KCk6IHN0cmluZyB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJ5bG9ubGFicy1pby9idGMtc3Rha2luZy10cy9ibG9iL3YwLjQuMC1yYy4yL3NyYy9jb25zdGFudHMvaW50ZXJuYWxQdWJrZXkudHNcbiAgcmV0dXJuICc1MDkyOWI3NGMxYTA0OTU0Yjc4YjRiNjAzNWU5N2E1ZTA3OGE1YTBmMjhlYzk2ZDU0N2JmZWU5YWNlODAzYWMwJztcbn1cblxuLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgbWluaXNjcmlwdCBub2Rlc1xuZnVuY3Rpb24gcGsoYjogQnVmZmVyKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgcmV0dXJuIHsgJ3Y6cGsnOiBiLnRvU3RyaW5nKCdoZXgnKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29ydGVkS2V5cyhrZXlzOiBCdWZmZXJbXSk6IEJ1ZmZlcltdIHtcbiAgcmV0dXJuIFsuLi5rZXlzXS5zb3J0KChhLCBiKSA9PiBhLmNvbXBhcmUoYikpO1xufVxuXG5mdW5jdGlvbiBtdWx0aUFyZ3ModGhyZXNob2xkOiBudW1iZXIsIGtleXM6IEJ1ZmZlcltdKTogW251bWJlciwgLi4uc3RyaW5nW11dIHtcbiAgcmV0dXJuIFt0aHJlc2hvbGQsIC4uLnNvcnRlZEtleXMoa2V5cykubWFwKChrKSA9PiBrLnRvU3RyaW5nKCdoZXgnKSldO1xufVxuXG5mdW5jdGlvbiB0YXByb290U2NyaXB0T25seUZyb21Bc3QobjogYXN0LlRhcFRyZWVOb2RlKTogRGVzY3JpcHRvciB7XG4gIHJldHVybiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUoeyB0cjogW2dldFVuc3BlbmRhYmxlS2V5KCksIG5dIH0pLCAnZGVmaW5pdGUnKTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGFrZXJLZXk6IEJ1ZmZlcixcbiAgICBwdWJsaWMgZmluYWxpdHlQcm92aWRlcktleXM6IEJ1ZmZlcltdLFxuICAgIHB1YmxpYyBjb3ZlbmFudEtleXM6IEJ1ZmZlcltdLFxuICAgIHB1YmxpYyBjb3ZlbmFudFRocmVzaG9sZDogbnVtYmVyLFxuICAgIHB1YmxpYyBzdGFraW5nVGltZUxvY2s6IG51bWJlcixcbiAgICBwdWJsaWMgdW5ib25kaW5nVGltZUxvY2s6IG51bWJlclxuICApIHt9XG5cbiAgc3RhdGljIGZyb21QYXJhbXMoXG4gICAgcGFyYW1zOiB7XG4gICAgICBzdGFrZXJLZXk6IEJ1ZmZlcjtcbiAgICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzOiBCdWZmZXJbXTtcbiAgICB9ICYgU3Rha2luZ1BhcmFtc1xuICApOiBCYWJ5bG9uRGVzY3JpcHRvckJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyKFxuICAgICAgcGFyYW1zLnN0YWtlcktleSxcbiAgICAgIHBhcmFtcy5maW5hbGl0eVByb3ZpZGVyS2V5cyxcbiAgICAgIHBhcmFtcy5jb3ZlbmFudE5vQ29vcmRQa3MubWFwKChrKSA9PiBCdWZmZXIuZnJvbShrLCAnaGV4JykpLFxuICAgICAgcGFyYW1zLmNvdmVuYW50UXVvcnVtLFxuICAgICAgcGFyYW1zLm1pblN0YWtpbmdUaW1lQmxvY2tzLFxuICAgICAgcGFyYW1zLnVuYm9uZGluZ1RpbWVcbiAgICApO1xuICB9XG5cbiAgLyoqIFNwZW5kIHBhdGggd2l0aCB0aGUgc3Rha2VyIGtleSBhbmQgdGhlIHN0YWtpbmcgdGltZWxvY2sgKi9cbiAgZ2V0U3Rha2luZ1RpbWVsb2NrTWluaXNjcmlwdE5vZGUoKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgICByZXR1cm4geyBhbmRfdjogW3BrKHRoaXMuc3Rha2VyS2V5KSwgeyBvbGRlcjogdGhpcy5zdGFraW5nVGltZUxvY2sgfV0gfTtcbiAgfVxuXG4gIC8qKiBTcGVuZCBwYXRoIHdpdGggdGhlIHN0YWtlciBrZXkgYW5kIHRoZSB1bmJvbmRpbmcgdGltZWxvY2sgKi9cbiAgZ2V0VW5ib25kaW5nVGltZWxvY2tNaW5pc2NyaXB0Tm9kZSgpOiBhc3QuTWluaXNjcmlwdE5vZGUge1xuICAgIHJldHVybiB7IGFuZF92OiBbcGsodGhpcy5zdGFrZXJLZXkpLCB7IG9sZGVyOiB0aGlzLnVuYm9uZGluZ1RpbWVMb2NrIH1dIH07XG4gIH1cblxuICAvKiogU3BlbmQgcGF0aCB3aXRoIHRoZSBzdGFrZXIga2V5IGFuZCB0aGUgY292ZW5hbnQga2V5cyAqL1xuICBnZXRVbmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSgpOiBhc3QuTWluaXNjcmlwdE5vZGUge1xuICAgIHJldHVybiB7IGFuZF92OiBbcGsodGhpcy5zdGFrZXJLZXkpLCB7IG11bHRpX2E6IG11bHRpQXJncyh0aGlzLmNvdmVuYW50VGhyZXNob2xkLCB0aGlzLmNvdmVuYW50S2V5cykgfV0gfTtcbiAgfVxuXG4gIC8qKiBTcGVuZCBwYXRoIHdpdGggdGhlIGZpbmFsaXR5IHByb3ZpZGVyIGtleXMgYW5kIHRoZSBjb3ZlbmFudCBrZXlzICovXG4gIGdldFNsYXNoaW5nTWluaXNjcmlwdE5vZGUoKTogYXN0Lk1pbmlzY3JpcHROb2RlIHtcbiAgICByZXR1cm4ge1xuICAgICAgYW5kX3Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFuZF92OiBbXG4gICAgICAgICAgICBwayh0aGlzLnN0YWtlcktleSksXG4gICAgICAgICAgICB0aGlzLmZpbmFsaXR5UHJvdmlkZXJLZXlzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICA/IHsgJ3Y6cGsnOiB0aGlzLmZpbmFsaXR5UHJvdmlkZXJLZXlzWzBdLnRvU3RyaW5nKCdoZXgnKSB9XG4gICAgICAgICAgICAgIDogeyAndjptdWx0aV9hJzogbXVsdGlBcmdzKDEsIHRoaXMuZmluYWxpdHlQcm92aWRlcktleXMpIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBtdWx0aV9hOiBtdWx0aUFyZ3ModGhpcy5jb3ZlbmFudFRocmVzaG9sZCwgdGhpcy5jb3ZlbmFudEtleXMpIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGRlc2NyaXB0b3IgZm9yIGEgc3Rha2luZyBvdXRwdXQuXG4gICAqXG4gICAqIFRocmVlIHNwZW5kIHBhdGhzOlxuICAgKiAtIHRoZSBzbGFzaGluZyBzY3JpcHQsXG4gICAqIC0gdGhlIHVuYm9uZGluZyBzY3JpcHQsXG4gICAqIC0gdGhlIHRpbWVsb2NrZWQgdW5zdGFraW5nIHNjcmlwdC5cbiAgICovXG4gIGdldFN0YWtpbmdEZXNjcmlwdG9yKCk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiB0YXByb290U2NyaXB0T25seUZyb21Bc3QoW1xuICAgICAgdGhpcy5nZXRTbGFzaGluZ01pbmlzY3JpcHROb2RlKCksXG4gICAgICBbdGhpcy5nZXRVbmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSgpLCB0aGlzLmdldFN0YWtpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlKCldLFxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkZXNjcmlwdG9yIGZvciB0aGUgdGltZWxvY2tlZCB1bmJvbmRpbmcgc2NyaXB0LlxuICAgKi9cbiAgZ2V0VW5ib25kaW5nVGltZWxvY2tEZXNjcmlwdG9yKCk6IERlc2NyaXB0b3Ige1xuICAgIHJldHVybiB0YXByb290U2NyaXB0T25seUZyb21Bc3QodGhpcy5nZXRVbmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBkZXNjcmlwdG9yIHdpdGggdHdvIHNjcmlwdCBwYXRoczogdGhlIHNsYXNoaW5nIHNjcmlwdCBhbmQgdGhlIHRpbWVsb2NrZWQgdW5ib25kaW5nIHNjcmlwdC5cbiAgICovXG4gIGdldFVuYm9uZGluZ0Rlc2NyaXB0b3IoKTogRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIHRhcHJvb3RTY3JpcHRPbmx5RnJvbUFzdChbdGhpcy5nZXRTbGFzaGluZ01pbmlzY3JpcHROb2RlKCksIHRoaXMuZ2V0VW5ib25kaW5nVGltZWxvY2tNaW5pc2NyaXB0Tm9kZSgpXSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,4 +2,5 @@ export * from './delegationMessage';
2
2
  export * from './descriptor';
3
3
  export * from './stakingParams';
4
4
  export * from './stakingManager';
5
+ export * from './undelegation';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/babylon/index.ts"],"names":[],"mappings":"AAOA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/babylon/index.ts"],"names":[],"mappings":"AAOA,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -45,4 +45,5 @@ __exportStar(require("./delegationMessage"), exports);
45
45
  __exportStar(require("./descriptor"), exports);
46
46
  __exportStar(require("./stakingParams"), exports);
47
47
  __exportStar(require("./stakingManager"), exports);
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFieWxvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdGQUFvRTtBQUNwRSw0REFBOEM7QUFDOUMseURBQTJDO0FBRTNDLElBQUEsNENBQVksR0FBRSxDQUFDO0FBQ2YsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFckMsc0RBQW9DO0FBQ3BDLCtDQUE2QjtBQUM3QixrREFBZ0M7QUFDaEMsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5pdEJUQ0N1cnZlIH0gZnJvbSAnQGJpdGdvL2JhYnlsb25sYWJzLWlvLWJ0Yy1zdGFraW5nLXRzJztcbmltcG9ydCAqIGFzIGJpdGNvaW5qc2xpYiBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW5pdEJUQ0N1cnZlKCk7XG5iaXRjb2luanNsaWIuaW5pdEVjY0xpYih1dHhvbGliLmVjYyk7XG5cbmV4cG9ydCAqIGZyb20gJy4vZGVsZWdhdGlvbk1lc3NhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNjcmlwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vc3Rha2luZ1BhcmFtcyc7XG5leHBvcnQgKiBmcm9tICcuL3N0YWtpbmdNYW5hZ2VyJztcbiJdfQ==
48
+ __exportStar(require("./undelegation"), exports);
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFieWxvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdGQUFvRTtBQUNwRSw0REFBOEM7QUFDOUMseURBQTJDO0FBRTNDLElBQUEsNENBQVksR0FBRSxDQUFDO0FBQ2YsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFckMsc0RBQW9DO0FBQ3BDLCtDQUE2QjtBQUM3QixrREFBZ0M7QUFDaEMsbURBQWlDO0FBQ2pDLGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluaXRCVENDdXJ2ZSB9IGZyb20gJ0BiaXRnby9iYWJ5bG9ubGFicy1pby1idGMtc3Rha2luZy10cyc7XG5pbXBvcnQgKiBhcyBiaXRjb2luanNsaWIgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmluaXRCVENDdXJ2ZSgpO1xuYml0Y29pbmpzbGliLmluaXRFY2NMaWIodXR4b2xpYi5lY2MpO1xuXG5leHBvcnQgKiBmcm9tICcuL2RlbGVnYXRpb25NZXNzYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL3N0YWtpbmdQYXJhbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFraW5nTWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuL3VuZGVsZWdhdGlvbic7XG4iXX0=
@@ -0,0 +1,26 @@
1
+ import { Descriptor, ast } from '@bitgo/wasm-miniscript';
2
+ export type ParsedStakingDescriptor = {
3
+ stakerKey: Buffer;
4
+ finalityProviderKeys: Buffer[];
5
+ covenantKeys: Buffer[];
6
+ covenantThreshold: number;
7
+ stakingTimeLock: number;
8
+ slashingMiniscriptNode: ast.MiniscriptNode;
9
+ unbondingMiniscriptNode: ast.MiniscriptNode;
10
+ timelockMiniscriptNode: ast.MiniscriptNode;
11
+ };
12
+ /**
13
+ * @return parsed staking descriptor components or null if the descriptor does not match the expected staking pattern.
14
+ */
15
+ export declare function parseStakingDescriptor(descriptor: Descriptor | ast.DescriptorNode): ParsedStakingDescriptor | null;
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;
26
+ //# sourceMappingURL=parseDescriptor.d.ts.map
@@ -0,0 +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,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"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseStakingDescriptor = parseStakingDescriptor;
4
+ exports.parseUnbondingDescriptor = parseUnbondingDescriptor;
5
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
6
+ const descriptor_1 = require("@bitgo/utxo-core/descriptor");
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
+ }
77
+ /**
78
+ * @return parsed staking descriptor components or null if the descriptor does not match the expected staking pattern.
79
+ */
80
+ function parseStakingDescriptor(descriptor) {
81
+ const pattern = {
82
+ tr: [
83
+ (0, descriptor_2.getUnspendableKey)(),
84
+ [{ $var: 'slashingMiniscriptNode' }, [{ $var: 'unbondingMiniscriptNode' }, { $var: 'timelockMiniscriptNode' }]],
85
+ ],
86
+ };
87
+ const matcher = new descriptor_1.PatternMatcher();
88
+ const descriptorNode = descriptor instanceof wasm_miniscript_1.Descriptor ? wasm_miniscript_1.ast.fromDescriptor(descriptor) : descriptor;
89
+ const result = matcher.match(descriptorNode, pattern);
90
+ if (!result) {
91
+ return null;
92
+ }
93
+ const slashingNode = result.slashingMiniscriptNode;
94
+ const unbondingNode = result.unbondingMiniscriptNode;
95
+ const timelockNode = result.timelockMiniscriptNode;
96
+ // Verify slashing node shape: and_v([and_v([pk, pk/multi_a]), multi_a])
97
+ const { stakerKey: stakerKey1, finalityProviderKeys, covenantKeys, covenantThreshold, } = parseSlashingNode(slashingNode, matcher);
98
+ // Verify unbonding node shape: and_v([pk, multi_a])
99
+ const unbondingPattern = {
100
+ and_v: [{ 'v:pk': { $var: 'stakerKey2' } }, { multi_a: { $var: 'covenantMulti2' } }],
101
+ };
102
+ const unbondingMatch = matcher.match(unbondingNode, unbondingPattern);
103
+ if (!unbondingMatch) {
104
+ throw new Error('Unbonding node does not match expected pattern');
105
+ }
106
+ // Verify unbonding timelock node shape: and_v([pk, older])
107
+ const unilateralTimelock = parseUnilateralTimelock(timelockNode, matcher);
108
+ if (!unilateralTimelock) {
109
+ return null;
110
+ }
111
+ const { key: stakerKey3, timelock: stakingTimeLock } = unilateralTimelock;
112
+ // Verify all staker keys are the same
113
+ if (stakerKey1 !== unbondingMatch.stakerKey2 || unbondingMatch.stakerKey2 !== stakerKey3) {
114
+ throw new Error('Staker keys must be identical across all nodes');
115
+ }
116
+ const stakerKey = Buffer.from(stakerKey1, 'hex');
117
+ return {
118
+ stakerKey,
119
+ finalityProviderKeys,
120
+ covenantKeys,
121
+ covenantThreshold,
122
+ stakingTimeLock,
123
+ slashingMiniscriptNode: slashingNode,
124
+ unbondingMiniscriptNode: unbondingNode,
125
+ timelockMiniscriptNode: timelockNode,
126
+ };
127
+ }
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhYnlsb24vcGFyc2VEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUdBLHdEQStEQztBQVlELDREQTZDQztBQWpPRCw0REFBeUQ7QUFDekQsNERBQXNFO0FBRXRFLDZDQUFpRDtBQWFqRCxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ25DLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLElBQXdCLEVBQ3hCLE9BQXVCO0lBRXZCLE1BQU0sT0FBTyxHQUFZO1FBQ3ZCLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQztL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QUFDO1FBQ3pDLG9CQUFvQjtRQUNwQixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixzQkFBc0IsRUFBRSxZQUFZO1FBQ3BDLCtCQUErQixFQUFFLHFCQUFxQjtLQUN2RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IsIGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuaW1wb3J0IHsgUGF0dGVybk1hdGNoZXIsIFBhdHRlcm4gfSBmcm9tICdAYml0Z28vdXR4by1jb3JlL2Rlc2NyaXB0b3InO1xuXG5pbXBvcnQgeyBnZXRVbnNwZW5kYWJsZUtleSB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFN0YWtpbmdEZXNjcmlwdG9yID0ge1xuICBzdGFrZXJLZXk6IEJ1ZmZlcjtcbiAgZmluYWxpdHlQcm92aWRlcktleXM6IEJ1ZmZlcltdO1xuICBjb3ZlbmFudEtleXM6IEJ1ZmZlcltdO1xuICBjb3ZlbmFudFRocmVzaG9sZDogbnVtYmVyO1xuICBzdGFraW5nVGltZUxvY2s6IG51bWJlcjtcbiAgc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZTogYXN0Lk1pbmlzY3JpcHROb2RlO1xuICB1bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZTogYXN0Lk1pbmlzY3JpcHROb2RlO1xuICB0aW1lbG9ja01pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBwYXJzZU11bHRpKG11bHRpOiB1bmtub3duKTogW251bWJlciwgc3RyaW5nW11dIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG11bHRpKSB8fCBtdWx0aS5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG11bHRpIHN0cnVjdHVyZTogbm90IGFuIGFycmF5IG9yIGVtcHR5Jyk7XG4gIH1cbiAgY29uc3QgW3RocmVzaG9sZCwgLi4ua2V5c10gPSBtdWx0aTtcbiAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG11bHRpIHN0cnVjdHVyZTogdGhyZXNob2xkIGlzIG5vdCBhIG51bWJlcicpO1xuICB9XG4gIGlmICgha2V5cy5ldmVyeSgoaykgPT4gdHlwZW9mIGsgPT09ICdzdHJpbmcnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtdWx0aSBzdHJ1Y3R1cmU6IG5vdCBhbGwga2V5cyBhcmUgc3RyaW5ncycpO1xuICB9XG4gIHJldHVybiBbdGhyZXNob2xkLCBrZXlzXTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbmlsYXRlcmFsVGltZWxvY2soXG4gIG5vZGU6IGFzdC5NaW5pc2NyaXB0Tm9kZSxcbiAgbWF0Y2hlcjogUGF0dGVybk1hdGNoZXJcbik6IHsga2V5OiBzdHJpbmc7IHRpbWVsb2NrOiBudW1iZXIgfSB8IG51bGwge1xuICBjb25zdCBwYXR0ZXJuOiBQYXR0ZXJuID0ge1xuICAgIGFuZF92OiBbeyAndjpwayc6IHsgJHZhcjogJ2tleScgfSB9LCB7IG9sZGVyOiB7ICR2YXI6ICd0aW1lbG9jaycgfSB9XSxcbiAgfTtcbiAgY29uc3QgbWF0Y2ggPSBtYXRjaGVyLm1hdGNoKG5vZGUsIHBhdHRlcm4pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiBtYXRjaC5rZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdrZXkgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2gudGltZWxvY2sgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0aW1lbG9jayBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cbiAgcmV0dXJuIHsga2V5OiBtYXRjaC5rZXksIHRpbWVsb2NrOiBtYXRjaC50aW1lbG9jayB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVNsYXNoaW5nTm9kZShcbiAgc2xhc2hpbmdOb2RlOiBhc3QuTWluaXNjcmlwdE5vZGUsXG4gIG1hdGNoZXI6IFBhdHRlcm5NYXRjaGVyXG4pOiB7XG4gIHN0YWtlcktleTogc3RyaW5nO1xuICBmaW5hbGl0eVByb3ZpZGVyS2V5czogQnVmZmVyW107XG4gIGNvdmVuYW50S2V5czogQnVmZmVyW107XG4gIGNvdmVuYW50VGhyZXNob2xkOiBudW1iZXI7XG59IHtcbiAgY29uc3Qgc2xhc2hpbmdQYXR0ZXJuOiBQYXR0ZXJuID0ge1xuICAgIGFuZF92OiBbXG4gICAgICB7XG4gICAgICAgIGFuZF92OiBbeyAndjpwayc6IHsgJHZhcjogJ3N0YWtlcktleScgfSB9LCB7ICR2YXI6ICdmaW5hbGl0eVByb3ZpZGVyS2V5T3JNdWx0aScgfV0sXG4gICAgICB9LFxuICAgICAgeyBtdWx0aV9hOiB7ICR2YXI6ICdjb3ZlbmFudE11bHRpJyB9IH0sXG4gICAgXSxcbiAgfTtcblxuICBjb25zdCBzbGFzaGluZ01hdGNoID0gbWF0Y2hlci5tYXRjaChzbGFzaGluZ05vZGUsIHNsYXNoaW5nUGF0dGVybik7XG4gIGlmICghc2xhc2hpbmdNYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2xhc2hpbmcgbm9kZSBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHNsYXNoaW5nTWF0Y2guc3Rha2VyS2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignc3Rha2VyS2V5IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGNvbnN0IFtjb3ZlbmFudFRocmVzaG9sZCwgY292ZW5hbnRLZXlTdHJpbmdzXSA9IHBhcnNlTXVsdGkoc2xhc2hpbmdNYXRjaC5jb3ZlbmFudE11bHRpKTtcbiAgY29uc3QgY292ZW5hbnRLZXlzID0gY292ZW5hbnRLZXlTdHJpbmdzLm1hcCgoaykgPT4gQnVmZmVyLmZyb20oaywgJ2hleCcpKTtcblxuICBsZXQgZmluYWxpdHlQcm92aWRlcktleXM6IEJ1ZmZlcltdO1xuICBjb25zdCBmcEtleU9yTXVsdGkgPSBzbGFzaGluZ01hdGNoLmZpbmFsaXR5UHJvdmlkZXJLZXlPck11bHRpIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZTtcbiAgaWYgKCd2OnBrJyBpbiBmcEtleU9yTXVsdGkpIHtcbiAgICBmaW5hbGl0eVByb3ZpZGVyS2V5cyA9IFtCdWZmZXIuZnJvbShmcEtleU9yTXVsdGlbJ3Y6cGsnXSwgJ2hleCcpXTtcbiAgfSBlbHNlIGlmICgndjptdWx0aV9hJyBpbiBmcEtleU9yTXVsdGkpIHtcbiAgICBjb25zdCBbdGhyZXNob2xkLCBrZXlTdHJpbmdzXSA9IHBhcnNlTXVsdGkoZnBLZXlPck11bHRpWyd2Om11bHRpX2EnXSk7XG4gICAgaWYgKHRocmVzaG9sZCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaW5hbGl0eSBwcm92aWRlciBtdWx0aSB0aHJlc2hvbGQgbXVzdCBiZSAxJyk7XG4gICAgfVxuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzID0ga2V5U3RyaW5ncy5tYXAoKGspID0+IEJ1ZmZlci5mcm9tKGssICdoZXgnKSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpbmFsaXR5IHByb3ZpZGVyIGtleSBzdHJ1Y3R1cmUnKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3Rha2VyS2V5OiBzbGFzaGluZ01hdGNoLnN0YWtlcktleSxcbiAgICBmaW5hbGl0eVByb3ZpZGVyS2V5cyxcbiAgICBjb3ZlbmFudEtleXMsXG4gICAgY292ZW5hbnRUaHJlc2hvbGQsXG4gIH07XG59XG5cbi8qKlxuICogQHJldHVybiBwYXJzZWQgc3Rha2luZyBkZXNjcmlwdG9yIGNvbXBvbmVudHMgb3IgbnVsbCBpZiB0aGUgZGVzY3JpcHRvciBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgc3Rha2luZyBwYXR0ZXJuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdGFraW5nRGVzY3JpcHRvcihkZXNjcmlwdG9yOiBEZXNjcmlwdG9yIHwgYXN0LkRlc2NyaXB0b3JOb2RlKTogUGFyc2VkU3Rha2luZ0Rlc2NyaXB0b3IgfCBudWxsIHtcbiAgY29uc3QgcGF0dGVybjogUGF0dGVybiA9IHtcbiAgICB0cjogW1xuICAgICAgZ2V0VW5zcGVuZGFibGVLZXkoKSxcbiAgICAgIFt7ICR2YXI6ICdzbGFzaGluZ01pbmlzY3JpcHROb2RlJyB9LCBbeyAkdmFyOiAndW5ib25kaW5nTWluaXNjcmlwdE5vZGUnIH0sIHsgJHZhcjogJ3RpbWVsb2NrTWluaXNjcmlwdE5vZGUnIH1dXSxcbiAgICBdLFxuICB9O1xuXG4gIGNvbnN0IG1hdGNoZXIgPSBuZXcgUGF0dGVybk1hdGNoZXIoKTtcbiAgY29uc3QgZGVzY3JpcHRvck5vZGUgPSBkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGVzY3JpcHRvciA/IGFzdC5mcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yKSA6IGRlc2NyaXB0b3I7XG4gIGNvbnN0IHJlc3VsdCA9IG1hdGNoZXIubWF0Y2goZGVzY3JpcHRvck5vZGUsIHBhdHRlcm4pO1xuXG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzbGFzaGluZ05vZGUgPSByZXN1bHQuc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZSBhcyBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIGNvbnN0IHVuYm9uZGluZ05vZGUgPSByZXN1bHQudW5ib25kaW5nTWluaXNjcmlwdE5vZGUgYXMgYXN0Lk1pbmlzY3JpcHROb2RlO1xuICBjb25zdCB0aW1lbG9ja05vZGUgPSByZXN1bHQudGltZWxvY2tNaW5pc2NyaXB0Tm9kZSBhcyBhc3QuTWluaXNjcmlwdE5vZGU7XG5cbiAgLy8gVmVyaWZ5IHNsYXNoaW5nIG5vZGUgc2hhcGU6IGFuZF92KFthbmRfdihbcGssIHBrL211bHRpX2FdKSwgbXVsdGlfYV0pXG4gIGNvbnN0IHtcbiAgICBzdGFrZXJLZXk6IHN0YWtlcktleTEsXG4gICAgZmluYWxpdHlQcm92aWRlcktleXMsXG4gICAgY292ZW5hbnRLZXlzLFxuICAgIGNvdmVuYW50VGhyZXNob2xkLFxuICB9ID0gcGFyc2VTbGFzaGluZ05vZGUoc2xhc2hpbmdOb2RlLCBtYXRjaGVyKTtcblxuICAvLyBWZXJpZnkgdW5ib25kaW5nIG5vZGUgc2hhcGU6IGFuZF92KFtwaywgbXVsdGlfYV0pXG4gIGNvbnN0IHVuYm9uZGluZ1BhdHRlcm46IFBhdHRlcm4gPSB7XG4gICAgYW5kX3Y6IFt7ICd2OnBrJzogeyAkdmFyOiAnc3Rha2VyS2V5MicgfSB9LCB7IG11bHRpX2E6IHsgJHZhcjogJ2NvdmVuYW50TXVsdGkyJyB9IH1dLFxuICB9O1xuXG4gIGNvbnN0IHVuYm9uZGluZ01hdGNoID0gbWF0Y2hlci5tYXRjaCh1bmJvbmRpbmdOb2RlLCB1bmJvbmRpbmdQYXR0ZXJuKTtcbiAgaWYgKCF1bmJvbmRpbmdNYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5ib25kaW5nIG5vZGUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcGF0dGVybicpO1xuICB9XG5cbiAgLy8gVmVyaWZ5IHVuYm9uZGluZyB0aW1lbG9jayBub2RlIHNoYXBlOiBhbmRfdihbcGssIG9sZGVyXSlcbiAgY29uc3QgdW5pbGF0ZXJhbFRpbWVsb2NrID0gcGFyc2VVbmlsYXRlcmFsVGltZWxvY2sodGltZWxvY2tOb2RlLCBtYXRjaGVyKTtcbiAgaWYgKCF1bmlsYXRlcmFsVGltZWxvY2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsga2V5OiBzdGFrZXJLZXkzLCB0aW1lbG9jazogc3Rha2luZ1RpbWVMb2NrIH0gPSB1bmlsYXRlcmFsVGltZWxvY2s7XG5cbiAgLy8gVmVyaWZ5IGFsbCBzdGFrZXIga2V5cyBhcmUgdGhlIHNhbWVcbiAgaWYgKHN0YWtlcktleTEgIT09IHVuYm9uZGluZ01hdGNoLnN0YWtlcktleTIgfHwgdW5ib25kaW5nTWF0Y2guc3Rha2VyS2V5MiAhPT0gc3Rha2VyS2V5Mykge1xuICAgIHRocm93IG5ldyBFcnJvcignU3Rha2VyIGtleXMgbXVzdCBiZSBpZGVudGljYWwgYWNyb3NzIGFsbCBub2RlcycpO1xuICB9XG5cbiAgY29uc3Qgc3Rha2VyS2V5ID0gQnVmZmVyLmZyb20oc3Rha2VyS2V5MSwgJ2hleCcpO1xuXG4gIHJldHVybiB7XG4gICAgc3Rha2VyS2V5LFxuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgIGNvdmVuYW50S2V5cyxcbiAgICBjb3ZlbmFudFRocmVzaG9sZCxcbiAgICBzdGFraW5nVGltZUxvY2ssXG4gICAgc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZTogc2xhc2hpbmdOb2RlLFxuICAgIHVuYm9uZGluZ01pbmlzY3JpcHROb2RlOiB1bmJvbmRpbmdOb2RlLFxuICAgIHRpbWVsb2NrTWluaXNjcmlwdE5vZGU6IHRpbWVsb2NrTm9kZSxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgUGFyc2VkVW5ib25kaW5nRGVzY3JpcHRvciA9IHtcbiAgc3Rha2VyS2V5OiBCdWZmZXI7XG4gIGZpbmFsaXR5UHJvdmlkZXJLZXlzOiBCdWZmZXJbXTtcbiAgY292ZW5hbnRLZXlzOiBCdWZmZXJbXTtcbiAgY292ZW5hbnRUaHJlc2hvbGQ6IG51bWJlcjtcbiAgdW5ib25kaW5nVGltZUxvY2s6IG51bWJlcjtcbiAgc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZTogYXN0Lk1pbmlzY3JpcHROb2RlO1xuICB1bmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlOiBhc3QuTWluaXNjcmlwdE5vZGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVbmJvbmRpbmdEZXNjcmlwdG9yKFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yIHwgYXN0LkRlc2NyaXB0b3JOb2RlXG4pOiBQYXJzZWRVbmJvbmRpbmdEZXNjcmlwdG9yIHwgbnVsbCB7XG4gIGNvbnN0IHBhdHRlcm46IFBhdHRlcm4gPSB7XG4gICAgdHI6IFtnZXRVbnNwZW5kYWJsZUtleSgpLCBbeyAkdmFyOiAnc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZScgfSwgeyAkdmFyOiAndW5ib25kaW5nVGltZWxvY2tNaW5pc2NyaXB0Tm9kZScgfV1dLFxuICB9O1xuXG4gIGNvbnN0IG1hdGNoZXIgPSBuZXcgUGF0dGVybk1hdGNoZXIoKTtcbiAgY29uc3QgZGVzY3JpcHRvck5vZGUgPSBkZXNjcmlwdG9yIGluc3RhbmNlb2YgRGVzY3JpcHRvciA/IGFzdC5mcm9tRGVzY3JpcHRvcihkZXNjcmlwdG9yKSA6IGRlc2NyaXB0b3I7XG4gIGNvbnN0IHJlc3VsdCA9IG1hdGNoZXIubWF0Y2goZGVzY3JpcHRvck5vZGUsIHBhdHRlcm4pO1xuXG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzbGFzaGluZ05vZGUgPSByZXN1bHQuc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZSBhcyBhc3QuTWluaXNjcmlwdE5vZGU7XG4gIGNvbnN0IHVuYm9uZGluZ1RpbWVsb2NrTm9kZSA9IHJlc3VsdC51bmJvbmRpbmdUaW1lbG9ja01pbmlzY3JpcHROb2RlIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZTtcblxuICBjb25zdCB7XG4gICAgc3Rha2VyS2V5OiBzdGFrZXJLZXkxLFxuICAgIGZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgIGNvdmVuYW50S2V5cyxcbiAgICBjb3ZlbmFudFRocmVzaG9sZCxcbiAgfSA9IHBhcnNlU2xhc2hpbmdOb2RlKHNsYXNoaW5nTm9kZSwgbWF0Y2hlcik7XG5cbiAgY29uc3QgdW5pbGF0ZXJhbFRpbWVsb2NrID0gcGFyc2VVbmlsYXRlcmFsVGltZWxvY2sodW5ib25kaW5nVGltZWxvY2tOb2RlLCBtYXRjaGVyKTtcbiAgaWYgKCF1bmlsYXRlcmFsVGltZWxvY2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHsga2V5OiBzdGFrZXJLZXkyLCB0aW1lbG9jazogdW5ib25kaW5nVGltZUxvY2sgfSA9IHVuaWxhdGVyYWxUaW1lbG9jaztcblxuICBpZiAoc3Rha2VyS2V5MSAhPT0gc3Rha2VyS2V5Mikge1xuICAgIHRocm93IG5ldyBFcnJvcignU3Rha2VyIGtleXMgbXVzdCBiZSBpZGVudGljYWwgYWNyb3NzIGFsbCBub2RlcycpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFrZXJLZXk6IEJ1ZmZlci5mcm9tKHN0YWtlcktleTEsICdoZXgnKSxcbiAgICBmaW5hbGl0eVByb3ZpZGVyS2V5cyxcbiAgICBjb3ZlbmFudEtleXMsXG4gICAgY292ZW5hbnRUaHJlc2hvbGQsXG4gICAgdW5ib25kaW5nVGltZUxvY2ssXG4gICAgc2xhc2hpbmdNaW5pc2NyaXB0Tm9kZTogc2xhc2hpbmdOb2RlLFxuICAgIHVuYm9uZGluZ1RpbWVsb2NrTWluaXNjcmlwdE5vZGU6IHVuYm9uZGluZ1RpbWVsb2NrTm9kZSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import * as t from 'io-ts';
2
+ import { PartialSig } from 'bip174/src/lib/interfaces';
3
+ /** As returned by https://babylon.nodes.guru/api#/Query/BTCDelegation */
4
+ export declare const Signature: t.TypeC<{
5
+ pk: t.StringC;
6
+ sig: t.StringC;
7
+ }>;
8
+ /** As returned by https://babylon.nodes.guru/api#/Query/BTCDelegation */
9
+ export declare const UndelegationResponse: t.TypeC<{
10
+ /** Network-formatted transaction hex */
11
+ unbonding_tx_hex: t.StringC;
12
+ /** List of signatures for the unbonding covenant */
13
+ covenant_unbonding_sig_list: t.ArrayC<t.TypeC<{
14
+ pk: t.StringC;
15
+ sig: t.StringC;
16
+ }>>;
17
+ }>;
18
+ export type UndelegationResponse = t.TypeOf<typeof UndelegationResponse>;
19
+ /** Converts a gRPC signature to a PartialSig as used by bitcoinjs-lib and utxo-lib */
20
+ export declare function toPartialSig(grpcSig: {
21
+ pk: string;
22
+ sig: string;
23
+ }): PartialSig;
24
+ //# sourceMappingURL=UndelegationResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UndelegationResponse.d.ts","sourceRoot":"","sources":["../../../../src/babylon/undelegation/UndelegationResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,yEAAyE;AACzE,eAAO,MAAM,SAAS;;;EAAuD,CAAC;AAE9E,yEAAyE;AACzE,eAAO,MAAM,oBAAoB;IAE7B,wCAAwC;;IAExC,oDAAoD;;;;;EAIvD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzE,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAK7E"}
@@ -0,0 +1,55 @@
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.UndelegationResponse = exports.Signature = void 0;
37
+ exports.toPartialSig = toPartialSig;
38
+ const t = __importStar(require("io-ts"));
39
+ /** As returned by https://babylon.nodes.guru/api#/Query/BTCDelegation */
40
+ exports.Signature = t.type({ pk: t.string, sig: t.string }, 'Signature');
41
+ /** As returned by https://babylon.nodes.guru/api#/Query/BTCDelegation */
42
+ exports.UndelegationResponse = t.type({
43
+ /** Network-formatted transaction hex */
44
+ unbonding_tx_hex: t.string,
45
+ /** List of signatures for the unbonding covenant */
46
+ covenant_unbonding_sig_list: t.array(exports.Signature),
47
+ }, 'UndelegationResponse');
48
+ /** Converts a gRPC signature to a PartialSig as used by bitcoinjs-lib and utxo-lib */
49
+ function toPartialSig(grpcSig) {
50
+ return {
51
+ pubkey: Buffer.from(grpcSig.pk, 'hex'),
52
+ signature: Buffer.from(grpcSig.sig, 'base64'),
53
+ };
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5kZWxlZ2F0aW9uUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFieWxvbi91bmRlbGVnYXRpb24vVW5kZWxlZ2F0aW9uUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLG9DQUtDO0FBekJELHlDQUEyQjtBQUczQix5RUFBeUU7QUFDNUQsUUFBQSxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFOUUseUVBQXlFO0FBQzVELFFBQUEsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDeEM7SUFDRSx3Q0FBd0M7SUFDeEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDMUIsb0RBQW9EO0lBQ3BELDJCQUEyQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQVMsQ0FBQztDQUNoRCxFQUNELHNCQUFzQixDQUN2QixDQUFDO0FBSUYsc0ZBQXNGO0FBQ3RGLFNBQWdCLFlBQVksQ0FBQyxPQUFvQztJQUMvRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7UUFDdEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7S0FDOUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IFBhcnRpYWxTaWcgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcblxuLyoqIEFzIHJldHVybmVkIGJ5IGh0dHBzOi8vYmFieWxvbi5ub2Rlcy5ndXJ1L2FwaSMvUXVlcnkvQlRDRGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFNpZ25hdHVyZSA9IHQudHlwZSh7IHBrOiB0LnN0cmluZywgc2lnOiB0LnN0cmluZyB9LCAnU2lnbmF0dXJlJyk7XG5cbi8qKiBBcyByZXR1cm5lZCBieSBodHRwczovL2JhYnlsb24ubm9kZXMuZ3VydS9hcGkjL1F1ZXJ5L0JUQ0RlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBVbmRlbGVnYXRpb25SZXNwb25zZSA9IHQudHlwZShcbiAge1xuICAgIC8qKiBOZXR3b3JrLWZvcm1hdHRlZCB0cmFuc2FjdGlvbiBoZXggKi9cbiAgICB1bmJvbmRpbmdfdHhfaGV4OiB0LnN0cmluZyxcbiAgICAvKiogTGlzdCBvZiBzaWduYXR1cmVzIGZvciB0aGUgdW5ib25kaW5nIGNvdmVuYW50ICovXG4gICAgY292ZW5hbnRfdW5ib25kaW5nX3NpZ19saXN0OiB0LmFycmF5KFNpZ25hdHVyZSksXG4gIH0sXG4gICdVbmRlbGVnYXRpb25SZXNwb25zZSdcbik7XG5cbmV4cG9ydCB0eXBlIFVuZGVsZWdhdGlvblJlc3BvbnNlID0gdC5UeXBlT2Y8dHlwZW9mIFVuZGVsZWdhdGlvblJlc3BvbnNlPjtcblxuLyoqIENvbnZlcnRzIGEgZ1JQQyBzaWduYXR1cmUgdG8gYSBQYXJ0aWFsU2lnIGFzIHVzZWQgYnkgYml0Y29pbmpzLWxpYiBhbmQgdXR4by1saWIgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcnRpYWxTaWcoZ3JwY1NpZzogeyBwazogc3RyaW5nOyBzaWc6IHN0cmluZyB9KTogUGFydGlhbFNpZyB7XG4gIHJldHVybiB7XG4gICAgcHVia2V5OiBCdWZmZXIuZnJvbShncnBjU2lnLnBrLCAnaGV4JyksXG4gICAgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShncnBjU2lnLnNpZywgJ2Jhc2U2NCcpLFxuICB9O1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './unbonding';
2
+ export * from './UndelegationResponse';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/babylon/undelegation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,19 @@
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("./unbonding"), exports);
18
+ __exportStar(require("./UndelegationResponse"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYmFieWxvbi91bmRlbGVnYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1Qix5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3VuYm9uZGluZyc7XG5leHBvcnQgKiBmcm9tICcuL1VuZGVsZWdhdGlvblJlc3BvbnNlJztcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import * as utxolib from '@bitgo/utxo-lib';
2
+ import { PartialSig, WitnessUtxo } from 'bip174/src/lib/interfaces';
3
+ import { Descriptor } from '@bitgo/wasm-miniscript';
4
+ /**
5
+ * Asserts that the provided signatures are valid for the given PSBT input.
6
+ */
7
+ export declare function assertValidSignatures(psbt: utxolib.bitgo.UtxoPsbt, inputIndex: number, signatures: PartialSig[]): void;
8
+ /**
9
+ * @return unsigned PSBT for an unbonding transaction
10
+ */
11
+ export declare function toUnbondingPsbt(tx: utxolib.bitgo.UtxoTransaction<bigint>, witnessUtxo: WitnessUtxo, stakingDescriptor: Descriptor, network: utxolib.Network): utxolib.bitgo.UtxoPsbt;
12
+ /**
13
+ * @return PSBT for an unbonding transaction with signatures
14
+ */
15
+ export declare function toUnbondingPsbtWithSignatures(tx: utxolib.bitgo.UtxoTransaction<bigint>, witnessUtxo: WitnessUtxo, stakingDescriptor: Descriptor, signatures: PartialSig[], network: utxolib.Network): utxolib.bitgo.UtxoPsbt;
16
+ //# sourceMappingURL=unbonding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unbonding.d.ts","sourceRoot":"","sources":["../../../../src/babylon/undelegation/unbonding.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAC;AAiBrE;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAC5B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,EAAE,GACvB,IAAI,CAON;AAQD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EACzC,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,UAAU,EAC7B,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CA4BxB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EACzC,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,UAAU,EAC7B,UAAU,EAAE,UAAU,EAAE,EACxB,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAMxB"}
@@ -0,0 +1,111 @@
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.assertValidSignatures = assertValidSignatures;
40
+ exports.toUnbondingPsbt = toUnbondingPsbt;
41
+ exports.toUnbondingPsbtWithSignatures = toUnbondingPsbtWithSignatures;
42
+ const assert_1 = __importDefault(require("assert"));
43
+ const utxolib = __importStar(require("@bitgo/utxo-lib"));
44
+ const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
45
+ const descriptor_1 = require("@bitgo/utxo-core/descriptor");
46
+ const parseDescriptor_1 = require("../parseDescriptor");
47
+ /**
48
+ * Adds covenant signatures to a PSBT input.
49
+ */
50
+ function addCovenantSignatures(psbt, inputIndex, signatures) {
51
+ const input = psbt.data.inputs[inputIndex];
52
+ (0, assert_1.default)(input.tapLeafScript, 'Input must have tapLeafScript');
53
+ (0, assert_1.default)(input.tapLeafScript.length === 1, 'Input must have exactly one tapLeafScript');
54
+ const [{ controlBlock, script }] = input.tapLeafScript;
55
+ const leafHash = utxolib.taproot.getTapleafHash(utxolib.ecc, controlBlock, script);
56
+ psbt.updateInput(inputIndex, { tapScriptSig: signatures.map((s) => ({ ...s, leafHash })) });
57
+ }
58
+ /**
59
+ * Asserts that the provided signatures are valid for the given PSBT input.
60
+ */
61
+ function assertValidSignatures(psbt, inputIndex, signatures) {
62
+ signatures.forEach((s) => {
63
+ (0, assert_1.default)(psbt.validateTaprootSignaturesOfInput(inputIndex, s.pubkey), `Signature validation failed for ${s.pubkey.toString('hex')}`);
64
+ });
65
+ }
66
+ function getUnbondingScript(stakingDescriptor) {
67
+ const parsedDescriptor = (0, parseDescriptor_1.parseStakingDescriptor)(stakingDescriptor);
68
+ (0, assert_1.default)(parsedDescriptor, 'Invalid staking descriptor');
69
+ return wasm_miniscript_1.Miniscript.fromString(wasm_miniscript_1.ast.formatNode(parsedDescriptor.unbondingMiniscriptNode), 'tap');
70
+ }
71
+ /**
72
+ * @return unsigned PSBT for an unbonding transaction
73
+ */
74
+ function toUnbondingPsbt(tx, witnessUtxo, stakingDescriptor, network) {
75
+ const unbondingScript = getUnbondingScript(stakingDescriptor);
76
+ const psbt = new utxolib.Psbt({ network });
77
+ psbt.setVersion(tx.version);
78
+ psbt.setLocktime(tx.locktime);
79
+ psbt.addOutputs(tx.outs.map((output) => ({
80
+ script: output.script,
81
+ value: BigInt(output.value),
82
+ })));
83
+ (0, assert_1.default)(tx.ins.length === 1);
84
+ const input = tx.ins[0];
85
+ psbt.addInput({
86
+ hash: input.hash,
87
+ index: input.index,
88
+ sequence: input.sequence,
89
+ witnessUtxo,
90
+ });
91
+ const wrappedPsbt = (0, descriptor_1.toWrappedPsbt)(psbt);
92
+ wrappedPsbt.updateInputWithDescriptor(0, stakingDescriptor);
93
+ const unwrapped = (0, descriptor_1.toUtxoPsbt)(wrappedPsbt, network);
94
+ (0, assert_1.default)(unwrapped.data.inputs.length === 1, 'Unbonding transaction must have exactly one input');
95
+ const unwrappedInputData = unwrapped.data.inputs[0];
96
+ (0, assert_1.default)(unwrappedInputData.tapLeafScript);
97
+ const unwrappedUnbond = (0, descriptor_1.findTapLeafScript)(unwrappedInputData.tapLeafScript, unbondingScript);
98
+ unwrappedInputData.tapLeafScript = [unwrappedUnbond];
99
+ return unwrapped;
100
+ }
101
+ /**
102
+ * @return PSBT for an unbonding transaction with signatures
103
+ */
104
+ function toUnbondingPsbtWithSignatures(tx, witnessUtxo, stakingDescriptor, signatures, network) {
105
+ const psbt = toUnbondingPsbt(tx, witnessUtxo, stakingDescriptor, network);
106
+ (0, assert_1.default)(psbt.data.inputs.length === 1, 'Unbonding transaction must have exactly one input');
107
+ addCovenantSignatures(psbt, 0, signatures);
108
+ assertValidSignatures(psbt, 0, signatures);
109
+ return psbt;
110
+ }
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib25kaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JhYnlsb24vdW5kZWxlZ2F0aW9uL3VuYm9uZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxzREFXQztBQVdELDBDQWlDQztBQUtELHNFQVlDO0FBaEdELG9EQUE0QjtBQUU1Qix5REFBMkM7QUFFM0MsNERBQXFFO0FBQ3JFLDREQUEyRjtBQUUzRix3REFBNEQ7QUFFNUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLElBQTRCLEVBQUUsVUFBa0IsRUFBRSxVQUF3QjtJQUN2RyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzdELElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztJQUN0RixNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxJQUE0QixFQUM1QixVQUFrQixFQUNsQixVQUF3QjtJQUV4QixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDdkIsSUFBQSxnQkFBTSxFQUNKLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUMzRCxtQ0FBbUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDOUQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsaUJBQTZCO0lBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSx3Q0FBc0IsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25FLElBQUEsZ0JBQU0sRUFBQyxnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sNEJBQVUsQ0FBQyxVQUFVLENBQUMscUJBQUcsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQzdCLEVBQXlDLEVBQ3pDLFdBQXdCLEVBQ3hCLGlCQUE2QixFQUM3QixPQUF3QjtJQUV4QixNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FDYixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0tBQzVCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDRixJQUFBLGdCQUFNLEVBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7UUFDeEIsV0FBVztLQUNaLENBQUMsQ0FBQztJQUNILE1BQU0sV0FBVyxHQUFHLElBQUEsMEJBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxXQUFXLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBQSx1QkFBVSxFQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxJQUFBLGdCQUFNLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsSUFBQSxnQkFBTSxFQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sZUFBZSxHQUFHLElBQUEsOEJBQWlCLEVBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdGLGtCQUFrQixDQUFDLGFBQWEsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDZCQUE2QixDQUMzQyxFQUF5QyxFQUN6QyxXQUF3QixFQUN4QixpQkFBNkIsRUFDN0IsVUFBd0IsRUFDeEIsT0FBd0I7SUFFeEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUUsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsbURBQW1ELENBQUMsQ0FBQztJQUMzRixxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0MsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBQYXJ0aWFsU2lnLCBXaXRuZXNzVXR4byB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGVzY3JpcHRvciwgTWluaXNjcmlwdCwgYXN0IH0gZnJvbSAnQGJpdGdvL3dhc20tbWluaXNjcmlwdCc7XG5pbXBvcnQgeyBmaW5kVGFwTGVhZlNjcmlwdCwgdG9VdHhvUHNidCwgdG9XcmFwcGVkUHNidCB9IGZyb20gJ0BiaXRnby91dHhvLWNvcmUvZGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IHBhcnNlU3Rha2luZ0Rlc2NyaXB0b3IgfSBmcm9tICcuLi9wYXJzZURlc2NyaXB0b3InO1xuXG4vKipcbiAqIEFkZHMgY292ZW5hbnQgc2lnbmF0dXJlcyB0byBhIFBTQlQgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIGFkZENvdmVuYW50U2lnbmF0dXJlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIHNpZ25hdHVyZXM6IFBhcnRpYWxTaWdbXSk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG4gIGFzc2VydChpbnB1dC50YXBMZWFmU2NyaXB0LCAnSW5wdXQgbXVzdCBoYXZlIHRhcExlYWZTY3JpcHQnKTtcbiAgYXNzZXJ0KGlucHV0LnRhcExlYWZTY3JpcHQubGVuZ3RoID09PSAxLCAnSW5wdXQgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHRhcExlYWZTY3JpcHQnKTtcbiAgY29uc3QgW3sgY29udHJvbEJsb2NrLCBzY3JpcHQgfV0gPSBpbnB1dC50YXBMZWFmU2NyaXB0O1xuICBjb25zdCBsZWFmSGFzaCA9IHV0eG9saWIudGFwcm9vdC5nZXRUYXBsZWFmSGFzaCh1dHhvbGliLmVjYywgY29udHJvbEJsb2NrLCBzY3JpcHQpO1xuICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgdGFwU2NyaXB0U2lnOiBzaWduYXR1cmVzLm1hcCgocykgPT4gKHsgLi4ucywgbGVhZkhhc2ggfSkpIH0pO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgcHJvdmlkZWQgc2lnbmF0dXJlcyBhcmUgdmFsaWQgZm9yIHRoZSBnaXZlbiBQU0JUIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRTaWduYXR1cmVzKFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHNpZ25hdHVyZXM6IFBhcnRpYWxTaWdbXVxuKTogdm9pZCB7XG4gIHNpZ25hdHVyZXMuZm9yRWFjaCgocykgPT4ge1xuICAgIGFzc2VydChcbiAgICAgIHBzYnQudmFsaWRhdGVUYXByb290U2lnbmF0dXJlc09mSW5wdXQoaW5wdXRJbmRleCwgcy5wdWJrZXkpLFxuICAgICAgYFNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtzLnB1YmtleS50b1N0cmluZygnaGV4Jyl9YFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRVbmJvbmRpbmdTY3JpcHQoc3Rha2luZ0Rlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiBNaW5pc2NyaXB0IHtcbiAgY29uc3QgcGFyc2VkRGVzY3JpcHRvciA9IHBhcnNlU3Rha2luZ0Rlc2NyaXB0b3Ioc3Rha2luZ0Rlc2NyaXB0b3IpO1xuICBhc3NlcnQocGFyc2VkRGVzY3JpcHRvciwgJ0ludmFsaWQgc3Rha2luZyBkZXNjcmlwdG9yJyk7XG4gIHJldHVybiBNaW5pc2NyaXB0LmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUocGFyc2VkRGVzY3JpcHRvci51bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSksICd0YXAnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlQgZm9yIGFuIHVuYm9uZGluZyB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmJvbmRpbmdQc2J0KFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgd2l0bmVzc1V0eG86IFdpdG5lc3NVdHhvLFxuICBzdGFraW5nRGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHtcbiAgY29uc3QgdW5ib25kaW5nU2NyaXB0ID0gZ2V0VW5ib25kaW5nU2NyaXB0KHN0YWtpbmdEZXNjcmlwdG9yKTtcbiAgY29uc3QgcHNidCA9IG5ldyB1dHhvbGliLlBzYnQoeyBuZXR3b3JrIH0pO1xuICBwc2J0LnNldFZlcnNpb24odHgudmVyc2lvbik7XG4gIHBzYnQuc2V0TG9ja3RpbWUodHgubG9ja3RpbWUpO1xuICBwc2J0LmFkZE91dHB1dHMoXG4gICAgdHgub3V0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBCaWdJbnQob3V0cHV0LnZhbHVlKSxcbiAgICB9KSlcbiAgKTtcbiAgYXNzZXJ0KHR4Lmlucy5sZW5ndGggPT09IDEpO1xuICBjb25zdCBpbnB1dCA9IHR4Lmluc1swXTtcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogaW5wdXQuaGFzaCxcbiAgICBpbmRleDogaW5wdXQuaW5kZXgsXG4gICAgc2VxdWVuY2U6IGlucHV0LnNlcXVlbmNlLFxuICAgIHdpdG5lc3NVdHhvLFxuICB9KTtcbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICB3cmFwcGVkUHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKDAsIHN0YWtpbmdEZXNjcmlwdG9yKTtcbiAgY29uc3QgdW53cmFwcGVkID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCwgbmV0d29yayk7XG4gIGFzc2VydCh1bndyYXBwZWQuZGF0YS5pbnB1dHMubGVuZ3RoID09PSAxLCAnVW5ib25kaW5nIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBpbnB1dCcpO1xuICBjb25zdCB1bndyYXBwZWRJbnB1dERhdGEgPSB1bndyYXBwZWQuZGF0YS5pbnB1dHNbMF07XG4gIGFzc2VydCh1bndyYXBwZWRJbnB1dERhdGEudGFwTGVhZlNjcmlwdCk7XG4gIGNvbnN0IHVud3JhcHBlZFVuYm9uZCA9IGZpbmRUYXBMZWFmU2NyaXB0KHVud3JhcHBlZElucHV0RGF0YS50YXBMZWFmU2NyaXB0LCB1bmJvbmRpbmdTY3JpcHQpO1xuICB1bndyYXBwZWRJbnB1dERhdGEudGFwTGVhZlNjcmlwdCA9IFt1bndyYXBwZWRVbmJvbmRdO1xuICByZXR1cm4gdW53cmFwcGVkO1xufVxuXG4vKipcbiAqIEByZXR1cm4gUFNCVCBmb3IgYW4gdW5ib25kaW5nIHRyYW5zYWN0aW9uIHdpdGggc2lnbmF0dXJlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmJvbmRpbmdQc2J0V2l0aFNpZ25hdHVyZXMoXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICB3aXRuZXNzVXR4bzogV2l0bmVzc1V0eG8sXG4gIHN0YWtpbmdEZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBzaWduYXR1cmVzOiBQYXJ0aWFsU2lnW10sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHBzYnQgPSB0b1VuYm9uZGluZ1BzYnQodHgsIHdpdG5lc3NVdHhvLCBzdGFraW5nRGVzY3JpcHRvciwgbmV0d29yayk7XG4gIGFzc2VydChwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCA9PT0gMSwgJ1VuYm9uZGluZyB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgZXhhY3RseSBvbmUgaW5wdXQnKTtcbiAgYWRkQ292ZW5hbnRTaWduYXR1cmVzKHBzYnQsIDAsIHNpZ25hdHVyZXMpO1xuICBhc3NlcnRWYWxpZFNpZ25hdHVyZXMocHNidCwgMCwgc2lnbmF0dXJlcyk7XG4gIHJldHVybiBwc2J0O1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo/utxo-staking",
3
- "version": "1.18.1",
3
+ "version": "1.20.0",
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",
@@ -15,7 +15,7 @@
15
15
  "lint": "eslint --quiet .",
16
16
  "prepare": "npm run build",
17
17
  "coverage": "nyc -- npm run unit-test",
18
- "unit-test": "mocha --recursive test"
18
+ "unit-test": "mocha --recursive \"dist/test/**/*.js\""
19
19
  },
20
20
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
21
21
  "license": "MIT",
@@ -41,12 +41,14 @@
41
41
  ".ts"
42
42
  ]
43
43
  },
44
+ "type": "commonjs",
44
45
  "dependencies": {
45
46
  "@babylonlabs-io/babylon-proto-ts": "1.0.0",
46
47
  "@bitgo/babylonlabs-io-btc-staking-ts": "^2.4.0",
47
- "@bitgo/utxo-core": "^1.12.1",
48
+ "@bitgo/utxo-core": "^1.14.0",
48
49
  "@bitgo/utxo-lib": "^11.6.3",
49
50
  "@bitgo/wasm-miniscript": "2.0.0-beta.7",
51
+ "bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
50
52
  "bip322-js": "^2.0.0",
51
53
  "bitcoinjs-lib": "^6.1.7",
52
54
  "fp-ts": "^2.16.2",
@@ -56,5 +58,5 @@
56
58
  "devDependencies": {
57
59
  "yargs": "^17.7.2"
58
60
  },
59
- "gitHead": "5fa00d142055b7f97f7453491fa7208fac115062"
61
+ "gitHead": "7578ac177e3fe562d62fc74b7f6a04176f447839"
60
62
  }