@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.
@@ -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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"}
@@ -413,16 +413,16 @@ class ClearingHouseUser {
413
413
  }
414
414
  let priceDelt;
415
415
  if (proposedBaseAssetAmount.lt(numericConstants_1.ZERO)) {
416
- priceDelt = (tc
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 = (tc
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) ? _1.PositionDirection.LONG : _1.PositionDirection.SHORT;
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
@@ -5,6 +5,7 @@ declare type Market = {
5
5
  marketIndex: BN;
6
6
  devnetPythOracle: string;
7
7
  mainnetPythOracle: string;
8
+ launchTs: number;
8
9
  };
9
10
  export declare const Markets: Market[];
10
11
  export {};
@@ -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;CAC1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,MAAM,EAgE3B,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"}
@@ -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 slippage = __2.convertToNumber(__2.calculateTradeSlippage(__2.PositionDirection.LONG, new anchor_1.BN(5000).mul(__2.QUOTE_PRECISION), solMarketAccount)[0], __2.MARK_PRICE_PRECISION);
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, new anchor_1.BN(5000).mul(__2.QUOTE_PRECISION), solMarketInfo.marketIndex);
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
- yield clearingHouse.openPosition(__2.PositionDirection.SHORT, new anchor_1.BN(2000).mul(__2.QUOTE_PRECISION), solMarketInfo.marketIndex);
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
  });
@@ -22,18 +22,16 @@ export declare function calculateEstimatedFundingRate(market: Market, oraclePric
22
22
  /**
23
23
  *
24
24
  * @param market
25
- * @param pythClient
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 pythClient
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;;;;;;;GAOG;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;;;;;;;GAOG;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,CAKvD"}
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"}
@@ -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 = markTwapWithMantissa.sub(oracleTwapWithMantissa);
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 pythClient
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 pythClient
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.16",
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.4.0",
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",
@@ -579,34 +579,35 @@ export class ClearingHouseUser {
579
579
 
580
580
  let priceDelt;
581
581
  if (proposedBaseAssetAmount.lt(ZERO)) {
582
- priceDelt = (tc
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 = (tc
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) ? PositionDirection.LONG : PositionDirection.SHORT;
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
 
@@ -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
- new BN(5000).mul(QUOTE_PRECISION),
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
- new BN(5000).mul(QUOTE_PRECISION),
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
- new BN(2000).mul(QUOTE_PRECISION),
131
+ reduceAmount,
138
132
  solMarketInfo.marketIndex
139
133
  );
140
134
 
@@ -99,7 +99,7 @@ export async function calculateAllEstimatedFundingRate(
99
99
  .div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
100
100
  }
101
101
 
102
- const twapSpread = markTwapWithMantissa.sub(oracleTwapWithMantissa);
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 pythClient
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 pythClient
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 = market.amm.totalFeeMinusDistributions.sub(totalFeeLB);
290
+ const feePool = BN.max(
291
+ ZERO,
292
+ market.amm.totalFeeMinusDistributions.sub(totalFeeLB)
293
+ );
293
294
  return feePool;
294
295
  }