@bitgo-beta/sdk-coin-sol 2.4.3-beta.999 → 7.6.3

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 (142) hide show
  1. package/dist/src/bigint-buffer-guard.d.ts +1 -0
  2. package/dist/src/bigint-buffer-guard.d.ts.map +1 -0
  3. package/dist/src/bigint-buffer-guard.js +29 -0
  4. package/dist/src/config/token2022StaticConfig.d.ts +3 -0
  5. package/dist/src/config/token2022StaticConfig.d.ts.map +1 -0
  6. package/dist/src/config/token2022StaticConfig.js +50 -0
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +2 -1
  10. package/dist/src/lib/constants.d.ts +35 -2
  11. package/dist/src/lib/constants.d.ts.map +1 -1
  12. package/dist/src/lib/constants.js +41 -2
  13. package/dist/src/lib/customInstructionBuilder.d.ts +72 -0
  14. package/dist/src/lib/customInstructionBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/customInstructionBuilder.js +289 -0
  16. package/dist/src/lib/iface.d.ts +79 -5
  17. package/dist/src/lib/iface.d.ts.map +1 -1
  18. package/dist/src/lib/iface.js +1 -1
  19. package/dist/src/lib/index.d.ts +1 -0
  20. package/dist/src/lib/index.d.ts.map +1 -1
  21. package/dist/src/lib/index.js +4 -2
  22. package/dist/src/lib/instructionParamsFactory.d.ts.map +1 -1
  23. package/dist/src/lib/instructionParamsFactory.js +364 -78
  24. package/dist/src/lib/jitoStakePoolOperations.d.ts +113 -0
  25. package/dist/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  26. package/dist/src/lib/jitoStakePoolOperations.js +200 -0
  27. package/dist/src/lib/solInstructionFactory.d.ts.map +1 -1
  28. package/dist/src/lib/solInstructionFactory.js +266 -69
  29. package/dist/src/lib/stakingActivateBuilder.d.ts +16 -5
  30. package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
  31. package/dist/src/lib/stakingActivateBuilder.js +23 -10
  32. package/dist/src/lib/stakingDeactivateBuilder.d.ts +16 -5
  33. package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  34. package/dist/src/lib/stakingDeactivateBuilder.js +43 -20
  35. package/dist/src/lib/token2022Config.d.ts +44 -0
  36. package/dist/src/lib/token2022Config.d.ts.map +1 -0
  37. package/dist/src/lib/token2022Config.js +27 -0
  38. package/dist/src/lib/tokenTransferBuilder.js +7 -7
  39. package/dist/src/lib/transaction.d.ts +31 -4
  40. package/dist/src/lib/transaction.d.ts.map +1 -1
  41. package/dist/src/lib/transaction.js +134 -46
  42. package/dist/src/lib/transactionBuilder.d.ts +18 -2
  43. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  44. package/dist/src/lib/transactionBuilder.js +78 -2
  45. package/dist/src/lib/transactionBuilderFactory.d.ts +5 -0
  46. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  47. package/dist/src/lib/transactionBuilderFactory.js +10 -1
  48. package/dist/src/lib/utils.d.ts +34 -1
  49. package/dist/src/lib/utils.d.ts.map +1 -1
  50. package/dist/src/lib/utils.js +88 -24
  51. package/dist/src/sol.d.ts +36 -13
  52. package/dist/src/sol.d.ts.map +1 -1
  53. package/dist/src/sol.js +230 -38
  54. package/dist/test/fixtures/sol.d.ts +1152 -0
  55. package/dist/test/fixtures/sol.d.ts.map +1 -0
  56. package/dist/test/fixtures/sol.js +1433 -0
  57. package/dist/test/resources/sol.d.ts +238 -0
  58. package/dist/test/resources/sol.d.ts.map +1 -0
  59. package/dist/test/resources/sol.js +320 -0
  60. package/dist/test/unit/fixtures/solBackupKey.d.ts +5 -0
  61. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  62. package/dist/test/unit/fixtures/solBackupKey.js +8 -0
  63. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  64. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  65. package/dist/test/unit/getBuilderFactory.js +10 -0
  66. package/dist/test/unit/instructionParamsFactory.d.ts +2 -0
  67. package/dist/test/unit/instructionParamsFactory.d.ts.map +1 -0
  68. package/dist/test/unit/instructionParamsFactory.js +412 -0
  69. package/dist/test/unit/instructionParamsFactory.staking.d.ts +2 -0
  70. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  71. package/dist/test/unit/instructionParamsFactory.staking.js +1059 -0
  72. package/dist/test/unit/keyPair.d.ts +2 -0
  73. package/dist/test/unit/keyPair.d.ts.map +1 -0
  74. package/dist/test/unit/keyPair.js +177 -0
  75. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  76. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  77. package/dist/test/unit/messages/messageBuilderFactory.js +118 -0
  78. package/dist/test/unit/messages/simpleMessageBuilder.d.ts +2 -0
  79. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  80. package/dist/test/unit/messages/simpleMessageBuilder.js +194 -0
  81. package/dist/test/unit/sol.d.ts +2 -0
  82. package/dist/test/unit/sol.d.ts.map +1 -0
  83. package/dist/test/unit/sol.js +3108 -0
  84. package/dist/test/unit/solInstructionFactory.d.ts +2 -0
  85. package/dist/test/unit/solInstructionFactory.d.ts.map +1 -0
  86. package/dist/test/unit/solInstructionFactory.js +454 -0
  87. package/dist/test/unit/solToken.d.ts +2 -0
  88. package/dist/test/unit/solToken.d.ts.map +1 -0
  89. package/dist/test/unit/solToken.js +31 -0
  90. package/dist/test/unit/transaction.d.ts +2 -0
  91. package/dist/test/unit/transaction.d.ts.map +1 -0
  92. package/dist/test/unit/transaction.js +983 -0
  93. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +2 -0
  94. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  96. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts +2 -0
  97. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  98. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
  99. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts +2 -0
  100. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  101. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  102. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts +2 -0
  103. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  104. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  105. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +2 -0
  106. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  107. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  108. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +2 -0
  109. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  110. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  111. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts +2 -0
  112. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  113. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  114. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +2 -0
  115. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  116. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  117. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  118. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  119. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
  120. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  121. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  122. package/dist/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  123. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  124. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  125. package/dist/test/unit/transactionBuilder/transferBuilder.js +286 -0
  126. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts +2 -0
  127. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  128. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
  129. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts +2 -0
  130. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  131. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  132. package/dist/test/unit/utils.d.ts +2 -0
  133. package/dist/test/unit/utils.d.ts.map +1 -0
  134. package/dist/test/unit/utils.js +505 -0
  135. package/dist/test/unit/versionedTransaction.d.ts +2 -0
  136. package/dist/test/unit/versionedTransaction.d.ts.map +1 -0
  137. package/dist/test/unit/versionedTransaction.js +207 -0
  138. package/dist/tsconfig.tsbuildinfo +1 -0
  139. package/package.json +14 -9
  140. package/.eslintignore +0 -5
  141. package/.mocharc.yml +0 -8
  142. package/CHANGELOG.md +0 -1223
