@drift-labs/sdk 2.130.0-beta.12 → 2.130.0-beta.13

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 (43) hide show
  1. package/VERSION +1 -1
  2. package/lib/browser/dlob/DLOB.d.ts +2 -2
  3. package/lib/browser/dlob/DLOB.js +11 -5
  4. package/lib/browser/dlob/DLOBNode.d.ts +5 -3
  5. package/lib/browser/dlob/DLOBNode.js +12 -11
  6. package/lib/browser/dlob/NodeList.d.ts +3 -1
  7. package/lib/browser/dlob/NodeList.js +2 -2
  8. package/lib/browser/dlob/orderBookLevels.d.ts +6 -0
  9. package/lib/browser/dlob/orderBookLevels.js +5 -2
  10. package/lib/browser/dlob/types.d.ts +2 -2
  11. package/lib/browser/idl/drift.json +41 -3
  12. package/lib/browser/math/orders.d.ts +1 -0
  13. package/lib/browser/math/orders.js +13 -1
  14. package/lib/browser/orderSubscriber/OrderSubscriber.js +8 -1
  15. package/lib/node/dlob/DLOB.d.ts +2 -2
  16. package/lib/node/dlob/DLOB.d.ts.map +1 -1
  17. package/lib/node/dlob/DLOB.js +11 -5
  18. package/lib/node/dlob/DLOBNode.d.ts +5 -3
  19. package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
  20. package/lib/node/dlob/DLOBNode.js +12 -11
  21. package/lib/node/dlob/NodeList.d.ts +3 -1
  22. package/lib/node/dlob/NodeList.d.ts.map +1 -1
  23. package/lib/node/dlob/NodeList.js +2 -2
  24. package/lib/node/dlob/orderBookLevels.d.ts +6 -0
  25. package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
  26. package/lib/node/dlob/orderBookLevels.js +5 -2
  27. package/lib/node/dlob/types.d.ts +2 -2
  28. package/lib/node/dlob/types.d.ts.map +1 -1
  29. package/lib/node/idl/drift.json +41 -3
  30. package/lib/node/math/orders.d.ts +1 -0
  31. package/lib/node/math/orders.d.ts.map +1 -1
  32. package/lib/node/math/orders.js +13 -1
  33. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  34. package/lib/node/orderSubscriber/OrderSubscriber.js +8 -1
  35. package/package.json +1 -1
  36. package/src/dlob/DLOB.ts +27 -3
  37. package/src/dlob/DLOBNode.ts +21 -10
  38. package/src/dlob/NodeList.ts +5 -2
  39. package/src/dlob/orderBookLevels.ts +8 -2
  40. package/src/dlob/types.ts +2 -0
  41. package/src/idl/drift.json +41 -3
  42. package/src/math/orders.ts +18 -0
  43. package/src/orderSubscriber/OrderSubscriber.ts +14 -1
package/VERSION CHANGED
@@ -1 +1 @@
1
- 2.130.0-beta.12
1
+ 2.130.0-beta.13
@@ -25,8 +25,8 @@ export declare class DLOB implements IDLOB {
25
25
  * @returns a promise that resolves when the DLOB is initialized
26
26
  */
27
27
  initFromUserMap(userMap: IUserMap, slot: number): Promise<boolean>;
28
- insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
29
- insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
28
+ insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, baseAssetAmount: BN, onInsert?: OrderBookCallback): void;
29
+ insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, baseAssetAmount?: BN, onInsert?: OrderBookCallback): void;
30
30
  addOrderList(marketType: MarketTypeStr, marketIndex: number): void;
31
31
  delete(order: Order, userAccount: PublicKey, slot: number, isUserProtectedMaker: boolean, onDelete?: OrderBookCallback): void;
32
32
  getListForOnChainOrder(order: Order, slot: number, isProtectedMaker: boolean): NodeList<any> | undefined;
