@drift-labs/sdk 2.20.0-beta.0 → 2.20.0-beta.1

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 (81) hide show
  1. package/lib/accounts/bulkAccountLoader.d.ts +2 -1
  2. package/lib/accounts/bulkAccountLoader.js +7 -7
  3. package/lib/accounts/fetch.d.ts +1 -0
  4. package/lib/accounts/fetch.js +8 -4
  5. package/lib/accounts/pollingDriftClientAccountSubscriber.js +7 -7
  6. package/lib/accounts/pollingTokenAccountSubscriber.js +2 -2
  7. package/lib/accounts/pollingUserAccountSubscriber.js +2 -2
  8. package/lib/accounts/pollingUserStatsAccountSubscriber.js +2 -2
  9. package/lib/accounts/types.d.ts +5 -4
  10. package/lib/accounts/webSocketAccountSubscriber.js +1 -1
  11. package/lib/accounts/webSocketDriftClientAccountSubscriber.js +3 -3
  12. package/lib/addresses/marketAddresses.js +1 -1
  13. package/lib/addresses/pda.js +5 -1
  14. package/lib/adminClient.js +61 -57
  15. package/lib/config.d.ts +2 -2
  16. package/lib/constants/perpMarkets.d.ts +1 -1
  17. package/lib/constants/spotMarkets.d.ts +1 -1
  18. package/lib/dlob/DLOB.d.ts +6 -5
  19. package/lib/dlob/DLOB.js +105 -75
  20. package/lib/dlob/DLOBNode.d.ts +2 -2
  21. package/lib/dlob/DLOBNode.js +7 -7
  22. package/lib/dlob/DLOBOrders.d.ts +2 -2
  23. package/lib/dlob/NodeList.d.ts +1 -1
  24. package/lib/dlob/NodeList.js +2 -2
  25. package/lib/driftClient.d.ts +3 -2
  26. package/lib/driftClient.js +114 -95
  27. package/lib/driftClientConfig.d.ts +3 -3
  28. package/lib/events/eventSubscriber.js +2 -2
  29. package/lib/events/fetchLogs.d.ts +2 -2
  30. package/lib/events/pollingLogProvider.js +1 -1
  31. package/lib/events/types.d.ts +14 -14
  32. package/lib/examples/loadDlob.js +2 -2
  33. package/lib/examples/makeTradeExample.js +9 -9
  34. package/lib/factory/bigNum.js +13 -13
  35. package/lib/factory/oracleClient.js +4 -4
  36. package/lib/idl/drift.json +1 -1
  37. package/lib/index.js +5 -1
  38. package/lib/math/amm.d.ts +1 -1
  39. package/lib/math/amm.js +23 -23
  40. package/lib/math/auction.js +6 -6
  41. package/lib/math/exchangeStatus.js +2 -2
  42. package/lib/math/funding.js +2 -2
  43. package/lib/math/margin.js +4 -4
  44. package/lib/math/market.js +15 -15
  45. package/lib/math/oracles.js +1 -1
  46. package/lib/math/orders.js +27 -24
  47. package/lib/math/position.js +5 -5
  48. package/lib/math/repeg.js +1 -1
  49. package/lib/math/spotBalance.js +9 -9
  50. package/lib/math/spotMarket.js +3 -3
  51. package/lib/math/spotPosition.js +3 -3
  52. package/lib/math/trade.d.ts +1 -1
  53. package/lib/math/trade.js +42 -42
  54. package/lib/math/utils.js +1 -1
  55. package/lib/oracles/oracleClientCache.js +1 -1
  56. package/lib/oracles/pythClient.js +1 -1
  57. package/lib/oracles/types.d.ts +2 -2
  58. package/lib/serum/types.d.ts +1 -1
  59. package/lib/slot/SlotSubscriber.d.ts +1 -1
  60. package/lib/tokenFaucet.js +5 -1
  61. package/lib/tx/retryTxSender.d.ts +1 -1
  62. package/lib/tx/retryTxSender.js +1 -1
  63. package/lib/tx/types.d.ts +1 -1
  64. package/lib/types.d.ts +65 -44
  65. package/lib/user.js +63 -63
  66. package/lib/userConfig.d.ts +2 -2
  67. package/lib/userMap/userMap.js +1 -1
  68. package/lib/userMap/userStatsMap.js +3 -3
  69. package/lib/userStats.js +2 -2
  70. package/lib/userStatsConfig.d.ts +2 -2
  71. package/package.json +1 -1
  72. package/src/accounts/bulkAccountLoader.ts +5 -5
  73. package/src/accounts/fetch.ts +8 -0
  74. package/src/dlob/DLOB.ts +55 -8
  75. package/src/driftClient.ts +28 -0
  76. package/src/idl/drift.json +1 -1
  77. package/src/math/orders.ts +5 -1
  78. package/src/types.ts +22 -0
  79. package/src/userMap/userStatsMap.ts +1 -4
  80. package/tests/amm/test.ts +24 -28
  81. package/tests/dlob/test.ts +67 -73
package/lib/dlob/DLOB.js CHANGED
@@ -80,10 +80,10 @@ class DLOB {
80
80
  this.insertOrder(record.order, record.user, slot);
81
81
  }
