@drift-labs/sdk 0.1.16 → 0.1.17
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/lib/clearingHouseUser.d.ts.map +1 -1
- package/lib/clearingHouseUser.js +7 -5
- package/lib/constants/markets.d.ts +1 -0
- package/lib/constants/markets.d.ts.map +1 -1
- package/lib/constants/markets.js +17 -0
- package/lib/examples/makeTradeExample.js +5 -6
- package/lib/math/funding.d.ts +2 -4
- package/lib/math/funding.d.ts.map +1 -1
- package/lib/math/funding.js +4 -6
- package/package.json +2 -2
- package/src/clearingHouseUser.ts +11 -10
- package/src/constants/markets.ts +18 -0
- package/src/examples/makeTradeExample.ts +5 -11
- package/src/math/funding.ts +7 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"clearingHouseUser.d.ts","sourceRoot":"","sources":["../src/clearingHouseUser.ts"],"names":[],"mappings":"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"}
|
package/lib/clearingHouseUser.js
CHANGED
|
@@ -413,16 +413,16 @@ class ClearingHouseUser {
|
|
|
413
413
|
}
|
|
414
414
|
let priceDelt;
|
|
415
415
|
if (proposedBaseAssetAmount.lt(numericConstants_1.ZERO)) {
|
|
416
|
-
priceDelt =
|
|
416
|
+
priceDelt = tc
|
|
417
417
|
.mul(thisLev)
|
|
418
|
-
.sub(tpv)
|
|
418
|
+
.sub(tpv)
|
|
419
419
|
.mul(numericConstants_1.PRICE_TO_QUOTE_PRECISION)
|
|
420
420
|
.div(thisLev.add(new bn_js_1.default(1)));
|
|
421
421
|
}
|
|
422
422
|
else {
|
|
423
|
-
priceDelt =
|
|
423
|
+
priceDelt = tc
|
|
424
424
|
.mul(thisLev)
|
|
425
|
-
.sub(tpv)
|
|
425
|
+
.sub(tpv)
|
|
426
426
|
.mul(numericConstants_1.PRICE_TO_QUOTE_PRECISION)
|
|
427
427
|
.div(thisLev.sub(new bn_js_1.default(1)));
|
|
428
428
|
}
|
|
@@ -431,7 +431,9 @@ class ClearingHouseUser {
|
|
|
431
431
|
currentPrice = _1.calculateMarkPrice(this.clearingHouse.getMarket(targetMarket.marketIndex));
|
|
432
432
|
}
|
|
433
433
|
else {
|
|
434
|
-
const direction = positionBaseSizeChange.gt(numericConstants_1.ZERO)
|
|
434
|
+
const direction = positionBaseSizeChange.gt(numericConstants_1.ZERO)
|
|
435
|
+
? _1.PositionDirection.LONG
|
|
436
|
+
: _1.PositionDirection.SHORT;
|
|
435
437
|
currentPrice = _1.calculateTradeSlippage(direction, positionBaseSizeChange.abs(), this.clearingHouse.getMarket(targetMarket.marketIndex), 'base')[3]; // newPrice after swap
|
|
436
438
|
}
|
|
437
439
|
// if the position value after the trade is less than total collateral, there is no liq price
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../src/constants/markets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,aAAK,MAAM,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"markets.d.ts","sourceRoot":"","sources":["../../src/constants/markets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,aAAK,MAAM,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,EAAE,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAAM,EAiF3B,CAAC"}
|
package/lib/constants/markets.js
CHANGED
|
@@ -12,6 +12,7 @@ exports.Markets = [
|
|
|
12
12
|
marketIndex: new bn_js_1.default(0),
|
|
13
13
|
devnetPythOracle: 'J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix',
|
|
14
14
|
mainnetPythOracle: 'H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG',
|
|
15
|
+
launchTs: 1635209696886,
|
|
15
16
|
},
|
|
16
17
|
{
|
|
17
18
|
symbol: 'BTC-PERP',
|
|
@@ -19,6 +20,7 @@ exports.Markets = [
|
|
|
19
20
|
marketIndex: new bn_js_1.default(1),
|
|
20
21
|
devnetPythOracle: 'HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J',
|
|
21
22
|
mainnetPythOracle: 'GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU',
|
|
23
|
+
launchTs: 1637691088868,
|
|
22
24
|
},
|
|
23
25
|
{
|
|
24
26
|
symbol: 'ETH-PERP',
|
|
@@ -26,6 +28,7 @@ exports.Markets = [
|
|
|
26
28
|
marketIndex: new bn_js_1.default(2),
|
|
27
29
|
devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
|
|
28
30
|
mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
|
|
31
|
+
launchTs: 1637691133472,
|
|
29
32
|
},
|
|
30
33
|
{
|
|
31
34
|
symbol: 'LUNA-PERP',
|
|
@@ -33,6 +36,7 @@ exports.Markets = [
|
|
|
33
36
|
marketIndex: new bn_js_1.default(3),
|
|
34
37
|
devnetPythOracle: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
|
|
35
38
|
mainnetPythOracle: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
|
|
39
|
+
launchTs: 1638821738525,
|
|
36
40
|
},
|
|
37
41
|
{
|
|
38
42
|
symbol: 'AVAX-PERP',
|
|
@@ -40,6 +44,7 @@ exports.Markets = [
|
|
|
40
44
|
marketIndex: new bn_js_1.default(4),
|
|
41
45
|
devnetPythOracle: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
|
|
42
46
|
mainnetPythOracle: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
|
|
47
|
+
launchTs: 1639092501080,
|
|
43
48
|
},
|
|
44
49
|
{
|
|
45
50
|
symbol: 'BNB-PERP',
|
|
@@ -47,6 +52,7 @@ exports.Markets = [
|
|
|
47
52
|
marketIndex: new bn_js_1.default(5),
|
|
48
53
|
devnetPythOracle: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
|
|
49
54
|
mainnetPythOracle: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
|
|
55
|
+
launchTs: 1639523193012,
|
|
50
56
|
},
|
|
51
57
|
{
|
|
52
58
|
symbol: 'MATIC-PERP',
|
|
@@ -54,6 +60,7 @@ exports.Markets = [
|
|
|
54
60
|
marketIndex: new bn_js_1.default(6),
|
|
55
61
|
devnetPythOracle: 'FBirwuDFuRAu4iSGc7RGxN5koHB7EJM1wbCmyPuQoGur',
|
|
56
62
|
mainnetPythOracle: '7KVswB9vkCgeM3SHP7aGDijvdRAHK8P5wi9JXViCrtYh',
|
|
63
|
+
launchTs: 1641488603564,
|
|
57
64
|
},
|
|
58
65
|
{
|
|
59
66
|
symbol: 'ATOM-PERP',
|
|
@@ -61,6 +68,7 @@ exports.Markets = [
|
|
|
61
68
|
marketIndex: new bn_js_1.default(7),
|
|
62
69
|
devnetPythOracle: '7YAze8qFUMkBnyLVdKT4TFUUFui99EwS5gfRArMcrvFk',
|
|
63
70
|
mainnetPythOracle: 'CrCpTerNqtZvqLcKqz1k13oVeXV9WkMD2zA9hBKXrsbN',
|
|
71
|
+
launchTs: 1641920238195,
|
|
64
72
|
},
|
|
65
73
|
{
|
|
66
74
|
symbol: 'DOT-PERP',
|
|
@@ -68,5 +76,14 @@ exports.Markets = [
|
|
|
68
76
|
marketIndex: new bn_js_1.default(8),
|
|
69
77
|
devnetPythOracle: '4dqq5VBpN4EwYb7wyywjjfknvMKu7m78j9mKZRXTj462',
|
|
70
78
|
mainnetPythOracle: 'EcV1X1gY2yb4KXxjVQtTHTbioum2gvmPnFk4zYAt7zne',
|
|
79
|
+
launchTs: 1642629253786,
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
symbol: 'ADA-PERP',
|
|
83
|
+
baseAssetSymbol: 'ADA',
|
|
84
|
+
marketIndex: new bn_js_1.default(9),
|
|
85
|
+
devnetPythOracle: '8oGTURNmSQkrBS1AQ5NjB2p8qY34UVmMA9ojrw8vnHus',
|
|
86
|
+
mainnetPythOracle: '3pyn4svBbxJ9Wnn3RVeafyLWfzie6yC5eTig2S62v9SC',
|
|
87
|
+
launchTs: 1643084413000,
|
|
71
88
|
},
|
|
72
89
|
];
|
|
@@ -57,16 +57,15 @@ const main = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
57
57
|
console.log(`Current Market Price is $${formattedPrice}`);
|
|
58
58
|
// Estimate the slippage for a $5000 LONG trade
|
|
59
59
|
const solMarketAccount = clearingHouse.getMarket(solMarketInfo.marketIndex);
|
|
60
|
-
const
|
|
60
|
+
const longAmount = new anchor_1.BN(5000).mul(__2.QUOTE_PRECISION);
|
|
61
|
+
const slippage = __2.convertToNumber(__2.calculateTradeSlippage(__2.PositionDirection.LONG, longAmount, solMarketAccount)[0], __2.MARK_PRICE_PRECISION);
|
|
61
62
|
console.log(`Slippage for a $5000 LONG on the SOL market would be $${slippage}`);
|
|
62
63
|
// Make a $5000 LONG trade
|
|
63
|
-
yield clearingHouse.openPosition(__2.PositionDirection.LONG,
|
|
64
|
+
yield clearingHouse.openPosition(__2.PositionDirection.LONG, longAmount, solMarketInfo.marketIndex);
|
|
64
65
|
console.log(`LONGED $5000 SOL`);
|
|
65
|
-
// Make a $5000 LONG trade
|
|
66
|
-
yield clearingHouse.openPosition(__2.PositionDirection.LONG, new anchor_1.BN(5000).mul(__2.QUOTE_PRECISION), solMarketInfo.marketIndex);
|
|
67
|
-
console.log(`LONGED $5000 worth of SOL`);
|
|
68
66
|
// Reduce the position by $2000
|
|
69
|
-
|
|
67
|
+
const reduceAmount = new anchor_1.BN(2000).mul(__2.QUOTE_PRECISION);
|
|
68
|
+
yield clearingHouse.openPosition(__2.PositionDirection.SHORT, reduceAmount, solMarketInfo.marketIndex);
|
|
70
69
|
// Close the rest of the position
|
|
71
70
|
yield clearingHouse.closePosition(solMarketInfo.marketIndex);
|
|
72
71
|
});
|
package/lib/math/funding.d.ts
CHANGED
|
@@ -22,18 +22,16 @@ export declare function calculateEstimatedFundingRate(market: Market, oraclePric
|
|
|
22
22
|
/**
|
|
23
23
|
*
|
|
24
24
|
* @param market
|
|
25
|
-
* @param
|
|
25
|
+
* @param oraclePriceData
|
|
26
26
|
* @param periodAdjustment
|
|
27
|
-
* @param estimationMethod
|
|
28
27
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
29
28
|
*/
|
|
30
29
|
export declare function calculateLongShortFundingRate(market: Market, oraclePriceData: PriceData, periodAdjustment?: BN): Promise<[BN, BN]>;
|
|
31
30
|
/**
|
|
32
31
|
*
|
|
33
32
|
* @param market
|
|
34
|
-
* @param
|
|
33
|
+
* @param oraclePriceData
|
|
35
34
|
* @param periodAdjustment
|
|
36
|
-
* @param estimationMethod
|
|
37
35
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
38
36
|
*/
|
|
39
37
|
export declare function calculateLongShortFundingRateAndLiveTwaps(market: Market, oraclePriceData: PriceData, periodAdjustment?: BN): Promise<[BN, BN, BN, BN]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../src/math/funding.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACrD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,EAC1B,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CA0K/B;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,EAC1B,gBAAgB,EAAE,EAAc,EAChC,gBAAgB,EAAE,cAAc,GAAG,YAAY,GAAG,QAAQ,GACxD,OAAO,CAAC,EAAE,CAAC,CAgBb;AAED
|
|
1
|
+
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../src/math/funding.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAOhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;GAMG;AACH,wBAAsB,gCAAgC,CACrD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,EAC1B,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CA0K/B;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,EAC1B,gBAAgB,EAAE,EAAc,EAChC,gBAAgB,EAAE,cAAc,GAAG,YAAY,GAAG,QAAQ,GACxD,OAAO,CAAC,EAAE,CAAC,CAgBb;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CAClD,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,EAC1B,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAenB;AAED;;;;;;GAMG;AACH,wBAAsB,yCAAyC,CAC9D,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,EAC1B,gBAAgB,GAAE,EAAc,GAC9B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAe3B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAQvD"}
|
package/lib/math/funding.js
CHANGED
|
@@ -78,7 +78,7 @@ function calculateAllEstimatedFundingRate(market, oraclePriceData, periodAdjustm
|
|
|
78
78
|
.add(timeSinceLastMarkChange.mul(oraclePriceStableWithMantissa))
|
|
79
79
|
.div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
|
|
80
80
|
}
|
|
81
|
-
const twapSpread =
|
|
81
|
+
const twapSpread = lastMarkTwapWithMantissa.sub(lastOracleTwapWithMantissa);
|
|
82
82
|
const twapSpreadPct = twapSpread
|
|
83
83
|
.mul(numericConstants_1.MARK_PRICE_PRECISION)
|
|
84
84
|
.mul(new anchor_1.BN(100))
|
|
@@ -193,9 +193,8 @@ exports.calculateEstimatedFundingRate = calculateEstimatedFundingRate;
|
|
|
193
193
|
/**
|
|
194
194
|
*
|
|
195
195
|
* @param market
|
|
196
|
-
* @param
|
|
196
|
+
* @param oraclePriceData
|
|
197
197
|
* @param periodAdjustment
|
|
198
|
-
* @param estimationMethod
|
|
199
198
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
200
199
|
*/
|
|
201
200
|
function calculateLongShortFundingRate(market, oraclePriceData, periodAdjustment = new anchor_1.BN(1)) {
|
|
@@ -216,9 +215,8 @@ exports.calculateLongShortFundingRate = calculateLongShortFundingRate;
|
|
|
216
215
|
/**
|
|
217
216
|
*
|
|
218
217
|
* @param market
|
|
219
|
-
* @param
|
|
218
|
+
* @param oraclePriceData
|
|
220
219
|
* @param periodAdjustment
|
|
221
|
-
* @param estimationMethod
|
|
222
220
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
223
221
|
*/
|
|
224
222
|
function calculateLongShortFundingRateAndLiveTwaps(market, oraclePriceData, periodAdjustment = new anchor_1.BN(1)) {
|
|
@@ -244,7 +242,7 @@ exports.calculateLongShortFundingRateAndLiveTwaps = calculateLongShortFundingRat
|
|
|
244
242
|
function calculateFundingPool(market) {
|
|
245
243
|
// todo
|
|
246
244
|
const totalFeeLB = market.amm.totalFee.div(new anchor_1.BN(2));
|
|
247
|
-
const feePool = market.amm.totalFeeMinusDistributions.sub(totalFeeLB);
|
|
245
|
+
const feePool = anchor_1.BN.max(numericConstants_1.ZERO, market.amm.totalFeeMinusDistributions.sub(totalFeeLB));
|
|
248
246
|
return feePool;
|
|
249
247
|
}
|
|
250
248
|
exports.calculateFundingPool = calculateFundingPool;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drift-labs/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"main": "lib/index.js",
|
|
5
5
|
"types": "lib/index.d.ts",
|
|
6
6
|
"author": "crispheaney",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@project-serum/anchor": "0.19.1-beta.1",
|
|
31
|
-
"@pythnetwork/client": "^2.
|
|
31
|
+
"@pythnetwork/client": "^2.5.1",
|
|
32
32
|
"@solana/spl-token": "^0.1.6",
|
|
33
33
|
"@solana/web3.js": "^1.22.0",
|
|
34
34
|
"@types/bn.js": "^5.1.0",
|
package/src/clearingHouseUser.ts
CHANGED
|
@@ -579,34 +579,35 @@ export class ClearingHouseUser {
|
|
|
579
579
|
|
|
580
580
|
let priceDelt;
|
|
581
581
|
if (proposedBaseAssetAmount.lt(ZERO)) {
|
|
582
|
-
priceDelt =
|
|
582
|
+
priceDelt = tc
|
|
583
583
|
.mul(thisLev)
|
|
584
|
-
.sub(tpv)
|
|
584
|
+
.sub(tpv)
|
|
585
585
|
.mul(PRICE_TO_QUOTE_PRECISION)
|
|
586
586
|
.div(thisLev.add(new BN(1)));
|
|
587
587
|
} else {
|
|
588
|
-
priceDelt =
|
|
588
|
+
priceDelt = tc
|
|
589
589
|
.mul(thisLev)
|
|
590
|
-
.sub(tpv)
|
|
590
|
+
.sub(tpv)
|
|
591
591
|
.mul(PRICE_TO_QUOTE_PRECISION)
|
|
592
592
|
.div(thisLev.sub(new BN(1)));
|
|
593
593
|
}
|
|
594
594
|
|
|
595
595
|
let currentPrice;
|
|
596
|
-
if(positionBaseSizeChange.eq(ZERO)){
|
|
596
|
+
if (positionBaseSizeChange.eq(ZERO)) {
|
|
597
597
|
currentPrice = calculateMarkPrice(
|
|
598
598
|
this.clearingHouse.getMarket(targetMarket.marketIndex)
|
|
599
599
|
);
|
|
600
|
-
} else{
|
|
601
|
-
const direction = positionBaseSizeChange.gt(ZERO)
|
|
600
|
+
} else {
|
|
601
|
+
const direction = positionBaseSizeChange.gt(ZERO)
|
|
602
|
+
? PositionDirection.LONG
|
|
603
|
+
: PositionDirection.SHORT;
|
|
602
604
|
currentPrice = calculateTradeSlippage(
|
|
603
605
|
direction,
|
|
604
606
|
positionBaseSizeChange.abs(),
|
|
605
607
|
this.clearingHouse.getMarket(targetMarket.marketIndex),
|
|
606
|
-
'base'
|
|
608
|
+
'base'
|
|
607
609
|
)[3]; // newPrice after swap
|
|
608
610
|
}
|
|
609
|
-
|
|
610
611
|
|
|
611
612
|
// if the position value after the trade is less than total collateral, there is no liq price
|
|
612
613
|
if (
|
|
@@ -622,7 +623,7 @@ export class ClearingHouseUser {
|
|
|
622
623
|
.mul(AMM_RESERVE_PRECISION)
|
|
623
624
|
.div(proposedBaseAssetAmount);
|
|
624
625
|
|
|
625
|
-
if(eatMargin2.gt(currentPrice)){
|
|
626
|
+
if (eatMargin2.gt(currentPrice)) {
|
|
626
627
|
return new BN(-1);
|
|
627
628
|
}
|
|
628
629
|
|
package/src/constants/markets.ts
CHANGED
|
@@ -6,6 +6,7 @@ type Market = {
|
|
|
6
6
|
marketIndex: BN;
|
|
7
7
|
devnetPythOracle: string;
|
|
8
8
|
mainnetPythOracle: string;
|
|
9
|
+
launchTs: number;
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
export const Markets: Market[] = [
|
|
@@ -15,6 +16,7 @@ export const Markets: Market[] = [
|
|
|
15
16
|
marketIndex: new BN(0),
|
|
16
17
|
devnetPythOracle: 'J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix',
|
|
17
18
|
mainnetPythOracle: 'H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG',
|
|
19
|
+
launchTs: 1635209696886,
|
|
18
20
|
},
|
|
19
21
|
{
|
|
20
22
|
symbol: 'BTC-PERP',
|
|
@@ -22,6 +24,7 @@ export const Markets: Market[] = [
|
|
|
22
24
|
marketIndex: new BN(1),
|
|
23
25
|
devnetPythOracle: 'HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J',
|
|
24
26
|
mainnetPythOracle: 'GVXRSBjFk6e6J3NbVPXohDJetcTjaeeuykUpbQF8UoMU',
|
|
27
|
+
launchTs: 1637691088868,
|
|
25
28
|
},
|
|
26
29
|
{
|
|
27
30
|
symbol: 'ETH-PERP',
|
|
@@ -29,6 +32,7 @@ export const Markets: Market[] = [
|
|
|
29
32
|
marketIndex: new BN(2),
|
|
30
33
|
devnetPythOracle: 'EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw',
|
|
31
34
|
mainnetPythOracle: 'JBu1AL4obBcCMqKBBxhpWCNUt136ijcuMZLFvTP7iWdB',
|
|
35
|
+
launchTs: 1637691133472,
|
|
32
36
|
},
|
|
33
37
|
{
|
|
34
38
|
symbol: 'LUNA-PERP',
|
|
@@ -36,6 +40,7 @@ export const Markets: Market[] = [
|
|
|
36
40
|
marketIndex: new BN(3),
|
|
37
41
|
devnetPythOracle: '8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3',
|
|
38
42
|
mainnetPythOracle: '5bmWuR1dgP4avtGYMNKLuxumZTVKGgoN2BCMXWDNL9nY',
|
|
43
|
+
launchTs: 1638821738525,
|
|
39
44
|
},
|
|
40
45
|
{
|
|
41
46
|
symbol: 'AVAX-PERP',
|
|
@@ -43,6 +48,7 @@ export const Markets: Market[] = [
|
|
|
43
48
|
marketIndex: new BN(4),
|
|
44
49
|
devnetPythOracle: 'FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz',
|
|
45
50
|
mainnetPythOracle: 'Ax9ujW5B9oqcv59N8m6f1BpTBq2rGeGaBcpKjC5UYsXU',
|
|
51
|
+
launchTs: 1639092501080,
|
|
46
52
|
},
|
|
47
53
|
{
|
|
48
54
|
symbol: 'BNB-PERP',
|
|
@@ -50,6 +56,7 @@ export const Markets: Market[] = [
|
|
|
50
56
|
marketIndex: new BN(5),
|
|
51
57
|
devnetPythOracle: 'GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b',
|
|
52
58
|
mainnetPythOracle: '4CkQJBxhU8EZ2UjhigbtdaPbpTe6mqf811fipYBFbSYN',
|
|
59
|
+
launchTs: 1639523193012,
|
|
53
60
|
},
|
|
54
61
|
{
|
|
55
62
|
symbol: 'MATIC-PERP',
|
|
@@ -57,6 +64,7 @@ export const Markets: Market[] = [
|
|
|
57
64
|
marketIndex: new BN(6),
|
|
58
65
|
devnetPythOracle: 'FBirwuDFuRAu4iSGc7RGxN5koHB7EJM1wbCmyPuQoGur',
|
|
59
66
|
mainnetPythOracle: '7KVswB9vkCgeM3SHP7aGDijvdRAHK8P5wi9JXViCrtYh',
|
|
67
|
+
launchTs: 1641488603564,
|
|
60
68
|
},
|
|
61
69
|
{
|
|
62
70
|
symbol: 'ATOM-PERP',
|
|
@@ -64,6 +72,7 @@ export const Markets: Market[] = [
|
|
|
64
72
|
marketIndex: new BN(7),
|
|
65
73
|
devnetPythOracle: '7YAze8qFUMkBnyLVdKT4TFUUFui99EwS5gfRArMcrvFk',
|
|
66
74
|
mainnetPythOracle: 'CrCpTerNqtZvqLcKqz1k13oVeXV9WkMD2zA9hBKXrsbN',
|
|
75
|
+
launchTs: 1641920238195,
|
|
67
76
|
},
|
|
68
77
|
{
|
|
69
78
|
symbol: 'DOT-PERP',
|
|
@@ -71,5 +80,14 @@ export const Markets: Market[] = [
|
|
|
71
80
|
marketIndex: new BN(8),
|
|
72
81
|
devnetPythOracle: '4dqq5VBpN4EwYb7wyywjjfknvMKu7m78j9mKZRXTj462',
|
|
73
82
|
mainnetPythOracle: 'EcV1X1gY2yb4KXxjVQtTHTbioum2gvmPnFk4zYAt7zne',
|
|
83
|
+
launchTs: 1642629253786,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
symbol: 'ADA-PERP',
|
|
87
|
+
baseAssetSymbol: 'ADA',
|
|
88
|
+
marketIndex: new BN(9),
|
|
89
|
+
devnetPythOracle: '8oGTURNmSQkrBS1AQ5NjB2p8qY34UVmMA9ojrw8vnHus',
|
|
90
|
+
mainnetPythOracle: '3pyn4svBbxJ9Wnn3RVeafyLWfzie6yC5eTig2S62v9SC',
|
|
91
|
+
launchTs: 1643084413000,
|
|
74
92
|
},
|
|
75
93
|
];
|
|
@@ -102,10 +102,11 @@ const main = async () => {
|
|
|
102
102
|
// Estimate the slippage for a $5000 LONG trade
|
|
103
103
|
const solMarketAccount = clearingHouse.getMarket(solMarketInfo.marketIndex);
|
|
104
104
|
|
|
105
|
+
const longAmount = new BN(5000).mul(QUOTE_PRECISION);
|
|
105
106
|
const slippage = convertToNumber(
|
|
106
107
|
calculateTradeSlippage(
|
|
107
108
|
PositionDirection.LONG,
|
|
108
|
-
|
|
109
|
+
longAmount,
|
|
109
110
|
solMarketAccount
|
|
110
111
|
)[0],
|
|
111
112
|
MARK_PRICE_PRECISION
|
|
@@ -118,23 +119,16 @@ const main = async () => {
|
|
|
118
119
|
// Make a $5000 LONG trade
|
|
119
120
|
await clearingHouse.openPosition(
|
|
120
121
|
PositionDirection.LONG,
|
|
121
|
-
|
|
122
|
+
longAmount,
|
|
122
123
|
solMarketInfo.marketIndex
|
|
123
124
|
);
|
|
124
125
|
console.log(`LONGED $5000 SOL`);
|
|
125
126
|
|
|
126
|
-
// Make a $5000 LONG trade
|
|
127
|
-
await clearingHouse.openPosition(
|
|
128
|
-
PositionDirection.LONG,
|
|
129
|
-
new BN(5000).mul(QUOTE_PRECISION),
|
|
130
|
-
solMarketInfo.marketIndex
|
|
131
|
-
);
|
|
132
|
-
console.log(`LONGED $5000 worth of SOL`);
|
|
133
|
-
|
|
134
127
|
// Reduce the position by $2000
|
|
128
|
+
const reduceAmount = new BN(2000).mul(QUOTE_PRECISION);
|
|
135
129
|
await clearingHouse.openPosition(
|
|
136
130
|
PositionDirection.SHORT,
|
|
137
|
-
|
|
131
|
+
reduceAmount,
|
|
138
132
|
solMarketInfo.marketIndex
|
|
139
133
|
);
|
|
140
134
|
|
package/src/math/funding.ts
CHANGED
|
@@ -99,7 +99,7 @@ export async function calculateAllEstimatedFundingRate(
|
|
|
99
99
|
.div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
const twapSpread =
|
|
102
|
+
const twapSpread = lastMarkTwapWithMantissa.sub(lastOracleTwapWithMantissa);
|
|
103
103
|
|
|
104
104
|
const twapSpreadPct = twapSpread
|
|
105
105
|
.mul(MARK_PRICE_PRECISION)
|
|
@@ -226,9 +226,8 @@ export async function calculateEstimatedFundingRate(
|
|
|
226
226
|
/**
|
|
227
227
|
*
|
|
228
228
|
* @param market
|
|
229
|
-
* @param
|
|
229
|
+
* @param oraclePriceData
|
|
230
230
|
* @param periodAdjustment
|
|
231
|
-
* @param estimationMethod
|
|
232
231
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
233
232
|
*/
|
|
234
233
|
export async function calculateLongShortFundingRate(
|
|
@@ -255,9 +254,8 @@ export async function calculateLongShortFundingRate(
|
|
|
255
254
|
/**
|
|
256
255
|
*
|
|
257
256
|
* @param market
|
|
258
|
-
* @param
|
|
257
|
+
* @param oraclePriceData
|
|
259
258
|
* @param periodAdjustment
|
|
260
|
-
* @param estimationMethod
|
|
261
259
|
* @returns Estimated funding rate. : Precision //TODO-PRECISION
|
|
262
260
|
*/
|
|
263
261
|
export async function calculateLongShortFundingRateAndLiveTwaps(
|
|
@@ -289,6 +287,9 @@ export async function calculateLongShortFundingRateAndLiveTwaps(
|
|
|
289
287
|
export function calculateFundingPool(market: Market): BN {
|
|
290
288
|
// todo
|
|
291
289
|
const totalFeeLB = market.amm.totalFee.div(new BN(2));
|
|
292
|
-
const feePool =
|
|
290
|
+
const feePool = BN.max(
|
|
291
|
+
ZERO,
|
|
292
|
+
market.amm.totalFeeMinusDistributions.sub(totalFeeLB)
|
|
293
|
+
);
|
|
293
294
|
return feePool;
|
|
294
295
|
}
|