@@ -66,6 +66,7 @@ class DLOB {
66
66
  * @returns a promise that resolves when the DLOB is initialized
67
67
  */
68
68
  async initFromUserMap(userMap, slot) {
69
+ var _a;
69
70
  if (this.initialized) {
70
71
  return false;
71
72
  }
@@ -76,13 +77,18 @@ class DLOB {
76
77
  const userAccountPubkeyString = userAccountPubkey.toString();
77
78
  const protectedMaker = (0, userStatus_1.isUserProtectedMaker)(userAccount);
78
79
  for (const order of userAccount.orders) {
79
- this.insertOrder(order, userAccountPubkeyString, slot, protectedMaker);
80
+ let baseAssetAmount = order.baseAssetAmount;
81
+ if (order.reduceOnly) {
82
+ const existingBaseAmount = ((_a = userAccount.perpPositions.find((pos) => pos.marketIndex === order.marketIndex && pos.openOrders > 0)) === null || _a === void 0 ? void 0 : _a.baseAssetAmount) || numericConstants_1.ZERO;
83
+ baseAssetAmount = (0, orders_1.calculateOrderBaseAssetAmount)(order, existingBaseAmount);
84
+ }
85
+ this.insertOrder(order, userAccountPubkeyString, slot, protectedMaker, baseAssetAmount);
80
86
  }
81
87
  }
82
88
  this.initialized = true;
83
89
  return true;
84
90
  }
85
- insertOrder(order, userAccount, slot, isUserProtectedMaker, onInsert) {
91
+ insertOrder(order, userAccount, slot, isUserProtectedMaker, baseAssetAmount, onInsert) {
86
92
  var _a;
87
93
  if (!(0, types_1.isVariant)(order.status, 'open')) {
88
94
  return;
@@ -99,12 +105,12 @@ class DLOB {
99
105
  .get(marketType)
100
106
  .add((0, utils_1.getOrderSignature)(order.orderId, userAccount));
101
107
  }
102
- (_a = this.getListForOnChainOrder(order, slot, isUserProtectedMaker)) === null || _a === void 0 ? void 0 : _a.insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex));
108
+ (_a = this.getListForOnChainOrder(order, slot, isUserProtectedMaker)) === null || _a === void 0 ? void 0 : _a.insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex), baseAssetAmount);
103
109
  if (onInsert) {
104
110
  onInsert();
105
111
  }
106
112
  }
107
- insertSignedMsgOrder(order, userAccount, isUserProtectedMaker, onInsert) {
113
+ insertSignedMsgOrder(order, userAccount, isUserProtectedMaker, baseAssetAmount, onInsert) {
108
114
  const marketType = (0, types_1.getVariant)(order.marketType);
109
115
  const marketIndex = order.marketIndex;
110
116
  const bidOrAsk = (0, types_1.isVariant)(order.direction, 'long') ? 'bid' : 'ask';
@@ -117,7 +123,7 @@ class DLOB {
117
123
  this.orderLists
118
124
  .get(marketType)
119
125
  .get(marketIndex)
120
- .signedMsg[bidOrAsk].insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex));
126
+ .signedMsg[bidOrAsk].insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex), baseAssetAmount);
121
127
  if (onInsert) {
122
128
  onInsert();
123
129
  }
@@ -12,6 +12,7 @@ export interface DLOBNode {
12
12
  isProtectedMaker: boolean;
13
13
  protectedMakerParams?: ProtectedMakerParams;
14
14
  isSignedMsg: boolean | undefined;
15
+ baseAssetAmount: BN;
15
16
  }
