@drift-labs/sdk 2.42.0-beta.8 → 2.43.0-beta.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 (71) hide show
  1. package/VERSION +1 -1
  2. package/bun.lockb +0 -0
  3. package/lib/accounts/bulkAccountLoader.d.ts +1 -2
  4. package/lib/addresses/pda.d.ts +1 -0
  5. package/lib/adminClient.d.ts +1 -0
  6. package/lib/config.d.ts +1 -0
  7. package/lib/config.js +1 -0
  8. package/lib/constants/numericConstants.d.ts +62 -60
  9. package/lib/constants/perpMarkets.js +42 -2
  10. package/lib/constants/spotMarkets.d.ts +1 -0
  11. package/lib/dlob/DLOB.d.ts +10 -16
  12. package/lib/dlob/DLOB.js +9 -39
  13. package/lib/dlob/DLOBNode.d.ts +1 -0
  14. package/lib/dlob/NodeList.d.ts +1 -0
  15. package/lib/dlob/orderBookLevels.d.ts +2 -1
  16. package/lib/driftClient.d.ts +10 -2
  17. package/lib/driftClient.js +20 -18
  18. package/lib/events/fetchLogs.js +2 -0
  19. package/lib/factory/bigNum.d.ts +8 -7
  20. package/lib/idl/drift.json +251 -239
  21. package/lib/index.d.ts +3 -0
  22. package/lib/index.js +3 -0
  23. package/lib/jupiter/jupiterClient.d.ts +1 -0
  24. package/lib/marinade/index.d.ts +1 -0
  25. package/lib/math/amm.d.ts +2 -1
  26. package/lib/math/auction.d.ts +1 -0
  27. package/lib/math/conversion.d.ts +2 -1
  28. package/lib/math/funding.d.ts +1 -0
  29. package/lib/math/funding.js +1 -1
  30. package/lib/math/insurance.d.ts +1 -0
  31. package/lib/math/margin.d.ts +1 -0
  32. package/lib/math/market.d.ts +1 -0
  33. package/lib/math/oracles.d.ts +1 -0
  34. package/lib/math/orders.d.ts +1 -0
  35. package/lib/math/position.d.ts +1 -0
  36. package/lib/math/repeg.d.ts +1 -0
  37. package/lib/math/spotBalance.d.ts +3 -2
  38. package/lib/math/spotMarket.d.ts +1 -0
  39. package/lib/math/spotPosition.d.ts +1 -0
  40. package/lib/math/superStake.d.ts +1 -0
  41. package/lib/math/trade.d.ts +1 -0
  42. package/lib/math/utils.d.ts +1 -0
  43. package/lib/oracles/pythClient.d.ts +2 -1
  44. package/lib/oracles/strictOraclePrice.d.ts +1 -0
  45. package/lib/oracles/types.d.ts +1 -0
  46. package/lib/orderParams.d.ts +1 -0
  47. package/lib/orderSubscriber/PollingSubscription.d.ts +1 -2
  48. package/lib/phoenix/phoenixSubscriber.d.ts +1 -0
  49. package/lib/priorityFee/priorityFeeSubscriber.d.ts +1 -2
  50. package/lib/serum/serumSubscriber.d.ts +1 -0
  51. package/lib/tokenFaucet.d.ts +1 -0
  52. package/lib/types.d.ts +6 -14
  53. package/lib/types.js +6 -7
  54. package/lib/user.d.ts +6 -5
  55. package/lib/user.js +17 -11
  56. package/package.json +2 -1
  57. package/src/accounts/bulkAccountLoader.ts +1 -1
  58. package/src/config.ts +2 -0
  59. package/src/constants/perpMarkets.ts +42 -2
  60. package/src/dlob/DLOB.ts +23 -67
  61. package/src/driftClient.ts +41 -27
  62. package/src/events/fetchLogs.ts +3 -0
  63. package/src/events/pollingLogProvider.ts +1 -1
  64. package/src/idl/drift.json +251 -239
  65. package/src/index.ts +3 -0
  66. package/src/math/funding.ts +1 -1
  67. package/src/orderSubscriber/PollingSubscription.ts +1 -1
  68. package/src/priorityFee/priorityFeeSubscriber.ts +1 -1
  69. package/src/types.ts +5 -6
  70. package/src/user.ts +49 -42
  71. package/tests/user/helpers.ts +1 -2
