@d8x/perpetuals-sdk 0.7.7 → 0.7.8
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/IPyth.json +471 -0
- package/dist/cjs/abi/OracleFactory.json +457 -0
- package/dist/cjs/accountTrade.js +134 -243
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.js +144 -290
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/config/priceFeedConfig.json +1 -1
- package/dist/cjs/contracts/IPyth.d.ts +234 -0
- package/dist/cjs/contracts/IPyth.js +3 -0
- package/dist/cjs/contracts/IPyth.js.map +1 -0
- package/dist/cjs/contracts/OracleFactory.d.ts +288 -0
- package/dist/cjs/contracts/OracleFactory.js +3 -0
- package/dist/cjs/contracts/OracleFactory.js.map +1 -0
- package/dist/cjs/contracts/factories/ERC20__factory.js +9 -12
- package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +9 -12
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPyth__factory.d.ts +367 -0
- package/dist/cjs/contracts/factories/IPyth__factory.js +489 -0
- package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +9 -12
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +9 -12
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +9 -12
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +361 -0
- package/dist/cjs/contracts/factories/OracleFactory__factory.js +475 -0
- package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -0
- package/dist/cjs/contracts/factories/ShareToken__factory.js +9 -12
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/index.d.ts +2 -0
- package/dist/cjs/contracts/factories/index.js +5 -1
- package/dist/cjs/contracts/factories/index.js.map +1 -1
- package/dist/cjs/contracts/index.d.ts +4 -0
- package/dist/cjs/contracts/index.js +6 -2
- package/dist/cjs/contracts/index.js.map +1 -1
- package/dist/cjs/d8XMath.js +65 -66
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +14 -12
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/liquidatorTool.js +80 -137
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.js +33 -65
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.js +635 -978
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.js +10 -22
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/orderReferrerTool.js +200 -323
- package/dist/cjs/orderReferrerTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.js +404 -550
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.js +129 -190
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/priceFeeds.js +223 -335
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/traderDigests.js +20 -23
- package/dist/cjs/traderDigests.js.map +1 -1
- package/dist/cjs/traderInterface.js +54 -87
- package/dist/cjs/traderInterface.js.map +1 -1
- package/dist/cjs/triangulator.js +34 -38
- package/dist/cjs/triangulator.js.map +1 -1
- package/dist/cjs/utils.js +18 -32
- 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 +78 -112
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/abi/IPyth.json +471 -0
- package/dist/esm/abi/OracleFactory.json +457 -0
- package/dist/esm/accountTrade.js +126 -237
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.js +136 -284
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/config/priceFeedConfig.json +1 -1
- package/dist/esm/contracts/IPyth.d.ts +234 -0
- package/dist/esm/contracts/IPyth.js +2 -0
- package/dist/esm/contracts/IPyth.js.map +1 -0
- package/dist/esm/contracts/OracleFactory.d.ts +288 -0
- package/dist/esm/contracts/OracleFactory.js +2 -0
- package/dist/esm/contracts/OracleFactory.js.map +1 -0
- package/dist/esm/contracts/factories/ERC20__factory.js +8 -12
- package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +8 -12
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPyth__factory.d.ts +367 -0
- package/dist/esm/contracts/factories/IPyth__factory.js +485 -0
- package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -0
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +8 -12
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js +8 -12
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js +8 -12
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +361 -0
- package/dist/esm/contracts/factories/OracleFactory__factory.js +471 -0
- package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -0
- package/dist/esm/contracts/factories/ShareToken__factory.js +8 -12
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/contracts/factories/index.d.ts +2 -0
- package/dist/esm/contracts/factories/index.js +2 -0
- package/dist/esm/contracts/factories/index.js.map +1 -1
- package/dist/esm/contracts/index.d.ts +4 -0
- package/dist/esm/contracts/index.js +2 -0
- package/dist/esm/contracts/index.js.map +1 -1
- package/dist/esm/d8XMath.js +63 -64
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/liquidatorTool.js +77 -136
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.js +29 -63
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.js +626 -971
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.js +36 -48
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/orderReferrerTool.js +194 -319
- package/dist/esm/orderReferrerTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.js +394 -542
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.js +126 -188
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/priceFeeds.js +218 -332
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/traderDigests.js +15 -19
- package/dist/esm/traderDigests.js.map +1 -1
- package/dist/esm/traderInterface.js +48 -83
- package/dist/esm/traderInterface.js.map +1 -1
- package/dist/esm/triangulator.js +34 -39
- package/dist/esm/triangulator.js.map +1 -1
- package/dist/esm/utils.js +16 -30
- 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 +69 -105
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +1 -1
- package/src/abi/IPyth.json +471 -0
- package/src/abi/OracleFactory.json +457 -0
- package/src/accountTrade.ts +1 -6
- package/src/config/priceFeedConfig.json +1 -1
- package/src/contracts/IPyth.ts +571 -0
- package/src/contracts/OracleFactory.ts +708 -0
- package/src/contracts/factories/IPyth__factory.ts +489 -0
- package/src/contracts/factories/{zkevmTestnet/ShareToken__factory.ts → OracleFactory__factory.ts} +222 -206
- package/src/contracts/factories/index.ts +2 -0
- package/src/contracts/index.ts +4 -0
- package/src/index.ts +2 -0
- package/src/orderReferrerTool.ts +1 -3
- package/src/priceFeeds.ts +1 -1
- package/src/version.ts +1 -1
- package/src/contracts/factories/zkevmTestnet/IPerpetualManager__factory.ts +0 -5804
- package/src/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.ts +0 -263
- package/src/contracts/factories/zkevmTestnet/LimitOrderBook__factory.ts +0 -1131
- package/src/contracts/factories/zkevmTestnet/index.ts +0 -7
- package/src/contracts/zkevmTestnet/IPerpetualManager.ts +0 -7109
- package/src/contracts/zkevmTestnet/LimitOrderBook.ts +0 -1341
- package/src/contracts/zkevmTestnet/LimitOrderBookFactory.ts +0 -472
- package/src/contracts/zkevmTestnet/ShareToken.ts +0 -695
- package/src/contracts/zkevmTestnet/index.ts +0 -7
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const bignumber_1 = require("@ethersproject/bignumber");
|
|
5
|
+
const constants_1 = require("@ethersproject/constants");
|
|
6
|
+
const nodeSDKTypes_1 = require("./nodeSDKTypes");
|
|
7
|
+
const perpetualDataHandler_1 = tslib_1.__importDefault(require("./perpetualDataHandler"));
|
|
8
|
+
const writeAccessHandler_1 = tslib_1.__importDefault(require("./writeAccessHandler"));
|
|
9
9
|
/**
|
|
10
10
|
* Functions to execute existing conditional orders from the limit order book. This class
|
|
11
11
|
* requires a private key and executes smart-contract interactions that require
|
|
12
12
|
* gas-payments.
|
|
13
13
|
* @extends WriteAccessHandler
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
|
-
tslib_1.__extends(OrderReferrerTool, _super);
|
|
15
|
+
class OrderReferrerTool extends writeAccessHandler_1.default {
|
|
17
16
|
/**
|
|
18
17
|
* Constructor.
|
|
19
18
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
|
|
@@ -33,11 +32,10 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
33
32
|
*
|
|
34
33
|
* @param {string | Signer} signer Private key or ethers Signer of the account
|
|
35
34
|
*/
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
constructor(config, signer) {
|
|
36
|
+
super(config, signer);
|
|
38
37
|
// override parent's gas limit with a lower number
|
|
39
|
-
|
|
40
|
-
return _this;
|
|
38
|
+
this.gasLimit = 4000000;
|
|
41
39
|
}
|
|
42
40
|
/**
|
|
43
41
|
* Executes an order by symbol and ID. This action interacts with the blockchain and incurs gas costs.
|
|
@@ -73,66 +71,46 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
73
71
|
* main();
|
|
74
72
|
* @returns Transaction object.
|
|
75
73
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
orderBookSC = this.getOrderBookContract(symbol);
|
|
118
|
-
if (typeof referrerAddr == "undefined") {
|
|
119
|
-
referrerAddr = this.traderAddr;
|
|
120
|
-
}
|
|
121
|
-
if (!(submission == undefined)) return [3 /*break*/, 2];
|
|
122
|
-
return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
|
|
123
|
-
case 1:
|
|
124
|
-
submission = _b.sent();
|
|
125
|
-
_b.label = 2;
|
|
126
|
-
case 2:
|
|
127
|
-
if (!overrides || overrides.value == undefined) {
|
|
128
|
-
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);
|
|
129
|
-
}
|
|
130
|
-
return [4 /*yield*/, orderBookSC.executeOrders(orderIds, referrerAddr, submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas, submission === null || submission === void 0 ? void 0 : submission.timestamps, overrides)];
|
|
131
|
-
case 3: return [2 /*return*/, _b.sent()];
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
};
|
|
74
|
+
async executeOrder(symbol, orderId, referrerAddr, submission, overrides) {
|
|
75
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
76
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
77
|
+
}
|
|
78
|
+
const orderBookSC = this.getOrderBookContract(symbol);
|
|
79
|
+
if (typeof referrerAddr == "undefined") {
|
|
80
|
+
referrerAddr = this.traderAddr;
|
|
81
|
+
}
|
|
82
|
+
if (submission == undefined) {
|
|
83
|
+
submission = await this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol);
|
|
84
|
+
}
|
|
85
|
+
if (!overrides || overrides.value == undefined) {
|
|
86
|
+
overrides = {
|
|
87
|
+
value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI,
|
|
88
|
+
gasLimit: overrides?.gasLimit ?? this.gasLimit,
|
|
89
|
+
...overrides,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return await orderBookSC.executeOrder(orderId, referrerAddr, submission.priceFeedVaas, submission.timestamps, overrides);
|
|
93
|
+
}
|
|
94
|
+
async executeOrders(symbol, orderIds, referrerAddr, submission, overrides) {
|
|
95
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
96
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
97
|
+
}
|
|
98
|
+
const orderBookSC = this.getOrderBookContract(symbol);
|
|
99
|
+
if (typeof referrerAddr == "undefined") {
|
|
100
|
+
referrerAddr = this.traderAddr;
|
|
101
|
+
}
|
|
102
|
+
if (submission == undefined) {
|
|
103
|
+
submission = await this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol);
|
|
104
|
+
}
|
|
105
|
+
if (!overrides || overrides.value == undefined) {
|
|
106
|
+
overrides = {
|
|
107
|
+
value: submission.timestamps.length * this.PRICE_UPDATE_FEE_GWEI,
|
|
108
|
+
gasLimit: overrides?.gasLimit ?? this.gasLimit,
|
|
109
|
+
...overrides,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return await orderBookSC.executeOrders(orderIds, referrerAddr, submission?.priceFeedVaas, submission?.timestamps, overrides);
|
|
113
|
+
}
|
|
136
114
|
/**
|
|
137
115
|
* All the orders in the order book for a given symbol that are currently open.
|
|
138
116
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -153,20 +131,10 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
153
131
|
*
|
|
154
132
|
* @returns Array with all open orders and their IDs.
|
|
155
133
|
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
switch (_a.label) {
|
|
161
|
-
case 0: return [4 /*yield*/, this.numberOfOpenOrders(symbol, overrides)];
|
|
162
|
-
case 1:
|
|
163
|
-
totalOrders = _a.sent();
|
|
164
|
-
return [4 /*yield*/, this.pollLimitOrders(symbol, totalOrders, nodeSDKTypes_1.ZERO_ORDER_ID, overrides)];
|
|
165
|
-
case 2: return [2 /*return*/, _a.sent()];
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
};
|
|
134
|
+
async getAllOpenOrders(symbol, overrides) {
|
|
135
|
+
let totalOrders = await this.numberOfOpenOrders(symbol, overrides);
|
|
136
|
+
return await this.pollLimitOrders(symbol, totalOrders, nodeSDKTypes_1.ZERO_ORDER_ID, overrides);
|
|
137
|
+
}
|
|
170
138
|
/**
|
|
171
139
|
* Total number of limit orders for this symbol, excluding those that have been cancelled/removed.
|
|
172
140
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -187,24 +155,14 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
187
155
|
*
|
|
188
156
|
* @returns {number} Number of open orders.
|
|
189
157
|
*/
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
orderBookSC = this.getOrderBookContract(symbol);
|
|
200
|
-
return [4 /*yield*/, orderBookSC.numberOfOrderBookDigests(overrides || {})];
|
|
201
|
-
case 1:
|
|
202
|
-
numOrders = _a.sent();
|
|
203
|
-
return [2 /*return*/, Number(numOrders)];
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
};
|
|
158
|
+
async numberOfOpenOrders(symbol, overrides) {
|
|
159
|
+
if (this.proxyContract == null) {
|
|
160
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
161
|
+
}
|
|
162
|
+
const orderBookSC = this.getOrderBookContract(symbol);
|
|
163
|
+
let numOrders = await orderBookSC.numberOfOrderBookDigests(overrides || {});
|
|
164
|
+
return Number(numOrders);
|
|
165
|
+
}
|
|
208
166
|
/**
|
|
209
167
|
* Get order from the digest (=id)
|
|
210
168
|
* @param symbol symbol of order book, e.g. ETH-USD-MATIC
|
|
@@ -227,26 +185,15 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
227
185
|
*
|
|
228
186
|
* @returns order or undefined
|
|
229
187
|
*/
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
case 2:
|
|
240
|
-
smartContractOrder = _a.sent();
|
|
241
|
-
if (smartContractOrder.traderAddr == nodeSDKTypes_1.ZERO_ADDRESS) {
|
|
242
|
-
return [2 /*return*/, undefined];
|
|
243
|
-
}
|
|
244
|
-
order = OrderReferrerTool.fromSmartContractOrder(smartContractOrder, this.symbolToPerpStaticInfo);
|
|
245
|
-
return [2 /*return*/, order];
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
};
|
|
188
|
+
async getOrderById(symbol, id, overrides) {
|
|
189
|
+
let ob = await this.getOrderBookContract(symbol);
|
|
190
|
+
let smartContractOrder = await ob.orderOfDigest(id, overrides || {});
|
|
191
|
+
if (smartContractOrder.traderAddr == nodeSDKTypes_1.ZERO_ADDRESS) {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
let order = OrderReferrerTool.fromSmartContractOrder(smartContractOrder, this.symbolToPerpStaticInfo);
|
|
195
|
+
return order;
|
|
196
|
+
}
|
|
250
197
|
/**
|
|
251
198
|
* Get a list of active conditional orders in the order book.
|
|
252
199
|
* This a read-only action and does not incur in gas costs.
|
|
@@ -270,35 +217,25 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
270
217
|
*
|
|
271
218
|
* @returns Array of orders and corresponding order IDs
|
|
272
219
|
*/
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
while (k < orders.length && orders[k].traderAddr != nodeSDKTypes_1.ZERO_ADDRESS) {
|
|
293
|
-
userFriendlyOrders.push(writeAccessHandler_1.default.fromClientOrder(orders[k], this.symbolToPerpStaticInfo));
|
|
294
|
-
orderIdsOut.push(orderIds[k]);
|
|
295
|
-
k++;
|
|
296
|
-
}
|
|
297
|
-
return [2 /*return*/, [userFriendlyOrders, orderIdsOut]];
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
});
|
|
301
|
-
};
|
|
220
|
+
async pollLimitOrders(symbol, numElements, startAfter, overrides) {
|
|
221
|
+
if (this.proxyContract == null) {
|
|
222
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
223
|
+
}
|
|
224
|
+
const orderBookSC = this.getOrderBookContract(symbol);
|
|
225
|
+
if (typeof startAfter == "undefined") {
|
|
226
|
+
startAfter = nodeSDKTypes_1.ZERO_ORDER_ID;
|
|
227
|
+
}
|
|
228
|
+
let [orders, orderIds] = await orderBookSC.pollLimitOrders(startAfter, bignumber_1.BigNumber.from(numElements), overrides || {});
|
|
229
|
+
let userFriendlyOrders = new Array();
|
|
230
|
+
let orderIdsOut = [];
|
|
231
|
+
let k = 0;
|
|
232
|
+
while (k < numElements && k < orders.length && orders[k].traderAddr != nodeSDKTypes_1.ZERO_ADDRESS) {
|
|
233
|
+
userFriendlyOrders.push(writeAccessHandler_1.default.fromClientOrder(orders[k], this.symbolToPerpStaticInfo));
|
|
234
|
+
orderIdsOut.push(orderIds[k]);
|
|
235
|
+
k++;
|
|
236
|
+
}
|
|
237
|
+
return [userFriendlyOrders, orderIdsOut];
|
|
238
|
+
}
|
|
302
239
|
/**
|
|
303
240
|
* Check if a conditional order can be executed
|
|
304
241
|
* @param order order structure
|
|
@@ -321,41 +258,22 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
321
258
|
* main();
|
|
322
259
|
* @returns true if order can be executed for the current state of the perpetuals
|
|
323
260
|
*/
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
case 3:
|
|
341
|
-
orderPrice = _a.sent();
|
|
342
|
-
return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualMarkPrice(order.symbol, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides)];
|
|
343
|
-
case 4:
|
|
344
|
-
markPrice = _a.sent();
|
|
345
|
-
if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
|
|
346
|
-
return [4 /*yield*/, this.provider.getBlockNumber()];
|
|
347
|
-
case 5:
|
|
348
|
-
currentBlock = _a.sent();
|
|
349
|
-
return [4 /*yield*/, this.provider.getBlock(currentBlock)];
|
|
350
|
-
case 6:
|
|
351
|
-
blockTimestamp = (_a.sent()).timestamp;
|
|
352
|
-
_a.label = 7;
|
|
353
|
-
case 7: return [4 /*yield*/, this._isTradeable(order, orderPrice, markPrice, blockTimestamp, this.symbolToPerpStaticInfo, overrides)];
|
|
354
|
-
case 8: return [2 /*return*/, _a.sent()];
|
|
355
|
-
}
|
|
356
|
-
});
|
|
357
|
-
});
|
|
358
|
-
};
|
|
261
|
+
async isTradeable(order, blockTimestamp, indexPrices, overrides) {
|
|
262
|
+
if (this.proxyContract == null) {
|
|
263
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
264
|
+
}
|
|
265
|
+
if (indexPrices == undefined) {
|
|
266
|
+
let obj = await this.priceFeedGetter.fetchPricesForPerpetual(order.symbol);
|
|
267
|
+
indexPrices = [obj.idxPrices[0], obj.idxPrices[1]];
|
|
268
|
+
}
|
|
269
|
+
let orderPrice = await perpetualDataHandler_1.default._queryPerpetualPrice(order.symbol, order.quantity, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides);
|
|
270
|
+
let markPrice = await perpetualDataHandler_1.default._queryPerpetualMarkPrice(order.symbol, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices, overrides);
|
|
271
|
+
if (blockTimestamp == undefined) {
|
|
272
|
+
const currentBlock = await this.provider.getBlockNumber();
|
|
273
|
+
blockTimestamp = (await this.provider.getBlock(currentBlock)).timestamp;
|
|
274
|
+
}
|
|
275
|
+
return await this._isTradeable(order, orderPrice, markPrice, blockTimestamp, this.symbolToPerpStaticInfo, overrides);
|
|
276
|
+
}
|
|
359
277
|
/**
|
|
360
278
|
* Check for a batch of orders on the same perpetual whether they can be traded
|
|
361
279
|
* @param orders orders belonging to 1 perpetual
|
|
@@ -363,57 +281,32 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
363
281
|
* if not defined.
|
|
364
282
|
* @returns array of tradeable boolean
|
|
365
283
|
*/
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
}
|
|
393
|
-
return [4 /*yield*/, Promise.all(orders.map(function (o) {
|
|
394
|
-
return perpetualDataHandler_1.default._queryPerpetualPrice(o.symbol, o.quantity, _this.symbolToPerpStaticInfo, _this.proxyContract, [indexPrices[0], indexPrices[1]], overrides);
|
|
395
|
-
}))];
|
|
396
|
-
case 3:
|
|
397
|
-
orderPrice = _a.sent();
|
|
398
|
-
return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualMarkPrice(orders[0].symbol, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]], overrides)];
|
|
399
|
-
case 4:
|
|
400
|
-
markPrice = _a.sent();
|
|
401
|
-
if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
|
|
402
|
-
return [4 /*yield*/, this.provider.getBlockNumber()];
|
|
403
|
-
case 5:
|
|
404
|
-
currentBlock = _a.sent();
|
|
405
|
-
return [4 /*yield*/, this.provider.getBlock(currentBlock)];
|
|
406
|
-
case 6:
|
|
407
|
-
blockTimestamp = (_a.sent()).timestamp;
|
|
408
|
-
_a.label = 7;
|
|
409
|
-
case 7: return [4 /*yield*/, Promise.all(orders.map(function (o, idx) {
|
|
410
|
-
return _this._isTradeable(o, orderPrice[idx], markPrice, blockTimestamp, _this.symbolToPerpStaticInfo, overrides);
|
|
411
|
-
}))];
|
|
412
|
-
case 8: return [2 /*return*/, _a.sent()];
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
|
-
};
|
|
284
|
+
async isTradeableBatch(orders, blockTimestamp, indexPrices, overrides) {
|
|
285
|
+
if (orders.length == 0) {
|
|
286
|
+
return [];
|
|
287
|
+
}
|
|
288
|
+
if (this.proxyContract == null) {
|
|
289
|
+
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
290
|
+
}
|
|
291
|
+
if (orders.filter((o) => o.symbol == orders[0].symbol).length < orders.length) {
|
|
292
|
+
throw Error("all orders in a batch must have the same symbol");
|
|
293
|
+
}
|
|
294
|
+
if (indexPrices == undefined) {
|
|
295
|
+
let obj = await this.priceFeedGetter.fetchPricesForPerpetual(orders[0].symbol);
|
|
296
|
+
indexPrices = [obj.idxPrices[0], obj.idxPrices[1], obj.mktClosed[0], obj.mktClosed[1]];
|
|
297
|
+
}
|
|
298
|
+
if (indexPrices[2] || indexPrices[3]) {
|
|
299
|
+
// market closed
|
|
300
|
+
return orders.map(() => false);
|
|
301
|
+
}
|
|
302
|
+
let orderPrice = await Promise.all(orders.map((o) => perpetualDataHandler_1.default._queryPerpetualPrice(o.symbol, o.quantity, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]], overrides)));
|
|
303
|
+
let markPrice = await perpetualDataHandler_1.default._queryPerpetualMarkPrice(orders[0].symbol, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]], overrides);
|
|
304
|
+
if (blockTimestamp == undefined) {
|
|
305
|
+
const currentBlock = await this.provider.getBlockNumber();
|
|
306
|
+
blockTimestamp = (await this.provider.getBlock(currentBlock)).timestamp;
|
|
307
|
+
}
|
|
308
|
+
return await Promise.all(orders.map((o, idx) => this._isTradeable(o, orderPrice[idx], markPrice, blockTimestamp, this.symbolToPerpStaticInfo, overrides)));
|
|
309
|
+
}
|
|
417
310
|
/**
|
|
418
311
|
* Can the order be executed?
|
|
419
312
|
* @param order order struct
|
|
@@ -423,95 +316,79 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
423
316
|
* @param symbolToPerpInfoMap metadata
|
|
424
317
|
* @returns true if trading conditions met, false otherwise
|
|
425
318
|
*/
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
case 2:
|
|
485
|
-
// all checks passed -> order is tradeable
|
|
486
|
-
return [2 /*return*/, true];
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
});
|
|
490
|
-
};
|
|
319
|
+
async _isTradeable(order, tradePrice, markPrice, blockTimestamp, symbolToPerpInfoMap, overrides) {
|
|
320
|
+
// check expiration date
|
|
321
|
+
if (order.deadline != undefined && order.deadline < Date.now() / 1000) {
|
|
322
|
+
console.log("order expired");
|
|
323
|
+
return false;
|
|
324
|
+
}
|
|
325
|
+
const nextBlockTimestamp = blockTimestamp + 2;
|
|
326
|
+
// TODO: replace 2 by a chain-dependent constant - 1 for zkEVM
|
|
327
|
+
if (nextBlockTimestamp < order.executionTimestamp) {
|
|
328
|
+
console.log(`execution deferred to ${order.executionTimestamp - nextBlockTimestamp} more seconds`);
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
if (order.submittedTimestamp != undefined &&
|
|
332
|
+
nextBlockTimestamp < order.submittedTimestamp + OrderReferrerTool.TRADE_DELAY) {
|
|
333
|
+
// next block should be in ~2 seconds, so + 2
|
|
334
|
+
console.log(`on hold for ${OrderReferrerTool.TRADE_DELAY + order.submittedTimestamp - nextBlockTimestamp} more seconds`);
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
// check order size
|
|
338
|
+
const lotSize = perpetualDataHandler_1.default._getLotSize(order.symbol, symbolToPerpInfoMap);
|
|
339
|
+
if (order.quantity < lotSize) {
|
|
340
|
+
// console.log(`order size too small: ${order.quantity} < ${lotSize}`);
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
// check limit price: fromSmartContractOrder will set it to undefined when not tradeable
|
|
344
|
+
if (order.limitPrice == undefined) {
|
|
345
|
+
// console.log("limit price undefined");
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
let limitPrice = order.limitPrice;
|
|
349
|
+
if ((order.side == nodeSDKTypes_1.BUY_SIDE && tradePrice > limitPrice) || (order.side == nodeSDKTypes_1.SELL_SIDE && tradePrice < limitPrice)) {
|
|
350
|
+
// console.log(`limit price not met: ${limitPrice} ${order.side} @ ${tradePrice}`);
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
353
|
+
// check stop price
|
|
354
|
+
if (order.stopPrice != undefined &&
|
|
355
|
+
((order.side == nodeSDKTypes_1.BUY_SIDE && markPrice < order.stopPrice) ||
|
|
356
|
+
(order.side == nodeSDKTypes_1.SELL_SIDE && markPrice > order.stopPrice))) {
|
|
357
|
+
// console.log("stop price not met");
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
360
|
+
//check dependency
|
|
361
|
+
if (order.parentChildOrderIds != undefined &&
|
|
362
|
+
order.parentChildOrderIds[0] == constants_1.HashZero &&
|
|
363
|
+
order.parentChildOrderIds[1] != constants_1.HashZero) {
|
|
364
|
+
// order has a parent
|
|
365
|
+
const orderBookContract = this.getOrderBookContract(order.symbol);
|
|
366
|
+
const parentStatus = await orderBookContract.getOrderStatus(order.parentChildOrderIds[1], overrides || {});
|
|
367
|
+
if (parentStatus == 2 || parentStatus == 3) {
|
|
368
|
+
// console.log("parent not executed/cancelled");
|
|
369
|
+
// parent is open or unknown
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
// all checks passed -> order is tradeable
|
|
375
|
+
return true;
|
|
376
|
+
}
|
|
491
377
|
/**
|
|
492
378
|
* Wrapper of static method to use after mappings have been loaded into memory.
|
|
493
379
|
* @param scOrder Perpetual order as received in the proxy events.
|
|
494
380
|
* @returns A user-friendly order struct.
|
|
495
381
|
*/
|
|
496
|
-
|
|
382
|
+
smartContractOrderToOrder(scOrder) {
|
|
497
383
|
return perpetualDataHandler_1.default.fromSmartContractOrder(scOrder, this.symbolToPerpStaticInfo);
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
}
|
|
507
|
-
return [4 /*yield*/, this.signer.getTransactionCount(blockTag)];
|
|
508
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
509
|
-
}
|
|
510
|
-
});
|
|
511
|
-
});
|
|
512
|
-
};
|
|
513
|
-
OrderReferrerTool.TRADE_DELAY = 4;
|
|
514
|
-
return OrderReferrerTool;
|
|
515
|
-
}(writeAccessHandler_1.default));
|
|
384
|
+
}
|
|
385
|
+
async getTransactionCount(blockTag) {
|
|
386
|
+
if (this.signer == null) {
|
|
387
|
+
throw Error("no wallet initialized. Use createProxyInstance().");
|
|
388
|
+
}
|
|
389
|
+
return await this.signer.getTransactionCount(blockTag);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
516
392
|
exports.default = OrderReferrerTool;
|
|
393
|
+
OrderReferrerTool.TRADE_DELAY = 4;
|
|
517
394
|
//# sourceMappingURL=orderReferrerTool.js.map
|