@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.
- package/dist/cjs/abi/testnet/IPerpetualManager.json +5215 -0
- package/dist/cjs/abi/testnet/LimitOrderBook.json +1075 -0
- package/dist/cjs/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
- package/dist/cjs/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
- package/dist/cjs/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
- package/dist/cjs/accountTrade.js +441 -0
- package/dist/cjs/accountTrade.js.map +1 -0
- package/dist/{src → cjs}/brokerTool.js +31 -84
- package/dist/cjs/brokerTool.js.map +1 -0
- package/dist/cjs/config/defaultConfig.json +47 -0
- package/dist/cjs/config/mockSwap.json +4 -0
- package/dist/cjs/config/priceFeedConfig.json +104 -0
- package/dist/cjs/config/symbolList.json +13 -0
- package/dist/cjs/d8XMath.js.map +1 -0
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/liquidatorTool.js +287 -0
- package/dist/cjs/liquidatorTool.js.map +1 -0
- package/dist/{src → cjs}/liquidityProviderTool.js +12 -65
- package/dist/cjs/liquidityProviderTool.js.map +1 -0
- package/dist/{src → cjs}/marketData.js +52 -134
- package/dist/cjs/marketData.js.map +1 -0
- package/dist/{src → cjs}/nodeSDKTypes.d.ts +5 -5
- package/dist/cjs/nodeSDKTypes.js +64 -0
- package/dist/cjs/nodeSDKTypes.js.map +1 -0
- package/dist/{src → cjs}/orderReferrerTool.d.ts +12 -5
- package/dist/{src → cjs}/orderReferrerTool.js +114 -112
- package/dist/cjs/orderReferrerTool.js.map +1 -0
- package/dist/{src → cjs}/perpetualDataHandler.d.ts +1 -1
- package/dist/{src → cjs}/perpetualDataHandler.js +47 -109
- package/dist/cjs/perpetualDataHandler.js.map +1 -0
- package/dist/{src → cjs}/perpetualEventHandler.d.ts +3 -3
- package/dist/{src → cjs}/perpetualEventHandler.js +12 -74
- package/dist/cjs/perpetualEventHandler.js.map +1 -0
- package/dist/cjs/priceFeeds.js +466 -0
- package/dist/cjs/priceFeeds.js.map +1 -0
- package/dist/{src → cjs}/traderDigests.js +7 -43
- package/dist/cjs/traderDigests.js.map +1 -0
- package/dist/{src → cjs}/traderInterface.js +13 -66
- package/dist/cjs/traderInterface.js.map +1 -0
- package/dist/{src → cjs}/triangulator.js +2 -17
- package/dist/cjs/triangulator.js.map +1 -0
- package/dist/{src → cjs}/utils.js +3 -29
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/version.d.ts +1 -0
- package/dist/{src → cjs}/version.js +1 -1
- package/dist/cjs/version.js.map +1 -0
- package/dist/{src → cjs}/writeAccessHandler.js +12 -65
- package/dist/cjs/writeAccessHandler.js.map +1 -0
- package/dist/esm/abi/ERC20.json +288 -0
- package/dist/esm/abi/MockTokenSwap.json +186 -0
- package/dist/{abi/testnet → esm/abi/central-park}/IPerpetualManager.json +404 -214
- package/dist/{abi/testnet → esm/abi/central-park}/LimitOrderBook.json +197 -15
- package/dist/esm/abi/central-park/LimitOrderBookFactory.json +135 -0
- package/dist/esm/abi/testnet/IPerpetualManager.json +5215 -0
- package/dist/esm/abi/testnet/LimitOrderBook.json +1075 -0
- package/dist/esm/abi/testnet/LimitOrderBookFactory.json +135 -0
- package/dist/esm/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
- package/dist/esm/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
- package/dist/esm/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
- package/dist/esm/accountTrade.d.ts +221 -0
- package/dist/{src → esm}/accountTrade.js +22 -93
- package/dist/esm/accountTrade.js.map +1 -0
- package/dist/esm/brokerTool.d.ts +318 -0
- package/dist/esm/brokerTool.js +572 -0
- package/dist/esm/brokerTool.js.map +1 -0
- package/dist/esm/config/defaultConfig.json +47 -0
- package/dist/esm/config/mockSwap.json +4 -0
- package/dist/esm/config/priceFeedConfig.json +104 -0
- package/dist/esm/config/symbolList.json +13 -0
- package/dist/esm/d8XMath.d.ts +122 -0
- package/dist/esm/d8XMath.js +247 -0
- package/dist/esm/d8XMath.js.map +1 -0
- package/{src/index.ts → dist/esm/index.d.ts} +1 -15
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/liquidatorTool.d.ts +158 -0
- package/dist/{src → esm}/liquidatorTool.js +10 -65
- package/dist/esm/liquidatorTool.js.map +1 -0
- package/dist/esm/liquidityProviderTool.d.ts +126 -0
- package/dist/esm/liquidityProviderTool.js +218 -0
- package/dist/esm/liquidityProviderTool.js.map +1 -0
- package/dist/esm/marketData.d.ts +309 -0
- package/dist/esm/marketData.js +1007 -0
- package/dist/esm/marketData.js.map +1 -0
- package/dist/esm/nodeSDKTypes.d.ts +266 -0
- package/dist/esm/nodeSDKTypes.js +60 -0
- package/dist/esm/nodeSDKTypes.js.map +1 -0
- package/dist/esm/orderReferrerTool.d.ts +196 -0
- package/dist/esm/orderReferrerTool.js +491 -0
- package/dist/esm/orderReferrerTool.js.map +1 -0
- package/dist/esm/perpetualDataHandler.d.ts +220 -0
- package/dist/esm/perpetualDataHandler.js +1060 -0
- package/dist/esm/perpetualDataHandler.js.map +1 -0
- package/dist/esm/perpetualEventHandler.d.ts +179 -0
- package/dist/esm/perpetualEventHandler.js +435 -0
- package/dist/esm/perpetualEventHandler.js.map +1 -0
- package/dist/esm/priceFeeds.d.ts +115 -0
- package/dist/{src → esm}/priceFeeds.js +16 -83
- package/dist/esm/priceFeeds.js.map +1 -0
- package/dist/esm/traderDigests.d.ts +21 -0
- package/dist/esm/traderDigests.js +80 -0
- package/dist/esm/traderDigests.js.map +1 -0
- package/dist/esm/traderInterface.d.ts +79 -0
- package/dist/esm/traderInterface.js +196 -0
- package/dist/esm/traderInterface.js.map +1 -0
- package/dist/esm/triangulator.d.ts +27 -0
- package/dist/esm/triangulator.js +110 -0
- package/dist/esm/triangulator.js.map +1 -0
- package/dist/esm/utils.d.ts +59 -0
- package/dist/esm/utils.js +138 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/version.d.ts +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/esm/writeAccessHandler.d.ts +50 -0
- package/dist/esm/writeAccessHandler.js +157 -0
- package/dist/esm/writeAccessHandler.js.map +1 -0
- package/package.json +16 -26
- package/dist/bundle.js +0 -36793
- package/dist/config/defaultConfig.json +0 -47
- package/dist/config/mockSwap.json +0 -4
- package/dist/config/priceFeedConfig.json +0 -104
- package/dist/config/symbolList.json +0 -13
- package/dist/src/index.js +0 -45
- package/dist/src/nodeSDKTypes.js +0 -115
- package/dist/src/version.d.ts +0 -1
- package/module.d.ts +0 -1
- package/src/accountTrade.ts +0 -392
- package/src/brokerTool.ts +0 -507
- package/src/d8XMath.ts +0 -319
- package/src/liquidatorTool.ts +0 -258
- package/src/liquidityProviderTool.ts +0 -186
- package/src/marketData.ts +0 -946
- package/src/nodeSDKTypes.ts +0 -293
- package/src/orderReferrerTool.ts +0 -389
- package/src/perpetualDataHandler.ts +0 -1061
- package/src/perpetualEventHandler.ts +0 -455
- package/src/priceFeeds.ts +0 -381
- package/src/traderDigests.ts +0 -91
- package/src/traderInterface.ts +0 -159
- package/src/triangulator.ts +0 -105
- package/src/utils.ts +0 -134
- package/src/version.ts +0 -1
- package/src/writeAccessHandler.ts +0 -127
- /package/dist/{abi → cjs/abi}/ERC20.json +0 -0
- /package/dist/{abi → cjs/abi}/MockTokenSwap.json +0 -0
- /package/dist/{abi → cjs/abi}/central-park/IPerpetualManager.json +0 -0
- /package/dist/{abi → cjs/abi}/central-park/LimitOrderBook.json +0 -0
- /package/dist/{abi → cjs/abi}/central-park/LimitOrderBookFactory.json +0 -0
- /package/dist/{abi → cjs/abi}/testnet/LimitOrderBookFactory.json +0 -0
- /package/dist/{src → cjs}/accountTrade.d.ts +0 -0
- /package/dist/{src → cjs}/brokerTool.d.ts +0 -0
- /package/dist/{src → cjs}/d8XMath.d.ts +0 -0
- /package/dist/{src → cjs}/d8XMath.js +0 -0
- /package/dist/{src → cjs}/index.d.ts +0 -0
- /package/dist/{src → cjs}/liquidatorTool.d.ts +0 -0
- /package/dist/{src → cjs}/liquidityProviderTool.d.ts +0 -0
- /package/dist/{src → cjs}/marketData.d.ts +0 -0
- /package/dist/{src → cjs}/priceFeeds.d.ts +0 -0
- /package/dist/{src → cjs}/traderDigests.d.ts +0 -0
- /package/dist/{src → cjs}/traderInterface.d.ts +0 -0
- /package/dist/{src → cjs}/triangulator.d.ts +0 -0
- /package/dist/{src → cjs}/utils.d.ts +0 -0
- /package/dist/{src → cjs}/writeAccessHandler.d.ts +0 -0
|
@@ -1,75 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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("
|
|
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),
|
|
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 =
|
|
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,
|
|
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]),
|
|
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 =
|
|
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 =
|
|
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(
|
|
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" +
|
|
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" +
|
|
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
|
-
|
|
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
|
+
}
|