@drift-labs/sdk 0.2.0-master.2 → 0.2.0-master.20

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 (152) hide show
  1. package/lib/accounts/bulkUserStatsSubscription.d.ts +7 -0
  2. package/lib/accounts/bulkUserStatsSubscription.js +21 -0
  3. package/lib/accounts/bulkUserSubscription.js +0 -1
  4. package/lib/accounts/fetch.d.ts +2 -1
  5. package/lib/accounts/fetch.js +9 -1
  6. package/lib/accounts/pollingUserStatsAccountSubscriber.d.ts +27 -0
  7. package/lib/accounts/pollingUserStatsAccountSubscriber.js +113 -0
  8. package/lib/accounts/types.d.ts +14 -1
  9. package/lib/accounts/webSocketUserStatsAccountSubsriber.d.ts +20 -0
  10. package/lib/accounts/webSocketUserStatsAccountSubsriber.js +47 -0
  11. package/lib/addresses/pda.d.ts +1 -0
  12. package/lib/addresses/pda.js +8 -1
  13. package/lib/admin.d.ts +9 -5
  14. package/lib/admin.js +52 -11
  15. package/lib/clearingHouse.d.ts +52 -23
  16. package/lib/clearingHouse.js +727 -197
  17. package/lib/clearingHouseConfig.d.ts +1 -0
  18. package/lib/clearingHouseUser.d.ts +17 -17
  19. package/lib/clearingHouseUser.js +186 -101
  20. package/lib/clearingHouseUserStats.d.ts +18 -0
  21. package/lib/clearingHouseUserStats.js +49 -0
  22. package/lib/clearingHouseUserStatsConfig.d.ts +14 -0
  23. package/lib/clearingHouseUserStatsConfig.js +2 -0
  24. package/lib/config.js +1 -1
  25. package/lib/constants/banks.d.ts +2 -2
  26. package/lib/constants/banks.js +12 -4
  27. package/lib/constants/numericConstants.d.ts +5 -0
  28. package/lib/constants/numericConstants.js +8 -3
  29. package/lib/events/eventList.js +3 -0
  30. package/lib/events/types.d.ts +3 -1
  31. package/lib/events/types.js +2 -0
  32. package/lib/factory/bigNum.d.ts +1 -0
  33. package/lib/factory/bigNum.js +34 -10
  34. package/lib/idl/clearing_house.json +1609 -388
  35. package/lib/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
  36. package/lib/index.d.ts +9 -3
  37. package/lib/index.js +13 -3
  38. package/lib/math/amm.d.ts +1 -0
  39. package/lib/math/amm.js +22 -38
  40. package/lib/math/auction.js +4 -1
  41. package/lib/math/bankBalance.d.ts +7 -1
  42. package/lib/math/bankBalance.js +77 -2
  43. package/lib/math/margin.d.ts +11 -0
  44. package/lib/math/margin.js +72 -0
  45. package/lib/math/market.d.ts +4 -1
  46. package/lib/math/market.js +35 -1
  47. package/lib/math/oracles.d.ts +3 -0
  48. package/lib/math/oracles.js +25 -5
  49. package/lib/math/orders.d.ts +5 -2
  50. package/lib/math/orders.js +53 -12
  51. package/lib/math/position.d.ts +8 -0
  52. package/lib/math/position.js +45 -12
  53. package/lib/math/trade.d.ts +1 -1
  54. package/lib/math/trade.js +7 -10
  55. package/lib/orderParams.d.ts +14 -5
  56. package/lib/orderParams.js +8 -96
  57. package/lib/slot/SlotSubscriber.d.ts +7 -0
  58. package/lib/slot/SlotSubscriber.js +3 -0
  59. package/lib/{mockUSDCFaucet.d.ts → tokenFaucet.d.ts} +8 -5
  60. package/lib/{mockUSDCFaucet.js → tokenFaucet.js} +63 -51
  61. package/lib/tx/retryTxSender.js +9 -2
  62. package/lib/tx/utils.js +1 -1
  63. package/lib/types.d.ts +233 -26
  64. package/lib/types.js +64 -1
  65. package/lib/util/computeUnits.js +1 -1
  66. package/lib/util/getTokenAddress.d.ts +2 -0
  67. package/lib/util/getTokenAddress.js +9 -0
  68. package/package.json +3 -3
  69. package/src/accounts/bulkUserStatsSubscription.ts +33 -0
  70. package/src/accounts/bulkUserSubscription.ts +0 -1
  71. package/src/accounts/fetch.ts +27 -2
  72. package/src/accounts/pollingUserStatsAccountSubscriber.ts +172 -0
  73. package/src/accounts/types.ts +18 -0
  74. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +80 -0
  75. package/src/addresses/marketAddresses.js +26 -0
  76. package/src/addresses/pda.ts +13 -0
  77. package/src/admin.ts +82 -15
  78. package/src/assert/assert.js +9 -0
  79. package/src/clearingHouse.ts +1224 -319
  80. package/src/clearingHouseConfig.ts +1 -0
  81. package/src/clearingHouseUser.ts +311 -148
  82. package/src/clearingHouseUserStats.ts +75 -0
  83. package/src/clearingHouseUserStatsConfig.ts +18 -0
  84. package/src/config.ts +1 -1
  85. package/src/constants/banks.js +42 -0
  86. package/src/constants/banks.ts +14 -4
  87. package/src/constants/markets.js +42 -0
  88. package/src/constants/numericConstants.js +41 -0
  89. package/src/constants/numericConstants.ts +14 -2
  90. package/src/events/eventList.js +77 -0
  91. package/src/events/eventList.ts +3 -0
  92. package/src/events/eventSubscriber.js +139 -0
  93. package/src/events/fetchLogs.js +50 -0
  94. package/src/events/pollingLogProvider.js +64 -0
  95. package/src/events/sort.js +44 -0
  96. package/src/events/txEventCache.js +71 -0
  97. package/src/events/types.ts +6 -0
  98. package/src/events/webSocketLogProvider.js +41 -0
  99. package/src/examples/makeTradeExample.js +80 -0
  100. package/src/factory/bigNum.js +390 -0
  101. package/src/factory/bigNum.ts +42 -13
  102. package/src/factory/oracleClient.js +20 -0
  103. package/src/idl/clearing_house.json +1609 -388
  104. package/src/idl/{mock_usdc_faucet.json → token_faucet.json} +46 -23
  105. package/src/index.ts +9 -3
  106. package/src/math/amm.ts +54 -55
  107. package/src/math/auction.js +42 -0
  108. package/src/math/auction.ts +5 -1
  109. package/src/math/bankBalance.ts +148 -2
  110. package/src/math/conversion.js +11 -0
  111. package/src/math/funding.js +248 -0
  112. package/src/math/margin.ts +124 -0
  113. package/src/math/market.ts +66 -1
  114. package/src/math/oracles.js +26 -0
  115. package/src/math/oracles.ts +42 -5
  116. package/src/math/orders.ts +112 -13
  117. package/src/math/position.ts +64 -9
  118. package/src/math/repeg.js +128 -0
  119. package/src/math/state.js +15 -0
  120. package/src/math/trade.js +253 -0
  121. package/src/math/trade.ts +23 -25
  122. package/src/math/utils.js +0 -1
  123. package/src/oracles/oracleClientCache.js +19 -0
  124. package/src/oracles/pythClient.js +46 -0
  125. package/src/oracles/quoteAssetOracleClient.js +32 -0
  126. package/src/oracles/switchboardClient.js +69 -0
  127. package/src/oracles/types.js +2 -0
  128. package/src/orderParams.js +20 -0
  129. package/src/orderParams.ts +20 -141
  130. package/src/slot/SlotSubscriber.js +39 -0
  131. package/src/slot/SlotSubscriber.ts +11 -1
  132. package/src/token/index.js +38 -0
  133. package/src/tokenFaucet.js +189 -0
  134. package/src/{mockUSDCFaucet.ts → tokenFaucet.ts} +82 -70
  135. package/src/tx/retryTxSender.ts +11 -3
  136. package/src/tx/types.js +2 -0
  137. package/src/tx/utils.js +17 -0
  138. package/src/tx/utils.ts +1 -1
  139. package/src/types.ts +236 -27
  140. package/src/userName.js +20 -0
  141. package/src/util/computeUnits.js +21 -11
  142. package/src/util/computeUnits.ts +1 -1
  143. package/src/util/getTokenAddress.js +9 -0
  144. package/src/util/getTokenAddress.ts +18 -0
  145. package/src/util/promiseTimeout.js +14 -0
  146. package/src/util/tps.js +27 -0
  147. package/src/wallet.js +35 -0
  148. package/tests/bn/test.ts +10 -0
  149. package/lib/orders.d.ts +0 -8
  150. package/lib/orders.js +0 -142
  151. package/src/orders.ts +0 -251
  152. package/src/util/computeUnits.js.map +0 -1
