@d8x/perpetuals-sdk 0.7.6 → 0.7.7

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 (119) hide show
  1. package/dist/cjs/accountTrade.js +243 -134
  2. package/dist/cjs/accountTrade.js.map +1 -1
  3. package/dist/cjs/brokerTool.js +290 -144
  4. package/dist/cjs/brokerTool.js.map +1 -1
  5. package/dist/cjs/config/priceFeedConfig.json +1 -1
  6. package/dist/cjs/contracts/factories/ERC20__factory.js +12 -9
  7. package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
  8. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +12 -9
  9. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  10. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +12 -9
  11. package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  12. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +12 -9
  13. package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  14. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +12 -9
  15. package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  16. package/dist/cjs/contracts/factories/ShareToken__factory.js +12 -9
  17. package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
  18. package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +12 -9
  19. package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
  20. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +12 -9
  21. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
  22. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +12 -9
  23. package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
  24. package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js +12 -9
  25. package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
  26. package/dist/cjs/contracts/index.js +1 -1
  27. package/dist/cjs/d8XMath.js +66 -65
  28. package/dist/cjs/d8XMath.js.map +1 -1
  29. package/dist/cjs/index.js +11 -11
  30. package/dist/cjs/index.js.map +1 -1
  31. package/dist/cjs/liquidatorTool.js +137 -80
  32. package/dist/cjs/liquidatorTool.js.map +1 -1
  33. package/dist/cjs/liquidityProviderTool.js +65 -33
  34. package/dist/cjs/liquidityProviderTool.js.map +1 -1
  35. package/dist/cjs/marketData.js +978 -635
  36. package/dist/cjs/marketData.js.map +1 -1
  37. package/dist/cjs/nodeSDKTypes.js +22 -10
  38. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  39. package/dist/cjs/orderReferrerTool.js +323 -200
  40. package/dist/cjs/orderReferrerTool.js.map +1 -1
  41. package/dist/cjs/perpetualDataHandler.js +550 -404
  42. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  43. package/dist/cjs/perpetualEventHandler.js +190 -129
  44. package/dist/cjs/perpetualEventHandler.js.map +1 -1
  45. package/dist/cjs/priceFeeds.js +335 -223
  46. package/dist/cjs/priceFeeds.js.map +1 -1
  47. package/dist/cjs/traderDigests.js +23 -20
  48. package/dist/cjs/traderDigests.js.map +1 -1
  49. package/dist/cjs/traderInterface.js +87 -54
  50. package/dist/cjs/traderInterface.js.map +1 -1
  51. package/dist/cjs/triangulator.js +38 -34
  52. package/dist/cjs/triangulator.js.map +1 -1
  53. package/dist/cjs/utils.js +32 -18
  54. package/dist/cjs/utils.js.map +1 -1
  55. package/dist/cjs/version.d.ts +1 -1
  56. package/dist/cjs/version.js +1 -1
  57. package/dist/cjs/writeAccessHandler.js +112 -78
  58. package/dist/cjs/writeAccessHandler.js.map +1 -1
  59. package/dist/esm/accountTrade.js +237 -126
  60. package/dist/esm/accountTrade.js.map +1 -1
  61. package/dist/esm/brokerTool.js +284 -136
  62. package/dist/esm/brokerTool.js.map +1 -1
  63. package/dist/esm/config/priceFeedConfig.json +1 -1
  64. package/dist/esm/contracts/factories/ERC20__factory.js +12 -8
  65. package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
  66. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +12 -8
  67. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  68. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +12 -8
  69. package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
  70. package/dist/esm/contracts/factories/LimitOrderBook__factory.js +12 -8
  71. package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
  72. package/dist/esm/contracts/factories/MockTokenSwap__factory.js +12 -8
  73. package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
  74. package/dist/esm/contracts/factories/ShareToken__factory.js +12 -8
  75. package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
  76. package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +12 -8
  77. package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
  78. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +12 -8
  79. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
  80. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +12 -8
  81. package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
  82. package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js +12 -8
  83. package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
  84. package/dist/esm/d8XMath.js +64 -63
  85. package/dist/esm/d8XMath.js.map +1 -1
  86. package/dist/esm/liquidatorTool.js +136 -77
  87. package/dist/esm/liquidatorTool.js.map +1 -1
  88. package/dist/esm/liquidityProviderTool.js +63 -29
  89. package/dist/esm/liquidityProviderTool.js.map +1 -1
  90. package/dist/esm/marketData.js +971 -626
  91. package/dist/esm/marketData.js.map +1 -1
  92. package/dist/esm/nodeSDKTypes.js +48 -36
  93. package/dist/esm/nodeSDKTypes.js.map +1 -1
  94. package/dist/esm/orderReferrerTool.js +319 -194
  95. package/dist/esm/orderReferrerTool.js.map +1 -1
  96. package/dist/esm/perpetualDataHandler.js +542 -394
  97. package/dist/esm/perpetualDataHandler.js.map +1 -1
  98. package/dist/esm/perpetualEventHandler.js +188 -126
  99. package/dist/esm/perpetualEventHandler.js.map +1 -1
  100. package/dist/esm/priceFeeds.js +332 -218
  101. package/dist/esm/priceFeeds.js.map +1 -1
  102. package/dist/esm/traderDigests.js +19 -15
  103. package/dist/esm/traderDigests.js.map +1 -1
  104. package/dist/esm/traderInterface.js +83 -48
  105. package/dist/esm/traderInterface.js.map +1 -1
  106. package/dist/esm/triangulator.js +39 -34
  107. package/dist/esm/triangulator.js.map +1 -1
  108. package/dist/esm/utils.js +30 -16
  109. package/dist/esm/utils.js.map +1 -1
  110. package/dist/esm/version.d.ts +1 -1
  111. package/dist/esm/version.js +1 -1
  112. package/dist/esm/version.js.map +1 -1
  113. package/dist/esm/writeAccessHandler.js +105 -69
  114. package/dist/esm/writeAccessHandler.js.map +1 -1
  115. package/package.json +1 -1
  116. package/src/accountTrade.ts +6 -1
  117. package/src/config/priceFeedConfig.json +1 -1
  118. package/src/orderReferrerTool.ts +2 -0
  119. package/src/version.ts +1 -1
@@ -1,3 +1,4 @@
1
+ import { __awaiter, __generator, __read, __values } from "tslib";
1
2
  import { FormatTypes } from "@ethersproject/abi";
2
3
  import { Signer } from "@ethersproject/abstract-signer";
3
4
  import { BigNumber } from "@ethersproject/bignumber";
