@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
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { __awaiter, __generator, __read, __values } from "tslib";
|
|
2
|
+
import { emitWarning } from "process";
|
|
3
|
+
import { ABK64x64ToFloat, mul64x64 } from "./d8XMath";
|
|
4
|
+
import { ONE_64x64, } from "./nodeSDKTypes";
|
|
5
|
+
/**
|
|
6
|
+
* This class handles events and stores relevant variables
|
|
7
|
+
* as member variables. The events change the state of the member variables:
|
|
8
|
+
* mktData : MarketData relevant market data with current state (e.g. index price)
|
|
9
|
+
* ordersInPerpetual: Map<number, OrderStruct> all open orders for the given trader
|
|
10
|
+
* positionInPerpetual: Map<number, MarginAccount> all open positions for the given trader
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
* Get data:
|
|
14
|
+
* - getPerpetualData(perp id (string) or symbol) : PerpetualState. This is a reference!
|
|
15
|
+
* - getExchangeInfo() : ExchangeInfo. This is a reference!
|
|
16
|
+
* - getCurrentPositionRisk(perp id (string) or symbol) : MarginAccount. This is a reference!
|
|
17
|
+
* - getOrdersInPerpetualMap : Map<number, OrderStruct>. This is a reference!
|
|
18
|
+
* - getpositionInPerpetualMap : Map<number, MarginAccount>. This is a reference!
|
|
19
|
+
*
|
|
20
|
+
* Construct with a trader address and a marketData object
|
|
21
|
+
* Initialize to gather all the relevant data.
|
|
22
|
+
* Send event variables to event handler "on<EventName>" - this updates members
|
|
23
|
+
* - [x] onUpdateMarkPrice : emitted on proxy; updates markprice and index price data
|
|
24
|
+
* - [x] onUpdateUpdateFundingRate : emitted on proxy; sets funding rate
|
|
25
|
+
* - [x] onExecutionFailed : emitted on order book; removes an open order
|
|
26
|
+
* - [x] onPerpetualLimitOrderCancelled : emitted on order book; removes an open order
|
|
27
|
+
* - [x] onPerpetualLimitOrderCreated : emitted on order book; adds an open order to the data
|
|
28
|
+
* - [x] async onUpdateMarginAccount : emitted on proxy; updates position data and open interest
|
|
29
|
+
* - [x] onTrade : emitted on proxy; returns TradeEvent to be displayed
|
|
30
|
+
*/
|
|
31
|
+
var PerpetualEventHandler = /** @class */ (function () {
|
|
32
|
+
function PerpetualEventHandler(mktData, traderAddr) {
|
|
33
|
+
this.mktData = mktData;
|
|
34
|
+
this.traderAddr = traderAddr;
|
|
35
|
+
this.ordersInPerpetual = new Map();
|
|
36
|
+
this.positionInPerpetual = new Map();
|
|
37
|
+
this.poolIndexForPerpetual = new Map();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Call this async function to initialize the
|
|
41
|
+
* market data
|
|
42
|
+
*/
|
|
43
|
+
PerpetualEventHandler.prototype.initialize = function () {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
45
|
+
var _a, k, poolState, poolSymbol, j, perpState, perpSymbol, orders, perpId, position;
|
|
46
|
+
return __generator(this, function (_b) {
|
|
47
|
+
switch (_b.label) {
|
|
48
|
+
case 0:
|
|
49
|
+
_a = this;
|
|
50
|
+
return [4 /*yield*/, this.mktData.exchangeInfo()];
|
|
51
|
+
case 1:
|
|
52
|
+
_a.exchangeInfo = _b.sent();
|
|
53
|
+
k = 0;
|
|
54
|
+
_b.label = 2;
|
|
55
|
+
case 2:
|
|
56
|
+
if (!(k < this.exchangeInfo.pools.length)) return [3 /*break*/, 8];
|
|
57
|
+
poolState = this.exchangeInfo.pools[k];
|
|
58
|
+
poolSymbol = poolState.poolSymbol;
|
|
59
|
+
j = 0;
|
|
60
|
+
_b.label = 3;
|
|
61
|
+
case 3:
|
|
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);
|
|
70
|
+
return [4 /*yield*/, this.mktData.positionRisk(this.traderAddr, perpSymbol)];
|
|
71
|
+
case 5:
|
|
72
|
+
position = _b.sent();
|
|
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
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Get the current exchange info
|
|
89
|
+
* @returns exchange info
|
|
90
|
+
*/
|
|
91
|
+
PerpetualEventHandler.prototype.getExchangeInfo = function () {
|
|
92
|
+
return this.exchangeInfo;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* getOrdersInPerpetualMap
|
|
96
|
+
* @returns this.ordersInPerpetual
|
|
97
|
+
*/
|
|
98
|
+
PerpetualEventHandler.prototype.getOrdersInPerpetualMap = function () {
|
|
99
|
+
return this.ordersInPerpetual;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* getpositionInPerpetualMap
|
|
103
|
+
* @returns this.positionInPerpetual
|
|
104
|
+
*/
|
|
105
|
+
PerpetualEventHandler.prototype.getpositionInPerpetualMap = function () {
|
|
106
|
+
return this.positionInPerpetual;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Get the data for a perpetual with a given index
|
|
110
|
+
* @param perpetualIdOrSymbol perpetual idx as string or symbol for which we want the data
|
|
111
|
+
* @returns perpetual data for this idx
|
|
112
|
+
*/
|
|
113
|
+
PerpetualEventHandler.prototype.getPerpetualData = function (perpetualIdOrSymbol) {
|
|
114
|
+
var _a;
|
|
115
|
+
var perpId = Number(perpetualIdOrSymbol);
|
|
116
|
+
if (isNaN(perpId)) {
|
|
117
|
+
perpId = this.mktData.getPerpIdFromSymbol(perpetualIdOrSymbol);
|
|
118
|
+
}
|
|
119
|
+
//uint24 perpetualId = uint24(_iPoolId) * 100_000 + iPerpetualIndex;
|
|
120
|
+
var poolIdx = this.poolIndexForPerpetual.get(perpId); //Math.floor(perpId / 100_000);
|
|
121
|
+
var perpetuals = (_a = this.exchangeInfo) === null || _a === void 0 ? void 0 : _a.pools[poolIdx].perpetuals;
|
|
122
|
+
if (perpetuals == undefined) {
|
|
123
|
+
emitWarning("exchangeInfo not found, initialize perpetualEventHandler");
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
// find perpetual
|
|
127
|
+
var k;
|
|
128
|
+
for (k = 0; k < (perpetuals === null || perpetuals === void 0 ? void 0 : perpetuals.length) && perpetuals[k].id != perpId; k++)
|
|
129
|
+
;
|
|
130
|
+
if (perpetuals[k].id != perpId) {
|
|
131
|
+
emitWarning("getPerpetualData: perpetual id ".concat(perpId, " not found"));
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
return perpetuals[k];
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Get the trader's current position risk (margin account data)
|
|
138
|
+
* @param perpetualIdOrSymbol perpetual id as string ('100003') or symbol ('BTC-USD-MATIC')
|
|
139
|
+
* @returns undefined if no position or margin account (='position risk')
|
|
140
|
+
*/
|
|
141
|
+
PerpetualEventHandler.prototype.getCurrentPositionRisk = function (perpetualIdOrSymbol) {
|
|
142
|
+
var perpId = Number(perpetualIdOrSymbol);
|
|
143
|
+
if (isNaN(perpId)) {
|
|
144
|
+
perpId = this.mktData.getPerpIdFromSymbol(perpetualIdOrSymbol);
|
|
145
|
+
}
|
|
146
|
+
return this.positionInPerpetual.get(perpId);
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Update the following prices:
|
|
150
|
+
* - index price
|
|
151
|
+
* - collateral price
|
|
152
|
+
* - mid-price
|
|
153
|
+
* @param perpetualIdOrSymbol perpetual id as string ('100003') or symbol ('BTC-USD-MATIC')
|
|
154
|
+
*/
|
|
155
|
+
PerpetualEventHandler.prototype.updatePrices = function (perpetualIdOrSymbol) {
|
|
156
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
157
|
+
var perpId, symbol, sym, perpState, perp;
|
|
158
|
+
return __generator(this, function (_a) {
|
|
159
|
+
switch (_a.label) {
|
|
160
|
+
case 0:
|
|
161
|
+
perpId = Number(perpetualIdOrSymbol);
|
|
162
|
+
symbol = perpetualIdOrSymbol;
|
|
163
|
+
if (!isNaN(perpId)) {
|
|
164
|
+
sym = this.mktData.getSymbolFromPerpId(perpId);
|
|
165
|
+
if (sym == undefined) {
|
|
166
|
+
throw new Error("Symbol not found for perpetual ".concat(perpId));
|
|
167
|
+
}
|
|
168
|
+
symbol = sym;
|
|
169
|
+
}
|
|
170
|
+
return [4 /*yield*/, this.mktData.getPerpetualState(symbol)];
|
|
171
|
+
case 1:
|
|
172
|
+
perpState = _a.sent();
|
|
173
|
+
perp = this.getPerpetualData(symbol);
|
|
174
|
+
if (perp == undefined) {
|
|
175
|
+
throw new Error("Perpetual not found: ".concat(symbol));
|
|
176
|
+
}
|
|
177
|
+
perp.state = perpState.state;
|
|
178
|
+
perp.indexPrice = perpState.indexPrice;
|
|
179
|
+
perp.collToQuoteIndexPrice = perpState.collToQuoteIndexPrice;
|
|
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
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* Handle the event UpdateMarkPrice and update relevant
|
|
193
|
+
* data
|
|
194
|
+
* @param perpetualId perpetual Id
|
|
195
|
+
* @param fMarkPricePremium premium rate in ABDK format
|
|
196
|
+
* @param fSpotIndexPrice spot index price in ABDK format
|
|
197
|
+
* @returns void
|
|
198
|
+
*/
|
|
199
|
+
PerpetualEventHandler.prototype.onUpdateMarkPrice = function (perpetualId, fMidPricePremium, fMarkPricePremium, fSpotIndexPrice) {
|
|
200
|
+
var _a = __read(PerpetualEventHandler.ConvertUpdateMarkPrice(fMidPricePremium, fMarkPricePremium, fSpotIndexPrice), 3), newMidPrice = _a[0], newMarkPrice = _a[1], newIndexPrice = _a[2];
|
|
201
|
+
var perpetual = this.getPerpetualData(perpetualId.toString());
|
|
202
|
+
if (perpetual == undefined) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
perpetual.midPrice = newMidPrice;
|
|
206
|
+
perpetual.markPrice = newMarkPrice;
|
|
207
|
+
perpetual.indexPrice = newIndexPrice;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Handle the event UpdateFundingRate and update relevant
|
|
211
|
+
* data
|
|
212
|
+
* UpdateFundingRate(uint24 indexed perpetualId, int128 fFundingRate)
|
|
213
|
+
* @param fFundingRate funding rate in ABDK format
|
|
214
|
+
*/
|
|
215
|
+
PerpetualEventHandler.prototype.onUpdateUpdateFundingRate = function (perpetualId, fFundingRate) {
|
|
216
|
+
var newRate = ABK64x64ToFloat(fFundingRate);
|
|
217
|
+
var perpetual = this.getPerpetualData(perpetualId.toString());
|
|
218
|
+
if (perpetual == undefined) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
perpetual.currentFundingRateBps = newRate * 1e4;
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* event ExecutionFailed(
|
|
225
|
+
uint24 indexed perpetualId,
|
|
226
|
+
address indexed trader,
|
|
227
|
+
bytes32 digest,
|
|
228
|
+
string reason
|
|
229
|
+
);
|
|
230
|
+
* @param perpetualId id of the perpetual
|
|
231
|
+
* @param trader address of the trader
|
|
232
|
+
* @param digest digest of the order/cancel order
|
|
233
|
+
* @param reason reason why the execution failed
|
|
234
|
+
*/
|
|
235
|
+
PerpetualEventHandler.prototype.onExecutionFailed = function (perpetualId, trader, digest, reason) {
|
|
236
|
+
if (trader != this.traderAddr) {
|
|
237
|
+
emitWarning("onExecutionFailed: trader ".concat(trader, " not relevant"));
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// remove order from open orders
|
|
241
|
+
var orderStructs = this.ordersInPerpetual.get(perpetualId);
|
|
242
|
+
if (orderStructs == undefined) {
|
|
243
|
+
emitWarning("onExecutionFailed: no order found for perpetual ".concat(perpetualId));
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (reason == "cancel delay required") {
|
|
247
|
+
// canceling failed. We don't remove the order
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
PerpetualEventHandler.deleteOrder(orderStructs, digest);
|
|
251
|
+
};
|
|
252
|
+
/**
|
|
253
|
+
* Event emitted by perpetual proxy
|
|
254
|
+
* event PerpetualLimitOrderCancelled(bytes32 indexed orderHash);
|
|
255
|
+
* @param orderId string order id/digest
|
|
256
|
+
*/
|
|
257
|
+
PerpetualEventHandler.prototype.onPerpetualLimitOrderCancelled = function (orderId) {
|
|
258
|
+
// remove order from open orders
|
|
259
|
+
var perpId = PerpetualEventHandler.findOrderForId(orderId, this.ordersInPerpetual);
|
|
260
|
+
if (perpId == undefined) {
|
|
261
|
+
emitWarning("onPerpetualLimitOrderCancelled: no order found with id ".concat(orderId));
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
var orderStruct = this.ordersInPerpetual.get(perpId);
|
|
265
|
+
PerpetualEventHandler.deleteOrder(orderStruct, orderId);
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* event PerpetualLimitOrderCreated(
|
|
269
|
+
* uint24 indexed perpetualId,
|
|
270
|
+
* address indexed trader,
|
|
271
|
+
* address referrerAddr,
|
|
272
|
+
* address brokerAddr,
|
|
273
|
+
* Order order,
|
|
274
|
+
* bytes32 digest
|
|
275
|
+
*)
|
|
276
|
+
* @param perpetualId id of the perpetual
|
|
277
|
+
* @param trader address of the trader
|
|
278
|
+
* @param referrerAddr address of the referrer
|
|
279
|
+
* @param brokerAddr address of the broker
|
|
280
|
+
* @param Order order struct
|
|
281
|
+
* @param digest order id
|
|
282
|
+
*/
|
|
283
|
+
PerpetualEventHandler.prototype.onPerpetualLimitOrderCreated = function (perpetualId, trader, _referrerAddr, _brokerAddr, Order, digest) {
|
|
284
|
+
if (trader != this.traderAddr) {
|
|
285
|
+
emitWarning("onPerpetualLimitOrderCreated: trader ".concat(trader, " not relevant"));
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
var order = this.mktData.smartContractOrderToOrder(Order);
|
|
289
|
+
var orderStruct = this.ordersInPerpetual.get(perpetualId);
|
|
290
|
+
if (orderStruct == undefined) {
|
|
291
|
+
// no order for this perpetual so far
|
|
292
|
+
this.ordersInPerpetual.set(perpetualId, { orders: [order], orderIds: [digest] });
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
orderStruct.orderIds.push(digest);
|
|
296
|
+
orderStruct.orders.push(order);
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* This function is async -> queries the margin account
|
|
301
|
+
* @param perpetualId id of the perpetual
|
|
302
|
+
* @param trader trader address
|
|
303
|
+
* @param positionId position id
|
|
304
|
+
* @param fPositionBC position size in base currency
|
|
305
|
+
* @param fCashCC margin collateral in margin account
|
|
306
|
+
* @param fLockedInValueQC pos*average opening price
|
|
307
|
+
* @param fFundingPaymentCC funding payment made
|
|
308
|
+
* @param fOpenInterestBC open interest
|
|
309
|
+
*/
|
|
310
|
+
PerpetualEventHandler.prototype.onUpdateMarginAccount = function (perpetualId, trader, _positionId, _fPositionBC, _fCashCC, _fLockedInValueQC, _fFundingPaymentCC, fOpenInterestBC) {
|
|
311
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
312
|
+
var perpetual, perpetualIdStr, margin;
|
|
313
|
+
return __generator(this, function (_a) {
|
|
314
|
+
switch (_a.label) {
|
|
315
|
+
case 0:
|
|
316
|
+
perpetual = this.getPerpetualData(perpetualId.toString());
|
|
317
|
+
if (perpetual == undefined) {
|
|
318
|
+
emitWarning("onUpdateMarginAccount: perpetual ".concat(perpetualId, " not found"));
|
|
319
|
+
return [2 /*return*/];
|
|
320
|
+
}
|
|
321
|
+
perpetual.openInterestBC = ABK64x64ToFloat(fOpenInterestBC);
|
|
322
|
+
if (trader != this.traderAddr) {
|
|
323
|
+
return [2 /*return*/];
|
|
324
|
+
}
|
|
325
|
+
perpetualIdStr = perpetualId.toString();
|
|
326
|
+
return [4 /*yield*/, this.mktData.positionRisk(this.traderAddr, perpetualIdStr)];
|
|
327
|
+
case 1:
|
|
328
|
+
margin = _a.sent();
|
|
329
|
+
this.positionInPerpetual.set(perpetualId, margin);
|
|
330
|
+
return [2 /*return*/];
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
};
|
|
335
|
+
/**
|
|
336
|
+
*
|
|
337
|
+
* @param perpetualId perpetual id
|
|
338
|
+
* @param trader trader address
|
|
339
|
+
* @param positionId position id
|
|
340
|
+
* @param order order struct
|
|
341
|
+
* @param orderDigest order id
|
|
342
|
+
* @param newPositionSizeBC new pos size in base currency ABDK
|
|
343
|
+
* @param price price in ABDK format
|
|
344
|
+
* @returns trade event data in regular number format
|
|
345
|
+
*/
|
|
346
|
+
PerpetualEventHandler.prototype.onTrade = function (perpetualId, _trader, positionId, _order, orderDigest, newPositionSizeBC, _price) {
|
|
347
|
+
// remove order digest from open orders
|
|
348
|
+
var orderStructs = this.ordersInPerpetual.get(perpetualId);
|
|
349
|
+
if (orderStructs == undefined) {
|
|
350
|
+
emitWarning("onTrade: executed order not found ".concat(orderDigest));
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
PerpetualEventHandler.deleteOrder(orderStructs, orderDigest);
|
|
354
|
+
}
|
|
355
|
+
// return transformed trade info
|
|
356
|
+
return {
|
|
357
|
+
perpetualId: perpetualId,
|
|
358
|
+
positionId: positionId,
|
|
359
|
+
orderId: orderDigest,
|
|
360
|
+
newPositionSizeBC: ABK64x64ToFloat(newPositionSizeBC),
|
|
361
|
+
executionPrice: ABK64x64ToFloat(newPositionSizeBC),
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
/**
|
|
365
|
+
* static function to find the number of the OrderStruct with given orderId
|
|
366
|
+
* @param orderId id/digest of order
|
|
367
|
+
* @param orderMap mapping for perpetualId->OrderStruct
|
|
368
|
+
* @returns id of perpetual that contains order with id = orderId or undefined
|
|
369
|
+
*/
|
|
370
|
+
PerpetualEventHandler.findOrderForId = function (orderId, orderMap) {
|
|
371
|
+
var e_1, _a;
|
|
372
|
+
try {
|
|
373
|
+
/*orderMapMap<number, {
|
|
374
|
+
orders: Order[];
|
|
375
|
+
orderIds: string[];*/
|
|
376
|
+
for (var _b = __values(orderMap.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
377
|
+
var perpId = _c.value;
|
|
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);
|
|
388
|
+
}
|
|
389
|
+
finally { if (e_1) throw e_1.error; }
|
|
390
|
+
}
|
|
391
|
+
return undefined;
|
|
392
|
+
};
|
|
393
|
+
/**
|
|
394
|
+
* Delete the order with given id from the class member data
|
|
395
|
+
* @param orderStructs array of order struct as stored for the trader and a given perpetual
|
|
396
|
+
* @param orderId digest/order id
|
|
397
|
+
* @returns void
|
|
398
|
+
*/
|
|
399
|
+
PerpetualEventHandler.deleteOrder = function (orderStructs, orderId) {
|
|
400
|
+
// find order
|
|
401
|
+
var k;
|
|
402
|
+
for (k = 0; k < orderStructs.orderIds.length && orderStructs.orderIds[k] != orderId; k++)
|
|
403
|
+
;
|
|
404
|
+
if (orderStructs.orderIds[k] != orderId) {
|
|
405
|
+
emitWarning("deleteOrder: no order found with digest ".concat(orderId));
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
// delete element k on reference of orders
|
|
409
|
+
orderStructs.orders[k] = orderStructs.orders[orderStructs.orders.length - 1];
|
|
410
|
+
orderStructs.orders.pop();
|
|
411
|
+
orderStructs.orderIds[k] = orderStructs.orderIds[orderStructs.orderIds.length - 1];
|
|
412
|
+
orderStructs.orderIds.pop();
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* UpdateMarkPrice(
|
|
416
|
+
* uint24 indexed perpetualId,
|
|
417
|
+
* int128 fMarkPricePremium,
|
|
418
|
+
* int128 fSpotIndexPrice
|
|
419
|
+
* )
|
|
420
|
+
* @param fMarkPricePremium premium rate in ABDK format
|
|
421
|
+
* @param fSpotIndexPrice spot index price in ABDK format
|
|
422
|
+
* @returns mark price and spot index in float
|
|
423
|
+
*/
|
|
424
|
+
PerpetualEventHandler.ConvertUpdateMarkPrice = function (fMidPricePremium, fMarkPricePremium, fSpotIndexPrice) {
|
|
425
|
+
var fMarkPrice = mul64x64(fSpotIndexPrice, ONE_64x64.add(fMarkPricePremium));
|
|
426
|
+
var fMidPrice = mul64x64(fSpotIndexPrice, ONE_64x64.add(fMidPricePremium));
|
|
427
|
+
var midPrice = ABK64x64ToFloat(fMidPrice);
|
|
428
|
+
var markPrice = ABK64x64ToFloat(fMarkPrice);
|
|
429
|
+
var indexPrice = ABK64x64ToFloat(fSpotIndexPrice);
|
|
430
|
+
return [midPrice, markPrice, indexPrice];
|
|
431
|
+
};
|
|
432
|
+
return PerpetualEventHandler;
|
|
433
|
+
}());
|
|
434
|
+
export default PerpetualEventHandler;
|
|
435
|
+
//# sourceMappingURL=perpetualEventHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perpetualEventHandler.js","sourceRoot":"","sources":["../../src/perpetualEventHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import PerpetualDataHandler from "./perpetualDataHandler";
|
|
2
|
+
import { PriceFeedConfig, PriceFeedSubmission, PriceFeedFormat } from "./nodeSDKTypes";
|
|
3
|
+
/**
|
|
4
|
+
* This class communicates with the REST API that provides price-data that is
|
|
5
|
+
* to be submitted to the smart contracts for certain functions such as
|
|
6
|
+
* trader liquidations, trade executions, change of trader margin amount.
|
|
7
|
+
*/
|
|
8
|
+
export default class PriceFeeds {
|
|
9
|
+
private config;
|
|
10
|
+
private feedEndpoints;
|
|
11
|
+
private feedInfo;
|
|
12
|
+
private dataHandler;
|
|
13
|
+
private triangulations;
|
|
14
|
+
private THRESHOLD_MARKET_CLOSED_SEC;
|
|
15
|
+
constructor(dataHandler: PerpetualDataHandler, priceFeedConfigNetwork: string);
|
|
16
|
+
/**
|
|
17
|
+
* Pre-processing of triangulations for symbols, given the price feeds
|
|
18
|
+
* @param symbols set of symbols we want to triangulate from price feeds
|
|
19
|
+
*/
|
|
20
|
+
initializeTriangulations(symbols: Set<string>): void;
|
|
21
|
+
/**
|
|
22
|
+
* Get required information to be able to submit a blockchain transaction with price-update
|
|
23
|
+
* such as trade execution, liquidation
|
|
24
|
+
* @param symbol symbol of perpetual, e.g., BTC-USD-MATIC
|
|
25
|
+
* @returns PriceFeedSubmission, index prices, market closed information
|
|
26
|
+
*/
|
|
27
|
+
fetchFeedPriceInfoAndIndicesForPerpetual(symbol: string): Promise<{
|
|
28
|
+
submission: PriceFeedSubmission;
|
|
29
|
+
pxS2S3: [number, number];
|
|
30
|
+
mktClosed: [boolean, boolean];
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Get all prices/isMarketClosed for the provided symbols via
|
|
34
|
+
* "latest_price_feeds" and triangulation. Triangulation must be defined in config, unless
|
|
35
|
+
* it is a direct price feed.
|
|
36
|
+
* @returns map of feed-price symbol to price/isMarketClosed
|
|
37
|
+
*/
|
|
38
|
+
fetchPrices(symbols: string[]): Promise<Map<string, [number, boolean]>>;
|
|
39
|
+
/**
|
|
40
|
+
* Get index prices and market closed information for the given perpetual
|
|
41
|
+
* @param symbol perpetual symbol such as ETH-USD-MATIC
|
|
42
|
+
* @returns Index prices and market closed information
|
|
43
|
+
*/
|
|
44
|
+
fetchPricesForPerpetual(symbol: string): Promise<{
|
|
45
|
+
idxPrices: number[];
|
|
46
|
+
mktClosed: boolean[];
|
|
47
|
+
}>;
|
|
48
|
+
/**
|
|
49
|
+
* Fetch the provided feed prices and bool whether market is closed or open
|
|
50
|
+
* - requires the feeds to be defined in priceFeedConfig.json
|
|
51
|
+
* - if undefined, all feeds are queried
|
|
52
|
+
* @param symbols array of feed-price symbols (e.g., [btc-usd, eth-usd]) or undefined
|
|
53
|
+
* @returns mapping symbol-> [price, isMarketClosed]
|
|
54
|
+
*/
|
|
55
|
+
fetchFeedPrices(symbols?: string[]): Promise<Map<string, [number, boolean]>>;
|
|
56
|
+
/**
|
|
57
|
+
* Get all configured feed prices via "latest_price_feeds"
|
|
58
|
+
* @returns map of feed-price symbol to price/isMarketClosed
|
|
59
|
+
*/
|
|
60
|
+
fetchAllFeedPrices(): Promise<Map<string, [number, boolean]>>;
|
|
61
|
+
/**
|
|
62
|
+
* Get the latest prices for a given perpetual from the offchain oracle
|
|
63
|
+
* networks
|
|
64
|
+
* @param symbol perpetual symbol of the form BTC-USD-MATIC
|
|
65
|
+
* @returns array of price feed updates that can be submitted to the smart contract
|
|
66
|
+
* and corresponding price information
|
|
67
|
+
*/
|
|
68
|
+
fetchLatestFeedPriceInfoForPerpetual(symbol: string): Promise<PriceFeedSubmission>;
|
|
69
|
+
/**
|
|
70
|
+
* Extract pair-prices from underlying price feeds via triangulation
|
|
71
|
+
* The function either needs a direct price feed or a defined triangulation to succesfully
|
|
72
|
+
* return a triangulated price
|
|
73
|
+
* @param symbols array of pairs for which we want prices, e.g., [BTC-USDC, ETH-USD]
|
|
74
|
+
* @param feeds data obtained via fetchLatestFeedPriceInfo or fetchLatestFeedPrices
|
|
75
|
+
* @returns array of prices with same order as symbols
|
|
76
|
+
*/
|
|
77
|
+
calculateTriangulatedPricesFromFeedInfo(symbols: string[], feeds: PriceFeedSubmission): [number[], boolean[]];
|
|
78
|
+
/**
|
|
79
|
+
* Extract pair-prices from underlying price feeds via triangulation
|
|
80
|
+
* The function either needs a direct price feed or a defined triangulation to succesfully
|
|
81
|
+
* return a triangulated price
|
|
82
|
+
* @param symbols array of pairs for which we want prices, e.g., [BTC-USDC, ETH-USD]
|
|
83
|
+
* @param feeds data obtained via fetchLatestFeedPriceInfo or fetchLatestFeedPrices
|
|
84
|
+
* @returns array of prices with same order as symbols
|
|
85
|
+
*/
|
|
86
|
+
triangulatePricesFromFeedPrices(symbols: string[], feedPriceMap: Map<string, [number, boolean]>): [number[], boolean[]];
|
|
87
|
+
/**
|
|
88
|
+
* Queries the REST endpoint and returns parsed VAA price data
|
|
89
|
+
* @param query query price-info from endpoint
|
|
90
|
+
* @returns vaa and price info
|
|
91
|
+
*/
|
|
92
|
+
private fetchVAAQuery;
|
|
93
|
+
/**
|
|
94
|
+
* Queries the REST endpoint and returns parsed price data
|
|
95
|
+
* @param query query price-info from endpoint
|
|
96
|
+
* @returns vaa and price info
|
|
97
|
+
*/
|
|
98
|
+
fetchPriceQuery(query: string): Promise<[string[], PriceFeedFormat[]]>;
|
|
99
|
+
/**
|
|
100
|
+
* Searches for configuration for given network
|
|
101
|
+
* @param configs pricefeed configuration from json
|
|
102
|
+
* @param network e.g. testnet
|
|
103
|
+
* @returns selected configuration
|
|
104
|
+
*/
|
|
105
|
+
static _selectConfig(configs: PriceFeedConfig[], network: string): PriceFeedConfig;
|
|
106
|
+
/**
|
|
107
|
+
* Wraps configuration into convenient data-structure
|
|
108
|
+
* @param config configuration for the selected network
|
|
109
|
+
* @returns feedInfo-map and endPoints-array
|
|
110
|
+
*/
|
|
111
|
+
static _constructFeedInfo(config: PriceFeedConfig): [Map<string, {
|
|
112
|
+
symbol: string;
|
|
113
|
+
endpointId: number;
|
|
114
|
+
}>, string[]];
|
|
115
|
+
}
|