@bitgo-beta/sdk-coin-sui 3.0.3-beta.202 → 3.0.3-beta.2021

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 (197) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +7 -2
  4. package/dist/src/lib/compareTransactionBlocks.js +2 -3
  5. package/dist/src/lib/constants.d.ts +9 -2
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +18 -2
  8. package/dist/src/lib/customTransaction.js +3 -3
  9. package/dist/src/lib/customTransactionBuilder.js +5 -5
  10. package/dist/src/lib/iface.d.ts +80 -12
  11. package/dist/src/lib/iface.d.ts.map +1 -1
  12. package/dist/src/lib/iface.js +34 -5
  13. package/dist/src/lib/index.d.ts +6 -0
  14. package/dist/src/lib/index.d.ts.map +1 -1
  15. package/dist/src/lib/index.js +36 -10
  16. package/dist/src/lib/keyPair.js +24 -10
  17. package/dist/src/lib/mystenlab/builder/Inputs.d.ts +64 -11
  18. package/dist/src/lib/mystenlab/builder/Inputs.d.ts.map +1 -1
  19. package/dist/src/lib/mystenlab/builder/Inputs.js +63 -19
  20. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts +88 -355
  21. package/dist/src/lib/mystenlab/builder/TransactionBlock.d.ts.map +1 -1
  22. package/dist/src/lib/mystenlab/builder/TransactionBlock.js +44 -25
  23. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts +152 -77
  24. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.d.ts.map +1 -1
  25. package/dist/src/lib/mystenlab/builder/TransactionDataBlock.js +54 -44
  26. package/dist/src/lib/mystenlab/builder/Transactions.d.ts +133 -188
  27. package/dist/src/lib/mystenlab/builder/Transactions.d.ts.map +1 -1
  28. package/dist/src/lib/mystenlab/builder/Transactions.js +52 -53
  29. package/dist/src/lib/mystenlab/builder/bcs.d.ts +1 -1
  30. package/dist/src/lib/mystenlab/builder/bcs.d.ts.map +1 -1
  31. package/dist/src/lib/mystenlab/builder/bcs.js +2 -2
  32. package/dist/src/lib/mystenlab/builder/index.js +6 -2
  33. package/dist/src/lib/mystenlab/builder/serializer.js +6 -8
  34. package/dist/src/lib/mystenlab/builder/utils.d.ts +1 -1
  35. package/dist/src/lib/mystenlab/builder/utils.d.ts.map +1 -1
  36. package/dist/src/lib/mystenlab/builder/utils.js +4 -4
  37. package/dist/src/lib/mystenlab/cryptography/hash.js +3 -4
  38. package/dist/src/lib/mystenlab/framework/framework.d.ts +6 -6
  39. package/dist/src/lib/mystenlab/framework/framework.d.ts.map +1 -1
  40. package/dist/src/lib/mystenlab/framework/framework.js +22 -25
  41. package/dist/src/lib/mystenlab/framework/index.js +6 -2
  42. package/dist/src/lib/mystenlab/framework/sui-system-state.js +2 -2
  43. package/dist/src/lib/mystenlab/txn-data-serializers/type-tag-serializer.js +2 -2
  44. package/dist/src/lib/mystenlab/types/coin.d.ts +17 -15
  45. package/dist/src/lib/mystenlab/types/coin.d.ts.map +1 -1
  46. package/dist/src/lib/mystenlab/types/coin.js +20 -19
  47. package/dist/src/lib/mystenlab/types/common.d.ts +8 -8
  48. package/dist/src/lib/mystenlab/types/common.d.ts.map +1 -1
  49. package/dist/src/lib/mystenlab/types/common.js +22 -22
  50. package/dist/src/lib/mystenlab/types/events.d.ts +15 -15
  51. package/dist/src/lib/mystenlab/types/events.d.ts.map +1 -1
  52. package/dist/src/lib/mystenlab/types/events.js +17 -17
  53. package/dist/src/lib/mystenlab/types/index.js +6 -2
  54. package/dist/src/lib/mystenlab/types/normalized.d.ts +21 -21
  55. package/dist/src/lib/mystenlab/types/normalized.d.ts.map +1 -1
  56. package/dist/src/lib/mystenlab/types/normalized.js +41 -41
  57. package/dist/src/lib/mystenlab/types/objects.d.ts +51 -51
  58. package/dist/src/lib/mystenlab/types/objects.d.ts.map +1 -1
  59. package/dist/src/lib/mystenlab/types/objects.js +96 -106
  60. package/dist/src/lib/mystenlab/types/option.d.ts +1 -1
  61. package/dist/src/lib/mystenlab/types/option.d.ts.map +1 -1
  62. package/dist/src/lib/mystenlab/types/option.js +2 -3
  63. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts +55 -29
  64. package/dist/src/lib/mystenlab/types/sui-bcs.d.ts.map +1 -1
  65. package/dist/src/lib/mystenlab/types/sui-bcs.js +29 -5
  66. package/dist/src/lib/mystenlab/types/transactions.d.ts +625 -625
  67. package/dist/src/lib/mystenlab/types/transactions.d.ts.map +1 -1
  68. package/dist/src/lib/mystenlab/types/transactions.js +178 -194
  69. package/dist/src/lib/mystenlab/types/validator.d.ts +13 -13
  70. package/dist/src/lib/mystenlab/types/validator.d.ts.map +1 -1
  71. package/dist/src/lib/mystenlab/types/validator.js +124 -124
  72. package/dist/src/lib/resources/walrusConfig.d.ts +22 -0
  73. package/dist/src/lib/resources/walrusConfig.d.ts.map +1 -0
  74. package/dist/src/lib/resources/walrusConfig.js +37 -0
  75. package/dist/src/lib/rpcClient.d.ts +5 -0
  76. package/dist/src/lib/rpcClient.d.ts.map +1 -0
  77. package/dist/src/lib/rpcClient.js +74 -0
  78. package/dist/src/lib/stakingBuilder.d.ts +10 -0
  79. package/dist/src/lib/stakingBuilder.d.ts.map +1 -1
  80. package/dist/src/lib/stakingBuilder.js +59 -7
  81. package/dist/src/lib/stakingTransaction.d.ts +0 -1
  82. package/dist/src/lib/stakingTransaction.d.ts.map +1 -1
  83. package/dist/src/lib/stakingTransaction.js +36 -18
  84. package/dist/src/lib/tokenTransferBuilder.d.ts +93 -0
  85. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  86. package/dist/src/lib/tokenTransferBuilder.js +266 -0
  87. package/dist/src/lib/tokenTransferTransaction.d.ts +59 -0
  88. package/dist/src/lib/tokenTransferTransaction.d.ts.map +1 -0
  89. package/dist/src/lib/tokenTransferTransaction.js +272 -0
  90. package/dist/src/lib/transaction.d.ts +21 -4
  91. package/dist/src/lib/transaction.d.ts.map +1 -1
  92. package/dist/src/lib/transaction.js +144 -17
  93. package/dist/src/lib/transactionBuilder.d.ts +13 -4
  94. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  95. package/dist/src/lib/transactionBuilder.js +34 -4
  96. package/dist/src/lib/transactionBuilderFactory.d.ts +11 -2
  97. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  98. package/dist/src/lib/transactionBuilderFactory.js +32 -1
  99. package/dist/src/lib/transferBuilder.d.ts +58 -1
  100. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  101. package/dist/src/lib/transferBuilder.js +310 -24
  102. package/dist/src/lib/transferTransaction.d.ts +6 -1
  103. package/dist/src/lib/transferTransaction.d.ts.map +1 -1
  104. package/dist/src/lib/transferTransaction.js +129 -12
  105. package/dist/src/lib/unstakingBuilder.js +6 -6
  106. package/dist/src/lib/unstakingTransaction.d.ts +0 -1
  107. package/dist/src/lib/unstakingTransaction.d.ts.map +1 -1
  108. package/dist/src/lib/unstakingTransaction.js +31 -17
  109. package/dist/src/lib/utils.d.ts +24 -3
  110. package/dist/src/lib/utils.d.ts.map +1 -1
  111. package/dist/src/lib/utils.js +295 -22
  112. package/dist/src/lib/walrusStakingBuilder.d.ts +77 -0
  113. package/dist/src/lib/walrusStakingBuilder.d.ts.map +1 -0
  114. package/dist/src/lib/walrusStakingBuilder.js +276 -0
  115. package/dist/src/lib/walrusStakingTransaction.d.ts +52 -0
  116. package/dist/src/lib/walrusStakingTransaction.d.ts.map +1 -0
  117. package/dist/src/lib/walrusStakingTransaction.js +289 -0
  118. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts +36 -0
  119. package/dist/src/lib/walrusWithdrawStakeBuilder.d.ts.map +1 -0
  120. package/dist/src/lib/walrusWithdrawStakeBuilder.js +177 -0
  121. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts +21 -0
  122. package/dist/src/lib/walrusWithdrawStakeTransaction.d.ts.map +1 -0
  123. package/dist/src/lib/walrusWithdrawStakeTransaction.js +190 -0
  124. package/dist/src/register.d.ts.map +1 -1
  125. package/dist/src/register.js +5 -1
  126. package/dist/src/sui.d.ts +58 -8
  127. package/dist/src/sui.d.ts.map +1 -1
  128. package/dist/src/sui.js +538 -37
  129. package/dist/src/suiToken.d.ts +22 -0
  130. package/dist/src/suiToken.d.ts.map +1 -0
  131. package/dist/src/suiToken.js +61 -0
  132. package/dist/src/tsui.js +1 -1
  133. package/dist/test/integration/index.d.ts +1 -0
  134. package/dist/test/integration/index.d.ts.map +1 -0
  135. package/dist/test/integration/index.js +1 -0
  136. package/dist/test/local_fullnode/RpcClient.d.ts +60 -0
  137. package/dist/test/local_fullnode/RpcClient.d.ts.map +1 -0
  138. package/dist/test/local_fullnode/RpcClient.js +111 -0
  139. package/dist/test/local_fullnode/faucet.d.ts +6 -0
  140. package/dist/test/local_fullnode/faucet.d.ts.map +1 -0
  141. package/dist/test/local_fullnode/faucet.js +17 -0
  142. package/dist/test/local_fullnode/transactions.d.ts +2 -0
  143. package/dist/test/local_fullnode/transactions.d.ts.map +1 -0
  144. package/dist/test/local_fullnode/transactions.js +190 -0
  145. package/dist/test/resources/sui.d.ts +458 -0
  146. package/dist/test/resources/sui.d.ts.map +1 -0
  147. package/dist/test/resources/sui.js +632 -0
  148. package/dist/test/unit/compareTransactionBlocks.d.ts +2 -0
  149. package/dist/test/unit/compareTransactionBlocks.d.ts.map +1 -0
  150. package/dist/test/unit/compareTransactionBlocks.js +64 -0
  151. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  152. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  153. package/dist/test/unit/getBuilderFactory.js +10 -0
  154. package/dist/test/unit/keyPair.d.ts +2 -0
  155. package/dist/test/unit/keyPair.d.ts.map +1 -0
  156. package/dist/test/unit/keyPair.js +72 -0
  157. package/dist/test/unit/sui.d.ts +2 -0
  158. package/dist/test/unit/sui.d.ts.map +1 -0
  159. package/dist/test/unit/sui.js +2747 -0
  160. package/dist/test/unit/suiToken.d.ts +2 -0
  161. package/dist/test/unit/suiToken.d.ts.map +1 -0
  162. package/dist/test/unit/suiToken.js +39 -0
  163. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts +2 -0
  164. package/dist/test/unit/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
  165. package/dist/test/unit/transactionBuilder/customTransactionBuilder.js +106 -0
  166. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
  167. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  168. package/dist/test/unit/transactionBuilder/stakingBuilder.js +294 -0
  169. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  170. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  171. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +431 -0
  172. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  173. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  174. package/dist/test/unit/transactionBuilder/transactionBuilder.js +639 -0
  175. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  176. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  177. package/dist/test/unit/transactionBuilder/transferBuilder.js +1181 -0
  178. package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts +2 -0
  179. package/dist/test/unit/transactionBuilder/unstakingBuilder.d.ts.map +1 -0
  180. package/dist/test/unit/transactionBuilder/unstakingBuilder.js +115 -0
  181. package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts +2 -0
  182. package/dist/test/unit/transactionBuilder/walrusStakingBuilder.d.ts.map +1 -0
  183. package/dist/test/unit/transactionBuilder/walrusStakingBuilder.js +289 -0
  184. package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts +2 -0
  185. package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.d.ts.map +1 -0
  186. package/dist/test/unit/transactionBuilder/walrusWithdrawBuilder.js +250 -0
  187. package/dist/test/unit/transferTransaction.d.ts +2 -0
  188. package/dist/test/unit/transferTransaction.d.ts.map +1 -0
  189. package/dist/test/unit/transferTransaction.js +94 -0
  190. package/dist/test/unit/utils.d.ts +2 -0
  191. package/dist/test/unit/utils.d.ts.map +1 -0
  192. package/dist/test/unit/utils.js +186 -0
  193. package/dist/tsconfig.tsbuildinfo +1 -0
  194. package/package.json +16 -12
  195. package/.eslintignore +0 -6
  196. package/.mocharc.yml +0 -7
  197. package/CHANGELOG.md +0 -465