@@ -11,8 +12,8 @@ import { combineFlags, containsFlag, contractSymbolToSymbol, symbol4BToLongSymbo
11
12
  * Parent class for MarketData and WriteAccessHandler that handles
12
13
  * common data and chain operations.
13
14
  */
14
- export default class PerpetualDataHandler {
15
- constructor(config) {
15
+ var PerpetualDataHandler = /** @class */ (function () {
16
+ function PerpetualDataHandler(config) {
16
17
  this.PRICE_UPDATE_FEE_GWEI = 1;
17
18
  this.proxyContract = null;
18
19
  // limit order book
@@ -34,168 +35,226 @@ export default class PerpetualDataHandler {
34
35
  this.symbolList = SYMBOL_LIST;
35
36
  this.priceFeedGetter = new PriceFeeds(this, config.priceFeedConfigNetwork);
36
37
  }
37
- async initContractsAndData(signerOrProvider, overrides) {
38
- this.signerOrProvider = signerOrProvider;
39
- // check network
40
- let network;
41
- try {
42
- if (signerOrProvider instanceof Signer) {
43
- network = await signerOrProvider.provider.getNetwork();
44
- }
45
- else {
46
- network = await signerOrProvider.getNetwork();
47
- }
48
- }
49
- catch (error) {
50
- console.log(error);
51
- throw new Error(`Unable to connect to network.`);
52
- }
53
- if (network.chainId !== this.chainId) {
54
- throw new Error(`Provider: chain id ${network.chainId} does not match config (${this.chainId})`);
55
- }
56
- this.proxyContract = IPerpetualManager__factory.connect(this.proxyAddr, signerOrProvider);
57
- this.lobFactoryAddr = await this.proxyContract.getOrderBookFactoryAddress(overrides || {});
58
- this.lobFactoryContract = LimitOrderBookFactory__factory.connect(this.lobFactoryAddr, signerOrProvider);
59
- await this._fillSymbolMaps(overrides);
60
- }
38
+ PerpetualDataHandler.prototype.initContractsAndData = function (signerOrProvider, overrides) {
39
+ return __awaiter(this, void 0, void 0, function () {
40
+ var network, error_1, _a;
41
+ return __generator(this, function (_b) {
42
+ switch (_b.label) {
43
+ case 0:
44
+ this.signerOrProvider = signerOrProvider;
45
+ _b.label = 1;
46
+ case 1:
47
+ _b.trys.push([1, 6, , 7]);
48
+ if (!(signerOrProvider instanceof Signer)) return [3 /*break*/, 3];
49
+ return [4 /*yield*/, signerOrProvider.provider.getNetwork()];
50
+ case 2:
51
+ network = _b.sent();
52
+ return [3 /*break*/, 5];
53
+ case 3: return [4 /*yield*/, signerOrProvider.getNetwork()];
54
+ case 4:
55
+ network = _b.sent();
56
+ _b.label = 5;
57
+ case 5: return [3 /*break*/, 7];
58
+ case 6:
59
+ error_1 = _b.sent();
60
+ console.log(error_1);
61
+ throw new Error("Unable to connect to network.");
62
+ case 7:
63
+ if (network.chainId !== this.chainId) {
64
+ throw new Error("Provider: chain id ".concat(network.chainId, " does not match config (").concat(this.chainId, ")"));
65
+ }
66
+ this.proxyContract = IPerpetualManager__factory.connect(this.proxyAddr, signerOrProvider);
67
+ _a = this;
68
+ return [4 /*yield*/, this.proxyContract.getOrderBookFactoryAddress(overrides || {})];
69
+ case 8:
70
+ _a.lobFactoryAddr = _b.sent();
71
+ this.lobFactoryContract = LimitOrderBookFactory__factory.connect(this.lobFactoryAddr, signerOrProvider);
72
+ return [4 /*yield*/, this._fillSymbolMaps(overrides)];
73
+ case 9:
74
+ _b.sent();
75
+ return [2 /*return*/];
76
+ }
77
+ });
78
+ });
79
+ };
61
80
  /**
62
81
  * Returns the order-book contract for the symbol if found or fails
63
82
  * @param symbol symbol of the form ETH-USD-MATIC
64
83
  * @returns order book contract for the perpetual
65
84
  */
66
- getOrderBookContract(symbol) {
67
- let orderBookAddr = this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
85
+ PerpetualDataHandler.prototype.getOrderBookContract = function (symbol) {
86
+ var _a;
87
+ var orderBookAddr = (_a = this.symbolToPerpStaticInfo.get(symbol)) === null || _a === void 0 ? void 0 : _a.limitOrderBookAddr;
68
88
  if (orderBookAddr == "" || orderBookAddr == undefined || this.signerOrProvider == null) {
69
- throw Error(`no limit order book found for ${symbol} or no signer`);
89
+ throw Error("no limit order book found for ".concat(symbol, " or no signer"));
70
90
  }
71
- let lobContract = LimitOrderBook__factory.connect(orderBookAddr, this.signerOrProvider);
91
+ var lobContract = LimitOrderBook__factory.connect(orderBookAddr, this.signerOrProvider);
72
92
  return lobContract;
73
- }
93
+ };
74
94
  /**
75
95
  * Called when initializing. This function fills this.symbolToTokenAddrMap,
76
96
  * and this.nestedPerpetualIDs and this.symbolToPerpStaticInfo
77
97
  *
78
98
  */
79
- async _fillSymbolMaps(overrides) {
80
- if (!this.proxyContract || !this.lobFactoryContract) {
81
- throw Error("proxy or limit order book not defined");
82
- }
83
- let poolInfo = await PerpetualDataHandler.getPoolStaticInfo(this.proxyContract, overrides);
84
- this.nestedPerpetualIDs = poolInfo.nestedPerpetualIDs;
85
- for (let j = 0; j < poolInfo.nestedPerpetualIDs.length; j++) {
86
- let decimals = await ERC20__factory.connect(poolInfo.poolMarginTokenAddr[j], this.provider).decimals();
87
- let info = {
88
- poolId: j + 1,
89
- poolMarginSymbol: "",
90
- poolMarginTokenAddr: poolInfo.poolMarginTokenAddr[j],
91
- poolMarginTokenDecimals: decimals,
92
- shareTokenAddr: poolInfo.poolShareTokenAddr[j],
93
- oracleFactoryAddr: poolInfo.oracleFactory,
94
- isRunning: poolInfo.poolShareTokenAddr[j] != AddressZero,
95
- };
96
- this.poolStaticInfos.push(info);
97
- }
98
- let perpStaticInfos = await PerpetualDataHandler.getPerpetualStaticInfo(this.proxyContract, this.nestedPerpetualIDs, this.symbolList, overrides);
99
- let requiredPairs = new Set();
100
- // 1) determine pool currency based on its perpetuals
101
- // 2) determine which triangulations we need
102
- // 3) fill mapping this.symbolToPerpStaticInf
103
- for (let j = 0; j < perpStaticInfos.length; j++) {
104
- const perp = perpStaticInfos[j];
105
- requiredPairs.add(perp.S2Symbol);
106
- if (perp.S3Symbol != "") {
107
- requiredPairs.add(perp.S3Symbol);
108
- }
109
- let poolCCY = this.poolStaticInfos[perp.poolId - 1].poolMarginSymbol;
110
- if (poolCCY == "") {
111
- //not already filled
112
- const [base, quote] = perp.S2Symbol.split("-");
113
- const base3 = perp.S3Symbol.split("-")[0];
114
- // we find out the pool currency by looking at all perpetuals
115
- // from the perpetual.
116
- if (perp.collateralCurrencyType == COLLATERAL_CURRENCY_BASE) {
117
- poolCCY = base;
99
+ PerpetualDataHandler.prototype._fillSymbolMaps = function (overrides) {
100
+ return __awaiter(this, void 0, void 0, function () {
101
+ var poolInfo, j, decimals, info, perpStaticInfos, requiredPairs, j, perp, poolCCY, _a, base, quote, base3, currentSymbol3, _b, _c, _d, key, info;
102
+ var e_1, _e;
103
+ return __generator(this, function (_f) {
104
+ switch (_f.label) {
105
+ case 0:
106
+ if (!this.proxyContract || !this.lobFactoryContract) {
107
+ throw Error("proxy or limit order book not defined");
108
+ }
109
+ return [4 /*yield*/, PerpetualDataHandler.getPoolStaticInfo(this.proxyContract, overrides)];
110
+ case 1:
111
+ poolInfo = _f.sent();
112
+ this.nestedPerpetualIDs = poolInfo.nestedPerpetualIDs;
113
+ j = 0;
114
+ _f.label = 2;
115
+ case 2:
116
+ if (!(j < poolInfo.nestedPerpetualIDs.length)) return [3 /*break*/, 5];
117
+ return [4 /*yield*/, ERC20__factory.connect(poolInfo.poolMarginTokenAddr[j], this.provider).decimals()];
118
+ case 3:
119
+ decimals = _f.sent();
120
+ info = {
121
+ poolId: j + 1,
122
+ poolMarginSymbol: "",
123
+ poolMarginTokenAddr: poolInfo.poolMarginTokenAddr[j],
124
+ poolMarginTokenDecimals: decimals,
125
+ shareTokenAddr: poolInfo.poolShareTokenAddr[j],
126
+ oracleFactoryAddr: poolInfo.oracleFactory,
127
+ isRunning: poolInfo.poolShareTokenAddr[j] != AddressZero,
128
+ };
129
+ this.poolStaticInfos.push(info);
130
+ _f.label = 4;
131
+ case 4:
132
+ j++;
133
+ return [3 /*break*/, 2];
134
+ case 5: return [4 /*yield*/, PerpetualDataHandler.getPerpetualStaticInfo(this.proxyContract, this.nestedPerpetualIDs, this.symbolList, overrides)];
135
+ case 6:
136
+ perpStaticInfos = _f.sent();
137
+ requiredPairs = new Set();
138
+ // 1) determine pool currency based on its perpetuals
139
+ // 2) determine which triangulations we need
140
+ // 3) fill mapping this.symbolToPerpStaticInf
141
+ for (j = 0; j < perpStaticInfos.length; j++) {
142
+ perp = perpStaticInfos[j];
143
+ requiredPairs.add(perp.S2Symbol);
144
+ if (perp.S3Symbol != "") {
145
+ requiredPairs.add(perp.S3Symbol);
146
+ }
147
+ poolCCY = this.poolStaticInfos[perp.poolId - 1].poolMarginSymbol;
148
+ if (poolCCY == "") {
149
+ _a = __read(perp.S2Symbol.split("-"), 2), base = _a[0], quote = _a[1];
150
+ base3 = perp.S3Symbol.split("-")[0];
151
+ // we find out the pool currency by looking at all perpetuals
152
+ // from the perpetual.
153
+ if (perp.collateralCurrencyType == COLLATERAL_CURRENCY_BASE) {
154
+ poolCCY = base;
155
+ }
156
+ else if (perp.collateralCurrencyType == COLLATERAL_CURRENCY_QUOTE) {
157
+ poolCCY = quote;
158
+ }
159
+ else {
160
+ poolCCY = base3;
161
+ }
162
+ // set pool currency
163
+ this.poolStaticInfos[perp.poolId - 1].poolMarginSymbol = poolCCY;
164
+ // push pool margin token address into map
165
+ this.symbolToTokenAddrMap.set(poolCCY, this.poolStaticInfos[perp.poolId - 1].poolMarginTokenAddr);
166
+ }
167
+ currentSymbol3 = perp.S2Symbol + "-" + poolCCY;
168
+ this.symbolToPerpStaticInfo.set(currentSymbol3, perpStaticInfos[j]);
169
+ }
170
+ // pre-calculate all triangulation paths so we can easily get from
171
+ // the prices of price-feeds to the index price required, e.g.
172
+ // BTC-USDC : BTC-USD / USDC-USD
173
+ this.priceFeedGetter.initializeTriangulations(requiredPairs);
174
+ try {
175
+ // fill this.perpetualIdToSymbol
176
+ for (_b = __values(this.symbolToPerpStaticInfo), _c = _b.next(); !_c.done; _c = _b.next()) {
177
+ _d = __read(_c.value, 2), key = _d[0], info = _d[1];
178
+ this.perpetualIdToSymbol.set(info.id, key);
179
+ }
180
+ }
181
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
182
+ finally {
183
+ try {
184
+ if (_c && !_c.done && (_e = _b.return)) _e.call(_b);
185
+ }
186
+ finally { if (e_1) throw e_1.error; }
187
+ }
188
+ return [2 /*return*/];
118
189
  }
119
- else if (perp.collateralCurrencyType == COLLATERAL_CURRENCY_QUOTE) {
120
- poolCCY = quote;
121
- }
122
- else {
123
- poolCCY = base3;
124
- }
125
- // set pool currency
126
- this.poolStaticInfos[perp.poolId - 1].poolMarginSymbol = poolCCY;
127
- // push pool margin token address into map
128
- this.symbolToTokenAddrMap.set(poolCCY, this.poolStaticInfos[perp.poolId - 1].poolMarginTokenAddr);
129
- }
130
- let currentSymbol3 = perp.S2Symbol + "-" + poolCCY;
131
- this.symbolToPerpStaticInfo.set(currentSymbol3, perpStaticInfos[j]);
132
- }
133
- // pre-calculate all triangulation paths so we can easily get from
134
- // the prices of price-feeds to the index price required, e.g.
135
- // BTC-USDC : BTC-USD / USDC-USD
136
- this.priceFeedGetter.initializeTriangulations(requiredPairs);
137
- // fill this.perpetualIdToSymbol
138
- for (let [key, info] of this.symbolToPerpStaticInfo) {
139
- this.perpetualIdToSymbol.set(info.id, key);
140
- }
141
- }
190
+ });
191
+ });
192
+ };
142
193
  /**
143
194
  * Get pool symbol given a pool Id.
144
195
  * @param {number} poolId Pool Id.
145
196
  * @returns {symbol} Pool symbol, e.g. "USDC".
146
197
  */
147
- getSymbolFromPoolId(poolId) {
198
+ PerpetualDataHandler.prototype.getSymbolFromPoolId = function (poolId) {
148
199
  return PerpetualDataHandler._getSymbolFromPoolId(poolId, this.poolStaticInfos);
149
- }
200
+ };
150
201
  /**
151
202
  * Get pool Id given a pool symbol. Pool IDs start at 1.
152
203
  * @param {string} symbol Pool symbol.
153
204
  * @returns {number} Pool Id.
154
205
  */
155
- getPoolIdFromSymbol(symbol) {
206
+ PerpetualDataHandler.prototype.getPoolIdFromSymbol = function (symbol) {
156
207
  return PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
157
- }
208
+ };
158
209
  /**
159
210
  * Get perpetual Id given a perpetual symbol.
160
211
  * @param {string} symbol Perpetual symbol, e.g. "BTC-USD-MATIC".
161
212
  * @returns {number} Perpetual Id.
162
213
  */
163
- getPerpIdFromSymbol(symbol) {
214
+ PerpetualDataHandler.prototype.getPerpIdFromSymbol = function (symbol) {
164
215
  return PerpetualDataHandler.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
165
- }
216
+ };
166
217
  /**
167
218
  * Get the symbol in long format of the perpetual id
168
219
  * @param perpId perpetual id
169
220
  */
170
- getSymbolFromPerpId(perpId) {
221
+ PerpetualDataHandler.prototype.getSymbolFromPerpId = function (perpId) {
171
222
  return this.perpetualIdToSymbol.get(perpId);
172
- }
173
- symbol4BToLongSymbol(sym) {
223
+ };
224
+ PerpetualDataHandler.prototype.symbol4BToLongSymbol = function (sym) {
174
225
  return symbol4BToLongSymbol(sym, this.symbolList);
175
- }
226
+ };
176
227
  /**
177
228
  * Get PriceFeedSubmission data required for blockchain queries that involve price data, and the corresponding
178
229
  * triangulated prices for the indices S2 and S3
179
230
  * @param symbol pool symbol of the form "ETH-USD-MATIC"
180
231
  * @returns PriceFeedSubmission and prices for S2 and S3. [S2price, 0] if S3 not defined.
181
232
  */
182
- async fetchPriceSubmissionInfoForPerpetual(symbol) {
183
- // fetch prices from required price-feeds (REST)
184
- return await this.priceFeedGetter.fetchFeedPriceInfoAndIndicesForPerpetual(symbol);
185
- }
233
+ PerpetualDataHandler.prototype.fetchPriceSubmissionInfoForPerpetual = function (symbol) {
234
+ return __awaiter(this, void 0, void 0, function () {
235
+ return __generator(this, function (_a) {
236
+ switch (_a.label) {
237
+ case 0: return [4 /*yield*/, this.priceFeedGetter.fetchFeedPriceInfoAndIndicesForPerpetual(symbol)];
238
+ case 1:
239
+ // fetch prices from required price-feeds (REST)
240
+ return [2 /*return*/, _a.sent()];
241
+ }
242
+ });
243
+ });
244
+ };
186
245
  /**
187
246
  * Get the symbols required as indices for the given perpetual
188
247
  * @param symbol of the form ETH-USD-MATIC, specifying the perpetual
189
248
  * @returns name of underlying index prices, e.g. ["MATIC-USD", ""]
190
249
  */
191
- getIndexSymbols(symbol) {
250
+ PerpetualDataHandler.prototype.getIndexSymbols = function (symbol) {
192
251
  // get index
193
- let staticInfo = this.symbolToPerpStaticInfo.get(symbol);
252
+ var staticInfo = this.symbolToPerpStaticInfo.get(symbol);
194
253
  if (staticInfo == undefined) {
195
- throw new Error(`No static info for perpetual with symbol ${symbol}`);
254
+ throw new Error("No static info for perpetual with symbol ".concat(symbol));
196
255
  }
197
256
  return [staticInfo.S2Symbol, staticInfo.S3Symbol];
198
- }
257
+ };
199
258
  /**
200
259
  * Get the latest prices for a given perpetual from the offchain oracle
201
260
  * networks
@@ -203,60 +262,68 @@ export default class PerpetualDataHandler {
203
262
  * @returns array of price feed updates that can be submitted to the smart contract
204
263
  * and corresponding price information
205
264
  */
206
- async fetchLatestFeedPriceInfo(symbol) {
207
- return await this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol);
208
- }
265
+ PerpetualDataHandler.prototype.fetchLatestFeedPriceInfo = function (symbol) {
266
+ return __awaiter(this, void 0, void 0, function () {
267
+ return __generator(this, function (_a) {
268
+ switch (_a.label) {
269
+ case 0: return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
270
+ case 1: return [2 /*return*/, _a.sent()];
271
+ }
272
+ });
273
+ });
274
+ };
209
275
  /**
210
276
  * Get list of required pyth price source IDs for given perpetual
211
277
  * @param symbol perpetual symbol, e.g., BTC-USD-MATIC
212
278
  * @returns list of required pyth price sources for this perpetual
213
279
  */
214
- getPriceIds(symbol) {
215
- let perpInfo = this.symbolToPerpStaticInfo.get(symbol);
280
+ PerpetualDataHandler.prototype.getPriceIds = function (symbol) {
281
+ var perpInfo = this.symbolToPerpStaticInfo.get(symbol);
216
282
  if (perpInfo == undefined) {
217
- throw Error(`Perpetual with symbol ${symbol} not found. Check symbol or use createProxyInstance().`);
283
+ throw Error("Perpetual with symbol ".concat(symbol, " not found. Check symbol or use createProxyInstance()."));
218
284
  }
219
285
  return perpInfo.priceIds;
220
- }
221
- static _getSymbolFromPoolId(poolId, staticInfos) {
222
- let idx = poolId - 1;
286
+ };
287
+ PerpetualDataHandler._getSymbolFromPoolId = function (poolId, staticInfos) {
288
+ var idx = poolId - 1;
223
289
  return staticInfos[idx].poolMarginSymbol;
224
- }
225
- static _getPoolIdFromSymbol(symbol, staticInfos) {
226
- let symbols = symbol.split("-");
290
+ };
291
+ PerpetualDataHandler._getPoolIdFromSymbol = function (symbol, staticInfos) {
292
+ var symbols = symbol.split("-");
227
293
  //in case user provided ETH-USD-MATIC instead of MATIC; or similar
228
294
  if (symbols.length == 3) {
229
295
  symbol = symbols[2];
230
296
  }
231
- let j = 0;
297
+ var j = 0;
232
298
  while (j < staticInfos.length && staticInfos[j].poolMarginSymbol != symbol) {
233
299
  j++;
234
300
  }
235
301
  if (j == staticInfos.length) {
236
- throw new Error(`no pool found for symbol ${symbol}`);
302
+ throw new Error("no pool found for symbol ".concat(symbol));
237
303
  }
238
304
  return j + 1;
239
- }
305
+ };
240
306
  /**
241
307
  * Get perpetual symbols for a given pool
242
308
  * @param poolSymbol pool symbol such as "MATIC"
243
309
  * @returns array of perpetual symbols in this pool
244
310
  */
245
- getPerpetualSymbolsInPool(poolSymbol) {
246
- const j = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbol, this.poolStaticInfos);
247
- const perpIds = this.nestedPerpetualIDs[j - 1];
248
- const perpSymbols = perpIds.map((k) => {
249
- let s = this.getSymbolFromPerpId(k);
311
+ PerpetualDataHandler.prototype.getPerpetualSymbolsInPool = function (poolSymbol) {
312
+ var _this = this;
313
+ var j = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbol, this.poolStaticInfos);
314
+ var perpIds = this.nestedPerpetualIDs[j - 1];
315
+ var perpSymbols = perpIds.map(function (k) {
316
+ var s = _this.getSymbolFromPerpId(k);
250
317
  if (s == undefined) {
251
318
  return "";
252
319
  }
253
320
  return s;
254
321
  });
255
322
  return perpSymbols;
256
- }
257
- getNestedPerpetualIds() {
323
+ };
324
+ PerpetualDataHandler.prototype.getNestedPerpetualIds = function () {
258
325
  return this.nestedPerpetualIDs;
259
- }
326
+ };
260
327
  /**
261
328
  * Collect all perpetuals static info
262
329
  * @param {ethers.Contract} _proxyContract perpetuals contract with getter
@@ -264,51 +331,65 @@ export default class PerpetualDataHandler {
264
331
  * @param {Map<string, string>} symbolList mapping of symbols to convert long-format <-> blockchain-format
265
332
  * @returns array with PerpetualStaticInfo for each perpetual
266
333
  */
267
- static async getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList, overrides) {
268
- // flatten perpetual ids into chunks
269
- const chunkSize = 10;
270
- let ids = PerpetualDataHandler.nestedIDsToChunks(chunkSize, nestedPerpetualIDs);
271
- // query blockchain in chunks
272
- const infoArr = new Array();
273
- for (let k = 0; k < ids.length; k++) {
274
- let perpInfos = await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {});
275
- for (let j = 0; j < perpInfos.length; j++) {
276
- let base = contractSymbolToSymbol(perpInfos[j].S2BaseCCY, symbolList);
277
- let quote = contractSymbolToSymbol(perpInfos[j].S2QuoteCCY, symbolList);
278
- let base3 = contractSymbolToSymbol(perpInfos[j].S3BaseCCY, symbolList);
279
- let quote3 = contractSymbolToSymbol(perpInfos[j].S3QuoteCCY, symbolList);
280
- let sym2 = base + "-" + quote;
281
- let sym3 = base3 == "" ? "" : base3 + "-" + quote3;
282
- let info = {
283
- id: perpInfos[j].id,
284
- poolId: Math.floor(perpInfos[j].id / 100000),
285
- limitOrderBookAddr: perpInfos[j].limitOrderBookAddr,
286
- initialMarginRate: ABDK29ToFloat(perpInfos[j].fInitialMarginRate),
287
- maintenanceMarginRate: ABDK29ToFloat(perpInfos[j].fMaintenanceMarginRate),
288
- collateralCurrencyType: perpInfos[j].collCurrencyType,
289
- S2Symbol: sym2,
290
- S3Symbol: sym3,
291
- lotSizeBC: ABK64x64ToFloat(perpInfos[j].fLotSizeBC),
292
- referralRebate: ABK64x64ToFloat(perpInfos[j].fReferralRebateCC),
293
- priceIds: perpInfos[j].priceIds,
294
- };
295
- infoArr.push(info);
296
- }
297
- }
298
- return infoArr;
299
- }
334
+ PerpetualDataHandler.getPerpetualStaticInfo = function (_proxyContract, nestedPerpetualIDs, symbolList, overrides) {
335
+ return __awaiter(this, void 0, void 0, function () {
336
+ var chunkSize, ids, infoArr, k, perpInfos, j, base, quote, base3, quote3, sym2, sym3, info;
337
+ return __generator(this, function (_a) {
338
+ switch (_a.label) {
339
+ case 0:
340
+ chunkSize = 10;
341
+ ids = PerpetualDataHandler.nestedIDsToChunks(chunkSize, nestedPerpetualIDs);
342
+ infoArr = new Array();
343
+ k = 0;
344
+ _a.label = 1;
345
+ case 1:
346
+ if (!(k < ids.length)) return [3 /*break*/, 4];
347
+ return [4 /*yield*/, _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {})];
348
+ case 2:
349
+ perpInfos = _a.sent();
350
+ for (j = 0; j < perpInfos.length; j++) {
351
+ base = contractSymbolToSymbol(perpInfos[j].S2BaseCCY, symbolList);
352
+ quote = contractSymbolToSymbol(perpInfos[j].S2QuoteCCY, symbolList);
353
+ base3 = contractSymbolToSymbol(perpInfos[j].S3BaseCCY, symbolList);
354
+ quote3 = contractSymbolToSymbol(perpInfos[j].S3QuoteCCY, symbolList);
355
+ sym2 = base + "-" + quote;
356
+ sym3 = base3 == "" ? "" : base3 + "-" + quote3;
357
+ info = {
358
+ id: perpInfos[j].id,
359
+ poolId: Math.floor(perpInfos[j].id / 100000),
360
+ limitOrderBookAddr: perpInfos[j].limitOrderBookAddr,
361
+ initialMarginRate: ABDK29ToFloat(perpInfos[j].fInitialMarginRate),
362
+ maintenanceMarginRate: ABDK29ToFloat(perpInfos[j].fMaintenanceMarginRate),
363
+ collateralCurrencyType: perpInfos[j].collCurrencyType,
364
+ S2Symbol: sym2,
365
+ S3Symbol: sym3,
366
+ lotSizeBC: ABK64x64ToFloat(perpInfos[j].fLotSizeBC),
367
+ referralRebate: ABK64x64ToFloat(perpInfos[j].fReferralRebateCC),
368
+ priceIds: perpInfos[j].priceIds,
369
+ };
370
+ infoArr.push(info);
371
+ }
372
+ _a.label = 3;
373
+ case 3:
374
+ k++;
375
+ return [3 /*break*/, 1];
376
+ case 4: return [2 /*return*/, infoArr];
377
+ }
378
+ });
379
+ });
380
+ };
300
381
  /**
301
382
  * Breaks up an array of nested arrays into chunks of a specified size.
302
383
  * @param {number} chunkSize The size of each chunk.
303
384
  * @param {number[][]} nestedIDs The array of nested arrays to chunk.
304
385
  * @returns {number[][]} An array of subarrays, each containing `chunkSize` or fewer elements from `nestedIDs`.
305
386
  */
306
- static nestedIDsToChunks(chunkSize, nestedIDs) {
307
- const chunkIDs = [];
308
- let currentChunk = [];
309
- for (let k = 0; k < nestedIDs.length; k++) {
310
- const currentPoolIds = nestedIDs[k];
311
- for (let j = 0; j < currentPoolIds.length; j++) {
387
+ PerpetualDataHandler.nestedIDsToChunks = function (chunkSize, nestedIDs) {
388
+ var chunkIDs = [];
389
+ var currentChunk = [];
390
+ for (var k = 0; k < nestedIDs.length; k++) {
391
+ var currentPoolIds = nestedIDs[k];
392
+ for (var j = 0; j < currentPoolIds.length; j++) {
312
393
  currentChunk.push(currentPoolIds[j]);
313
394
  if (currentChunk.length === chunkSize) {
314
395
  chunkIDs.push(currentChunk);
@@ -320,48 +401,61 @@ export default class PerpetualDataHandler {
320
401
  chunkIDs.push(currentChunk);
321
402
  }
322
403
  return chunkIDs;
323
- }
324
- static async getPoolStaticInfo(_proxyContract, overrides) {
325
- let idxFrom = 1;
326
- const len = 10;
327
- let lenReceived = 10;
328
- let nestedPerpetualIDs = [];
329
- let poolShareTokenAddr = [];
330
- let poolMarginTokenAddr = [];
331
- let oracleFactory = "";
332
- while (lenReceived == len) {
333
- let res = await _proxyContract.getPoolStaticInfo(idxFrom, idxFrom + len - 1, overrides || {});
334
- lenReceived = res.length;
335
- nestedPerpetualIDs = nestedPerpetualIDs.concat(res[0]);
336
- poolShareTokenAddr = res[1];
337
- poolMarginTokenAddr = res[2];
338
- oracleFactory = res[3];
339
- idxFrom = idxFrom + len;
340
- }
341
- return {
342
- nestedPerpetualIDs: nestedPerpetualIDs,
343
- poolShareTokenAddr: poolShareTokenAddr,
344
- poolMarginTokenAddr: poolMarginTokenAddr,
345
- oracleFactory: oracleFactory,
346
- };
347
- }
348
- static buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxS2S3) {
349
- const idx_cash = 3;
350
- const idx_notional = 4;
351
- const idx_locked_in = 5;
352
- const idx_mark_price = 8;
353
- const idx_lvg = 7;
354
- const idx_s3 = 9;
355
- let isEmpty = traderState[idx_notional].eq(0);
356
- let cash = ABK64x64ToFloat(traderState[idx_cash]);
357
- let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigNumber.from(0), side = CLOSED_SIDE, entryPrice = 0;
404
+ };
405
+ PerpetualDataHandler.getPoolStaticInfo = function (_proxyContract, overrides) {
406
+ return __awaiter(this, void 0, void 0, function () {
407
+ var idxFrom, len, lenReceived, nestedPerpetualIDs, poolShareTokenAddr, poolMarginTokenAddr, oracleFactory, res;
408
+ return __generator(this, function (_a) {
409
+ switch (_a.label) {
410
+ case 0:
411
+ idxFrom = 1;
412
+ len = 10;
413
+ lenReceived = 10;
414
+ nestedPerpetualIDs = [];
415
+ poolShareTokenAddr = [];
416
+ poolMarginTokenAddr = [];
417
+ oracleFactory = "";
418
+ _a.label = 1;
419
+ case 1:
420
+ if (!(lenReceived == len)) return [3 /*break*/, 3];
421
+ return [4 /*yield*/, _proxyContract.getPoolStaticInfo(idxFrom, idxFrom + len - 1, overrides || {})];
422
+ case 2:
423
+ res = _a.sent();
424
+ lenReceived = res.length;
425
+ nestedPerpetualIDs = nestedPerpetualIDs.concat(res[0]);
426
+ poolShareTokenAddr = res[1];
427
+ poolMarginTokenAddr = res[2];
428
+ oracleFactory = res[3];
429
+ idxFrom = idxFrom + len;
430
+ return [3 /*break*/, 1];
431
+ case 3: return [2 /*return*/, {
432
+ nestedPerpetualIDs: nestedPerpetualIDs,
433
+ poolShareTokenAddr: poolShareTokenAddr,
434
+ poolMarginTokenAddr: poolMarginTokenAddr,
435
+ oracleFactory: oracleFactory,
436
+ }];
437
+ }
438
+ });
439
+ });
440
+ };
441
+ PerpetualDataHandler.buildMarginAccountFromState = function (symbol, traderState, symbolToPerpStaticInfo, _pxS2S3) {
442
+ var _a;
443
+ var idx_cash = 3;
444
+ var idx_notional = 4;
445
+ var idx_locked_in = 5;
446
+ var idx_mark_price = 8;
447
+ var idx_lvg = 7;
448
+ var idx_s3 = 9;
449
+ var isEmpty = traderState[idx_notional].eq(0);
450
+ var cash = ABK64x64ToFloat(traderState[idx_cash]);
451
+ var S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigNumber.from(0), side = CLOSED_SIDE, entryPrice = 0;
358
452
  if (!isEmpty) {
359
- [S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, _pxS2S3[0], symbolToPerpStaticInfo);
453
+ _a = __read(PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, _pxS2S3[0], symbolToPerpStaticInfo), 5), S2Liq = _a[0], S3Liq = _a[1], tau = _a[2], pnl = _a[3], unpaidFundingCC = _a[4];
360
454
  fLockedIn = traderState[idx_locked_in];
361
455
  side = traderState[idx_locked_in].gt(0) ? BUY_SIDE : SELL_SIDE;
362
456
  entryPrice = ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional]));
363
457
  }
364
- let mgn = {
458
+ var mgn = {
365
459
  symbol: symbol,
366
460
  positionNotionalBaseCCY: isEmpty ? 0 : ABK64x64ToFloat(traderState[idx_notional].abs()),
367
461
  side: isEmpty ? CLOSED_SIDE : side,
@@ -376,56 +470,96 @@ export default class PerpetualDataHandler {
376
470
  collToQuoteConversion: ABK64x64ToFloat(traderState[idx_s3]),
377
471
  };
378
472
  return mgn;
379
- }
380
- static async getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxS2S3, overrides) {
381
- let perpId = Number(symbol);
382
- if (isNaN(perpId)) {
383
- perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
384
- }
385
- let traderState = await _proxyContract.getTraderState(perpId, traderAddr, _pxS2S3.map((x) => floatToABK64x64(x)), overrides || {});
386
- return PerpetualDataHandler.buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxS2S3);
387
- }
388
- static async _queryPerpetualPrice(symbol, tradeAmount, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
389
- let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
390
- let fIndexPrices = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
391
- let fPrice = await _proxyContract.queryPerpetualPrice(perpId, floatToABK64x64(tradeAmount), fIndexPrices, overrides || {});
392
- return ABK64x64ToFloat(fPrice);
393
- }
394
- static async _queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
395
- let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
396
- let [S2, S3] = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
397
- let ammState = await _proxyContract.getAMMState(perpId, [S2, S3], overrides || {});
398
- // ammState[6] == S2 == indexPrices[0] up to rounding errors (indexPrices is most accurate)
399
- return indexPrices[0] * (1 + ABK64x64ToFloat(ammState[8]));
400
- }
401
- static async _queryPerpetualState(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
402
- let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
403
- let staticInfo = symbolToPerpStaticInfo.get(symbol);
404
- let ccy = symbol.split("-");
405
- let [S2, S3] = [indexPrices[0], indexPrices[1]];
406
- if (staticInfo.collateralCurrencyType == CollaterlCCY.BASE) {
407
- S3 = S2;
408
- }
409
- else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
410
- S3 = 1;
411
- }
412
- let ammState = await _proxyContract.getAMMState(perpId, [S2, S3].map(floatToABK64x64), overrides || {});
413
- let markPrice = S2 * (1 + ABK64x64ToFloat(ammState[8]));
414
- let state = {
415
- id: perpId,
416
- state: PERP_STATE_STR[ammState[13].toNumber()],
417
- baseCurrency: ccy[0],
418
- quoteCurrency: ccy[1],
419
- indexPrice: S2,
420
- collToQuoteIndexPrice: S3,
421
- markPrice: markPrice,
422
- midPrice: ABK64x64ToFloat(ammState[10]),
423
- currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
424
- openInterestBC: ABK64x64ToFloat(ammState[11]),
425
- isMarketClosed: indexPrices[2] || indexPrices[3],
426
- };
427
- return state;
428
- }
473
+ };
474
+ PerpetualDataHandler.getMarginAccount = function (traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxS2S3, overrides) {
475
+ return __awaiter(this, void 0, void 0, function () {
476
+ var perpId, traderState;
477
+ return __generator(this, function (_a) {
478
+ switch (_a.label) {
479
+ case 0:
480
+ perpId = Number(symbol);
481
+ if (isNaN(perpId)) {
482
+ perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
483
+ }
484
+ return [4 /*yield*/, _proxyContract.getTraderState(perpId, traderAddr, _pxS2S3.map(function (x) { return floatToABK64x64(x); }), overrides || {})];
485
+ case 1:
486
+ traderState = _a.sent();
487
+ return [2 /*return*/, PerpetualDataHandler.buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxS2S3)];
488
+ }
489
+ });
490
+ });
491
+ };
492
+ PerpetualDataHandler._queryPerpetualPrice = function (symbol, tradeAmount, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
493
+ return __awaiter(this, void 0, void 0, function () {
494
+ var perpId, fIndexPrices, fPrice;
495
+ return __generator(this, function (_a) {
496
+ switch (_a.label) {
497
+ case 0:
498
+ perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
499
+ fIndexPrices = indexPrices.map(function (x) { return floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x); });
500
+ return [4 /*yield*/, _proxyContract.queryPerpetualPrice(perpId, floatToABK64x64(tradeAmount), fIndexPrices, overrides || {})];
501
+ case 1:
502
+ fPrice = _a.sent();
503
+ return [2 /*return*/, ABK64x64ToFloat(fPrice)];
504
+ }
505
+ });
506
+ });
507
+ };
508
+ PerpetualDataHandler._queryPerpetualMarkPrice = function (symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
509
+ return __awaiter(this, void 0, void 0, function () {
510
+ var perpId, _a, S2, S3, ammState;
511
+ return __generator(this, function (_b) {
512
+ switch (_b.label) {
513
+ case 0:
514
+ perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
515
+ _a = __read(indexPrices.map(function (x) { return floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x); }), 2), S2 = _a[0], S3 = _a[1];
516
+ return [4 /*yield*/, _proxyContract.getAMMState(perpId, [S2, S3], overrides || {})];
517
+ case 1:
518
+ ammState = _b.sent();
519
+ // ammState[6] == S2 == indexPrices[0] up to rounding errors (indexPrices is most accurate)
520
+ return [2 /*return*/, indexPrices[0] * (1 + ABK64x64ToFloat(ammState[8]))];
521
+ }
522
+ });
523
+ });
524
+ };
525
+ PerpetualDataHandler._queryPerpetualState = function (symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
526
+ return __awaiter(this, void 0, void 0, function () {
527
+ var perpId, staticInfo, ccy, _a, S2, S3, ammState, markPrice, state;
528
+ return __generator(this, function (_b) {
529
+ switch (_b.label) {
530
+ case 0:
531
+ perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
532
+ staticInfo = symbolToPerpStaticInfo.get(symbol);
533
+ ccy = symbol.split("-");
534
+ _a = __read([indexPrices[0], indexPrices[1]], 2), S2 = _a[0], S3 = _a[1];
535
+ if (staticInfo.collateralCurrencyType == CollaterlCCY.BASE) {
536
+ S3 = S2;
537
+ }
538
+ else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
539
+ S3 = 1;
540
+ }
541
+ return [4 /*yield*/, _proxyContract.getAMMState(perpId, [S2, S3].map(floatToABK64x64), overrides || {})];
542
+ case 1:
543
+ ammState = _b.sent();
544
+ markPrice = S2 * (1 + ABK64x64ToFloat(ammState[8]));
545
+ state = {
546
+ id: perpId,
547
+ state: PERP_STATE_STR[ammState[13].toNumber()],
548
+ baseCurrency: ccy[0],
549
+ quoteCurrency: ccy[1],
550
+ indexPrice: S2,
551
+ collToQuoteIndexPrice: S3,
552
+ markPrice: markPrice,
553
+ midPrice: ABK64x64ToFloat(ammState[10]),
554
+ currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
555
+ openInterestBC: ABK64x64ToFloat(ammState[11]),
556
+ isMarketClosed: indexPrices[2] || indexPrices[3],
557
+ };
558
+ return [2 /*return*/, state];
559
+ }
560
+ });
561
+ });
562
+ };
429
563
  /**
430
564
  * Liquidation price
431
565
  * @param symbol symbol of the form BTC-USD-MATIC
@@ -434,34 +568,34 @@ export default class PerpetualDataHandler {
434
568
  * @param symbolToPerpStaticInfo mapping symbol->PerpStaticInfo
435
569
  * @returns liquidation mark-price, corresponding collateral/quote conversion
436
570
  */
