@d8x/perpetuals-sdk 1.3.7 → 2.0.0-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/accountTrade.d.ts +9 -9
- package/dist/cjs/accountTrade.js +19 -17
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.d.ts +11 -12
- package/dist/cjs/brokerTool.js +7 -8
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/constants.d.ts +11 -12
- package/dist/cjs/constants.js +12 -13
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts/ERC20.d.ts +146 -171
- package/dist/cjs/contracts/IPerpetualManager.d.ts +2534 -2225
- package/dist/cjs/contracts/IPyth.d.ts +181 -184
- package/dist/cjs/contracts/LimitOrderBook.d.ts +373 -401
- package/dist/cjs/contracts/LimitOrderBookBeacon.d.ts +53 -104
- package/dist/cjs/contracts/LimitOrderBookFactory.d.ts +129 -185
- package/dist/cjs/contracts/MockTokenSwap.d.ts +109 -169
- package/dist/cjs/contracts/Multicall3.d.ts +147 -211
- package/dist/cjs/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
- package/dist/cjs/contracts/OracleFactory.d.ts +258 -238
- package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +1099 -891
- package/dist/cjs/contracts/RedStoneAbi.d.ts +369 -488
- package/dist/cjs/contracts/ShareToken.d.ts +232 -285
- package/dist/cjs/contracts/common.d.ts +40 -11
- package/dist/cjs/contracts/factories/ERC20__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/ERC20__factory.js +3 -3
- package/dist/cjs/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +3 -3
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/IPyth__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/IPyth__factory.js +3 -3
- package/dist/cjs/contracts/factories/IPyth__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js +3 -3
- package/dist/cjs/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js +3 -3
- package/dist/cjs/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/Multicall3__factory.d.ts +11 -9
- package/dist/cjs/contracts/factories/Multicall3__factory.js +7 -10
- package/dist/cjs/contracts/factories/Multicall3__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js +3 -3
- package/dist/cjs/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/OracleFactory__factory.js +3 -3
- package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +3 -3
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.js +3 -3
- package/dist/cjs/contracts/factories/RedStoneAbi__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/ShareToken__factory.d.ts +2 -3
- package/dist/cjs/contracts/factories/ShareToken__factory.js +3 -3
- package/dist/cjs/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +16 -16
- package/dist/cjs/d8XMath.js +48 -49
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.d.ts +8 -8
- package/dist/cjs/liquidatorTool.js +5 -7
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/liquidityProviderTool.d.ts +4 -5
- package/dist/cjs/liquidityProviderTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +27 -28
- package/dist/cjs/marketData.js +65 -69
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +35 -37
- package/dist/cjs/onChainPxFeed.d.ts +2 -2
- package/dist/cjs/onChainPxFeed.js +3 -3
- package/dist/cjs/onChainPxFeed.js.map +1 -1
- package/dist/cjs/onChainPxFeedAngle.d.ts +2 -2
- package/dist/cjs/onChainPxFeedAngle.js +4 -5
- package/dist/cjs/onChainPxFeedAngle.js.map +1 -1
- package/dist/cjs/onChainPxFeedRedStone.js +2 -2
- package/dist/cjs/onChainPxFeedRedStone.js.map +1 -1
- package/dist/cjs/orderExecutorTool.d.ts +7 -9
- package/dist/cjs/orderExecutorTool.js +52 -62
- package/dist/cjs/orderExecutorTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +38 -35
- package/dist/cjs/perpetualDataHandler.js +173 -167
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.d.ts +4 -5
- package/dist/cjs/perpetualEventHandler.js +2 -2
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/priceFeeds.js +2 -3
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/referralCodeSigner.d.ts +1 -1
- package/dist/cjs/referralCodeSigner.js +12 -16
- package/dist/cjs/referralCodeSigner.js.map +1 -1
- package/dist/cjs/traderDigests.d.ts +2 -1
- package/dist/cjs/traderDigests.js +9 -11
- package/dist/cjs/traderDigests.js.map +1 -1
- package/dist/cjs/traderInterface.d.ts +8 -9
- package/dist/cjs/traderInterface.js +26 -23
- package/dist/cjs/traderInterface.js.map +1 -1
- package/dist/cjs/utils.d.ts +2 -3
- package/dist/cjs/utils.js +1 -2
- package/dist/cjs/utils.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/writeAccessHandler.d.ts +7 -9
- package/dist/cjs/writeAccessHandler.js +13 -16
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/accountTrade.d.ts +9 -9
- package/dist/esm/accountTrade.js +19 -17
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.d.ts +11 -12
- package/dist/esm/brokerTool.js +2 -3
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/constants.d.ts +11 -12
- package/dist/esm/constants.js +12 -13
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/contracts/ERC20.d.ts +146 -171
- package/dist/esm/contracts/IPerpetualManager.d.ts +2534 -2225
- package/dist/esm/contracts/IPyth.d.ts +181 -184
- package/dist/esm/contracts/LimitOrderBook.d.ts +373 -401
- package/dist/esm/contracts/LimitOrderBookBeacon.d.ts +53 -104
- package/dist/esm/contracts/LimitOrderBookFactory.d.ts +129 -185
- package/dist/esm/contracts/MockTokenSwap.d.ts +109 -169
- package/dist/esm/contracts/Multicall3.d.ts +147 -211
- package/dist/esm/contracts/OnDemandOracleUpgradeable.d.ts +342 -399
- package/dist/esm/contracts/OracleFactory.d.ts +258 -238
- package/dist/esm/contracts/PerpetualManagerProxy.d.ts +1099 -891
- package/dist/esm/contracts/RedStoneAbi.d.ts +369 -488
- package/dist/esm/contracts/ShareToken.d.ts +232 -285
- package/dist/esm/contracts/common.d.ts +40 -11
- package/dist/esm/contracts/factories/ERC20__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/ERC20__factory.js +4 -4
- package/dist/esm/contracts/factories/ERC20__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +4 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/IPyth__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/IPyth__factory.js +4 -4
- package/dist/esm/contracts/factories/IPyth__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBookBeacon__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBookFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/LimitOrderBook__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js +4 -4
- package/dist/esm/contracts/factories/LimitOrderBook__factory.js.map +1 -1
- package/dist/esm/contracts/factories/MockTokenSwap__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js +4 -4
- package/dist/esm/contracts/factories/MockTokenSwap__factory.js.map +1 -1
- package/dist/esm/contracts/factories/Multicall3__factory.d.ts +11 -9
- package/dist/esm/contracts/factories/Multicall3__factory.js +8 -11
- package/dist/esm/contracts/factories/Multicall3__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js +4 -4
- package/dist/esm/contracts/factories/OnDemandOracleUpgradeable__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/OracleFactory__factory.js +4 -4
- package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +4 -4
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/esm/contracts/factories/RedStoneAbi__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/RedStoneAbi__factory.js +4 -4
- package/dist/esm/contracts/factories/RedStoneAbi__factory.js.map +1 -1
- package/dist/esm/contracts/factories/ShareToken__factory.d.ts +2 -3
- package/dist/esm/contracts/factories/ShareToken__factory.js +4 -4
- package/dist/esm/contracts/factories/ShareToken__factory.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +16 -16
- package/dist/esm/d8XMath.js +48 -49
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.d.ts +8 -8
- package/dist/esm/liquidatorTool.js +5 -7
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/liquidityProviderTool.d.ts +4 -5
- package/dist/esm/liquidityProviderTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +27 -28
- package/dist/esm/marketData.js +55 -59
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +35 -37
- package/dist/esm/onChainPxFeed.d.ts +2 -2
- package/dist/esm/onChainPxFeed.js +3 -3
- package/dist/esm/onChainPxFeed.js.map +1 -1
- package/dist/esm/onChainPxFeedAngle.d.ts +2 -2
- package/dist/esm/onChainPxFeedAngle.js +2 -3
- package/dist/esm/onChainPxFeedAngle.js.map +1 -1
- package/dist/esm/onChainPxFeedRedStone.js +1 -1
- package/dist/esm/onChainPxFeedRedStone.js.map +1 -1
- package/dist/esm/orderExecutorTool.d.ts +7 -9
- package/dist/esm/orderExecutorTool.js +38 -48
- package/dist/esm/orderExecutorTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +38 -35
- package/dist/esm/perpetualDataHandler.js +114 -108
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.d.ts +4 -5
- package/dist/esm/perpetualEventHandler.js +2 -2
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/priceFeeds.js +2 -3
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/referralCodeSigner.d.ts +1 -1
- package/dist/esm/referralCodeSigner.js +6 -10
- package/dist/esm/referralCodeSigner.js.map +1 -1
- package/dist/esm/traderDigests.d.ts +2 -1
- package/dist/esm/traderDigests.js +2 -4
- package/dist/esm/traderDigests.js.map +1 -1
- package/dist/esm/traderInterface.d.ts +8 -9
- package/dist/esm/traderInterface.js +26 -23
- package/dist/esm/traderInterface.js.map +1 -1
- package/dist/esm/utils.d.ts +2 -3
- package/dist/esm/utils.js +1 -2
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/writeAccessHandler.d.ts +7 -9
- package/dist/esm/writeAccessHandler.js +5 -8
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/package.json +7 -17
- package/src/accountTrade.ts +32 -34
- package/src/brokerTool.ts +17 -20
- package/src/constants.ts +12 -13
- package/src/contracts/ERC20.ts +236 -350
- package/src/contracts/IPerpetualManager.ts +3359 -5050
- package/src/contracts/IPyth.ts +272 -409
- package/src/contracts/LimitOrderBook.ts +503 -779
- package/src/contracts/LimitOrderBookBeacon.ts +123 -171
- package/src/contracts/LimitOrderBookFactory.ts +263 -332
- package/src/contracts/MockTokenSwap.ts +237 -275
- package/src/contracts/Multicall3.ts +208 -374
- package/src/contracts/OnDemandOracleUpgradeable.ts +569 -782
- package/src/contracts/OracleFactory.ts +410 -538
- package/src/contracts/PerpetualManagerProxy.ts +1898 -1426
- package/src/contracts/RedStoneAbi.ts +486 -986
- package/src/contracts/ShareToken.ts +376 -557
- package/src/contracts/common.ts +108 -21
- package/src/contracts/factories/ERC20__factory.ts +4 -5
- package/src/contracts/factories/IPerpetualManager__factory.ts +4 -5
- package/src/contracts/factories/IPyth__factory.ts +4 -5
- package/src/contracts/factories/LimitOrderBookBeacon__factory.ts +5 -6
- package/src/contracts/factories/LimitOrderBookFactory__factory.ts +5 -6
- package/src/contracts/factories/LimitOrderBook__factory.ts +4 -5
- package/src/contracts/factories/MockTokenSwap__factory.ts +4 -5
- package/src/contracts/factories/Multicall3__factory.ts +21 -19
- package/src/contracts/factories/OnDemandOracleUpgradeable__factory.ts +5 -6
- package/src/contracts/factories/OracleFactory__factory.ts +4 -5
- package/src/contracts/factories/PerpetualManagerProxy__factory.ts +5 -6
- package/src/contracts/factories/RedStoneAbi__factory.ts +4 -8
- package/src/contracts/factories/ShareToken__factory.ts +4 -8
- package/src/d8XMath.ts +57 -57
- package/src/liquidatorTool.ts +12 -15
- package/src/liquidityProviderTool.ts +7 -5
- package/src/marketData.ts +110 -121
- package/src/nodeSDKTypes.ts +51 -38
- package/src/onChainPxFeed.ts +4 -4
- package/src/onChainPxFeedAngle.ts +5 -7
- package/src/onChainPxFeedRedStone.ts +1 -3
- package/src/orderExecutorTool.ts +100 -108
- package/src/perpetualDataHandler.ts +181 -167
- package/src/perpetualEventHandler.ts +16 -17
- package/src/priceFeeds.ts +2 -3
- package/src/referralCodeSigner.ts +6 -10
- package/src/traderDigests.ts +8 -5
- package/src/traderInterface.ts +45 -31
- package/src/utils.ts +3 -4
- package/src/version.ts +1 -1
- package/src/writeAccessHandler.ts +26 -17
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { AddressZero } from "@ethersproject/constants";
|
|
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";
|
|
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_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";
|
|
9
4
|
import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, } from "./d8XMath";
|
|
10
5
|
import PriceFeeds from "./priceFeeds";
|
|
11
6
|
import { combineFlags, containsFlag, contractSymbolToSymbol, loadConfigAbis, symbol4BToLongSymbol, fromBytes4, to4Chars, } from "./utils";
|
|
@@ -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,12 +462,12 @@ 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),
|
|
@@ -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,24 +1022,24 @@ export default class PerpetualDataHandler {
|
|
|
1020
1022
|
}
|
|
1021
1023
|
static fromSmartContractOrder(order, symbolToPerpInfoMap) {
|
|
1022
1024
|
// find symbol of perpetual id
|
|
1023
|
-
let symbol = PerpetualDataHandler._getByValue(symbolToPerpInfoMap, order.iPerpetualId, "id");
|
|
1025
|
+
let 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
|
-
let side = order.fAmount >
|
|
1029
|
+
let side = order.fAmount > BigInt(0) ? BUY_SIDE : SELL_SIDE;
|
|
1028
1030
|
let limitPrice, stopPrice;
|
|
1029
|
-
let fLimitPrice =
|
|
1030
|
-
if (fLimitPrice
|
|
1031
|
+
let 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
|
-
let fStopPrice =
|
|
1040
|
-
if (fStopPrice
|
|
1041
|
+
let fStopPrice = BigInt(order.fTriggerPrice);
|
|
1042
|
+
if (fStopPrice == 0n || fStopPrice == MAX_64x64) {
|
|
1041
1043
|
stopPrice = undefined;
|
|
1042
1044
|
}
|
|
1043
1045
|
else {
|
|
@@ -1046,13 +1048,13 @@ export default class PerpetualDataHandler {
|
|
|
1046
1048
|
let userOrder = {
|
|
1047
1049
|
symbol: symbol,
|
|
1048
1050
|
side: side,
|
|
1049
|
-
type: PerpetualDataHandler._flagToOrderType(
|
|
1050
|
-
quantity: Math.abs(ABK64x64ToFloat(
|
|
1051
|
-
reduceOnly: containsFlag(
|
|
1051
|
+
type: PerpetualDataHandler._flagToOrderType(BigInt(order.flags), BigInt(order.fLimitPrice)),
|
|
1052
|
+
quantity: Math.abs(ABK64x64ToFloat(BigInt(order.fAmount))),
|
|
1053
|
+
reduceOnly: containsFlag(BigInt(order.flags), MASK_CLOSE_ONLY),
|
|
1052
1054
|
limitPrice: limitPrice,
|
|
1053
|
-
keepPositionLvg: containsFlag(
|
|
1055
|
+
keepPositionLvg: containsFlag(BigInt(order.flags), MASK_KEEP_POS_LEVERAGE),
|
|
1054
1056
|
brokerFeeTbps: order.brokerFeeTbps == 0 ? undefined : Number(order.brokerFeeTbps),
|
|
1055
|
-
brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr,
|
|
1057
|
+
brokerAddr: order.brokerAddr == ZERO_ADDRESS ? undefined : order.brokerAddr.toString(),
|
|
1056
1058
|
brokerSignature: order.brokerSignature == "0x" ? undefined : order.brokerSignature,
|
|
1057
1059
|
stopPrice: stopPrice,
|
|
1058
1060
|
leverage: Number(order.leverageTDR) / 100,
|
|
@@ -1077,7 +1079,7 @@ export default class PerpetualDataHandler {
|
|
|
1077
1079
|
PerpetualDataHandler.checkOrder(order, perpStaticInfo);
|
|
1078
1080
|
// translate order
|
|
1079
1081
|
let flags = PerpetualDataHandler._orderTypeToFlag(order);
|
|
1080
|
-
let brokerSig = order.brokerSignature == undefined ?
|
|
1082
|
+
let brokerSig = order.brokerSignature == undefined ? "0x" : order.brokerSignature;
|
|
1081
1083
|
let perpetualId = PerpetualDataHandler.symbolToPerpetualId(order.symbol, perpStaticInfo);
|
|
1082
1084
|
let fAmount;
|
|
1083
1085
|
if (order.side == BUY_SIDE) {
|
|
@@ -1095,13 +1097,13 @@ export default class PerpetualDataHandler {
|
|
|
1095
1097
|
// the trade to go through
|
|
1096
1098
|
// Also: stop orders always have limits set, so even for this case
|
|
1097
1099
|
// we set the limit to 0 or infinity
|
|
1098
|
-
fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 :
|
|
1100
|
+
fLimitPrice = order.side == BUY_SIDE ? MAX_64x64 : BigInt(0);
|
|
1099
1101
|
}
|
|
1100
1102
|
else {
|
|
1101
1103
|
fLimitPrice = floatToABK64x64(order.limitPrice);
|
|
1102
1104
|
}
|
|
1103
1105
|
let iDeadline = order.deadline == undefined ? Date.now() / 1000 + ORDER_MAX_DURATION_SEC : order.deadline;
|
|
1104
|
-
let fTriggerPrice = order.stopPrice == undefined ?
|
|
1106
|
+
let fTriggerPrice = order.stopPrice == undefined ? BigInt(0) : floatToABK64x64(order.stopPrice);
|
|
1105
1107
|
let smOrder = {
|
|
1106
1108
|
flags: flags,
|
|
1107
1109
|
iPerpetualId: perpetualId,
|
|
@@ -1184,9 +1186,10 @@ export default class PerpetualDataHandler {
|
|
|
1184
1186
|
return order;
|
|
1185
1187
|
}
|
|
1186
1188
|
static _flagToOrderType(orderFlags, orderLimitPrice) {
|
|
1187
|
-
|
|
1189
|
+
// TODO: check
|
|
1190
|
+
let flag = BigInt(orderFlags);
|
|
1188
1191
|
let isLimit = containsFlag(flag, MASK_LIMIT_ORDER);
|
|
1189
|
-
let hasLimit =
|
|
1192
|
+
let hasLimit = BigInt(orderLimitPrice) != 0n || BigInt(orderLimitPrice) != MAX_64x64;
|
|
1190
1193
|
let isStop = containsFlag(flag, MASK_STOP_ORDER);
|
|
1191
1194
|
if (isStop && hasLimit) {
|
|
1192
1195
|
return ORDER_TYPE_STOP_LIMIT;
|
|
@@ -1374,13 +1377,13 @@ export default class PerpetualDataHandler {
|
|
|
1374
1377
|
return ids;
|
|
1375
1378
|
}
|
|
1376
1379
|
/**
|
|
1377
|
-
* Get the ABI of a function in a given contract
|
|
1380
|
+
* Get the ABI of a function in a given contract. Undefined if it doesn't exist.
|
|
1378
1381
|
* @param contract A contract instance, e.g. this.proxyContract
|
|
1379
1382
|
* @param functionName Name of the function whose ABI we want
|
|
1380
1383
|
* @returns Function ABI as a single JSON string
|
|
1381
1384
|
*/
|
|
1382
1385
|
static _getABIFromContract(contract, functionName) {
|
|
1383
|
-
return contract.interface.getFunction(functionName)
|
|
1386
|
+
return contract.interface.getFunction(functionName)?.format("full");
|
|
1384
1387
|
}
|
|
1385
1388
|
/**
|
|
1386
1389
|
* Gets the pool index (starting at 0 in exchangeInfo, not ID!) corresponding to a given symbol.
|
|
@@ -1498,6 +1501,9 @@ export default class PerpetualDataHandler {
|
|
|
1498
1501
|
static checkOrder(order,
|
|
1499
1502
|
// traderAccount: MarginAccount,
|
|
1500
1503
|
perpStaticInfo) {
|
|
1504
|
+
if (!perpStaticInfo.has(order.symbol)) {
|
|
1505
|
+
throw new Error(`Perpetual not found for symbol ${order.symbol}`);
|
|
1506
|
+
}
|
|
1501
1507
|
// check side
|
|
1502
1508
|
if (order.side != BUY_SIDE && order.side != SELL_SIDE) {
|
|
1503
1509
|
throw Error(`order side must be ${BUY_SIDE} or ${SELL_SIDE}`);
|
|
@@ -1534,14 +1540,14 @@ export default class PerpetualDataHandler {
|
|
|
1534
1540
|
static fromClientOrderToTypeSafeOrder(order) {
|
|
1535
1541
|
return {
|
|
1536
1542
|
iPerpetualId: +order.iPerpetualId.toString(),
|
|
1537
|
-
fLimitPrice:
|
|
1543
|
+
fLimitPrice: order.fLimitPrice,
|
|
1538
1544
|
leverageTDR: +order.leverageTDR.toString(),
|
|
1539
1545
|
executionTimestamp: +order.executionTimestamp.toString(),
|
|
1540
|
-
flags: BigInt(
|
|
1546
|
+
flags: BigInt(order.flags),
|
|
1541
1547
|
iDeadline: +order.iDeadline.toString(),
|
|
1542
1548
|
brokerAddr: order.brokerAddr,
|
|
1543
|
-
fTriggerPrice:
|
|
1544
|
-
fAmount:
|
|
1549
|
+
fTriggerPrice: order.fTriggerPrice,
|
|
1550
|
+
fAmount: order.fAmount,
|
|
1545
1551
|
parentChildDigest1: order.parentChildDigest1,
|
|
1546
1552
|
traderAddr: order.traderAddr,
|
|
1547
1553
|
parentChildDigest2: order.parentChildDigest2,
|