@drift-labs/sdk 0.1.31 → 0.1.34-master.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.
Files changed (62) hide show
  1. package/lib/accounts/bulkAccountLoader.d.ts +1 -0
  2. package/lib/accounts/bulkAccountLoader.js +7 -0
  3. package/lib/admin.d.ts +1 -0
  4. package/lib/admin.js +11 -0
  5. package/lib/constants/markets.js +11 -0
  6. package/lib/constants/numericConstants.d.ts +2 -0
  7. package/lib/constants/numericConstants.js +3 -1
  8. package/lib/idl/clearing_house.json +40 -2
  9. package/lib/math/amm.d.ts +7 -2
  10. package/lib/math/amm.js +45 -6
  11. package/lib/math/funding.js +6 -2
  12. package/lib/math/market.d.ts +15 -0
  13. package/lib/math/market.js +29 -2
  14. package/lib/math/orders.js +4 -3
  15. package/lib/math/trade.d.ts +3 -1
  16. package/lib/math/trade.js +18 -6
  17. package/lib/orders.js +38 -5
  18. package/lib/tx/retryTxSender.d.ts +1 -0
  19. package/lib/tx/retryTxSender.js +9 -0
  20. package/lib/types.d.ts +2 -1
  21. package/package.json +1 -1
  22. package/src/accounts/bulkAccountLoader.ts +8 -0
  23. package/src/admin.ts +17 -0
  24. package/src/constants/markets.ts +11 -0
  25. package/src/constants/numericConstants.ts +2 -0
  26. package/src/idl/clearing_house.json +40 -2
  27. package/src/math/amm.ts +71 -6
  28. package/src/math/funding.ts +12 -2
  29. package/src/math/market.ts +47 -1
  30. package/src/math/orders.ts +6 -3
  31. package/src/math/trade.ts +24 -13
  32. package/src/orders.ts +51 -7
  33. package/src/tx/retryTxSender.ts +12 -0
  34. package/src/types.ts +2 -1
  35. package/src/assert/assert.js +0 -10
  36. package/src/assert/assert.js.map +0 -1
  37. package/src/math/conversion.js +0 -16
  38. package/src/math/conversion.js.map +0 -1
  39. package/src/math/funding.js +0 -223
  40. package/src/math/funding.js.map +0 -1
  41. package/src/math/insuranceFund.js +0 -23
  42. package/src/math/insuranceFund.js.map +0 -1
  43. package/src/math/market.js +0 -30
  44. package/src/math/market.js.map +0 -1
  45. package/src/math/position.js +0 -121
  46. package/src/math/position.js.map +0 -1
  47. package/src/math/utils.js +0 -27
  48. package/src/math/utils.js.map +0 -1
  49. package/src/oracles/switchboardClient.js +0 -60
  50. package/src/oracles/switchboardClient.js.map +0 -1
  51. package/src/token/index.js +0 -39
  52. package/src/token/index.js.map +0 -1
  53. package/src/tx/defaultTxSender.js +0 -13
  54. package/src/tx/defaultTxSender.js.map +0 -1
  55. package/src/tx/types.js +0 -3
  56. package/src/tx/types.js.map +0 -1
  57. package/src/tx/utils.js +0 -9
  58. package/src/tx/utils.js.map +0 -1
  59. package/src/util/computeUnits.js +0 -17
  60. package/src/util/computeUnits.js.map +0 -1
  61. package/src/util/tps.js +0 -17
  62. package/src/util/tps.js.map +0 -1
@@ -1905,6 +1905,36 @@
1905
1905
  }
1906
1906
  ]
1907
1907
  },
