@drift-labs/sdk 0.2.0-master.25 → 0.2.0-master.26

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 (184) hide show
  1. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +13 -13
  2. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +27 -27
  3. package/lib/accounts/types.d.ts +8 -9
  4. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +14 -14
  5. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +35 -34
  6. package/lib/addresses/pda.d.ts +7 -6
  7. package/lib/addresses/pda.js +31 -27
  8. package/lib/admin.d.ts +9 -6
  9. package/lib/admin.js +83 -42
  10. package/lib/clearingHouse.d.ts +69 -42
  11. package/lib/clearingHouse.js +753 -277
  12. package/lib/clearingHouseConfig.d.ts +2 -2
  13. package/lib/clearingHouseUser.d.ts +16 -16
  14. package/lib/clearingHouseUser.js +139 -119
  15. package/lib/config.d.ts +7 -7
  16. package/lib/config.js +20 -20
  17. package/lib/constants/numericConstants.d.ts +12 -12
  18. package/lib/constants/numericConstants.js +13 -13
  19. package/lib/constants/{markets.d.ts → perpMarkets.d.ts} +5 -5
  20. package/{src/constants/markets.js → lib/constants/perpMarkets.js} +4 -4
  21. package/lib/constants/{banks.d.ts → spotMarkets.d.ts} +6 -6
  22. package/lib/constants/{banks.js → spotMarkets.js} +16 -16
  23. package/lib/events/types.d.ts +2 -1
  24. package/lib/events/types.js +1 -0
  25. package/lib/examples/makeTradeExample.js +7 -7
  26. package/lib/idl/clearing_house.json +1008 -279
  27. package/lib/index.d.ts +5 -3
  28. package/lib/index.js +5 -3
  29. package/lib/math/amm.d.ts +2 -2
  30. package/lib/math/amm.js +1 -1
  31. package/lib/math/funding.d.ts +6 -6
  32. package/lib/math/funding.js +2 -1
  33. package/lib/math/margin.d.ts +4 -4
  34. package/lib/math/margin.js +18 -11
  35. package/lib/math/market.d.ts +10 -9
  36. package/lib/math/market.js +29 -6
  37. package/lib/math/oracles.d.ts +2 -1
  38. package/lib/math/oracles.js +11 -1
  39. package/lib/math/orders.d.ts +5 -5
  40. package/lib/math/position.d.ts +13 -13
  41. package/lib/math/position.js +19 -19
  42. package/lib/math/spotBalance.d.ts +19 -0
  43. package/lib/math/spotBalance.js +176 -0
  44. package/lib/math/spotMarket.d.ts +4 -0
  45. package/lib/math/spotMarket.js +8 -0
  46. package/lib/math/spotPosition.d.ts +2 -0
  47. package/lib/math/spotPosition.js +8 -0
  48. package/lib/math/state.js +2 -2
  49. package/lib/math/trade.d.ts +4 -4
  50. package/lib/orderParams.d.ts +4 -4
  51. package/lib/orderParams.js +12 -4
  52. package/lib/serum/serumSubscriber.d.ts +23 -0
  53. package/lib/serum/serumSubscriber.js +41 -0
  54. package/lib/serum/types.d.ts +11 -0
  55. package/lib/serum/types.js +2 -0
  56. package/lib/tx/retryTxSender.d.ts +1 -1
  57. package/lib/tx/retryTxSender.js +4 -2
  58. package/lib/tx/types.d.ts +1 -1
  59. package/lib/types.d.ts +123 -33
  60. package/lib/types.js +31 -9
  61. package/my-script/.env +7 -0
  62. package/my-script/getUserStats.ts +106 -0
  63. package/my-script/multiConnections.ts +119 -0
  64. package/my-script/test-regex.ts +11 -0
  65. package/my-script/utils.ts +52 -0
  66. package/package.json +1 -1
  67. package/src/accounts/bulkAccountLoader.js +249 -0
  68. package/src/accounts/bulkUserStatsSubscription.js +75 -0
  69. package/src/accounts/bulkUserSubscription.js +75 -0
  70. package/src/accounts/fetch.js +92 -0
  71. package/src/accounts/pollingClearingHouseAccountSubscriber.js +465 -0
  72. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +38 -38
  73. package/src/accounts/pollingOracleSubscriber.js +156 -0
  74. package/src/accounts/pollingTokenAccountSubscriber.js +141 -0
  75. package/src/accounts/pollingUserAccountSubscriber.js +208 -0
  76. package/src/accounts/pollingUserStatsAccountSubscriber.js +208 -0
  77. package/src/accounts/types.js +28 -0
  78. package/src/accounts/types.ts +11 -9
  79. package/src/accounts/utils.js +7 -0
  80. package/src/accounts/webSocketAccountSubscriber.js +138 -0
  81. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +433 -0
  82. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +59 -52
  83. package/src/accounts/webSocketUserAccountSubscriber.js +113 -0
  84. package/src/accounts/webSocketUserStatsAccountSubsriber.js +113 -0
  85. package/src/addresses/pda.js +186 -0
  86. package/src/addresses/pda.ts +49 -44
  87. package/src/admin.js +1284 -0
  88. package/src/admin.ts +140 -47
  89. package/src/assert/assert.js +1 -1
  90. package/src/clearingHouse.js +3433 -0
  91. package/src/clearingHouse.ts +1083 -378
  92. package/src/clearingHouseConfig.js +2 -0
  93. package/src/clearingHouseConfig.ts +2 -2
  94. package/src/clearingHouseUser.js +874 -0
  95. package/src/clearingHouseUser.ts +232 -168
  96. package/src/clearingHouseUserConfig.js +2 -0
  97. package/src/clearingHouseUserStats.js +115 -0
  98. package/src/clearingHouseUserStatsConfig.js +2 -0
  99. package/src/config.js +80 -0
  100. package/src/config.ts +29 -29
  101. package/src/constants/numericConstants.js +18 -11
  102. package/src/constants/numericConstants.ts +17 -15
  103. package/{lib/constants/markets.js → src/constants/perpMarkets.js} +11 -11
  104. package/src/constants/{markets.ts → perpMarkets.ts} +5 -5
  105. package/src/constants/spotMarkets.js +51 -0
  106. package/src/constants/{banks.ts → spotMarkets.ts} +19 -19
  107. package/src/events/eventList.js +66 -23
  108. package/src/events/eventSubscriber.js +202 -0
  109. package/src/events/fetchLogs.js +117 -0
  110. package/src/events/pollingLogProvider.js +113 -0
  111. package/src/events/sort.js +41 -0
  112. package/src/events/txEventCache.js +22 -19
  113. package/src/events/types.js +25 -0
  114. package/src/events/types.ts +3 -0
  115. package/src/events/webSocketLogProvider.js +76 -0
  116. package/src/examples/makeTradeExample.ts +10 -8
  117. package/src/factory/bigNum.js +183 -180
  118. package/src/factory/oracleClient.js +9 -9
  119. package/src/idl/clearing_house.json +1008 -279
  120. package/src/index.js +75 -0
  121. package/src/index.ts +5 -3
  122. package/src/math/amm.js +422 -0
  123. package/src/math/amm.ts +6 -3
  124. package/src/math/auction.js +10 -10
  125. package/src/math/conversion.js +4 -3
  126. package/src/math/funding.js +223 -175
  127. package/src/math/funding.ts +7 -7
  128. package/src/math/insurance.js +27 -0
  129. package/src/math/margin.js +77 -0
  130. package/src/math/margin.ts +34 -23
  131. package/src/math/market.js +105 -0
  132. package/src/math/market.ts +71 -19
  133. package/src/math/oracles.js +40 -10
  134. package/src/math/oracles.ts +18 -1
  135. package/src/math/orders.js +153 -0
  136. package/src/math/orders.ts +5 -5
  137. package/src/math/position.js +172 -0
  138. package/src/math/position.ts +31 -31
  139. package/src/math/repeg.js +40 -40
  140. package/src/math/spotBalance.js +176 -0
  141. package/src/math/spotBalance.ts +290 -0
  142. package/src/math/spotMarket.js +8 -0
  143. package/src/math/spotMarket.ts +9 -0
  144. package/src/math/spotPosition.js +8 -0
  145. package/src/math/spotPosition.ts +6 -0
  146. package/src/math/state.ts +2 -2
  147. package/src/math/trade.js +81 -74
  148. package/src/math/trade.ts +4 -4
  149. package/src/math/utils.js +8 -7
  150. package/src/oracles/oracleClientCache.js +10 -9
  151. package/src/oracles/pythClient.js +52 -17
  152. package/src/oracles/quoteAssetOracleClient.js +44 -13
  153. package/src/oracles/switchboardClient.js +69 -37
  154. package/src/oracles/types.js +1 -1
  155. package/src/orderParams.js +14 -6
  156. package/src/orderParams.ts +16 -8
  157. package/src/serum/serumSubscriber.js +102 -0
  158. package/src/serum/serumSubscriber.ts +80 -0
  159. package/src/serum/types.js +2 -0
  160. package/src/serum/types.ts +13 -0
  161. package/src/slot/SlotSubscriber.js +67 -20
  162. package/src/token/index.js +4 -4
  163. package/src/tokenFaucet.js +288 -154
  164. package/src/tx/retryTxSender.js +280 -0
  165. package/src/tx/retryTxSender.ts +5 -2
  166. package/src/tx/types.js +1 -1
  167. package/src/tx/types.ts +2 -1
  168. package/src/tx/utils.js +7 -6
  169. package/src/types.js +216 -0
  170. package/src/types.ts +110 -33
  171. package/src/userName.js +5 -5
  172. package/src/util/computeUnits.js +46 -11
  173. package/src/util/promiseTimeout.js +5 -5
  174. package/src/util/tps.js +46 -12
  175. package/src/wallet.js +55 -18
  176. package/lib/math/bankBalance.d.ts +0 -15
  177. package/lib/math/bankBalance.js +0 -150
  178. package/src/addresses/marketAddresses.js +0 -26
  179. package/src/constants/banks.js +0 -42
  180. package/src/examples/makeTradeExample.js +0 -80
  181. package/src/math/bankBalance.ts +0 -258
  182. package/src/math/state.js +0 -15
  183. package/src/math/utils.js.map +0 -1
  184. package/src/util/getTokenAddress.js +0 -9