package/VERSION CHANGED
@@ -1 +1 @@
1
- 2.42.0-beta.8
1
+ 2.43.0-beta.0
package/bun.lockb CHANGED
Binary file
@@ -1,5 +1,4 @@
1
1
  /// <reference types="node" />
2
- /// <reference types="node" />
3
2
  import { Commitment, Connection, PublicKey } from '@solana/web3.js';
4
3
  import { BufferAndSlot } from './types';
5
4
  type AccountToLoad = {
@@ -13,7 +12,7 @@ export declare class BulkAccountLoader {
13
12
  accountsToLoad: Map<string, AccountToLoad>;
14
13
  bufferAndSlotMap: Map<string, BufferAndSlot>;
15
14
  errorCallbacks: Map<string, (e: any) => void>;
16
- intervalId?: NodeJS.Timer;
15
+ intervalId?: ReturnType<typeof setTimeout>;
17
16
  loadPromise?: Promise<void>;
18
17
  loadPromiseResolver: () => void;
19
18
  lastTimeLoadingPromiseCleared: number;
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { PublicKey } from '@solana/web3.js';
2
3
  import { BN } from '@coral-xyz/anchor';
3
4
  export declare function getDriftStateAccountPublicKeyAndNonce(programId: PublicKey): Promise<[PublicKey, number]>;
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { PublicKey, TransactionSignature } from '@solana/web3.js';
2
3
  import { FeeStructure, OracleGuardRails, OracleSource, ExchangeStatus, MarketStatus, ContractTier, AssetTier, SpotFulfillmentConfigStatus } from './types';
3
4
  import { BN } from '@coral-xyz/anchor';
package/lib/config.d.ts CHANGED
@@ -14,6 +14,7 @@ type DriftConfig = {
14
14
  PERP_MARKETS: PerpMarketConfig[];
15
15
  SPOT_MARKETS: SpotMarketConfig[];
16
16
  MARKET_LOOKUP_TABLE: string;
17
+ SERUM_LOOKUP_TABLE?: string;
17
18
  };
18
19
  export type DriftEnv = 'devnet' | 'mainnet-beta';
19
20
  export declare const DRIFT_PROGRAM_ID = "dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH";
package/lib/config.js CHANGED
@@ -30,6 +30,7 @@ exports.configs = {
30
30
  PERP_MARKETS: perpMarkets_1.MainnetPerpMarkets,
31
31
  SPOT_MARKETS: spotMarkets_1.MainnetSpotMarkets,
32
32
  MARKET_LOOKUP_TABLE: 'D9cnvzswDikQDf53k4HpQ3KJ9y1Fv3HGGDFYMXnK5T6c',
33
+ SERUM_LOOKUP_TABLE: 'GPZkp76cJtNL2mphCvT6FXkJCVPpouidnacckR6rzKDN',
33
34
  },
34
35
  };
35
36
  let currentConfig = exports.configs.devnet;
@@ -1,61 +1,63 @@
1
- export declare const ZERO: any;
2
- export declare const ONE: any;
3
- export declare const TWO: any;
4
- export declare const THREE: any;
5
- export declare const FOUR: any;
6
- export declare const FIVE: any;
7
- export declare const SIX: any;
8
- export declare const SEVEN: any;
9
- export declare const EIGHT: any;
10
- export declare const NINE: any;
11
- export declare const TEN: any;
12
- export declare const TEN_THOUSAND: any;
13
- export declare const BN_MAX: any;
14
- export declare const TEN_MILLION: any;
15
- export declare const MAX_LEVERAGE: any;
16
- export declare const MAX_LEVERAGE_ORDER_SIZE: any;
17
- export declare const PERCENTAGE_PRECISION_EXP: any;
18
- export declare const PERCENTAGE_PRECISION: any;
19
- export declare const CONCENTRATION_PRECISION: any;
20
- export declare const QUOTE_PRECISION_EXP: any;
21
- export declare const FUNDING_RATE_BUFFER_PRECISION_EXP: any;
22
- export declare const PRICE_PRECISION_EXP: any;
23
- export declare const FUNDING_RATE_PRECISION_EXP: any;
24
- export declare const PEG_PRECISION_EXP: any;
25
- export declare const AMM_RESERVE_PRECISION_EXP: any;
26
- export declare const SPOT_MARKET_RATE_PRECISION_EXP: any;
27
- export declare const SPOT_MARKET_RATE_PRECISION: any;
28
- export declare const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP: any;
29
- export declare const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION: any;
30
- export declare const SPOT_MARKET_UTILIZATION_PRECISION_EXP: any;
31
- export declare const SPOT_MARKET_UTILIZATION_PRECISION: any;
32
- export declare const SPOT_MARKET_WEIGHT_PRECISION: any;
33
- export declare const SPOT_MARKET_BALANCE_PRECISION_EXP: any;
34
- export declare const SPOT_MARKET_BALANCE_PRECISION: any;
35
- export declare const SPOT_MARKET_IMF_PRECISION_EXP: any;
36
- export declare const SPOT_MARKET_IMF_PRECISION: any;
37
- export declare const LIQUIDATION_FEE_PRECISION: any;
38
- export declare const QUOTE_PRECISION: any;
39
- export declare const PRICE_PRECISION: any;
40
- export declare const FUNDING_RATE_PRECISION: any;
41
- export declare const FUNDING_RATE_BUFFER_PRECISION: any;
42
- export declare const PEG_PRECISION: any;
43
- export declare const AMM_RESERVE_PRECISION: any;
44
- export declare const BASE_PRECISION: any;
45
- export declare const BASE_PRECISION_EXP: any;
46
- export declare const AMM_TO_QUOTE_PRECISION_RATIO: any;
47
- export declare const PRICE_DIV_PEG: any;
48
- export declare const PRICE_TO_QUOTE_PRECISION: any;
49
- export declare const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO: any;
50
- export declare const MARGIN_PRECISION: any;
51
- export declare const BID_ASK_SPREAD_PRECISION: any;
52
- export declare const LIQUIDATION_PCT_PRECISION: any;
53
- export declare const FUNDING_RATE_OFFSET_DENOMINATOR: any;
54
- export declare const FIVE_MINUTE: any;
55
- export declare const ONE_HOUR: any;
56
- export declare const ONE_YEAR: any;
1
+ /// <reference types="bn.js" />
2
+ import { BN } from '../';
3
+ export declare const ZERO: BN;
4
+ export declare const ONE: BN;
5
+ export declare const TWO: BN;
6
+ export declare const THREE: BN;
7
+ export declare const FOUR: BN;
8
+ export declare const FIVE: BN;
9
+ export declare const SIX: BN;
10
+ export declare const SEVEN: BN;
11
+ export declare const EIGHT: BN;
12
+ export declare const NINE: BN;
13
+ export declare const TEN: BN;
14
+ export declare const TEN_THOUSAND: BN;
15
+ export declare const BN_MAX: BN;
16
+ export declare const TEN_MILLION: BN;
17
+ export declare const MAX_LEVERAGE: BN;
18
+ export declare const MAX_LEVERAGE_ORDER_SIZE: BN;
19
+ export declare const PERCENTAGE_PRECISION_EXP: BN;
20
+ export declare const PERCENTAGE_PRECISION: BN;
21
+ export declare const CONCENTRATION_PRECISION: BN;
22
+ export declare const QUOTE_PRECISION_EXP: BN;
23
+ export declare const FUNDING_RATE_BUFFER_PRECISION_EXP: BN;
24
+ export declare const PRICE_PRECISION_EXP: BN;
25
+ export declare const FUNDING_RATE_PRECISION_EXP: BN;
26
+ export declare const PEG_PRECISION_EXP: BN;
27
+ export declare const AMM_RESERVE_PRECISION_EXP: BN;
28
+ export declare const SPOT_MARKET_RATE_PRECISION_EXP: BN;
29
+ export declare const SPOT_MARKET_RATE_PRECISION: BN;
30
+ export declare const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP: BN;
31
+ export declare const SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION: BN;
32
+ export declare const SPOT_MARKET_UTILIZATION_PRECISION_EXP: BN;
33
+ export declare const SPOT_MARKET_UTILIZATION_PRECISION: BN;
34
+ export declare const SPOT_MARKET_WEIGHT_PRECISION: BN;
35
+ export declare const SPOT_MARKET_BALANCE_PRECISION_EXP: BN;
36
+ export declare const SPOT_MARKET_BALANCE_PRECISION: BN;
37
+ export declare const SPOT_MARKET_IMF_PRECISION_EXP: BN;
38
+ export declare const SPOT_MARKET_IMF_PRECISION: BN;
39
+ export declare const LIQUIDATION_FEE_PRECISION: BN;
40
+ export declare const QUOTE_PRECISION: BN;
41
+ export declare const PRICE_PRECISION: BN;
42
+ export declare const FUNDING_RATE_PRECISION: BN;
43
+ export declare const FUNDING_RATE_BUFFER_PRECISION: BN;
44
+ export declare const PEG_PRECISION: BN;
45
+ export declare const AMM_RESERVE_PRECISION: BN;
46
+ export declare const BASE_PRECISION: BN;
47
+ export declare const BASE_PRECISION_EXP: BN;
48
+ export declare const AMM_TO_QUOTE_PRECISION_RATIO: BN;
49
+ export declare const PRICE_DIV_PEG: BN;
50
+ export declare const PRICE_TO_QUOTE_PRECISION: BN;
51
+ export declare const AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO: BN;
52
+ export declare const MARGIN_PRECISION: BN;
53
+ export declare const BID_ASK_SPREAD_PRECISION: BN;
54
+ export declare const LIQUIDATION_PCT_PRECISION: BN;
55
+ export declare const FUNDING_RATE_OFFSET_DENOMINATOR: BN;
56
+ export declare const FIVE_MINUTE: BN;
57
+ export declare const ONE_HOUR: BN;
58
+ export declare const ONE_YEAR: BN;
57
59
  export declare const QUOTE_SPOT_MARKET_INDEX = 0;
58
- export declare const LAMPORTS_PRECISION: any;
59
- export declare const LAMPORTS_EXP: any;
60
- export declare const OPEN_ORDER_MARGIN_REQUIREMENT: any;
61
- export declare const DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT: any;
60
+ export declare const LAMPORTS_PRECISION: BN;
61
+ export declare const LAMPORTS_EXP: BN;
62
+ export declare const OPEN_ORDER_MARGIN_REQUIREMENT: BN;
63
+ export declare const DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT: BN;
@@ -151,7 +151,27 @@ exports.DevnetPerpMarkets = [
151
151
  baseAssetSymbol: 'HNT',
152
152
  marketIndex: 14,
153
153
  oracle: new web3_js_1.PublicKey('6Eg8YdfFJQF2HHonzPUBSCCmyUEhrStg9VBLK957sBe6'),
154
- launchTs: 16922949550000,
154
+ launchTs: 1692294955000,
155
+ oracleSource: __1.OracleSource.PYTH,
156
+ },
157
+ {
158
+ fullName: 'INJ',
159
+ category: ['L1', 'Exchange'],
160
+ symbol: 'INJ-PERP',
161
+ baseAssetSymbol: 'INJ',
162
+ marketIndex: 15,
163
+ oracle: new web3_js_1.PublicKey('44uRsNnT35kjkscSu59MxRr9CfkLZWf6gny8bWqUbVxE'),
164
+ launchTs: 1698074659000,
165
+ oracleSource: __1.OracleSource.PYTH,
166
+ },
167
+ {
168
+ fullName: 'LINK',
169
+ category: ['Oracle'],
170
+ symbol: 'LINK-PERP',
171
+ baseAssetSymbol: 'LINK',
172
+ marketIndex: 16,
173
+ oracle: new web3_js_1.PublicKey('9sGidS4qUXS2WvHZFhzw4df1jNd5TvUGZXZVsSjXo7UF'),
174
+ launchTs: 1698074659000,
155
175
  oracleSource: __1.OracleSource.PYTH,
156
176
  },
157
177
  ];
