@d8x/perpetuals-sdk 0.0.9 → 0.0.10
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/config/defaultConfig.json +3 -3
- package/dist/accountTrade.d.ts +22 -6
- package/dist/accountTrade.js +22 -6
- package/dist/brokerTool.d.ts +1 -1
- package/dist/brokerTool.js +5 -1
- package/dist/liquidatorTool.d.ts +2 -2
- package/dist/liquidatorTool.js +5 -1
- package/dist/marketData.js +2 -1
- package/dist/nodeSDKTypes.d.ts +1 -5
- package/dist/nodeSDKTypes.js +1 -6
- package/dist/orderReferrerTool.d.ts +57 -1
- package/dist/orderReferrerTool.js +59 -2
- package/dist/perpetualDataHandler.js +0 -4
- package/package.json +1 -1
- package/src/accountTrade.ts +22 -6
- package/src/brokerTool.ts +52 -48
- package/src/liquidatorTool.ts +25 -21
- package/src/marketData.ts +2 -1
- package/src/nodeSDKTypes.ts +1 -5
- package/src/orderReferrerTool.ts +59 -2
- package/src/perpetualDataHandler.ts +0 -6
- package/dist/liquiditatorTool.d.ts +0 -14
- package/dist/liquiditatorTool.js +0 -21
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "v1.
|
|
3
|
-
"proxyAddr": "
|
|
2
|
+
"name": "v1.3",
|
|
3
|
+
"proxyAddr": "0x44Ae67695781209ace41c422dCfD29d3C678AF68",
|
|
4
4
|
"nodeURL": "https://rpc-mumbai.maticvigil.com/",
|
|
5
5
|
"proxyABILocation": "../abi/IPerpetualManager.json",
|
|
6
|
-
"limitOrderBookFactoryAddr": "
|
|
6
|
+
"limitOrderBookFactoryAddr": "0x209594B4511b36a6D64EBd7798f8b89674B5B230",
|
|
7
7
|
"limitOrderBookFactoryABILocation": "../abi/LimitOrderBookFactory.json",
|
|
8
8
|
"limitOrderBookABILocation": "../abi/LimitOrderBook.json"
|
|
9
9
|
}
|
package/dist/accountTrade.d.ts
CHANGED
|
@@ -39,12 +39,28 @@ export default class AccountTrade extends WriteAccessHandler {
|
|
|
39
39
|
* @param {Order} order Order structure. As a minimum the structure needs to
|
|
40
40
|
* specify symbol, side, type and quantity.
|
|
41
41
|
* @example
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
42
|
+
* import { AccountTrade, PerpetualDataHandler, Order } from '@d8x/perpetuals-sdk';
|
|
43
|
+
* async function main() {
|
|
44
|
+
* console.log(AccountTrade);
|
|
45
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
46
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
47
|
+
* const pk: string = <string>process.env.PK;
|
|
48
|
+
* let accTrade = new AccountTrade(config, pk);
|
|
49
|
+
* await accTrade.createProxyInstance();
|
|
50
|
+
* // set allowance
|
|
51
|
+
* await accTrade.setAllowance("MATIC");
|
|
52
|
+
* // set an order
|
|
53
|
+
* let order: Order = {
|
|
54
|
+
* symbol: "MATIC-USD-MATIC",
|
|
55
|
+
* side: "BUY",
|
|
56
|
+
* type: "MARKET",
|
|
57
|
+
* quantity: 100,
|
|
58
|
+
* timestamp: Date.now()
|
|
59
|
+
* };
|
|
60
|
+
* let orderTransaction = await accTrade.order(order);
|
|
61
|
+
* console.log(orderTransaction);
|
|
62
|
+
* }
|
|
63
|
+
* main();
|
|
48
64
|
*
|
|
49
65
|
* @returns {ContractTransaction} Contract Transaction (containing events).
|
|
50
66
|
*/
|
package/dist/accountTrade.js
CHANGED
|
@@ -71,12 +71,28 @@ class AccountTrade extends writeAccessHandler_1.default {
|
|
|
71
71
|
* @param {Order} order Order structure. As a minimum the structure needs to
|
|
72
72
|
* specify symbol, side, type and quantity.
|
|
73
73
|
* @example
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
74
|
+
* import { AccountTrade, PerpetualDataHandler, Order } from '@d8x/perpetuals-sdk';
|
|
75
|
+
* async function main() {
|
|
76
|
+
* console.log(AccountTrade);
|
|
77
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
78
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
79
|
+
* const pk: string = <string>process.env.PK;
|
|
80
|
+
* let accTrade = new AccountTrade(config, pk);
|
|
81
|
+
* await accTrade.createProxyInstance();
|
|
82
|
+
* // set allowance
|
|
83
|
+
* await accTrade.setAllowance("MATIC");
|
|
84
|
+
* // set an order
|
|
85
|
+
* let order: Order = {
|
|
86
|
+
* symbol: "MATIC-USD-MATIC",
|
|
87
|
+
* side: "BUY",
|
|
88
|
+
* type: "MARKET",
|
|
89
|
+
* quantity: 100,
|
|
90
|
+
* timestamp: Date.now()
|
|
91
|
+
* };
|
|
92
|
+
* let orderTransaction = await accTrade.order(order);
|
|
93
|
+
* console.log(orderTransaction);
|
|
94
|
+
* }
|
|
95
|
+
* main();
|
|
80
96
|
*
|
|
81
97
|
* @returns {ContractTransaction} Contract Transaction (containing events).
|
|
82
98
|
*/
|
package/dist/brokerTool.d.ts
CHANGED
|
@@ -49,7 +49,7 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
49
49
|
*
|
|
50
50
|
* @returns {number} Exchange fee for this broker, in decimals (i.e. 0.1% is 0.001)
|
|
51
51
|
*/
|
|
52
|
-
getBrokerInducedFee(poolSymbolName: string): Promise<number>;
|
|
52
|
+
getBrokerInducedFee(poolSymbolName: string): Promise<number | undefined>;
|
|
53
53
|
/**
|
|
54
54
|
* Determine the exchange fee based on lots purchased by this broker.
|
|
55
55
|
* The final exchange fee that this broker can offer to traders that trade through him is equal to
|
package/dist/brokerTool.js
CHANGED
|
@@ -75,7 +75,11 @@ class BrokerTool extends writeAccessHandler_1.default {
|
|
|
75
75
|
}
|
|
76
76
|
let poolId = perpetualDataHandler_1.default._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
77
77
|
let feeTbps = yield this.proxyContract.getBrokerInducedFee(poolId, this.traderAddr);
|
|
78
|
-
|
|
78
|
+
let fee = feeTbps / 100000;
|
|
79
|
+
if (fee == 0.65535) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return fee;
|
|
79
83
|
});
|
|
80
84
|
}
|
|
81
85
|
/**
|
package/dist/liquidatorTool.d.ts
CHANGED
|
@@ -50,7 +50,7 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
50
50
|
*
|
|
51
51
|
* @returns {number} Liquidated amount.
|
|
52
52
|
*/
|
|
53
|
-
liquidateTrader(symbol: string, traderAddr: string, liquidatorAddr?: string): Promise<
|
|
53
|
+
liquidateTrader(symbol: string, traderAddr: string, liquidatorAddr?: string): Promise<any>;
|
|
54
54
|
/**
|
|
55
55
|
* Check if the collateral of a trader is above the maintenance margin ("maintenance margin safe").
|
|
56
56
|
* If not, the position can be liquidated.
|
|
@@ -84,7 +84,7 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
84
84
|
* @param gasLimit Gas limit.
|
|
85
85
|
* @ignore
|
|
86
86
|
*/
|
|
87
|
-
_liquidateByAMM(perpetualId: number, liquidatorAddr: string, traderAddr: string, gasLimit: number): Promise<
|
|
87
|
+
_liquidateByAMM(perpetualId: number, liquidatorAddr: string, traderAddr: string, gasLimit: number): Promise<any>;
|
|
88
88
|
/**
|
|
89
89
|
* Total number of active accounts for this symbol, i.e. accounts with positions that are currently open.
|
|
90
90
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
package/dist/liquidatorTool.js
CHANGED
|
@@ -126,6 +126,9 @@ class LiquidatorTool extends writeAccessHandler_1.default {
|
|
|
126
126
|
let fAmount = yield this.proxyContract.liquidateByAMM(perpetualId, liquidatorAddr, traderAddr, {
|
|
127
127
|
gasLimit: gasLimit,
|
|
128
128
|
});
|
|
129
|
+
if (fAmount == undefined) {
|
|
130
|
+
return fAmount;
|
|
131
|
+
}
|
|
129
132
|
return (0, d8XMath_1.ABK64x64ToFloat)(fAmount);
|
|
130
133
|
});
|
|
131
134
|
}
|
|
@@ -155,7 +158,8 @@ class LiquidatorTool extends writeAccessHandler_1.default {
|
|
|
155
158
|
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
156
159
|
}
|
|
157
160
|
let perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
158
|
-
|
|
161
|
+
let numAccounts = yield this.proxyContract.countActivePerpAccounts(perpID);
|
|
162
|
+
return Number(numAccounts);
|
|
159
163
|
});
|
|
160
164
|
}
|
|
161
165
|
/**
|
package/dist/marketData.js
CHANGED
|
@@ -304,7 +304,8 @@ class MarketData extends perpetualDataHandler_1.default {
|
|
|
304
304
|
static _exchangeInfo(_proxyContract) {
|
|
305
305
|
return __awaiter(this, void 0, void 0, function* () {
|
|
306
306
|
let nestedPerpetualIDs = yield perpetualDataHandler_1.default.getNestedPerpetualIds(_proxyContract);
|
|
307
|
-
let
|
|
307
|
+
let factory = yield _proxyContract.getOracleFactory();
|
|
308
|
+
let info = { pools: [], oracleFactoryAddr: factory };
|
|
308
309
|
const numPools = nestedPerpetualIDs.length;
|
|
309
310
|
for (var j = 0; j < numPools; j++) {
|
|
310
311
|
let perpetualIDs = nestedPerpetualIDs[j];
|
package/dist/nodeSDKTypes.d.ts
CHANGED
|
@@ -8,11 +8,6 @@ export declare const COLLATERAL_CURRENCY_QUOTE = 0;
|
|
|
8
8
|
export declare const COLLATERAL_CURRENCY_BASE = 1;
|
|
9
9
|
export declare const COLLATERAL_CURRENCY_QUANTO = 2;
|
|
10
10
|
export declare const PERP_STATE_STR: string[];
|
|
11
|
-
export declare const PerpetualStateINVALID = 0;
|
|
12
|
-
export declare const PerpetualStateINITIALIZING = 1;
|
|
13
|
-
export declare const PerpetualStateNORMAL = 2;
|
|
14
|
-
export declare const PerpetualStateEMERGENCY = 3;
|
|
15
|
-
export declare const PerpetualStateCLEARED = 4;
|
|
16
11
|
export declare const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
17
12
|
export declare const ZERO_ORDER_ID = "0x0000000000000000000000000000000000000000000000000000000000000000";
|
|
18
13
|
export declare const ONE_64x64: BigNumber;
|
|
@@ -77,6 +72,7 @@ export interface PerpetualStaticInfo {
|
|
|
77
72
|
}
|
|
78
73
|
export interface ExchangeInfo {
|
|
79
74
|
pools: PoolState[];
|
|
75
|
+
oracleFactoryAddr: string;
|
|
80
76
|
}
|
|
81
77
|
export interface PoolState {
|
|
82
78
|
isRunning: boolean;
|
package/dist/nodeSDKTypes.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CollaterlCCY = exports.CLOSED_SIDE = exports.SELL_SIDE = exports.BUY_SIDE = exports.ORDER_TYPE_STOP_LIMIT = exports.ORDER_TYPE_STOP_MARKET = exports.ORDER_TYPE_MARKET = exports.ORDER_TYPE_LIMIT = exports.MASK_KEEP_POS_LEVERAGE = exports.MASK_STOP_ORDER = exports.MASK_MARKET_ORDER = exports.MASK_LIMIT_ORDER = exports.MASK_CLOSE_ONLY = exports.ORDER_MAX_DURATION_SEC = exports.DECIMALS = exports.MAX_UINT_256 = exports.MAX_64x64 = exports.ONE_64x64 = exports.ZERO_ORDER_ID = exports.ZERO_ADDRESS = exports.
|
|
3
|
+
exports.CollaterlCCY = exports.CLOSED_SIDE = exports.SELL_SIDE = exports.BUY_SIDE = exports.ORDER_TYPE_STOP_LIMIT = exports.ORDER_TYPE_STOP_MARKET = exports.ORDER_TYPE_MARKET = exports.ORDER_TYPE_LIMIT = exports.MASK_KEEP_POS_LEVERAGE = exports.MASK_STOP_ORDER = exports.MASK_MARKET_ORDER = exports.MASK_LIMIT_ORDER = exports.MASK_CLOSE_ONLY = exports.ORDER_MAX_DURATION_SEC = exports.DECIMALS = exports.MAX_UINT_256 = exports.MAX_64x64 = exports.ONE_64x64 = exports.ZERO_ORDER_ID = exports.ZERO_ADDRESS = exports.PERP_STATE_STR = exports.COLLATERAL_CURRENCY_QUANTO = exports.COLLATERAL_CURRENCY_BASE = exports.COLLATERAL_CURRENCY_QUOTE = exports.ERC20_ABI = exports.DEFAULT_CONFIG_MAINNET_NAME = exports.DEFAULT_CONFIG_TESTNET_NAME = exports.DEFAULT_CONFIG_MAINNET = exports.DEFAULT_CONFIG_TESTNET = void 0;
|
|
4
4
|
const ethers_1 = require("ethers");
|
|
5
5
|
exports.DEFAULT_CONFIG_TESTNET = "../config/defaultConfig.json";
|
|
6
6
|
exports.DEFAULT_CONFIG_MAINNET = "notthereyet";
|
|
@@ -11,11 +11,6 @@ exports.COLLATERAL_CURRENCY_QUOTE = 0;
|
|
|
11
11
|
exports.COLLATERAL_CURRENCY_BASE = 1;
|
|
12
12
|
exports.COLLATERAL_CURRENCY_QUANTO = 2;
|
|
13
13
|
exports.PERP_STATE_STR = ["INVALID", "INITIALIZING", "NORMAL", "EMERGENCY", "CLEARED"];
|
|
14
|
-
exports.PerpetualStateINVALID = 0;
|
|
15
|
-
exports.PerpetualStateINITIALIZING = 1;
|
|
16
|
-
exports.PerpetualStateNORMAL = 2;
|
|
17
|
-
exports.PerpetualStateEMERGENCY = 3;
|
|
18
|
-
exports.PerpetualStateCLEARED = 4;
|
|
19
14
|
exports.ZERO_ADDRESS = ethers_1.constants.AddressZero;
|
|
20
15
|
exports.ZERO_ORDER_ID = ethers_1.constants.HashZero;
|
|
21
16
|
exports.ONE_64x64 = ethers_1.BigNumber.from("0x010000000000000000");
|
|
@@ -11,7 +11,18 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
11
11
|
* Constructor.
|
|
12
12
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
|
|
13
13
|
* @example
|
|
14
|
-
*
|
|
14
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
15
|
+
* async function main() {
|
|
16
|
+
* console.log(OrderReferrerTool);
|
|
17
|
+
* // load configuration for testnet
|
|
18
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
19
|
+
* // OrderReferrerTool (authentication required, PK is an environment variable with a private key)
|
|
20
|
+
* const pk: string = <string>process.env.PK;
|
|
21
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
22
|
+
* // Create a proxy instance to access the blockchain
|
|
23
|
+
* await orderTool.createProxyInstance();
|
|
24
|
+
* }
|
|
25
|
+
* main();
|
|
15
26
|
*
|
|
16
27
|
* @param {string} privateKey Private key of the wallet that executes the conditional orders.
|
|
17
28
|
*/
|
|
@@ -28,12 +39,42 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
28
39
|
/**
|
|
29
40
|
* All the orders in the order book for a given symbol that are currently open.
|
|
30
41
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
42
|
+
* @example
|
|
43
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
44
|
+
* async function main() {
|
|
45
|
+
* console.log(OrderReferrerTool);
|
|
46
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
47
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
48
|
+
* const pk: string = <string>process.env.PK;
|
|
49
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
50
|
+
* await orderTool.createProxyInstance();
|
|
51
|
+
* // get all open orders
|
|
52
|
+
* let openOrders = await orderTool.getAllOpenOrders("ETH-USD-MATIC");
|
|
53
|
+
* console.log(openOrders);
|
|
54
|
+
* }
|
|
55
|
+
* main();
|
|
56
|
+
*
|
|
31
57
|
* @returns Array with all open orders and their IDs.
|
|
32
58
|
*/
|
|
33
59
|
getAllOpenOrders(symbol: string): Promise<[Order[], string[]]>;
|
|
34
60
|
/**
|
|
35
61
|
* Total number of limit orders for this symbol, excluding those that have been cancelled/removed.
|
|
36
62
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
63
|
+
* @example
|
|
64
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
65
|
+
* async function main() {
|
|
66
|
+
* console.log(OrderReferrerTool);
|
|
67
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
68
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
69
|
+
* const pk: string = <string>process.env.PK;
|
|
70
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
71
|
+
* await orderTool.createProxyInstance();
|
|
72
|
+
* // get all open orders
|
|
73
|
+
* let numberOfOrders = await orderTool.numberOfOpenOrders("ETH-USD-MATIC");
|
|
74
|
+
* console.log(numberOfOrders);
|
|
75
|
+
* }
|
|
76
|
+
* main();
|
|
77
|
+
*
|
|
37
78
|
* @returns {number} Number of open orders.
|
|
38
79
|
*/
|
|
39
80
|
numberOfOpenOrders(symbol: string): Promise<number>;
|
|
@@ -50,6 +91,21 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
50
91
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
51
92
|
* @param {number} numElements Maximum number of orders to poll.
|
|
52
93
|
* @param {string=} startAfter Optional order ID from where to start polling. Defaults to the first order.
|
|
94
|
+
* @example
|
|
95
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
96
|
+
* async function main() {
|
|
97
|
+
* console.log(OrderReferrerTool);
|
|
98
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
99
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
100
|
+
* const pk: string = <string>process.env.PK;
|
|
101
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
102
|
+
* await orderTool.createProxyInstance();
|
|
103
|
+
* // get all open orders
|
|
104
|
+
* let activeOrders = await orderTool.pollLimitOrders("ETH-USD-MATIC", 2);
|
|
105
|
+
* console.log(activeOrders);
|
|
106
|
+
* }
|
|
107
|
+
* main();
|
|
108
|
+
*
|
|
53
109
|
* @returns Array of orders and corresponding order IDs
|
|
54
110
|
*/
|
|
55
111
|
pollLimitOrders(symbol: string, numElements: number, startAfter?: string): Promise<[Order[], string[]]>;
|
|
@@ -24,7 +24,18 @@ class OrderReferrerTool extends writeAccessHandler_1.default {
|
|
|
24
24
|
* Constructor.
|
|
25
25
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
|
|
26
26
|
* @example
|
|
27
|
-
*
|
|
27
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
28
|
+
* async function main() {
|
|
29
|
+
* console.log(OrderReferrerTool);
|
|
30
|
+
* // load configuration for testnet
|
|
31
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
32
|
+
* // OrderReferrerTool (authentication required, PK is an environment variable with a private key)
|
|
33
|
+
* const pk: string = <string>process.env.PK;
|
|
34
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
35
|
+
* // Create a proxy instance to access the blockchain
|
|
36
|
+
* await orderTool.createProxyInstance();
|
|
37
|
+
* }
|
|
38
|
+
* main();
|
|
28
39
|
*
|
|
29
40
|
* @param {string} privateKey Private key of the wallet that executes the conditional orders.
|
|
30
41
|
*/
|
|
@@ -54,6 +65,21 @@ class OrderReferrerTool extends writeAccessHandler_1.default {
|
|
|
54
65
|
/**
|
|
55
66
|
* All the orders in the order book for a given symbol that are currently open.
|
|
56
67
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
68
|
+
* @example
|
|
69
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
70
|
+
* async function main() {
|
|
71
|
+
* console.log(OrderReferrerTool);
|
|
72
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
73
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
74
|
+
* const pk: string = <string>process.env.PK;
|
|
75
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
76
|
+
* await orderTool.createProxyInstance();
|
|
77
|
+
* // get all open orders
|
|
78
|
+
* let openOrders = await orderTool.getAllOpenOrders("ETH-USD-MATIC");
|
|
79
|
+
* console.log(openOrders);
|
|
80
|
+
* }
|
|
81
|
+
* main();
|
|
82
|
+
*
|
|
57
83
|
* @returns Array with all open orders and their IDs.
|
|
58
84
|
*/
|
|
59
85
|
getAllOpenOrders(symbol) {
|
|
@@ -65,6 +91,21 @@ class OrderReferrerTool extends writeAccessHandler_1.default {
|
|
|
65
91
|
/**
|
|
66
92
|
* Total number of limit orders for this symbol, excluding those that have been cancelled/removed.
|
|
67
93
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
94
|
+
* @example
|
|
95
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
96
|
+
* async function main() {
|
|
97
|
+
* console.log(OrderReferrerTool);
|
|
98
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
99
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
100
|
+
* const pk: string = <string>process.env.PK;
|
|
101
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
102
|
+
* await orderTool.createProxyInstance();
|
|
103
|
+
* // get all open orders
|
|
104
|
+
* let numberOfOrders = await orderTool.numberOfOpenOrders("ETH-USD-MATIC");
|
|
105
|
+
* console.log(numberOfOrders);
|
|
106
|
+
* }
|
|
107
|
+
* main();
|
|
108
|
+
*
|
|
68
109
|
* @returns {number} Number of open orders.
|
|
69
110
|
*/
|
|
70
111
|
numberOfOpenOrders(symbol) {
|
|
@@ -73,7 +114,8 @@ class OrderReferrerTool extends writeAccessHandler_1.default {
|
|
|
73
114
|
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
74
115
|
}
|
|
75
116
|
const orderBookSC = this.getOrderBookContract(symbol);
|
|
76
|
-
|
|
117
|
+
let numOrders = yield orderBookSC.numberOfOrderBookDigests();
|
|
118
|
+
return Number(numOrders);
|
|
77
119
|
});
|
|
78
120
|
}
|
|
79
121
|
/**
|
|
@@ -99,6 +141,21 @@ class OrderReferrerTool extends writeAccessHandler_1.default {
|
|
|
99
141
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
100
142
|
* @param {number} numElements Maximum number of orders to poll.
|
|
101
143
|
* @param {string=} startAfter Optional order ID from where to start polling. Defaults to the first order.
|
|
144
|
+
* @example
|
|
145
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
146
|
+
* async function main() {
|
|
147
|
+
* console.log(OrderReferrerTool);
|
|
148
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
149
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
150
|
+
* const pk: string = <string>process.env.PK;
|
|
151
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
152
|
+
* await orderTool.createProxyInstance();
|
|
153
|
+
* // get all open orders
|
|
154
|
+
* let activeOrders = await orderTool.pollLimitOrders("ETH-USD-MATIC", 2);
|
|
155
|
+
* console.log(activeOrders);
|
|
156
|
+
* }
|
|
157
|
+
* main();
|
|
158
|
+
*
|
|
102
159
|
* @returns Array of orders and corresponding order IDs
|
|
103
160
|
*/
|
|
104
161
|
pollLimitOrders(symbol, numElements, startAfter) {
|
|
@@ -81,10 +81,6 @@ class PerpetualDataHandler {
|
|
|
81
81
|
let mgnRate = [];
|
|
82
82
|
for (let k = 0; k < perpetualIDs.length; k++) {
|
|
83
83
|
let perp = yield proxyContract.getPerpetual(perpetualIDs[k]);
|
|
84
|
-
if (perp.state == nodeSDKTypes_1.PerpetualStateINVALID || perp.state == nodeSDKTypes_1.PerpetualStateINITIALIZING) {
|
|
85
|
-
// only active perpetuals
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
84
|
let base = (0, utils_1.fromBytes4HexString)(perp.S2BaseCCY);
|
|
89
85
|
let quote = (0, utils_1.fromBytes4HexString)(perp.S2QuoteCCY);
|
|
90
86
|
let base3 = (0, utils_1.fromBytes4HexString)(perp.S3BaseCCY);
|
package/package.json
CHANGED
package/src/accountTrade.ts
CHANGED
|
@@ -67,12 +67,28 @@ export default class AccountTrade extends WriteAccessHandler {
|
|
|
67
67
|
* @param {Order} order Order structure. As a minimum the structure needs to
|
|
68
68
|
* specify symbol, side, type and quantity.
|
|
69
69
|
* @example
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
70
|
+
* import { AccountTrade, PerpetualDataHandler, Order } from '@d8x/perpetuals-sdk';
|
|
71
|
+
* async function main() {
|
|
72
|
+
* console.log(AccountTrade);
|
|
73
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
74
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
75
|
+
* const pk: string = <string>process.env.PK;
|
|
76
|
+
* let accTrade = new AccountTrade(config, pk);
|
|
77
|
+
* await accTrade.createProxyInstance();
|
|
78
|
+
* // set allowance
|
|
79
|
+
* await accTrade.setAllowance("MATIC");
|
|
80
|
+
* // set an order
|
|
81
|
+
* let order: Order = {
|
|
82
|
+
* symbol: "MATIC-USD-MATIC",
|
|
83
|
+
* side: "BUY",
|
|
84
|
+
* type: "MARKET",
|
|
85
|
+
* quantity: 100,
|
|
86
|
+
* timestamp: Date.now()
|
|
87
|
+
* };
|
|
88
|
+
* let orderTransaction = await accTrade.order(order);
|
|
89
|
+
* console.log(orderTransaction);
|
|
90
|
+
* }
|
|
91
|
+
* main();
|
|
76
92
|
*
|
|
77
93
|
* @returns {ContractTransaction} Contract Transaction (containing events).
|
|
78
94
|
*/
|
package/src/brokerTool.ts
CHANGED
|
@@ -21,10 +21,10 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
21
21
|
* // load configuration for testnet
|
|
22
22
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
23
23
|
* // BrokerTool (authentication required, PK is an environment variable with a private key)
|
|
24
|
-
* const pk: string = <string>process.env.PK;
|
|
25
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
24
|
+
* const pk: string = <string>process.env.PK;
|
|
25
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
26
26
|
* // Create a proxy instance to access the blockchain
|
|
27
|
-
* await brokTool.createProxyInstance();
|
|
27
|
+
* await brokTool.createProxyInstance();
|
|
28
28
|
* }
|
|
29
29
|
* main();
|
|
30
30
|
*
|
|
@@ -46,24 +46,28 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
46
46
|
* console.log(BrokerTool);
|
|
47
47
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
48
48
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
49
|
-
* const pk: string = <string>process.env.PK;
|
|
50
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
49
|
+
* const pk: string = <string>process.env.PK;
|
|
50
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
51
51
|
* await brokTool.createProxyInstance();
|
|
52
52
|
* // get broker induced fee
|
|
53
53
|
* let brokFee = await brokTool.getBrokerInducedFee("MATIC");
|
|
54
|
-
* console.log(brokFee);
|
|
54
|
+
* console.log(brokFee);
|
|
55
55
|
* }
|
|
56
56
|
* main();
|
|
57
57
|
*
|
|
58
58
|
* @returns {number} Exchange fee for this broker, in decimals (i.e. 0.1% is 0.001)
|
|
59
59
|
*/
|
|
60
|
-
public async getBrokerInducedFee(poolSymbolName: string): Promise<number> {
|
|
60
|
+
public async getBrokerInducedFee(poolSymbolName: string): Promise<number | undefined> {
|
|
61
61
|
if (this.proxyContract == null || this.signer == null) {
|
|
62
62
|
throw Error("no proxy contract or wallet initialized. Use createProxyInstance().");
|
|
63
63
|
}
|
|
64
64
|
let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
|
|
65
65
|
let feeTbps = await this.proxyContract.getBrokerInducedFee(poolId, this.traderAddr);
|
|
66
|
-
|
|
66
|
+
let fee = feeTbps / 100_000;
|
|
67
|
+
if (fee == 0.65535) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
return fee;
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
/**
|
|
@@ -78,12 +82,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
78
82
|
* console.log(BrokerTool);
|
|
79
83
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
80
84
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
81
|
-
* const pk: string = <string>process.env.PK;
|
|
82
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
85
|
+
* const pk: string = <string>process.env.PK;
|
|
86
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
83
87
|
* await brokTool.createProxyInstance();
|
|
84
88
|
* // get broker fee induced by lots
|
|
85
89
|
* let brokFeeLots = await brokTool.getFeeForBrokerDesignation("MATIC");
|
|
86
|
-
* console.log(brokFeeLots);
|
|
90
|
+
* console.log(brokFeeLots);
|
|
87
91
|
* }
|
|
88
92
|
* main();
|
|
89
93
|
*
|
|
@@ -115,12 +119,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
115
119
|
* console.log(BrokerTool);
|
|
116
120
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
117
121
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
118
|
-
* const pk: string = <string>process.env.PK;
|
|
119
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
122
|
+
* const pk: string = <string>process.env.PK;
|
|
123
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
120
124
|
* await brokTool.createProxyInstance();
|
|
121
125
|
* // get broker fee induced by volume
|
|
122
126
|
* let brokFeeVol = await brokTool.getFeeForBrokerVolume("MATIC");
|
|
123
|
-
* console.log(brokFeeVol);
|
|
127
|
+
* console.log(brokFeeVol);
|
|
124
128
|
* }
|
|
125
129
|
* main();
|
|
126
130
|
*
|
|
@@ -146,12 +150,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
146
150
|
* console.log(BrokerTool);
|
|
147
151
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
148
152
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
149
|
-
* const pk: string = <string>process.env.PK;
|
|
150
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
153
|
+
* const pk: string = <string>process.env.PK;
|
|
154
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
151
155
|
* await brokTool.createProxyInstance();
|
|
152
156
|
* // get broker fee induced by staked d8x
|
|
153
157
|
* let brokFeeStake = await brokTool.getFeeForBrokerStake("0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B");
|
|
154
|
-
* console.log(brokFeeStake);
|
|
158
|
+
* console.log(brokFeeStake);
|
|
155
159
|
* }
|
|
156
160
|
* main();
|
|
157
161
|
*
|
|
@@ -183,19 +187,19 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
183
187
|
* console.log(BrokerTool);
|
|
184
188
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
185
189
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
186
|
-
* const pk: string = <string>process.env.PK;
|
|
187
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
190
|
+
* const pk: string = <string>process.env.PK;
|
|
191
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
188
192
|
* await brokTool.createProxyInstance();
|
|
189
193
|
* // get exchange fee based on an order and trader
|
|
190
|
-
* let order = {symbol: "ETH-USD-MATIC",
|
|
191
|
-
* side: "BUY",
|
|
192
|
-
* type: "MARKET",
|
|
193
|
-
* quantity: 1,
|
|
194
|
+
* let order = {symbol: "ETH-USD-MATIC",
|
|
195
|
+
* side: "BUY",
|
|
196
|
+
* type: "MARKET",
|
|
197
|
+
* quantity: 1,
|
|
194
198
|
* timestamp: Date.now()
|
|
195
|
-
* };
|
|
199
|
+
* };
|
|
196
200
|
* let exchFee = await brokTool.determineExchangeFee(order,
|
|
197
|
-
* "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B");
|
|
198
|
-
* console.log(exchFee);
|
|
201
|
+
* "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B");
|
|
202
|
+
* console.log(exchFee);
|
|
199
203
|
* }
|
|
200
204
|
* main();
|
|
201
205
|
*
|
|
@@ -223,12 +227,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
223
227
|
* console.log(BrokerTool);
|
|
224
228
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
225
229
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
226
|
-
* const pk: string = <string>process.env.PK;
|
|
227
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
230
|
+
* const pk: string = <string>process.env.PK;
|
|
231
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
228
232
|
* await brokTool.createProxyInstance();
|
|
229
233
|
* // get 30 day volume for broker
|
|
230
234
|
* let brokVolume = await brokTool.getCurrentBrokerVolume("MATIC");
|
|
231
|
-
* console.log(brokVolume);
|
|
235
|
+
* console.log(brokVolume);
|
|
232
236
|
* }
|
|
233
237
|
* main();
|
|
234
238
|
*
|
|
@@ -255,12 +259,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
255
259
|
* console.log(BrokerTool);
|
|
256
260
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
257
261
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
258
|
-
* const pk: string = <string>process.env.PK;
|
|
259
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
262
|
+
* const pk: string = <string>process.env.PK;
|
|
263
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
260
264
|
* await brokTool.createProxyInstance();
|
|
261
265
|
* // get lot price
|
|
262
266
|
* let brokLotSize = await brokTool.getLotSize("MATIC");
|
|
263
|
-
* console.log(brokLotSize);
|
|
267
|
+
* console.log(brokLotSize);
|
|
264
268
|
* }
|
|
265
269
|
* main();
|
|
266
270
|
*
|
|
@@ -286,12 +290,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
286
290
|
* console.log(BrokerTool);
|
|
287
291
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
288
292
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
289
|
-
* const pk: string = <string>process.env.PK;
|
|
290
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
293
|
+
* const pk: string = <string>process.env.PK;
|
|
294
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
291
295
|
* await brokTool.createProxyInstance();
|
|
292
296
|
* // get broker designation
|
|
293
297
|
* let brokDesignation = await brokTool.getBrokerDesignation("MATIC");
|
|
294
|
-
* console.log(brokDesignation);
|
|
298
|
+
* console.log(brokDesignation);
|
|
295
299
|
* }
|
|
296
300
|
* main();
|
|
297
301
|
*
|
|
@@ -316,12 +320,12 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
316
320
|
* console.log(BrokerTool);
|
|
317
321
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
318
322
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
319
|
-
* const pk: string = <string>process.env.PK;
|
|
320
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
323
|
+
* const pk: string = <string>process.env.PK;
|
|
324
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
321
325
|
* await brokTool.createProxyInstance();
|
|
322
326
|
* // deposit to default fund
|
|
323
327
|
* let respDeposit = await brokTool.brokerDepositToDefaultFund("MATIC",1);
|
|
324
|
-
* console.log(respDeposit);
|
|
328
|
+
* console.log(respDeposit);
|
|
325
329
|
* }
|
|
326
330
|
* main();
|
|
327
331
|
*
|
|
@@ -352,19 +356,19 @@ export default class BrokerTool extends WriteAccessHandler {
|
|
|
352
356
|
* console.log(BrokerTool);
|
|
353
357
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
354
358
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
355
|
-
* const pk: string = <string>process.env.PK;
|
|
356
|
-
* let brokTool = new BrokerTool(config, pk);
|
|
359
|
+
* const pk: string = <string>process.env.PK;
|
|
360
|
+
* let brokTool = new BrokerTool(config, pk);
|
|
357
361
|
* await brokTool.createProxyInstance();
|
|
358
362
|
* // sign order
|
|
359
|
-
* let order = {symbol: "ETH-USD-MATIC",
|
|
360
|
-
* side: "BUY",
|
|
361
|
-
* type: "MARKET",
|
|
362
|
-
* quantity: 1,
|
|
363
|
+
* let order = {symbol: "ETH-USD-MATIC",
|
|
364
|
+
* side: "BUY",
|
|
365
|
+
* type: "MARKET",
|
|
366
|
+
* quantity: 1,
|
|
363
367
|
* timestamp: Date.now()
|
|
364
|
-
* };
|
|
365
|
-
* let signedOrder = await brokTool.signOrder(order, "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
|
|
366
|
-
* 0.0001, 1669723339);
|
|
367
|
-
* console.log(signedOrder);
|
|
368
|
+
* };
|
|
369
|
+
* let signedOrder = await brokTool.signOrder(order, "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
|
|
370
|
+
* 0.0001, 1669723339);
|
|
371
|
+
* console.log(signedOrder);
|
|
368
372
|
* }
|
|
369
373
|
* main();
|
|
370
374
|
*
|
package/src/liquidatorTool.ts
CHANGED
|
@@ -18,10 +18,10 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
18
18
|
* // load configuration for testnet
|
|
19
19
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
20
20
|
* // LiquidatorTool (authentication required, PK is an environment variable with a private key)
|
|
21
|
-
* const pk: string = <string>process.env.PK;
|
|
22
|
-
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
21
|
+
* const pk: string = <string>process.env.PK;
|
|
22
|
+
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
23
23
|
* // Create a proxy instance to access the blockchain
|
|
24
|
-
* await lqudtrTool.createProxyInstance();
|
|
24
|
+
* await lqudtrTool.createProxyInstance();
|
|
25
25
|
* }
|
|
26
26
|
* main();
|
|
27
27
|
*
|
|
@@ -43,13 +43,13 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
43
43
|
* console.log(LiquidatorTool);
|
|
44
44
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
45
45
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
46
|
-
* const pk: string = <string>process.env.PK;
|
|
47
|
-
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
46
|
+
* const pk: string = <string>process.env.PK;
|
|
47
|
+
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
48
48
|
* await lqudtrTool.createProxyInstance();
|
|
49
49
|
* // liquidate trader
|
|
50
|
-
* let liqAmount = await lqudtrTool.liquidateTrader("ETH-USD-MATIC",
|
|
50
|
+
* let liqAmount = await lqudtrTool.liquidateTrader("ETH-USD-MATIC",
|
|
51
51
|
* "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B");
|
|
52
|
-
* console.log(liqAmount);
|
|
52
|
+
* console.log(liqAmount);
|
|
53
53
|
* }
|
|
54
54
|
* main();
|
|
55
55
|
*
|
|
@@ -79,13 +79,13 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
79
79
|
* console.log(LiquidatorTool);
|
|
80
80
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
81
81
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
82
|
-
* const pk: string = <string>process.env.PK;
|
|
83
|
-
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
82
|
+
* const pk: string = <string>process.env.PK;
|
|
83
|
+
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
84
84
|
* await lqudtrTool.createProxyInstance();
|
|
85
85
|
* // check if trader can be liquidated
|
|
86
|
-
* let safe = await lqudtrTool.isMaintenanceMarginSafe("ETH-USD-MATIC",
|
|
86
|
+
* let safe = await lqudtrTool.isMaintenanceMarginSafe("ETH-USD-MATIC",
|
|
87
87
|
* "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B");
|
|
88
|
-
* console.log(safe);
|
|
88
|
+
* console.log(safe);
|
|
89
89
|
* }
|
|
90
90
|
* main();
|
|
91
91
|
*
|
|
@@ -112,6 +112,9 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
112
112
|
let fAmount = await this.proxyContract!.liquidateByAMM(perpetualId, liquidatorAddr, traderAddr, {
|
|
113
113
|
gasLimit: gasLimit,
|
|
114
114
|
});
|
|
115
|
+
if (fAmount == undefined) {
|
|
116
|
+
return fAmount;
|
|
117
|
+
}
|
|
115
118
|
return ABK64x64ToFloat(fAmount);
|
|
116
119
|
}
|
|
117
120
|
|
|
@@ -124,12 +127,12 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
124
127
|
* console.log(LiquidatorTool);
|
|
125
128
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
126
129
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
127
|
-
* const pk: string = <string>process.env.PK;
|
|
128
|
-
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
130
|
+
* const pk: string = <string>process.env.PK;
|
|
131
|
+
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
129
132
|
* await lqudtrTool.createProxyInstance();
|
|
130
133
|
* // get number of active accounts
|
|
131
134
|
* let accounts = await lqudtrTool.countActivePerpAccounts("ETH-USD-MATIC");
|
|
132
|
-
* console.log(accounts);
|
|
135
|
+
* console.log(accounts);
|
|
133
136
|
* }
|
|
134
137
|
* main();
|
|
135
138
|
*
|
|
@@ -140,7 +143,8 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
140
143
|
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
141
144
|
}
|
|
142
145
|
let perpID = LiquidatorTool.symbolToPerpetualId(symbol, this.symbolToPerpStaticInfo);
|
|
143
|
-
|
|
146
|
+
let numAccounts = await this.proxyContract.countActivePerpAccounts(perpID);
|
|
147
|
+
return Number(numAccounts);
|
|
144
148
|
}
|
|
145
149
|
|
|
146
150
|
/**
|
|
@@ -154,12 +158,12 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
154
158
|
* console.log(LiquidatorTool);
|
|
155
159
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
156
160
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
157
|
-
* const pk: string = <string>process.env.PK;
|
|
158
|
-
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
161
|
+
* const pk: string = <string>process.env.PK;
|
|
162
|
+
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
159
163
|
* await lqudtrTool.createProxyInstance();
|
|
160
164
|
* // get all active accounts in chunks
|
|
161
165
|
* let accounts = await lqudtrTool.getActiveAccountsByChunks("ETH-USD-MATIC", 0, 4);
|
|
162
|
-
* console.log(accounts);
|
|
166
|
+
* console.log(accounts);
|
|
163
167
|
* }
|
|
164
168
|
* main();
|
|
165
169
|
*
|
|
@@ -182,12 +186,12 @@ export default class LiquidatorTool extends WriteAccessHandler {
|
|
|
182
186
|
* console.log(LiquidatorTool);
|
|
183
187
|
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
184
188
|
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
185
|
-
* const pk: string = <string>process.env.PK;
|
|
186
|
-
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
189
|
+
* const pk: string = <string>process.env.PK;
|
|
190
|
+
* let lqudtrTool = new LiquidatorTool(config, pk);
|
|
187
191
|
* await lqudtrTool.createProxyInstance();
|
|
188
192
|
* // get all active accounts
|
|
189
193
|
* let accounts = await lqudtrTool.getAllActiveAccounts("ETH-USD-MATIC");
|
|
190
|
-
* console.log(accounts);
|
|
194
|
+
* console.log(accounts);
|
|
191
195
|
* }
|
|
192
196
|
* main();
|
|
193
197
|
*
|
package/src/marketData.ts
CHANGED
|
@@ -304,7 +304,8 @@ export default class MarketData extends PerpetualDataHandler {
|
|
|
304
304
|
|
|
305
305
|
public static async _exchangeInfo(_proxyContract: ethers.Contract): Promise<ExchangeInfo> {
|
|
306
306
|
let nestedPerpetualIDs = await PerpetualDataHandler.getNestedPerpetualIds(_proxyContract);
|
|
307
|
-
let
|
|
307
|
+
let factory = await _proxyContract.getOracleFactory();
|
|
308
|
+
let info: ExchangeInfo = { pools: [], oracleFactoryAddr: factory };
|
|
308
309
|
const numPools = nestedPerpetualIDs.length;
|
|
309
310
|
for (var j = 0; j < numPools; j++) {
|
|
310
311
|
let perpetualIDs = nestedPerpetualIDs[j];
|
package/src/nodeSDKTypes.ts
CHANGED
|
@@ -9,11 +9,6 @@ export const COLLATERAL_CURRENCY_QUOTE = 0;
|
|
|
9
9
|
export const COLLATERAL_CURRENCY_BASE = 1;
|
|
10
10
|
export const COLLATERAL_CURRENCY_QUANTO = 2;
|
|
11
11
|
export const PERP_STATE_STR = ["INVALID", "INITIALIZING", "NORMAL", "EMERGENCY", "CLEARED"];
|
|
12
|
-
export const PerpetualStateINVALID = 0;
|
|
13
|
-
export const PerpetualStateINITIALIZING = 1;
|
|
14
|
-
export const PerpetualStateNORMAL = 2;
|
|
15
|
-
export const PerpetualStateEMERGENCY = 3;
|
|
16
|
-
export const PerpetualStateCLEARED = 4;
|
|
17
12
|
export const ZERO_ADDRESS = constants.AddressZero;
|
|
18
13
|
export const ZERO_ORDER_ID = constants.HashZero;
|
|
19
14
|
|
|
@@ -87,6 +82,7 @@ export interface PerpetualStaticInfo {
|
|
|
87
82
|
|
|
88
83
|
export interface ExchangeInfo {
|
|
89
84
|
pools: PoolState[];
|
|
85
|
+
oracleFactoryAddr: string;
|
|
90
86
|
}
|
|
91
87
|
export interface PoolState {
|
|
92
88
|
isRunning: boolean;
|
package/src/orderReferrerTool.ts
CHANGED
|
@@ -12,7 +12,18 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
12
12
|
* Constructor.
|
|
13
13
|
* @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.readSDKConfig.
|
|
14
14
|
* @example
|
|
15
|
-
*
|
|
15
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
16
|
+
* async function main() {
|
|
17
|
+
* console.log(OrderReferrerTool);
|
|
18
|
+
* // load configuration for testnet
|
|
19
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
20
|
+
* // OrderReferrerTool (authentication required, PK is an environment variable with a private key)
|
|
21
|
+
* const pk: string = <string>process.env.PK;
|
|
22
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
23
|
+
* // Create a proxy instance to access the blockchain
|
|
24
|
+
* await orderTool.createProxyInstance();
|
|
25
|
+
* }
|
|
26
|
+
* main();
|
|
16
27
|
*
|
|
17
28
|
* @param {string} privateKey Private key of the wallet that executes the conditional orders.
|
|
18
29
|
*/
|
|
@@ -46,6 +57,21 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
46
57
|
/**
|
|
47
58
|
* All the orders in the order book for a given symbol that are currently open.
|
|
48
59
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
60
|
+
* @example
|
|
61
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
62
|
+
* async function main() {
|
|
63
|
+
* console.log(OrderReferrerTool);
|
|
64
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
65
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
66
|
+
* const pk: string = <string>process.env.PK;
|
|
67
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
68
|
+
* await orderTool.createProxyInstance();
|
|
69
|
+
* // get all open orders
|
|
70
|
+
* let openOrders = await orderTool.getAllOpenOrders("ETH-USD-MATIC");
|
|
71
|
+
* console.log(openOrders);
|
|
72
|
+
* }
|
|
73
|
+
* main();
|
|
74
|
+
*
|
|
49
75
|
* @returns Array with all open orders and their IDs.
|
|
50
76
|
*/
|
|
51
77
|
public async getAllOpenOrders(symbol: string): Promise<[Order[], string[]]> {
|
|
@@ -56,6 +82,21 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
56
82
|
/**
|
|
57
83
|
* Total number of limit orders for this symbol, excluding those that have been cancelled/removed.
|
|
58
84
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
85
|
+
* @example
|
|
86
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
87
|
+
* async function main() {
|
|
88
|
+
* console.log(OrderReferrerTool);
|
|
89
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
90
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
91
|
+
* const pk: string = <string>process.env.PK;
|
|
92
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
93
|
+
* await orderTool.createProxyInstance();
|
|
94
|
+
* // get all open orders
|
|
95
|
+
* let numberOfOrders = await orderTool.numberOfOpenOrders("ETH-USD-MATIC");
|
|
96
|
+
* console.log(numberOfOrders);
|
|
97
|
+
* }
|
|
98
|
+
* main();
|
|
99
|
+
*
|
|
59
100
|
* @returns {number} Number of open orders.
|
|
60
101
|
*/
|
|
61
102
|
public async numberOfOpenOrders(symbol: string): Promise<number> {
|
|
@@ -63,7 +104,8 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
63
104
|
throw Error("no proxy contract initialized. Use createProxyInstance().");
|
|
64
105
|
}
|
|
65
106
|
const orderBookSC = this.getOrderBookContract(symbol);
|
|
66
|
-
|
|
107
|
+
let numOrders = await orderBookSC.numberOfOrderBookDigests();
|
|
108
|
+
return Number(numOrders);
|
|
67
109
|
}
|
|
68
110
|
|
|
69
111
|
/**
|
|
@@ -88,6 +130,21 @@ export default class OrderReferrerTool extends WriteAccessHandler {
|
|
|
88
130
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
89
131
|
* @param {number} numElements Maximum number of orders to poll.
|
|
90
132
|
* @param {string=} startAfter Optional order ID from where to start polling. Defaults to the first order.
|
|
133
|
+
* @example
|
|
134
|
+
* import { OrderReferrerTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
|
|
135
|
+
* async function main() {
|
|
136
|
+
* console.log(OrderReferrerTool);
|
|
137
|
+
* // Setup (authentication required, PK is an environment variable with a private key)
|
|
138
|
+
* const config = PerpetualDataHandler.readSDKConfig("testnet");
|
|
139
|
+
* const pk: string = <string>process.env.PK;
|
|
140
|
+
* let orderTool = new OrderReferrerTool(config, pk);
|
|
141
|
+
* await orderTool.createProxyInstance();
|
|
142
|
+
* // get all open orders
|
|
143
|
+
* let activeOrders = await orderTool.pollLimitOrders("ETH-USD-MATIC", 2);
|
|
144
|
+
* console.log(activeOrders);
|
|
145
|
+
* }
|
|
146
|
+
* main();
|
|
147
|
+
*
|
|
91
148
|
* @returns Array of orders and corresponding order IDs
|
|
92
149
|
*/
|
|
93
150
|
public async pollLimitOrders(symbol: string, numElements: number, startAfter?: string): Promise<[Order[], string[]]> {
|
|
@@ -29,8 +29,6 @@ import {
|
|
|
29
29
|
DEFAULT_CONFIG_TESTNET_NAME,
|
|
30
30
|
DEFAULT_CONFIG_TESTNET,
|
|
31
31
|
ONE_64x64,
|
|
32
|
-
PerpetualStateINITIALIZING,
|
|
33
|
-
PerpetualStateINVALID,
|
|
34
32
|
} from "./nodeSDKTypes";
|
|
35
33
|
import { fromBytes4HexString, to4Chars, combineFlags, containsFlag } from "./utils";
|
|
36
34
|
import {
|
|
@@ -132,10 +130,6 @@ export default class PerpetualDataHandler {
|
|
|
132
130
|
|
|
133
131
|
for (let k = 0; k < perpetualIDs.length; k++) {
|
|
134
132
|
let perp = await proxyContract.getPerpetual(perpetualIDs[k]);
|
|
135
|
-
if (perp.state == PerpetualStateINVALID || perp.state == PerpetualStateINITIALIZING) {
|
|
136
|
-
// only active perpetuals
|
|
137
|
-
continue;
|
|
138
|
-
}
|
|
139
133
|
let base = fromBytes4HexString(perp.S2BaseCCY);
|
|
140
134
|
let quote = fromBytes4HexString(perp.S2QuoteCCY);
|
|
141
135
|
let base3 = fromBytes4HexString(perp.S3BaseCCY);
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import WriteAccessHandler from "./writeAccessHandler";
|
|
2
|
-
import { NodeSDKConfig } from "./nodeSDKTypes";
|
|
3
|
-
/**
|
|
4
|
-
* LiquidatorTool
|
|
5
|
-
* Methods to liquidate traders
|
|
6
|
-
*/
|
|
7
|
-
export default class LiquidatorTool extends WriteAccessHandler {
|
|
8
|
-
/**
|
|
9
|
-
* Constructor
|
|
10
|
-
* @param config configuration
|
|
11
|
-
* @param privateKey private key of account that trades
|
|
12
|
-
*/
|
|
13
|
-
constructor(config: NodeSDKConfig, privateKey: string);
|
|
14
|
-
}
|
package/dist/liquiditatorTool.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const writeAccessHandler_1 = __importDefault(require("./writeAccessHandler"));
|
|
7
|
-
/**
|
|
8
|
-
* LiquidatorTool
|
|
9
|
-
* Methods to liquidate traders
|
|
10
|
-
*/
|
|
11
|
-
class LiquidatorTool extends writeAccessHandler_1.default {
|
|
12
|
-
/**
|
|
13
|
-
* Constructor
|
|
14
|
-
* @param config configuration
|
|
15
|
-
* @param privateKey private key of account that trades
|
|
16
|
-
*/
|
|
17
|
-
constructor(config, privateKey) {
|
|
18
|
-
super(config, privateKey);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
exports.default = LiquidatorTool;
|