@d8x/perpetuals-sdk 0.7.4 → 0.7.6

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 (128) hide show
  1. package/dist/cjs/accountTrade.js +134 -239
  2. package/dist/cjs/accountTrade.js.map +1 -1
  3. package/dist/cjs/brokerTool.js +144 -290
  4. package/dist/cjs/brokerTool.js.map +1 -1
  5. package/dist/cjs/contracts/factories/ERC20__factory.js +9 -12
  6. package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
  7. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +9 -12
  8. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  9. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +9 -12
  10. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  11. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +9 -12
  12. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  13. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +9 -12
  14. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  15. package/dist/cjs/contracts/factories/ShareToken__factory.js +9 -12
  16. package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
  17. package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +9 -12
  18. package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
  19. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +9 -12
  20. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
  21. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +9 -12
  22. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
  23. package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js +9 -12
  24. package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
  25. package/dist/cjs/contracts/index.js +1 -1
  26. package/dist/cjs/d8XMath.d.ts +7 -0
  27. package/dist/cjs/d8XMath.js +81 -61
  28. package/dist/cjs/d8XMath.js.map +1 -1
  29. package/dist/cjs/index.js +11 -11
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/liquidatorTool.js +80 -137
  32. package/dist/cjs/liquidatorTool.js.map +1 -1
  33. package/dist/cjs/liquidityProviderTool.js +33 -64
  34. package/dist/cjs/liquidityProviderTool.js.map +1 -1
  35. package/dist/cjs/marketData.d.ts +8 -1
  36. package/dist/cjs/marketData.js +641 -949
  37. package/dist/cjs/marketData.js.map +1 -1
  38. package/dist/cjs/nodeSDKTypes.d.ts +1 -0
  39. package/dist/cjs/nodeSDKTypes.js +10 -22
  40. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  41. package/dist/cjs/orderReferrerTool.js +200 -321
  42. package/dist/cjs/orderReferrerTool.js.map +1 -1
  43. package/dist/cjs/perpetualDataHandler.d.ts +11 -0
  44. package/dist/cjs/perpetualDataHandler.js +422 -535
  45. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  46. package/dist/cjs/perpetualEventHandler.js +129 -190
  47. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  48. package/dist/cjs/priceFeeds.js +223 -335
  49. package/dist/cjs/priceFeeds.js.map +1 -1
  50. package/dist/cjs/traderDigests.js +20 -23
  51. package/dist/cjs/traderDigests.js.map +1 -1
  52. package/dist/cjs/traderInterface.js +54 -87
  53. package/dist/cjs/traderInterface.js.map +1 -1
  54. package/dist/cjs/triangulator.js +34 -38
  55. package/dist/cjs/triangulator.js.map +1 -1
  56. package/dist/cjs/utils.js +18 -32
  57. package/dist/cjs/utils.js.map +1 -1
  58. package/dist/cjs/version.d.ts +1 -1
  59. package/dist/cjs/version.js +1 -1
  60. package/dist/cjs/writeAccessHandler.js +78 -112
  61. package/dist/cjs/writeAccessHandler.js.map +1 -1
  62. package/dist/esm/accountTrade.js +126 -233
  63. package/dist/esm/accountTrade.js.map +1 -1
  64. package/dist/esm/brokerTool.js +136 -284
  65. package/dist/esm/brokerTool.js.map +1 -1
  66. package/dist/esm/contracts/factories/ERC20__factory.js +8 -12
  67. package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
  68. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +8 -12
  69. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  70. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +8 -12
  71. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  72. package/dist/esm/contracts/factories/LimitOrderBook__factory.js +8 -12
  73. package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  74. package/dist/esm/contracts/factories/MockTokenSwap__factory.js +8 -12
  75. package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  76. package/dist/esm/contracts/factories/ShareToken__factory.js +8 -12
  77. package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
  78. package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +8 -12
  79. package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
  80. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +8 -12
  81. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
  82. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +8 -12
  83. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
  84. package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js +8 -12
  85. package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
  86. package/dist/esm/d8XMath.d.ts +7 -0
  87. package/dist/esm/d8XMath.js +77 -58
  88. package/dist/esm/d8XMath.js.map +1 -1
  89. package/dist/esm/liquidatorTool.js +77 -136
  90. package/dist/esm/liquidatorTool.js.map +1 -1
  91. package/dist/esm/liquidityProviderTool.js +30 -63
  92. package/dist/esm/liquidityProviderTool.js.map +1 -1
  93. package/dist/esm/marketData.d.ts +8 -1
  94. package/dist/esm/marketData.js +632 -942
  95. package/dist/esm/marketData.js.map +1 -1
  96. package/dist/esm/nodeSDKTypes.d.ts +1 -0
  97. package/dist/esm/nodeSDKTypes.js +36 -48
  98. package/dist/esm/nodeSDKTypes.js.map +1 -1
  99. package/dist/esm/orderReferrerTool.js +194 -317
  100. package/dist/esm/orderReferrerTool.js.map +1 -1
  101. package/dist/esm/perpetualDataHandler.d.ts +11 -0
  102. package/dist/esm/perpetualDataHandler.js +413 -528
  103. package/dist/esm/perpetualDataHandler.js.map +1 -1
  104. package/dist/esm/perpetualEventHandler.js +126 -188
  105. package/dist/esm/perpetualEventHandler.js.map +1 -1
  106. package/dist/esm/priceFeeds.js +218 -332
  107. package/dist/esm/priceFeeds.js.map +1 -1
  108. package/dist/esm/traderDigests.js +15 -19
  109. package/dist/esm/traderDigests.js.map +1 -1
  110. package/dist/esm/traderInterface.js +48 -83
  111. package/dist/esm/traderInterface.js.map +1 -1
  112. package/dist/esm/triangulator.js +34 -39
  113. package/dist/esm/triangulator.js.map +1 -1
  114. package/dist/esm/utils.js +16 -30
  115. package/dist/esm/utils.js.map +1 -1
  116. package/dist/esm/version.d.ts +1 -1
  117. package/dist/esm/version.js +1 -1
  118. package/dist/esm/version.js.map +1 -1
  119. package/dist/esm/writeAccessHandler.js +70 -106
  120. package/dist/esm/writeAccessHandler.js.map +1 -1
  121. package/package.json +1 -1
  122. package/src/d8XMath.ts +21 -0
  123. package/src/liquidityProviderTool.ts +5 -4
  124. package/src/marketData.ts +26 -0
  125. package/src/nodeSDKTypes.ts +1 -0
  126. package/src/perpetualDataHandler.ts +27 -0
  127. package/src/version.ts +1 -1
  128. package/src/writeAccessHandler.ts +3 -3