@@ -303,7 +323,27 @@ exports.MainnetPerpMarkets = [
303
323
  baseAssetSymbol: 'HNT',
304
324
  marketIndex: 14,
305
325
  oracle: new web3_js_1.PublicKey('7moA1i5vQUpfDwSpK6Pw9s56ahB7WFGidtbL2ujWrVvm'),
306
- launchTs: 16922949550000,
326
+ launchTs: 1692294955000,
327
+ oracleSource: __1.OracleSource.PYTH,
328
+ },
329
+ {
330
+ fullName: 'INJ',
331
+ category: ['L1', 'Exchange'],
332
+ symbol: 'INJ-PERP',
333
+ baseAssetSymbol: 'INJ',
334
+ marketIndex: 15,
335
+ oracle: new web3_js_1.PublicKey('9EdtbaivHQYA4Nh3XzGR6DwRaoorqXYnmpfsnFhvwuVj'),
336
+ launchTs: 1698074659000,
337
+ oracleSource: __1.OracleSource.PYTH,
338
+ },
339
+ {
340
+ fullName: 'LINK',
341
+ category: ['Oracle'],
342
+ symbol: 'LINK-PERP',
343
+ baseAssetSymbol: 'LINK',
344
+ marketIndex: 16,
345
+ oracle: new web3_js_1.PublicKey('ALdkqQDMfHNg77oCNskfX751kHys4KE7SFuZzuKaN536'),
346
+ launchTs: 1698074659000,
307
347
  oracleSource: __1.OracleSource.PYTH,
308
348
  },
