@d8x/perpetuals-sdk 0.1.12 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/cjs/abi/testnet/IPerpetualManager.json +5215 -0
  2. package/dist/cjs/abi/testnet/LimitOrderBook.json +1075 -0
  3. package/dist/cjs/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
  4. package/dist/cjs/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
  5. package/dist/cjs/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
  6. package/dist/cjs/accountTrade.js +441 -0
  7. package/dist/cjs/accountTrade.js.map +1 -0
  8. package/dist/{src → cjs}/brokerTool.js +31 -84
  9. package/dist/cjs/brokerTool.js.map +1 -0
  10. package/dist/cjs/config/defaultConfig.json +47 -0
  11. package/dist/cjs/config/mockSwap.json +4 -0
  12. package/dist/cjs/config/priceFeedConfig.json +104 -0
  13. package/dist/cjs/config/symbolList.json +13 -0
  14. package/dist/cjs/d8XMath.js.map +1 -0
  15. package/dist/cjs/index.js +29 -0
  16. package/dist/cjs/index.js.map +1 -0
  17. package/dist/cjs/liquidatorTool.js +287 -0
  18. package/dist/cjs/liquidatorTool.js.map +1 -0
  19. package/dist/{src → cjs}/liquidityProviderTool.js +12 -65
  20. package/dist/cjs/liquidityProviderTool.js.map +1 -0
  21. package/dist/{src → cjs}/marketData.js +52 -134
  22. package/dist/cjs/marketData.js.map +1 -0
  23. package/dist/{src → cjs}/nodeSDKTypes.d.ts +5 -5
  24. package/dist/cjs/nodeSDKTypes.js +64 -0
  25. package/dist/cjs/nodeSDKTypes.js.map +1 -0
  26. package/dist/{src → cjs}/orderReferrerTool.d.ts +12 -5
  27. package/dist/{src → cjs}/orderReferrerTool.js +114 -112
  28. package/dist/cjs/orderReferrerTool.js.map +1 -0
  29. package/dist/{src → cjs}/perpetualDataHandler.d.ts +1 -1
  30. package/dist/{src → cjs}/perpetualDataHandler.js +47 -109
  31. package/dist/cjs/perpetualDataHandler.js.map +1 -0
  32. package/dist/{src → cjs}/perpetualEventHandler.d.ts +3 -3
  33. package/dist/{src → cjs}/perpetualEventHandler.js +12 -74
  34. package/dist/cjs/perpetualEventHandler.js.map +1 -0
  35. package/dist/cjs/priceFeeds.js +466 -0
  36. package/dist/cjs/priceFeeds.js.map +1 -0
  37. package/dist/{src → cjs}/traderDigests.js +7 -43
  38. package/dist/cjs/traderDigests.js.map +1 -0
  39. package/dist/{src → cjs}/traderInterface.js +13 -66
  40. package/dist/cjs/traderInterface.js.map +1 -0
  41. package/dist/{src → cjs}/triangulator.js +2 -17
  42. package/dist/cjs/triangulator.js.map +1 -0
  43. package/dist/{src → cjs}/utils.js +3 -29
  44. package/dist/cjs/utils.js.map +1 -0
  45. package/dist/cjs/version.d.ts +1 -0
  46. package/dist/{src → cjs}/version.js +1 -1
  47. package/dist/cjs/version.js.map +1 -0
  48. package/dist/{src → cjs}/writeAccessHandler.js +12 -65
  49. package/dist/cjs/writeAccessHandler.js.map +1 -0
  50. package/dist/esm/abi/ERC20.json +288 -0
  51. package/dist/esm/abi/MockTokenSwap.json +186 -0
  52. package/dist/{abi/testnet → esm/abi/central-park}/IPerpetualManager.json +404 -214
  53. package/dist/{abi/testnet → esm/abi/central-park}/LimitOrderBook.json +197 -15
  54. package/dist/esm/abi/central-park/LimitOrderBookFactory.json +135 -0
  55. package/dist/esm/abi/testnet/IPerpetualManager.json +5215 -0
  56. package/dist/esm/abi/testnet/LimitOrderBook.json +1075 -0
  57. package/dist/esm/abi/testnet/LimitOrderBookFactory.json +135 -0
  58. package/dist/esm/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
  59. package/dist/esm/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
  60. package/dist/esm/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
  61. package/dist/esm/accountTrade.d.ts +221 -0
  62. package/dist/{src → esm}/accountTrade.js +22 -93
  63. package/dist/esm/accountTrade.js.map +1 -0
  64. package/dist/esm/brokerTool.d.ts +318 -0
  65. package/dist/esm/brokerTool.js +572 -0
  66. package/dist/esm/brokerTool.js.map +1 -0
  67. package/dist/esm/config/defaultConfig.json +47 -0
  68. package/dist/esm/config/mockSwap.json +4 -0
  69. package/dist/esm/config/priceFeedConfig.json +104 -0
  70. package/dist/esm/config/symbolList.json +13 -0
  71. package/dist/esm/d8XMath.d.ts +122 -0
  72. package/dist/esm/d8XMath.js +247 -0
  73. package/dist/esm/d8XMath.js.map +1 -0
  74. package/{src/index.ts → dist/esm/index.d.ts} +1 -15
  75. package/dist/esm/index.js +16 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/liquidatorTool.d.ts +158 -0
  78. package/dist/{src → esm}/liquidatorTool.js +10 -65
  79. package/dist/esm/liquidatorTool.js.map +1 -0
  80. package/dist/esm/liquidityProviderTool.d.ts +126 -0
  81. package/dist/esm/liquidityProviderTool.js +218 -0
  82. package/dist/esm/liquidityProviderTool.js.map +1 -0
  83. package/dist/esm/marketData.d.ts +309 -0
  84. package/dist/esm/marketData.js +1007 -0
  85. package/dist/esm/marketData.js.map +1 -0
  86. package/dist/esm/nodeSDKTypes.d.ts +266 -0
  87. package/dist/esm/nodeSDKTypes.js +60 -0
  88. package/dist/esm/nodeSDKTypes.js.map +1 -0
  89. package/dist/esm/orderReferrerTool.d.ts +196 -0
  90. package/dist/esm/orderReferrerTool.js +491 -0
  91. package/dist/esm/orderReferrerTool.js.map +1 -0
  92. package/dist/esm/perpetualDataHandler.d.ts +220 -0
  93. package/dist/esm/perpetualDataHandler.js +1060 -0
  94. package/dist/esm/perpetualDataHandler.js.map +1 -0
  95. package/dist/esm/perpetualEventHandler.d.ts +179 -0
  96. package/dist/esm/perpetualEventHandler.js +435 -0
  97. package/dist/esm/perpetualEventHandler.js.map +1 -0
  98. package/dist/esm/priceFeeds.d.ts +115 -0
  99. package/dist/{src → esm}/priceFeeds.js +16 -83
  100. package/dist/esm/priceFeeds.js.map +1 -0
  101. package/dist/esm/traderDigests.d.ts +21 -0
  102. package/dist/esm/traderDigests.js +80 -0
  103. package/dist/esm/traderDigests.js.map +1 -0
  104. package/dist/esm/traderInterface.d.ts +79 -0
  105. package/dist/esm/traderInterface.js +196 -0
  106. package/dist/esm/traderInterface.js.map +1 -0
  107. package/dist/esm/triangulator.d.ts +27 -0
  108. package/dist/esm/triangulator.js +110 -0
  109. package/dist/esm/triangulator.js.map +1 -0
  110. package/dist/esm/utils.d.ts +59 -0
  111. package/dist/esm/utils.js +138 -0
  112. package/dist/esm/utils.js.map +1 -0
  113. package/dist/esm/version.d.ts +1 -0
  114. package/dist/esm/version.js +2 -0
  115. package/dist/esm/version.js.map +1 -0
  116. package/dist/esm/writeAccessHandler.d.ts +50 -0
  117. package/dist/esm/writeAccessHandler.js +157 -0
  118. package/dist/esm/writeAccessHandler.js.map +1 -0
  119. package/package.json +16 -26
  120. package/dist/bundle.js +0 -36793
  121. package/dist/config/defaultConfig.json +0 -47
  122. package/dist/config/mockSwap.json +0 -4
  123. package/dist/config/priceFeedConfig.json +0 -104
  124. package/dist/config/symbolList.json +0 -13
  125. package/dist/src/index.js +0 -45
  126. package/dist/src/nodeSDKTypes.js +0 -115
  127. package/dist/src/version.d.ts +0 -1
  128. package/module.d.ts +0 -1
  129. package/src/accountTrade.ts +0 -392
  130. package/src/brokerTool.ts +0 -507
  131. package/src/d8XMath.ts +0 -319
  132. package/src/liquidatorTool.ts +0 -258
  133. package/src/liquidityProviderTool.ts +0 -186
  134. package/src/marketData.ts +0 -946
  135. package/src/nodeSDKTypes.ts +0 -293
  136. package/src/orderReferrerTool.ts +0 -389
  137. package/src/perpetualDataHandler.ts +0 -1061
  138. package/src/perpetualEventHandler.ts +0 -455
  139. package/src/priceFeeds.ts +0 -381
  140. package/src/traderDigests.ts +0 -91
  141. package/src/traderInterface.ts +0 -159
  142. package/src/triangulator.ts +0 -105
  143. package/src/utils.ts +0 -134
  144. package/src/version.ts +0 -1
  145. package/src/writeAccessHandler.ts +0 -127
  146. /package/dist/{abi → cjs/abi}/ERC20.json +0 -0
  147. /package/dist/{abi → cjs/abi}/MockTokenSwap.json +0 -0
  148. /package/dist/{abi → cjs/abi}/central-park/IPerpetualManager.json +0 -0
  149. /package/dist/{abi → cjs/abi}/central-park/LimitOrderBook.json +0 -0
  150. /package/dist/{abi → cjs/abi}/central-park/LimitOrderBookFactory.json +0 -0
  151. /package/dist/{abi → cjs/abi}/testnet/LimitOrderBookFactory.json +0 -0
  152. /package/dist/{src → cjs}/accountTrade.d.ts +0 -0
  153. /package/dist/{src → cjs}/brokerTool.d.ts +0 -0
  154. /package/dist/{src → cjs}/d8XMath.d.ts +0 -0
  155. /package/dist/{src → cjs}/d8XMath.js +0 -0
  156. /package/dist/{src → cjs}/index.d.ts +0 -0
  157. /package/dist/{src → cjs}/liquidatorTool.d.ts +0 -0
  158. /package/dist/{src → cjs}/liquidityProviderTool.d.ts +0 -0
  159. /package/dist/{src → cjs}/marketData.d.ts +0 -0
  160. /package/dist/{src → cjs}/priceFeeds.d.ts +0 -0
  161. /package/dist/{src → cjs}/traderDigests.d.ts +0 -0
  162. /package/dist/{src → cjs}/traderInterface.d.ts +0 -0
  163. /package/dist/{src → cjs}/triangulator.d.ts +0 -0
  164. /package/dist/{src → cjs}/utils.d.ts +0 -0
  165. /package/dist/{src → cjs}/writeAccessHandler.d.ts +0 -0