437
- static _calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo) {
438
- const idx_availableCashCC = 2;
439
- const idx_cash = 3;
440
- const idx_notional = 4;
441
- const idx_locked_in = 5;
442
- const idx_mark_price = 8;
443
- const idx_s3 = 9;
571
+ PerpetualDataHandler._calculateLiquidationPrice = function (symbol, traderState, S2, symbolToPerpStaticInfo) {
572
+ var idx_availableCashCC = 2;
573
+ var idx_cash = 3;
574
+ var idx_notional = 4;
575
+ var idx_locked_in = 5;
576
+ var idx_mark_price = 8;
577
+ var idx_s3 = 9;
444
578
  // const idx_s2 = 10;
445
- let S2Liq;
446
- let S3Liq = ABK64x64ToFloat(traderState[idx_s3]);
447
- let perpInfo = symbolToPerpStaticInfo.get(symbol);
579
+ var S2Liq;
580
+ var S3Liq = ABK64x64ToFloat(traderState[idx_s3]);
581
+ var perpInfo = symbolToPerpStaticInfo.get(symbol);
448
582
  if (perpInfo == undefined) {
449
- throw new Error(`no info for perpetual ${symbol}`);
450
- }
451
- let tau = perpInfo.maintenanceMarginRate;
452
- let lockedInValueQC = ABK64x64ToFloat(traderState[idx_locked_in]);
453
- let position = ABK64x64ToFloat(traderState[idx_notional]);
454
- let cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
455
- let Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
456
- let unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC].sub(traderState[idx_cash]));
457
- let unpaidFunding = unpaidFundingCC;
583
+ throw new Error("no info for perpetual ".concat(symbol));
584
+ }
585
+ var tau = perpInfo.maintenanceMarginRate;
586
+ var lockedInValueQC = ABK64x64ToFloat(traderState[idx_locked_in]);
587
+ var position = ABK64x64ToFloat(traderState[idx_notional]);
588
+ var cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
589
+ var Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
590
+ var unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC].sub(traderState[idx_cash]));
591
+ var unpaidFunding = unpaidFundingCC;
458
592
  if (perpInfo.collateralCurrencyType == CollaterlCCY.BASE) {
459
593
  S2Liq = calculateLiquidationPriceCollateralBase(lockedInValueQC, position, cashCC, tau);
460
594
  S3Liq = S2Liq;
461
595
  unpaidFunding = unpaidFunding / S2;
462
596
  }