309
349
  ];
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { PublicKey } from '@solana/web3.js';
2
3
  import { BN, DriftEnv, OracleSource } from '../';
3
4
  export type SpotMarketConfig = {
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { NodeList } from './NodeList';
2
3
  import { BN, DLOBNode, DLOBNodeType, DriftClient, MarketType, MarketTypeStr, OraclePriceData, Order, OrderActionRecord, OrderRecord, PerpMarketAccount, PositionDirection, SlotSubscriber, SpotMarketAccount, StateAccount, TriggerOrderNode, UserMap } from '..';
3
4
  import { PublicKey } from '@solana/web3.js';
@@ -26,6 +27,13 @@ export type MarketNodeLists = {
26
27
  };
27
28
  };
28
29
  type OrderBookCallback = () => void;
30
+ /**
31
+ * Receives a DLOBNode and is expected to return true if the node should
32
+ * be taken into account when generating, or false otherwise.
33
+ *
34
+ * Currently used in getRestingLimitBids and getRestingLimitAsks.
35
+ */
36
+ export type DLOBFilterFcn = (node: DLOBNode) => boolean;
29
37
  export type NodeToFill = {
30
38
  node: DLOBNode;
31
39
  makerNodes: DLOBNode[];
@@ -70,22 +78,8 @@ export declare class DLOB {
70
78
  getTakingBids(marketIndex: number, marketType: MarketType, slot: number, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
71
79
  getTakingAsks(marketIndex: number, marketType: MarketType, slot: number, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
72
80
  private getBestNode;
73
- getRestingLimitAsks(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
74
- /**
75
- * Filters the limit asks that are resting and do not cross fallback bid
76
- * Taking orders can only fill against orders that meet this criteria
77
- *
78
- * @returns
79
- */
80
- getMakerLimitAsks(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, fallbackBid?: BN): Generator<DLOBNode>;
81
- getRestingLimitBids(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
82
- /**
83
- * Filters the limit bids that are post only, have been place for sufficiently long or are below the fallback ask
84
- * Market orders can only fill against orders that meet this criteria
85
- *
86
- * @returns
87
- */
88
- getMakerLimitBids(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, fallbackAsk?: BN): Generator<DLOBNode>;
81
+ getRestingLimitAsks(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, filterFcn?: DLOBFilterFcn): Generator<DLOBNode>;
82
+ getRestingLimitBids(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, filterFcn?: DLOBFilterFcn): Generator<DLOBNode>;
89
83
  getAsks(marketIndex: number, fallbackAsk: BN | undefined, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
90
84
  getBids(marketIndex: number, fallbackBid: BN | undefined, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
91
85
  findCrossingRestingLimitOrders(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): NodeToFill[];
package/lib/dlob/DLOB.js CHANGED
@@ -572,7 +572,7 @@ class DLOB {
572
572
  return bestNode.order.slot.lt(currentNode.order.slot);
573
573
  });
574
574
  }
575
- *getBestNode(generatorList, oraclePriceData, slot, compareFcn) {
575
+ *getBestNode(generatorList, oraclePriceData, slot, compareFcn, filterFcn) {
576
576
  const generators = generatorList.map((generator) => {
577
577
  return {
578
578
  next: generator.next(),
@@ -600,6 +600,10 @@ class DLOB {
600
600
  bestGenerator.next = bestGenerator.generator.next();
601
601
  continue;
602
602
  }
603
+ if (filterFcn && filterFcn(bestGenerator.next.value)) {
604
+ bestGenerator.next = bestGenerator.generator.next();
605
+ continue;
606
+ }
603
607
  yield bestGenerator.next.value;
604
608
  bestGenerator.next = bestGenerator.generator.next();
605
609
  }
@@ -608,7 +612,7 @@ class DLOB {
608
612
  }
609
613
  }
610
614
  }
611
- *getRestingLimitAsks(marketIndex, slot, marketType, oraclePriceData) {
615
+ *getRestingLimitAsks(marketIndex, slot, marketType, oraclePriceData, filterFcn) {
612
616
  if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
613
617
  throw new Error('Must provide OraclePriceData to get spot asks');
614
618
  }
@@ -626,26 +630,9 @@ class DLOB {
626
630
  return bestNode
627
631
  .getPrice(oraclePriceData, slot)
628
632
  .lt(currentNode.getPrice(oraclePriceData, slot));
629
- });
633
+ }, filterFcn);
630
634
  }
631
- /**
632
- * Filters the limit asks that are resting and do not cross fallback bid
633
- * Taking orders can only fill against orders that meet this criteria
634
- *
635
- * @returns
636
- */
637
- *getMakerLimitAsks(marketIndex, slot, marketType, oraclePriceData, fallbackBid) {
638
- const isPerpMarket = (0, __1.isVariant)(marketType, 'perp');
639
- for (const node of this.getRestingLimitAsks(marketIndex, slot, marketType, oraclePriceData)) {
640
- if (isPerpMarket &&
641
- fallbackBid &&
642
- node.getPrice(oraclePriceData, slot).lte(fallbackBid)) {
643
- continue;
644
- }
645
- yield node;
646
- }
647
- }
648
- *getRestingLimitBids(marketIndex, slot, marketType, oraclePriceData) {
635
+ *getRestingLimitBids(marketIndex, slot, marketType, oraclePriceData, filterFcn) {
649
636
  if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
650
637
  throw new Error('Must provide OraclePriceData to get spot bids');
651
638
  }
@@ -663,24 +650,7 @@ class DLOB {
663
650
  return bestNode
664
651
  .getPrice(oraclePriceData, slot)
665
652
  .gt(currentNode.getPrice(oraclePriceData, slot));
666
- });
667
- }
668
- /**
669
- * Filters the limit bids that are post only, have been place for sufficiently long or are below the fallback ask
670
- * Market orders can only fill against orders that meet this criteria
671
- *
672
- * @returns
673
- */
674
- *getMakerLimitBids(marketIndex, slot, marketType, oraclePriceData, fallbackAsk) {
675
- const isPerpMarket = (0, __1.isVariant)(marketType, 'perp');
676
- for (const node of this.getRestingLimitBids(marketIndex, slot, marketType, oraclePriceData)) {
677
- if (isPerpMarket &&
678
- fallbackAsk &&
679
- node.getPrice(oraclePriceData, slot).gte(fallbackAsk)) {
680
- continue;
681
- }
682
- yield node;
683
- }
653
+ }, filterFcn);
684
654
  }
685
655
  *getAsks(marketIndex, fallbackAsk, slot, marketType, oraclePriceData) {
686
656
  if ((0, __1.isVariant)(marketType, 'spot') && !oraclePriceData) {
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { BN, OraclePriceData, Order } from '..';
2
3
  import { PublicKey } from '@solana/web3.js';
3
4
  export interface DLOBNode {
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { BN, MarketTypeStr, Order } from '..';
2
3
  import { PublicKey } from '@solana/web3.js';
3
4
  import { DLOBNode, DLOBNodeMap } from './DLOBNode';
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { BN, DLOBNode, OraclePriceData, PerpMarketAccount } from '..';
2
3
  import { PublicKey } from '@solana/web3.js';
3
4
  type liquiditySource = 'serum' | 'vamm' | 'dlob' | 'phoenix';
@@ -26,7 +27,7 @@ export type L3OrderBook = {
26
27
  asks: L3Level[];
27
28
  bids: L3Level[];
28
29
  };
29
- export declare const DEFAULT_TOP_OF_BOOK_QUOTE_AMOUNTS: any[];
30
+ export declare const DEFAULT_TOP_OF_BOOK_QUOTE_AMOUNTS: BN[];
30
31
  /**
31
32
  * Get an {@link Generator<L2Level>} generator from a {@link Generator<DLOBNode>}
32
33
  * @param dlobNodes e.g. {@link DLOB#getRestingLimitAsks} or {@link DLOB#getRestingLimitBids}
@@ -1,4 +1,5 @@
1
1
  /// <reference types="node" />
2
+ /// <reference types="bn.js" />
2
3
  import { AnchorProvider, BN, Program, ProgramAccount } from '@coral-xyz/anchor';
3
4
  import { StateAccount, IWallet, PositionDirection, UserAccount, PerpMarketAccount, OrderParams, Order, SpotMarketAccount, SpotPosition, MakerInfo, TakerInfo, OptionalOrderParams, ReferrerInfo, MarketType, TxParams, SerumV3FulfillmentConfigAccount, ReferrerNameAccount, OrderTriggerCondition, PerpMarketExtendedInfo, UserStatsAccount, PhoenixV1FulfillmentConfigAccount, ModifyOrderPolicy, SwapReduceOnly } from './types';
4
5
  import * as anchor from '@coral-xyz/anchor';
@@ -115,9 +116,16 @@ export declare class DriftClient {
115
116
  getNextSubAccountId(): Promise<number>;
116
117
  initializeReferrerName(name: string): Promise<TransactionSignature>;
117
118
  updateUserName(name: string, subAccountId?: number): Promise<TransactionSignature>;
118
- updateUserCustomMarginRatio(marginRatio: number, subAccountId?: number): Promise<TransactionSignature>;
119
+ updateUserCustomMarginRatio(updates: {
120
+ marginRatio: number;
121
+ subAccountId: number;
122
+ }[]): Promise<TransactionSignature>;
123
+ getUpdateUserCustomMarginRatioIx(marginRatio: number, subAccountId?: number): Promise<TransactionInstruction>;
119
124
  getUpdateUserMarginTradingEnabledIx(marginTradingEnabled: boolean, subAccountId?: number, userAccountPublicKey?: PublicKey): Promise<TransactionInstruction>;
120
- updateUserMarginTradingEnabled(marginTradingEnabled: boolean, subAccountId?: number): Promise<TransactionSignature>;
125
+ updateUserMarginTradingEnabled(updates: {
126
+ marginTradingEnabled: boolean;
127
+ subAccountId: number;
128
+ }[]): Promise<TransactionSignature>;
121
129
  updateUserDelegate(delegate: PublicKey, subAccountId?: number): Promise<TransactionSignature>;
122
130
  fetchAllUserAccounts(includeIdle?: boolean): Promise<ProgramAccount<UserAccount>[]>;
123
131
  getUserAccountsForDelegate(delegate: PublicKey): Promise<UserAccount[]>;
@@ -522,15 +522,25 @@ class DriftClient {
522
522
  const { txSig } = await this.sendTransaction(tx, [], this.opts);
523
523
  return txSig;
524
524
  }
525
- async updateUserCustomMarginRatio(marginRatio, subAccountId = 0) {
526
- const tx = await this.program.transaction.updateUserCustomMarginRatio(subAccountId, marginRatio, {
525
+ async updateUserCustomMarginRatio(updates) {
526
+ const ixs = await Promise.all(updates.map(async ({ marginRatio, subAccountId }) => {
527
+ const ix = await this.getUpdateUserCustomMarginRatioIx(marginRatio, subAccountId);
528
+ return ix;
529
+ }));
530
+ const tx = await this.buildTransaction(ixs, this.txParams);
531
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
532
+ return txSig;
533
+ }
534
+ async getUpdateUserCustomMarginRatioIx(marginRatio, subAccountId = 0) {
535
+ const userAccountPublicKey = (0, pda_1.getUserAccountPublicKeySync)(this.program.programId, this.wallet.publicKey, subAccountId);
536
+ await this.addUser(subAccountId, this.wallet.publicKey);
537
+ const ix = this.program.instruction.updateUserCustomMarginRatio(subAccountId, marginRatio, {
527
538
  accounts: {
528
- user: await this.getUserAccountPublicKey(),
539
+ user: userAccountPublicKey,
529
540
  authority: this.wallet.publicKey,
530
541
  },
531
542
  });
532
- const { txSig } = await this.sendTransaction(tx, [], this.opts);
533
- return txSig;
543
+ return ix;
534
544
  }
535
545
  async getUpdateUserMarginTradingEnabledIx(marginTradingEnabled, subAccountId = 0, userAccountPublicKey) {
536
546
  const userAccountPublicKeyToUse = userAccountPublicKey ||
@@ -553,19 +563,11 @@ class DriftClient {
553
563
  remainingAccounts,
554
564
  });
555
565
  }
556
- async updateUserMarginTradingEnabled(marginTradingEnabled, subAccountId = 0) {
557
- const userAccountPublicKey = (0, pda_1.getUserAccountPublicKeySync)(this.program.programId, this.wallet.publicKey, subAccountId);
558
- await this.addUser(subAccountId, this.wallet.publicKey);
559
- const remainingAccounts = this.getRemainingAccounts({
560
- userAccounts: [this.getUserAccount(subAccountId)],
561
- });
562
- const tx = await this.program.transaction.updateUserMarginTradingEnabled(subAccountId, marginTradingEnabled, {
563
- accounts: {
564
- user: userAccountPublicKey,
565
- authority: this.wallet.publicKey,
566
- },
567
- remainingAccounts,
568
- });
566
+ async updateUserMarginTradingEnabled(updates) {
567
+ const ixs = await Promise.all(updates.map(async ({ marginTradingEnabled, subAccountId }) => {
568
+ return await this.getUpdateUserMarginTradingEnabledIx(marginTradingEnabled, subAccountId);
569
+ }));
570
+ const tx = await this.buildTransaction(ixs, this.txParams);
569
571
  const { txSig } = await this.sendTransaction(tx, [], this.opts);
570
572
  return txSig;
571
573
  }
@@ -80,6 +80,8 @@ class LogParser {
80
80
  }
81
81
  parseEventsFromLogs(event) {
82
82
  const records = [];
83
+ if (!event.logs)
84
+ return records;
83
85
  // @ts-ignore
84
86
  const eventGenerator = this.program._events._eventParser.parseLogs(event.logs, false);
85
87
  let runningEventIndex = 0;
@@ -1,3 +1,4 @@
1
+ /// <reference types="bn.js" />
1
2
  import { BN } from '@coral-xyz/anchor';
2
3
  export declare class BigNum {
3
4
  val: BN;
@@ -43,11 +44,11 @@ export declare class BigNum {
43
44
  gte(bn: BigNum | BN, ignorePrecision?: boolean): boolean;
44
45
  lte(bn: BigNum | BN, ignorePrecision?: boolean): boolean;
45
46
  eq(bn: BigNum | BN, ignorePrecision?: boolean): boolean;
46
- eqZero(): any;
47
- gtZero(): any;
48
- ltZero(): any;
49
- gteZero(): any;
50
- lteZero(): any;
47
+ eqZero(): boolean;
48
+ gtZero(): boolean;
49
+ ltZero(): boolean;
50
+ gteZero(): boolean;
51
+ lteZero(): boolean;
51
52
  abs(): BigNum;
52
53
  neg(): BigNum;
53
54
  toString: (base?: number | 'hex', length?: number) => string;
@@ -87,8 +88,8 @@ export declare class BigNum {
87
88
  toNotional(useTradePrecision?: boolean, precisionOverride?: number): string;
88
89
  toMillified(precision?: number, rounded?: boolean): string;
89
90
  toJSON(): {
90
- val: any;
91
- precision: any;
91
+ val: string;
92
+ precision: string;
92
93
  };
93
94
  isNeg(): boolean;
94
95
  isPos(): boolean;