@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.
- package/VERSION +1 -1
- package/lib/browser/dlob/DLOB.d.ts +2 -2
- package/lib/browser/dlob/DLOB.js +11 -5
- package/lib/browser/dlob/DLOBNode.d.ts +5 -3
- package/lib/browser/dlob/DLOBNode.js +12 -11
- package/lib/browser/dlob/NodeList.d.ts +3 -1
- package/lib/browser/dlob/NodeList.js +2 -2
- package/lib/browser/dlob/orderBookLevels.d.ts +6 -0
- package/lib/browser/dlob/orderBookLevels.js +5 -2
- package/lib/browser/dlob/types.d.ts +2 -2
- package/lib/browser/idl/drift.json +41 -3
- package/lib/browser/math/orders.d.ts +1 -0
- package/lib/browser/math/orders.js +13 -1
- package/lib/browser/orderSubscriber/OrderSubscriber.js +8 -1
- package/lib/node/dlob/DLOB.d.ts +2 -2
- package/lib/node/dlob/DLOB.d.ts.map +1 -1
- package/lib/node/dlob/DLOB.js +11 -5
- package/lib/node/dlob/DLOBNode.d.ts +5 -3
- package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
- package/lib/node/dlob/DLOBNode.js +12 -11
- package/lib/node/dlob/NodeList.d.ts +3 -1
- package/lib/node/dlob/NodeList.d.ts.map +1 -1
- package/lib/node/dlob/NodeList.js +2 -2
- package/lib/node/dlob/orderBookLevels.d.ts +6 -0
- package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
- package/lib/node/dlob/orderBookLevels.js +5 -2
- package/lib/node/dlob/types.d.ts +2 -2
- package/lib/node/dlob/types.d.ts.map +1 -1
- package/lib/node/idl/drift.json +41 -3
- package/lib/node/math/orders.d.ts +1 -0
- package/lib/node/math/orders.d.ts.map +1 -1
- package/lib/node/math/orders.js +13 -1
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +8 -1
- package/package.json +1 -1
- package/src/dlob/DLOB.ts +27 -3
- package/src/dlob/DLOBNode.ts +21 -10
- package/src/dlob/NodeList.ts +5 -2
- package/src/dlob/orderBookLevels.ts +8 -2
- package/src/dlob/types.ts +2 -0
- package/src/idl/drift.json +41 -3
- package/src/math/orders.ts +18 -0
- package/src/orderSubscriber/OrderSubscriber.ts +14 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.130.0-beta.
|
|
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;
|
package/lib/browser/dlob/DLOB.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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": "
|
|
7803
|
+
"name": "padding1",
|
|
7799
7804
|
"type": {
|
|
7800
7805
|
"array": [
|
|
7801
7806
|
"u8",
|
|
7802
|
-
|
|
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
|
-
|
|
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;
|
package/lib/node/dlob/DLOB.d.ts
CHANGED
|
@@ -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":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AASvC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"DLOB.d.ts","sourceRoot":"","sources":["../../../src/dlob/DLOB.ts"],"names":[],"mappings":"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"}
|
package/lib/node/dlob/DLOB.js
CHANGED
|
@@ -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
|
-
|
|
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":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAOvC,OAAO,EAAa,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC;IAC7D,UAAU,IAAI,OAAO,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;
|
|
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;
|
|
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;
|