@d8x/perpetuals-sdk 1.3.7 → 2.0.1-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/config/priceFeedConfig.json +16 -2
- package/dist/cjs/config/symbolList.json +2 -1
- package/dist/cjs/constants.d.ts +12 -12
- package/dist/cjs/constants.js +14 -14
- 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 +28 -16
- package/dist/cjs/d8XMath.js +70 -50
- 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 +52 -62
- package/dist/cjs/orderExecutorTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +44 -35
- package/dist/cjs/perpetualDataHandler.js +194 -170
- 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/polyMktsPxFeed.d.ts +14 -0
- package/dist/cjs/polyMktsPxFeed.js +59 -0
- package/dist/cjs/polyMktsPxFeed.js.map +1 -0
- package/dist/cjs/priceFeeds.d.ts +2 -0
- package/dist/cjs/priceFeeds.js +44 -9
- 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 +40 -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/config/priceFeedConfig.json +16 -2
- package/dist/esm/config/symbolList.json +2 -1
- package/dist/esm/constants.d.ts +12 -12
- package/dist/esm/constants.js +13 -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 +28 -16
- package/dist/esm/d8XMath.js +67 -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 +38 -48
- package/dist/esm/orderExecutorTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +44 -35
- package/dist/esm/perpetualDataHandler.js +137 -113
- 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/polyMktsPxFeed.d.ts +14 -0
- package/dist/esm/polyMktsPxFeed.js +56 -0
- package/dist/esm/polyMktsPxFeed.js.map +1 -0
- package/dist/esm/priceFeeds.d.ts +2 -0
- package/dist/esm/priceFeeds.js +44 -9
- 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 +42 -25
- 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/config/priceFeedConfig.json +16 -2
- package/src/config/symbolList.json +2 -1
- package/src/constants.ts +13 -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 +78 -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 +100 -108
- package/src/perpetualDataHandler.ts +209 -172
- package/src/perpetualEventHandler.ts +16 -17
- package/src/polyMktsPxFeed.ts +71 -0
- package/src/priceFeeds.ts +46 -10
- package/src/referralCodeSigner.ts +6 -10
- package/src/traderDigests.ts +8 -5
- package/src/traderInterface.ts +61 -33
- 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,19 +467,19 @@ 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),
|
|
477
479
|
referralRebate: (0, d8XMath_1.ABK64x64ToFloat)(perpInfos[j].fReferralRebateCC),
|
|
478
480
|
priceIds: perpInfos[j].priceIds,
|
|
479
481
|
isPyth: perpInfos[j].isPyth,
|
|
480
|
-
perpFlags: perpInfos[j].perpFlags,
|
|
482
|
+
perpFlags: BigInt(perpInfos[j].perpFlags.toString()),
|
|
481
483
|
};
|
|
482
484
|
infoArr.push(info);
|
|
483
485
|
}
|
|
@@ -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,39 +1027,45 @@ class PerpetualDataHandler {
|
|
|
1025
1027
|
}
|
|
1026
1028
|
static fromSmartContractOrder(order, symbolToPerpInfoMap) {
|
|
1027
1029
|
// find symbol of perpetual id
|
|
1028
|
-
|
|
1030
|
+
const 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
|
-
|
|
1034
|
+
const side = BigInt(order.fAmount.toString()) > BigInt(0) ? constants_1.BUY_SIDE : constants_1.SELL_SIDE;
|
|
1033
1035
|
let limitPrice, stopPrice;
|
|
1034
|
-
|
|
1035
|
-
if (fLimitPrice
|
|
1036
|
-
limitPrice = side ==
|
|
1036
|
+
const 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
|
-
|
|
1045
|
-
if (fStopPrice
|
|
1046
|
+
const fStopPrice = BigInt(order.fTriggerPrice);
|
|
1047
|
+
if (fStopPrice == 0n || fStopPrice == constants_1.MAX_64x64) {
|
|
1046
1048
|
stopPrice = undefined;
|
|
1047
1049
|
}
|
|
1048
1050
|
else {
|
|
1049
1051
|
stopPrice = (0, d8XMath_1.ABK64x64ToFloat)(fStopPrice);
|
|
1050
1052
|
}
|
|
1053
|
+
// adjust prices for market type
|
|
1054
|
+
const sInfo = symbolToPerpInfoMap.get(symbol);
|
|
1055
|
+
if (PerpetualDataHandler.isPredictiveMarket(sInfo)) {
|
|
1056
|
+
limitPrice = limitPrice !== undefined && limitPrice !== 0 ? (0, d8XMath_1.priceToProb)(limitPrice) : limitPrice;
|
|
1057
|
+
stopPrice = stopPrice !== undefined && stopPrice !== 0 ? (0, d8XMath_1.priceToProb)(stopPrice) : stopPrice;
|
|
1058
|
+
}
|
|
1051
1059
|
let userOrder = {
|
|
1052
1060
|
symbol: symbol,
|
|
1053
1061
|
side: side,
|
|
1054
|
-
type: PerpetualDataHandler._flagToOrderType(
|
|
1055
|
-
quantity: Math.abs((0, d8XMath_1.ABK64x64ToFloat)(
|
|
1056
|
-
reduceOnly: (0, utils_1.containsFlag)(
|
|
1062
|
+
type: PerpetualDataHandler._flagToOrderType(BigInt(order.flags), BigInt(order.fLimitPrice)),
|
|
1063
|
+
quantity: Math.abs((0, d8XMath_1.ABK64x64ToFloat)(BigInt(order.fAmount))),
|
|
1064
|
+
reduceOnly: (0, utils_1.containsFlag)(BigInt(order.flags), constants_1.MASK_CLOSE_ONLY),
|
|
1057
1065
|
limitPrice: limitPrice,
|
|
1058
|
-
keepPositionLvg: (0, utils_1.containsFlag)(
|
|
1066
|
+
keepPositionLvg: (0, utils_1.containsFlag)(BigInt(order.flags), constants_1.MASK_KEEP_POS_LEVERAGE),
|
|
1059
1067
|
brokerFeeTbps: order.brokerFeeTbps == 0 ? undefined : Number(order.brokerFeeTbps),
|
|
1060
|
-
brokerAddr: order.brokerAddr ==
|
|
1068
|
+
brokerAddr: order.brokerAddr == constants_1.ZERO_ADDRESS ? undefined : order.brokerAddr.toString(),
|
|
1061
1069
|
brokerSignature: order.brokerSignature == "0x" ? undefined : order.brokerSignature,
|
|
1062
1070
|
stopPrice: stopPrice,
|
|
1063
1071
|
leverage: Number(order.leverageTDR) / 100,
|
|
@@ -1082,38 +1090,41 @@ class PerpetualDataHandler {
|
|
|
1082
1090
|
PerpetualDataHandler.checkOrder(order, perpStaticInfo);
|
|
1083
1091
|
// translate order
|
|
1084
1092
|
let flags = PerpetualDataHandler._orderTypeToFlag(order);
|
|
1085
|
-
let brokerSig = order.brokerSignature == undefined ?
|
|
1093
|
+
let brokerSig = order.brokerSignature == undefined ? "0x" : order.brokerSignature;
|
|
1086
1094
|
let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
|
|
1087
1095
|
let fAmount;
|
|
1088
|
-
if (order.side ==
|
|
1096
|
+
if (order.side == constants_1.BUY_SIDE) {
|
|
1089
1097
|
fAmount = (0, d8XMath_1.floatToABK64x64)(Math.abs(order.quantity));
|
|
1090
1098
|
}
|
|
1091
|
-
else if (order.side ==
|
|
1099
|
+
else if (order.side == constants_1.SELL_SIDE) {
|
|
1092
1100
|
fAmount = (0, d8XMath_1.floatToABK64x64)(-Math.abs(order.quantity));
|
|
1093
1101
|
}
|
|
1094
1102
|
else {
|
|
1095
|
-
throw Error(`invalid side in order spec, use ${
|
|
1103
|
+
throw Error(`invalid side in order spec, use ${constants_1.BUY_SIDE} or ${constants_1.SELL_SIDE}`);
|
|
1096
1104
|
}
|
|
1105
|
+
const isPred = PerpetualDataHandler.isPredictiveMarket(perpStaticInfo.get(order.symbol));
|
|
1097
1106
|
let fLimitPrice;
|
|
1098
1107
|
if (order.limitPrice == undefined) {
|
|
1099
1108
|
// we need to set the limit price to infinity or zero for
|
|
1100
1109
|
// the trade to go through
|
|
1101
1110
|
// Also: stop orders always have limits set, so even for this case
|
|
1102
1111
|
// we set the limit to 0 or infinity
|
|
1103
|
-
fLimitPrice = order.side ==
|
|
1112
|
+
fLimitPrice = order.side == constants_1.BUY_SIDE ? constants_1.MAX_64x64 : BigInt(0);
|
|
1104
1113
|
}
|
|
1105
1114
|
else {
|
|
1106
|
-
fLimitPrice = (0, d8XMath_1.floatToABK64x64)(order.limitPrice);
|
|
1115
|
+
fLimitPrice = (0, d8XMath_1.floatToABK64x64)(isPred ? (0, d8XMath_1.probToPrice)(order.limitPrice) : order.limitPrice);
|
|
1107
1116
|
}
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1117
|
+
const iDeadline = order.deadline == undefined ? Date.now() / 1000 + constants_1.ORDER_MAX_DURATION_SEC : order.deadline;
|
|
1118
|
+
const fTriggerPrice = order.stopPrice == undefined
|
|
1119
|
+
? BigInt(0)
|
|
1120
|
+
: (0, d8XMath_1.floatToABK64x64)(isPred ? (0, d8XMath_1.probToPrice)(order.stopPrice) : order.stopPrice);
|
|
1121
|
+
const smOrder = {
|
|
1111
1122
|
flags: flags,
|
|
1112
1123
|
iPerpetualId: perpetualId,
|
|
1113
1124
|
brokerFeeTbps: order.brokerFeeTbps == undefined ? 0 : order.brokerFeeTbps,
|
|
1114
1125
|
traderAddr: traderAddr,
|
|
1115
|
-
brokerAddr: order.brokerAddr == undefined ?
|
|
1116
|
-
executorAddr:
|
|
1126
|
+
brokerAddr: order.brokerAddr == undefined ? constants_1.ZERO_ADDRESS : order.brokerAddr,
|
|
1127
|
+
executorAddr: constants_1.ZERO_ADDRESS,
|
|
1117
1128
|
brokerSignature: brokerSig,
|
|
1118
1129
|
fAmount: fAmount,
|
|
1119
1130
|
fLimitPrice: fLimitPrice,
|
|
@@ -1146,9 +1157,9 @@ class PerpetualDataHandler {
|
|
|
1146
1157
|
leverageTDR: scOrder.leverageTDR,
|
|
1147
1158
|
iDeadline: scOrder.iDeadline,
|
|
1148
1159
|
executionTimestamp: scOrder.executionTimestamp,
|
|
1149
|
-
parentChildDigest1: parentChildIds ? parentChildIds[0] :
|
|
1150
|
-
parentChildDigest2: parentChildIds ? parentChildIds[1] :
|
|
1151
|
-
callbackTarget:
|
|
1160
|
+
parentChildDigest1: parentChildIds ? parentChildIds[0] : constants_1.ZERO_ORDER_ID,
|
|
1161
|
+
parentChildDigest2: parentChildIds ? parentChildIds[1] : constants_1.ZERO_ORDER_ID,
|
|
1162
|
+
callbackTarget: constants_1.ZERO_ADDRESS,
|
|
1152
1163
|
};
|
|
1153
1164
|
}
|
|
1154
1165
|
/**
|
|
@@ -1182,28 +1193,29 @@ class PerpetualDataHandler {
|
|
|
1182
1193
|
executionTimestamp: obOrder.executionTimestamp,
|
|
1183
1194
|
};
|
|
1184
1195
|
const order = PerpetualDataHandler.fromSmartContractOrder(scOrder, perpStaticInfo);
|
|
1185
|
-
if (obOrder.parentChildDigest1.toString() !=
|
|
1186
|
-
obOrder.parentChildDigest2.toString() !=
|
|
1196
|
+
if (obOrder.parentChildDigest1.toString() != constants_1.ZERO_ORDER_ID ||
|
|
1197
|
+
obOrder.parentChildDigest2.toString() != constants_1.ZERO_ORDER_ID) {
|
|
1187
1198
|
order.parentChildOrderIds = [obOrder.parentChildDigest1.toString(), obOrder.parentChildDigest2.toString()];
|
|
1188
1199
|
}
|
|
1189
1200
|
return order;
|
|
1190
1201
|
}
|
|
1191
1202
|
static _flagToOrderType(orderFlags, orderLimitPrice) {
|
|
1192
|
-
|
|
1193
|
-
let
|
|
1194
|
-
let
|
|
1195
|
-
let
|
|
1203
|
+
// TODO: check
|
|
1204
|
+
let flag = BigInt(orderFlags);
|
|
1205
|
+
let isLimit = (0, utils_1.containsFlag)(flag, constants_1.MASK_LIMIT_ORDER);
|
|
1206
|
+
let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != constants_1.MAX_64x64;
|
|
1207
|
+
let isStop = (0, utils_1.containsFlag)(flag, constants_1.MASK_STOP_ORDER);
|
|
1196
1208
|
if (isStop && hasLimit) {
|
|
1197
|
-
return
|
|
1209
|
+
return constants_1.ORDER_TYPE_STOP_LIMIT;
|
|
1198
1210
|
}
|
|
1199
1211
|
else if (isStop && !hasLimit) {
|
|
1200
|
-
return
|
|
1212
|
+
return constants_1.ORDER_TYPE_STOP_MARKET;
|
|
1201
1213
|
}
|
|
1202
1214
|
else if (isLimit && !isStop) {
|
|
1203
|
-
return
|
|
1215
|
+
return constants_1.ORDER_TYPE_LIMIT;
|
|
1204
1216
|
}
|
|
1205
1217
|
else {
|
|
1206
|
-
return
|
|
1218
|
+
return constants_1.ORDER_TYPE_MARKET;
|
|
1207
1219
|
}
|
|
1208
1220
|
}
|
|
1209
1221
|
/**
|
|
@@ -1216,38 +1228,38 @@ class PerpetualDataHandler {
|
|
|
1216
1228
|
let flag;
|
|
1217
1229
|
order.type = order.type.toUpperCase();
|
|
1218
1230
|
switch (order.type) {
|
|
1219
|
-
case
|
|
1220
|
-
flag =
|
|
1231
|
+
case constants_1.ORDER_TYPE_LIMIT:
|
|
1232
|
+
flag = constants_1.MASK_LIMIT_ORDER;
|
|
1221
1233
|
break;
|
|
1222
|
-
case
|
|
1223
|
-
flag =
|
|
1234
|
+
case constants_1.ORDER_TYPE_MARKET:
|
|
1235
|
+
flag = constants_1.MASK_MARKET_ORDER;
|
|
1224
1236
|
break;
|
|
1225
|
-
case
|
|
1226
|
-
flag =
|
|
1237
|
+
case constants_1.ORDER_TYPE_STOP_MARKET:
|
|
1238
|
+
flag = constants_1.MASK_STOP_ORDER;
|
|
1227
1239
|
break;
|
|
1228
|
-
case
|
|
1229
|
-
flag =
|
|
1240
|
+
case constants_1.ORDER_TYPE_STOP_LIMIT:
|
|
1241
|
+
flag = constants_1.MASK_STOP_ORDER;
|
|
1230
1242
|
break;
|
|
1231
1243
|
default: {
|
|
1232
1244
|
throw Error(`Order type ${order.type} not found.`);
|
|
1233
1245
|
}
|
|
1234
1246
|
}
|
|
1235
1247
|
if (order.keepPositionLvg != undefined && order.keepPositionLvg) {
|
|
1236
|
-
flag = (0, utils_1.combineFlags)(flag,
|
|
1248
|
+
flag = (0, utils_1.combineFlags)(flag, constants_1.MASK_KEEP_POS_LEVERAGE);
|
|
1237
1249
|
}
|
|
1238
1250
|
if (order.reduceOnly != undefined && order.reduceOnly) {
|
|
1239
|
-
flag = (0, utils_1.combineFlags)(flag,
|
|
1251
|
+
flag = (0, utils_1.combineFlags)(flag, constants_1.MASK_CLOSE_ONLY);
|
|
1240
1252
|
}
|
|
1241
|
-
if ((order.type ==
|
|
1253
|
+
if ((order.type == constants_1.ORDER_TYPE_LIMIT || order.type == constants_1.ORDER_TYPE_STOP_LIMIT) && order.limitPrice == undefined) {
|
|
1242
1254
|
throw Error(`Order type ${order.type} requires limit price.`);
|
|
1243
1255
|
}
|
|
1244
|
-
if ((order.type ==
|
|
1256
|
+
if ((order.type == constants_1.ORDER_TYPE_STOP_MARKET || order.type == constants_1.ORDER_TYPE_STOP_LIMIT) && order.stopPrice == undefined) {
|
|
1245
1257
|
throw Error(`Order type ${order.type} requires trigger price.`);
|
|
1246
1258
|
}
|
|
1247
|
-
if ((order.type ==
|
|
1259
|
+
if ((order.type == constants_1.ORDER_TYPE_MARKET || order.type == constants_1.ORDER_TYPE_LIMIT) && order.stopPrice != undefined) {
|
|
1248
1260
|
throw Error(`Order type ${order.type} has no trigger price.`);
|
|
1249
1261
|
}
|
|
1250
|
-
if (order.type !=
|
|
1262
|
+
if (order.type != constants_1.ORDER_TYPE_STOP_LIMIT && order.type != constants_1.ORDER_TYPE_STOP_MARKET && order.stopPrice != undefined) {
|
|
1251
1263
|
throw Error(`Order type ${order.type} has no trigger price.`);
|
|
1252
1264
|
}
|
|
1253
1265
|
return flag;
|
|
@@ -1300,7 +1312,7 @@ class PerpetualDataHandler {
|
|
|
1300
1312
|
* @returns NodeSDKConfig
|
|
1301
1313
|
*/
|
|
1302
1314
|
static getConfigByName(name, version) {
|
|
1303
|
-
let configFile =
|
|
1315
|
+
let configFile = constants_1.DEFAULT_CONFIG.filter((c) => c.name == name);
|
|
1304
1316
|
if (configFile.length == 0) {
|
|
1305
1317
|
throw Error(`No SDK config found with name ${name}.`);
|
|
1306
1318
|
}
|
|
@@ -1337,7 +1349,7 @@ class PerpetualDataHandler {
|
|
|
1337
1349
|
* @returns NodeSDKConfig
|
|
1338
1350
|
*/
|
|
1339
1351
|
static getConfigByChainId(chainId, version) {
|
|
1340
|
-
let configFile =
|
|
1352
|
+
let configFile = constants_1.DEFAULT_CONFIG.filter((c) => c.chainId == chainId);
|
|
1341
1353
|
if (configFile.length == 0) {
|
|
1342
1354
|
throw Error(`No SDK config found for chain ID ${chainId}.`);
|
|
1343
1355
|
}
|
|
@@ -1370,7 +1382,7 @@ class PerpetualDataHandler {
|
|
|
1370
1382
|
* main();
|
|
1371
1383
|
*/
|
|
1372
1384
|
static getAvailableConfigs() {
|
|
1373
|
-
let configFile =
|
|
1385
|
+
let configFile = constants_1.DEFAULT_CONFIG;
|
|
1374
1386
|
let ids = new Set();
|
|
1375
1387
|
for (let k = 0; k < configFile.length; k++) {
|
|
1376
1388
|
const el = configFile[k].chainId.toString() + "; " + configFile[k].name;
|
|
@@ -1379,13 +1391,13 @@ class PerpetualDataHandler {
|
|
|
1379
1391
|
return ids;
|
|
1380
1392
|
}
|
|
1381
1393
|
/**
|
|
1382
|
-
* Get the ABI of a function in a given contract
|
|
1394
|
+
* Get the ABI of a function in a given contract. Undefined if it doesn't exist.
|
|
1383
1395
|
* @param contract A contract instance, e.g. this.proxyContract
|
|
1384
1396
|
* @param functionName Name of the function whose ABI we want
|
|
1385
1397
|
* @returns Function ABI as a single JSON string
|
|
1386
1398
|
*/
|
|
1387
1399
|
static _getABIFromContract(contract, functionName) {
|
|
1388
|
-
return contract.interface.getFunction(functionName)
|
|
1400
|
+
return contract.interface.getFunction(functionName)?.format("full");
|
|
1389
1401
|
}
|
|
1390
1402
|
/**
|
|
1391
1403
|
* Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
|
|
@@ -1503,9 +1515,12 @@ class PerpetualDataHandler {
|
|
|
1503
1515
|
static checkOrder(order,
|
|
1504
1516
|
// traderAccount: MarginAccount,
|
|
1505
1517
|
perpStaticInfo) {
|
|
1518
|
+
if (!perpStaticInfo.has(order.symbol)) {
|
|
1519
|
+
throw new Error(`Perpetual not found for symbol ${order.symbol}`);
|
|
1520
|
+
}
|
|
1506
1521
|
// check side
|
|
1507
|
-
if (order.side !=
|
|
1508
|
-
throw Error(`order side must be ${
|
|
1522
|
+
if (order.side != constants_1.BUY_SIDE && order.side != constants_1.SELL_SIDE) {
|
|
1523
|
+
throw Error(`order side must be ${constants_1.BUY_SIDE} or ${constants_1.SELL_SIDE}`);
|
|
1509
1524
|
}
|
|
1510
1525
|
// check amount
|
|
1511
1526
|
let lotSize = perpStaticInfo.get(order.symbol).lotSizeBC;
|
|
@@ -1519,7 +1534,7 @@ class PerpetualDataHandler {
|
|
|
1519
1534
|
throw Error(`trade amount too small: ${order.quantity} ${perpStaticInfo.get(order.symbol).S2Symbol}`);
|
|
1520
1535
|
}
|
|
1521
1536
|
// check limit price
|
|
1522
|
-
if (order.side ==
|
|
1537
|
+
if (order.side == constants_1.BUY_SIDE && order.limitPrice != undefined && order.limitPrice <= 0) {
|
|
1523
1538
|
throw Error(`invalid limit price for buy order: ${order.limitPrice}`);
|
|
1524
1539
|
}
|
|
1525
1540
|
// broker fee
|
|
@@ -1539,14 +1554,14 @@ class PerpetualDataHandler {
|
|
|
1539
1554
|
static fromClientOrderToTypeSafeOrder(order) {
|
|
1540
1555
|
return {
|
|
1541
1556
|
iPerpetualId: +order.iPerpetualId.toString(),
|
|
1542
|
-
fLimitPrice:
|
|
1557
|
+
fLimitPrice: order.fLimitPrice,
|
|
1543
1558
|
leverageTDR: +order.leverageTDR.toString(),
|
|
1544
1559
|
executionTimestamp: +order.executionTimestamp.toString(),
|
|
1545
|
-
flags: BigInt(
|
|
1560
|
+
flags: BigInt(order.flags),
|
|
1546
1561
|
iDeadline: +order.iDeadline.toString(),
|
|
1547
1562
|
brokerAddr: order.brokerAddr,
|
|
1548
|
-
fTriggerPrice:
|
|
1549
|
-
fAmount:
|
|
1563
|
+
fTriggerPrice: order.fTriggerPrice,
|
|
1564
|
+
fAmount: order.fAmount,
|
|
1550
1565
|
parentChildDigest1: order.parentChildDigest1,
|
|
1551
1566
|
traderAddr: order.traderAddr,
|
|
1552
1567
|
parentChildDigest2: order.parentChildDigest2,
|
|
@@ -1555,6 +1570,15 @@ class PerpetualDataHandler {
|
|
|
1555
1570
|
callbackTarget: order.callbackTarget,
|
|
1556
1571
|
};
|
|
1557
1572
|
}
|
|
1573
|
+
/**
|
|
1574
|
+
* Determines whether a given perpetual represents a predictive market
|
|
1575
|
+
* @param staticInfo Perpetual static info
|
|
1576
|
+
* @returns True if this is a predictive market
|
|
1577
|
+
*/
|
|
1578
|
+
static isPredictiveMarket(staticInfo) {
|
|
1579
|
+
// return true; // for testing
|
|
1580
|
+
return (0, utils_1.containsFlag)(staticInfo.perpFlags, constants_1.MASK_PREDICTIVE_MARKET);
|
|
1581
|
+
}
|
|
1558
1582
|
}
|
|
1559
1583
|
exports.default = PerpetualDataHandler;
|
|
1560
1584
|
//# sourceMappingURL=perpetualDataHandler.js.map
|