@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
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { Contract } from "@ethersproject/contracts";
|
|
6
|
-
import { StaticJsonRpcProvider } from "@ethersproject/providers";
|
|
7
|
-
import { BUY_SIDE, CLOSED_SIDE, COLLATERAL_CURRENCY_BASE, COLLATERAL_CURRENCY_QUOTE, CollaterlCCY, DEFAULT_CONFIG, ERC20_ABI, MASK_CLOSE_ONLY, MASK_KEEP_POS_LEVERAGE, MASK_LIMIT_ORDER, MASK_MARKET_ORDER, MASK_STOP_ORDER, MAX_64x64, MULTICALL_ADDRESS, ORDER_MAX_DURATION_SEC, ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET, ORDER_TYPE_STOP_LIMIT, ORDER_TYPE_STOP_MARKET, PERP_STATE_STR, SELL_SIDE, SYMBOL_LIST, ZERO_ADDRESS, ZERO_ORDER_ID, } from "./constants";
|
|
8
|
-
import { LimitOrderBookFactory__factory, LimitOrderBook__factory, Multicall3__factory, OracleFactory__factory, } from "./contracts";
|
|
9
|
-
import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, } from "./d8XMath";
|
|
1
|
+
import { Contract, JsonRpcProvider, Network, ZeroAddress, } from "ethers";
|
|
2
|
+
import { BUY_SIDE, CLOSED_SIDE, COLLATERAL_CURRENCY_BASE, COLLATERAL_CURRENCY_QUOTE, CollaterlCCY, DEFAULT_CONFIG, MASK_CLOSE_ONLY, MASK_KEEP_POS_LEVERAGE, MASK_LIMIT_ORDER, MASK_MARKET_ORDER, MASK_PREDICTIVE_MARKET, MASK_STOP_ORDER, MAX_64x64, MULTICALL_ADDRESS, ORDER_MAX_DURATION_SEC, ORDER_TYPE_LIMIT, ORDER_TYPE_MARKET, ORDER_TYPE_STOP_LIMIT, ORDER_TYPE_STOP_MARKET, PERP_STATE_STR, SELL_SIDE, SYMBOL_LIST, ZERO_ADDRESS, ZERO_ORDER_ID, } from "./constants";
|
|
3
|
+
import { ERC20__factory, LimitOrderBookFactory__factory, LimitOrderBook__factory, Multicall3__factory, OracleFactory__factory, } from "./contracts";
|
|
4
|
+
import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, priceToProb, probToPrice, } from "./d8XMath";
|
|
10
5
|
import PriceFeeds from "./priceFeeds";
|
|
11
6
|
import { combineFlags, containsFlag, contractSymbolToSymbol, loadConfigAbis, symbol4BToLongSymbol, fromBytes4, to4Chars, } from "./utils";
|
|
12
7
|
/**
|
|
@@ -35,7 +30,8 @@ export default class PerpetualDataHandler {
|
|
|
35
30
|
this.symbolToTokenAddrMap = new Map();
|
|
36
31
|
this.perpetualIdToSymbol = new Map();
|
|
37
32
|
this.nestedPerpetualIDs = new Array();
|
|
38
|
-
this.chainId = config.chainId;
|
|
33
|
+
this.chainId = BigInt(config.chainId);
|
|
34
|
+
this.network = new Network(config.name || "", this.chainId);
|
|
39
35
|
this.proxyAddr = config.proxyAddr;
|
|
40
36
|
this.nodeURL = config.nodeURL;
|
|
41
37
|
this.proxyABI = config.proxyABI;
|
|
@@ -50,11 +46,11 @@ export default class PerpetualDataHandler {
|
|
|
50
46
|
// check network
|
|
51
47
|
let network;
|
|
52
48
|
try {
|
|
53
|
-
if (signerOrProvider
|
|
49
|
+
if (signerOrProvider.provider) {
|
|
54
50
|
network = await signerOrProvider.provider.getNetwork();
|
|
55
51
|
}
|
|
56
52
|
else {
|
|
57
|
-
|
|
53
|
+
throw new Error("Signer has no provider"); // TODO: check
|
|
58
54
|
}
|
|
59
55
|
}
|
|
60
56
|
catch (error) {
|
|
@@ -73,14 +69,22 @@ export default class PerpetualDataHandler {
|
|
|
73
69
|
* @param symbol symbol of the form ETH-USD-MATIC
|
|
74
70
|
* @returns order book contract for the perpetual
|
|
75
71
|
*/
|
|
76
|
-
getOrderBookContract(symbol,
|
|
72
|
+
getOrderBookContract(symbol, signerOrProvider) {
|
|
77
73
|
let orderBookAddr = this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
|
|
78
|
-
if (orderBookAddr == "" || orderBookAddr == undefined
|
|
74
|
+
if (orderBookAddr == "" || orderBookAddr == undefined) {
|
|
79
75
|
throw Error(`no limit order book found for ${symbol} or no signer`);
|
|
80
76
|
}
|
|
81
|
-
let lobContract = LimitOrderBook__factory.connect(orderBookAddr,
|
|
77
|
+
let lobContract = LimitOrderBook__factory.connect(orderBookAddr, signerOrProvider ?? this.signerOrProvider);
|
|
82
78
|
return lobContract;
|
|
83
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Returns the order-book contract for the symbol if found or fails
|
|
82
|
+
* @param symbol symbol of the form ETH-USD-MATIC
|
|
83
|
+
* @returns order book contract for the perpetual
|
|
84
|
+
*/
|
|
85
|
+
getOrderBookAddress(symbol) {
|
|
86
|
+
return this.symbolToPerpStaticInfo.get(symbol)?.limitOrderBookAddr;
|
|
87
|
+
}
|
|
84
88
|
/**
|
|
85
89
|
* Get perpetuals for the given ids from onchain
|
|
86
90
|
* @param ids perpetual ids
|
|
@@ -118,7 +122,7 @@ export default class PerpetualDataHandler {
|
|
|
118
122
|
const tokenOverrides = require("./config/tokenOverrides.json");
|
|
119
123
|
let poolInfo = await PerpetualDataHandler.getPoolStaticInfo(this.proxyContract, overrides);
|
|
120
124
|
this.nestedPerpetualIDs = poolInfo.nestedPerpetualIDs;
|
|
121
|
-
const IERC20 =
|
|
125
|
+
const IERC20 = ERC20__factory.createInterface();
|
|
122
126
|
const proxyCalls = poolInfo.poolMarginTokenAddr.map((tokenAddr) => ({
|
|
123
127
|
target: tokenAddr,
|
|
124
128
|
allowFailure: false,
|
|
@@ -135,7 +139,7 @@ export default class PerpetualDataHandler {
|
|
|
135
139
|
callData: this.proxyContract.interface.encodeFunctionData("getOracleFactory"),
|
|
136
140
|
});
|
|
137
141
|
// multicall
|
|
138
|
-
const encodedResults = await this.multicall.
|
|
142
|
+
const encodedResults = await this.multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
139
143
|
// decimals
|
|
140
144
|
for (let j = 0; j < poolInfo.nestedPerpetualIDs.length; j++) {
|
|
141
145
|
const decimals = IERC20.decodeFunctionResult("decimals", encodedResults[j].returnData)[0];
|
|
@@ -143,13 +147,13 @@ export default class PerpetualDataHandler {
|
|
|
143
147
|
poolId: j + 1,
|
|
144
148
|
poolMarginSymbol: "",
|
|
145
149
|
poolMarginTokenAddr: poolInfo.poolMarginTokenAddr[j],
|
|
146
|
-
poolMarginTokenDecimals: decimals,
|
|
150
|
+
poolMarginTokenDecimals: Number(decimals),
|
|
147
151
|
poolSettleSymbol: "",
|
|
148
152
|
poolSettleTokenAddr: poolInfo.poolMarginTokenAddr[j],
|
|
149
|
-
poolSettleTokenDecimals: decimals,
|
|
153
|
+
poolSettleTokenDecimals: Number(decimals),
|
|
150
154
|
shareTokenAddr: poolInfo.poolShareTokenAddr[j],
|
|
151
155
|
oracleFactoryAddr: poolInfo.oracleFactory,
|
|
152
|
-
isRunning: poolInfo.poolShareTokenAddr[j] !=
|
|
156
|
+
isRunning: poolInfo.poolShareTokenAddr[j] != ZeroAddress,
|
|
153
157
|
MgnToSettleTriangulation: ["*", "1"], // correct later
|
|
154
158
|
};
|
|
155
159
|
this.poolStaticInfos.push(info);
|
|
@@ -245,14 +249,12 @@ export default class PerpetualDataHandler {
|
|
|
245
249
|
currPoolId = poolId;
|
|
246
250
|
// We only assume the flag to be correct
|
|
247
251
|
// in the first perpetual of the pool
|
|
248
|
-
const flag = perpStaticInfos[j].perpFlags == undefined
|
|
249
|
-
? BigNumber.from(0)
|
|
250
|
-
: BigNumber.from(perpStaticInfos[j].perpFlags.toString());
|
|
252
|
+
const flag = perpStaticInfos[j].perpFlags == undefined ? 0n : BigInt(perpStaticInfos[j].perpFlags.toString());
|
|
251
253
|
// find settlement setting for this flag
|
|
252
254
|
let s = undefined;
|
|
253
255
|
for (let j = 0; j < this.settlementConfig.length; j++) {
|
|
254
|
-
const masked = flag
|
|
255
|
-
if (
|
|
256
|
+
const masked = flag & BigInt(this.settlementConfig[j].perpFlags.toString());
|
|
257
|
+
if (masked != 0n) {
|
|
256
258
|
s = this.settlementConfig[j];
|
|
257
259
|
break;
|
|
258
260
|
}
|
|
@@ -451,7 +453,7 @@ export default class PerpetualDataHandler {
|
|
|
451
453
|
// query blockchain in chunks
|
|
452
454
|
const infoArr = new Array();
|
|
453
455
|
for (let k = 0; k < ids.length; k++) {
|
|
454
|
-
let perpInfos = await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {});
|
|
456
|
+
let perpInfos = (await _proxyContract.getPerpetualStaticInfo(ids[k], overrides || {}));
|
|
455
457
|
for (let j = 0; j < perpInfos.length; j++) {
|
|
456
458
|
let base = contractSymbolToSymbol(perpInfos[j].S2BaseCCY, symbolList);
|
|
457
459
|
let quote = contractSymbolToSymbol(perpInfos[j].S2QuoteCCY, symbolList);
|
|
@@ -460,19 +462,19 @@ export default class PerpetualDataHandler {
|
|
|
460
462
|
let sym2 = base + "-" + quote;
|
|
461
463
|
let sym3 = base3 == "" ? "" : base3 + "-" + quote3;
|
|
462
464
|
let info = {
|
|
463
|
-
id: perpInfos[j].id,
|
|
464
|
-
poolId: Math.floor(perpInfos[j].id / 100000),
|
|
465
|
+
id: Number(perpInfos[j].id),
|
|
466
|
+
poolId: Math.floor(Number(perpInfos[j].id) / 100000),
|
|
465
467
|
limitOrderBookAddr: perpInfos[j].limitOrderBookAddr,
|
|
466
468
|
initialMarginRate: ABDK29ToFloat(perpInfos[j].fInitialMarginRate),
|
|
467
469
|
maintenanceMarginRate: ABDK29ToFloat(perpInfos[j].fMaintenanceMarginRate),
|
|
468
|
-
collateralCurrencyType: perpInfos[j].collCurrencyType,
|
|
470
|
+
collateralCurrencyType: Number(perpInfos[j].collCurrencyType),
|
|
469
471
|
S2Symbol: sym2,
|
|
470
472
|
S3Symbol: sym3,
|
|
471
473
|
lotSizeBC: ABK64x64ToFloat(perpInfos[j].fLotSizeBC),
|
|
472
474
|
referralRebate: ABK64x64ToFloat(perpInfos[j].fReferralRebateCC),
|
|
473
475
|
priceIds: perpInfos[j].priceIds,
|
|
474
476
|
isPyth: perpInfos[j].isPyth,
|
|
475
|
-
perpFlags: perpInfos[j].perpFlags,
|
|
477
|
+
perpFlags: BigInt(perpInfos[j].perpFlags.toString()),
|
|
476
478
|
};
|
|
477
479
|
infoArr.push(info);
|
|
478
480
|
}
|
|
@@ -523,22 +525,22 @@ export default class PerpetualDataHandler {
|
|
|
523
525
|
isRunning: orig.isRunning,
|
|
524
526
|
iPerpetualCount: Number(orig.iPerpetualCount),
|
|
525
527
|
id: Number(orig.id),
|
|
526
|
-
fCeilPnLShare: ABK64x64ToFloat(
|
|
528
|
+
fCeilPnLShare: ABK64x64ToFloat(BigInt(orig.fCeilPnLShare)),
|
|
527
529
|
marginTokenDecimals: Number(orig.marginTokenDecimals),
|
|
528
530
|
iTargetPoolSizeUpdateTime: Number(orig.iTargetPoolSizeUpdateTime),
|
|
529
531
|
marginTokenAddress: orig.marginTokenAddress,
|
|
530
532
|
prevAnchor: Number(orig.prevAnchor),
|
|
531
|
-
fRedemptionRate: ABK64x64ToFloat(
|
|
533
|
+
fRedemptionRate: ABK64x64ToFloat(BigInt(orig.fRedemptionRate)),
|
|
532
534
|
shareTokenAddress: orig.shareTokenAddress,
|
|
533
|
-
fPnLparticipantsCashCC: ABK64x64ToFloat(
|
|
534
|
-
fTargetAMMFundSize: ABK64x64ToFloat(
|
|
535
|
-
fDefaultFundCashCC: ABK64x64ToFloat(
|
|
536
|
-
fTargetDFSize: ABK64x64ToFloat(
|
|
537
|
-
fBrokerCollateralLotSize: ABK64x64ToFloat(
|
|
538
|
-
prevTokenAmount: dec18ToFloat(
|
|
539
|
-
nextTokenAmount: dec18ToFloat(
|
|
540
|
-
totalSupplyShareToken: dec18ToFloat(
|
|
541
|
-
fBrokerFundCashCC: ABK64x64ToFloat(
|
|
535
|
+
fPnLparticipantsCashCC: ABK64x64ToFloat(BigInt(orig.fPnLparticipantsCashCC)),
|
|
536
|
+
fTargetAMMFundSize: ABK64x64ToFloat(BigInt(orig.fTargetAMMFundSize)),
|
|
537
|
+
fDefaultFundCashCC: ABK64x64ToFloat(BigInt(orig.fDefaultFundCashCC)),
|
|
538
|
+
fTargetDFSize: ABK64x64ToFloat(BigInt(orig.fTargetDFSize)),
|
|
539
|
+
fBrokerCollateralLotSize: ABK64x64ToFloat(BigInt(orig.fBrokerCollateralLotSize)),
|
|
540
|
+
prevTokenAmount: dec18ToFloat(BigInt(orig.prevTokenAmount)),
|
|
541
|
+
nextTokenAmount: dec18ToFloat(BigInt(orig.nextTokenAmount)),
|
|
542
|
+
totalSupplyShareToken: dec18ToFloat(BigInt(orig.totalSupplyShareToken)),
|
|
543
|
+
fBrokerFundCashCC: ABK64x64ToFloat(BigInt(orig.fBrokerFundCashCC)), // state: amount of cash in broker fund
|
|
542
544
|
};
|
|
543
545
|
p.push(v);
|
|
544
546
|
}
|
|
@@ -553,6 +555,7 @@ export default class PerpetualDataHandler {
|
|
|
553
555
|
* @returns array of PerpetualData converted into decimals
|
|
554
556
|
*/
|
|
555
557
|
static async _getPerpetuals(ids, _proxyContract, _symbolList, overrides) {
|
|
558
|
+
// TODO: can't be type safe here because proxyContract's abi is not static across chains (zkevm is the exception)
|
|
556
559
|
const rawPerps = await _proxyContract.getPerpetuals(ids, overrides || {});
|
|
557
560
|
let p = new Array();
|
|
558
561
|
for (let k = 0; k < rawPerps.length; k++) {
|
|
@@ -576,44 +579,41 @@ export default class PerpetualDataHandler {
|
|
|
576
579
|
fSigma3: ABDK29ToFloat(Number(orig.fSigma3)),
|
|
577
580
|
fRho23: ABDK29ToFloat(Number(orig.fRho23)),
|
|
578
581
|
liquidationPenaltyRateBps: Number(orig.liquidationPenaltyRateTbps) / 10,
|
|
579
|
-
currentMarkPremiumRatePrice: ABK64x64ToFloat(
|
|
582
|
+
currentMarkPremiumRatePrice: ABK64x64ToFloat(BigInt(orig.currentMarkPremiumRate.fPrice)),
|
|
580
583
|
currentMarkPremiumRateTime: Number(orig.currentMarkPremiumRate.time),
|
|
581
|
-
premiumRatesEMA: ABK64x64ToFloat(
|
|
582
|
-
fUnitAccumulatedFunding: ABK64x64ToFloat(
|
|
583
|
-
fOpenInterest: ABK64x64ToFloat(
|
|
584
|
-
fTargetAMMFundSize: ABK64x64ToFloat(
|
|
585
|
-
fCurrentTraderExposureEMA: ABK64x64ToFloat(
|
|
586
|
-
fCurrentFundingRate: ABK64x64ToFloat(
|
|
587
|
-
fLotSizeBC: ABK64x64ToFloat(
|
|
588
|
-
fReferralRebateCC: ABK64x64ToFloat(
|
|
589
|
-
fTargetDFSize: ABK64x64ToFloat(
|
|
590
|
-
fkStar: ABK64x64ToFloat(
|
|
591
|
-
fAMMTargetDD: ABK64x64ToFloat(
|
|
584
|
+
premiumRatesEMA: ABK64x64ToFloat(BigInt(orig.premiumRatesEMA)),
|
|
585
|
+
fUnitAccumulatedFunding: ABK64x64ToFloat(BigInt(orig.fUnitAccumulatedFunding)),
|
|
586
|
+
fOpenInterest: ABK64x64ToFloat(BigInt(orig.fOpenInterest)),
|
|
587
|
+
fTargetAMMFundSize: ABK64x64ToFloat(BigInt(orig.fTargetAMMFundSize)),
|
|
588
|
+
fCurrentTraderExposureEMA: ABK64x64ToFloat(BigInt(orig.fCurrentTraderExposureEMA)),
|
|
589
|
+
fCurrentFundingRate: ABK64x64ToFloat(BigInt(orig.fCurrentFundingRate)),
|
|
590
|
+
fLotSizeBC: ABK64x64ToFloat(BigInt(orig.fLotSizeBC)),
|
|
591
|
+
fReferralRebateCC: ABK64x64ToFloat(BigInt(orig.fReferralRebateCC)),
|
|
592
|
+
fTargetDFSize: ABK64x64ToFloat(BigInt(orig.fTargetDFSize)),
|
|
593
|
+
fkStar: ABK64x64ToFloat(BigInt(orig.fkStar)),
|
|
594
|
+
fAMMTargetDD: ABK64x64ToFloat(BigInt(orig.fAMMTargetDD)),
|
|
592
595
|
perpFlags: Number(orig.perpFlags?.toString()),
|
|
593
|
-
fMinimalTraderExposureEMA: ABK64x64ToFloat(
|
|
594
|
-
fMinimalAMMExposureEMA: ABK64x64ToFloat(
|
|
595
|
-
fSettlementS3PriceData: ABK64x64ToFloat(
|
|
596
|
-
fSettlementS2PriceData: ABK64x64ToFloat(
|
|
597
|
-
fTotalMarginBalance: ABK64x64ToFloat(
|
|
596
|
+
fMinimalTraderExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalTraderExposureEMA)),
|
|
597
|
+
fMinimalAMMExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalAMMExposureEMA)),
|
|
598
|
+
fSettlementS3PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS3PriceData)),
|
|
599
|
+
fSettlementS2PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS2PriceData)),
|
|
600
|
+
fTotalMarginBalance: ABK64x64ToFloat(BigInt(orig.fTotalMarginBalance)),
|
|
598
601
|
fMarkPriceEMALambda: ABK64x64ToFloat(Number(orig.fMarkPriceEMALambda)),
|
|
599
602
|
fFundingRateClamp: ABK64x64ToFloat(Number(orig.fFundingRateClamp)),
|
|
600
603
|
fMaximalTradeSizeBumpUp: ABK64x64ToFloat(Number(orig.fMaximalTradeSizeBumpUp)),
|
|
601
604
|
iLastTargetPoolSizeTime: Number(orig.iLastTargetPoolSizeTime),
|
|
602
605
|
fStressReturnS3: [
|
|
603
|
-
ABK64x64ToFloat(
|
|
604
|
-
ABK64x64ToFloat(
|
|
605
|
-
],
|
|
606
|
-
fDFLambda: [
|
|
607
|
-
ABK64x64ToFloat(BigNumber.from(orig.fDFLambda[0])),
|
|
608
|
-
ABK64x64ToFloat(BigNumber.from(orig.fDFLambda[1])),
|
|
606
|
+
ABK64x64ToFloat(BigInt(orig.fStressReturnS3[0])),
|
|
607
|
+
ABK64x64ToFloat(BigInt(orig.fStressReturnS3[1])),
|
|
609
608
|
],
|
|
609
|
+
fDFLambda: [ABK64x64ToFloat(BigInt(orig.fDFLambda[0])), ABK64x64ToFloat(BigInt(orig.fDFLambda[1]))],
|
|
610
610
|
fCurrentAMMExposureEMA: [
|
|
611
|
-
ABK64x64ToFloat(
|
|
612
|
-
ABK64x64ToFloat(
|
|
611
|
+
ABK64x64ToFloat(BigInt(orig.fCurrentAMMExposureEMA[0])),
|
|
612
|
+
ABK64x64ToFloat(BigInt(orig.fCurrentAMMExposureEMA[1])),
|
|
613
613
|
],
|
|
614
614
|
fStressReturnS2: [
|
|
615
|
-
ABK64x64ToFloat(
|
|
616
|
-
ABK64x64ToFloat(
|
|
615
|
+
ABK64x64ToFloat(BigInt(orig.fStressReturnS2[0])),
|
|
616
|
+
ABK64x64ToFloat(BigInt(orig.fStressReturnS2[1])),
|
|
617
617
|
], // parameter: negative and positive stress returns for base-quote asset
|
|
618
618
|
};
|
|
619
619
|
p.push(v);
|
|
@@ -629,9 +629,11 @@ export default class PerpetualDataHandler {
|
|
|
629
629
|
let poolMarginTokenAddr = [];
|
|
630
630
|
let oracleFactory = "";
|
|
631
631
|
while (lenReceived == len) {
|
|
632
|
-
|
|
632
|
+
const res = (await _proxyContract.getPoolStaticInfo(idxFrom, idxFrom + len - 1, overrides || {}));
|
|
633
633
|
lenReceived = res.length;
|
|
634
|
-
|
|
634
|
+
const nestedIds = res[0].map((ids) => ids.map((id) => Number(id)));
|
|
635
|
+
nestedPerpetualIDs = nestedPerpetualIDs.concat(nestedIds);
|
|
636
|
+
// TODO: this looks like a bug if num pools > 10 --- concat?
|
|
635
637
|
poolShareTokenAddr = res[1];
|
|
636
638
|
poolMarginTokenAddr = res[2];
|
|
637
639
|
oracleFactory = res[3];
|
|
@@ -651,22 +653,22 @@ export default class PerpetualDataHandler {
|
|
|
651
653
|
const idx_mark_price = 8;
|
|
652
654
|
const idx_lvg = 7;
|
|
653
655
|
const idx_s3 = 9;
|
|
654
|
-
let isEmpty = traderState[idx_notional]
|
|
656
|
+
let isEmpty = traderState[idx_notional] == 0n;
|
|
655
657
|
let cash = ABK64x64ToFloat(traderState[idx_cash]);
|
|
656
|
-
let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn =
|
|
658
|
+
let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigInt(0), side = CLOSED_SIDE, entryPrice = 0;
|
|
657
659
|
if (!isEmpty) {
|
|
658
660
|
[S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, _pxS2S3[0], symbolToPerpStaticInfo);
|
|
659
661
|
fLockedIn = traderState[idx_locked_in];
|
|
660
|
-
side = traderState[idx_notional]
|
|
661
|
-
entryPrice = ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional])
|
|
662
|
+
side = traderState[idx_notional] > 0n ? BUY_SIDE : SELL_SIDE;
|
|
663
|
+
entryPrice = Math.abs(ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional])));
|
|
662
664
|
}
|
|
663
665
|
let mgn = {
|
|
664
666
|
symbol: symbol,
|
|
665
|
-
positionNotionalBaseCCY: isEmpty ? 0 : ABK64x64ToFloat(traderState[idx_notional]
|
|
667
|
+
positionNotionalBaseCCY: isEmpty ? 0 : Math.abs(ABK64x64ToFloat(traderState[idx_notional])),
|
|
666
668
|
side: isEmpty ? CLOSED_SIDE : side,
|
|
667
669
|
entryPrice: isEmpty ? 0 : entryPrice,
|
|
668
670
|
leverage: isEmpty ? 0 : ABK64x64ToFloat(traderState[idx_lvg]),
|
|
669
|
-
markPrice: ABK64x64ToFloat(traderState[idx_mark_price]
|
|
671
|
+
markPrice: Math.abs(ABK64x64ToFloat(traderState[idx_mark_price])),
|
|
670
672
|
unrealizedPnlQuoteCCY: isEmpty ? 0 : pnl,
|
|
671
673
|
unrealizedFundingCollateralCCY: isEmpty ? 0 : unpaidFundingCC,
|
|
672
674
|
collateralCC: cash,
|
|
@@ -766,7 +768,7 @@ export default class PerpetualDataHandler {
|
|
|
766
768
|
if (overrides) {
|
|
767
769
|
({ rpcURL, ...overrides } = overrides);
|
|
768
770
|
}
|
|
769
|
-
const provider = new
|
|
771
|
+
const provider = new JsonRpcProvider(rpcURL ?? this.nodeURL, this.network, {});
|
|
770
772
|
const orderBookSC = this.getOrderBookContract(symbol).connect(provider);
|
|
771
773
|
let numOrders = await orderBookSC.orderCount(overrides || {});
|
|
772
774
|
return Number(numOrders);
|
|
@@ -802,17 +804,17 @@ export default class PerpetualDataHandler {
|
|
|
802
804
|
if (overrides) {
|
|
803
805
|
({ rpcURL, ...overrides } = overrides);
|
|
804
806
|
}
|
|
805
|
-
const provider = new
|
|
807
|
+
const provider = new JsonRpcProvider(rpcURL ?? this.nodeURL, this.network, { staticNetwork: true });
|
|
806
808
|
const orderBookSC = this.getOrderBookContract(symbol).connect(provider);
|
|
807
809
|
const multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, provider);
|
|
808
|
-
if (
|
|
810
|
+
if (startAfter == undefined) {
|
|
809
811
|
startAfter = ZERO_ORDER_ID;
|
|
810
812
|
}
|
|
811
813
|
else if (typeof startAfter === "string") {
|
|
812
814
|
startAfter = 0; // TODO: fix
|
|
813
815
|
}
|
|
814
816
|
// first get client orders (incl. dependency info)
|
|
815
|
-
let [orders, orderIds] = await orderBookSC.pollRange(startAfter,
|
|
817
|
+
let [orders, orderIds] = await orderBookSC.pollRange(startAfter, numElements, overrides || {});
|
|
816
818
|
let userFriendlyOrders = new Array();
|
|
817
819
|
let traderAddr = [];
|
|
818
820
|
let orderIdsOut = [];
|
|
@@ -825,11 +827,11 @@ export default class PerpetualDataHandler {
|
|
|
825
827
|
}
|
|
826
828
|
// then get perp orders (incl. submitted ts info)
|
|
827
829
|
const multicalls = orderIdsOut.map((id) => ({
|
|
828
|
-
target: orderBookSC.
|
|
830
|
+
target: orderBookSC.target,
|
|
829
831
|
allowFailure: true,
|
|
830
832
|
callData: orderBookSC.interface.encodeFunctionData("orderOfDigest", [id]),
|
|
831
833
|
}));
|
|
832
|
-
const encodedResults = await multicall.
|
|
834
|
+
const encodedResults = await multicall.aggregate3.staticCall(multicalls, overrides || {});
|
|
833
835
|
// order status
|
|
834
836
|
encodedResults.map((res, k) => {
|
|
835
837
|
if (res.success) {
|
|
@@ -857,7 +859,7 @@ export default class PerpetualDataHandler {
|
|
|
857
859
|
throw new Error("traderAddr, symbol and pxS2S3 should all have the same length");
|
|
858
860
|
}
|
|
859
861
|
const proxyCalls = traderAddrs.map((_addr, i) => ({
|
|
860
|
-
target: _proxyContract.
|
|
862
|
+
target: _proxyContract.target,
|
|
861
863
|
allowFailure: true,
|
|
862
864
|
callData: _proxyContract.interface.encodeFunctionData("getTraderState", [
|
|
863
865
|
PerpetualDataHandler.symbolToPerpetualId(symbols[i], symbolToPerpStaticInfo),
|
|
@@ -865,7 +867,7 @@ export default class PerpetualDataHandler {
|
|
|
865
867
|
_pxS2S3s[i].map((x) => floatToABK64x64(x)),
|
|
866
868
|
]),
|
|
867
869
|
}));
|
|
868
|
-
const encodedResults = await _multicall.
|
|
870
|
+
const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
869
871
|
const traderStates = encodedResults.map(({ success, returnData }, i) => {
|
|
870
872
|
if (!success)
|
|
871
873
|
throw new Error(`Failed to get perp info for ${symbols[i]}`);
|
|
@@ -916,7 +918,7 @@ export default class PerpetualDataHandler {
|
|
|
916
918
|
let markPrice = S2 * (1 + ABK64x64ToFloat(ammState[8]));
|
|
917
919
|
let state = {
|
|
918
920
|
id: perpId,
|
|
919
|
-
state: PERP_STATE_STR[ammState[13]
|
|
921
|
+
state: PERP_STATE_STR[Number(ammState[13])],
|
|
920
922
|
baseCurrency: ccy[0],
|
|
921
923
|
quoteCurrency: ccy[1],
|
|
922
924
|
indexPrice: S2,
|
|
@@ -956,7 +958,7 @@ export default class PerpetualDataHandler {
|
|
|
956
958
|
let position = ABK64x64ToFloat(traderState[idx_notional]);
|
|
957
959
|
let cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
|
|
958
960
|
let Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
|
|
959
|
-
let unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC]
|
|
961
|
+
let unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC] - traderState[idx_cash]);
|
|
960
962
|
let unpaidFunding = unpaidFundingCC;
|
|
961
963
|
if (perpInfo.collateralCurrencyType == CollaterlCCY.BASE) {
|
|
962
964
|
S2Liq = calculateLiquidationPriceCollateralBase(lockedInValueQC, position, cashCC, tau);
|
|
@@ -1020,39 +1022,45 @@ export default class PerpetualDataHandler {
|
|
|
1020
1022
|
}
|
|
1021
1023
|
static fromSmartContractOrder(order, symbolToPerpInfoMap) {
|
|
1022
1024
|
// find symbol of perpetual id
|
|
1023
|
-
|
|
1025
|
+
const symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, Number(order.iPerpetualId), "id");
|
|
1024
1026
|
if (symbol == undefined) {
|
|
1025
|
-
throw Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
|
|
1027
|
+
throw new Error(`Perpetual id ${order.iPerpetualId} not found. Check with marketData.exchangeInfo().`);
|
|
1026
1028
|
}
|
|
1027
|
-
|
|
1029
|
+
const side = BigInt(order.fAmount.toString()) > BigInt(0) ? BUY_SIDE : SELL_SIDE;
|
|
1028
1030
|
let limitPrice, stopPrice;
|
|
1029
|
-
|
|
1030
|
-
if (fLimitPrice
|
|
1031
|
+
const fLimitPrice = BigInt(order.fLimitPrice);
|
|
1032
|
+
if (fLimitPrice == 0n) {
|
|
1031
1033
|
limitPrice = side == BUY_SIDE ? undefined : 0;
|
|
1032
1034
|
}
|
|
1033
|
-
else if (fLimitPrice
|
|
1035
|
+
else if (fLimitPrice == MAX_64x64) {
|
|
1034
1036
|
limitPrice = side == BUY_SIDE ? Infinity : undefined;
|
|
1035
1037
|
}
|
|
1036
1038
|
else {
|
|
1037
1039
|
limitPrice = ABK64x64ToFloat(fLimitPrice);
|
|
1038
1040
|
}
|
|
1039
|
-
|
|
1040
|
-
if (fStopPrice
|
|
1041
|
+
const fStopPrice = BigInt(order.fTriggerPrice);
|
|
1042
|
+
if (fStopPrice == 0n || fStopPrice == MAX_64x64) {
|
|
1041
1043
|
stopPrice = undefined;
|
|
1042
1044
|
}
|
|
1043
1045
|
else {
|
|
1044
1046
|
stopPrice = ABK64x64ToFloat(fStopPrice);
|
|
1045
1047
|
}
|
|
1048
|
+
// adjust prices for market type
|
|
1049
|
+
const sInfo = symbolToPerpInfoMap.get(symbol);
|
|
1050
|
+
if (PerpetualDataHandler.isPredictiveMarket(sInfo)) {
|
|
1051
|
+
limitPrice = limitPrice !== undefined && limitPrice !== 0 ? priceToProb(limitPrice) : limitPrice;
|
|
1052
|
+
stopPrice = stopPrice !== undefined && stopPrice !== 0 ? priceToProb(stopPrice) : stopPrice;
|
|
1053
|
+
}
|
|
1046
1054
|
let userOrder = {
|
|
1047
1055
|
symbol: symbol,
|
|
1048
1056
|
side: side,
|
|
1049
|
-
type: PerpetualDataHandler._flagToOrderType(
|
|
1050
|
-
quantity: Math.abs(ABK64x64ToFloat(
|
|
1051
|
-
reduceOnly: containsFlag(
|
|
1057
|
+
type: PerpetualDataHandler._flagToOrderType(BigInt(order.flags), BigInt(order.fLimitPrice)),
|
|
1058
|
+
quantity: Math.abs(ABK64x64ToFloat(BigInt(order.fAmount))),
|
|
1059
|
+
reduceOnly: containsFlag(BigInt(order.flags), MASK_CLOSE_ONLY),
|
|
1052
1060
|
limitPrice: limitPrice,
|
|
1053
|
-
keepPositionLvg: containsFlag(
|
|
1061
|
+
keepPositionLvg: containsFlag(BigInt(order.flags), MASK_KEEP_POS_LEVERAGE),
|
|
1054
1062
|
brokerFeeTbps: order.brokerFeeTbps == 0 ? undefined : Number(order.brokerFeeTbps),
|
|
1055
|
-
brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr,
|
|
1063
|
+
brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr.toString(),
|
|
1056
1064
|
brokerSignature: order.brokerSignature == "0x" ? undefined : order.brokerSignature,
|
|
1057
1065
|
stopPrice: stopPrice,
|
|
1058
1066
|
leverage: Number(order.leverageTDR) / 100,
|
|
@@ -1077,7 +1085,7 @@ export default class PerpetualDataHandler {
|
|
|
1077
1085
|
PerpetualDataHandler.checkOrder(order, perpStaticInfo);
|
|
1078
1086
|
// translate order
|
|
1079
1087
|
let flags = PerpetualDataHandler._orderTypeToFlag(order);
|
|
1080
|
-
let brokerSig = order.brokerSignature == undefined ?
|
|
1088
|
+
let brokerSig = order.brokerSignature == undefined ? "0x" : order.brokerSignature;
|
|
1081
1089
|
let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
|
|
1082
1090
|
let fAmount;
|
|
1083
1091
|
if (order.side == BUY_SIDE) {
|
|
@@ -1089,20 +1097,23 @@ export default class PerpetualDataHandler {
|
|
|
1089
1097
|
else {
|
|
1090
1098
|
throw Error(`invalid side in order spec, use ${BUY_SIDE} or ${SELL_SIDE}`);
|
|
1091
1099
|
}
|
|
1100
|
+
const isPred = PerpetualDataHandler.isPredictiveMarket(perpStaticInfo.get(order.symbol));
|
|
1092
1101
|
let fLimitPrice;
|
|
1093
1102
|
if (order.limitPrice == undefined) {
|
|
1094
1103
|
// we need to set the limit price to infinity or zero for
|
|
1095
1104
|
// the trade to go through
|
|
1096
1105
|
// Also: stop orders always have limits set, so even for this case
|
|
1097
1106
|
// we set the limit to 0 or infinity
|
|
1098
|
-
fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 :
|
|
1107
|
+
fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 : BigInt(0);
|
|
1099
1108
|
}
|
|
1100
1109
|
else {
|
|
1101
|
-
fLimitPrice = floatToABK64x64(order.limitPrice);
|
|
1110
|
+
fLimitPrice = floatToABK64x64(isPred ? probToPrice(order.limitPrice) : order.limitPrice);
|
|
1102
1111
|
}
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1112
|
+
const iDeadline = order.deadline == undefined ? Date.now() / 1000 + ORDER_MAX_DURATION_SEC : order.deadline;
|
|
1113
|
+
const fTriggerPrice = order.stopPrice == undefined
|
|
1114
|
+
? BigInt(0)
|
|
1115
|
+
: floatToABK64x64(isPred ? probToPrice(order.stopPrice) : order.stopPrice);
|
|
1116
|
+
const smOrder = {
|
|
1106
1117
|
flags: flags,
|
|
1107
1118
|
iPerpetualId: perpetualId,
|
|
1108
1119
|
brokerFeeTbps: order.brokerFeeTbps == undefined ? 0 : order.brokerFeeTbps,
|
|
@@ -1184,9 +1195,10 @@ export default class PerpetualDataHandler {
|
|
|
1184
1195
|
return order;
|
|
1185
1196
|
}
|
|
1186
1197
|
static _flagToOrderType(orderFlags, orderLimitPrice) {
|
|
1187
|
-
|
|
1198
|
+
// TODO: check
|
|
1199
|
+
let flag = BigInt(orderFlags);
|
|
1188
1200
|
let isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
|
|
1189
|
-
let hasLimit =
|
|
1201
|
+
let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != MAX_64x64;
|
|
1190
1202
|
let isStop = containsFlag(flag, MASK_STOP_ORDER);
|
|
1191
1203
|
if (isStop && hasLimit) {
|
|
1192
1204
|
return ORDER_TYPE_STOP_LIMIT;
|
|
@@ -1374,13 +1386,13 @@ export default class PerpetualDataHandler {
|
|
|
1374
1386
|
return ids;
|
|
1375
1387
|
}
|
|
1376
1388
|
/**
|
|
1377
|
-
* Get the ABI of a function in a given contract
|
|
1389
|
+
* Get the ABI of a function in a given contract. Undefined if it doesn't exist.
|
|
1378
1390
|
* @param contract A contract instance, e.g. this.proxyContract
|
|
1379
1391
|
* @param functionName Name of the function whose ABI we want
|
|
1380
1392
|
* @returns Function ABI as a single JSON string
|
|
1381
1393
|
*/
|
|
1382
1394
|
static _getABIFromContract(contract, functionName) {
|
|
1383
|
-
return contract.interface.getFunction(functionName)
|
|
1395
|
+
return contract.interface.getFunction(functionName)?.format("full");
|
|
1384
1396
|
}
|
|
1385
1397
|
/**
|
|
1386
1398
|
* Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
|
|
@@ -1498,6 +1510,9 @@ export default class PerpetualDataHandler {
|
|
|
1498
1510
|
static checkOrder(order,
|
|
1499
1511
|
// traderAccount: MarginAccount,
|
|
1500
1512
|
perpStaticInfo) {
|
|
1513
|
+
if (!perpStaticInfo.has(order.symbol)) {
|
|
1514
|
+
throw new Error(`Perpetual not found for symbol ${order.symbol}`);
|
|
1515
|
+
}
|
|
1501
1516
|
// check side
|
|
1502
1517
|
if (order.side != BUY_SIDE && order.side != SELL_SIDE) {
|
|
1503
1518
|
throw Error(`order side must be ${BUY_SIDE} or ${SELL_SIDE}`);
|
|
@@ -1534,14 +1549,14 @@ export default class PerpetualDataHandler {
|
|
|
1534
1549
|
static fromClientOrderToTypeSafeOrder(order) {
|
|
1535
1550
|
return {
|
|
1536
1551
|
iPerpetualId: +order.iPerpetualId.toString(),
|
|
1537
|
-
fLimitPrice:
|
|
1552
|
+
fLimitPrice: order.fLimitPrice,
|
|
1538
1553
|
leverageTDR: +order.leverageTDR.toString(),
|
|
1539
1554
|
executionTimestamp: +order.executionTimestamp.toString(),
|
|
1540
|
-
flags: BigInt(
|
|
1555
|
+
flags: BigInt(order.flags),
|
|
1541
1556
|
iDeadline: +order.iDeadline.toString(),
|
|
1542
1557
|
brokerAddr: order.brokerAddr,
|
|
1543
|
-
fTriggerPrice:
|
|
1544
|
-
fAmount:
|
|
1558
|
+
fTriggerPrice: order.fTriggerPrice,
|
|
1559
|
+
fAmount: order.fAmount,
|
|
1545
1560
|
parentChildDigest1: order.parentChildDigest1,
|
|
1546
1561
|
traderAddr: order.traderAddr,
|
|
1547
1562
|
parentChildDigest2: order.parentChildDigest2,
|
|
@@ -1550,5 +1565,14 @@ export default class PerpetualDataHandler {
|
|
|
1550
1565
|
callbackTarget: order.callbackTarget,
|
|
1551
1566
|
};
|
|
1552
1567
|
}
|
|
1568
|
+
/**
|
|
1569
|
+
* Determines whether a given perpetual represents a predictive market
|
|
1570
|
+
* @param staticInfo Perpetual static info
|
|
1571
|
+
* @returns True if this is a predictive market
|
|
1572
|
+
*/
|
|
1573
|
+
static isPredictiveMarket(staticInfo) {
|
|
1574
|
+
// return true; // for testing
|
|
1575
|
+
return containsFlag(staticInfo.perpFlags, MASK_PREDICTIVE_MARKET);
|
|
1576
|
+
}
|
|
1553
1577
|
}
|
|
1554
1578
|
//# sourceMappingURL=perpetualDataHandler.js.map
|