@bitgo-beta/utxo-staking 1.1.1-beta.9 → 1.1.1-beta.900

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/dist/cjs/scripts/babylon-sync.d.ts +2 -0
  2. package/dist/cjs/scripts/babylon-sync.d.ts.map +1 -0
  3. package/dist/cjs/scripts/babylon-sync.js +126 -0
  4. package/dist/cjs/src/babylon/delegationMessage.d.ts +38 -0
  5. package/dist/cjs/src/babylon/delegationMessage.d.ts.map +1 -0
  6. package/dist/cjs/src/babylon/delegationMessage.js +285 -0
  7. package/dist/cjs/src/babylon/descriptor.d.ts +48 -0
  8. package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
  9. package/dist/cjs/src/babylon/descriptor.js +97 -0
  10. package/dist/cjs/src/babylon/index.d.ts +8 -0
  11. package/dist/cjs/src/babylon/index.d.ts.map +1 -0
  12. package/dist/cjs/src/babylon/index.js +51 -0
  13. package/dist/cjs/src/babylon/network.d.ts +7 -0
  14. package/dist/cjs/src/babylon/network.d.ts.map +1 -0
  15. package/dist/cjs/src/babylon/network.js +66 -0
  16. package/dist/cjs/src/babylon/params.mainnet.json +152 -0
  17. package/dist/cjs/src/babylon/params.testnet.json +212 -0
  18. package/dist/cjs/src/babylon/parseDescriptor.d.ts +26 -0
  19. package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
  20. package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
  21. package/dist/cjs/src/babylon/stakingManager.d.ts +6 -0
  22. package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
  23. package/dist/cjs/src/babylon/stakingManager.js +120 -0
  24. package/dist/cjs/src/babylon/stakingParams.d.ts +40 -0
  25. package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
  26. package/dist/cjs/src/babylon/stakingParams.js +132 -0
  27. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  28. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  29. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.js +55 -0
  30. package/dist/cjs/src/babylon/undelegation/index.d.ts +3 -0
  31. package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
  32. package/dist/{src → cjs/src/babylon/undelegation}/index.js +3 -4
  33. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts +16 -0
  34. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
  35. package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
  36. package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +4 -4
  37. package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
  38. package/dist/cjs/src/coreDao/descriptor.js +38 -0
  39. package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
  40. package/dist/{src → cjs/src}/coreDao/index.js +1 -1
  41. package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +5 -5
  42. package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
  43. package/dist/cjs/src/coreDao/opReturn.js +183 -0
  44. package/dist/{src → cjs/src}/coreDao/transaction.d.ts +16 -9
  45. package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
  46. package/dist/cjs/src/coreDao/transaction.js +34 -0
  47. package/dist/cjs/src/index.d.ts +3 -0
  48. package/dist/cjs/src/index.d.ts.map +1 -0
  49. package/dist/cjs/src/index.js +39 -0
  50. package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
  51. package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
  52. package/dist/cjs/test/unit/babylon/bug71.js +108 -0
  53. package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
  54. package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
  55. package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
  56. package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
  57. package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
  58. package/dist/cjs/test/unit/babylon/transactions.js +338 -0
  59. package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
  60. package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
  61. package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
  62. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
  63. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
  64. package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
  65. package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
  66. package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
  67. package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
  68. package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
  69. package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
  70. package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
  71. package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
  72. package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
  73. package/dist/cjs/test/unit/coreDao/utils.js +54 -0
  74. package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
  75. package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
  76. package/dist/cjs/test/unit/fixtures.utils.js +91 -0
  77. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  78. package/dist/esm/babylon/delegationMessage.d.ts +38 -0
  79. package/dist/esm/babylon/delegationMessage.d.ts.map +1 -0
  80. package/dist/esm/babylon/delegationMessage.js +239 -0
  81. package/dist/esm/babylon/descriptor.d.ts +48 -0
  82. package/dist/esm/babylon/descriptor.d.ts.map +1 -0
  83. package/dist/esm/babylon/descriptor.js +91 -0
  84. package/dist/esm/babylon/index.d.ts +8 -0
  85. package/dist/esm/babylon/index.d.ts.map +1 -0
  86. package/dist/esm/babylon/index.js +13 -0
  87. package/dist/esm/babylon/network.d.ts +7 -0
  88. package/dist/esm/babylon/network.d.ts.map +1 -0
  89. package/dist/esm/babylon/network.js +29 -0
  90. package/dist/esm/babylon/params.mainnet.json +152 -0
  91. package/dist/esm/babylon/params.testnet.json +212 -0
  92. package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
  93. package/dist/esm/babylon/parseDescriptor.d.ts.map +1 -0
  94. package/dist/esm/babylon/parseDescriptor.js +155 -0
  95. package/dist/esm/babylon/stakingManager.d.ts +6 -0
  96. package/dist/esm/babylon/stakingManager.d.ts.map +1 -0
  97. package/dist/esm/babylon/stakingManager.js +83 -0
  98. package/dist/esm/babylon/stakingParams.d.ts +40 -0
  99. package/dist/esm/babylon/stakingParams.d.ts.map +1 -0
  100. package/dist/esm/babylon/stakingParams.js +86 -0
  101. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  102. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  103. package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
  104. package/dist/esm/babylon/undelegation/index.d.ts +3 -0
  105. package/dist/esm/babylon/undelegation/index.d.ts.map +1 -0
  106. package/dist/esm/babylon/undelegation/index.js +3 -0
  107. package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
  108. package/dist/esm/babylon/undelegation/unbonding.d.ts.map +1 -0
  109. package/dist/esm/babylon/undelegation/unbonding.js +70 -0
  110. package/dist/esm/coreDao/descriptor.d.ts +18 -0
  111. package/dist/esm/coreDao/descriptor.d.ts.map +1 -0
  112. package/dist/esm/coreDao/descriptor.js +35 -0
  113. package/dist/esm/coreDao/index.d.ts +4 -0
  114. package/dist/esm/coreDao/index.js +4 -0
  115. package/dist/esm/coreDao/opReturn.d.ts +41 -0
  116. package/dist/esm/coreDao/opReturn.d.ts.map +1 -0
  117. package/dist/esm/coreDao/opReturn.js +175 -0
  118. package/dist/esm/coreDao/transaction.d.ts +28 -0
  119. package/dist/esm/coreDao/transaction.d.ts.map +1 -0
  120. package/dist/esm/coreDao/transaction.js +30 -0
  121. package/dist/esm/index.d.ts +3 -0
  122. package/dist/{src → esm}/index.d.ts.map +1 -1
  123. package/dist/esm/index.js +3 -0
  124. package/package.json +42 -12
  125. package/.eslintignore +0 -5
  126. package/.mocharc.yml +0 -8
  127. package/CHANGELOG.md +0 -24
  128. package/dist/src/coreDao/descriptor.d.ts.map +0 -1
  129. package/dist/src/coreDao/descriptor.js +0 -31
  130. package/dist/src/coreDao/opReturn.d.ts.map +0 -1
  131. package/dist/src/coreDao/opReturn.js +0 -175
  132. package/dist/src/coreDao/transaction.d.ts.map +0 -1
  133. package/dist/src/coreDao/transaction.js +0 -27
  134. package/dist/src/index.d.ts +0 -3
  135. package/dist/src/transaction.d.ts +0 -34
  136. package/dist/src/transaction.d.ts.map +0 -1
  137. package/dist/src/transaction.js +0 -55
  138. /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
  139. /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5kZWxlZ2F0aW9uUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYmFieWxvbi91bmRlbGVnYXRpb24vVW5kZWxlZ2F0aW9uUmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLG9DQUtDO0FBekJELHlDQUEyQjtBQUczQix5RUFBeUU7QUFDNUQsUUFBQSxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFOUUseUVBQXlFO0FBQzVELFFBQUEsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDeEM7SUFDRSx3Q0FBd0M7SUFDeEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE1BQU07SUFDMUIsb0RBQW9EO0lBQ3BELDJCQUEyQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQVMsQ0FBQztDQUNoRCxFQUNELHNCQUFzQixDQUN2QixDQUFDO0FBSUYsc0ZBQXNGO0FBQ3RGLFNBQWdCLFlBQVksQ0FBQyxPQUFvQztJQUMvRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUM7UUFDdEMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7S0FDOUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IFBhcnRpYWxTaWcgfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcblxuLyoqIEFzIHJldHVybmVkIGJ5IGh0dHBzOi8vYmFieWxvbi5ub2Rlcy5ndXJ1L2FwaSMvUXVlcnkvQlRDRGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IFNpZ25hdHVyZSA9IHQudHlwZSh7IHBrOiB0LnN0cmluZywgc2lnOiB0LnN0cmluZyB9LCAnU2lnbmF0dXJlJyk7XG5cbi8qKiBBcyByZXR1cm5lZCBieSBodHRwczovL2JhYnlsb24ubm9kZXMuZ3VydS9hcGkjL1F1ZXJ5L0JUQ0RlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBVbmRlbGVnYXRpb25SZXNwb25zZSA9IHQudHlwZShcbiAge1xuICAgIC8qKiBOZXR3b3JrLWZvcm1hdHRlZCB0cmFuc2FjdGlvbiBoZXggKi9cbiAgICB1bmJvbmRpbmdfdHhfaGV4OiB0LnN0cmluZyxcbiAgICAvKiogTGlzdCBvZiBzaWduYXR1cmVzIGZvciB0aGUgdW5ib25kaW5nIGNvdmVuYW50ICovXG4gICAgY292ZW5hbnRfdW5ib25kaW5nX3NpZ19saXN0OiB0LmFycmF5KFNpZ25hdHVyZSksXG4gIH0sXG4gICdVbmRlbGVnYXRpb25SZXNwb25zZSdcbik7XG5cbmV4cG9ydCB0eXBlIFVuZGVsZWdhdGlvblJlc3BvbnNlID0gdC5UeXBlT2Y8dHlwZW9mIFVuZGVsZWdhdGlvblJlc3BvbnNlPjtcblxuLyoqIENvbnZlcnRzIGEgZ1JQQyBzaWduYXR1cmUgdG8gYSBQYXJ0aWFsU2lnIGFzIHVzZWQgYnkgYml0Y29pbmpzLWxpYiBhbmQgdXR4by1saWIgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1BhcnRpYWxTaWcoZ3JwY1NpZzogeyBwazogc3RyaW5nOyBzaWc6IHN0cmluZyB9KTogUGFydGlhbFNpZyB7XG4gIHJldHVybiB7XG4gICAgcHVia2V5OiBCdWZmZXIuZnJvbShncnBjU2lnLnBrLCAnaGV4JyksXG4gICAgc2lnbmF0dXJlOiBCdWZmZXIuZnJvbShncnBjU2lnLnNpZywgJ2Jhc2U2NCcpLFxuICB9O1xufVxuIl19
