@bitgo/sdk-coin-sui 1.7.1 → 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.
Files changed (45) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/src/lib/bcs.js +25 -1
  3. package/dist/src/lib/constants.d.ts +17 -5
  4. package/dist/src/lib/constants.d.ts.map +1 -1
  5. package/dist/src/lib/constants.js +19 -8
  6. package/dist/src/lib/iface.d.ts +153 -4
  7. package/dist/src/lib/iface.d.ts.map +1 -1
  8. package/dist/src/lib/iface.js +53 -1
  9. package/dist/src/lib/index.d.ts +3 -0
  10. package/dist/src/lib/index.d.ts.map +1 -1
  11. package/dist/src/lib/index.js +8 -2
  12. package/dist/src/lib/keyPair.d.ts +7 -0
  13. package/dist/src/lib/keyPair.d.ts.map +1 -1
  14. package/dist/src/lib/keyPair.js +15 -1
  15. package/dist/src/lib/stakingBuilder.d.ts +73 -0
  16. package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/stakingBuilder.js +223 -0
  18. package/dist/src/lib/stakingTransaction.d.ts +67 -0
  19. package/dist/src/lib/stakingTransaction.d.ts.map +1 -0
  20. package/dist/src/lib/stakingTransaction.js +353 -0
  21. package/dist/src/lib/transaction.d.ts +30 -30
  22. package/dist/src/lib/transaction.d.ts.map +1 -1
  23. package/dist/src/lib/transaction.js +115 -217
  24. package/dist/src/lib/transactionBuilder.d.ts +12 -26
  25. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  26. package/dist/src/lib/transactionBuilder.js +13 -154
  27. package/dist/src/lib/transactionBuilderFactory.d.ts +6 -2
  28. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  29. package/dist/src/lib/transactionBuilderFactory.js +22 -6
  30. package/dist/src/lib/transferBuilder.d.ts +25 -1
  31. package/dist/src/lib/transferBuilder.d.ts.map +1 -1
  32. package/dist/src/lib/transferBuilder.js +165 -1
  33. package/dist/src/lib/transferTransaction.d.ts +53 -0
  34. package/dist/src/lib/transferTransaction.d.ts.map +1 -0
  35. package/dist/src/lib/transferTransaction.js +240 -0
  36. package/dist/src/lib/txnSchema.d.ts +7 -0
  37. package/dist/src/lib/txnSchema.d.ts.map +1 -0
  38. package/dist/src/lib/txnSchema.js +81 -0
  39. package/dist/src/lib/utils.d.ts +111 -2
  40. package/dist/src/lib/utils.d.ts.map +1 -1
  41. package/dist/src/lib/utils.js +201 -2
  42. package/dist/src/sui.d.ts +2 -0
  43. package/dist/src/sui.d.ts.map +1 -1
  44. package/dist/src/sui.js +9 -2
  45. package/package.json +9 -7
