@bitgo-beta/utxo-staking 1.1.1-beta.826 → 1.1.1-beta.827

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 (135) 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.map +1 -0
  5. package/dist/cjs/src/babylon/delegationMessage.js +285 -0
  6. package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
  7. package/dist/cjs/src/babylon/descriptor.js +97 -0
  8. package/dist/cjs/src/babylon/index.d.ts.map +1 -0
  9. package/dist/{src → cjs/src}/babylon/index.js +1 -1
  10. package/dist/cjs/src/babylon/network.d.ts.map +1 -0
  11. package/dist/{src → cjs/src}/babylon/network.js +1 -1
  12. package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
  13. package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
  14. package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
  15. package/dist/cjs/src/babylon/stakingManager.js +120 -0
  16. package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
  17. package/dist/cjs/src/babylon/stakingParams.js +132 -0
  18. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  19. package/dist/{src → cjs/src}/babylon/undelegation/UndelegationResponse.js +1 -1
  20. package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
  21. package/dist/{src → cjs/src}/babylon/undelegation/index.js +1 -1
  22. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
  23. package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
  24. package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
  25. package/dist/cjs/src/coreDao/descriptor.js +38 -0
  26. package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
  27. package/dist/{src → cjs/src}/coreDao/index.js +1 -1
  28. package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
  29. package/dist/cjs/src/coreDao/opReturn.js +183 -0
  30. package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
  31. package/dist/cjs/src/coreDao/transaction.js +34 -0
  32. package/dist/cjs/src/index.d.ts.map +1 -0
  33. package/dist/{src → cjs/src}/index.js +1 -1
  34. package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
  35. package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
  36. package/dist/cjs/test/unit/babylon/bug71.js +108 -0
  37. package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
  38. package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
  39. package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
  40. package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
  41. package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
  42. package/dist/cjs/test/unit/babylon/transactions.js +338 -0
  43. package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
  44. package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
  45. package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
  46. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
  47. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
  48. package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
  49. package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
  50. package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
  51. package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
  52. package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
  53. package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
  54. package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
  55. package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
  56. package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
  57. package/dist/cjs/test/unit/coreDao/utils.js +54 -0
  58. package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
  59. package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
  60. package/dist/cjs/test/unit/fixtures.utils.js +91 -0
  61. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  62. package/dist/esm/babylon/delegationMessage.d.ts +38 -0
  63. package/dist/esm/babylon/delegationMessage.js +239 -0
  64. package/dist/esm/babylon/descriptor.d.ts +48 -0
  65. package/dist/esm/babylon/descriptor.js +91 -0
  66. package/dist/esm/babylon/index.d.ts +6 -0
  67. package/dist/esm/babylon/index.js +11 -0
  68. package/dist/esm/babylon/network.d.ts +7 -0
  69. package/dist/esm/babylon/network.js +29 -0
  70. package/dist/esm/babylon/params.mainnet.json +152 -0
  71. package/dist/esm/babylon/params.testnet.json +212 -0
  72. package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
  73. package/dist/esm/babylon/parseDescriptor.js +155 -0
  74. package/dist/esm/babylon/stakingManager.d.ts +6 -0
  75. package/dist/esm/babylon/stakingManager.js +83 -0
  76. package/dist/esm/babylon/stakingParams.d.ts +40 -0
  77. package/dist/esm/babylon/stakingParams.js +86 -0
  78. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  79. package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
  80. package/dist/esm/babylon/undelegation/index.d.ts +3 -0
  81. package/dist/esm/babylon/undelegation/index.js +3 -0
  82. package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
  83. package/dist/esm/babylon/undelegation/unbonding.js +70 -0
  84. package/dist/esm/coreDao/descriptor.d.ts +18 -0
  85. package/dist/esm/coreDao/descriptor.js +35 -0
  86. package/dist/esm/coreDao/index.d.ts +4 -0
  87. package/dist/esm/coreDao/index.js +4 -0
  88. package/dist/esm/coreDao/opReturn.d.ts +41 -0
  89. package/dist/esm/coreDao/opReturn.js +175 -0
  90. package/dist/esm/coreDao/transaction.d.ts +28 -0
  91. package/dist/esm/coreDao/transaction.js +30 -0
  92. package/dist/esm/index.d.ts +3 -0
  93. package/dist/esm/index.js +3 -0
  94. package/package.json +26 -10
  95. package/dist/src/babylon/delegationMessage.js +0 -285
  96. package/dist/src/babylon/descriptor.js +0 -97
  97. package/dist/src/babylon/parseDescriptor.js +0 -159
  98. package/dist/src/babylon/stakingManager.js +0 -120
  99. package/dist/src/babylon/stakingParams.js +0 -132
  100. package/dist/src/babylon/undelegation/unbonding.js +0 -111
  101. package/dist/src/coreDao/descriptor.js +0 -38
  102. package/dist/src/coreDao/opReturn.js +0 -183
  103. package/dist/src/coreDao/transaction.js +0 -34
  104. /package/dist/{src → cjs/src}/babylon/delegationMessage.d.ts +0 -0
  105. /package/dist/{src → cjs/src}/babylon/descriptor.d.ts +0 -0
  106. /package/dist/{src → cjs/src}/babylon/index.d.ts +0 -0
  107. /package/dist/{src → cjs/src}/babylon/network.d.ts +0 -0
  108. /package/dist/{src → cjs/src}/babylon/params.mainnet.json +0 -0
  109. /package/dist/{src → cjs/src}/babylon/params.testnet.json +0 -0
  110. /package/dist/{src → cjs/src}/babylon/parseDescriptor.d.ts +0 -0
  111. /package/dist/{src → cjs/src}/babylon/stakingManager.d.ts +0 -0
  112. /package/dist/{src → cjs/src}/babylon/stakingParams.d.ts +0 -0
  113. /package/dist/{src → cjs/src}/babylon/undelegation/UndelegationResponse.d.ts +0 -0
  114. /package/dist/{src → cjs/src}/babylon/undelegation/index.d.ts +0 -0
  115. /package/dist/{src → cjs/src}/babylon/undelegation/unbonding.d.ts +0 -0
  116. /package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +0 -0
  117. /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
  118. /package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +0 -0
  119. /package/dist/{src → cjs/src}/coreDao/transaction.d.ts +0 -0
  120. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  121. /package/dist/{src → esm}/babylon/delegationMessage.d.ts.map +0 -0
  122. /package/dist/{src → esm}/babylon/descriptor.d.ts.map +0 -0
  123. /package/dist/{src → esm}/babylon/index.d.ts.map +0 -0
  124. /package/dist/{src → esm}/babylon/network.d.ts.map +0 -0
  125. /package/dist/{src → esm}/babylon/parseDescriptor.d.ts.map +0 -0
  126. /package/dist/{src → esm}/babylon/stakingManager.d.ts.map +0 -0
  127. /package/dist/{src → esm}/babylon/stakingParams.d.ts.map +0 -0
  128. /package/dist/{src → esm}/babylon/undelegation/UndelegationResponse.d.ts.map +0 -0
  129. /package/dist/{src → esm}/babylon/undelegation/index.d.ts.map +0 -0
  130. /package/dist/{src → esm}/babylon/undelegation/unbonding.d.ts.map +0 -0
  131. /package/dist/{src → esm}/coreDao/descriptor.d.ts.map +0 -0
  132. /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
  133. /package/dist/{src → esm}/coreDao/opReturn.d.ts.map +0 -0
  134. /package/dist/{src → esm}/coreDao/transaction.d.ts.map +0 -0
  135. /package/dist/{src → esm}/index.d.ts.map +0 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const fs_1 = require("fs");