16
17
  export declare abstract class OrderNode implements DLOBNode {
17
18
  order: Order;
@@ -21,8 +22,9 @@ export declare abstract class OrderNode implements DLOBNode {
21
22
  haveTrigger: boolean;
22
23
  isProtectedMaker: boolean;
23
24
  protectedMakerParams?: ProtectedMakerParams;
25
+ baseAssetAmount: BN;
24
26
  isSignedMsg: boolean;
25
- constructor(order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams, isSignedMsg?: boolean);
27
+ constructor(order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams, baseAssetAmount?: BN, isSignedMsg?: boolean);
26
28
  abstract getSortValue(order: Order): BN;
27
29
  getLabel(): string;
28
30
  getPrice(oraclePriceData: OraclePriceData, slot: number): BN;
@@ -57,7 +59,7 @@ export declare class TriggerOrderNode extends OrderNode {
57
59
  export declare class SignedMsgOrderNode extends OrderNode {
58
60
  next?: SignedMsgOrderNode;
59
61
  previous?: SignedMsgOrderNode;
60
- constructor(order: Order, userAccount: string);
62
+ constructor(order: Order, userAccount: string, baseAssetAmount?: BN);
61
63
  getSortValue(order: Order): BN;
62
64
  }
63
65
  export type DLOBNodeMap = {
@@ -70,4 +72,4 @@ export type DLOBNodeMap = {
70
72
  signedMsg: SignedMsgOrderNode;
71
73
  };
72
74
  export type DLOBNodeType = 'signedMsg' | 'restingLimit' | 'takingLimit' | 'floatingLimit' | 'protectedFloatingLimit' | 'market' | ('trigger' & keyof DLOBNodeMap);
73
- export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams): DLOBNodeMap[T];
75
+ export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams, baseAssetAmount?: BN): DLOBNodeMap[T];
@@ -8,7 +8,7 @@ const types_1 = require("../types");
8
8
  const conversion_1 = require("../math/conversion");
9
9
  const utils_1 = require("./utils");
10
10
  class OrderNode {
11
- constructor(order, userAccount, isProtectedMaker, protectedMakerParams, isSignedMsg = false) {
11
+ constructor(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount, isSignedMsg = false) {
12
12
  this.haveFilled = false;
13
13
  this.haveTrigger = false;
14
14
  // Copy the order over to the node
@@ -17,6 +17,7 @@ class OrderNode {
17
17
  this.sortValue = this.getSortValue(order);
18
18
  this.isProtectedMaker = isProtectedMaker;
19
19
  this.protectedMakerParams = protectedMakerParams;
20
+ this.baseAssetAmount = baseAssetAmount !== null && baseAssetAmount !== void 0 ? baseAssetAmount : order.baseAssetAmount;
20
21
  this.isSignedMsg = isSignedMsg;
21
22
  }
22
23
  getLabel() {
@@ -85,30 +86,30 @@ class TriggerOrderNode extends OrderNode {
85
86
  exports.TriggerOrderNode = TriggerOrderNode;
86
87
  // We'll use the signedMsg uuid for the order id since it's not yet on-chain
87
88
  class SignedMsgOrderNode extends OrderNode {
88
- constructor(order, userAccount) {
89
- super(order, userAccount, false, undefined, true);
89
+ constructor(order, userAccount, baseAssetAmount) {
90
+ super(order, userAccount, false, undefined, baseAssetAmount, true);
90
91
  }
91
92
  getSortValue(order) {
92
93
  return order.slot;
93
94
  }
94
95
  }
95
96
  exports.SignedMsgOrderNode = SignedMsgOrderNode;
96
- function createNode(nodeType, order, userAccount, isProtectedMaker, protectedMakerParams) {
97
+ function createNode(nodeType, order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount) {
97
98
  switch (nodeType) {
98
99
  case 'floatingLimit':
99
- return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
100
+ return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
100
101
  case 'protectedFloatingLimit':
101
- return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
102
+ return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
102
103
  case 'restingLimit':
103
- return new RestingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
104
+ return new RestingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
104
105
  case 'takingLimit':
105
- return new TakingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
106
+ return new TakingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
106
107
  case 'market':
107
- return new MarketOrderNode(order, userAccount, isProtectedMaker, undefined);
108
+ return new MarketOrderNode(order, userAccount, isProtectedMaker, undefined, baseAssetAmount);
108
109
  case 'trigger':
109
- return new TriggerOrderNode(order, userAccount, isProtectedMaker, undefined);
110
+ return new TriggerOrderNode(order, userAccount, isProtectedMaker, undefined, baseAssetAmount);
110
111
  case 'signedMsg':
111
- return new SignedMsgOrderNode(order, userAccount);
112
+ return new SignedMsgOrderNode(order, userAccount, baseAssetAmount);
112
113
  default:
113
114
  throw Error(`Unknown DLOBNode type ${nodeType}`);
114
115
  }
@@ -1,5 +1,7 @@
1
+ /// <reference types="bn.js" />
1
2
  import { MarketTypeStr, Order, ProtectedMakerParams } from '../types';
2
3
  import { DLOBNode, DLOBNodeMap } from './DLOBNode';
4
+ import { BN } from '../index';
3
5
  export type SortDirection = 'asc' | 'desc';
4
6
  export interface DLOBNodeGenerator {
5
7
  getGenerator(): Generator<DLOBNode>;
@@ -12,7 +14,7 @@ export declare class NodeList<NodeType extends keyof DLOBNodeMap> implements DLO
12
14
  nodeMap: Map<string, DLOBNodeMap[NodeType]>;
13
15
  constructor(nodeType: NodeType, sortDirection: SortDirection);
14
16
  clear(): void;
15
- insert(order: Order, marketType: MarketTypeStr, userAccount: string, isProtectedMaker: boolean, protectedMakerParamsMap?: ProtectedMakerParams): void;
17
+ insert(order: Order, marketType: MarketTypeStr, userAccount: string, isProtectedMaker: boolean, protectedMakerParamsMap?: ProtectedMakerParams, baseAssetAmount?: BN): void;
16
18
  prependNode(currentNode: DLOBNodeMap[NodeType], newNode: DLOBNodeMap[NodeType]): boolean;
17
19
  update(order: Order, userAccount: string): void;
18
20
  remove(order: Order, userAccount: string): void;
@@ -16,11 +16,11 @@ class NodeList {
16
16
  this.length = 0;
17
17
  this.nodeMap.clear();
18
18
  }
19
- insert(order, marketType, userAccount, isProtectedMaker, protectedMakerParamsMap) {
19
+ insert(order, marketType, userAccount, isProtectedMaker, protectedMakerParamsMap, baseAssetAmount) {
20
20
  if (!(0, types_1.isVariant)(order.status, 'open')) {
21
21
  return;
22
22
  }
23
- const newNode = (0, DLOBNode_1.createNode)(this.nodeType, order, userAccount, isProtectedMaker, protectedMakerParamsMap);
23
+ const newNode = (0, DLOBNode_1.createNode)(this.nodeType, order, userAccount, isProtectedMaker, protectedMakerParamsMap, baseAssetAmount);
24
24
  const orderSignature = (0, utils_1.getOrderSignature)(order.orderId, userAccount);
25
25
  if (this.nodeMap.has(orderSignature)) {
26
26
  return;
@@ -34,6 +34,12 @@ export type L3OrderBook = {
34
34
  };
35
35
  export declare const DEFAULT_TOP_OF_BOOK_QUOTE_AMOUNTS: BN[];
36
36
  export declare const MAJORS_TOP_OF_BOOK_QUOTE_AMOUNTS: BN[];
37
+ /**
38
+ * Get an {@link Generator<L2Level>} generator from a {@link Generator<DLOBNode>}
39
+ * @param dlobNodes e.g. {@link DLOB#getRestingLimitAsks} or {@link DLOB#getRestingLimitBids}
40
+ * @param oraclePriceData
41
+ * @param slot
42
+ */
37
43
  export declare function getL2GeneratorFromDLOBNodes(dlobNodes: Generator<DLOBNode>, oraclePriceData: OraclePriceData, slot: number): Generator<L2Level>;
38
44
  export declare function mergeL2LevelGenerators(l2LevelGenerators: Generator<L2Level>[], compare: (a: L2Level, b: L2Level) => boolean): Generator<L2Level>;
39
45
  export declare function createL2Levels(generator: Generator<L2Level>, depth: number): L2Level[];
@@ -20,16 +20,19 @@ exports.MAJORS_TOP_OF_BOOK_QUOTE_AMOUNTS = [
20
20
  new anchor_1.BN(20000).mul(numericConstants_1.QUOTE_PRECISION),
21
21
  new anchor_1.BN(50000).mul(numericConstants_1.QUOTE_PRECISION),
22
22
  ];
23
+ const INDICATIVE_QUOTES_PUBKEY = 'inDNdu3ML4vG5LNExqcwuCQtLcCU8KfK5YM2qYV3JJz';
23
24
  /**
24
25
  * Get an {@link Generator<L2Level>} generator from a {@link Generator<DLOBNode>}
25
26
  * @param dlobNodes e.g. {@link DLOB#getRestingLimitAsks} or {@link DLOB#getRestingLimitBids}
26
27
  * @param oraclePriceData
27
28
  * @param slot
28
29
  */
29
- const INDICATIVE_QUOTES_PUBKEY = 'inDNdu3ML4vG5LNExqcwuCQtLcCU8KfK5YM2qYV3JJz';
30
30
  function* getL2GeneratorFromDLOBNodes(dlobNodes, oraclePriceData, slot) {
31
31
  for (const dlobNode of dlobNodes) {
32
- const size = dlobNode.order.baseAssetAmount.sub(dlobNode.order.baseAssetAmountFilled);
32
+ const size = dlobNode.baseAssetAmount.sub(dlobNode.order.baseAssetAmountFilled);
33
+ if (size.lte(numericConstants_1.ZERO)) {
34
+ continue;
35
+ }
33
36
  yield {
34
37
  size,
35
38
  price: dlobNode.getPrice(oraclePriceData, slot),
@@ -93,8 +93,8 @@ export interface IDLOB {
93
93
  * @returns a promise that resolves when the DLOB is initialized
94
94
  */
95
95
  initFromUserMap(userMap: IUserMap, slot: number): Promise<boolean>;
96
- insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
97
- insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
96
+ insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, baseAssetAmount: BN, onInsert?: OrderBookCallback): void;
97
+ insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, baseAssetAmount: BN, onInsert?: OrderBookCallback): void;
98
98
  addOrderList(marketType: MarketTypeStr, marketIndex: number): void;
99
99
  delete(order: Order, userAccount: PublicKey, slot: number, isUserProtectedMaker: boolean, onDelete?: OrderBookCallback): void;
100
100
  getListForOnChainOrder(order: Order, slot: number, isProtectedMaker: boolean): NodeList<any> | undefined;
@@ -2099,7 +2099,12 @@
2099
2099
  "isSigner": false
2100
2100
  }
2101
2101
  ],
2102
- "args": []
2102
+ "args": [
2103
+ {
2104
+ "name": "disableMaintenance",
2105
+ "type": "bool"
2106
+ }
2107
+ ]
2103
2108
  },
2104
2109
  {
2105
2110
  "name": "updateUserFuelBonus",
@@ -7795,11 +7800,24 @@
7795
7800
  "type": "u8"
7796
7801
  },
7797
7802
  {
7798
- "name": "padding",
7803
+ "name": "padding1",
7799
7804
  "type": {
7800
7805
  "array": [
7801
7806
  "u8",
7802
- 31
7807
+ 3
7808
+ ]
7809
+ }
7810
+ },
7811
+ {
7812
+ "name": "currentMaintenanceUsers",
7813
+ "type": "u32"
7814
+ },
7815
+ {
7816
+ "name": "padding2",
7817
+ "type": {
7818
+ "array": [
7819
+ "u8",
7820
+ 24
7803
7821
  ]
7804
7822
  }
7805
7823
  }
@@ -12002,6 +12020,26 @@
12002
12020
  ]
12003
12021
  }
12004
12022
  },
12023
+ {
12024
+ "name": "LogMode",
12025
+ "type": {
12026
+ "kind": "enum",
12027
+ "variants": [
12028
+ {
12029
+ "name": "None"
12030
+ },
12031
+ {
12032
+ "name": "ExchangeOracle"
12033
+ },
12034
+ {
12035
+ "name": "MMOracle"
12036
+ },
12037
+ {
12038
+ "name": "SafeMMOracle"
12039
+ }
12040
+ ]
12041
+ }
12042
+ },
12005
12043
  {
12006
12044
  "name": "PositionUpdateType",
12007
12045
  "type": {
@@ -22,3 +22,4 @@ export declare function isTriggered(order: Order): boolean;
22
22
  export declare function isRestingLimitOrder(order: Order, slot: number): boolean;
23
23
  export declare function isTakingOrder(order: Order, slot: number): boolean;
24
24
  export declare function isSignedMsgOrder(order: Order): boolean;
25
+ export declare function calculateOrderBaseAssetAmount(order: Order, existingBaseAssetAmount: BN): BN;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isSignedMsgOrder = exports.isTakingOrder = exports.isRestingLimitOrder = exports.isTriggered = exports.mustBeTriggered = exports.isLimitOrder = exports.isMarketOrder = exports.isOrderExpired = exports.calculateBaseAssetAmountToFillUpToLimitPrice = exports.calculateBaseAssetAmountForAmmToFulfill = exports.isFillableByVAMM = exports.hasAuctionPrice = exports.hasLimitPrice = exports.applyProtectedMakerParams = exports.getLimitPrice = exports.standardizePrice = exports.isOrderReduceOnly = exports.isOrderRiskIncreasingInSameDirection = exports.isOrderRiskIncreasing = void 0;
3
+ exports.calculateOrderBaseAssetAmount = exports.isSignedMsgOrder = exports.isTakingOrder = exports.isRestingLimitOrder = exports.isTriggered = exports.mustBeTriggered = exports.isLimitOrder = exports.isMarketOrder = exports.isOrderExpired = exports.calculateBaseAssetAmountToFillUpToLimitPrice = exports.calculateBaseAssetAmountForAmmToFulfill = exports.isFillableByVAMM = exports.hasAuctionPrice = exports.hasLimitPrice = exports.applyProtectedMakerParams = exports.getLimitPrice = exports.standardizePrice = exports.isOrderReduceOnly = exports.isOrderRiskIncreasingInSameDirection = exports.isOrderRiskIncreasing = void 0;
4
4
  const types_1 = require("../types");
5
5
  const numericConstants_1 = require("../constants/numericConstants");
6
6
  const anchor_1 = require("@coral-xyz/anchor");
@@ -236,3 +236,15 @@ function isSignedMsgOrder(order) {
236
236
  return (order.bitFlags & FLAG_IS_SIGNED_MSG) !== 0;
237
237
  }
238
238
  exports.isSignedMsgOrder = isSignedMsgOrder;
239
+ function calculateOrderBaseAssetAmount(order, existingBaseAssetAmount) {
240
+ if (!order.reduceOnly) {
241
+ return order.baseAssetAmount;
242
+ }
243
+ if ((0, types_1.isVariant)(order.direction, 'long')) {
244
+ return anchor_1.BN.min(anchor_1.BN.min(existingBaseAssetAmount, numericConstants_1.ZERO).abs(), order.baseAssetAmount);
245
+ }
246
+ else {
247
+ return anchor_1.BN.min(anchor_1.BN.max(existingBaseAssetAmount, numericConstants_1.ZERO), order.baseAssetAmount);
248
+ }
249
+ }
250
+ exports.calculateOrderBaseAssetAmount = calculateOrderBaseAssetAmount;
@@ -8,6 +8,7 @@ const DLOB_1 = require("../dlob/DLOB");
8
8
  const PollingSubscription_1 = require("./PollingSubscription");
9
9
  const WebsocketSubscription_1 = require("./WebsocketSubscription");
10
10
  const events_1 = require("events");
11
+ const index_1 = require("../index");
11
12
  const user_1 = require("../decode/user");
12
13
  const grpcSubscription_1 = require("./grpcSubscription");
13
14
  const userStatus_1 = require("../math/userStatus");
@@ -155,11 +156,17 @@ class OrderSubscriber {
155
156
  return new DLOB_1.DLOB(protectedMakerParamsMap);
156
157
  }
157
158
  async getDLOB(slot, protectedMakerParamsMap) {
159
+ var _a;
158
160
  const dlob = this.createDLOB(protectedMakerParamsMap);
159
161
  for (const [key, { userAccount }] of this.usersAccounts.entries()) {
160
162
  const protectedMaker = (0, userStatus_1.isUserProtectedMaker)(userAccount);
161
163
  for (const order of userAccount.orders) {
162
- dlob.insertOrder(order, key, slot, protectedMaker);
164
+ let baseAssetAmount = order.baseAssetAmount;
165
+ if (order.reduceOnly) {
166
+ const existingBaseAmount = ((_a = userAccount.perpPositions.find((pos) => pos.marketIndex === order.marketIndex && pos.openOrders > 0)) === null || _a === void 0 ? void 0 : _a.baseAssetAmount) || index_1.ZERO;
167
+ baseAssetAmount = (0, index_1.calculateOrderBaseAssetAmount)(order, existingBaseAmount);
168
+ }
169
+ dlob.insertOrder(order, key, slot, protectedMaker, baseAssetAmount);
163
170
  }
164
171
  }
165
172
  return dlob;
@@ -25,8 +25,8 @@ export declare class DLOB implements IDLOB {
25
25
  * @returns a promise that resolves when the DLOB is initialized
26
26
  */
27
27
  initFromUserMap(userMap: IUserMap, slot: number): Promise<boolean>;
28
- insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
29
- insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
28
+ insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, baseAssetAmount: BN, onInsert?: OrderBookCallback): void;
29
+ insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, baseAssetAmount?: BN, onInsert?: OrderBookCallback): void;
30
30
  addOrderList(marketType: MarketTypeStr, marketIndex: number): void;
31
31
  delete(order: Order, userAccount: PublicKey, slot: number, isUserProtectedMaker: boolean, onDelete?: OrderBookCallback): void;
32
32
  getListForOnChainOrder(order: Order, slot: number, isProtectedMaker: boolean): NodeList<any> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"DLOB.d.ts","sourceRoot":"","sources":["../../../src/dlob/DLOB.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DLOB.d.ts","sourceRoot":"","sources":["../../../src/dlob/DLOB.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,7 @@ class DLOB {
66
66
  * @returns a promise that resolves when the DLOB is initialized
67
67
  */
68
68
  async initFromUserMap(userMap, slot) {
69
+ var _a;
69
70
  if (this.initialized) {
70
71
  return false;
71
72
  }
@@ -76,13 +77,18 @@ class DLOB {
76
77
  const userAccountPubkeyString = userAccountPubkey.toString();
77
78
  const protectedMaker = (0, userStatus_1.isUserProtectedMaker)(userAccount);
78
79
  for (const order of userAccount.orders) {
79
- this.insertOrder(order, userAccountPubkeyString, slot, protectedMaker);
80
+ let baseAssetAmount = order.baseAssetAmount;
81
+ if (order.reduceOnly) {
82
+ const existingBaseAmount = ((_a = userAccount.perpPositions.find((pos) => pos.marketIndex === order.marketIndex && pos.openOrders > 0)) === null || _a === void 0 ? void 0 : _a.baseAssetAmount) || numericConstants_1.ZERO;
83
+ baseAssetAmount = (0, orders_1.calculateOrderBaseAssetAmount)(order, existingBaseAmount);
84
+ }
85
+ this.insertOrder(order, userAccountPubkeyString, slot, protectedMaker, baseAssetAmount);
80
86
  }
81
87
  }
82
88
  this.initialized = true;
83
89
  return true;
84
90
  }
85
- insertOrder(order, userAccount, slot, isUserProtectedMaker, onInsert) {
91
+ insertOrder(order, userAccount, slot, isUserProtectedMaker, baseAssetAmount, onInsert) {
86
92
  var _a;
87
93
  if (!(0, types_1.isVariant)(order.status, 'open')) {
88
94
  return;
@@ -99,12 +105,12 @@ class DLOB {
99
105
  .get(marketType)
100
106
  .add((0, utils_1.getOrderSignature)(order.orderId, userAccount));
101
107
  }
102
- (_a = this.getListForOnChainOrder(order, slot, isUserProtectedMaker)) === null || _a === void 0 ? void 0 : _a.insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex));
108
+ (_a = this.getListForOnChainOrder(order, slot, isUserProtectedMaker)) === null || _a === void 0 ? void 0 : _a.insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex), baseAssetAmount);
103
109
  if (onInsert) {
104
110
  onInsert();
105
111
  }
106
112
  }
107
- insertSignedMsgOrder(order, userAccount, isUserProtectedMaker, onInsert) {
113
+ insertSignedMsgOrder(order, userAccount, isUserProtectedMaker, baseAssetAmount, onInsert) {
108
114
  const marketType = (0, types_1.getVariant)(order.marketType);
109
115
  const marketIndex = order.marketIndex;
110
116
  const bidOrAsk = (0, types_1.isVariant)(order.direction, 'long') ? 'bid' : 'ask';
@@ -117,7 +123,7 @@ class DLOB {
117
123
  this.orderLists
118
124
  .get(marketType)
119
125
  .get(marketIndex)
120
- .signedMsg[bidOrAsk].insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex));
126
+ .signedMsg[bidOrAsk].insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerParamsMap[marketType].get(order.marketIndex), baseAssetAmount);
121
127
  if (onInsert) {
122
128
  onInsert();
123
129
  }
@@ -12,6 +12,7 @@ export interface DLOBNode {
12
12
  isProtectedMaker: boolean;
13
13
  protectedMakerParams?: ProtectedMakerParams;
14
14
  isSignedMsg: boolean | undefined;
15
+ baseAssetAmount: BN;
15
16
  }
16
17
  export declare abstract class OrderNode implements DLOBNode {
17
18
  order: Order;
@@ -21,8 +22,9 @@ export declare abstract class OrderNode implements DLOBNode {
21
22
  haveTrigger: boolean;
22
23
  isProtectedMaker: boolean;
23
24
  protectedMakerParams?: ProtectedMakerParams;
25
+ baseAssetAmount: BN;
24
26
  isSignedMsg: boolean;
25
- constructor(order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams, isSignedMsg?: boolean);
27
+ constructor(order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams, baseAssetAmount?: BN, isSignedMsg?: boolean);
26
28
  abstract getSortValue(order: Order): BN;
27
29
  getLabel(): string;
28
30
  getPrice(oraclePriceData: OraclePriceData, slot: number): BN;
@@ -57,7 +59,7 @@ export declare class TriggerOrderNode extends OrderNode {
57
59
  export declare class SignedMsgOrderNode extends OrderNode {
58
60
  next?: SignedMsgOrderNode;
59
61
  previous?: SignedMsgOrderNode;
60
- constructor(order: Order, userAccount: string);
62
+ constructor(order: Order, userAccount: string, baseAssetAmount?: BN);
61
63
  getSortValue(order: Order): BN;
62
64
  }
63
65
  export type DLOBNodeMap = {
@@ -70,5 +72,5 @@ export type DLOBNodeMap = {
70
72
  signedMsg: SignedMsgOrderNode;
71
73
  };
72
74
  export type DLOBNodeType = 'signedMsg' | 'restingLimit' | 'takingLimit' | 'floatingLimit' | 'protectedFloatingLimit' | 'market' | ('trigger' & keyof DLOBNodeMap);
73
- export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams): DLOBNodeMap[T];
75
+ export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: string, isProtectedMaker: boolean, protectedMakerParams?: ProtectedMakerParams, baseAssetAmount?: BN): DLOBNodeMap[T];
74
76
  //# sourceMappingURL=DLOBNode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DLOBNode.d.ts","sourceRoot":"","sources":["../../../src/dlob/DLOBNode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DLOBNode.d.ts","sourceRoot":"","sources":["../../../src/dlob/DLOBNode.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ const types_1 = require("../types");
8
8
  const conversion_1 = require("../math/conversion");
9
9
  const utils_1 = require("./utils");
10
10
  class OrderNode {
11
- constructor(order, userAccount, isProtectedMaker, protectedMakerParams, isSignedMsg = false) {
11
+ constructor(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount, isSignedMsg = false) {
12
12
  this.haveFilled = false;
13
13
  this.haveTrigger = false;
14
14
  // Copy the order over to the node
@@ -17,6 +17,7 @@ class OrderNode {
17
17
  this.sortValue = this.getSortValue(order);
18
18
  this.isProtectedMaker = isProtectedMaker;
19
19
  this.protectedMakerParams = protectedMakerParams;
20
+ this.baseAssetAmount = baseAssetAmount !== null && baseAssetAmount !== void 0 ? baseAssetAmount : order.baseAssetAmount;
20
21
  this.isSignedMsg = isSignedMsg;
21
22
  }
22
23
  getLabel() {
@@ -85,30 +86,30 @@ class TriggerOrderNode extends OrderNode {
85
86
  exports.TriggerOrderNode = TriggerOrderNode;
86
87
  // We'll use the signedMsg uuid for the order id since it's not yet on-chain
87
88
  class SignedMsgOrderNode extends OrderNode {
88
- constructor(order, userAccount) {
89
- super(order, userAccount, false, undefined, true);
89
+ constructor(order, userAccount, baseAssetAmount) {
90
+ super(order, userAccount, false, undefined, baseAssetAmount, true);
90
91
  }
91
92
  getSortValue(order) {
92
93
  return order.slot;
93
94
  }
94
95
  }
95
96
  exports.SignedMsgOrderNode = SignedMsgOrderNode;
96
- function createNode(nodeType, order, userAccount, isProtectedMaker, protectedMakerParams) {
97
+ function createNode(nodeType, order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount) {
97
98
  switch (nodeType) {
98
99
  case 'floatingLimit':
99
- return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
100
+ return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
100
101
  case 'protectedFloatingLimit':
101
- return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
102
+ return new FloatingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
102
103
  case 'restingLimit':
103
- return new RestingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
104
+ return new RestingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
104
105
  case 'takingLimit':
105
- return new TakingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams);
106
+ return new TakingLimitOrderNode(order, userAccount, isProtectedMaker, protectedMakerParams, baseAssetAmount);
106
107
  case 'market':
107
- return new MarketOrderNode(order, userAccount, isProtectedMaker, undefined);
108
+ return new MarketOrderNode(order, userAccount, isProtectedMaker, undefined, baseAssetAmount);
108
109
  case 'trigger':
109
- return new TriggerOrderNode(order, userAccount, isProtectedMaker, undefined);
110
+ return new TriggerOrderNode(order, userAccount, isProtectedMaker, undefined, baseAssetAmount);
110
111
  case 'signedMsg':
111
- return new SignedMsgOrderNode(order, userAccount);
112
+ return new SignedMsgOrderNode(order, userAccount, baseAssetAmount);
112
113
  default:
113
114
  throw Error(`Unknown DLOBNode type ${nodeType}`);
114
115
  }
@@ -1,5 +1,7 @@
1
+ /// <reference types="bn.js" />
1
2
  import { MarketTypeStr, Order, ProtectedMakerParams } from '../types';
2
3
  import { DLOBNode, DLOBNodeMap } from './DLOBNode';
4
+ import { BN } from '../index';
3
5
  export type SortDirection = 'asc' | 'desc';
4
6
  export interface DLOBNodeGenerator {
5
7
  getGenerator(): Generator<DLOBNode>;
@@ -12,7 +14,7 @@ export declare class NodeList<NodeType extends keyof DLOBNodeMap> implements DLO
12
14
  nodeMap: Map<string, DLOBNodeMap[NodeType]>;
13
15
  constructor(nodeType: NodeType, sortDirection: SortDirection);
14
16
  clear(): void;
15
- insert(order: Order, marketType: MarketTypeStr, userAccount: string, isProtectedMaker: boolean, protectedMakerParamsMap?: ProtectedMakerParams): void;
17
+ insert(order: Order, marketType: MarketTypeStr, userAccount: string, isProtectedMaker: boolean, protectedMakerParamsMap?: ProtectedMakerParams, baseAssetAmount?: BN): void;
16
18
  prependNode(currentNode: DLOBNodeMap[NodeType], newNode: DLOBNodeMap[NodeType]): boolean;
17
19
  update(order: Order, userAccount: string): void;
18
20
  remove(order: Order, userAccount: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"NodeList.d.ts","sourceRoot":"","sources":["../../../src/dlob/NodeList.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,aAAa,EACb,KAAK,EACL,oBAAoB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAc,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/D,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IACjC,YAAY,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;CACpC;AAED,qBAAa,QAAQ,CAAC,QAAQ,SAAS,MAAM,WAAW,CACvD,YAAW,iBAAiB;IAO3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IANtB,IAAI,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,SAAK;IACX,OAAO,qCAA4C;gBAG1C,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa;IAG9B,KAAK;IAML,MAAM,CACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,OAAO,EACzB,uBAAuB,CAAC,EAAE,oBAAoB,GAC5C,IAAI;IAiDP,WAAW,CACV,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAClC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC5B,OAAO;IAkBH,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAS/C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAwBrD,YAAY,IAAI,SAAS,CAAC,QAAQ,CAAC;IAQ7B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAI/C,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS;IAI9D,KAAK,IAAI,IAAI;IAQb,QAAQ,IAAI,IAAI;CAOvB"}
1
+ {"version":3,"file":"NodeList.d.ts","sourceRoot":"","sources":["../../../src/dlob/NodeList.ts"],"names":[],"mappings":";AAAA,OAAO,EAEN,aAAa,EACb,KAAK,EACL,oBAAoB,EACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAc,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IACjC,YAAY,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;CACpC;AAED,qBAAa,QAAQ,CAAC,QAAQ,SAAS,MAAM,WAAW,CACvD,YAAW,iBAAiB;IAO3B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,aAAa;IANtB,IAAI,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,SAAK;IACX,OAAO,qCAA4C;gBAG1C,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa;IAG9B,KAAK;IAML,MAAM,CACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,aAAa,EACzB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,OAAO,EACzB,uBAAuB,CAAC,EAAE,oBAAoB,EAC9C,eAAe,CAAC,EAAE,EAAE,GAClB,IAAI;IAkDP,WAAW,CACV,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAClC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC5B,OAAO;IAkBH,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAS/C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAwBrD,YAAY,IAAI,SAAS,CAAC,QAAQ,CAAC;IAQ7B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAI/C,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS;IAI9D,KAAK,IAAI,IAAI;IAQb,QAAQ,IAAI,IAAI;CAOvB"}
@@ -16,11 +16,11 @@ class NodeList {
16
16
  this.length = 0;
17
17
  this.nodeMap.clear();
18
18
  }
19
- insert(order, marketType, userAccount, isProtectedMaker, protectedMakerParamsMap) {
19
+ insert(order, marketType, userAccount, isProtectedMaker, protectedMakerParamsMap, baseAssetAmount) {
20
20
  if (!(0, types_1.isVariant)(order.status, 'open')) {
21
21
  return;
22
22
  }
23
- const newNode = (0, DLOBNode_1.createNode)(this.nodeType, order, userAccount, isProtectedMaker, protectedMakerParamsMap);
23
+ const newNode = (0, DLOBNode_1.createNode)(this.nodeType, order, userAccount, isProtectedMaker, protectedMakerParamsMap, baseAssetAmount);
24
24
  const orderSignature = (0, utils_1.getOrderSignature)(order.orderId, userAccount);
25
25
  if (this.nodeMap.has(orderSignature)) {
26
26
  return;