463
597
  else if (perpInfo.collateralCurrencyType == CollaterlCCY.QUANTO) {
464
- let S3 = S3Liq;
598
+ var S3 = S3Liq;
465
599
  S3Liq = S3;
466
600
  S2Liq = calculateLiquidationPriceCollateralQuanto(lockedInValueQC, position, cashCC, tau, S3, Sm);
467
601
  unpaidFunding = unpaidFunding / S3;
@@ -473,9 +607,9 @@ export default class PerpetualDataHandler {
473
607
  S2Liq = S2Liq < 0 ? 0 : S2Liq;
474
608
  S3Liq = S3Liq && S3Liq < 0 ? 0 : S3Liq;
475
609
  // account cash + pnl = avail cash + pos Sm - L = margin balance
476
- let pnl = position * Sm - lockedInValueQC + unpaidFunding;
610
+ var pnl = position * Sm - lockedInValueQC + unpaidFunding;
477
611
  return [S2Liq, S3Liq, tau, pnl, unpaidFundingCC];
478
- }
612
+ };
479
613
  /**
480
614
  * Finds the perpetual id for a symbol of the form
481
615
  * <base>-<quote>-<collateral>. The function first converts the
@@ -485,45 +619,57 @@ export default class PerpetualDataHandler {
485
619
  * including id mapping
486
620
  * @returns perpetual id or it fails
487
621
  */