@@ -0,0 +1,384 @@
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 should_1 = __importDefault(require("should"));
40
+ const getBuilderFactory_1 = require("../getBuilderFactory");
41
+ const src_1 = require("../../../src");
42
+ const testData = __importStar(require("../../resources/sol"));
43
+ const public_types_1 = require("@bitgo/public-types");
44
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
45
+ const bs58 = __importStar(require("bs58"));
46
+ const constants_1 = require("../../../src/lib/constants");
47
+ describe('Sol Staking Deactivate Builder', () => {
48
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
49
+ const walletKeyPair = new src_1.KeyPair(testData.authAccount);
50
+ const wallet = walletKeyPair.getKeys();
51
+ const stakeAccount = new src_1.KeyPair(testData.stakeAccount).getKeys();
52
+ const splitAccount = new src_1.KeyPair(testData.splitStakeAccount).getKeys();
53
+ const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
54
+ const invalidPubKey = testData.pubKeys.invalidPubKeys[0];
55
+ const performTest = async ({ makeUnsignedBuilder, signBuilder, addSignatures, verifyBuiltTransaction, knownRawTx, }) => {
56
+ // Build transaction
57
+ const txBuilder = makeUnsignedBuilder();
58
+ const unsignedTx = await txBuilder.build();
59
+ const tx = signBuilder ? await signBuilder(txBuilder).build() : unsignedTx;
60
+ // Verify built transaction
61
+ verifyBuiltTransaction(tx);
62
+ // Verify raw transaction
63
+ const rawTx = tx.toBroadcastFormat();
64
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
65
+ if (knownRawTx !== undefined) {
66
+ should_1.default.equal(rawTx, knownRawTx);
67
+ }
68
+ // Rebuild transaction and verify
69
+ const builderFromRawTx = factory.from(rawTx);
70
+ const rebuiltTx = await builderFromRawTx.build();
71
+ should_1.default.equal(rebuiltTx.toBroadcastFormat(), unsignedTx.toBroadcastFormat());
72
+ should_1.default.equal(rebuiltTx.signablePayload.toString('hex'), unsignedTx.signablePayload.toString('hex'));
73
+ should_1.default.deepEqual(rebuiltTx.toJson().instructionsData, tx.toJson().instructionsData);
74
+ // Verify addSignature
75
+ if (addSignatures) {
76
+ const txBuilder2 = makeUnsignedBuilder();
77
+ addSignatures(txBuilder2, tx.signature);
78
+ const tx2 = await txBuilder2.build();
79
+ should_1.default.equal(tx2.type, sdk_core_1.TransactionType.StakingDeactivate);
80
+ const rawTx2 = tx2.toBroadcastFormat();
81
+ should_1.default.deepEqual(tx2.toJson().instructionsData, tx.toJson().instructionsData);
82
+ if (knownRawTx !== undefined) {
83
+ should_1.default.equal(rawTx2, knownRawTx);
84
+ }
85
+ }
86
+ };
87
+ const makeUnsignedBuilderNativeGeneric = (doMemo, stakingAddress) => {
88
+ const txBuilder = factory.getStakingDeactivateBuilder();
89
+ txBuilder.sender(wallet.pub);
90
+ if (typeof stakingAddress === 'string') {
91
+ txBuilder.stakingAddress(stakingAddress);
92
+ }
93
+ else {
94
+ txBuilder.stakingAddresses(stakingAddress);
95
+ }
96
+ txBuilder.nonce(recentBlockHash);
97
+ if (doMemo) {
98
+ txBuilder.memo('Test deactivate');
99
+ }
100
+ return txBuilder;
101
+ };
102
+ const signBuilderNative = (txBuilder) => {
103
+ txBuilder.sign({ key: wallet.prv });
104
+ return txBuilder;
105
+ };
106
+ const addSignaturesNative = (txBuilder, signature) => {
107
+ txBuilder.addSignature({ pub: wallet.pub }, Buffer.from(bs58.decode(signature[0])));
108
+ return txBuilder;
109
+ };
110
+ const verifyBuiltTransactionNativeGeneric = (tx, doMemo, stakingAddresses) => {
111
+ const txJson = tx.toJson();
112
+ txJson.instructionsData.should.deepEqual([
113
+ ...(doMemo
114
+ ? [
115
+ {
116
+ type: 'Memo',
117
+ params: {
118
+ memo: 'Test deactivate',
119
+ },
120
+ },
121
+ ]
122
+ : []),
123
+ ...stakingAddresses.map((stakingAddress) => ({
124
+ type: 'Deactivate',
125
+ params: {
126
+ stakingAddress,
127
+ amount: undefined,
128
+ fromAddress: wallet.pub,
129
+ unstakingAddress: undefined,
130
+ stakingType: public_types_1.SolStakingTypeEnum.NATIVE,
131
+ },
132
+ })),
133
+ ]);
134
+ };
135
+ describe('Should succeed', () => {
136
+ describe('Native staking deactivate', () => {
137
+ const performTestNative = async (doMemo, stakingAddress, doSign, knownRawTx) => {
138
+ const stakingAddresses = typeof stakingAddress === 'string' ? [stakingAddress] : stakingAddress;
139
+ await performTest({
140
+ makeUnsignedBuilder: () => makeUnsignedBuilderNativeGeneric(doMemo, stakingAddress),
141
+ signBuilder: doSign ? signBuilderNative : undefined,
142
+ addSignatures: doSign ? addSignaturesNative : undefined,
143
+ verifyBuiltTransaction: (tx) => verifyBuiltTransactionNativeGeneric(tx, doMemo, stakingAddresses),
144
+ knownRawTx,
145
+ });
146
+ };
147
+ it('building a staking deactivate tx', async () => {
148
+ await performTestNative(false, stakeAccount.pub, true, testData.STAKING_DEACTIVATE_SIGNED_TX);
149
+ });
150
+ it('building a staking multi deactivate tx', async () => {
151
+ await performTestNative(false, [stakeAccount.pub, splitAccount.pub], true, testData.STAKING_MULTI_DEACTIVATE_SIGNED_TX);
152
+ });
153
+ it('should build and sign a multi deactivate single', async function () {
154
+ await performTestNative(false, [stakeAccount.pub], true, testData.STAKING_MULTI_DEACTIVATE_SIGNED_TX_single);
155
+ });
156
+ it('should build and sign a deactivate single', async function () {
157
+ await performTestNative(false, stakeAccount.pub, true, testData.STAKING_DEACTIVATE_SIGNED_TX_single);
158
+ });
159
+ it('building a staking deactivate signed tx with memo', async () => {
160
+ await performTestNative(true, stakeAccount.pub, true, testData.STAKING_DEACTIVATE_SIGNED_TX_WITH_MEMO);
161
+ });
162
+ it('building a staking deactivate unsigned tx', async () => {
163
+ await performTestNative(false, stakeAccount.pub, false, testData.STAKING_DEACTIVATE_UNSIGNED_TX);
164
+ });
165
+ it('building a staking deactivate unsigned tx with memo', async () => {
166
+ await performTestNative(true, stakeAccount.pub, false, testData.STAKING_DEACTIVATE_UNSIGNED_TX_WITH_MEMO);
167
+ });
168
+ it('building a staking deactivate unsigned tx with memo', async () => {
169
+ await performTestNative(true, stakeAccount.pub, false, testData.STAKING_DEACTIVATE_UNSIGNED_TX_WITH_MEMO);
170
+ });
171
+ it('all combinations', async () => {
172
+ for (const doMemo of [false, true]) {
173
+ for (const stakingAddress of [stakeAccount.pub, [stakeAccount.pub], [stakeAccount.pub, splitAccount.pub]]) {
174
+ for (const doSign of [false, true]) {
175
+ await performTestNative(doMemo, stakingAddress, doSign, undefined);
176
+ }
177
+ }
178
+ }
179
+ });
180
+ it('building an encoded signed transaction', async () => {
181
+ const txBuilder = factory.from(testData.STAKING_DEACTIVATE_SIGNED_TX_WITH_MEMO);
182
+ txBuilder.sign({ key: wallet.prv });
183
+ const tx = await txBuilder.build();
184
+ should_1.default.equal(tx.toBroadcastFormat(), testData.STAKING_DEACTIVATE_SIGNED_TX_WITH_MEMO);
185
+ });
186
+ it('building an encoded unsigned transaction and signing it', async () => {
187
+ const txBuilder = factory.from(testData.STAKING_DEACTIVATE_UNSIGNED_TX_WITH_MEMO);
188
+ txBuilder.sign({ key: wallet.prv });
189
+ const tx = await txBuilder.build();
190
+ should_1.default.equal(tx.toBroadcastFormat(), testData.STAKING_DEACTIVATE_SIGNED_TX_WITH_MEMO);
191
+ });
192
+ it('building a partial staking deactivate tx', async () => {
193
+ const txBuilder = factory
194
+ .getStakingDeactivateBuilder()
195
+ .sender(wallet.pub)
196
+ .stakingAddress(stakeAccount.pub)
197
+ .unstakingAddress(testData.splitStakeAccount.pub)
198
+ .amount('100000')
199
+ .nonce(recentBlockHash);
200
+ txBuilder.sign({ key: wallet.prv });
201
+ const tx = await txBuilder.build();
202
+ const txJson = tx.toJson();
203
+ const rawTx = tx.toBroadcastFormat();
204
+ should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
205
+ txJson.instructionsData.should.deepEqual([
206
+ {
207
+ type: 'Deactivate',
208
+ params: {
209
+ fromAddress: wallet.pub,
210
+ stakingAddress: stakeAccount.pub,
211
+ amount: '100000',
212
+ unstakingAddress: testData.splitStakeAccount.pub,
213
+ stakingType: public_types_1.SolStakingTypeEnum.NATIVE,
214
+ },
215
+ },
216
+ ]);
217
+ should_1.default.equal(rawTx, testData.STAKING_PARTIAL_DEACTIVATE_SIGNED_TX);
218
+ const tx2 = await factory.from(testData.STAKING_PARTIAL_DEACTIVATE_SIGNED_TX).build();
219
+ const txJson2 = tx2.toJson();
220
+ tx2.toBroadcastFormat();
221
+ delete tx['_id'];
222
+ delete tx2['_id'];
223
+ // should.deepEqual(tx, tx2) // _useTokenAddressTokenName true for tx2
224
+ should_1.default.deepEqual(txJson2, txJson2);
225
+ });
226
+ });
227
+ describe('Marinade staking deactivate', () => {
228
+ const marinadeRecipientsObject = [];
229
+ marinadeRecipientsObject.push({
230
+ address: 'opNS8ENpEMWdXcJUgJCsJTDp7arTXayoBEeBUg6UezP',
231
+ amount: '2300000',
232
+ });
233
+ const marinadeMemo = `{\\"PrepareForRevoke\\":{\\"user\\":\\"${wallet.pub}}\\",\\"amount\\":\\"500000000000\\"}`;
234
+ it('Marinade: build and sign a staking deactivate tx', async () => {
235
+ await performTest({
236
+ makeUnsignedBuilder: () => {
237
+ const txBuilder = factory.getStakingDeactivateBuilder();
238
+ txBuilder
239
+ .sender(wallet.pub)
240
+ .stakingAddress(stakeAccount.pub)
241
+ .nonce(recentBlockHash)
242
+ .stakingType(public_types_1.SolStakingTypeEnum.MARINADE)
243
+ .memo(marinadeMemo)
244
+ .recipients(marinadeRecipientsObject);
245
+ return txBuilder;
246
+ },
247
+ signBuilder: signBuilderNative,
248
+ addSignatures: addSignaturesNative,
249
+ verifyBuiltTransaction: (tx) => {
250
+ const txJson = tx.toJson();
251
+ txJson.instructionsData.should.deepEqual([
252
+ {
253
+ params: {
254
+ memo: marinadeMemo,
255
+ },
256
+ type: 'Memo',
257
+ },
258
+ {
259
+ type: 'Deactivate',
260
+ params: {
261
+ fromAddress: '',
262
+ stakingAddress: '',
263
+ stakingType: public_types_1.SolStakingTypeEnum.MARINADE,
264
+ recipients: marinadeRecipientsObject,
265
+ },
266
+ },
267
+ ]);
268
+ },
269
+ knownRawTx: testData.MARINADE_STAKING_DEACTIVATE_SIGNED_TX,
270
+ });
271
+ });
272
+ });
273
+ describe('Jito staking deactivate', () => {
274
+ it('Jito: build and sign a staking deactivate tx', async () => {
275
+ const transferAuthority = new src_1.KeyPair(testData.splitStakeAccount).getKeys();
276
+ await performTest({
277
+ makeUnsignedBuilder: () => {
278
+ const txBuilder = factory.getStakingDeactivateBuilder();
279
+ txBuilder
280
+ .sender(wallet.pub)
281
+ .stakingAddress(constants_1.JITO_STAKE_POOL_ADDRESS)
282
+ .unstakingAddress(stakeAccount.pub)
283
+ .stakingType(public_types_1.SolStakingTypeEnum.JITO)
284
+ .extraParams({
285
+ validatorAddress: testData.JITO_STAKE_POOL_VALIDATOR_ADDRESS,
286
+ transferAuthorityAddress: transferAuthority.pub,
287
+ stakePoolData: {
288
+ managerFeeAccount: testData.JITO_STAKE_POOL_DATA_PARSED.managerFeeAccount.toString(),
289
+ poolMint: testData.JITO_STAKE_POOL_DATA_PARSED.poolMint.toString(),
290
+ validatorListAccount: testData.JITO_STAKE_POOL_DATA_PARSED.validatorList.toString(),
291
+ },
292
+ })
293
+ .amount('1000')
294
+ .nonce(recentBlockHash);
295
+ return txBuilder;
296
+ },
297
+ signBuilder: (txBuilder) => {
298
+ txBuilder.sign({ key: wallet.prv });
299
+ txBuilder.sign({ key: stakeAccount.prv });
300
+ txBuilder.sign({ key: transferAuthority.prv });
301
+ return txBuilder;
302
+ },
303
+ addSignatures: (txBuilder, signature) => {
304
+ txBuilder.addSignature({ pub: wallet.pub }, Buffer.from(bs58.decode(signature[0])));
305
+ txBuilder.addSignature({ pub: stakeAccount.pub }, Buffer.from(bs58.decode(signature[1])));
306
+ txBuilder.addSignature({ pub: transferAuthority.pub }, Buffer.from(bs58.decode(signature[2])));
307
+ return txBuilder;
308
+ },
309
+ verifyBuiltTransaction: (tx) => {
310
+ const txJson = tx.toJson();
311
+ txJson.instructionsData.should.deepEqual([
312
+ {
313
+ type: 'Deactivate',
314
+ params: {
315
+ fromAddress: wallet.pub,
316
+ stakingAddress: constants_1.JITO_STAKE_POOL_ADDRESS,
317
+ unstakingAddress: stakeAccount.pub,
318
+ amount: '1000',
319
+ stakingType: public_types_1.SolStakingTypeEnum.JITO,
320
+ extraParams: {
321
+ validatorAddress: testData.JITO_STAKE_POOL_VALIDATOR_ADDRESS,
322
+ transferAuthorityAddress: transferAuthority.pub,
323
+ stakePoolData: {
324
+ managerFeeAccount: testData.JITO_STAKE_POOL_DATA_PARSED.managerFeeAccount.toString(),
325
+ poolMint: testData.JITO_STAKE_POOL_DATA_PARSED.poolMint.toString(),
326
+ validatorListAccount: testData.JITO_STAKE_POOL_DATA_PARSED.validatorList.toString(),
327
+ },
328
+ },
329
+ },
330
+ },
331
+ ]);
332
+ tx.inputs.should.deepEqual([]);
333
+ tx.outputs.should.deepEqual([]);
334
+ },
335
+ knownRawTx: testData.JITO_STAKING_DEACTIVATE_SIGNED_TX,
336
+ });
337
+ });
338
+ });
339
+ });
340
+ describe('Should fail', () => {
341
+ it('building a staking deactivate tx without staking address', async () => {
342
+ const txBuilder = factory.getStakingDeactivateBuilder();
343
+ txBuilder.sender(wallet.pub).nonce(recentBlockHash);
344
+ txBuilder.sign({ key: wallet.prv });
345
+ await txBuilder.build().should.be.rejectedWith('Staking address must be set before building the transaction');
346
+ });
347
+ it('building a staking deactivate tx with a wrong staking address', async () => {
348
+ const txBuilder = factory.getStakingDeactivateBuilder();
349
+ txBuilder.sender(wallet.pub).nonce(recentBlockHash);
350
+ (0, should_1.default)(() => txBuilder.stakingAddress(invalidPubKey)).throwError(`Invalid or missing stakingAddress, got: ${invalidPubKey}`);
351
+ });
352
+ it('building a staking deactivate tx with the same address as sender and staking', async () => {
353
+ const txBuilder = factory.getStakingDeactivateBuilder();
354
+ txBuilder.sender(wallet.pub).nonce(recentBlockHash);
355
+ txBuilder.stakingAddress(wallet.pub);
356
+ await txBuilder.build().should.rejectedWith('Sender address cannot be the same as the Staking address');
357
+ });
358
+ it('building a partial staking deactivate tx without an amount', async () => {
359
+ const txBuilder = factory
360
+ .getStakingDeactivateBuilder()
361
+ .sender(wallet.pub)
362
+ .nonce(recentBlockHash)
363
+ .stakingAddress(testData.stakeAccount.pub)
364
+ .unstakingAddress(testData.splitStakeAccount.pub);
365
+ txBuilder.sign({ key: wallet.prv });
366
+ await txBuilder
367
+ .build()
368
+ .should.be.rejectedWith('If an unstaking address is given then a partial amount to unstake must also be set before building the transaction');
369
+ });
370
+ it('building a partial staking deactivate tx without an unstaking address', async () => {
371
+ const txBuilder = factory
372
+ .getStakingDeactivateBuilder()
373
+ .sender(wallet.pub)
374
+ .nonce(recentBlockHash)
375
+ .stakingAddress(testData.stakeAccount.pub)
376
+ .amount('10');
377
+ txBuilder.sign({ key: wallet.prv });
378
+ await txBuilder
379
+ .build()
380
+ .should.be.rejectedWith('When partially unstaking the unstaking address must be set before building the transaction');
381
+ });
382
+ });
383
+ });
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9zdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsNERBQXlEO0FBQ3pELHNDQUF3RTtBQUN4RSw4REFBZ0Q7QUFDaEQsc0RBQXlEO0FBQ3pELG1EQUFtRjtBQUNuRiwyQ0FBNkI7QUFDN0IsMERBQXFFO0FBRXJFLFFBQVEsQ0FBQyxnQ0FBZ0MsRUFBRSxHQUFHLEVBQUU7SUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUUxQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2RSxNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQztJQUN2RSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6RCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFDekIsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLFVBQVUsR0FPWCxFQUFFLEVBQUU7UUFDSCxvQkFBb0I7UUFDcEIsTUFBTSxTQUFTLEdBQUcs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QUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuXG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uL2dldEJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IEtleVBhaXIsIFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlciwgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBTb2xTdGFraW5nVHlwZUVudW0gfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBiczU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IHsgSklUT19TVEFLRV9QT09MX0FERFJFU1MgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5cbmRlc2NyaWJlKCdTb2wgU3Rha2luZyBEZWFjdGl2YXRlIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndHNvbCcpO1xuXG4gIGNvbnN0IHdhbGxldEtleVBhaXIgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudCk7XG4gIGNvbnN0IHdhbGxldCA9IHdhbGxldEtleVBhaXIuZ2V0S2V5cygpO1xuICBjb25zdCBzdGFrZUFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5zdGFrZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3Qgc3BsaXRBY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEuc3BsaXRTdGFrZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgY29uc3QgaW52YWxpZFB1YktleSA9IHRlc3REYXRhLnB1YktleXMuaW52YWxpZFB1YktleXNbMF07XG5cbiAgY29uc3QgcGVyZm9ybVRlc3QgPSBhc3luYyAoe1xuICAgIG1ha2VVbnNpZ25lZEJ1aWxkZXIsXG4gICAgc2lnbkJ1aWxkZXIsXG4gICAgYWRkU2lnbmF0dXJlcyxcbiAgICB2ZXJpZnlCdWlsdFRyYW5zYWN0aW9uLFxuICAgIGtub3duUmF3VHgsXG4gIH06IHtcbiAgICBtYWtlVW5zaWduZWRCdWlsZGVyOiAoKSA9PiBTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXI7XG4gICAgc2lnbkJ1aWxkZXI/OiB1bmRlZmluZWQgfCAoKHg6IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcikgPT4gU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyKTtcbiAgICBhZGRTaWduYXR1cmVzPzogdW5kZWZpbmVkIHwgKCh4OiBTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIsIHNpZ25hdHVyZTogc3RyaW5nW10pID0+IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcik7XG4gICAgdmVyaWZ5QnVpbHRUcmFuc2FjdGlvbjogKHg6IEJhc2VUcmFuc2FjdGlvbikgPT4gdm9pZDtcbiAgICBrbm93blJhd1R4Pzogc3RyaW5nO1xuICB9KSA9PiB7XG4gICAgLy8gQnVpbGQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBtYWtlVW5zaWduZWRCdWlsZGVyKCk7XG4gICAgY29uc3QgdW5zaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4ID0gc2lnbkJ1aWxkZXIgPyBhd2FpdCBzaWduQnVpbGRlcih0eEJ1aWxkZXIpLmJ1aWxkKCkgOiB1bnNpZ25lZFR4O1xuXG4gICAgLy8gVmVyaWZ5IGJ1aWx0IHRyYW5zYWN0aW9uXG4gICAgdmVyaWZ5QnVpbHRUcmFuc2FjdGlvbih0eCk7XG5cbiAgICAvLyBWZXJpZnkgcmF3IHRyYW5zYWN0aW9uXG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICBpZiAoa25vd25SYXdUeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaG91bGQuZXF1YWwocmF3VHgsIGtub3duUmF3VHgpO1xuICAgIH1cblxuICAgIC8vIFJlYnVpbGQgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeVxuICAgIGNvbnN0IGJ1aWxkZXJGcm9tUmF3VHggPSBmYWN0b3J5LmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IGJ1aWxkZXJGcm9tUmF3VHguYnVpbGQoKTtcblxuICAgIHNob3VsZC5lcXVhbChyZWJ1aWx0VHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdW5zaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICBzaG91bGQuZXF1YWwocmVidWlsdFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4JyksIHVuc2lnbmVkVHguc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChyZWJ1aWx0VHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YSwgdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YSk7XG5cbiAgICAvLyBWZXJpZnkgYWRkU2lnbmF0dXJlXG4gICAgaWYgKGFkZFNpZ25hdHVyZXMpIHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBtYWtlVW5zaWduZWRCdWlsZGVyKCk7XG4gICAgICBhZGRTaWduYXR1cmVzKHR4QnVpbGRlcjIsIHR4LnNpZ25hdHVyZSk7XG4gICAgICBjb25zdCB0eDIgPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHgyLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSk7XG4gICAgICBjb25zdCByYXdUeDIgPSB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgyLnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGEsIHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGEpO1xuICAgICAgaWYgKGtub3duUmF3VHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzaG91bGQuZXF1YWwocmF3VHgyLCBrbm93blJhd1R4KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbWFrZVVuc2lnbmVkQnVpbGRlck5hdGl2ZUdlbmVyaWMgPSAoZG9NZW1vOiBib29sZWFuLCBzdGFraW5nQWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0LnB1Yik7XG4gICAgaWYgKHR5cGVvZiBzdGFraW5nQWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nQWRkcmVzcyhzdGFraW5nQWRkcmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nQWRkcmVzc2VzKHN0YWtpbmdBZGRyZXNzKTtcbiAgICB9XG4gICAgdHhCdWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgaWYgKGRvTWVtbykge1xuICAgICAgdHhCdWlsZGVyLm1lbW8oJ1Rlc3QgZGVhY3RpdmF0ZScpO1xuICAgIH1cbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9O1xuXG4gIGNvbnN0IHNpZ25CdWlsZGVyTmF0aXZlID0gKHR4QnVpbGRlcjogU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyKSA9PiB7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdhbGxldC5wcnYgfSk7XG4gICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgfTtcblxuICBjb25zdCBhZGRTaWduYXR1cmVzTmF0aXZlID0gKHR4QnVpbGRlcjogU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyLCBzaWduYXR1cmU6IHN0cmluZ1tdKSA9PiB7XG4gICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1Yjogd2FsbGV0LnB1YiB9LCBCdWZmZXIuZnJvbShiczU4LmRlY29kZShzaWduYXR1cmVbMF0pKSk7XG4gICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgfTtcblxuICBjb25zdCB2ZXJpZnlCdWlsdFRyYW5zYWN0aW9uTmF0aXZlR2VuZXJpYyA9ICh0eDogQmFzZVRyYW5zYWN0aW9uLCBkb01lbW86IGJvb2xlYW4sIHN0YWtpbmdBZGRyZXNzZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEuc2hvdWxkLmRlZXBFcXVhbChbXG4gICAgICAuLi4oZG9NZW1vXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnTWVtbycsXG4gICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgIG1lbW86ICdUZXN0IGRlYWN0aXZhdGUnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuICAgICAgLi4uc3Rha2luZ0FkZHJlc3Nlcy5tYXAoKHN0YWtpbmdBZGRyZXNzKSA9PiAoe1xuICAgICAgICB0eXBlOiAnRGVhY3RpdmF0ZScsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIHN0YWtpbmdBZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXQucHViLFxuICAgICAgICAgIHVuc3Rha2luZ0FkZHJlc3M6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGFraW5nVHlwZTogU29sU3Rha2luZ1R5cGVFbnVtLk5BVElWRSxcbiAgICAgICAgfSxcbiAgICAgIH0pKSxcbiAgICBdKTtcbiAgfTtcblxuICBkZXNjcmliZSgnU2hvdWxkIHN1Y2NlZWQnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ05hdGl2ZSBzdGFraW5nIGRlYWN0aXZhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwZXJmb3JtVGVzdE5hdGl2ZSA9IGFzeW5jIChcbiAgICAgICAgZG9NZW1vOiBib29sZWFuLFxuICAgICAgICBzdGFraW5nQWRkcmVzczogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIGRvU2lnbjogYm9vbGVhbixcbiAgICAgICAga25vd25SYXdUeDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3Qgc3Rha2luZ0FkZHJlc3NlcyA9IHR5cGVvZiBzdGFraW5nQWRkcmVzcyA9PT0gJ3N0cmluZycgPyBbc3Rha2luZ0FkZHJlc3NdIDogc3Rha2luZ0FkZHJlc3M7XG4gICAgICAgIGF3YWl0IHBlcmZvcm1UZXN0KHtcbiAgICAgICAgICBtYWtlVW5zaWduZWRCdWlsZGVyOiAoKSA9PiBtYWtlVW5zaWduZWRCdWlsZGVyTmF0aXZlR2VuZXJpYyhkb01lbW8sIHN0YWtpbmdBZGRyZXNzKSxcbiAgICAgICAgICBzaWduQnVpbGRlcjogZG9TaWduID8gc2lnbkJ1aWxkZXJOYXRpdmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWRkU2lnbmF0dXJlczogZG9TaWduID8gYWRkU2lnbmF0dXJlc05hdGl2ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB2ZXJpZnlCdWlsdFRyYW5zYWN0aW9uOiAodHgpID0+IHZlcmlmeUJ1aWx0VHJhbnNhY3Rpb25OYXRpdmVHZW5lcmljKHR4LCBkb01lbW8sIHN0YWtpbmdBZGRyZXNzZXMpLFxuICAgICAgICAgIGtub3duUmF3VHgsXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgaXQoJ2J1aWxkaW5nIGEgc3Rha2luZyBkZWFjdGl2YXRlIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZShmYWxzZSwgc3Rha2VBY2NvdW50LnB1YiwgdHJ1ZSwgdGVzdERhdGEuU1RBS0lOR19ERUFDVElWQVRFX1NJR05FRF9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkaW5nIGEgc3Rha2luZyBtdWx0aSBkZWFjdGl2YXRlIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZShcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBbc3Rha2VBY2NvdW50LnB1Yiwgc3BsaXRBY2NvdW50LnB1Yl0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICB0ZXN0RGF0YS5TVEFLSU5HX01VTFRJX0RFQUNUSVZBVEVfU0lHTkVEX1RYXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbmQgc2lnbiBhIG11bHRpIGRlYWN0aXZhdGUgc2luZ2xlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZShmYWxzZSwgW3N0YWtlQWNjb3VudC5wdWJdLCB0cnVlLCB0ZXN0RGF0YS5TVEFLSU5HX01VTFRJX0RFQUNUSVZBVEVfU0lHTkVEX1RYX3NpbmdsZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBidWlsZCBhbmQgc2lnbiBhIGRlYWN0aXZhdGUgc2luZ2xlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZShmYWxzZSwgc3Rha2VBY2NvdW50LnB1YiwgdHJ1ZSwgdGVzdERhdGEuU1RBS0lOR19ERUFDVElWQVRFX1NJR05FRF9UWF9zaW5nbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZGluZyBhIHN0YWtpbmcgZGVhY3RpdmF0ZSBzaWduZWQgdHggd2l0aCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZSh0cnVlLCBzdGFrZUFjY291bnQucHViLCB0cnVlLCB0ZXN0RGF0YS5TVEFLSU5HX0RFQUNUSVZBVEVfU0lHTkVEX1RYX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkaW5nIGEgc3Rha2luZyBkZWFjdGl2YXRlIHVuc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZShmYWxzZSwgc3Rha2VBY2NvdW50LnB1YiwgZmFsc2UsIHRlc3REYXRhLlNUQUtJTkdfREVBQ1RJVkFURV9VTlNJR05FRF9UWCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkaW5nIGEgc3Rha2luZyBkZWFjdGl2YXRlIHVuc2lnbmVkIHR4IHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcGVyZm9ybVRlc3ROYXRpdmUodHJ1ZSwgc3Rha2VBY2NvdW50LnB1YiwgZmFsc2UsIHRlc3REYXRhLlNUQUtJTkdfREVBQ1RJVkFURV9VTlNJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZGluZyBhIHN0YWtpbmcgZGVhY3RpdmF0ZSB1bnNpZ25lZCB0eCB3aXRoIG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHBlcmZvcm1UZXN0TmF0aXZlKHRydWUsIHN0YWtlQWNjb3VudC5wdWIsIGZhbHNlLCB0ZXN0RGF0YS5TVEFLSU5HX0RFQUNUSVZBVEVfVU5TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYWxsIGNvbWJpbmF0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBkb01lbW8gb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc3Rha2luZ0FkZHJlc3Mgb2YgW3N0YWtlQWNjb3VudC5wdWIsIFtzdGFrZUFjY291bnQucHViXSwgW3N0YWtlQWNjb3VudC5wdWIsIHNwbGl0QWNjb3VudC5wdWJdXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb1NpZ24gb2YgW2ZhbHNlLCB0cnVlXSkge1xuICAgICAgICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdE5hdGl2ZShkb01lbW8sIHN0YWtpbmdBZGRyZXNzLCBkb1NpZ24sIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkaW5nIGFuIGVuY29kZWQgc2lnbmVkIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU1RBS0lOR19ERUFDVElWQVRFX1NJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd2FsbGV0LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNUQUtJTkdfREVBQ1RJVkFURV9TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGRpbmcgYW4gZW5jb2RlZCB1bnNpZ25lZCB0cmFuc2FjdGlvbiBhbmQgc2lnbmluZyBpdCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlNUQUtJTkdfREVBQ1RJVkFURV9VTlNJR05FRF9UWF9XSVRIX01FTU8pO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd2FsbGV0LnBydiB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNUQUtJTkdfREVBQ1RJVkFURV9TSUdORURfVFhfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGRpbmcgYSBwYXJ0aWFsIHN0YWtpbmcgZGVhY3RpdmF0ZSB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAgIC5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKVxuICAgICAgICAgIC5zZW5kZXIod2FsbGV0LnB1YilcbiAgICAgICAgICAuc3Rha2luZ0FkZHJlc3Moc3Rha2VBY2NvdW50LnB1YilcbiAgICAgICAgICAudW5zdGFraW5nQWRkcmVzcyh0ZXN0RGF0YS5zcGxpdFN0YWtlQWNjb3VudC5wdWIpXG4gICAgICAgICAgLmFtb3VudCgnMTAwMDAwJylcbiAgICAgICAgICAubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdhbGxldC5wcnYgfSk7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgICAgdHhKc29uLmluc3RydWN0aW9uc0RhdGEuc2hvdWxkLmRlZXBFcXVhbChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ0RlYWN0aXZhdGUnLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXQucHViLFxuICAgICAgICAgICAgICBzdGFraW5nQWRkcmVzczogc3Rha2VBY2NvdW50LnB1YixcbiAgICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwJyxcbiAgICAgICAgICAgICAgdW5zdGFraW5nQWRkcmVzczogdGVzdERhdGEuc3BsaXRTdGFrZUFjY291bnQucHViLFxuICAgICAgICAgICAgICBzdGFraW5nVHlwZTogU29sU3Rha2luZ1R5cGVFbnVtLk5BVElWRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdERhdGEuU1RBS0lOR19QQVJUSUFMX0RFQUNUSVZBVEVfU0lHTkVEX1RYKTtcblxuICAgICAgICBjb25zdCB0eDIgPSBhd2FpdCBmYWN0b3J5LmZyb20odGVzdERhdGEuU1RBS0lOR19QQVJUSUFMX0RFQUNUSVZBVEVfU0lHTkVEX1RYKS5idWlsZCgpO1xuICAgICAgICBjb25zdCB0eEpzb24yID0gdHgyLnRvSnNvbigpO1xuICAgICAgICB0eDIudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgICBkZWxldGUgdHhbJ19pZCddO1xuICAgICAgICBkZWxldGUgdHgyWydfaWQnXTtcblxuICAgICAgICAvLyBzaG91bGQuZGVlcEVxdWFsKHR4LCB0eDIpIC8vIF91c2VUb2tlbkFkZHJlc3NUb2tlbk5hbWUgdHJ1ZSBmb3IgdHgyXG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uMiwgdHhKc29uMik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJpbmFkZSBzdGFraW5nIGRlYWN0aXZhdGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXJpbmFkZVJlY2lwaWVudHNPYmplY3Q6IFJlY2lwaWVudFtdID0gW107XG4gICAgICBtYXJpbmFkZVJlY2lwaWVudHNPYmplY3QucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6ICdvcE5TOEVOcEVNV2RYY0pVZ0pDc0pURHA3YXJUWGF5b0JFZUJVZzZVZXpQJyxcbiAgICAgICAgYW1vdW50OiAnMjMwMDAwMCcsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWFyaW5hZGVNZW1vID0gYHtcXFxcXCJQcmVwYXJlRm9yUmV2b2tlXFxcXFwiOntcXFxcXCJ1c2VyXFxcXFwiOlxcXFxcIiR7d2FsbGV0LnB1Yn19XFxcXFwiLFxcXFxcImFtb3VudFxcXFxcIjpcXFxcXCI1MDAwMDAwMDAwMDBcXFxcXCJ9YDtcblxuICAgICAgaXQoJ01hcmluYWRlOiBidWlsZCBhbmQgc2lnbiBhIHN0YWtpbmcgZGVhY3RpdmF0ZSB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgcGVyZm9ybVRlc3Qoe1xuICAgICAgICAgIG1ha2VVbnNpZ25lZEJ1aWxkZXI6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyKCk7XG4gICAgICAgICAgICB0eEJ1aWxkZXJcbiAgICAgICAgICAgICAgLnNlbmRlcih3YWxsZXQucHViKVxuICAgICAgICAgICAgICAuc3Rha2luZ0FkZHJlc3Moc3Rha2VBY2NvdW50LnB1YilcbiAgICAgICAgICAgICAgLm5vbmNlKHJlY2VudEJsb2NrSGFzaClcbiAgICAgICAgICAgICAgLnN0YWtpbmdUeXBlKFNvbFN0YWtpbmdUeXBlRW51bS5NQVJJTkFERSlcbiAgICAgICAgICAgICAgLm1lbW8obWFyaW5hZGVNZW1vKVxuICAgICAgICAgICAgICAucmVjaXBpZW50cyhtYXJpbmFkZVJlY2lwaWVudHNPYmplY3QpO1xuICAgICAgICAgICAgcmV0dXJuIHR4QnVpbGRlcjtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25CdWlsZGVyOiBzaWduQnVpbGRlck5hdGl2ZSxcbiAgICAgICAgICBhZGRTaWduYXR1cmVzOiBhZGRTaWduYXR1cmVzTmF0aXZlLFxuICAgICAgICAgIHZlcmlmeUJ1aWx0VHJhbnNhY3Rpb246ICh0eDogQmFzZVRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgICAgIHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLnNob3VsZC5kZWVwRXF1YWwoW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICBtZW1vOiBtYXJpbmFkZU1lbW8sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnTWVtbycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRGVhY3RpdmF0ZScsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICBmcm9tQWRkcmVzczogJycsXG4gICAgICAgICAgICAgICAgICBzdGFraW5nQWRkcmVzczogJycsXG4gICAgICAgICAgICAgICAgICBzdGFraW5nVHlwZTogU29sU3Rha2luZ1R5cGVFbnVtLk1BUklOQURFLFxuICAgICAgICAgICAgICAgICAgcmVjaXBpZW50czogbWFyaW5hZGVSZWNpcGllbnRzT2JqZWN0LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGtub3duUmF3VHg6IHRlc3REYXRhLk1BUklOQURFX1NUQUtJTkdfREVBQ1RJVkFURV9TSUdORURfVFgsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSml0byBzdGFraW5nIGRlYWN0aXZhdGUnLCAoKSA9PiB7XG4gICAgICBpdCgnSml0bzogYnVpbGQgYW5kIHNpZ24gYSBzdGFraW5nIGRlYWN0aXZhdGUgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyQXV0aG9yaXR5ID0gbmV3IEtleVBhaXIodGVzdERhdGEuc3BsaXRTdGFrZUFjY291bnQpLmdldEtleXMoKTtcblxuICAgICAgICBhd2FpdCBwZXJmb3JtVGVzdCh7XG4gICAgICAgICAgbWFrZVVuc2lnbmVkQnVpbGRlcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgICAgICAgIHR4QnVpbGRlclxuICAgICAgICAgICAgICAuc2VuZGVyKHdhbGxldC5wdWIpXG4gICAgICAgICAgICAgIC5zdGFraW5nQWRkcmVzcyhKSVRPX1NUQUtFX1BPT0xfQUREUkVTUylcbiAgICAgICAgICAgICAgLnVuc3Rha2luZ0FkZHJlc3Moc3Rha2VBY2NvdW50LnB1YilcbiAgICAgICAgICAgICAgLnN0YWtpbmdUeXBlKFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPKVxuICAgICAgICAgICAgICAuZXh0cmFQYXJhbXMoe1xuICAgICAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3M6IHRlc3REYXRhLkpJVE9fU1RBS0VfUE9PTF9WQUxJREFUT1JfQUREUkVTUyxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckF1dGhvcml0eUFkZHJlc3M6IHRyYW5zZmVyQXV0aG9yaXR5LnB1YixcbiAgICAgICAgICAgICAgICBzdGFrZVBvb2xEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBtYW5hZ2VyRmVlQWNjb3VudDogdGVzdERhdGEuSklUT19TVEFLRV9QT09MX0RBVEFfUEFSU0VELm1hbmFnZXJGZWVBY2NvdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwb29sTWludDogdGVzdERhdGEuSklUT19TVEFLRV9QT09MX0RBVEFfUEFSU0VELnBvb2xNaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3JMaXN0QWNjb3VudDogdGVzdERhdGEuSklUT19TVEFLRV9QT09MX0RBVEFfUEFSU0VELnZhbGlkYXRvckxpc3QudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYW1vdW50KCcxMDAwJylcbiAgICAgICAgICAgICAgLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbkJ1aWxkZXI6ICh0eEJ1aWxkZXI6IFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcikgPT4ge1xuICAgICAgICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdhbGxldC5wcnYgfSk7XG4gICAgICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogc3Rha2VBY2NvdW50LnBydiB9KTtcbiAgICAgICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0cmFuc2ZlckF1dGhvcml0eS5wcnYgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYWRkU2lnbmF0dXJlczogKHR4QnVpbGRlcjogU3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyLCBzaWduYXR1cmU6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgICAgICB0eEJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiB3YWxsZXQucHViIH0sIEJ1ZmZlci5mcm9tKGJzNTguZGVjb2RlKHNpZ25hdHVyZVswXSkpKTtcbiAgICAgICAgICAgIHR4QnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHN0YWtlQWNjb3VudC5wdWIgfSwgQnVmZmVyLmZyb20oYnM1OC5kZWNvZGUoc2lnbmF0dXJlWzFdKSkpO1xuICAgICAgICAgICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogdHJhbnNmZXJBdXRob3JpdHkucHViIH0sIEJ1ZmZlci5mcm9tKGJzNTguZGVjb2RlKHNpZ25hdHVyZVsyXSkpKTtcbiAgICAgICAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB2ZXJpZnlCdWlsdFRyYW5zYWN0aW9uOiAodHg6IEJhc2VUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICAgICAgICB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5zaG91bGQuZGVlcEVxdWFsKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdEZWFjdGl2YXRlJyxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgIGZyb21BZGRyZXNzOiB3YWxsZXQucHViLFxuICAgICAgICAgICAgICAgICAgc3Rha2luZ0FkZHJlc3M6IEpJVE9fU1RBS0VfUE9PTF9BRERSRVNTLFxuICAgICAgICAgICAgICAgICAgdW5zdGFraW5nQWRkcmVzczogc3Rha2VBY2NvdW50LnB1YixcbiAgICAgICAgICAgICAgICAgIGFtb3VudDogJzEwMDAnLFxuICAgICAgICAgICAgICAgICAgc3Rha2luZ1R5cGU6IFNvbFN0YWtpbmdUeXBlRW51bS5KSVRPLFxuICAgICAgICAgICAgICAgICAgZXh0cmFQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yQWRkcmVzczogdGVzdERhdGEuSklUT19TVEFLRV9QT09MX1ZBTElEQVRPUl9BRERSRVNTLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlckF1dGhvcml0eUFkZHJlc3M6IHRyYW5zZmVyQXV0aG9yaXR5LnB1YixcbiAgICAgICAgICAgICAgICAgICAgc3Rha2VQb29sRGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXJGZWVBY2NvdW50OiB0ZXN0RGF0YS5KSVRPX1NUQUtFX1BPT0xfREFUQV9QQVJTRUQubWFuYWdlckZlZUFjY291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICBwb29sTWludDogdGVzdERhdGEuSklUT19TVEFLRV9QT09MX0RBVEFfUEFSU0VELnBvb2xNaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdEFjY291bnQ6IHRlc3REYXRhLkpJVE9fU1RBS0VfUE9PTF9EQVRBX1BBUlNFRC52YWxpZGF0b3JMaXN0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHR4LmlucHV0cy5zaG91bGQuZGVlcEVxdWFsKFtdKTtcbiAgICAgICAgICAgIHR4Lm91dHB1dHMuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBrbm93blJhd1R4OiB0ZXN0RGF0YS5KSVRPX1NUQUtJTkdfREVBQ1RJVkFURV9TSUdORURfVFgsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICBpdCgnYnVpbGRpbmcgYSBzdGFraW5nIGRlYWN0aXZhdGUgdHggd2l0aG91dCBzdGFraW5nIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXQucHViKS5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHdhbGxldC5wcnYgfSk7XG4gICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdTdGFraW5nIGFkZHJlc3MgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkaW5nIGEgc3Rha2luZyBkZWFjdGl2YXRlIHR4IHdpdGggYSB3cm9uZyBzdGFraW5nIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLnNlbmRlcih3YWxsZXQucHViKS5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5zdGFraW5nQWRkcmVzcyhpbnZhbGlkUHViS2V5KSkudGhyb3dFcnJvcihcbiAgICAgICAgYEludmFsaWQgb3IgbWlzc2luZyBzdGFraW5nQWRkcmVzcywgZ290OiAke2ludmFsaWRQdWJLZXl9YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZGluZyBhIHN0YWtpbmcgZGVhY3RpdmF0ZSB0eCB3aXRoIHRoZSBzYW1lIGFkZHJlc3MgYXMgc2VuZGVyIGFuZCBzdGFraW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nRGVhY3RpdmF0ZUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5zZW5kZXIod2FsbGV0LnB1Yikubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIHR4QnVpbGRlci5zdGFraW5nQWRkcmVzcyh3YWxsZXQucHViKTtcbiAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ1NlbmRlciBhZGRyZXNzIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgU3Rha2luZyBhZGRyZXNzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRpbmcgYSBwYXJ0aWFsIHN0YWtpbmcgZGVhY3RpdmF0ZSB0eCB3aXRob3V0IGFuIGFtb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnlcbiAgICAgICAgLmdldFN0YWtpbmdEZWFjdGl2YXRlQnVpbGRlcigpXG4gICAgICAgIC5zZW5kZXIod2FsbGV0LnB1YilcbiAgICAgICAgLm5vbmNlKHJlY2VudEJsb2NrSGFzaClcbiAgICAgICAgLnN0YWtpbmdBZGRyZXNzKHRlc3REYXRhLnN0YWtlQWNjb3VudC5wdWIpXG4gICAgICAgIC51bnN0YWtpbmdBZGRyZXNzKHRlc3REYXRhLnNwbGl0U3Rha2VBY2NvdW50LnB1Yik7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd2FsbGV0LnBydiB9KTtcblxuICAgICAgYXdhaXQgdHhCdWlsZGVyXG4gICAgICAgIC5idWlsZCgpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAgICdJZiBhbiB1bnN0YWtpbmcgYWRkcmVzcyBpcyBnaXZlbiB0aGVuIGEgcGFydGlhbCBhbW91bnQgdG8gdW5zdGFrZSBtdXN0IGFsc28gYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGRpbmcgYSBwYXJ0aWFsIHN0YWtpbmcgZGVhY3RpdmF0ZSB0eCB3aXRob3V0IGFuIHVuc3Rha2luZyBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeVxuICAgICAgICAuZ2V0U3Rha2luZ0RlYWN0aXZhdGVCdWlsZGVyKClcbiAgICAgICAgLnNlbmRlcih3YWxsZXQucHViKVxuICAgICAgICAubm9uY2UocmVjZW50QmxvY2tIYXNoKVxuICAgICAgICAuc3Rha2luZ0FkZHJlc3ModGVzdERhdGEuc3Rha2VBY2NvdW50LnB1YilcbiAgICAgICAgLmFtb3VudCgnMTAnKTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB3YWxsZXQucHJ2IH0pO1xuXG4gICAgICBhd2FpdCB0eEJ1aWxkZXJcbiAgICAgICAgLmJ1aWxkKClcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICAgJ1doZW4gcGFydGlhbGx5IHVuc3Rha2luZyB0aGUgdW5zdGFraW5nIGFkZHJlc3MgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbidcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stakingDelegateBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingDelegateBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/stakingDelegateBuilder.ts"],"names":[],"mappings":""}