1908
+ {
1909
+ "name": "updateMarketBaseSpread",
1910
+ "accounts": [
1911
+ {
1912
+ "name": "admin",
1913
+ "isMut": false,
1914
+ "isSigner": true
1915
+ },
1916
+ {
1917
+ "name": "state",
1918
+ "isMut": false,
1919
+ "isSigner": false
1920
+ },
1921
+ {
1922
+ "name": "markets",
1923
+ "isMut": true,
1924
+ "isSigner": false
1925
+ }
1926
+ ],
1927
+ "args": [
1928
+ {
1929
+ "name": "marketIndex",
1930
+ "type": "u64"
1931
+ },
1932
+ {
1933
+ "name": "baseSpread",
1934
+ "type": "u16"
1935
+ }
1936
+ ]
1937
+ },
1908
1938
  {
1909
1939
  "name": "updateMarketMinimumBaseAssetTradeSize",
1910
1940
  "accounts": [
@@ -3265,9 +3295,17 @@
3265
3295
  "name": "minimumBaseAssetTradeSize",
3266
3296
  "type": "u128"
3267
3297
  },
3298
+ {
3299
+ "name": "baseSpread",
3300
+ "type": "u16"
3301
+ },
3302
+ {
3303
+ "name": "padding0",
3304
+ "type": "u16"
3305
+ },
3268
3306
  {
3269
3307
  "name": "padding1",
3270
- "type": "u64"
3308
+ "type": "u32"
3271
3309
  },
3272
3310
  {
3273
3311
  "name": "padding2",
@@ -3585,7 +3623,7 @@
3585
3623
  "type": "u128"
3586
3624
  },
3587
3625
  {
3588
- "name": "referrerReward",
3626
+ "name": "quoteAssetAmountSurplus",
3589
3627
  "type": "u128"
3590
3628
  },
3591
3629
  {
package/src/math/amm.ts CHANGED
@@ -7,6 +7,8 @@ import {
7
7
  AMM_TO_QUOTE_PRECISION_RATIO,
8
8
  QUOTE_PRECISION,
9
9
  AMM_RESERVE_PRECISION,
10
+ BID_ASK_SPREAD_PRECISION,
11
+ ONE,
10
12
  } from '../constants/numericConstants';
11
13
  import { calculateBaseAssetValue } from './position';
12
14
  import {
@@ -60,7 +62,10 @@ export type AssetType = 'quote' | 'base';
60
62
  * @returns quoteAssetReserve and baseAssetReserve after swap. : Precision AMM_RESERVE_PRECISION
61
63
  */
62
64
  export function calculateAmmReservesAfterSwap(
63
- amm: AMM,
65
+ amm: Pick<
66
+ AMM,
67
+ 'pegMultiplier' | 'quoteAssetReserve' | 'sqrtK' | 'baseAssetReserve'
68
+ >,
64
69
  inputAssetType: AssetType,
65
70
  swapAmount: BN,
66
71
  swapDirection: SwapDirection
@@ -93,6 +98,38 @@ export function calculateAmmReservesAfterSwap(
93
98
  return [newQuoteAssetReserve, newBaseAssetReserve];
94
99
  }
95
100
 
101
+ export function calculateSpreadReserves(
102
+ amm: AMM,
103
+ direction: PositionDirection
104
+ ): {
105
+ baseAssetReserve: BN;
106
+ quoteAssetReserve: BN;
107
+ } {
108
+ if (amm.baseSpread === 0) {
109
+ return {
110
+ baseAssetReserve: amm.baseAssetReserve,
111
+ quoteAssetReserve: amm.quoteAssetReserve,
112
+ };
113
+ }
114
+
115
+ const quoteAsserReserveDelta = amm.quoteAssetReserve.div(
116
+ BID_ASK_SPREAD_PRECISION.div(new BN(amm.baseSpread / 4))
117
+ );
118
+
119
+ let quoteAssetReserve;
120
+ if (isVariant(direction, 'long')) {
121
+ quoteAssetReserve = amm.quoteAssetReserve.add(quoteAsserReserveDelta);
122
+ } else {
123
+ quoteAssetReserve = amm.quoteAssetReserve.sub(quoteAsserReserveDelta);
124
+ }
125
+
126
+ const baseAssetReserve = amm.sqrtK.mul(amm.sqrtK).div(quoteAssetReserve);
127
+ return {
128
+ baseAssetReserve,
129
+ quoteAssetReserve,
130
+ };
131
+ }
132
+
96
133
  /**
97
134
  * Helper function calculating constant product curve output. Agnostic to whether input asset is quote or base
98
135
  *
@@ -288,7 +325,9 @@ export function calculateTerminalPrice(market: Market) {
288
325
 
289
326
  export function calculateMaxBaseAssetAmountToTrade(
290
327
  amm: AMM,
291
- limit_price: BN
328
+ limit_price: BN,
329
+ direction: PositionDirection,
330
+ useSpread: boolean
292
331
  ): [BN, PositionDirection] {
293
332
  const invariant = amm.sqrtK.mul(amm.sqrtK);
294
333
 
@@ -300,14 +339,24 @@ export function calculateMaxBaseAssetAmountToTrade(
300
339
 
301
340
  const newBaseAssetReserve = squareRootBN(newBaseAssetReserveSquared);
302
341
 
303
- if (newBaseAssetReserve.gt(amm.baseAssetReserve)) {
342
+ let baseAssetReserveBefore;
343
+ if (useSpread) {
344
+ baseAssetReserveBefore = calculateSpreadReserves(
345
+ amm,
346
+ direction
347
+ ).baseAssetReserve;
348
+ } else {
349
+ baseAssetReserveBefore = amm.baseAssetReserve;
350
+ }
351
+
352
+ if (newBaseAssetReserve.gt(baseAssetReserveBefore)) {
304
353
  return [
305
- newBaseAssetReserve.sub(amm.baseAssetReserve),
354
+ newBaseAssetReserve.sub(baseAssetReserveBefore),
306
355
  PositionDirection.SHORT,
307
356
  ];
308
- } else if (newBaseAssetReserve.lt(amm.baseAssetReserve)) {
357
+ } else if (newBaseAssetReserve.lt(baseAssetReserveBefore)) {
309
358
  return [
310
- amm.baseAssetReserve.sub(newBaseAssetReserve),
359
+ baseAssetReserveBefore.sub(newBaseAssetReserve),
311
360
  PositionDirection.LONG,
312
361
  ];
313
362
  } else {
@@ -398,3 +447,19 @@ export function calculateBudgetedPeg(market: Market, cost: BN): BN {
398
447
 
399
448
  return newPeg;
400
449
  }
450
+
451
+ export function calculateQuoteAssetAmountSwapped(
452
+ quoteAssetReserves: BN,
453
+ pegMultiplier: BN,
454
+ swapDirection: SwapDirection
455
+ ): BN {
456
+ let quoteAssetAmount = quoteAssetReserves
457
+ .mul(pegMultiplier)
458
+ .div(AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO);
459
+
460
+ if (isVariant(swapDirection, 'remove')) {
461
+ quoteAssetAmount = quoteAssetAmount.add(ONE);
462
+ }
463
+
464
+ return quoteAssetAmount;
465
+ }
@@ -45,7 +45,7 @@ export async function calculateAllEstimatedFundingRate(
45
45
  const timeSinceLastMarkChange = now.sub(lastMarkPriceTwapTs);
46
46
  const markTwapTimeSinceLastUpdate = BN.max(
47
47
  secondsInHour,
48
- secondsInHour.sub(timeSinceLastMarkChange)
48
+ BN.max(ZERO, secondsInHour.sub(timeSinceLastMarkChange))
49
49
  );
50
50
  const baseAssetPriceWithMantissa = calculateMarkPrice(market);
51
51
 
@@ -59,6 +59,11 @@ export async function calculateAllEstimatedFundingRate(
59
59
  const lastOracleTwapWithMantissa = market.amm.lastOraclePriceTwap;
60
60
  const lastOraclePriceTwapTs = market.amm.lastOraclePriceTwapTs;
61
61
 
62
+ const oracleInvalidDuration = BN.max(
63
+ ZERO,
64
+ lastMarkPriceTwapTs.sub(lastOraclePriceTwapTs)
65
+ );
66
+
62
67
  const timeSinceLastOracleTwapUpdate = now.sub(lastOraclePriceTwapTs);
63
68
  const oracleTwapTimeSinceLastUpdate = BN.max(
64
69
  secondsInHour,
@@ -80,7 +85,12 @@ export async function calculateAllEstimatedFundingRate(
80
85
  oracleTwapWithMantissa = oracleTwapTimeSinceLastUpdate
81
86
  .mul(lastOracleTwapWithMantissa)
82
87
  .add(timeSinceLastMarkChange.mul(oraclePrice))
83
- .div(timeSinceLastOracleTwapUpdate.add(oracleTwapTimeSinceLastUpdate));
88
+ .add(oracleInvalidDuration.mul(lastMarkTwapWithMantissa))
89
+ .div(
90
+ timeSinceLastMarkChange
91
+ .add(oracleTwapTimeSinceLastUpdate)
92
+ .add(oracleInvalidDuration)
93
+ );
84
94
  }
85
95
 
86
96
  const twapSpread = lastMarkTwapWithMantissa.sub(lastOracleTwapWithMantissa);
@@ -3,6 +3,7 @@ import { Market, PositionDirection } from '../types';
3
3
  import {
4
4
  calculateAmmReservesAfterSwap,
5
5
  calculatePrice,
6
+ calculateSpreadReserves,
6
7
  getSwapDirection,
7
8
  } from './amm';
8
9
  import { OraclePriceData } from '../oracles/types';
@@ -21,6 +22,44 @@ export function calculateMarkPrice(market: Market): BN {
21
22
  );
22
23
  }
23
24
 
25
+ /**
26
+ * Calculates market bid price
27
+ *
28
+ * @param market
29
+ * @return bidPrice : Precision MARK_PRICE_PRECISION
30
+ */
31
+ export function calculateBidPrice(market: Market): BN {
32
+ const { baseAssetReserve, quoteAssetReserve } = calculateSpreadReserves(
33
+ market.amm,
34
+ PositionDirection.SHORT
35
+ );
36
+
37
+ return calculatePrice(
38
+ baseAssetReserve,
39
+ quoteAssetReserve,
40
+ market.amm.pegMultiplier
41
+ );
42
+ }
43
+
44
+ /**
45
+ * Calculates market ask price
46
+ *
47
+ * @param market
48
+ * @return bidPrice : Precision MARK_PRICE_PRECISION
49
+ */
50
+ export function calculateAskPrice(market: Market): BN {
51
+ const { baseAssetReserve, quoteAssetReserve } = calculateSpreadReserves(
52
+ market.amm,
53
+ PositionDirection.LONG
54
+ );
55
+
56
+ return calculatePrice(
57
+ baseAssetReserve,
58
+ quoteAssetReserve,
59
+ market.amm.pegMultiplier
60
+ );
61
+ }
62
+
24
63
  export function calculateNewMarketAfterTrade(
25
64
  baseAssetAmount: BN,
26
65
  direction: PositionDirection,
@@ -48,5 +87,12 @@ export function calculateMarkOracleSpread(
48
87
  oraclePriceData: OraclePriceData
49
88
  ): BN {
50
89
  const markPrice = calculateMarkPrice(market);
51
- return markPrice.sub(oraclePriceData.price);
90
+ return calculateOracleSpread(markPrice, oraclePriceData);
91
+ }
92
+
93
+ export function calculateOracleSpread(
94
+ price: BN,
95
+ oraclePriceData: OraclePriceData
96
+ ): BN {
97
+ return price.sub(oraclePriceData.price);
52
98
  }
@@ -89,17 +89,20 @@ export function isOrderReduceOnly(
89
89
  user.getEmptyPosition(order.marketIndex);
90
90
 
91
91
  // if position is long and order is long
92
- if (position.baseAssetAmount.gt(ZERO) && isVariant(order.direction, 'long')) {
92
+ if (
93
+ position.baseAssetAmount.gte(ZERO) &&
94
+ isVariant(order.direction, 'long')
95
+ ) {
93
96
  return false;
94
97
  }
95
98
 
96
99
  // if position is short and order is short
97
100
  if (
98
- position.baseAssetAmount.lt(ZERO) &&
101
+ position.baseAssetAmount.lte(ZERO) &&
99
102
  isVariant(order.direction, 'short')
100
103
  ) {
101
104
  return false;
102
105
  }
103
106
 
104
- return order.baseAssetAmount.abs().lte(position.baseAssetAmount.abs());
107
+ return true;
105
108
  }
package/src/math/trade.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { isVariant, Market, PositionDirection } from '../types';
1
+ import { Market, PositionDirection } from '../types';
2
2
  import { BN } from '@project-serum/anchor';
3
3
  import { assert } from '../assert/assert';
4
4
  import {
@@ -6,7 +6,6 @@ import {
6
6
  PEG_PRECISION,
7
7
  AMM_TO_QUOTE_PRECISION_RATIO,
8
8
  ZERO,
9
- ONE,
10
9
  } from '../constants/numericConstants';
11
10
  import { calculateMarkPrice } from './market';
12
11
  import {
@@ -14,6 +13,7 @@ import {
14
13
  calculatePrice,
15
14
  getSwapDirection,
16
15
  AssetType,
16
+ calculateSpreadReserves,
17
17
  } from './amm';
18
18
  import { squareRootBN } from './utils';
19
19
 
@@ -101,6 +101,8 @@ export function calculateTradeSlippage(
101
101
  * @param direction
102
102
  * @param amount
103
103
  * @param market
104
+ * @param inputAssetType
105
+ * @param useSpread
104
106
  * @return
105
107
  * | 'acquiredBase' => positive/negative change in user's base : BN TODO-PRECISION
106
108
  * | 'acquiredQuote' => positive/negative change in user's quote : BN TODO-PRECISION
@@ -109,27 +111,36 @@ export function calculateTradeAcquiredAmounts(
109
111
  direction: PositionDirection,
110
112
  amount: BN,
111
113
  market: Market,
112
- inputAssetType: AssetType = 'quote'
114
+ inputAssetType: AssetType = 'quote',
115
+ useSpread = true
113
116
  ): [BN, BN] {
114
117
  if (amount.eq(ZERO)) {
115
118
  return [ZERO, ZERO];
116
119
  }
117
120
 
118
121
  const swapDirection = getSwapDirection(inputAssetType, direction);
119
- const [newQuoteAssetReserve, newBaseAssetReserve] =
120
- calculateAmmReservesAfterSwap(
122
+
123
+ let amm: Parameters<typeof calculateAmmReservesAfterSwap>[0];
124
+ if (useSpread && market.amm.baseSpread > 0) {
125
+ const { baseAssetReserve, quoteAssetReserve } = calculateSpreadReserves(
121
126
  market.amm,
122
- inputAssetType,
123
- amount,
124
- swapDirection
127
+ direction
125
128
  );
126
-
127
- const acquiredBase = market.amm.baseAssetReserve.sub(newBaseAssetReserve);
128
- let acquiredQuote = market.amm.quoteAssetReserve.sub(newQuoteAssetReserve);
129
- if (inputAssetType === 'base' && isVariant(swapDirection, 'remove')) {
130
- acquiredQuote = acquiredQuote.sub(ONE);
129
+ amm = {
130
+ baseAssetReserve,
131
+ quoteAssetReserve,
132
+ sqrtK: market.amm.sqrtK,
133
+ pegMultiplier: market.amm.pegMultiplier,
134
+ };
135
+ } else {
136
+ amm = market.amm;
131
137
  }
132
138
 
139
+ const [newQuoteAssetReserve, newBaseAssetReserve] =
140
+ calculateAmmReservesAfterSwap(amm, inputAssetType, amount, swapDirection);
141
+
142
+ const acquiredBase = amm.baseAssetReserve.sub(newBaseAssetReserve);
143
+ const acquiredQuote = amm.quoteAssetReserve.sub(newQuoteAssetReserve);
133
144
  return [acquiredBase, acquiredQuote];
134
145
  }
135
146
 
package/src/orders.ts CHANGED
@@ -11,6 +11,7 @@ import {
11
11
  BN,
12
12
  calculateAmmReservesAfterSwap,
13
13
  calculateBaseAssetValue,
14
+ calculateSpreadReserves,
14
15
  ClearingHouseUser,
15
16
  isOrderRiskIncreasingInSameDirection,
16
17
  TEN_THOUSAND,
@@ -211,7 +212,9 @@ export function calculateAmountToTradeForLimit(
211
212
 
212
213
  const [maxAmountToTrade, direction] = calculateMaxBaseAssetAmountToTrade(
213
214
  market.amm,
214
- limitPrice
215
+ limitPrice,
216
+ order.direction,
217
+ !order.postOnly
215
218
  );
216
219
 
217
220
  // Check that directions are the same
@@ -295,15 +298,56 @@ export function calculateBaseAssetAmountUserCanExecute(
295
298
  return ZERO;
296
299
  }
297
300
 
298
- const baseAssetReservesBefore = market.amm.baseAssetReserve;
301
+ const swapDirection = isVariant(order.direction, 'long')
302
+ ? SwapDirection.ADD
303
+ : SwapDirection.REMOVE;
304
+
305
+ const useSpread = !order.postOnly;
306
+ let amm: Parameters<typeof calculateAmmReservesAfterSwap>[0];
307
+ if (useSpread) {
308
+ const { baseAssetReserve, quoteAssetReserve } = calculateSpreadReserves(
309
+ market.amm,
310
+ order.direction
311
+ );
312
+ amm = {
313
+ baseAssetReserve,
314
+ quoteAssetReserve,
315
+ sqrtK: market.amm.sqrtK,
316
+ pegMultiplier: market.amm.pegMultiplier,
317
+ };
318
+ } else {
319
+ amm = market.amm;
320
+ }
321
+
322
+ const baseAssetReservesBefore = amm.baseAssetReserve;
299
323
  const [_, baseAssetReservesAfter] = calculateAmmReservesAfterSwap(
300
- market.amm,
324
+ amm,
301
325
  'quote',
302
326
  quoteAssetAmount,
303
- isVariant(order.direction, 'long')
304
- ? SwapDirection.ADD
305
- : SwapDirection.REMOVE
327
+ swapDirection
306
328
  );
307
329
 
308
- return baseAssetReservesBefore.sub(baseAssetReservesAfter).abs();
330
+ let baseAssetAmount = baseAssetReservesBefore
331
+ .sub(baseAssetReservesAfter)
332
+ .abs();
333
+ if (order.reduceOnly) {
334
+ const position =
335
+ user.getUserPosition(order.marketIndex) ||
336
+ user.getEmptyPosition(order.marketIndex);
337
+ if (
338
+ isVariant(order.direction, 'long') &&
339
+ position.baseAssetAmount.gte(ZERO)
340
+ ) {
341
+ baseAssetAmount = ZERO;
342
+ } else if (
343
+ isVariant(order.direction, 'short') &&
344
+ position.baseAssetAmount.lte(ZERO)
345
+ ) {
346
+ baseAssetAmount = ZERO;
347
+ } else {
348
+ BN.min(baseAssetAmount, position.baseAssetAmount.abs());
349
+ }
350
+ }
351
+
352
+ return baseAssetAmount;
309
353
  }
@@ -227,4 +227,16 @@ export class RetryTxSender implements TxSender {
227
227
  });
228
228
  });
229
229
  }
230
+
231
+ public addAdditionalConnection(newConnection: Connection): void {
232
+ const alreadyUsingConnection =
233
+ this.additionalConnections.filter((connection) => {
234
+ // @ts-ignore
235
+ return connection._rpcEndpoint === newConnection.rpcEndpoint;
236
+ }).length > 0;
237
+
238
+ if (!alreadyUsingConnection) {
239
+ this.additionalConnections.push(newConnection);
240
+ }
241
+ }
230
242
  }
package/src/types.ts CHANGED
@@ -154,7 +154,7 @@ export type TradeRecord = {
154
154
  markPriceBefore: BN;
155
155
  markPriceAfter: BN;
156
156
  fee: BN;
157
- referrerReward: BN;
157
+ quoteAssetAmountSurplus: BN;
158
158
  refereeDiscount: BN;
159
159
  tokenDiscount: BN;
160
160
  marketIndex: BN;
@@ -309,6 +309,7 @@ export type AMM = {
309
309
  minimumQuoteAssetTradeSize: BN;
310
310
  minimumBaseAssetTradeSize: BN;
311
311
  lastOraclePrice: BN;
312
+ baseSpread: number;
312
313
  };
313
314
 
314
315
  // # User Account Types
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assert = void 0;
4
- function assert(condition, error) {
5
- if (!condition) {
6
- throw new Error(error || 'Unspecified AssertionError');
7
- }
8
- }
9
- exports.assert = assert;
10
- //# sourceMappingURL=assert.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert.js","sourceRoot":"","sources":["assert.ts"],"names":[],"mappings":";;;AAAA,SAAgB,MAAM,CAAC,SAAkB,EAAE,KAAc;IACxD,IAAI,CAAC,SAAS,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,4BAA4B,CAAC,CAAC;KACvD;AACF,CAAC;AAJD,wBAIC"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertBaseAssetAmountToNumber = exports.convertToNumber = void 0;
4
- const numericConstants_1 = require("../constants/numericConstants");
5
- const convertToNumber = (bigNumber, precision = numericConstants_1.MARK_PRICE_PRECISION) => {
6
- if (!bigNumber)
7
- return 0;
8
- return (bigNumber.div(precision).toNumber() +
9
- bigNumber.mod(precision).toNumber() / precision.toNumber());
10
- };
11
- exports.convertToNumber = convertToNumber;
12
- const convertBaseAssetAmountToNumber = (baseAssetAmount) => {
13
- return (0, exports.convertToNumber)(baseAssetAmount, numericConstants_1.MARK_PRICE_PRECISION.mul(numericConstants_1.PEG_PRECISION));
14
- };
15
- exports.convertBaseAssetAmountToNumber = convertBaseAssetAmountToNumber;
16
- //# sourceMappingURL=conversion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversion.js","sourceRoot":"","sources":["conversion.ts"],"names":[],"mappings":";;;AACA,oEAGuC;AAEhC,MAAM,eAAe,GAAG,CAC9B,SAAa,EACb,YAAgB,uCAAoB,EACnC,EAAE;IACH,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,CACN,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;QACnC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,CAC1D,CAAC;AACH,CAAC,CAAC;AATW,QAAA,eAAe,mBAS1B;AAEK,MAAM,8BAA8B,GAAG,CAAC,eAAmB,EAAE,EAAE;IACrE,OAAO,IAAA,uBAAe,EACrB,eAAe,EACf,uCAAoB,CAAC,GAAG,CAAC,gCAAa,CAAC,CACvC,CAAC;AACH,CAAC,CAAC;AALW,QAAA,8BAA8B,kCAKzC"}