82
82
  handleOrderActionRecord(record, slot) {
83
- if (__1.isOneOfVariant(record.action, ['place', 'expire'])) {
83
+ if ((0, __1.isOneOfVariant)(record.action, ['place', 'expire'])) {
84
84
  return;
85
85
  }
86
- if (__1.isVariant(record.action, 'trigger')) {
86
+ if ((0, __1.isVariant)(record.action, 'trigger')) {
87
87
  if (record.taker !== null) {
88
88
  const takerOrder = this.getOrder(record.takerOrderId, record.taker);
89
89
  if (takerOrder) {
@@ -97,7 +97,7 @@ class DLOB {
97
97
  }
98
98
  }
99
99
  }
100
- else if (__1.isVariant(record.action, 'fill')) {
100
+ else if ((0, __1.isVariant)(record.action, 'fill')) {
101
101
  if (record.taker !== null) {
102
102
  const takerOrder = this.getOrder(record.takerOrderId, record.taker);
103
103
  if (takerOrder) {
@@ -111,7 +111,7 @@ class DLOB {
111
111
  }
112
112
  }
113
113
  }
114
- else if (__1.isVariant(record.action, 'cancel')) {
114
+ else if ((0, __1.isVariant)(record.action, 'cancel')) {
115
115
  if (record.taker !== null) {
116
116
  const takerOrder = this.getOrder(record.takerOrderId, record.taker);
117
117
  if (takerOrder) {
@@ -128,20 +128,20 @@ class DLOB {
128
128
  }
129
129
  insertOrder(order, userAccount, slot, onInsert) {
130
130
  var _a;
131
- if (__1.isVariant(order.status, 'init')) {
131
+ if ((0, __1.isVariant)(order.status, 'init')) {
132
132
  return;
133
133
  }
134
- if (!__1.isOneOfVariant(order.orderType, SUPPORTED_ORDER_TYPES)) {
134
+ if (!(0, __1.isOneOfVariant)(order.orderType, SUPPORTED_ORDER_TYPES)) {
135
135
  return;
136
136
  }
137
- const marketType = __1.getVariant(order.marketType);
137
+ const marketType = (0, __1.getVariant)(order.marketType);
138
138
  if (!this.orderLists.get(marketType).has(order.marketIndex)) {
139
139
  this.addOrderList(marketType, order.marketIndex);
140
140
  }
141
- if (__1.isVariant(order.status, 'open')) {
141
+ if ((0, __1.isVariant)(order.status, 'open')) {
142
142
  this.openOrders
143
143
  .get(marketType)
144
- .add(NodeList_1.getOrderSignature(order.orderId, userAccount));
144
+ .add((0, NodeList_1.getOrderSignature)(order.orderId, userAccount));
145
145
  }
146
146
  (_a = this.getListForOrder(order, slot)) === null || _a === void 0 ? void 0 : _a.insert(order, marketType, userAccount);
147
147
  if (onInsert) {
@@ -193,16 +193,16 @@ class DLOB {
193
193
  }
194
194
  trigger(order, userAccount, slot, onTrigger) {
195
195
  var _a;
196
- if (__1.isVariant(order.status, 'init')) {
196
+ if ((0, __1.isVariant)(order.status, 'init')) {
197
197
  return;
198
198
  }
199
199
  this.updateRestingLimitOrders(slot);
200
- if (__1.isTriggered(order)) {
200
+ if ((0, __1.isTriggered)(order)) {
201
201
  return;
202
202
  }
203
- const marketType = __1.getVariant(order.marketType);
203
+ const marketType = (0, __1.getVariant)(order.marketType);
204
204
  const triggerList = this.orderLists.get(marketType).get(order.marketIndex)
205
- .trigger[__1.isVariant(order.triggerCondition, 'above') ? 'above' : 'below'];
205
+ .trigger[(0, __1.isVariant)(order.triggerCondition, 'above') ? 'above' : 'below'];
206
206
  triggerList.remove(order, userAccount);
207
207
  (_a = this.getListForOrder(order, slot)) === null || _a === void 0 ? void 0 : _a.insert(order, marketType, userAccount);
208
208
  if (onTrigger) {
@@ -211,7 +211,7 @@ class DLOB {
211
211
  }
212
212
  delete(order, userAccount, slot, onDelete) {
213
213
  var _a;
214
- if (__1.isVariant(order.status, 'init')) {
214
+ if ((0, __1.isVariant)(order.status, 'init')) {
215
215
  return;
216
216
  }
217
217
  this.updateRestingLimitOrders(slot);
@@ -221,29 +221,29 @@ class DLOB {
221
221
  }
222
222
  }
223
223
  getListForOrder(order, slot) {
224
- const isInactiveTriggerOrder = __1.mustBeTriggered(order) && !__1.isTriggered(order);
224
+ const isInactiveTriggerOrder = (0, __1.mustBeTriggered)(order) && !(0, __1.isTriggered)(order);
225
225
  let type;
226
226
  if (isInactiveTriggerOrder) {
227
227
  type = 'trigger';
228
228
  }
229
- else if (__1.isOneOfVariant(order.orderType, ['market', 'triggerMarket', 'oracle'])) {
229
+ else if ((0, __1.isOneOfVariant)(order.orderType, ['market', 'triggerMarket', 'oracle'])) {
230
230
  type = 'market';
231
231
  }
232
232
  else if (order.oraclePriceOffset !== 0) {
233
233
  type = 'floatingLimit';
234
234
  }
235
235
  else {
236
- const isResting = __1.isRestingLimitOrder(order, slot);
236
+ const isResting = (0, __1.isRestingLimitOrder)(order, slot);
237
237
  type = isResting ? 'restingLimit' : 'takingLimit';
238
238
  }
239
239
  let subType;
240
240
  if (isInactiveTriggerOrder) {
241
- subType = __1.isVariant(order.triggerCondition, 'above') ? 'above' : 'below';
241
+ subType = (0, __1.isVariant)(order.triggerCondition, 'above') ? 'above' : 'below';
242
242
  }
243
243
  else {
244
- subType = __1.isVariant(order.direction, 'long') ? 'bid' : 'ask';
244
+ subType = (0, __1.isVariant)(order.direction, 'long') ? 'bid' : 'ask';
245
245
  }
246
- const marketType = __1.getVariant(order.marketType);
246
+ const marketType = (0, __1.getVariant)(order.marketType);
247
247
  if (!this.orderLists.has(marketType)) {
248
248
  return undefined;
249
249
  }
@@ -261,7 +261,7 @@ class DLOB {
261
261
  for (const [_, nodeLists] of this.orderLists.get(marketTypeStr)) {
262
262
  const nodesToUpdate = [];
263
263
  for (const node of nodeLists.takingLimit.ask.getGenerator()) {
264
- if (!__1.isRestingLimitOrder(node.order, slot)) {
264
+ if (!(0, __1.isRestingLimitOrder)(node.order, slot)) {
265
265
  continue;
266
266
  }
267
267
  nodesToUpdate.push({
@@ -270,7 +270,7 @@ class DLOB {
270
270
  });
271
271
  }
272
272
  for (const node of nodeLists.takingLimit.bid.getGenerator()) {
273
- if (!__1.isRestingLimitOrder(node.order, slot)) {
273
+ if (!(0, __1.isRestingLimitOrder)(node.order, slot)) {
274
274
  continue;
275
275
  }
276
276
  nodesToUpdate.push({
@@ -286,7 +286,7 @@ class DLOB {
286
286
  }
287
287
  }
288
288
  getOrder(orderId, userAccount) {
289
- const orderSignature = NodeList_1.getOrderSignature(orderId, userAccount);
289
+ const orderSignature = (0, NodeList_1.getOrderSignature)(orderId, userAccount);
290
290
  for (const nodeList of this.getNodeLists()) {
291
291
  const node = nodeList.get(orderSignature);
292
292
  if (node) {
@@ -296,18 +296,44 @@ class DLOB {
296
296
  return undefined;
297
297
  }
298
298
  findNodesToFill(marketIndex, fallbackBid, fallbackAsk, slot, ts, marketType, oraclePriceData, stateAccount, marketAccount) {
299
- if (exchangeStatus_1.fillPaused(stateAccount, marketAccount)) {
299
+ if ((0, exchangeStatus_1.fillPaused)(stateAccount, marketAccount)) {
300
300
  return [];
301
301
  }
302
- const isAmmPaused = exchangeStatus_1.ammPaused(stateAccount, marketAccount);
303
- const minAuctionDuration = __1.isVariant(marketType, 'perp')
302
+ const isAmmPaused = (0, exchangeStatus_1.ammPaused)(stateAccount, marketAccount);
303
+ const minAuctionDuration = (0, __1.isVariant)(marketType, 'perp')
304
304
  ? stateAccount.minPerpAuctionDuration
305
305
  : 0;
306
306
  const restingLimitOrderNodesToFill = this.findRestingLimitOrderNodesToFill(marketIndex, slot, marketType, oraclePriceData, isAmmPaused, minAuctionDuration, fallbackAsk, fallbackBid);
307
307
  const takingOrderNodesToFill = this.findTakingNodesToFill(marketIndex, slot, marketType, oraclePriceData, isAmmPaused, minAuctionDuration, fallbackAsk, fallbackBid);
308
308
  // get expired market nodes
309
309
  const expiredNodesToFill = this.findExpiredNodesToFill(marketIndex, ts, marketType);
310
- return restingLimitOrderNodesToFill.concat(takingOrderNodesToFill, expiredNodesToFill);
310
+ // for spot, multiple makers isn't supported, so don't merge
311
+ if ((0, __1.isVariant)(marketType, 'spot')) {
312
+ return restingLimitOrderNodesToFill.concat(takingOrderNodesToFill, expiredNodesToFill);
313
+ }
314
+ return this.mergeNodesToFill(restingLimitOrderNodesToFill, takingOrderNodesToFill).concat(expiredNodesToFill);
315
+ }
316
+ mergeNodesToFill(restingLimitOrderNodesToFill, takingOrderNodesToFill) {
317
+ const mergedNodesToFill = new Map();
318
+ const mergeNodesToFillHelper = (nodesToFillArray) => {
319
+ nodesToFillArray.forEach((nodeToFill) => {
320
+ const nodeSignature = (0, NodeList_1.getOrderSignature)(nodeToFill.node.order.orderId, nodeToFill.node.userAccount);
321
+ if (!mergedNodesToFill.has(nodeSignature)) {
322
+ mergedNodesToFill.set(nodeSignature, {
323
+ node: nodeToFill.node,
324
+ makerNodes: [],
325
+ });
326
+ }
327
+ if (nodeToFill.makerNodes) {
328
+ mergedNodesToFill
329
+ .get(nodeSignature)
330
+ .makerNodes.push(...nodeToFill.makerNodes);
331
+ }
332
+ });
333
+ };
334
+ mergeNodesToFillHelper(restingLimitOrderNodesToFill);
335
+ mergeNodesToFillHelper(takingOrderNodesToFill);
336
+ return Array.from(mergedNodesToFill.values());
311
337
  }
312
338
  findRestingLimitOrderNodesToFill(marketIndex, slot, marketType, oraclePriceData, isAmmPaused, minAuctionDuration, fallbackAsk, fallbackBid) {
313
339
  const nodesToFill = new Array();
@@ -339,7 +365,7 @@ class DLOB {
339
365
  const nodesToFill = new Array();
340
366
  let takingOrderGenerator = this.getTakingAsks(marketIndex, marketType, slot, oraclePriceData);
341
367
  const takingAsksCrossingBids = this.findTakingNodesCrossingMakerNodes(marketIndex, slot, marketType, oraclePriceData, takingOrderGenerator, this.getMakerLimitBids.bind(this), (takerPrice, makerPrice) => {
342
- if (__1.isVariant(marketType, 'spot')) {
368
+ if ((0, __1.isVariant)(marketType, 'spot')) {
343
369
  if (takerPrice === undefined) {
344
370
  return false;
345
371
  }
@@ -363,7 +389,7 @@ class DLOB {
363
389
  }
364
390
  takingOrderGenerator = this.getTakingBids(marketIndex, marketType, slot, oraclePriceData);
365
391
  const takingBidsToFill = this.findTakingNodesCrossingMakerNodes(marketIndex, slot, marketType, oraclePriceData, takingOrderGenerator, this.getMakerLimitAsks.bind(this), (takerPrice, makerPrice) => {
366
- if (__1.isVariant(marketType, 'spot')) {
392
+ if ((0, __1.isVariant)(marketType, 'spot')) {
367
393
  if (takerPrice === undefined) {
368
394
  return false;
369
395
  }
@@ -407,7 +433,7 @@ class DLOB {
407
433
  }
408
434
  nodesToFill.push({
409
435
  node: takerNode,
410
- makerNode: makerNode,
436
+ makerNodes: [makerNode],
411
437
  });
412
438
  const makerOrder = makerNode.order;
413
439
  const takerOrder = takerNode.order;
@@ -435,20 +461,20 @@ class DLOB {
435
461
  let nextNode = nodeGenerator.next();
436
462
  while (!nextNode.done) {
437
463
  const node = nextNode.value;
438
- if (__1.isVariant(marketType, 'spot') && ((_a = node.order) === null || _a === void 0 ? void 0 : _a.postOnly)) {
464
+ if ((0, __1.isVariant)(marketType, 'spot') && ((_a = node.order) === null || _a === void 0 ? void 0 : _a.postOnly)) {
439
465
  nextNode = nodeGenerator.next();
440
466
  continue;
441
467
  }
442
- const nodePrice = __1.getLimitPrice(node.order, oraclePriceData, slot);
468
+ const nodePrice = (0, __1.getLimitPrice)(node.order, oraclePriceData, slot);
443
469
  // order crosses if there is no limit price or it crosses fallback price
444
470
  const crosses = doesCross(nodePrice, fallbackPrice);
445
471
  // fallback is available if auction is complete or it's a spot order
446
- const fallbackAvailable = __1.isVariant(marketType, 'spot') ||
447
- __1.isFallbackAvailableLiquiditySource(node.order, minAuctionDuration, slot);
472
+ const fallbackAvailable = (0, __1.isVariant)(marketType, 'spot') ||
473
+ (0, __1.isFallbackAvailableLiquiditySource)(node.order, minAuctionDuration, slot);
448
474
  if (crosses && fallbackAvailable) {
449
475
  nodesToFill.push({
450
476
  node: node,
451
- makerNode: undefined, // filled by fallback
477
+ makerNodes: [], // filled by fallback
452
478
  });
453
479
  }
454
480
  nextNode = nodeGenerator.next();
@@ -457,7 +483,7 @@ class DLOB {
457
483
  }
458
484
  findExpiredNodesToFill(marketIndex, ts, marketType) {
459
485
  const nodesToFill = new Array();
460
- const marketTypeStr = __1.getVariant(marketType);
486
+ const marketTypeStr = (0, __1.getVariant)(marketType);
461
487
  const nodeLists = this.orderLists.get(marketTypeStr).get(marketIndex);
462
488
  if (!nodeLists) {
463
489
  return nodesToFill;
@@ -477,18 +503,20 @@ class DLOB {
477
503
  ];
478
504
  for (const bidGenerator of bidGenerators) {
479
505
  for (const bid of bidGenerator) {
480
- if (__1.isOrderExpired(bid.order, ts)) {
506
+ if ((0, __1.isOrderExpired)(bid.order, ts)) {
481
507
  nodesToFill.push({
482
508
  node: bid,
509
+ makerNodes: [],
483
510
  });
484
511
  }
485
512
  }
486
513
  }
487
514
  for (const askGenerator of askGenerators) {
488
515
  for (const ask of askGenerator) {
489
- if (__1.isOrderExpired(ask.order, ts)) {
516
+ if ((0, __1.isOrderExpired)(ask.order, ts)) {
490
517
  nodesToFill.push({
491
518
  node: ask,
519
+ makerNodes: [],
492
520
  });
493
521
  }
494
522
  }
@@ -501,17 +529,19 @@ class DLOB {
501
529
  for (const marketBid of this.getTakingBids(marketIndex, marketType, slot, oraclePriceData)) {
502
530
  nodesToFill.push({
503
531
  node: marketBid,
532
+ makerNodes: [],
504
533
  });
505
534
  }
506
535
  for (const marketAsk of this.getTakingAsks(marketIndex, marketType, slot, oraclePriceData)) {
507
536
  nodesToFill.push({
508
537
  node: marketAsk,
538
+ makerNodes: [],
509
539
  });
510
540
  }
511
541
  return nodesToFill;
512
542
  }
513
543
  *getTakingBids(marketIndex, marketType, slot, oraclePriceData) {
514
- const marketTypeStr = __1.getVariant(marketType);
544
+ const marketTypeStr = (0, __1.getVariant)(marketType);
515
545
  const orderLists = this.orderLists.get(marketTypeStr).get(marketIndex);
516
546
  if (!orderLists) {
517
547
  return;
@@ -526,7 +556,7 @@ class DLOB {
526
556
  });
527
557
  }
528
558
  *getTakingAsks(marketIndex, marketType, slot, oraclePriceData) {
529
- const marketTypeStr = __1.getVariant(marketType);
559
+ const marketTypeStr = (0, __1.getVariant)(marketType);
530
560
  const orderLists = this.orderLists.get(marketTypeStr).get(marketIndex);
531
561
  if (!orderLists) {
532
562
  return;
@@ -577,11 +607,11 @@ class DLOB {
577
607
  }
578
608
  }
579
609
  *getRestingLimitAsks(marketIndex, slot, marketType, oraclePriceData) {
580
- if (__1.isVariant(marketType, 'spot') && !oraclePriceData) {
610
+ if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
581
611
  throw new Error('Must provide OraclePriceData to get spot asks');
582
612
  }
583
613
  this.updateRestingLimitOrders(slot);
584
- const marketTypeStr = __1.getVariant(marketType);
614
+ const marketTypeStr = (0, __1.getVariant)(marketType);
585
615
  const nodeLists = this.orderLists.get(marketTypeStr).get(marketIndex);
586
616
  if (!nodeLists) {
587
617
  return;
@@ -612,11 +642,11 @@ class DLOB {
612
642
  }
613
643
  }
614
644
  *getRestingLimitBids(marketIndex, slot, marketType, oraclePriceData) {
615
- if (__1.isVariant(marketType, 'spot') && !oraclePriceData) {
645
+ if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
616
646
  throw new Error('Must provide OraclePriceData to get spot bids');
617
647
  }
618
648
  this.updateRestingLimitOrders(slot);
619
- const marketTypeStr = __1.getVariant(marketType);
649
+ const marketTypeStr = (0, __1.getVariant)(marketType);
620
650
  const nodeLists = this.orderLists.get(marketTypeStr).get(marketIndex);
621
651
  if (!nodeLists) {
622
652
  return;
@@ -647,23 +677,23 @@ class DLOB {
647
677
  }
648
678
  }
649
679
  *getAsks(marketIndex, fallbackAsk, slot, marketType, oraclePriceData) {
650
- if (__1.isVariant(marketType, 'spot') && !oraclePriceData) {
680
+ if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
651
681
  throw new Error('Must provide OraclePriceData to get spot asks');
652
682
  }
653
683
  const generatorList = [
654
684
  this.getTakingAsks(marketIndex, marketType, slot, oraclePriceData),
655
685
  this.getRestingLimitAsks(marketIndex, slot, marketType, oraclePriceData),
656
686
  ];
657
- const marketTypeStr = __1.getVariant(marketType);
687
+ const marketTypeStr = (0, __1.getVariant)(marketType);
658
688
  if (marketTypeStr === 'perp' && fallbackAsk) {
659
- generatorList.push(NodeList_1.getVammNodeGenerator(fallbackAsk));
689
+ generatorList.push((0, NodeList_1.getVammNodeGenerator)(fallbackAsk));
660
690
  }
661
691
  yield* this.getBestNode(generatorList, oraclePriceData, slot, (bestNode, currentNode, slot, oraclePriceData) => {
662
692
  const bestNodeTaking = bestNode.order
663
- ? __1.isTakingOrder(bestNode.order, slot)
693
+ ? (0, __1.isTakingOrder)(bestNode.order, slot)
664
694
  : false;
665
695
  const currentNodeTaking = currentNode.order
666
- ? __1.isTakingOrder(currentNode.order, slot)
696
+ ? (0, __1.isTakingOrder)(currentNode.order, slot)
667
697
  : false;
668
698
  if (bestNodeTaking && currentNodeTaking) {
669
699
  return bestNode.order.slot.lt(currentNode.order.slot);
@@ -680,23 +710,23 @@ class DLOB {
680
710
  });
681
711
  }
682
712
  *getBids(marketIndex, fallbackBid, slot, marketType, oraclePriceData) {
683
- if (__1.isVariant(marketType, 'spot') && !oraclePriceData) {
713
+ if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
684
714
  throw new Error('Must provide OraclePriceData to get spot bids');
685
715
  }
686
716
  const generatorList = [
687
717
  this.getTakingBids(marketIndex, marketType, slot, oraclePriceData),
688
718
  this.getRestingLimitBids(marketIndex, slot, marketType, oraclePriceData),
689
719
  ];
690
- const marketTypeStr = __1.getVariant(marketType);
720
+ const marketTypeStr = (0, __1.getVariant)(marketType);
691
721
  if (marketTypeStr === 'perp' && fallbackBid) {
692
- generatorList.push(NodeList_1.getVammNodeGenerator(fallbackBid));
722
+ generatorList.push((0, NodeList_1.getVammNodeGenerator)(fallbackBid));
693
723
  }
694
724
  yield* this.getBestNode(generatorList, oraclePriceData, slot, (bestNode, currentNode, slot, oraclePriceData) => {
695
725
  const bestNodeTaking = bestNode.order
696
- ? __1.isTakingOrder(bestNode.order, slot)
726
+ ? (0, __1.isTakingOrder)(bestNode.order, slot)
697
727
  : false;
698
728
  const currentNodeTaking = currentNode.order
699
- ? __1.isTakingOrder(currentNode.order, slot)
729
+ ? (0, __1.isTakingOrder)(currentNode.order, slot)
700
730
  : false;
701
731
  if (bestNodeTaking && currentNodeTaking) {
702
732
  return bestNode.order.slot.lt(currentNode.order.slot);
@@ -750,7 +780,7 @@ class DLOB {
750
780
  this.getListForOrder(newAskOrder, slot).update(newAskOrder, askNode.userAccount);
751
781
  nodesToFill.push({
752
782
  node: takerNode,
753
- makerNode: makerNode,
783
+ makerNodes: [makerNode],
754
784
  });
755
785
  if (newAskOrder.baseAssetAmount.eq(newAskOrder.baseAssetAmountFilled)) {
756
786
  break;
@@ -801,11 +831,11 @@ class DLOB {
801
831
  .value.getPrice(oraclePriceData, slot);
802
832
  }
803
833
  findNodesToTrigger(marketIndex, slot, oraclePrice, marketType, stateAccount) {
804
- if (exchangeStatus_1.exchangePaused(stateAccount)) {
834
+ if ((0, exchangeStatus_1.exchangePaused)(stateAccount)) {
805
835
  return [];
806
836
  }
807
837
  const nodesToTrigger = [];
808
- const marketTypeStr = __1.getVariant(marketType);
838
+ const marketTypeStr = (0, __1.getVariant)(marketType);
809
839
  const marketNodeLists = this.orderLists.get(marketTypeStr).get(marketIndex);
810
840
  const triggerAboveList = marketNodeLists
811
841
  ? marketNodeLists.trigger.above
@@ -840,46 +870,46 @@ class DLOB {
840
870
  return nodesToTrigger;
841
871
  }
842
872
  printTopOfOrderLists(sdkConfig, driftClient, slotSubscriber, marketIndex, marketType) {
843
- if (__1.isVariant(marketType, 'perp')) {
873
+ if ((0, __1.isVariant)(marketType, 'perp')) {
844
874
  const market = driftClient.getPerpMarketAccount(marketIndex);
845
875
  const slot = slotSubscriber.getSlot();
846
876
  const oraclePriceData = driftClient.getOracleDataForPerpMarket(marketIndex);
847
- const fallbackAsk = __1.calculateAskPrice(market, oraclePriceData);
848
- const fallbackBid = __1.calculateBidPrice(market, oraclePriceData);
877
+ const fallbackAsk = (0, __1.calculateAskPrice)(market, oraclePriceData);
878
+ const fallbackBid = (0, __1.calculateBidPrice)(market, oraclePriceData);
849
879
  const bestAsk = this.getBestAsk(marketIndex, fallbackAsk, slot, marketType, oraclePriceData);
850
880
  const bestBid = this.getBestBid(marketIndex, fallbackBid, slot, marketType, oraclePriceData);
851
881
  const mid = bestAsk.add(bestBid).div(new __1.BN(2));
852
- const bidSpread = (__1.convertToNumber(bestBid, __1.PRICE_PRECISION) /
853
- __1.convertToNumber(oraclePriceData.price, __1.PRICE_PRECISION) -
882
+ const bidSpread = ((0, __1.convertToNumber)(bestBid, __1.PRICE_PRECISION) /
883
+ (0, __1.convertToNumber)(oraclePriceData.price, __1.PRICE_PRECISION) -
854
884
  1) *
855
885
  100.0;
856
- const askSpread = (__1.convertToNumber(bestAsk, __1.PRICE_PRECISION) /
857
- __1.convertToNumber(oraclePriceData.price, __1.PRICE_PRECISION) -
886
+ const askSpread = ((0, __1.convertToNumber)(bestAsk, __1.PRICE_PRECISION) /
887
+ (0, __1.convertToNumber)(oraclePriceData.price, __1.PRICE_PRECISION) -
858
888
  1) *
859
889
  100.0;
860
890
  console.log(`Market ${sdkConfig.MARKETS[marketIndex].symbol} Orders`);
861
- console.log(` Ask`, __1.convertToNumber(bestAsk, __1.PRICE_PRECISION).toFixed(3), `(${askSpread.toFixed(4)}%)`);
862
- console.log(` Mid`, __1.convertToNumber(mid, __1.PRICE_PRECISION).toFixed(3));
863
- console.log(` Bid`, __1.convertToNumber(bestBid, __1.PRICE_PRECISION).toFixed(3), `(${bidSpread.toFixed(4)}%)`);
891
+ console.log(` Ask`, (0, __1.convertToNumber)(bestAsk, __1.PRICE_PRECISION).toFixed(3), `(${askSpread.toFixed(4)}%)`);
892
+ console.log(` Mid`, (0, __1.convertToNumber)(mid, __1.PRICE_PRECISION).toFixed(3));
893
+ console.log(` Bid`, (0, __1.convertToNumber)(bestBid, __1.PRICE_PRECISION).toFixed(3), `(${bidSpread.toFixed(4)}%)`);
864
894
  }
865
- else if (__1.isVariant(marketType, 'spot')) {
895
+ else if ((0, __1.isVariant)(marketType, 'spot')) {
866
896
  const slot = slotSubscriber.getSlot();
867
897
  const oraclePriceData = driftClient.getOracleDataForPerpMarket(marketIndex);
868
898
  const bestAsk = this.getBestAsk(marketIndex, undefined, slot, marketType, oraclePriceData);
869
899
  const bestBid = this.getBestBid(marketIndex, undefined, slot, marketType, oraclePriceData);
870
900
  const mid = bestAsk.add(bestBid).div(new __1.BN(2));
871
- const bidSpread = (__1.convertToNumber(bestBid, __1.PRICE_PRECISION) /
872
- __1.convertToNumber(oraclePriceData.price, __1.PRICE_PRECISION) -
901
+ const bidSpread = ((0, __1.convertToNumber)(bestBid, __1.PRICE_PRECISION) /
902
+ (0, __1.convertToNumber)(oraclePriceData.price, __1.PRICE_PRECISION) -
873
903
  1) *
874
904
  100.0;
875
- const askSpread = (__1.convertToNumber(bestAsk, __1.PRICE_PRECISION) /
876
- __1.convertToNumber(oraclePriceData.price, __1.PRICE_PRECISION) -
905
+ const askSpread = ((0, __1.convertToNumber)(bestAsk, __1.PRICE_PRECISION) /
906
+ (0, __1.convertToNumber)(oraclePriceData.price, __1.PRICE_PRECISION) -
877
907
  1) *
878
908
  100.0;
879
909
  console.log(`Market ${sdkConfig.MARKETS[marketIndex].symbol} Orders`);
880
- console.log(` Ask`, __1.convertToNumber(bestAsk, __1.PRICE_PRECISION).toFixed(3), `(${askSpread.toFixed(4)}%)`);
881
- console.log(` Mid`, __1.convertToNumber(mid, __1.PRICE_PRECISION).toFixed(3));
882
- console.log(` Bid`, __1.convertToNumber(bestBid, __1.PRICE_PRECISION).toFixed(3), `(${bidSpread.toFixed(4)}%)`);
910
+ console.log(` Ask`, (0, __1.convertToNumber)(bestAsk, __1.PRICE_PRECISION).toFixed(3), `(${askSpread.toFixed(4)}%)`);
911
+ console.log(` Mid`, (0, __1.convertToNumber)(mid, __1.PRICE_PRECISION).toFixed(3));
912
+ console.log(` Bid`, (0, __1.convertToNumber)(bestBid, __1.PRICE_PRECISION).toFixed(3), `(${bidSpread.toFixed(4)}%)`);
883
913
  }
884
914
  }
885
915
  getDLOBOrders() {
@@ -47,12 +47,12 @@ export declare class TriggerOrderNode extends OrderNode {
47
47
  previous?: TriggerOrderNode;
48
48
  getSortValue(order: Order): BN;
49
49
  }
50
- export declare type DLOBNodeMap = {
50
+ export type DLOBNodeMap = {
51
51
  restingLimit: RestingLimitOrderNode;
52
52
  takingLimit: TakingLimitOrderNode;
53
53
  floatingLimit: FloatingLimitOrderNode;
54
54
  market: MarketOrderNode;
55
55
  trigger: TriggerOrderNode;
56
56
  };
57
- export declare type DLOBNodeType = 'restingLimit' | 'takingLimit' | 'floatingLimit' | 'market' | ('trigger' & keyof DLOBNodeMap);
57
+ export type DLOBNodeType = 'restingLimit' | 'takingLimit' | 'floatingLimit' | 'market' | ('trigger' & keyof DLOBNodeMap);
58
58
  export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: PublicKey): DLOBNodeMap[T];
@@ -13,20 +13,20 @@ class OrderNode {
13
13
  this.sortValue = this.getSortValue(order);
14
14
  }
15
15
  getLabel() {
16
- let msg = `Order ${NodeList_1.getOrderSignature(this.order.orderId, this.userAccount)}`;
17
- msg += ` ${__1.isVariant(this.order.direction, 'long') ? 'LONG' : 'SHORT'} `;
18
- msg += `${__1.convertToNumber(this.order.baseAssetAmount, __1.AMM_RESERVE_PRECISION).toFixed(3)}`;
16
+ let msg = `Order ${(0, NodeList_1.getOrderSignature)(this.order.orderId, this.userAccount)}`;
17
+ msg += ` ${(0, __1.isVariant)(this.order.direction, 'long') ? 'LONG' : 'SHORT'} `;
18
+ msg += `${(0, __1.convertToNumber)(this.order.baseAssetAmount, __1.AMM_RESERVE_PRECISION).toFixed(3)}`;
19
19
  if (this.order.price.gt(__1.ZERO)) {
20
- msg += ` @ ${__1.convertToNumber(this.order.price, __1.PRICE_PRECISION).toFixed(3)}`;
20
+ msg += ` @ ${(0, __1.convertToNumber)(this.order.price, __1.PRICE_PRECISION).toFixed(3)}`;
21
21
  }
22
22
  if (this.order.triggerPrice.gt(__1.ZERO)) {
23
- msg += ` ${__1.isVariant(this.order.triggerCondition, 'below') ? 'BELOW' : 'ABOVE'}`;
24
- msg += ` ${__1.convertToNumber(this.order.triggerPrice, __1.PRICE_PRECISION).toFixed(3)}`;
23
+ msg += ` ${(0, __1.isVariant)(this.order.triggerCondition, 'below') ? 'BELOW' : 'ABOVE'}`;
24
+ msg += ` ${(0, __1.convertToNumber)(this.order.triggerPrice, __1.PRICE_PRECISION).toFixed(3)}`;
25
25
  }
26
26
  return msg;
27
27
  }
28
28
  getPrice(oraclePriceData, slot) {
29
- return __1.getLimitPrice(this.order, oraclePriceData, slot);
29
+ return (0, __1.getLimitPrice)(this.order, oraclePriceData, slot);
30
30
  }
31
31
  isBaseFilled() {
32
32
  return this.order.baseAssetAmountFilled.eq(this.order.baseAssetAmount);
@@ -2,11 +2,11 @@
2
2
  import { PublicKey } from '@solana/web3.js';
3
3
  import { Idl } from '@project-serum/anchor';
4
4
  import { Order } from '../types';
5
- export declare type DLOBOrder = {
5
+ export type DLOBOrder = {
6
6
  user: PublicKey;
7
7
  order: Order;
8
8
  };
9
- export declare type DLOBOrders = DLOBOrder[];
9
+ export type DLOBOrders = DLOBOrder[];
10
10
  export declare class DLOBOrdersCoder {
11
11
  private idl;
12
12
  constructor(idl: Idl);
@@ -2,7 +2,7 @@
2
2
  import { BN, MarketTypeStr, Order } from '..';
3
3
  import { PublicKey } from '@solana/web3.js';
4
4
  import { DLOBNode, DLOBNodeMap } from './DLOBNode';
5
- export declare type SortDirection = 'asc' | 'desc';
5
+ export type SortDirection = 'asc' | 'desc';
6
6
  export declare function getOrderSignature(orderId: number, userAccount: PublicKey): string;
7
7
  export interface DLOBNodeGenerator {
8
8
  getGenerator(): Generator<DLOBNode>;
@@ -20,10 +20,10 @@ class NodeList {
20
20
  this.nodeMap.clear();
21
21
  }
22
22
  insert(order, marketType, userAccount) {
23
- if (__1.isVariant(order.status, 'init')) {
23
+ if ((0, __1.isVariant)(order.status, 'init')) {
24
24
  return;
25
25
  }
26
- const newNode = DLOBNode_1.createNode(this.nodeType, order, userAccount);
26
+ const newNode = (0, DLOBNode_1.createNode)(this.nodeType, order, userAccount);
27
27
  const orderSignature = getOrderSignature(order.orderId, userAccount);
28
28
  if (this.nodeMap.has(orderSignature)) {
29
29
  return;
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="bn.js" />
3
3
  import { AnchorProvider, BN, Program } from '@project-serum/anchor';
4
- import { StateAccount, IWallet, PositionDirection, UserAccount, PerpMarketAccount, OrderParams, Order, SpotMarketAccount, SpotPosition, MakerInfo, TakerInfo, OptionalOrderParams, OrderType, ReferrerInfo, MarketType, TxParams, SerumV3FulfillmentConfigAccount, OrderTriggerCondition } from './types';
4
+ import { StateAccount, IWallet, PositionDirection, UserAccount, PerpMarketAccount, OrderParams, Order, SpotMarketAccount, SpotPosition, MakerInfo, TakerInfo, OptionalOrderParams, OrderType, ReferrerInfo, MarketType, TxParams, SerumV3FulfillmentConfigAccount, OrderTriggerCondition, PerpMarketExtendedInfo } from './types';
5
5
  import * as anchor from '@project-serum/anchor';
6
6
  import { Connection, PublicKey, TransactionSignature, ConfirmOptions, Transaction, TransactionInstruction, AccountMeta, Signer, AddressLookupTableAccount } from '@solana/web3.js';
7
7
  import { TokenFaucet } from './tokenFaucet';
@@ -14,7 +14,7 @@ import { DriftClientConfig } from './driftClientConfig';
14
14
  import { User } from './user';
15
15
  import { UserSubscriptionConfig } from './userConfig';
16
16
  import { UserStats } from './userStats';
17
- declare type RemainingAccountParams = {
17
+ type RemainingAccountParams = {
18
18
  userAccounts: UserAccount[];
19
19
  writablePerpMarketIndexes?: number[];
20
20
  writableSpotMarketIndexes?: number[];
@@ -320,6 +320,7 @@ export declare class DriftClient {
320
320
  settleRevenueToInsuranceFund(marketIndex: number): Promise<TransactionSignature>;
321
321
  resolvePerpPnlDeficit(spotMarketIndex: number, perpMarketIndex: number, txParams?: TxParams): Promise<TransactionSignature>;
322
322
  getResolvePerpPnlDeficitIx(spotMarketIndex: number, perpMarketIndex: number): Promise<TransactionInstruction>;
323
+ getPerpMarketExtendedInfo(marketIndex: number): PerpMarketExtendedInfo;
323
324
  sendTransaction(tx: Transaction, additionalSigners?: Array<Signer>, opts?: ConfirmOptions, preSigned?: boolean): Promise<TxSigAndSlot>;
324
325
  }
325
326
  export {};