@d8x/perpetuals-sdk 1.3.6 → 2.0.0-alpha
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/accountTrade.d.ts +9 -9
- package/dist/cjs/accountTrade.js +19 -17
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.d.ts +11 -12
- package/dist/cjs/brokerTool.js +7 -8
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/constants.d.ts +11 -12
- package/dist/cjs/constants.js +12 -13
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts/ERC20.d.ts +146 -171
- package/dist/cjs/contracts/IPerpetualManager.d.ts +2534 -2225
- package/dist/cjs/contracts/IPyth.d.ts +181 -184
- package/dist/cjs/contracts/LimitOrderBook.d.ts +373 -401
- package/dist/cjs/contracts/LimitOrderBookBeacon.d.ts +53 -104
- package/dist/cjs/contracts/LimitOrderBookFactory.d.ts +129 -185
- package/dist/cjs/contracts/MockTokenSwap.d.ts +109 -169
- package/dist/cjs/contracts/Multicall3.d.ts +147 -211
- package/dist/cjs/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
- package/dist/cjs/contracts/OracleFactory.d.ts +258 -238
- package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +1099 -891
- package/dist/cjs/contracts/RedStoneAbi.d.ts +369 -488
- package/dist/cjs/contracts/ShareToken.d.ts +232 -285
- package/dist/cjs/contracts/common.d.ts +40 -11
- package/dist/cjs/contracts/factories/ERC20__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/ERC20__factory.js +3 -3
- package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +3 -3
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPyth__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/IPyth__factory.js +3 -3
- package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +3 -3
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/Multicall3__factory.d.ts +11 -9
- package/dist/cjs/contracts/factories/Multicall3__factory.js +7 -10
- package/dist/cjs/contracts/factories/Multicall3__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js +3 -3
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/OracleFactory__factory.js +3 -3
- package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +3 -3
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.js +3 -3
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/ShareToken__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/ShareToken__factory.js +3 -3
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +16 -16
- package/dist/cjs/d8XMath.js +48 -49
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.d.ts +8 -8
- package/dist/cjs/liquidatorTool.js +5 -7
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.d.ts +4 -5
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +27 -28
- package/dist/cjs/marketData.js +65 -69
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +35 -37
- package/dist/cjs/onChainPxFeed.d.ts +2 -2
- package/dist/cjs/onChainPxFeed.js +3 -3
- package/dist/cjs/onChainPxFeed.js.map +1 -1
- package/dist/cjs/onChainPxFeedAngle.d.ts +2 -2
- package/dist/cjs/onChainPxFeedAngle.js +4 -5
- package/dist/cjs/onChainPxFeedAngle.js.map +1 -1
- package/dist/cjs/onChainPxFeedRedStone.js +2 -2
- package/dist/cjs/onChainPxFeedRedStone.js.map +1 -1
- package/dist/cjs/orderExecutorTool.d.ts +7 -9
- package/dist/cjs/orderExecutorTool.js +54 -63
- package/dist/cjs/orderExecutorTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +38 -35
- package/dist/cjs/perpetualDataHandler.js +173 -167
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.d.ts +4 -5
- package/dist/cjs/perpetualEventHandler.js +2 -2
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/priceFeeds.js +2 -3
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/referralCodeSigner.d.ts +1 -1
- package/dist/cjs/referralCodeSigner.js +12 -16
- package/dist/cjs/referralCodeSigner.js.map +1 -1
- package/dist/cjs/traderDigests.d.ts +2 -1
- package/dist/cjs/traderDigests.js +9 -11
- package/dist/cjs/traderDigests.js.map +1 -1
- package/dist/cjs/traderInterface.d.ts +8 -9
- package/dist/cjs/traderInterface.js +26 -23
- package/dist/cjs/traderInterface.js.map +1 -1
- package/dist/cjs/utils.d.ts +2 -3
- package/dist/cjs/utils.js +1 -2
- package/dist/cjs/utils.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/cjs/writeAccessHandler.d.ts +7 -9
- package/dist/cjs/writeAccessHandler.js +13 -16
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/accountTrade.d.ts +9 -9
- package/dist/esm/accountTrade.js +19 -17
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.d.ts +11 -12
- package/dist/esm/brokerTool.js +2 -3
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/constants.d.ts +11 -12
- package/dist/esm/constants.js +12 -13
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/contracts/ERC20.d.ts +146 -171
- package/dist/esm/contracts/IPerpetualManager.d.ts +2534 -2225
- package/dist/esm/contracts/IPyth.d.ts +181 -184
- package/dist/esm/contracts/LimitOrderBook.d.ts +373 -401
- package/dist/esm/contracts/LimitOrderBookBeacon.d.ts +53 -104
- package/dist/esm/contracts/LimitOrderBookFactory.d.ts +129 -185
- package/dist/esm/contracts/MockTokenSwap.d.ts +109 -169
- package/dist/esm/contracts/Multicall3.d.ts +147 -211
- package/dist/esm/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
- package/dist/esm/contracts/OracleFactory.d.ts +258 -238
- package/dist/esm/contracts/PerpetualManagerProxy.d.ts +1099 -891
- package/dist/esm/contracts/RedStoneAbi.d.ts +369 -488
- package/dist/esm/contracts/ShareToken.d.ts +232 -285
- package/dist/esm/contracts/common.d.ts +40 -11
- package/dist/esm/contracts/factories/ERC20__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/ERC20__factory.js +4 -4
- package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +4 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPyth__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/IPyth__factory.js +4 -4
- package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js +4 -4
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/esm/contracts/factories/Multicall3__factory.d.ts +11 -9
- package/dist/esm/contracts/factories/Multicall3__factory.js +8 -11
- package/dist/esm/contracts/factories/Multicall3__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js +4 -4
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/OracleFactory__factory.js +4 -4
- package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +4 -4
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/esm/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/RedStoneAbi__factory.js +4 -4
- package/dist/esm/contracts/factories/RedStoneAbi__factory.js.map +1 -1
- package/dist/esm/contracts/factories/ShareToken__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/ShareToken__factory.js +4 -4
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +16 -16
- package/dist/esm/d8XMath.js +48 -49
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.d.ts +8 -8
- package/dist/esm/liquidatorTool.js +5 -7
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.d.ts +4 -5
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +27 -28
- package/dist/esm/marketData.js +55 -59
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +35 -37
- package/dist/esm/onChainPxFeed.d.ts +2 -2
- package/dist/esm/onChainPxFeed.js +3 -3
- package/dist/esm/onChainPxFeed.js.map +1 -1
- package/dist/esm/onChainPxFeedAngle.d.ts +2 -2
- package/dist/esm/onChainPxFeedAngle.js +2 -3
- package/dist/esm/onChainPxFeedAngle.js.map +1 -1
- package/dist/esm/onChainPxFeedRedStone.js +1 -1
- package/dist/esm/onChainPxFeedRedStone.js.map +1 -1
- package/dist/esm/orderExecutorTool.d.ts +7 -9
- package/dist/esm/orderExecutorTool.js +40 -49
- package/dist/esm/orderExecutorTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +38 -35
- package/dist/esm/perpetualDataHandler.js +114 -108
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.d.ts +4 -5
- package/dist/esm/perpetualEventHandler.js +2 -2
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/priceFeeds.js +2 -3
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/referralCodeSigner.d.ts +1 -1
- package/dist/esm/referralCodeSigner.js +6 -10
- package/dist/esm/referralCodeSigner.js.map +1 -1
- package/dist/esm/traderDigests.d.ts +2 -1
- package/dist/esm/traderDigests.js +2 -4
- package/dist/esm/traderDigests.js.map +1 -1
- package/dist/esm/traderInterface.d.ts +8 -9
- package/dist/esm/traderInterface.js +26 -23
- package/dist/esm/traderInterface.js.map +1 -1
- package/dist/esm/utils.d.ts +2 -3
- package/dist/esm/utils.js +1 -2
- package/dist/esm/utils.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/dist/esm/writeAccessHandler.d.ts +7 -9
- package/dist/esm/writeAccessHandler.js +5 -8
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +7 -17
- package/src/accountTrade.ts +32 -34
- package/src/brokerTool.ts +17 -20
- package/src/constants.ts +12 -13
- package/src/contracts/ERC20.ts +236 -350
- package/src/contracts/IPerpetualManager.ts +3359 -5050
- package/src/contracts/IPyth.ts +272 -409
- package/src/contracts/LimitOrderBook.ts +503 -779
- package/src/contracts/LimitOrderBookBeacon.ts +123 -171
- package/src/contracts/LimitOrderBookFactory.ts +263 -332
- package/src/contracts/MockTokenSwap.ts +237 -275
- package/src/contracts/Multicall3.ts +208 -374
- package/src/contracts/OnDemandOracleUpgradeable.ts +569 -782
- package/src/contracts/OracleFactory.ts +410 -538
- package/src/contracts/PerpetualManagerProxy.ts +1898 -1426
- package/src/contracts/RedStoneAbi.ts +486 -986
- package/src/contracts/ShareToken.ts +376 -557
- package/src/contracts/common.ts +108 -21
- package/src/contracts/factories/ERC20__factory.ts +4 -5
- package/src/contracts/factories/IPerpetualManager__factory.ts +4 -5
- package/src/contracts/factories/IPyth__factory.ts +4 -5
- package/src/contracts/factories/LimitOrderBookBeacon__factory.ts +5 -6
- package/src/contracts/factories/LimitOrderBookFactory__factory.ts +5 -6
- package/src/contracts/factories/LimitOrderBook__factory.ts +4 -5
- package/src/contracts/factories/MockTokenSwap__factory.ts +4 -5
- package/src/contracts/factories/Multicall3__factory.ts +21 -19
- package/src/contracts/factories/OnDemandOracleUpgradeable__factory.ts +5 -6
- package/src/contracts/factories/OracleFactory__factory.ts +4 -5
- package/src/contracts/factories/PerpetualManagerProxy__factory.ts +5 -6
- package/src/contracts/factories/RedStoneAbi__factory.ts +4 -8
- package/src/contracts/factories/ShareToken__factory.ts +4 -8
- package/src/d8XMath.ts +57 -57
- package/src/liquidatorTool.ts +12 -15
- package/src/liquidityProviderTool.ts +7 -5
- package/src/marketData.ts +110 -121
- package/src/nodeSDKTypes.ts +51 -38
- package/src/onChainPxFeed.ts +4 -4
- package/src/onChainPxFeedAngle.ts +5 -7
- package/src/onChainPxFeedRedStone.ts +1 -3
- package/src/orderExecutorTool.ts +102 -109
- package/src/perpetualDataHandler.ts +181 -167
- package/src/perpetualEventHandler.ts +16 -17
- package/src/priceFeeds.ts +2 -3
- package/src/referralCodeSigner.ts +6 -10
- package/src/traderDigests.ts +8 -5
- package/src/traderInterface.ts +45 -31
- package/src/utils.ts +3 -4
- package/src/version.ts +1 -1
- package/src/writeAccessHandler.ts +26 -17
|
@@ -3,14 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const constants_1 = require("@ethersproject/constants");
|
|
10
|
-
const contracts_1 = require("@ethersproject/contracts");
|
|
11
|
-
const providers_1 = require("@ethersproject/providers");
|
|
12
|
-
const constants_2 = require("./constants");
|
|
13
|
-
const contracts_2 = require("./contracts");
|
|
6
|
+
const ethers_1 = require("ethers");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const contracts_1 = require("./contracts");
|
|
14
9
|
const d8XMath_1 = require("./d8XMath");
|
|
15
10
|
const priceFeeds_1 = __importDefault(require("./priceFeeds"));
|
|
16
11
|
const utils_1 = require("./utils");
|
|
@@ -40,14 +35,15 @@ class PerpetualDataHandler {
|
|
|
40
35
|
this.symbolToTokenAddrMap = new Map();
|
|
41
36
|
this.perpetualIdToSymbol = new Map();
|
|
42
37
|
this.nestedPerpetualIDs = new Array();
|
|
43
|
-
this.chainId = config.chainId;
|
|
38
|
+
this.chainId = BigInt(config.chainId);
|
|
39
|
+
this.network = new ethers_1.Network(config.name || "", this.chainId);
|
|
44
40
|
this.proxyAddr = config.proxyAddr;
|
|
45
41
|
this.nodeURL = config.nodeURL;
|
|
46
42
|
this.proxyABI = config.proxyABI;
|
|
47
43
|
this.lobFactoryABI = config.lobFactoryABI;
|
|
48
44
|
this.lobABI = config.lobABI;
|
|
49
45
|
this.shareTokenABI = config.shareTokenABI;
|
|
50
|
-
this.symbolList =
|
|
46
|
+
this.symbolList = constants_1.SYMBOL_LIST;
|
|
51
47
|
this.priceFeedGetter = new priceFeeds_1.default(this, config.priceFeedConfigNetwork);
|
|
52
48
|
}
|
|
53
49
|
async initContractsAndData(signerOrProvider, overrides) {
|
|
@@ -55,11 +51,11 @@ class PerpetualDataHandler {
|
|
|
55
51
|
// check network
|
|
56
52
|
let network;
|
|
57
53
|
try {
|
|
58
|
-
if (signerOrProvider
|
|
54
|
+
if (signerOrProvider.provider) {
|
|
59
55
|
network = await signerOrProvider.provider.getNetwork();
|
|
60
56
|
}
|
|
61
57
|
else {
|
|
62
|
-
|
|
58
|
+
throw new Error("Signer has no provider"); // TODO: check
|
|
63
59
|
}
|
|
64
60
|
}
|
|
65
61
|
catch (error) {
|
|
@@ -69,8 +65,8 @@ class PerpetualDataHandler {
|
|
|
69
65
|
if (network.chainId !== this.chainId) {
|
|
70
66
|
throw new Error(`Provider: chain id ${network.chainId} does not match config (${this.chainId})`);
|
|
71
67
|
}
|
|
72
|
-
this.proxyContract = new
|
|
73
|
-
this.multicall =
|
|
68
|
+
this.proxyContract = new ethers_1.Contract(this.proxyAddr, this.config.proxyABI, signerOrProvider);
|
|
69
|
+
this.multicall = contracts_1.Multicall3__factory.connect(this.config.multicall ?? constants_1.MULTICALL_ADDRESS, this.signerOrProvider);
|
|
74
70
|
await this._fillSymbolMaps(overrides);
|
|
75
71
|
}
|
|
76
72
|
/**
|
|
@@ -78,14 +74,22 @@ class PerpetualDataHandler {
|
|
|
78
74
|
* @param symbol symbol of the form ETH-USD-MATIC
|
|
79
75
|
* @returns order book contract for the perpetual
|
|
80
76
|
*/
|
|
81
|
-
getOrderBookContract(symbol,
|
|
77
|
+
getOrderBookContract(symbol, signerOrProvider) {
|
|
82
78
|
let orderBookAddr = this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
|
|
83
|
-
if (orderBookAddr == "" || orderBookAddr == undefined
|
|
79
|
+
if (orderBookAddr == "" || orderBookAddr == undefined) {
|
|
84
80
|
throw Error(`no limit order book found for ${symbol} or no signer`);
|
|
85
81
|
}
|
|
86
|
-
let lobContract =
|
|
82
|
+
let lobContract = contracts_1.LimitOrderBook__factory.connect(orderBookAddr, signerOrProvider ?? this.signerOrProvider);
|
|
87
83
|
return lobContract;
|
|
88
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Returns the order-book contract for the symbol if found or fails
|
|
87
|
+
* @param symbol symbol of the form ETH-USD-MATIC
|
|
88
|
+
* @returns order book contract for the perpetual
|
|
89
|
+
*/
|
|
90
|
+
getOrderBookAddress(symbol) {
|
|
91
|
+
return this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
|
|
92
|
+
}
|
|
89
93
|
/**
|
|
90
94
|
* Get perpetuals for the given ids from onchain
|
|
91
95
|
* @param ids perpetual ids
|
|
@@ -123,7 +127,7 @@ class PerpetualDataHandler {
|
|
|
123
127
|
const tokenOverrides = require("./config/tokenOverrides.json");
|
|
124
128
|
let poolInfo = await PerpetualDataHandler.getPoolStaticInfo(this.proxyContract, overrides);
|
|
125
129
|
this.nestedPerpetualIDs = poolInfo.nestedPerpetualIDs;
|
|
126
|
-
const IERC20 =
|
|
130
|
+
const IERC20 = contracts_1.ERC20__factory.createInterface();
|
|
127
131
|
const proxyCalls = poolInfo.poolMarginTokenAddr.map((tokenAddr) => ({
|
|
128
132
|
target: tokenAddr,
|
|
129
133
|
allowFailure: false,
|
|
@@ -140,7 +144,7 @@ class PerpetualDataHandler {
|
|
|
140
144
|
callData: this.proxyContract.interface.encodeFunctionData("getOracleFactory"),
|
|
141
145
|
});
|
|
142
146
|
// multicall
|
|
143
|
-
const encodedResults = await this.multicall.
|
|
147
|
+
const encodedResults = await this.multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
144
148
|
// decimals
|
|
145
149
|
for (let j = 0; j < poolInfo.nestedPerpetualIDs.length; j++) {
|
|
146
150
|
const decimals = IERC20.decodeFunctionResult("decimals", encodedResults[j].returnData)[0];
|
|
@@ -148,26 +152,26 @@ class PerpetualDataHandler {
|
|
|
148
152
|
poolId: j + 1,
|
|
149
153
|
poolMarginSymbol: "",
|
|
150
154
|
poolMarginTokenAddr: poolInfo.poolMarginTokenAddr[j],
|
|
151
|
-
poolMarginTokenDecimals: decimals,
|
|
155
|
+
poolMarginTokenDecimals: Number(decimals),
|
|
152
156
|
poolSettleSymbol: "",
|
|
153
157
|
poolSettleTokenAddr: poolInfo.poolMarginTokenAddr[j],
|
|
154
|
-
poolSettleTokenDecimals: decimals,
|
|
158
|
+
poolSettleTokenDecimals: Number(decimals),
|
|
155
159
|
shareTokenAddr: poolInfo.poolShareTokenAddr[j],
|
|
156
160
|
oracleFactoryAddr: poolInfo.oracleFactory,
|
|
157
|
-
isRunning: poolInfo.poolShareTokenAddr[j] !=
|
|
161
|
+
isRunning: poolInfo.poolShareTokenAddr[j] != ethers_1.ZeroAddress,
|
|
158
162
|
MgnToSettleTriangulation: ["*", "1"], // correct later
|
|
159
163
|
};
|
|
160
164
|
this.poolStaticInfos.push(info);
|
|
161
165
|
}
|
|
162
166
|
//pyth
|
|
163
|
-
const oracle =
|
|
167
|
+
const oracle = contracts_1.OracleFactory__factory.connect(poolInfo.oracleFactory, this.signerOrProvider);
|
|
164
168
|
this.pythAddr = await oracle.pyth();
|
|
165
|
-
if (this.pythAddr ==
|
|
169
|
+
if (this.pythAddr == constants_1.ZERO_ADDRESS) {
|
|
166
170
|
this.pythAddr = await oracle.onDemandFeed();
|
|
167
171
|
}
|
|
168
172
|
// order book factory
|
|
169
173
|
this.lobFactoryAddr = this.proxyContract.interface.decodeFunctionResult("getOrderBookFactoryAddress", encodedResults[encodedResults.length - 2].returnData)[0];
|
|
170
|
-
this.lobFactoryContract =
|
|
174
|
+
this.lobFactoryContract = contracts_1.LimitOrderBookFactory__factory.connect(this.lobFactoryAddr, this.signerOrProvider);
|
|
171
175
|
// oracle factory
|
|
172
176
|
this.oraclefactoryAddr = this.proxyContract.interface.decodeFunctionResult("getOracleFactory", encodedResults[encodedResults.length - 1].returnData)[0];
|
|
173
177
|
let perpStaticInfos = await PerpetualDataHandler.getPerpetualStaticInfo(this.proxyContract, this.nestedPerpetualIDs, this.symbolList, overrides);
|
|
@@ -194,10 +198,10 @@ class PerpetualDataHandler {
|
|
|
194
198
|
const base3 = perp.S3Symbol.split("-")[0];
|
|
195
199
|
// we find out the pool currency by looking at all perpetuals
|
|
196
200
|
// from the perpetual.
|
|
197
|
-
if (perp.collateralCurrencyType ==
|
|
201
|
+
if (perp.collateralCurrencyType == constants_1.COLLATERAL_CURRENCY_BASE) {
|
|
198
202
|
poolCCY = base;
|
|
199
203
|
}
|
|
200
|
-
else if (perp.collateralCurrencyType ==
|
|
204
|
+
else if (perp.collateralCurrencyType == constants_1.COLLATERAL_CURRENCY_QUOTE) {
|
|
201
205
|
poolCCY = quote;
|
|
202
206
|
}
|
|
203
207
|
else {
|
|
@@ -250,14 +254,12 @@ class PerpetualDataHandler {
|
|
|
250
254
|
currPoolId = poolId;
|
|
251
255
|
// We only assume the flag to be correct
|
|
252
256
|
// in the first perpetual of the pool
|
|
253
|
-
const flag = perpStaticInfos[j].perpFlags == undefined
|
|
254
|
-
? bignumber_1.BigNumber.from(0)
|
|
255
|
-
: bignumber_1.BigNumber.from(perpStaticInfos[j].perpFlags.toString());
|
|
257
|
+
const flag = perpStaticInfos[j].perpFlags == undefined ? 0n : BigInt(perpStaticInfos[j].perpFlags.toString());
|
|
256
258
|
// find settlement setting for this flag
|
|
257
259
|
let s = undefined;
|
|
258
260
|
for (let j = 0; j < this.settlementConfig.length; j++) {
|
|
259
|
-
const masked = flag
|
|
260
|
-
if (
|
|
261
|
+
const masked = flag & BigInt(this.settlementConfig[j].perpFlags.toString());
|
|
262
|
+
if (masked != 0n) {
|
|
261
263
|
s = this.settlementConfig[j];
|
|
262
264
|
break;
|
|
263
265
|
}
|
|
@@ -456,7 +458,7 @@ class PerpetualDataHandler {
|
|
|
456
458
|
// query blockchain in chunks
|
|
457
459
|
const infoArr = new Array();
|
|
458
460
|
for (let k = 0; k < ids.length; k++) {
|
|
459
|
-
let perpInfos = await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {});
|
|
461
|
+
let perpInfos = (await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {}));
|
|
460
462
|
for (let j = 0; j < perpInfos.length; j++) {
|
|
461
463
|
let base = (0, utils_1.contractSymbolToSymbol)(perpInfos[j].S2BaseCCY, symbolList);
|
|
462
464
|
let quote = (0, utils_1.contractSymbolToSymbol)(perpInfos[j].S2QuoteCCY, symbolList);
|
|
@@ -465,12 +467,12 @@ class PerpetualDataHandler {
|
|
|
465
467
|
let sym2 = base + "-" + quote;
|
|
466
468
|
let sym3 = base3 == "" ? "" : base3 + "-" + quote3;
|
|
467
469
|
let info = {
|
|
468
|
-
id: perpInfos[j].id,
|
|
469
|
-
poolId: Math.floor(perpInfos[j].id / 100000),
|
|
470
|
+
id: Number(perpInfos[j].id),
|
|
471
|
+
poolId: Math.floor(Number(perpInfos[j].id) / 100000),
|
|
470
472
|
limitOrderBookAddr: perpInfos[j].limitOrderBookAddr,
|
|
471
473
|
initialMarginRate: (0, d8XMath_1.ABDK29ToFloat)(perpInfos[j].fInitialMarginRate),
|
|
472
474
|
maintenanceMarginRate: (0, d8XMath_1.ABDK29ToFloat)(perpInfos[j].fMaintenanceMarginRate),
|
|
473
|
-
collateralCurrencyType: perpInfos[j].collCurrencyType,
|
|
475
|
+
collateralCurrencyType: Number(perpInfos[j].collCurrencyType),
|
|
474
476
|
S2Symbol: sym2,
|
|
475
477
|
S3Symbol: sym3,
|
|
476
478
|
lotSizeBC: (0, d8XMath_1.ABK64x64ToFloat)(perpInfos[j].fLotSizeBC),
|
|
@@ -528,22 +530,22 @@ class PerpetualDataHandler {
|
|
|
528
530
|
isRunning: orig.isRunning,
|
|
529
531
|
iPerpetualCount: Number(orig.iPerpetualCount),
|
|
530
532
|
id: Number(orig.id),
|
|
531
|
-
fCeilPnLShare: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
533
|
+
fCeilPnLShare: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fCeilPnLShare)),
|
|
532
534
|
marginTokenDecimals: Number(orig.marginTokenDecimals),
|
|
533
535
|
iTargetPoolSizeUpdateTime: Number(orig.iTargetPoolSizeUpdateTime),
|
|
534
536
|
marginTokenAddress: orig.marginTokenAddress,
|
|
535
537
|
prevAnchor: Number(orig.prevAnchor),
|
|
536
|
-
fRedemptionRate: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
538
|
+
fRedemptionRate: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fRedemptionRate)),
|
|
537
539
|
shareTokenAddress: orig.shareTokenAddress,
|
|
538
|
-
fPnLparticipantsCashCC: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
539
|
-
fTargetAMMFundSize: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
540
|
-
fDefaultFundCashCC: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
541
|
-
fTargetDFSize: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
542
|
-
fBrokerCollateralLotSize: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
543
|
-
prevTokenAmount: (0, d8XMath_1.dec18ToFloat)(
|
|
544
|
-
nextTokenAmount: (0, d8XMath_1.dec18ToFloat)(
|
|
545
|
-
totalSupplyShareToken: (0, d8XMath_1.dec18ToFloat)(
|
|
546
|
-
fBrokerFundCashCC: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
540
|
+
fPnLparticipantsCashCC: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fPnLparticipantsCashCC)),
|
|
541
|
+
fTargetAMMFundSize: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fTargetAMMFundSize)),
|
|
542
|
+
fDefaultFundCashCC: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fDefaultFundCashCC)),
|
|
543
|
+
fTargetDFSize: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fTargetDFSize)),
|
|
544
|
+
fBrokerCollateralLotSize: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fBrokerCollateralLotSize)),
|
|
545
|
+
prevTokenAmount: (0, d8XMath_1.dec18ToFloat)(BigInt(orig.prevTokenAmount)),
|
|
546
|
+
nextTokenAmount: (0, d8XMath_1.dec18ToFloat)(BigInt(orig.nextTokenAmount)),
|
|
547
|
+
totalSupplyShareToken: (0, d8XMath_1.dec18ToFloat)(BigInt(orig.totalSupplyShareToken)),
|
|
548
|
+
fBrokerFundCashCC: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fBrokerFundCashCC)), // state: amount of cash in broker fund
|
|
547
549
|
};
|
|
548
550
|
p.push(v);
|
|
549
551
|
}
|
|
@@ -558,6 +560,7 @@ class PerpetualDataHandler {
|
|
|
558
560
|
* @returns array of PerpetualData converted into decimals
|
|
559
561
|
*/
|
|
560
562
|
static async _getPerpetuals(ids, _proxyContract, _symbolList, overrides) {
|
|
563
|
+
// TODO: can't be type safe here because proxyContract's abi is not static across chains (zkevm is the exception)
|
|
561
564
|
const rawPerps = await _proxyContract.getPerpetuals(ids, overrides || {});
|
|
562
565
|
let p = new Array();
|
|
563
566
|
for (let k = 0; k < rawPerps.length; k++) {
|
|
@@ -570,7 +573,7 @@ class PerpetualDataHandler {
|
|
|
570
573
|
iLastFundingTime: Number(orig.iLastFundingTime),
|
|
571
574
|
fDFCoverNRate: (0, d8XMath_1.ABDK29ToFloat)(Number(orig.fDFCoverNRate)),
|
|
572
575
|
fMaintenanceMarginRate: (0, d8XMath_1.ABDK29ToFloat)(Number(orig.fMaintenanceMarginRate)),
|
|
573
|
-
perpetualState:
|
|
576
|
+
perpetualState: constants_1.PERP_STATE_STR[Number(orig.state)],
|
|
574
577
|
eCollateralCurrency: Number(orig.eCollateralCurrency),
|
|
575
578
|
S2BaseCCY: (0, utils_1.contractSymbolToSymbol)((0, utils_1.fromBytes4)(Buffer.from(orig.S2BaseCCY.toString())), _symbolList),
|
|
576
579
|
S2QuoteCCY: (0, utils_1.contractSymbolToSymbol)((0, utils_1.fromBytes4)(Buffer.from(orig.S2QuoteCCY.toString())), _symbolList),
|
|
@@ -581,44 +584,41 @@ class PerpetualDataHandler {
|
|
|
581
584
|
fSigma3: (0, d8XMath_1.ABDK29ToFloat)(Number(orig.fSigma3)),
|
|
582
585
|
fRho23: (0, d8XMath_1.ABDK29ToFloat)(Number(orig.fRho23)),
|
|
583
586
|
liquidationPenaltyRateBps: Number(orig.liquidationPenaltyRateTbps) / 10,
|
|
584
|
-
currentMarkPremiumRatePrice: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
587
|
+
currentMarkPremiumRatePrice: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.currentMarkPremiumRate.fPrice)),
|
|
585
588
|
currentMarkPremiumRateTime: Number(orig.currentMarkPremiumRate.time),
|
|
586
|
-
premiumRatesEMA: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
587
|
-
fUnitAccumulatedFunding: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
588
|
-
fOpenInterest: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
589
|
-
fTargetAMMFundSize: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
590
|
-
fCurrentTraderExposureEMA: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
591
|
-
fCurrentFundingRate: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
592
|
-
fLotSizeBC: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
593
|
-
fReferralRebateCC: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
594
|
-
fTargetDFSize: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
595
|
-
fkStar: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
596
|
-
fAMMTargetDD: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
589
|
+
premiumRatesEMA: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.premiumRatesEMA)),
|
|
590
|
+
fUnitAccumulatedFunding: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fUnitAccumulatedFunding)),
|
|
591
|
+
fOpenInterest: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fOpenInterest)),
|
|
592
|
+
fTargetAMMFundSize: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fTargetAMMFundSize)),
|
|
593
|
+
fCurrentTraderExposureEMA: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fCurrentTraderExposureEMA)),
|
|
594
|
+
fCurrentFundingRate: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fCurrentFundingRate)),
|
|
595
|
+
fLotSizeBC: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fLotSizeBC)),
|
|
596
|
+
fReferralRebateCC: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fReferralRebateCC)),
|
|
597
|
+
fTargetDFSize: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fTargetDFSize)),
|
|
598
|
+
fkStar: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fkStar)),
|
|
599
|
+
fAMMTargetDD: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fAMMTargetDD)),
|
|
597
600
|
perpFlags: Number(orig.perpFlags?.toString()),
|
|
598
|
-
fMinimalTraderExposureEMA: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
599
|
-
fMinimalAMMExposureEMA: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
600
|
-
fSettlementS3PriceData: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
601
|
-
fSettlementS2PriceData: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
602
|
-
fTotalMarginBalance: (0, d8XMath_1.ABK64x64ToFloat)(
|
|
601
|
+
fMinimalTraderExposureEMA: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fMinimalTraderExposureEMA)),
|
|
602
|
+
fMinimalAMMExposureEMA: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fMinimalAMMExposureEMA)),
|
|
603
|
+
fSettlementS3PriceData: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fSettlementS3PriceData)),
|
|
604
|
+
fSettlementS2PriceData: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fSettlementS2PriceData)),
|
|
605
|
+
fTotalMarginBalance: (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fTotalMarginBalance)),
|
|
603
606
|
fMarkPriceEMALambda: (0, d8XMath_1.ABK64x64ToFloat)(Number(orig.fMarkPriceEMALambda)),
|
|
604
607
|
fFundingRateClamp: (0, d8XMath_1.ABK64x64ToFloat)(Number(orig.fFundingRateClamp)),
|
|
605
608
|
fMaximalTradeSizeBumpUp: (0, d8XMath_1.ABK64x64ToFloat)(Number(orig.fMaximalTradeSizeBumpUp)),
|
|
606
609
|
iLastTargetPoolSizeTime: Number(orig.iLastTargetPoolSizeTime),
|
|
607
610
|
fStressReturnS3: [
|
|
608
|
-
(0, d8XMath_1.ABK64x64ToFloat)(
|
|
609
|
-
(0, d8XMath_1.ABK64x64ToFloat)(
|
|
610
|
-
],
|
|
611
|
-
fDFLambda: [
|
|
612
|
-
(0, d8XMath_1.ABK64x64ToFloat)(bignumber_1.BigNumber.from(orig.fDFLambda[0])),
|
|
613
|
-
(0, d8XMath_1.ABK64x64ToFloat)(bignumber_1.BigNumber.from(orig.fDFLambda[1])),
|
|
611
|
+
(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fStressReturnS3[0])),
|
|
612
|
+
(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fStressReturnS3[1])),
|
|
614
613
|
],
|
|
614
|
+
fDFLambda: [(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fDFLambda[0])), (0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fDFLambda[1]))],
|
|
615
615
|
fCurrentAMMExposureEMA: [
|
|
616
|
-
(0, d8XMath_1.ABK64x64ToFloat)(
|
|
617
|
-
(0, d8XMath_1.ABK64x64ToFloat)(
|
|
616
|
+
(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fCurrentAMMExposureEMA[0])),
|
|
617
|
+
(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fCurrentAMMExposureEMA[1])),
|
|
618
618
|
],
|
|
619
619
|
fStressReturnS2: [
|
|
620
|
-
(0, d8XMath_1.ABK64x64ToFloat)(
|
|
621
|
-
(0, d8XMath_1.ABK64x64ToFloat)(
|
|
620
|
+
(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fStressReturnS2[0])),
|
|
621
|
+
(0, d8XMath_1.ABK64x64ToFloat)(BigInt(orig.fStressReturnS2[1])),
|
|
622
622
|
], // parameter: negative and positive stress returns for base-quote asset
|
|
623
623
|
};
|
|
624
624
|
p.push(v);
|
|
@@ -634,9 +634,11 @@ class PerpetualDataHandler {
|
|
|
634
634
|
let poolMarginTokenAddr = [];
|
|
635
635
|
let oracleFactory = "";
|
|
636
636
|
while (lenReceived == len) {
|
|
637
|
-
|
|
637
|
+
const res = (await _proxyContract.getPoolStaticInfo(idxFrom, idxFrom + len - 1, overrides || {}));
|
|
638
638
|
lenReceived = res.length;
|
|
639
|
-
|
|
639
|
+
const nestedIds = res[0].map((ids) => ids.map((id) => Number(id)));
|
|
640
|
+
nestedPerpetualIDs = nestedPerpetualIDs.concat(nestedIds);
|
|
641
|
+
// TODO: this looks like a bug if num pools > 10 --- concat?
|
|
640
642
|
poolShareTokenAddr = res[1];
|
|
641
643
|
poolMarginTokenAddr = res[2];
|
|
642
644
|
oracleFactory = res[3];
|
|
@@ -656,22 +658,22 @@ class PerpetualDataHandler {
|
|
|
656
658
|
const idx_mark_price = 8;
|
|
657
659
|
const idx_lvg = 7;
|
|
658
660
|
const idx_s3 = 9;
|
|
659
|
-
let isEmpty = traderState[idx_notional]
|
|
661
|
+
let isEmpty = traderState[idx_notional] == 0n;
|
|
660
662
|
let cash = (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_cash]);
|
|
661
|
-
let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn =
|
|
663
|
+
let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigInt(0), side = constants_1.CLOSED_SIDE, entryPrice = 0;
|
|
662
664
|
if (!isEmpty) {
|
|
663
665
|
[S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, _pxS2S3[0], symbolToPerpStaticInfo);
|
|
664
666
|
fLockedIn = traderState[idx_locked_in];
|
|
665
|
-
side = traderState[idx_notional]
|
|
666
|
-
entryPrice = (0, d8XMath_1.ABK64x64ToFloat)((0, d8XMath_1.div64x64)(fLockedIn, traderState[idx_notional])
|
|
667
|
+
side = traderState[idx_notional] > 0n ? constants_1.BUY_SIDE : constants_1.SELL_SIDE;
|
|
668
|
+
entryPrice = Math.abs((0, d8XMath_1.ABK64x64ToFloat)((0, d8XMath_1.div64x64)(fLockedIn, traderState[idx_notional])));
|
|
667
669
|
}
|
|
668
670
|
let mgn = {
|
|
669
671
|
symbol: symbol,
|
|
670
|
-
positionNotionalBaseCCY: isEmpty ? 0 : (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_notional]
|
|
671
|
-
side: isEmpty ?
|
|
672
|
+
positionNotionalBaseCCY: isEmpty ? 0 : Math.abs((0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_notional])),
|
|
673
|
+
side: isEmpty ? constants_1.CLOSED_SIDE : side,
|
|
672
674
|
entryPrice: isEmpty ? 0 : entryPrice,
|
|
673
675
|
leverage: isEmpty ? 0 : (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_lvg]),
|
|
674
|
-
markPrice: (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_mark_price]
|
|
676
|
+
markPrice: Math.abs((0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_mark_price])),
|
|
675
677
|
unrealizedPnlQuoteCCY: isEmpty ? 0 : pnl,
|
|
676
678
|
unrealizedFundingCollateralCCY: isEmpty ? 0 : unpaidFundingCC,
|
|
677
679
|
collateralCC: cash,
|
|
@@ -731,7 +733,7 @@ class PerpetualDataHandler {
|
|
|
731
733
|
break;
|
|
732
734
|
}
|
|
733
735
|
const curIds = new Set(orderBundles[1]);
|
|
734
|
-
for (let k = 0; k < res[0].length && res[2][k] !==
|
|
736
|
+
for (let k = 0; k < res[0].length && res[2][k] !== constants_1.ZERO_ADDRESS; k++) {
|
|
735
737
|
if (!curIds.has(res[1][k])) {
|
|
736
738
|
orderBundles[0].push(res[0][k]);
|
|
737
739
|
orderBundles[1].push(res[1][k]);
|
|
@@ -771,7 +773,7 @@ class PerpetualDataHandler {
|
|
|
771
773
|
if (overrides) {
|
|
772
774
|
({ rpcURL, ...overrides } = overrides);
|
|
773
775
|
}
|
|
774
|
-
const provider = new
|
|
776
|
+
const provider = new ethers_1.JsonRpcProvider(rpcURL ?? this.nodeURL, this.network, {});
|
|
775
777
|
const orderBookSC = this.getOrderBookContract(symbol).connect(provider);
|
|
776
778
|
let numOrders = await orderBookSC.orderCount(overrides || {});
|
|
777
779
|
return Number(numOrders);
|
|
@@ -807,22 +809,22 @@ class PerpetualDataHandler {
|
|
|
807
809
|
if (overrides) {
|
|
808
810
|
({ rpcURL, ...overrides } = overrides);
|
|
809
811
|
}
|
|
810
|
-
const provider = new
|
|
812
|
+
const provider = new ethers_1.JsonRpcProvider(rpcURL ?? this.nodeURL, this.network, { staticNetwork: true });
|
|
811
813
|
const orderBookSC = this.getOrderBookContract(symbol).connect(provider);
|
|
812
|
-
const multicall =
|
|
813
|
-
if (
|
|
814
|
-
startAfter =
|
|
814
|
+
const multicall = contracts_1.Multicall3__factory.connect(this.config.multicall ?? constants_1.MULTICALL_ADDRESS, provider);
|
|
815
|
+
if (startAfter == undefined) {
|
|
816
|
+
startAfter = constants_1.ZERO_ORDER_ID;
|
|
815
817
|
}
|
|
816
818
|
else if (typeof startAfter === "string") {
|
|
817
819
|
startAfter = 0; // TODO: fix
|
|
818
820
|
}
|
|
819
821
|
// first get client orders (incl. dependency info)
|
|
820
|
-
let [orders, orderIds] = await orderBookSC.pollRange(startAfter,
|
|
822
|
+
let [orders, orderIds] = await orderBookSC.pollRange(startAfter, numElements, overrides || {});
|
|
821
823
|
let userFriendlyOrders = new Array();
|
|
822
824
|
let traderAddr = [];
|
|
823
825
|
let orderIdsOut = [];
|
|
824
826
|
let k = 0;
|
|
825
|
-
while (k < numElements && k < orders.length && orders[k].traderAddr !==
|
|
827
|
+
while (k < numElements && k < orders.length && orders[k].traderAddr !== constants_1.ZERO_ADDRESS) {
|
|
826
828
|
userFriendlyOrders.push(PerpetualDataHandler.fromClientOrder(orders[k], this.symbolToPerpStaticInfo));
|
|
827
829
|
orderIdsOut.push(orderIds[k]);
|
|
828
830
|
traderAddr.push(orders[k].traderAddr);
|
|
@@ -830,11 +832,11 @@ class PerpetualDataHandler {
|
|
|
830
832
|
}
|
|
831
833
|
// then get perp orders (incl. submitted ts info)
|
|
832
834
|
const multicalls = orderIdsOut.map((id) => ({
|
|
833
|
-
target: orderBookSC.
|
|
835
|
+
target: orderBookSC.target,
|
|
834
836
|
allowFailure: true,
|
|
835
837
|
callData: orderBookSC.interface.encodeFunctionData("orderOfDigest", [id]),
|
|
836
838
|
}));
|
|
837
|
-
const encodedResults = await multicall.
|
|
839
|
+
const encodedResults = await multicall.aggregate3.staticCall(multicalls, overrides || {});
|
|
838
840
|
// order status
|
|
839
841
|
encodedResults.map((res, k) => {
|
|
840
842
|
if (res.success) {
|
|
@@ -862,7 +864,7 @@ class PerpetualDataHandler {
|
|
|
862
864
|
throw new Error("traderAddr, symbol and pxS2S3 should all have the same length");
|
|
863
865
|
}
|
|
864
866
|
const proxyCalls = traderAddrs.map((_addr, i) => ({
|
|
865
|
-
target: _proxyContract.
|
|
867
|
+
target: _proxyContract.target,
|
|
866
868
|
allowFailure: true,
|
|
867
869
|
callData: _proxyContract.interface.encodeFunctionData("getTraderState", [
|
|
868
870
|
PerpetualDataHandler.symbolToPerpetualId(symbols[i], symbolToPerpStaticInfo),
|
|
@@ -870,7 +872,7 @@ class PerpetualDataHandler {
|
|
|
870
872
|
_pxS2S3s[i].map((x) => (0, d8XMath_1.floatToABK64x64)(x)),
|
|
871
873
|
]),
|
|
872
874
|
}));
|
|
873
|
-
const encodedResults = await _multicall.
|
|
875
|
+
const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
874
876
|
const traderStates = encodedResults.map(({ success, returnData }, i) => {
|
|
875
877
|
if (!success)
|
|
876
878
|
throw new Error(`Failed to get perp info for ${symbols[i]}`);
|
|
@@ -898,10 +900,10 @@ class PerpetualDataHandler {
|
|
|
898
900
|
let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
|
|
899
901
|
let staticInfo = symbolToPerpStaticInfo.get(symbol);
|
|
900
902
|
let [S2, S3] = [indexPrices[0], indexPrices[1]];
|
|
901
|
-
if (staticInfo.collateralCurrencyType ==
|
|
903
|
+
if (staticInfo.collateralCurrencyType == constants_1.CollaterlCCY.BASE) {
|
|
902
904
|
S3 = S2;
|
|
903
905
|
}
|
|
904
|
-
else if (staticInfo.collateralCurrencyType ==
|
|
906
|
+
else if (staticInfo.collateralCurrencyType == constants_1.CollaterlCCY.QUOTE) {
|
|
905
907
|
S3 = 1;
|
|
906
908
|
}
|
|
907
909
|
let ammState = await _proxyContract.getAMMState(perpId, [S2, S3].map(d8XMath_1.floatToABK64x64), overrides || {});
|
|
@@ -912,16 +914,16 @@ class PerpetualDataHandler {
|
|
|
912
914
|
let staticInfo = symbolToPerpStaticInfo.get(symbol);
|
|
913
915
|
let ccy = symbol.split("-");
|
|
914
916
|
let [S2, S3] = [indexPrices[0], indexPrices[1]];
|
|
915
|
-
if (staticInfo.collateralCurrencyType ==
|
|
917
|
+
if (staticInfo.collateralCurrencyType == constants_1.CollaterlCCY.BASE) {
|
|
916
918
|
S3 = S2;
|
|
917
919
|
}
|
|
918
|
-
else if (staticInfo.collateralCurrencyType ==
|
|
920
|
+
else if (staticInfo.collateralCurrencyType == constants_1.CollaterlCCY.QUOTE) {
|
|
919
921
|
S3 = 1;
|
|
920
922
|
}
|
|
921
923
|
let markPrice = S2 * (1 + (0, d8XMath_1.ABK64x64ToFloat)(ammState[8]));
|
|
922
924
|
let state = {
|
|
923
925
|
id: perpId,
|
|
924
|
-
state:
|
|
926
|
+
state: constants_1.PERP_STATE_STR[Number(ammState[13])],
|
|
925
927
|
baseCurrency: ccy[0],
|
|
926
928
|
quoteCurrency: ccy[1],
|
|
927
929
|
indexPrice: S2,
|
|
@@ -961,14 +963,14 @@ class PerpetualDataHandler {
|
|
|
961
963
|
let position = (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_notional]);
|
|
962
964
|
let cashCC = (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_availableCashCC]);
|
|
963
965
|
let Sm = (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_mark_price]);
|
|
964
|
-
let unpaidFundingCC = (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_availableCashCC]
|
|
966
|
+
let unpaidFundingCC = (0, d8XMath_1.ABK64x64ToFloat)(traderState[idx_availableCashCC] - traderState[idx_cash]);
|
|
965
967
|
let unpaidFunding = unpaidFundingCC;
|
|
966
|
-
if (perpInfo.collateralCurrencyType ==
|
|
968
|
+
if (perpInfo.collateralCurrencyType == constants_1.CollaterlCCY.BASE) {
|
|
967
969
|
S2Liq = (0, d8XMath_1.calculateLiquidationPriceCollateralBase)(lockedInValueQC, position, cashCC, tau);
|
|
968
970
|
S3Liq = S2Liq;
|
|
969
971
|
unpaidFunding = unpaidFunding / S2;
|
|
970
972
|
}
|
|
971
|
-
else if (perpInfo.collateralCurrencyType ==
|
|
973
|
+
else if (perpInfo.collateralCurrencyType == constants_1.CollaterlCCY.QUANTO) {
|
|
972
974
|
let S3 = S3Liq;
|
|
973
975
|
S3Liq = S3;
|
|
974
976
|
S2Liq = (0, d8XMath_1.calculateLiquidationPriceCollateralQuanto)(lockedInValueQC, position, cashCC, tau, S3, Sm);
|
|
@@ -1025,24 +1027,24 @@ class PerpetualDataHandler {
|
|
|
1025
1027
|
}
|
|
1026
1028
|
static fromSmartContractOrder(order, symbolToPerpInfoMap) {
|
|
1027
1029
|
// find symbol of perpetual id
|
|
1028
|
-
let symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, order.iPerpetualId, "id");
|
|
1030
|
+
let symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, Number(order.iPerpetualId), "id");
|
|
1029
1031
|
if (symbol == undefined) {
|
|
1030
|
-
throw Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
|
|
1032
|
+
throw new Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
|
|
1031
1033
|
}
|
|
1032
|
-
let side = order.fAmount >
|
|
1034
|
+
let side = order.fAmount > BigInt(0) ? constants_1.BUY_SIDE : constants_1.SELL_SIDE;
|
|
1033
1035
|
let limitPrice, stopPrice;
|
|
1034
|
-
let fLimitPrice =
|
|
1035
|
-
if (fLimitPrice
|
|
1036
|
-
limitPrice = side ==
|
|
1036
|
+
let fLimitPrice = BigInt(order.fLimitPrice);
|
|
1037
|
+
if (fLimitPrice == 0n) {
|
|
1038
|
+
limitPrice = side == constants_1.BUY_SIDE ? undefined : 0;
|
|
1037
1039
|
}
|
|
1038
|
-
else if (fLimitPrice.
|
|
1039
|
-
limitPrice = side ==
|
|
1040
|
+
else if (fLimitPrice == constants_1.MAX_64x64) {
|
|
1041
|
+
limitPrice = side == constants_1.BUY_SIDE ? Infinity : undefined;
|
|
1040
1042
|
}
|
|
1041
1043
|
else {
|
|
1042
1044
|
limitPrice = (0, d8XMath_1.ABK64x64ToFloat)(fLimitPrice);
|
|
1043
1045
|
}
|
|
1044
|
-
let fStopPrice =
|
|
1045
|
-
if (fStopPrice
|
|
1046
|
+
let fStopPrice = BigInt(order.fTriggerPrice);
|
|
1047
|
+
if (fStopPrice == 0n || fStopPrice == constants_1.MAX_64x64) {
|
|
1046
1048
|
stopPrice = undefined;
|
|
1047
1049
|
}
|
|
1048
1050
|
else {
|
|
@@ -1051,13 +1053,13 @@ class PerpetualDataHandler {
|
|
|
1051
1053
|
let userOrder = {
|
|
1052
1054
|
symbol: symbol,
|
|
1053
1055
|
side: side,
|
|
1054
|
-
type: PerpetualDataHandler._flagToOrderType(
|
|
1055
|
-
quantity: Math.abs((0, d8XMath_1.ABK64x64ToFloat)(
|
|
1056
|
-
reduceOnly: (0, utils_1.containsFlag)(
|
|
1056
|
+
type: PerpetualDataHandler._flagToOrderType(BigInt(order.flags), BigInt(order.fLimitPrice)),
|
|
1057
|
+
quantity: Math.abs((0, d8XMath_1.ABK64x64ToFloat)(BigInt(order.fAmount))),
|
|
1058
|
+
reduceOnly: (0, utils_1.containsFlag)(BigInt(order.flags), constants_1.MASK_CLOSE_ONLY),
|
|
1057
1059
|
limitPrice: limitPrice,
|
|
1058
|
-
keepPositionLvg: (0, utils_1.containsFlag)(
|
|
1060
|
+
keepPositionLvg: (0, utils_1.containsFlag)(BigInt(order.flags), constants_1.MASK_KEEP_POS_LEVERAGE),
|
|
1059
1061
|
brokerFeeTbps: order.brokerFeeTbps == 0 ? undefined : Number(order.brokerFeeTbps),
|
|
1060
|
-
brokerAddr: order.brokerAddr ==
|
|
1062
|
+
brokerAddr: order.brokerAddr == constants_1.ZERO_ADDRESS ? undefined : order.brokerAddr.toString(),
|
|
1061
1063
|
brokerSignature: order.brokerSignature == "0x" ? undefined : order.brokerSignature,
|
|
1062
1064
|
stopPrice: stopPrice,
|
|
1063
1065
|
leverage: Number(order.leverageTDR) / 100,
|
|
@@ -1082,17 +1084,17 @@ class PerpetualDataHandler {
|
|
|
1082
1084
|
PerpetualDataHandler.checkOrder(order, perpStaticInfo);
|
|
1083
1085
|
// translate order
|
|
1084
1086
|
let flags = PerpetualDataHandler._orderTypeToFlag(order);
|
|
1085
|
-
let brokerSig = order.brokerSignature == undefined ?
|
|
1087
|
+
let brokerSig = order.brokerSignature == undefined ? "0x" : order.brokerSignature;
|
|
1086
1088
|
let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
|
|
1087
1089
|
let fAmount;
|
|
1088
|
-
if (order.side ==
|
|
1090
|
+
if (order.side == constants_1.BUY_SIDE) {
|
|
1089
1091
|
fAmount = (0, d8XMath_1.floatToABK64x64)(Math.abs(order.quantity));
|
|
1090
1092
|
}
|
|
1091
|
-
else if (order.side ==
|
|
1093
|
+
else if (order.side == constants_1.SELL_SIDE) {
|
|
1092
1094
|
fAmount = (0, d8XMath_1.floatToABK64x64)(-Math.abs(order.quantity));
|
|
1093
1095
|
}
|
|
1094
1096
|
else {
|
|
1095
|
-
throw Error(`invalid side in order spec, use ${
|
|
1097
|
+
throw Error(`invalid side in order spec, use ${constants_1.BUY_SIDE} or ${constants_1.SELL_SIDE}`);
|
|
1096
1098
|
}
|
|
1097
1099
|
let fLimitPrice;
|
|
1098
1100
|
if (order.limitPrice == undefined) {
|
|
@@ -1100,20 +1102,20 @@ class PerpetualDataHandler {
|
|
|
1100
1102
|
// the trade to go through
|
|
1101
1103
|
// Also: stop orders always have limits set, so even for this case
|
|
1102
1104
|
// we set the limit to 0 or infinity
|
|
1103
|
-
fLimitPrice = order.side ==
|
|
1105
|
+
fLimitPrice = order.side == constants_1.BUY_SIDE ? constants_1.MAX_64x64 : BigInt(0);
|
|
1104
1106
|
}
|
|
1105
1107
|
else {
|
|
1106
1108
|
fLimitPrice = (0, d8XMath_1.floatToABK64x64)(order.limitPrice);
|
|
1107
1109
|
}
|
|
1108
|
-
let iDeadline = order.deadline == undefined ? Date.now() / 1000 +
|
|
1109
|
-
let fTriggerPrice = order.stopPrice == undefined ?
|
|
1110
|
+
let iDeadline = order.deadline == undefined ? Date.now() / 1000 + constants_1.ORDER_MAX_DURATION_SEC : order.deadline;
|
|
1111
|
+
let fTriggerPrice = order.stopPrice == undefined ? BigInt(0) : (0, d8XMath_1.floatToABK64x64)(order.stopPrice);
|
|
1110
1112
|
let smOrder = {
|
|
1111
1113
|
flags: flags,
|
|
1112
1114
|
iPerpetualId: perpetualId,
|
|
1113
1115
|
brokerFeeTbps: order.brokerFeeTbps == undefined ? 0 : order.brokerFeeTbps,
|
|
1114
1116
|
traderAddr: traderAddr,
|
|
1115
|
-
brokerAddr: order.brokerAddr == undefined ?
|
|
1116
|
-
executorAddr:
|
|
1117
|
+
brokerAddr: order.brokerAddr == undefined ? constants_1.ZERO_ADDRESS : order.brokerAddr,
|
|
1118
|
+
executorAddr: constants_1.ZERO_ADDRESS,
|
|
1117
1119
|
brokerSignature: brokerSig,
|
|
1118
1120
|
fAmount: fAmount,
|
|
1119
1121
|
fLimitPrice: fLimitPrice,
|
|
@@ -1146,9 +1148,9 @@ class PerpetualDataHandler {
|
|
|
1146
1148
|
leverageTDR: scOrder.leverageTDR,
|
|
1147
1149
|
iDeadline: scOrder.iDeadline,
|
|
1148
1150
|
executionTimestamp: scOrder.executionTimestamp,
|
|
1149
|
-
parentChildDigest1: parentChildIds ? parentChildIds[0] :
|
|
1150
|
-
parentChildDigest2: parentChildIds ? parentChildIds[1] :
|
|
1151
|
-
callbackTarget:
|
|
1151
|
+
parentChildDigest1: parentChildIds ? parentChildIds[0] : constants_1.ZERO_ORDER_ID,
|
|
1152
|
+
parentChildDigest2: parentChildIds ? parentChildIds[1] : constants_1.ZERO_ORDER_ID,
|
|
1153
|
+
callbackTarget: constants_1.ZERO_ADDRESS,
|
|
1152
1154
|
};
|
|
1153
1155
|
}
|
|
1154
1156
|
/**
|
|
@@ -1182,28 +1184,29 @@ class PerpetualDataHandler {
|
|
|
1182
1184
|
executionTimestamp: obOrder.executionTimestamp,
|
|
1183
1185
|
};
|
|
1184
1186
|
const order = PerpetualDataHandler.fromSmartContractOrder(scOrder, perpStaticInfo);
|
|
1185
|
-
if (obOrder.parentChildDigest1.toString() !=
|
|
1186
|
-
obOrder.parentChildDigest2.toString() !=
|
|
1187
|
+
if (obOrder.parentChildDigest1.toString() != constants_1.ZERO_ORDER_ID ||
|
|
1188
|
+
obOrder.parentChildDigest2.toString() != constants_1.ZERO_ORDER_ID) {
|
|
1187
1189
|
order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
|
|
1188
1190
|
}
|
|
1189
1191
|
return order;
|
|
1190
1192
|
}
|
|
1191
1193
|
static _flagToOrderType(orderFlags, orderLimitPrice) {
|
|
1192
|
-
|
|
1193
|
-
let
|
|
1194
|
-
let
|
|
1195
|
-
let
|
|
1194
|
+
// TODO: check
|
|
1195
|
+
let flag = BigInt(orderFlags);
|
|
1196
|
+
let isLimit = (0, utils_1.containsFlag)(flag, constants_1.MASK_LIMIT_ORDER);
|
|
1197
|
+
let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != constants_1.MAX_64x64;
|
|
1198
|
+
let isStop = (0, utils_1.containsFlag)(flag, constants_1.MASK_STOP_ORDER);
|
|
1196
1199
|
if (isStop && hasLimit) {
|
|
1197
|
-
return
|
|
1200
|
+
return constants_1.ORDER_TYPE_STOP_LIMIT;
|
|
1198
1201
|
}
|
|
1199
1202
|
else if (isStop && !hasLimit) {
|
|
1200
|
-
return
|
|
1203
|
+
return constants_1.ORDER_TYPE_STOP_MARKET;
|
|
1201
1204
|
}
|
|
1202
1205
|
else if (isLimit && !isStop) {
|
|
1203
|
-
return
|
|
1206
|
+
return constants_1.ORDER_TYPE_LIMIT;
|
|
1204
1207
|
}
|
|
1205
1208
|
else {
|
|
1206
|
-
return
|
|
1209
|
+
return constants_1.ORDER_TYPE_MARKET;
|
|
1207
1210
|
}
|
|
1208
1211
|
}
|
|
1209
1212
|
/**
|
|
@@ -1216,38 +1219,38 @@ class PerpetualDataHandler {
|
|
|
1216
1219
|
let flag;
|
|
1217
1220
|
order.type = order.type.toUpperCase();
|
|
1218
1221
|
switch (order.type) {
|
|
1219
|
-
case
|
|
1220
|
-
flag =
|
|
1222
|
+
case constants_1.ORDER_TYPE_LIMIT:
|
|
1223
|
+
flag = constants_1.MASK_LIMIT_ORDER;
|
|
1221
1224
|
break;
|
|
1222
|
-
case
|
|
1223
|
-
flag =
|
|
1225
|
+
case constants_1.ORDER_TYPE_MARKET:
|
|
1226
|
+
flag = constants_1.MASK_MARKET_ORDER;
|
|
1224
1227
|
break;
|
|
1225
|
-
case
|
|
1226
|
-
flag =
|
|
1228
|
+
case constants_1.ORDER_TYPE_STOP_MARKET:
|
|
1229
|
+
flag = constants_1.MASK_STOP_ORDER;
|
|
1227
1230
|
break;
|
|
1228
|
-
case
|
|
1229
|
-
flag =
|
|
1231
|
+
case constants_1.ORDER_TYPE_STOP_LIMIT:
|
|
1232
|
+
flag = constants_1.MASK_STOP_ORDER;
|
|
1230
1233
|
break;
|
|
1231
1234
|
default: {
|
|
1232
1235
|
throw Error(`Order type ${order.type} not found.`);
|
|
1233
1236
|
}
|
|
1234
1237
|
}
|
|
1235
1238
|
if (order.keepPositionLvg != undefined && order.keepPositionLvg) {
|
|
1236
|
-
flag = (0, utils_1.combineFlags)(flag,
|
|
1239
|
+
flag = (0, utils_1.combineFlags)(flag, constants_1.MASK_KEEP_POS_LEVERAGE);
|
|
1237
1240
|
}
|
|
1238
1241
|
if (order.reduceOnly != undefined && order.reduceOnly) {
|
|
1239
|
-
flag = (0, utils_1.combineFlags)(flag,
|
|
1242
|
+
flag = (0, utils_1.combineFlags)(flag, constants_1.MASK_CLOSE_ONLY);
|
|
1240
1243
|
}
|
|
1241
|
-
if ((order.type ==
|
|
1244
|
+
if ((order.type == constants_1.ORDER_TYPE_LIMIT || order.type == constants_1.ORDER_TYPE_STOP_LIMIT) && order.limitPrice == undefined) {
|
|
1242
1245
|
throw Error(`Order type ${order.type} requires limit price.`);
|
|
1243
1246
|
}
|
|
1244
|
-
if ((order.type ==
|
|
1247
|
+
if ((order.type == constants_1.ORDER_TYPE_STOP_MARKET || order.type == constants_1.ORDER_TYPE_STOP_LIMIT) && order.stopPrice == undefined) {
|
|
1245
1248
|
throw Error(`Order type ${order.type} requires trigger price.`);
|
|
1246
1249
|
}
|
|
1247
|
-
if ((order.type ==
|
|
1250
|
+
if ((order.type == constants_1.ORDER_TYPE_MARKET || order.type == constants_1.ORDER_TYPE_LIMIT) && order.stopPrice != undefined) {
|
|
1248
1251
|
throw Error(`Order type ${order.type} has no trigger price.`);
|
|
1249
1252
|
}
|
|
1250
|
-
if (order.type !=
|
|
1253
|
+
if (order.type != constants_1.ORDER_TYPE_STOP_LIMIT && order.type != constants_1.ORDER_TYPE_STOP_MARKET && order.stopPrice != undefined) {
|
|
1251
1254
|
throw Error(`Order type ${order.type} has no trigger price.`);
|
|
1252
1255
|
}
|
|
1253
1256
|
return flag;
|
|
@@ -1300,7 +1303,7 @@ class PerpetualDataHandler {
|
|
|
1300
1303
|
* @returns NodeSDKConfig
|
|
1301
1304
|
*/
|
|
1302
1305
|
static getConfigByName(name, version) {
|
|
1303
|
-
let configFile =
|
|
1306
|
+
let configFile = constants_1.DEFAULT_CONFIG.filter((c) => c.name == name);
|
|
1304
1307
|
if (configFile.length == 0) {
|
|
1305
1308
|
throw Error(`No SDK config found with name ${name}.`);
|
|
1306
1309
|
}
|
|
@@ -1337,7 +1340,7 @@ class PerpetualDataHandler {
|
|
|
1337
1340
|
* @returns NodeSDKConfig
|
|
1338
1341
|
*/
|
|
1339
1342
|
static getConfigByChainId(chainId, version) {
|
|
1340
|
-
let configFile =
|
|
1343
|
+
let configFile = constants_1.DEFAULT_CONFIG.filter((c) => c.chainId == chainId);
|
|
1341
1344
|
if (configFile.length == 0) {
|
|
1342
1345
|
throw Error(`No SDK config found for chain ID ${chainId}.`);
|
|
1343
1346
|
}
|
|
@@ -1370,7 +1373,7 @@ class PerpetualDataHandler {
|
|
|
1370
1373
|
* main();
|
|
1371
1374
|
*/
|
|
1372
1375
|
static getAvailableConfigs() {
|
|
1373
|
-
let configFile =
|
|
1376
|
+
let configFile = constants_1.DEFAULT_CONFIG;
|
|
1374
1377
|
let ids = new Set();
|
|
1375
1378
|
for (let k = 0; k < configFile.length; k++) {
|
|
1376
1379
|
const el = configFile[k].chainId.toString() + "; " + configFile[k].name;
|
|
@@ -1379,13 +1382,13 @@ class PerpetualDataHandler {
|
|
|
1379
1382
|
return ids;
|
|
1380
1383
|
}
|
|
1381
1384
|
/**
|
|
1382
|
-
* Get the ABI of a function in a given contract
|
|
1385
|
+
* Get the ABI of a function in a given contract. Undefined if it doesn't exist.
|
|
1383
1386
|
* @param contract A contract instance, e.g. this.proxyContract
|
|
1384
1387
|
* @param functionName Name of the function whose ABI we want
|
|
1385
1388
|
* @returns Function ABI as a single JSON string
|
|
1386
1389
|
*/
|
|
1387
1390
|
static _getABIFromContract(contract, functionName) {
|
|
1388
|
-
return contract.interface.getFunction(functionName)
|
|
1391
|
+
return contract.interface.getFunction(functionName)?.format("full");
|
|
1389
1392
|
}
|
|
1390
1393
|
/**
|
|
1391
1394
|
* Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
|
|
@@ -1503,9 +1506,12 @@ class PerpetualDataHandler {
|
|
|
1503
1506
|
static checkOrder(order,
|
|
1504
1507
|
// traderAccount: MarginAccount,
|
|
1505
1508
|
perpStaticInfo) {
|
|
1509
|
+
if (!perpStaticInfo.has(order.symbol)) {
|
|
1510
|
+
throw new Error(`Perpetual not found for symbol ${order.symbol}`);
|
|
1511
|
+
}
|
|
1506
1512
|
// check side
|
|
1507
|
-
if (order.side !=
|
|
1508
|
-
throw Error(`order side must be ${
|
|
1513
|
+
if (order.side != constants_1.BUY_SIDE && order.side != constants_1.SELL_SIDE) {
|
|
1514
|
+
throw Error(`order side must be ${constants_1.BUY_SIDE} or ${constants_1.SELL_SIDE}`);
|
|
1509
1515
|
}
|
|
1510
1516
|
// check amount
|
|
1511
1517
|
let lotSize = perpStaticInfo.get(order.symbol).lotSizeBC;
|
|
@@ -1519,7 +1525,7 @@ class PerpetualDataHandler {
|
|
|
1519
1525
|
throw Error(`trade amount too small: ${order.quantity} ${perpStaticInfo.get(order.symbol).S2Symbol}`);
|
|
1520
1526
|
}
|
|
1521
1527
|
// check limit price
|
|
1522
|
-
if (order.side ==
|
|
1528
|
+
if (order.side == constants_1.BUY_SIDE && order.limitPrice != undefined && order.limitPrice <= 0) {
|
|
1523
1529
|
throw Error(`invalid limit price for buy order: ${order.limitPrice}`);
|
|
1524
1530
|
}
|
|
1525
1531
|
// broker fee
|
|
@@ -1539,14 +1545,14 @@ class PerpetualDataHandler {
|
|
|
1539
1545
|
static fromClientOrderToTypeSafeOrder(order) {
|
|
1540
1546
|
return {
|
|
1541
1547
|
iPerpetualId: +order.iPerpetualId.toString(),
|
|
1542
|
-
fLimitPrice:
|
|
1548
|
+
fLimitPrice: order.fLimitPrice,
|
|
1543
1549
|
leverageTDR: +order.leverageTDR.toString(),
|
|
1544
1550
|
executionTimestamp: +order.executionTimestamp.toString(),
|
|
1545
|
-
flags: BigInt(
|
|
1551
|
+
flags: BigInt(order.flags),
|
|
1546
1552
|
iDeadline: +order.iDeadline.toString(),
|
|
1547
1553
|
brokerAddr: order.brokerAddr,
|
|
1548
|
-
fTriggerPrice:
|
|
1549
|
-
fAmount:
|
|
1554
|
+
fTriggerPrice: order.fTriggerPrice,
|
|
1555
|
+
fAmount: order.fAmount,
|
|
1550
1556
|
parentChildDigest1: order.parentChildDigest1,
|
|
1551
1557
|
traderAddr: order.traderAddr,
|
|
1552
1558
|
parentChildDigest2: order.parentChildDigest2,
|