@bitgo-beta/sdk-coin-sui 1.0.1-beta.35 → 1.0.1-beta.37

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.
@@ -1,7 +1,22 @@
1
+ import { TransactionExplanation as BaseTransactionExplanation, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { SuiObjectRef } from './transaction';
3
+ export interface TransactionExplanation extends BaseTransactionExplanation {
4
+ type: TransactionType;
5
+ }
6
+ export interface PayTx {
7
+ coins: SuiObjectRef[];
8
+ recipients: string[];
9
+ amounts: number[];
10
+ }
1
11
  /**
2
12
  * The transaction data returned from the toJson() function of a transaction
3
13
  */
4
14
  export interface TxData {
5
- id: string;
15
+ id?: string;
16
+ gasBudget: number;
17
+ gasPrice: number;
18
+ payTx: PayTx;
19
+ sender: string;
20
+ gasPayment: SuiObjectRef;
6
21
  }
7
22
  //# sourceMappingURL=iface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;CACZ"}
1
+ {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,0BAA0B,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,YAAY,CAAC;CAC1B"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSB0cmFuc2FjdGlvbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIHRvSnNvbigpIGZ1bmN0aW9uIG9mIGEgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeERhdGEge1xuICBpZDogc3RyaW5nO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBTdWlPYmplY3RSZWYgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGF5VHgge1xuICBjb2luczogU3VpT2JqZWN0UmVmW107XG4gIHJlY2lwaWVudHM6IHN0cmluZ1tdO1xuICBhbW91bnRzOiBudW1iZXJbXTtcbn1cblxuLyoqXG4gKiBUaGUgdHJhbnNhY3Rpb24gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSB0b0pzb24oKSBmdW5jdGlvbiBvZiBhIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhEYXRhIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGdhc0J1ZGdldDogbnVtYmVyO1xuICBnYXNQcmljZTogbnVtYmVyO1xuICBwYXlUeDogUGF5VHg7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBnYXNQYXltZW50OiBTdWlPYmplY3RSZWY7XG59XG4iXX0=
@@ -1,8 +1,65 @@
1
- import { BaseKey, BaseTransaction } from '@bitgo-beta/sdk-core';
2
- import { TxData } from './iface';
1
+ import { BaseKey, BaseTransaction, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { PayTx, TransactionExplanation, TxData } from './iface';
3
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
4
+ export declare const TYPE_TAG: number[];
5
+ export declare type SuiObjectRef = {
6
+ /** Hex code as string representing the object id */
7
+ objectId: string;
8
+ /** Object version */
9
+ version: number;
10
+ /** Base64 string representing the object digest */
11
+ digest: string;
12
+ };
13
+ export declare type SuiTransaction = {
14
+ sender: string;
15
+ payTx: PayTx;
16
+ gasBudget: number;
17
+ gasPrice: number;
18
+ gasPayment: SuiObjectRef;
19
+ };
3
20
  export declare class Transaction extends BaseTransaction {
21
+ private _suiTransaction;
22
+ private _signature;
23
+ private _publicKey;
24
+ constructor(_coinConfig: Readonly<CoinConfig>);
25
+ get suiTransaction(): SuiTransaction;
26
+ setSuiTransaction(value: SuiTransaction): void;
27
+ /** @inheritDoc **/
28
+ get id(): string;
29
+ getInputCoins(): SuiObjectRef[];
30
+ /** @inheritdoc */
4
31
  canSign(key: BaseKey): boolean;
32
+ /** @inheritdoc */
5
33
  toBroadcastFormat(): string;
34
+ /** @inheritdoc */
6
35
  toJson(): TxData;
36
+ /** @inheritDoc */
37
+ explainTransaction(): TransactionExplanation;
38
+ /**
39
+ * Set the transaction type.
40
+ *
41
+ * @param {TransactionType} transactionType The transaction type to be set.
42
+ */
43
+ transactionType(transactionType: TransactionType): void;
44
+ /**
45
+ * Load the input and output data on this transaction.
46
+ */
47
+ loadInputsAndOutputs(): void;
48
+ /**
49
+ * Sets this transaction payload
50
+ *
51
+ * @param rawTransaction
52
+ */
53
+ fromRawTransaction(rawTransaction: string): void;
54
+ serialize(): string;
55
+ static deserializeSuiTransaction(serializedHex: string): SuiTransaction;
56
+ static updateProperTransactionData(k: any): void;
57
+ /**
58
+ * Returns a complete explanation for a transfer transaction
59
+ * @param {TxData} json The transaction data in json format
60
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
61
+ * @returns {TransactionExplanation}
62
+ */
63
+ explainTransferTransaction(json: TxData, explanationResult: TransactionExplanation): TransactionExplanation;
7
64
  }
8
65
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,iBAAiB,IAAI,MAAM;IAI3B,MAAM,IAAI,MAAM;CAGjB"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAKf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AA8E7D,eAAO,MAAM,QAAQ,UAA8D,CAAC;AAEpF,oBAAY,YAAY,GAAG;IACzB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,YAAY,CAAC;CAC1B,CAAC;AAEF,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,UAAU,CAAC;gBAEP,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAI9C,mBAAmB;IACnB,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,aAAa,IAAI,YAAY,EAAE;IAI/B,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAehB,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;IAwB5C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAIvD;;OAEG;IACH,oBAAoB,IAAI,IAAI;IA8B5B;;;;OAIG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWhD,SAAS,IAAI,MAAM;IAmCnB,MAAM,CAAC,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc;IAevE,MAAM,CAAC,2BAA2B,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI;IAgBhD;;;;;OAKG;IACH,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,GAAG,sBAAsB;CAgB5G"}
@@ -1,17 +1,289 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
2
24
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Transaction = void 0;
25
+ exports.Transaction = exports.TYPE_TAG = void 0;
4
26
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
27
+ const utils_1 = __importDefault(require("./utils"));
28
+ const bcs_1 = require("@mysten/bcs");
29
+ const sha3 = __importStar(require("js-sha3"));
30
+ bcs_1.bcs
31
+ .registerVectorType('vector<u8>', 'u8')
32
+ .registerVectorType('vector<u64>', 'u64')
33
+ .registerVectorType('vector<u128>', 'u128')
34
+ .registerVectorType('vector<vector<u8>>', 'vector<u8>')
35
+ .registerAddressType('ObjectID', 20)
36
+ .registerAddressType('SuiAddress', 20)
37
+ .registerAddressType('address', 20)
38
+ .registerType('utf8string', (writer, str) => {
39
+ const bytes = Array.from(Buffer.from(str));
40
+ return writer.writeVec(bytes, (writer, el) => writer.write8(el));
41
+ }, (reader) => {
42
+ const bytes = reader.readVec((reader) => reader.read8());
43
+ return Buffer.from(bytes).toString('utf-8');
44
+ })
45
+ .registerType('ObjectDigest', (writer, str) => {
46
+ const bytes = Array.from(bcs_1.decodeStr(str, 'base64'));
47
+ return writer.writeVec(bytes, (writer, el) => writer.write8(el));
48
+ }, (reader) => {
49
+ const bytes = reader.readVec((reader) => reader.read8());
50
+ return bcs_1.encodeStr(new Uint8Array(bytes), 'base64');
51
+ });
52
+ bcs_1.bcs.registerStructType('SuiObjectRef', {
53
+ objectId: 'ObjectID',
54
+ version: 'u64',
55
+ digest: 'ObjectDigest',
56
+ });
57
+ bcs_1.bcs
58
+ .registerVectorType('vector<SuiAddress>', 'SuiAddress')
59
+ .registerVectorType('vector<SuiObjectRef>', 'SuiObjectRef')
60
+ .registerStructType('PayTx', {
61
+ coins: 'vector<SuiObjectRef>',
62
+ recipients: 'vector<SuiAddress>',
63
+ amounts: 'vector<u64>',
64
+ });
65
+ bcs_1.bcs.registerEnumType('Transaction', {
66
+ TransferObject: 'TransferObjectTx',
67
+ Publish: 'PublishTx',
68
+ Call: 'MoveCallTx',
69
+ TransferSui: 'TransferSuiTx',
70
+ Pay: 'PayTx',
71
+ });
72
+ bcs_1.bcs.registerVectorType('vector<Transaction>', 'Transaction').registerEnumType('TransactionKind', {
73
+ Single: 'Transaction',
74
+ Batch: 'vector<Transaction>',
75
+ });
76
+ bcs_1.bcs.registerStructType('TransactionData', {
77
+ kind: 'TransactionKind',
78
+ sender: 'SuiAddress',
79
+ gasPayment: 'SuiObjectRef',
80
+ gasPrice: 'u64',
81
+ gasBudget: 'u64',
82
+ });
83
+ bcs_1.bcs.registerStructType('SenderSignedData', {
84
+ data: 'TransactionData',
85
+ txSignature: 'vector<u8>',
86
+ });
87
+ const UNAVAILABLE_TEXT = 'UNAVAILABLE';
88
+ exports.TYPE_TAG = Array.from('TransactionData::').map((e) => e.charCodeAt(0));
5
89
  class Transaction extends sdk_core_1.BaseTransaction {
90
+ constructor(_coinConfig) {
91
+ super(_coinConfig);
92
+ }
93
+ get suiTransaction() {
94
+ return this._suiTransaction;
95
+ }
96
+ setSuiTransaction(value) {
97
+ this._suiTransaction = value;
98
+ }
99
+ /** @inheritDoc **/
100
+ get id() {
101
+ return this._id || UNAVAILABLE_TEXT;
102
+ }
103
+ getInputCoins() {
104
+ return this.suiTransaction.payTx.coins;
105
+ }
106
+ /** @inheritdoc */
6
107
  canSign(key) {
7
- return false;
108
+ return true;
8
109
  }
110
+ /** @inheritdoc */
9
111
  toBroadcastFormat() {
10
- throw new Error('Method not implemented.');
112
+ if (!this._suiTransaction) {
113
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction');
114
+ }
115
+ return this.serialize();
11
116
  }
117
+ /** @inheritdoc */
12
118
  toJson() {
13
- throw new Error('Method not implemented.');
119
+ if (!this._suiTransaction) {
120
+ throw new sdk_core_1.ParseTransactionError('Empty transaction');
121
+ }
122
+ return {
123
+ id: this._id,
124
+ gasBudget: this._suiTransaction.gasBudget,
125
+ gasPrice: this._suiTransaction.gasPrice,
126
+ payTx: this._suiTransaction.payTx,
127
+ sender: this._suiTransaction.sender,
128
+ gasPayment: this._suiTransaction.gasPayment,
129
+ };
130
+ }
131
+ /** @inheritDoc */
132
+ explainTransaction() {
133
+ const result = this.toJson();
134
+ const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'type'];
135
+ const outputs = [];
136
+ const explanationResult = {
137
+ displayOrder,
138
+ id: this.id,
139
+ outputs,
140
+ outputAmount: '0',
141
+ changeOutputs: [],
142
+ changeAmount: '0',
143
+ fee: { fee: this.suiTransaction.gasBudget.toString() },
144
+ type: this.type,
145
+ };
146
+ switch (this.type) {
147
+ case sdk_core_1.TransactionType.Send:
148
+ return this.explainTransferTransaction(result, explanationResult);
149
+ default:
150
+ throw new sdk_core_1.InvalidTransactionError('Transaction type not supported');
151
+ }
152
+ }
153
+ /**
154
+ * Set the transaction type.
155
+ *
156
+ * @param {TransactionType} transactionType The transaction type to be set.
157
+ */
158
+ transactionType(transactionType) {
159
+ this._type = transactionType;
160
+ }
161
+ /**
162
+ * Load the input and output data on this transaction.
163
+ */
164
+ loadInputsAndOutputs() {
165
+ if (!this.suiTransaction) {
166
+ return;
167
+ }
168
+ const tx = this.suiTransaction;
169
+ const payTx = tx.payTx;
170
+ const recipients = payTx.recipients;
171
+ const amounts = payTx.amounts;
172
+ if (recipients.length !== amounts.length) {
173
+ throw new Error('The length of recipients does not equal to the length of amounts');
174
+ }
175
+ const outputs = recipients.map((recipient, index) => ({
176
+ address: recipient,
177
+ value: amounts[index].toString(),
178
+ coin: this._coinConfig.name,
179
+ }));
180
+ const totalAmount = amounts.reduce((accumulator, current) => accumulator + current, 0);
181
+ this._inputs = [
182
+ {
183
+ address: tx.sender,
184
+ value: totalAmount.toString(),
185
+ coin: this._coinConfig.name,
186
+ },
187
+ ];
188
+ this._outputs = outputs;
189
+ }
190
+ /**
191
+ * Sets this transaction payload
192
+ *
193
+ * @param rawTransaction
194
+ */
195
+ fromRawTransaction(rawTransaction) {
196
+ try {
197
+ utils_1.default.isValidRawTransaction(rawTransaction);
198
+ this._suiTransaction = Transaction.deserializeSuiTransaction(rawTransaction);
199
+ this._type = sdk_core_1.TransactionType.Send;
200
+ this.loadInputsAndOutputs();
201
+ }
202
+ catch (e) {
203
+ throw e;
204
+ }
205
+ }
206
+ serialize() {
207
+ const suiTx = this._suiTransaction;
208
+ const txData = {
209
+ kind: { Single: { Pay: suiTx.payTx } },
210
+ gasPayment: suiTx.gasPayment,
211
+ gasPrice: suiTx.gasPrice,
212
+ gasBudget: suiTx.gasBudget,
213
+ sender: suiTx.sender,
214
+ };
215
+ const dataBytes = bcs_1.bcs.ser('TransactionData', txData).toBytes();
216
+ const serialized = new Uint8Array(exports.TYPE_TAG.length + dataBytes.length);
217
+ serialized.set(exports.TYPE_TAG);
218
+ serialized.set(dataBytes, exports.TYPE_TAG.length);
219
+ if (this.signature.length > 0) {
220
+ const scheme = new Uint8Array([0x00]);
221
+ const signatureBuffer = Buffer.concat([
222
+ scheme,
223
+ Buffer.from(this._signature, 'hex'),
224
+ Buffer.from(this._publicKey, 'hex'),
225
+ ]);
226
+ const signedTx = {
227
+ data: txData,
228
+ txSignature: signatureBuffer,
229
+ };
230
+ const serialized = bcs_1.bcs.ser('SenderSignedData', signedTx).toBytes();
231
+ const typeTag = Array.from('SenderSignedData::').map((e) => e.charCodeAt(0));
232
+ const serializedFinal = new Uint8Array(typeTag.length + serialized.length);
233
+ serializedFinal.set(typeTag);
234
+ serializedFinal.set(serialized, typeTag.length);
235
+ this._id = Buffer.from(sha3.sha3_256(serializedFinal), 'hex').toString('base64');
236
+ }
237
+ return Buffer.from(serialized).toString('hex');
238
+ }
239
+ static deserializeSuiTransaction(serializedHex) {
240
+ const data = Buffer.from(serializedHex, 'hex');
241
+ const trimmedData = new Uint8Array(data.subarray(exports.TYPE_TAG.length));
242
+ const k = bcs_1.bcs.de('TransactionData', trimmedData);
243
+ this.updateProperTransactionData(k);
244
+ return {
245
+ sender: k.sender,
246
+ payTx: k.kind.Single.Pay,
247
+ gasBudget: k.gasBudget.toNumber(),
248
+ gasPrice: k.gasPrice.toNumber(),
249
+ gasPayment: k.gasPayment,
250
+ };
251
+ }
252
+ static updateProperTransactionData(k) {
253
+ // bcs deserialized number into Big Number and removed '0x' prefix from addresses, needs to convert them back
254
+ k.kind.Single.Pay.amounts = k.kind.Single.Pay.amounts.map((amount) => amount.toNumber());
255
+ k.kind.Single.Pay.coins = k.kind.Single.Pay.coins.map((coin) => {
256
+ return {
257
+ objectId: utils_1.default.normalizeHexId(coin.objectId),
258
+ version: coin.version.toNumber(),
259
+ digest: coin.digest,
260
+ };
261
+ });
262
+ k.kind.Single.Pay.recipients = k.kind.Single.Pay.recipients.map((recipient) => utils_1.default.normalizeHexId(recipient));
263
+ k.gasPayment.objectId = utils_1.default.normalizeHexId(k.gasPayment.objectId);
264
+ k.gasPayment.version = k.gasPayment.version.toNumber();
265
+ k.sender = utils_1.default.normalizeHexId(k.sender);
266
+ }
267
+ /**
268
+ * Returns a complete explanation for a transfer transaction
269
+ * @param {TxData} json The transaction data in json format
270
+ * @param {TransactionExplanation} explanationResult The transaction explanation to be completed
271
+ * @returns {TransactionExplanation}
272
+ */
273
+ explainTransferTransaction(json, explanationResult) {
274
+ const recipients = this.suiTransaction.payTx.recipients;
275
+ const amounts = this.suiTransaction.payTx.amounts;
276
+ const outputs = recipients.map((recipient, index) => ({
277
+ address: recipient,
278
+ amount: amounts[index].toString(),
279
+ }));
280
+ const outputAmount = amounts.reduce((accumulator, current) => accumulator + current, 0);
281
+ return {
282
+ ...explanationResult,
283
+ outputAmount,
284
+ outputs,
285
+ };
14
286
  }
15
287
  }
16
288
  exports.Transaction = Transaction;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRTtBQUdoRSxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUM5QyxPQUFPLENBQUMsR0FBWTtRQUNsQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE1BQU07UUFDSixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBWkQsa0NBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgY2FuU2lnbihrZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBUeERhdGEge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxufVxuIl19
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFROEI7QUFHOUIsb0RBQTRCO0FBQzVCLHFDQUF3RDtBQUN4RCw4Q0FBZ0M7QUFFaEMsU0FBRztLQUNBLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7S0FDdEMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztLQUN4QyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO0tBQzFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLFlBQVksQ0FBQztLQUN0RCxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0tBQ25DLG1CQUFtQixDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7S0FDckMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztLQUNsQyxZQUFZLENBQ1gsWUFBWSxFQUNaLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ2QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDLEVBQ0QsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUNULE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMs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QyxjQUFjLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxDQUFDLENBQUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDBCQUEwQixDQUFDLElBQVksRUFBRSxpQkFBeUM7UUFDaEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUVsRCxNQUFNLE9BQU8sR0FBMkIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsT0FBTyxFQUFFLFNBQVM7WUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUU7U0FDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4RixPQUFPO1lBQ0wsR0FBRyxpQkFBaUI7WUFDcEIsWUFBWTtZQUNaLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbE9ELGtDQWtPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbixcbiAgRW50cnksXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFBheVR4LCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGJjcywgZGVjb2RlU3RyLCBlbmNvZGVTdHIgfSBmcm9tICdAbXlzdGVuL2Jjcyc7XG5pbXBvcnQgKiBhcyBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuXG5iY3NcbiAgLnJlZ2lzdGVyVmVjdG9yVHlwZSgndmVjdG9yPHU4PicsICd1OCcpXG4gIC5yZWdpc3RlclZlY3RvclR5cGUoJ3ZlY3Rvcjx1NjQ+JywgJ3U2NCcpXG4gIC5yZWdpc3RlclZlY3RvclR5cGUoJ3ZlY3Rvcjx1MTI4PicsICd1MTI4JylcbiAgLnJlZ2lzdGVyVmVjdG9yVHlwZSgndmVjdG9yPHZlY3Rvcjx1OD4+JywgJ3ZlY3Rvcjx1OD4nKVxuICAucmVnaXN0ZXJBZGRyZXNzVHlwZSgnT2JqZWN0SUQnLCAyMClcbiAgLnJlZ2lzdGVyQWRkcmVzc1R5cGUoJ1N1aUFkZHJlc3MnLCAyMClcbiAgLnJlZ2lzdGVyQWRkcmVzc1R5cGUoJ2FkZHJlc3MnLCAyMClcbiAgLnJlZ2lzdGVyVHlwZShcbiAgICAndXRmOHN0cmluZycsXG4gICAgKHdyaXRlciwgc3RyKSA9PiB7XG4gICAgICBjb25zdCBieXRlcyA9IEFycmF5LmZyb20oQnVmZmVyLmZyb20oc3RyKSk7XG4gICAgICByZXR1cm4gd3JpdGVyLndyaXRlVmVjKGJ5dGVzLCAod3JpdGVyLCBlbCkgPT4gd3JpdGVyLndyaXRlOChlbCkpO1xuICAgIH0sXG4gICAgKHJlYWRlcikgPT4ge1xuICAgICAgY29uc3QgYnl0ZXMgPSByZWFkZXIucmVhZFZlYygocmVhZGVyKSA9PiByZWFkZXIucmVhZDgoKSk7XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgIH1cbiAgKVxuICAucmVnaXN0ZXJUeXBlKFxuICAgICdPYmplY3REaWdlc3QnLFxuICAgICh3cml0ZXIsIHN0cikgPT4ge1xuICAgICAgY29uc3QgYnl0ZXMgPSBBcnJheS5mcm9tKGRlY29kZVN0cihzdHIsICdiYXNlNjQnKSk7XG4gICAgICByZXR1cm4gd3JpdGVyLndyaXRlVmVjKGJ5dGVzLCAod3JpdGVyLCBlbCkgPT4gd3JpdGVyLndyaXRlOChlbCkpO1xuICAgIH0sXG4gICAgKHJlYWRlcikgPT4ge1xuICAgICAgY29uc3QgYnl0ZXMgPSByZWFkZXIucmVhZFZlYygocmVhZGVyKSA9PiByZWFkZXIucmVhZDgoKSk7XG4gICAgICByZXR1cm4gZW5jb2RlU3RyKG5ldyBVaW50OEFycmF5KGJ5dGVzKSwgJ2Jhc2U2NCcpO1xuICAgIH1cbiAgKTtcblxuYmNzLnJlZ2lzdGVyU3RydWN0VHlwZSgnU3VpT2JqZWN0UmVmJywge1xuICBvYmplY3RJZDogJ09iamVjdElEJyxcbiAgdmVyc2lvbjogJ3U2NCcsXG4gIGRpZ2VzdDogJ09iamVjdERpZ2VzdCcsXG59KTtcblxuYmNzXG4gIC5yZWdpc3RlclZlY3RvclR5cGUoJ3ZlY3RvcjxTdWlBZGRyZXNzPicsICdTdWlBZGRyZXNzJylcbiAgLnJlZ2lzdGVyVmVjdG9yVHlwZSgndmVjdG9yPFN1aU9iamVjdFJlZj4nLCAnU3VpT2JqZWN0UmVmJylcbiAgLnJlZ2lzdGVyU3RydWN0VHlwZSgnUGF5VHgnLCB7XG4gICAgY29pbnM6ICd2ZWN0b3I8U3VpT2JqZWN0UmVmPicsXG4gICAgcmVjaXBpZW50czogJ3ZlY3RvcjxTdWlBZGRyZXNzPicsXG4gICAgYW1vdW50czogJ3ZlY3Rvcjx1NjQ+JyxcbiAgfSk7XG5cbmJjcy5yZWdpc3RlckVudW1UeXBlKCdUcmFuc2FjdGlvbicsIHtcbiAgVHJhbnNmZXJPYmplY3Q6ICdUcmFuc2Zlck9iamVjdFR4JyxcbiAgUHVibGlzaDogJ1B1Ymxpc2hUeCcsXG4gIENhbGw6ICdNb3ZlQ2FsbFR4JyxcbiAgVHJhbnNmZXJTdWk6ICdUcmFuc2ZlclN1aVR4JyxcbiAgUGF5OiAnUGF5VHgnLFxufSk7XG5cbmJjcy5yZWdpc3RlclZlY3RvclR5cGUoJ3ZlY3RvcjxUcmFuc2FjdGlvbj4nLCAnVHJhbnNhY3Rpb24nKS5yZWdpc3RlckVudW1UeXBlKCdUcmFuc2FjdGlvbktpbmQnLCB7XG4gIFNpbmdsZTogJ1RyYW5zYWN0aW9uJyxcbiAgQmF0Y2g6ICd2ZWN0b3I8VHJhbnNhY3Rpb24+Jyxcbn0pO1xuXG5iY3MucmVnaXN0ZXJTdHJ1Y3RUeXBlKCdUcmFuc2FjdGlvbkRhdGEnLCB7XG4gIGtpbmQ6ICdUcmFuc2FjdGlvbktpbmQnLFxuICBzZW5kZXI6ICdTdWlBZGRyZXNzJyxcbiAgZ2FzUGF5bWVudDogJ1N1aU9iamVjdFJlZicsXG4gIGdhc1ByaWNlOiAndTY0JyxcbiAgZ2FzQnVkZ2V0OiAndTY0Jyxcbn0pO1xuXG5iY3MucmVnaXN0ZXJTdHJ1Y3RUeXBlKCdTZW5kZXJTaWduZWREYXRhJywge1xuICBkYXRhOiAnVHJhbnNhY3Rpb25EYXRhJyxcbiAgdHhTaWduYXR1cmU6ICd2ZWN0b3I8dTg+Jyxcbn0pO1xuXG5jb25zdCBVTkFWQUlMQUJMRV9URVhUID0gJ1VOQVZBSUxBQkxFJztcbmV4cG9ydCBjb25zdCBUWVBFX1RBRyA9IEFycmF5LmZyb20oJ1RyYW5zYWN0aW9uRGF0YTo6JykubWFwKChlKSA9PiBlLmNoYXJDb2RlQXQoMCkpO1xuXG5leHBvcnQgdHlwZSBTdWlPYmplY3RSZWYgPSB7XG4gIC8qKiBIZXggY29kZSBhcyBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QgaWQgKi9cbiAgb2JqZWN0SWQ6IHN0cmluZztcbiAgLyoqIE9iamVjdCB2ZXJzaW9uICovXG4gIHZlcnNpb246IG51bWJlcjtcbiAgLyoqIEJhc2U2NCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBvYmplY3QgZGlnZXN0ICovXG4gIGRpZ2VzdDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VpVHJhbnNhY3Rpb24gPSB7XG4gIHNlbmRlcjogc3RyaW5nO1xuICBwYXlUeDogUGF5VHg7XG4gIGdhc0J1ZGdldDogbnVtYmVyO1xuICBnYXNQcmljZTogbnVtYmVyO1xuICBnYXNQYXltZW50OiBTdWlPYmplY3RSZWY7XG59O1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9zdWlUcmFuc2FjdGlvbjogU3VpVHJhbnNhY3Rpb247XG4gIHByaXZhdGUgX3NpZ25hdHVyZTtcbiAgcHJpdmF0ZSBfcHVibGljS2V5O1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIGdldCBzdWlUcmFuc2FjdGlvbigpOiBTdWlUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1aVRyYW5zYWN0aW9uO1xuICB9XG5cbiAgc2V0U3VpVHJhbnNhY3Rpb24odmFsdWU6IFN1aVRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fc3VpVHJhbnNhY3Rpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lkIHx8IFVOQVZBSUxBQkxFX1RFWFQ7XG4gIH1cblxuICBnZXRJbnB1dENvaW5zKCk6IFN1aU9iamVjdFJlZltdIHtcbiAgICByZXR1cm4gdGhpcy5zdWlUcmFuc2FjdGlvbi5wYXlUeC5jb2lucztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9zdWlUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXJpYWxpemUoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBpZiAoIXRoaXMuX3N1aVRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQsXG4gICAgICBnYXNCdWRnZXQ6IHRoaXMuX3N1aVRyYW5zYWN0aW9uLmdhc0J1ZGdldCxcbiAgICAgIGdhc1ByaWNlOiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5nYXNQcmljZSxcbiAgICAgIHBheVR4OiB0aGlzLl9zdWlUcmFuc2FjdGlvbi5wYXlUeCxcbiAgICAgIHNlbmRlcjogdGhpcy5fc3VpVHJhbnNhY3Rpb24uc2VuZGVyLFxuICAgICAgZ2FzUGF5bWVudDogdGhpcy5fc3VpVHJhbnNhY3Rpb24uZ2FzUGF5bWVudCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRvSnNvbigpO1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3R5cGUnXTtcbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW107XG5cbiAgICBjb25zdCBleHBsYW5hdGlvblJlc3VsdDogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiA9IHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogJzAnLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuc3VpVHJhbnNhY3Rpb24uZ2FzQnVkZ2V0LnRvU3RyaW5nKCkgfSxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICB9O1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGxhaW5UcmFuc2ZlclRyYW5zYWN0aW9uKHJlc3VsdCwgZXhwbGFuYXRpb25SZXN1bHQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgaW5wdXQgYW5kIG91dHB1dCBkYXRhIG9uIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBsb2FkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3VpVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuc3VpVHJhbnNhY3Rpb247XG4gICAgY29uc3QgcGF5VHggPSB0eC5wYXlUeDtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcGF5VHgucmVjaXBpZW50cztcbiAgICBjb25zdCBhbW91bnRzID0gcGF5VHguYW1vdW50cztcbiAgICBpZiAocmVjaXBpZW50cy5sZW5ndGggIT09IGFtb3VudHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsZW5ndGggb2YgcmVjaXBpZW50cyBkb2VzIG5vdCBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIGFtb3VudHMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzOiBFbnRyeVtdID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCwgaW5kZXgpID0+ICh7XG4gICAgICBhZGRyZXNzOiByZWNpcGllbnQsXG4gICAgICB2YWx1ZTogYW1vdW50c1tpbmRleF0udG9TdHJpbmcoKSxcbiAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB0b3RhbEFtb3VudCA9IGFtb3VudHMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudCkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50LCAwKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHR4LnNlbmRlcixcbiAgICAgICAgdmFsdWU6IHRvdGFsQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gb3V0cHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoaXMgdHJhbnNhY3Rpb24gcGF5bG9hZFxuICAgKlxuICAgKiBAcGFyYW0gcmF3VHJhbnNhY3Rpb25cbiAgICovXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgICB0aGlzLl9zdWlUcmFuc2FjdGlvbiA9IFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplU3VpVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3VpVHggPSB0aGlzLl9zdWlUcmFuc2FjdGlvbjtcbiAgICBjb25zdCB0eERhdGEgPSB7XG4gICAgICBraW5kOiB7IFNpbmdsZTogeyBQYXk6IHN1aVR4LnBheVR4IH0gfSxcbiAgICAgIGdhc1BheW1lbnQ6IHN1aVR4Lmdhc1BheW1lbnQsXG4gICAgICBnYXNQcmljZTogc3VpVHguZ2FzUHJpY2UsXG4gICAgICBnYXNCdWRnZXQ6IHN1aVR4Lmdhc0J1ZGdldCxcbiAgICAgIHNlbmRlcjogc3VpVHguc2VuZGVyLFxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhQnl0ZXMgPSBiY3Muc2VyKCdUcmFuc2FjdGlvbkRhdGEnLCB0eERhdGEpLnRvQnl0ZXMoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkID0gbmV3IFVpbnQ4QXJyYXkoVFlQRV9UQUcubGVuZ3RoICsgZGF0YUJ5dGVzLmxlbmd0aCk7XG4gICAgc2VyaWFsaXplZC5zZXQoVFlQRV9UQUcpO1xuICAgIHNlcmlhbGl6ZWQuc2V0KGRhdGFCeXRlcywgVFlQRV9UQUcubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2NoZW1lID0gbmV3IFVpbnQ4QXJyYXkoWzB4MDBdKTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBzY2hlbWUsXG4gICAgICAgIEJ1ZmZlci5mcm9tKHRoaXMuX3NpZ25hdHVyZSwgJ2hleCcpLFxuICAgICAgICBCdWZmZXIuZnJvbSh0aGlzLl9wdWJsaWNLZXksICdoZXgnKSxcbiAgICAgIF0pO1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSB7XG4gICAgICAgIGRhdGE6IHR4RGF0YSxcbiAgICAgICAgdHhTaWduYXR1cmU6IHNpZ25hdHVyZUJ1ZmZlcixcbiAgICAgIH07XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gYmNzLnNlcignU2VuZGVyU2lnbmVkRGF0YScsIHNpZ25lZFR4KS50b0J5dGVzKCk7XG4gICAgICBjb25zdCB0eXBlVGFnID0gQXJyYXkuZnJvbSgnU2VuZGVyU2lnbmVkRGF0YTo6JykubWFwKChlKSA9PiBlLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgY29uc3Qgc2VyaWFsaXplZEZpbmFsID0gbmV3IFVpbnQ4QXJyYXkodHlwZVRhZy5sZW5ndGggKyBzZXJpYWxpemVkLmxlbmd0aCk7XG4gICAgICBzZXJpYWxpemVkRmluYWwuc2V0KHR5cGVUYWcpO1xuICAgICAgc2VyaWFsaXplZEZpbmFsLnNldChzZXJpYWxpemVkLCB0eXBlVGFnLmxlbmd0aCk7XG4gICAgICB0aGlzLl9pZCA9IEJ1ZmZlci5mcm9tKHNoYTMuc2hhM18yNTYoc2VyaWFsaXplZEZpbmFsKSwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZVN1aVRyYW5zYWN0aW9uKHNlcmlhbGl6ZWRIZXg6IHN0cmluZyk6IFN1aVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmZyb20oc2VyaWFsaXplZEhleCwgJ2hleCcpO1xuICAgIGNvbnN0IHRyaW1tZWREYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5zdWJhcnJheShUWVBFX1RBRy5sZW5ndGgpKTtcbiAgICBjb25zdCBrID0gYmNzLmRlKCdUcmFuc2FjdGlvbkRhdGEnLCB0cmltbWVkRGF0YSk7XG4gICAgdGhpcy51cGRhdGVQcm9wZXJUcmFuc2FjdGlvbkRhdGEoayk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVyOiBrLnNlbmRlcixcbiAgICAgIHBheVR4OiBrLmtpbmQuU2luZ2xlLlBheSxcbiAgICAgIGdhc0J1ZGdldDogay5nYXNCdWRnZXQudG9OdW1iZXIoKSxcbiAgICAgIGdhc1ByaWNlOiBrLmdhc1ByaWNlLnRvTnVtYmVyKCksXG4gICAgICBnYXNQYXltZW50OiBrLmdhc1BheW1lbnQsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVQcm9wZXJUcmFuc2FjdGlvbkRhdGEoazogYW55KTogdm9pZCB7XG4gICAgLy8gYmNzIGRlc2VyaWFsaXplZCBudW1iZXIgaW50byBCaWcgTnVtYmVyIGFuZCByZW1vdmVkICcweCcgcHJlZml4IGZyb20gYWRkcmVzc2VzLCBuZWVkcyB0byBjb252ZXJ0IHRoZW0gYmFja1xuICAgIGsua2luZC5TaW5nbGUuUGF5LmFtb3VudHMgPSBrLmtpbmQuU2luZ2xlLlBheS5hbW91bnRzLm1hcCgoYW1vdW50KSA9PiBhbW91bnQudG9OdW1iZXIoKSk7XG4gICAgay5raW5kLlNpbmdsZS5QYXkuY29pbnMgPSBrLmtpbmQuU2luZ2xlLlBheS5jb2lucy5tYXAoKGNvaW4pOiBTdWlPYmplY3RSZWYgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqZWN0SWQ6IHV0aWxzLm5vcm1hbGl6ZUhleElkKGNvaW4ub2JqZWN0SWQpLFxuICAgICAgICB2ZXJzaW9uOiBjb2luLnZlcnNpb24udG9OdW1iZXIoKSxcbiAgICAgICAgZGlnZXN0OiBjb2luLmRpZ2VzdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgay5raW5kLlNpbmdsZS5QYXkucmVjaXBpZW50cyA9IGsua2luZC5TaW5nbGUuUGF5LnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHV0aWxzLm5vcm1hbGl6ZUhleElkKHJlY2lwaWVudCkpO1xuICAgIGsuZ2FzUGF5bWVudC5vYmplY3RJZCA9IHV0aWxzLm5vcm1hbGl6ZUhleElkKGsuZ2FzUGF5bWVudC5vYmplY3RJZCk7XG4gICAgay5nYXNQYXltZW50LnZlcnNpb24gPSBrLmdhc1BheW1lbnQudmVyc2lvbi50b051bWJlcigpO1xuICAgIGsuc2VuZGVyID0gdXRpbHMubm9ybWFsaXplSGV4SWQoay5zZW5kZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb21wbGV0ZSBleHBsYW5hdGlvbiBmb3IgYSB0cmFuc2ZlciB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge1R4RGF0YX0ganNvbiBUaGUgdHJhbnNhY3Rpb24gZGF0YSBpbiBqc29uIGZvcm1hdFxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259IGV4cGxhbmF0aW9uUmVzdWx0IFRoZSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiB0byBiZSBjb21wbGV0ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uRXhwbGFuYXRpb259XG4gICAqL1xuICBleHBsYWluVHJhbnNmZXJUcmFuc2FjdGlvbihqc29uOiBUeERhdGEsIGV4cGxhbmF0aW9uUmVzdWx0OiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHRoaXMuc3VpVHJhbnNhY3Rpb24ucGF5VHgucmVjaXBpZW50cztcbiAgICBjb25zdCBhbW91bnRzID0gdGhpcy5zdWlUcmFuc2FjdGlvbi5wYXlUeC5hbW91bnRzO1xuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQsIGluZGV4KSA9PiAoe1xuICAgICAgYWRkcmVzczogcmVjaXBpZW50LFxuICAgICAgYW1vdW50OiBhbW91bnRzW2luZGV4XS50b1N0cmluZygpLFxuICAgIH0pKTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBhbW91bnRzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnQpID0+IGFjY3VtdWxhdG9yICsgY3VycmVudCwgMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,10 +1,19 @@
1
1
  /// <reference types="node" />
2
- import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
3
- import { Transaction } from './transaction';
2
+ import { BaseAddress, BaseKey, BaseTransactionBuilder, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
3
+ import { SuiObjectRef, SuiTransaction, Transaction } from './transaction';
4
4
  import BigNumber from 'bignumber.js';
5
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
6
+ import { PayTx } from './iface';
7
+ export declare const SUI_GAS_PRICE = 1;
5
8
  export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
6
9
  protected _transaction: Transaction;
7
10
  private _signatures;
11
+ protected _sender: string;
12
+ protected _gasBudget: number;
13
+ protected _gasPrice: number;
14
+ protected _payTx: PayTx;
15
+ protected _gasPayment: SuiObjectRef;
16
+ constructor(_coinConfig: Readonly<CoinConfig>);
8
17
  /**
9
18
  * The transaction type.
10
19
  */
@@ -25,19 +34,38 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
25
34
  * @returns {TransactionBuilder} This transaction builder
26
35
  */
27
36
  sender(senderAddress: string): this;
28
- fee(feeOptions: FeeOptions): this;
37
+ gasBudget(gasBudget: number): this;
38
+ gasPrice(gasPrice: number): this;
39
+ payTx(payTx: PayTx): this;
40
+ gasPayment(gasPayment: SuiObjectRef): this;
41
+ /**
42
+ * Initialize the transaction builder fields using the decoded transaction data
43
+ *
44
+ * @param {Transaction} tx the transaction data
45
+ */
46
+ initBuilder(tx: Transaction): void;
29
47
  /** @inheritdoc */
30
48
  protected fromImplementation(rawTransaction: string): Transaction;
31
49
  /** @inheritdoc */
32
50
  protected buildImplementation(): Promise<Transaction>;
51
+ protected buildSuiTransaction(): SuiTransaction;
33
52
  /** @inheritdoc */
34
53
  validateAddress(address: BaseAddress, addressFormat?: string): void;
54
+ validateGasBudget(gasBudget: number): void;
55
+ validateGasPrice(gasPrice: number): void;
56
+ validateTxPay(payTx: PayTx): void;
57
+ validateGasPayment(gasPayment: SuiObjectRef): void;
58
+ validateSuiObjectRef(suiObjectRef: SuiObjectRef, field: string): void;
35
59
  /** @inheritdoc */
36
60
  validateKey(key: BaseKey): void;
37
61
  /** @inheritdoc */
38
62
  validateRawTransaction(rawTransaction: string): void;
39
63
  /** @inheritdoc */
40
- validateTransaction(transaction?: Transaction): void;
64
+ validateTransaction(transaction: Transaction): void;
65
+ /**
66
+ * Validates all fields are defined
67
+ */
68
+ private validateTransactionFields;
41
69
  /** @inheritdoc */
42
70
  validateValue(value: BigNumber): void;
43
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,UAAU,EACV,SAAS,IAAI,aAAa,EAE1B,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,WAAW,CAAmB;IAGtC;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAIvD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAInC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAIjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAK3D,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAKtC"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAGtB,SAAS,IAAI,aAAa,EAE1B,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKhC,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,WAAW,CAAmB;IAEtC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,SAAS,SAAiB;IACpC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;IACxB,SAAS,CAAC,WAAW,EAAE,YAAY,CAAC;gBAExB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAIvD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAMnC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMlC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMhC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMzB,UAAU,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI;IAM1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAUlC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAQjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAO3D,SAAS,CAAC,mBAAmB,IAAI,cAAc;IAiB/C,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMxC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA6BjC,kBAAkB,CAAC,UAAU,EAAE,YAAY,GAAG,IAAI;IAOlD,oBAAoB,CAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAYrE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAOnD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAMtC"}