@@ -1,19 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var bignumber_1 = require("@ethersproject/bignumber");
5
- var constants_1 = require("@ethersproject/constants");
6
- var nodeSDKTypes_1 = require("./nodeSDKTypes");
7
- var perpetualDataHandler_1 = tslib_1.__importDefault(require("./perpetualDataHandler"));
8
- var writeAccessHandler_1 = tslib_1.__importDefault(require("./writeAccessHandler"));
3
+ const tslib_1 = require("tslib");
4
+ const bignumber_1 = require("@ethersproject/bignumber");
5
+ const constants_1 = require("@ethersproject/constants");
6
+ const nodeSDKTypes_1 = require("./nodeSDKTypes");
7
+ const perpetualDataHandler_1 = tslib_1.__importDefault(require("./perpetualDataHandler"));
8
+ const writeAccessHandler_1 = tslib_1.__importDefault(require("./writeAccessHandler"));
9
9
  /**
10
10
  * Functions to execute existing conditional orders from the limit order book. This class
11
11
  * requires a private key and executes smart-contract interactions that require
12
12
  * gas-payments.
13
13
  * @extends WriteAccessHandler
14
14
  */
15
- var OrderReferrerTool = /** @class */ (function (_super) {
16
- tslib_1.__extends(OrderReferrerTool, _super);
15
+ class OrderReferrerTool extends writeAccessHandler_1.default {
17
16
  /**
18
17
  * Constructor.
19
18
  * @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
@@ -33,11 +32,10 @@ var OrderReferrerTool = /** @class */ (function (_super) {
33
32
  *
34
33
  * @param {string | Signer} signer Private key or ethers Signer of the account
35
34
  */
36
- function OrderReferrerTool(config, signer) {
37
- var _this = _super.call(this, config, signer) || this;
35
+ constructor(config, signer) {
36
+ super(config, signer);
38
37
  // override parent's gas limit with a lower number
39
- _this.gasLimit = 4000000;
40
- return _this;
38
+ this.gasLimit = 4000000;
41
39
  }
42
40
  /**
43
41
  * Executes an order by symbol and ID. This action interacts with the blockchain and incurs gas costs.
@@ -73,64 +71,46 @@ var OrderReferrerTool = /** @class */ (function (_super) {
73
71
  * main();
74
72
  * @returns Transaction object.
75
73
  */
76
- OrderReferrerTool.prototype.executeOrder = function (symbol, orderId, referrerAddr, submission, overrides) {
77
- var _a;
78
- return tslib_1.__awaiter(this, void 0, void 0, function () {
79
- var orderBookSC;
80
- return tslib_1.__generator(this, function (_b) {
81
- switch (_b.label) {
82
- case 0:
83
- if (this.proxyContract == null || this.signer == null) {
84
- throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
85
- }
86
- orderBookSC = this.getOrderBookContract(symbol);
87
- if (typeof referrerAddr == "undefined") {
88
- referrerAddr = this.traderAddr;
89
- }
90
- if (!(submission == undefined)) return [3 /*break*/, 2];
91
- return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
92
- case 1:
93
- submission = _b.sent();
94
- _b.label = 2;
95
- case 2:
96
- if (!overrides || overrides.value == undefined) {
97
- overrides = tslib_1.__assign({ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI, gasLimit: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _a !== void 0 ? _a : this.gasLimit }, overrides);
98
- }
99
- return [4 /*yield*/, orderBookSC.executeOrder(orderId, referrerAddr, submission.priceFeedVaas, submission.timestamps, overrides)];
100
- case 3: return [2 /*return*/, _b.sent()];
101
- }
102
- });
103
- });
104
- };
105
- OrderReferrerTool.prototype.executeOrders = function (symbol, orderIds, referrerAddr, submission, overrides) {
106
- var _a;
107
- return tslib_1.__awaiter(this, void 0, void 0, function () {
108
- var orderBookSC;
109
- return tslib_1.__generator(this, function (_b) {
110
- switch (_b.label) {
111
- case 0:
112
- if (this.proxyContract == null || this.signer == null) {
113
- throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
114
- }
115
- orderBookSC = this.getOrderBookContract(symbol);
116
- if (typeof referrerAddr == "undefined") {
117
- referrerAddr = this.traderAddr;
118
- }
119
- if (!(submission == undefined)) return [3 /*break*/, 2];
120
- return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
121
- case 1:
122
- submission = _b.sent();
123
- _b.label = 2;
124
- case 2:
125
- if (!overrides || overrides.value == undefined) {
126
- overrides = tslib_1.__assign({ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI, gasLimit: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _a !== void 0 ? _a : this.gasLimit }, overrides);
127
- }
128
- return [4 /*yield*/, orderBookSC.executeOrders(orderIds, referrerAddr, submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas, submission === null || submission === void 0 ? void 0 : submission.timestamps, overrides)];
129
- case 3: return [2 /*return*/, _b.sent()];
130
- }
131
- });
132
- });
133
- };
74
+ async executeOrder(symbol, orderId, referrerAddr, submission, overrides) {
75
+ if (this.proxyContract == null || this.signer == null) {
76
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
77
+ }
78
+ const orderBookSC = this.getOrderBookContract(symbol);
79
+ if (typeof referrerAddr == "undefined") {
80
+ referrerAddr = this.traderAddr;
81
+ }
82
+ if (submission == undefined) {
83
+ submission = await this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol);
84
+ }
85
+ if (!overrides || overrides.value == undefined) {
86
+ overrides = {
87
+ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI,
88
+ gasLimit: overrides?.gasLimit ?? this.gasLimit,
89
+ ...overrides,
90
+ };
91
+ }
92
+ return await orderBookSC.executeOrder(orderId, referrerAddr, submission.priceFeedVaas, submission.timestamps, overrides);
93
+ }
94
+ async executeOrders(symbol, orderIds, referrerAddr, submission, overrides) {
95
+ if (this.proxyContract == null || this.signer == null) {
96
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
97
+ }
98
+ const orderBookSC = this.getOrderBookContract(symbol);
99
+ if (typeof referrerAddr == "undefined") {
100
+ referrerAddr = this.traderAddr;
101
+ }
102
+ if (submission == undefined) {
103
+ submission = await this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol);
104
+ }
105
+ if (!overrides || overrides.value == undefined) {
106
+ overrides = {
107
+ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI,
108
+ gasLimit: overrides?.gasLimit ?? this.gasLimit,
109
+ ...overrides,
110
+ };
111
+ }
112
+ return await orderBookSC.executeOrders(orderIds, referrerAddr, submission?.priceFeedVaas, submission?.timestamps, overrides);
113
+ }
134
114
  /**
135
115
  * All the orders in the order book for a given symbol that are currently open.
136
116
  * @param {string} symbol Symbol of the form ETH-USD-MATIC.
@@ -151,20 +131,10 @@ var OrderReferrerTool = /** @class */ (function (_super) {
151
131
  *
152
132
  * @returns Array with all open orders and their IDs.
153
133
  */
154
- OrderReferrerTool.prototype.getAllOpenOrders = function (symbol, overrides) {
155
- return tslib_1.__awaiter(this, void 0, void 0, function () {
156
- var totalOrders;
157
- return tslib_1.__generator(this, function (_a) {
158
- switch (_a.label) {
159
- case 0: return [4 /*yield*/, this.numberOfOpenOrders(symbol, overrides)];
160
- case 1:
161
- totalOrders = _a.sent();
162
- return [4 /*yield*/, this.pollLimitOrders(symbol, totalOrders, nodeSDKTypes_1.ZERO_ORDER_ID, overrides)];
163
- case 2: return [2 /*return*/, _a.sent()];
164
- }
165
- });
166
- });
167
- };
134
+ async getAllOpenOrders(symbol, overrides) {
135
+ let totalOrders = await this.numberOfOpenOrders(symbol, overrides);
136
+ return await this.pollLimitOrders(symbol, totalOrders, nodeSDKTypes_1.ZERO_ORDER_ID, overrides);
137
+ }
168
138
  /**
169
139
  * Total number of limit orders for this symbol, excluding those that have been cancelled/removed.
170
140
  * @param {string} symbol Symbol of the form ETH-USD-MATIC.
@@ -185,24 +155,14 @@ var OrderReferrerTool = /** @class */ (function (_super) {
185
155
  *
186
156
  * @returns {number} Number of open orders.
187
157
  */
188
- OrderReferrerTool.prototype.numberOfOpenOrders = function (symbol, overrides) {
189
- return tslib_1.__awaiter(this, void 0, void 0, function () {
190
- var orderBookSC, numOrders;
191
- return tslib_1.__generator(this, function (_a) {
192
- switch (_a.label) {
193
- case 0:
194
- if (this.proxyContract == null) {
195
- throw Error("no proxy contract initialized. Use createProxyInstance().");
196
- }
197
- orderBookSC = this.getOrderBookContract(symbol);
198
- return [4 /*yield*/, orderBookSC.numberOfOrderBookDigests(overrides || {})];
199
- case 1:
200
- numOrders = _a.sent();
201
- return [2 /*return*/, Number(numOrders)];
202
- }
203
- });
204
- });
205
- };
158
+ async numberOfOpenOrders(symbol, overrides) {
159
+ if (this.proxyContract == null) {
160
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
161
+ }
162
+ const orderBookSC = this.getOrderBookContract(symbol);
163
+ let numOrders = await orderBookSC.numberOfOrderBookDigests(overrides || {});
164
+ return Number(numOrders);
165
+ }
206
166
  /**
207
167
  * Get order from the digest (=id)
208
168
  * @param symbol symbol of order book, e.g. ETH-USD-MATIC
@@ -225,26 +185,15 @@ var OrderReferrerTool = /** @class */ (function (_super) {
225
185
  *
226
186
  * @returns order or undefined
227
187
  */
228
- OrderReferrerTool.prototype.getOrderById = function (symbol, id, overrides) {
229
- return tslib_1.__awaiter(this, void 0, void 0, function () {
230
- var ob, smartContractOrder, order;
231
- return tslib_1.__generator(this, function (_a) {
232
- switch (_a.label) {
233
- case 0: return [4 /*yield*/, this.getOrderBookContract(symbol)];
234
- case 1:
235
- ob = _a.sent();
236
- return [4 /*yield*/, ob.orderOfDigest(id, overrides || {})];
237
- case 2:
238
- smartContractOrder = _a.sent();
239
- if (smartContractOrder.traderAddr == nodeSDKTypes_1.ZERO_ADDRESS) {
240
- return [2 /*return*/, undefined];
241
- }
242
- order = OrderReferrerTool.fromSmartContractOrder(smartContractOrder, this.symbolToPerpStaticInfo);
243
- return [2 /*return*/, order];
244
- }
245
- });
246
- });
247
- };
188
+ async getOrderById(symbol, id, overrides) {
189
+ let ob = await this.getOrderBookContract(symbol);
190
+ let smartContractOrder = await ob.orderOfDigest(id, overrides || {});
191
+ if (smartContractOrder.traderAddr == nodeSDKTypes_1.ZERO_ADDRESS) {
192
+ return undefined;
193
+ }
194
+ let order = OrderReferrerTool.fromSmartContractOrder(smartContractOrder, this.symbolToPerpStaticInfo);
195
+ return order;
196
+ }
248
197
  /**
249
198
  * Get a list of active conditional orders in the order book.
250
199
  * This a read-only action and does not incur in gas costs.
@@ -268,35 +217,25 @@ var OrderReferrerTool = /** @class */ (function (_super) {
268
217
  *
269
218
  * @returns Array of orders and corresponding order IDs
270
219
  */
271
- OrderReferrerTool.prototype.pollLimitOrders = function (symbol, numElements, startAfter, overrides) {
272
- return tslib_1.__awaiter(this, void 0, void 0, function () {
273
- var orderBookSC, _a, orders, orderIds, userFriendlyOrders, orderIdsOut, k;
274
- return tslib_1.__generator(this, function (_b) {
275
- switch (_b.label) {
276
- case 0:
277
- if (this.proxyContract == null) {
278
- throw Error("no proxy contract initialized. Use createProxyInstance().");
279
- }
280
- orderBookSC = this.getOrderBookContract(symbol);
281
- if (typeof startAfter == "undefined") {
282
- startAfter = nodeSDKTypes_1.ZERO_ORDER_ID;
283
- }
284
- return [4 /*yield*/, orderBookSC.pollLimitOrders(startAfter, bignumber_1.BigNumber.from(numElements), overrides || {})];
285
- case 1:
286
- _a = tslib_1.__read.apply(void 0, [_b.sent(), 2]), orders = _a[0], orderIds = _a[1];
287
- userFriendlyOrders = new Array();
288
- orderIdsOut = [];
289
- k = 0;
290
- while (k < orders.length && orders[k].traderAddr != nodeSDKTypes_1.ZERO_ADDRESS) {
291
- userFriendlyOrders.push(writeAccessHandler_1.default.fromClientOrder(orders[k], this.symbolToPerpStaticInfo));
292
- orderIdsOut.push(orderIds[k]);
293
- k++;
294
- }
295
- return [2 /*return*/, [userFriendlyOrders, orderIdsOut]];
296
- }
297
- });
298
- });
299
- };
220
+ async pollLimitOrders(symbol, numElements, startAfter, overrides) {
221
+ if (this.proxyContract == null) {
222
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
223
+ }
224
+ const orderBookSC = this.getOrderBookContract(symbol);
225
+ if (typeof startAfter == "undefined") {
226
+ startAfter = nodeSDKTypes_1.ZERO_ORDER_ID;
227
+ }
228
+ let [orders, orderIds] = await orderBookSC.pollLimitOrders(startAfter, bignumber_1.BigNumber.from(numElements), overrides || {});
229
+ let userFriendlyOrders = new Array();
230
+ let orderIdsOut = [];
231
+ let k = 0;
232
+ while (k < orders.length && orders[k].traderAddr != nodeSDKTypes_1.ZERO_ADDRESS) {
233
+ userFriendlyOrders.push(writeAccessHandler_1.default.fromClientOrder(orders[k], this.symbolToPerpStaticInfo));
234
+ orderIdsOut.push(orderIds[k]);
235
+ k++;
236
+ }
237
+ return [userFriendlyOrders, orderIdsOut];
238
+ }
300
239
  /**
301
240
  * Check if a conditional order can be executed
302
241
  * @param order order structure
@@ -319,41 +258,22 @@ var OrderReferrerTool = /** @class */ (function (_super) {
319
258
  * main();
320
259
  * @returns true if order can be executed for the current state of the perpetuals
321
260
  */
322
- OrderReferrerTool.prototype.isTradeable = function (order, blockTimestamp, indexPrices, overrides) {
323
- return tslib_1.__awaiter(this, void 0, void 0, function () {
324
- var obj, orderPrice, markPrice, currentBlock;
325
- return tslib_1.__generator(this, function (_a) {
326
- switch (_a.label) {
327
- case 0:
328
- if (this.proxyContract == null) {
329
- throw Error("no proxy contract initialized. Use createProxyInstance().");
330
- }
331
- if (!(indexPrices == undefined)) return [3 /*break*/, 2];
332
- return [4 /*yield*/, this.priceFeedGetter.fetchPricesForPerpetual(order.symbol)];
333
- case 1:
334
- obj = _a.sent();
335
- indexPrices = [obj.idxPrices[0], obj.idxPrices[1]];
336
- _a.label = 2;
337
- case 2: return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualPrice(order.symbol, order.quantity, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides)];
338
- case 3:
339
- orderPrice = _a.sent();
340
- return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualMarkPrice(order.symbol, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides)];
341
- case 4:
342
- markPrice = _a.sent();
343
- if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
344
- return [4 /*yield*/, this.provider.getBlockNumber()];
345
- case 5:
346
- currentBlock = _a.sent();
347
- return [4 /*yield*/, this.provider.getBlock(currentBlock)];
348
- case 6:
349
- blockTimestamp = (_a.sent()).timestamp;
350
- _a.label = 7;
351
- case 7: return [4 /*yield*/, this._isTradeable(order, orderPrice, markPrice, blockTimestamp, this.symbolToPerpStaticInfo, overrides)];
352
- case 8: return [2 /*return*/, _a.sent()];
353
- }
354
- });
355
- });
356
- };
261
+ async isTradeable(order, blockTimestamp, indexPrices, overrides) {
262
+ if (this.proxyContract == null) {
263
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
264
+ }
265
+ if (indexPrices == undefined) {
266
+ let obj = await this.priceFeedGetter.fetchPricesForPerpetual(order.symbol);
267
+ indexPrices = [obj.idxPrices[0], obj.idxPrices[1]];
268
+ }
269
+ let orderPrice = await perpetualDataHandler_1.default._queryPerpetualPrice(order.symbol, order.quantity, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides);
270
+ let markPrice = await perpetualDataHandler_1.default._queryPerpetualMarkPrice(order.symbol, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides);
271
+ if (blockTimestamp == undefined) {
272
+ const currentBlock = await this.provider.getBlockNumber();
273
+ blockTimestamp = (await this.provider.getBlock(currentBlock)).timestamp;
274
+ }
275
+ return await this._isTradeable(order, orderPrice, markPrice, blockTimestamp, this.symbolToPerpStaticInfo, overrides);
276
+ }
357
277
  /**
358
278
  * Check for a batch of orders on the same perpetual whether they can be traded
359
279
  * @param orders orders belonging to 1 perpetual
@@ -361,57 +281,32 @@ var OrderReferrerTool = /** @class */ (function (_super) {
361
281
  * if not defined.
362
282
  * @returns array of tradeable boolean
363
283
  */
364
- OrderReferrerTool.prototype.isTradeableBatch = function (orders, blockTimestamp, indexPrices, overrides) {
365
- return tslib_1.__awaiter(this, void 0, void 0, function () {
366
- var obj, orderPrice, markPrice, currentBlock;
367
- var _this = this;
368
- return tslib_1.__generator(this, function (_a) {
369
- switch (_a.label) {
370
- case 0:
371
- if (orders.length == 0) {
372
- return [2 /*return*/, []];
373
- }
374
- if (this.proxyContract == null) {
375
- throw Error("no proxy contract initialized. Use createProxyInstance().");
376
- }
377
- if (orders.filter(function (o) { return o.symbol == orders[0].symbol; }).length < orders.length) {
378
- throw Error("all orders in a batch must have the same symbol");
379
- }
380
- if (!(indexPrices == undefined)) return [3 /*break*/, 2];
381
- return [4 /*yield*/, this.priceFeedGetter.fetchPricesForPerpetual(orders[0].symbol)];
382
- case 1:
383
- obj = _a.sent();
384
- indexPrices = [obj.idxPrices[0], obj.idxPrices[1], obj.mktClosed[0], obj.mktClosed[1]];
385
- _a.label = 2;
386
- case 2:
387
- if (indexPrices[2] || indexPrices[3]) {
388
- // market closed
389
- return [2 /*return*/, orders.map(function () { return false; })];
390
- }
391
- return [4 /*yield*/, Promise.all(orders.map(function (o) {
392
- return perpetualDataHandler_1.default._queryPerpetualPrice(o.symbol, o.quantity, _this.symbolToPerpStaticInfo, _this.proxyContract, [indexPrices[0], indexPrices[1]], overrides);
393
- }))];
394
- case 3:
395
- orderPrice = _a.sent();
396
- return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualMarkPrice(orders[0].symbol, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]], overrides)];
397
- case 4:
398
- markPrice = _a.sent();
399
- if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
400
- return [4 /*yield*/, this.provider.getBlockNumber()];
401
- case 5:
402
- currentBlock = _a.sent();
403
- return [4 /*yield*/, this.provider.getBlock(currentBlock)];
404
- case 6:
405
- blockTimestamp = (_a.sent()).timestamp;
406
- _a.label = 7;
407
- case 7: return [4 /*yield*/, Promise.all(orders.map(function (o, idx) {
408
- return _this._isTradeable(o, orderPrice[idx], markPrice, blockTimestamp, _this.symbolToPerpStaticInfo, overrides);
409
- }))];
410
- case 8: return [2 /*return*/, _a.sent()];
411
- }
412
- });
413
- });
414
- };
284
+ async isTradeableBatch(orders, blockTimestamp, indexPrices, overrides) {
285
+ if (orders.length == 0) {
286
+ return [];
287
+ }
288
+ if (this.proxyContract == null) {
289
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
290
+ }
291
+ if (orders.filter((o) => o.symbol == orders[0].symbol).length < orders.length) {
292
+ throw Error("all orders in a batch must have the same symbol");
293
+ }
294
+ if (indexPrices == undefined) {
295
+ let obj = await this.priceFeedGetter.fetchPricesForPerpetual(orders[0].symbol);
296
+ indexPrices = [obj.idxPrices[0], obj.idxPrices[1], obj.mktClosed[0], obj.mktClosed[1]];
297
+ }
298
+ if (indexPrices[2] || indexPrices[3]) {
299
+ // market closed
300
+ return orders.map(() => false);
301
+ }
302
+ let orderPrice = await Promise.all(orders.map((o) => perpetualDataHandler_1.default._queryPerpetualPrice(o.symbol, o.quantity, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]], overrides)));
303
+ let markPrice = await perpetualDataHandler_1.default._queryPerpetualMarkPrice(orders[0].symbol, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]], overrides);
304
+ if (blockTimestamp == undefined) {
305
+ const currentBlock = await this.provider.getBlockNumber();
306
+ blockTimestamp = (await this.provider.getBlock(currentBlock)).timestamp;
307
+ }
308
+ return await Promise.all(orders.map((o, idx) => this._isTradeable(o, orderPrice[idx], markPrice, blockTimestamp, this.symbolToPerpStaticInfo, overrides)));
309
+ }
415
310
  /**
416
311
  * Can the order be executed?
417
312
  * @param order order struct
@@ -421,95 +316,79 @@ var OrderReferrerTool = /** @class */ (function (_super) {
421
316
  * @param symbolToPerpInfoMap metadata
422
317
  * @returns true if trading conditions met, false otherwise
423
318
  */
424
- OrderReferrerTool.prototype._isTradeable = function (order, tradePrice, markPrice, blockTimestamp, symbolToPerpInfoMap, overrides) {
425
- return tslib_1.__awaiter(this, void 0, void 0, function () {
426
- var nextBlockTimestamp, lotSize, limitPrice, orderBookContract, parentStatus;
427
- return tslib_1.__generator(this, function (_a) {
428
- switch (_a.label) {
429
- case 0:
430
- // check expiration date
431
- if (order.deadline != undefined && order.deadline < Date.now() / 1000) {
432
- console.log("order expired");
433
- return [2 /*return*/, false];
434
- }
435
- nextBlockTimestamp = blockTimestamp + 2;
436
- // TODO: replace 2 by a chain-dependent constant - 1 for zkEVM
437
- if (nextBlockTimestamp < order.executionTimestamp) {
438
- console.log("execution deferred to ".concat(order.executionTimestamp - nextBlockTimestamp, " more seconds"));
439
- return [2 /*return*/, false];
440
- }
441
- if (order.submittedTimestamp != undefined &&
442
- nextBlockTimestamp < order.submittedTimestamp + OrderReferrerTool.TRADE_DELAY) {
443
- // next block should be in ~2 seconds, so + 2
444
- console.log("on hold for ".concat(OrderReferrerTool.TRADE_DELAY + order.submittedTimestamp - nextBlockTimestamp, " more seconds"));
445
- return [2 /*return*/, false];
446
- }
447
- lotSize = perpetualDataHandler_1.default._getLotSize(order.symbol, symbolToPerpInfoMap);
448
- if (order.quantity < lotSize) {
449
- // console.log(`order size too small: ${order.quantity} < ${lotSize}`);
450
- return [2 /*return*/, false];
451
- }
452
- // check limit price: fromSmartContractOrder will set it to undefined when not tradeable
453
- if (order.limitPrice == undefined) {
454
- // console.log("limit price undefined");
455
- return [2 /*return*/, false];
456
- }
457
- limitPrice = order.limitPrice;
458
- if ((order.side == nodeSDKTypes_1.BUY_SIDE && tradePrice > limitPrice) || (order.side == nodeSDKTypes_1.SELL_SIDE && tradePrice < limitPrice)) {
459
- // console.log(`limit price not met: ${limitPrice} ${order.side} @ ${tradePrice}`);
460
- return [2 /*return*/, false];
461
- }
462
- // check stop price
463
- if (order.stopPrice != undefined &&
464
- ((order.side == nodeSDKTypes_1.BUY_SIDE && markPrice < order.stopPrice) ||
465
- (order.side == nodeSDKTypes_1.SELL_SIDE && markPrice > order.stopPrice))) {
466
- // console.log("stop price not met");
467
- return [2 /*return*/, false];
468
- }
469
- if (!(order.parentChildOrderIds != undefined &&
470
- order.parentChildOrderIds[0] == constants_1.HashZero &&
471
- order.parentChildOrderIds[1] != constants_1.HashZero)) return [3 /*break*/, 2];
472
- orderBookContract = this.getOrderBookContract(order.symbol);
473
- return [4 /*yield*/, orderBookContract.getOrderStatus(order.parentChildOrderIds[1], overrides || {})];
474
- case 1:
475
- parentStatus = _a.sent();
476
- if (parentStatus == 2 || parentStatus == 3) {
477
- // console.log("parent not executed/cancelled");
478
- // parent is open or unknown
479
- return [2 /*return*/, false];
480
- }
481
- return [2 /*return*/, true];
482
- case 2:
483
- // all checks passed -> order is tradeable
484
- return [2 /*return*/, true];
485
- }
486
- });
487
- });
488
- };
319
+ async _isTradeable(order, tradePrice, markPrice, blockTimestamp, symbolToPerpInfoMap, overrides) {
320
+ // check expiration date
321
+ if (order.deadline != undefined && order.deadline < Date.now() / 1000) {
322
+ console.log("order expired");
323
+ return false;
324
+ }
325
+ const nextBlockTimestamp = blockTimestamp + 2;
326
+ // TODO: replace 2 by a chain-dependent constant - 1 for zkEVM
327
+ if (nextBlockTimestamp < order.executionTimestamp) {
328
+ console.log(`execution deferred to ${order.executionTimestamp - nextBlockTimestamp} more seconds`);
329
+ return false;
330
+ }
331
+ if (order.submittedTimestamp != undefined &&
332
+ nextBlockTimestamp < order.submittedTimestamp + OrderReferrerTool.TRADE_DELAY) {
333
+ // next block should be in ~2 seconds, so + 2
334
+ console.log(`on hold for ${OrderReferrerTool.TRADE_DELAY + order.submittedTimestamp - nextBlockTimestamp} more seconds`);
335
+ return false;
336
+ }
337
+ // check order size
338
+ const lotSize = perpetualDataHandler_1.default._getLotSize(order.symbol, symbolToPerpInfoMap);
339
+ if (order.quantity < lotSize) {
340
+ // console.log(`order size too small: ${order.quantity} < ${lotSize}`);
341
+ return false;
342
+ }
343
+ // check limit price: fromSmartContractOrder will set it to undefined when not tradeable
344
+ if (order.limitPrice == undefined) {
345
+ // console.log("limit price undefined");
346
+ return false;
347
+ }
348
+ let limitPrice = order.limitPrice;
349
+ if ((order.side == nodeSDKTypes_1.BUY_SIDE && tradePrice > limitPrice) || (order.side == nodeSDKTypes_1.SELL_SIDE && tradePrice < limitPrice)) {
350
+ // console.log(`limit price not met: ${limitPrice} ${order.side} @ ${tradePrice}`);
351
+ return false;
352
+ }
353
+ // check stop price
354
+ if (order.stopPrice != undefined &&
355
+ ((order.side == nodeSDKTypes_1.BUY_SIDE && markPrice < order.stopPrice) ||
356
+ (order.side == nodeSDKTypes_1.SELL_SIDE && markPrice > order.stopPrice))) {
357
+ // console.log("stop price not met");
358
+ return false;
359
+ }
360
+ //check dependency
361
+ if (order.parentChildOrderIds != undefined &&
362
+ order.parentChildOrderIds[0] == constants_1.HashZero &&
363
+ order.parentChildOrderIds[1] != constants_1.HashZero) {
364
+ // order has a parent
365
+ const orderBookContract = this.getOrderBookContract(order.symbol);
366
+ const parentStatus = await orderBookContract.getOrderStatus(order.parentChildOrderIds[1], overrides || {});
367
+ if (parentStatus == 2 || parentStatus == 3) {
368
+ // console.log("parent not executed/cancelled");
369
+ // parent is open or unknown
370
+ return false;
371
+ }
372
+ return true;
373
+ }
374
+ // all checks passed -> order is tradeable
375
+ return true;
376
+ }
489
377
  /**
490
378
  * Wrapper of static method to use after mappings have been loaded into memory.
491
379
  * @param scOrder Perpetual order as received in the proxy events.
492
380
  * @returns A user-friendly order struct.
493
381
  */
494
- OrderReferrerTool.prototype.smartContractOrderToOrder = function (scOrder) {
382
+ smartContractOrderToOrder(scOrder) {
495
383
  return perpetualDataHandler_1.default.fromSmartContractOrder(scOrder, this.symbolToPerpStaticInfo);
496
- };
497
- OrderReferrerTool.prototype.getTransactionCount = function (blockTag) {
498
- return tslib_1.__awaiter(this, void 0, void 0, function () {
499
- return tslib_1.__generator(this, function (_a) {
500
- switch (_a.label) {
501
- case 0:
502
- if (this.signer == null) {
503
- throw Error("no wallet initialized. Use createProxyInstance().");
504
- }
505
- return [4 /*yield*/, this.signer.getTransactionCount(blockTag)];
506
- case 1: return [2 /*return*/, _a.sent()];
507
- }
508
- });
509
- });
510
- };
511
- OrderReferrerTool.TRADE_DELAY = 4;
512
- return OrderReferrerTool;
513
- }(writeAccessHandler_1.default));
384
+ }
385
+ async getTransactionCount(blockTag) {
386
+ if (this.signer == null) {
387
+ throw Error("no wallet initialized. Use createProxyInstance().");
388
+ }
389
+ return await this.signer.getTransactionCount(blockTag);
390
+ }
391
+ }
514
392
  exports.default = OrderReferrerTool;
393
+ OrderReferrerTool.TRADE_DELAY = 4;
515
394
  //# sourceMappingURL=orderReferrerTool.js.map