@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.
- package/dist/cjs/accountTrade.js +243 -134
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.js +290 -144
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/config/priceFeedConfig.json +1 -1
- package/dist/cjs/contracts/factories/ERC20__factory.js +12 -9
- package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +12 -9
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +12 -9
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +12 -9
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +12 -9
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/ShareToken__factory.js +12 -9
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +12 -9
- package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +12 -9
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +12 -9
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js +12 -9
- package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
- package/dist/cjs/contracts/index.js +1 -1
- package/dist/cjs/d8XMath.js +66 -65
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/index.js +11 -11
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/liquidatorTool.js +137 -80
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.js +65 -33
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.js +978 -635
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.js +22 -10
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/orderReferrerTool.js +323 -200
- package/dist/cjs/orderReferrerTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.js +550 -404
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.js +190 -129
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/priceFeeds.js +335 -223
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/traderDigests.js +23 -20
- package/dist/cjs/traderDigests.js.map +1 -1
- package/dist/cjs/traderInterface.js +87 -54
- package/dist/cjs/traderInterface.js.map +1 -1
- package/dist/cjs/triangulator.js +38 -34
- package/dist/cjs/triangulator.js.map +1 -1
- package/dist/cjs/utils.js +32 -18
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/writeAccessHandler.js +112 -78
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/accountTrade.js +237 -126
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.js +284 -136
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/config/priceFeedConfig.json +1 -1
- package/dist/esm/contracts/factories/ERC20__factory.js +12 -8
- package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +12 -8
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +12 -8
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js +12 -8
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js +12 -8
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/esm/contracts/factories/ShareToken__factory.js +12 -8
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +12 -8
- package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +12 -8
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +12 -8
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js +12 -8
- package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
- package/dist/esm/d8XMath.js +64 -63
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.js +136 -77
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.js +63 -29
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.js +971 -626
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.js +48 -36
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/orderReferrerTool.js +319 -194
- package/dist/esm/orderReferrerTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.js +542 -394
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.js +188 -126
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/priceFeeds.js +332 -218
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/traderDigests.js +19 -15
- package/dist/esm/traderDigests.js.map +1 -1
- package/dist/esm/traderInterface.js +83 -48
- package/dist/esm/traderInterface.js.map +1 -1
- package/dist/esm/triangulator.js +39 -34
- package/dist/esm/triangulator.js.map +1 -1
- package/dist/esm/utils.js +30 -16
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/writeAccessHandler.js +105 -69
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +1 -1
- package/src/accountTrade.ts +6 -1
- package/src/config/priceFeedConfig.json +1 -1
- package/src/orderReferrerTool.ts +2 -0
- package/src/version.ts +1 -1
package/dist/cjs/accountTrade.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
var tslib_1 = require("tslib");
|
|
4
|
+
var buffer_1 = require("buffer");
|
|
5
|
+
var d8XMath_1 = require("./d8XMath");
|
|
6
|
+
var marketData_1 = tslib_1.__importDefault(require("./marketData"));
|
|
7
|
+
var nodeSDKTypes_1 = require("./nodeSDKTypes");
|
|
8
|
+
var perpetualDataHandler_1 = tslib_1.__importDefault(require("./perpetualDataHandler"));
|
|
9
|
+
var traderDigests_1 = tslib_1.__importDefault(require("./traderDigests"));
|
|
10
|
+
var writeAccessHandler_1 = tslib_1.__importDefault(require("./writeAccessHandler"));
|
|
11
11
|
/**
|
|
12
12
|
* Functions to create, submit and cancel orders on the exchange.
|
|
13
13
|
* This class requires a private key and executes smart-contract interactions that
|
|
14
14
|
* require gas-payments.
|
|
15
15
|
* @extends WriteAccessHandler
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
var AccountTrade = /** @class */ (function (_super) {
|
|
18
|
+
tslib_1.__extends(AccountTrade, _super);
|
|
18
19
|
/**
|
|
19
20
|
* Constructor
|
|
20
21
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.
|
|
@@ -35,9 +36,10 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
35
36
|
*
|
|
36
37
|
* @param {string | Signer} signer Private key or ethers Signer of the account
|
|
37
38
|
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
function AccountTrade(config, signer) {
|
|
40
|
+
var _this = _super.call(this, config, signer) || this;
|
|
41
|
+
_this.digestTool = new traderDigests_1.default();
|
|
42
|
+
return _this;
|
|
41
43
|
}
|
|
42
44
|
/**
|
|
43
45
|
* Cancels an existing order on the exchange.
|
|
@@ -60,16 +62,28 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
60
62
|
* main();
|
|
61
63
|
* @returns {ContractTransaction} Contract Transaction (containing events).
|
|
62
64
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
AccountTrade.prototype.cancelOrder = function (symbol, orderId, submission, overrides) {
|
|
66
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
67
|
+
var orderBookContract;
|
|
68
|
+
return tslib_1.__generator(this, function (_a) {
|
|
69
|
+
switch (_a.label) {
|
|
70
|
+
case 0:
|
|
71
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
72
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
73
|
+
}
|
|
74
|
+
if (!(submission == undefined)) return [3 /*break*/, 2];
|
|
75
|
+
return [4 /*yield*/, this.fetchLatestFeedPriceInfo(symbol)];
|
|
76
|
+
case 1:
|
|
77
|
+
submission = _a.sent();
|
|
78
|
+
_a.label = 2;
|
|
79
|
+
case 2:
|
|
80
|
+
orderBookContract = this.getOrderBookContract(symbol);
|
|
81
|
+
return [4 /*yield*/, this._cancelOrder(symbol, orderId, orderBookContract, submission, overrides)];
|
|
82
|
+
case 3: return [2 /*return*/, _a.sent()];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
73
87
|
/**
|
|
74
88
|
* Submits an order to the exchange.
|
|
75
89
|
* @param {Order} order Order structure. As a minimum the structure needs to
|
|
@@ -128,18 +142,28 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
128
142
|
*
|
|
129
143
|
* @returns {ContractTransaction} Contract Transaction (containing events).
|
|
130
144
|
*/
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
145
|
+
AccountTrade.prototype.order = function (order, parentChildIds, overrides) {
|
|
146
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
147
|
+
var minSize, orderBookContract, res;
|
|
148
|
+
return tslib_1.__generator(this, function (_a) {
|
|
149
|
+
switch (_a.label) {
|
|
150
|
+
case 0:
|
|
151
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
152
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
153
|
+
}
|
|
154
|
+
minSize = perpetualDataHandler_1.default._getMinimalPositionSize(order.symbol, this.symbolToPerpStaticInfo);
|
|
155
|
+
if (Math.abs(order.quantity) < minSize) {
|
|
156
|
+
throw Error("order size too small");
|
|
157
|
+
}
|
|
158
|
+
orderBookContract = this.getOrderBookContract(order.symbol);
|
|
159
|
+
return [4 /*yield*/, this._order(order, this.traderAddr, this.symbolToPerpStaticInfo, this.proxyContract, orderBookContract, this.chainId, this.signer, parentChildIds, overrides)];
|
|
160
|
+
case 1:
|
|
161
|
+
res = _a.sent();
|
|
162
|
+
return [2 /*return*/, res];
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
};
|
|
143
167
|
/**
|
|
144
168
|
* Fee charged by the exchange for trading any perpetual on a given pool.
|
|
145
169
|
* It accounts for the current trader's fee tier (based on the trader's D8X balance and trading volume).
|
|
@@ -164,17 +188,27 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
164
188
|
*
|
|
165
189
|
* @returns Exchange fee, in decimals (i.e. 0.1% is 0.001).
|
|
166
190
|
*/
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
191
|
+
AccountTrade.prototype.queryExchangeFee = function (poolSymbolName, brokerAddr, overrides) {
|
|
192
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
193
|
+
var poolId, feeTbps;
|
|
194
|
+
return tslib_1.__generator(this, function (_a) {
|
|
195
|
+
switch (_a.label) {
|
|
196
|
+
case 0:
|
|
197
|
+
if (this.proxyContract == null) {
|
|
198
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
199
|
+
}
|
|
200
|
+
if (typeof brokerAddr == "undefined") {
|
|
201
|
+
brokerAddr = nodeSDKTypes_1.ZERO_ADDRESS;
|
|
202
|
+
}
|
|
203
|
+
poolId = perpetualDataHandler_1.default._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
204
|
+
return [4 /*yield*/, this.proxyContract.queryExchangeFee(poolId, this.traderAddr, brokerAddr, overrides || {})];
|
|
205
|
+
case 1:
|
|
206
|
+
feeTbps = _a.sent();
|
|
207
|
+
return [2 /*return*/, feeTbps / 100000];
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
};
|
|
178
212
|
/**
|
|
179
213
|
* Exponentially weighted EMA of the total USD trading volume of all trades performed by this trader.
|
|
180
214
|
* The weights are chosen so that in average this coincides with the 30 day volume.
|
|
@@ -196,14 +230,24 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
196
230
|
*
|
|
197
231
|
* @returns {number} Current trading volume for this trader, in USD.
|
|
198
232
|
*/
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
233
|
+
AccountTrade.prototype.getCurrentTraderVolume = function (poolSymbolName, overrides) {
|
|
234
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
235
|
+
var poolId, volume;
|
|
236
|
+
return tslib_1.__generator(this, function (_a) {
|
|
237
|
+
switch (_a.label) {
|
|
238
|
+
case 0:
|
|
239
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
240
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
241
|
+
}
|
|
242
|
+
poolId = writeAccessHandler_1.default._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
243
|
+
return [4 /*yield*/, this.proxyContract.getCurrentTraderVolume(poolId, this.traderAddr, overrides || {})];
|
|
244
|
+
case 1:
|
|
245
|
+
volume = _a.sent();
|
|
246
|
+
return [2 /*return*/, (0, d8XMath_1.ABK64x64ToFloat)(volume)];
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
};
|
|
207
251
|
/**
|
|
208
252
|
*
|
|
209
253
|
* @param symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -224,13 +268,22 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
224
268
|
*
|
|
225
269
|
* @returns {string[]} Array of Ids for all the orders currently open by this trader.
|
|
226
270
|
*/
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
271
|
+
AccountTrade.prototype.getOrderIds = function (symbol, overrides) {
|
|
272
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
273
|
+
var orderBookContract;
|
|
274
|
+
return tslib_1.__generator(this, function (_a) {
|
|
275
|
+
switch (_a.label) {
|
|
276
|
+
case 0:
|
|
277
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
278
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
279
|
+
}
|
|
280
|
+
orderBookContract = this.getOrderBookContract(symbol);
|
|
281
|
+
return [4 /*yield*/, marketData_1.default.orderIdsOfTrader(this.traderAddr, orderBookContract, overrides)];
|
|
282
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
};
|
|
234
287
|
/**
|
|
235
288
|
* Static order function
|
|
236
289
|
* @param order order type (not SmartContractOrder but Order)
|
|
@@ -244,37 +297,63 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
244
297
|
* @returns [transaction hash, order id]
|
|
245
298
|
* @ignore
|
|
246
299
|
*/
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
300
|
+
AccountTrade.prototype._order = function (order, traderAddr, symbolToPerpetualMap, proxyContract, orderBookContract, chainId, signer, parentChildIds, overrides) {
|
|
301
|
+
var _a;
|
|
302
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
303
|
+
var scOrder, clientOrder, tx, _b, signature, digest, nonce, id;
|
|
304
|
+
return tslib_1.__generator(this, function (_c) {
|
|
305
|
+
switch (_c.label) {
|
|
306
|
+
case 0:
|
|
307
|
+
scOrder = AccountTrade.toSmartContractOrder(order, traderAddr, symbolToPerpetualMap);
|
|
308
|
+
clientOrder = AccountTrade.fromSmartContratOrderToClientOrder(scOrder, parentChildIds);
|
|
309
|
+
return [4 /*yield*/, this._createSignature(scOrder, chainId, true, signer, proxyContract.address)];
|
|
310
|
+
case 1:
|
|
311
|
+
_b = tslib_1.__read.apply(void 0, [_c.sent(), 2]), signature = _b[0], digest = _b[1];
|
|
312
|
+
return [4 /*yield*/, ((_a = this.signer) === null || _a === void 0 ? void 0 : _a.getTransactionCount())];
|
|
313
|
+
case 2:
|
|
314
|
+
nonce = _c.sent();
|
|
315
|
+
return [4 /*yield*/, orderBookContract.postOrder(clientOrder, signature, overrides || { gasLimit: this.gasLimit, nonce: nonce })];
|
|
316
|
+
case 3:
|
|
317
|
+
tx = _c.sent();
|
|
318
|
+
return [4 /*yield*/, this.digestTool.createOrderId(digest)];
|
|
319
|
+
case 4:
|
|
320
|
+
id = _c.sent();
|
|
321
|
+
return [2 /*return*/, { tx: tx, orderId: id }];
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
};
|
|
326
|
+
AccountTrade.prototype._cancelOrder = function (symbol, orderId, orderBookContract, submission, overrides) {
|
|
327
|
+
var _a;
|
|
328
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
329
|
+
var scOrder, _b, signature;
|
|
330
|
+
return tslib_1.__generator(this, function (_c) {
|
|
331
|
+
switch (_c.label) {
|
|
332
|
+
case 0:
|
|
333
|
+
if (orderBookContract == null || this.signer == null) {
|
|
334
|
+
throw Error("Order Book contract for symbol ".concat(symbol, " or signer not defined"));
|
|
335
|
+
}
|
|
336
|
+
if (!(submission == undefined)) return [3 /*break*/, 2];
|
|
337
|
+
return [4 /*yield*/, this.fetchLatestFeedPriceInfo(symbol)];
|
|
338
|
+
case 1:
|
|
339
|
+
submission = _c.sent();
|
|
340
|
+
_c.label = 2;
|
|
341
|
+
case 2: return [4 /*yield*/, orderBookContract.orderOfDigest(orderId)];
|
|
342
|
+
case 3:
|
|
343
|
+
scOrder = _c.sent();
|
|
344
|
+
return [4 /*yield*/, this._createSignature(scOrder, this.chainId, false, this.signer, this.proxyAddr)];
|
|
345
|
+
case 4:
|
|
346
|
+
_b = tslib_1.__read.apply(void 0, [_c.sent(), 1]), signature = _b[0];
|
|
347
|
+
// value is minimal necessary by default, but can be overriden
|
|
348
|
+
if (!overrides || overrides.value == undefined) {
|
|
349
|
+
overrides = tslib_1.__assign({ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI, gasLimit: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _a !== void 0 ? _a : this.gasLimit }, overrides);
|
|
350
|
+
}
|
|
351
|
+
return [4 /*yield*/, orderBookContract.cancelOrder(orderId, signature, submission.priceFeedVaas, submission.timestamps, overrides)];
|
|
352
|
+
case 5: return [2 /*return*/, _c.sent()];
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
};
|
|
278
357
|
/**
|
|
279
358
|
* Creates a signature
|
|
280
359
|
* @param order smart-contract-type order
|
|
@@ -285,58 +364,88 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
285
364
|
* @returns signature as string
|
|
286
365
|
* @ignore
|
|
287
366
|
*/
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
367
|
+
AccountTrade.prototype._createSignature = function (order, chainId, isNewOrder, signer, proxyAddress) {
|
|
368
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
369
|
+
var digest, digestBuffer, signature;
|
|
370
|
+
return tslib_1.__generator(this, function (_a) {
|
|
371
|
+
switch (_a.label) {
|
|
372
|
+
case 0: return [4 /*yield*/, this.digestTool.createDigest(order, chainId, isNewOrder, proxyAddress)];
|
|
373
|
+
case 1:
|
|
374
|
+
digest = _a.sent();
|
|
375
|
+
digestBuffer = buffer_1.Buffer.from(digest.substring(2, digest.length), "hex");
|
|
376
|
+
return [4 /*yield*/, signer.signMessage(digestBuffer)];
|
|
377
|
+
case 2:
|
|
378
|
+
signature = _a.sent();
|
|
379
|
+
return [2 /*return*/, [signature, digest]];
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
};
|
|
294
384
|
/**
|
|
295
385
|
*
|
|
296
386
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
297
387
|
* @param {number} amount How much collateral to add, in units of collateral currency, e.g. MATIC
|
|
298
388
|
*/
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
389
|
+
AccountTrade.prototype.addCollateral = function (symbol, amount, submission, overrides) {
|
|
390
|
+
var _a;
|
|
391
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
392
|
+
var perpId, fAmountCC;
|
|
393
|
+
return tslib_1.__generator(this, function (_b) {
|
|
394
|
+
switch (_b.label) {
|
|
395
|
+
case 0:
|
|
396
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
397
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
398
|
+
}
|
|
399
|
+
perpId = this.getPerpIdFromSymbol(symbol);
|
|
400
|
+
fAmountCC = (0, d8XMath_1.floatToABK64x64)(amount);
|
|
401
|
+
if (!(submission == undefined)) return [3 /*break*/, 2];
|
|
402
|
+
return [4 /*yield*/, this.fetchLatestFeedPriceInfo(symbol)];
|
|
403
|
+
case 1:
|
|
404
|
+
submission = _b.sent();
|
|
405
|
+
_b.label = 2;
|
|
406
|
+
case 2:
|
|
407
|
+
if (!overrides || overrides.value == undefined) {
|
|
408
|
+
overrides = tslib_1.__assign({ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI, gasLimit: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _a !== void 0 ? _a : this.gasLimit }, overrides);
|
|
409
|
+
}
|
|
410
|
+
return [4 /*yield*/, this.proxyContract.deposit(perpId, fAmountCC, submission.priceFeedVaas, submission.timestamps, overrides || { gasLimit: this.gasLimit })];
|
|
411
|
+
case 3: return [2 /*return*/, _b.sent()];
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
};
|
|
317
416
|
/**
|
|
318
417
|
*
|
|
319
418
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
320
419
|
* @param {number} amount How much collateral to remove, in units of collateral currency, e.g. MATIC
|
|
321
420
|
*/
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
421
|
+
AccountTrade.prototype.removeCollateral = function (symbol, amount, submission, overrides) {
|
|
422
|
+
var _a;
|
|
423
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
424
|
+
var perpId, fAmountCC;
|
|
425
|
+
return tslib_1.__generator(this, function (_b) {
|
|
426
|
+
switch (_b.label) {
|
|
427
|
+
case 0:
|
|
428
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
429
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
430
|
+
}
|
|
431
|
+
perpId = this.getPerpIdFromSymbol(symbol);
|
|
432
|
+
fAmountCC = (0, d8XMath_1.floatToABK64x64)(amount);
|
|
433
|
+
if (!(submission == undefined)) return [3 /*break*/, 2];
|
|
434
|
+
return [4 /*yield*/, this.fetchLatestFeedPriceInfo(symbol)];
|
|
435
|
+
case 1:
|
|
436
|
+
submission = _b.sent();
|
|
437
|
+
_b.label = 2;
|
|
438
|
+
case 2:
|
|
439
|
+
if (!overrides || overrides.value == undefined) {
|
|
440
|
+
overrides = tslib_1.__assign({ value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI, gasLimit: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) !== null && _a !== void 0 ? _a : this.gasLimit }, overrides);
|
|
441
|
+
}
|
|
442
|
+
return [4 /*yield*/, this.proxyContract.withdraw(perpId, fAmountCC, submission.priceFeedVaas, submission.timestamps, overrides || { gasLimit: this.gasLimit })];
|
|
443
|
+
case 3: return [2 /*return*/, _b.sent()];
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
});
|
|
447
|
+
};
|
|
448
|
+
return AccountTrade;
|
|
449
|
+
}(writeAccessHandler_1.default));
|
|
341
450
|
exports.default = AccountTrade;
|
|
342
451
|
//# sourceMappingURL=accountTrade.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountTrade.js","sourceRoot":"","sources":["../../src/accountTrade.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"accountTrade.js","sourceRoot":"","sources":["../../src/accountTrade.ts"],"names":[],"mappings":"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"}
|