@super-protocol/sdk-js 0.13.5 → 0.14.0-beta.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.
@@ -353,29 +353,35 @@ var Offer = /** @class */ (function () {
353
353
  if (begin === void 0) { begin = 0; }
354
354
  if (end === void 0) { end = 999999; }
355
355
  return __awaiter(this, void 0, void 0, function () {
356
- var slots, _i, slots_1, slot, _a, _b, _c;
356
+ var slotsCount, slots, _i, slots_1, slot, _a, _b, _c;
357
357
  return __generator(this, function (_d) {
358
358
  switch (_d.label) {
359
- case 0: return [4 /*yield*/, Offer.contract.methods.getValueOfferSlots(this.id, begin, end).call()];
359
+ case 0: return [4 /*yield*/, Offer.contract.methods.getValueOfferSlotsCount(this.id).call()];
360
360
  case 1:
361
+ slotsCount = +(_d.sent());
362
+ if (slotsCount === 0) {
363
+ return [2 /*return*/, []];
364
+ }
365
+ return [4 /*yield*/, Offer.contract.methods.getValueOfferSlots(this.id, begin, end).call()];
366
+ case 2:
361
367
  slots = _d.sent();
362
368
  slots = (0, utils_1.tupleToObjectsArray)(slots, ValueOfferSlot_1.ValueOfferSlotStructure);
363
369
  _i = 0, slots_1 = slots;
364
- _d.label = 2;
365
- case 2:
366
- if (!(_i < slots_1.length)) return [3 /*break*/, 5];
370
+ _d.label = 3;
371
+ case 3:
372
+ if (!(_i < slots_1.length)) return [3 /*break*/, 6];
367
373
  slot = slots_1[_i];
368
374
  _a = slot;
369
375
  _b = utils_1.unpackSlotInfo;
370
376
  _c = [slot.info];
371
377
  return [4 /*yield*/, TeeOffers_1.default.getDenominator()];
372
- case 3:
373
- _a.info = _b.apply(void 0, _c.concat([_d.sent()]));
374
- _d.label = 4;
375
378
  case 4:
379
+ _a.info = _b.apply(void 0, _c.concat([_d.sent()]));
380
+ _d.label = 5;
381
+ case 5:
376
382
  _i++;
377
- return [3 /*break*/, 2];
378
- case 5: return [2 /*return*/, slots];
383
+ return [3 /*break*/, 3];
384
+ case 6: return [2 /*return*/, slots];
379
385
  }
380
386
  });
381
387
  });
@@ -134,7 +134,7 @@ declare class Order {
134
134
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
135
135
  * @returns Promise<void> - Does not return id of created sub order!
136
136
  */
137
- createSubOrder(subOrderInfo: OrderInfo, blockParentOrder: boolean, deposit?: string, transactionOptions?: TransactionOptions): Promise<void>;
137
+ createSubOrder(subOrderInfo: OrderInfo, blockParentOrder: boolean, deposit?: string, transactionOptions?: TransactionOptions, checkTxBeforeSend?: boolean): Promise<void>;
138
138
  /**
139
139
  * Function for creating pack of sub orders (wokflow) for current order
140
140
  * @param subOrdersInfo - orders info for new subOrders
@@ -529,8 +529,9 @@ var Order = /** @class */ (function () {
529
529
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
530
530
  * @returns Promise<void> - Does not return id of created sub order!
531
531
  */
532
- Order.prototype.createSubOrder = function (subOrderInfo, blockParentOrder, deposit, transactionOptions) {
532
+ Order.prototype.createSubOrder = function (subOrderInfo, blockParentOrder, deposit, transactionOptions, checkTxBeforeSend) {
533
533
  if (deposit === void 0) { deposit = "0"; }
534
+ if (checkTxBeforeSend === void 0) { checkTxBeforeSend = false; }
534
535
  return __awaiter(this, void 0, void 0, function () {
535
536
  var preparedInfo, tupleSubOrder, params;
536
537
  return __generator(this, function (_a) {
@@ -544,8 +545,13 @@ var Order = /** @class */ (function () {
544
545
  blockParentOrder: blockParentOrder,
545
546
  deposit: deposit,
546
547
  };
547
- return [4 /*yield*/, TxManager_1.default.execute(Order.contract.methods.createSubOrder, [this.id, tupleSubOrder, params], transactionOptions)];
548
+ if (!checkTxBeforeSend) return [3 /*break*/, 2];
549
+ return [4 /*yield*/, TxManager_1.default.dryRun(Order.contract.methods.createSubOrder, [this.id, tupleSubOrder, params], transactionOptions)];
548
550
  case 1:
551
+ _a.sent();
552
+ _a.label = 2;
553
+ case 2: return [4 /*yield*/, TxManager_1.default.execute(Order.contract.methods.createSubOrder, [this.id, tupleSubOrder, params], transactionOptions)];
554
+ case 3:
549
555
  _a.sent();
550
556
  return [2 /*return*/];
551
557
  }
@@ -39,5 +39,7 @@ declare class Provider {
39
39
  */
40
40
  getOrigins(): Promise<Origins>;
41
41
  isProviderBanned(): Promise<boolean>;
42
+ getOrdersLockedProfitList(): Promise<string[]>;
43
+ getTcbLockedProfitList(): Promise<string[]>;
42
44
  }
43
45
  export default Provider;
@@ -201,6 +201,20 @@ var Provider = /** @class */ (function () {
201
201
  });
202
202
  });
203
203
  };
204
+ Provider.prototype.getOrdersLockedProfitList = function () {
205
+ return __awaiter(this, void 0, void 0, function () {
206
+ return __generator(this, function (_a) {
207
+ return [2 /*return*/, Provider.contractProviders.methods.getOrdersLockedProfitList(this.providerId)];
208
+ });
209
+ });
210
+ };
211
+ Provider.prototype.getTcbLockedProfitList = function () {
212
+ return __awaiter(this, void 0, void 0, function () {
213
+ return __generator(this, function (_a) {
214
+ return [2 /*return*/, Provider.contractProviders.methods.getTcbLockedProfitList(this.providerId)];
215
+ });
216
+ });
217
+ };
204
218
  return Provider;
205
219
  }());
206
220
  exports.default = Provider;
@@ -187,11 +187,17 @@ var TeeOffer = /** @class */ (function () {
187
187
  if (begin === void 0) { begin = 0; }
188
188
  if (end === void 0) { end = 999999; }
189
189
  return __awaiter(this, void 0, void 0, function () {
190
- var teeOfferOption;
190
+ var optionsCount, teeOfferOption;
191
191
  return __generator(this, function (_a) {
192
192
  switch (_a.label) {
193
- case 0: return [4 /*yield*/, TeeOffer.contract.methods.getTeeOfferOptions(this.id, begin, end).call()];
193
+ case 0: return [4 /*yield*/, TeeOffer.contract.methods.getTeeOfferOptionsCount(this.id).call()];
194
194
  case 1:
195
+ optionsCount = +(_a.sent());
196
+ if (optionsCount === 0) {
197
+ return [2 /*return*/, []];
198
+ }
199
+ return [4 /*yield*/, TeeOffer.contract.methods.getTeeOfferOptions(this.id, begin, end).call()];
200
+ case 2:
195
201
  teeOfferOption = _a.sent();
196
202
  return [2 /*return*/, (0, utils_1.tupleToObjectsArray)(teeOfferOption, TeeOfferOption_1.TeeOfferOptionStructure)];
197
203
  }
@@ -350,29 +356,35 @@ var TeeOffer = /** @class */ (function () {
350
356
  if (begin === void 0) { begin = 0; }
351
357
  if (end === void 0) { end = 999999; }
352
358
  return __awaiter(this, void 0, void 0, function () {
353
- var slots, _i, slots_1, slot, _a, _b, _c;
359
+ var teeOfferSlotsCount, slots, _i, slots_1, slot, _a, _b, _c;
354
360
  return __generator(this, function (_d) {
355
361
  switch (_d.label) {
356
- case 0: return [4 /*yield*/, TeeOffer.contract.methods.getTeeOfferSlots(this.id, begin, end).call()];
362
+ case 0: return [4 /*yield*/, TeeOffer.contract.methods.getTeeOfferSlotsCount(this.id).call()];
357
363
  case 1:
364
+ teeOfferSlotsCount = +(_d.sent());
365
+ if (teeOfferSlotsCount === 0) {
366
+ return [2 /*return*/, []];
367
+ }
368
+ return [4 /*yield*/, TeeOffer.contract.methods.getTeeOfferSlots(this.id, begin, end).call()];
369
+ case 2:
358
370
  slots = _d.sent();
359
371
  slots = (0, utils_1.tupleToObjectsArray)(slots, TeeOfferSlot_1.TeeOfferSlotStructure);
360
372
  _i = 0, slots_1 = slots;
361
- _d.label = 2;
362
- case 2:
363
- if (!(_i < slots_1.length)) return [3 /*break*/, 5];
373
+ _d.label = 3;
374
+ case 3:
375
+ if (!(_i < slots_1.length)) return [3 /*break*/, 6];
364
376
  slot = slots_1[_i];
365
377
  _a = slot;
366
378
  _b = utils_1.unpackSlotInfo;
367
379
  _c = [slot.info];
368
380
  return [4 /*yield*/, TeeOffers_1.default.getDenominator()];
369
- case 3:
370
- _a.info = _b.apply(void 0, _c.concat([_d.sent()]));
371
- _d.label = 4;
372
381
  case 4:
382
+ _a.info = _b.apply(void 0, _c.concat([_d.sent()]));
383
+ _d.label = 5;
384
+ case 5:
373
385
  _i++;
374
- return [3 /*break*/, 2];
375
- case 5: return [2 /*return*/, slots];
386
+ return [3 /*break*/, 3];
387
+ case 6: return [2 /*return*/, slots];
376
388
  }
377
389
  });
378
390
  });
@@ -13,6 +13,7 @@ declare class Consensus {
13
13
  */
14
14
  static getAllTcbs(): Promise<string[]>;
15
15
  static initializeTcb(teeOfferId: string, transactionOptions?: TransactionOptions): Promise<void>;
16
+ static unlockProfitByTcbList(tcbIds: string[], transactionOptions?: TransactionOptions): Promise<void>;
16
17
  static isTcbCreationAvailable(teeOfferId: string): Promise<boolean>;
17
18
  /**
18
19
  * Function initialize TCB and returns list of anothers' TCB for their checking
@@ -43,9 +44,11 @@ declare class Consensus {
43
44
  static onTcbInitialized(callback: onTcbInitializedCallback): () => void;
44
45
  static onTcbBenchmarkChanged(callback: onTcbBenchmarkChangedCallback): () => void;
45
46
  static onRewardsClaimed(callback: onRewardsClaimedCallback): () => void;
47
+ static onTcbRewardUnlocked(callback: onTcbRewardUnlockedCallback): () => void;
46
48
  }
47
49
  export type onRewardsClaimedCallback = (tcbId: string, amount: string, claimer: string, block?: BlockInfo) => void;
48
50
  export type onTcbBenchmarkChangedCallback = (tcbId: string, provider: string, block?: BlockInfo) => void;
51
+ export type onTcbRewardUnlockedCallback = (tcbId: string, rewards: string, block?: BlockInfo) => void;
49
52
  export type onTcbInitializedCallback = (tcbId: string, provider: string, block?: BlockInfo) => void;
50
53
  export type onTcbCompletedCallback = (tcbId: string, provider: string, block?: BlockInfo) => void;
51
54
  export type onTcbBannedCallback = (tcbId: string, provider: string, block?: BlockInfo) => void;
@@ -121,6 +121,49 @@ var Consensus = /** @class */ (function () {
121
121
  });
122
122
  });
123
123
  };
124
+ Consensus.unlockProfitByTcbList = function (tcbIds, transactionOptions) {
125
+ return __awaiter(this, void 0, void 0, function () {
126
+ var contract, executedCount, e_1, _i, tcbIds_1, tcbId;
127
+ return __generator(this, function (_a) {
128
+ switch (_a.label) {
129
+ case 0:
130
+ contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
131
+ (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
132
+ _a.label = 1;
133
+ case 1:
134
+ _a.trys.push([1, 3, , 4]);
135
+ return [4 /*yield*/, TxManager_1.default.dryRun(contract.methods.unlockTcbRewardByList, [tcbIds], transactionOptions)];
136
+ case 2:
137
+ executedCount = +(_a.sent());
138
+ return [3 /*break*/, 4];
139
+ case 3:
140
+ e_1 = _a.sent();
141
+ executedCount = 0;
142
+ return [3 /*break*/, 4];
143
+ case 4:
144
+ if (!(executedCount === tcbIds.length)) return [3 /*break*/, 6];
145
+ return [4 /*yield*/, TxManager_1.default.execute(contract.methods.unlockTcbRewardByList, [tcbIds], transactionOptions)];
146
+ case 5:
147
+ _a.sent();
148
+ return [3 /*break*/, 10];
149
+ case 6:
150
+ _i = 0, tcbIds_1 = tcbIds;
151
+ _a.label = 7;
152
+ case 7:
153
+ if (!(_i < tcbIds_1.length)) return [3 /*break*/, 10];
154
+ tcbId = tcbIds_1[_i];
155
+ return [4 /*yield*/, new TCB_1.default(tcbId).unlockRewards()];
156
+ case 8:
157
+ _a.sent();
158
+ _a.label = 9;
159
+ case 9:
160
+ _i++;
161
+ return [3 /*break*/, 7];
162
+ case 10: return [2 /*return*/];
163
+ }
164
+ });
165
+ });
166
+ };
124
167
  Consensus.isTcbCreationAvailable = function (teeOfferId) {
125
168
  return __awaiter(this, void 0, void 0, function () {
126
169
  var contract, _a, offerNotBlocked, newEpochStarted, halfEpochPassed, benchmarkVerified;
@@ -402,6 +445,28 @@ var Consensus = /** @class */ (function () {
402
445
  });
403
446
  return function () { return subscription.unsubscribe(); };
404
447
  };
448
+ Consensus.onTcbRewardUnlocked = function (callback) {
449
+ var _this = this;
450
+ var contract = BlockchainEventsListener_1.default.getInstance().getContract();
451
+ var logger = this.logger.child({ method: "onTcbRewardUnlocked" });
452
+ var subscription = contract.events
453
+ .TcbRewardUnlocked()
454
+ .on("data", function (event) { return __awaiter(_this, void 0, void 0, function () {
455
+ return __generator(this, function (_a) {
456
+ callback(event.returnValues.tcbId, event.returnValues.rewards, {
457
+ index: event.blockNumber,
458
+ hash: event.blockHash,
459
+ });
460
+ return [2 /*return*/];
461
+ });
462
+ }); })
463
+ .on("error", function (error, receipt) {
464
+ if (receipt)
465
+ return; // Used to avoid logging of transaction rejected
466
+ logger.warn(error);
467
+ });
468
+ return function () { return subscription.unsubscribe(); };
469
+ };
405
470
  Consensus.logger = logger_1.default.child({ className: "Consensus" });
406
471
  return Consensus;
407
472
  }());
@@ -21,7 +21,7 @@ declare class Orders {
21
21
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
22
22
  * @returns {Promise<void>} - Does not return id of created order!
23
23
  */
24
- static createOrder(orderInfo: OrderInfo, deposit?: string, suspended?: boolean, transactionOptions?: TransactionOptions): Promise<void>;
24
+ static createOrder(orderInfo: OrderInfo, deposit?: string, suspended?: boolean, transactionOptions?: TransactionOptions, checkTxBeforeSend?: boolean): Promise<void>;
25
25
  static getByExternalId(consumer?: string, externalId?: string, fromBlock?: number | string, toBlock?: number | string): Promise<OrderCreatedEvent>;
26
26
  /**
27
27
  * Function for create workflow
@@ -31,7 +31,7 @@ declare class Orders {
31
31
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
32
32
  * @returns {Promise<void>} - Does not return id of created order!
33
33
  */
34
- static createWorkflow(parentOrderInfo: OrderInfo, subOrdersInfo: OrderInfo[], workflowDeposit?: string, transactionOptions?: TransactionOptions): Promise<void>;
34
+ static createWorkflow(parentOrderInfo: OrderInfo, subOrdersInfo: OrderInfo[], workflowDeposit?: string, transactionOptions?: TransactionOptions, checkTxBeforeSend?: boolean): Promise<void>;
35
35
  /**
36
36
  * Function for cancel workflow
37
37
  * @param parentOrderId - Parent order id
@@ -51,6 +51,7 @@ declare class Orders {
51
51
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
52
52
  */
53
53
  static refillOrderDeposit(orderId: string, amount: string, transactionOptions?: TransactionOptions): Promise<void>;
54
+ static unlockProfitByOrderList(orderIds: string[], transactionOptions?: TransactionOptions): Promise<void>;
54
55
  /**
55
56
  * Function for adding event listeners on order created event in orders factory contract
56
57
  * @param callback - function for processing created order
@@ -64,6 +64,7 @@ var Superpro_1 = __importDefault(require("./Superpro"));
64
64
  var TxManager_1 = __importDefault(require("../utils/TxManager"));
65
65
  var BlockchainConnector_1 = __importDefault(require("../connectors/BlockchainConnector"));
66
66
  var BlockchainEventsListener_1 = __importDefault(require("../connectors/BlockchainEventsListener"));
67
+ var Order_2 = __importDefault(require("../models/Order"));
67
68
  var Orders = /** @class */ (function () {
68
69
  function Orders() {
69
70
  }
@@ -124,9 +125,10 @@ var Orders = /** @class */ (function () {
124
125
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
125
126
  * @returns {Promise<void>} - Does not return id of created order!
126
127
  */
127
- Orders.createOrder = function (orderInfo, deposit, suspended, transactionOptions) {
128
+ Orders.createOrder = function (orderInfo, deposit, suspended, transactionOptions, checkTxBeforeSend) {
128
129
  if (deposit === void 0) { deposit = "0"; }
129
130
  if (suspended === void 0) { suspended = false; }
131
+ if (checkTxBeforeSend === void 0) { checkTxBeforeSend = false; }
130
132
  return __awaiter(this, void 0, void 0, function () {
131
133
  var contract, preparedInfo, orderInfoArguments;
132
134
  return __generator(this, function (_a) {
@@ -136,8 +138,13 @@ var Orders = /** @class */ (function () {
136
138
  (0, utils_2.checkIfActionAccountInitialized)(transactionOptions);
137
139
  preparedInfo = __assign(__assign({}, orderInfo), { externalId: (0, utils_1.formatBytes32String)(orderInfo.externalId) });
138
140
  orderInfoArguments = (0, utils_2.objectToTuple)(preparedInfo, Order_1.OrderInfoStructure);
139
- return [4 /*yield*/, TxManager_1.default.execute(contract.methods.createOrder, [orderInfoArguments, deposit, suspended], transactionOptions)];
141
+ if (!checkTxBeforeSend) return [3 /*break*/, 2];
142
+ return [4 /*yield*/, TxManager_1.default.dryRun(contract.methods.createOrder, [orderInfoArguments, deposit, suspended], transactionOptions)];
140
143
  case 1:
144
+ _a.sent();
145
+ _a.label = 2;
146
+ case 2: return [4 /*yield*/, TxManager_1.default.execute(contract.methods.createOrder, [orderInfoArguments, deposit, suspended], transactionOptions)];
147
+ case 3:
141
148
  _a.sent();
142
149
  return [2 /*return*/];
143
150
  }
@@ -181,8 +188,9 @@ var Orders = /** @class */ (function () {
181
188
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
182
189
  * @returns {Promise<void>} - Does not return id of created order!
183
190
  */
184
- Orders.createWorkflow = function (parentOrderInfo, subOrdersInfo, workflowDeposit, transactionOptions) {
191
+ Orders.createWorkflow = function (parentOrderInfo, subOrdersInfo, workflowDeposit, transactionOptions, checkTxBeforeSend) {
185
192
  if (workflowDeposit === void 0) { workflowDeposit = "0"; }
193
+ if (checkTxBeforeSend === void 0) { checkTxBeforeSend = false; }
186
194
  return __awaiter(this, void 0, void 0, function () {
187
195
  var contract, preparedInfo, parentOrderInfoArgs, preparedSubOrdersInfo, subOrdersInfoArgs;
188
196
  return __generator(this, function (_a) {
@@ -194,8 +202,13 @@ var Orders = /** @class */ (function () {
194
202
  parentOrderInfoArgs = (0, utils_2.objectToTuple)(preparedInfo, Order_1.OrderInfoStructure);
195
203
  preparedSubOrdersInfo = subOrdersInfo.map(function (o) { return (__assign(__assign({}, o), { externalId: (0, utils_1.formatBytes32String)(o.externalId) })); });
196
204
  subOrdersInfoArgs = (0, utils_2.objectToTuple)(preparedSubOrdersInfo, Order_1.OrderInfoStructureArray);
197
- return [4 /*yield*/, TxManager_1.default.execute(contract.methods.createWorkflow, [parentOrderInfoArgs, workflowDeposit, subOrdersInfoArgs], transactionOptions)];
205
+ if (!checkTxBeforeSend) return [3 /*break*/, 2];
206
+ return [4 /*yield*/, TxManager_1.default.dryRun(contract.methods.createWorkflow, [parentOrderInfoArgs, workflowDeposit, subOrdersInfoArgs], transactionOptions)];
198
207
  case 1:
208
+ _a.sent();
209
+ _a.label = 2;
210
+ case 2: return [4 /*yield*/, TxManager_1.default.execute(contract.methods.createWorkflow, [parentOrderInfoArgs, workflowDeposit, subOrdersInfoArgs], transactionOptions)];
211
+ case 3:
199
212
  _a.sent();
200
213
  return [2 /*return*/];
201
214
  }
@@ -266,6 +279,49 @@ var Orders = /** @class */ (function () {
266
279
  });
267
280
  });
268
281
  };
282
+ Orders.unlockProfitByOrderList = function (orderIds, transactionOptions) {
283
+ return __awaiter(this, void 0, void 0, function () {
284
+ var contract, executedCount, e_1, _i, orderIds_1, orderId;
285
+ return __generator(this, function (_a) {
286
+ switch (_a.label) {
287
+ case 0:
288
+ contract = BlockchainConnector_1.default.getInstance().getContract(transactionOptions);
289
+ (0, utils_2.checkIfActionAccountInitialized)(transactionOptions);
290
+ _a.label = 1;
291
+ case 1:
292
+ _a.trys.push([1, 3, , 4]);
293
+ return [4 /*yield*/, TxManager_1.default.dryRun(contract.methods.unlockProfitByList, [orderIds], transactionOptions)];
294
+ case 2:
295
+ executedCount = +(_a.sent());
296
+ return [3 /*break*/, 4];
297
+ case 3:
298
+ e_1 = _a.sent();
299
+ executedCount = 0;
300
+ return [3 /*break*/, 4];
301
+ case 4:
302
+ if (!(executedCount === orderIds.length)) return [3 /*break*/, 6];
303
+ return [4 /*yield*/, TxManager_1.default.execute(contract.methods.unlockProfitByList, [orderIds], transactionOptions)];
304
+ case 5:
305
+ _a.sent();
306
+ return [3 /*break*/, 10];
307
+ case 6:
308
+ _i = 0, orderIds_1 = orderIds;
309
+ _a.label = 7;
310
+ case 7:
311
+ if (!(_i < orderIds_1.length)) return [3 /*break*/, 10];
312
+ orderId = orderIds_1[_i];
313
+ return [4 /*yield*/, new Order_2.default(orderId).unlockProfit()];
314
+ case 8:
315
+ _a.sent();
316
+ _a.label = 9;
317
+ case 9:
318
+ _i++;
319
+ return [3 /*break*/, 7];
320
+ case 10: return [2 /*return*/];
321
+ }
322
+ });
323
+ });
324
+ };
269
325
  /**
270
326
  * Function for adding event listeners on order created event in orders factory contract
271
327
  * @param callback - function for processing created order
@@ -32,14 +32,14 @@ declare class SuperproToken {
32
32
  * @param amount - amount of tokens to transfer
33
33
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
34
34
  */
35
- static transfer(to: string, amount: string, transactionOptions?: TransactionOptions): Promise<Transaction>;
35
+ static transfer(to: string, amount: string, transactionOptions?: TransactionOptions, checkTxBeforeSend?: boolean): Promise<Transaction>;
36
36
  /**
37
37
  * Approve tokens for specific address
38
38
  * @param address - address for approval
39
39
  * @param amount - number of tokens to be approved
40
40
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
41
41
  */
42
- static approve(address: string, amount: string, transactionOptions?: TransactionOptions): Promise<void>;
42
+ static approve(address: string, amount: string, transactionOptions?: TransactionOptions, checkTxBeforeSend?: boolean): Promise<void>;
43
43
  static onTokenApprove(callback: onTokenApproveCallback, owner?: string, spender?: string): () => void;
44
44
  static onTokenTransfer(callback: onTokenTransferCallback, from?: string, to?: string): () => void;
45
45
  }
@@ -120,7 +120,8 @@ var SuperproToken = /** @class */ (function () {
120
120
  * @param amount - amount of tokens to transfer
121
121
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
122
122
  */
123
- SuperproToken.transfer = function (to, amount, transactionOptions) {
123
+ SuperproToken.transfer = function (to, amount, transactionOptions, checkTxBeforeSend) {
124
+ if (checkTxBeforeSend === void 0) { checkTxBeforeSend = false; }
124
125
  return __awaiter(this, void 0, void 0, function () {
125
126
  var contract, receipt;
126
127
  return __generator(this, function (_a) {
@@ -128,6 +129,9 @@ var SuperproToken = /** @class */ (function () {
128
129
  case 0:
129
130
  contract = this.checkInit(transactionOptions);
130
131
  (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
132
+ if (checkTxBeforeSend) {
133
+ TxManager_1.default.dryRun(contract.methods.transfer, [to, amount], transactionOptions);
134
+ }
131
135
  return [4 /*yield*/, TxManager_1.default.execute(contract.methods.transfer, [to, amount], transactionOptions, SuperproToken.addressHttps)];
132
136
  case 1:
133
137
  receipt = _a.sent();
@@ -142,7 +146,8 @@ var SuperproToken = /** @class */ (function () {
142
146
  * @param amount - number of tokens to be approved
143
147
  * @param transactionOptions - object what contains alternative action account or gas limit (optional)
144
148
  */
145
- SuperproToken.approve = function (address, amount, transactionOptions) {
149
+ SuperproToken.approve = function (address, amount, transactionOptions, checkTxBeforeSend) {
150
+ if (checkTxBeforeSend === void 0) { checkTxBeforeSend = false; }
146
151
  return __awaiter(this, void 0, void 0, function () {
147
152
  var contract;
148
153
  return __generator(this, function (_a) {
@@ -150,8 +155,13 @@ var SuperproToken = /** @class */ (function () {
150
155
  case 0:
151
156
  contract = this.checkInit(transactionOptions);
152
157
  (0, utils_1.checkIfActionAccountInitialized)(transactionOptions);
153
- return [4 /*yield*/, TxManager_1.default.execute(contract.methods.approve, [address, amount], transactionOptions, SuperproToken.addressHttps)];
158
+ if (!checkTxBeforeSend) return [3 /*break*/, 2];
159
+ return [4 /*yield*/, TxManager_1.default.dryRun(contract.methods.approve, [address, amount], transactionOptions)];
154
160
  case 1:
161
+ _a.sent();
162
+ _a.label = 2;
163
+ case 2: return [4 /*yield*/, TxManager_1.default.execute(contract.methods.approve, [address, amount], transactionOptions, SuperproToken.addressHttps)];
164
+ case 3:
155
165
  _a.sent();
156
166
  return [2 /*return*/];
157
167
  }
@@ -43,6 +43,8 @@ export declare const OrderInfoStructure: {
43
43
  optionsCount: StringConstructor[];
44
44
  };
45
45
  externalId: typeof parseBytes32String;
46
+ expectedPrice: StringConstructor;
47
+ maxPriceSlippage: StringConstructor;
46
48
  };
47
49
  export declare const OrderInfoStructureArray: {
48
50
  offerId: StringConstructor;
@@ -61,6 +63,8 @@ export declare const OrderInfoStructureArray: {
61
63
  optionsCount: StringConstructor[];
62
64
  };
63
65
  externalId: typeof parseBytes32String;
66
+ expectedPrice: StringConstructor;
67
+ maxPriceSlippage: StringConstructor;
64
68
  }[];
65
69
  export type OrderSlots = {
66
70
  slotId: string;
@@ -77,6 +81,8 @@ export type OrderInfo = {
77
81
  args: OrderArgs;
78
82
  slots: OrderSlots;
79
83
  externalId: string;
84
+ expectedPrice: string;
85
+ maxPriceSlippage: string;
80
86
  };
81
87
  export type ExtendedOrderInfo = OrderInfo & {
82
88
  blocking: boolean;
@@ -37,6 +37,8 @@ exports.OrderInfoStructure = {
37
37
  args: exports.OrderArgsStructure,
38
38
  slots: exports.OrderSlotsStructure,
39
39
  externalId: utils_1.parseBytes32String,
40
+ expectedPrice: String,
41
+ maxPriceSlippage: String,
40
42
  };
41
43
  // Array of order info structures
42
44
  exports.OrderInfoStructureArray = [exports.OrderInfoStructure];
@@ -36,3 +36,6 @@ export type Transaction = {
36
36
  input: string;
37
37
  timestamp: number;
38
38
  };
39
+ export type DryRunError = Error & {
40
+ txErrorMsg: string | null;
41
+ };
@@ -16,6 +16,7 @@ declare class TxManager {
16
16
  private static checkIfInitialized;
17
17
  static initAccount(address: string): Promise<void>;
18
18
  static execute(method: (...args: ArgumentsType) => MethodReturnType, args: ArgumentsType, transactionOptions?: TransactionOptions, to?: string): Promise<TransactionReceipt>;
19
+ static dryRun(method: (...args: ArgumentsType) => MethodReturnType, args: ArgumentsType, transactionOptions?: TransactionOptions): Promise<any>;
19
20
  static publishTransaction(txData: Record<string, any>, transactionOptions?: TransactionOptions, transactionCall?: MethodReturnType): Promise<TransactionReceipt>;
20
21
  }
21
22
  export default TxManager;
@@ -89,18 +89,47 @@ var TxManager = /** @class */ (function () {
89
89
  return __awaiter(this, void 0, void 0, function () {
90
90
  var transaction, txData;
91
91
  return __generator(this, function (_a) {
92
- transaction = method.apply(void 0, args);
93
- txData = {
94
- to: to,
95
- data: transaction.encodeABI(),
96
- };
97
- return [2 /*return*/, TxManager.publishTransaction(txData, transactionOptions, transaction)];
92
+ switch (_a.label) {
93
+ case 0:
94
+ transaction = method.apply(void 0, args);
95
+ txData = {
96
+ to: to,
97
+ data: transaction.encodeABI(),
98
+ };
99
+ return [4 /*yield*/, TxManager.publishTransaction(txData, transactionOptions, transaction)];
100
+ case 1: return [2 /*return*/, _a.sent()];
101
+ }
102
+ });
103
+ });
104
+ };
105
+ TxManager.dryRun = function (method, args, transactionOptions) {
106
+ var _a;
107
+ return __awaiter(this, void 0, void 0, function () {
108
+ var transaction, from, result, e_1;
109
+ return __generator(this, function (_b) {
110
+ switch (_b.label) {
111
+ case 0:
112
+ transaction = method.apply(void 0, args);
113
+ from = (_a = transactionOptions === null || transactionOptions === void 0 ? void 0 : transactionOptions.from) !== null && _a !== void 0 ? _a : store_1.default.actionAccount;
114
+ _b.label = 1;
115
+ case 1:
116
+ _b.trys.push([1, 3, , 4]);
117
+ return [4 /*yield*/, transaction.call({ from: from })];
118
+ case 2:
119
+ result = _b.sent();
120
+ return [2 /*return*/, result];
121
+ case 3:
122
+ e_1 = _b.sent();
123
+ e_1.txErrorMsg = e_1.data.message || "Error text is undefined";
124
+ throw e_1;
125
+ case 4: return [2 /*return*/];
126
+ }
98
127
  });
99
128
  });
100
129
  };
101
130
  TxManager.publishTransaction = function (txData, transactionOptions, transactionCall) {
102
131
  return __awaiter(this, void 0, void 0, function () {
103
- var web3, options, estimatedGas, e_1, nonceTracker, signingKey, transactionResultData, signed, e_2;
132
+ var web3, options, estimatedGas, e_2, nonceTracker, signingKey, transactionResultData, signed, e_3;
104
133
  return __generator(this, function (_a) {
105
134
  switch (_a.label) {
106
135
  case 0:
@@ -124,8 +153,8 @@ var TxManager = /** @class */ (function () {
124
153
  estimatedGas = _a.sent();
125
154
  return [3 /*break*/, 5];
126
155
  case 4:
127
- e_1 = _a.sent();
128
- TxManager.logger.debug({ error: e_1 }, "Fail to calculate estimated gas");
156
+ e_2 = _a.sent();
157
+ TxManager.logger.debug({ error: e_2 }, "Fail to calculate estimated gas");
129
158
  estimatedGas = constants_1.defaultGasLimit;
130
159
  return [3 /*break*/, 5];
131
160
  case 5:
@@ -191,14 +220,14 @@ var TxManager = /** @class */ (function () {
191
220
  nonceTracker.onTransactionPublished();
192
221
  return [2 /*return*/, transactionResultData];
193
222
  case 15:
194
- e_2 = _a.sent();
195
- TxManager.logger.error(e_2, "Error during transaction execution");
223
+ e_3 = _a.sent();
224
+ TxManager.logger.error(e_3, "Error during transaction execution");
196
225
  if (!nonceTracker) return [3 /*break*/, 17];
197
226
  return [4 /*yield*/, nonceTracker.onTransactionError()];
198
227
  case 16:
199
228
  _a.sent();
200
229
  _a.label = 17;
201
- case 17: throw e_2;
230
+ case 17: throw e_3;
202
231
  case 18: return [2 /*return*/];
203
232
  }
204
233
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@super-protocol/sdk-js",
3
- "version": "0.13.5",
3
+ "version": "0.14.0-beta.0",
4
4
  "main": "build/index.js",
5
5
  "license": "MIT",
6
6
  "files": [