@drift-labs/sdk 0.1.8 → 0.1.12
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/.eslintrc.json +36 -0
- package/.prettierignore +1 -0
- package/.prettierrc.js +9 -0
- package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts +1 -0
- package/lib/accounts/defaultClearingHouseAccountSubscriber.d.ts.map +1 -0
- package/lib/accounts/defaultHistoryAccountSubscriber.d.ts +1 -0
- package/lib/accounts/defaultHistoryAccountSubscriber.d.ts.map +1 -0
- package/lib/accounts/defaultUserAccountSubscriber.d.ts +1 -0
- package/lib/accounts/defaultUserAccountSubscriber.d.ts.map +1 -0
- package/lib/accounts/types.d.ts +1 -0
- package/lib/accounts/types.d.ts.map +1 -0
- package/lib/accounts/webSocketAccountSubscriber.d.ts +1 -0
- package/lib/accounts/webSocketAccountSubscriber.d.ts.map +1 -0
- package/lib/addresses.d.ts +1 -0
- package/lib/addresses.d.ts.map +1 -0
- package/lib/admin.d.ts +1 -0
- package/lib/admin.d.ts.map +1 -0
- package/lib/assert/assert.d.ts +1 -0
- package/lib/assert/assert.d.ts.map +1 -0
- package/lib/clearingHouse.d.ts +1 -0
- package/lib/clearingHouse.d.ts.map +1 -0
- package/lib/clearingHouseUser.d.ts +3 -2
- package/lib/clearingHouseUser.d.ts.map +1 -0
- package/lib/clearingHouseUser.js +12 -32
- package/lib/config.d.ts +1 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/constants/markets.d.ts +1 -0
- package/lib/constants/markets.d.ts.map +1 -0
- package/lib/constants/markets.js +21 -7
- package/lib/constants/numericConstants.d.ts +1 -0
- package/lib/constants/numericConstants.d.ts.map +1 -0
- package/lib/examples/makeTradeExample.d.ts +1 -0
- package/lib/examples/makeTradeExample.d.ts.map +1 -0
- package/lib/idl/clearing_house.json +6 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/math/amm.d.ts +1 -0
- package/lib/math/amm.d.ts.map +1 -0
- package/lib/math/conversion.d.ts +1 -0
- package/lib/math/conversion.d.ts.map +1 -0
- package/lib/math/funding.d.ts +11 -1
- package/lib/math/funding.d.ts.map +1 -0
- package/lib/math/funding.js +85 -19
- package/lib/math/market.d.ts +1 -0
- package/lib/math/market.d.ts.map +1 -0
- package/lib/math/position.d.ts +7 -0
- package/lib/math/position.d.ts.map +1 -0
- package/lib/math/position.js +17 -1
- package/lib/math/trade.d.ts +2 -1
- package/lib/math/trade.d.ts.map +1 -0
- package/lib/math/utils.d.ts +1 -0
- package/lib/math/utils.d.ts.map +1 -0
- package/lib/mockUSDCFaucet.d.ts +1 -0
- package/lib/mockUSDCFaucet.d.ts.map +1 -0
- package/lib/pythClient.d.ts +1 -0
- package/lib/pythClient.d.ts.map +1 -0
- package/lib/tx/defaultTxSender.d.ts +1 -0
- package/lib/tx/defaultTxSender.d.ts.map +1 -0
- package/lib/tx/types.d.ts +1 -0
- package/lib/tx/types.d.ts.map +1 -0
- package/lib/tx/utils.d.ts +1 -0
- package/lib/tx/utils.d.ts.map +1 -0
- package/lib/types.d.ts +13 -41
- package/lib/types.d.ts.map +1 -0
- package/package.json +12 -2
- package/src/clearingHouseUser.ts +26 -46
- package/src/constants/markets.ts +21 -7
- package/src/idl/clearing_house.json +6 -2
- package/src/math/funding.ts +143 -60
- package/src/math/position.ts +19 -0
- package/src/math/trade.ts +4 -3
- package/src/types.ts +12 -44
- package/tsconfig.json +2 -1
package/lib/math/funding.js
CHANGED
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.calculateFundingPool = exports.calculateLongShortFundingRate = exports.calculateEstimatedFundingRate = exports.calculateAllEstimatedFundingRate = void 0;
|
|
12
|
+
exports.calculateFundingPool = exports.calculateLongShortFundingRateAndLiveTwaps = exports.calculateLongShortFundingRate = exports.calculateEstimatedFundingRate = exports.calculateAllEstimatedFundingRate = void 0;
|
|
13
13
|
const anchor_1 = require("@project-serum/anchor");
|
|
14
14
|
const numericConstants_1 = require("../constants/numericConstants");
|
|
15
15
|
const market_1 = require("./market");
|
|
@@ -29,22 +29,35 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
29
29
|
const secondsInHour = new anchor_1.BN(3600);
|
|
30
30
|
const hoursInDay = new anchor_1.BN(24);
|
|
31
31
|
if (!market.initialized) {
|
|
32
|
-
return [
|
|
32
|
+
return [numericConstants_1.ZERO, numericConstants_1.ZERO, numericConstants_1.ZERO, numericConstants_1.ZERO, numericConstants_1.ZERO];
|
|
33
33
|
}
|
|
34
34
|
const payFreq = new anchor_1.BN(market.amm.fundingPeriod);
|
|
35
|
-
|
|
36
|
-
const oracleTwapWithMantissa = new anchor_1.BN(oraclePriceData.twap.value * numericConstants_1.MARK_PRICE_PRECISION.toNumber());
|
|
35
|
+
// todo: sufficiently differs from blockchain timestamp?
|
|
37
36
|
const now = new anchor_1.BN((Date.now() / 1000).toFixed(0));
|
|
38
37
|
const timeSinceLastUpdate = now.sub(market.amm.lastFundingRateTs);
|
|
38
|
+
// calculate real-time mark twap
|
|
39
39
|
const lastMarkTwapWithMantissa = market.amm.lastMarkPriceTwap;
|
|
40
40
|
const lastMarkPriceTwapTs = market.amm.lastMarkPriceTwapTs;
|
|
41
41
|
const timeSinceLastMarkChange = now.sub(lastMarkPriceTwapTs);
|
|
42
|
-
const markTwapTimeSinceLastUpdate =
|
|
42
|
+
const markTwapTimeSinceLastUpdate = anchor_1.BN.max(secondsInHour, secondsInHour.sub(timeSinceLastMarkChange));
|
|
43
43
|
const baseAssetPriceWithMantissa = market_1.calculateMarkPrice(market);
|
|
44
44
|
const markTwapWithMantissa = markTwapTimeSinceLastUpdate
|
|
45
45
|
.mul(lastMarkTwapWithMantissa)
|
|
46
46
|
.add(timeSinceLastMarkChange.mul(baseAssetPriceWithMantissa))
|
|
47
47
|
.div(timeSinceLastMarkChange.add(markTwapTimeSinceLastUpdate));
|
|
48
|
+
// calculate real-time (predicted) oracle twap
|
|
49
|
+
// note: oracle twap depends on `when the chord is struck` (market is trade)
|
|
50
|
+
const lastOracleTwapWithMantissa = market.amm.lastOraclePriceTwap;
|
|
51
|
+
const lastOraclePriceTwapTs = market.amm.lastOraclePriceTwapTs;
|
|
52
|
+
const timeSinceLastOracleTwapUpdate = now.sub(lastOraclePriceTwapTs);
|
|
53
|
+
const oracleTwapTimeSinceLastUpdate = anchor_1.BN.max(secondsInHour, secondsInHour.sub(timeSinceLastOracleTwapUpdate));
|
|
54
|
+
const oraclePriceData = yield pythClient.getPriceData(market.amm.oracle);
|
|
55
|
+
const oraclePriceStableWithMantissa = new anchor_1.BN(((oraclePriceData.price + oraclePriceData.previousPrice) / 2) *
|
|
56
|
+
numericConstants_1.MARK_PRICE_PRECISION.toNumber());
|
|
57
|
+
const oracleTwapWithMantissa = oracleTwapTimeSinceLastUpdate
|
|
58
|
+
.mul(lastOracleTwapWithMantissa)
|
|
59
|
+
.add(timeSinceLastMarkChange.mul(oraclePriceStableWithMantissa))
|
|
60
|
+
.div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
|
|
48
61
|
const twapSpread = markTwapWithMantissa.sub(oracleTwapWithMantissa);
|
|
49
62
|
const twapSpreadPct = twapSpread
|
|
50
63
|
.mul(numericConstants_1.MARK_PRICE_PRECISION)
|
|
@@ -58,7 +71,9 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
58
71
|
.div(secondsInHour)
|
|
59
72
|
.div(hoursInDay);
|
|
60
73
|
const interpEst = twapSpreadPct.mul(periodAdjustment).div(hoursInDay);
|
|
61
|
-
const interpRateQuote = twapSpreadPct
|
|
74
|
+
const interpRateQuote = twapSpreadPct
|
|
75
|
+
.mul(periodAdjustment)
|
|
76
|
+
.div(hoursInDay)
|
|
62
77
|
.div(numericConstants_1.MARK_PRICE_PRECISION.div(numericConstants_1.QUOTE_PRECISION));
|
|
63
78
|
let feePoolSize = calculateFundingPool(market);
|
|
64
79
|
if (interpRateQuote.lt(new anchor_1.BN(0))) {
|
|
@@ -67,32 +82,54 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
67
82
|
let cappedAltEst;
|
|
68
83
|
let largerSide;
|
|
69
84
|
let smallerSide;
|
|
70
|
-
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
|
|
85
|
+
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
|
|
71
86
|
largerSide = market.baseAssetAmountLong.abs();
|
|
72
87
|
smallerSide = market.baseAssetAmountShort.abs();
|
|
73
88
|
if (twapSpread.gt(new anchor_1.BN(0))) {
|
|
74
|
-
return [
|
|
89
|
+
return [
|
|
90
|
+
markTwapWithMantissa,
|
|
91
|
+
oracleTwapWithMantissa,
|
|
92
|
+
lowerboundEst,
|
|
93
|
+
interpEst,
|
|
94
|
+
interpEst,
|
|
95
|
+
];
|
|
75
96
|
}
|
|
76
97
|
}
|
|
77
|
-
else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort)) {
|
|
98
|
+
else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
|
|
78
99
|
largerSide = market.baseAssetAmountShort.abs();
|
|
79
100
|
smallerSide = market.baseAssetAmountLong.abs();
|
|
80
101
|
if (twapSpread.lt(new anchor_1.BN(0))) {
|
|
81
|
-
return [
|
|
102
|
+
return [
|
|
103
|
+
markTwapWithMantissa,
|
|
104
|
+
oracleTwapWithMantissa,
|
|
105
|
+
lowerboundEst,
|
|
106
|
+
interpEst,
|
|
107
|
+
interpEst,
|
|
108
|
+
];
|
|
82
109
|
}
|
|
83
110
|
}
|
|
84
111
|
else {
|
|
85
|
-
return [
|
|
112
|
+
return [
|
|
113
|
+
markTwapWithMantissa,
|
|
114
|
+
oracleTwapWithMantissa,
|
|
115
|
+
lowerboundEst,
|
|
116
|
+
interpEst,
|
|
117
|
+
interpEst,
|
|
118
|
+
];
|
|
86
119
|
}
|
|
87
120
|
if (largerSide.gt(numericConstants_1.ZERO)) {
|
|
88
121
|
cappedAltEst = smallerSide.mul(twapSpread).div(largerSide);
|
|
89
|
-
const feePoolTopOff = feePoolSize
|
|
90
|
-
.mul(numericConstants_1.
|
|
122
|
+
const feePoolTopOff = feePoolSize
|
|
123
|
+
.mul(numericConstants_1.MARK_PRICE_PRECISION.div(numericConstants_1.QUOTE_PRECISION))
|
|
124
|
+
.mul(numericConstants_1.AMM_RESERVE_PRECISION)
|
|
125
|
+
.div(largerSide);
|
|
91
126
|
cappedAltEst = cappedAltEst.add(feePoolTopOff);
|
|
92
|
-
cappedAltEst = cappedAltEst
|
|
127
|
+
cappedAltEst = cappedAltEst
|
|
128
|
+
.mul(numericConstants_1.MARK_PRICE_PRECISION)
|
|
93
129
|
.mul(new anchor_1.BN(100))
|
|
94
130
|
.div(oracleTwapWithMantissa)
|
|
95
|
-
.mul(periodAdjustment)
|
|
131
|
+
.mul(periodAdjustment)
|
|
132
|
+
.div(hoursInDay);
|
|
96
133
|
if (cappedAltEst.abs().gt(interpEst.abs())) {
|
|
97
134
|
cappedAltEst = interpEst;
|
|
98
135
|
}
|
|
@@ -100,7 +137,13 @@ function calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment =
|
|
|
100
137
|
else {
|
|
101
138
|
cappedAltEst = interpEst;
|
|
102
139
|
}
|
|
103
|
-
return [
|
|
140
|
+
return [
|
|
141
|
+
markTwapWithMantissa,
|
|
142
|
+
oracleTwapWithMantissa,
|
|
143
|
+
lowerboundEst,
|
|
144
|
+
cappedAltEst,
|
|
145
|
+
interpEst,
|
|
146
|
+
];
|
|
104
147
|
});
|
|
105
148
|
}
|
|
106
149
|
exports.calculateAllEstimatedFundingRate = calculateAllEstimatedFundingRate;
|
|
@@ -114,7 +157,7 @@ exports.calculateAllEstimatedFundingRate = calculateAllEstimatedFundingRate;
|
|
|
114
157
|
*/
|
|
115
158
|
function calculateEstimatedFundingRate(market, pythClient, periodAdjustment = new anchor_1.BN(1), estimationMethod) {
|
|
116
159
|
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
-
const [lowerboundEst, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
|
|
160
|
+
const [_1, _2, lowerboundEst, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
|
|
118
161
|
if (estimationMethod == 'lowerbound') {
|
|
119
162
|
//assuming remaining funding period has no gap
|
|
120
163
|
return lowerboundEst;
|
|
@@ -138,7 +181,7 @@ exports.calculateEstimatedFundingRate = calculateEstimatedFundingRate;
|
|
|
138
181
|
*/
|
|
139
182
|
function calculateLongShortFundingRate(market, pythClient, periodAdjustment = new anchor_1.BN(1)) {
|
|
140
183
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
-
const [_, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
|
|
184
|
+
const [_1, _2, _, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
|
|
142
185
|
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort)) {
|
|
143
186
|
return [cappedAltEst, interpEst];
|
|
144
187
|
}
|
|
@@ -151,15 +194,38 @@ function calculateLongShortFundingRate(market, pythClient, periodAdjustment = ne
|
|
|
151
194
|
});
|
|
152
195
|
}
|
|
153
196
|
exports.calculateLongShortFundingRate = calculateLongShortFundingRate;
|
|
197
|
+
/**
|
|
198
|
+
*
|
|
199
|
+
* @param market
|
|
200
|
+
* @param pythClient
|
|
201
|
+
* @param periodAdjustment
|
|
202
|
+
* @param estimationMethod
|
|
203
|
+
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
204
|
+
*/
|
|
205
|
+
function calculateLongShortFundingRateAndLiveTwaps(market, pythClient, periodAdjustment = new anchor_1.BN(1)) {
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
const [markTwapLive, oracleTwapLive, _2, cappedAltEst, interpEst] = yield calculateAllEstimatedFundingRate(market, pythClient, periodAdjustment);
|
|
208
|
+
if (market.baseAssetAmountLong.gt(market.baseAssetAmountShort.abs())) {
|
|
209
|
+
return [markTwapLive, oracleTwapLive, cappedAltEst, interpEst];
|
|
210
|
+
}
|
|
211
|
+
else if (market.baseAssetAmountLong.lt(market.baseAssetAmountShort.abs())) {
|
|
212
|
+
return [markTwapLive, oracleTwapLive, interpEst, cappedAltEst];
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
return [markTwapLive, oracleTwapLive, interpEst, interpEst];
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
exports.calculateLongShortFundingRateAndLiveTwaps = calculateLongShortFundingRateAndLiveTwaps;
|
|
154
220
|
/**
|
|
155
221
|
*
|
|
156
222
|
* @param market
|
|
157
223
|
* @returns Estimated fee pool size
|
|
158
224
|
*/
|
|
159
225
|
function calculateFundingPool(market) {
|
|
226
|
+
// todo
|
|
160
227
|
const totalFeeLB = market.amm.totalFee.div(new anchor_1.BN(2));
|
|
161
228
|
const feePool = market.amm.totalFeeMinusDistributions.sub(totalFeeLB);
|
|
162
|
-
// return new BN(QUOTE_PRECISION.mul(new BN(2400)));
|
|
163
229
|
return feePool;
|
|
164
230
|
}
|
|
165
231
|
exports.calculateFundingPool = calculateFundingPool;
|
package/lib/math/market.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../src/math/market.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAMrD"}
|
package/lib/math/position.d.ts
CHANGED
|
@@ -24,3 +24,10 @@ export declare function calculatePositionPNL(market: Market, marketPosition: Use
|
|
|
24
24
|
* @returns // TODO-PRECISION
|
|
25
25
|
*/
|
|
26
26
|
export declare function calculatePositionFundingPNL(market: Market, marketPosition: UserPosition): BN;
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @param userPosition
|
|
30
|
+
* @returns Precision: MARK_PRICE_PRECISION (10^10)
|
|
31
|
+
*/
|
|
32
|
+
export declare function calculateEntryPrice(userPosition: UserPosition): BN;
|
|
33
|
+
//# sourceMappingURL=position.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/math/position.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,YAAY,EAAE,MAAM,UAAU,CAAC;AAQnE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQvB;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GACxB,EAAE,CA+BJ;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,YAAY,EAC5B,WAAW,UAAQ,GACjB,EAAE,CAgCJ;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,YAAY,GAC1B,EAAE,CAoBJ;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,EAAE,CAUlE"}
|
package/lib/math/position.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.calculatePositionFundingPNL = exports.calculatePositionPNL = exports.calculateBaseAssetValue = void 0;
|
|
6
|
+
exports.calculateEntryPrice = exports.calculatePositionFundingPNL = exports.calculatePositionPNL = exports.calculateBaseAssetValue = void 0;
|
|
7
7
|
const types_1 = require("../types");
|
|
8
8
|
const numericConstants_1 = require("../constants/numericConstants");
|
|
9
9
|
const bn_js_1 = __importDefault(require("bn.js"));
|
|
@@ -98,3 +98,19 @@ function calculatePositionFundingPNL(market, marketPosition) {
|
|
|
98
98
|
return perPositionFundingRate;
|
|
99
99
|
}
|
|
100
100
|
exports.calculatePositionFundingPNL = calculatePositionFundingPNL;
|
|
101
|
+
/**
|
|
102
|
+
*
|
|
103
|
+
* @param userPosition
|
|
104
|
+
* @returns Precision: MARK_PRICE_PRECISION (10^10)
|
|
105
|
+
*/
|
|
106
|
+
function calculateEntryPrice(userPosition) {
|
|
107
|
+
if (userPosition.baseAssetAmount.eq(numericConstants_1.ZERO)) {
|
|
108
|
+
return numericConstants_1.ZERO;
|
|
109
|
+
}
|
|
110
|
+
return userPosition.quoteAssetAmount
|
|
111
|
+
.mul(numericConstants_1.MARK_PRICE_PRECISION)
|
|
112
|
+
.mul(numericConstants_1.AMM_TO_QUOTE_PRECISION_RATIO)
|
|
113
|
+
.div(userPosition.baseAssetAmount)
|
|
114
|
+
.abs();
|
|
115
|
+
}
|
|
116
|
+
exports.calculateEntryPrice = calculateEntryPrice;
|
package/lib/math/trade.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Market, PositionDirection } from '../types';
|
|
3
3
|
import { BN } from '@project-serum/anchor';
|
|
4
4
|
import { AssetType } from './amm';
|
|
5
|
-
export declare type PriceImpactUnit = 'entryPrice' | 'maxPrice' | 'priceDelta' | 'priceDeltaAsNumber' | 'pctAvg' | 'pctMax' | 'quoteAssetAmount' | 'quoteAssetAmountPeg' | 'acquiredBaseAssetAmount' | 'acquiredQuoteAssetAmount';
|
|
5
|
+
export declare type PriceImpactUnit = 'entryPrice' | 'maxPrice' | 'priceDelta' | 'priceDeltaAsNumber' | 'pctAvg' | 'pctMax' | 'quoteAssetAmount' | 'quoteAssetAmountPeg' | 'acquiredBaseAssetAmount' | 'acquiredQuoteAssetAmount' | 'all';
|
|
6
6
|
/**
|
|
7
7
|
* Calculates avg/max slippage (price impact) for candidate trade
|
|
8
8
|
* @param direction
|
|
@@ -45,3 +45,4 @@ export declare function calculateTradeAcquiredAmounts(direction: PositionDirecti
|
|
|
45
45
|
* ]
|
|
46
46
|
*/
|
|
47
47
|
export declare function calculateTargetPriceTrade(market: Market, targetPrice: BN, pct?: BN): [PositionDirection, BN, BN, BN];
|
|
48
|
+
//# sourceMappingURL=trade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../src/math/trade.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAS3C,OAAO,EAIN,SAAS,EACT,MAAM,OAAO,CAAC;AAKf,oBAAY,eAAe,GACxB,YAAY,GACZ,UAAU,GACV,YAAY,GACZ,oBAAoB,GACpB,QAAQ,GACR,QAAQ,GACR,kBAAkB,GAClB,qBAAqB,GACrB,yBAAyB,GACzB,0BAA0B,GAC1B,KAAK,CAAC;AAET;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,SAAmB,GACjC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CA0ClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC5C,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,EACd,cAAc,GAAE,SAAmB,GACjC,CAAC,EAAE,EAAE,EAAE,CAAC,CAiBV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,EAAE,EACf,GAAG,GAAE,EAAW,GACd,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CA6GjC"}
|
package/lib/math/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/math/utils.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,YAAY,8CA0BxB,CAAC"}
|
package/lib/mockUSDCFaucet.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockUSDCFaucet.d.ts","sourceRoot":"","sources":["../src/mockUSDCFaucet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAO,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EACN,WAAW,EAKX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,cAAc,EACd,UAAU,EACV,SAAS,EAIT,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,qBAAa,cAAc;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,cAAc,CAAC;gBAGrB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,CAAC,EAAE,cAAc;IAUT,uCAAuC,IAAI,OAAO,CAC9D;QAAC,SAAS;QAAE,MAAM;KAAC,CACnB;IAOD,4BAA4B,CAAC,EAAE,SAAS,CAAC;IAC5B,+BAA+B,IAAI,OAAO,CAAC,SAAS,CAAC;IAUrD,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC;IA8C3C,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAM1B,UAAU,CACtB,gBAAgB,EAAE,SAAS,EAC3B,MAAM,EAAE,EAAE,GACR,OAAO,CAAC,oBAAoB,CAAC;IAanB,qCAAqC,CACjD,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE,EAAE,GACR,OAAO,CAAC,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAWhC,iDAAiD,CAC7D,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE,EAAE,GACR,OAAO,CAAC,CAAC,SAAS,EAAE,sBAAsB,EAAE,sBAAsB,CAAC,CAAC;IA8B1D,gCAAgC,CAAC,KAAK,EAAE;QACpD,UAAU,EAAE,SAAS,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAWrB,mBAAmB,CAAC,KAAK,EAAE;QACvC,UAAU,EAAE,SAAS,CAAC;KACtB,GAAG,OAAO,CAAC,WAAW,CAAC;IAiBX,uBAAuB,CAAC,KAAK,EAAE;QAC3C,UAAU,EAAE,SAAS,CAAC;QACtB,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;KAC7C,GAAG,OAAO,CAAC,OAAO,CAAC;CAuBpB"}
|
package/lib/pythClient.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pythClient.d.ts","sourceRoot":"","sources":["../src/pythClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,UAAU;IACtB,OAAO,CAAC,UAAU,CAAa;gBAEZ,UAAU,EAAE,UAAU;IAI5B,YAAY,CAAC,cAAc,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;CAIxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultTxSender.d.ts","sourceRoot":"","sources":["../../src/tx/defaultTxSender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EACN,cAAc,EACd,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,qBAAa,eAAgB,YAAW,QAAQ;IAC/C,QAAQ,EAAE,QAAQ,CAAC;gBAEA,QAAQ,EAAE,QAAQ;IAIrC,IAAI,CACH,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,oBAAoB,CAAC;CAGhC"}
|
package/lib/tx/types.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tx/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,cAAc,EACd,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,QAAQ;IACxB,IAAI,CACH,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACjC"}
|
package/lib/tx/utils.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tx/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,wBAAgB,QAAQ,CAAC,WAAW,EAAE,sBAAsB,GAAG,WAAW,CAEzE"}
|
package/lib/types.d.ts
CHANGED
|
@@ -203,6 +203,8 @@ export declare type AMM = {
|
|
|
203
203
|
lastFundingRateTs: BN;
|
|
204
204
|
lastMarkPriceTwap: BN;
|
|
205
205
|
lastMarkPriceTwapTs: BN;
|
|
206
|
+
lastOraclePriceTwap: BN;
|
|
207
|
+
lastOraclePriceTwapTs: BN;
|
|
206
208
|
oracle: PublicKey;
|
|
207
209
|
oracleSource: OracleSource;
|
|
208
210
|
fundingPeriod: BN;
|
|
@@ -222,6 +224,9 @@ export declare type UserPosition = {
|
|
|
222
224
|
lastCumulativeFundingRate: BN;
|
|
223
225
|
marketIndex: BN;
|
|
224
226
|
quoteAssetAmount: BN;
|
|
227
|
+
unrealizedPnl?: BN;
|
|
228
|
+
unrealizedFundingPnl?: BN;
|
|
229
|
+
baseAssetValue?: BN;
|
|
225
230
|
};
|
|
226
231
|
export declare type UserPositionsAccount = {
|
|
227
232
|
positions: UserPosition[];
|
|
@@ -234,50 +239,16 @@ export declare type UserAccount = {
|
|
|
234
239
|
positions: PublicKey;
|
|
235
240
|
totalFeePaid: BN;
|
|
236
241
|
};
|
|
237
|
-
export
|
|
238
|
-
|
|
239
|
-
beforePrice: number;
|
|
240
|
-
afterPrice: number;
|
|
241
|
-
side: TradeSide;
|
|
242
|
-
size: number;
|
|
243
|
-
ts: number;
|
|
244
|
-
fee: number;
|
|
245
|
-
marketIndex: number;
|
|
246
|
-
chainTs: number;
|
|
247
|
-
}
|
|
248
|
-
export declare type Liquidation = {
|
|
249
|
-
ts: number;
|
|
250
|
-
chainTs: number;
|
|
251
|
-
recordId: number;
|
|
242
|
+
export declare type UserSnapshotRecord = {
|
|
243
|
+
ts: BN;
|
|
252
244
|
userAuthority: PublicKey;
|
|
253
245
|
user: PublicKey;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
feeToInsuranceFund: number;
|
|
260
|
-
liquidator: PublicKey;
|
|
261
|
-
totalCollateral: number;
|
|
262
|
-
collateral: number;
|
|
263
|
-
unrealizedPnl: number;
|
|
264
|
-
marginRatio: number;
|
|
265
|
-
};
|
|
266
|
-
export declare type Candle = {
|
|
267
|
-
open: number;
|
|
268
|
-
close: number;
|
|
269
|
-
high: number;
|
|
270
|
-
low: number;
|
|
271
|
-
volume: number;
|
|
272
|
-
start: number;
|
|
273
|
-
end: number;
|
|
246
|
+
userPositions: UserPosition[];
|
|
247
|
+
userTotalRealizedPnl: BN;
|
|
248
|
+
userTotalUnrealizedPnl: BN;
|
|
249
|
+
userTotalUnrealizedFundingPnl: BN;
|
|
250
|
+
userCollateral: BN;
|
|
274
251
|
};
|
|
275
|
-
export interface FundingPayment {
|
|
276
|
-
userPublicKey: string;
|
|
277
|
-
ts: number;
|
|
278
|
-
marketIndex: number;
|
|
279
|
-
amount: string;
|
|
280
|
-
}
|
|
281
252
|
export interface IWallet {
|
|
282
253
|
signTransaction(tx: Transaction): Promise<Transaction>;
|
|
283
254
|
signAllTransactions(txs: Transaction[]): Promise<Transaction[]>;
|
|
@@ -327,3 +298,4 @@ export declare type OracleGuardRails = {
|
|
|
327
298
|
};
|
|
328
299
|
useForLiquidations: boolean;
|
|
329
300
|
};
|
|
301
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drift-labs/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"author": "crispheaney",
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
"scripts": {
|
|
13
13
|
"build": "yarn clean && tsc",
|
|
14
14
|
"clean": "rm -rf lib",
|
|
15
|
-
"patch-and-pub": "npm version patch --force && npm publish"
|
|
15
|
+
"patch-and-pub": "npm version patch --force && npm publish",
|
|
16
|
+
"prettify": "prettier --write './src/**/*.{ts,tsx}'",
|
|
17
|
+
"lint": "eslint . --ext ts --ext tsx --ext js --quiet"
|
|
16
18
|
},
|
|
17
19
|
"keywords": [
|
|
18
20
|
"drift-labs",
|
|
@@ -34,6 +36,14 @@
|
|
|
34
36
|
"@types/bn.js": "^5.1.0",
|
|
35
37
|
"strict-event-emitter-types": "^2.0.0"
|
|
36
38
|
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@typescript-eslint/eslint-plugin": "^4.28.0",
|
|
41
|
+
"@typescript-eslint/parser": "^4.28.0",
|
|
42
|
+
"eslint": "^7.29.0",
|
|
43
|
+
"eslint-config-prettier": "^8.3.0",
|
|
44
|
+
"eslint-plugin-prettier": "^3.4.0",
|
|
45
|
+
"prettier": "^2.4.1"
|
|
46
|
+
},
|
|
37
47
|
"description": "SDK for Drift Protocol v1",
|
|
38
48
|
"engines": {
|
|
39
49
|
"node": ">=12"
|
package/src/clearingHouseUser.ts
CHANGED
|
@@ -145,30 +145,32 @@ export class ClearingHouseUser {
|
|
|
145
145
|
* calculates unrealized position price pnl
|
|
146
146
|
* @returns : Precision QUOTE_PRECISION
|
|
147
147
|
*/
|
|
148
|
-
public getUnrealizedPNL(withFunding?: boolean): BN {
|
|
149
|
-
return this.getUserPositionsAccount()
|
|
150
|
-
(
|
|
148
|
+
public getUnrealizedPNL(withFunding?: boolean, marketIndex?: BN): BN {
|
|
149
|
+
return this.getUserPositionsAccount()
|
|
150
|
+
.positions.filter((pos) =>
|
|
151
|
+
marketIndex ? pos.marketIndex === marketIndex : true
|
|
152
|
+
)
|
|
153
|
+
.reduce((pnl, marketPosition) => {
|
|
151
154
|
const market = this.clearingHouse.getMarket(marketPosition.marketIndex);
|
|
152
155
|
return pnl.add(
|
|
153
156
|
calculatePositionPNL(market, marketPosition, withFunding)
|
|
154
157
|
);
|
|
155
|
-
},
|
|
156
|
-
ZERO
|
|
157
|
-
);
|
|
158
|
+
}, ZERO);
|
|
158
159
|
}
|
|
159
160
|
|
|
160
161
|
/**
|
|
161
162
|
* calculates unrealized funding payment pnl
|
|
162
163
|
* @returns : Precision QUOTE_PRECISION
|
|
163
164
|
*/
|
|
164
|
-
public getUnrealizedFundingPNL(): BN {
|
|
165
|
-
return this.getUserPositionsAccount()
|
|
166
|
-
(
|
|
165
|
+
public getUnrealizedFundingPNL(marketIndex?: BN): BN {
|
|
166
|
+
return this.getUserPositionsAccount()
|
|
167
|
+
.positions.filter((pos) =>
|
|
168
|
+
marketIndex ? pos.marketIndex === marketIndex : true
|
|
169
|
+
)
|
|
170
|
+
.reduce((pnl, marketPosition) => {
|
|
167
171
|
const market = this.clearingHouse.getMarket(marketPosition.marketIndex);
|
|
168
172
|
return pnl.add(calculatePositionFundingPNL(market, marketPosition));
|
|
169
|
-
},
|
|
170
|
-
ZERO
|
|
171
|
-
);
|
|
173
|
+
}, ZERO);
|
|
172
174
|
}
|
|
173
175
|
|
|
174
176
|
/**
|
|
@@ -224,11 +226,14 @@ export class ClearingHouseUser {
|
|
|
224
226
|
* calculates average exit price for closing 100% of position
|
|
225
227
|
* @returns : Precision MARK_PRICE_PRECISION
|
|
226
228
|
*/
|
|
227
|
-
public getPositionEstimatedExitPrice(
|
|
229
|
+
public getPositionEstimatedExitPrice(
|
|
230
|
+
position: UserPosition,
|
|
231
|
+
amountToClose?: BN
|
|
232
|
+
): BN {
|
|
228
233
|
const market = this.clearingHouse.getMarket(position.marketIndex);
|
|
229
234
|
|
|
230
|
-
if(amountToClose){
|
|
231
|
-
if(amountToClose.eq(ZERO)){
|
|
235
|
+
if (amountToClose) {
|
|
236
|
+
if (amountToClose.eq(ZERO)) {
|
|
232
237
|
return calculateMarkPrice(market);
|
|
233
238
|
}
|
|
234
239
|
position = {
|
|
@@ -408,23 +413,21 @@ export class ClearingHouseUser {
|
|
|
408
413
|
);
|
|
409
414
|
|
|
410
415
|
// if the position value after the trade is less than total collateral, there is no liq price
|
|
411
|
-
if (
|
|
416
|
+
if (
|
|
417
|
+
targetTotalPositionValueUSDC.lte(totalCollateralUSDC) &&
|
|
418
|
+
proposedMarketPosition.baseAssetAmount.gt(ZERO)
|
|
419
|
+
) {
|
|
412
420
|
return new BN(-1);
|
|
413
421
|
}
|
|
414
422
|
|
|
415
|
-
// proportion of proposed market position to overall position
|
|
416
|
-
// const marketProportion = proposedMarketPositionValueUSDC
|
|
417
|
-
// .mul(TEN_THOUSAND)
|
|
418
|
-
// .div(targetTotalPositionValueUSDC);
|
|
419
|
-
|
|
420
423
|
// get current margin ratio based on current collateral and proposed total position value
|
|
421
424
|
let marginRatio;
|
|
422
|
-
if (
|
|
425
|
+
if (proposedMarketPositionValueUSDC.eq(ZERO)) {
|
|
423
426
|
marginRatio = BN_MAX;
|
|
424
427
|
} else {
|
|
425
428
|
marginRatio = totalCollateralUSDC
|
|
426
429
|
.mul(TEN_THOUSAND)
|
|
427
|
-
.div(
|
|
430
|
+
.div(proposedMarketPositionValueUSDC);
|
|
428
431
|
}
|
|
429
432
|
|
|
430
433
|
let liqRatio = FULL_LIQUIDATION_RATIO;
|
|
@@ -435,29 +438,6 @@ export class ClearingHouseUser {
|
|
|
435
438
|
// sign of position in current market after the trade
|
|
436
439
|
const baseAssetSignIsNeg = proposedMarketPosition.baseAssetAmount.isNeg();
|
|
437
440
|
|
|
438
|
-
// console.log(
|
|
439
|
-
// convertToNumber(currentPrice),
|
|
440
|
-
// convertToNumber(liqRatio),
|
|
441
|
-
// convertToNumber(marginRatio),
|
|
442
|
-
// convertToNumber(marketProportion),
|
|
443
|
-
// );
|
|
444
|
-
|
|
445
|
-
// // if the user is long, then the liq price is the currentPrice multiplied by liqRatio/marginRatio (how many multiples lower does the current marginRatio have to go to reach the liqRatio), multiplied by the fraction of the proposed total position value that this market will take up
|
|
446
|
-
// if (!baseAssetSignIsNeg) {
|
|
447
|
-
// liqPrice = currentPrice
|
|
448
|
-
// .mul(liqRatio)
|
|
449
|
-
// .div(marginRatio)
|
|
450
|
-
// .mul(marketProportion)
|
|
451
|
-
// .div(TEN_THOUSAND);
|
|
452
|
-
// } else {
|
|
453
|
-
// // if the user is short, it's the reciprocal of the above
|
|
454
|
-
// liqPrice = currentPrice
|
|
455
|
-
// .mul(marginRatio)
|
|
456
|
-
// .div(liqRatio)
|
|
457
|
-
// .mul(TEN_THOUSAND)
|
|
458
|
-
// .div(marketProportion);
|
|
459
|
-
// }
|
|
460
|
-
|
|
461
441
|
let pctChange = marginRatio.abs().sub(liqRatio);
|
|
462
442
|
// if user is short, higher price is liq
|
|
463
443
|
if (baseAssetSignIsNeg) {
|
package/src/constants/markets.ts
CHANGED
|
@@ -30,11 +30,25 @@ export const Markets: Market[] = [
|
|
|
30
30
|
devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
|
|
31
31
|
mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
|
|
32
32
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
{
|
|
34
|
+
symbol: 'LUNA-PERP',
|
|
35
|
+
baseAssetSymbol: 'LUNA',
|
|
36
|
+
marketIndex: new BN(3),
|
|
37
|
+
devnetPythOracle: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
|
|
38
|
+
mainnetPythOracle: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
symbol: 'AVAX-PERP',
|
|
42
|
+
baseAssetSymbol: 'AVAX',
|
|
43
|
+
marketIndex: new BN(4),
|
|
44
|
+
devnetPythOracle: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
|
|
45
|
+
mainnetPythOracle: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
symbol: 'BNB-PERP',
|
|
49
|
+
baseAssetSymbol: 'BNB',
|
|
50
|
+
marketIndex: new BN(5),
|
|
51
|
+
devnetPythOracle: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
|
|
52
|
+
mainnetPythOracle: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
|
|
53
|
+
},
|
|
40
54
|
];
|
|
@@ -2140,7 +2140,7 @@
|
|
|
2140
2140
|
"type": "i64"
|
|
2141
2141
|
},
|
|
2142
2142
|
{
|
|
2143
|
-
"name": "
|
|
2143
|
+
"name": "lastOraclePriceTwap",
|
|
2144
2144
|
"type": "i128"
|
|
2145
2145
|
},
|
|
2146
2146
|
{
|
|
@@ -2175,9 +2175,13 @@
|
|
|
2175
2175
|
"name": "minimumTradeSize",
|
|
2176
2176
|
"type": "u128"
|
|
2177
2177
|
},
|
|
2178
|
+
{
|
|
2179
|
+
"name": "lastOraclePriceTwapTs",
|
|
2180
|
+
"type": "i64"
|
|
2181
|
+
},
|
|
2178
2182
|
{
|
|
2179
2183
|
"name": "padding0",
|
|
2180
|
-
"type": "
|
|
2184
|
+
"type": "u64"
|
|
2181
2185
|
},
|
|
2182
2186
|
{
|
|
2183
2187
|
"name": "padding1",
|