@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
@@ -1,75 +1,8 @@
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
- var __read = (this && this.__read) || function (o, n) {
39
- var m = typeof Symbol === "function" && o[Symbol.iterator];
40
- if (!m) return o;
41
- var i = m.call(o), r, ar = [], e;
42
- try {
43
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
- }
45
- catch (error) { e = { error: error }; }
46
- finally {
47
- try {
48
- if (r && !r.done && (m = i["return"])) m.call(i);
49
- }
50
- finally { if (e) throw e.error; }
51
- }
52
- return ar;
53
- };
54
- var __values = (this && this.__values) || function(o) {
55
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
56
- if (m) return m.call(o);
57
- if (o && typeof o.length === "number") return {
58
- next: function () {
59
- if (o && i >= o.length) o = void 0;
60
- return { value: o && o[i++], done: !o };
61
- }
62
- };
63
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
64
- };
65
- var __importDefault = (this && this.__importDefault) || function (mod) {
66
- return (mod && mod.__esModule) ? mod : { "default": mod };
67
- };
68
- Object.defineProperty(exports, "__esModule", { value: true });
69
- var ethers_1 = require("ethers");
70
- var triangulator_1 = __importDefault(require("./triangulator"));
71
- var d8XMath_1 = require("./d8XMath");
72
- var buffer_1 = require("buffer");
1
+ import { __awaiter, __generator, __read, __values } from "tslib";
2
+ import { BigNumber } from "ethers";
3
+ import Triangulator from "./triangulator";
4
+ import { decNToFloat } from "./d8XMath";
5
+ import { Buffer } from "buffer";
73
6
  /**
74
7
  * This class communicates with the REST API that provides price-data that is
75
8
  * to be submitted to the smart contracts for certain functions such as
@@ -79,7 +12,7 @@ var PriceFeeds = /** @class */ (function () {
79
12
  function PriceFeeds(dataHandler, priceFeedConfigNetwork) {
80
13
  var _a;
81
14
  this.THRESHOLD_MARKET_CLOSED_SEC = 15; // smallest lag for which we consider the market as being closed
82
- var configs = require("../config/priceFeedConfig.json");
15
+ var configs = require("./config/priceFeedConfig.json");
83
16
  this.config = PriceFeeds._selectConfig(configs, priceFeedConfigNetwork);
84
17
  _a = __read(PriceFeeds._constructFeedInfo(this.config), 2), this.feedInfo = _a[0], this.feedEndpoints = _a[1];
85
18
  this.dataHandler = dataHandler;
@@ -94,7 +27,7 @@ var PriceFeeds = /** @class */ (function () {
94
27
  var feedSymbols = new Array();
95
28
  try {
96
29
  for (var _c = __values(this.feedInfo), _d = _c.next(); !_d.done; _d = _c.next()) {
97
- var _e = __read(_d.value, 2), key = _e[0], value = _e[1];
30
+ var _e = __read(_d.value, 2), value = _e[1];
98
31
  feedSymbols.push(value.symbol);
99
32
  }
100
33
  }
@@ -108,7 +41,7 @@ var PriceFeeds = /** @class */ (function () {
108
41
  try {
109
42
  for (var _f = __values(symbols.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
110
43
  var symbol = _g.value;
111
- var triangulation = triangulator_1.default.triangulate(feedSymbols, symbol);
44
+ var triangulation = Triangulator.triangulate(feedSymbols, symbol);
112
45
  this.triangulations.set(symbol, triangulation);
113
46
  }
114
47
  }
@@ -232,7 +165,7 @@ var PriceFeeds = /** @class */ (function () {
232
165
  */
233
166
  PriceFeeds.prototype.fetchFeedPrices = function (symbols) {
234
167
  return __awaiter(this, void 0, void 0, function () {
235
- var queries, symbolsOfEndpoint, j, k, currFeed, endpointId, resultPrices, k, _a, id, pxInfo, tsSecNow, j, price, isMarketClosed;
168
+ var queries, symbolsOfEndpoint, j, k, currFeed, endpointId, resultPrices, k, _a, pxInfo, tsSecNow, j, price, isMarketClosed;
236
169
  return __generator(this, function (_b) {
237
170
  switch (_b.label) {
238
171
  case 0:
@@ -265,10 +198,10 @@ var PriceFeeds = /** @class */ (function () {
265
198
  }
266
199
  return [4 /*yield*/, this.fetchPriceQuery(queries[k])];
267
200
  case 2:
268
- _a = __read.apply(void 0, [_b.sent(), 2]), id = _a[0], pxInfo = _a[1];
201
+ _a = __read.apply(void 0, [_b.sent(), 2]), pxInfo = _a[1];
269
202
  tsSecNow = Math.round(Date.now() / 1000);
270
203
  for (j = 0; j < pxInfo.length; j++) {
271
- price = (0, d8XMath_1.decNToFloat)(ethers_1.BigNumber.from(pxInfo[j].price), -pxInfo[j].expo);
204
+ price = decNToFloat(BigNumber.from(pxInfo[j].price), -pxInfo[j].expo);
272
205
  isMarketClosed = tsSecNow - pxInfo[j].publish_time > this.THRESHOLD_MARKET_CLOSED_SEC;
273
206
  resultPrices.set(symbolsOfEndpoint[k][j], [price, isMarketClosed]);
274
207
  }
@@ -351,7 +284,7 @@ var PriceFeeds = /** @class */ (function () {
351
284
  idWithinEndpoint = orderEndpointNumber[k] - 100 * endpointId;
352
285
  priceFeedUpdates.push(data[endpointId][0][idWithinEndpoint]);
353
286
  pxInfo = data[endpointId][1][idWithinEndpoint];
354
- price = (0, d8XMath_1.decNToFloat)(ethers_1.BigNumber.from(pxInfo.price), -pxInfo.expo);
287
+ price = decNToFloat(BigNumber.from(pxInfo.price), -pxInfo.expo);
355
288
  isMarketClosed = tsSecNow - pxInfo.publish_time > this.THRESHOLD_MARKET_CLOSED_SEC;
356
289
  mktClosed.push(isMarketClosed);
357
290
  prices.push(price);
@@ -407,7 +340,7 @@ var PriceFeeds = /** @class */ (function () {
407
340
  continue;
408
341
  }
409
342
  }
410
- var _a = __read(triangulator_1.default.calculateTriangulatedPrice(triangulation, feedPriceMap), 2), px = _a[0], isMktClosed = _a[1];
343
+ var _a = __read(Triangulator.calculateTriangulatedPrice(triangulation, feedPriceMap), 2), px = _a[0], isMktClosed = _a[1];
411
344
  prices.push(px);
412
345
  mktClosed.push(isMktClosed);
413
346
  }
@@ -437,7 +370,7 @@ var PriceFeeds = /** @class */ (function () {
437
370
  priceFeedUpdates = new Array();
438
371
  px = new Array();
439
372
  for (k = 0; k < values.length; k++) {
440
- priceFeedUpdates.push("0x" + buffer_1.Buffer.from(values[k][0], "base64").toString("hex"));
373
+ priceFeedUpdates.push("0x" + Buffer.from(values[k][0], "base64").toString("hex"));
441
374
  px.push(values[k][1]);
442
375
  }
443
376
  return [2 /*return*/, [priceFeedUpdates, px]];
@@ -469,7 +402,7 @@ var PriceFeeds = /** @class */ (function () {
469
402
  priceFeedUpdates = new Array();
470
403
  px = new Array();
471
404
  for (k = 0; k < values.length; k++) {
472
- priceFeedUpdates.push("0x" + buffer_1.Buffer.from(values[k].id, "base64").toString("hex"));
405
+ priceFeedUpdates.push("0x" + Buffer.from(values[k].id, "base64").toString("hex"));
473
406
  px.push(values[k].price);
474
407
  }
475
408
  return [2 /*return*/, [priceFeedUpdates, px]];
@@ -527,5 +460,5 @@ var PriceFeeds = /** @class */ (function () {
527
460
  };
528
461
  return PriceFeeds;
529
462
  }());
530
- exports.default = PriceFeeds;
463
+ export default PriceFeeds;
531
464
  //# sourceMappingURL=priceFeeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceFeeds.js","sourceRoot":"","sources":["../../src/priceFeeds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { SmartContractOrder } from "./nodeSDKTypes";
2
+ export default class TraderDigests {
3
+ /**
4
+ * Creates an order-id from the digest. Order-id is the 'digest' used in the smart contract.
5
+ * @param digest created with _createDigest
6
+ * @returns orderId string
7
+ * @ignore
8
+ */
9
+ createOrderId(digest: string): Promise<string>;
10
+ /**
11
+ * Creates a digest (order-id)
12
+ * @param order smart-contract-type order
13
+ * @param chainId chainId of network
14
+ * @param isNewOrder true unless we cancel
15
+ * @param signer ethereum-type wallet
16
+ * @param proxyAddress address of the contract
17
+ * @returns digest
18
+ * @ignore
19
+ */
20
+ createDigest(order: SmartContractOrder, chainId: number, isNewOrder: boolean, proxyAddress: string): Promise<string>;
21
+ }
@@ -0,0 +1,80 @@
1
+ import { __awaiter, __generator } from "tslib";
2
+ import { ethers } from "ethers";
3
+ import { Buffer } from "buffer";
4
+ import { concat, toUtf8Bytes } from "ethers/lib/utils";
5
+ var TraderDigests = /** @class */ (function () {
6
+ function TraderDigests() {
7
+ }
8
+ /**
9
+ * Creates an order-id from the digest. Order-id is the 'digest' used in the smart contract.
10
+ * @param digest created with _createDigest
11
+ * @returns orderId string
12
+ * @ignore
13
+ */
14
+ TraderDigests.prototype.createOrderId = function (digest) {
15
+ return __awaiter(this, void 0, void 0, function () {
16
+ var digestBuffer, messagePrefix, tmp;
17
+ return __generator(this, function (_a) {
18
+ digestBuffer = Buffer.from(digest.substring(2, digest.length), "hex");
19
+ messagePrefix = "\x19Ethereum Signed Message:\n";
20
+ tmp = concat([toUtf8Bytes(messagePrefix), toUtf8Bytes(String(digestBuffer.length)), digestBuffer]);
21
+ // see: https://github.com/ethers-io/ethers.js/blob/c80fcddf50a9023486e9f9acb1848aba4c19f7b6/packages/hash/src.ts/message.ts#L7
22
+ return [2 /*return*/, ethers.utils.keccak256(tmp)];
23
+ });
24
+ });
25
+ };
26
+ /**
27
+ * Creates a digest (order-id)
28
+ * @param order smart-contract-type order
29
+ * @param chainId chainId of network
30
+ * @param isNewOrder true unless we cancel
31
+ * @param signer ethereum-type wallet
32
+ * @param proxyAddress address of the contract
33
+ * @returns digest
34
+ * @ignore
35
+ */
36
+ TraderDigests.prototype.createDigest = function (order, chainId, isNewOrder, proxyAddress) {
37
+ return __awaiter(this, void 0, void 0, function () {
38
+ var NAME, DOMAIN_TYPEHASH, abiCoder, domainSeparator, TRADE_ORDER_TYPEHASH, structHash, digest;
39
+ return __generator(this, function (_a) {
40
+ NAME = "Perpetual Trade Manager";
41
+ DOMAIN_TYPEHASH = ethers.utils.keccak256(Buffer.from("EIP712Domain(string name,uint256 chainId,address verifyingContract)"));
42
+ abiCoder = ethers.utils.defaultAbiCoder;
43
+ domainSeparator = ethers.utils.keccak256(abiCoder.encode(["bytes32", "bytes32", "uint256", "address"], [DOMAIN_TYPEHASH, ethers.utils.keccak256(Buffer.from(NAME)), chainId, proxyAddress]));
44
+ TRADE_ORDER_TYPEHASH = ethers.utils.keccak256(Buffer.from("Order(uint24 iPerpetualId,uint16 brokerFeeTbps,address traderAddr,address brokerAddr,int128 fAmount,int128 fLimitPrice,int128 fTriggerPrice,uint64 iDeadline,uint32 flags,int128 fLeverage,uint64 createdTimestamp)"));
45
+ structHash = ethers.utils.keccak256(abiCoder.encode([
46
+ "bytes32",
47
+ "uint24",
48
+ "uint16",
49
+ "address",
50
+ "address",
51
+ "int128",
52
+ "int128",
53
+ "int128",
54
+ "uint64",
55
+ "uint32",
56
+ "int128",
57
+ "uint64",
58
+ ], [
59
+ TRADE_ORDER_TYPEHASH,
60
+ order.iPerpetualId,
61
+ order.brokerFeeTbps,
62
+ order.traderAddr,
63
+ order.brokerAddr,
64
+ order.fAmount,
65
+ order.fLimitPrice,
66
+ order.fTriggerPrice,
67
+ order.iDeadline,
68
+ order.flags,
69
+ order.fLeverage,
70
+ order.createdTimestamp,
71
+ ]));
72
+ digest = ethers.utils.keccak256(abiCoder.encode(["bytes32", "bytes32", "bool"], [domainSeparator, structHash, isNewOrder]));
73
+ return [2 /*return*/, digest];
74
+ });
75
+ });
76
+ };
77
+ return TraderDigests;
78
+ }());
79
+ export default TraderDigests;
80
+ //# sourceMappingURL=traderDigests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traderDigests.js","sourceRoot":"","sources":["../../src/traderDigests.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvD;IAAA;IAoFA,CAAC;IAnFC;;;;;OAKG;IACU,qCAAa,GAA1B,UAA2B,MAAc;;;;gBACnC,YAAY,GAAG,MAAM,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,MAAM,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;gBACvG,+HAA+H;gBAC/H,sBAAO,MAAM,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,MAAM,CAAC,KAAK,CAAC,SAAS,CAC5C,MAAM,CAAC,IAAI,CAAC,qEAAqE,CAAC,CACnF,CAAC;gBACE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;gBACxC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAC1C,QAAQ,CAAC,MAAM,CACb,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAC5C,CAAC,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CACpF,CACF,CAAC;gBACI,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CACjD,MAAM,CAAC,IAAI,CACT,qNAAqN,CACtN,CACF,CAAC;gBACE,UAAU,GAAG,MAAM,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,MAAM,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"}
@@ -0,0 +1,79 @@
1
+ import MarketData from "./marketData";
2
+ import { NodeSDKConfig, SmartContractOrder, Order, ClientOrder } from "./nodeSDKTypes";
3
+ import TraderDigests from "./traderDigests";
4
+ /**
5
+ * Interface that can be used by front-end that wraps all private functions
6
+ * so that signatures can be handled in frontend via wallet
7
+ * @extends MarketData
8
+ */
9
+ export default class TraderInterface extends MarketData {
10
+ digestTool: TraderDigests;
11
+ /**
12
+ * Constructor
13
+ * @param {NodeSDKConfig} config Configuration object, see
14
+ * PerpetualDataHandler.readSDKConfig.
15
+ */
16
+ constructor(config: NodeSDKConfig);
17
+ /**
18
+ * Get the fee that is charged to the trader for a given broker (can be ZERO-address),
19
+ * without broker fee
20
+ * @param poolSymbolName pool currency (e.g. MATIC)
21
+ * @param traderAddr address of trader
22
+ * @param brokerAddr address of broker
23
+ * @returns fee (in decimals) that is charged by exchange (without broker)
24
+ */
25
+ queryExchangeFee(poolSymbolName: string, traderAddr: string, brokerAddr: string): Promise<number>;
26
+ /**
27
+ *
28
+ * @param poolSymbolName pool symbol, e.g. MATIC
29
+ * @param traderAddr address of the trader
30
+ * @returns volume in USD
31
+ */
32
+ getCurrentTraderVolume(poolSymbolName: string, traderAddr: string): Promise<number>;
33
+ /**
34
+ * Get digest to cancel an order. Digest needs to be signed and submitted via
35
+ * orderBookContract.cancelOrder(orderId, signature);
36
+ * @param symbol
37
+ * @param orderId
38
+ * @returns tuple of digest which the trader needs to sign and address of order book contract
39
+ */
40
+ cancelOrderDigest(symbol: string, orderId: string): Promise<{
41
+ digest: string;
42
+ OBContractAddr: string;
43
+ }>;
44
+ /**
45
+ * Get the order book address for a perpetual
46
+ * @param symbol symbol (e.g. MATIC-USD-MATIC)
47
+ * @returns order book address for the perpetual
48
+ */
49
+ getOrderBookAddress(symbol: string): string;
50
+ /**
51
+ * createSmartContractOrder from user-friendly order
52
+ * @param order order struct
53
+ * @param traderAddr address of trader
54
+ * @returns Smart contract type order struct
55
+ */
56
+ createSmartContractOrder(order: Order, traderAddr: string): SmartContractOrder;
57
+ /**
58
+ * Create smart contract order and digest that the trader signs.
59
+ * await orderBookContract.postOrder(scOrder, signature, { gasLimit: gasLimit });
60
+ * Order must contain broker fee and broker address if there is supposed to be a broker.
61
+ * @param scOrder smart contract order struct (get from order via createSCOrder)
62
+ * @returns digest that the trader has to sign
63
+ */
64
+ orderDigest(scOrder: SmartContractOrder): Promise<string>;
65
+ /**
66
+ * Get the ABI of a method in the proxy contract
67
+ * @param method Name of the method
68
+ * @returns ABI as a single string
69
+ */
70
+ getProxyABI(method: string): string;
71
+ /**
72
+ * Get the ABI of a method in the Limit Order Book contract corresponding to a given symbol.
73
+ * @param symbol Symbol of the form MATIC-USD-MATIC
74
+ * @param method Name of the method
75
+ * @returns ABI as a single string
76
+ */
77
+ getOrderBookABI(symbol: string, method: string): string;
78
+ static chainOrders(orders: SmartContractOrder[], ids: string[]): ClientOrder[];
79
+ }
@@ -0,0 +1,196 @@
1
+ import { __awaiter, __extends, __generator } from "tslib";
2
+ import MarketData from "./marketData";
3
+ import PerpetualDataHandler from "./perpetualDataHandler";
4
+ import { ZERO_ORDER_ID } from "./nodeSDKTypes";
5
+ import TraderDigests from "./traderDigests";
6
+ import { ABK64x64ToFloat } from "./d8XMath";
7
+ /**
8
+ * Interface that can be used by front-end that wraps all private functions
9
+ * so that signatures can be handled in frontend via wallet
10
+ * @extends MarketData
11
+ */
12
+ var TraderInterface = /** @class */ (function (_super) {
13
+ __extends(TraderInterface, _super);
14
+ // accTrade.order(order)
15
+ // cancelOrder(symbol: string, orderId: string)
16
+ // accTrade.setAllowance
17
+ // accTrade.getOrderIds("MATIC-USD-MATIC")
18
+ /**
19
+ * Constructor
20
+ * @param {NodeSDKConfig} config Configuration object, see
21
+ * PerpetualDataHandler.readSDKConfig.
22
+ */
23
+ function TraderInterface(config) {
24
+ var _this = _super.call(this, config) || this;
25
+ _this.digestTool = new TraderDigests();
26
+ return _this;
27
+ }
28
+ /**
29
+ * Get the fee that is charged to the trader for a given broker (can be ZERO-address),
30
+ * without broker fee
31
+ * @param poolSymbolName pool currency (e.g. MATIC)
32
+ * @param traderAddr address of trader
33
+ * @param brokerAddr address of broker
34
+ * @returns fee (in decimals) that is charged by exchange (without broker)
35
+ */
36
+ TraderInterface.prototype.queryExchangeFee = function (poolSymbolName, traderAddr, brokerAddr) {
37
+ return __awaiter(this, void 0, void 0, function () {
38
+ var poolId, feeTbps;
39
+ return __generator(this, function (_a) {
40
+ switch (_a.label) {
41
+ case 0:
42
+ if (this.proxyContract == null) {
43
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
44
+ }
45
+ poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
46
+ return [4 /*yield*/, this.proxyContract.queryExchangeFee(poolId, traderAddr, brokerAddr)];
47
+ case 1:
48
+ feeTbps = _a.sent();
49
+ return [2 /*return*/, feeTbps / 100000];
50
+ }
51
+ });
52
+ });
53
+ };
54
+ /**
55
+ *
56
+ * @param poolSymbolName pool symbol, e.g. MATIC
57
+ * @param traderAddr address of the trader
58
+ * @returns volume in USD
59
+ */
60
+ TraderInterface.prototype.getCurrentTraderVolume = function (poolSymbolName, traderAddr) {
61
+ return __awaiter(this, void 0, void 0, function () {
62
+ var poolId, volume;
63
+ return __generator(this, function (_a) {
64
+ switch (_a.label) {
65
+ case 0:
66
+ if (this.proxyContract == null) {
67
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
68
+ }
69
+ poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
70
+ return [4 /*yield*/, this.proxyContract.getCurrentTraderVolume(poolId, traderAddr)];
71
+ case 1:
72
+ volume = _a.sent();
73
+ return [2 /*return*/, ABK64x64ToFloat(volume)];
74
+ }
75
+ });
76
+ });
77
+ };
78
+ /**
79
+ * Get digest to cancel an order. Digest needs to be signed and submitted via
80
+ * orderBookContract.cancelOrder(orderId, signature);
81
+ * @param symbol
82
+ * @param orderId
83
+ * @returns tuple of digest which the trader needs to sign and address of order book contract
84
+ */
85
+ TraderInterface.prototype.cancelOrderDigest = function (symbol, orderId) {
86
+ return __awaiter(this, void 0, void 0, function () {
87
+ var orderBookContract, scOrder, digest;
88
+ return __generator(this, function (_a) {
89
+ switch (_a.label) {
90
+ case 0:
91
+ if (this.proxyContract == null) {
92
+ throw Error("no proxy contract initialized. Use createProxyInstance().");
93
+ }
94
+ orderBookContract = this.getOrderBookContract(symbol);
95
+ return [4 /*yield*/, orderBookContract.orderOfDigest(orderId)];
96
+ case 1:
97
+ scOrder = _a.sent();
98
+ return [4 /*yield*/, this.digestTool.createDigest(scOrder, this.chainId, false, this.proxyAddr)];
99
+ case 2:
100
+ digest = _a.sent();
101
+ return [2 /*return*/, { digest: digest, OBContractAddr: orderBookContract.address }];
102
+ }
103
+ });
104
+ });
105
+ };
106
+ /**
107
+ * Get the order book address for a perpetual
108
+ * @param symbol symbol (e.g. MATIC-USD-MATIC)
109
+ * @returns order book address for the perpetual
110
+ */
111
+ TraderInterface.prototype.getOrderBookAddress = function (symbol) {
112
+ var orderBookContract = this.getOrderBookContract(symbol);
113
+ return orderBookContract.address;
114
+ };
115
+ /**
116
+ * createSmartContractOrder from user-friendly order
117
+ * @param order order struct
118
+ * @param traderAddr address of trader
119
+ * @returns Smart contract type order struct
120
+ */
121
+ TraderInterface.prototype.createSmartContractOrder = function (order, traderAddr) {
122
+ var scOrder = TraderInterface.toSmartContractOrder(order, traderAddr, this.symbolToPerpStaticInfo);
123
+ return scOrder;
124
+ };
125
+ /**
126
+ * Create smart contract order and digest that the trader signs.
127
+ * await orderBookContract.postOrder(scOrder, signature, { gasLimit: gasLimit });
128
+ * Order must contain broker fee and broker address if there is supposed to be a broker.
129
+ * @param scOrder smart contract order struct (get from order via createSCOrder)
130
+ * @returns digest that the trader has to sign
131
+ */
132
+ TraderInterface.prototype.orderDigest = function (scOrder) {
133
+ return __awaiter(this, void 0, void 0, function () {
134
+ var digest;
135
+ return __generator(this, function (_a) {
136
+ switch (_a.label) {
137
+ case 0:
138
+ if (this.proxyContract == null) {
139
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
140
+ }
141
+ return [4 /*yield*/, this.digestTool.createDigest(scOrder, this.chainId, true, this.proxyContract.address)];
142
+ case 1:
143
+ digest = _a.sent();
144
+ return [2 /*return*/, digest];
145
+ }
146
+ });
147
+ });
148
+ };
149
+ /**
150
+ * Get the ABI of a method in the proxy contract
151
+ * @param method Name of the method
152
+ * @returns ABI as a single string
153
+ */
154
+ TraderInterface.prototype.getProxyABI = function (method) {
155
+ if (this.proxyContract == null) {
156
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
157
+ }
158
+ return PerpetualDataHandler._getABIFromContract(this.proxyContract, method);
159
+ };
160
+ /**
161
+ * Get the ABI of a method in the Limit Order Book contract corresponding to a given symbol.
162
+ * @param symbol Symbol of the form MATIC-USD-MATIC
163
+ * @param method Name of the method
164
+ * @returns ABI as a single string
165
+ */
166
+ TraderInterface.prototype.getOrderBookABI = function (symbol, method) {
167
+ if (this.proxyContract == null) {
168
+ throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
169
+ }
170
+ var orderBookContract = this.getOrderBookContract(symbol);
171
+ return PerpetualDataHandler._getABIFromContract(orderBookContract, method);
172
+ };
173
+ TraderInterface.chainOrders = function (orders, ids) {
174
+ // add dependency
175
+ var obOrders = new Array(orders.length);
176
+ if (orders.length == 1 || orders.length > 3) {
177
+ // nothing to add
178
+ obOrders = orders.map(function (o) { return PerpetualDataHandler.fromSmartContratOrderToClientOrder(o); });
179
+ }
180
+ else if (orders.length == 2) {
181
+ // first order is parent, second a child
182
+ obOrders[0] = PerpetualDataHandler.fromSmartContratOrderToClientOrder(orders[0], [ids[1], ZERO_ORDER_ID]);
183
+ obOrders[1] = PerpetualDataHandler.fromSmartContratOrderToClientOrder(orders[1], [ZERO_ORDER_ID, ids[0]]);
184
+ }
185
+ else {
186
+ // first order is parent, other two its children
187
+ obOrders[0] = PerpetualDataHandler.fromSmartContratOrderToClientOrder(orders[0], [ids[1], ids[2]]);
188
+ obOrders[1] = PerpetualDataHandler.fromSmartContratOrderToClientOrder(orders[1], [ZERO_ORDER_ID, ids[0]]);
189
+ obOrders[2] = PerpetualDataHandler.fromSmartContratOrderToClientOrder(orders[2], [ZERO_ORDER_ID, ids[0]]);
190
+ }
191
+ return obOrders;
192
+ };
193
+ return TraderInterface;
194
+ }(MarketData));
195
+ export default TraderInterface;
196
+ //# sourceMappingURL=traderInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traderInterface.js","sourceRoot":"","sources":["../../src/traderInterface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export default class Triangulator {
2
+ /**
3
+ * Find all possible triangulation paths
4
+ * @param ccyBase array of base currencies ['BTC', 'ETH', 'MATIC', ...]
5
+ * @param ccyQuote array of quote currencies corresponding to base ['USD', 'USD', ...]
6
+ * @param pair pair we want to calculate, e.g. BTC-USDC
7
+ * @returns array of different paths for which multiplication leads to
8
+ * desired pair, e.g. [['MATIC-USD'], ['MATIC-ETH', 'ETH-USD']]
9
+ */
10
+ static findPath(ccyBase: string[], ccyQuote: string[], pair: string): Array<Array<string>>;
11
+ /**
12
+ * Calculate the triangulated price from underlying prices
13
+ * @param triangulation triangulation of with symbol and is-inverted flag
14
+ * @param feedIdxPrices map of symbol to price
15
+ * @returns triangulated price (scalar), true if market closed or price unavailable
16
+ */
17
+ static calculateTriangulatedPrice(triangulation: [string[], boolean[]], feedIdxPrices: Map<string, [number, boolean]>): [number, boolean];
18
+ /**
19
+ * Finds shortest path and returns indices required and whether to divide or not
20
+ * @example triangulate BTC-USDC: [ [ 'BTC-USD', 'USDC-USD' ], [ false, true ] ]
21
+ * @param ccyArr array of available indices (e.g. from websocket)
22
+ * @param symbol symbol we are looking for (e.g. MATIC-USDC)
23
+ * @returns shortest path with given indices, array whether we have to divide (true) or multiply
24
+ * to arrive at the desired price
25
+ */
26
+ static triangulate(ccyArr: string[], symbol: string): [string[], boolean[]];
27
+ }