@drift-labs/sdk 2.17.0-beta.0 → 2.18.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.
- package/lib/dlob/DLOB.d.ts +31 -25
- package/lib/dlob/DLOB.js +229 -155
- package/lib/dlob/DLOBNode.d.ts +11 -5
- package/lib/dlob/DLOBNode.js +13 -5
- package/lib/driftClient.js +5 -10
- package/lib/examples/loadDlob.js +1 -1
- package/lib/idl/drift.json +1 -1
- package/lib/math/auction.d.ts +1 -0
- package/lib/math/auction.js +9 -2
- package/lib/math/orders.d.ts +2 -0
- package/lib/math/orders.js +11 -2
- package/lib/math/spotBalance.js +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/user.js +1 -4
- package/package.json +1 -1
- package/src/dlob/DLOB.ts +362 -161
- package/src/dlob/DLOBNode.ts +20 -7
- package/src/driftClient.ts +5 -10
- package/src/examples/loadDlob.ts +1 -1
- package/src/idl/drift.json +1 -1
- package/src/math/auction.ts +13 -1
- package/src/math/orders.ts +14 -1
- package/src/math/spotBalance.ts +1 -1
- package/src/types.ts +1 -1
- package/src/user.ts +1 -4
- package/tests/dlob/test.ts +612 -76
package/lib/dlob/DLOB.d.ts
CHANGED
|
@@ -5,14 +5,18 @@ import { PublicKey } from '@solana/web3.js';
|
|
|
5
5
|
import { DLOBNode, DLOBNodeType, TriggerOrderNode } from '..';
|
|
6
6
|
import { DLOBOrders } from './DLOBOrders';
|
|
7
7
|
export declare type MarketNodeLists = {
|
|
8
|
-
|
|
9
|
-
ask: NodeList<'
|
|
10
|
-
bid: NodeList<'
|
|
8
|
+
restingLimit: {
|
|
9
|
+
ask: NodeList<'restingLimit'>;
|
|
10
|
+
bid: NodeList<'restingLimit'>;
|
|
11
11
|
};
|
|
12
12
|
floatingLimit: {
|
|
13
13
|
ask: NodeList<'floatingLimit'>;
|
|
14
14
|
bid: NodeList<'floatingLimit'>;
|
|
15
15
|
};
|
|
16
|
+
takingLimit: {
|
|
17
|
+
ask: NodeList<'takingLimit'>;
|
|
18
|
+
bid: NodeList<'takingLimit'>;
|
|
19
|
+
};
|
|
16
20
|
market: {
|
|
17
21
|
ask: NodeList<'market'>;
|
|
18
22
|
bid: NodeList<'market'>;
|
|
@@ -33,6 +37,7 @@ export declare type NodeToTrigger = {
|
|
|
33
37
|
export declare class DLOB {
|
|
34
38
|
openOrders: Map<MarketTypeStr, Set<string>>;
|
|
35
39
|
orderLists: Map<MarketTypeStr, Map<number, MarketNodeLists>>;
|
|
40
|
+
maxSlotForRestingLimitOrders: number;
|
|
36
41
|
initialized: boolean;
|
|
37
42
|
constructor();
|
|
38
43
|
private init;
|
|
@@ -42,37 +47,38 @@ export declare class DLOB {
|
|
|
42
47
|
*
|
|
43
48
|
* @returns a promise that resolves when the DLOB is initialized
|
|
44
49
|
*/
|
|
45
|
-
initFromUserMap(userMap: UserMap): Promise<boolean>;
|
|
46
|
-
initFromOrders(dlobOrders: DLOBOrders): boolean;
|
|
47
|
-
handleOrderRecord(record: OrderRecord): void;
|
|
48
|
-
handleOrderActionRecord(record: OrderActionRecord): void;
|
|
49
|
-
insertOrder(order: Order, userAccount: PublicKey, onInsert?: OrderBookCallback): void;
|
|
50
|
+
initFromUserMap(userMap: UserMap, slot: number): Promise<boolean>;
|
|
51
|
+
initFromOrders(dlobOrders: DLOBOrders, slot: number): boolean;
|
|
52
|
+
handleOrderRecord(record: OrderRecord, slot: number): void;
|
|
53
|
+
handleOrderActionRecord(record: OrderActionRecord, slot: number): void;
|
|
54
|
+
insertOrder(order: Order, userAccount: PublicKey, slot: number, onInsert?: OrderBookCallback): void;
|
|
50
55
|
addOrderList(marketType: MarketTypeStr, marketIndex: number): void;
|
|
51
|
-
updateOrder(order: Order, userAccount: PublicKey, cumulativeBaseAssetAmountFilled: BN, onUpdate?: OrderBookCallback): void;
|
|
52
|
-
trigger(order: Order, userAccount: PublicKey, onTrigger?: OrderBookCallback): void;
|
|
53
|
-
delete(order: Order, userAccount: PublicKey, onDelete?: OrderBookCallback): void;
|
|
54
|
-
getListForOrder(order: Order): NodeList<any> | undefined;
|
|
56
|
+
updateOrder(order: Order, userAccount: PublicKey, slot: number, cumulativeBaseAssetAmountFilled: BN, onUpdate?: OrderBookCallback): void;
|
|
57
|
+
trigger(order: Order, userAccount: PublicKey, slot: number, onTrigger?: OrderBookCallback): void;
|
|
58
|
+
delete(order: Order, userAccount: PublicKey, slot: number, onDelete?: OrderBookCallback): void;
|
|
59
|
+
getListForOrder(order: Order, slot: number): NodeList<any> | undefined;
|
|
60
|
+
updateRestingLimitOrders(slot: number): void;
|
|
61
|
+
updateRestingLimitOrdersForMarketType(slot: number, marketTypeStr: MarketTypeStr): void;
|
|
55
62
|
getOrder(orderId: number, userAccount: PublicKey): Order | undefined;
|
|
56
63
|
findNodesToFill(marketIndex: number, fallbackBid: BN | undefined, fallbackAsk: BN | undefined, slot: number, ts: number, marketType: MarketType, oraclePriceData: OraclePriceData, stateAccount: StateAccount, marketAccount: PerpMarketAccount | SpotMarketAccount): NodeToFill[];
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
findNodesCrossingFallbackLiquidity(marketType: MarketType, slot: number, oraclePriceData: OraclePriceData, nodeGenerator: Generator<DLOBNode>, fallbackPrice: BN, doesCross: (nodePrice: BN | undefined, fallbackPrice: BN) => boolean): NodeToFill[];
|
|
64
|
+
findRestingLimitOrderNodesToFill(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, isAmmPaused: boolean, minAuctionDuration: number, fallbackAsk: BN | undefined, fallbackBid: BN | undefined): NodeToFill[];
|
|
65
|
+
findTakingNodesToFill(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, isAmmPaused: boolean, minAuctionDuration: number, fallbackAsk: BN | undefined, fallbackBid?: BN | undefined): NodeToFill[];
|
|
66
|
+
findTakingNodesCrossingMakerNodes(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, takerNodeGenerator: Generator<DLOBNode>, makerNodeGeneratorFn: (marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, fallbackPrice?: BN) => Generator<DLOBNode>, doesCross: (takerPrice: BN | undefined, makerPrice: BN) => boolean, fallbackPrice?: BN): NodeToFill[];
|
|
67
|
+
findNodesCrossingFallbackLiquidity(marketType: MarketType, slot: number, oraclePriceData: OraclePriceData, nodeGenerator: Generator<DLOBNode>, fallbackPrice: BN, doesCross: (nodePrice: BN | undefined, fallbackPrice: BN) => boolean, minAuctionDuration: number): NodeToFill[];
|
|
61
68
|
findExpiredNodesToFill(marketIndex: number, ts: number, marketType: MarketType): NodeToFill[];
|
|
62
|
-
findJitAuctionNodesToFill(marketIndex: number, slot: number, marketType: MarketType): NodeToFill[];
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
findJitAuctionNodesToFill(marketIndex: number, slot: number, oraclePriceData: OraclePriceData, marketType: MarketType): NodeToFill[];
|
|
70
|
+
getTakingBids(marketIndex: number, marketType: MarketType, slot: number, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
71
|
+
getTakingAsks(marketIndex: number, marketType: MarketType, slot: number, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
65
72
|
private getBestNode;
|
|
66
|
-
|
|
73
|
+
getRestingLimitAsks(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
67
74
|
/**
|
|
68
|
-
* Filters the limit asks that are
|
|
69
|
-
*
|
|
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
|
|
70
77
|
*
|
|
71
78
|
* @returns
|
|
72
79
|
*/
|
|
73
80
|
getMakerLimitAsks(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, fallbackBid?: BN): Generator<DLOBNode>;
|
|
74
|
-
|
|
75
|
-
getLimitBids(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
81
|
+
getRestingLimitBids(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
76
82
|
/**
|
|
77
83
|
* Filters the limit bids that are post only, have been place for sufficiently long or are below the fallback ask
|
|
78
84
|
* Market orders can only fill against orders that meet this criteria
|
|
@@ -82,7 +88,7 @@ export declare class DLOB {
|
|
|
82
88
|
getMakerLimitBids(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, fallbackAsk?: BN): Generator<DLOBNode>;
|
|
83
89
|
getAsks(marketIndex: number, fallbackAsk: BN | undefined, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
84
90
|
getBids(marketIndex: number, fallbackBid: BN | undefined, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData): Generator<DLOBNode>;
|
|
85
|
-
|
|
91
|
+
findCrossingRestingLimitOrders(marketIndex: number, slot: number, marketType: MarketType, oraclePriceData: OraclePriceData, minAuctionDuration: number, fallbackAsk: BN | undefined, fallbackBid: BN | undefined): NodeToFill[];
|
|
86
92
|
determineMakerAndTaker(askNode: DLOBNode, bidNode: DLOBNode): {
|
|
87
93
|
takerNode: DLOBNode;
|
|
88
94
|
makerNode: DLOBNode;
|