@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,466 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var ethers_1 = require("ethers");
5
+ var triangulator_1 = tslib_1.__importDefault(require("./triangulator"));
6
+ var d8XMath_1 = require("./d8XMath");
7
+ var buffer_1 = require("buffer");
8
+ /**
9
+ * This class communicates with the REST API that provides price-data that is
10
+ * to be submitted to the smart contracts for certain functions such as
11
+ * trader liquidations, trade executions, change of trader margin amount.
12
+ */
13
+ var PriceFeeds = /** @class */ (function () {
14
+ function PriceFeeds(dataHandler, priceFeedConfigNetwork) {
15
+ var _a;
16
+ this.THRESHOLD_MARKET_CLOSED_SEC = 15; // smallest lag for which we consider the market as being closed
17
+ var configs = require("./config/priceFeedConfig.json");
18
+ this.config = PriceFeeds._selectConfig(configs, priceFeedConfigNetwork);
19
+ _a = tslib_1.__read(PriceFeeds._constructFeedInfo(this.config), 2), this.feedInfo = _a[0], this.feedEndpoints = _a[1];
20
+ this.dataHandler = dataHandler;
21
+ this.triangulations = new Map();
22
+ }
23
+ /**
24
+ * Pre-processing of triangulations for symbols, given the price feeds
25
+ * @param symbols set of symbols we want to triangulate from price feeds
26
+ */
27
+ PriceFeeds.prototype.initializeTriangulations = function (symbols) {
28
+ var e_1, _a, e_2, _b;
29
+ var feedSymbols = new Array();
30
+ try {
31
+ for (var _c = tslib_1.__values(this.feedInfo), _d = _c.next(); !_d.done; _d = _c.next()) {
32
+ var _e = tslib_1.__read(_d.value, 2), value = _e[1];
33
+ feedSymbols.push(value.symbol);
34
+ }
35
+ }
36
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
37
+ finally {
38
+ try {
39
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
40
+ }
41
+ finally { if (e_1) throw e_1.error; }
42
+ }
43
+ try {
44
+ for (var _f = tslib_1.__values(symbols.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
45
+ var symbol = _g.value;
46
+ var triangulation = triangulator_1.default.triangulate(feedSymbols, symbol);
47
+ this.triangulations.set(symbol, triangulation);
48
+ }
49
+ }
50
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
51
+ finally {
52
+ try {
53
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
54
+ }
55
+ finally { if (e_2) throw e_2.error; }
56
+ }
57
+ };
58
+ /**
59
+ * Get required information to be able to submit a blockchain transaction with price-update
60
+ * such as trade execution, liquidation
61
+ * @param symbol symbol of perpetual, e.g., BTC-USD-MATIC
62
+ * @returns PriceFeedSubmission, index prices, market closed information
63
+ */
64
+ PriceFeeds.prototype.fetchFeedPriceInfoAndIndicesForPerpetual = function (symbol) {
65
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
66
+ var indexSymbols, submission, _a, _idxPrices, _mktClosed, idxPrices, mktClosed;
67
+ return tslib_1.__generator(this, function (_b) {
68
+ switch (_b.label) {
69
+ case 0:
70
+ indexSymbols = this.dataHandler.getIndexSymbols(symbol);
71
+ return [4 /*yield*/, this.fetchLatestFeedPriceInfoForPerpetual(symbol)];
72
+ case 1:
73
+ submission = _b.sent();
74
+ _a = tslib_1.__read(this.calculateTriangulatedPricesFromFeedInfo(indexSymbols.filter(function (x) { return x != ""; }), submission), 2), _idxPrices = _a[0], _mktClosed = _a[1];
75
+ idxPrices = [_idxPrices[0], 0];
76
+ mktClosed = [_mktClosed[0], false];
77
+ if (idxPrices.length > 1) {
78
+ idxPrices[1] = _idxPrices[1];
79
+ mktClosed[1] = _mktClosed[1];
80
+ }
81
+ return [2 /*return*/, { submission: submission, pxS2S3: idxPrices, mktClosed: mktClosed }];
82
+ }
83
+ });
84
+ });
85
+ };
86
+ /**
87
+ * Get all prices/isMarketClosed for the provided symbols via
88
+ * "latest_price_feeds" and triangulation. Triangulation must be defined in config, unless
89
+ * it is a direct price feed.
90
+ * @returns map of feed-price symbol to price/isMarketClosed
91
+ */
92
+ PriceFeeds.prototype.fetchPrices = function (symbols) {
93
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
94
+ var feedPrices, _a, prices, mktClosed, symMap, k;
95
+ return tslib_1.__generator(this, function (_b) {
96
+ switch (_b.label) {
97
+ case 0: return [4 /*yield*/, this.fetchAllFeedPrices()];
98
+ case 1:
99
+ feedPrices = _b.sent();
100
+ _a = tslib_1.__read(this.triangulatePricesFromFeedPrices(symbols, feedPrices), 2), prices = _a[0], mktClosed = _a[1];
101
+ symMap = new Map();
102
+ for (k = 0; k < symbols.length; k++) {
103
+ symMap.set(symbols[k], [prices[k], mktClosed[k]]);
104
+ }
105
+ return [2 /*return*/, symMap];
106
+ }
107
+ });
108
+ });
109
+ };
110
+ /**
111
+ * Get index prices and market closed information for the given perpetual
112
+ * @param symbol perpetual symbol such as ETH-USD-MATIC
113
+ * @returns Index prices and market closed information
114
+ */
115
+ PriceFeeds.prototype.fetchPricesForPerpetual = function (symbol) {
116
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
117
+ var indexSymbols, feedSymbols, indexSymbols_1, indexSymbols_1_1, sym, triang, feedPrices, _a, prices, mktClosed;
118
+ var e_3, _b;
119
+ return tslib_1.__generator(this, function (_c) {
120
+ switch (_c.label) {
121
+ case 0:
122
+ indexSymbols = this.dataHandler.getIndexSymbols(symbol).filter(function (x) { return x != ""; });
123
+ feedSymbols = new Array();
124
+ try {
125
+ for (indexSymbols_1 = tslib_1.__values(indexSymbols), indexSymbols_1_1 = indexSymbols_1.next(); !indexSymbols_1_1.done; indexSymbols_1_1 = indexSymbols_1.next()) {
126
+ sym = indexSymbols_1_1.value;
127
+ if (sym != "") {
128
+ triang = this.triangulations.get(sym);
129
+ if (triang == undefined) {
130
+ // no triangulation defined, so symbol must be a feed (unless misconfigured)
131
+ feedSymbols.push(sym);
132
+ }
133
+ else {
134
+ // push all required feeds to array
135
+ triang[0].map(function (feedSym) { return feedSymbols.push(feedSym); });
136
+ }
137
+ }
138
+ }
139
+ }
140
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
141
+ finally {
142
+ try {
143
+ if (indexSymbols_1_1 && !indexSymbols_1_1.done && (_b = indexSymbols_1.return)) _b.call(indexSymbols_1);
144
+ }
145
+ finally { if (e_3) throw e_3.error; }
146
+ }
147
+ return [4 /*yield*/, this.fetchFeedPrices(feedSymbols)];
148
+ case 1:
149
+ feedPrices = _c.sent();
150
+ _a = tslib_1.__read(this.triangulatePricesFromFeedPrices(indexSymbols, feedPrices), 2), prices = _a[0], mktClosed = _a[1];
151
+ // ensure we return an array of 2 in all cases
152
+ if (prices.length == 1) {
153
+ prices.push(0);
154
+ mktClosed.push(false);
155
+ }
156
+ return [2 /*return*/, { idxPrices: prices, mktClosed: mktClosed }];
157
+ }
158
+ });
159
+ });
160
+ };
161
+ /**
162
+ * Fetch the provided feed prices and bool whether market is closed or open
163
+ * - requires the feeds to be defined in priceFeedConfig.json
164
+ * - if undefined, all feeds are queried
165
+ * @param symbols array of feed-price symbols (e.g., [btc-usd, eth-usd]) or undefined
166
+ * @returns mapping symbol-> [price, isMarketClosed]
167
+ */
168
+ PriceFeeds.prototype.fetchFeedPrices = function (symbols) {
169
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
170
+ var queries, symbolsOfEndpoint, j, k, currFeed, endpointId, resultPrices, k, _a, pxInfo, tsSecNow, j, price, isMarketClosed;
171
+ return tslib_1.__generator(this, function (_b) {
172
+ switch (_b.label) {
173
+ case 0:
174
+ queries = new Array(this.feedEndpoints.length);
175
+ symbolsOfEndpoint = [];
176
+ for (j = 0; j < queries.length; j++) {
177
+ symbolsOfEndpoint.push([]);
178
+ }
179
+ for (k = 0; k < this.config.ids.length; k++) {
180
+ currFeed = this.config.ids[k];
181
+ if (symbols != undefined && !symbols.includes(currFeed.symbol)) {
182
+ continue;
183
+ }
184
+ endpointId = this.feedInfo.get(currFeed.id).endpointId;
185
+ symbolsOfEndpoint[endpointId].push(currFeed.symbol);
186
+ if (queries[endpointId] == undefined) {
187
+ // each id can have a different endpoint, but we cluster
188
+ // the queries into one per endpoint
189
+ queries[endpointId] = this.feedEndpoints[endpointId] + "/latest_price_feeds?";
190
+ }
191
+ queries[endpointId] = queries[endpointId] + "ids[]=" + currFeed.id + "&";
192
+ }
193
+ resultPrices = new Map();
194
+ k = 0;
195
+ _b.label = 1;
196
+ case 1:
197
+ if (!(k < queries.length)) return [3 /*break*/, 4];
198
+ if (queries[k] == undefined) {
199
+ return [3 /*break*/, 3];
200
+ }
201
+ return [4 /*yield*/, this.fetchPriceQuery(queries[k])];
202
+ case 2:
203
+ _a = tslib_1.__read.apply(void 0, [_b.sent(), 2]), pxInfo = _a[1];
204
+ tsSecNow = Math.round(Date.now() / 1000);
205
+ for (j = 0; j < pxInfo.length; j++) {
206
+ price = (0, d8XMath_1.decNToFloat)(ethers_1.BigNumber.from(pxInfo[j].price), -pxInfo[j].expo);
207
+ isMarketClosed = tsSecNow - pxInfo[j].publish_time > this.THRESHOLD_MARKET_CLOSED_SEC;
208
+ resultPrices.set(symbolsOfEndpoint[k][j], [price, isMarketClosed]);
209
+ }
210
+ _b.label = 3;
211
+ case 3:
212
+ k++;
213
+ return [3 /*break*/, 1];
214
+ case 4: return [2 /*return*/, resultPrices];
215
+ }
216
+ });
217
+ });
218
+ };
219
+ /**
220
+ * Get all configured feed prices via "latest_price_feeds"
221
+ * @returns map of feed-price symbol to price/isMarketClosed
222
+ */
223
+ PriceFeeds.prototype.fetchAllFeedPrices = function () {
224
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
225
+ return tslib_1.__generator(this, function (_a) {
226
+ return [2 /*return*/, this.fetchFeedPrices()];
227
+ });
228
+ });
229
+ };
230
+ /**
231
+ * Get the latest prices for a given perpetual from the offchain oracle
232
+ * networks
233
+ * @param symbol perpetual symbol of the form BTC-USD-MATIC
234
+ * @returns array of price feed updates that can be submitted to the smart contract
235
+ * and corresponding price information
236
+ */
237
+ PriceFeeds.prototype.fetchLatestFeedPriceInfoForPerpetual = function (symbol) {
238
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
239
+ var feedIds, queries, orderEndpointNumber, idCountPriceFeeds, symbols, k, info, id, data, priceFeedUpdates, prices, mktClosed, timestamps, tsSecNow, k, endpointId, idWithinEndpoint, pxInfo, price, isMarketClosed;
240
+ var _this = this;
241
+ return tslib_1.__generator(this, function (_a) {
242
+ switch (_a.label) {
243
+ case 0:
244
+ feedIds = this.dataHandler.getPriceIds(symbol);
245
+ queries = new Array(this.feedEndpoints.length);
246
+ orderEndpointNumber = new Array();
247
+ idCountPriceFeeds = new Array(this.feedEndpoints.length);
248
+ symbols = new Array();
249
+ for (k = 0; k < feedIds.length; k++) {
250
+ info = this.feedInfo.get(feedIds[k]);
251
+ if (info == undefined) {
252
+ throw new Error("priceFeeds: config for symbol ".concat(symbol, " insufficient"));
253
+ }
254
+ id = info.endpointId;
255
+ symbols.push(info.symbol);
256
+ if (queries[id] == undefined) {
257
+ // each id can have a different endpoint, but we cluster
258
+ // the queries into one per endpoint
259
+ queries[id] = this.feedEndpoints[id] + "/latest_vaas_px?";
260
+ idCountPriceFeeds[id] = 0;
261
+ }
262
+ queries[id] = queries[id] + "ids[]=" + feedIds[k] + "&";
263
+ orderEndpointNumber.push(id * 100 + idCountPriceFeeds[id]);
264
+ idCountPriceFeeds[id] = idCountPriceFeeds[id] + 1;
265
+ }
266
+ return [4 /*yield*/, Promise.all(queries.map(function (q) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
267
+ return tslib_1.__generator(this, function (_a) {
268
+ if (q != undefined) {
269
+ return [2 /*return*/, this.fetchVAAQuery(q)];
270
+ }
271
+ else {
272
+ return [2 /*return*/, [[], []]];
273
+ }
274
+ return [2 /*return*/];
275
+ });
276
+ }); }))];
277
+ case 1:
278
+ data = _a.sent();
279
+ priceFeedUpdates = new Array();
280
+ prices = new Array();
281
+ mktClosed = new Array();
282
+ timestamps = new Array();
283
+ tsSecNow = Math.round(Date.now() / 1000);
284
+ for (k = 0; k < orderEndpointNumber.length; k++) {
285
+ endpointId = Math.floor(orderEndpointNumber[k] / 100);
286
+ idWithinEndpoint = orderEndpointNumber[k] - 100 * endpointId;
287
+ priceFeedUpdates.push(data[endpointId][0][idWithinEndpoint]);
288
+ pxInfo = data[endpointId][1][idWithinEndpoint];
289
+ price = (0, d8XMath_1.decNToFloat)(ethers_1.BigNumber.from(pxInfo.price), -pxInfo.expo);
290
+ isMarketClosed = tsSecNow - pxInfo.publish_time > this.THRESHOLD_MARKET_CLOSED_SEC;
291
+ mktClosed.push(isMarketClosed);
292
+ prices.push(price);
293
+ timestamps.push(pxInfo.publish_time);
294
+ }
295
+ return [2 /*return*/, {
296
+ symbols: symbols,
297
+ priceFeedVaas: priceFeedUpdates,
298
+ prices: prices,
299
+ isMarketClosed: mktClosed,
300
+ timestamps: timestamps,
301
+ }];
302
+ }
303
+ });
304
+ });
305
+ };
306
+ /**
307
+ * Extract pair-prices from underlying price feeds via triangulation
308
+ * The function either needs a direct price feed or a defined triangulation to succesfully
309
+ * return a triangulated price
310
+ * @param symbols array of pairs for which we want prices, e.g., [BTC-USDC, ETH-USD]
311
+ * @param feeds data obtained via fetchLatestFeedPriceInfo or fetchLatestFeedPrices
312
+ * @returns array of prices with same order as symbols
313
+ */
314
+ PriceFeeds.prototype.calculateTriangulatedPricesFromFeedInfo = function (symbols, feeds) {
315
+ var priceMap = new Map();
316
+ for (var j = 0; j < feeds.prices.length; j++) {
317
+ priceMap.set(feeds.symbols[j], [feeds.prices[j], feeds.isMarketClosed[j]]);
318
+ }
319
+ return this.triangulatePricesFromFeedPrices(symbols, priceMap);
320
+ };
321
+ /**
322
+ * Extract pair-prices from underlying price feeds via triangulation
323
+ * The function either needs a direct price feed or a defined triangulation to succesfully
324
+ * return a triangulated price
325
+ * @param symbols array of pairs for which we want prices, e.g., [BTC-USDC, ETH-USD]
326
+ * @param feeds data obtained via fetchLatestFeedPriceInfo or fetchLatestFeedPrices
327
+ * @returns array of prices with same order as symbols
328
+ */
329
+ PriceFeeds.prototype.triangulatePricesFromFeedPrices = function (symbols, feedPriceMap) {
330
+ var prices = new Array();
331
+ var mktClosed = new Array();
332
+ for (var k = 0; k < symbols.length; k++) {
333
+ var triangulation = this.triangulations.get(symbols[k]);
334
+ if (triangulation == undefined) {
335
+ var feedPrice = feedPriceMap.get(symbols[k]);
336
+ if (feedPrice == undefined) {
337
+ throw new Error("PriceFeeds: no triangulation defined for ".concat(symbols[k]));
338
+ }
339
+ else {
340
+ prices.push(feedPrice[0]); //price
341
+ mktClosed.push(feedPrice[1]); //market closed?
342
+ continue;
343
+ }
344
+ }
345
+ var _a = tslib_1.__read(triangulator_1.default.calculateTriangulatedPrice(triangulation, feedPriceMap), 2), px = _a[0], isMktClosed = _a[1];
346
+ prices.push(px);
347
+ mktClosed.push(isMktClosed);
348
+ }
349
+ return [prices, mktClosed];
350
+ };
351
+ /**
352
+ * Queries the REST endpoint and returns parsed VAA price data
353
+ * @param query query price-info from endpoint
354
+ * @returns vaa and price info
355
+ */
356
+ PriceFeeds.prototype.fetchVAAQuery = function (query) {
357
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
358
+ var headers, response, values, priceFeedUpdates, px, k;
359
+ return tslib_1.__generator(this, function (_a) {
360
+ switch (_a.label) {
361
+ case 0:
362
+ headers = { headers: { "Content-Type": "application/json" } };
363
+ return [4 /*yield*/, fetch(query, headers)];
364
+ case 1:
365
+ response = _a.sent();
366
+ if (!response.ok) {
367
+ throw new Error("Failed to fetch posts (".concat(response.status, "): ").concat(response.statusText));
368
+ }
369
+ return [4 /*yield*/, response.json()];
370
+ case 2:
371
+ values = (_a.sent());
372
+ priceFeedUpdates = new Array();
373
+ px = new Array();
374
+ for (k = 0; k < values.length; k++) {
375
+ priceFeedUpdates.push("0x" + buffer_1.Buffer.from(values[k][0], "base64").toString("hex"));
376
+ px.push(values[k][1]);
377
+ }
378
+ return [2 /*return*/, [priceFeedUpdates, px]];
379
+ }
380
+ });
381
+ });
382
+ };
383
+ /**
384
+ * Queries the REST endpoint and returns parsed price data
385
+ * @param query query price-info from endpoint
386
+ * @returns vaa and price info
387
+ */
388
+ PriceFeeds.prototype.fetchPriceQuery = function (query) {
389
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
390
+ var headers, response, values, priceFeedUpdates, px, k;
391
+ return tslib_1.__generator(this, function (_a) {
392
+ switch (_a.label) {
393
+ case 0:
394
+ headers = { headers: { "Content-Type": "application/json" } };
395
+ return [4 /*yield*/, fetch(query, headers)];
396
+ case 1:
397
+ response = _a.sent();
398
+ if (!response.ok) {
399
+ throw new Error("Failed to fetch posts (".concat(response.status, "): ").concat(response.statusText));
400
+ }
401
+ return [4 /*yield*/, response.json()];
402
+ case 2:
403
+ values = _a.sent();
404
+ priceFeedUpdates = new Array();
405
+ px = new Array();
406
+ for (k = 0; k < values.length; k++) {
407
+ priceFeedUpdates.push("0x" + buffer_1.Buffer.from(values[k].id, "base64").toString("hex"));
408
+ px.push(values[k].price);
409
+ }
410
+ return [2 /*return*/, [priceFeedUpdates, px]];
411
+ }
412
+ });
413
+ });
414
+ };
415
+ /**
416
+ * Searches for configuration for given network
417
+ * @param configs pricefeed configuration from json
418
+ * @param network e.g. testnet
419
+ * @returns selected configuration
420
+ */
421
+ PriceFeeds._selectConfig = function (configs, network) {
422
+ var k = 0;
423
+ while (k < configs.length) {
424
+ if (configs[k].network == network) {
425
+ return configs[k];
426
+ }
427
+ k = k + 1;
428
+ }
429
+ throw new Error("PriceFeeds: config not found for network ".concat(network));
430
+ };
431
+ /**
432
+ * Wraps configuration into convenient data-structure
433
+ * @param config configuration for the selected network
434
+ * @returns feedInfo-map and endPoints-array
435
+ */
436
+ PriceFeeds._constructFeedInfo = function (config) {
437
+ var feed = new Map();
438
+ var endpointId = -1;
439
+ var type = "";
440
+ var feedEndpoints = new Array();
441
+ for (var k = 0; k < config.endpoints.length; k++) {
442
+ feedEndpoints.push(config.endpoints[k].endpoint);
443
+ }
444
+ for (var k = 0; k < config.ids.length; k++) {
445
+ if (type != config.ids[k].type) {
446
+ type = config.ids[k].type;
447
+ var j = 0;
448
+ while (j < config.endpoints.length) {
449
+ if (config.endpoints[j].type == type) {
450
+ endpointId = j;
451
+ j = config.endpoints.length;
452
+ }
453
+ j++;
454
+ }
455
+ if (config.endpoints[endpointId].type != type) {
456
+ throw new Error("priceFeeds: no enpoint found for ".concat(type, " check priceFeedConfig"));
457
+ }
458
+ }
459
+ feed.set(config.ids[k].id, { symbol: config.ids[k].symbol.toUpperCase(), endpointId: endpointId });
460
+ }
461
+ return [feed, feedEndpoints];
462
+ };
463
+ return PriceFeeds;
464
+ }());
465
+ exports.default = PriceFeeds;
466
+ //# sourceMappingURL=priceFeeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceFeeds.js","sourceRoot":"","sources":["../../src/priceFeeds.ts"],"names":[],"mappings":"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"}
@@ -1,45 +1,9 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
2
  Object.defineProperty(exports, "__esModule", { value: true });