488
- static symbolToPerpetualId(symbol, symbolToPerpStaticInfo) {
489
- let id = symbolToPerpStaticInfo.get(symbol)?.id;
622
+ PerpetualDataHandler.symbolToPerpetualId = function (symbol, symbolToPerpStaticInfo) {
623
+ var _a;
624
+ var id = (_a = symbolToPerpStaticInfo.get(symbol)) === null || _a === void 0 ? void 0 : _a.id;
490
625
  if (id == undefined) {
491
- throw Error(`No perpetual found for symbol ${symbol}`);
626
+ throw Error("No perpetual found for symbol ".concat(symbol));
492
627
  }
493
628
  return id;
494
- }
495
- static symbolToBytes4Symbol(symbol) {
629
+ };
630
+ PerpetualDataHandler.symbolToBytes4Symbol = function (symbol) {
496
631
  //split by dashes BTC-USD-MATIC
497
- let symbols = symbol.split("-");
632
+ var symbols = symbol.split("-");
498
633
  if (symbols.length != 3) {
499
- throw Error(`Symbol ${symbol} not valid. Expecting CCY-CCY-CCY format`);
634
+ throw Error("Symbol ".concat(symbol, " not valid. Expecting CCY-CCY-CCY format"));
500
635
  }
501
636
  //transform into bytes4 currencies (without the space): "BTC", "USD", "MATC"
502
- symbols = symbols.map((x) => {
503
- let v = to4Chars(x);
637
+ symbols = symbols.map(function (x) {
638
+ var v = to4Chars(x);
504
639
  v = v.replace(/\0/g, "");
505
640
  return v;
506
641
  });
507
642
  // concatenate and find perpetual Id in map
508
643
  return symbols[0] + "-" + symbols[1] + "-" + symbols[2];
509
- }
510
- static _getByValue(map, searchValue, valueField) {
511
- for (let [key, value] of map.entries()) {
512
- if (value[valueField] === searchValue) {
513
- return key;
644
+ };
645
+ PerpetualDataHandler._getByValue = function (map, searchValue, valueField) {
646
+ var e_2, _a;
647
+ try {
648
+ for (var _b = __values(map.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {
649
+ var _d = __read(_c.value, 2), key = _d[0], value = _d[1];
650
+ if (value[valueField] === searchValue) {
651
+ return key;
652
+ }
514
653
  }
515
654
  }
655
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
656
+ finally {
657
+ try {
658
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
659
+ }
660
+ finally { if (e_2) throw e_2.error; }
661
+ }
516
662
  return undefined;
517
- }
518
- static fromSmartContractOrder(order, symbolToPerpInfoMap) {
663
+ };
664
+ PerpetualDataHandler.fromSmartContractOrder = function (order, symbolToPerpInfoMap) {
519
665
  // find symbol of perpetual id
520
- let symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, order.iPerpetualId, "id");
666
+ var symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, order.iPerpetualId, "id");
521
667
  if (symbol == undefined) {
522
- throw Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
668
+ throw Error("Perpetual id ".concat(order.iPerpetualId, " not found. Check with marketData.exchangeInfo()."));
523
669
  }
524
- let side = order.fAmount > BigNumber.from(0) ? BUY_SIDE : SELL_SIDE;
525
- let limitPrice, stopPrice;
526
- let fLimitPrice = BigNumber.from(order.fLimitPrice);
670
+ var side = order.fAmount > BigNumber.from(0) ? BUY_SIDE : SELL_SIDE;
671
+ var limitPrice, stopPrice;
672
+ var fLimitPrice = BigNumber.from(order.fLimitPrice);
527
673
  if (fLimitPrice.eq(0)) {
528
674
  limitPrice = side == BUY_SIDE ? undefined : 0;
529
675
  }
@@ -533,14 +679,14 @@ export default class PerpetualDataHandler {
533
679
  else {
534
680
  limitPrice = ABK64x64ToFloat(fLimitPrice);
535
681
  }
536
- let fStopPrice = BigNumber.from(order.fTriggerPrice);
682
+ var fStopPrice = BigNumber.from(order.fTriggerPrice);
537
683
  if (fStopPrice.eq(0) || fStopPrice.eq(MAX_64x64)) {
538
684
  stopPrice = undefined;
539
685
  }
540
686
  else {
541
687
  stopPrice = ABK64x64ToFloat(fStopPrice);
542
688
  }
543
- let userOrder = {
689
+ var userOrder = {
544
690
  symbol: symbol,
545
691
  side: side,
546
692
  type: PerpetualDataHandler._flagToOrderType(BigNumber.from(order.flags), BigNumber.from(order.fLimitPrice)),
@@ -558,7 +704,7 @@ export default class PerpetualDataHandler {
558
704
  submittedTimestamp: Number(order.submittedTimestamp),
559
705
  };
560
706
  return userOrder;
561
- }
707
+ };
562
708
  /**
563
709
  * Transform the convenient form of the order into a smart-contract accepted type of order
564
710
  * @param order order type
@@ -566,14 +712,14 @@ export default class PerpetualDataHandler {
566
712
  * @param symbolToPerpetualMap mapping of symbol to perpetual Id
567
713
  * @returns SmartContractOrder
568
714
  */
569
- static toSmartContractOrder(order, traderAddr, perpStaticInfo) {
715
+ PerpetualDataHandler.toSmartContractOrder = function (order, traderAddr, perpStaticInfo) {
570
716
  // this revers if order is invalid
571
717
  PerpetualDataHandler.checkOrder(order, perpStaticInfo);
572
718
  // translate order
573
- let flags = PerpetualDataHandler._orderTypeToFlag(order);
574
- let brokerSig = order.brokerSignature == undefined ? [] : order.brokerSignature;
575
- let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
576
- let fAmount;
719
+ var flags = PerpetualDataHandler._orderTypeToFlag(order);
720
+ var brokerSig = order.brokerSignature == undefined ? [] : order.brokerSignature;
721
+ var perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
722
+ var fAmount;
577
723
  if (order.side == BUY_SIDE) {
578
724
  fAmount = floatToABK64x64(Math.abs(order.quantity));
579
725
  }
@@ -581,9 +727,9 @@ export default class PerpetualDataHandler {
581
727
  fAmount = floatToABK64x64(-Math.abs(order.quantity));
582
728
  }
583
729
  else {
584
- throw Error(`invalid side in order spec, use ${BUY_SIDE} or ${SELL_SIDE}`);
730
+ throw Error("invalid side in order spec, use ".concat(BUY_SIDE, " or ").concat(SELL_SIDE));
585
731
  }
586
- let fLimitPrice;
732
+ var fLimitPrice;
587
733
  if (order.limitPrice == undefined) {
588
734
  // we need to set the limit price to infinity or zero for
589
735
  // the trade to go through
@@ -594,9 +740,9 @@ export default class PerpetualDataHandler {
594
740
  else {
595
741
  fLimitPrice = floatToABK64x64(order.limitPrice);
596
742
  }
597
- let iDeadline = order.deadline == undefined ? Date.now() / 1000 + ORDER_MAX_DURATION_SEC : order.deadline;
598
- let fTriggerPrice = order.stopPrice == undefined ? BigNumber.from(0) : floatToABK64x64(order.stopPrice);
599
- let smOrder = {
743
+ var iDeadline = order.deadline == undefined ? Date.now() / 1000 + ORDER_MAX_DURATION_SEC : order.deadline;
744
+ var fTriggerPrice = order.stopPrice == undefined ? BigNumber.from(0) : floatToABK64x64(order.stopPrice);
745
+ var smOrder = {
600
746
  flags: flags,
601
747
  iPerpetualId: perpetualId,
602
748
  brokerFeeTbps: order.brokerFeeTbps == undefined ? 0 : order.brokerFeeTbps,
@@ -613,14 +759,14 @@ export default class PerpetualDataHandler {
613
759
  submittedTimestamp: 0,
614
760
  };
615
761
  return smOrder;
616
- }
762
+ };
617
763
  /**
618
764
  * Converts a smart contract order to a client order
619
765
  * @param scOrder Smart contract order
620
766
  * @param parentChildIds Optional parent-child dependency
621
767
  * @returns Client order that can be submitted to the corresponding LOB
622
768
  */
623
- static fromSmartContratOrderToClientOrder(scOrder, parentChildIds) {
769
+ PerpetualDataHandler.fromSmartContratOrderToClientOrder = function (scOrder, parentChildIds) {
624
770
  return {
625
771
  flags: scOrder.flags,
626
772
  iPerpetualId: scOrder.iPerpetualId,
@@ -638,24 +784,24 @@ export default class PerpetualDataHandler {
638
784
  parentChildDigest1: parentChildIds ? parentChildIds[0] : ZERO_ORDER_ID,
639
785
  parentChildDigest2: parentChildIds ? parentChildIds[1] : ZERO_ORDER_ID,
640
786
  };
641
- }
787
+ };
642
788
  /**
643
789
  * Converts a user-friendly order to a client order
644
790
  * @param order Order
645
791
  * @param parentChildIds Optional parent-child dependency
646
792
  * @returns Client order that can be submitted to the corresponding LOB
647
793
  */
648
- static toClientOrder(order, traderAddr, perpStaticInfo, parentChildIds) {
649
- const scOrder = PerpetualDataHandler.toSmartContractOrder(order, traderAddr, perpStaticInfo);
794
+ PerpetualDataHandler.toClientOrder = function (order, traderAddr, perpStaticInfo, parentChildIds) {
795
+ var scOrder = PerpetualDataHandler.toSmartContractOrder(order, traderAddr, perpStaticInfo);
650
796
  return PerpetualDataHandler.fromSmartContratOrderToClientOrder(scOrder, parentChildIds);
651
- }
797
+ };
652
798
  /**
653
799
  * Converts an order as stored in the LOB smart contract into a user-friendly order type
654
800
  * @param obOrder Order-book contract order type
655
801
  * @returns User friendly order struct
656
802
  */
657
- static fromClientOrder(obOrder, perpStaticInfo) {
658
- const scOrder = {
803
+ PerpetualDataHandler.fromClientOrder = function (obOrder, perpStaticInfo) {
804
+ var scOrder = {
659
805
  flags: obOrder.flags,
660
806
  iPerpetualId: obOrder.iPerpetualId,
661
807
  brokerFeeTbps: obOrder.brokerFeeTbps,
@@ -669,18 +815,18 @@ export default class PerpetualDataHandler {
669
815
  iDeadline: obOrder.iDeadline,
670
816
  executionTimestamp: obOrder.executionTimestamp,
671
817
  };
672
- const order = PerpetualDataHandler.fromSmartContractOrder(scOrder, perpStaticInfo);
818
+ var order = PerpetualDataHandler.fromSmartContractOrder(scOrder, perpStaticInfo);
673
819
  if (obOrder.parentChildDigest1.toString() != ZERO_ORDER_ID ||
674
820
  obOrder.parentChildDigest2.toString() != ZERO_ORDER_ID) {
675
821
  order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
676
822
  }
677
823
  return order;
678
- }
679
- static _flagToOrderType(orderFlags, orderLimitPrice) {
680
- let flag = BigNumber.from(orderFlags);
681
- let isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
682
- let hasLimit = !BigNumber.from(orderLimitPrice).eq(0) || !BigNumber.from(orderLimitPrice).eq(MAX_64x64);
683
- let isStop = containsFlag(flag, MASK_STOP_ORDER);
824
+ };
825
+ PerpetualDataHandler._flagToOrderType = function (orderFlags, orderLimitPrice) {
826
+ var flag = BigNumber.from(orderFlags);
827
+ var isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
828
+ var hasLimit = !BigNumber.from(orderLimitPrice).eq(0) || !BigNumber.from(orderLimitPrice).eq(MAX_64x64);
829
+ var isStop = containsFlag(flag, MASK_STOP_ORDER);
684
830
  if (isStop && hasLimit) {
685
831
  return ORDER_TYPE_STOP_LIMIT;
686
832
  }
@@ -693,15 +839,15 @@ export default class PerpetualDataHandler {
693
839
  else {
694
840
  return ORDER_TYPE_MARKET;
695
841
  }
696
- }
842
+ };
697
843
  /**
698
844
  * Determine the correct order flags based on the order-properties.
699
845
  * Checks for some misspecifications.
700
846
  * @param order order type
701
847
  * @returns BigNumber flags
702
848
  */
703
- static _orderTypeToFlag(order) {
704
- let flag;
849
+ PerpetualDataHandler._orderTypeToFlag = function (order) {
850
+ var flag;
705
851
  order.type = order.type.toUpperCase();
706
852
  switch (order.type) {
707
853
  case ORDER_TYPE_LIMIT:
@@ -717,7 +863,7 @@ export default class PerpetualDataHandler {
717
863
  flag = MASK_STOP_ORDER;
718
864
  break;
719
865
  default: {
720
- throw Error(`Order type ${order.type} not found.`);
866
+ throw Error("Order type ".concat(order.type, " not found."));
721
867
  }
722
868
  }
723
869
  if (order.keepPositionLvg != undefined && order.keepPositionLvg) {
@@ -727,37 +873,37 @@ export default class PerpetualDataHandler {
727
873
  flag = combineFlags(flag, MASK_CLOSE_ONLY);
728
874
  }
729
875
  if ((order.type == ORDER_TYPE_LIMIT || order.type == ORDER_TYPE_STOP_LIMIT) && order.limitPrice == undefined) {
730
- throw Error(`Order type ${order.type} requires limit price.`);
876
+ throw Error("Order type ".concat(order.type, " requires limit price."));
731
877
  }
732
878
  if ((order.type == ORDER_TYPE_STOP_MARKET || order.type == ORDER_TYPE_STOP_LIMIT) && order.stopPrice == undefined) {
733
- throw Error(`Order type ${order.type} requires trigger price.`);
879
+ throw Error("Order type ".concat(order.type, " requires trigger price."));
734
880
  }
735
881
  if ((order.type == ORDER_TYPE_MARKET || order.type == ORDER_TYPE_LIMIT) && order.stopPrice != undefined) {
736
- throw Error(`Order type ${order.type} has no trigger price.`);
882
+ throw Error("Order type ".concat(order.type, " has no trigger price."));
737
883
  }
738
884
  if (order.type != ORDER_TYPE_STOP_LIMIT && order.type != ORDER_TYPE_STOP_MARKET && order.stopPrice != undefined) {
739
- throw Error(`Order type ${order.type} has no trigger price.`);
885
+ throw Error("Order type ".concat(order.type, " has no trigger price."));
740
886
  }
741
887
  return flag;
742
- }
743
- static _getLotSize(symbol, symbolToPerpStaticInfo) {
744
- let perpInfo = symbolToPerpStaticInfo.get(symbol);
888
+ };
889
+ PerpetualDataHandler._getLotSize = function (symbol, symbolToPerpStaticInfo) {
890
+ var perpInfo = symbolToPerpStaticInfo.get(symbol);
745
891
  if (perpInfo == undefined) {
746
- throw new Error(`no info for perpetual ${symbol}`);
892
+ throw new Error("no info for perpetual ".concat(symbol));
747
893
  }
748
894
  return perpInfo.lotSizeBC;
749
- }
750
- static _getMinimalPositionSize(symbol, symbolToPerpStaticInfo) {
895
+ };
896
+ PerpetualDataHandler._getMinimalPositionSize = function (symbol, symbolToPerpStaticInfo) {
751
897
  return 10 * PerpetualDataHandler._getLotSize(symbol, symbolToPerpStaticInfo);
752
- }
898
+ };
753
899
  /**
754
900
  * Get NodeSDKConfig from a chain ID, known config name, or custom file location..
755
901
  * @param configNameOrfileLocation Name of a known default config, or chain ID, or json-file with required variables for config
756
902
  * @param version Config version number. Defaults to highest version if name or chain ID are not unique
757
903
  * @returns NodeSDKConfig
758
904
  */
759
- static readSDKConfig(configNameOrChainIdOrFileLocation, version) {
760
- let config;
905
+ PerpetualDataHandler.readSDKConfig = function (configNameOrChainIdOrFileLocation, version) {
906
+ var config;
761
907
  if (typeof configNameOrChainIdOrFileLocation === "number") {
762
908
  // user entered a chain ID
763
909
  config = this.getConfigByChainId(configNameOrChainIdOrFileLocation, version);
@@ -774,92 +920,92 @@ export default class PerpetualDataHandler {
774
920
  }
775
921
  else {
776
922
  // error
777
- throw Error(`Please specify a chain ID, config name, or custom file location.`);
923
+ throw Error("Please specify a chain ID, config name, or custom file location.");
778
924
  }
779
925
  if (config == undefined) {
780
- throw Error(`Config ${configNameOrChainIdOrFileLocation} not found.`);
926
+ throw Error("Config ".concat(configNameOrChainIdOrFileLocation, " not found."));
781
927
  }
782
928
  return config;
783
- }
929
+ };
784
930
  /**
785
931
  * Get a NodeSDKConfig from its name
786
932
  * @param name Name of the known config
787
933
  * @param version Version of the config. Defaults to highest available.
788
934
  * @returns NodeSDKConfig
789
935
  */
790
- static getConfigByName(name, version) {
791
- let configFile = DEFAULT_CONFIG.filter((c) => c.name == name);
936
+ PerpetualDataHandler.getConfigByName = function (name, version) {
937
+ var configFile = DEFAULT_CONFIG.filter(function (c) { return c.name == name; });
792
938
  if (configFile.length == 0) {
793
- throw Error(`No SDK config found with name ${name}.`);
939
+ throw Error("No SDK config found with name ".concat(name, "."));
794
940
  }
795
941
  if (configFile.length == 1) {
796
942
  return configFile[0];
797
943
  }
798
944
  else {
799
945
  if (version === undefined) {
800
- configFile = configFile.sort((conf) => -conf.version);
946
+ configFile = configFile.sort(function (conf) { return -conf.version; });
801
947
  return configFile[0];
802
948
  }
803
949
  else {
804
- return configFile.find((conf) => conf.version === version);
950
+ return configFile.find(function (conf) { return conf.version === version; });
805
951
  }
806
952
  }
807
- }
953
+ };
808
954
  /**
809
955
  * Get a NodeSDKConfig from a json file.
810
956
  * @param filename Location of the file
811
957
  * @param version Version of the config. Defaults to highest available.
812
958
  * @returns NodeSDKConfig
813
959
  */
814
- static getConfigByLocation(filename) {
960
+ PerpetualDataHandler.getConfigByLocation = function (filename) {
815
961
  // file path: this throws a warning during build - that's ok, it just won't work in react apps
816
962
  // eslint-disable-next-line
817
- let configFile = require(filename);
963
+ var configFile = require(filename);
818
964
  loadABIs(configFile);
819
965
  return configFile;
820
- }
966
+ };
821
967
  /**
822
968
  * Get a NodeSDKConfig from its chain Id
823
969
  * @param chainId Chain Id
824
970
  * @param version Version of the config. Defaults to highest available.
825
971
  * @returns NodeSDKConfig
826
972
  */
827
- static getConfigByChainId(chainId, version) {
828
- let configFile = DEFAULT_CONFIG.filter((c) => c.chainId == chainId);
973
+ PerpetualDataHandler.getConfigByChainId = function (chainId, version) {
974
+ var configFile = DEFAULT_CONFIG.filter(function (c) { return c.chainId == chainId; });
829
975
  if (configFile.length == 0) {
830
- throw Error(`No SDK config found for chain ID ${chainId}.`);
976
+ throw Error("No SDK config found for chain ID ".concat(chainId, "."));
831
977
  }
832
978
  if (configFile.length == 1) {
833
979
  return configFile[0];
834
980
  }
835
981
  else {
836
982
  if (version === undefined) {
837
- configFile = configFile.sort((conf) => -conf.version);
983
+ configFile = configFile.sort(function (conf) { return -conf.version; });
838
984
  return configFile[0];
839
985
  }
840
986
  else {
841
- return configFile.find((conf) => conf.version === version);
987
+ return configFile.find(function (conf) { return conf.version === version; });
842
988
  }
843
989
  }
844
- }
990
+ };
845
991
  /**
846
992
  * Get the ABI of a function in a given contract
847
993
  * @param contract A contract instance, e.g. this.proxyContract
848
994
  * @param functionName Name of the function whose ABI we want
849
995
  * @returns Function ABI as a single JSON string
850
996
  */
851
- static _getABIFromContract(contract, functionName) {
997
+ PerpetualDataHandler._getABIFromContract = function (contract, functionName) {
852
998
  return contract.interface.getFunction(functionName).format(FormatTypes.full);
853
- }
999
+ };
854
1000
  /**
855
1001
  * Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
856
1002
  * @param symbol Symbol of the form ETH-USD-MATIC
857
1003
  * @returns Pool index
858
1004
  */
859
- getPoolStaticInfoIndexFromSymbol(symbol) {
860
- let pools = this.poolStaticInfos;
861
- let poolId = PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
862
- let k = 0;
1005
+ PerpetualDataHandler.prototype.getPoolStaticInfoIndexFromSymbol = function (symbol) {
1006
+ var pools = this.poolStaticInfos;
1007
+ var poolId = PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
1008
+ var k = 0;
863
1009
  while (k < pools.length) {
864
1010
  if (pools[k].poolId == poolId) {
865
1011
  // pool found
@@ -868,16 +1014,16 @@ export default class PerpetualDataHandler {
868
1014
  k++;
869
1015
  }
870
1016
  return -1;
871
- }
1017
+ };
872
1018
  /**
873
1019
  *
874
1020
  * @param symbol Symbol of the form USDC
875
1021
  * @returns Address of the corresponding token
876
1022
  */
877
- getMarginTokenFromSymbol(symbol) {
878
- let pools = this.poolStaticInfos;
879
- let poolId = PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
880
- let k = 0;
1023
+ PerpetualDataHandler.prototype.getMarginTokenFromSymbol = function (symbol) {
1024
+ var pools = this.poolStaticInfos;
1025
+ var poolId = PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
1026
+ var k = 0;
881
1027
  while (k < pools.length) {
882
1028
  if (pools[k].poolId == poolId) {
883
1029
  // pool found
@@ -886,16 +1032,16 @@ export default class PerpetualDataHandler {
886
1032
  k++;
887
1033
  }
888
1034
  return undefined;
889
- }
1035
+ };
890
1036
  /**
891
1037
  *
892
1038
  * @param symbol Symbol of the form USDC
893
1039
  * @returns Decimals of the corresponding token
894
1040
  */
895
- getMarginTokenDecimalsFromSymbol(symbol) {
896
- let pools = this.poolStaticInfos;
897
- let poolId = PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
898
- let k = 0;
1041
+ PerpetualDataHandler.prototype.getMarginTokenDecimalsFromSymbol = function (symbol) {
1042
+ var pools = this.poolStaticInfos;
1043
+ var poolId = PerpetualDataHandler._getPoolIdFromSymbol(symbol, this.poolStaticInfos);
1044
+ var k = 0;
899
1045
  while (k < pools.length) {
900
1046
  if (pools[k].poolId == poolId) {
901
1047
  // pool found
@@ -904,13 +1050,13 @@ export default class PerpetualDataHandler {
904
1050
  k++;
905
1051
  }
906
1052
  return undefined;
907
- }
1053
+ };
908
1054
  /**
909
1055
  * Get ABI for LimitOrderBook, Proxy, or Share Pool Token
910
1056
  * @param contract name of contract: proxy|lob|sharetoken
911
1057
  * @returns ABI for the requested contract
912
1058
  */
913
- getABI(contract) {
1059
+ PerpetualDataHandler.prototype.getABI = function (contract) {
914
1060
  switch (contract) {
915
1061
  case "proxy":
916
1062
  return this.proxyABI;
@@ -921,22 +1067,22 @@ export default class PerpetualDataHandler {
921
1067
  default:
922
1068
  return undefined;
923
1069
  }
924
- }
1070
+ };
925
1071
  /**
926
1072
  * Performs basic validity checks on a given order
927
1073
  * @param order Order struct
928
1074
  * @param traderAccount Trader account
929
1075
  * @param perpStaticInfo Symbol to perpetual info map
930
1076
  */
931
- static checkOrder(order,
1077
+ PerpetualDataHandler.checkOrder = function (order,
932
1078
  // traderAccount: MarginAccount,
933
1079
  perpStaticInfo) {
934
1080
  // check side
935
1081
  if (order.side != BUY_SIDE && order.side != SELL_SIDE) {
936
- throw Error(`order side must be ${BUY_SIDE} or ${SELL_SIDE}`);
1082
+ throw Error("order side must be ".concat(BUY_SIDE, " or ").concat(SELL_SIDE));
937
1083
  }
938
1084
  // check amount
939
- let lotSize = perpStaticInfo.get(order.symbol).lotSizeBC;
1085
+ var lotSize = perpStaticInfo.get(order.symbol).lotSizeBC;
940
1086
  // let curPos =
941
1087
  // traderAccount.side == CLOSED_SIDE
942
1088
  // ? 0
@@ -944,20 +1090,22 @@ export default class PerpetualDataHandler {
944
1090
  // let newPos = curPos + (order.side == BUY_SIDE ? 1 : -1) * order.quantity;
945
1091
  // if (Math.abs(order.quantity) < lotSize || (Math.abs(newPos) >= lotSize && Math.abs(newPos) < 10 * lotSize)) {
946
1092
  if (Math.abs(order.quantity) < lotSize) {
947
- throw Error(`trade amount too small: ${order.quantity} ${perpStaticInfo.get(order.symbol).S2Symbol}`);
1093
+ throw Error("trade amount too small: ".concat(order.quantity, " ").concat(perpStaticInfo.get(order.symbol).S2Symbol));
948
1094
  }
949
1095
  // check limit price
950
1096
  if (order.side == BUY_SIDE && order.limitPrice != undefined && order.limitPrice <= 0) {
951
- throw Error(`invalid limit price for buy order: ${order.limitPrice}`);
1097
+ throw Error("invalid limit price for buy order: ".concat(order.limitPrice));
952
1098
  }
953
1099
  // broker fee
954
1100
  if (order.brokerFeeTbps != undefined && order.brokerFeeTbps < 0) {
955
- throw Error(`invalid broker fee: ${order.brokerFeeTbps / 10} bps`);
1101
+ throw Error("invalid broker fee: ".concat(order.brokerFeeTbps / 10, " bps"));
956
1102
  }
957
1103
  // stop price
958
1104
  if (order.stopPrice != undefined && order.stopPrice < 0) {
959
- throw Error(`invalid stop price: ${order.stopPrice}`);
1105
+ throw Error("invalid stop price: ".concat(order.stopPrice));
960
1106
  }
961
- }
962
- }
1107
+ };
1108
+ return PerpetualDataHandler;
1109
+ }());
1110
+ export default PerpetualDataHandler;
963
1111
  //# sourceMappingURL=perpetualDataHandler.js.map