@@ -0,0 +1,491 @@
1
+ import { __awaiter, __extends, __generator, __read } from "tslib";
2
+ import { BigNumber, ethers } from "ethers";
3
+ import { BUY_SIDE, SELL_SIDE, ZERO_ADDRESS, ZERO_ORDER_ID, } from "./nodeSDKTypes";
4
+ import PerpetualDataHandler from "./perpetualDataHandler";
5
+ import WriteAccessHandler from "./writeAccessHandler";
6
+ /**
7
+ * Functions to execute existing conditional orders from the limit order book. This class
8
+ * requires a private key and executes smart-contract interactions that require
9
+ * gas-payments.
10
+ * @extends WriteAccessHandler
11
+ */
12
+ var OrderReferrerTool = /** @class */ (function (_super) {
13
+ __extends(OrderReferrerTool, _super);
14
+ /**
15
+ * Constructor.
16
+ * @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
17
+ * @example
18
+ * import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
19
+ * async function main() {
20
+ * console.log(OrderReferrerTool);
21
+ * // load configuration for testnet
22
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
23
+ * // OrderReferrerTool (authentication required, PK is an environment variable with a private key)
24
+ * const pk: string = <string>process.env.PK;
25
+ * let orderTool = new OrderReferrerTool(config, pk);
26
+ * // Create a proxy instance to access the blockchain
27
+ * await orderTool.createProxyInstance();
28
+ * }
29
+ * main();
30
+ *
31
+ * @param {string} privateKey Private key of the wallet that executes the conditional orders.
32
+ */
33
+ function OrderReferrerTool(config, privateKey) {
34
+ return _super.call(this, config, privateKey) || this;
35
+ }
36
+ /**
37
+ * Executes an order by symbol and ID. This action interacts with the blockchain and incurs gas costs.
38
+ * @param {string} symbol Symbol of the form ETH-USD-MATIC.
39
+ * @param {string} orderId ID of the order to be executed.
40
+ * @param {string=} referrerAddr optional address of the wallet to be credited for executing the order, if different from the one submitting this transaction.
41
+ * @param {number=} nonce optional nonce
42
+ * @param {PriceFeedSubmission=} submission optional signed prices obtained via PriceFeeds::fetchLatestFeedPriceInfoForPerpetual
43
+ * @example
44
+ * import { OrderReferrerTool, PerpetualDataHandler, Order } from "@d8x/perpetuals-sdk";
45
+ * async function main() {
46
+ * console.log(OrderReferrerTool);
47
+ * // Setup (authentication required, PK is an environment variable with a private key)
48
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
49
+ * const pk: string = <string>process.env.PK;
50
+ * const symbol = "ETH-USD-MATIC";
51
+ * let orderTool = new OrderReferrerTool(config, pk);
52
+ * await orderTool.createProxyInstance();
53
+ * // get some open orders
54
+ * const maxOrdersToGet = 5;
55
+ * let [orders, ids]: [Order[], string[]] = await orderTool.pollLimitOrders(symbol, maxOrdersToGet);
56
+ * console.log(`Got ${ids.length} orders`);
57
+ * for (let k = 0; k < ids.length; k++) {
58
+ * // check whether order meets conditions
59
+ * let doExecute = await orderTool.isTradeable(orders[k]);
60
+ * if (doExecute) {
61
+ * // execute
62
+ * let tx = await orderTool.executeOrder(symbol, ids[k]);
63
+ * console.log(`Sent order id ${ids[k]} for execution, tx hash = ${tx.hash}`);
64
+ * }
65
+ * }
66
+ * }
67
+ * main();
68
+ * @returns Transaction object.
69
+ */
70
+ OrderReferrerTool.prototype.executeOrder = function (symbol, orderId, referrerAddr, nonce, submission) {
71
+ return __awaiter(this, void 0, void 0, function () {
72
+ var orderBookSC, options;
73
+ return __generator(this, function (_a) {
74
+ switch (_a.label) {
75
+ case 0:
76
+ if (this.proxyContract == null || this.signer == null) {
77
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
78
+ }
79
+ orderBookSC = this.getOrderBookContract(symbol);
80
+ if (typeof referrerAddr == "undefined") {
81
+ referrerAddr = this.traderAddr;
82
+ }
83
+ if (!(submission == undefined)) return [3 /*break*/, 2];
84
+ return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
85
+ case 1:
86
+ submission = _a.sent();
87
+ _a.label = 2;
88
+ case 2:
89
+ options = {
90
+ gasLimit: this.gasLimit,
91
+ nonce: nonce,
92
+ value: this.PRICE_UPDATE_FEE_GWEI * (submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas.length),
93
+ };
94
+ return [4 /*yield*/, orderBookSC.executeOrder(orderId, referrerAddr, submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas, submission === null || submission === void 0 ? void 0 : submission.timestamps, options)];
95
+ case 3: return [2 /*return*/, _a.sent()];
96
+ }
97
+ });
98
+ });
99
+ };
100
+ OrderReferrerTool.prototype.executeOrders = function (symbol, orderIds, referrerAddr, nonce, submission) {
101
+ return __awaiter(this, void 0, void 0, function () {
102
+ var orderBookSC, options;
103
+ return __generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0:
106
+ if (this.proxyContract == null || this.signer == null) {
107
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
108
+ }
109
+ orderBookSC = this.getOrderBookContract(symbol);
110
+ if (typeof referrerAddr == "undefined") {
111
+ referrerAddr = this.traderAddr;
112
+ }
113
+ if (!(submission == undefined)) return [3 /*break*/, 2];
114
+ return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
115
+ case 1:
116
+ submission = _a.sent();
117
+ _a.label = 2;
118
+ case 2:
119
+ options = {
120
+ gasLimit: this.gasLimit,
121
+ nonce: nonce,
122
+ value: this.PRICE_UPDATE_FEE_GWEI * (submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas.length),
123
+ };
124
+ 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, options)];
125
+ case 3: return [2 /*return*/, _a.sent()];
126
+ }
127
+ });
128
+ });
129
+ };
130
+ /**
131
+ * All the orders in the order book for a given symbol that are currently open.
132
+ * @param {string} symbol Symbol of the form ETH-USD-MATIC.
133
+ * @example
134
+ * import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
135
+ * async function main() {
136
+ * console.log(OrderReferrerTool);
137
+ * // setup (authentication required, PK is an environment variable with a private key)
138
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
139
+ * const pk: string = <string>process.env.PK;
140
+ * let orderTool = new OrderReferrerTool(config, pk);
141
+ * await orderTool.createProxyInstance();
142
+ * // get all open orders
143
+ * let openOrders = await orderTool.getAllOpenOrders("ETH-USD-MATIC");
144
+ * console.log(openOrders);
145
+ * }
146
+ * main();
147
+ *
148
+ * @returns Array with all open orders and their IDs.
149
+ */
150
+ OrderReferrerTool.prototype.getAllOpenOrders = function (symbol) {
151
+ return __awaiter(this, void 0, void 0, function () {
152
+ var totalOrders;
153
+ return __generator(this, function (_a) {
154
+ switch (_a.label) {
155
+ case 0: return [4 /*yield*/, this.numberOfOpenOrders(symbol)];
156
+ case 1:
157
+ totalOrders = _a.sent();
158
+ return [4 /*yield*/, this.pollLimitOrders(symbol, totalOrders)];
159
+ case 2: return [2 /*return*/, _a.sent()];
160
+ }
161
+ });
162
+ });
163
+ };
164
+ /**
165
+ * Total number of limit orders for this symbol, excluding those that have been cancelled/removed.
166
+ * @param {string} symbol Symbol of the form ETH-USD-MATIC.
167
+ * @example
168
+ * import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
169
+ * async function main() {
170
+ * console.log(OrderReferrerTool);
171
+ * // setup (authentication required, PK is an environment variable with a private key)
172
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
173
+ * const pk: string = <string>process.env.PK;
174
+ * let orderTool = new OrderReferrerTool(config, pk);
175
+ * await orderTool.createProxyInstance();
176
+ * // get all open orders
177
+ * let numberOfOrders = await orderTool.numberOfOpenOrders("ETH-USD-MATIC");
178
+ * console.log(numberOfOrders);
179
+ * }
180
+ * main();
181
+ *
182
+ * @returns {number} Number of open orders.
183
+ */
184
+ OrderReferrerTool.prototype.numberOfOpenOrders = function (symbol) {
185
+ return __awaiter(this, void 0, void 0, function () {
186
+ var orderBookSC, numOrders;
187
+ return __generator(this, function (_a) {
188
+ switch (_a.label) {
189
+ case 0:
190
+ if (this.proxyContract == null) {
191
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
192
+ }
193
+ orderBookSC = this.getOrderBookContract(symbol);
194
+ return [4 /*yield*/, orderBookSC.numberOfOrderBookDigests()];
195
+ case 1:
196
+ numOrders = _a.sent();
197
+ return [2 /*return*/, Number(numOrders)];
198
+ }
199
+ });
200
+ });
201
+ };
202
+ /**
203
+ * Get order from the digest (=id)
204
+ * @param symbol symbol of order book, e.g. ETH-USD-MATIC
205
+ * @param digest digest of the order (=order ID)
206
+ * @example
207
+ * import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
208
+ * async function main() {
209
+ * console.log(OrderReferrerTool);
210
+ * // setup (authentication required, PK is an environment variable with a private key)
211
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
212
+ * const pk: string = <string>process.env.PK;
213
+ * let orderTool = new OrderReferrerTool(config, pk);
214
+ * await orderTool.createProxyInstance();
215
+ * // get order by ID
216
+ * let myorder = await orderTool.getOrderById("MATIC-USD-MATIC",
217
+ * "0x0091a1d878491479afd09448966c1403e9d8753122e25260d3b2b9688d946eae");
218
+ * console.log(myorder);
219
+ * }
220
+ * main();
221
+ *
222
+ * @returns order or undefined
223
+ */
224
+ OrderReferrerTool.prototype.getOrderById = function (symbol, id) {
225
+ return __awaiter(this, void 0, void 0, function () {
226
+ var ob, smartContractOrder, order;
227
+ return __generator(this, function (_a) {
228
+ switch (_a.label) {
229
+ case 0: return [4 /*yield*/, this.getOrderBookContract(symbol)];
230
+ case 1:
231
+ ob = _a.sent();
232
+ return [4 /*yield*/, ob.orderOfDigest(id)];
233
+ case 2:
234
+ smartContractOrder = _a.sent();
235
+ if (smartContractOrder.traderAddr == ZERO_ADDRESS) {
236
+ return [2 /*return*/, undefined];
237
+ }
238
+ order = OrderReferrerTool.fromSmartContractOrder(smartContractOrder, this.symbolToPerpStaticInfo);
239
+ return [2 /*return*/, order];
240
+ }
241
+ });
242
+ });
243
+ };
244
+ /**
245
+ * Get a list of active conditional orders in the order book.
246
+ * This a read-only action and does not incur in gas costs.
247
+ * @param {string} symbol Symbol of the form ETH-USD-MATIC.
248
+ * @param {number} numElements Maximum number of orders to poll.
249
+ * @param {string=} startAfter Optional order ID from where to start polling. Defaults to the first order.
250
+ * @example
251
+ * import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
252
+ * async function main() {
253
+ * console.log(OrderReferrerTool);
254
+ * // setup (authentication required, PK is an environment variable with a private key)
255
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
256
+ * const pk: string = <string>process.env.PK;
257
+ * let orderTool = new OrderReferrerTool(config, pk);
258
+ * await orderTool.createProxyInstance();
259
+ * // get all open orders
260
+ * let activeOrders = await orderTool.pollLimitOrders("ETH-USD-MATIC", 2);
261
+ * console.log(activeOrders);
262
+ * }
263
+ * main();
264
+ *
265
+ * @returns Array of orders and corresponding order IDs
266
+ */
267
+ OrderReferrerTool.prototype.pollLimitOrders = function (symbol, numElements, startAfter) {
268
+ return __awaiter(this, void 0, void 0, function () {
269
+ var orderBookSC, orders, orderIds, userFriendlyOrders, orderIdsOut, k;
270
+ var _a;
271
+ return __generator(this, function (_b) {
272
+ switch (_b.label) {
273
+ case 0:
274
+ if (this.proxyContract == null) {
275
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
276
+ }
277
+ orderBookSC = this.getOrderBookContract(symbol);
278
+ if (typeof startAfter == "undefined") {
279
+ startAfter = ZERO_ORDER_ID;
280
+ }
281
+ return [4 /*yield*/, orderBookSC.pollLimitOrders(startAfter, BigNumber.from(numElements))];
282
+ case 1:
283
+ _a = __read.apply(void 0, [_b.sent(), 2]), orders = _a[0], orderIds = _a[1];
284
+ userFriendlyOrders = new Array();
285
+ orderIdsOut = [];
286
+ k = 0;
287
+ while (k < orders.length && orders[k].traderAddr != ZERO_ADDRESS) {
288
+ userFriendlyOrders.push(WriteAccessHandler.fromClientOrder(orders[k], this.symbolToPerpStaticInfo));
289
+ orderIdsOut.push(orderIds[k]);
290
+ k++;
291
+ }
292
+ return [2 /*return*/, [userFriendlyOrders, orderIdsOut]];
293
+ }
294
+ });
295
+ });
296
+ };
297
+ /**
298
+ * Check if a conditional order can be executed
299
+ * @param order order structure
300
+ * @param indexPrices pair of index prices S2 and S3. S3 set to zero if not required. If undefined
301
+ * the function will fetch the latest prices from the REST API
302
+ * @example
303
+ * import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
304
+ * async function main() {
305
+ * console.log(OrderReferrerTool);
306
+ * // setup (authentication required, PK is an environment variable with a private key)
307
+ * const config = PerpetualDataHandler.readSDKConfig("testnet");
308
+ * const pk: string = <string>process.env.PK;
309
+ * let orderTool = new OrderReferrerTool(config, pk);
310
+ * await orderTool.createProxyInstance();
311
+ * // check if tradeable
312
+ * let openOrders = await orderTool.getAllOpenOrders("MATIC-USD-MATIC");
313
+ * let check = await orderTool.isTradeable(openOrders[0][0]);
314
+ * console.log(check);
315
+ * }
316
+ * main();
317
+ * @returns true if order can be executed for the current state of the perpetuals
318
+ */
319
+ OrderReferrerTool.prototype.isTradeable = function (order, blockTimestamp, indexPrices) {
320
+ return __awaiter(this, void 0, void 0, function () {
321
+ var obj, orderPrice, markPrice, currentBlock;
322
+ return __generator(this, function (_a) {
323
+ switch (_a.label) {
324
+ case 0:
325
+ if (this.proxyContract == null) {
326
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
327
+ }
328
+ if (!(indexPrices == undefined)) return [3 /*break*/, 2];
329
+ return [4 /*yield*/, this.priceFeedGetter.fetchPricesForPerpetual(order.symbol)];
330
+ case 1:
331
+ obj = _a.sent();
332
+ indexPrices = [obj.idxPrices[0], obj.idxPrices[1]];
333
+ _a.label = 2;
334
+ case 2: return [4 /*yield*/, PerpetualDataHandler._queryPerpetualPrice(order.symbol, order.quantity, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices)];
335
+ case 3:
336
+ orderPrice = _a.sent();
337
+ return [4 /*yield*/, PerpetualDataHandler._queryPerpetualMarkPrice(order.symbol, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices)];
338
+ case 4:
339
+ markPrice = _a.sent();
340
+ if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
341
+ return [4 /*yield*/, this.provider.getBlockNumber()];
342
+ case 5:
343
+ currentBlock = _a.sent();
344
+ return [4 /*yield*/, this.provider.getBlock(currentBlock)];
345
+ case 6:
346
+ blockTimestamp = (_a.sent()).timestamp;
347
+ _a.label = 7;
348
+ case 7: return [4 /*yield*/, this._isTradeable(order, orderPrice, markPrice, blockTimestamp, this.symbolToPerpStaticInfo)];
349
+ case 8: return [2 /*return*/, _a.sent()];
350
+ }
351
+ });
352
+ });
353
+ };
354
+ /**
355
+ * Check for a batch of orders on the same perpetual whether they can be traded
356
+ * @param orders orders belonging to 1 perpetual
357
+ * @param indexPrice S2,S3-index prices for the given perpetual. Will fetch prices from REST API
358
+ * if not defined.
359
+ * @returns array of tradeable boolean
360
+ */
361
+ OrderReferrerTool.prototype.isTradeableBatch = function (orders, blockTimestamp, indexPrices) {
362
+ return __awaiter(this, void 0, void 0, function () {
363
+ var obj, orderPrice, markPrice, currentBlock;
364
+ var _this = this;
365
+ return __generator(this, function (_a) {
366
+ switch (_a.label) {
367
+ case 0:
368
+ if (orders.length == 0) {
369
+ return [2 /*return*/, []];
370
+ }
371
+ if (this.proxyContract == null) {
372
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
373
+ }
374
+ if (orders.filter(function (o) { return o.symbol == orders[0].symbol; }).length < orders.length) {
375
+ throw Error("all orders in a batch must have the same symbol");
376
+ }
377
+ if (!(indexPrices == undefined)) return [3 /*break*/, 2];
378
+ return [4 /*yield*/, this.priceFeedGetter.fetchPricesForPerpetual(orders[0].symbol)];
379
+ case 1:
380
+ obj = _a.sent();
381
+ indexPrices = [obj.idxPrices[0], obj.idxPrices[1], obj.mktClosed[0], obj.mktClosed[1]];
382
+ _a.label = 2;
383
+ case 2:
384
+ if (indexPrices[2] || indexPrices[3]) {
385
+ // market closed
386
+ return [2 /*return*/, orders.map(function () { return false; })];
387
+ }
388
+ return [4 /*yield*/, Promise.all(orders.map(function (o) {
389
+ return PerpetualDataHandler._queryPerpetualPrice(o.symbol, o.quantity, _this.symbolToPerpStaticInfo, _this.proxyContract, [indexPrices[0], indexPrices[1]]);
390
+ }))];
391
+ case 3:
392
+ orderPrice = _a.sent();
393
+ return [4 /*yield*/, PerpetualDataHandler._queryPerpetualMarkPrice(orders[0].symbol, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]])];
394
+ case 4:
395
+ markPrice = _a.sent();
396
+ if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
397
+ return [4 /*yield*/, this.provider.getBlockNumber()];
398
+ case 5:
399
+ currentBlock = _a.sent();
400
+ return [4 /*yield*/, this.provider.getBlock(currentBlock)];
401
+ case 6:
402
+ blockTimestamp = (_a.sent()).timestamp;
403
+ _a.label = 7;
404
+ case 7: return [4 /*yield*/, orders.map(function (o, idx) {
405
+ return _this._isTradeable(o, orderPrice[idx], markPrice, blockTimestamp, _this.symbolToPerpStaticInfo);
406
+ })];
407
+ case 8: return [2 /*return*/, _a.sent()];
408
+ }
409
+ });
410
+ });
411
+ };
412
+ OrderReferrerTool.prototype._isTradeable = function (order, tradePrice, markPrice, blockTimestamp, symbolToPerpInfoMap) {
413
+ // check expiration date
414
+ if (order.deadline != undefined && order.deadline < Date.now() / 1000) {
415
+ console.log("order expired");
416
+ return false;
417
+ }
418
+ // -1 because order is executed on the next block (+1)
419
+ if (order.submittedTimestamp != undefined &&
420
+ order.submittedTimestamp + OrderReferrerTool.TRADE_DELAY < blockTimestamp - 1) {
421
+ console.log("on hold for ".concat(blockTimestamp - 1 - order.submittedTimestamp - OrderReferrerTool.TRADE_DELAY, " seconds"));
422
+ return false;
423
+ }
424
+ // check order size
425
+ var lotSize = PerpetualDataHandler._getLotSize(order.symbol, symbolToPerpInfoMap);
426
+ if (order.quantity < lotSize) {
427
+ console.log("order size too small: ".concat(order.quantity, " < ").concat(lotSize));
428
+ return false;
429
+ }
430
+ // check limit price: fromSmartContractOrder will set it to undefined when not tradeable
431
+ if (order.limitPrice == undefined) {
432
+ console.log("limit price undefined");
433
+ return false;
434
+ }
435
+ var limitPrice = order.limitPrice;
436
+ if ((order.side == BUY_SIDE && tradePrice > limitPrice) || (order.side == SELL_SIDE && tradePrice < limitPrice)) {
437
+ console.log("limit price not met: ".concat(limitPrice, " ").concat(order.side, " @ ").concat(tradePrice));
438
+ return false;
439
+ }
440
+ // check stop price
441
+ if (order.stopPrice != undefined &&
442
+ ((order.side == BUY_SIDE && markPrice < order.stopPrice) ||
443
+ (order.side == SELL_SIDE && markPrice > order.stopPrice))) {
444
+ console.log("stop price not met");
445
+ return false;
446
+ }
447
+ //check dependency
448
+ if (order.parentChildOrderIds != undefined &&
449
+ order.parentChildOrderIds[0] == ethers.constants.HashZero &&
450
+ order.parentChildOrderIds[1] != ethers.constants.HashZero) {
451
+ // order has a parent
452
+ var orderBookContract = this.getOrderBookContract(order.symbol);
453
+ return orderBookContract.getOrderStatus(order.parentChildOrderIds[1]).then(function (status) {
454
+ if (status == 2 || status == 3) {
455
+ console.log("parent not executed/cancelled");
456
+ // parent is open or unknown
457
+ return false;
458
+ }
459
+ return true;
460
+ });
461
+ }
462
+ // all checks passed -> order is tradeable
463
+ return true;
464
+ };
465
+ /**
466
+ * Wrapper of static method to use after mappings have been loaded into memory.
467
+ * @param scOrder Perpetual order as received in the proxy events.
468
+ * @returns A user-friendly order struct.
469
+ */
470
+ OrderReferrerTool.prototype.smartContractOrderToOrder = function (scOrder) {
471
+ return PerpetualDataHandler.fromSmartContractOrder(scOrder, this.symbolToPerpStaticInfo);
472
+ };
473
+ OrderReferrerTool.prototype.getTransactionCount = function (blockTag) {
474
+ return __awaiter(this, void 0, void 0, function () {
475
+ return __generator(this, function (_a) {
476
+ switch (_a.label) {
477
+ case 0:
478
+ if (this.signer == null) {
479
+ throw Error("no wallet initialized. Use createProxyInstance().");
480
+ }
481
+ return [4 /*yield*/, this.signer.getTransactionCount(blockTag)];
482
+ case 1: return [2 /*return*/, _a.sent()];
483
+ }
484
+ });
485
+ });
486
+ };
487
+ OrderReferrerTool.TRADE_DELAY = 5;
488
+ return OrderReferrerTool;
489
+ }(WriteAccessHandler));
490
+ export default OrderReferrerTool;
491
+ //# sourceMappingURL=orderReferrerTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderReferrerTool.js","sourceRoot":"","sources":["../../src/orderReferrerTool.ts"],"names":[],"mappings":"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"}