41
+ const t = __importStar(require("io-ts"));
42
+ const PathReporter_1 = require("io-ts/lib/PathReporter");
43
+ const Either_1 = require("fp-ts/Either");
44
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
45
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
46
+ const babylon_1 = require("../../../src/babylon");
47
+ const undelegation_1 = require("../../../src/babylon/undelegation");
48
+ const parseDescriptor_1 = require("../../../src/babylon/parseDescriptor");
49
+ const fixtures_utils_1 = require("../fixtures.utils");
50
+ const BtcDelegation = t.type({
51
+ unbonding_time: t.number,
52
+ undelegation_response: undelegation_1.UndelegationResponse,
53
+ });
54
+ async function getFixture(txid) {
55
+ // As returned by https://babylon.nodes.guru/api#/Query/BTCDelegation
56
+ const BtcDelegationResponse = t.type({ btc_delegation: BtcDelegation }, 'BtcDelegationResponse');
57
+ const filename = __dirname + `/../../fixtures/babylon/rpc/btc_delegation/testnet.${txid}.json`;
58
+ const data = JSON.parse(await fs_1.promises.readFile(filename, 'utf8'));
59
+ const result = BtcDelegationResponse.decode(data);
60
+ if ((0, Either_1.isLeft)(result)) {
61
+ throw new Error(`Failed to decode fixture data for txid ${txid}: ${PathReporter_1.PathReporter.report(result).join(', ')}`);
62
+ }
63
+ return result.right.btc_delegation;
64
+ }
65
+ function toDescriptor(descriptor) {
66
+ return descriptor instanceof wasm_utxo_1.Descriptor
67
+ ? descriptor
68
+ : wasm_utxo_1.Descriptor.fromStringDetectType(typeof descriptor === 'string' ? descriptor : wasm_utxo_1.ast.formatNode(descriptor));
69
+ }
70
+ function runTest(network, txid, descriptor) {
71
+ describe(`Unbonding transaction ${txid}`, function () {
72
+ let fixture;
73
+ let psbt;
74
+ let signatures;
75
+ before('should create a PSBT from the unbonding transaction', async function () {
76
+ fixture = await getFixture(txid);
77
+ const txBuffer = Buffer.from(fixture.undelegation_response.unbonding_tx_hex, 'hex');
78
+ const tx = utxolib.bitgo.createTransactionFromBuffer(txBuffer, network, {
79
+ amountType: 'bigint',
80
+ });
81
+ signatures = fixture.undelegation_response.covenant_unbonding_sig_list.map((sig) => (0, undelegation_1.toPartialSig)(sig));
82
+ psbt = (0, undelegation_1.toUnbondingPsbtWithSignatures)(tx, {
83
+ script: Buffer.from('5120b81e8691ab3c46bddf8ea43f776e4d64abf417a0fa5a4d09976c8aaadabbb6a0', 'hex'),
84
+ value: 100000n,
85
+ }, descriptor, signatures, utxolib.networks.testnet);
86
+ });
87
+ it('should have valid signatures', async function () {
88
+ (0, undelegation_1.assertValidSignatures)(psbt, 0, signatures);
89
+ });
90
+ it('should match the fixture', async function () {
91
+ await (0, fixtures_utils_1.assertTransactionEqualsFixture)('test/fixtures/babylon/unbonding.' + txid.substring(0, 4) + '.psbt.json', psbt);
92
+ });
93
+ it('can spend from unbonding output', async function () {
94
+ const parsed = (0, parseDescriptor_1.parseStakingDescriptor)(descriptor);
95
+ (0, assert_1.default)(parsed);
96
+ const descriptorBuilder = new babylon_1.BabylonDescriptorBuilder(parsed.stakerKey, parsed.finalityProviderKeys, parsed.covenantKeys, parsed.covenantThreshold, parsed.stakingTimeLock, fixture.unbonding_time);
97
+ assert_1.default.deepStrictEqual(descriptorBuilder.getUnbondingMiniscriptNode(), parsed.unbondingMiniscriptNode, 'Unbonding miniscript node does not match expected value');
98
+ (0, assert_1.default)(psbt.txOutputs.length === 1, 'Unbonding transaction should have exactly one output');
99
+ assert_1.default.deepStrictEqual(psbt.txOutputs[0].script, Buffer.from(descriptorBuilder.getUnbondingDescriptor().scriptPubkey()));
100
+ });
101
+ });
102
+ }
103
+ runTest(utxolib.networks.bitcoinPublicSignet, '5d277e1b29e5589074aea95ac8c8230fd911c2ec3c58774aafdef915619b772c', toDescriptor({
104
+ tr: [
105
+ '50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0',
106
+ [
107
+ {
108
+ and_v: [
109
+ {
110
+ and_v: [
111
+ { 'v:pk': '1b443f34ddc1bbaef52a8c5162dfa5a84524636ec745292f949470369ee67391' },
112
+ { 'v:pk': 'd23c2c25e1fcf8fd1c21b9a402c19e2e309e531e45e92fb1e9805b6056b0cc76' },
113
+ ],
114
+ },
115
+ {
116
+ multi_a: [
117
+ 6,
118
+ '0aee0509b16db71c999238a4827db945526859b13c95487ab46725357c9a9f25',
119
+ '113c3a32a9d320b72190a04a020a0db3976ef36972673258e9a38a364f3dc3b0',
120
+ '17921cf156ccb4e73d428f996ed11b245313e37e27c978ac4d2cc21eca4672e4',
121
+ '3bb93dfc8b61887d771f3630e9a63e97cbafcfcc78556a474df83a31a0ef899c',
122
+ '40afaf47c4ffa56de86410d8e47baa2bb6f04b604f4ea24323737ddc3fe092df',
123
+ '79a71ffd71c503ef2e2f91bccfc8fcda7946f4653cef0d9f3dde20795ef3b9f0',
124
+ 'd21faf78c6751a0d38e6bd8028b907ff07e9a869a43fc837d6b3f8dff6119a36',
125
+ 'f5199efae3f28bb82476163a7e458c7ad445d9bffb0682d10d3bdb2cb41f8e8e',
126
+ 'fa9d882d45f4060bdb8042183828cd87544f1ea997380e586cab77d5fd698737',
127
+ ],
128
+ },
129
+ ],
130
+ },
131
+ [
132
+ {
133
+ and_v: [
134
+ { 'v:pk': '1b443f34ddc1bbaef52a8c5162dfa5a84524636ec745292f949470369ee67391' },
135
+ {
136
+ multi_a: [
137
+ 6,
138
+ '0aee0509b16db71c999238a4827db945526859b13c95487ab46725357c9a9f25',
139
+ '113c3a32a9d320b72190a04a020a0db3976ef36972673258e9a38a364f3dc3b0',
140
+ '17921cf156ccb4e73d428f996ed11b245313e37e27c978ac4d2cc21eca4672e4',
141
+ '3bb93dfc8b61887d771f3630e9a63e97cbafcfcc78556a474df83a31a0ef899c',
142
+ '40afaf47c4ffa56de86410d8e47baa2bb6f04b604f4ea24323737ddc3fe092df',
143
+ '79a71ffd71c503ef2e2f91bccfc8fcda7946f4653cef0d9f3dde20795ef3b9f0',
144
+ 'd21faf78c6751a0d38e6bd8028b907ff07e9a869a43fc837d6b3f8dff6119a36',
145
+ 'f5199efae3f28bb82476163a7e458c7ad445d9bffb0682d10d3bdb2cb41f8e8e',
146
+ 'fa9d882d45f4060bdb8042183828cd87544f1ea997380e586cab77d5fd698737',
147
+ ],
148
+ },
149
+ ],
150
+ },
151
+ { and_v: [{ 'v:pk': '1b443f34ddc1bbaef52a8c5162dfa5a84524636ec745292f949470369ee67391' }, { older: 10000 }] },
152
+ ],
153
+ ],
154
+ ],
155
+ }));
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZWxlZ2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JhYnlsb24vdW5kZWxlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDJCQUFvQztBQUVwQyx5Q0FBMkI7QUFDM0IseURBQXNEO0FBQ3RELHlDQUFzQztBQUN0Qyw4REFBZ0Q7QUFDaEQsZ0RBQW1EO0FBR25ELGtEQUFnRTtBQUNoRSxvRUFLMkM7QUFDM0MsMEVBQThFO0FBQzlFLHNEQUFtRTtBQUVuRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNCLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTTtJQUN4QixxQkFBcUIsRUFBRSxtQ0FBb0I7Q0FDNUMsQ0FBQyxDQUFDO0FBSUgsS0FBSyxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3BDLHFFQUFxRTtJQUNyRSxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUNqRyxNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsc0RBQXNELElBQUksT0FBTyxDQUFDO0lBQy9GLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLElBQUEsZUFBTSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsSUFBSSxLQUFLLDJCQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElB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LEVBQUUsTUFBTSxFQUFFLGtFQUFrRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTthQUM5RztTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuXG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IFBhdGhSZXBvcnRlciB9IGZyb20gJ2lvLXRzL2xpYi9QYXRoUmVwb3J0ZXInO1xuaW1wb3J0IHsgaXNMZWZ0IH0gZnJvbSAnZnAtdHMvRWl0aGVyJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgYXN0LCBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBQYXJ0aWFsU2lnIH0gZnJvbSAnYmlwMTc0L3NyYy9saWIvaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9iYWJ5bG9uJztcbmltcG9ydCB7XG4gIHRvUGFydGlhbFNpZyxcbiAgVW5kZWxlZ2F0aW9uUmVzcG9uc2UsXG4gIGFzc2VydFZhbGlkU2lnbmF0dXJlcyxcbiAgdG9VbmJvbmRpbmdQc2J0V2l0aFNpZ25hdHVyZXMsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9iYWJ5bG9uL3VuZGVsZWdhdGlvbic7XG5pbXBvcnQgeyBwYXJzZVN0YWtpbmdEZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2JhYnlsb24vcGFyc2VEZXNjcmlwdG9yJztcbmltcG9ydCB7IGFzc2VydFRyYW5zYWN0aW9uRXF1YWxzRml4dHVyZSB9IGZyb20gJy4uL2ZpeHR1cmVzLnV0aWxzJztcblxuY29uc3QgQnRjRGVsZWdhdGlvbiA9IHQudHlwZSh7XG4gIHVuYm9uZGluZ190aW1lOiB0Lm51bWJlcixcbiAgdW5kZWxlZ2F0aW9uX3Jlc3BvbnNlOiBVbmRlbGVnYXRpb25SZXNwb25zZSxcbn0pO1xuXG50eXBlIEJ0Y0RlbGVnYXRpb24gPSB0LlR5cGVPZjx0eXBlb2YgQnRjRGVsZWdhdGlvbj47XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpeHR1cmUodHhpZDogc3RyaW5nKTogUHJvbWlzZTxCdGNEZWxlZ2F0aW9uPiB7XG4gIC8vIEFzIHJldHVybmVkIGJ5IGh0dHBzOi8vYmFieWxvbi5ub2Rlcy5ndXJ1L2FwaSMvUXVlcnkvQlRDRGVsZWdhdGlvblxuICBjb25zdCBCdGNEZWxlZ2F0aW9uUmVzcG9uc2UgPSB0LnR5cGUoeyBidGNfZGVsZWdhdGlvbjogQnRjRGVsZWdhdGlvbiB9LCAnQnRjRGVsZWdhdGlvblJlc3BvbnNlJyk7XG4gIGNvbnN0IGZpbGVuYW1lID0gX19kaXJuYW1lICsgYC8uLi8uLi9maXh0dXJlcy9iYWJ5bG9uL3JwYy9idGNfZGVsZWdhdGlvbi90ZXN0bmV0LiR7dHhpZH0uanNvbmA7XG4gIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcpKTtcbiAgY29uc3QgcmVzdWx0ID0gQnRjRGVsZWdhdGlvblJlc3BvbnNlLmRlY29kZShkYXRhKTtcbiAgaWYgKGlzTGVmdChyZXN1bHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZGVjb2RlIGZpeHR1cmUgZGF0YSBmb3IgdHhpZCAke3R4aWR9OiAke1BhdGhSZXBvcnRlci5yZXBvcnQocmVzdWx0KS5qb2luKCcsICcpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQucmlnaHQuYnRjX2RlbGVnYXRpb247XG59XG5cbnR5cGUgRGVzY3JpcHRvckxpa2UgPSBEZXNjcmlwdG9yIHwgYXN0LkRlc2NyaXB0b3JOb2RlIHwgc3RyaW5nO1xuXG5mdW5jdGlvbiB0b0Rlc2NyaXB0b3IoZGVzY3JpcHRvcjogRGVzY3JpcHRvckxpa2UpOiBEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgaW5zdGFuY2VvZiBEZXNjcmlwdG9yXG4gICAgPyBkZXNjcmlwdG9yXG4gICAgOiBEZXNjcmlwdG9yLmZyb21TdHJpbmdEZXRlY3RUeXBlKHR5cGVvZiBkZXNjcmlwdG9yID09PSAnc3RyaW5nJyA/IGRlc2NyaXB0b3IgOiBhc3QuZm9ybWF0Tm9kZShkZXNjcmlwdG9yKSk7XG59XG5cbmZ1bmN0aW9uIHJ1blRlc3QobmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCB0eGlkOiBzdHJpbmcsIGRlc2NyaXB0b3I6IERlc2NyaXB0b3IpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYFVuYm9uZGluZyB0cmFuc2FjdGlvbiAke3R4aWR9YCwgZnVuY3Rpb24gKCkge1xuICAgIGxldCBmaXh0dXJlOiBCdGNEZWxlZ2F0aW9uO1xuICAgIGxldCBwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0O1xuICAgIGxldCBzaWduYXR1cmVzOiBQYXJ0aWFsU2lnW107XG5cbiAgICBiZWZvcmUoJ3Nob3VsZCBjcmVhdGUgYSBQU0JUIGZyb20gdGhlIHVuYm9uZGluZyB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKHR4aWQpO1xuICAgICAgY29uc3QgdHhCdWZmZXIgPSBCdWZmZXIuZnJvbShmaXh0dXJlLnVuZGVsZWdhdGlvbl9yZXNwb25zZS51bmJvbmRpbmdfdHhfaGV4LCAnaGV4Jyk7XG4gICAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKHR4QnVmZmVyLCBuZXR3b3JrLCB7XG4gICAgICAgIGFtb3VudFR5cGU6ICdiaWdpbnQnLFxuICAgICAgfSk7XG4gICAgICBzaWduYXR1cmVzID0gZml4dHVyZS51bmRlbGVnYXRpb25fcmVzcG9uc2UuY292ZW5hbnRfdW5ib25kaW5nX3NpZ19saXN0Lm1hcCgoc2lnKSA9PiB0b1BhcnRpYWxTaWcoc2lnKSk7XG5cbiAgICAgIHBzYnQgPSB0b1VuYm9uZGluZ1BzYnRXaXRoU2lnbmF0dXJlcyhcbiAgICAgICAgdHgsXG4gICAgICAgIHtcbiAgICAgICAgICBzY3JpcHQ6IEJ1ZmZlci5mcm9tKCc1MTIwYjgxZTg2OTFhYjNjNDZiZGRmOGVhNDNmNzc2ZTRkNjRhYmY0MTdhMGZhNWE0ZDA5OTc2YzhhYWFkYWJiYjZhMCcsICdoZXgnKSxcbiAgICAgICAgICB2YWx1ZTogMTAwXzAwMG4sXG4gICAgICAgIH0sXG4gICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgIHNpZ25hdHVyZXMsXG4gICAgICAgIHV0eG9saWIubmV0d29ya3MudGVzdG5ldFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSB2YWxpZCBzaWduYXR1cmVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0VmFsaWRTaWduYXR1cmVzKHBzYnQsIDAsIHNpZ25hdHVyZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCB0aGUgZml4dHVyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydFRyYW5zYWN0aW9uRXF1YWxzRml4dHVyZShcbiAgICAgICAgJ3Rlc3QvZml4dHVyZXMvYmFieWxvbi91bmJvbmRpbmcuJyArIHR4aWQuc3Vic3RyaW5nKDAsIDQpICsgJy5wc2J0Lmpzb24nLFxuICAgICAgICBwc2J0XG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbiBzcGVuZCBmcm9tIHVuYm9uZGluZyBvdXRwdXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVN0YWtpbmdEZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0KHBhcnNlZCk7XG5cbiAgICAgIGNvbnN0IGRlc2NyaXB0b3JCdWlsZGVyID0gbmV3IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlcihcbiAgICAgICAgcGFyc2VkLnN0YWtlcktleSxcbiAgICAgICAgcGFyc2VkLmZpbmFsaXR5UHJvdmlkZXJLZXlzLFxuICAgICAgICBwYXJzZWQuY292ZW5hbnRLZXlzLFxuICAgICAgICBwYXJzZWQuY292ZW5hbnRUaHJlc2hvbGQsXG4gICAgICAgIHBhcnNlZC5zdGFraW5nVGltZUxvY2ssXG4gICAgICAgIGZpeHR1cmUudW5ib25kaW5nX3RpbWVcbiAgICAgICk7XG5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoXG4gICAgICAgIGRlc2NyaXB0b3JCdWlsZGVyLmdldFVuYm9uZGluZ01pbmlzY3JpcHROb2RlKCksXG4gICAgICAgIHBhcnNlZC51bmJvbmRpbmdNaW5pc2NyaXB0Tm9kZSxcbiAgICAgICAgJ1VuYm9uZGluZyBtaW5pc2NyaXB0IG5vZGUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUnXG4gICAgICApO1xuXG4gICAgICBhc3NlcnQocHNidC50eE91dHB1dHMubGVuZ3RoID09PSAxLCAnVW5ib25kaW5nIHRyYW5zYWN0aW9uIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIG91dHB1dCcpO1xuXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgICBwc2J0LnR4T3V0cHV0c1swXS5zY3JpcHQsXG4gICAgICAgIEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3JCdWlsZGVyLmdldFVuYm9uZGluZ0Rlc2NyaXB0b3IoKS5zY3JpcHRQdWJrZXkoKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5ydW5UZXN0KFxuICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW5QdWJsaWNTaWduZXQsXG4gICc1ZDI3N2UxYjI5ZTU1ODkwNzRhZWE5NWFjOGM4MjMwZmQ5MTFjMmVjM2M1ODc3NGFhZmRlZjkxNTYxOWI3NzJjJyxcbiAgdG9EZXNjcmlwdG9yKHtcbiAgICB0cjogW1xuICAgICAgJzUwOTI5Yjc0YzFhMDQ5NTRiNzhiNGI2MDM1ZTk3YTVlMDc4YTVhMGYyOGVjOTZkNTQ3YmZlZTlhY2U4MDNhYzAnLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgYW5kX3Y6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYW5kX3Y6IFtcbiAgICAgICAgICAgICAgICB7ICd2OnBrJzogJzFiNDQzZjM0ZGRjMWJiYWVmNTJhOGM1MTYyZGZhNWE4NDUyNDYzNmVjNzQ1MjkyZjk0OTQ3MDM2OWVlNjczOTEnIH0sXG4gICAgICAgICAgICAgICAgeyAndjpwayc6ICdkMjNjMmMyNWUxZmNmOGZkMWMyMWI5YTQwMmMxOWUyZTMwOWU1MzFlNDVlOTJmYjFlOTgwNWI2MDU2YjBjYzc2JyB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbXVsdGlfYTogW1xuICAgICAgICAgICAgICAgIDYsXG4gICAgICAgICAgICAgICAgJzBhZWUwNTA5YjE2ZGI3MWM5OTkyMzhhNDgyN2RiOTQ1NTI2ODU5YjEzYzk1NDg3YWI0NjcyNTM1N2M5YTlmMjUnLFxuICAgICAgICAgICAgICAgICcxMTNjM2EzMmE5ZDMyMGI3MjE5MGEwNGEwMjBhMGRiMzk3NmVmMzY5NzI2NzMyNThlOWEzOGEzNjRmM2RjM2IwJyxcbiAgICAgICAgICAgICAgICAnMTc5MjFjZjE1NmNjYjRlNzNkNDI4Zjk5NmVkMTFiMjQ1MzEzZTM3ZTI3Yzk3OGFjNGQyY2MyMWVjYTQ2NzJlNCcsXG4gICAgICAgICAgICAgICAgJzNiYjkzZGZjOGI2MTg4N2Q3NzFmMzYzMGU5YTYzZTk3Y2JhZmNmY2M3ODU1NmE0NzRkZjgzYTMxYTBlZjg5OWMnLFxuICAgICAgICAgICAgICAgICc0MGFmYWY0N2M0ZmZhNTZkZTg2NDEwZDhlNDdiYWEyYmI2ZjA0YjYwNGY0ZWEyNDMyMzczN2RkYzNmZTA5MmRmJyxcbiAgICAgICAgICAgICAgICAnNzlhNzFmZmQ3MWM1MDNlZjJlMmY5MWJjY2ZjOGZjZGE3OTQ2ZjQ2NTNjZWYwZDlmM2RkZTIwNzk1ZWYzYjlmMCcsXG4gICAgICAgICAgICAgICAgJ2QyMWZhZjc4YzY3NTFhMGQzOGU2YmQ4MDI4YjkwN2ZmMDdlOWE4NjlhNDNmYzgzN2Q2YjNmOGRmZjYxMTlhMzYnLFxuICAgICAgICAgICAgICAgICdmNTE5OWVmYWUzZjI4YmI4MjQ3NjE2M2E3ZTQ1OGM3YWQ0NDVkOWJmZmIwNjgyZDEwZDNiZGIyY2I0MWY4ZThlJyxcbiAgICAgICAgICAgICAgICAnZmE5ZDg4MmQ0NWY0MDYwYmRiODA0MjE4MzgyOGNkODc1NDRmMWVhOTk3MzgwZTU4NmNhYjc3ZDVmZDY5ODczNycsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbmRfdjogW1xuICAgICAgICAgICAgICB7ICd2OnBrJzogJzFiNDQzZjM0ZGRjMWJiYWVmNTJhOGM1MTYyZGZhNWE4NDUyNDYzNmVjNzQ1MjkyZjk0OTQ3MDM2OWVlNjczOTEnIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtdWx0aV9hOiBbXG4gICAgICAgICAgICAgICAgICA2LFxuICAgICAgICAgICAgICAgICAgJzBhZWUwNTA5YjE2ZGI3MWM5OTkyMzhhNDgyN2RiOTQ1NTI2ODU5YjEzYzk1NDg3YWI0NjcyNTM1N2M5YTlmMjUnLFxuICAgICAgICAgICAgICAgICAgJzExM2MzYTMyYTlkMzIwYjcyMTkwYTA0YTAyMGEwZGIzOTc2ZWYzNjk3MjY3MzI1OGU5YTM4YTM2NGYzZGMzYjAnLFxuICAgICAgICAgICAgICAgICAgJzE3OTIxY2YxNTZjY2I0ZTczZDQyOGY5OTZlZDExYjI0NTMxM2UzN2UyN2M5NzhhYzRkMmNjMjFlY2E0NjcyZTQnLFxuICAgICAgICAgICAgICAgICAgJzNiYjkzZGZjOGI2MTg4N2Q3NzFmMzYzMGU5YTYzZTk3Y2JhZmNmY2M3ODU1NmE0NzRkZjgzYTMxYTBlZjg5OWMnLFxuICAgICAgICAgICAgICAgICAgJzQwYWZhZjQ3YzRmZmE1NmRlODY0MTBkOGU0N2JhYTJiYjZmMDRiNjA0ZjRlYTI0MzIzNzM3ZGRjM2ZlMDkyZGYnLFxuICAgICAgICAgICAgICAgICAgJzc5YTcxZmZkNzFjNTAzZWYyZTJmOTFiY2NmYzhmY2RhNzk0NmY0NjUzY2VmMGQ5ZjNkZGUyMDc5NWVmM2I5ZjAnLFxuICAgICAgICAgICAgICAgICAgJ2QyMWZhZjc4YzY3NTFhMGQzOGU2YmQ4MDI4YjkwN2ZmMDdlOWE4NjlhNDNmYzgzN2Q2YjNmOGRmZjYxMTlhMzYnLFxuICAgICAgICAgICAgICAgICAgJ2Y1MTk5ZWZhZTNmMjhiYjgyNDc2MTYzYTdlNDU4YzdhZDQ0NWQ5YmZmYjA2ODJkMTBkM2JkYjJjYjQxZjhlOGUnLFxuICAgICAgICAgICAgICAgICAgJ2ZhOWQ4ODJkNDVmNDA2MGJkYjgwNDIxODM4MjhjZDg3NTQ0ZjFlYTk5NzM4MGU1ODZjYWI3N2Q1ZmQ2OTg3MzcnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBhbmRfdjogW3sgJ3Y6cGsnOiAnMWI0NDNmMzRkZGMxYmJhZWY1MmE4YzUxNjJkZmE1YTg0NTI0NjM2ZWM3NDUyOTJmOTQ5NDcwMzY5ZWU2NzM5MScgfSwgeyBvbGRlcjogMTAwMDAgfV0gfSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgXSxcbiAgfSlcbik7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import * as bitcoinjslib from 'bitcoinjs-lib';
2
+ import { ECPairInterface } from '@bitgo-beta/utxo-lib';
3
+ import * as vendor from '@bitgo-beta/babylonlabs-io-btc-staking-ts';
4
+ import * as babylonProtobuf from '@babylonlabs-io/babylon-proto-ts';
5
+ import { BabylonDescriptorBuilder, ValueWithTypeUrl } from '../../../src/babylon';
6
+ type Result = {
7
+ unsignedDelegationMsg: ValueWithTypeUrl<babylonProtobuf.btcstakingtx.MsgCreateBTCDelegation>;
8
+ stakingTx: bitcoinjslib.Transaction;
9
+ };
10
+ export declare function getBitGoUtxoStakingMsgCreateBtcDelegation(network: bitcoinjslib.Network, stakerKey: ECPairInterface, finalityProvider: ECPairInterface, descriptorBuilder: BabylonDescriptorBuilder, stakingParams: vendor.VersionedStakingParams[], changeAddress: string, amount: number, utxo: vendor.UTXO, feeRateSatB: number, blockHeight: number): Promise<Result>;
11
+ export declare function getVendorMsgCreateBtcDelegation(network: bitcoinjslib.Network, stakerKey: ECPairInterface, finalityProvider: ECPairInterface, descriptorBuilder: BabylonDescriptorBuilder, stakingParams: vendor.VersionedStakingParams[], changeAddress: string, amount: number, utxo: vendor.UTXO, feeRateSatB: number, blockHeight: number): Promise<Result>;
12
+ export {};
13
+ //# sourceMappingURL=vendor.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor.utils.d.ts","sourceRoot":"","sources":["../../../../../test/unit/babylon/vendor.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,2CAA2C,CAAC;AACpE,OAAO,KAAK,eAAe,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EACL,wBAAwB,EAGxB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAI9B,KAAK,MAAM,GAAG;IACZ,qBAAqB,EAAE,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAC7F,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC;CACrC,CAAC;AAEF,wBAAsB,yCAAyC,CAC7D,OAAO,EAAE,YAAY,CAAC,OAAO,EAC7B,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,MAAM,CAAC,sBAAsB,EAAE,EAC9C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,YAAY,CAAC,OAAO,EAC7B,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,wBAAwB,EAC3C,aAAa,EAAE,MAAM,CAAC,sBAAsB,EAAE,EAC9C,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
@@ -0,0 +1,78 @@
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.getBitGoUtxoStakingMsgCreateBtcDelegation = getBitGoUtxoStakingMsgCreateBtcDelegation;
37
+ exports.getVendorMsgCreateBtcDelegation = getVendorMsgCreateBtcDelegation;
38
+ const vendor = __importStar(require("@bitgo-beta/babylonlabs-io-btc-staking-ts"));
39
+ const babylonProtobuf = __importStar(require("@babylonlabs-io/babylon-proto-ts"));
40
+ const address_1 = require("bitcoinjs-lib/src/address");
41
+ const babylonlabs_io_btc_staking_ts_1 = require("@bitgo-beta/babylonlabs-io-btc-staking-ts");
42
+ const babylon_1 = require("../../../src/babylon");
43
+ const key_utils_1 = require("./key.utils");
44
+ async function getBitGoUtxoStakingMsgCreateBtcDelegation(network, stakerKey, finalityProvider, descriptorBuilder, stakingParams, changeAddress, amount, utxo, feeRateSatB, blockHeight) {
45
+ return await (0, babylon_1.createUnsignedPreStakeRegistrationBabylonTransactionWithBtcProvider)((0, babylon_1.getBtcProviderForECKey)(descriptorBuilder, stakerKey), network, {
46
+ address: changeAddress,
47
+ publicKeyNoCoordHex: (0, key_utils_1.getXOnlyPubkey)(stakerKey).toString('hex'),
48
+ }, {
49
+ finalityProviderPksNoCoordHex: [(0, key_utils_1.getXOnlyPubkey)(finalityProvider).toString('hex')],
50
+ stakingAmountSat: amount,
51
+ stakingTimelock: (0, babylonlabs_io_btc_staking_ts_1.getBabylonParamByBtcHeight)(blockHeight, stakingParams).minStakingTimeBlocks,
52
+ }, 800000, [utxo], feeRateSatB, (0, address_1.toBech32)(Buffer.from('test'), 0, 'bbn'), 'delegation:create', stakingParams);
53
+ }
54
+ async function getVendorMsgCreateBtcDelegation(network, stakerKey, finalityProvider, descriptorBuilder, stakingParams, changeAddress, amount, utxo, feeRateSatB, blockHeight) {
55
+ const babylonProvider = {
56
+ async signTransaction(msg) {
57
+ // return unsigned payload
58
+ return babylonProtobuf.btcstakingtx.MsgCreateBTCDelegation.encode(msg.value).finish();
59
+ },
60
+ };
61
+ const manager = new vendor.BabylonBtcStakingManager(network, stakingParams, (0, babylon_1.getBtcProviderForECKey)(descriptorBuilder, stakerKey), babylonProvider);
62
+ const result = await manager.preStakeRegistrationBabylonTransaction({
63
+ address: changeAddress,
64
+ publicKeyNoCoordHex: (0, key_utils_1.getXOnlyPubkey)(stakerKey).toString('hex'),
65
+ }, {
66
+ finalityProviderPksNoCoordHex: [(0, key_utils_1.getXOnlyPubkey)(finalityProvider).toString('hex')],
67
+ stakingAmountSat: amount,
68
+ stakingTimelock: (0, babylonlabs_io_btc_staking_ts_1.getBabylonParamByBtcHeight)(blockHeight, stakingParams).minStakingTimeBlocks,
69
+ }, blockHeight, [utxo], feeRateSatB, (0, address_1.toBech32)(Buffer.from('test'), 0, 'bbn'));
70
+ return {
71
+ unsignedDelegationMsg: {
72
+ typeUrl: '/babylon.btcstaking.v1.MsgCreateBTCDelegation',
73
+ value: babylonProtobuf.btcstakingtx.MsgCreateBTCDelegation.decode(result.signedBabylonTx),
74
+ },
75
+ stakingTx: result.stakingTx,
76
+ };
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JhYnlsb24vdmVuZG9yLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLDhGQStCQztBQUVELDBFQWtEQztBQXRHRCxrRkFBb0U7QUFDcEUsa0ZBQW9FO0FBQ3BFLHVEQUFxRDtBQUNyRCw2RkFBdUY7QUFFdkYsa0RBSzhCO0FBRTlCLDJDQUE2QztBQU90QyxLQUFLLFVBQVUseUNBQXlDLENBQzdELE9BQTZCLEVBQzdCLFNBQTBCLEVBQzFCLGdCQUFpQyxFQUNqQyxpQkFBMkMsRUFDM0MsYUFBOEMsRUFDOUMsYUFBcUIsRUFDckIsTUFBYyxFQUNkLElBQWlCLEVBQ2pCLFdBQW1CLEVBQ25CLFdBQW1CO0lBRW5CLE9BQU8sTUFBTSxJQUFBLDZFQUFtRSxFQUM5RSxJQUFBLGdDQUFzQixFQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxFQUNwRCxPQUFPLEVBQ1A7UUFDRSxPQUFPLEVBQUUsYUFBYTtRQUN0QixtQkFBbUIsRUFBRSxJQUFBLDBCQUFjLEVBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztLQUMvRCxFQUNEO1FBQ0UsNkJBQTZCLEVBQUUsQ0FBQyxJQUFBLDBCQUFjLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakYsZ0JBQWdCLEVBQUUsTUFBTTtRQUN4QixlQUFlLEVBQUUsSUFBQSwwREFBMEIsRUFBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsb0JBQW9CO0tBQzdGLEVBQ0QsTUFBTyxFQUNQLENBQUMsSUFBSSxDQUFDLEVBQ04sV0FBVyxFQUNYLElBQUEsa0JBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFDdkMsbUJBQW1CLEVBQ25CLGFBQWEsQ0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVNLEtBQUssVUFBVSwrQkFBK0IsQ0FDbkQsT0FBNkIsRUFDN0IsU0FBMEIsRUFDMUIsZ0JBQWlDLEVBQ2pDLGlCQUEyQyxFQUMzQyxhQUE4QyxFQUM5QyxhQUFxQixFQUNyQixNQUFjLEVBQ2QsSUFBaUIsRUFDakIsV0FBbUIsRUFDbkIsV0FBbUI7SUFFbkIsTUFBTSxlQUFlLEdBQTJCO1FBQzlDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRztZQUN2QiwwQkFBMEI7WUFDMUIsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FDL0QsR0FBRyxDQUFDLEtBQTRELENBQ2pFLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDYixDQUFDO0tBQ0YsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLHdCQUF3QixDQUNqRCxPQUFPLEVBQ1AsYUFBYSxFQUNiLElBQUEsZ0NBQXNCLEVBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLEVBQ3BELGVBQWUsQ0FDaEIsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLHNDQUFzQyxDQUNqRTtRQUNFLE9BQU8sRUFBRSxhQUFhO1FBQ3RCLG1CQUFtQixFQUFFLElBQUEsMEJBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0tBQy9ELEVBQ0Q7UUFDRSw2QkFBNkIsRUFBRSxDQUFDLElBQUEsMEJBQWMsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRixnQkFBZ0IsRUFBRSxNQUFNO1FBQ3hCLGVBQWUsRUFBRSxJQUFBLDBEQUEwQixFQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQyxvQkFBb0I7S0FDN0YsRUFDRCxXQUFXLEVBQ1gsQ0FBQyxJQUFJLENBQUMsRUFDTixXQUFXLEVBQ1gsSUFBQSxrQkFBUSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUN4QyxDQUFDO0lBRUYsT0FBTztRQUNMLHFCQUFxQixFQUFFO1lBQ3JCLE9BQU8sRUFBRSwrQ0FBK0M7WUFDeEQsS0FBSyxFQUFFLGVBQWUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7U0FDMUY7UUFDRCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7S0FDNUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXRjb2luanNsaWIgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyBFQ1BhaXJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB2ZW5kb3IgZnJvbSAnQGJpdGdvLWJldGEvYmFieWxvbmxhYnMtaW8tYnRjLXN0YWtpbmctdHMnO1xuaW1wb3J0ICogYXMgYmFieWxvblByb3RvYnVmIGZyb20gJ0BiYWJ5bG9ubGFicy1pby9iYWJ5bG9uLXByb3RvLXRzJztcbmltcG9ydCB7IHRvQmVjaDMyIH0gZnJvbSAnYml0Y29pbmpzLWxpYi9zcmMvYWRkcmVzcyc7XG5pbXBvcnQgeyBnZXRCYWJ5bG9uUGFyYW1CeUJ0Y0hlaWdodCB9IGZyb20gJ0BiaXRnby1iZXRhL2JhYnlsb25sYWJzLWlvLWJ0Yy1zdGFraW5nLXRzJztcblxuaW1wb3J0IHtcbiAgQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyLFxuICBjcmVhdGVVbnNpZ25lZFByZVN0YWtlUmVnaXN0cmF0aW9uQmFieWxvblRyYW5zYWN0aW9uV2l0aEJ0Y1Byb3ZpZGVyLFxuICBnZXRCdGNQcm92aWRlckZvckVDS2V5LFxuICBWYWx1ZVdpdGhUeXBlVXJsLFxufSBmcm9tICcuLi8uLi8uLi9zcmMvYmFieWxvbic7XG5cbmltcG9ydCB7IGdldFhPbmx5UHVia2V5IH0gZnJvbSAnLi9rZXkudXRpbHMnO1xuXG50eXBlIFJlc3VsdCA9IHtcbiAgdW5zaWduZWREZWxlZ2F0aW9uTXNnOiBWYWx1ZVdpdGhUeXBlVXJsPGJhYnlsb25Qcm90b2J1Zi5idGNzdGFraW5ndHguTXNnQ3JlYXRlQlRDRGVsZWdhdGlvbj47XG4gIHN0YWtpbmdUeDogYml0Y29pbmpzbGliLlRyYW5zYWN0aW9uO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJpdEdvVXR4b1N0YWtpbmdNc2dDcmVhdGVCdGNEZWxlZ2F0aW9uKFxuICBuZXR3b3JrOiBiaXRjb2luanNsaWIuTmV0d29yayxcbiAgc3Rha2VyS2V5OiBFQ1BhaXJJbnRlcmZhY2UsXG4gIGZpbmFsaXR5UHJvdmlkZXI6IEVDUGFpckludGVyZmFjZSxcbiAgZGVzY3JpcHRvckJ1aWxkZXI6IEJhYnlsb25EZXNjcmlwdG9yQnVpbGRlcixcbiAgc3Rha2luZ1BhcmFtczogdmVuZG9yLlZlcnNpb25lZFN0YWtpbmdQYXJhbXNbXSxcbiAgY2hhbmdlQWRkcmVzczogc3RyaW5nLFxuICBhbW91bnQ6IG51bWJlcixcbiAgdXR4bzogdmVuZG9yLlVUWE8sXG4gIGZlZVJhdGVTYXRCOiBudW1iZXIsXG4gIGJsb2NrSGVpZ2h0OiBudW1iZXJcbik6IFByb21pc2U8UmVzdWx0PiB7XG4gIHJldHVybiBhd2FpdCBjcmVhdGVVbnNpZ25lZFByZVN0YWtlUmVnaXN0cmF0aW9uQmFieWxvblRyYW5zYWN0aW9uV2l0aEJ0Y1Byb3ZpZGVyKFxuICAgIGdldEJ0Y1Byb3ZpZGVyRm9yRUNLZXkoZGVzY3JpcHRvckJ1aWxkZXIsIHN0YWtlcktleSksXG4gICAgbmV0d29yayxcbiAgICB7XG4gICAgICBhZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLFxuICAgICAgcHVibGljS2V5Tm9Db29yZEhleDogZ2V0WE9ubHlQdWJrZXkoc3Rha2VyS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBmaW5hbGl0eVByb3ZpZGVyUGtzTm9Db29yZEhleDogW2dldFhPbmx5UHVia2V5KGZpbmFsaXR5UHJvdmlkZXIpLnRvU3RyaW5nKCdoZXgnKV0sXG4gICAgICBzdGFraW5nQW1vdW50U2F0OiBhbW91bnQsXG4gICAgICBzdGFraW5nVGltZWxvY2s6IGdldEJhYnlsb25QYXJhbUJ5QnRjSGVpZ2h0KGJsb2NrSGVpZ2h0LCBzdGFraW5nUGFyYW1zKS5taW5TdGFraW5nVGltZUJsb2NrcyxcbiAgICB9LFxuICAgIDgwMF8wMDAsXG4gICAgW3V0eG9dLFxuICAgIGZlZVJhdGVTYXRCLFxuICAgIHRvQmVjaDMyKEJ1ZmZlci5mcm9tKCd0ZXN0JyksIDAsICdiYm4nKSxcbiAgICAnZGVsZWdhdGlvbjpjcmVhdGUnLFxuICAgIHN0YWtpbmdQYXJhbXNcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZlbmRvck1zZ0NyZWF0ZUJ0Y0RlbGVnYXRpb24oXG4gIG5ldHdvcms6IGJpdGNvaW5qc2xpYi5OZXR3b3JrLFxuICBzdGFrZXJLZXk6IEVDUGFpckludGVyZmFjZSxcbiAgZmluYWxpdHlQcm92aWRlcjogRUNQYWlySW50ZXJmYWNlLFxuICBkZXNjcmlwdG9yQnVpbGRlcjogQmFieWxvbkRlc2NyaXB0b3JCdWlsZGVyLFxuICBzdGFraW5nUGFyYW1zOiB2ZW5kb3IuVmVyc2lvbmVkU3Rha2luZ1BhcmFtc1tdLFxuICBjaGFuZ2VBZGRyZXNzOiBzdHJpbmcsXG4gIGFtb3VudDogbnVtYmVyLFxuICB1dHhvOiB2ZW5kb3IuVVRYTyxcbiAgZmVlUmF0ZVNhdEI6IG51bWJlcixcbiAgYmxvY2tIZWlnaHQ6IG51bWJlclxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgY29uc3QgYmFieWxvblByb3ZpZGVyOiB2ZW5kb3IuQmFieWxvblByb3ZpZGVyID0ge1xuICAgIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihtc2cpIHtcbiAgICAgIC8vIHJldHVybiB1bnNpZ25lZCBwYXlsb2FkXG4gICAgICByZXR1cm4gYmFieWxvblByb3RvYnVmLmJ0Y3N0YWtpbmd0eC5Nc2dDcmVhdGVCVENEZWxlZ2F0aW9uLmVuY29kZShcbiAgICAgICAgbXNnLnZhbHVlIGFzIGJhYnlsb25Qcm90b2J1Zi5idGNzdGFraW5ndHguTXNnQ3JlYXRlQlRDRGVsZWdhdGlvblxuICAgICAgKS5maW5pc2goKTtcbiAgICB9LFxuICB9O1xuICBjb25zdCBtYW5hZ2VyID0gbmV3IHZlbmRvci5CYWJ5bG9uQnRjU3Rha2luZ01hbmFnZXIoXG4gICAgbmV0d29yayxcbiAgICBzdGFraW5nUGFyYW1zLFxuICAgIGdldEJ0Y1Byb3ZpZGVyRm9yRUNLZXkoZGVzY3JpcHRvckJ1aWxkZXIsIHN0YWtlcktleSksXG4gICAgYmFieWxvblByb3ZpZGVyXG4gICk7XG5cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbWFuYWdlci5wcmVTdGFrZVJlZ2lzdHJhdGlvbkJhYnlsb25UcmFuc2FjdGlvbihcbiAgICB7XG4gICAgICBhZGRyZXNzOiBjaGFuZ2VBZGRyZXNzLFxuICAgICAgcHVibGljS2V5Tm9Db29yZEhleDogZ2V0WE9ubHlQdWJrZXkoc3Rha2VyS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfSxcbiAgICB7XG4gICAgICBmaW5hbGl0eVByb3ZpZGVyUGtzTm9Db29yZEhleDogW2dldFhPbmx5UHVia2V5KGZpbmFsaXR5UHJvdmlkZXIpLnRvU3RyaW5nKCdoZXgnKV0sXG4gICAgICBzdGFraW5nQW1vdW50U2F0OiBhbW91bnQsXG4gICAgICBzdGFraW5nVGltZWxvY2s6IGdldEJhYnlsb25QYXJhbUJ5QnRjSGVpZ2h0KGJsb2NrSGVpZ2h0LCBzdGFraW5nUGFyYW1zKS5taW5TdGFraW5nVGltZUJsb2NrcyxcbiAgICB9LFxuICAgIGJsb2NrSGVpZ2h0LFxuICAgIFt1dHhvXSxcbiAgICBmZWVSYXRlU2F0QixcbiAgICB0b0JlY2gzMihCdWZmZXIuZnJvbSgndGVzdCcpLCAwLCAnYmJuJylcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVuc2lnbmVkRGVsZWdhdGlvbk1zZzoge1xuICAgICAgdHlwZVVybDogJy9iYWJ5bG9uLmJ0Y3N0YWtpbmcudjEuTXNnQ3JlYXRlQlRDRGVsZWdhdGlvbicsXG4gICAgICB2YWx1ZTogYmFieWxvblByb3RvYnVmLmJ0Y3N0YWtpbmd0eC5Nc2dDcmVhdGVCVENEZWxlZ2F0aW9uLmRlY29kZShyZXN1bHQuc2lnbmVkQmFieWxvblR4KSxcbiAgICB9LFxuICAgIHN0YWtpbmdUeDogcmVzdWx0LnN0YWtpbmdUeCxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coreDao/descriptor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
39
+ const testutil_1 = require("@bitgo-beta/utxo-core/testutil");
40
+ const coreDao_1 = require("../../../src/coreDao");
41
+ const utils_1 = require("./utils");
42
+ describe('descriptor', function () {
43
+ const baseFixturePath = 'test/fixtures/coreDao/descriptor/';
44
+ const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
45
+ const key1 = rootWalletKeys.triple[0];
46
+ const key2 = rootWalletKeys.triple[1];
47
+ const key3 = rootWalletKeys.triple[2];
48
+ const validLocktime = 2048;
49
+ it('should fail if m is longer than the number of keys or not at least 1', function () {
50
+ assert.throws(() => {
51
+ (0, coreDao_1.createMultiSigDescriptor)('sh', validLocktime, 3, [key1, key2], false);
52
+ });
53
+ assert.throws(() => {
54
+ (0, coreDao_1.createMultiSigDescriptor)('sh', validLocktime, 0, [key1, key2], false);
55
+ });
56
+ });
57
+ it('should fail if locktime is invalid', function () {
58
+ assert.throws(() => {
59
+ (0, coreDao_1.createMultiSigDescriptor)('sh', 0, 2, [key1, key2], false);
60
+ });
61
+ });
62
+ async function runTestForParams(scriptType, m, keys) {
63
+ const fixturePath = baseFixturePath + `${scriptType}-${m}of${keys.length}`;
64
+ describe(`should create a ${m} of ${keys.length} multi-sig ${scriptType} descriptor`, function () {
65
+ it('has expected descriptor string', async function () {
66
+ const descriptorString = (0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false);
67
+ assert.strictEqual(descriptorString, await (0, testutil_1.getFixture)(fixturePath + `-string.txt`, descriptorString), descriptorString);
68
+ });
69
+ it('has expected AST', async function () {
70
+ const descriptor = wasm_utxo_1.Descriptor.fromString((0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false), 'derivable');
71
+ assert.deepStrictEqual(descriptor.node(), await (0, testutil_1.getFixture)(fixturePath + '-ast.json', descriptor.node()));
72
+ });
73
+ it('has expected asm', async function () {
74
+ const descriptor = wasm_utxo_1.Descriptor.fromString((0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false), 'derivable');
75
+ const asmString = descriptor.atDerivationIndex(0).toAsmString();
76
+ assert.strictEqual(asmString, await (0, testutil_1.getFixture)(fixturePath + '-asm.txt', asmString), asmString);
77
+ });
78
+ it('can be signed', async function () {
79
+ // Derive the script from the descriptor
80
+ const descriptor = wasm_utxo_1.Descriptor.fromString((0, coreDao_1.createMultiSigDescriptor)(scriptType, validLocktime, m, keys, false), 'derivable');
81
+ const descriptorAt0 = descriptor.atDerivationIndex(0);
82
+ const script = Buffer.from(descriptorAt0.scriptPubkey());
83
+ // Make the prevTx
84
+ const prevPsbt = utxolib.testutil.constructPsbt([{ scriptType: 'p2wsh', value: BigInt(1.1e8) }], [{ script: script.toString('hex'), value: BigInt(1e8) }], utxolib.networks.bitcoin, rootWalletKeys, 'fullsigned');
85
+ const prevTx = prevPsbt.finalizeAllInputs().extractTransaction();
86
+ // Create the PSBT and sign
87
+ const psbt = Object.assign(new utxolib.Psbt({ network: utxolib.networks.bitcoin }), {
88
+ locktime: validLocktime,
89
+ });
90
+ psbt.addInput({
91
+ hash: prevTx.getId(),
92
+ index: 0,
93
+ sequence: 0xfffffffe,
94
+ });
95
+ if (scriptType === 'sh-wsh') {
96
+ psbt.updateInput(0, { witnessUtxo: { script, value: BigInt(1e8) } });
97
+ }
98
+ else {
99
+ psbt.updateInput(0, { nonWitnessUtxo: prevTx.toBuffer() });
100
+ }
101
+ psbt.addOutput({ script, value: BigInt(0.9e8) });
102
+ (0, utils_1.updateInputWithDescriptor)(psbt, 0, descriptorAt0);
103
+ keys.forEach((signer, i) => {
104
+ if (i >= m) {
105
+ return;
106
+ }
107
+ psbt.signAllInputsHD(signer);
108
+ });
109
+ // Get the fully signed transaction and check
110
+ const signedTx = (0, utils_1.finalizePsbt)(psbt).extractTransaction().toBuffer();
111
+ assert.strictEqual(signedTx.toString('hex'), await (0, testutil_1.getFixture)(fixturePath + '-tx.txt', signedTx.toString('hex')));
112
+ });
113
+ });
114
+ }
115
+ runTestForParams('sh', 2, [key1, key2]);
116
+ runTestForParams('sh-wsh', 2, [key1, key2]);
117
+ runTestForParams('sh', 3, [key1, key2, key3]);
118
+ runTestForParams('wsh', 3, [key1, key2, key3]);
119
+ it('should recreate the script used in testnet staking transaction', function () {
120
+ // Source: https://mempool.space/testnet/address/2MxTi2EhHKgdJFKRTBttVGGxir9ZzjmKCXw
121
+ // 2 of 2 multisig
122
+ const timelock = 'fce4cb66';
123
+ const pubkey1 = '03ecb6d4b7f5d56962e547fc52dd588359f5729c0ba856d6978b84723895a16691';
124
+ const pubkey2 = '024aaea25d82b1db2be030a05b641d6302e48ed652b1ca9cb08a67267fcbb56747';
125
+ const redeemScriptASM = [
126
+ 'OP_PUSHBYTES_4',
127
+ timelock,
128
+ 'OP_CLTV',
129
+ 'OP_DROP',
130
+ 'OP_PUSHNUM_2',
131
+ 'OP_PUSHBYTES_33',
132
+ pubkey1,
133
+ 'OP_PUSHBYTES_33',
134
+ pubkey2,
135
+ 'OP_PUSHNUM_2',
136
+ 'OP_CHECKMULTISIG',
137
+ ].join(' ');
138
+ const decodedTimelock = (0, coreDao_1.decodeTimelock)(Buffer.from(timelock, 'hex'));
139
+ const descriptor = (0, coreDao_1.createMultiSigDescriptor)('sh', decodedTimelock, 2, [Buffer.from(pubkey1, 'hex'), Buffer.from(pubkey2, 'hex')], false);
140
+ const descriptorASM = wasm_utxo_1.Descriptor.fromString(descriptor, 'definite').toAsmString();
141
+ assert.deepStrictEqual(redeemScriptASM, descriptorASM);
142
+ });
143
+ });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9jb3JlRGFvL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsOERBQWdEO0FBQ2hELGdEQUE4QztBQUM5Qyw2REFBNEQ7QUFFNUQsa0RBQWdGO0FBRWhGLG1DQUFrRTtBQUVsRSxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLE1BQU0sZUFBZSxHQUFHLG1DQUFtQyxDQUFDO0lBQzVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMvRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFFM0IsRUFBRSxDQUFDLHNFQUFzRSxFQUFFO1FBQ3pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUEsa0NBQXdCLEVBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNqQixJQUFBLGtDQUF3QixFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFD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O1FBQ2xCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxvRUFBb0UsQ0FBQztRQUNyRixNQUFNLE9BQU8sR0FBRyxvRUFBb0UsQ0FBQztRQUNyRixNQUFNLGVBQWUsR0FBRztZQUN0QixnQkFBZ0I7WUFDaEIsUUFBUTtZQUNSLFNBQVM7WUFDVCxTQUFTO1lBQ1QsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixPQUFPO1lBQ1AsaUJBQWlCO1lBQ2pCLE9BQU87WUFDUCxjQUFjO1lBQ2Qsa0JBQWtCO1NBQ25CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVosTUFBTSxlQUFlLEdBQUcsSUFBQSx3QkFBYyxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxVQUFVLEdBQUcsSUFBQSxrQ0FBd0IsRUFDekMsSUFBSSxFQUNKLGVBQWUsRUFDZixDQUFDLEVBQ0QsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUMxRCxLQUFLLENBQ04sQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLHNCQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRixNQUFNLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgZ2V0Rml4dHVyZSB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tY29yZS90ZXN0dXRpbCc7XG5cbmltcG9ydCB7IGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvciwgZGVjb2RlVGltZWxvY2sgfSBmcm9tICcuLi8uLi8uLi9zcmMvY29yZURhbyc7XG5cbmltcG9ydCB7IGZpbmFsaXplUHNidCwgdXBkYXRlSW5wdXRXaXRoRGVzY3JpcHRvciB9IGZyb20gJy4vdXRpbHMnO1xuXG5kZXNjcmliZSgnZGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYmFzZUZpeHR1cmVQYXRoID0gJ3Rlc3QvZml4dHVyZXMvY29yZURhby9kZXNjcmlwdG9yLyc7XG4gIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXREZWZhdWx0V2FsbGV0S2V5cygpO1xuICBjb25zdCBrZXkxID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzBdO1xuICBjb25zdCBrZXkyID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzFdO1xuICBjb25zdCBrZXkzID0gcm9vdFdhbGxldEtleXMudHJpcGxlWzJdO1xuICBjb25zdCB2YWxpZExvY2t0aW1lID0gMjA0ODtcblxuICBpdCgnc2hvdWxkIGZhaWwgaWYgbSBpcyBsb25nZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGtleXMgb3Igbm90IGF0IGxlYXN0IDEnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoJ3NoJywgdmFsaWRMb2NrdGltZSwgMywgW2tleTEsIGtleTJdLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgIGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcignc2gnLCB2YWxpZExvY2t0aW1lLCAwLCBba2V5MSwga2V5Ml0sIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIGlmIGxvY2t0aW1lIGlzIGludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoJ3NoJywgMCwgMiwgW2tleTEsIGtleTJdLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJ1blRlc3RGb3JQYXJhbXMoc2NyaXB0VHlwZTogJ3NoJyB8ICdzaC13c2gnIHwgJ3dzaCcsIG06IG51bWJlciwga2V5czogdXR4b2xpYi5CSVAzMkludGVyZmFjZVtdKSB7XG4gICAgY29uc3QgZml4dHVyZVBhdGggPSBiYXNlRml4dHVyZVBhdGggKyBgJHtzY3JpcHRUeXBlfS0ke219b2Yke2tleXMubGVuZ3RofWA7XG4gICAgZGVzY3JpYmUoYHNob3VsZCBjcmVhdGUgYSAke219IG9mICR7a2V5cy5sZW5ndGh9IG11bHRpLXNpZyAke3NjcmlwdFR5cGV9IGRlc2NyaXB0b3JgLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnaGFzIGV4cGVjdGVkIGRlc2NyaXB0b3Igc3RyaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yU3RyaW5nID0gY3JlYXRlTXVsdGlTaWdEZXNjcmlwdG9yKHNjcmlwdFR5cGUsIHZhbGlkTG9ja3RpbWUsIG0sIGtleXMsIGZhbHNlKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIGRlc2NyaXB0b3JTdHJpbmcsXG4gICAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShmaXh0dXJlUGF0aCArIGAtc3RyaW5nLnR4dGAsIGRlc2NyaXB0b3JTdHJpbmcpLFxuICAgICAgICAgIGRlc2NyaXB0b3JTdHJpbmdcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnaGFzIGV4cGVjdGVkIEFTVCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhcbiAgICAgICAgICBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3Ioc2NyaXB0VHlwZSwgdmFsaWRMb2NrdGltZSwgbSwga2V5cywgZmFsc2UpLFxuICAgICAgICAgICdkZXJpdmFibGUnXG4gICAgICAgICk7XG5cbiAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNjcmlwdG9yLm5vZGUoKSwgYXdhaXQgZ2V0Rml4dHVyZShmaXh0dXJlUGF0aCArICctYXN0Lmpzb24nLCBkZXNjcmlwdG9yLm5vZGUoKSkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdoYXMgZXhwZWN0ZWQgYXNtJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKFxuICAgICAgICAgIGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcihzY3JpcHRUeXBlLCB2YWxpZExvY2t0aW1lLCBtLCBrZXlzLCBmYWxzZSksXG4gICAgICAgICAgJ2Rlcml2YWJsZSdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYXNtU3RyaW5nID0gZGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleCgwKS50b0FzbVN0cmluZygpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXNtU3RyaW5nLCBhd2FpdCBnZXRGaXh0dXJlKGZpeHR1cmVQYXRoICsgJy1hc20udHh0JywgYXNtU3RyaW5nKSwgYXNtU3RyaW5nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnY2FuIGJlIHNpZ25lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gRGVyaXZlIHRoZSBzY3JpcHQgZnJvbSB0aGUgZGVzY3JpcHRvclxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKFxuICAgICAgICAgIGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcihzY3JpcHRUeXBlLCB2YWxpZExvY2t0aW1lLCBtLCBrZXlzLCBmYWxzZSksXG4gICAgICAgICAgJ2Rlcml2YWJsZSdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvckF0MCA9IGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoMCk7XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IEJ1ZmZlci5mcm9tKGRlc2NyaXB0b3JBdDAuc2NyaXB0UHVia2V5KCkpO1xuXG4gICAgICAgIC8vIE1ha2UgdGhlIHByZXZUeFxuICAgICAgICBjb25zdCBwcmV2UHNidCA9IHV0eG9saWIudGVzdHV0aWwuY29uc3RydWN0UHNidChcbiAgICAgICAgICBbeyBzY3JpcHRUeXBlOiAncDJ3c2gnLCB2YWx1ZTogQmlnSW50KDEuMWU4KSB9XSxcbiAgICAgICAgICBbeyBzY3JpcHQ6IHNjcmlwdC50b1N0cmluZygnaGV4JyksIHZhbHVlOiBCaWdJbnQoMWU4KSB9XSxcbiAgICAgICAgICB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4sXG4gICAgICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAgICAgJ2Z1bGxzaWduZWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHByZXZUeCA9IHByZXZQc2J0LmZpbmFsaXplQWxsSW5wdXRzKCkuZXh0cmFjdFRyYW5zYWN0aW9uKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBQU0JUIGFuZCBzaWduXG4gICAgICAgIGNvbnN0IHBzYnQgPSBPYmplY3QuYXNzaWduKG5ldyB1dHhvbGliLlBzYnQoeyBuZXR3b3JrOiB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4gfSksIHtcbiAgICAgICAgICBsb2NrdGltZTogdmFsaWRMb2NrdGltZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBzYnQuYWRkSW5wdXQoe1xuICAgICAgICAgIGhhc2g6IHByZXZUeC5nZXRJZCgpLFxuICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgIHNlcXVlbmNlOiAweGZmZmZmZmZlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNjcmlwdFR5cGUgPT09ICdzaC13c2gnKSB7XG4gICAgICAgICAgcHNidC51cGRhdGVJbnB1dCgwLCB7IHdpdG5lc3NVdHhvOiB7IHNjcmlwdCwgdmFsdWU6IEJpZ0ludCgxZTgpIH0gfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHNidC51cGRhdGVJbnB1dCgwLCB7IG5vbldpdG5lc3NVdHhvOiBwcmV2VHgudG9CdWZmZXIoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdCwgdmFsdWU6IEJpZ0ludCgwLjllOCkgfSk7XG4gICAgICAgIHVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IocHNidCwgMCwgZGVzY3JpcHRvckF0MCk7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoc2lnbmVyLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGkgPj0gbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwc2J0LnNpZ25BbGxJbnB1dHNIRChzaWduZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBHZXQgdGhlIGZ1bGx5IHNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgY2hlY2tcbiAgICAgICAgY29uc3Qgc2lnbmVkVHggPSBmaW5hbGl6ZVBzYnQocHNidCkuZXh0cmFjdFRyYW5zYWN0aW9uKCkudG9CdWZmZXIoKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIHNpZ25lZFR4LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICBhd2FpdCBnZXRGaXh0dXJlKGZpeHR1cmVQYXRoICsgJy10eC50eHQnLCBzaWduZWRUeC50b1N0cmluZygnaGV4JykpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1blRlc3RGb3JQYXJhbXMoJ3NoJywgMiwgW2tleTEsIGtleTJdKTtcbiAgcnVuVGVzdEZvclBhcmFtcygnc2gtd3NoJywgMiwgW2tleTEsIGtleTJdKTtcbiAgcnVuVGVzdEZvclBhcmFtcygnc2gnLCAzLCBba2V5MSwga2V5Miwga2V5M10pO1xuICBydW5UZXN0Rm9yUGFyYW1zKCd3c2gnLCAzLCBba2V5MSwga2V5Miwga2V5M10pO1xuXG4gIGl0KCdzaG91bGQgcmVjcmVhdGUgdGhlIHNjcmlwdCB1c2VkIGluIHRlc3RuZXQgc3Rha2luZyB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vbWVtcG9vbC5zcGFjZS90ZXN0bmV0L2FkZHJlc3MvMk14VGkyRWhIS2dkSkZLUlRCdHRWR0d4aXI5WnpqbUtDWHdcbiAgICAvLyAyIG9mIDIgbXVsdGlzaWdcbiAgICBjb25zdCB0aW1lbG9jayA9ICdmY2U0Y2I2Nic7XG4gICAgY29uc3QgcHVia2V5MSA9ICcwM2VjYjZkNGI3ZjVkNTY5NjJlNTQ3ZmM1MmRkNTg4MzU5ZjU3MjljMGJhODU2ZDY5NzhiODQ3MjM4OTVhMTY2OTEnO1xuICAgIGNvbnN0IHB1YmtleTIgPSAnMDI0YWFlYTI1ZDgyYjFkYjJiZTAzMGEwNWI2NDFkNjMwMmU0OGVkNjUyYjFjYTljYjA4YTY3MjY3ZmNiYjU2NzQ3JztcbiAgICBjb25zdCByZWRlZW1TY3JpcHRBU00gPSBbXG4gICAgICAnT1BfUFVTSEJZVEVTXzQnLFxuICAgICAgdGltZWxvY2ssXG4gICAgICAnT1BfQ0xUVicsXG4gICAgICAnT1BfRFJPUCcsXG4gICAgICAnT1BfUFVTSE5VTV8yJyxcbiAgICAgICdPUF9QVVNIQllURVNfMzMnLFxuICAgICAgcHVia2V5MSxcbiAgICAgICdPUF9QVVNIQllURVNfMzMnLFxuICAgICAgcHVia2V5MixcbiAgICAgICdPUF9QVVNITlVNXzInLFxuICAgICAgJ09QX0NIRUNLTVVMVElTSUcnLFxuICAgIF0uam9pbignICcpO1xuXG4gICAgY29uc3QgZGVjb2RlZFRpbWVsb2NrID0gZGVjb2RlVGltZWxvY2soQnVmZmVyLmZyb20odGltZWxvY2ssICdoZXgnKSk7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZU11bHRpU2lnRGVzY3JpcHRvcihcbiAgICAgICdzaCcsXG4gICAgICBkZWNvZGVkVGltZWxvY2ssXG4gICAgICAyLFxuICAgICAgW0J1ZmZlci5mcm9tKHB1YmtleTEsICdoZXgnKSwgQnVmZmVyLmZyb20ocHVia2V5MiwgJ2hleCcpXSxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yQVNNID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGRlc2NyaXB0b3IsICdkZWZpbml0ZScpLnRvQXNtU3RyaW5nKCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWRlZW1TY3JpcHRBU00sIGRlc2NyaXB0b3JBU00pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=opReturn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opReturn.d.ts","sourceRoot":"","sources":["../../../../../test/unit/coreDao/opReturn.ts"],"names":[],"mappings":""}