@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,435 @@
1
+ import { __awaiter, __generator, __read, __values } from "tslib";
2
+ import { emitWarning } from "process";
3
+ import { ABK64x64ToFloat, mul64x64 } from "./d8XMath";
4
+ import { ONE_64x64, } from "./nodeSDKTypes";
5
+ /**
6
+ * This class handles events and stores relevant variables
7
+ * as member variables. The events change the state of the member variables:
8
+ * mktData : MarketData relevant market data with current state (e.g. index price)
9
+ * ordersInPerpetual: Map<number, OrderStruct> all open orders for the given trader
10
+ * positionInPerpetual: Map<number, MarginAccount> all open positions for the given trader
11
+ *
12
+ *
13
+ * Get data:
14
+ * - getPerpetualData(perp id (string) or symbol) : PerpetualState. This is a reference!
15
+ * - getExchangeInfo() : ExchangeInfo. This is a reference!
16
+ * - getCurrentPositionRisk(perp id (string) or symbol) : MarginAccount. This is a reference!
17
+ * - getOrdersInPerpetualMap : Map<number, OrderStruct>. This is a reference!
18
+ * - getpositionInPerpetualMap : Map<number, MarginAccount>. This is a reference!
19
+ *
20
+ * Construct with a trader address and a marketData object
21
+ * Initialize to gather all the relevant data.
22
+ * Send event variables to event handler "on<EventName>" - this updates members
23
+ * - [x] onUpdateMarkPrice : emitted on proxy; updates markprice and index price data
24
+ * - [x] onUpdateUpdateFundingRate : emitted on proxy; sets funding rate
25
+ * - [x] onExecutionFailed : emitted on order book; removes an open order
26
+ * - [x] onPerpetualLimitOrderCancelled : emitted on order book; removes an open order
27
+ * - [x] onPerpetualLimitOrderCreated : emitted on order book; adds an open order to the data
28
+ * - [x] async onUpdateMarginAccount : emitted on proxy; updates position data and open interest
29
+ * - [x] onTrade : emitted on proxy; returns TradeEvent to be displayed
30
+ */
31
+ var PerpetualEventHandler = /** @class */ (function () {
32
+ function PerpetualEventHandler(mktData, traderAddr) {
33
+ this.mktData = mktData;
34
+ this.traderAddr = traderAddr;
35
+ this.ordersInPerpetual = new Map();
36
+ this.positionInPerpetual = new Map();
37
+ this.poolIndexForPerpetual = new Map();
38
+ }
39
+ /**
40
+ * Call this async function to initialize the
41
+ * market data
42
+ */
43
+ PerpetualEventHandler.prototype.initialize = function () {
44
+ return __awaiter(this, void 0, void 0, function () {
45
+ var _a, k, poolState, poolSymbol, j, perpState, perpSymbol, orders, perpId, position;
46
+ return __generator(this, function (_b) {
47
+ switch (_b.label) {
48
+ case 0:
49
+ _a = this;
50
+ return [4 /*yield*/, this.mktData.exchangeInfo()];
51
+ case 1:
52
+ _a.exchangeInfo = _b.sent();
53
+ k = 0;
54
+ _b.label = 2;
55
+ case 2:
56
+ if (!(k < this.exchangeInfo.pools.length)) return [3 /*break*/, 8];
57
+ poolState = this.exchangeInfo.pools[k];
58
+ poolSymbol = poolState.poolSymbol;
59
+ j = 0;
60
+ _b.label = 3;
61
+ case 3:
62
+ if (!(j < poolState.perpetuals.length)) return [3 /*break*/, 7];
63
+ perpState = poolState.perpetuals[j];
64
+ perpSymbol = perpState.baseCurrency + "-" + perpState.quoteCurrency + "-" + poolSymbol;
65
+ return [4 /*yield*/, this.mktData.openOrders(this.traderAddr, perpSymbol)];
66
+ case 4:
67
+ orders = _b.sent();
68
+ perpId = perpState.id;
69
+ this.ordersInPerpetual.set(perpId, orders);
70
+ return [4 /*yield*/, this.mktData.positionRisk(this.traderAddr, perpSymbol)];
71
+ case 5:
72
+ position = _b.sent();
73
+ this.positionInPerpetual.set(perpId, position);
74
+ this.poolIndexForPerpetual.set(perpId, k);
75
+ _b.label = 6;
76
+ case 6:
77
+ j++;
78
+ return [3 /*break*/, 3];
79
+ case 7:
80
+ k++;
81
+ return [3 /*break*/, 2];
82
+ case 8: return [2 /*return*/];
83
+ }
84
+ });
85
+ });
86
+ };
87
+ /**
88
+ * Get the current exchange info
89
+ * @returns exchange info
90
+ */
91
+ PerpetualEventHandler.prototype.getExchangeInfo = function () {
92
+ return this.exchangeInfo;
93
+ };
94
+ /**
95
+ * getOrdersInPerpetualMap
96
+ * @returns this.ordersInPerpetual
97
+ */
98
+ PerpetualEventHandler.prototype.getOrdersInPerpetualMap = function () {
99
+ return this.ordersInPerpetual;
100
+ };
101
+ /**
102
+ * getpositionInPerpetualMap
103
+ * @returns this.positionInPerpetual
104
+ */
105
+ PerpetualEventHandler.prototype.getpositionInPerpetualMap = function () {
106
+ return this.positionInPerpetual;
107
+ };
108
+ /**
109
+ * Get the data for a perpetual with a given index
110
+ * @param perpetualIdOrSymbol perpetual idx as string or symbol for which we want the data
111
+ * @returns perpetual data for this idx
112
+ */
113
+ PerpetualEventHandler.prototype.getPerpetualData = function (perpetualIdOrSymbol) {
114
+ var _a;
115
+ var perpId = Number(perpetualIdOrSymbol);
116
+ if (isNaN(perpId)) {
117
+ perpId = this.mktData.getPerpIdFromSymbol(perpetualIdOrSymbol);
118
+ }
119
+ //uint24 perpetualId = uint24(_iPoolId) * 100_000 + iPerpetualIndex;
120
+ var poolIdx = this.poolIndexForPerpetual.get(perpId); //Math.floor(perpId / 100_000);
121
+ var perpetuals = (_a = this.exchangeInfo) === null || _a === void 0 ? void 0 : _a.pools[poolIdx].perpetuals;
122
+ if (perpetuals == undefined) {
123
+ emitWarning("exchangeInfo not found, initialize perpetualEventHandler");
124
+ return undefined;
125
+ }
126
+ // find perpetual
127
+ var k;
128
+ for (k = 0; k < (perpetuals === null || perpetuals === void 0 ? void 0 : perpetuals.length) && perpetuals[k].id != perpId; k++)
129
+ ;
130
+ if (perpetuals[k].id != perpId) {
131
+ emitWarning("getPerpetualData: perpetual id ".concat(perpId, " not found"));
132
+ return undefined;
133
+ }
134
+ return perpetuals[k];
135
+ };
136
+ /**
137
+ * Get the trader's current position risk (margin account data)
138
+ * @param perpetualIdOrSymbol perpetual id as string ('100003') or symbol ('BTC-USD-MATIC')
139
+ * @returns undefined if no position or margin account (='position risk')
140
+ */
141
+ PerpetualEventHandler.prototype.getCurrentPositionRisk = function (perpetualIdOrSymbol) {
142
+ var perpId = Number(perpetualIdOrSymbol);
143
+ if (isNaN(perpId)) {
144
+ perpId = this.mktData.getPerpIdFromSymbol(perpetualIdOrSymbol);
145
+ }
146
+ return this.positionInPerpetual.get(perpId);
147
+ };
148
+ /**
149
+ * Update the following prices:
150
+ * - index price
151
+ * - collateral price
152
+ * - mid-price
153
+ * @param perpetualIdOrSymbol perpetual id as string ('100003') or symbol ('BTC-USD-MATIC')
154
+ */
155
+ PerpetualEventHandler.prototype.updatePrices = function (perpetualIdOrSymbol) {
156
+ return __awaiter(this, void 0, void 0, function () {
157
+ var perpId, symbol, sym, perpState, perp;
158
+ return __generator(this, function (_a) {
159
+ switch (_a.label) {
160
+ case 0:
161
+ perpId = Number(perpetualIdOrSymbol);
162
+ symbol = perpetualIdOrSymbol;
163
+ if (!isNaN(perpId)) {
164
+ sym = this.mktData.getSymbolFromPerpId(perpId);
165
+ if (sym == undefined) {
166
+ throw new Error("Symbol not found for perpetual ".concat(perpId));
167
+ }
168
+ symbol = sym;
169
+ }
170
+ return [4 /*yield*/, this.mktData.getPerpetualState(symbol)];
171
+ case 1:
172
+ perpState = _a.sent();
173
+ perp = this.getPerpetualData(symbol);
174
+ if (perp == undefined) {
175
+ throw new Error("Perpetual not found: ".concat(symbol));
176
+ }
177
+ perp.state = perpState.state;
178
+ perp.indexPrice = perpState.indexPrice;
179
+ perp.collToQuoteIndexPrice = perpState.collToQuoteIndexPrice;
180
+ perp.markPrice = perpState.markPrice;
181
+ perp.midPrice = perpState.midPrice;
182
+ perp.currentFundingRateBps = perpState.currentFundingRateBps;
183
+ perp.openInterestBC = perpState.openInterestBC;
184
+ perp.indexPrice = perpState.indexPrice;
185
+ perp.collToQuoteIndexPrice = perpState.collToQuoteIndexPrice;
186
+ return [2 /*return*/];
187
+ }
188
+ });
189
+ });
190
+ };
191
+ /**
192
+ * Handle the event UpdateMarkPrice and update relevant
193
+ * data
194
+ * @param perpetualId perpetual Id
195
+ * @param fMarkPricePremium premium rate in ABDK format
196
+ * @param fSpotIndexPrice spot index price in ABDK format
197
+ * @returns void
198
+ */
199
+ PerpetualEventHandler.prototype.onUpdateMarkPrice = function (perpetualId, fMidPricePremium, fMarkPricePremium, fSpotIndexPrice) {
200
+ var _a = __read(PerpetualEventHandler.ConvertUpdateMarkPrice(fMidPricePremium, fMarkPricePremium, fSpotIndexPrice), 3), newMidPrice = _a[0], newMarkPrice = _a[1], newIndexPrice = _a[2];
201
+ var perpetual = this.getPerpetualData(perpetualId.toString());
202
+ if (perpetual == undefined) {
203
+ return;
204
+ }
205
+ perpetual.midPrice = newMidPrice;
206
+ perpetual.markPrice = newMarkPrice;
207
+ perpetual.indexPrice = newIndexPrice;
208
+ };
209
+ /**
210
+ * Handle the event UpdateFundingRate and update relevant
211
+ * data
212
+ * UpdateFundingRate(uint24 indexed perpetualId, int128 fFundingRate)
213
+ * @param fFundingRate funding rate in ABDK format
214
+ */
215
+ PerpetualEventHandler.prototype.onUpdateUpdateFundingRate = function (perpetualId, fFundingRate) {
216
+ var newRate = ABK64x64ToFloat(fFundingRate);
217
+ var perpetual = this.getPerpetualData(perpetualId.toString());
218
+ if (perpetual == undefined) {
219
+ return;
220
+ }
221
+ perpetual.currentFundingRateBps = newRate * 1e4;
222
+ };
223
+ /**
224
+ * event ExecutionFailed(
225
+ uint24 indexed perpetualId,
226
+ address indexed trader,
227
+ bytes32 digest,
228
+ string reason
229
+ );
230
+ * @param perpetualId id of the perpetual
231
+ * @param trader address of the trader
232
+ * @param digest digest of the order/cancel order
233
+ * @param reason reason why the execution failed
234
+ */
235
+ PerpetualEventHandler.prototype.onExecutionFailed = function (perpetualId, trader, digest, reason) {
236
+ if (trader != this.traderAddr) {
237
+ emitWarning("onExecutionFailed: trader ".concat(trader, " not relevant"));
238
+ return;
239
+ }
240
+ // remove order from open orders
241
+ var orderStructs = this.ordersInPerpetual.get(perpetualId);
242
+ if (orderStructs == undefined) {
243
+ emitWarning("onExecutionFailed: no order found for perpetual ".concat(perpetualId));
244
+ return;
245
+ }
246
+ if (reason == "cancel delay required") {
247
+ // canceling failed. We don't remove the order
248
+ return;
249
+ }
250
+ PerpetualEventHandler.deleteOrder(orderStructs, digest);
251
+ };
252
+ /**
253
+ * Event emitted by perpetual proxy
254
+ * event PerpetualLimitOrderCancelled(bytes32 indexed orderHash);
255
+ * @param orderId string order id/digest
256
+ */
257
+ PerpetualEventHandler.prototype.onPerpetualLimitOrderCancelled = function (orderId) {
258
+ // remove order from open orders
259
+ var perpId = PerpetualEventHandler.findOrderForId(orderId, this.ordersInPerpetual);
260
+ if (perpId == undefined) {
261
+ emitWarning("onPerpetualLimitOrderCancelled: no order found with id ".concat(orderId));
262
+ return;
263
+ }
264
+ var orderStruct = this.ordersInPerpetual.get(perpId);
265
+ PerpetualEventHandler.deleteOrder(orderStruct, orderId);
266
+ };
267
+ /**
268
+ * event PerpetualLimitOrderCreated(
269
+ * uint24 indexed perpetualId,
270
+ * address indexed trader,
271
+ * address referrerAddr,
272
+ * address brokerAddr,
273
+ * Order order,
274
+ * bytes32 digest
275
+ *)
276
+ * @param perpetualId id of the perpetual
277
+ * @param trader address of the trader
278
+ * @param referrerAddr address of the referrer
279
+ * @param brokerAddr address of the broker
280
+ * @param Order order struct
281
+ * @param digest order id
282
+ */
283
+ PerpetualEventHandler.prototype.onPerpetualLimitOrderCreated = function (perpetualId, trader, _referrerAddr, _brokerAddr, Order, digest) {
284
+ if (trader != this.traderAddr) {
285
+ emitWarning("onPerpetualLimitOrderCreated: trader ".concat(trader, " not relevant"));
286
+ return;
287
+ }
288
+ var order = this.mktData.smartContractOrderToOrder(Order);
289
+ var orderStruct = this.ordersInPerpetual.get(perpetualId);
290
+ if (orderStruct == undefined) {
291
+ // no order for this perpetual so far
292
+ this.ordersInPerpetual.set(perpetualId, { orders: [order], orderIds: [digest] });
293
+ }
294
+ else {
295
+ orderStruct.orderIds.push(digest);
296
+ orderStruct.orders.push(order);
297
+ }
298
+ };
299
+ /**
300
+ * This function is async -> queries the margin account
301
+ * @param perpetualId id of the perpetual
302
+ * @param trader trader address
303
+ * @param positionId position id
304
+ * @param fPositionBC position size in base currency
305
+ * @param fCashCC margin collateral in margin account
306
+ * @param fLockedInValueQC pos*average opening price
307
+ * @param fFundingPaymentCC funding payment made
308
+ * @param fOpenInterestBC open interest
309
+ */
310
+ PerpetualEventHandler.prototype.onUpdateMarginAccount = function (perpetualId, trader, _positionId, _fPositionBC, _fCashCC, _fLockedInValueQC, _fFundingPaymentCC, fOpenInterestBC) {
311
+ return __awaiter(this, void 0, void 0, function () {
312
+ var perpetual, perpetualIdStr, margin;
313
+ return __generator(this, function (_a) {
314
+ switch (_a.label) {
315
+ case 0:
316
+ perpetual = this.getPerpetualData(perpetualId.toString());
317
+ if (perpetual == undefined) {
318
+ emitWarning("onUpdateMarginAccount: perpetual ".concat(perpetualId, " not found"));
319
+ return [2 /*return*/];
320
+ }
321
+ perpetual.openInterestBC = ABK64x64ToFloat(fOpenInterestBC);
322
+ if (trader != this.traderAddr) {
323
+ return [2 /*return*/];
324
+ }
325
+ perpetualIdStr = perpetualId.toString();
326
+ return [4 /*yield*/, this.mktData.positionRisk(this.traderAddr, perpetualIdStr)];
327
+ case 1:
328
+ margin = _a.sent();
329
+ this.positionInPerpetual.set(perpetualId, margin);
330
+ return [2 /*return*/];
331
+ }
332
+ });
333
+ });
334
+ };
335
+ /**
336
+ *
337
+ * @param perpetualId perpetual id
338
+ * @param trader trader address
339
+ * @param positionId position id
340
+ * @param order order struct
341
+ * @param orderDigest order id
342
+ * @param newPositionSizeBC new pos size in base currency ABDK
343
+ * @param price price in ABDK format
344
+ * @returns trade event data in regular number format
345
+ */
346
+ PerpetualEventHandler.prototype.onTrade = function (perpetualId, _trader, positionId, _order, orderDigest, newPositionSizeBC, _price) {
347
+ // remove order digest from open orders
348
+ var orderStructs = this.ordersInPerpetual.get(perpetualId);
349
+ if (orderStructs == undefined) {
350
+ emitWarning("onTrade: executed order not found ".concat(orderDigest));
351
+ }
352
+ else {
353
+ PerpetualEventHandler.deleteOrder(orderStructs, orderDigest);
354
+ }
355
+ // return transformed trade info
356
+ return {
357
+ perpetualId: perpetualId,
358
+ positionId: positionId,
359
+ orderId: orderDigest,
360
+ newPositionSizeBC: ABK64x64ToFloat(newPositionSizeBC),
361
+ executionPrice: ABK64x64ToFloat(newPositionSizeBC),
362
+ };
363
+ };
364
+ /**
365
+ * static function to find the number of the OrderStruct with given orderId
366
+ * @param orderId id/digest of order
367
+ * @param orderMap mapping for perpetualId->OrderStruct
368
+ * @returns id of perpetual that contains order with id = orderId or undefined
369
+ */
370
+ PerpetualEventHandler.findOrderForId = function (orderId, orderMap) {
371
+ var e_1, _a;
372
+ try {
373
+ /*orderMapMap<number, {
374
+ orders: Order[];
375
+ orderIds: string[];*/
376
+ for (var _b = __values(orderMap.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
377
+ var perpId = _c.value;
378
+ var orderStructs = orderMap.get(perpId);
379
+ if (orderStructs === null || orderStructs === void 0 ? void 0 : orderStructs.orderIds.includes(orderId)) {
380
+ return perpId;
381
+ }
382
+ }
383
+ }
384
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
385
+ finally {
386
+ try {
387
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
388
+ }
389
+ finally { if (e_1) throw e_1.error; }
390
+ }
391
+ return undefined;
392
+ };
393
+ /**
394
+ * Delete the order with given id from the class member data
395
+ * @param orderStructs array of order struct as stored for the trader and a given perpetual
396
+ * @param orderId digest/order id
397
+ * @returns void
398
+ */
399
+ PerpetualEventHandler.deleteOrder = function (orderStructs, orderId) {
400
+ // find order
401
+ var k;
402
+ for (k = 0; k < orderStructs.orderIds.length && orderStructs.orderIds[k] != orderId; k++)
403
+ ;
404
+ if (orderStructs.orderIds[k] != orderId) {
405
+ emitWarning("deleteOrder: no order found with digest ".concat(orderId));
406
+ return;
407
+ }
408
+ // delete element k on reference of orders
409
+ orderStructs.orders[k] = orderStructs.orders[orderStructs.orders.length - 1];
410
+ orderStructs.orders.pop();
411
+ orderStructs.orderIds[k] = orderStructs.orderIds[orderStructs.orderIds.length - 1];
412
+ orderStructs.orderIds.pop();
413
+ };
414
+ /**
415
+ * UpdateMarkPrice(
416
+ * uint24 indexed perpetualId,
417
+ * int128 fMarkPricePremium,
418
+ * int128 fSpotIndexPrice
419
+ * )
420
+ * @param fMarkPricePremium premium rate in ABDK format
421
+ * @param fSpotIndexPrice spot index price in ABDK format
422
+ * @returns mark price and spot index in float
423
+ */
424
+ PerpetualEventHandler.ConvertUpdateMarkPrice = function (fMidPricePremium, fMarkPricePremium, fSpotIndexPrice) {
425
+ var fMarkPrice = mul64x64(fSpotIndexPrice, ONE_64x64.add(fMarkPricePremium));
426
+ var fMidPrice = mul64x64(fSpotIndexPrice, ONE_64x64.add(fMidPricePremium));
427
+ var midPrice = ABK64x64ToFloat(fMidPrice);
428
+ var markPrice = ABK64x64ToFloat(fMarkPrice);
429
+ var indexPrice = ABK64x64ToFloat(fSpotIndexPrice);
430
+ return [midPrice, markPrice, indexPrice];
431
+ };
432
+ return PerpetualEventHandler;
433
+ }());
434
+ export default PerpetualEventHandler;
435
+ //# sourceMappingURL=perpetualEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perpetualEventHandler.js","sourceRoot":"","sources":["../../src/perpetualEventHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import PerpetualDataHandler from "./perpetualDataHandler";
2
+ import { PriceFeedConfig, PriceFeedSubmission, PriceFeedFormat } from "./nodeSDKTypes";
3
+ /**
4
+ * This class communicates with the REST API that provides price-data that is
5
+ * to be submitted to the smart contracts for certain functions such as
6
+ * trader liquidations, trade executions, change of trader margin amount.
7
+ */
8
+ export default class PriceFeeds {
9
+ private config;
10
+ private feedEndpoints;
11
+ private feedInfo;
12
+ private dataHandler;
13
+ private triangulations;
14
+ private THRESHOLD_MARKET_CLOSED_SEC;
15
+ constructor(dataHandler: PerpetualDataHandler, priceFeedConfigNetwork: string);
16
+ /**
17
+ * Pre-processing of triangulations for symbols, given the price feeds
18
+ * @param symbols set of symbols we want to triangulate from price feeds
19
+ */
20
+ initializeTriangulations(symbols: Set<string>): void;
21
+ /**
22
+ * Get required information to be able to submit a blockchain transaction with price-update
23
+ * such as trade execution, liquidation
24
+ * @param symbol symbol of perpetual, e.g., BTC-USD-MATIC
25
+ * @returns PriceFeedSubmission, index prices, market closed information
26
+ */
27
+ fetchFeedPriceInfoAndIndicesForPerpetual(symbol: string): Promise<{
28
+ submission: PriceFeedSubmission;
29
+ pxS2S3: [number, number];
30
+ mktClosed: [boolean, boolean];
31
+ }>;
32
+ /**
33
+ * Get all prices/isMarketClosed for the provided symbols via
34
+ * "latest_price_feeds" and triangulation. Triangulation must be defined in config, unless
35
+ * it is a direct price feed.
36
+ * @returns map of feed-price symbol to price/isMarketClosed
37
+ */
38
+ fetchPrices(symbols: string[]): Promise<Map<string, [number, boolean]>>;
39
+ /**
40
+ * Get index prices and market closed information for the given perpetual
41
+ * @param symbol perpetual symbol such as ETH-USD-MATIC
42
+ * @returns Index prices and market closed information
43
+ */
44
+ fetchPricesForPerpetual(symbol: string): Promise<{
45
+ idxPrices: number[];
46
+ mktClosed: boolean[];
47
+ }>;
48
+ /**
49
+ * Fetch the provided feed prices and bool whether market is closed or open
50
+ * - requires the feeds to be defined in priceFeedConfig.json
51
+ * - if undefined, all feeds are queried
52
+ * @param symbols array of feed-price symbols (e.g., [btc-usd, eth-usd]) or undefined
53
+ * @returns mapping symbol-> [price, isMarketClosed]
54
+ */
55
+ fetchFeedPrices(symbols?: string[]): Promise<Map<string, [number, boolean]>>;
56
+ /**
57
+ * Get all configured feed prices via "latest_price_feeds"
58
+ * @returns map of feed-price symbol to price/isMarketClosed
59
+ */
60
+ fetchAllFeedPrices(): Promise<Map<string, [number, boolean]>>;
61
+ /**
62
+ * Get the latest prices for a given perpetual from the offchain oracle
63
+ * networks
64
+ * @param symbol perpetual symbol of the form BTC-USD-MATIC
65
+ * @returns array of price feed updates that can be submitted to the smart contract
66
+ * and corresponding price information
67
+ */
68
+ fetchLatestFeedPriceInfoForPerpetual(symbol: string): Promise<PriceFeedSubmission>;
69
+ /**
70
+ * Extract pair-prices from underlying price feeds via triangulation
71
+ * The function either needs a direct price feed or a defined triangulation to succesfully
72
+ * return a triangulated price
73
+ * @param symbols array of pairs for which we want prices, e.g., [BTC-USDC, ETH-USD]
74
+ * @param feeds data obtained via fetchLatestFeedPriceInfo or fetchLatestFeedPrices
75
+ * @returns array of prices with same order as symbols
76
+ */
77
+ calculateTriangulatedPricesFromFeedInfo(symbols: string[], feeds: PriceFeedSubmission): [number[], boolean[]];
78
+ /**
79
+ * Extract pair-prices from underlying price feeds via triangulation
80
+ * The function either needs a direct price feed or a defined triangulation to succesfully
81
+ * return a triangulated price
82
+ * @param symbols array of pairs for which we want prices, e.g., [BTC-USDC, ETH-USD]
83
+ * @param feeds data obtained via fetchLatestFeedPriceInfo or fetchLatestFeedPrices
84
+ * @returns array of prices with same order as symbols
85
+ */
86
+ triangulatePricesFromFeedPrices(symbols: string[], feedPriceMap: Map<string, [number, boolean]>): [number[], boolean[]];
87
+ /**
88
+ * Queries the REST endpoint and returns parsed VAA price data
89
+ * @param query query price-info from endpoint
90
+ * @returns vaa and price info
91
+ */
92
+ private fetchVAAQuery;
93
+ /**
94
+ * Queries the REST endpoint and returns parsed price data
95
+ * @param query query price-info from endpoint
96
+ * @returns vaa and price info
97
+ */
98
+ fetchPriceQuery(query: string): Promise<[string[], PriceFeedFormat[]]>;
99
+ /**
100
+ * Searches for configuration for given network
101
+ * @param configs pricefeed configuration from json
102
+ * @param network e.g. testnet
103
+ * @returns selected configuration
104
+ */
105
+ static _selectConfig(configs: PriceFeedConfig[], network: string): PriceFeedConfig;
106
+ /**
107
+ * Wraps configuration into convenient data-structure
108
+ * @param config configuration for the selected network
109
+ * @returns feedInfo-map and endPoints-array
110
+ */
111
+ static _constructFeedInfo(config: PriceFeedConfig): [Map<string, {
112
+ symbol: string;
113
+ endpointId: number;
114
+ }>, string[]];
115
+ }