@drift-labs/sdk 2.110.0-beta.16 → 2.110.0-beta.18
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 +4 -4
- package/lib/browser/dlob/DLOB.js +11 -11
- package/lib/browser/dlob/DLOBNode.d.ts +8 -8
- package/lib/browser/dlob/DLOBNode.js +8 -8
- package/lib/browser/types.d.ts +3 -3
- package/lib/browser/util/digest.d.ts +1 -1
- package/lib/browser/util/digest.js +3 -3
- package/lib/node/dlob/DLOB.d.ts +4 -4
- package/lib/node/dlob/DLOB.js +11 -11
- package/lib/node/dlob/DLOBNode.d.ts +8 -8
- package/lib/node/dlob/DLOBNode.js +8 -8
- package/lib/node/types.d.ts +3 -3
- package/lib/node/util/digest.d.ts +1 -1
- package/lib/node/util/digest.js +3 -3
- package/package.json +1 -1
- package/src/dlob/DLOB.ts +14 -14
- package/src/dlob/DLOBNode.ts +12 -12
- package/src/types.ts +5 -5
- package/src/util/digest.ts +1 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.110.0-beta.
|
|
1
|
+
2.110.0-beta.18
|
|
@@ -33,9 +33,9 @@ export type MarketNodeLists = {
|
|
|
33
33
|
above: NodeList<'trigger'>;
|
|
34
34
|
below: NodeList<'trigger'>;
|
|
35
35
|
};
|
|
36
|
-
|
|
37
|
-
ask: NodeList<'
|
|
38
|
-
bid: NodeList<'
|
|
36
|
+
signedMsg: {
|
|
37
|
+
ask: NodeList<'signedMsg'>;
|
|
38
|
+
bid: NodeList<'signedMsg'>;
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
41
|
type OrderBookCallback = () => void;
|
|
@@ -69,7 +69,7 @@ export declare class DLOB {
|
|
|
69
69
|
*/
|
|
70
70
|
initFromUserMap(userMap: UserMap, slot: number): Promise<boolean>;
|
|
71
71
|
insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
|
|
72
|
-
|
|
72
|
+
insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
|
|
73
73
|
addOrderList(marketType: MarketTypeStr, marketIndex: number): void;
|
|
74
74
|
delete(order: Order, userAccount: PublicKey, slot: number, isUserProtectedMaker: boolean, onDelete?: OrderBookCallback): void;
|
|
75
75
|
getListForOnChainOrder(order: Order, slot: number, isProtectedMaker: boolean): NodeList<any> | undefined;
|
package/lib/browser/dlob/DLOB.js
CHANGED
|
@@ -93,7 +93,7 @@ class DLOB {
|
|
|
93
93
|
onInsert();
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
insertSignedMsgOrder(order, userAccount, isUserProtectedMaker, onInsert) {
|
|
97
97
|
const marketType = (0, __1.getVariant)(order.marketType);
|
|
98
98
|
const marketIndex = order.marketIndex;
|
|
99
99
|
const bidOrAsk = (0, __1.isVariant)(order.direction, 'long') ? 'bid' : 'ask';
|
|
@@ -106,7 +106,7 @@ class DLOB {
|
|
|
106
106
|
this.orderLists
|
|
107
107
|
.get(marketType)
|
|
108
108
|
.get(marketIndex)
|
|
109
|
-
.
|
|
109
|
+
.signedMsg[bidOrAsk].insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerView);
|
|
110
110
|
if (onInsert) {
|
|
111
111
|
onInsert();
|
|
112
112
|
}
|
|
@@ -137,9 +137,9 @@ class DLOB {
|
|
|
137
137
|
above: new NodeList_1.NodeList('trigger', 'asc'),
|
|
138
138
|
below: new NodeList_1.NodeList('trigger', 'desc'),
|
|
139
139
|
},
|
|
140
|
-
|
|
141
|
-
ask: new NodeList_1.NodeList('
|
|
142
|
-
bid: new NodeList_1.NodeList('
|
|
140
|
+
signedMsg: {
|
|
141
|
+
ask: new NodeList_1.NodeList('signedMsg', 'asc'),
|
|
142
|
+
bid: new NodeList_1.NodeList('signedMsg', 'asc'),
|
|
143
143
|
},
|
|
144
144
|
});
|
|
145
145
|
}
|
|
@@ -450,23 +450,23 @@ class DLOB {
|
|
|
450
450
|
nodeLists.restingLimit.bid.getGenerator(),
|
|
451
451
|
nodeLists.floatingLimit.bid.getGenerator(),
|
|
452
452
|
nodeLists.market.bid.getGenerator(),
|
|
453
|
-
nodeLists.
|
|
453
|
+
nodeLists.signedMsg.bid.getGenerator(),
|
|
454
454
|
];
|
|
455
455
|
const askGenerators = [
|
|
456
456
|
nodeLists.takingLimit.ask.getGenerator(),
|
|
457
457
|
nodeLists.restingLimit.ask.getGenerator(),
|
|
458
458
|
nodeLists.floatingLimit.ask.getGenerator(),
|
|
459
459
|
nodeLists.market.ask.getGenerator(),
|
|
460
|
-
nodeLists.
|
|
460
|
+
nodeLists.signedMsg.ask.getGenerator(),
|
|
461
461
|
];
|
|
462
462
|
for (const bidGenerator of bidGenerators) {
|
|
463
463
|
for (const bid of bidGenerator) {
|
|
464
|
-
if (bid.
|
|
464
|
+
if (bid.isSignedMsg &&
|
|
465
465
|
slot.gt(bid.order.slot.addn(bid.order.auctionDuration))) {
|
|
466
466
|
this.orderLists
|
|
467
467
|
.get(marketTypeStr)
|
|
468
468
|
.get(marketIndex)
|
|
469
|
-
.
|
|
469
|
+
.signedMsg.bid.remove(bid.order, bid.userAccount);
|
|
470
470
|
}
|
|
471
471
|
else if ((0, __1.isOrderExpired)(bid.order, ts, true, 25)) {
|
|
472
472
|
nodesToFill.push({
|
|
@@ -498,7 +498,7 @@ class DLOB {
|
|
|
498
498
|
const generatorList = [
|
|
499
499
|
orderLists.market.bid.getGenerator(),
|
|
500
500
|
orderLists.takingLimit.bid.getGenerator(),
|
|
501
|
-
orderLists.
|
|
501
|
+
orderLists.signedMsg.bid.getGenerator(),
|
|
502
502
|
];
|
|
503
503
|
yield* this.getBestNode(generatorList, oraclePriceData, slot, (bestNode, currentNode) => {
|
|
504
504
|
return bestNode.order.slot.lt(currentNode.order.slot);
|
|
@@ -514,7 +514,7 @@ class DLOB {
|
|
|
514
514
|
const generatorList = [
|
|
515
515
|
orderLists.market.ask.getGenerator(),
|
|
516
516
|
orderLists.takingLimit.ask.getGenerator(),
|
|
517
|
-
orderLists.
|
|
517
|
+
orderLists.signedMsg.ask.getGenerator(),
|
|
518
518
|
];
|
|
519
519
|
yield* this.getBestNode(generatorList, oraclePriceData, slot, (bestNode, currentNode) => {
|
|
520
520
|
return bestNode.order.slot.lt(currentNode.order.slot);
|
|
@@ -9,7 +9,7 @@ export interface DLOBNode {
|
|
|
9
9
|
userAccount: string | undefined;
|
|
10
10
|
isProtectedMaker: boolean;
|
|
11
11
|
applyProtectedMakerOffset: boolean;
|
|
12
|
-
|
|
12
|
+
isSignedMsg: boolean | undefined;
|
|
13
13
|
}
|
|
14
14
|
export declare abstract class OrderNode implements DLOBNode {
|
|
15
15
|
order: Order;
|
|
@@ -19,8 +19,8 @@ export declare abstract class OrderNode implements DLOBNode {
|
|
|
19
19
|
haveTrigger: boolean;
|
|
20
20
|
isProtectedMaker: boolean;
|
|
21
21
|
applyProtectedMakerOffset: boolean;
|
|
22
|
-
|
|
23
|
-
constructor(order: Order, userAccount: string, isProtectedMaker: boolean, applyProtectedMakerOffset: boolean,
|
|
22
|
+
isSignedMsg: boolean;
|
|
23
|
+
constructor(order: Order, userAccount: string, isProtectedMaker: boolean, applyProtectedMakerOffset: boolean, isSignedMsg?: boolean);
|
|
24
24
|
abstract getSortValue(order: Order): BN;
|
|
25
25
|
getLabel(): string;
|
|
26
26
|
getPrice(oraclePriceData: OraclePriceData, slot: number): BN;
|
|
@@ -52,9 +52,9 @@ export declare class TriggerOrderNode extends OrderNode {
|
|
|
52
52
|
previous?: TriggerOrderNode;
|
|
53
53
|
getSortValue(order: Order): BN;
|
|
54
54
|
}
|
|
55
|
-
export declare class
|
|
56
|
-
next?:
|
|
57
|
-
previous?:
|
|
55
|
+
export declare class SignedMsgOrderNode extends OrderNode {
|
|
56
|
+
next?: SignedMsgOrderNode;
|
|
57
|
+
previous?: SignedMsgOrderNode;
|
|
58
58
|
constructor(order: Order, userAccount: string);
|
|
59
59
|
getSortValue(order: Order): BN;
|
|
60
60
|
}
|
|
@@ -65,7 +65,7 @@ export type DLOBNodeMap = {
|
|
|
65
65
|
protectedFloatingLimit: FloatingLimitOrderNode;
|
|
66
66
|
market: MarketOrderNode;
|
|
67
67
|
trigger: TriggerOrderNode;
|
|
68
|
-
|
|
68
|
+
signedMsg: SignedMsgOrderNode;
|
|
69
69
|
};
|
|
70
|
-
export type DLOBNodeType = '
|
|
70
|
+
export type DLOBNodeType = 'signedMsg' | 'restingLimit' | 'takingLimit' | 'floatingLimit' | 'protectedFloatingLimit' | 'market' | ('trigger' & keyof DLOBNodeMap);
|
|
71
71
|
export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: string, isProtectedMaker: boolean, applyProtectedMakerOffset: boolean): DLOBNodeMap[T];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createNode = exports.
|
|
3
|
+
exports.createNode = exports.SignedMsgOrderNode = exports.TriggerOrderNode = exports.MarketOrderNode = exports.FloatingLimitOrderNode = exports.RestingLimitOrderNode = exports.TakingLimitOrderNode = exports.OrderNode = void 0;
|
|
4
4
|
const __1 = require("..");
|
|
5
5
|
// import { PublicKey } from '@solana/web3.js';
|
|
6
6
|
const NodeList_1 = require("./NodeList");
|
|
7
7
|
class OrderNode {
|
|
8
|
-
constructor(order, userAccount, isProtectedMaker, applyProtectedMakerOffset,
|
|
8
|
+
constructor(order, userAccount, isProtectedMaker, applyProtectedMakerOffset, isSignedMsg = false) {
|
|
9
9
|
this.haveFilled = false;
|
|
10
10
|
this.haveTrigger = false;
|
|
11
11
|
// Copy the order over to the node
|
|
@@ -14,7 +14,7 @@ class OrderNode {
|
|
|
14
14
|
this.sortValue = this.getSortValue(order);
|
|
15
15
|
this.isProtectedMaker = isProtectedMaker;
|
|
16
16
|
this.applyProtectedMakerOffset = applyProtectedMakerOffset;
|
|
17
|
-
this.
|
|
17
|
+
this.isSignedMsg = isSignedMsg;
|
|
18
18
|
}
|
|
19
19
|
getLabel() {
|
|
20
20
|
let msg = `Order ${(0, NodeList_1.getOrderSignature)(this.order.orderId, this.userAccount)}`;
|
|
@@ -80,8 +80,8 @@ class TriggerOrderNode extends OrderNode {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
exports.TriggerOrderNode = TriggerOrderNode;
|
|
83
|
-
// We'll use the
|
|
84
|
-
class
|
|
83
|
+
// We'll use the signedMsg uuid for the order id since it's not yet on-chain
|
|
84
|
+
class SignedMsgOrderNode extends OrderNode {
|
|
85
85
|
constructor(order, userAccount) {
|
|
86
86
|
super(order, userAccount, false, false, true);
|
|
87
87
|
}
|
|
@@ -89,7 +89,7 @@ class SwiftOrderNode extends OrderNode {
|
|
|
89
89
|
return order.slot;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
exports.
|
|
92
|
+
exports.SignedMsgOrderNode = SignedMsgOrderNode;
|
|
93
93
|
function createNode(nodeType, order, userAccount, isProtectedMaker, applyProtectedMakerOffset) {
|
|
94
94
|
switch (nodeType) {
|
|
95
95
|
case 'floatingLimit':
|
|
@@ -104,8 +104,8 @@ function createNode(nodeType, order, userAccount, isProtectedMaker, applyProtect
|
|
|
104
104
|
return new MarketOrderNode(order, userAccount, isProtectedMaker, false);
|
|
105
105
|
case 'trigger':
|
|
106
106
|
return new TriggerOrderNode(order, userAccount, isProtectedMaker, false);
|
|
107
|
-
case '
|
|
108
|
-
return new
|
|
107
|
+
case 'signedMsg':
|
|
108
|
+
return new SignedMsgOrderNode(order, userAccount);
|
|
109
109
|
default:
|
|
110
110
|
throw Error(`Unknown DLOBNode type ${nodeType}`);
|
|
111
111
|
}
|
package/lib/browser/types.d.ts
CHANGED
|
@@ -1174,10 +1174,10 @@ export type SignedMsgOrderParamsMessage = {
|
|
|
1174
1174
|
subAccountId: number;
|
|
1175
1175
|
slot: BN;
|
|
1176
1176
|
uuid: Uint8Array;
|
|
1177
|
-
takeProfitOrderParams:
|
|
1178
|
-
stopLossOrderParams:
|
|
1177
|
+
takeProfitOrderParams: SignedMsgTriggerOrderParams | null;
|
|
1178
|
+
stopLossOrderParams: SignedMsgTriggerOrderParams | null;
|
|
1179
1179
|
};
|
|
1180
|
-
export type
|
|
1180
|
+
export type SignedMsgTriggerOrderParams = {
|
|
1181
1181
|
triggerPrice: BN;
|
|
1182
1182
|
baseAssetAmount: BN;
|
|
1183
1183
|
};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
export declare function digest(data: Buffer): Buffer;
|
|
4
4
|
export declare function digestSignature(signature: Uint8Array): string;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function generateSignedMsgUuid(): Uint8Array;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.generateSignedMsgUuid = exports.digestSignature = exports.digest = void 0;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
5
|
const nanoid_1 = require("nanoid");
|
|
6
6
|
function digest(data) {
|
|
@@ -13,7 +13,7 @@ function digestSignature(signature) {
|
|
|
13
13
|
return (0, crypto_1.createHash)('sha256').update(signature).digest('base64');
|
|
14
14
|
}
|
|
15
15
|
exports.digestSignature = digestSignature;
|
|
16
|
-
function
|
|
16
|
+
function generateSignedMsgUuid() {
|
|
17
17
|
return Uint8Array.from(Buffer.from((0, nanoid_1.nanoid)(8)));
|
|
18
18
|
}
|
|
19
|
-
exports.
|
|
19
|
+
exports.generateSignedMsgUuid = generateSignedMsgUuid;
|
package/lib/node/dlob/DLOB.d.ts
CHANGED
|
@@ -33,9 +33,9 @@ export type MarketNodeLists = {
|
|
|
33
33
|
above: NodeList<'trigger'>;
|
|
34
34
|
below: NodeList<'trigger'>;
|
|
35
35
|
};
|
|
36
|
-
|
|
37
|
-
ask: NodeList<'
|
|
38
|
-
bid: NodeList<'
|
|
36
|
+
signedMsg: {
|
|
37
|
+
ask: NodeList<'signedMsg'>;
|
|
38
|
+
bid: NodeList<'signedMsg'>;
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
41
|
type OrderBookCallback = () => void;
|
|
@@ -69,7 +69,7 @@ export declare class DLOB {
|
|
|
69
69
|
*/
|
|
70
70
|
initFromUserMap(userMap: UserMap, slot: number): Promise<boolean>;
|
|
71
71
|
insertOrder(order: Order, userAccount: string, slot: number, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
|
|
72
|
-
|
|
72
|
+
insertSignedMsgOrder(order: Order, userAccount: string, isUserProtectedMaker: boolean, onInsert?: OrderBookCallback): void;
|
|
73
73
|
addOrderList(marketType: MarketTypeStr, marketIndex: number): void;
|
|
74
74
|
delete(order: Order, userAccount: PublicKey, slot: number, isUserProtectedMaker: boolean, onDelete?: OrderBookCallback): void;
|
|
75
75
|
getListForOnChainOrder(order: Order, slot: number, isProtectedMaker: boolean): NodeList<any> | undefined;
|
package/lib/node/dlob/DLOB.js
CHANGED
|
@@ -93,7 +93,7 @@ class DLOB {
|
|
|
93
93
|
onInsert();
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
insertSignedMsgOrder(order, userAccount, isUserProtectedMaker, onInsert) {
|
|
97
97
|
const marketType = (0, __1.getVariant)(order.marketType);
|
|
98
98
|
const marketIndex = order.marketIndex;
|
|
99
99
|
const bidOrAsk = (0, __1.isVariant)(order.direction, 'long') ? 'bid' : 'ask';
|
|
@@ -106,7 +106,7 @@ class DLOB {
|
|
|
106
106
|
this.orderLists
|
|
107
107
|
.get(marketType)
|
|
108
108
|
.get(marketIndex)
|
|
109
|
-
.
|
|
109
|
+
.signedMsg[bidOrAsk].insert(order, marketType, userAccount, isUserProtectedMaker, this.protectedMakerView);
|
|
110
110
|
if (onInsert) {
|
|
111
111
|
onInsert();
|
|
112
112
|
}
|
|
@@ -137,9 +137,9 @@ class DLOB {
|
|
|
137
137
|
above: new NodeList_1.NodeList('trigger', 'asc'),
|
|
138
138
|
below: new NodeList_1.NodeList('trigger', 'desc'),
|
|
139
139
|
},
|
|
140
|
-
|
|
141
|
-
ask: new NodeList_1.NodeList('
|
|
142
|
-
bid: new NodeList_1.NodeList('
|
|
140
|
+
signedMsg: {
|
|
141
|
+
ask: new NodeList_1.NodeList('signedMsg', 'asc'),
|
|
142
|
+
bid: new NodeList_1.NodeList('signedMsg', 'asc'),
|
|
143
143
|
},
|
|
144
144
|
});
|
|
145
145
|
}
|
|
@@ -450,23 +450,23 @@ class DLOB {
|
|
|
450
450
|
nodeLists.restingLimit.bid.getGenerator(),
|
|
451
451
|
nodeLists.floatingLimit.bid.getGenerator(),
|
|
452
452
|
nodeLists.market.bid.getGenerator(),
|
|
453
|
-
nodeLists.
|
|
453
|
+
nodeLists.signedMsg.bid.getGenerator(),
|
|
454
454
|
];
|
|
455
455
|
const askGenerators = [
|
|
456
456
|
nodeLists.takingLimit.ask.getGenerator(),
|
|
457
457
|
nodeLists.restingLimit.ask.getGenerator(),
|
|
458
458
|
nodeLists.floatingLimit.ask.getGenerator(),
|
|
459
459
|
nodeLists.market.ask.getGenerator(),
|
|
460
|
-
nodeLists.
|
|
460
|
+
nodeLists.signedMsg.ask.getGenerator(),
|
|
461
461
|
];
|
|
462
462
|
for (const bidGenerator of bidGenerators) {
|
|
463
463
|
for (const bid of bidGenerator) {
|
|
464
|
-
if (bid.
|
|
464
|
+
if (bid.isSignedMsg &&
|
|
465
465
|
slot.gt(bid.order.slot.addn(bid.order.auctionDuration))) {
|
|
466
466
|
this.orderLists
|
|
467
467
|
.get(marketTypeStr)
|
|
468
468
|
.get(marketIndex)
|
|
469
|
-
.
|
|
469
|
+
.signedMsg.bid.remove(bid.order, bid.userAccount);
|
|
470
470
|
}
|
|
471
471
|
else if ((0, __1.isOrderExpired)(bid.order, ts, true, 25)) {
|
|
472
472
|
nodesToFill.push({
|
|
@@ -498,7 +498,7 @@ class DLOB {
|
|
|
498
498
|
const generatorList = [
|
|
499
499
|
orderLists.market.bid.getGenerator(),
|
|
500
500
|
orderLists.takingLimit.bid.getGenerator(),
|
|
501
|
-
orderLists.
|
|
501
|
+
orderLists.signedMsg.bid.getGenerator(),
|
|
502
502
|
];
|
|
503
503
|
yield* this.getBestNode(generatorList, oraclePriceData, slot, (bestNode, currentNode) => {
|
|
504
504
|
return bestNode.order.slot.lt(currentNode.order.slot);
|
|
@@ -514,7 +514,7 @@ class DLOB {
|
|
|
514
514
|
const generatorList = [
|
|
515
515
|
orderLists.market.ask.getGenerator(),
|
|
516
516
|
orderLists.takingLimit.ask.getGenerator(),
|
|
517
|
-
orderLists.
|
|
517
|
+
orderLists.signedMsg.ask.getGenerator(),
|
|
518
518
|
];
|
|
519
519
|
yield* this.getBestNode(generatorList, oraclePriceData, slot, (bestNode, currentNode) => {
|
|
520
520
|
return bestNode.order.slot.lt(currentNode.order.slot);
|
|
@@ -9,7 +9,7 @@ export interface DLOBNode {
|
|
|
9
9
|
userAccount: string | undefined;
|
|
10
10
|
isProtectedMaker: boolean;
|
|
11
11
|
applyProtectedMakerOffset: boolean;
|
|
12
|
-
|
|
12
|
+
isSignedMsg: boolean | undefined;
|
|
13
13
|
}
|
|
14
14
|
export declare abstract class OrderNode implements DLOBNode {
|
|
15
15
|
order: Order;
|
|
@@ -19,8 +19,8 @@ export declare abstract class OrderNode implements DLOBNode {
|
|
|
19
19
|
haveTrigger: boolean;
|
|
20
20
|
isProtectedMaker: boolean;
|
|
21
21
|
applyProtectedMakerOffset: boolean;
|
|
22
|
-
|
|
23
|
-
constructor(order: Order, userAccount: string, isProtectedMaker: boolean, applyProtectedMakerOffset: boolean,
|
|
22
|
+
isSignedMsg: boolean;
|
|
23
|
+
constructor(order: Order, userAccount: string, isProtectedMaker: boolean, applyProtectedMakerOffset: boolean, isSignedMsg?: boolean);
|
|
24
24
|
abstract getSortValue(order: Order): BN;
|
|
25
25
|
getLabel(): string;
|
|
26
26
|
getPrice(oraclePriceData: OraclePriceData, slot: number): BN;
|
|
@@ -52,9 +52,9 @@ export declare class TriggerOrderNode extends OrderNode {
|
|
|
52
52
|
previous?: TriggerOrderNode;
|
|
53
53
|
getSortValue(order: Order): BN;
|
|
54
54
|
}
|
|
55
|
-
export declare class
|
|
56
|
-
next?:
|
|
57
|
-
previous?:
|
|
55
|
+
export declare class SignedMsgOrderNode extends OrderNode {
|
|
56
|
+
next?: SignedMsgOrderNode;
|
|
57
|
+
previous?: SignedMsgOrderNode;
|
|
58
58
|
constructor(order: Order, userAccount: string);
|
|
59
59
|
getSortValue(order: Order): BN;
|
|
60
60
|
}
|
|
@@ -65,7 +65,7 @@ export type DLOBNodeMap = {
|
|
|
65
65
|
protectedFloatingLimit: FloatingLimitOrderNode;
|
|
66
66
|
market: MarketOrderNode;
|
|
67
67
|
trigger: TriggerOrderNode;
|
|
68
|
-
|
|
68
|
+
signedMsg: SignedMsgOrderNode;
|
|
69
69
|
};
|
|
70
|
-
export type DLOBNodeType = '
|
|
70
|
+
export type DLOBNodeType = 'signedMsg' | 'restingLimit' | 'takingLimit' | 'floatingLimit' | 'protectedFloatingLimit' | 'market' | ('trigger' & keyof DLOBNodeMap);
|
|
71
71
|
export declare function createNode<T extends DLOBNodeType>(nodeType: T, order: Order, userAccount: string, isProtectedMaker: boolean, applyProtectedMakerOffset: boolean): DLOBNodeMap[T];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createNode = exports.
|
|
3
|
+
exports.createNode = exports.SignedMsgOrderNode = exports.TriggerOrderNode = exports.MarketOrderNode = exports.FloatingLimitOrderNode = exports.RestingLimitOrderNode = exports.TakingLimitOrderNode = exports.OrderNode = void 0;
|
|
4
4
|
const __1 = require("..");
|
|
5
5
|
// import { PublicKey } from '@solana/web3.js';
|
|
6
6
|
const NodeList_1 = require("./NodeList");
|
|
7
7
|
class OrderNode {
|
|
8
|
-
constructor(order, userAccount, isProtectedMaker, applyProtectedMakerOffset,
|
|
8
|
+
constructor(order, userAccount, isProtectedMaker, applyProtectedMakerOffset, isSignedMsg = false) {
|
|
9
9
|
this.haveFilled = false;
|
|
10
10
|
this.haveTrigger = false;
|
|
11
11
|
// Copy the order over to the node
|
|
@@ -14,7 +14,7 @@ class OrderNode {
|
|
|
14
14
|
this.sortValue = this.getSortValue(order);
|
|
15
15
|
this.isProtectedMaker = isProtectedMaker;
|
|
16
16
|
this.applyProtectedMakerOffset = applyProtectedMakerOffset;
|
|
17
|
-
this.
|
|
17
|
+
this.isSignedMsg = isSignedMsg;
|
|
18
18
|
}
|
|
19
19
|
getLabel() {
|
|
20
20
|
let msg = `Order ${(0, NodeList_1.getOrderSignature)(this.order.orderId, this.userAccount)}`;
|
|
@@ -80,8 +80,8 @@ class TriggerOrderNode extends OrderNode {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
exports.TriggerOrderNode = TriggerOrderNode;
|
|
83
|
-
// We'll use the
|
|
84
|
-
class
|
|
83
|
+
// We'll use the signedMsg uuid for the order id since it's not yet on-chain
|
|
84
|
+
class SignedMsgOrderNode extends OrderNode {
|
|
85
85
|
constructor(order, userAccount) {
|
|
86
86
|
super(order, userAccount, false, false, true);
|
|
87
87
|
}
|
|
@@ -89,7 +89,7 @@ class SwiftOrderNode extends OrderNode {
|
|
|
89
89
|
return order.slot;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
exports.
|
|
92
|
+
exports.SignedMsgOrderNode = SignedMsgOrderNode;
|
|
93
93
|
function createNode(nodeType, order, userAccount, isProtectedMaker, applyProtectedMakerOffset) {
|
|
94
94
|
switch (nodeType) {
|
|
95
95
|
case 'floatingLimit':
|
|
@@ -104,8 +104,8 @@ function createNode(nodeType, order, userAccount, isProtectedMaker, applyProtect
|
|
|
104
104
|
return new MarketOrderNode(order, userAccount, isProtectedMaker, false);
|
|
105
105
|
case 'trigger':
|
|
106
106
|
return new TriggerOrderNode(order, userAccount, isProtectedMaker, false);
|
|
107
|
-
case '
|
|
108
|
-
return new
|
|
107
|
+
case 'signedMsg':
|
|
108
|
+
return new SignedMsgOrderNode(order, userAccount);
|
|
109
109
|
default:
|
|
110
110
|
throw Error(`Unknown DLOBNode type ${nodeType}`);
|
|
111
111
|
}
|
package/lib/node/types.d.ts
CHANGED
|
@@ -1174,10 +1174,10 @@ export type SignedMsgOrderParamsMessage = {
|
|
|
1174
1174
|
subAccountId: number;
|
|
1175
1175
|
slot: BN;
|
|
1176
1176
|
uuid: Uint8Array;
|
|
1177
|
-
takeProfitOrderParams:
|
|
1178
|
-
stopLossOrderParams:
|
|
1177
|
+
takeProfitOrderParams: SignedMsgTriggerOrderParams | null;
|
|
1178
|
+
stopLossOrderParams: SignedMsgTriggerOrderParams | null;
|
|
1179
1179
|
};
|
|
1180
|
-
export type
|
|
1180
|
+
export type SignedMsgTriggerOrderParams = {
|
|
1181
1181
|
triggerPrice: BN;
|
|
1182
1182
|
baseAssetAmount: BN;
|
|
1183
1183
|
};
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
export declare function digest(data: Buffer): Buffer;
|
|
4
4
|
export declare function digestSignature(signature: Uint8Array): string;
|
|
5
|
-
export declare function
|
|
5
|
+
export declare function generateSignedMsgUuid(): Uint8Array;
|
package/lib/node/util/digest.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.generateSignedMsgUuid = exports.digestSignature = exports.digest = void 0;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
5
|
const nanoid_1 = require("nanoid");
|
|
6
6
|
function digest(data) {
|
|
@@ -13,7 +13,7 @@ function digestSignature(signature) {
|
|
|
13
13
|
return (0, crypto_1.createHash)('sha256').update(signature).digest('base64');
|
|
14
14
|
}
|
|
15
15
|
exports.digestSignature = digestSignature;
|
|
16
|
-
function
|
|
16
|
+
function generateSignedMsgUuid() {
|
|
17
17
|
return Uint8Array.from(Buffer.from((0, nanoid_1.nanoid)(8)));
|
|
18
18
|
}
|
|
19
|
-
exports.
|
|
19
|
+
exports.generateSignedMsgUuid = generateSignedMsgUuid;
|
package/package.json
CHANGED
package/src/dlob/DLOB.ts
CHANGED
|
@@ -73,9 +73,9 @@ export type MarketNodeLists = {
|
|
|
73
73
|
above: NodeList<'trigger'>;
|
|
74
74
|
below: NodeList<'trigger'>;
|
|
75
75
|
};
|
|
76
|
-
|
|
77
|
-
ask: NodeList<'
|
|
78
|
-
bid: NodeList<'
|
|
76
|
+
signedMsg: {
|
|
77
|
+
ask: NodeList<'signedMsg'>;
|
|
78
|
+
bid: NodeList<'signedMsg'>;
|
|
79
79
|
};
|
|
80
80
|
};
|
|
81
81
|
|
|
@@ -220,7 +220,7 @@ export class DLOB {
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
public
|
|
223
|
+
public insertSignedMsgOrder(
|
|
224
224
|
order: Order,
|
|
225
225
|
userAccount: string,
|
|
226
226
|
isUserProtectedMaker: boolean,
|
|
@@ -238,7 +238,7 @@ export class DLOB {
|
|
|
238
238
|
this.orderLists
|
|
239
239
|
.get(marketType)
|
|
240
240
|
.get(marketIndex)
|
|
241
|
-
.
|
|
241
|
+
.signedMsg[bidOrAsk].insert(
|
|
242
242
|
order,
|
|
243
243
|
marketType,
|
|
244
244
|
userAccount,
|
|
@@ -276,9 +276,9 @@ export class DLOB {
|
|
|
276
276
|
above: new NodeList('trigger', 'asc'),
|
|
277
277
|
below: new NodeList('trigger', 'desc'),
|
|
278
278
|
},
|
|
279
|
-
|
|
280
|
-
ask: new NodeList('
|
|
281
|
-
bid: new NodeList('
|
|
279
|
+
signedMsg: {
|
|
280
|
+
ask: new NodeList('signedMsg', 'asc'),
|
|
281
|
+
bid: new NodeList('signedMsg', 'asc'),
|
|
282
282
|
},
|
|
283
283
|
});
|
|
284
284
|
}
|
|
@@ -903,26 +903,26 @@ export class DLOB {
|
|
|
903
903
|
nodeLists.restingLimit.bid.getGenerator(),
|
|
904
904
|
nodeLists.floatingLimit.bid.getGenerator(),
|
|
905
905
|
nodeLists.market.bid.getGenerator(),
|
|
906
|
-
nodeLists.
|
|
906
|
+
nodeLists.signedMsg.bid.getGenerator(),
|
|
907
907
|
];
|
|
908
908
|
const askGenerators = [
|
|
909
909
|
nodeLists.takingLimit.ask.getGenerator(),
|
|
910
910
|
nodeLists.restingLimit.ask.getGenerator(),
|
|
911
911
|
nodeLists.floatingLimit.ask.getGenerator(),
|
|
912
912
|
nodeLists.market.ask.getGenerator(),
|
|
913
|
-
nodeLists.
|
|
913
|
+
nodeLists.signedMsg.ask.getGenerator(),
|
|
914
914
|
];
|
|
915
915
|
|
|
916
916
|
for (const bidGenerator of bidGenerators) {
|
|
917
917
|
for (const bid of bidGenerator) {
|
|
918
918
|
if (
|
|
919
|
-
bid.
|
|
919
|
+
bid.isSignedMsg &&
|
|
920
920
|
slot.gt(bid.order.slot.addn(bid.order.auctionDuration))
|
|
921
921
|
) {
|
|
922
922
|
this.orderLists
|
|
923
923
|
.get(marketTypeStr)
|
|
924
924
|
.get(marketIndex)
|
|
925
|
-
.
|
|
925
|
+
.signedMsg.bid.remove(bid.order, bid.userAccount);
|
|
926
926
|
} else if (isOrderExpired(bid.order, ts, true, 25)) {
|
|
927
927
|
nodesToFill.push({
|
|
928
928
|
node: bid,
|
|
@@ -964,7 +964,7 @@ export class DLOB {
|
|
|
964
964
|
const generatorList = [
|
|
965
965
|
orderLists.market.bid.getGenerator(),
|
|
966
966
|
orderLists.takingLimit.bid.getGenerator(),
|
|
967
|
-
orderLists.
|
|
967
|
+
orderLists.signedMsg.bid.getGenerator(),
|
|
968
968
|
];
|
|
969
969
|
|
|
970
970
|
yield* this.getBestNode(
|
|
@@ -996,7 +996,7 @@ export class DLOB {
|
|
|
996
996
|
const generatorList = [
|
|
997
997
|
orderLists.market.ask.getGenerator(),
|
|
998
998
|
orderLists.takingLimit.ask.getGenerator(),
|
|
999
|
-
orderLists.
|
|
999
|
+
orderLists.signedMsg.ask.getGenerator(),
|
|
1000
1000
|
];
|
|
1001
1001
|
|
|
1002
1002
|
yield* this.getBestNode(
|
package/src/dlob/DLOBNode.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface DLOBNode {
|
|
|
21
21
|
userAccount: string | undefined;
|
|
22
22
|
isProtectedMaker: boolean;
|
|
23
23
|
applyProtectedMakerOffset: boolean;
|
|
24
|
-
|
|
24
|
+
isSignedMsg: boolean | undefined;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export abstract class OrderNode implements DLOBNode {
|
|
@@ -32,14 +32,14 @@ export abstract class OrderNode implements DLOBNode {
|
|
|
32
32
|
haveTrigger = false;
|
|
33
33
|
isProtectedMaker: boolean;
|
|
34
34
|
applyProtectedMakerOffset: boolean;
|
|
35
|
-
|
|
35
|
+
isSignedMsg: boolean;
|
|
36
36
|
|
|
37
37
|
constructor(
|
|
38
38
|
order: Order,
|
|
39
39
|
userAccount: string,
|
|
40
40
|
isProtectedMaker: boolean,
|
|
41
41
|
applyProtectedMakerOffset: boolean,
|
|
42
|
-
|
|
42
|
+
isSignedMsg = false
|
|
43
43
|
) {
|
|
44
44
|
// Copy the order over to the node
|
|
45
45
|
this.order = { ...order };
|
|
@@ -47,7 +47,7 @@ export abstract class OrderNode implements DLOBNode {
|
|
|
47
47
|
this.sortValue = this.getSortValue(order);
|
|
48
48
|
this.isProtectedMaker = isProtectedMaker;
|
|
49
49
|
this.applyProtectedMakerOffset = applyProtectedMakerOffset;
|
|
50
|
-
this.
|
|
50
|
+
this.isSignedMsg = isSignedMsg;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
abstract getSortValue(order: Order): BN;
|
|
@@ -153,10 +153,10 @@ export class TriggerOrderNode extends OrderNode {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
// We'll use the
|
|
157
|
-
export class
|
|
158
|
-
next?:
|
|
159
|
-
previous?:
|
|
156
|
+
// We'll use the signedMsg uuid for the order id since it's not yet on-chain
|
|
157
|
+
export class SignedMsgOrderNode extends OrderNode {
|
|
158
|
+
next?: SignedMsgOrderNode;
|
|
159
|
+
previous?: SignedMsgOrderNode;
|
|
160
160
|
|
|
161
161
|
constructor(order: Order, userAccount: string) {
|
|
162
162
|
super(order, userAccount, false, false, true);
|
|
@@ -174,11 +174,11 @@ export type DLOBNodeMap = {
|
|
|
174
174
|
protectedFloatingLimit: FloatingLimitOrderNode;
|
|
175
175
|
market: MarketOrderNode;
|
|
176
176
|
trigger: TriggerOrderNode;
|
|
177
|
-
|
|
177
|
+
signedMsg: SignedMsgOrderNode;
|
|
178
178
|
};
|
|
179
179
|
|
|
180
180
|
export type DLOBNodeType =
|
|
181
|
-
| '
|
|
181
|
+
| 'signedMsg'
|
|
182
182
|
| 'restingLimit'
|
|
183
183
|
| 'takingLimit'
|
|
184
184
|
| 'floatingLimit'
|
|
@@ -226,8 +226,8 @@ export function createNode<T extends DLOBNodeType>(
|
|
|
226
226
|
return new MarketOrderNode(order, userAccount, isProtectedMaker, false);
|
|
227
227
|
case 'trigger':
|
|
228
228
|
return new TriggerOrderNode(order, userAccount, isProtectedMaker, false);
|
|
229
|
-
case '
|
|
230
|
-
return new
|
|
229
|
+
case 'signedMsg':
|
|
230
|
+
return new SignedMsgOrderNode(order, userAccount);
|
|
231
231
|
default:
|
|
232
232
|
throw Error(`Unknown DLOBNode type ${nodeType}`);
|
|
233
233
|
}
|
package/src/types.ts
CHANGED
|
@@ -1130,11 +1130,11 @@ export type SignedMsgOrderParamsMessage = {
|
|
|
1130
1130
|
subAccountId: number;
|
|
1131
1131
|
slot: BN;
|
|
1132
1132
|
uuid: Uint8Array;
|
|
1133
|
-
takeProfitOrderParams:
|
|
1134
|
-
stopLossOrderParams:
|
|
1133
|
+
takeProfitOrderParams: SignedMsgTriggerOrderParams | null;
|
|
1134
|
+
stopLossOrderParams: SignedMsgTriggerOrderParams | null;
|
|
1135
1135
|
};
|
|
1136
1136
|
|
|
1137
|
-
export type
|
|
1137
|
+
export type SignedMsgTriggerOrderParams = {
|
|
1138
1138
|
triggerPrice: BN;
|
|
1139
1139
|
baseAssetAmount: BN;
|
|
1140
1140
|
};
|
|
@@ -1382,8 +1382,8 @@ export type HighLeverageModeConfig = {
|
|
|
1382
1382
|
reduceOnly: boolean;
|
|
1383
1383
|
};
|
|
1384
1384
|
|
|
1385
|
-
/* Represents proof of a
|
|
1386
|
-
* It can be provided to drift program to fill a
|
|
1385
|
+
/* Represents proof of a signed msg taker order
|
|
1386
|
+
* It can be provided to drift program to fill a signed msg order
|
|
1387
1387
|
*/
|
|
1388
1388
|
export interface SignedMsgOrderParams {
|
|
1389
1389
|
/**
|
package/src/util/digest.ts
CHANGED
|
@@ -11,6 +11,6 @@ export function digestSignature(signature: Uint8Array): string {
|
|
|
11
11
|
return createHash('sha256').update(signature).digest('base64');
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
export function
|
|
14
|
+
export function generateSignedMsgUuid(): Uint8Array {
|
|
15
15
|
return Uint8Array.from(Buffer.from(nanoid(8)));
|
|
16
16
|
}
|