@d8x/perpetuals-sdk 0.1.13 → 0.2.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/dist/cjs/abi/testnet/IPerpetualManager.json +414 -224
- package/dist/cjs/abi/testnet/LimitOrderBook.json +200 -18
- package/dist/cjs/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
- package/dist/cjs/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
- package/dist/cjs/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
- package/dist/cjs/config/defaultConfig.json +9 -9
- package/dist/cjs/nodeSDKTypes.d.ts +4 -4
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/orderReferrerTool.d.ts +12 -5
- package/dist/cjs/orderReferrerTool.js +92 -21
- package/dist/cjs/orderReferrerTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +1 -1
- package/dist/cjs/perpetualDataHandler.js +17 -13
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/abi/testnet/IPerpetualManager.json +414 -224
- package/dist/esm/abi/testnet/LimitOrderBook.json +200 -18
- package/dist/esm/abi/zkevmTestnet/IPerpetualManager.json +5215 -0
- package/dist/esm/abi/zkevmTestnet/LimitOrderBook.json +1075 -0
- package/dist/esm/abi/zkevmTestnet/LimitOrderBookFactory.json +135 -0
- package/dist/esm/config/defaultConfig.json +9 -9
- package/dist/esm/nodeSDKTypes.d.ts +4 -4
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/orderReferrerTool.d.ts +12 -5
- package/dist/esm/orderReferrerTool.js +93 -22
- package/dist/esm/orderReferrerTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +1 -1
- package/dist/esm/perpetualDataHandler.js +17 -13
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"anonymous": false,
|
|
4
|
+
"inputs": [
|
|
5
|
+
{
|
|
6
|
+
"indexed": true,
|
|
7
|
+
"internalType": "address",
|
|
8
|
+
"name": "previousOwner",
|
|
9
|
+
"type": "address"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"indexed": true,
|
|
13
|
+
"internalType": "address",
|
|
14
|
+
"name": "newOwner",
|
|
15
|
+
"type": "address"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"name": "OwnershipTransferred",
|
|
19
|
+
"type": "event"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"anonymous": false,
|
|
23
|
+
"inputs": [
|
|
24
|
+
{
|
|
25
|
+
"indexed": true,
|
|
26
|
+
"internalType": "uint24",
|
|
27
|
+
"name": "perpetualId",
|
|
28
|
+
"type": "uint24"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"indexed": false,
|
|
32
|
+
"internalType": "address",
|
|
33
|
+
"name": "perpManagerAddress",
|
|
34
|
+
"type": "address"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"indexed": false,
|
|
38
|
+
"internalType": "address",
|
|
39
|
+
"name": "limitOrderBookAddress",
|
|
40
|
+
"type": "address"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"name": "PerpetualLimitOrderBookDeployed",
|
|
44
|
+
"type": "event"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"inputs": [
|
|
48
|
+
{
|
|
49
|
+
"internalType": "address",
|
|
50
|
+
"name": "_perpetualManagerAddr",
|
|
51
|
+
"type": "address"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"internalType": "uint24",
|
|
55
|
+
"name": "_perpetualId",
|
|
56
|
+
"type": "uint24"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"name": "deployLimitOrderBookProxy",
|
|
60
|
+
"outputs": [],
|
|
61
|
+
"stateMutability": "nonpayable",
|
|
62
|
+
"type": "function"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"inputs": [
|
|
66
|
+
{
|
|
67
|
+
"internalType": "uint24",
|
|
68
|
+
"name": "_perpetualId",
|
|
69
|
+
"type": "uint24"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"name": "getOrderBookAddress",
|
|
73
|
+
"outputs": [
|
|
74
|
+
{
|
|
75
|
+
"internalType": "address",
|
|
76
|
+
"name": "",
|
|
77
|
+
"type": "address"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"stateMutability": "view",
|
|
81
|
+
"type": "function"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"inputs": [
|
|
85
|
+
{
|
|
86
|
+
"internalType": "uint24",
|
|
87
|
+
"name": "",
|
|
88
|
+
"type": "uint24"
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"name": "orderBooks",
|
|
92
|
+
"outputs": [
|
|
93
|
+
{
|
|
94
|
+
"internalType": "address",
|
|
95
|
+
"name": "",
|
|
96
|
+
"type": "address"
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"stateMutability": "view",
|
|
100
|
+
"type": "function"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"inputs": [],
|
|
104
|
+
"name": "owner",
|
|
105
|
+
"outputs": [
|
|
106
|
+
{
|
|
107
|
+
"internalType": "address",
|
|
108
|
+
"name": "",
|
|
109
|
+
"type": "address"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"stateMutability": "view",
|
|
113
|
+
"type": "function"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"inputs": [],
|
|
117
|
+
"name": "renounceOwnership",
|
|
118
|
+
"outputs": [],
|
|
119
|
+
"stateMutability": "nonpayable",
|
|
120
|
+
"type": "function"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"inputs": [
|
|
124
|
+
{
|
|
125
|
+
"internalType": "address",
|
|
126
|
+
"name": "newOwner",
|
|
127
|
+
"type": "address"
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"name": "transferOwnership",
|
|
131
|
+
"outputs": [],
|
|
132
|
+
"stateMutability": "nonpayable",
|
|
133
|
+
"type": "function"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
{
|
|
3
3
|
"name": "testnet",
|
|
4
4
|
"chainId": 80001,
|
|
5
|
-
"version":
|
|
6
|
-
"proxyAddr": "
|
|
5
|
+
"version": 6,
|
|
6
|
+
"proxyAddr": "0xDEDf0dd46757cE93E0D9439F78382c0c68cF76C2",
|
|
7
7
|
"nodeURL": "https://polygon-mumbai.blockpi.network/v1/rpc/public",
|
|
8
8
|
"priceFeedConfigNetwork": "testnet",
|
|
9
9
|
"proxyABILocation": "testnet/IPerpetualManager.json",
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
"limitOrderBookABILocation": ""
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"name": "
|
|
26
|
+
"name": "testnet",
|
|
27
27
|
"chainId": 80001,
|
|
28
|
-
"version": 5
|
|
28
|
+
"version": 5,
|
|
29
29
|
"proxyAddr": "0x4F1C7EE9E881Cc735f39Ca36c649ba9E930B4E4e",
|
|
30
30
|
"nodeURL": "https://polygon-mumbai.blockpi.network/v1/rpc/public",
|
|
31
31
|
"priceFeedConfigNetwork": "testnet",
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"limitOrderBookABILocation": "central-park/LimitOrderBook.json"
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
|
-
"name": "
|
|
37
|
+
"name": "zkevmTestnet",
|
|
38
38
|
"chainId": 1442,
|
|
39
39
|
"version": 0,
|
|
40
|
-
"proxyAddr": "",
|
|
40
|
+
"proxyAddr": "0xb56b81e40e1cDB77bb5Db6C0283e25C27DAE1Be6",
|
|
41
41
|
"nodeURL": "https://rpc.public.zkevm-test.net ",
|
|
42
42
|
"priceFeedConfigNetwork": "testnet",
|
|
43
|
-
"proxyABILocation": "",
|
|
44
|
-
"limitOrderBookFactoryABILocation": "",
|
|
45
|
-
"limitOrderBookABILocation": ""
|
|
43
|
+
"proxyABILocation": "zkevmTestnet/IPerpetualManager.json",
|
|
44
|
+
"limitOrderBookFactoryABILocation": "zkevmTestnet/LimitOrderBookFactory.json",
|
|
45
|
+
"limitOrderBookABILocation": "zkevmTestnet/LimitOrderBook.json"
|
|
46
46
|
}
|
|
47
47
|
]
|
|
@@ -153,7 +153,7 @@ export interface Order {
|
|
|
153
153
|
leverage?: number | undefined;
|
|
154
154
|
deadline?: number | undefined;
|
|
155
155
|
timestamp: number;
|
|
156
|
-
|
|
156
|
+
submittedTimestamp?: number;
|
|
157
157
|
parentChildOrderIds?: [string, string];
|
|
158
158
|
}
|
|
159
159
|
export interface TradeEvent {
|
|
@@ -178,7 +178,7 @@ export interface TradeEvent {
|
|
|
178
178
|
int128 fLeverage; // 0 if deposit and trade separate
|
|
179
179
|
uint64 iDeadline;
|
|
180
180
|
uint64 createdTimestamp;
|
|
181
|
-
uint64
|
|
181
|
+
uint64 submittedTimestamp;
|
|
182
182
|
}
|
|
183
183
|
*/
|
|
184
184
|
export interface SmartContractOrder {
|
|
@@ -195,7 +195,7 @@ export interface SmartContractOrder {
|
|
|
195
195
|
fLeverage: BigNumberish;
|
|
196
196
|
iDeadline: BigNumberish;
|
|
197
197
|
createdTimestamp: BigNumberish;
|
|
198
|
-
|
|
198
|
+
submittedTimestamp: BigNumberish;
|
|
199
199
|
}
|
|
200
200
|
/**
|
|
201
201
|
* struct ClientOrder {
|
|
@@ -212,7 +212,7 @@ export interface SmartContractOrder {
|
|
|
212
212
|
int128 fLeverage; // 0 if deposit and trade separate
|
|
213
213
|
uint64 iDeadline;
|
|
214
214
|
uint64 createdTimestamp;
|
|
215
|
-
//uint64
|
|
215
|
+
//uint64 submittedTimestamp <- will be set by LimitOrderBook
|
|
216
216
|
bytes32 parentChildDigest1;
|
|
217
217
|
bytes32 parentChildDigest2;
|
|
218
218
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeSDKTypes.js","sourceRoot":"","sources":["../../src/nodeSDKTypes.ts"],"names":[],"mappings":";;;;;AAAA,iCAA+G;AAElG,QAAA,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACxC,QAAA,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC1D,QAAA,WAAW,GAAG,IAAI,GAAG,CAAiB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AAC3F,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAC9B,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAC7B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,cAAc,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAC/E,QAAA,YAAY,GAAG,kBAAS,CAAC,WAAW,CAAC;AACrC,QAAA,aAAa,GAAG,kBAAS,CAAC,QAAQ,CAAC;AAEnC,QAAA,SAAS,GAAG,kBAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACnD,QAAA,SAAS,GAAG,kBAAS,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACjE,QAAA,YAAY,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,QAAA,QAAQ,GAAG,kBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtD,QAAA,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE/C,QAAA,eAAe,GAAG,kBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/C,QAAA,gBAAgB,GAAG,kBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD,QAAA,iBAAiB,GAAG,kBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACjD,QAAA,eAAe,GAAG,kBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/C,QAAA,sBAAsB,GAAG,kBAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAEtD,QAAA,gBAAgB,GAAG,OAAO,CAAC;AAC3B,QAAA,iBAAiB,GAAG,QAAQ,CAAC;AAC7B,QAAA,sBAAsB,GAAG,aAAa,CAAC;AACvC,QAAA,qBAAqB,GAAG,YAAY,CAAC;AACrC,QAAA,QAAQ,GAAG,KAAK,CAAC;AACjB,QAAA,SAAS,GAAG,MAAM,CAAC;AACnB,QAAA,WAAW,GAAG,QAAQ,CAAC;AAiCpC,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,iDAAS,CAAA;IACT,+CAAI,CAAA;IACJ,mDAAM,CAAA;AACR,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB;AAgNY,QAAA,2BAA2B,GAAG,SAAS,CAAC;AACxC,QAAA,2BAA2B,GAAG,cAAc,CAAC;AAE1D,SAAgB,QAAQ,CAAC,MAAqB;IAC5C,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;QACtC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,gBAAS,MAAM,CAAC,gBAAgB,CAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,gBAAS,MAAM,CAAC,gCAAgC,CAAE,CAAC,CAAC;QACnF,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,gBAAS,MAAM,CAAC,yBAAyB,CAAE,CAAC,CAAC;KACtE;AACH,CAAC;AAND,4BAMC;AAED,
|
|
1
|
+
{"version":3,"file":"nodeSDKTypes.js","sourceRoot":"","sources":["../../src/nodeSDKTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ethers } from "ethers";
|
|
2
|
-
import { NodeSDKConfig, Order, PerpetualStaticInfo, PriceFeedSubmission } from "./nodeSDKTypes";
|
|
2
|
+
import { NodeSDKConfig, Order, PerpetualStaticInfo, PriceFeedSubmission, SmartContractOrder } from "./nodeSDKTypes";
|
|
3
3
|
import WriteAccessHandler from "./writeAccessHandler";
|
|
4
4
|
/**
|
|
5
5
|
* Functions to execute existing conditional orders from the limit order book. This class
|
|
@@ -8,7 +8,7 @@ import WriteAccessHandler from "./writeAccessHandler";
|
|
|
8
8
|
* @extends WriteAccessHandler
|
|
9
9
|
*/
|
|
10
10
|
export default class OrderReferrerTool extends WriteAccessHandler {
|
|
11
|
-
static
|
|
11
|
+
static TRADE_DELAY: number;
|
|
12
12
|
/**
|
|
13
13
|
* Constructor.
|
|
14
14
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
|
|
@@ -64,6 +64,7 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
64
64
|
* @returns Transaction object.
|
|
65
65
|
*/
|
|
66
66
|
executeOrder(symbol: string, orderId: string, referrerAddr?: string, nonce?: number, submission?: PriceFeedSubmission): Promise<ethers.ContractTransaction>;
|
|
67
|
+
executeOrders(symbol: string, orderIds: string[], referrerAddr?: string, nonce?: number, submission?: PriceFeedSubmission): Promise<ethers.ContractTransaction>;
|
|
67
68
|
/**
|
|
68
69
|
* All the orders in the order book for a given symbol that are currently open.
|
|
69
70
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -175,7 +176,7 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
175
176
|
* main();
|
|
176
177
|
* @returns true if order can be executed for the current state of the perpetuals
|
|
177
178
|
*/
|
|
178
|
-
isTradeable(order: Order, indexPrices?: [number, number]): Promise<boolean>;
|
|
179
|
+
isTradeable(order: Order, blockTimestamp?: number, indexPrices?: [number, number]): Promise<boolean>;
|
|
179
180
|
/**
|
|
180
181
|
* Check for a batch of orders on the same perpetual whether they can be traded
|
|
181
182
|
* @param orders orders belonging to 1 perpetual
|
|
@@ -183,7 +184,13 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
183
184
|
* if not defined.
|
|
184
185
|
* @returns array of tradeable boolean
|
|
185
186
|
*/
|
|
186
|
-
isTradeableBatch(orders: Order[], indexPrices?: [number, number, boolean, boolean]): Promise<boolean[]>;
|
|
187
|
-
|
|
187
|
+
isTradeableBatch(orders: Order[], blockTimestamp?: number, indexPrices?: [number, number, boolean, boolean]): Promise<boolean[]>;
|
|
188
|
+
protected _isTradeable(order: Order, tradePrice: number, markPrice: number, blockTimestamp: number, symbolToPerpInfoMap: Map<string, PerpetualStaticInfo>): boolean;
|
|
189
|
+
/**
|
|
190
|
+
* Wrapper of static method to use after mappings have been loaded into memory.
|
|
191
|
+
* @param scOrder Perpetual order as received in the proxy events.
|
|
192
|
+
* @returns A user-friendly order struct.
|
|
193
|
+
*/
|
|
194
|
+
smartContractOrderToOrder(scOrder: SmartContractOrder): Order;
|
|
188
195
|
getTransactionCount(blockTag?: ethers.providers.BlockTag): Promise<number>;
|
|
189
196
|
}
|
|
@@ -99,6 +99,36 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
99
99
|
});
|
|
100
100
|
});
|
|
101
101
|
};
|
|
102
|
+
OrderReferrerTool.prototype.executeOrders = function (symbol, orderIds, referrerAddr, nonce, submission) {
|
|
103
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
104
|
+
var orderBookSC, options;
|
|
105
|
+
return tslib_1.__generator(this, function (_a) {
|
|
106
|
+
switch (_a.label) {
|
|
107
|
+
case 0:
|
|
108
|
+
if (this.proxyContract == null || this.signer == null) {
|
|
109
|
+
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
110
|
+
}
|
|
111
|
+
orderBookSC = this.getOrderBookContract(symbol);
|
|
112
|
+
if (typeof referrerAddr == "undefined") {
|
|
113
|
+
referrerAddr = this.traderAddr;
|
|
114
|
+
}
|
|
115
|
+
if (!(submission == undefined)) return [3 /*break*/, 2];
|
|
116
|
+
return [4 /*yield*/, this.priceFeedGetter.fetchLatestFeedPriceInfoForPerpetual(symbol)];
|
|
117
|
+
case 1:
|
|
118
|
+
submission = _a.sent();
|
|
119
|
+
_a.label = 2;
|
|
120
|
+
case 2:
|
|
121
|
+
options = {
|
|
122
|
+
gasLimit: this.gasLimit,
|
|
123
|
+
nonce: nonce,
|
|
124
|
+
value: this.PRICE_UPDATE_FEE_GWEI * (submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas.length),
|
|
125
|
+
};
|
|
126
|
+
return [4 /*yield*/, orderBookSC.executeOrders(orderIds, referrerAddr, submission === null || submission === void 0 ? void 0 : submission.priceFeedVaas, submission === null || submission === void 0 ? void 0 : submission.timestamps, options)];
|
|
127
|
+
case 3: return [2 /*return*/, _a.sent()];
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
};
|
|
102
132
|
/**
|
|
103
133
|
* All the orders in the order book for a given symbol that are currently open.
|
|
104
134
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -288,9 +318,9 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
288
318
|
* main();
|
|
289
319
|
* @returns true if order can be executed for the current state of the perpetuals
|
|
290
320
|
*/
|
|
291
|
-
OrderReferrerTool.prototype.isTradeable = function (order, indexPrices) {
|
|
321
|
+
OrderReferrerTool.prototype.isTradeable = function (order, blockTimestamp, indexPrices) {
|
|
292
322
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
293
|
-
var obj, orderPrice, markPrice,
|
|
323
|
+
var obj, orderPrice, markPrice, currentBlock;
|
|
294
324
|
return tslib_1.__generator(this, function (_a) {
|
|
295
325
|
switch (_a.label) {
|
|
296
326
|
case 0:
|
|
@@ -309,10 +339,16 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
309
339
|
return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualMarkPrice(order.symbol, this.symbolToPerpStaticInfo, this.proxyContract, indexPrices)];
|
|
310
340
|
case 4:
|
|
311
341
|
markPrice = _a.sent();
|
|
342
|
+
if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
|
|
312
343
|
return [4 /*yield*/, this.provider.getBlockNumber()];
|
|
313
344
|
case 5:
|
|
314
|
-
|
|
315
|
-
return [
|
|
345
|
+
currentBlock = _a.sent();
|
|
346
|
+
return [4 /*yield*/, this.provider.getBlock(currentBlock)];
|
|
347
|
+
case 6:
|
|
348
|
+
blockTimestamp = (_a.sent()).timestamp;
|
|
349
|
+
_a.label = 7;
|
|
350
|
+
case 7: return [4 /*yield*/, this._isTradeable(order, orderPrice, markPrice, blockTimestamp, this.symbolToPerpStaticInfo)];
|
|
351
|
+
case 8: return [2 /*return*/, _a.sent()];
|
|
316
352
|
}
|
|
317
353
|
});
|
|
318
354
|
});
|
|
@@ -324,9 +360,9 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
324
360
|
* if not defined.
|
|
325
361
|
* @returns array of tradeable boolean
|
|
326
362
|
*/
|
|
327
|
-
OrderReferrerTool.prototype.isTradeableBatch = function (orders, indexPrices) {
|
|
363
|
+
OrderReferrerTool.prototype.isTradeableBatch = function (orders, blockTimestamp, indexPrices) {
|
|
328
364
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
329
|
-
var obj, orderPrice, markPrice,
|
|
365
|
+
var obj, orderPrice, markPrice, currentBlock;
|
|
330
366
|
var _this = this;
|
|
331
367
|
return tslib_1.__generator(this, function (_a) {
|
|
332
368
|
switch (_a.label) {
|
|
@@ -359,48 +395,83 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
359
395
|
return [4 /*yield*/, perpetualDataHandler_1.default._queryPerpetualMarkPrice(orders[0].symbol, this.symbolToPerpStaticInfo, this.proxyContract, [indexPrices[0], indexPrices[1]])];
|
|
360
396
|
case 4:
|
|
361
397
|
markPrice = _a.sent();
|
|
398
|
+
if (!(blockTimestamp == undefined)) return [3 /*break*/, 7];
|
|
362
399
|
return [4 /*yield*/, this.provider.getBlockNumber()];
|
|
363
400
|
case 5:
|
|
364
|
-
|
|
365
|
-
return [
|
|
366
|
-
|
|
367
|
-
|
|
401
|
+
currentBlock = _a.sent();
|
|
402
|
+
return [4 /*yield*/, this.provider.getBlock(currentBlock)];
|
|
403
|
+
case 6:
|
|
404
|
+
blockTimestamp = (_a.sent()).timestamp;
|
|
405
|
+
_a.label = 7;
|
|
406
|
+
case 7: return [4 /*yield*/, orders.map(function (o, idx) {
|
|
407
|
+
return _this._isTradeable(o, orderPrice[idx], markPrice, blockTimestamp, _this.symbolToPerpStaticInfo);
|
|
408
|
+
})];
|
|
409
|
+
case 8: return [2 /*return*/, _a.sent()];
|
|
368
410
|
}
|
|
369
411
|
});
|
|
370
412
|
});
|
|
371
413
|
};
|
|
372
|
-
OrderReferrerTool._isTradeable = function (order, tradePrice, markPrice,
|
|
414
|
+
OrderReferrerTool.prototype._isTradeable = function (order, tradePrice, markPrice, blockTimestamp, symbolToPerpInfoMap) {
|
|
373
415
|
// check expiration date
|
|
374
416
|
if (order.deadline != undefined && order.deadline < Date.now() / 1000) {
|
|
417
|
+
console.log("order expired");
|
|
375
418
|
return false;
|
|
376
419
|
}
|
|
377
|
-
|
|
420
|
+
// -1 because order is executed on the next block (+1)
|
|
421
|
+
if (order.submittedTimestamp != undefined &&
|
|
422
|
+
order.submittedTimestamp + OrderReferrerTool.TRADE_DELAY < blockTimestamp - 1) {
|
|
423
|
+
console.log("on hold for ".concat(blockTimestamp - 1 - order.submittedTimestamp - OrderReferrerTool.TRADE_DELAY, " seconds"));
|
|
378
424
|
return false;
|
|
379
425
|
}
|
|
380
426
|
// check order size
|
|
381
|
-
|
|
427
|
+
var lotSize = perpetualDataHandler_1.default._getLotSize(order.symbol, symbolToPerpInfoMap);
|
|
428
|
+
if (order.quantity < lotSize) {
|
|
429
|
+
console.log("order size too small: ".concat(order.quantity, " < ").concat(lotSize));
|
|
382
430
|
return false;
|
|
383
431
|
}
|
|
384
432
|
// check limit price: fromSmartContractOrder will set it to undefined when not tradeable
|
|
385
433
|
if (order.limitPrice == undefined) {
|
|
434
|
+
console.log("limit price undefined");
|
|
386
435
|
return false;
|
|
387
436
|
}
|
|
388
437
|
var limitPrice = order.limitPrice;
|
|
389
438
|
if ((order.side == nodeSDKTypes_1.BUY_SIDE && tradePrice > limitPrice) || (order.side == nodeSDKTypes_1.SELL_SIDE && tradePrice < limitPrice)) {
|
|
439
|
+
console.log("limit price not met: ".concat(limitPrice, " ").concat(order.side, " @ ").concat(tradePrice));
|
|
390
440
|
return false;
|
|
391
441
|
}
|
|
392
|
-
//
|
|
393
|
-
if (order.stopPrice
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
if ((order.side == nodeSDKTypes_1.BUY_SIDE && markPrice < order.stopPrice) ||
|
|
398
|
-
(order.side == nodeSDKTypes_1.SELL_SIDE && markPrice > order.stopPrice)) {
|
|
442
|
+
// check stop price
|
|
443
|
+
if (order.stopPrice != undefined &&
|
|
444
|
+
((order.side == nodeSDKTypes_1.BUY_SIDE && markPrice < order.stopPrice) ||
|
|
445
|
+
(order.side == nodeSDKTypes_1.SELL_SIDE && markPrice > order.stopPrice))) {
|
|
446
|
+
console.log("stop price not met");
|
|
399
447
|
return false;
|
|
400
448
|
}
|
|
449
|
+
//check dependency
|
|
450
|
+
if (order.parentChildOrderIds != undefined &&
|
|
451
|
+
order.parentChildOrderIds[0] == ethers_1.ethers.constants.HashZero &&
|
|
452
|
+
order.parentChildOrderIds[1] != ethers_1.ethers.constants.HashZero) {
|
|
453
|
+
// order has a parent
|
|
454
|
+
var orderBookContract = this.getOrderBookContract(order.symbol);
|
|
455
|
+
return orderBookContract.getOrderStatus(order.parentChildOrderIds[1]).then(function (status) {
|
|
456
|
+
if (status == 2 || status == 3) {
|
|
457
|
+
console.log("parent not executed/cancelled");
|
|
458
|
+
// parent is open or unknown
|
|
459
|
+
return false;
|
|
460
|
+
}
|
|
461
|
+
return true;
|
|
462
|
+
});
|
|
463
|
+
}
|
|
401
464
|
// all checks passed -> order is tradeable
|
|
402
465
|
return true;
|
|
403
466
|
};
|
|
467
|
+
/**
|
|
468
|
+
* Wrapper of static method to use after mappings have been loaded into memory.
|
|
469
|
+
* @param scOrder Perpetual order as received in the proxy events.
|
|
470
|
+
* @returns A user-friendly order struct.
|
|
471
|
+
*/
|
|
472
|
+
OrderReferrerTool.prototype.smartContractOrderToOrder = function (scOrder) {
|
|
473
|
+
return perpetualDataHandler_1.default.fromSmartContractOrder(scOrder, this.symbolToPerpStaticInfo);
|
|
474
|
+
};
|
|
404
475
|
OrderReferrerTool.prototype.getTransactionCount = function (blockTag) {
|
|
405
476
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
406
477
|
return tslib_1.__generator(this, function (_a) {
|
|
@@ -415,7 +486,7 @@ var OrderReferrerTool = /** @class */ (function (_super) {
|
|
|
415
486
|
});
|
|
416
487
|
});
|
|
417
488
|
};
|
|
418
|
-
OrderReferrerTool.
|
|
489
|
+
OrderReferrerTool.TRADE_DELAY = 5;
|
|
419
490
|
return OrderReferrerTool;
|
|
420
491
|
}(writeAccessHandler_1.default));
|
|
421
492
|
exports.default = OrderReferrerTool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orderReferrerTool.js","sourceRoot":"","sources":["../../src/orderReferrerTool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"orderReferrerTool.js","sourceRoot":"","sources":["../../src/orderReferrerTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -216,5 +216,5 @@ export default class PerpetualDataHandler {
|
|
|
216
216
|
* @param traderAccount Trader account
|
|
217
217
|
* @param perpStaticInfo Symbol to perpetual info map
|
|
218
218
|
*/
|
|
219
|
-
protected static checkOrder(order: Order,
|
|
219
|
+
protected static checkOrder(order: Order, perpStaticInfo: Map<string, PerpetualStaticInfo>): void;
|
|
220
220
|
}
|
|
@@ -18,7 +18,6 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
18
18
|
this.lobFactoryContract = null;
|
|
19
19
|
this.provider = null;
|
|
20
20
|
this.signerOrProvider = null;
|
|
21
|
-
console.log("local sdk");
|
|
22
21
|
this.symbolToPerpStaticInfo = new Map();
|
|
23
22
|
this.poolStaticInfos = new Array();
|
|
24
23
|
this.symbolToTokenAddrMap = new Map();
|
|
@@ -682,7 +681,7 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
682
681
|
leverage: (0, d8XMath_1.ABK64x64ToFloat)(ethers_1.BigNumber.from(order.fLeverage)),
|
|
683
682
|
deadline: Number(order.iDeadline),
|
|
684
683
|
timestamp: Number(order.createdTimestamp),
|
|
685
|
-
|
|
684
|
+
submittedTimestamp: Number(order.submittedTimestamp),
|
|
686
685
|
};
|
|
687
686
|
return userOrder;
|
|
688
687
|
};
|
|
@@ -694,6 +693,9 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
694
693
|
* @returns SmartContractOrder
|
|
695
694
|
*/
|
|
696
695
|
PerpetualDataHandler.toSmartContractOrder = function (order, traderAddr, perpStaticInfo) {
|
|
696
|
+
// this revers if order is invalid
|
|
697
|
+
PerpetualDataHandler.checkOrder(order, perpStaticInfo);
|
|
698
|
+
// translate order
|
|
697
699
|
var flags = PerpetualDataHandler._orderTypeToFlag(order);
|
|
698
700
|
var brokerSig = order.brokerSignature == undefined ? [] : order.brokerSignature;
|
|
699
701
|
var perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
|
|
@@ -734,7 +736,7 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
734
736
|
fLeverage: order.leverage == undefined ? ethers_1.BigNumber.from(0) : (0, d8XMath_1.floatToABK64x64)(order.leverage),
|
|
735
737
|
iDeadline: ethers_1.BigNumber.from(Math.round(iDeadline)),
|
|
736
738
|
createdTimestamp: ethers_1.BigNumber.from(Math.round(order.timestamp)),
|
|
737
|
-
|
|
739
|
+
submittedTimestamp: 0,
|
|
738
740
|
};
|
|
739
741
|
return smOrder;
|
|
740
742
|
};
|
|
@@ -921,7 +923,7 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
921
923
|
}
|
|
922
924
|
else {
|
|
923
925
|
if (version === undefined) {
|
|
924
|
-
configFile = configFile.sort(function (conf) { return
|
|
926
|
+
configFile = configFile.sort(function (conf) { return conf.version; });
|
|
925
927
|
return configFile[0];
|
|
926
928
|
}
|
|
927
929
|
else {
|
|
@@ -958,7 +960,7 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
958
960
|
}
|
|
959
961
|
else {
|
|
960
962
|
if (version === undefined) {
|
|
961
|
-
configFile = configFile.sort(function (conf) { return
|
|
963
|
+
configFile = configFile.sort(function (conf) { return conf.version; });
|
|
962
964
|
return configFile[0];
|
|
963
965
|
}
|
|
964
966
|
else {
|
|
@@ -1023,20 +1025,22 @@ var PerpetualDataHandler = /** @class */ (function () {
|
|
|
1023
1025
|
* @param traderAccount Trader account
|
|
1024
1026
|
* @param perpStaticInfo Symbol to perpetual info map
|
|
1025
1027
|
*/
|
|
1026
|
-
PerpetualDataHandler.checkOrder = function (order,
|
|
1027
|
-
|
|
1028
|
-
|
|
1028
|
+
PerpetualDataHandler.checkOrder = function (order,
|
|
1029
|
+
// traderAccount: MarginAccount,
|
|
1030
|
+
perpStaticInfo) {
|
|
1029
1031
|
// check side
|
|
1030
1032
|
if (order.side != nodeSDKTypes_1.BUY_SIDE && order.side != nodeSDKTypes_1.SELL_SIDE) {
|
|
1031
1033
|
throw Error("order side must be ".concat(nodeSDKTypes_1.BUY_SIDE, " or ").concat(nodeSDKTypes_1.SELL_SIDE));
|
|
1032
1034
|
}
|
|
1033
1035
|
// check amount
|
|
1034
1036
|
var lotSize = perpStaticInfo.get(order.symbol).lotSizeBC;
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1037
|
+
// let curPos =
|
|
1038
|
+
// traderAccount.side == CLOSED_SIDE
|
|
1039
|
+
// ? 0
|
|
1040
|
+
// : (traderAccount.side == BUY_SIDE ? 1 : -1) * traderAccount.positionNotionalBaseCCY;
|
|
1041
|
+
// let newPos = curPos + (order.side == BUY_SIDE ? 1 : -1) * order.quantity;
|
|
1042
|
+
// if (Math.abs(order.quantity) < lotSize || (Math.abs(newPos) >= lotSize && Math.abs(newPos) < 10 * lotSize)) {
|
|
1043
|
+
if (Math.abs(order.quantity) < lotSize) {
|
|
1040
1044
|
throw Error("trade amount too small: ".concat(order.quantity, " ").concat(perpStaticInfo.get(order.symbol).S2Symbol));
|
|
1041
1045
|
}
|
|
1042
1046
|
// check limit price
|