@@ -17,6 +17,10 @@ export class BigNum {
17
17
  this.precision = new BN(precisionVal);
18
18
  }
19
19
 
20
+ private bigNumFromParam(bn: BigNum | BN) {
21
+ return BN.isBN(bn) ? BigNum.from(bn) : bn;
22
+ }
23
+
20
24
  public add(bn: BigNum): BigNum {
21
25
  assert(bn.precision.eq(this.precision), 'Adding unequal precisions');
22
26
 
@@ -30,7 +34,7 @@ export class BigNum {
30
34
  }
31
35
 
32
36
  public mul(bn: BigNum | BN): BigNum {
33
- const mulVal = bn instanceof BigNum ? bn : BigNum.from(bn);
37
+ const mulVal = this.bigNumFromParam(bn);
34
38
 
35
39
  return BigNum.from(
36
40
  this.val.mul(mulVal.val),
@@ -44,7 +48,7 @@ export class BigNum {
44
48
  * @returns
45
49
  */
46
50
  public scalarMul(bn: BigNum | BN): BigNum {
47
- if (bn instanceof BN) return BigNum.from(this.val.mul(bn), this.precision);
51
+ if (BN.isBN(bn)) return BigNum.from(this.val.mul(bn), this.precision);
48
52
 
49
53
  return BigNum.from(
50
54
  this.val.mul(bn.val),
@@ -53,7 +57,8 @@ export class BigNum {
53
57
  }
54
58
 
55
59
  public div(bn: BigNum | BN): BigNum {
56
- if (bn instanceof BN) return BigNum.from(this.val.div(bn), this.precision);
60
+ if (BN.isBN(bn)) return BigNum.from(this.val.div(bn), this.precision);
61
+
57
62
  return BigNum.from(this.val.div(bn.val), this.precision.sub(bn.precision));
58
63
  }
59
64
 
@@ -101,7 +106,7 @@ export class BigNum {
101
106
  }
102
107
 
103
108
  public gt(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
104
- const comparisonVal = bn instanceof BigNum ? bn : BigNum.from(bn);
109
+ const comparisonVal = this.bigNumFromParam(bn);
105
110
 
106
111
  if (!ignorePrecision && !comparisonVal.eq(ZERO)) {
107
112
  assert(
@@ -114,7 +119,7 @@ export class BigNum {
114
119
  }
115
120
 
116
121
  public lt(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
117
- const comparisonVal = bn instanceof BigNum ? bn : BigNum.from(bn);
122
+ const comparisonVal = this.bigNumFromParam(bn);
118
123
 
119
124
  if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
120
125
  assert(
@@ -127,7 +132,7 @@ export class BigNum {
127
132
  }
128
133
 
129
134
  public gte(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
130
- const comparisonVal = bn instanceof BigNum ? bn : BigNum.from(bn);
135
+ const comparisonVal = this.bigNumFromParam(bn);
131
136
 
132
137
  if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
133
138
  assert(
@@ -140,7 +145,7 @@ export class BigNum {
140
145
  }
141
146
 
142
147
  public lte(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
143
- const comparisonVal = bn instanceof BigNum ? bn : BigNum.from(bn);
148
+ const comparisonVal = this.bigNumFromParam(bn);
144
149
 
145
150
  if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
146
151
  assert(
@@ -153,7 +158,7 @@ export class BigNum {
153
158
  }
154
159
 
155
160
  public eq(bn: BigNum | BN, ignorePrecision?: boolean): boolean {
156
- const comparisonVal = bn instanceof BigNum ? bn : BigNum.from(bn);
161
+ const comparisonVal = this.bigNumFromParam(bn);
157
162
 
158
163
  if (!ignorePrecision && !comparisonVal.val.eq(ZERO)) {
159
164
  assert(
@@ -206,7 +211,8 @@ export class BigNum {
206
211
  'Tried to print a BN with precision lower than zero'
207
212
  );
208
213
 
209
- const plainString = this.toString();
214
+ const isNeg = this.isNeg();
215
+ const plainString = this.abs().toString();
210
216
  const precisionNum = this.precision.toNumber();
211
217
 
212
218
  // make a string with at least the precisionNum number of zeroes
@@ -227,6 +233,9 @@ export class BigNum {
227
233
  // add zero if leading delim
228
234
  if (printString[0] === BigNum.delim) printString = `0${printString}`;
229
235
 
236
+ // Add minus if negative
237
+ if (isNeg) printString = `-${printString}`;
238
+
230
239
  // remove trailing delim
231
240
  if (printString[printString.length - 1] === BigNum.delim)
232
241
  printString = printString.slice(0, printString.length - 1);
@@ -392,10 +401,30 @@ export class BigNum {
392
401
  ): string {
393
402
  const prefix = `${this.lt(BigNum.zero()) ? `-` : ``}$`;
394
403
 
395
- const val =
396
- useTradePrecision || precisionOverride
397
- ? this.prettyPrint(useTradePrecision, precisionOverride)
398
- : BigNum.fromPrint(this.toFixed(2), new BN(2)).prettyPrint();
404
+ const usingCustomPrecision =
405
+ true && (useTradePrecision || precisionOverride);
406
+
407
+ let val = usingCustomPrecision
408
+ ? this.prettyPrint(useTradePrecision, precisionOverride)
409
+ : BigNum.fromPrint(this.toFixed(2), new BN(2)).prettyPrint();
410
+
411
+ // Append two trailing zeroes if not using custom precision
412
+ if (!usingCustomPrecision) {
413
+ const [_, rightSide] = val.split(BigNum.delim);
414
+
415
+ const trailingLength = rightSide?.length ?? 0;
416
+
417
+ if (trailingLength < 2) {
418
+ const numHasDecimals = this.print().includes(BigNum.delim);
419
+
420
+ // Handle case where pretty print won't include the decimal point
421
+ if (trailingLength === 0 && numHasDecimals) {
422
+ val = `${val}.00`;
423
+ } else {
424
+ val = `${val}${new Array(2 - trailingLength).fill('0').join('')}`;
425
+ }
426
+ }
427
+ }
399
428
 
400
429
  return `${prefix}${val.replace('-', '')}`;
401
430
  }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOracleClient = void 0;
4
+ const types_1 = require("../types");
5
+ const pythClient_1 = require("../oracles/pythClient");
6
+ const switchboardClient_1 = require("../oracles/switchboardClient");
7
+ const quoteAssetOracleClient_1 = require("../oracles/quoteAssetOracleClient");
8
+ function getOracleClient(oracleSource, connection) {
9
+ if (types_1.isVariant(oracleSource, 'pyth')) {
10
+ return new pythClient_1.PythClient(connection);
11
+ }
12
+ if (types_1.isVariant(oracleSource, 'switchboard')) {
13
+ return new switchboardClient_1.SwitchboardClient(connection);
14
+ }
15
+ if (types_1.isVariant(oracleSource, 'quoteAsset')) {
16
+ return new quoteAssetOracleClient_1.QuoteAssetOracleClient();
17
+ }
18
+ throw new Error(`Unknown oracle source ${oracleSource}`);
19
+ }
20
+ exports.getOracleClient = getOracleClient;