@d8x/perpetuals-sdk 0.7.4 → 0.7.6
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 +134 -239
- 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/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/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/ShareToken__factory.js +9 -12
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +9 -12
- package/dist/cjs/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +9 -12
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +9 -12
- package/dist/cjs/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js +9 -12
- package/dist/cjs/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
- package/dist/cjs/contracts/index.js +1 -1
- package/dist/cjs/d8XMath.d.ts +7 -0
- package/dist/cjs/d8XMath.js +81 -61
- 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 +80 -137
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.js +33 -64
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +8 -1
- package/dist/cjs/marketData.js +641 -949
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +1 -0
- package/dist/cjs/nodeSDKTypes.js +10 -22
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/orderReferrerTool.js +200 -321
- package/dist/cjs/orderReferrerTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +11 -0
- package/dist/cjs/perpetualDataHandler.js +422 -535
- 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/accountTrade.js +126 -233
- 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/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/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/ShareToken__factory.js +8 -12
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js +8 -12
- package/dist/esm/contracts/factories/zkevmTestnet/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js +8 -12
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js +8 -12
- package/dist/esm/contracts/factories/zkevmTestnet/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js +8 -12
- package/dist/esm/contracts/factories/zkevmTestnet/ShareToken__factory.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +7 -0
- package/dist/esm/d8XMath.js +77 -58
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.js +77 -136
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.js +30 -63
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +8 -1
- package/dist/esm/marketData.js +632 -942
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +1 -0
- package/dist/esm/nodeSDKTypes.js +36 -48
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/orderReferrerTool.js +194 -317
- package/dist/esm/orderReferrerTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +11 -0
- package/dist/esm/perpetualDataHandler.js +413 -528
- 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 +70 -106
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +1 -1
- package/src/d8XMath.ts +21 -0
- package/src/liquidityProviderTool.ts +5 -4
- package/src/marketData.ts +26 -0
- package/src/nodeSDKTypes.ts +1 -0
- package/src/perpetualDataHandler.ts +27 -0
- package/src/version.ts +1 -1
- package/src/writeAccessHandler.ts +3 -3
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter, __generator, __read, __values } from "tslib";
|
|
2
1
|
import { emitWarning } from "process";
|
|
3
2
|
import { ABK64x64ToFloat, mul64x64 } from "./d8XMath";
|
|
4
3
|
import { ONE_64x64, } from "./nodeSDKTypes";
|
|
@@ -28,8 +27,8 @@ import { ONE_64x64, } from "./nodeSDKTypes";
|
|
|
28
27
|
* - [x] async onUpdateMarginAccount : emitted on proxy; updates position data and open interest
|
|
29
28
|
* - [x] onTrade : emitted on proxy; returns TradeEvent to be displayed
|
|
30
29
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
export default class PerpetualEventHandler {
|
|
31
|
+
constructor(mktData, traderAddr) {
|
|
33
32
|
this.mktData = mktData;
|
|
34
33
|
this.traderAddr = traderAddr;
|
|
35
34
|
this.ordersInPerpetual = new Map();
|
|
@@ -40,111 +39,85 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
40
39
|
* Call this async function to initialize the
|
|
41
40
|
* market data
|
|
42
41
|
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (!(j < poolState.perpetuals.length)) return [3 /*break*/, 7];
|
|
63
|
-
perpState = poolState.perpetuals[j];
|
|
64
|
-
perpSymbol = perpState.baseCurrency + "-" + perpState.quoteCurrency + "-" + poolSymbol;
|
|
65
|
-
return [4 /*yield*/, this.mktData.openOrders(this.traderAddr, perpSymbol)];
|
|
66
|
-
case 4:
|
|
67
|
-
orders = _b.sent();
|
|
68
|
-
perpId = perpState.id;
|
|
69
|
-
this.ordersInPerpetual.set(perpId, orders[0]);
|
|
70
|
-
return [4 /*yield*/, this.mktData.positionRisk(this.traderAddr, perpSymbol)];
|
|
71
|
-
case 5:
|
|
72
|
-
position = (_b.sent())[0];
|
|
73
|
-
this.positionInPerpetual.set(perpId, position);
|
|
74
|
-
this.poolIndexForPerpetual.set(perpId, k);
|
|
75
|
-
_b.label = 6;
|
|
76
|
-
case 6:
|
|
77
|
-
j++;
|
|
78
|
-
return [3 /*break*/, 3];
|
|
79
|
-
case 7:
|
|
80
|
-
k++;
|
|
81
|
-
return [3 /*break*/, 2];
|
|
82
|
-
case 8: return [2 /*return*/];
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
};
|
|
42
|
+
async initialize() {
|
|
43
|
+
this.exchangeInfo = await this.mktData.exchangeInfo();
|
|
44
|
+
// loop through all pools and perpetuals and get
|
|
45
|
+
// open positions and open orders
|
|
46
|
+
for (let k = 0; k < this.exchangeInfo.pools.length; k++) {
|
|
47
|
+
let poolState = this.exchangeInfo.pools[k];
|
|
48
|
+
let poolSymbol = poolState.poolSymbol;
|
|
49
|
+
for (let j = 0; j < poolState.perpetuals.length; j++) {
|
|
50
|
+
let perpState = poolState.perpetuals[j];
|
|
51
|
+
let perpSymbol = perpState.baseCurrency + "-" + perpState.quoteCurrency + "-" + poolSymbol;
|
|
52
|
+
let orders = await this.mktData.openOrders(this.traderAddr, perpSymbol);
|
|
53
|
+
let perpId = perpState.id;
|
|
54
|
+
this.ordersInPerpetual.set(perpId, orders[0]);
|
|
55
|
+
let position = (await this.mktData.positionRisk(this.traderAddr, perpSymbol))[0];
|
|
56
|
+
this.positionInPerpetual.set(perpId, position);
|
|
57
|
+
this.poolIndexForPerpetual.set(perpId, k);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
87
61
|
/**
|
|
88
62
|
* Get the current exchange info
|
|
89
63
|
* @returns exchange info
|
|
90
64
|
*/
|
|
91
|
-
|
|
65
|
+
getExchangeInfo() {
|
|
92
66
|
return this.exchangeInfo;
|
|
93
|
-
}
|
|
67
|
+
}
|
|
94
68
|
/**
|
|
95
69
|
* getOrdersInPerpetualMap
|
|
96
70
|
* @returns this.ordersInPerpetual
|
|
97
71
|
*/
|
|
98
|
-
|
|
72
|
+
getOrdersInPerpetualMap() {
|
|
99
73
|
return this.ordersInPerpetual;
|
|
100
|
-
}
|
|
74
|
+
}
|
|
101
75
|
/**
|
|
102
76
|
* getpositionInPerpetualMap
|
|
103
77
|
* @returns this.positionInPerpetual
|
|
104
78
|
*/
|
|
105
|
-
|
|
79
|
+
getpositionInPerpetualMap() {
|
|
106
80
|
return this.positionInPerpetual;
|
|
107
|
-
}
|
|
81
|
+
}
|
|
108
82
|
/**
|
|
109
83
|
* Get the data for a perpetual with a given index
|
|
110
84
|
* @param perpetualIdOrSymbol perpetual idx as string or symbol for which we want the data
|
|
111
85
|
* @returns perpetual data for this idx
|
|
112
86
|
*/
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
var perpId = Number(perpetualIdOrSymbol);
|
|
87
|
+
getPerpetualData(perpetualIdOrSymbol) {
|
|
88
|
+
let perpId = Number(perpetualIdOrSymbol);
|
|
116
89
|
if (isNaN(perpId)) {
|
|
117
90
|
perpId = this.mktData.getPerpIdFromSymbol(perpetualIdOrSymbol);
|
|
118
91
|
}
|
|
119
92
|
//uint24 perpetualId = uint24(_iPoolId) * 100_000 + iPerpetualIndex;
|
|
120
|
-
|
|
121
|
-
|
|
93
|
+
let poolIdx = this.poolIndexForPerpetual.get(perpId); //Math.floor(perpId / 100_000);
|
|
94
|
+
let perpetuals = this.exchangeInfo?.pools[poolIdx].perpetuals;
|
|
122
95
|
if (perpetuals == undefined) {
|
|
123
|
-
emitWarning(
|
|
96
|
+
emitWarning(`exchangeInfo not found, initialize perpetualEventHandler`);
|
|
124
97
|
return undefined;
|
|
125
98
|
}
|
|
126
99
|
// find perpetual
|
|
127
|
-
|
|
128
|
-
for (k = 0; k <
|
|
100
|
+
let k;
|
|
101
|
+
for (k = 0; k < perpetuals?.length && perpetuals[k].id != perpId; k++)
|
|
129
102
|
;
|
|
130
103
|
if (perpetuals[k].id != perpId) {
|
|
131
|
-
emitWarning(
|
|
104
|
+
emitWarning(`getPerpetualData: perpetual id ${perpId} not found`);
|
|
132
105
|
return undefined;
|
|
133
106
|
}
|
|
134
107
|
return perpetuals[k];
|
|
135
|
-
}
|
|
108
|
+
}
|
|
136
109
|
/**
|
|
137
110
|
* Get the trader's current position risk (margin account data)
|
|
138
111
|
* @param perpetualIdOrSymbol perpetual id as string ('100003') or symbol ('BTC-USD-MATIC')
|
|
139
112
|
* @returns undefined if no position or margin account (='position risk')
|
|
140
113
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
114
|
+
getCurrentPositionRisk(perpetualIdOrSymbol) {
|
|
115
|
+
let perpId = Number(perpetualIdOrSymbol);
|
|
143
116
|
if (isNaN(perpId)) {
|
|
144
117
|
perpId = this.mktData.getPerpIdFromSymbol(perpetualIdOrSymbol);
|
|
145
118
|
}
|
|
146
119
|
return this.positionInPerpetual.get(perpId);
|
|
147
|
-
}
|
|
120
|
+
}
|
|
148
121
|
/**
|
|
149
122
|
* Update the following prices:
|
|
150
123
|
* - index price
|
|
@@ -152,42 +125,31 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
152
125
|
* - mid-price
|
|
153
126
|
* @param perpetualIdOrSymbol perpetual id as string ('100003') or symbol ('BTC-USD-MATIC')
|
|
154
127
|
*/
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
perp.markPrice = perpState.markPrice;
|
|
181
|
-
perp.midPrice = perpState.midPrice;
|
|
182
|
-
perp.currentFundingRateBps = perpState.currentFundingRateBps;
|
|
183
|
-
perp.openInterestBC = perpState.openInterestBC;
|
|
184
|
-
perp.indexPrice = perpState.indexPrice;
|
|
185
|
-
perp.collToQuoteIndexPrice = perpState.collToQuoteIndexPrice;
|
|
186
|
-
return [2 /*return*/];
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
};
|
|
128
|
+
async updatePrices(perpetualIdOrSymbol) {
|
|
129
|
+
let perpId = Number(perpetualIdOrSymbol);
|
|
130
|
+
let symbol = perpetualIdOrSymbol;
|
|
131
|
+
if (!isNaN(perpId)) {
|
|
132
|
+
let sym = this.mktData.getSymbolFromPerpId(perpId);
|
|
133
|
+
if (sym == undefined) {
|
|
134
|
+
throw new Error(`Symbol not found for perpetual ${perpId}`);
|
|
135
|
+
}
|
|
136
|
+
symbol = sym;
|
|
137
|
+
}
|
|
138
|
+
let perpState = await this.mktData.getPerpetualState(symbol);
|
|
139
|
+
let perp = this.getPerpetualData(symbol);
|
|
140
|
+
if (perp == undefined) {
|
|
141
|
+
throw new Error(`Perpetual not found: ${symbol}`);
|
|
142
|
+
}
|
|
143
|
+
perp.state = perpState.state;
|
|
144
|
+
perp.indexPrice = perpState.indexPrice;
|
|
145
|
+
perp.collToQuoteIndexPrice = perpState.collToQuoteIndexPrice;
|
|
146
|
+
perp.markPrice = perpState.markPrice;
|
|
147
|
+
perp.midPrice = perpState.midPrice;
|
|
148
|
+
perp.currentFundingRateBps = perpState.currentFundingRateBps;
|
|
149
|
+
perp.openInterestBC = perpState.openInterestBC;
|
|
150
|
+
perp.indexPrice = perpState.indexPrice;
|
|
151
|
+
perp.collToQuoteIndexPrice = perpState.collToQuoteIndexPrice;
|
|
152
|
+
}
|
|
191
153
|
/**
|
|
192
154
|
* Handle the event UpdateMarkPrice and update relevant
|
|
193
155
|
* data
|
|
@@ -196,30 +158,30 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
196
158
|
* @param fSpotIndexPrice spot index price in ABDK format
|
|
197
159
|
* @returns void
|
|
198
160
|
*/
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
161
|
+
onUpdateMarkPrice(perpetualId, fMidPricePremium, fMarkPricePremium, fSpotIndexPrice) {
|
|
162
|
+
let [newMidPrice, newMarkPrice, newIndexPrice] = PerpetualEventHandler.ConvertUpdateMarkPrice(fMidPricePremium, fMarkPricePremium, fSpotIndexPrice);
|
|
163
|
+
let perpetual = this.getPerpetualData(perpetualId.toString());
|
|
202
164
|
if (perpetual == undefined) {
|
|
203
165
|
return;
|
|
204
166
|
}
|
|
205
167
|
perpetual.midPrice = newMidPrice;
|
|
206
168
|
perpetual.markPrice = newMarkPrice;
|
|
207
169
|
perpetual.indexPrice = newIndexPrice;
|
|
208
|
-
}
|
|
170
|
+
}
|
|
209
171
|
/**
|
|
210
172
|
* Handle the event UpdateFundingRate and update relevant
|
|
211
173
|
* data
|
|
212
174
|
* UpdateFundingRate(uint24 indexed perpetualId, int128 fFundingRate)
|
|
213
175
|
* @param fFundingRate funding rate in ABDK format
|
|
214
176
|
*/
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
177
|
+
onUpdateUpdateFundingRate(perpetualId, fFundingRate) {
|
|
178
|
+
let newRate = ABK64x64ToFloat(fFundingRate);
|
|
179
|
+
let perpetual = this.getPerpetualData(perpetualId.toString());
|
|
218
180
|
if (perpetual == undefined) {
|
|
219
181
|
return;
|
|
220
182
|
}
|
|
221
183
|
perpetual.currentFundingRateBps = newRate * 1e4;
|
|
222
|
-
}
|
|
184
|
+
}
|
|
223
185
|
/**
|
|
224
186
|
* event ExecutionFailed(
|
|
225
187
|
uint24 indexed perpetualId,
|
|
@@ -232,15 +194,15 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
232
194
|
* @param digest digest of the order/cancel order
|
|
233
195
|
* @param reason reason why the execution failed
|
|
234
196
|
*/
|
|
235
|
-
|
|
197
|
+
onExecutionFailed(perpetualId, trader, digest, reason) {
|
|
236
198
|
if (trader != this.traderAddr) {
|
|
237
|
-
emitWarning(
|
|
199
|
+
emitWarning(`onExecutionFailed: trader ${trader} not relevant`);
|
|
238
200
|
return;
|
|
239
201
|
}
|
|
240
202
|
// remove order from open orders
|
|
241
|
-
|
|
203
|
+
let orderStructs = this.ordersInPerpetual.get(perpetualId);
|
|
242
204
|
if (orderStructs == undefined) {
|
|
243
|
-
emitWarning(
|
|
205
|
+
emitWarning(`onExecutionFailed: no order found for perpetual ${perpetualId}`);
|
|
244
206
|
return;
|
|
245
207
|
}
|
|
246
208
|
if (reason == "cancel delay required") {
|
|
@@ -248,22 +210,22 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
248
210
|
return;
|
|
249
211
|
}
|
|
250
212
|
PerpetualEventHandler.deleteOrder(orderStructs, digest);
|
|
251
|
-
}
|
|
213
|
+
}
|
|
252
214
|
/**
|
|
253
215
|
* Event emitted by perpetual proxy
|
|
254
216
|
* event PerpetualLimitOrderCancelled(bytes32 indexed orderHash);
|
|
255
217
|
* @param orderId string order id/digest
|
|
256
218
|
*/
|
|
257
|
-
|
|
219
|
+
onPerpetualLimitOrderCancelled(orderId) {
|
|
258
220
|
// remove order from open orders
|
|
259
|
-
|
|
221
|
+
let perpId = PerpetualEventHandler.findOrderForId(orderId, this.ordersInPerpetual);
|
|
260
222
|
if (perpId == undefined) {
|
|
261
|
-
emitWarning(
|
|
223
|
+
emitWarning(`onPerpetualLimitOrderCancelled: no order found with id ${orderId}`);
|
|
262
224
|
return;
|
|
263
225
|
}
|
|
264
|
-
|
|
226
|
+
let orderStruct = this.ordersInPerpetual.get(perpId);
|
|
265
227
|
PerpetualEventHandler.deleteOrder(orderStruct, orderId);
|
|
266
|
-
}
|
|
228
|
+
}
|
|
267
229
|
/**
|
|
268
230
|
* event PerpetualLimitOrderCreated(
|
|
269
231
|
* uint24 indexed perpetualId,
|
|
@@ -280,13 +242,13 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
280
242
|
* @param Order order struct
|
|
281
243
|
* @param digest order id
|
|
282
244
|
*/
|
|
283
|
-
|
|
245
|
+
onPerpetualLimitOrderCreated(perpetualId, trader, _referrerAddr, _brokerAddr, Order, digest) {
|
|
284
246
|
if (trader != this.traderAddr) {
|
|
285
|
-
emitWarning(
|
|
247
|
+
emitWarning(`onPerpetualLimitOrderCreated: trader ${trader} not relevant`);
|
|
286
248
|
return;
|
|
287
249
|
}
|
|
288
|
-
|
|
289
|
-
|
|
250
|
+
let order = this.mktData.smartContractOrderToOrder(Order);
|
|
251
|
+
let orderStruct = this.ordersInPerpetual.get(perpetualId);
|
|
290
252
|
if (orderStruct == undefined) {
|
|
291
253
|
// no order for this perpetual so far
|
|
292
254
|
this.ordersInPerpetual.set(perpetualId, { orders: [order], orderIds: [digest] });
|
|
@@ -295,7 +257,7 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
295
257
|
orderStruct.orderIds.push(digest);
|
|
296
258
|
orderStruct.orders.push(order);
|
|
297
259
|
}
|
|
298
|
-
}
|
|
260
|
+
}
|
|
299
261
|
/**
|
|
300
262
|
* This function is async -> queries the margin account
|
|
301
263
|
* @param perpetualId id of the perpetual
|
|
@@ -307,31 +269,20 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
307
269
|
* @param fFundingPaymentCC funding payment made
|
|
308
270
|
* @param fOpenInterestBC open interest
|
|
309
271
|
*/
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
325
|
-
perpetualIdStr = perpetualId.toString();
|
|
326
|
-
return [4 /*yield*/, this.mktData.positionRisk(this.traderAddr, perpetualIdStr)];
|
|
327
|
-
case 1:
|
|
328
|
-
margin = (_a.sent())[0];
|
|
329
|
-
this.positionInPerpetual.set(perpetualId, margin);
|
|
330
|
-
return [2 /*return*/];
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
});
|
|
334
|
-
};
|
|
272
|
+
async onUpdateMarginAccount(perpetualId, trader, _positionId, _fPositionBC, _fCashCC, _fLockedInValueQC, _fFundingPaymentCC, fOpenInterestBC) {
|
|
273
|
+
let perpetual = this.getPerpetualData(perpetualId.toString());
|
|
274
|
+
if (perpetual == undefined) {
|
|
275
|
+
emitWarning(`onUpdateMarginAccount: perpetual ${perpetualId} not found`);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
perpetual.openInterestBC = ABK64x64ToFloat(fOpenInterestBC);
|
|
279
|
+
if (trader != this.traderAddr) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
let perpetualIdStr = perpetualId.toString();
|
|
283
|
+
let margin = (await this.mktData.positionRisk(this.traderAddr, perpetualIdStr))[0];
|
|
284
|
+
this.positionInPerpetual.set(perpetualId, margin);
|
|
285
|
+
}
|
|
335
286
|
/**
|
|
336
287
|
*
|
|
337
288
|
* @param perpetualId perpetual id
|
|
@@ -343,11 +294,11 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
343
294
|
* @param price price in ABDK format
|
|
344
295
|
* @returns trade event data in regular number format
|
|
345
296
|
*/
|
|
346
|
-
|
|
297
|
+
onTrade(perpetualId, _trader, positionId, _order, orderDigest, newPositionSizeBC, _price) {
|
|
347
298
|
// remove order digest from open orders
|
|
348
|
-
|
|
299
|
+
let orderStructs = this.ordersInPerpetual.get(perpetualId);
|
|
349
300
|
if (orderStructs == undefined) {
|
|
350
|
-
emitWarning(
|
|
301
|
+
emitWarning(`onTrade: executed order not found ${orderDigest}`);
|
|
351
302
|
}
|
|
352
303
|
else {
|
|
353
304
|
PerpetualEventHandler.deleteOrder(orderStructs, orderDigest);
|
|
@@ -360,49 +311,38 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
360
311
|
newPositionSizeBC: ABK64x64ToFloat(newPositionSizeBC),
|
|
361
312
|
executionPrice: ABK64x64ToFloat(newPositionSizeBC),
|
|
362
313
|
};
|
|
363
|
-
}
|
|
314
|
+
}
|
|
364
315
|
/**
|
|
365
316
|
* static function to find the number of the OrderStruct with given orderId
|
|
366
317
|
* @param orderId id/digest of order
|
|
367
318
|
* @param orderMap mapping for perpetualId->OrderStruct
|
|
368
319
|
* @returns id of perpetual that contains order with id = orderId or undefined
|
|
369
320
|
*/
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
var orderStructs = orderMap.get(perpId);
|
|
379
|
-
if (orderStructs === null || orderStructs === void 0 ? void 0 : orderStructs.orderIds.includes(orderId)) {
|
|
380
|
-
return perpId;
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
385
|
-
finally {
|
|
386
|
-
try {
|
|
387
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
321
|
+
static findOrderForId(orderId, orderMap) {
|
|
322
|
+
/*orderMapMap<number, {
|
|
323
|
+
orders: Order[];
|
|
324
|
+
orderIds: string[];*/
|
|
325
|
+
for (const perpId of orderMap.keys()) {
|
|
326
|
+
let orderStructs = orderMap.get(perpId);
|
|
327
|
+
if (orderStructs?.orderIds.includes(orderId)) {
|
|
328
|
+
return perpId;
|
|
388
329
|
}
|
|
389
|
-
finally { if (e_1) throw e_1.error; }
|
|
390
330
|
}
|
|
391
331
|
return undefined;
|
|
392
|
-
}
|
|
332
|
+
}
|
|
393
333
|
/**
|
|
394
334
|
* Delete the order with given id from the class member data
|
|
395
335
|
* @param orderStructs array of order struct as stored for the trader and a given perpetual
|
|
396
336
|
* @param orderId digest/order id
|
|
397
337
|
* @returns void
|
|
398
338
|
*/
|
|
399
|
-
|
|
339
|
+
static deleteOrder(orderStructs, orderId) {
|
|
400
340
|
// find order
|
|
401
|
-
|
|
341
|
+
let k;
|
|
402
342
|
for (k = 0; k < orderStructs.orderIds.length && orderStructs.orderIds[k] != orderId; k++)
|
|
403
343
|
;
|
|
404
344
|
if (orderStructs.orderIds[k] != orderId) {
|
|
405
|
-
emitWarning(
|
|
345
|
+
emitWarning(`deleteOrder: no order found with digest ${orderId}`);
|
|
406
346
|
return;
|
|
407
347
|
}
|
|
408
348
|
// delete element k on reference of orders
|
|
@@ -410,7 +350,7 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
410
350
|
orderStructs.orders.pop();
|
|
411
351
|
orderStructs.orderIds[k] = orderStructs.orderIds[orderStructs.orderIds.length - 1];
|
|
412
352
|
orderStructs.orderIds.pop();
|
|
413
|
-
}
|
|
353
|
+
}
|
|
414
354
|
/**
|
|
415
355
|
* UpdateMarkPrice(
|
|
416
356
|
* uint24 indexed perpetualId,
|
|
@@ -421,15 +361,13 @@ var PerpetualEventHandler = /** @class */ (function () {
|
|
|
421
361
|
* @param fSpotIndexPrice spot index price in ABDK format
|
|
422
362
|
* @returns mark price and spot index in float
|
|
423
363
|
*/
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
364
|
+
static ConvertUpdateMarkPrice(fMidPricePremium, fMarkPricePremium, fSpotIndexPrice) {
|
|
365
|
+
let fMarkPrice = mul64x64(fSpotIndexPrice, ONE_64x64.add(fMarkPricePremium));
|
|
366
|
+
let fMidPrice = mul64x64(fSpotIndexPrice, ONE_64x64.add(fMidPricePremium));
|
|
367
|
+
let midPrice = ABK64x64ToFloat(fMidPrice);
|
|
368
|
+
let markPrice = ABK64x64ToFloat(fMarkPrice);
|
|
369
|
+
let indexPrice = ABK64x64ToFloat(fSpotIndexPrice);
|
|
430
370
|
return [midPrice, markPrice, indexPrice];
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
}());
|
|
434
|
-
export default PerpetualEventHandler;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
435
373
|
//# sourceMappingURL=perpetualEventHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perpetualEventHandler.js","sourceRoot":"","sources":["../../src/perpetualEventHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"perpetualEventHandler.js","sourceRoot":"","sources":["../../src/perpetualEventHandler.ts"],"names":[],"mappings":"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"}
|