@@ -1,23 +1,25 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ exports.__esModule = true;
3
3
  exports.TxEventCache = void 0;
4
- class Node {
5
- constructor(key, value, next, prev) {
4
+ var Node = /** @class */ (function () {
5
+ function Node(key, value, next, prev) {
6
6
  this.key = key;
7
7
  this.value = value;
8
8
  this.next = next;
9
9
  this.prev = prev;
10
10
  }
11
- }
11
+ return Node;
12
+ }());
12
13
  // lru cache
13
- class TxEventCache {
14
- constructor(maxTx = 1024) {
14
+ var TxEventCache = /** @class */ (function () {
15
+ function TxEventCache(maxTx) {
16
+ if (maxTx === void 0) { maxTx = 1024; }
15
17
  this.maxTx = maxTx;
16
18
  this.size = 0;
17
19
  this.cacheMap = {};
18
20
  }
19
- add(key, events) {
20
- const existingNode = this.cacheMap[key];
21
+ TxEventCache.prototype.add = function (key, events) {
22
+ var existingNode = this.cacheMap[key];
21
23
  if (existingNode) {
22
24
  this.detach(existingNode);
23
25
  this.size--;
@@ -32,22 +34,22 @@ class TxEventCache {
32
34
  this.head = this.tail = new Node(key, events);
33
35
  }
34
36
  else {
35
- const node = new Node(key, events, this.head);
37
+ var node = new Node(key, events, this.head);
36
38
  this.head.prev = node;
37
39
  this.head = node;
38
40
  }
39
41
  // update cacheMap with LinkedList key and Node reference
40
42
  this.cacheMap[key] = this.head;
41
43
  this.size++;
42
- }
43
- has(key) {
44
+ };
45
+ TxEventCache.prototype.has = function (key) {
44
46
  return this.cacheMap.hasOwnProperty(key);
45
- }
46
- get(key) {
47
+ };
48
+ TxEventCache.prototype.get = function (key) {
47
49
  var _a;
48
50
  return (_a = this.cacheMap[key]) === null || _a === void 0 ? void 0 : _a.value;
49
- }
50
- detach(node) {
51
+ };
52
+ TxEventCache.prototype.detach = function (node) {
51
53
  if (node.prev !== undefined) {
52
54
  node.prev.next = node.next;
53
55
  }
@@ -60,12 +62,13 @@ class TxEventCache {
60
62
  else {
61
63
  this.tail = node.prev;
62
64
  }
63
- }
64
- clear() {
65
+ };
66
+ TxEventCache.prototype.clear = function () {
65
67
  this.head = undefined;
66
68
  this.tail = undefined;
67
69
  this.size = 0;
68
70
  this.cacheMap = {};
69
- }
70
- }
71
+ };
72
+ return TxEventCache;
73
+ }());
71
74
  exports.TxEventCache = TxEventCache;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.DefaultEventSubscriptionOptions = void 0;
4
+ exports.DefaultEventSubscriptionOptions = {
5
+ eventTypes: [
6
+ 'DepositRecord',
7
+ 'FundingPaymentRecord',
8
+ 'LiquidationRecord',
9
+ 'OrderRecord',
10
+ 'OrderActionRecord',
11
+ 'FundingRateRecord',
12
+ 'NewUserRecord',
13
+ 'SettlePnlRecord',
14
+ 'LPRecord',
15
+ 'InsuranceFundRecord',
16
+ ],
17
+ maxEventsPerType: 4096,
18
+ orderBy: 'blockchain',
19
+ orderDir: 'asc',
20
+ commitment: 'confirmed',
21
+ maxTx: 4096,
22
+ logProviderConfig: {
23
+ type: 'websocket'
24
+ }
25
+ };
@@ -9,6 +9,7 @@ import {
9
9
  OrderRecord,
10
10
  SettlePnlRecord,
11
11
  LPRecord,
12
+ InsuranceFundRecord,
12
13
  } from '../index';
13
14
 
14
15
  export type EventSubscriptionOptions = {
@@ -35,6 +36,7 @@ export const DefaultEventSubscriptionOptions: EventSubscriptionOptions = {
35
36
  'NewUserRecord',
36
37
  'SettlePnlRecord',
37
38
  'LPRecord',
39
+ 'InsuranceFundRecord',
38
40
  ],
39
41
  maxEventsPerType: 4096,
40
42
  orderBy: 'blockchain',
@@ -71,6 +73,7 @@ export type EventMap = {
71
73
  SettlePnlRecord: Event<SettlePnlRecord>;
72
74
  NewUserRecord: Event<NewUserRecord>;
73
75
  LPRecord: Event<LPRecord>;
76
+ InsuranceFundRecord: Event<InsuranceFundRecord>;
74
77
  };
75
78
 
76
79
  export type EventType = keyof EventMap;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ exports.__esModule = true;
39
+ exports.WebSocketLogProvider = void 0;
40
+ var WebSocketLogProvider = /** @class */ (function () {
41
+ function WebSocketLogProvider(connection, programId, commitment) {
42
+ this.connection = connection;
43
+ this.programId = programId;
44
+ this.commitment = commitment;
45
+ }
46
+ WebSocketLogProvider.prototype.subscribe = function (callback) {
47
+ if (this.subscriptionId) {
48
+ return true;
49
+ }
50
+ this.subscriptionId = this.connection.onLogs(this.programId, function (logs, ctx) {
51
+ callback(logs.signature, ctx.slot, logs.logs);
52
+ }, this.commitment);
53
+ return true;
54
+ };
55
+ WebSocketLogProvider.prototype.isSubscribed = function () {
56
+ return this.subscriptionId !== undefined;
57
+ };
58
+ WebSocketLogProvider.prototype.unsubscribe = function () {
59
+ return __awaiter(this, void 0, void 0, function () {
60
+ return __generator(this, function (_a) {
61
+ switch (_a.label) {
62
+ case 0:
63
+ if (!(this.subscriptionId !== undefined)) return [3 /*break*/, 2];
64
+ return [4 /*yield*/, this.connection.removeOnLogsListener(this.subscriptionId)];
65
+ case 1:
66
+ _a.sent();
67
+ this.subscriptionId = undefined;
68
+ _a.label = 2;
69
+ case 2: return [2 /*return*/, true];
70
+ }
71
+ });
72
+ });
73
+ };
74
+ return WebSocketLogProvider;
75
+ }());
76
+ exports.WebSocketLogProvider = WebSocketLogProvider;
@@ -11,11 +11,11 @@ import {
11
11
  convertToNumber,
12
12
  calculateTradeSlippage,
13
13
  BulkAccountLoader,
14
- Markets,
14
+ PerpMarkets,
15
15
  MARK_PRICE_PRECISION,
16
16
  QUOTE_PRECISION,
17
17
  } from '..';
18
- import { Banks } from '../constants/banks';
18
+ import { SpotMarkets } from '../constants/spotMarkets';
19
19
 
20
20
  export const getTokenAddress = (
21
21
  mintAddress: string,
@@ -76,8 +76,10 @@ const main = async () => {
76
76
  connection,
77
77
  wallet: provider.wallet,
78
78
  programID: clearingHousePublicKey,
79
- marketIndexes: Markets[cluster].map((market) => market.marketIndex),
80
- bankIndexes: Banks[cluster].map((bank) => bank.bankIndex),
79
+ perpMarketIndexes: PerpMarkets[cluster].map((market) => market.marketIndex),
80
+ spotMarketIndexes: SpotMarkets[cluster].map(
81
+ (spotMarket) => spotMarket.marketIndex
82
+ ),
81
83
  accountSubscription: {
82
84
  type: 'polling',
83
85
  accountLoader: bulkAccountLoader,
@@ -107,19 +109,19 @@ const main = async () => {
107
109
  usdcTokenAddress.toString(),
108
110
  wallet.publicKey.toString()
109
111
  ),
110
- Banks['devnet'][0].bankIndex
112
+ SpotMarkets['devnet'][0].marketIndex
111
113
  );
112
114
  }
113
115
 
114
116
  await user.subscribe();
115
117
 
116
118
  // Get current price
117
- const solMarketInfo = sdkConfig.MARKETS.find(
119
+ const solMarketInfo = sdkConfig.PERP_MARKETS.find(
118
120
  (market) => market.baseAssetSymbol === 'SOL'
119
121
  );
120
122
 
121
123
  const currentMarketPrice = calculateMarkPrice(
122
- clearingHouse.getMarketAccount(solMarketInfo.marketIndex),
124
+ clearingHouse.getPerpMarketAccount(solMarketInfo.marketIndex),
123
125
  undefined
124
126
  );
125
127
 
@@ -131,7 +133,7 @@ const main = async () => {
131
133
  console.log(`Current Market Price is $${formattedPrice}`);
132
134
 
133
135
  // Estimate the slippage for a $5000 LONG trade
134
- const solMarketAccount = clearingHouse.getMarketAccount(
136
+ const solMarketAccount = clearingHouse.getPerpMarketAccount(
135
137
  solMarketInfo.marketIndex
136
138
  );
137
139