@@ -0,0 +1,289 @@
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.WalrusStakingTransaction = void 0;
37
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
38
+ const utils_1 = __importStar(require("./utils"));
39
+ const buffer_1 = require("buffer");
40
+ const transaction_1 = require("./transaction");
41
+ const builder_1 = require("./mystenlab/builder");
42
+ const types_1 = require("./mystenlab/types");
43
+ const bcs_1 = require("@mysten/bcs");
44
+ const constants_1 = require("./constants");
45
+ class WalrusStakingTransaction extends transaction_1.Transaction {
46
+ constructor(_coinConfig) {
47
+ super(_coinConfig);
48
+ }
49
+ get suiTransaction() {
50
+ return this._suiTransaction;
51
+ }
52
+ setSuiTransaction(tx) {
53
+ this._suiTransaction = tx;
54
+ }
55
+ addSignature(publicKey, signature) {
56
+ this._signatures.push(signature.toString('hex'));
57
+ this._signature = { publicKey, signature };
58
+ this.serialize();
59
+ }
60
+ get suiSignature() {
61
+ return this._signature;
62
+ }
63
+ /** @inheritdoc */
64
+ canSign(key) {
65
+ return true;
66
+ }
67
+ /** @inheritdoc */
68
+ toBroadcastFormat() {
69
+ if (!this._suiTransaction) {
70
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
71
+ }
72
+ return this.serialize();
73
+ }
74
+ /** @inheritdoc */
75
+ toJson() {
76
+ if (!this._suiTransaction) {
77
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
78
+ }
79
+ const tx = this._suiTransaction;
80
+ const inputObjects = this.getInputObjectsFromTx(tx.tx);
81
+ return {
82
+ id: this._id,
83
+ sender: tx.sender,
84
+ kind: { ProgrammableTransaction: tx.tx },
85
+ gasData: tx.gasData,
86
+ expiration: tx.expiration ?? { None: null },
87
+ ...(inputObjects.length > 0 && { inputObjects }),
88
+ fundsInAddressBalance: tx.fundsInAddressBalance,
89
+ };
90
+ }
91
+ /** @inheritDoc */
92
+ explainTransaction() {
93
+ const result = this.toJson();
94
+ const displayOrder = [
95
+ 'id',
96
+ 'outputs',
97
+ 'outputAmount',
98
+ 'changeOutputs',
99
+ 'changeAmount',
100
+ 'fee',
101
+ 'type',
102
+ 'module',
103
+ 'function',
104
+ 'validatorAddress',
105
+ ];
106
+ const outputs = [];
107
+ const explanationResult = {
108
+ displayOrder,
109
+ id: this.id,
110
+ outputs,
111
+ outputAmount: '0',
112
+ changeOutputs: [],
113
+ changeAmount: '0',
114
+ fee: { fee: this.suiTransaction.gasData.budget.toString() },
115
+ type: this.type,
116
+ };
117
+ switch (this.type) {
118
+ case sdk_core_1.TransactionType.StakingAdd:
119
+ return this.explainAddDelegationTransaction(result, explanationResult);
120
+ default:
121
+ throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
122
+ }
123
+ }
124
+ /**
125
+ * Set the transaction type.
126
+ *
127
+ * @param {TransactionType} transactionType The transaction type to be set.
128
+ */
129
+ transactionType(transactionType) {
130
+ this._type = transactionType;
131
+ }
132
+ /**
133
+ * Load the input and output data on this transaction.
134
+ */
135
+ loadInputsAndOutputs() {
136
+ if (!this.suiTransaction) {
137
+ return;
138
+ }
139
+ const requests = utils_1.default.getWalrusStakeWithPoolRequests(this.suiTransaction.tx);
140
+ this._outputs = requests.map((request) => {
141
+ return {
142
+ address: request.validatorAddress,
143
+ value: request.amount.toString(),
144
+ coin: this._coinConfig.name,
145
+ };
146
+ });
147
+ this._inputs = [
148
+ {
149
+ address: this.suiTransaction.sender,
150
+ value: this._outputs.reduce((acc, output) => acc + Number(output.value), 0).toString(),
151
+ coin: this._coinConfig.name,
152
+ },
153
+ ];
154
+ }
155
+ /**
156
+ * Sets this transaction payload
157
+ *
158
+ * @param {string} rawTransaction
159
+ */
160
+ fromRawTransaction(rawTransaction) {
161
+ try {
162
+ utils_1.default.isValidRawTransaction(rawTransaction);
163
+ this._suiTransaction = transaction_1.Transaction.deserializeSuiTransaction(rawTransaction);
164
+ this._type = sdk_core_1.TransactionType.StakingAdd;
165
+ this._id = this._suiTransaction.id;
166
+ this.loadInputsAndOutputs();
167
+ }
168
+ catch (e) {
169
+ throw e;
170
+ }
171
+ }
172
+ /**
173
+ * Helper function for serialize() to get the correct txData with transaction type
174
+ *
175
+ * @return {TxData}
176
+ */
177
+ getTxData() {
178
+ if (!this._suiTransaction) {
179
+ throw new sdk_core_1.InvalidTransactionError('empty transaction');
180
+ }
181
+ const inputs = this._suiTransaction.tx.inputs.map((input, index) => {
182
+ if (input.hasOwnProperty('Object')) {
183
+ return input;
184
+ }
185
+ if (input.hasOwnProperty('Pure')) {
186
+ if (input.Pure.length === constants_1.SUI_ADDRESS_LENGTH) {
187
+ const address = (0, types_1.normalizeSuiAddress)(builder_1.builder.de(bcs_1.BCS.ADDRESS, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64'));
188
+ return builder_1.Inputs.Pure(address, bcs_1.BCS.ADDRESS);
189
+ }
190
+ else {
191
+ const amount = builder_1.builder.de(bcs_1.BCS.U64, buffer_1.Buffer.from(input.Pure).toString('base64'), 'base64');
192
+ return builder_1.Inputs.Pure(amount, bcs_1.BCS.U64);
193
+ }
194
+ }
195
+ if (input.hasOwnProperty('BalanceWithdrawal')) {
196
+ return input;
197
+ }
198
+ if (input.kind === 'Input' &&
199
+ (input.value.hasOwnProperty('Object') ||
200
+ input.value.hasOwnProperty('Pure') ||
201
+ input.value.hasOwnProperty('BalanceWithdrawal'))) {
202
+ return input.value;
203
+ }
204
+ // what's left is the pure number or address string
205
+ return builder_1.Inputs.Pure(input.value, input.type === 'pure' ? bcs_1.BCS.U64 : bcs_1.BCS.ADDRESS);
206
+ });
207
+ const programmableTx = {
208
+ inputs: inputs,
209
+ transactions: this._suiTransaction.tx.transactions,
210
+ };
211
+ return {
212
+ sender: this._suiTransaction.sender,
213
+ expiration: this._suiTransaction.expiration ?? { None: null },
214
+ gasData: this._suiTransaction.gasData,
215
+ kind: {
216
+ ProgrammableTransaction: programmableTx,
217
+ },
218
+ };
219
+ }
220
+ /**
221
+ * Returns a complete explanation for a staking transaction
222
+ *
223
+ * @param {TxData} json The transaction data in json format
224
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
225
+ * @returns {TransactionExplanation}
226
+ */
227
+ explainAddDelegationTransaction(json, explanationResult) {
228
+ const outputs = [];
229
+ this.suiTransaction.tx.transactions.forEach((transaction, txIndex) => {
230
+ if (builder_1.SplitCoinsTransaction.is(transaction)) {
231
+ const amountInputIdx = transaction.amounts[0].index;
232
+ const amount = BigInt(this.suiTransaction.tx.inputs[amountInputIdx].value);
233
+ // For WalrusStake, every split is followed by a move call
234
+ const validatorAddressInputIdx = this.suiTransaction.tx.transactions[txIndex + 1]
235
+ .arguments[2].index;
236
+ const validatorAddress = utils_1.default.getAddress(this.suiTransaction.tx.inputs[validatorAddressInputIdx]);
237
+ outputs.push({
238
+ address: validatorAddress,
239
+ amount: amount.toString(10),
240
+ });
241
+ }
242
+ });
243
+ const outputAmount = outputs.reduce((sum, output) => sum + BigInt(output.amount), BigInt(0)).toString(10);
244
+ return {
245
+ ...explanationResult,
246
+ outputAmount,
247
+ outputs,
248
+ };
249
+ }
250
+ getInputObjectsFromTx(tx) {
251
+ const inputs = tx.inputs;
252
+ // Scan all transactions for MergeCoins/SplitCoins that reference ImmOrOwned
253
+ // coin object inputs. When fundsInAddressBalance is used, a MoveCall
254
+ // (redeem_funds) may appear before the first merge/split, so we cannot
255
+ // assume transactions[0] is the relevant one.
256
+ const inputObjects = [];
257
+ for (const txn of tx.transactions) {
258
+ let args = [];
259
+ if (txn.kind === 'MergeCoins') {
260
+ const { destination, sources } = txn;
261
+ args = [destination, ...sources];
262
+ }
263
+ else if (txn.kind === 'SplitCoins') {
264
+ args = [txn.coin];
265
+ }
266
+ else {
267
+ continue;
268
+ }
269
+ args.forEach((arg) => {
270
+ if (arg.kind === 'Input') {
271
+ let input = inputs[arg.index];
272
+ if ('value' in input) {
273
+ input = input.value;
274
+ }
275
+ if ('Object' in input && (0, utils_1.isImmOrOwnedObj)(input.Object)) {
276
+ inputObjects.push(input.Object.ImmOrOwned);
277
+ }
278
+ }
279
+ });
280
+ // Stop after the first merge/split that yields coin object refs.
281
+ if (inputObjects.length > 0) {
282
+ break;
283
+ }
284
+ }
285
+ return inputObjects;
286
+ }
287
+ }
288
+ exports.WalrusStakingTransaction = WalrusStakingTransaction;
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FscnVzU3Rha2luZ1RyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi93YWxydXNTdGFraW5nVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBUThCO0FBRzlCLGlEQUFpRDtBQUNqRCxtQ0FBZ0M7QUFDaEMsK0NBQTRDO0FBQzVDLGlEQVE2QjtBQUM3Qiw2Q0FBK0U7QUFDL0UscUNBQWtDO0FBQ2xDLDJDQUFpRDtBQUVqRCxNQUFhLHdCQUF5QixTQUFRLHlCQUFpRDtJQUM3RixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBd0Q7UUFDeEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIs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QUM7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFyUkQsNERBcVJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFzZUtleSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgUHVibGljS2V5IGFzIEJhc2VQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgV2FscnVzU3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uLCBTdWlUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgdXRpbHMsIHsgaXNJbW1Pck93bmVkT2JqIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7XG4gIGJ1aWxkZXIsXG4gIElucHV0cyxcbiAgTW92ZUNhbGxUcmFuc2FjdGlvbixcbiAgU3BsaXRDb2luc1RyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkFyZ3VtZW50LFxuICBUcmFuc2FjdGlvbkJsb2NrSW5wdXQsXG4gIFRyYW5zYWN0aW9uVHlwZSBhcyBTdWlUcmFuc2FjdGlvbkJsb2NrVHlwZSxcbn0gZnJvbSAnLi9teXN0ZW5sYWIvYnVpbGRlcic7XG5pbXBvcnQgeyBDYWxsQXJnLCBub3JtYWxpemVTdWlBZGRyZXNzLCBTdWlPYmplY3RSZWYgfSBmcm9tICcuL215c3RlbmxhYi90eXBlcyc7XG5pbXBvcnQgeyBCQ1MgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgeyBTVUlfQUREUkVTU19MRU5HVEggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBXYWxydXNTdGFraW5nVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbjxXYWxydXNTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPFdhbHJ1c1N0YWtpbmdQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHNldFN1aVRyYW5zYWN0aW9uKHR4OiBTdWlUcmFuc2FjdGlvbjxXYWxydXNTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+KTogdm9pZCB7XG4gICAgdGhpcy5fc3VpVHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIGFkZFNpZ25hdHVyZShwdWJsaWNLZXk6IEJhc2VQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZS50b1N0cmluZygnaGV4JykpO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHsgcHVibGljS2V5LCBzaWduYXR1cmUgfTtcbiAgICB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IHN1aVNpZ25hdHVyZSgpOiBTaWduYXR1cmUge1xuICAgIHJldHVybiB0aGlzLl9zaWduYXR1cmU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGlucHV0T2JqZWN0cyA9IHRoaXMuZ2V0SW5wdXRPYmplY3RzRnJvbVR4KHR4LnR4KTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuX2lkLFxuICAgICAgc2VuZGVyOiB0eC5zZW5kZXIsXG4gICAgICBraW5kOiB7IFByb2dyYW1tYWJsZVRyYW5zYWN0aW9uOiB0eC50eCB9LFxuICAgICAgZ2FzRGF0YTogdHguZ2FzRGF0YSxcbiAgICAgIGV4cGlyYXRpb246IHR4LmV4cGlyYXRpb24gPz8geyBOb25lOiBudWxsIH0sXG4gICAgICAuLi4oaW5wdXRPYmplY3RzLmxlbmd0aCA+IDAgJiYgeyBpbnB1dE9iamVjdHMgfSksXG4gICAgICBmdW5kc0luQWRkcmVzc0JhbGFuY2U6IHR4LmZ1bmRzSW5BZGRyZXNzQmFsYW5jZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFtcbiAgICAgICdpZCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgJ2ZlZScsXG4gICAgICAndHlwZScsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICdmdW5jdGlvbicsXG4gICAgICAndmFsaWRhdG9yQWRkcmVzcycsXG4gICAgXTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG5cbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogJzAnLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuc3VpVHJhbnNhY3Rpb24uZ2FzRGF0YS5idWRnZXQudG9TdHJpbmcoKSB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwbGFpbkFkZERlbGVnYXRpb25UcmFuc2FjdGlvbihyZXN1bHQsIGV4cGxhbmF0aW9uUmVzdWx0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICB0cmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSBvbiB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgbG9hZElucHV0c0FuZE91dHB1dHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN1aVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RzID0gdXRpbHMuZ2V0V2FscnVzU3Rha2VXaXRoUG9vbFJlcXVlc3RzKHRoaXMuc3VpVHJhbnNhY3Rpb24udHgpO1xuICAgIHRoaXMuX291dHB1dHMgPSByZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3M6IHJlcXVlc3QudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHJlcXVlc3QuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgICB2YWx1ZTogdGhpcy5fb3V0cHV0cy5yZWR1Y2UoKGFjYywgb3V0cHV0KSA9PiBhY2MgKyBOdW1iZXIob3V0cHV0LnZhbHVlKSwgMCkudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihcbiAgICAgICAgcmF3VHJhbnNhY3Rpb25cbiAgICAgICkgYXMgU3VpVHJhbnNhY3Rpb248V2FscnVzU3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uPjtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FkZDtcbiAgICAgIHRoaXMuX2lkID0gdGhpcy5fc3VpVHJhbnNhY3Rpb24uaWQ7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBzZXJpYWxpemUoKSB0byBnZXQgdGhlIGNvcnJlY3QgdHhEYXRhIHdpdGggdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcmV0dXJuIHtUeERhdGF9XG4gICAqL1xuICBnZXRUeERhdGEoKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0czogQ2FsbEFyZ1tdIHwgVHJhbnNhY3Rpb25CbG9ja0lucHV0W10gPSB0aGlzLl9zdWlUcmFuc2FjdGlvbi50eC5pbnB1dHMubWFwKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnT2JqZWN0JykpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgfVxuICAgICAgaWYgKGlucHV0Lmhhc093blByb3BlcnR5KCdQdXJlJykpIHtcbiAgICAgICAgaWYgKGlucHV0LlB1cmUubGVuZ3RoID09PSBTVUlfQUREUkVTU19MRU5HVEgpIHtcbiAgICAgICAgICBjb25zdCBhZGRyZXNzID0gbm9ybWFsaXplU3VpQWRkcmVzcyhcbiAgICAgICAgICAgIGJ1aWxkZXIuZGUoQkNTLkFERFJFU1MsIEJ1ZmZlci5mcm9tKGlucHV0LlB1cmUpLnRvU3RyaW5nKCdiYXNlNjQnKSwgJ2Jhc2U2NCcpXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gSW5wdXRzLlB1cmUoYWRkcmVzcywgQkNTLkFERFJFU1MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IGJ1aWxkZXIuZGUoQkNTLlU2NCwgQnVmZmVyLmZyb20oaW5wdXQuUHVyZSkudG9TdHJpbmcoJ2Jhc2U2NCcpLCAnYmFzZTY0Jyk7XG4gICAgICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGFtb3VudCwgQkNTLlU2NCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnQmFsYW5jZVdpdGhkcmF3YWwnKSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGlucHV0LmtpbmQgPT09ICdJbnB1dCcgJiZcbiAgICAgICAgKGlucHV0LnZhbHVlLmhhc093blByb3BlcnR5KCdPYmplY3QnKSB8fFxuICAgICAgICAgIGlucHV0LnZhbHVlLmhhc093blByb3BlcnR5KCdQdXJlJykgfHxcbiAgICAgICAgICBpbnB1dC52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnQmFsYW5jZVdpdGhkcmF3YWwnKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gaW5wdXQudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHdoYXQncyBsZWZ0IGlzIHRoZSBwdXJlIG51bWJlciBvciBhZGRyZXNzIHN0cmluZ1xuICAgICAgcmV0dXJuIElucHV0cy5QdXJlKGlucHV0LnZhbHVlLCBpbnB1dC50eXBlID09PSAncHVyZScgPyBCQ1MuVTY0IDogQkNTLkFERFJFU1MpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJvZ3JhbW1hYmxlVHggPSB7XG4gICAgICBpbnB1dHM6IGlucHV0cyxcbiAgICAgIHRyYW5zYWN0aW9uczogdGhpcy5fc3VpVHJhbnNhY3Rpb24udHgudHJhbnNhY3Rpb25zLFxuICAgIH0gYXMgV2FscnVzU3Rha2luZ1Byb2dyYW1tYWJsZVRyYW5zYWN0aW9uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcjogdGhpcy5fc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5fc3VpVHJhbnNhY3Rpb24uZXhwaXJhdGlvbiA/PyB7IE5vbmU6IG51bGwgfSxcbiAgICAgIGdhc0RhdGE6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmdhc0RhdGEsXG4gICAgICBraW5kOiB7XG4gICAgICAgIFByb2dyYW1tYWJsZVRyYW5zYWN0aW9uOiBwcm9ncmFtbWFibGVUeCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgZXhwbGFuYXRpb24gZm9yIGEgc3Rha2luZyB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluQWRkRGVsZWdhdGlvblRyYW5zYWN0aW9uKGpzb246IFR4RGF0YSwgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG4gICAgdGhpcy5zdWlUcmFuc2FjdGlvbi50eC50cmFuc2FjdGlvbnMuZm9yRWFjaCgodHJhbnNhY3Rpb24sIHR4SW5kZXgpID0+IHtcbiAgICAgIGlmIChTcGxpdENvaW5zVHJhbnNhY3Rpb24uaXModHJhbnNhY3Rpb24pKSB7XG4gICAgICAgIGNvbnN0IGFtb3VudElucHV0SWR4ID0gKHRyYW5zYWN0aW9uLmFtb3VudHNbMF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KS5pbmRleDtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gQmlnSW50KCh0aGlzLnN1aVRyYW5zYWN0aW9uLnR4LmlucHV0c1thbW91bnRJbnB1dElkeF0gYXMgVHJhbnNhY3Rpb25CbG9ja0lucHV0KS52YWx1ZSk7XG5cbiAgICAgICAgLy8gRm9yIFdhbHJ1c1N0YWtlLCBldmVyeSBzcGxpdCBpcyBmb2xsb3dlZCBieSBhIG1vdmUgY2FsbFxuICAgICAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzSW5wdXRJZHggPSAoXG4gICAgICAgICAgKHRoaXMuc3VpVHJhbnNhY3Rpb24udHgudHJhbnNhY3Rpb25zW3R4SW5kZXggKyAxXSBhcyBNb3ZlQ2FsbFRyYW5zYWN0aW9uKVxuICAgICAgICAgICAgLmFyZ3VtZW50c1syXSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICAgICAgKS5pbmRleDtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yQWRkcmVzcyA9IHV0aWxzLmdldEFkZHJlc3MoXG4gICAgICAgICAgdGhpcy5zdWlUcmFuc2FjdGlvbi50eC5pbnB1dHNbdmFsaWRhdG9yQWRkcmVzc0lucHV0SWR4XSBhcyBUcmFuc2FjdGlvbkJsb2NrSW5wdXRcbiAgICAgICAgKTtcblxuICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgIGFkZHJlc3M6IHZhbGlkYXRvckFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBhbW91bnQudG9TdHJpbmcoMTApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgQmlnSW50KG91dHB1dC5hbW91bnQpLCBCaWdJbnQoMCkpLnRvU3RyaW5nKDEwKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5leHBsYW5hdGlvblJlc3VsdCxcbiAgICAgIG91dHB1dEFtb3VudCxcbiAgICAgIG91dHB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5wdXRPYmplY3RzRnJvbVR4KHR4OiBXYWxydXNTdGFraW5nUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24pOiBTdWlPYmplY3RSZWZbXSB7XG4gICAgY29uc3QgaW5wdXRzID0gdHguaW5wdXRzO1xuXG4gICAgLy8gU2NhbiBhbGwgdHJhbnNhY3Rpb25zIGZvciBNZXJnZUNvaW5zL1NwbGl0Q29pbnMgdGhhdCByZWZlcmVuY2UgSW1tT3JPd25lZFxuICAgIC8vIGNvaW4gb2JqZWN0IGlucHV0cy4gV2hlbiBmdW5kc0luQWRkcmVzc0JhbGFuY2UgaXMgdXNlZCwgYSBNb3ZlQ2FsbFxuICAgIC8vIChyZWRlZW1fZnVuZHMpIG1heSBhcHBlYXIgYmVmb3JlIHRoZSBmaXJzdCBtZXJnZS9zcGxpdCwgc28gd2UgY2Fubm90XG4gICAgLy8gYXNzdW1lIHRyYW5zYWN0aW9uc1swXSBpcyB0aGUgcmVsZXZhbnQgb25lLlxuICAgIGNvbnN0IGlucHV0T2JqZWN0czogU3VpT2JqZWN0UmVmW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHR4biBvZiB0eC50cmFuc2FjdGlvbnMgYXMgU3VpVHJhbnNhY3Rpb25CbG9ja1R5cGVbXSkge1xuICAgICAgbGV0IGFyZ3M6IFRyYW5zYWN0aW9uQXJndW1lbnRbXSA9IFtdO1xuICAgICAgaWYgKHR4bi5raW5kID09PSAnTWVyZ2VDb2lucycpIHtcbiAgICAgICAgY29uc3QgeyBkZXN0aW5hdGlvbiwgc291cmNlcyB9ID0gdHhuO1xuICAgICAgICBhcmdzID0gW2Rlc3RpbmF0aW9uLCAuLi5zb3VyY2VzXTtcbiAgICAgIH0gZWxzZSBpZiAodHhuLmtpbmQgPT09ICdTcGxpdENvaW5zJykge1xuICAgICAgICBhcmdzID0gW3R4bi5jb2luXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBhcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICBpZiAoYXJnLmtpbmQgPT09ICdJbnB1dCcpIHtcbiAgICAgICAgICBsZXQgaW5wdXQgPSBpbnB1dHNbYXJnLmluZGV4XTtcbiAgICAgICAgICBpZiAoJ3ZhbHVlJyBpbiBpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCdPYmplY3QnIGluIGlucHV0ICYmIGlzSW1tT3JPd25lZE9iaihpbnB1dC5PYmplY3QpKSB7XG4gICAgICAgICAgICBpbnB1dE9iamVjdHMucHVzaChpbnB1dC5PYmplY3QuSW1tT3JPd25lZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU3RvcCBhZnRlciB0aGUgZmlyc3QgbWVyZ2Uvc3BsaXQgdGhhdCB5aWVsZHMgY29pbiBvYmplY3QgcmVmcy5cbiAgICAgIGlmIChpbnB1dE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRPYmplY3RzO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { SuiTransaction, RequestWalrusWithdrawStake, WalrusWithdrawStakeProgrammableTransaction } from './iface';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { TransactionBuilder } from './transactionBuilder';
4
+ import { BaseKey, TransactionType } from '@bitgo-beta/sdk-core';
5
+ import { TransferTransaction } from './transferTransaction';
6
+ import { Transaction } from './transaction';
7
+ export declare class WalrusWithdrawStakeBuilder extends TransactionBuilder<WalrusWithdrawStakeProgrammableTransaction> {
8
+ protected _withdrawStake: RequestWalrusWithdrawStake;
9
+ private walrusConfig;
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ /**
12
+ * Get staking transaction type
13
+ *
14
+ * @return {TransactionType}
15
+ * @protected
16
+ */
17
+ protected get transactionType(): TransactionType;
18
+ /** @inheritDoc */
19
+ validateTransaction(transaction: TransferTransaction): void;
20
+ /** @inheritDoc */
21
+ sign(key: BaseKey): void;
22
+ /**
23
+ * Create a new transaction for requesting coin withdrawal, ready to be signed and executed.
24
+ *
25
+ * @param request - the request object
26
+ */
27
+ requestWithdrawStake(request: RequestWalrusWithdrawStake): this;
28
+ /** @inheritDoc */
29
+ protected fromImplementation(rawTransaction: string): Transaction<WalrusWithdrawStakeProgrammableTransaction>;
30
+ /** @inheritDoc */
31
+ protected buildImplementation(): Promise<Transaction<WalrusWithdrawStakeProgrammableTransaction>>;
32
+ initBuilder(tx: Transaction<WalrusWithdrawStakeProgrammableTransaction>): void;
33
+ private validateTransactionFields;
34
+ protected buildSuiTransaction(): SuiTransaction<WalrusWithdrawStakeProgrammableTransaction>;
35
+ }
36
+ //# sourceMappingURL=walrusWithdrawStakeBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walrusWithdrawStakeBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/walrusWithdrawStakeBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,0CAA0C,EAE3C,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAE,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAU5C,qBAAa,0BAA2B,SAAQ,kBAAkB,CAAC,0CAA0C,CAAC;IAC5G,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC;IAErD,OAAO,CAAC,YAAY,CAAM;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C;;;;;OAKG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,GAAG,IAAI;IAO3D,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,OAAO;IAKjB;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI;IAW/D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,0CAA0C,CAAC;IAQ7G,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC;IAgBvG,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,0CAA0C,CAAC,GAAG,IAAI;IA2B9E,OAAO,CAAC,yBAAyB;IAQjC,SAAS,CAAC,mBAAmB,IAAI,cAAc,CAAC,0CAA0C,CAAC;CAkE5F"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WalrusWithdrawStakeBuilder = void 0;
7
+ const iface_1 = require("./iface");
8
+ const statics_1 = require("@bitgo-beta/statics");
9
+ const transactionBuilder_1 = require("./transactionBuilder");
10
+ const walrusWithdrawStakeTransaction_1 = require("./walrusWithdrawStakeTransaction");
11
+ const utils_1 = __importDefault(require("./utils"));
12
+ const walrusConfig_1 = require("./resources/walrusConfig");
13
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
14
+ const types_1 = require("./mystenlab/types");
15
+ const builder_1 = require("./mystenlab/builder");
16
+ const assert_1 = __importDefault(require("assert"));
17
+ const constants_1 = require("./constants");
18
+ class WalrusWithdrawStakeBuilder extends transactionBuilder_1.TransactionBuilder {
19
+ constructor(_coinConfig) {
20
+ super(_coinConfig);
21
+ this._transaction = new walrusWithdrawStakeTransaction_1.WalrusWithdrawStakeTransaction(_coinConfig);
22
+ // TODO improve mainnet vs. testnet configuration
23
+ this.walrusConfig = _coinConfig.network.type === statics_1.NetworkType.MAINNET ? walrusConfig_1.WALRUS_PROD_CONFIG : walrusConfig_1.WALRUS_TESTNET_CONFIG;
24
+ }
25
+ /**
26
+ * Get staking transaction type
27
+ *
28
+ * @return {TransactionType}
29
+ * @protected
30
+ */
31
+ get transactionType() {
32
+ return utils_1.default.getTransactionType(this.transaction.suiTransaction.type);
33
+ }
34
+ /** @inheritDoc */
35
+ validateTransaction(transaction) {
36
+ if (!transaction.suiTransaction) {
37
+ return;
38
+ }
39
+ this.validateTransactionFields();
40
+ }
41
+ /** @inheritDoc */
42
+ sign(key) {
43
+ this.transaction.setSuiTransaction(this.buildSuiTransaction());
44
+ super.sign(key);
45
+ }
46
+ /**
47
+ * Create a new transaction for requesting coin withdrawal, ready to be signed and executed.
48
+ *
49
+ * @param request - the request object
50
+ */
51
+ requestWithdrawStake(request) {
52
+ this.validateSuiObjectRef(request.stakedWal, 'stakedWal');
53
+ if (request.amount !== undefined) {
54
+ if (!utils_1.default.isValidAmount(request.amount)) {
55
+ throw new Error(`invalid amount: ${request.amount}`);
56
+ }
57
+ }
58
+ this._withdrawStake = request;
59
+ return this;
60
+ }
61
+ /** @inheritDoc */
62
+ fromImplementation(rawTransaction) {
63
+ const tx = new walrusWithdrawStakeTransaction_1.WalrusWithdrawStakeTransaction(this._coinConfig);
64
+ this.validateRawTransaction(rawTransaction);
65
+ tx.fromRawTransaction(rawTransaction);
66
+ this.initBuilder(tx);
67
+ return this.transaction;
68
+ }
69
+ /** @inheritDoc */
70
+ async buildImplementation() {
71
+ this.transaction.setSuiTransaction(this.buildSuiTransaction());
72
+ this.transaction.transactionType(this.transactionType);
73
+ if (this._signer) {
74
+ this.transaction.sign(this._signer);
75
+ }
76
+ this._signatures.forEach((signature) => {
77
+ this.transaction.addSignature(signature.publicKey, signature.signature);
78
+ });
79
+ this.transaction.loadInputsAndOutputs();
80
+ return this.transaction;
81
+ }
82
+ initBuilder(tx) {
83
+ this._transaction = tx;
84
+ if (tx.signature && tx.signature.length > 0) {
85
+ this._signatures = [tx.suiSignature];
86
+ }
87
+ const txData = tx.toJson();
88
+ this.type(tx.suiTransaction.type);
89
+ this.sender(txData.sender);
90
+ this.gasData(txData.gasData);
91
+ if (txData.expiration && !('None' in txData.expiration)) {
92
+ this._expiration = txData.expiration;
93
+ }
94
+ const parsed = utils_1.default.getWalrusWithdrawStakeRequests(tx.suiTransaction.tx);
95
+ this.requestWithdrawStake({
96
+ stakedWal: {
97
+ ...parsed.stakedWal,
98
+ objectId: (0, types_1.normalizeSuiObjectId)(parsed.stakedWal.objectId),
99
+ version: Number(parsed.stakedWal.version),
100
+ },
101
+ amount: parsed.amount === undefined ? undefined : Number(parsed.amount),
102
+ });
103
+ }
104
+ validateTransactionFields() {
105
+ (0, assert_1.default)(this._type, new sdk_core_1.BuildTransactionError('type is required before building'));
106
+ (0, assert_1.default)(this._sender, new sdk_core_1.BuildTransactionError('sender is required before building'));
107
+ (0, assert_1.default)(this._withdrawStake.stakedWal, new sdk_core_1.BuildTransactionError('stakedWal object is required before building'));
108
+ (0, assert_1.default)(this._gasData, new sdk_core_1.BuildTransactionError('gasData is required before building'));
109
+ this.validateGasData(this._gasData);
110
+ }
111
+ buildSuiTransaction() {
112
+ this.validateTransactionFields();
113
+ const ptb = new builder_1.TransactionBlock();
114
+ switch (this._type) {
115
+ case iface_1.SuiTransactionType.WalrusRequestWithdrawStake:
116
+ // For request_withdraw, we may need to split the staked WAL into two objects
117
+ if (this._withdrawStake.amount !== undefined) {
118
+ // This is a partial unstake. Split the StakedWAL
119
+ const splitStakedWal = ptb.moveCall({
120
+ target: `${this.walrusConfig.WALRUS_PKG_ID}::staked_wal::split`,
121
+ arguments: [
122
+ ptb.object(builder_1.Inputs.ObjectRef(this._withdrawStake.stakedWal)),
123
+ ptb.pure(Number(this._withdrawStake.amount)),
124
+ ],
125
+ });
126
+ // Request to withdraw the split StakedWAL
127
+ ptb.moveCall({
128
+ target: `${this.walrusConfig.WALRUS_PKG_ID}::${this.walrusConfig.WALRUS_STAKING_MODULE_NAME}::request_withdraw_stake`,
129
+ arguments: [ptb.object(builder_1.Inputs.SharedObjectRef(this.walrusConfig.WALRUS_STAKING_OBJECT)), splitStakedWal],
130
+ });
131
+ ptb.transferObjects([splitStakedWal], ptb.object(this._sender));
132
+ }
133
+ else {
134
+ // This is a full unstake. No need to split, just withdraw the provided StakedWAL.
135
+ // Also, since there is no newly-created StakedWAL, no need to transferObjects.
136
+ ptb.moveCall({
137
+ target: `${this.walrusConfig.WALRUS_PKG_ID}::${this.walrusConfig.WALRUS_STAKING_MODULE_NAME}::request_withdraw_stake`,
138
+ arguments: [
139
+ ptb.object(builder_1.Inputs.SharedObjectRef(this.walrusConfig.WALRUS_STAKING_OBJECT)),
140
+ ptb.object(builder_1.Inputs.ObjectRef(this._withdrawStake.stakedWal)),
141
+ ],
142
+ });
143
+ }
144
+ break;
145
+ case iface_1.SuiTransactionType.WalrusWithdrawStake:
146
+ // For the actual withdraw, we are using the already split StakedWAL from above
147
+ // No need to split, just do the withdraw_stake move call
148
+ const unstakedWal = ptb.moveCall({
149
+ target: `${this.walrusConfig.WALRUS_PKG_ID}::${this.walrusConfig.WALRUS_STAKING_MODULE_NAME}::withdraw_stake`,
150
+ arguments: [
151
+ ptb.object(builder_1.Inputs.SharedObjectRef(this.walrusConfig.WALRUS_STAKING_OBJECT)),
152
+ ptb.object(builder_1.Inputs.ObjectRef(this._withdrawStake.stakedWal)),
153
+ ],
154
+ });
155
+ ptb.transferObjects([unstakedWal], ptb.object(this._sender));
156
+ break;
157
+ default:
158
+ throw new sdk_core_1.BuildTransactionError(`Invalid transaction type: ${this._type}`);
159
+ }
160
+ const txData = ptb.blockData;
161
+ return {
162
+ type: this._type,
163
+ sender: this._sender,
164
+ tx: {
165
+ inputs: [...txData.inputs],
166
+ transactions: [...txData.transactions],
167
+ },
168
+ gasData: {
169
+ ...this._gasData,
170
+ payment: this._gasData.payment.slice(0, constants_1.MAX_GAS_OBJECTS - 1),
171
+ },
172
+ expiration: this._expiration,
173
+ };
174
+ }
175
+ }
176
+ exports.WalrusWithdrawStakeBuilder = WalrusWithdrawStakeBuilder;
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FscnVzV2l0aGRyYXdTdGFrZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3dhbHJ1c1dpdGhkcmF3U3Rha2VCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUtpQjtBQUNqQixpREFBMEU7QUFDMUUsNkRBQTBEO0FBQzFELHFGQUFrRjtBQUNsRixvREFBNEI7QUFFNUIsMkRBQXFGO0FBQ3JGLG1EQUF1RjtBQUd2Riw2Q0FBeUQ7QUFDekQsaURBSTZCO0FBQzdCLG9EQUE0QjtBQUM1QiwyQ0FBOEM7QUFFOUMsTUFBYSwwQkFBMkIsU0FBUSx1Q0FBOEQ7SUFLNUcsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLCtEQUE4QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBFLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQ0FBa0IsQ0FBQyxDQUFDLENBQUMsb0NBQXFCLENBQUM7SUFDcEgsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBYyxlQUFlO1FBQzNCLE9BQU8sZUFBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsV0FBZ0M7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLEdBQVk7UUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLGlC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QU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLEVBQUUsRUFBRTtnQkFDRixNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQzFCLFlBQVksRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQzthQUN2QztZQUNELE9BQU8sRUFBRTtnQkFDUCxHQUFHLElBQUksQ0FBQyxRQUFRO2dCQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSwyQkFBZSxHQUFHLENBQUMsQ0FBQzthQUM3RDtZQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM3QixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcExELGdFQW9MQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN1aVRyYW5zYWN0aW9uLFxuICBSZXF1ZXN0V2FscnVzV2l0aGRyYXdTdGFrZSxcbiAgV2FscnVzV2l0aGRyYXdTdGFrZVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uLFxuICBTdWlUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgTmV0d29ya1R5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFdhbHJ1c1dpdGhkcmF3U3Rha2VUcmFuc2FjdGlvbiB9IGZyb20gJy4vd2FscnVzV2l0aGRyYXdTdGFrZVRyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IHsgV0FMUlVTX1RFU1RORVRfQ09ORklHLCBXQUxSVVNfUFJPRF9DT05GSUcgfSBmcm9tICcuL3Jlc291cmNlcy93YWxydXNDb25maWcnO1xuaW1wb3J0IHsgQmFzZUtleSwgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2ZlclRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2ZlclRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBub3JtYWxpemVTdWlPYmplY3RJZCB9IGZyb20gJy4vbXlzdGVubGFiL3R5cGVzJztcbmltcG9ydCB7XG4gIElucHV0cyxcbiAgTW92ZUNhbGxUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25CbG9jayBhcyBQcm9ncmFtbWluZ1RyYW5zYWN0aW9uQmxvY2tCdWlsZGVyLFxufSBmcm9tICcuL215c3RlbmxhYi9idWlsZGVyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE1BWF9HQVNfT0JKRUNUUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNsYXNzIFdhbHJ1c1dpdGhkcmF3U3Rha2VCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPFdhbHJ1c1dpdGhkcmF3U3Rha2VQcm9ncmFtbWFibGVUcmFuc2FjdGlvbj4ge1xuICBwcm90ZWN0ZWQgX3dpdGhkcmF3U3Rha2U6IFJlcXVlc3RXYWxydXNXaXRoZHJhd1N0YWtlO1xuXG4gIHByaXZhdGUgd2FscnVzQ29uZmlnOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFdhbHJ1c1dpdGhkcmF3U3Rha2VUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG5cbiAgICAvLyBUT0RPIGltcHJvdmUgbWFpbm5ldCB2cy4gdGVzdG5ldCBjb25maWd1cmF0aW9uXG4gICAgdGhpcy53YWxydXNDb25maWcgPSBfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyBXQUxSVVNfUFJPRF9DT05GSUcgOiBXQUxSVVNfVEVTVE5FVF9DT05GSUc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YWtpbmcgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcmV0dXJuIHtUcmFuc2FjdGlvblR5cGV9XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHV0aWxzLmdldFRyYW5zYWN0aW9uVHlwZSh0aGlzLnRyYW5zYWN0aW9uLnN1aVRyYW5zYWN0aW9uLnR5cGUpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zZmVyVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uLnN1aVRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHNpZ24oa2V5OiBCYXNlS2V5KSB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRTdWlUcmFuc2FjdGlvbih0aGlzLmJ1aWxkU3VpVHJhbnNhY3Rpb24oKSk7XG4gICAgc3VwZXIuc2lnbihrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyB0cmFuc2FjdGlvbiBmb3IgcmVxdWVzdGluZyBjb2luIHdpdGhkcmF3YWwsIHJlYWR5IHRvIGJlIHNpZ25lZCBhbmQgZXhlY3V0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gdGhlIHJlcXVlc3Qgb2JqZWN0XG4gICAqL1xuICByZXF1ZXN0V2l0aGRyYXdTdGFrZShyZXF1ZXN0OiBSZXF1ZXN0V2FscnVzV2l0aGRyYXdTdGFrZSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVTdWlPYmplY3RSZWYocmVxdWVzdC5zdGFrZWRXYWwsICdzdGFrZWRXYWwnKTtcbiAgICBpZiAocmVxdWVzdC5hbW91bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCF1dGlscy5pc1ZhbGlkQW1vdW50KHJlcXVlc3QuYW1vdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYW1vdW50OiAke3JlcXVlc3QuYW1vdW50fWApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl93aXRoZHJhd1N0YWtlID0gcmVxdWVzdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbjxXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eCA9IG5ldyBXYWxydXNXaXRoZHJhd1N0YWtlVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZyk7XG4gICAgdGhpcy52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0eC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb248V2FscnVzV2l0aGRyYXdTdGFrZVByb2dyYW1tYWJsZVRyYW5zYWN0aW9uPj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0U3VpVHJhbnNhY3Rpb24odGhpcy5idWlsZFN1aVRyYW5zYWN0aW9uKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24udHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcblxuICAgIGlmICh0aGlzLl9zaWduZXIpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbih0aGlzLl9zaWduZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMuZm9yRWFjaCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUucHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbjxXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+KTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcblxuICAgIGlmICh0eC5zaWduYXR1cmUgJiYgdHguc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbdHguc3VpU2lnbmF0dXJlXTtcbiAgICB9XG5cbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLnR5cGUodHguc3VpVHJhbnNhY3Rpb24udHlwZSk7XG4gICAgdGhpcy5zZW5kZXIodHhEYXRhLnNlbmRlcik7XG4gICAgdGhpcy5nYXNEYXRhKHR4RGF0YS5nYXNEYXRhKTtcblxuICAgIGlmICh0eERhdGEuZXhwaXJhdGlvbiAmJiAhKCdOb25lJyBpbiB0eERhdGEuZXhwaXJhdGlvbikpIHtcbiAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSB0eERhdGEuZXhwaXJhdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSB1dGlscy5nZXRXYWxydXNXaXRoZHJhd1N0YWtlUmVxdWVzdHModHguc3VpVHJhbnNhY3Rpb24udHgpO1xuICAgIHRoaXMucmVxdWVzdFdpdGhkcmF3U3Rha2Uoe1xuICAgICAgc3Rha2VkV2FsOiB7XG4gICAgICAgIC4uLnBhcnNlZC5zdGFrZWRXYWwsXG4gICAgICAgIG9iamVjdElkOiBub3JtYWxpemVTdWlPYmplY3RJZChwYXJzZWQuc3Rha2VkV2FsLm9iamVjdElkKSxcbiAgICAgICAgdmVyc2lvbjogTnVtYmVyKHBhcnNlZC5zdGFrZWRXYWwudmVyc2lvbiksXG4gICAgICB9LFxuICAgICAgYW1vdW50OiBwYXJzZWQuYW1vdW50ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBOdW1iZXIocGFyc2VkLmFtb3VudCksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTogdm9pZCB7XG4gICAgYXNzZXJ0KHRoaXMuX3R5cGUsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3R5cGUgaXMgcmVxdWlyZWQgYmVmb3JlIGJ1aWxkaW5nJykpO1xuICAgIGFzc2VydCh0aGlzLl9zZW5kZXIsIG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3NlbmRlciBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgYXNzZXJ0KHRoaXMuX3dpdGhkcmF3U3Rha2Uuc3Rha2VkV2FsLCBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdzdGFrZWRXYWwgb2JqZWN0IGlzIHJlcXVpcmVkIGJlZm9yZSBidWlsZGluZycpKTtcbiAgICBhc3NlcnQodGhpcy5fZ2FzRGF0YSwgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZ2FzRGF0YSBpcyByZXF1aXJlZCBiZWZvcmUgYnVpbGRpbmcnKSk7XG4gICAgdGhpcy52YWxpZGF0ZUdhc0RhdGEodGhpcy5fZ2FzRGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRTdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbjxXYWxydXNXaXRoZHJhd1N0YWtlUHJvZ3JhbW1hYmxlVHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnZhbGlkYXRlVHJhbnNhY3Rpb25GaWVsZHMoKTtcbiAgICBjb25zdCBwdGIgPSBuZXcgUHJvZ3JhbW1pbmdUcmFuc2FjdGlvbkJsb2NrQnVpbGRlcigpO1xuICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuV2FscnVzUmVxdWVzdFdpdGhkcmF3U3Rha2U6XG4gICAgICAgIC8vIEZvciByZXF1ZXN0X3dpdGhkcmF3LCB3ZSBtYXkgbmVlZCB0byBzcGxpdCB0aGUgc3Rha2VkIFdBTCBpbnRvIHR3byBvYmplY3RzXG4gICAgICAgIGlmICh0aGlzLl93aXRoZHJhd1N0YWtlLmFtb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHBhcnRpYWwgdW5zdGFrZS4gU3BsaXQgdGhlIFN0YWtlZFdBTFxuICAgICAgICAgIGNvbnN0IHNwbGl0U3Rha2VkV2FsID0gcHRiLm1vdmVDYWxsKHtcbiAgICAgICAgICAgIHRhcmdldDogYCR7dGhpcy53YWxydXNDb25maWcuV0FMUlVTX1BLR19JRH06OnN0YWtlZF93YWw6OnNwbGl0YCxcbiAgICAgICAgICAgIGFyZ3VtZW50czogW1xuICAgICAgICAgICAgICBwdGIub2JqZWN0KElucHV0cy5PYmplY3RSZWYodGhpcy5fd2l0aGRyYXdTdGFrZS5zdGFrZWRXYWwpKSxcbiAgICAgICAgICAgICAgcHRiLnB1cmUoTnVtYmVyKHRoaXMuX3dpdGhkcmF3U3Rha2UuYW1vdW50KSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBNb3ZlQ2FsbFRyYW5zYWN0aW9uKTtcblxuICAgICAgICAgIC8vIFJlcXVlc3QgdG8gd2l0aGRyYXcgdGhlIHNwbGl0IFN0YWtlZFdBTFxuICAgICAgICAgIHB0Yi5tb3ZlQ2FsbCh7XG4gICAgICAgICAgICB0YXJnZXQ6IGAke3RoaXMud2FscnVzQ29uZmlnLldBTFJVU19QS0dfSUR9Ojoke3RoaXMud2FscnVzQ29uZmlnLldBTFJVU19TVEFLSU5HX01PRFVMRV9OQU1FfTo6cmVxdWVzdF93aXRoZHJhd19zdGFrZWAsXG4gICAgICAgICAgICBhcmd1bWVudHM6IFtwdGIub2JqZWN0KElucHV0cy5TaGFyZWRPYmplY3RSZWYodGhpcy53YWxydXNDb25maWcuV0FMUlVTX1NUQUtJTkdfT0JKRUNUKSksIHNwbGl0U3Rha2VkV2FsXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHB0Yi50cmFuc2Zlck9iamVjdHMoW3NwbGl0U3Rha2VkV2FsXSwgcHRiLm9iamVjdCh0aGlzLl9zZW5kZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgZnVsbCB1bnN0YWtlLiBObyBuZWVkIHRvIHNwbGl0LCBqdXN0IHdpdGhkcmF3IHRoZSBwcm92aWRlZCBTdGFrZWRXQUwuXG4gICAgICAgICAgLy8gQWxzbywgc2luY2UgdGhlcmUgaXMgbm8gbmV3bHktY3JlYXRlZCBTdGFrZWRXQUwsIG5vIG5lZWQgdG8gdHJhbnNmZXJPYmplY3RzLlxuICAgICAgICAgIHB0Yi5tb3ZlQ2FsbCh7XG4gICAgICAgICAgICB0YXJnZXQ6IGAke3RoaXMud2FscnVzQ29uZmlnLldBTFJVU19QS0dfSUR9Ojoke3RoaXMud2FscnVzQ29uZmlnLldBTFJVU19TVEFLSU5HX01PRFVMRV9OQU1FfTo6cmVxdWVzdF93aXRoZHJhd19zdGFrZWAsXG4gICAgICAgICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAgICAgICAgcHRiLm9iamVjdChJbnB1dHMuU2hhcmVkT2JqZWN0UmVmKHRoaXMud2FscnVzQ29uZmlnLldBTFJVU19TVEFLSU5HX09CSkVDVCkpLFxuICAgICAgICAgICAgICBwdGIub2JqZWN0KElucHV0cy5PYmplY3RSZWYodGhpcy5fd2l0aGRyYXdTdGFrZS5zdGFrZWRXYWwpKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5XYWxydXNXaXRoZHJhd1N0YWtlOlxuICAgICAgICAvLyBGb3IgdGhlIGFjdHVhbCB3aXRoZHJhdywgd2UgYXJlIHVzaW5nIHRoZSBhbHJlYWR5IHNwbGl0IFN0YWtlZFdBTCBmcm9tIGFib3ZlXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc3BsaXQsIGp1c3QgZG8gdGhlIHdpdGhkcmF3X3N0YWtlIG1vdmUgY2FsbFxuICAgICAgICBjb25zdCB1bnN0YWtlZFdhbCA9IHB0Yi5tb3ZlQ2FsbCh7XG4gICAgICAgICAgdGFyZ2V0OiBgJHt0aGlzLndhbHJ1c0NvbmZpZy5XQUxSVVNfUEtHX0lEfTo6JHt0aGlzLndhbHJ1c0NvbmZpZy5XQUxSVVNfU1RBS0lOR19NT0RVTEVfTkFNRX06OndpdGhkcmF3X3N0YWtlYCxcbiAgICAgICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAgICAgIHB0Yi5vYmplY3QoSW5wdXRzLlNoYXJlZE9iamVjdFJlZih0aGlzLndhbHJ1c0NvbmZpZy5XQUxSVVNfU1RBS0lOR19PQkpFQ1QpKSxcbiAgICAgICAgICAgIHB0Yi5vYmplY3QoSW5wdXRzLk9iamVjdFJlZih0aGlzLl93aXRoZHJhd1N0YWtlLnN0YWtlZFdhbCkpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgICBwdGIudHJhbnNmZXJPYmplY3RzKFt1bnN0YWtlZFdhbF0sIHB0Yi5vYmplY3QodGhpcy5fc2VuZGVyKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbiB0eXBlOiAke3RoaXMuX3R5cGV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHhEYXRhID0gcHRiLmJsb2NrRGF0YTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlbmRlcjogdGhpcy5fc2VuZGVyLFxuICAgICAgdHg6IHtcbiAgICAgICAgaW5wdXRzOiBbLi4udHhEYXRhLmlucHV0c10sXG4gICAgICAgIHRyYW5zYWN0aW9uczogWy4uLnR4RGF0YS50cmFuc2FjdGlvbnNdLFxuICAgICAgfSxcbiAgICAgIGdhc0RhdGE6IHtcbiAgICAgICAgLi4udGhpcy5fZ2FzRGF0YSxcbiAgICAgICAgcGF5bWVudDogdGhpcy5fZ2FzRGF0YS5wYXltZW50LnNsaWNlKDAsIE1BWF9HQVNfT0JKRUNUUyAtIDEpLFxuICAgICAgfSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,21 @@
1
+ import { SuiTransaction, TransactionExplanation, TxData, WalrusWithdrawStakeProgrammableTransaction } from './iface';
2
+ import { Transaction } from './transaction';
3
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
4
+ import { BaseKey, PublicKey as BasePublicKey, Signature } from '@bitgo-beta/sdk-core';
5
+ import { Buffer } from 'buffer';
6
+ export declare class WalrusWithdrawStakeTransaction extends Transaction<WalrusWithdrawStakeProgrammableTransaction> {
7
+ constructor(_coinConfig: Readonly<CoinConfig>);
8
+ get suiTransaction(): SuiTransaction<WalrusWithdrawStakeProgrammableTransaction>;
9
+ addSignature(publicKey: BasePublicKey, signature: Buffer): void;
10
+ get suiSignature(): Signature;
11
+ canSign(key: BaseKey): boolean;
12
+ toBroadcastFormat(): string;
13
+ toJson(): TxData;
14
+ explainTransaction(): TransactionExplanation;
15
+ explainRequestWithdrawStakedWalTransaction(result: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
16
+ explainWithdrawStakedWalTransaction(result: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
17
+ fromRawTransaction(rawTransaction: string): void;
18
+ getTxData(): TxData;
19
+ loadInputsAndOutputs(): void;
20
+ }
21
+ //# sourceMappingURL=walrusWithdrawStakeTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walrusWithdrawStakeTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/walrusWithdrawStakeTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,EAAE,0CAA0C,EAAE,MAAM,SAAS,CAAC;AACrH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EACL,OAAO,EAGP,SAAS,IAAI,aAAa,EAC1B,SAAS,EAGV,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,qBAAa,8BAA+B,SAAQ,WAAW,CAAC,0CAA0C,CAAC;gBAC7F,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAAC,0CAA0C,CAAC,CAE/E;IAED,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,iBAAiB,IAAI,MAAM;IAO3B,MAAM,IAAI,MAAM;IAgBhB,kBAAkB,IAAI,sBAAsB;IAsC5C,0CAA0C,CACxC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAezB,mCAAmC,CACjC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAezB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAchD,SAAS,IAAI,MAAM;IA0CnB,oBAAoB,IAAI,IAAI;CA2B7B"}