@@ -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"}
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.coreDao = void 0;
18
- exports.coreDao = require("./coreDao");
19
- __exportStar(require("./transaction"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBcUM7QUFFckMsZ0RBQThCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgY29yZURhbyBmcm9tICcuL2NvcmVEYW8nO1xuXG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbiJdfQ==
17
+ __exportStar(require("./unbonding"), exports);
18
+ __exportStar(require("./UndelegationResponse"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYmFieWxvbi91bmRlbGVnYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUM1Qix5REFBdUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3VuYm9uZGluZyc7XG5leHBvcnQgKiBmcm9tICcuL1VuZGVsZWdhdGlvblJlc3BvbnNlJztcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { PartialSig, WitnessUtxo } from 'bip174/src/lib/interfaces';
3
+ import { Descriptor } from '@bitgo/wasm-utxo';
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,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAiB/D;;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-beta/utxo-lib"));
44
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
45
+ const descriptor_1 = require("@bitgo-beta/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_utxo_1.Miniscript.fromString(wasm_utxo_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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5ib25kaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2JhYnlsb24vdW5kZWxlZ2F0aW9uL3VuYm9uZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxzREFXQztBQVdELDBDQWlDQztBQUtELHNFQVlDO0FBaEdELG9EQUE0QjtBQUU1Qiw4REFBZ0Q7QUFFaEQsZ0RBQStEO0FBQy9ELGlFQUFnRztBQUVoRyx3REFBNEQ7QUFFNUQ7O0dBRUc7QUFDSCxTQUFTLHFCQUFxQixDQUFDLElBQTRCLEVBQUUsVUFBa0IsRUFBRSxVQUF3QjtJQUN2RyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzdELElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztJQUN0RixNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25GLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlGLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdC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O0FBQ0gsU0FBZ0IsNkJBQTZCLENBQzNDLEVBQXlDLEVBQ3pDLFdBQXdCLEVBQ3hCLGlCQUE2QixFQUM3QixVQUF3QixFQUN4QixPQUF3QjtJQUV4QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxJQUFBLGdCQUFNLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxtREFBbUQsQ0FBQyxDQUFDO0lBQzNGLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0MscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgUGFydGlhbFNpZywgV2l0bmVzc1V0eG8gfSBmcm9tICdiaXAxNzQvc3JjL2xpYi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIE1pbmlzY3JpcHQsIGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZmluZFRhcExlYWZTY3JpcHQsIHRvVXR4b1BzYnQsIHRvV3JhcHBlZFBzYnQgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWNvcmUvZGVzY3JpcHRvcic7XG5cbmltcG9ydCB7IHBhcnNlU3Rha2luZ0Rlc2NyaXB0b3IgfSBmcm9tICcuLi9wYXJzZURlc2NyaXB0b3InO1xuXG4vKipcbiAqIEFkZHMgY292ZW5hbnQgc2lnbmF0dXJlcyB0byBhIFBTQlQgaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIGFkZENvdmVuYW50U2lnbmF0dXJlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCBpbnB1dEluZGV4OiBudW1iZXIsIHNpZ25hdHVyZXM6IFBhcnRpYWxTaWdbXSk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IHBzYnQuZGF0YS5pbnB1dHNbaW5wdXRJbmRleF07XG4gIGFzc2VydChpbnB1dC50YXBMZWFmU2NyaXB0LCAnSW5wdXQgbXVzdCBoYXZlIHRhcExlYWZTY3JpcHQnKTtcbiAgYXNzZXJ0KGlucHV0LnRhcExlYWZTY3JpcHQubGVuZ3RoID09PSAxLCAnSW5wdXQgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHRhcExlYWZTY3JpcHQnKTtcbiAgY29uc3QgW3sgY29udHJvbEJsb2NrLCBzY3JpcHQgfV0gPSBpbnB1dC50YXBMZWFmU2NyaXB0O1xuICBjb25zdCBsZWFmSGFzaCA9IHV0eG9saWIudGFwcm9vdC5nZXRUYXBsZWFmSGFzaCh1dHhvbGliLmVjYywgY29udHJvbEJsb2NrLCBzY3JpcHQpO1xuICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgdGFwU2NyaXB0U2lnOiBzaWduYXR1cmVzLm1hcCgocykgPT4gKHsgLi4ucywgbGVhZkhhc2ggfSkpIH0pO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgcHJvdmlkZWQgc2lnbmF0dXJlcyBhcmUgdmFsaWQgZm9yIHRoZSBnaXZlbiBQU0JUIGlucHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRTaWduYXR1cmVzKFxuICBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHNpZ25hdHVyZXM6IFBhcnRpYWxTaWdbXVxuKTogdm9pZCB7XG4gIHNpZ25hdHVyZXMuZm9yRWFjaCgocykgPT4ge1xuICAgIGFzc2VydChcbiAgICAgIHBzYnQudmFsaWRhdGVUYXByb290U2lnbmF0dXJlc09mSW5wdXQoaW5wdXRJbmRleCwgcy5wdWJrZXkpLFxuICAgICAgYFNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZCBmb3IgJHtzLnB1YmtleS50b1N0cmluZygnaGV4Jyl9YFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRVbmJvbmRpbmdTY3JpcHQoc3Rha2luZ0Rlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiBNaW5pc2NyaXB0IHtcbiAgY29uc3QgcGFyc2VkRGVzY3JpcHRvciA9IHBhcnNlU3Rha2luZ0Rlc2NyaXB0b3Ioc3Rha2luZ0Rlc2NyaXB0b3IpO1xuICBhc3NlcnQocGFyc2VkRGVzY3JpcHRvciwgJ0ludmFsaWQgc3Rha2luZyBkZXNjcmlwdG9yJyk7XG4gIHJldHVybiBNaW5pc2NyaXB0LmZyb21TdHJpbmcoYXN0LmZvcm1hdE5vZGUocGFyc2VkRGVzY3JpcHRvci51bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSksICd0YXAnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHVuc2lnbmVkIFBTQlQgZm9yIGFuIHVuYm9uZGluZyB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmJvbmRpbmdQc2J0KFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgd2l0bmVzc1V0eG86IFdpdG5lc3NVdHhvLFxuICBzdGFraW5nRGVzY3JpcHRvcjogRGVzY3JpcHRvcixcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0IHtcbiAgY29uc3QgdW5ib25kaW5nU2NyaXB0ID0gZ2V0VW5ib25kaW5nU2NyaXB0KHN0YWtpbmdEZXNjcmlwdG9yKTtcbiAgY29uc3QgcHNidCA9IG5ldyB1dHhvbGliLlBzYnQoeyBuZXR3b3JrIH0pO1xuICBwc2J0LnNldFZlcnNpb24odHgudmVyc2lvbik7XG4gIHBzYnQuc2V0TG9ja3RpbWUodHgubG9ja3RpbWUpO1xuICBwc2J0LmFkZE91dHB1dHMoXG4gICAgdHgub3V0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHZhbHVlOiBCaWdJbnQob3V0cHV0LnZhbHVlKSxcbiAgICB9KSlcbiAgKTtcbiAgYXNzZXJ0KHR4Lmlucy5sZW5ndGggPT09IDEpO1xuICBjb25zdCBpbnB1dCA9IHR4Lmluc1swXTtcbiAgcHNidC5hZGRJbnB1dCh7XG4gICAgaGFzaDogaW5wdXQuaGFzaCxcbiAgICBpbmRleDogaW5wdXQuaW5kZXgsXG4gICAgc2VxdWVuY2U6IGlucHV0LnNlcXVlbmNlLFxuICAgIHdpdG5lc3NVdHhvLFxuICB9KTtcbiAgY29uc3Qgd3JhcHBlZFBzYnQgPSB0b1dyYXBwZWRQc2J0KHBzYnQpO1xuICB3cmFwcGVkUHNidC51cGRhdGVJbnB1dFdpdGhEZXNjcmlwdG9yKDAsIHN0YWtpbmdEZXNjcmlwdG9yKTtcbiAgY29uc3QgdW53cmFwcGVkID0gdG9VdHhvUHNidCh3cmFwcGVkUHNidCwgbmV0d29yayk7XG4gIGFzc2VydCh1bndyYXBwZWQuZGF0YS5pbnB1dHMubGVuZ3RoID09PSAxLCAnVW5ib25kaW5nIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBpbnB1dCcpO1xuICBjb25zdCB1bndyYXBwZWRJbnB1dERhdGEgPSB1bndyYXBwZWQuZGF0YS5pbnB1dHNbMF07XG4gIGFzc2VydCh1bndyYXBwZWRJbnB1dERhdGEudGFwTGVhZlNjcmlwdCk7XG4gIGNvbnN0IHVud3JhcHBlZFVuYm9uZCA9IGZpbmRUYXBMZWFmU2NyaXB0KHVud3JhcHBlZElucHV0RGF0YS50YXBMZWFmU2NyaXB0LCB1bmJvbmRpbmdTY3JpcHQpO1xuICB1bndyYXBwZWRJbnB1dERhdGEudGFwTGVhZlNjcmlwdCA9IFt1bndyYXBwZWRVbmJvbmRdO1xuICByZXR1cm4gdW53cmFwcGVkO1xufVxuXG4vKipcbiAqIEByZXR1cm4gUFNCVCBmb3IgYW4gdW5ib25kaW5nIHRyYW5zYWN0aW9uIHdpdGggc2lnbmF0dXJlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbmJvbmRpbmdQc2J0V2l0aFNpZ25hdHVyZXMoXG4gIHR4OiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICB3aXRuZXNzVXR4bzogV2l0bmVzc1V0eG8sXG4gIHN0YWtpbmdEZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBzaWduYXR1cmVzOiBQYXJ0aWFsU2lnW10sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB7XG4gIGNvbnN0IHBzYnQgPSB0b1VuYm9uZGluZ1BzYnQodHgsIHdpdG5lc3NVdHhvLCBzdGFraW5nRGVzY3JpcHRvciwgbmV0d29yayk7XG4gIGFzc2VydChwc2J0LmRhdGEuaW5wdXRzLmxlbmd0aCA9PT0gMSwgJ1VuYm9uZGluZyB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgZXhhY3RseSBvbmUgaW5wdXQnKTtcbiAgYWRkQ292ZW5hbnRTaWduYXR1cmVzKHBzYnQsIDAsIHNpZ25hdHVyZXMpO1xuICBhc3NlcnRWYWxpZFNpZ25hdHVyZXMocHNidCwgMCwgc2lnbmF0dXJlcyk7XG4gIHJldHVybiBwc2J0O1xufVxuIl19
@@ -1,10 +1,10 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { BIP32Interface } from '@bitgo-beta/utxo-lib';
4
2
  /**
5
- * Script type for a descriptor. This is either a p2sh (sh) or a p2sh-p2wsh (sh-wsh) script.
3
+ * Script type for a descriptor.
4
+ *
5
+ * See https://docs.coredao.org/docs/Learn/products/btc-staking/design#p2shp2wsh-output
6
6
  */
7
- export type ScriptType = 'sh' | 'sh-wsh';
7
+ export type ScriptType = 'sh' | 'sh-wsh' | 'wsh';
8
8
  /**
9
9
  * Create a multi-sig descriptor to produce a coredao staking address
10
10
  * @param scriptType segwit or legacy
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../../src/coreDao/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC;AASjD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,EAChB,CAAC,EAAE,MAAM,EACT,WAAW,EAAE,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,EACxC,QAAQ,UAAO,GACd,MAAM,CAmBR"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMultiSigDescriptor = createMultiSigDescriptor;
4
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
5
+ function asDescriptorKey(key, neutered) {
6
+ if (Buffer.isBuffer(key)) {
7
+ return key.toString('hex');
8
+ }
9
+ return (neutered ? key.neutered() : key).toBase58() + '/*';
10
+ }
11
+ /**
12
+ * Create a multi-sig descriptor to produce a coredao staking address
13
+ * @param scriptType segwit or legacy
14
+ * @param locktime locktime for CLTV
15
+ * @param m Total number of keys required to unlock
16
+ * @param orderedKeys If Bip32Interfaces, these are xprvs or xpubs and are derivable.
17
+ * If they are buffers, then they are pub/prv keys and are not derivable.
18
+ * @param neutered If true, neuter the keys. Default to true
19
+ */
20
+ function createMultiSigDescriptor(scriptType, locktime, m, orderedKeys, neutered = true) {
21
+ if (m > orderedKeys.length || m < 1) {
22
+ throw new Error(`m (${m}) must be less than or equal to the number of keys (${orderedKeys.length}) and greater than 0`);
23
+ }
24
+ if (locktime <= 0) {
25
+ throw new Error(`locktime (${locktime}) must be greater than 0`);
26
+ }
27
+ const keys = orderedKeys.map((key) => asDescriptorKey(key, neutered));
28
+ const inner = { and_v: [{ 'r:after': locktime }, { multi: [m, ...keys] }] };
29
+ switch (scriptType) {
30
+ case 'sh':
31
+ return wasm_utxo_1.ast.formatNode({ sh: inner });
32
+ case 'sh-wsh':
33
+ return wasm_utxo_1.ast.formatNode({ sh: { wsh: inner } });
34
+ case 'wsh':
35
+ return wasm_utxo_1.ast.formatNode({ wsh: inner });
36
+ }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlRGFvL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsNERBeUJDO0FBbERELGdEQUF1QztBQVN2QyxTQUFTLGVBQWUsQ0FBQyxHQUE0QixFQUFFLFFBQWlCO0lBQ3RFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDN0QsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQ3RDLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLENBQVMsRUFDVCxXQUF3QyxFQUN4QyxRQUFRLEdBQUcsSUFBSTtJQUVmLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IsTUFBTSxDQUFDLHVEQUF1RCxXQUFXLENBQUMsTUFBTSxzQkFBc0IsQ0FDdkcsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQXVCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRyxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssSUFBSTtZQUNQLE9BQU8sZUFBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssUUFBUTtZQUNYLE9BQU8sZUFBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsS0FBSyxLQUFLO1lBQ1IsT0FBTyxlQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGFzdCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG4vKipcbiAqIFNjcmlwdCB0eXBlIGZvciBhIGRlc2NyaXB0b3IuXG4gKlxuICogU2VlIGh0dHBzOi8vZG9jcy5jb3JlZGFvLm9yZy9kb2NzL0xlYXJuL3Byb2R1Y3RzL2J0Yy1zdGFraW5nL2Rlc2lnbiNwMnNocDJ3c2gtb3V0cHV0XG4gKi9cbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUgPSAnc2gnIHwgJ3NoLXdzaCcgfCAnd3NoJztcblxuZnVuY3Rpb24gYXNEZXNjcmlwdG9yS2V5KGtleTogQklQMzJJbnRlcmZhY2UgfCBCdWZmZXIsIG5ldXRlcmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuIGtleS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgcmV0dXJuIChuZXV0ZXJlZCA/IGtleS5uZXV0ZXJlZCgpIDoga2V5KS50b0Jhc2U1OCgpICsgJy8qJztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtdWx0aS1zaWcgZGVzY3JpcHRvciB0byBwcm9kdWNlIGEgY29yZWRhbyBzdGFraW5nIGFkZHJlc3NcbiAqIEBwYXJhbSBzY3JpcHRUeXBlIHNlZ3dpdCBvciBsZWdhY3lcbiAqIEBwYXJhbSBsb2NrdGltZSBsb2NrdGltZSBmb3IgQ0xUVlxuICogQHBhcmFtIG0gVG90YWwgbnVtYmVyIG9mIGtleXMgcmVxdWlyZWQgdG8gdW5sb2NrXG4gKiBAcGFyYW0gb3JkZXJlZEtleXMgSWYgQmlwMzJJbnRlcmZhY2VzLCB0aGVzZSBhcmUgeHBydnMgb3IgeHB1YnMgYW5kIGFyZSBkZXJpdmFibGUuXG4gKiAgICAgICAgICAgICAgICAgICAgSWYgdGhleSBhcmUgYnVmZmVycywgdGhlbiB0aGV5IGFyZSBwdWIvcHJ2IGtleXMgYW5kIGFyZSBub3QgZGVyaXZhYmxlLlxuICogQHBhcmFtIG5ldXRlcmVkIElmIHRydWUsIG5ldXRlciB0aGUga2V5cy4gRGVmYXVsdCB0byB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoXG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUsXG4gIGxvY2t0aW1lOiBudW1iZXIsXG4gIG06IG51bWJlcixcbiAgb3JkZXJlZEtleXM6IChCSVAzMkludGVyZmFjZSB8IEJ1ZmZlcilbXSxcbiAgbmV1dGVyZWQgPSB0cnVlXG4pOiBzdHJpbmcge1xuICBpZiAobSA+IG9yZGVyZWRLZXlzLmxlbmd0aCB8fCBtIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBtICgke219KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGtleXMgKCR7b3JkZXJlZEtleXMubGVuZ3RofSkgYW5kIGdyZWF0ZXIgdGhhbiAwYFxuICAgICk7XG4gIH1cbiAgaWYgKGxvY2t0aW1lIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGxvY2t0aW1lICgke2xvY2t0aW1lfSkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApO1xuICB9XG4gIGNvbnN0IGtleXMgPSBvcmRlcmVkS2V5cy5tYXAoKGtleSkgPT4gYXNEZXNjcmlwdG9yS2V5KGtleSwgbmV1dGVyZWQpKTtcbiAgY29uc3QgaW5uZXI6IGFzdC5NaW5pc2NyaXB0Tm9kZSA9IHsgYW5kX3Y6IFt7ICdyOmFmdGVyJzogbG9ja3RpbWUgfSwgeyBtdWx0aTogW20sIC4uLmtleXNdIH1dIH07XG4gIHN3aXRjaCAoc2NyaXB0VHlwZSkge1xuICAgIGNhc2UgJ3NoJzpcbiAgICAgIHJldHVybiBhc3QuZm9ybWF0Tm9kZSh7IHNoOiBpbm5lciB9KTtcbiAgICBjYXNlICdzaC13c2gnOlxuICAgICAgcmV0dXJuIGFzdC5mb3JtYXROb2RlKHsgc2g6IHsgd3NoOiBpbm5lciB9IH0pO1xuICAgIGNhc2UgJ3dzaCc6XG4gICAgICByZXR1cm4gYXN0LmZvcm1hdE5vZGUoeyB3c2g6IGlubmVyIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/coreDao/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -17,4 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./opReturn"), exports);
18
18
  __exportStar(require("./descriptor"), exports);
19
19
  __exportStar(require("./transaction"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZURhby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCO0FBQzNCLCtDQUE2QjtBQUM3QixnREFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29wUmV0dXJuJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZURhby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCO0FBQzNCLCtDQUE2QjtBQUM3QixnREFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29wUmV0dXJuJztcbmV4cG9ydCAqIGZyb20gJy4vZGVzY3JpcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zYWN0aW9uJztcbiJdfQ==
@@ -1,8 +1,8 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- export declare const CORE_DAO_TESTNET_CHAIN_ID: Buffer;
4
- export declare const CORE_DAO_MAINNET_CHAIN_ID: Buffer;
5
- export declare const CORE_DAO_SATOSHI_PLUS_IDENTIFIER: Buffer;
1
+ export declare const CORE_DAO_DEVNET_CHAIN_ID: Buffer<ArrayBuffer>;
2
+ export declare const CORE_DAO_TESTNET2_CHAIN_ID: Buffer<ArrayBuffer>;
3
+ export declare const CORE_DAO_TESTNET_CHAIN_ID: Buffer<ArrayBuffer>;
4
+ export declare const CORE_DAO_MAINNET_CHAIN_ID: Buffer<ArrayBuffer>;
5
+ export declare const CORE_DAO_SATOSHI_PLUS_IDENTIFIER: Buffer<ArrayBuffer>;
6
6
  export declare function encodeTimelock(timelock: number): Buffer;
7
7
  export declare function decodeTimelock(buffer: Buffer): number;
8
8
  type BaseParams = {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opReturn.d.ts","sourceRoot":"","sources":["../../../../src/coreDao/opReturn.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,qBAA6B,CAAC;AACnE,eAAO,MAAM,0BAA0B,qBAA6B,CAAC;AACrE,eAAO,MAAM,yBAAyB,qBAA6B,CAAC;AACpE,eAAO,MAAM,yBAAyB,qBAA6B,CAAC;AACpE,eAAO,MAAM,gCAAgC,qBAAiC,CAAC;AAI/E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE5F;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAAC,EAChD,OAAO,EACP,OAAO,EACP,SAAS,EACT,SAAS,EACT,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,GAAG,MAAM,CAuFzB;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAkE/E;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAUvD"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CORE_DAO_SATOSHI_PLUS_IDENTIFIER = exports.CORE_DAO_MAINNET_CHAIN_ID = exports.CORE_DAO_TESTNET_CHAIN_ID = exports.CORE_DAO_TESTNET2_CHAIN_ID = exports.CORE_DAO_DEVNET_CHAIN_ID = void 0;
4
+ exports.encodeTimelock = encodeTimelock;
5
+ exports.decodeTimelock = decodeTimelock;
6
+ exports.createCoreDaoOpReturnOutputScript = createCoreDaoOpReturnOutputScript;
7
+ exports.parseCoreDaoOpReturnOutputScript = parseCoreDaoOpReturnOutputScript;
8
+ exports.toString = toString;
9
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
10
+ // Source: https://docs.coredao.org/docs/Learn/products/btc-staking/design
11
+ exports.CORE_DAO_DEVNET_CHAIN_ID = Buffer.from('0458', 'hex');
12
+ exports.CORE_DAO_TESTNET2_CHAIN_ID = Buffer.from('045a', 'hex');
13
+ exports.CORE_DAO_TESTNET_CHAIN_ID = Buffer.from('045b', 'hex');
14
+ exports.CORE_DAO_MAINNET_CHAIN_ID = Buffer.from('045c', 'hex');
15
+ exports.CORE_DAO_SATOSHI_PLUS_IDENTIFIER = Buffer.from('5341542b', 'hex');
16
+ // https://github.com/bitcoin/bitcoin/blob/5961b23898ee7c0af2626c46d5d70e80136578d3/src/script/script.h#L47
17
+ const OP_RETURN_IDENTIFIER = Buffer.from('6a', 'hex');
18
+ function encodeTimelock(timelock) {
19
+ const buff = Buffer.alloc(4);
20
+ buff.writeUInt32LE(timelock);
21
+ return buff;
22
+ }
23
+ function decodeTimelock(buffer) {
24
+ if (buffer.length !== 4) {
25
+ throw new Error('Invalid timelock buffer length');
26
+ }
27
+ return buffer.readUInt32LE();
28
+ }
29
+ /**
30
+ * Create a CoreDAO OP_RETURN output script
31
+ *
32
+ * @param version Version of the OP_RETURN
33
+ * @param chainId Chain ID
34
+ * @param delegator Delegator address
35
+ * @param validator Validator address
36
+ * @param fee Fee for relayer
37
+ * @param redeemScript Redeem script of the staking output
38
+ * @param timelock Timelock for the staking output
39
+ * @returns Buffer OP_RETURN buffer
40
+ */
41
+ function createCoreDaoOpReturnOutputScript({ version, chainId, delegator, validator, fee, ...rest }) {
42
+ /**
43
+ * As of v2, this is the construction of the OP_RETURN:
44
+ * Source: https://docs.coredao.org/docs/Learn/products/btc-staking/design#op_return-output
45
+ *
46
+ * The OP_RETURN output should contain all staking information in order, and be composed in the following format:
47
+ *
48
+ * Satoshi Plus Identifier: (SAT+) 4 bytes
49
+ * Version: (0x01) 1 byte
50
+ * Chain ID: (0x045b (1115) for Core Testnet and 0x045c (1116) for Core Mainnet) 2 bytes
51
+ * Delegator: The Core address to receive rewards, 20 bytes
52
+ * Validator: The Core validator address to stake to, 20 bytes
53
+ * Fee: Fee for relayer, 1 byte, range [0,255], measured in CORE
54
+ * (Optional) RedeemScript
55
+ * (Optional) Timelock: 4 bytes
56
+ *
57
+ * Either RedeemScript or Timelock must be available, the purpose is to allow relayer to
58
+ * obtain the RedeemScript and submit transactions on Core. If a RedeemScript is provided,
59
+ * relayer will use it directly. Otherwise, relayer will construct the redeem script based
60
+ * on the timelock and the information in the transaction inputs.
61
+ *
62
+ * Note that any length > 80 bytes wont be relayed by nodes and therefore we will throw an error.
63
+ */
64
+ if (version < 0 || version > 255) {
65
+ throw new Error('Invalid version - out of range');
66
+ }
67
+ const versionBuffer = Buffer.alloc(1, version);
68
+ if (!(chainId.equals(exports.CORE_DAO_TESTNET_CHAIN_ID) ||
69
+ chainId.equals(exports.CORE_DAO_TESTNET2_CHAIN_ID) ||
70
+ chainId.equals(exports.CORE_DAO_MAINNET_CHAIN_ID) ||
71
+ chainId.equals(exports.CORE_DAO_DEVNET_CHAIN_ID))) {
72
+ throw new Error('Invalid chain ID');
73
+ }
74
+ if (delegator.length !== 20) {
75
+ throw new Error('Invalid delegator address');
76
+ }
77
+ if (validator.length !== 20) {
78
+ throw new Error('Invalid validator address');
79
+ }
80
+ if (fee < 0 || fee > 255) {
81
+ throw new Error('Invalid fee - out of range');
82
+ }
83
+ const feeBuffer = Buffer.alloc(1, fee);
84
+ if (feeBuffer.length !== 1) {
85
+ throw new Error('Invalid fee');
86
+ }
87
+ const redeemScriptBuffer = 'redeemScript' in rest ? rest.redeemScript : Buffer.from([]);
88
+ if ('timelock' in rest && (rest.timelock < 0 || rest.timelock > 4294967295)) {
89
+ throw new Error('Invalid timelock - out of range');
90
+ }
91
+ // encode the number into a 4-byte buffer
92
+ // if timelock is provided, write it into 32-bit little-endian
93
+ const timelockBuffer = 'timelock' in rest ? encodeTimelock(rest.timelock) : Buffer.from([]);
94
+ const data = Buffer.concat([
95
+ exports.CORE_DAO_SATOSHI_PLUS_IDENTIFIER,
96
+ versionBuffer,
97
+ chainId,
98
+ delegator,
99
+ validator,
100
+ feeBuffer,
101
+ redeemScriptBuffer,
102
+ timelockBuffer,
103
+ ]);
104
+ if (data.length > 80) {
105
+ throw new Error('OP_RETURN outputs cannot have a length larger than 80 bytes');
106
+ }
107
+ const payment = utxo_lib_1.payments.embed({
108
+ data: [data],
109
+ network: chainId.equals(exports.CORE_DAO_DEVNET_CHAIN_ID) ? utxo_lib_1.networks.testnet : utxo_lib_1.networks.bitcoin,
110
+ });
111
+ if (!payment.output) {
112
+ throw new Error('Unable to create OP_RETURN output');
113
+ }
114
+ return payment.output;
115
+ }
116
+ /**
117
+ * Parse a CoreDAO OP_RETURN output script into the constituent parts
118
+ * @param script
119
+ * @returns OpReturnParams
120
+ */
121
+ function parseCoreDaoOpReturnOutputScript(script) {
122
+ if (!script.subarray(0, 1).equals(OP_RETURN_IDENTIFIER)) {
123
+ throw new Error('First byte must be an OP_RETURN');
124
+ }
125
+ const payment = utxo_lib_1.payments.embed({
126
+ output: script,
127
+ });
128
+ const data = payment.data;
129
+ if (!data || data.length !== 1) {
130
+ throw new Error('Invalid OP_RETURN output');
131
+ }
132
+ const dataBuffer = data[0];
133
+ if (dataBuffer.length > 80) {
134
+ throw new Error(`OP_RETURN outputs cannot have a length larger than 80 bytes`);
135
+ }
136
+ let offset = 0;
137
+ // Decode satoshi+ identifier
138
+ if (!dataBuffer.subarray(offset, offset + 4).equals(exports.CORE_DAO_SATOSHI_PLUS_IDENTIFIER)) {
139
+ throw new Error('Invalid satoshi+ identifier');
140
+ }
141
+ offset += 4;
142
+ // Decode version
143
+ const version = dataBuffer[offset];
144
+ offset += 1;
145
+ // Decode chainId
146
+ const chainId = Buffer.from(dataBuffer.subarray(offset, offset + 2));
147
+ if (!(chainId.equals(exports.CORE_DAO_DEVNET_CHAIN_ID) ||
148
+ chainId.equals(exports.CORE_DAO_TESTNET_CHAIN_ID) ||
149
+ chainId.equals(exports.CORE_DAO_TESTNET2_CHAIN_ID) ||
150
+ chainId.equals(exports.CORE_DAO_MAINNET_CHAIN_ID))) {
151
+ throw new Error(`Invalid ChainID: ${chainId.toString('hex')}. Must be either 0x0458 (devnet), 0x045b (testnet), or 0x045c (mainnet).`);
152
+ }
153
+ offset += 2;
154
+ // Decode delegator
155
+ const delegator = Buffer.from(dataBuffer.subarray(offset, offset + 20));
156
+ offset += 20;
157
+ // Decode validator
158
+ const validator = Buffer.from(dataBuffer.subarray(offset, offset + 20));
159
+ offset += 20;
160
+ // Decode fee
161
+ const fee = dataBuffer[offset];
162
+ offset += 1;
163
+ const baseParams = { version, chainId, delegator, validator, fee };
164
+ // Decode redeemScript or timelock
165
+ if (offset === dataBuffer.length - 4) {
166
+ return { ...baseParams, timelock: decodeTimelock(dataBuffer.subarray(offset)) };
167
+ }
168
+ else {
169
+ return { ...baseParams, redeemScript: Buffer.from(dataBuffer.subarray(offset)) };
170
+ }
171
+ }
172
+ function toString(params) {
173
+ return JSON.stringify({
174
+ version: params.version,
175
+ chainId: params.chainId.toString('hex'),
176
+ delegator: params.delegator.toString('hex'),
177
+ validator: params.validator.toString('hex'),
178
+ fee: params.fee,
179
+ ...('redeemScript' in params ? { redeemScript: params.redeemScript.toString('hex') } : {}),
180
+ ...('timelock' in params ? { timelock: params.timelock } : {}),
181
+ });
182
+ }
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BSZXR1cm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZURhby9vcFJldHVybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSx3Q0FJQztBQUVELHdDQUtDO0FBd0JELDhFQThGQztBQU9ELDRFQWtFQztBQUVELDRCQVVDO0FBak9ELG1EQUEwRDtBQUUxRCwwRUFBMEU7QUFDN0QsUUFBQSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0RCxRQUFBLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hELFFBQUEseUJBQXlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkQsUUFBQSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RCxRQUFBLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9FLDJHQUEyRztBQUMzRyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXRELFNBQWdCLGNBQWMsQ0FBQyxRQUFnQjtJQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0IsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLE1BQWM7SUFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FB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Q0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUYsR0FBRyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXltZW50cywgbmV0d29ya3MgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbi8vIFNvdXJjZTogaHR0cHM6Ly9kb2NzLmNvcmVkYW8ub3JnL2RvY3MvTGVhcm4vcHJvZHVjdHMvYnRjLXN0YWtpbmcvZGVzaWduXG5leHBvcnQgY29uc3QgQ09SRV9EQU9fREVWTkVUX0NIQUlOX0lEID0gQnVmZmVyLmZyb20oJzA0NTgnLCAnaGV4Jyk7XG5leHBvcnQgY29uc3QgQ09SRV9EQU9fVEVTVE5FVDJfQ0hBSU5fSUQgPSBCdWZmZXIuZnJvbSgnMDQ1YScsICdoZXgnKTtcbmV4cG9ydCBjb25zdCBDT1JFX0RBT19URVNUTkVUX0NIQUlOX0lEID0gQnVmZmVyLmZyb20oJzA0NWInLCAnaGV4Jyk7XG5leHBvcnQgY29uc3QgQ09SRV9EQU9fTUFJTk5FVF9DSEFJTl9JRCA9IEJ1ZmZlci5mcm9tKCcwNDVjJywgJ2hleCcpO1xuZXhwb3J0IGNvbnN0IENPUkVfREFPX1NBVE9TSElfUExVU19JREVOVElGSUVSID0gQnVmZmVyLmZyb20oJzUzNDE1NDJiJywgJ2hleCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4vYml0Y29pbi9ibG9iLzU5NjFiMjM4OThlZTdjMGFmMjYyNmM0NmQ1ZDcwZTgwMTM2NTc4ZDMvc3JjL3NjcmlwdC9zY3JpcHQuaCNMNDdcbmNvbnN0IE9QX1JFVFVSTl9JREVOVElGSUVSID0gQnVmZmVyLmZyb20oJzZhJywgJ2hleCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVGltZWxvY2sodGltZWxvY2s6IG51bWJlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IGJ1ZmYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gIGJ1ZmYud3JpdGVVSW50MzJMRSh0aW1lbG9jayk7XG4gIHJldHVybiBidWZmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVGltZWxvY2soYnVmZmVyOiBCdWZmZXIpOiBudW1iZXIge1xuICBpZiAoYnVmZmVyLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0aW1lbG9jayBidWZmZXIgbGVuZ3RoJyk7XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5yZWFkVUludDMyTEUoKTtcbn1cblxudHlwZSBCYXNlUGFyYW1zID0ge1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIGNoYWluSWQ6IEJ1ZmZlcjtcbiAgZGVsZWdhdG9yOiBCdWZmZXI7XG4gIHZhbGlkYXRvcjogQnVmZmVyO1xuICBmZWU6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE9wUmV0dXJuUGFyYW1zID0gQmFzZVBhcmFtcyAmICh7IHJlZGVlbVNjcmlwdDogQnVmZmVyIH0gfCB7IHRpbWVsb2NrOiBudW1iZXIgfSk7XG5cbi8qKlxuICogQ3JlYXRlIGEgQ29yZURBTyBPUF9SRVRVUk4gb3V0cHV0IHNjcmlwdFxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIFZlcnNpb24gb2YgdGhlIE9QX1JFVFVSTlxuICogQHBhcmFtIGNoYWluSWQgQ2hhaW4gSURcbiAqIEBwYXJhbSBkZWxlZ2F0b3IgRGVsZWdhdG9yIGFkZHJlc3NcbiAqIEBwYXJhbSB2YWxpZGF0b3IgVmFsaWRhdG9yIGFkZHJlc3NcbiAqIEBwYXJhbSBmZWUgRmVlIGZvciByZWxheWVyXG4gKiBAcGFyYW0gcmVkZWVtU2NyaXB0IFJlZGVlbSBzY3JpcHQgb2YgdGhlIHN0YWtpbmcgb3V0cHV0XG4gKiBAcGFyYW0gdGltZWxvY2sgVGltZWxvY2sgZm9yIHRoZSBzdGFraW5nIG91dHB1dFxuICogQHJldHVybnMgQnVmZmVyIE9QX1JFVFVSTiBidWZmZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCh7XG4gIHZlcnNpb24sXG4gIGNoYWluSWQsXG4gIGRlbGVnYXRvcixcbiAgdmFsaWRhdG9yLFxuICBmZWUsXG4gIC4uLnJlc3Rcbn06IE9wUmV0dXJuUGFyYW1zKTogQnVmZmVyIHtcbiAgLyoqXG4gICAqIEFzIG9mIHYyLCB0aGlzIGlzIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlIE9QX1JFVFVSTjpcbiAgICogU291cmNlOiBodHRwczovL2RvY3MuY29yZWRhby5vcmcvZG9jcy9MZWFybi9wcm9kdWN0cy9idGMtc3Rha2luZy9kZXNpZ24jb3BfcmV0dXJuLW91dHB1dFxuICAgKlxuICAgKiBUaGUgT1BfUkVUVVJOIG91dHB1dCBzaG91bGQgY29udGFpbiBhbGwgc3Rha2luZyBpbmZvcm1hdGlvbiBpbiBvcmRlciwgYW5kIGJlIGNvbXBvc2VkIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuICAgKlxuICAgKiBTYXRvc2hpIFBsdXMgSWRlbnRpZmllcjogKFNBVCspIDQgYnl0ZXNcbiAgICogVmVyc2lvbjogKDB4MDEpIDEgYnl0ZVxuICAgKiBDaGFpbiBJRDogKDB4MDQ1YiAoMTExNSkgZm9yIENvcmUgVGVzdG5ldCBhbmQgMHgwNDVjICgxMTE2KSBmb3IgQ29yZSBNYWlubmV0KSAyIGJ5dGVzXG4gICAqIERlbGVnYXRvcjogVGhlIENvcmUgYWRkcmVzcyB0byByZWNlaXZlIHJld2FyZHMsIDIwIGJ5dGVzXG4gICAqIFZhbGlkYXRvcjogVGhlIENvcmUgdmFsaWRhdG9yIGFkZHJlc3MgdG8gc3Rha2UgdG8sIDIwIGJ5dGVzXG4gICAqIEZlZTogRmVlIGZvciByZWxheWVyLCAxIGJ5dGUsIHJhbmdlIFswLDI1NV0sIG1lYXN1cmVkIGluIENPUkVcbiAgICogKE9wdGlvbmFsKSBSZWRlZW1TY3JpcHRcbiAgICogKE9wdGlvbmFsKSBUaW1lbG9jazogNCBieXRlc1xuICAgKlxuICAgKiBFaXRoZXIgUmVkZWVtU2NyaXB0IG9yIFRpbWVsb2NrIG11c3QgYmUgYXZhaWxhYmxlLCB0aGUgcHVycG9zZSBpcyB0byBhbGxvdyByZWxheWVyIHRvXG4gICAqIG9idGFpbiB0aGUgUmVkZWVtU2NyaXB0IGFuZCBzdWJtaXQgdHJhbnNhY3Rpb25zIG9uIENvcmUuIElmIGEgUmVkZWVtU2NyaXB0IGlzIHByb3ZpZGVkLFxuICAgKiByZWxheWVyIHdpbGwgdXNlIGl0IGRpcmVjdGx5LiBPdGhlcndpc2UsIHJlbGF5ZXIgd2lsbCBjb25zdHJ1Y3QgdGhlIHJlZGVlbSBzY3JpcHQgYmFzZWRcbiAgICogb24gdGhlIHRpbWVsb2NrIGFuZCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHRyYW5zYWN0aW9uIGlucHV0cy5cbiAgICpcbiAgICogTm90ZSB0aGF0IGFueSBsZW5ndGggPiA4MCBieXRlcyB3b250IGJlIHJlbGF5ZWQgYnkgbm9kZXMgYW5kIHRoZXJlZm9yZSB3ZSB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgKi9cbiAgaWYgKHZlcnNpb24gPCAwIHx8IHZlcnNpb24gPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmVyc2lvbiAtIG91dCBvZiByYW5nZScpO1xuICB9XG4gIGNvbnN0IHZlcnNpb25CdWZmZXIgPSBCdWZmZXIuYWxsb2MoMSwgdmVyc2lvbik7XG5cbiAgaWYgKFxuICAgICEoXG4gICAgICBjaGFpbklkLmVxdWFscyhDT1JFX0RBT19URVNUTkVUX0NIQUlOX0lEKSB8fFxuICAgICAgY2hhaW5JZC5lcXVhbHMoQ09SRV9EQU9fVEVTVE5FVDJfQ0hBSU5fSUQpIHx8XG4gICAgICBjaGFpbklkLmVxdWFscyhDT1JFX0RBT19NQUlOTkVUX0NIQUlOX0lEKSB8fFxuICAgICAgY2hhaW5JZC5lcXVhbHMoQ09SRV9EQU9fREVWTkVUX0NIQUlOX0lEKVxuICAgIClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoYWluIElEJyk7XG4gIH1cblxuICBpZiAoZGVsZWdhdG9yLmxlbmd0aCAhPT0gMjApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVsZWdhdG9yIGFkZHJlc3MnKTtcbiAgfVxuXG4gIGlmICh2YWxpZGF0b3IubGVuZ3RoICE9PSAyMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWxpZGF0b3IgYWRkcmVzcycpO1xuICB9XG5cbiAgaWYgKGZlZSA8IDAgfHwgZmVlID4gMjU1KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZlZSAtIG91dCBvZiByYW5nZScpO1xuICB9XG4gIGNvbnN0IGZlZUJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxLCBmZWUpO1xuXG4gIGlmIChmZWVCdWZmZXIubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZlZScpO1xuICB9XG5cbiAgY29uc3QgcmVkZWVtU2NyaXB0QnVmZmVyID0gJ3JlZGVlbVNjcmlwdCcgaW4gcmVzdCA/IHJlc3QucmVkZWVtU2NyaXB0IDogQnVmZmVyLmZyb20oW10pO1xuICBpZiAoJ3RpbWVsb2NrJyBpbiByZXN0ICYmIChyZXN0LnRpbWVsb2NrIDwgMCB8fCByZXN0LnRpbWVsb2NrID4gNDI5NDk2NzI5NSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGltZWxvY2sgLSBvdXQgb2YgcmFuZ2UnKTtcbiAgfVxuXG4gIC8vIGVuY29kZSB0aGUgbnVtYmVyIGludG8gYSA0LWJ5dGUgYnVmZmVyXG4gIC8vIGlmIHRpbWVsb2NrIGlzIHByb3ZpZGVkLCB3cml0ZSBpdCBpbnRvIDMyLWJpdCBsaXR0bGUtZW5kaWFuXG4gIGNvbnN0IHRpbWVsb2NrQnVmZmVyID0gJ3RpbWVsb2NrJyBpbiByZXN0ID8gZW5jb2RlVGltZWxvY2socmVzdC50aW1lbG9jaykgOiBCdWZmZXIuZnJvbShbXSk7XG4gIGNvbnN0IGRhdGEgPSBCdWZmZXIuY29uY2F0KFtcbiAgICBDT1JFX0RBT19TQVRPU0hJX1BMVVNfSURFTlRJRklFUixcbiAgICB2ZXJzaW9uQnVmZmVyLFxuICAgIGNoYWluSWQsXG4gICAgZGVsZWdhdG9yLFxuICAgIHZhbGlkYXRvcixcbiAgICBmZWVCdWZmZXIsXG4gICAgcmVkZWVtU2NyaXB0QnVmZmVyLFxuICAgIHRpbWVsb2NrQnVmZmVyLFxuICBdKTtcbiAgaWYgKGRhdGEubGVuZ3RoID4gODApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09QX1JFVFVSTiBvdXRwdXRzIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGxhcmdlciB0aGFuIDgwIGJ5dGVzJyk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gcGF5bWVudHMuZW1iZWQoe1xuICAgIGRhdGE6IFtkYXRhXSxcbiAgICBuZXR3b3JrOiBjaGFpbklkLmVxdWFscyhDT1JFX0RBT19ERVZORVRfQ0hBSU5fSUQpID8gbmV0d29ya3MudGVzdG5ldCA6IG5ldHdvcmtzLmJpdGNvaW4sXG4gIH0pO1xuICBpZiAoIXBheW1lbnQub3V0cHV0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIE9QX1JFVFVSTiBvdXRwdXQnKTtcbiAgfVxuXG4gIHJldHVybiBwYXltZW50Lm91dHB1dDtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIENvcmVEQU8gT1BfUkVUVVJOIG91dHB1dCBzY3JpcHQgaW50byB0aGUgY29uc3RpdHVlbnQgcGFydHNcbiAqIEBwYXJhbSBzY3JpcHRcbiAqIEByZXR1cm5zIE9wUmV0dXJuUGFyYW1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdChzY3JpcHQ6IEJ1ZmZlcik6IE9wUmV0dXJuUGFyYW1zIHtcbiAgaWYgKCFzY3JpcHQuc3ViYXJyYXkoMCwgMSkuZXF1YWxzKE9QX1JFVFVSTl9JREVOVElGSUVSKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgYnl0ZSBtdXN0IGJlIGFuIE9QX1JFVFVSTicpO1xuICB9XG5cbiAgY29uc3QgcGF5bWVudCA9IHBheW1lbnRzLmVtYmVkKHtcbiAgICBvdXRwdXQ6IHNjcmlwdCxcbiAgfSk7XG4gIGNvbnN0IGRhdGEgPSBwYXltZW50LmRhdGE7XG4gIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBPUF9SRVRVUk4gb3V0cHV0Jyk7XG4gIH1cbiAgY29uc3QgZGF0YUJ1ZmZlciA9IGRhdGFbMF07XG4gIGlmIChkYXRhQnVmZmVyLmxlbmd0aCA+IDgwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBPUF9SRVRVUk4gb3V0cHV0cyBjYW5ub3QgaGF2ZSBhIGxlbmd0aCBsYXJnZXIgdGhhbiA4MCBieXRlc2ApO1xuICB9XG4gIGxldCBvZmZzZXQgPSAwO1xuXG4gIC8vIERlY29kZSBzYXRvc2hpKyBpZGVudGlmaWVyXG4gIGlmICghZGF0YUJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDQpLmVxdWFscyhDT1JFX0RBT19TQVRPU0hJX1BMVVNfSURFTlRJRklFUikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2F0b3NoaSsgaWRlbnRpZmllcicpO1xuICB9XG4gIG9mZnNldCArPSA0O1xuXG4gIC8vIERlY29kZSB2ZXJzaW9uXG4gIGNvbnN0IHZlcnNpb24gPSBkYXRhQnVmZmVyW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuXG4gIC8vIERlY29kZSBjaGFpbklkXG4gIGNvbnN0IGNoYWluSWQgPSBCdWZmZXIuZnJvbShkYXRhQnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgMikpO1xuICBpZiAoXG4gICAgIShcbiAgICAgIGNoYWluSWQuZXF1YWxzKENPUkVfREFPX0RFVk5FVF9DSEFJTl9JRCkgfHxcbiAgICAgIGNoYWluSWQuZXF1YWxzKENPUkVfREFPX1RFU1RORVRfQ0hBSU5fSUQpIHx8XG4gICAgICBjaGFpbklkLmVxdWFscyhDT1JFX0RBT19URVNUTkVUMl9DSEFJTl9JRCkgfHxcbiAgICAgIGNoYWluSWQuZXF1YWxzKENPUkVfREFPX01BSU5ORVRfQ0hBSU5fSUQpXG4gICAgKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBDaGFpbklEOiAke2NoYWluSWQudG9TdHJpbmcoXG4gICAgICAgICdoZXgnXG4gICAgICApfS4gTXVzdCBiZSBlaXRoZXIgMHgwNDU4IChkZXZuZXQpLCAweDA0NWIgKHRlc3RuZXQpLCBvciAweDA0NWMgKG1haW5uZXQpLmBcbiAgICApO1xuICB9XG4gIG9mZnNldCArPSAyO1xuXG4gIC8vIERlY29kZSBkZWxlZ2F0b3JcbiAgY29uc3QgZGVsZWdhdG9yID0gQnVmZmVyLmZyb20oZGF0YUJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDIwKSk7XG4gIG9mZnNldCArPSAyMDtcblxuICAvLyBEZWNvZGUgdmFsaWRhdG9yXG4gIGNvbnN0IHZhbGlkYXRvciA9IEJ1ZmZlci5mcm9tKGRhdGFCdWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyAyMCkpO1xuICBvZmZzZXQgKz0gMjA7XG5cbiAgLy8gRGVjb2RlIGZlZVxuICBjb25zdCBmZWUgPSBkYXRhQnVmZmVyW29mZnNldF07XG4gIG9mZnNldCArPSAxO1xuXG4gIGNvbnN0IGJhc2VQYXJhbXMgPSB7IHZlcnNpb24sIGNoYWluSWQsIGRlbGVnYXRvciwgdmFsaWRhdG9yLCBmZWUgfTtcblxuICAvLyBEZWNvZGUgcmVkZWVtU2NyaXB0IG9yIHRpbWVsb2NrXG4gIGlmIChvZmZzZXQgPT09IGRhdGFCdWZmZXIubGVuZ3RoIC0gNCkge1xuICAgIHJldHVybiB7IC4uLmJhc2VQYXJhbXMsIHRpbWVsb2NrOiBkZWNvZGVUaW1lbG9jayhkYXRhQnVmZmVyLnN1YmFycmF5KG9mZnNldCkpIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uYmFzZVBhcmFtcywgcmVkZWVtU2NyaXB0OiBCdWZmZXIuZnJvbShkYXRhQnVmZmVyLnN1YmFycmF5KG9mZnNldCkpIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHBhcmFtczogT3BSZXR1cm5QYXJhbXMpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgIHZlcnNpb246IHBhcmFtcy52ZXJzaW9uLFxuICAgIGNoYWluSWQ6IHBhcmFtcy5jaGFpbklkLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBkZWxlZ2F0b3I6IHBhcmFtcy5kZWxlZ2F0b3IudG9TdHJpbmcoJ2hleCcpLFxuICAgIHZhbGlkYXRvcjogcGFyYW1zLnZhbGlkYXRvci50b1N0cmluZygnaGV4JyksXG4gICAgZmVlOiBwYXJhbXMuZmVlLFxuICAgIC4uLigncmVkZWVtU2NyaXB0JyBpbiBwYXJhbXMgPyB7IHJlZGVlbVNjcmlwdDogcGFyYW1zLnJlZGVlbVNjcmlwdC50b1N0cmluZygnaGV4JykgfSA6IHt9KSxcbiAgICAuLi4oJ3RpbWVsb2NrJyBpbiBwYXJhbXMgPyB7IHRpbWVsb2NrOiBwYXJhbXMudGltZWxvY2sgfSA6IHt9KSxcbiAgfSk7XG59XG4iXX0=
@@ -1,7 +1,11 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Descriptor } from '@bitgo/wasm-miniscript';
1
+ import { Output } from '@bitgo-beta/utxo-core';
2
+ import { Descriptor } from '@bitgo/wasm-utxo';
4
3
  import { OpReturnParams } from './opReturn';
4
+ type StakingParams = {
5
+ amount: bigint;
6
+ descriptor: Descriptor;
7
+ index?: number;
8
+ };
5
9
  /**
6
10
  * Create the staking outputs for a CoreDAO staking transaction. This is the ordering
7
11
  * in which to add into the transaction.
@@ -10,12 +14,15 @@ import { OpReturnParams } from './opReturn';
10
14
  * If stakingParams.index is provided, then this is assumed to be a `derivable` descriptor.
11
15
  * @param opReturnParams to create the OP_RETURN output
12
16
  */
13
- export declare function createStakingOutputs(stakingParams: {
14
- amount: bigint;
15
- descriptor: Descriptor;
16
- index?: number;
17
- }, opReturnParams: OpReturnParams): {
17
+ export declare function createStakingOutputsCore(stakingParams: StakingParams, opReturnParams: OpReturnParams): Output<bigint>[];
18
+ type LegacyOutput = {
18
19
  script: Buffer;
19
20
  amount: bigint;
20
- }[];
21
+ };
22
+ /**
23
+ * @see createStakingOutputsCore
24
+ * @deprecated - use createStakingOutputsCore instead
25
+ */
26
+ export declare function createStakingOutputs(stakingParams: StakingParams, opReturnParams: OpReturnParams): LegacyOutput[];
27
+ export {};
21
28
  //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/coreDao/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAqC,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/E,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,GAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAgBlB;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,GAAG,YAAY,EAAE,CAEjH"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStakingOutputsCore = createStakingOutputsCore;
4
+ exports.createStakingOutputs = createStakingOutputs;
5
+ const opReturn_1 = require("./opReturn");
6
+ /**
7
+ * Create the staking outputs for a CoreDAO staking transaction. This is the ordering
8
+ * in which to add into the transaction.
9
+ * @param stakingParams how to create the timelocked stake output
10
+ * @param stakingParams.descriptor if stakingParams.index is not provided, then this is assumed to be a `definite` descriptor.
11
+ * If stakingParams.index is provided, then this is assumed to be a `derivable` descriptor.
12
+ * @param opReturnParams to create the OP_RETURN output
13
+ */
14
+ function createStakingOutputsCore(stakingParams, opReturnParams) {
15
+ if (stakingParams.descriptor.hasWildcard() && stakingParams.index === undefined) {
16
+ throw new Error('Cannot create staking outputs with a wildcard descriptor and no derivation index');
17
+ }
18
+ const outputScript = Buffer.from(stakingParams.index === undefined
19
+ ? stakingParams.descriptor.scriptPubkey()
20
+ : stakingParams.descriptor.atDerivationIndex(stakingParams.index).scriptPubkey());
21
+ const opReturnScript = (0, opReturn_1.createCoreDaoOpReturnOutputScript)(opReturnParams);
22
+ return [
23
+ { script: outputScript, value: stakingParams.amount },
24
+ { script: opReturnScript, value: BigInt(0) },
25
+ ];
26
+ }
27
+ /**
28
+ * @see createStakingOutputsCore
29
+ * @deprecated - use createStakingOutputsCore instead
30
+ */
31
+ function createStakingOutputs(stakingParams, opReturnParams) {
32
+ return createStakingOutputsCore(stakingParams, opReturnParams).map(({ value, ...o }) => ({ ...o, amount: value }));
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZURhby90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSw0REFtQkM7QUFXRCxvREFFQztBQWhERCx5Q0FBK0U7QUFRL0U7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxhQUE0QixFQUM1QixjQUE4QjtJQUU5QixJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksYUFBYSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoRixNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzlCLGFBQWEsQ0FBQyxLQUFLLEtBQUssU0FBUztRQUMvQixDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7UUFDekMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUNuRixDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBQSw0Q0FBaUMsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUV6RSxPQUFPO1FBQ0wsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQ3JELEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBT0Q7OztHQUdHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsYUFBNEIsRUFBRSxjQUE4QjtJQUMvRixPQUFPLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNySCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0LCBPcFJldHVyblBhcmFtcyB9IGZyb20gJy4vb3BSZXR1cm4nO1xuXG50eXBlIFN0YWtpbmdQYXJhbXMgPSB7XG4gIGFtb3VudDogYmlnaW50O1xuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yO1xuICBpbmRleD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBzdGFraW5nIG91dHB1dHMgZm9yIGEgQ29yZURBTyBzdGFraW5nIHRyYW5zYWN0aW9uLiBUaGlzIGlzIHRoZSBvcmRlcmluZ1xuICogaW4gd2hpY2ggdG8gYWRkIGludG8gdGhlIHRyYW5zYWN0aW9uLlxuICogQHBhcmFtIHN0YWtpbmdQYXJhbXMgaG93IHRvIGNyZWF0ZSB0aGUgdGltZWxvY2tlZCBzdGFrZSBvdXRwdXRcbiAqIEBwYXJhbSBzdGFraW5nUGFyYW1zLmRlc2NyaXB0b3IgaWYgc3Rha2luZ1BhcmFtcy5pbmRleCBpcyBub3QgcHJvdmlkZWQsIHRoZW4gdGhpcyBpcyBhc3N1bWVkIHRvIGJlIGEgYGRlZmluaXRlYCBkZXNjcmlwdG9yLlxuICogSWYgc3Rha2luZ1BhcmFtcy5pbmRleCBpcyBwcm92aWRlZCwgdGhlbiB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgYSBgZGVyaXZhYmxlYCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIG9wUmV0dXJuUGFyYW1zIHRvIGNyZWF0ZSB0aGUgT1BfUkVUVVJOIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Rha2luZ091dHB1dHNDb3JlKFxuICBzdGFraW5nUGFyYW1zOiBTdGFraW5nUGFyYW1zLFxuICBvcFJldHVyblBhcmFtczogT3BSZXR1cm5QYXJhbXNcbik6IE91dHB1dDxiaWdpbnQ+W10ge1xuICBpZiAoc3Rha2luZ1BhcmFtcy5kZXNjcmlwdG9yLmhhc1dpbGRjYXJkKCkgJiYgc3Rha2luZ1BhcmFtcy5pbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIHN0YWtpbmcgb3V0cHV0cyB3aXRoIGEgd2lsZGNhcmQgZGVzY3JpcHRvciBhbmQgbm8gZGVyaXZhdGlvbiBpbmRleCcpO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0U2NyaXB0ID0gQnVmZmVyLmZyb20oXG4gICAgc3Rha2luZ1BhcmFtcy5pbmRleCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHN0YWtpbmdQYXJhbXMuZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKVxuICAgICAgOiBzdGFraW5nUGFyYW1zLmRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoc3Rha2luZ1BhcmFtcy5pbmRleCkuc2NyaXB0UHVia2V5KClcbiAgKTtcbiAgY29uc3Qgb3BSZXR1cm5TY3JpcHQgPSBjcmVhdGVDb3JlRGFvT3BSZXR1cm5PdXRwdXRTY3JpcHQob3BSZXR1cm5QYXJhbXMpO1xuXG4gIHJldHVybiBbXG4gICAgeyBzY3JpcHQ6IG91dHB1dFNjcmlwdCwgdmFsdWU6IHN0YWtpbmdQYXJhbXMuYW1vdW50IH0sXG4gICAgeyBzY3JpcHQ6IG9wUmV0dXJuU2NyaXB0LCB2YWx1ZTogQmlnSW50KDApIH0sXG4gIF07XG59XG5cbnR5cGUgTGVnYWN5T3V0cHV0ID0ge1xuICBzY3JpcHQ6IEJ1ZmZlcjtcbiAgYW1vdW50OiBiaWdpbnQ7XG59O1xuXG4vKipcbiAqIEBzZWUgY3JlYXRlU3Rha2luZ091dHB1dHNDb3JlXG4gKiBAZGVwcmVjYXRlZCAtIHVzZSBjcmVhdGVTdGFraW5nT3V0cHV0c0NvcmUgaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3Rha2luZ091dHB1dHMoc3Rha2luZ1BhcmFtczogU3Rha2luZ1BhcmFtcywgb3BSZXR1cm5QYXJhbXM6IE9wUmV0dXJuUGFyYW1zKTogTGVnYWN5T3V0cHV0W10ge1xuICByZXR1cm4gY3JlYXRlU3Rha2luZ091dHB1dHNDb3JlKHN0YWtpbmdQYXJhbXMsIG9wUmV0dXJuUGFyYW1zKS5tYXAoKHsgdmFsdWUsIC4uLm8gfSkgPT4gKHsgLi4ubywgYW1vdW50OiB2YWx1ZSB9KSk7XG59XG4iXX0=