@bitgo/sdk-coin-sui 1.7.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/src/lib/bcs.js +25 -1
- package/dist/src/lib/constants.d.ts +13 -5
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +16 -8
- package/dist/src/lib/iface.d.ts +153 -4
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +53 -1
- package/dist/src/lib/index.d.ts +3 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +8 -2
- package/dist/src/lib/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBuilder.js +223 -0
- package/dist/src/lib/stakingTransaction.d.ts +67 -0
- package/dist/src/lib/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/stakingTransaction.js +353 -0
- package/dist/src/lib/transaction.d.ts +17 -30
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +75 -218
- package/dist/src/lib/transactionBuilder.d.ts +12 -27
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +1 -160
- package/dist/src/lib/transactionBuilderFactory.d.ts +6 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +22 -6
- package/dist/src/lib/transferBuilder.d.ts +25 -1
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +165 -1
- package/dist/src/lib/transferTransaction.d.ts +53 -0
- package/dist/src/lib/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transferTransaction.js +240 -0
- package/dist/src/lib/txnSchema.d.ts +7 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +81 -0
- package/dist/src/lib/utils.d.ts +111 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +201 -2
- package/dist/src/sui.d.ts.map +1 -1
- package/dist/src/sui.js +3 -2
- package/package.json +7 -6
|
@@ -0,0 +1,353 @@
|
|
|
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.StakingTransaction = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const iface_1 = require("./iface");
|
|
9
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const transaction_1 = require("./transaction");
|
|
12
|
+
class StakingTransaction extends transaction_1.Transaction {
|
|
13
|
+
constructor(_coinConfig) {
|
|
14
|
+
super(_coinConfig);
|
|
15
|
+
}
|
|
16
|
+
get suiTransaction() {
|
|
17
|
+
return this._suiTransaction;
|
|
18
|
+
}
|
|
19
|
+
setSuiTransaction(tx) {
|
|
20
|
+
this._suiTransaction = tx;
|
|
21
|
+
}
|
|
22
|
+
addSignature(publicKey, signature) {
|
|
23
|
+
this._signatures.push(signature.toString('hex'));
|
|
24
|
+
this._signature = { publicKey, signature };
|
|
25
|
+
this.serialize();
|
|
26
|
+
}
|
|
27
|
+
get suiSignature() {
|
|
28
|
+
return this._signature;
|
|
29
|
+
}
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
canSign(key) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
/** @inheritdoc */
|
|
35
|
+
toBroadcastFormat() {
|
|
36
|
+
if (!this._suiTransaction) {
|
|
37
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
38
|
+
}
|
|
39
|
+
return this.serialize();
|
|
40
|
+
}
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
toJson() {
|
|
43
|
+
if (!this._suiTransaction) {
|
|
44
|
+
throw new sdk_core_1.ParseTransactionError('Empty transaction');
|
|
45
|
+
}
|
|
46
|
+
const suiTx = this._suiTransaction;
|
|
47
|
+
let txDetails;
|
|
48
|
+
switch (suiTx.type) {
|
|
49
|
+
case iface_1.SuiTransactionType.AddDelegation:
|
|
50
|
+
txDetails = {
|
|
51
|
+
Call: {
|
|
52
|
+
package: suiTx.tx.package || constants_1.SUI_PACKAGE,
|
|
53
|
+
module: suiTx.tx.module || iface_1.ModulesNames.SuiSystem,
|
|
54
|
+
function: suiTx.tx.function || iface_1.MethodNames.RequestAddDelegationMulCoin,
|
|
55
|
+
typeArguments: suiTx.tx.typeArguments,
|
|
56
|
+
arguments: suiTx.tx.arguments,
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
break;
|
|
60
|
+
case iface_1.SuiTransactionType.WithdrawDelegation:
|
|
61
|
+
txDetails = {
|
|
62
|
+
Call: {
|
|
63
|
+
package: suiTx.tx.package || constants_1.SUI_PACKAGE,
|
|
64
|
+
module: suiTx.tx.module || iface_1.ModulesNames.SuiSystem,
|
|
65
|
+
function: suiTx.tx.function || iface_1.MethodNames.RequestWithdrawDelegation,
|
|
66
|
+
typeArguments: suiTx.tx.typeArguments,
|
|
67
|
+
arguments: suiTx.tx.arguments,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
break;
|
|
71
|
+
case iface_1.SuiTransactionType.SwitchDelegation:
|
|
72
|
+
txDetails = {
|
|
73
|
+
Call: {
|
|
74
|
+
package: suiTx.tx.package || constants_1.SUI_PACKAGE,
|
|
75
|
+
module: suiTx.tx.module || iface_1.ModulesNames.SuiSystem,
|
|
76
|
+
function: suiTx.tx.function || iface_1.MethodNames.RequestSwitchDelegation,
|
|
77
|
+
typeArguments: suiTx.tx.typeArguments,
|
|
78
|
+
arguments: suiTx.tx.arguments,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
throw new sdk_core_1.InvalidTransactionError('SuiTransactionType not supported');
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
id: this._id,
|
|
87
|
+
kind: { Single: txDetails },
|
|
88
|
+
sender: suiTx.sender,
|
|
89
|
+
gasPayment: suiTx.gasPayment,
|
|
90
|
+
gasBudget: suiTx.gasBudget,
|
|
91
|
+
gasPrice: constants_1.SUI_GAS_PRICE,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** @inheritDoc */
|
|
95
|
+
explainTransaction() {
|
|
96
|
+
const result = this.toJson();
|
|
97
|
+
const displayOrder = [
|
|
98
|
+
'id',
|
|
99
|
+
'outputs',
|
|
100
|
+
'outputAmount',
|
|
101
|
+
'changeOutputs',
|
|
102
|
+
'changeAmount',
|
|
103
|
+
'fee',
|
|
104
|
+
'type',
|
|
105
|
+
'module',
|
|
106
|
+
'function',
|
|
107
|
+
'validatorAddress',
|
|
108
|
+
];
|
|
109
|
+
const outputs = [];
|
|
110
|
+
const explanationResult = {
|
|
111
|
+
displayOrder,
|
|
112
|
+
id: this.id,
|
|
113
|
+
outputs,
|
|
114
|
+
outputAmount: '0',
|
|
115
|
+
changeOutputs: [],
|
|
116
|
+
changeAmount: '0',
|
|
117
|
+
fee: { fee: this.suiTransaction.gasBudget.toString() },
|
|
118
|
+
type: this.type,
|
|
119
|
+
};
|
|
120
|
+
switch (this.type) {
|
|
121
|
+
case sdk_core_1.TransactionType.AddDelegator:
|
|
122
|
+
return this.explainAddDelegationTransaction(result, explanationResult);
|
|
123
|
+
case sdk_core_1.TransactionType.StakingWithdraw:
|
|
124
|
+
return this.explainWithdrawDelegationTransaction(result, explanationResult);
|
|
125
|
+
case sdk_core_1.TransactionType.StakingSwitch:
|
|
126
|
+
return this.explainSwitchDelegationTransaction(result, explanationResult);
|
|
127
|
+
default:
|
|
128
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Set the transaction type.
|
|
133
|
+
*
|
|
134
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
135
|
+
*/
|
|
136
|
+
transactionType(transactionType) {
|
|
137
|
+
this._type = transactionType;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Load the input and output data on this transaction.
|
|
141
|
+
*/
|
|
142
|
+
loadInputsAndOutputs() {
|
|
143
|
+
if (!this.suiTransaction) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
switch (this.suiTransaction.type) {
|
|
147
|
+
case iface_1.SuiTransactionType.AddDelegation:
|
|
148
|
+
const staking_amount = this.suiTransaction.tx.arguments[2].toString();
|
|
149
|
+
this._inputs = [
|
|
150
|
+
{
|
|
151
|
+
address: this.suiTransaction.sender,
|
|
152
|
+
value: staking_amount,
|
|
153
|
+
coin: this._coinConfig.name,
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
this._outputs = [
|
|
157
|
+
{
|
|
158
|
+
address: utils_1.default.normalizeHexId(this.suiTransaction.tx.arguments[3].toString()),
|
|
159
|
+
value: staking_amount,
|
|
160
|
+
coin: this._coinConfig.name,
|
|
161
|
+
},
|
|
162
|
+
];
|
|
163
|
+
break;
|
|
164
|
+
case iface_1.SuiTransactionType.WithdrawDelegation:
|
|
165
|
+
this._inputs = [
|
|
166
|
+
{
|
|
167
|
+
address: utils_1.default.normalizeHexId(this.suiTransaction.tx.arguments[1].objectId),
|
|
168
|
+
value: constants_1.TRANSFER_AMOUNT_UNKNOWN_TEXT,
|
|
169
|
+
coin: this._coinConfig.name,
|
|
170
|
+
},
|
|
171
|
+
];
|
|
172
|
+
this._outputs = [
|
|
173
|
+
{
|
|
174
|
+
address: this.suiTransaction.sender,
|
|
175
|
+
value: constants_1.TRANSFER_AMOUNT_UNKNOWN_TEXT,
|
|
176
|
+
coin: this._coinConfig.name,
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
break;
|
|
180
|
+
case iface_1.SuiTransactionType.SwitchDelegation:
|
|
181
|
+
this._inputs = [
|
|
182
|
+
{
|
|
183
|
+
address: this.suiTransaction.sender,
|
|
184
|
+
value: constants_1.TRANSFER_AMOUNT_UNKNOWN_TEXT,
|
|
185
|
+
coin: this._coinConfig.name,
|
|
186
|
+
},
|
|
187
|
+
];
|
|
188
|
+
this._outputs = [
|
|
189
|
+
{
|
|
190
|
+
address: utils_1.default.normalizeHexId(this.suiTransaction.tx.arguments[3].toString()),
|
|
191
|
+
value: constants_1.TRANSFER_AMOUNT_UNKNOWN_TEXT,
|
|
192
|
+
coin: this._coinConfig.name,
|
|
193
|
+
},
|
|
194
|
+
];
|
|
195
|
+
break;
|
|
196
|
+
default:
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Sets this transaction payload
|
|
202
|
+
*
|
|
203
|
+
* @param {string} rawTransaction
|
|
204
|
+
*/
|
|
205
|
+
fromRawTransaction(rawTransaction) {
|
|
206
|
+
try {
|
|
207
|
+
utils_1.default.isValidRawTransaction(rawTransaction);
|
|
208
|
+
this._suiTransaction = transaction_1.Transaction.deserializeSuiTransaction(rawTransaction);
|
|
209
|
+
this._type = utils_1.default.getTransactionType(this._suiTransaction.tx.function);
|
|
210
|
+
this.loadInputsAndOutputs();
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
throw e;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Helper function for serialize() to get the correct txData with transaction type
|
|
218
|
+
*
|
|
219
|
+
* @return {TxData}
|
|
220
|
+
*/
|
|
221
|
+
getTxData() {
|
|
222
|
+
const suiTx = this._suiTransaction;
|
|
223
|
+
let tx;
|
|
224
|
+
switch (suiTx.type) {
|
|
225
|
+
case iface_1.SuiTransactionType.AddDelegation:
|
|
226
|
+
tx = {
|
|
227
|
+
Call: {
|
|
228
|
+
package: suiTx.tx.package || constants_1.SUI_FRAMEWORK_ADDRESS,
|
|
229
|
+
module: suiTx.tx.module || iface_1.ModulesNames.SuiSystem,
|
|
230
|
+
function: suiTx.tx.function || iface_1.MethodNames.RequestAddDelegationMulCoin,
|
|
231
|
+
typeArguments: suiTx.tx.typeArguments,
|
|
232
|
+
arguments: [
|
|
233
|
+
utils_1.default.mapSharedObjectToCallArg(suiTx.tx.arguments[0]),
|
|
234
|
+
utils_1.default.mapCoinsToCallArg(suiTx.tx.arguments[1]),
|
|
235
|
+
utils_1.default.mapAmountToCallArg(Number(suiTx.tx.arguments[2])),
|
|
236
|
+
utils_1.default.mapAddressToCallArg(suiTx.tx.arguments[3].toString()),
|
|
237
|
+
],
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
break;
|
|
241
|
+
case iface_1.SuiTransactionType.WithdrawDelegation:
|
|
242
|
+
tx = {
|
|
243
|
+
Call: {
|
|
244
|
+
package: suiTx.tx.package || constants_1.SUI_FRAMEWORK_ADDRESS,
|
|
245
|
+
module: suiTx.tx.module || iface_1.ModulesNames.SuiSystem,
|
|
246
|
+
function: suiTx.tx.function || iface_1.MethodNames.RequestWithdrawDelegation,
|
|
247
|
+
typeArguments: suiTx.tx.typeArguments,
|
|
248
|
+
arguments: [
|
|
249
|
+
utils_1.default.mapSharedObjectToCallArg(suiTx.tx.arguments[0]),
|
|
250
|
+
utils_1.default.mapSuiObjectRefToCallArg(suiTx.tx.arguments[1]),
|
|
251
|
+
utils_1.default.mapSuiObjectRefToCallArg(suiTx.tx.arguments[2]),
|
|
252
|
+
],
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
break;
|
|
256
|
+
case iface_1.SuiTransactionType.SwitchDelegation:
|
|
257
|
+
tx = {
|
|
258
|
+
Call: {
|
|
259
|
+
package: suiTx.tx.package || constants_1.SUI_FRAMEWORK_ADDRESS,
|
|
260
|
+
module: suiTx.tx.module || iface_1.ModulesNames.SuiSystem,
|
|
261
|
+
function: suiTx.tx.function || iface_1.MethodNames.RequestSwitchDelegation,
|
|
262
|
+
typeArguments: suiTx.tx.typeArguments,
|
|
263
|
+
arguments: [
|
|
264
|
+
utils_1.default.mapSharedObjectToCallArg(suiTx.tx.arguments[0]),
|
|
265
|
+
utils_1.default.mapSuiObjectRefToCallArg(suiTx.tx.arguments[1]),
|
|
266
|
+
utils_1.default.mapSuiObjectRefToCallArg(suiTx.tx.arguments[2]),
|
|
267
|
+
utils_1.default.mapAddressToCallArg(suiTx.tx.arguments[3].toString()),
|
|
268
|
+
],
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
break;
|
|
272
|
+
default:
|
|
273
|
+
throw new sdk_core_1.InvalidTransactionError(`Sui StakingTransaction type ${suiTx.type} not supported`);
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
kind: { Single: tx },
|
|
277
|
+
gasPayment: suiTx.gasPayment,
|
|
278
|
+
gasPrice: constants_1.SUI_GAS_PRICE,
|
|
279
|
+
gasBudget: suiTx.gasBudget,
|
|
280
|
+
sender: suiTx.sender,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Returns a complete explanation for a transfer transaction
|
|
285
|
+
*
|
|
286
|
+
* @param {TxData} json The transaction data in json format
|
|
287
|
+
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
288
|
+
* @returns {TransactionExplanation}
|
|
289
|
+
*/
|
|
290
|
+
explainAddDelegationTransaction(json, explanationResult) {
|
|
291
|
+
const amount = this.suiTransaction.tx.arguments[2];
|
|
292
|
+
return {
|
|
293
|
+
...explanationResult,
|
|
294
|
+
fee: {
|
|
295
|
+
fee: this.suiTransaction.gasBudget.toString(),
|
|
296
|
+
},
|
|
297
|
+
type: sdk_core_1.TransactionType.AddDelegator,
|
|
298
|
+
outputs: [
|
|
299
|
+
{
|
|
300
|
+
address: json.sender,
|
|
301
|
+
amount: Number(amount),
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
outputAmount: amount,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Returns a complete explanation for a withdraw delegation transaction
|
|
309
|
+
*
|
|
310
|
+
* @param {TxData} json The transaction data in json format
|
|
311
|
+
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
312
|
+
* @returns {TransactionExplanation}
|
|
313
|
+
*/
|
|
314
|
+
explainWithdrawDelegationTransaction(json, explanationResult) {
|
|
315
|
+
return {
|
|
316
|
+
...explanationResult,
|
|
317
|
+
fee: {
|
|
318
|
+
fee: this.suiTransaction.gasBudget.toString(),
|
|
319
|
+
},
|
|
320
|
+
type: sdk_core_1.TransactionType.StakingWithdraw,
|
|
321
|
+
outputs: [
|
|
322
|
+
{
|
|
323
|
+
address: json.sender,
|
|
324
|
+
amount: constants_1.TRANSFER_AMOUNT_UNKNOWN_TEXT,
|
|
325
|
+
},
|
|
326
|
+
],
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Returns a complete explanation for a switch delegation transaction
|
|
331
|
+
*
|
|
332
|
+
* @param {TxData} json The transaction data in json format
|
|
333
|
+
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
334
|
+
* @returns {TransactionExplanation}
|
|
335
|
+
*/
|
|
336
|
+
explainSwitchDelegationTransaction(json, explanationResult) {
|
|
337
|
+
return {
|
|
338
|
+
...explanationResult,
|
|
339
|
+
fee: {
|
|
340
|
+
fee: this.suiTransaction.gasBudget.toString(),
|
|
341
|
+
},
|
|
342
|
+
type: sdk_core_1.TransactionType.StakingSwitch,
|
|
343
|
+
outputs: [
|
|
344
|
+
{
|
|
345
|
+
address: json.sender,
|
|
346
|
+
amount: constants_1.TRANSFER_AMOUNT_UNKNOWN_TEXT,
|
|
347
|
+
},
|
|
348
|
+
],
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
exports.StakingTransaction = StakingTransaction;
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1RyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zdGFraW5nVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBUXlCO0FBQ3pCLG1DQVdpQjtBQUVqQixvREFBNEI7QUFDNUIsMkNBQThHO0FBRTlHLCtDQUE0QztBQUU1QyxNQUFhLGtCQUFtQixTQUFRLHlCQUF1QjtJQUM3RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBOEI7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLEdBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3hEO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUIs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TUFBTTtvQkFDcEIsTUFBTSxFQUFFLHdDQUE0QjtpQkFDckM7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsa0NBQWtDLENBQUMsSUFBWSxFQUFFLGlCQUF5QztRQUN4RixPQUFPO1lBQ0wsR0FBRyxpQkFBaUI7WUFDcEIsR0FBRyxFQUFFO2dCQUNILEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7YUFDOUM7WUFDRCxJQUFJLEVBQUUsMEJBQWUsQ0FBQyxhQUFhO1lBQ25DLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ3BCLE1BQU0sRUFBRSx3Q0FBNEI7aUJBQ3JDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeldELGdEQXlXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduYXR1cmUsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQge1xuICBNZXRob2ROYW1lcyxcbiAgTW9kdWxlc05hbWVzLFxuICBNb3ZlQ2FsbFR4LFxuICBTaGFyZWRPYmplY3RSZWYsXG4gIFN1aU9iamVjdFJlZixcbiAgU3VpVHJhbnNhY3Rpb24sXG4gIFN1aVRyYW5zYWN0aW9uVHlwZSxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHhEYXRhLFxuICBUeERldGFpbHMsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFNVSV9GUkFNRVdPUktfQUREUkVTUywgU1VJX0dBU19QUklDRSwgU1VJX1BBQ0tBR0UsIFRSQU5TRkVSX0FNT1VOVF9VTktOT1dOX1RFWFQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIFN0YWtpbmdUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgZ2V0IHN1aVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gIH1cblxuICBzZXRTdWlUcmFuc2FjdGlvbih0eDogU3VpVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gICAgdGhpcy5fc2lnbmF0dXJlID0geyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9O1xuICAgIHRoaXMuc2VyaWFsaXplKCk7XG4gIH1cblxuICBnZXQgc3VpU2lnbmF0dXJlKCk6IFNpZ25hdHVyZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25hdHVyZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBzdWlUeCA9IHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICAgIGxldCB0eERldGFpbHM6IFR4RGV0YWlscztcbiAgICBzd2l0Y2ggKHN1aVR4LnR5cGUpIHtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRpb246XG4gICAgICAgIHR4RGV0YWlscyA9IHtcbiAgICAgICAgICBDYWxsOiB7XG4gICAgICAgICAgICBwYWNrYWdlOiBzdWlUeC50eC5wYWNrYWdlIHx8IFNVSV9QQUNLQUdFLFxuICAgICAgICAgICAgbW9kdWxlOiBzdWlUeC50eC5tb2R1bGUgfHwgTW9kdWxlc05hbWVzLlN1aVN5c3RlbSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBzdWlUeC50eC5mdW5jdGlvbiB8fCBNZXRob2ROYW1lcy5SZXF1ZXN0QWRkRGVsZWdhdGlvbk11bENvaW4sXG4gICAgICAgICAgICB0eXBlQXJndW1lbnRzOiBzdWlUeC50eC50eXBlQXJndW1lbnRzLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBzdWlUeC50eC5hcmd1bWVudHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5XaXRoZHJhd0RlbGVnYXRpb246XG4gICAgICAgIHR4RGV0YWlscyA9IHtcbiAgICAgICAgICBDYWxsOiB7XG4gICAgICAgICAgICBwYWNrYWdlOiBzdWlUeC50eC5wYWNrYWdlIHx8IFNVSV9QQUNLQUdFLFxuICAgICAgICAgICAgbW9kdWxlOiBzdWlUeC50eC5tb2R1bGUgfHwgTW9kdWxlc05hbWVzLlN1aVN5c3RlbSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBzdWlUeC50eC5mdW5jdGlvbiB8fCBNZXRob2ROYW1lcy5SZXF1ZXN0V2l0aGRyYXdEZWxlZ2F0aW9uLFxuICAgICAgICAgICAgdHlwZUFyZ3VtZW50czogc3VpVHgudHgudHlwZUFyZ3VtZW50cyxcbiAgICAgICAgICAgIGFyZ3VtZW50czogc3VpVHgudHguYXJndW1lbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuU3dpdGNoRGVsZWdhdGlvbjpcbiAgICAgICAgdHhEZXRhaWxzID0ge1xuICAgICAgICAgIENhbGw6IHtcbiAgICAgICAgICAgIHBhY2thZ2U6IHN1aVR4LnR4LnBhY2thZ2UgfHwgU1VJX1BBQ0tBR0UsXG4gICAgICAgICAgICBtb2R1bGU6IHN1aVR4LnR4Lm1vZHVsZSB8fCBNb2R1bGVzTmFtZXMuU3VpU3lzdGVtLFxuICAgICAgICAgICAgZnVuY3Rpb246IHN1aVR4LnR4LmZ1bmN0aW9uIHx8IE1ldGhvZE5hbWVzLlJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uLFxuICAgICAgICAgICAgdHlwZUFyZ3VtZW50czogc3VpVHgudHgudHlwZUFyZ3VtZW50cyxcbiAgICAgICAgICAgIGFyZ3VtZW50czogc3VpVHgudHguYXJndW1lbnRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdTdWlUcmFuc2FjdGlvblR5cGUgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQsXG4gICAgICBraW5kOiB7IFNpbmdsZTogdHhEZXRhaWxzIH0sXG4gICAgICBzZW5kZXI6IHN1aVR4LnNlbmRlcixcbiAgICAgIGdhc1BheW1lbnQ6IHN1aVR4Lmdhc1BheW1lbnQsXG4gICAgICBnYXNCdWRnZXQ6IHN1aVR4Lmdhc0J1ZGdldCxcbiAgICAgIGdhc1ByaWNlOiBTVUlfR0FTX1BSSUNFLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnZmVlJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdtb2R1bGUnLFxuICAgICAgJ2Z1bmN0aW9uJyxcbiAgICAgICd2YWxpZGF0b3JBZGRyZXNzJyxcbiAgICBdO1xuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uID0ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiAnMCcsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5zdWlUcmFuc2FjdGlvbi5nYXNCdWRnZXQudG9TdHJpbmcoKSB9LFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWRkRGVsZWdhdG9yOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluQWRkRGVsZWdhdGlvblRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluV2l0aGRyYXdEZWxlZ2F0aW9uVHJhbnNhY3Rpb24ocmVzdWx0LCBleHBsYW5hdGlvblJlc3VsdCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nU3dpdGNoOlxuICAgICAgICByZXR1cm4gdGhpcy5leHBsYWluU3dpdGNoRGVsZWdhdGlvblRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLnN1aVRyYW5zYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRpb246XG4gICAgICAgIGNvbnN0IHN0YWtpbmdfYW1vdW50ID0gdGhpcy5zdWlUcmFuc2FjdGlvbi50eC5hcmd1bWVudHNbMl0udG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5faW5wdXRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgICAgICAgdmFsdWU6IHN0YWtpbmdfYW1vdW50LCAvLyBzdGFraW5nX2Ftb3VudFxuICAgICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuX291dHB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdXRpbHMubm9ybWFsaXplSGV4SWQodGhpcy5zdWlUcmFuc2FjdGlvbi50eC5hcmd1bWVudHNbM10udG9TdHJpbmcoKSksIC8vIHZhbGlkYXRvciBhZGRyZXNzXG4gICAgICAgICAgICB2YWx1ZTogc3Rha2luZ19hbW91bnQsIC8vIHN0YWtpbmdfYW1vdW50XG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5XaXRoZHJhd0RlbGVnYXRpb246XG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzOiB1dGlscy5ub3JtYWxpemVIZXhJZCgodGhpcy5zdWlUcmFuc2FjdGlvbi50eC5hcmd1bWVudHNbMV0gYXMgU3VpT2JqZWN0UmVmKS5vYmplY3RJZCksIC8vIGRlbGVnYXRvciBhZGRyZXNzXG4gICAgICAgICAgICB2YWx1ZTogVFJBTlNGRVJfQU1PVU5UX1VOS05PV05fVEVYVCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLl9vdXRwdXRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgICAgICAgdmFsdWU6IFRSQU5TRkVSX0FNT1VOVF9VTktOT1dOX1RFWFQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5Td2l0Y2hEZWxlZ2F0aW9uOlxuICAgICAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogdGhpcy5zdWlUcmFuc2FjdGlvbi5zZW5kZXIsXG4gICAgICAgICAgICB2YWx1ZTogVFJBTlNGRVJfQU1PVU5UX1VOS05PV05fVEVYVCxcbiAgICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLl9vdXRwdXRzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IHV0aWxzLm5vcm1hbGl6ZUhleElkKHRoaXMuc3VpVHJhbnNhY3Rpb24udHguYXJndW1lbnRzWzNdLnRvU3RyaW5nKCkpLCAvLyB2YWxpZGF0b3IgYWRkcmVzc1xuICAgICAgICAgICAgdmFsdWU6IFRSQU5TRkVSX0FNT1VOVF9VTktOT1dOX1RFWFQsXG4gICAgICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhpcyB0cmFuc2FjdGlvbiBwYXlsb2FkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByYXdUcmFuc2FjdGlvblxuICAgKi9cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICAgIHRoaXMuX3N1aVRyYW5zYWN0aW9uID0gVHJhbnNhY3Rpb24uZGVzZXJpYWxpemVTdWlUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbikgYXMgU3VpVHJhbnNhY3Rpb248TW92ZUNhbGxUeD47XG4gICAgICB0aGlzLl90eXBlID0gdXRpbHMuZ2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMuX3N1aVRyYW5zYWN0aW9uLnR4LmZ1bmN0aW9uKTtcbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHNlcmlhbGl6ZSgpIHRvIGdldCB0aGUgY29ycmVjdCB0eERhdGEgd2l0aCB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEByZXR1cm4ge1R4RGF0YX1cbiAgICovXG4gIGdldFR4RGF0YSgpOiBUeERhdGEge1xuICAgIGNvbnN0IHN1aVR4ID0gdGhpcy5fc3VpVHJhbnNhY3Rpb247XG4gICAgbGV0IHR4OiBUeERldGFpbHM7XG5cbiAgICBzd2l0Y2ggKHN1aVR4LnR5cGUpIHtcbiAgICAgIGNhc2UgU3VpVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRpb246XG4gICAgICAgIHR4ID0ge1xuICAgICAgICAgIENhbGw6IHtcbiAgICAgICAgICAgIHBhY2thZ2U6IHN1aVR4LnR4LnBhY2thZ2UgfHwgU1VJX0ZSQU1FV09SS19BRERSRVNTLFxuICAgICAgICAgICAgbW9kdWxlOiBzdWlUeC50eC5tb2R1bGUgfHwgTW9kdWxlc05hbWVzLlN1aVN5c3RlbSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBzdWlUeC50eC5mdW5jdGlvbiB8fCBNZXRob2ROYW1lcy5SZXF1ZXN0QWRkRGVsZWdhdGlvbk11bENvaW4sXG4gICAgICAgICAgICB0eXBlQXJndW1lbnRzOiBzdWlUeC50eC50eXBlQXJndW1lbnRzLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgICAgICAgIHV0aWxzLm1hcFNoYXJlZE9iamVjdFRvQ2FsbEFyZyhzdWlUeC50eC5hcmd1bWVudHNbMF0gYXMgU2hhcmVkT2JqZWN0UmVmKSxcbiAgICAgICAgICAgICAgdXRpbHMubWFwQ29pbnNUb0NhbGxBcmcoc3VpVHgudHguYXJndW1lbnRzWzFdIGFzIFN1aU9iamVjdFJlZltdKSxcbiAgICAgICAgICAgICAgdXRpbHMubWFwQW1vdW50VG9DYWxsQXJnKE51bWJlcihzdWlUeC50eC5hcmd1bWVudHNbMl0pKSxcbiAgICAgICAgICAgICAgdXRpbHMubWFwQWRkcmVzc1RvQ2FsbEFyZyhzdWlUeC50eC5hcmd1bWVudHNbM10udG9TdHJpbmcoKSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdWlUcmFuc2FjdGlvblR5cGUuV2l0aGRyYXdEZWxlZ2F0aW9uOlxuICAgICAgICB0eCA9IHtcbiAgICAgICAgICBDYWxsOiB7XG4gICAgICAgICAgICBwYWNrYWdlOiBzdWlUeC50eC5wYWNrYWdlIHx8IFNVSV9GUkFNRVdPUktfQUREUkVTUyxcbiAgICAgICAgICAgIG1vZHVsZTogc3VpVHgudHgubW9kdWxlIHx8IE1vZHVsZXNOYW1lcy5TdWlTeXN0ZW0sXG4gICAgICAgICAgICBmdW5jdGlvbjogc3VpVHgudHguZnVuY3Rpb24gfHwgTWV0aG9kTmFtZXMuUmVxdWVzdFdpdGhkcmF3RGVsZWdhdGlvbixcbiAgICAgICAgICAgIHR5cGVBcmd1bWVudHM6IHN1aVR4LnR4LnR5cGVBcmd1bWVudHMsXG4gICAgICAgICAgICBhcmd1bWVudHM6IFtcbiAgICAgICAgICAgICAgdXRpbHMubWFwU2hhcmVkT2JqZWN0VG9DYWxsQXJnKHN1aVR4LnR4LmFyZ3VtZW50c1swXSBhcyBTaGFyZWRPYmplY3RSZWYpLFxuICAgICAgICAgICAgICB1dGlscy5tYXBTdWlPYmplY3RSZWZUb0NhbGxBcmcoc3VpVHgudHguYXJndW1lbnRzWzFdIGFzIFN1aU9iamVjdFJlZiksXG4gICAgICAgICAgICAgIHV0aWxzLm1hcFN1aU9iamVjdFJlZlRvQ2FsbEFyZyhzdWlUeC50eC5hcmd1bWVudHNbMl0gYXMgU3VpT2JqZWN0UmVmKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN1aVRyYW5zYWN0aW9uVHlwZS5Td2l0Y2hEZWxlZ2F0aW9uOlxuICAgICAgICB0eCA9IHtcbiAgICAgICAgICBDYWxsOiB7XG4gICAgICAgICAgICBwYWNrYWdlOiBzdWlUeC50eC5wYWNrYWdlIHx8IFNVSV9GUkFNRVdPUktfQUREUkVTUyxcbiAgICAgICAgICAgIG1vZHVsZTogc3VpVHgudHgubW9kdWxlIHx8IE1vZHVsZXNOYW1lcy5TdWlTeXN0ZW0sXG4gICAgICAgICAgICBmdW5jdGlvbjogc3VpVHgudHguZnVuY3Rpb24gfHwgTWV0aG9kTmFtZXMuUmVxdWVzdFN3aXRjaERlbGVnYXRpb24sXG4gICAgICAgICAgICB0eXBlQXJndW1lbnRzOiBzdWlUeC50eC50eXBlQXJndW1lbnRzLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgICAgICAgIHV0aWxzLm1hcFNoYXJlZE9iamVjdFRvQ2FsbEFyZyhzdWlUeC50eC5hcmd1bWVudHNbMF0gYXMgU2hhcmVkT2JqZWN0UmVmKSxcbiAgICAgICAgICAgICAgdXRpbHMubWFwU3VpT2JqZWN0UmVmVG9DYWxsQXJnKHN1aVR4LnR4LmFyZ3VtZW50c1sxXSBhcyBTdWlPYmplY3RSZWYpLFxuICAgICAgICAgICAgICB1dGlscy5tYXBTdWlPYmplY3RSZWZUb0NhbGxBcmcoc3VpVHgudHguYXJndW1lbnRzWzJdIGFzIFN1aU9iamVjdFJlZiksXG4gICAgICAgICAgICAgIHV0aWxzLm1hcEFkZHJlc3NUb0NhbGxBcmcoc3VpVHgudHguYXJndW1lbnRzWzNdLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgU3VpIFN0YWtpbmdUcmFuc2FjdGlvbiB0eXBlICR7c3VpVHgudHlwZX0gbm90IHN1cHBvcnRlZGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBraW5kOiB7IFNpbmdsZTogdHggfSxcbiAgICAgIGdhc1BheW1lbnQ6IHN1aVR4Lmdhc1BheW1lbnQsXG4gICAgICBnYXNQcmljZTogU1VJX0dBU19QUklDRSxcbiAgICAgIGdhc0J1ZGdldDogc3VpVHguZ2FzQnVkZ2V0LFxuICAgICAgc2VuZGVyOiBzdWlUeC5zZW5kZXIsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxldGUgZXhwbGFuYXRpb24gZm9yIGEgdHJhbnNmZXIgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUeERhdGF9IGpzb24gVGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4ganNvbiBmb3JtYXRcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufSBleHBsYW5hdGlvblJlc3VsdCBUaGUgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24gdG8gYmUgY29tcGxldGVkXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkV4cGxhbmF0aW9ufVxuICAgKi9cbiAgZXhwbGFpbkFkZERlbGVnYXRpb25UcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgYW1vdW50ID0gdGhpcy5zdWlUcmFuc2FjdGlvbi50eC5hcmd1bWVudHNbMl07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgZmVlOiB7XG4gICAgICAgIGZlZTogdGhpcy5zdWlUcmFuc2FjdGlvbi5nYXNCdWRnZXQudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuQWRkRGVsZWdhdG9yLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi5zZW5kZXIsXG4gICAgICAgICAgYW1vdW50OiBOdW1iZXIoYW1vdW50KSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvdXRwdXRBbW91bnQ6IGFtb3VudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBmb3IgYSB3aXRoZHJhdyBkZWxlZ2F0aW9uIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHhEYXRhfSBqc29uIFRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGpzb24gZm9ybWF0XG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn0gZXhwbGFuYXRpb25SZXN1bHQgVGhlIHRyYW5zYWN0aW9uIGV4cGxhbmF0aW9uIHRvIGJlIGNvbXBsZXRlZFxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25FeHBsYW5hdGlvbn1cbiAgICovXG4gIGV4cGxhaW5XaXRoZHJhd0RlbGVnYXRpb25UcmFuc2FjdGlvbihcbiAgICBqc29uOiBUeERhdGEsXG4gICAgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4cGxhbmF0aW9uUmVzdWx0LFxuICAgICAgZmVlOiB7XG4gICAgICAgIGZlZTogdGhpcy5zdWlUcmFuc2FjdGlvbi5nYXNCdWRnZXQudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3LFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi5zZW5kZXIsXG4gICAgICAgICAgYW1vdW50OiBUUkFOU0ZFUl9BTU9VTlRfVU5LTk9XTl9URVhULFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBmb3IgYSBzd2l0Y2ggZGVsZWdhdGlvbiB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluU3dpdGNoRGVsZWdhdGlvblRyYW5zYWN0aW9uKGpzb246IFR4RGF0YSwgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24pOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBmZWU6IHtcbiAgICAgICAgZmVlOiB0aGlzLnN1aVRyYW5zYWN0aW9uLmdhc0J1ZGdldC50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nU3dpdGNoLFxuICAgICAgb3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczoganNvbi5zZW5kZXIsXG4gICAgICAgICAgYW1vdW50OiBUUkFOU0ZFUl9BTU9VTlRfVU5LTk9XTl9URVhULFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { BaseKey, BaseTransaction, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo/sdk-core';
|
|
3
|
-
import {
|
|
3
|
+
import { MoveCallTx, PayTx, SuiTransaction, SuiTransactionType, TxData } from './iface';
|
|
4
4
|
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
5
|
-
import { SuiTransactionType } from './constants';
|
|
6
5
|
import { KeyPair } from './keyPair';
|
|
7
|
-
export declare class Transaction extends BaseTransaction {
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export declare abstract class Transaction<T> extends BaseTransaction {
|
|
7
|
+
protected _suiTransaction: SuiTransaction<T>;
|
|
8
|
+
protected _signature: Signature;
|
|
10
9
|
private _serializedSig;
|
|
11
|
-
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
12
|
-
get suiTransaction(): SuiTransaction
|
|
13
|
-
setSuiTransaction(tx: SuiTransaction): void;
|
|
10
|
+
protected constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
+
get suiTransaction(): SuiTransaction<T>;
|
|
12
|
+
setSuiTransaction(tx: SuiTransaction<T>): void;
|
|
14
13
|
/** @inheritDoc **/
|
|
15
14
|
get id(): string;
|
|
16
15
|
addSignature(publicKey: BasePublicKey, signature: Buffer): void;
|
|
17
16
|
get suiSignature(): Signature;
|
|
18
17
|
get serializedSig(): Uint8Array;
|
|
19
18
|
setSerializedSig(publicKey: BasePublicKey, signature: Buffer): void;
|
|
20
|
-
getInputCoins(): SuiObjectRef[];
|
|
21
19
|
/** @inheritdoc */
|
|
22
20
|
canSign(key: BaseKey): boolean;
|
|
23
21
|
/**
|
|
@@ -29,46 +27,35 @@ export declare class Transaction extends BaseTransaction {
|
|
|
29
27
|
/** @inheritdoc */
|
|
30
28
|
toBroadcastFormat(): string;
|
|
31
29
|
/** @inheritdoc */
|
|
32
|
-
toJson(): TxData;
|
|
33
|
-
/** @inheritDoc */
|
|
34
|
-
explainTransaction(): TransactionExplanation;
|
|
30
|
+
abstract toJson(): TxData;
|
|
35
31
|
/**
|
|
36
32
|
* Set the transaction type.
|
|
37
33
|
*
|
|
38
34
|
* @param {TransactionType} transactionType The transaction type to be set.
|
|
39
35
|
*/
|
|
40
36
|
transactionType(transactionType: TransactionType): void;
|
|
37
|
+
/**
|
|
38
|
+
* get the correct txData with transaction type
|
|
39
|
+
*/
|
|
40
|
+
abstract getTxData(): TxData;
|
|
41
41
|
/**
|
|
42
42
|
* Load the input and output data on this transaction.
|
|
43
43
|
*/
|
|
44
|
-
loadInputsAndOutputs(): void;
|
|
44
|
+
abstract loadInputsAndOutputs(): void;
|
|
45
45
|
/**
|
|
46
46
|
* Sets this transaction payload
|
|
47
47
|
*
|
|
48
48
|
* @param rawTransaction
|
|
49
49
|
*/
|
|
50
|
-
fromRawTransaction(rawTransaction: string): void;
|
|
51
|
-
/**
|
|
52
|
-
* Helper function for serialize() to get the correct txData with transaction type
|
|
53
|
-
*/
|
|
54
|
-
private getTxData;
|
|
50
|
+
abstract fromRawTransaction(rawTransaction: string): void;
|
|
55
51
|
getDataBytes(): Uint8Array;
|
|
56
52
|
/** @inheritDoc */
|
|
57
53
|
get signablePayload(): Buffer;
|
|
58
54
|
serialize(): string;
|
|
59
55
|
private getSha256Hash;
|
|
60
56
|
static deserializeSuiTransaction(serializedTx: string): SuiTransaction;
|
|
61
|
-
static getProperTxDetails(k: any, type: SuiTransactionType):
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
amounts: number[];
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Returns a complete explanation for a transfer transaction
|
|
68
|
-
* @param {TxData} json The transaction data in json format
|
|
69
|
-
* @param {TransactionExplanation} explanationResult The transaction explanation to be completed
|
|
70
|
-
* @returns {TransactionExplanation}
|
|
71
|
-
*/
|
|
72
|
-
explainTransferTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
|
|
57
|
+
static getProperTxDetails(k: any, type: SuiTransactionType): PayTx | MoveCallTx;
|
|
58
|
+
private static normalizeCoins;
|
|
59
|
+
private static normalizeSuiObjectRef;
|
|
73
60
|
}
|
|
74
61
|
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EACP,eAAe,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAEf,SAAS,IAAI,aAAa,EAC1B,SAAS,EACT,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,UAAU,EAEV,KAAK,EAEL,cAAc,EACd,kBAAkB,EAClB,MAAM,EAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAQxD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,8BAAsB,WAAW,CAAC,CAAC,CAAE,SAAQ,eAAe;IAC1D,SAAS,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;IAChC,OAAO,CAAC,cAAc,CAAa;IAEnC,SAAS,aAAa,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAIvD,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,CAEtC;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAI9C,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAOf;IAED,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,IAAI,aAAa,IAAI,UAAU,CAE9B;IAED,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IASnE,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B;;;;OAIG;IAEH,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAU3B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,IAAI,MAAM;IAEzB;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAI,MAAM;IAE5B;;OAEG;IACH,QAAQ,CAAC,oBAAoB,IAAI,IAAI;IAErC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAEzD,YAAY,IAAI,UAAU;IAK1B,kBAAkB;IAClB,IAAI,eAAe,IAAI,MAAM,CAO5B;IAED,SAAS,IAAI,MAAM;IASnB,OAAO,CAAC,aAAa;IAcrB,MAAM,CAAC,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc;IAmCtE,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,GAAG,KAAK,GAAG,UAAU;IAiE/E,OAAO,CAAC,MAAM,CAAC,cAAc;IAM7B,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAOrC"}
|