@@ -0,0 +1,73 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { TransactionType } from '@bitgo/sdk-core';
3
+ import { MoveCallTx, RequestAddDelegation, RequestSwitchDelegation, RequestWithdrawDelegation, SuiTransaction } from './iface';
4
+ import { TransactionBuilder } from './transactionBuilder';
5
+ import { StakingTransaction } from './stakingTransaction';
6
+ import { Transaction } from './transaction';
7
+ export declare class StakingBuilder extends TransactionBuilder<MoveCallTx> {
8
+ protected _moveCallTx: MoveCallTx;
9
+ protected _addDelegationTx: RequestAddDelegation;
10
+ protected _withdrawDelegation: RequestWithdrawDelegation;
11
+ protected _switchDelegation: RequestSwitchDelegation;
12
+ constructor(_coinConfig: Readonly<CoinConfig>);
13
+ /**
14
+ * Build a MoveCall transaction ready to be signed and executed.
15
+ *
16
+ * @returns {SuiTransaction} an unsigned Sui transaction
17
+ *
18
+ * @see https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/sui_system.md#function-request_add_delegation_mul_coin
19
+ */
20
+ protected buildStakeTransaction(): SuiTransaction<MoveCallTx>;
21
+ /**
22
+ * Get staking transaction type
23
+ *
24
+ * @return {TransactionType}
25
+ * @protected
26
+ */
27
+ protected get transactionType(): TransactionType;
28
+ /**
29
+ * Create a new transaction for delegating coins ready to be signed and executed.
30
+ *
31
+ * @param {RequestAddDelegation} addDelegation
32
+ */
33
+ requestAddDelegation(addDelegation: RequestAddDelegation): this;
34
+ /**
35
+ * Create a new transaction for withdrawing coins ready to be signed
36
+ *
37
+ * @param {RequestWithdrawDelegation} addDelegationTx
38
+ */
39
+ requestWithdrawDelegation(withdrawDelegation: RequestWithdrawDelegation): this;
40
+ /**
41
+ * Create a new transaction for switching delegation ready to be signed
42
+ *
43
+ * @param {switchDelegation} switchDelegation
44
+ */
45
+ requestSwitchDelegation(switchDelegation: RequestSwitchDelegation): this;
46
+ /** @inheritdoc */
47
+ protected fromImplementation(rawTransaction: string): Transaction<MoveCallTx>;
48
+ /** @inheritdoc */
49
+ protected buildImplementation(): Promise<Transaction<MoveCallTx>>;
50
+ /**
51
+ * Initialize the transaction builder fields using the decoded transaction data
52
+ *
53
+ * @param {StakingTransaction} tx the transaction data
54
+ */
55
+ initBuilder(tx: StakingTransaction): void;
56
+ /** @inheritdoc */
57
+ validateTransaction(tx: Transaction<MoveCallTx>): void;
58
+ /**
59
+ * Validate transaction schema
60
+ *
61
+ * @param {SuiTransaction<MoveCallTx>} tx
62
+ * @private
63
+ */
64
+ private validateSchema;
65
+ /**
66
+ * Build SuiTransaction
67
+ *
68
+ * @return {SuiTransaction<MoveCallTx>}
69
+ * @protected
70
+ */
71
+ protected buildSuiTransaction(): SuiTransaction<MoveCallTx>;
72
+ }
73
+ //# sourceMappingURL=stakingBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/stakingBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAyC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAGL,UAAU,EAEV,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EAEzB,cAAc,EAEf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,qBAAa,cAAe,SAAQ,kBAAkB,CAAC,UAAU,CAAC;IAChE,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IACjD,SAAS,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;IACzD,SAAS,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;gBAEzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;;;OAMG;IACH,SAAS,CAAC,qBAAqB,IAAI,cAAc,CAAC,UAAU,CAAC;IAW7D;;;;;OAKG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,EAAE,oBAAoB,GAAG,IAAI;IAiB/D;;;;OAIG;IACH,yBAAyB,CAAC,kBAAkB,EAAE,yBAAyB,GAAG,IAAI;IAe9E;;;;OAIG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,uBAAuB,GAAG,IAAI;IAqBxE,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC;IAQ7E,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAgBvE;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI;IAgDzC,kBAAkB;IAClB,mBAAmB,CAAC,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,IAAI;IAWtD;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAStB;;;;;OAKG;IACH,SAAS,CAAC,mBAAmB,IAAI,cAAc,CAAC,UAAU,CAAC;CAW5D"}
@@ -0,0 +1,223 @@
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.StakingBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo/sdk-core");
8
+ const iface_1 = require("./iface");
9
+ const transactionBuilder_1 = require("./transactionBuilder");
10
+ const constants_1 = require("./constants");
11
+ const txnSchema_1 = require("./txnSchema");
12
+ const stakingTransaction_1 = require("./stakingTransaction");
13
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
14
+ const utils_1 = __importDefault(require("./utils"));
15
+ class StakingBuilder extends transactionBuilder_1.TransactionBuilder {
16
+ constructor(_coinConfig) {
17
+ super(_coinConfig);
18
+ this._transaction = new stakingTransaction_1.StakingTransaction(_coinConfig);
19
+ }
20
+ /**
21
+ * Build a MoveCall transaction ready to be signed and executed.
22
+ *
23
+ * @returns {SuiTransaction} an unsigned Sui transaction
24
+ *
25
+ * @see https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/sui_system.md#function-request_add_delegation_mul_coin
26
+ */
27
+ buildStakeTransaction() {
28
+ return {
29
+ type: iface_1.SuiTransactionType.AddDelegation,
30
+ sender: this._sender,
31
+ tx: this._moveCallTx,
32
+ gasBudget: this._gasBudget,
33
+ gasPrice: this._gasPrice,
34
+ gasPayment: this._gasPayment,
35
+ };
36
+ }
37
+ /**
38
+ * Get staking transaction type
39
+ *
40
+ * @return {TransactionType}
41
+ * @protected
42
+ */
43
+ get transactionType() {
44
+ return utils_1.default.getTransactionType(this._moveCallTx.function);
45
+ }
46
+ /**
47
+ * Create a new transaction for delegating coins ready to be signed and executed.
48
+ *
49
+ * @param {RequestAddDelegation} addDelegation
50
+ */
51
+ requestAddDelegation(addDelegation) {
52
+ this.validateAddress({ address: addDelegation.validatorAddress });
53
+ this.validateValue(bignumber_js_1.default(addDelegation.amount));
54
+ for (const coin of addDelegation.coins) {
55
+ this.validateSuiObjectRef(coin, 'addDelegation.coins');
56
+ }
57
+ this._addDelegationTx = addDelegation;
58
+ this._moveCallTx = {
59
+ package: constants_1.SUI_PACKAGE,
60
+ module: iface_1.ModulesNames.SuiSystem,
61
+ function: iface_1.MethodNames.RequestAddDelegationMulCoin,
62
+ typeArguments: [],
63
+ arguments: [constants_1.SUI_SYSTEM_STATE_OBJECT, addDelegation.coins, addDelegation.amount, addDelegation.validatorAddress],
64
+ };
65
+ return this;
66
+ }
67
+ /**
68
+ * Create a new transaction for withdrawing coins ready to be signed
69
+ *
70
+ * @param {RequestWithdrawDelegation} addDelegationTx
71
+ */
72
+ requestWithdrawDelegation(withdrawDelegation) {
73
+ this.validateSuiObjectRef(withdrawDelegation.delegation, 'withdrawDelegation.delegation');
74
+ this.validateSuiObjectRef(withdrawDelegation.stakedCoinId, 'withdrawDelegation.stakedCoinId');
75
+ this._withdrawDelegation = withdrawDelegation;
76
+ this._moveCallTx = {
77
+ package: constants_1.SUI_PACKAGE,
78
+ module: iface_1.ModulesNames.SuiSystem,
79
+ function: iface_1.MethodNames.RequestWithdrawDelegation,
80
+ typeArguments: [],
81
+ arguments: [constants_1.SUI_SYSTEM_STATE_OBJECT, withdrawDelegation.delegation, withdrawDelegation.stakedCoinId],
82
+ };
83
+ return this;
84
+ }
85
+ /**
86
+ * Create a new transaction for switching delegation ready to be signed
87
+ *
88
+ * @param {switchDelegation} switchDelegation
89
+ */
90
+ requestSwitchDelegation(switchDelegation) {
91
+ this.validateSuiObjectRef(switchDelegation.delegation, 'switchDelegation.delegation');
92
+ this.validateSuiObjectRef(switchDelegation.stakedCoinId, 'switchDelegation.stakedCoinId');
93
+ this.validateAddress({ address: switchDelegation.newValidatorAddress });
94
+ this._switchDelegation = switchDelegation;
95
+ this._moveCallTx = {
96
+ package: constants_1.SUI_PACKAGE,
97
+ module: iface_1.ModulesNames.SuiSystem,
98
+ function: iface_1.MethodNames.RequestSwitchDelegation,
99
+ typeArguments: [],
100
+ arguments: [
101
+ constants_1.SUI_SYSTEM_STATE_OBJECT,
102
+ switchDelegation.delegation,
103
+ switchDelegation.stakedCoinId,
104
+ switchDelegation.newValidatorAddress,
105
+ ],
106
+ };
107
+ return this;
108
+ }
109
+ /** @inheritdoc */
110
+ fromImplementation(rawTransaction) {
111
+ const tx = new stakingTransaction_1.StakingTransaction(this._coinConfig);
112
+ this.validateRawTransaction(rawTransaction);
113
+ tx.fromRawTransaction(rawTransaction);
114
+ this.initBuilder(tx);
115
+ return this.transaction;
116
+ }
117
+ /** @inheritdoc */
118
+ async buildImplementation() {
119
+ this.transaction.setSuiTransaction(this.buildSuiTransaction());
120
+ this.transaction.transactionType(this.transactionType);
121
+ if (this._signer) {
122
+ this.transaction.sign(this._signer);
123
+ }
124
+ this._signatures.forEach((signature) => {
125
+ this.transaction.addSignature(signature.publicKey, signature.signature);
126
+ });
127
+ this.transaction.loadInputsAndOutputs();
128
+ return this.transaction;
129
+ }
130
+ /**
131
+ * Initialize the transaction builder fields using the decoded transaction data
132
+ *
133
+ * @param {StakingTransaction} tx the transaction data
134
+ */
135
+ initBuilder(tx) {
136
+ var _a, _b;
137
+ this._transaction = tx;
138
+ if (tx.signature && tx.signature.length > 0) {
139
+ this._signatures = [tx.suiSignature];
140
+ }
141
+ const txData = tx.toJson();
142
+ this.gasBudget(txData.gasBudget);
143
+ this.sender(txData.sender);
144
+ this.gasPayment(txData.gasPayment);
145
+ const txDetails = txData.kind.Single;
146
+ if (txDetails.hasOwnProperty('Call')) {
147
+ switch (txDetails.Call.function) {
148
+ case iface_1.MethodNames.RequestAddDelegationMulCoin:
149
+ this.type(iface_1.SuiTransactionType.AddDelegation);
150
+ this.requestAddDelegation({
151
+ coins: txDetails.Call.arguments[1],
152
+ amount: Number(txDetails.Call.arguments[2]),
153
+ validatorAddress: txDetails.Call.arguments[3].toString(),
154
+ });
155
+ break;
156
+ case iface_1.MethodNames.RequestWithdrawDelegation:
157
+ this.type(iface_1.SuiTransactionType.WithdrawDelegation);
158
+ this.requestWithdrawDelegation({
159
+ delegation: txDetails.Call.arguments[1],
160
+ stakedCoinId: txDetails.Call.arguments[2],
161
+ amount: ((_a = this._withdrawDelegation) === null || _a === void 0 ? void 0 : _a.amount) || 0,
162
+ });
163
+ break;
164
+ case iface_1.MethodNames.RequestSwitchDelegation:
165
+ this.type(iface_1.SuiTransactionType.SwitchDelegation);
166
+ this.requestSwitchDelegation({
167
+ delegation: txDetails.Call.arguments[1],
168
+ stakedCoinId: txDetails.Call.arguments[2],
169
+ newValidatorAddress: txDetails.Call.arguments[3].toString(),
170
+ amount: ((_b = this._withdrawDelegation) === null || _b === void 0 ? void 0 : _b.amount) || 0,
171
+ });
172
+ break;
173
+ default:
174
+ throw new sdk_core_1.NotSupported(`${txDetails.Call.function} not supported`);
175
+ }
176
+ }
177
+ else {
178
+ throw new Error('Transaction type not supported: ' + txDetails);
179
+ }
180
+ }
181
+ /** @inheritdoc */
182
+ validateTransaction(tx) {
183
+ this.validateSchema({
184
+ type: this._type,
185
+ sender: this._sender,
186
+ tx: this._moveCallTx,
187
+ gasPrice: this._gasPrice,
188
+ gasBudget: this._gasBudget,
189
+ gasPayment: this._gasPayment,
190
+ });
191
+ }
192
+ /**
193
+ * Validate transaction schema
194
+ *
195
+ * @param {SuiTransaction<MoveCallTx>} tx
196
+ * @private
197
+ */
198
+ validateSchema(tx) {
199
+ const validationResult = txnSchema_1.SuiMoveCallTransactionSchema.validate(tx);
200
+ if (validationResult.error) {
201
+ throw new sdk_core_1.InvalidTransactionError(`Stake Builder Transaction validation failed: ${validationResult.error.message}`);
202
+ }
203
+ }
204
+ /**
205
+ * Build SuiTransaction
206
+ *
207
+ * @return {SuiTransaction<MoveCallTx>}
208
+ * @protected
209
+ */
210
+ buildSuiTransaction() {
211
+ this.validateTransaction(this._transaction);
212
+ return {
213
+ type: this._type,
214
+ sender: this._sender,
215
+ tx: this._moveCallTx,
216
+ gasBudget: this._gasBudget,
217
+ gasPrice: this._gasPrice,
218
+ gasPayment: this._gasPayment,
219
+ };
220
+ }
221
+ }
222
+ exports.StakingBuilder = StakingBuilder;
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3N0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhDQUF5RjtBQUN6RixtQ0FXaUI7QUFDakIsNkRBQTBEO0FBQzFELDJDQUFtRTtBQUNuRSwyQ0FBMkQ7QUFDM0QsNkRBQTBEO0FBRTFELGdFQUFxQztBQUNyQyxvREFBNEI7QUFFNUIsTUFBYSxjQUFlLFNBQVEsdUNBQThCO0lBTWhFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08scUJBQXFCO1FBQzdCLE9BQU87WUFDTCxJQUFJLEVBQUUsMEJBQWtCLENBQUMsYUFBYTtZQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTyxlQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQixDQUFDLGFBQW1DO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FB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RUQ7Ozs7O09BS0c7SUFDTyxtQkFBbUI7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN4QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDN0IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXRPRCx3Q0FzT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7XG4gIE1ldGhvZE5hbWVzLFxuICBNb2R1bGVzTmFtZXMsXG4gIE1vdmVDYWxsVHgsXG4gIE1vdmVDYWxsVHhEZXRhaWxzLFxuICBSZXF1ZXN0QWRkRGVsZWdhdGlvbixcbiAgUmVxdWVzdFN3aXRjaERlbGVnYXRpb24sXG4gIFJlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb24sXG4gIFN1aU9iamVjdFJlZixcbiAgU3VpVHJhbnNhY3Rpb24sXG4gIFN1aVRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBTVUlfUEFDS0FHRSwgU1VJX1NZU1RFTV9TVEFURV9PQkpFQ1QgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTdWlNb3ZlQ2FsbFRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuaW1wb3J0IHsgU3Rha2luZ1RyYW5zYWN0aW9uIH0gZnJvbSAnLi9zdGFraW5nVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFN0YWtpbmdCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyPE1vdmVDYWxsVHg+IHtcbiAgcHJvdGVjdGVkIF9tb3ZlQ2FsbFR4OiBNb3ZlQ2FsbFR4O1xuICBwcm90ZWN0ZWQgX2FkZERlbGVnYXRpb25UeDogUmVxdWVzdEFkZERlbGVnYXRpb247XG4gIHByb3RlY3RlZCBfd2l0aGRyYXdEZWxlZ2F0aW9uOiBSZXF1ZXN0V2l0aGRyYXdEZWxlZ2F0aW9uO1xuICBwcm90ZWN0ZWQgX3N3aXRjaERlbGVnYXRpb246IFJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBTdGFraW5nVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgTW92ZUNhbGwgdHJhbnNhY3Rpb24gcmVhZHkgdG8gYmUgc2lnbmVkIGFuZCBleGVjdXRlZC5cbiAgICpcbiAgICogQHJldHVybnMge1N1aVRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBTdWkgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vTXlzdGVuTGFicy9zdWkvYmxvYi9tYWluL2NyYXRlcy9zdWktZnJhbWV3b3JrL2RvY3Mvc3VpX3N5c3RlbS5tZCNmdW5jdGlvbi1yZXF1ZXN0X2FkZF9kZWxlZ2F0aW9uX211bF9jb2luXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTdGFrZVRyYW5zYWN0aW9uKCk6IFN1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogU3VpVHJhbnNhY3Rpb25UeXBlLkFkZERlbGVnYXRpb24sXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB0aGlzLl9tb3ZlQ2FsbFR4LFxuICAgICAgZ2FzQnVkZ2V0OiB0aGlzLl9nYXNCdWRnZXQsXG4gICAgICBnYXNQcmljZTogdGhpcy5fZ2FzUHJpY2UsXG4gICAgICBnYXNQYXltZW50OiB0aGlzLl9nYXNQYXltZW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YWtpbmcgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcmV0dXJuIHtUcmFuc2FjdGlvblR5cGV9XG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIHV0aWxzLmdldFRyYW5zYWN0aW9uVHlwZSh0aGlzLl9tb3ZlQ2FsbFR4LmZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIGRlbGVnYXRpbmcgY29pbnMgcmVhZHkgdG8gYmUgc2lnbmVkIGFuZCBleGVjdXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZXF1ZXN0QWRkRGVsZWdhdGlvbn0gYWRkRGVsZWdhdGlvblxuICAgKi9cbiAgcmVxdWVzdEFkZERlbGVnYXRpb24oYWRkRGVsZWdhdGlvbjogUmVxdWVzdEFkZERlbGVnYXRpb24pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IGFkZERlbGVnYXRpb24udmFsaWRhdG9yQWRkcmVzcyB9KTtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUoQmlnTnVtYmVyKGFkZERlbGVnYXRpb24uYW1vdW50KSk7XG4gICAgZm9yIChjb25zdCBjb2luIG9mIGFkZERlbGVnYXRpb24uY29pbnMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVTdWlPYmplY3RSZWYoY29pbiwgJ2FkZERlbGVnYXRpb24uY29pbnMnKTtcbiAgICB9XG4gICAgdGhpcy5fYWRkRGVsZWdhdGlvblR4ID0gYWRkRGVsZWdhdGlvbjtcbiAgICB0aGlzLl9tb3ZlQ2FsbFR4ID0ge1xuICAgICAgcGFja2FnZTogU1VJX1BBQ0tBR0UsXG4gICAgICBtb2R1bGU6IE1vZHVsZXNOYW1lcy5TdWlTeXN0ZW0sXG4gICAgICBmdW5jdGlvbjogTWV0aG9kTmFtZXMuUmVxdWVzdEFkZERlbGVnYXRpb25NdWxDb2luLFxuICAgICAgdHlwZUFyZ3VtZW50czogW10sXG4gICAgICBhcmd1bWVudHM6IFtTVUlfU1lTVEVNX1NUQVRFX09CSkVDVCwgYWRkRGVsZWdhdGlvbi5jb2lucywgYWRkRGVsZWdhdGlvbi5hbW91bnQsIGFkZERlbGVnYXRpb24udmFsaWRhdG9yQWRkcmVzc10sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIHdpdGhkcmF3aW5nIGNvaW5zIHJlYWR5IHRvIGJlIHNpZ25lZFxuICAgKlxuICAgKiBAcGFyYW0ge1JlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb259IGFkZERlbGVnYXRpb25UeFxuICAgKi9cbiAgcmVxdWVzdFdpdGhkcmF3RGVsZWdhdGlvbih3aXRoZHJhd0RlbGVnYXRpb246IFJlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb24pOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlU3VpT2JqZWN0UmVmKHdpdGhkcmF3RGVsZWdhdGlvbi5kZWxlZ2F0aW9uLCAnd2l0aGRyYXdEZWxlZ2F0aW9uLmRlbGVnYXRpb24nKTtcbiAgICB0aGlzLnZhbGlkYXRlU3VpT2JqZWN0UmVmKHdpdGhkcmF3RGVsZWdhdGlvbi5zdGFrZWRDb2luSWQsICd3aXRoZHJhd0RlbGVnYXRpb24uc3Rha2VkQ29pbklkJyk7XG5cbiAgICB0aGlzLl93aXRoZHJhd0RlbGVnYXRpb24gPSB3aXRoZHJhd0RlbGVnYXRpb247XG4gICAgdGhpcy5fbW92ZUNhbGxUeCA9IHtcbiAgICAgIHBhY2thZ2U6IFNVSV9QQUNLQUdFLFxuICAgICAgbW9kdWxlOiBNb2R1bGVzTmFtZXMuU3VpU3lzdGVtLFxuICAgICAgZnVuY3Rpb246IE1ldGhvZE5hbWVzLlJlcXVlc3RXaXRoZHJhd0RlbGVnYXRpb24sXG4gICAgICB0eXBlQXJndW1lbnRzOiBbXSxcbiAgICAgIGFyZ3VtZW50czogW1NVSV9TWVNURU1fU1RBVEVfT0JKRUNULCB3aXRoZHJhd0RlbGVnYXRpb24uZGVsZWdhdGlvbiwgd2l0aGRyYXdEZWxlZ2F0aW9uLnN0YWtlZENvaW5JZF0sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gZm9yIHN3aXRjaGluZyBkZWxlZ2F0aW9uIHJlYWR5IHRvIGJlIHNpZ25lZFxuICAgKlxuICAgKiBAcGFyYW0ge3N3aXRjaERlbGVnYXRpb259IHN3aXRjaERlbGVnYXRpb25cbiAgICovXG4gIHJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uKHN3aXRjaERlbGVnYXRpb246IFJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVN1aU9iamVjdFJlZihzd2l0Y2hEZWxlZ2F0aW9uLmRlbGVnYXRpb24sICdzd2l0Y2hEZWxlZ2F0aW9uLmRlbGVnYXRpb24nKTtcbiAgICB0aGlzLnZhbGlkYXRlU3VpT2JqZWN0UmVmKHN3aXRjaERlbGVnYXRpb24uc3Rha2VkQ29pbklkLCAnc3dpdGNoRGVsZWdhdGlvbi5zdGFrZWRDb2luSWQnKTtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHN3aXRjaERlbGVnYXRpb24ubmV3VmFsaWRhdG9yQWRkcmVzcyB9KTtcblxuICAgIHRoaXMuX3N3aXRjaERlbGVnYXRpb24gPSBzd2l0Y2hEZWxlZ2F0aW9uO1xuICAgIHRoaXMuX21vdmVDYWxsVHggPSB7XG4gICAgICBwYWNrYWdlOiBTVUlfUEFDS0FHRSxcbiAgICAgIG1vZHVsZTogTW9kdWxlc05hbWVzLlN1aVN5c3RlbSxcbiAgICAgIGZ1bmN0aW9uOiBNZXRob2ROYW1lcy5SZXF1ZXN0U3dpdGNoRGVsZWdhdGlvbixcbiAgICAgIHR5cGVBcmd1bWVudHM6IFtdLFxuICAgICAgYXJndW1lbnRzOiBbXG4gICAgICAgIFNVSV9TWVNURU1fU1RBVEVfT0JKRUNULFxuICAgICAgICBzd2l0Y2hEZWxlZ2F0aW9uLmRlbGVnYXRpb24sXG4gICAgICAgIHN3aXRjaERlbGVnYXRpb24uc3Rha2VkQ29pbklkLFxuICAgICAgICBzd2l0Y2hEZWxlZ2F0aW9uLm5ld1ZhbGlkYXRvckFkZHJlc3MsXG4gICAgICBdLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFN0YWtpbmdUcmFuc2FjdGlvbih0aGlzLl9jb2luQ29uZmlnKTtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHR4LmZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbjxNb3ZlQ2FsbFR4Pj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0U3VpVHJhbnNhY3Rpb24odGhpcy5idWlsZFN1aVRyYW5zYWN0aW9uKCkpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24udHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcblxuICAgIGlmICh0aGlzLl9zaWduZXIpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uc2lnbih0aGlzLl9zaWduZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25hdHVyZXMuZm9yRWFjaCgoc2lnbmF0dXJlKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUucHVibGljS2V5LCBzaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24ubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7U3Rha2luZ1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFN0YWtpbmdUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG5cbiAgICBpZiAodHguc2lnbmF0dXJlICYmIHR4LnNpZ25hdHVyZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzID0gW3R4LnN1aVNpZ25hdHVyZV07XG4gICAgfVxuXG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdGhpcy5nYXNCdWRnZXQodHhEYXRhLmdhc0J1ZGdldCk7XG4gICAgdGhpcy5zZW5kZXIodHhEYXRhLnNlbmRlcik7XG4gICAgdGhpcy5nYXNQYXltZW50KHR4RGF0YS5nYXNQYXltZW50KTtcblxuICAgIGNvbnN0IHR4RGV0YWlscyA9IHR4RGF0YS5raW5kLlNpbmdsZSBhcyBNb3ZlQ2FsbFR4RGV0YWlscztcbiAgICBpZiAodHhEZXRhaWxzLmhhc093blByb3BlcnR5KCdDYWxsJykpIHtcbiAgICAgIHN3aXRjaCAodHhEZXRhaWxzLkNhbGwuZnVuY3Rpb24pIHtcbiAgICAgICAgY2FzZSBNZXRob2ROYW1lcy5SZXF1ZXN0QWRkRGVsZWdhdGlvbk11bENvaW46XG4gICAgICAgICAgdGhpcy50eXBlKFN1aVRyYW5zYWN0aW9uVHlwZS5BZGREZWxlZ2F0aW9uKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RBZGREZWxlZ2F0aW9uKHtcbiAgICAgICAgICAgIGNvaW5zOiB0eERldGFpbHMuQ2FsbC5hcmd1bWVudHNbMV0gYXMgU3VpT2JqZWN0UmVmW10sXG4gICAgICAgICAgICBhbW91bnQ6IE51bWJlcih0eERldGFpbHMuQ2FsbC5hcmd1bWVudHNbMl0pLFxuICAgICAgICAgICAgdmFsaWRhdG9yQWRkcmVzczogdHhEZXRhaWxzLkNhbGwuYXJndW1lbnRzWzNdLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWV0aG9kTmFtZXMuUmVxdWVzdFdpdGhkcmF3RGVsZWdhdGlvbjpcbiAgICAgICAgICB0aGlzLnR5cGUoU3VpVHJhbnNhY3Rpb25UeXBlLldpdGhkcmF3RGVsZWdhdGlvbik7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0V2l0aGRyYXdEZWxlZ2F0aW9uKHtcbiAgICAgICAgICAgIGRlbGVnYXRpb246IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1sxXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBzdGFrZWRDb2luSWQ6IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1syXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBhbW91bnQ6IHRoaXMuX3dpdGhkcmF3RGVsZWdhdGlvbj8uYW1vdW50IHx8IDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWV0aG9kTmFtZXMuUmVxdWVzdFN3aXRjaERlbGVnYXRpb246XG4gICAgICAgICAgdGhpcy50eXBlKFN1aVRyYW5zYWN0aW9uVHlwZS5Td2l0Y2hEZWxlZ2F0aW9uKTtcbiAgICAgICAgICB0aGlzLnJlcXVlc3RTd2l0Y2hEZWxlZ2F0aW9uKHtcbiAgICAgICAgICAgIGRlbGVnYXRpb246IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1sxXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBzdGFrZWRDb2luSWQ6IHR4RGV0YWlscy5DYWxsLmFyZ3VtZW50c1syXSBhcyBTdWlPYmplY3RSZWYsXG4gICAgICAgICAgICBuZXdWYWxpZGF0b3JBZGRyZXNzOiB0eERldGFpbHMuQ2FsbC5hcmd1bWVudHNbM10udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGFtb3VudDogdGhpcy5fd2l0aGRyYXdEZWxlZ2F0aW9uPy5hbW91bnQgfHwgMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKGAke3R4RGV0YWlscy5DYWxsLmZ1bmN0aW9ufSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkOiAnICsgdHhEZXRhaWxzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0eDogVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHtcbiAgICAgIHR5cGU6IHRoaXMuX3R5cGUsXG4gICAgICBzZW5kZXI6IHRoaXMuX3NlbmRlcixcbiAgICAgIHR4OiB0aGlzLl9tb3ZlQ2FsbFR4LFxuICAgICAgZ2FzUHJpY2U6IHRoaXMuX2dhc1ByaWNlLFxuICAgICAgZ2FzQnVkZ2V0OiB0aGlzLl9nYXNCdWRnZXQsXG4gICAgICBnYXNQYXltZW50OiB0aGlzLl9nYXNQYXltZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRyYW5zYWN0aW9uIHNjaGVtYVxuICAgKlxuICAgKiBAcGFyYW0ge1N1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+fSB0eFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNjaGVtYSh0eDogU3VpVHJhbnNhY3Rpb248TW92ZUNhbGxUeD4pOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gU3VpTW92ZUNhbGxUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh0eCk7XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYFN0YWtlIEJ1aWxkZXIgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFN1aVRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEByZXR1cm4ge1N1aVRyYW5zYWN0aW9uPE1vdmVDYWxsVHg+fVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRTdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbjxNb3ZlQ2FsbFR4PiB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uKHRoaXMuX3RyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy5fdHlwZSxcbiAgICAgIHNlbmRlcjogdGhpcy5fc2VuZGVyLFxuICAgICAgdHg6IHRoaXMuX21vdmVDYWxsVHgsXG4gICAgICBnYXNCdWRnZXQ6IHRoaXMuX2dhc0J1ZGdldCxcbiAgICAgIGdhc1ByaWNlOiB0aGlzLl9nYXNQcmljZSxcbiAgICAgIGdhc1BheW1lbnQ6IHRoaXMuX2dhc1BheW1lbnQsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,67 @@
1
+ /// <reference types="node" />
2
+ import { BaseKey, PublicKey as BasePublicKey, Signature, TransactionType } from '@bitgo/sdk-core';
3
+ import { MoveCallTx, SuiTransaction, TransactionExplanation, TxData } from './iface';
4
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
5
+ import { Transaction } from './transaction';
6
+ export declare class StakingTransaction extends Transaction<MoveCallTx> {
7
+ constructor(_coinConfig: Readonly<CoinConfig>);
8
+ get suiTransaction(): SuiTransaction<MoveCallTx>;
9
+ setSuiTransaction(tx: SuiTransaction<MoveCallTx>): void;
10
+ addSignature(publicKey: BasePublicKey, signature: Buffer): void;
11
+ get suiSignature(): Signature;
12
+ /** @inheritdoc */
13
+ canSign(key: BaseKey): boolean;
14
+ /** @inheritdoc */
15
+ toBroadcastFormat(): string;
16
+ /** @inheritdoc */
17
+ toJson(): TxData;
18
+ /** @inheritDoc */
19
+ explainTransaction(): TransactionExplanation;
20
+ /**
21
+ * Set the transaction type.
22
+ *
23
+ * @param {TransactionType} transactionType The transaction type to be set.
24
+ */
25
+ transactionType(transactionType: TransactionType): void;
26
+ /**
27
+ * Load the input and output data on this transaction.
28
+ */
29
+ loadInputsAndOutputs(): void;
30
+ /**
31
+ * Sets this transaction payload
32
+ *
33
+ * @param {string} rawTransaction
34
+ */
35
+ fromRawTransaction(rawTransaction: string): void;
36
+ /**
37
+ * Helper function for serialize() to get the correct txData with transaction type
38
+ *
39
+ * @return {TxData}
40
+ */
41
+ getTxData(): TxData;
42
+ /**
43
+ * Returns a complete explanation for a transfer transaction
44
+ *
45
+ * @param {TxData} json The transaction data in json format
46
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
47
+ * @returns {TransactionExplanation}
48
+ */
49
+ explainAddDelegationTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
50
+ /**
51
+ * Returns a complete explanation for a withdraw delegation transaction
52
+ *
53
+ * @param {TxData} json The transaction data in json format
54
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
55
+ * @returns {TransactionExplanation}
56
+ */
57
+ explainWithdrawDelegationTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
58
+ /**
59
+ * Returns a complete explanation for a switch delegation transaction
60
+ *
61
+ * @param {TxData} json The transaction data in json format
62
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
63
+ * @returns {TransactionExplanation}
64
+ */
65
+ explainSwitchDelegationTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
66
+ }
67
+ //# sourceMappingURL=stakingTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingTransaction.d.ts","sourceRoot":"","sources":["../../../src/lib/stakingTransaction.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,OAAO,EAGP,SAAS,IAAI,aAAa,EAC1B,SAAS,EAET,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,UAAU,EAGV,cAAc,EAEd,sBAAsB,EACtB,MAAM,EAEP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,UAAU,CAAC;gBACjD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,CAE/C;IAED,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI;IAIvD,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAM/D,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAsDhB,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAuC5C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IA2D5B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWhD;;;;OAIG;IACH,SAAS,IAAI,MAAM;IAiEnB;;;;;;OAMG;IACH,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;IAkBhH;;;;;;OAMG;IACH,oCAAoC,CAClC,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,sBAAsB,GACxC,sBAAsB;IAgBzB;;;;;;OAMG;IACH,kCAAkC,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;CAepH"}