39
- var strings_1 = require("@ethersproject/strings");
40
- var bytes_1 = require("@ethersproject/bytes");
3
+ var tslib_1 = require("tslib");
41
4
  var ethers_1 = require("ethers");
42
5
  var buffer_1 = require("buffer");
6
+ var utils_1 = require("ethers/lib/utils");
43
7
  var TraderDigests = /** @class */ (function () {
44
8
  function TraderDigests() {
45
9
  }
@@ -50,12 +14,12 @@ var TraderDigests = /** @class */ (function () {
50
14
  * @ignore
51
15
  */
52
16
  TraderDigests.prototype.createOrderId = function (digest) {
53
- return __awaiter(this, void 0, void 0, function () {
17
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
54
18
  var digestBuffer, messagePrefix, tmp;
55
- return __generator(this, function (_a) {
19
+ return tslib_1.__generator(this, function (_a) {
56
20
  digestBuffer = buffer_1.Buffer.from(digest.substring(2, digest.length), "hex");
57
21
  messagePrefix = "\x19Ethereum Signed Message:\n";
58
- tmp = (0, bytes_1.concat)([(0, strings_1.toUtf8Bytes)(messagePrefix), (0, strings_1.toUtf8Bytes)(String(digestBuffer.length)), digestBuffer]);
22
+ tmp = (0, utils_1.concat)([(0, utils_1.toUtf8Bytes)(messagePrefix), (0, utils_1.toUtf8Bytes)(String(digestBuffer.length)), digestBuffer]);
59
23
  // see: https://github.com/ethers-io/ethers.js/blob/c80fcddf50a9023486e9f9acb1848aba4c19f7b6/packages/hash/src.ts/message.ts#L7
60
24
  return [2 /*return*/, ethers_1.ethers.utils.keccak256(tmp)];
61
25
  });
@@ -72,9 +36,9 @@ var TraderDigests = /** @class */ (function () {
72
36
  * @ignore
73
37
  */
74
38
  TraderDigests.prototype.createDigest = function (order, chainId, isNewOrder, proxyAddress) {
75
- return __awaiter(this, void 0, void 0, function () {
39
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
76
40
  var NAME, DOMAIN_TYPEHASH, abiCoder, domainSeparator, TRADE_ORDER_TYPEHASH, structHash, digest;
77
- return __generator(this, function (_a) {
41
+ return tslib_1.__generator(this, function (_a) {
78
42
  NAME = "Perpetual Trade Manager";
79
43
  DOMAIN_TYPEHASH = ethers_1.ethers.utils.keccak256(buffer_1.Buffer.from("EIP712Domain(string name,uint256 chainId,address verifyingContract)"));
80
44
  abiCoder = ethers_1.ethers.utils.defaultAbiCoder;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traderDigests.js","sourceRoot":"","sources":["../../src/traderDigests.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAEhC,iCAAgC;AAChC,0CAAuD;AAEvD;IAAA;IAoFA,CAAC;IAnFC;;;;;OAKG;IACU,qCAAa,GAA1B,UAA2B,MAAc;;;;gBACnC,YAAY,GAAG,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;gBACpE,aAAa,GAAG,gCAAgC,CAAC;gBACnD,GAAG,GAAG,IAAA,cAAM,EAAC,CAAC,IAAA,mBAAW,EAAC,aAAa,CAAC,EAAE,IAAA,mBAAW,EAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;gBACvG,+HAA+H;gBAC/H,sBAAO,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAC;;;KACpC;IAED;;;;;;;;;OASG;IACU,oCAAY,GAAzB,UACE,KAAyB,EACzB,OAAe,EACf,UAAmB,EACnB,YAAoB;;;;gBAEd,IAAI,GAAG,yBAAyB,CAAC;gBACjC,eAAe,GAAG,eAAM,CAAC,KAAK,CAAC,SAAS,CAC5C,eAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CACnF,CAAC;gBACE,QAAQ,GAAG,eAAM,CAAC,KAAK,CAAC,eAAe,CAAC;gBACxC,eAAe,GAAG,eAAM,CAAC,KAAK,CAAC,SAAS,CAC1C,QAAQ,CAAC,MAAM,CACb,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAC5C,CAAC,eAAe,EAAE,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CACpF,CACF,CAAC;gBACI,oBAAoB,GAAG,eAAM,CAAC,KAAK,CAAC,SAAS,CACjD,eAAM,CAAC,IAAI,CACT,qNAAqN,CACtN,CACF,CAAC;gBACE,UAAU,GAAG,eAAM,CAAC,KAAK,CAAC,SAAS,CACrC,QAAQ,CAAC,MAAM,CACb;oBACE,SAAS;oBACT,QAAQ;oBACR,QAAQ;oBACR,SAAS;oBACT,SAAS;oBACT,QAAQ;oBACR,QAAQ;oBACR,QAAQ;oBACR,QAAQ;oBACR,QAAQ;oBACR,QAAQ;oBACR,QAAQ;iBACT,EACD;oBACE,oBAAoB;oBACpB,KAAK,CAAC,YAAY;oBAClB,KAAK,CAAC,aAAa;oBACnB,KAAK,CAAC,UAAU;oBAChB,KAAK,CAAC,UAAU;oBAChB,KAAK,CAAC,OAAO;oBACb,KAAK,CAAC,WAAW;oBACjB,KAAK,CAAC,aAAa;oBACnB,KAAK,CAAC,SAAS;oBACf,KAAK,CAAC,KAAK;oBACX,KAAK,CAAC,SAAS;oBACf,KAAK,CAAC,gBAAgB;iBACvB,CACF,CACF,CAAC;gBACE,MAAM,GAAG,eAAM,CAAC,KAAK,CAAC,SAAS,CACjC,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAC3F,CAAC;gBACF,sBAAO,MAAM,EAAC;;;KACf;IACH,oBAAC;AAAD,CAAC,AApFD,IAoFC"}