@d8x/perpetuals-sdk 2.0.13-alpha → 2.1.1-alpha2
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/abi/IPerpetualManager.json +154 -4
- package/dist/cjs/abi/OracleFactory.json +94 -25
- package/dist/cjs/abi/PerpetualManagerProxy.json +212 -2
- package/dist/cjs/accountTrade.d.ts +3 -3
- package/dist/cjs/accountTrade.js +1 -1
- package/dist/cjs/accountTrade.js.map +1 -1
- package/dist/cjs/brokerTool.d.ts +5 -1
- package/dist/cjs/brokerTool.js +20 -7
- package/dist/cjs/brokerTool.js.map +1 -1
- package/dist/cjs/config/defaultConfig.json +0 -12
- package/dist/cjs/config/priceFeedConfig.json +1 -19
- package/dist/cjs/constants.d.ts +0 -1
- package/dist/cjs/constants.js +2 -3
- package/dist/cjs/constants.js.map +1 -1
- package/dist/cjs/contracts/IPerpetualManager.d.ts +93 -13
- package/dist/cjs/contracts/OracleFactory.d.ts +69 -20
- package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +109 -4
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +118 -4
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +154 -4
- package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/OracleFactory__factory.d.ts +75 -20
- package/dist/cjs/contracts/factories/OracleFactory__factory.js +94 -25
- package/dist/cjs/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
- package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/cjs/d8XMath.d.ts +59 -1
- package/dist/cjs/d8XMath.js +259 -3
- package/dist/cjs/d8XMath.js.map +1 -1
- package/dist/cjs/liquidatorTool.d.ts +1 -0
- package/dist/cjs/liquidatorTool.js +24 -7
- package/dist/cjs/liquidatorTool.js.map +1 -1
- package/dist/cjs/marketData.d.ts +45 -23
- package/dist/cjs/marketData.js +292 -197
- package/dist/cjs/marketData.js.map +1 -1
- package/dist/cjs/nodeSDKTypes.d.ts +24 -1
- package/dist/cjs/nodeSDKTypes.js.map +1 -1
- package/dist/cjs/orderExecutorTool.d.ts +3 -3
- package/dist/cjs/orderExecutorTool.js +38 -13
- package/dist/cjs/orderExecutorTool.js.map +1 -1
- package/dist/cjs/perpetualDataHandler.d.ts +28 -17
- package/dist/cjs/perpetualDataHandler.js +71 -45
- package/dist/cjs/perpetualDataHandler.js.map +1 -1
- package/dist/cjs/perpetualEventHandler.d.ts +1 -1
- package/dist/cjs/perpetualEventHandler.js +6 -7
- package/dist/cjs/perpetualEventHandler.js.map +1 -1
- package/dist/cjs/polyMktsPxFeed.d.ts +5 -3
- package/dist/cjs/polyMktsPxFeed.js +34 -2
- package/dist/cjs/polyMktsPxFeed.js.map +1 -1
- package/dist/cjs/priceFeeds.d.ts +6 -7
- package/dist/cjs/priceFeeds.js +36 -14
- package/dist/cjs/priceFeeds.js.map +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/writeAccessHandler.js +1 -1
- package/dist/cjs/writeAccessHandler.js.map +1 -1
- package/dist/esm/abi/IPerpetualManager.json +154 -4
- package/dist/esm/abi/OracleFactory.json +94 -25
- package/dist/esm/abi/PerpetualManagerProxy.json +212 -2
- package/dist/esm/accountTrade.d.ts +3 -3
- package/dist/esm/accountTrade.js +1 -1
- package/dist/esm/accountTrade.js.map +1 -1
- package/dist/esm/brokerTool.d.ts +5 -1
- package/dist/esm/brokerTool.js +21 -8
- package/dist/esm/brokerTool.js.map +1 -1
- package/dist/esm/config/defaultConfig.json +0 -12
- package/dist/esm/config/priceFeedConfig.json +1 -19
- package/dist/esm/constants.d.ts +0 -1
- package/dist/esm/constants.js +1 -2
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/contracts/IPerpetualManager.d.ts +93 -13
- package/dist/esm/contracts/OracleFactory.d.ts +69 -20
- package/dist/esm/contracts/PerpetualManagerProxy.d.ts +109 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +118 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js +154 -4
- package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
- package/dist/esm/contracts/factories/OracleFactory__factory.d.ts +75 -20
- package/dist/esm/contracts/factories/OracleFactory__factory.js +94 -25
- package/dist/esm/contracts/factories/OracleFactory__factory.js.map +1 -1
- package/dist/{cjs/contracts/factories/MockToken__factory.d.ts → esm/contracts/factories/PerpStorage__factory.d.ts} +115 -128
- package/dist/esm/contracts/factories/{MockToken__factory.js → PerpStorage__factory.js} +128 -139
- package/dist/esm/contracts/factories/PerpStorage__factory.js.map +1 -0
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +159 -2
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +212 -2
- package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js.map +1 -1
- package/dist/esm/d8XMath.d.ts +59 -1
- package/dist/esm/d8XMath.js +251 -2
- package/dist/esm/d8XMath.js.map +1 -1
- package/dist/esm/liquidatorTool.d.ts +1 -0
- package/dist/esm/liquidatorTool.js +25 -8
- package/dist/esm/liquidatorTool.js.map +1 -1
- package/dist/esm/marketData.d.ts +45 -23
- package/dist/esm/marketData.js +295 -200
- package/dist/esm/marketData.js.map +1 -1
- package/dist/esm/nodeSDKTypes.d.ts +24 -1
- package/dist/esm/nodeSDKTypes.js.map +1 -1
- package/dist/esm/orderExecutorTool.d.ts +3 -3
- package/dist/esm/orderExecutorTool.js +38 -13
- package/dist/esm/orderExecutorTool.js.map +1 -1
- package/dist/esm/perpetualDataHandler.d.ts +28 -17
- package/dist/esm/perpetualDataHandler.js +74 -48
- package/dist/esm/perpetualDataHandler.js.map +1 -1
- package/dist/esm/perpetualEventHandler.d.ts +1 -1
- package/dist/esm/perpetualEventHandler.js +6 -7
- package/dist/esm/perpetualEventHandler.js.map +1 -1
- package/dist/esm/polyMktsPxFeed.d.ts +5 -3
- package/dist/esm/polyMktsPxFeed.js +34 -2
- package/dist/esm/polyMktsPxFeed.js.map +1 -1
- package/dist/esm/priceFeeds.d.ts +6 -7
- package/dist/esm/priceFeeds.js +36 -14
- package/dist/esm/priceFeeds.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/writeAccessHandler.js +3 -3
- package/dist/esm/writeAccessHandler.js.map +1 -1
- package/doc/brokerTool.md +3 -1
- package/doc/d8x-perpetuals-sdk.md +804 -132
- package/doc/marketData.md +813 -0
- package/doc/perpetualDataHandler.md +76 -7
- package/package.json +1 -1
- package/src/abi/IPerpetualManager.json +154 -4
- package/src/abi/OracleFactory.json +523 -454
- package/src/abi/PerpetualManagerProxy.json +1596 -1386
- package/src/accountTrade.ts +3 -3
- package/src/brokerTool.ts +22 -8
- package/src/config/defaultConfig.json +0 -13
- package/src/config/priceFeedConfig.json +1 -19
- package/src/constants.ts +1 -2
- package/src/contracts/IPerpetualManager.ts +140 -10
- package/src/contracts/OracleFactory.ts +100 -26
- package/src/contracts/PerpetualManagerProxy.ts +192 -3
- package/src/contracts/factories/IPerpetualManager__factory.ts +154 -4
- package/src/contracts/factories/OracleFactory__factory.ts +94 -25
- package/src/contracts/factories/PerpetualManagerProxy__factory.ts +212 -2
- package/src/d8XMath.ts +327 -2
- package/src/liquidatorTool.ts +29 -14
- package/src/marketData.ts +448 -250
- package/src/nodeSDKTypes.ts +30 -1
- package/src/orderExecutorTool.ts +48 -20
- package/src/perpetualDataHandler.ts +108 -55
- package/src/perpetualEventHandler.ts +6 -7
- package/src/polyMktsPxFeed.ts +40 -4
- package/src/priceFeeds.ts +41 -17
- package/src/version.ts +1 -1
- package/src/writeAccessHandler.ts +2 -2
- package/dist/cjs/abi/BeaconProxy.json +0 -71
- package/dist/cjs/abi/Maintainer.json +0 -774
- package/dist/cjs/abi/MockToken.json +0 -347
- package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
- package/dist/cjs/abi/WeETH.json +0 -310
- package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
- package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
- package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
- package/dist/cjs/contracts/BeaconProxy.js +0 -3
- package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
- package/dist/cjs/contracts/Maintainer.d.ts +0 -799
- package/dist/cjs/contracts/Maintainer.js +0 -3
- package/dist/cjs/contracts/Maintainer.js.map +0 -1
- package/dist/cjs/contracts/MockToken.d.ts +0 -263
- package/dist/cjs/contracts/MockToken.js +0 -3
- package/dist/cjs/contracts/MockToken.js.map +0 -1
- package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
- package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
- package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
- package/dist/cjs/contracts/WeETH.d.ts +0 -503
- package/dist/cjs/contracts/WeETH.js +0 -3
- package/dist/cjs/contracts/WeETH.js.map +0 -1
- package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
- package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
- package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
- package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
- package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
- package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
- package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
- package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
- package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
- package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
- package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
- package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
- package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
- package/dist/cjs/contracts/factories/lean0/index.js +0 -15
- package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
- package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
- package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
- package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
- package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
- package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
- package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
- package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
- package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
- package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
- package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
- package/dist/cjs/contracts/lean0/index.d.ts +0 -4
- package/dist/cjs/contracts/lean0/index.js +0 -3
- package/dist/cjs/contracts/lean0/index.js.map +0 -1
- package/dist/esm/abi/BeaconProxy.json +0 -71
- package/dist/esm/abi/Maintainer.json +0 -774
- package/dist/esm/abi/MockToken.json +0 -347
- package/dist/esm/abi/UUPSUpgradeable.json +0 -104
- package/dist/esm/abi/WeETH.json +0 -310
- package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
- package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
- package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
- package/dist/esm/abi/lean0/ShareToken.json +0 -438
- package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
- package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
- package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
- package/dist/esm/contracts/BeaconProxy.js +0 -2
- package/dist/esm/contracts/BeaconProxy.js.map +0 -1
- package/dist/esm/contracts/Maintainer.d.ts +0 -799
- package/dist/esm/contracts/Maintainer.js +0 -2
- package/dist/esm/contracts/Maintainer.js.map +0 -1
- package/dist/esm/contracts/MockToken.d.ts +0 -263
- package/dist/esm/contracts/MockToken.js +0 -2
- package/dist/esm/contracts/MockToken.js.map +0 -1
- package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
- package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
- package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
- package/dist/esm/contracts/WeETH.d.ts +0 -503
- package/dist/esm/contracts/WeETH.js +0 -2
- package/dist/esm/contracts/WeETH.js.map +0 -1
- package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
- package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
- package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
- package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
- package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
- package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
- package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
- package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
- package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
- package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
- package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
- package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
- package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
- package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
- package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
- package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
- package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
- package/dist/esm/contracts/factories/lean0/index.js +0 -8
- package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
- package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
- package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
- package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
- package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
- package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
- package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
- package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
- package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
- package/dist/esm/contracts/lean0/ShareToken.js +0 -2
- package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
- package/dist/esm/contracts/lean0/index.d.ts +0 -4
- package/dist/esm/contracts/lean0/index.js +0 -2
- package/dist/esm/contracts/lean0/index.js.map +0 -1
- package/src/abi-zkevm/IPerpetualManager.json +0 -5366
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { BaseContract, Contract, Interface, Network, Overrides, Provider, Signer } from "ethers";
|
|
2
2
|
import { LimitOrderBook, LimitOrderBookFactory, Multicall3 } from "./contracts";
|
|
3
|
+
import { IPerpetualManager } from "./contracts/IPerpetualManager";
|
|
3
4
|
import { IClientOrder, IPerpetualOrder } from "./contracts/LimitOrderBook";
|
|
4
|
-
import { TypeSafeOrder, type ClientOrder, type MarginAccount, type NodeSDKConfig, type Order, type PerpetualState, type PerpetualStaticInfo, type PoolStaticInfo, type PriceFeedSubmission, type SmartContractOrder, type PerpetualData, LiquidityPoolData, SettlementConfig } from "./nodeSDKTypes";
|
|
5
|
+
import { TypeSafeOrder, type ClientOrder, type MarginAccount, type NodeSDKConfig, type Order, type PerpetualState, type PerpetualStaticInfo, type PoolStaticInfo, type PriceFeedSubmission, type SmartContractOrder, type PerpetualData, LiquidityPoolData, SettlementConfig, IdxPriceInfo } from "./nodeSDKTypes";
|
|
5
6
|
import PriceFeeds from "./priceFeeds";
|
|
6
7
|
/**
|
|
7
8
|
* Parent class for MarketData and WriteAccessHandler that handles
|
|
@@ -18,7 +19,7 @@ export default class PerpetualDataHandler {
|
|
|
18
19
|
protected symbolToTokenAddrMap: Map<string, string>;
|
|
19
20
|
chainId: bigint;
|
|
20
21
|
network: Network;
|
|
21
|
-
protected proxyContract:
|
|
22
|
+
protected proxyContract: IPerpetualManager | null;
|
|
22
23
|
protected proxyABI: Interface;
|
|
23
24
|
protected proxyAddr: string;
|
|
24
25
|
protected oraclefactoryAddr: string | undefined;
|
|
@@ -176,7 +177,7 @@ export default class PerpetualDataHandler {
|
|
|
176
177
|
* @param {Map<string, string>} symbolList mapping of symbols to convert long-format <-> blockchain-format
|
|
177
178
|
* @returns array with PerpetualStaticInfo for each perpetual
|
|
178
179
|
*/
|
|
179
|
-
static getPerpetualStaticInfo(_proxyContract:
|
|
180
|
+
static getPerpetualStaticInfo(_proxyContract: IPerpetualManager, nestedPerpetualIDs: Array<Array<number>>, symbolList: Map<string, string>, overrides?: Overrides): Promise<Array<PerpetualStaticInfo>>;
|
|
180
181
|
/**
|
|
181
182
|
* Breaks up an array of nested arrays into chunks of a specified size.
|
|
182
183
|
* @param {number} chunkSize The size of each chunk.
|
|
@@ -192,7 +193,7 @@ export default class PerpetualDataHandler {
|
|
|
192
193
|
* @param overrides optional
|
|
193
194
|
* @returns array of PerpetualData converted into decimals
|
|
194
195
|
*/
|
|
195
|
-
static _getLiquidityPools(fromIdx: number, toIdx: number, _proxyContract:
|
|
196
|
+
static _getLiquidityPools(fromIdx: number, toIdx: number, _proxyContract: IPerpetualManager, _symbolList: Map<string, string>, overrides?: Overrides): Promise<LiquidityPoolData[]>;
|
|
196
197
|
/**
|
|
197
198
|
* Query perpetuals
|
|
198
199
|
* @param ids perpetual ids
|
|
@@ -201,25 +202,25 @@ export default class PerpetualDataHandler {
|
|
|
201
202
|
* @param overrides optional
|
|
202
203
|
* @returns array of PerpetualData converted into decimals
|
|
203
204
|
*/
|
|
204
|
-
static _getPerpetuals(ids: number[], _proxyContract:
|
|
205
|
-
static getPoolStaticInfo(_proxyContract:
|
|
205
|
+
static _getPerpetuals(ids: number[], _proxyContract: IPerpetualManager, _symbolList: Map<string, string>, overrides?: Overrides): Promise<PerpetualData[]>;
|
|
206
|
+
static getPoolStaticInfo(_proxyContract: IPerpetualManager, overrides?: Overrides): Promise<{
|
|
206
207
|
nestedPerpetualIDs: Array<Array<number>>;
|
|
207
208
|
poolShareTokenAddr: Array<string>;
|
|
208
209
|
poolMarginTokenAddr: Array<string>;
|
|
209
210
|
oracleFactory: string;
|
|
210
211
|
}>;
|
|
211
|
-
static buildMarginAccountFromState(symbol: string, traderState: bigint[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
|
|
212
|
+
static buildMarginAccountFromState(symbol: string, traderState: bigint[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, pxInfo: IdxPriceInfo, isPredMkt: boolean): MarginAccount;
|
|
212
213
|
/**
|
|
213
214
|
* Get trader state from the blockchain and parse into a human-readable margin account
|
|
214
215
|
* @param traderAddr Trader address
|
|
215
216
|
* @param symbol Perpetual symbol
|
|
216
217
|
* @param symbolToPerpStaticInfo Symbol to perp static info mapping
|
|
217
218
|
* @param _proxyContract Proxy contract instance
|
|
218
|
-
* @param
|
|
219
|
+
* @param _pxInfo index price info
|
|
219
220
|
* @param overrides Optional overrides for eth_call
|
|
220
221
|
* @returns A Margin account
|
|
221
222
|
*/
|
|
222
|
-
static getMarginAccount(traderAddr: string, symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract,
|
|
223
|
+
static getMarginAccount(traderAddr: string, symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: Contract, _pxInfo: IdxPriceInfo, isPredMkt: boolean, overrides?: Overrides): Promise<MarginAccount>;
|
|
223
224
|
/**
|
|
224
225
|
* All the orders in the order book for a given symbol that are currently open.
|
|
225
226
|
* @param {string} symbol Symbol of the form ETH-USD-MATIC.
|
|
@@ -297,14 +298,24 @@ export default class PerpetualDataHandler {
|
|
|
297
298
|
* @param symbolToPerpStaticInfo Symbol to perp static info mapping
|
|
298
299
|
* @param _multicall Multicall3 contract instance
|
|
299
300
|
* @param _proxyContract Proxy contract instance
|
|
300
|
-
* @param
|
|
301
|
+
* @param _pxInfo List of price info
|
|
301
302
|
* @param overrides Optional eth_call overrides
|
|
302
303
|
* @returns List of margin accounts
|
|
303
304
|
*/
|
|
304
|
-
static getMarginAccounts(traderAddrs: string[], symbols: string[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _multicall: Multicall3, _proxyContract: Contract,
|
|
305
|
-
protected static _queryPerpetualPrice(symbol: string, tradeAmount: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract:
|
|
306
|
-
|
|
307
|
-
|
|
305
|
+
static getMarginAccounts(traderAddrs: string[], symbols: string[], symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _multicall: Multicall3, _proxyContract: Contract, _pxInfo: IdxPriceInfo[], isPredMkt: boolean[], overrides?: Overrides): Promise<MarginAccount[]>;
|
|
306
|
+
protected static _queryPerpetualPrice(symbol: string, tradeAmount: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: IPerpetualManager, indexPrices: [number, number], conf: bigint, params: bigint, overrides?: Overrides): Promise<number>;
|
|
307
|
+
/**
|
|
308
|
+
*
|
|
309
|
+
* @param symbol perpetual symbol of the form BTC-USDC-USDC
|
|
310
|
+
* @param symbolToPerpStaticInfo mapping
|
|
311
|
+
* @param _proxyContract contract instance
|
|
312
|
+
* @param indexPrices IdxPriceInfo
|
|
313
|
+
* @param isPredMkt true if prediction market perpetual
|
|
314
|
+
* @param overrides
|
|
315
|
+
* @returns mark price
|
|
316
|
+
*/
|
|
317
|
+
protected static _queryPerpetualMarkPrice(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: IPerpetualManager, indexPrices: IdxPriceInfo, isPredMkt: boolean, overrides?: Overrides): Promise<number>;
|
|
318
|
+
protected static _queryPerpetualState(symbol: string, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, _proxyContract: IPerpetualManager, _multicall: Multicall3, indexPrices: IdxPriceInfo, overrides?: Overrides): Promise<PerpetualState>;
|
|
308
319
|
/**
|
|
309
320
|
* Calculate long and short exposures from open interest and long/short
|
|
310
321
|
* @param oi open interest
|
|
@@ -312,7 +323,7 @@ export default class PerpetualDataHandler {
|
|
|
312
323
|
* @returns long, short exposure
|
|
313
324
|
*/
|
|
314
325
|
protected static _oiAndAmmPosToLongShort(oi: bigint, ammPos: bigint): [bigint, bigint];
|
|
315
|
-
protected static _parseAMMState(symbol: string, ammState: bigint[], longShort: [bigint, bigint], indexPrices:
|
|
326
|
+
protected static _parseAMMState(symbol: string, ammState: bigint[], longShort: [bigint, bigint], indexPrices: IdxPriceInfo, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>): PerpetualState;
|
|
316
327
|
/**
|
|
317
328
|
* Liquidation price
|
|
318
329
|
* @param symbol symbol of the form BTC-USD-MATIC
|
|
@@ -321,7 +332,7 @@ export default class PerpetualDataHandler {
|
|
|
321
332
|
* @param symbolToPerpStaticInfo mapping symbol->PerpStaticInfo
|
|
322
333
|
* @returns liquidation mark-price, corresponding collateral/quote conversion
|
|
323
334
|
*/
|
|
324
|
-
protected static _calculateLiquidationPrice(symbol: string, traderState: bigint[], S2: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo
|
|
335
|
+
protected static _calculateLiquidationPrice(symbol: string, traderState: bigint[], S2: number, symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>, isPredMarket: boolean): [number, number, number, number, number];
|
|
325
336
|
/**
|
|
326
337
|
* Finds the perpetual id for a symbol of the form
|
|
327
338
|
* <base>-<quote>-<collateral>. The function first converts the
|
|
@@ -484,5 +495,5 @@ export default class PerpetualDataHandler {
|
|
|
484
495
|
* @param staticInfo Perpetual static info
|
|
485
496
|
* @returns True if this is a prediction market
|
|
486
497
|
*/
|
|
487
|
-
static
|
|
498
|
+
static isPredictionMarketStatic(staticInfo: PerpetualStaticInfo): boolean;
|
|
488
499
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { JsonRpcProvider, Network, ZeroAddress, } from "ethers";
|
|
2
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_PREDICTION_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";
|
|
3
|
+
import { ERC20__factory, IPerpetualManager__factory, LimitOrderBookFactory__factory, LimitOrderBook__factory, Multicall3__factory, OracleFactory__factory, } from "./contracts";
|
|
4
|
+
import { ABDK29ToFloat, ABK64x64ToFloat, calculateLiquidationPriceCollateralBase, calculateLiquidationPriceCollateralQuanto, calculateLiquidationPriceCollateralQuote, div64x64, floatToABK64x64, dec18ToFloat, priceToProb, probToPrice, pmFindLiquidationPrice, pmMaintenanceMarginRate, } from "./d8XMath";
|
|
5
5
|
import PriceFeeds from "./priceFeeds";
|
|
6
6
|
import { combineFlags, containsFlag, contractSymbolToSymbol, loadConfigAbis, symbol4BToLongSymbol, fromBytes4, to4Chars, } from "./utils";
|
|
7
7
|
/**
|
|
@@ -60,7 +60,7 @@ export default class PerpetualDataHandler {
|
|
|
60
60
|
if (network.chainId !== this.chainId) {
|
|
61
61
|
throw new Error(`Provider: chain id ${network.chainId} does not match config (${this.chainId})`);
|
|
62
62
|
}
|
|
63
|
-
this.proxyContract =
|
|
63
|
+
this.proxyContract = IPerpetualManager__factory.connect(this.proxyAddr, signerOrProvider);
|
|
64
64
|
this.multicall = Multicall3__factory.connect(this.config.multicall ?? MULTICALL_ADDRESS, this.signerOrProvider);
|
|
65
65
|
await this._fillSymbolMaps(overrides);
|
|
66
66
|
}
|
|
@@ -646,7 +646,7 @@ export default class PerpetualDataHandler {
|
|
|
646
646
|
oracleFactory: oracleFactory,
|
|
647
647
|
};
|
|
648
648
|
}
|
|
649
|
-
static buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo,
|
|
649
|
+
static buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, pxInfo, isPredMkt) {
|
|
650
650
|
const idx_cash = 3;
|
|
651
651
|
const idx_notional = 4;
|
|
652
652
|
const idx_locked_in = 5;
|
|
@@ -657,7 +657,7 @@ export default class PerpetualDataHandler {
|
|
|
657
657
|
let cash = ABK64x64ToFloat(traderState[idx_cash]);
|
|
658
658
|
let S2Liq = 0, S3Liq = 0, tau = Infinity, pnl = 0, unpaidFundingCC = 0, fLockedIn = BigInt(0), side = CLOSED_SIDE, entryPrice = 0;
|
|
659
659
|
if (!isEmpty) {
|
|
660
|
-
[S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState,
|
|
660
|
+
[S2Liq, S3Liq, tau, pnl, unpaidFundingCC] = PerpetualDataHandler._calculateLiquidationPrice(symbol, traderState, pxInfo.s2, symbolToPerpStaticInfo, isPredMkt);
|
|
661
661
|
fLockedIn = traderState[idx_locked_in];
|
|
662
662
|
side = traderState[idx_notional] > 0n ? BUY_SIDE : SELL_SIDE;
|
|
663
663
|
entryPrice = Math.abs(ABK64x64ToFloat(div64x64(fLockedIn, traderState[idx_notional])));
|
|
@@ -684,17 +684,17 @@ export default class PerpetualDataHandler {
|
|
|
684
684
|
* @param symbol Perpetual symbol
|
|
685
685
|
* @param symbolToPerpStaticInfo Symbol to perp static info mapping
|
|
686
686
|
* @param _proxyContract Proxy contract instance
|
|
687
|
-
* @param
|
|
687
|
+
* @param _pxInfo index price info
|
|
688
688
|
* @param overrides Optional overrides for eth_call
|
|
689
689
|
* @returns A Margin account
|
|
690
690
|
*/
|
|
691
|
-
static async getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract,
|
|
691
|
+
static async getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxInfo, isPredMkt, overrides) {
|
|
692
692
|
let perpId = Number(symbol);
|
|
693
693
|
if (isNaN(perpId)) {
|
|
694
694
|
perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
|
|
695
695
|
}
|
|
696
|
-
let traderState = await _proxyContract.getTraderState(perpId, traderAddr,
|
|
697
|
-
return PerpetualDataHandler.buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo,
|
|
696
|
+
let traderState = await _proxyContract.getTraderState(perpId, traderAddr, [_pxInfo.ema, _pxInfo.s3 ?? 0].map((x) => floatToABK64x64(x)), overrides || {});
|
|
697
|
+
return PerpetualDataHandler.buildMarginAccountFromState(symbol, traderState, symbolToPerpStaticInfo, _pxInfo, isPredMkt);
|
|
698
698
|
}
|
|
699
699
|
/**
|
|
700
700
|
* All the orders in the order book for a given symbol that are currently open.
|
|
@@ -848,15 +848,15 @@ export default class PerpetualDataHandler {
|
|
|
848
848
|
* @param symbolToPerpStaticInfo Symbol to perp static info mapping
|
|
849
849
|
* @param _multicall Multicall3 contract instance
|
|
850
850
|
* @param _proxyContract Proxy contract instance
|
|
851
|
-
* @param
|
|
851
|
+
* @param _pxInfo List of price info
|
|
852
852
|
* @param overrides Optional eth_call overrides
|
|
853
853
|
* @returns List of margin accounts
|
|
854
854
|
*/
|
|
855
|
-
static async getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract,
|
|
855
|
+
static async getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxInfo, isPredMkt, overrides) {
|
|
856
856
|
if (traderAddrs.length != symbols.length ||
|
|
857
|
-
traderAddrs.length !=
|
|
858
|
-
symbols.length !=
|
|
859
|
-
throw new Error("traderAddr, symbol and
|
|
857
|
+
traderAddrs.length != _pxInfo.length ||
|
|
858
|
+
symbols.length != _pxInfo.length) {
|
|
859
|
+
throw new Error("traderAddr, symbol and _pxInfo should all have the same length");
|
|
860
860
|
}
|
|
861
861
|
const proxyCalls = traderAddrs.map((_addr, i) => ({
|
|
862
862
|
target: _proxyContract.target,
|
|
@@ -864,7 +864,7 @@ export default class PerpetualDataHandler {
|
|
|
864
864
|
callData: _proxyContract.interface.encodeFunctionData("getTraderState", [
|
|
865
865
|
PerpetualDataHandler.symbolToPerpetualId(symbols[i], symbolToPerpStaticInfo),
|
|
866
866
|
_addr,
|
|
867
|
-
|
|
867
|
+
[_pxInfo[i].ema, _pxInfo[i].s3 ?? 0].map((x) => floatToABK64x64(x)),
|
|
868
868
|
]),
|
|
869
869
|
}));
|
|
870
870
|
const encodedResults = await _multicall.aggregate3.staticCall(proxyCalls, overrides || {});
|
|
@@ -873,33 +873,42 @@ export default class PerpetualDataHandler {
|
|
|
873
873
|
throw new Error(`Failed to get perp info for ${symbols[i]}`);
|
|
874
874
|
return _proxyContract.interface.decodeFunctionResult("getTraderState", returnData)[0];
|
|
875
875
|
});
|
|
876
|
-
return traderStates.map((traderState, i) => PerpetualDataHandler.buildMarginAccountFromState(symbols[i], traderState, symbolToPerpStaticInfo, [
|
|
877
|
-
_pxS2S3s[i][0],
|
|
878
|
-
_pxS2S3s[i][1],
|
|
879
|
-
]));
|
|
876
|
+
return traderStates.map((traderState, i) => PerpetualDataHandler.buildMarginAccountFromState(symbols[i], traderState, symbolToPerpStaticInfo, _pxInfo[i], isPredMkt[i]));
|
|
880
877
|
}
|
|
881
|
-
static async _queryPerpetualPrice(symbol, tradeAmount, symbolToPerpStaticInfo, _proxyContract, indexPrices, overrides) {
|
|
878
|
+
static async _queryPerpetualPrice(symbol, tradeAmount, symbolToPerpStaticInfo, _proxyContract, indexPrices, conf, params, overrides) {
|
|
882
879
|
let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
|
|
883
880
|
let fIndexPrices = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
|
|
884
|
-
let fPrice = await _proxyContract.queryPerpetualPrice(perpId, floatToABK64x64(tradeAmount), fIndexPrices, overrides || {});
|
|
881
|
+
let fPrice = await _proxyContract.queryPerpetualPrice(perpId, floatToABK64x64(tradeAmount), fIndexPrices, conf, params, overrides || {});
|
|
885
882
|
return ABK64x64ToFloat(fPrice);
|
|
886
883
|
}
|
|
887
|
-
|
|
884
|
+
/**
|
|
885
|
+
*
|
|
886
|
+
* @param symbol perpetual symbol of the form BTC-USDC-USDC
|
|
887
|
+
* @param symbolToPerpStaticInfo mapping
|
|
888
|
+
* @param _proxyContract contract instance
|
|
889
|
+
* @param indexPrices IdxPriceInfo
|
|
890
|
+
* @param isPredMkt true if prediction market perpetual
|
|
891
|
+
* @param overrides
|
|
892
|
+
* @returns mark price
|
|
893
|
+
*/
|
|
894
|
+
static async _queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, isPredMkt, overrides) {
|
|
888
895
|
let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
|
|
889
|
-
let [S2, S3] = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
|
|
896
|
+
let [S2, S3] = [indexPrices.s2, indexPrices.s3].map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x));
|
|
890
897
|
let ammState = await _proxyContract.getAMMState(perpId, [S2, S3], overrides || {});
|
|
891
898
|
// ammState[6] == S2 == indexPrices[0] up to rounding errors (indexPrices is most accurate)
|
|
892
|
-
|
|
899
|
+
if (isPredMkt) {
|
|
900
|
+
return indexPrices.ema + ABK64x64ToFloat(ammState[8]);
|
|
901
|
+
}
|
|
902
|
+
return indexPrices.s2 * (1 + ABK64x64ToFloat(ammState[8]));
|
|
893
903
|
}
|
|
894
904
|
static async _queryPerpetualState(symbol, symbolToPerpStaticInfo, _proxyContract, _multicall, indexPrices, overrides) {
|
|
895
905
|
let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
|
|
896
906
|
let staticInfo = symbolToPerpStaticInfo.get(symbol);
|
|
897
|
-
let [S2, S3] = [indexPrices[0], indexPrices[1]];
|
|
898
907
|
if (staticInfo.collateralCurrencyType == CollaterlCCY.BASE) {
|
|
899
|
-
|
|
908
|
+
indexPrices.s3 = indexPrices.s2;
|
|
900
909
|
}
|
|
901
910
|
else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
|
|
902
|
-
|
|
911
|
+
indexPrices.s3 = 1;
|
|
903
912
|
}
|
|
904
913
|
// multicall
|
|
905
914
|
const proxyCalls = [
|
|
@@ -908,7 +917,7 @@ export default class PerpetualDataHandler {
|
|
|
908
917
|
allowFailure: false,
|
|
909
918
|
callData: _proxyContract.interface.encodeFunctionData("getAMMState", [
|
|
910
919
|
perpId,
|
|
911
|
-
[
|
|
920
|
+
[indexPrices.s2, indexPrices.s3 ?? 0].map(floatToABK64x64),
|
|
912
921
|
]),
|
|
913
922
|
},
|
|
914
923
|
{
|
|
@@ -946,26 +955,36 @@ export default class PerpetualDataHandler {
|
|
|
946
955
|
let perpId = PerpetualDataHandler.symbolToPerpetualId(symbol, symbolToPerpStaticInfo);
|
|
947
956
|
let staticInfo = symbolToPerpStaticInfo.get(symbol);
|
|
948
957
|
let ccy = symbol.split("-");
|
|
949
|
-
let [S2, S3] = [indexPrices
|
|
958
|
+
let [S2, S3] = [indexPrices.s2, indexPrices.s3];
|
|
950
959
|
if (staticInfo.collateralCurrencyType == CollaterlCCY.BASE) {
|
|
951
960
|
S3 = S2;
|
|
952
961
|
}
|
|
953
962
|
else if (staticInfo.collateralCurrencyType == CollaterlCCY.QUOTE) {
|
|
954
963
|
S3 = 1;
|
|
955
964
|
}
|
|
956
|
-
|
|
965
|
+
const isPred = PerpetualDataHandler.isPredictionMarketStatic(staticInfo);
|
|
966
|
+
let markPrice;
|
|
967
|
+
if (isPred) {
|
|
968
|
+
// ema + premium
|
|
969
|
+
markPrice = indexPrices.ema + ABK64x64ToFloat(ammState[8]);
|
|
970
|
+
}
|
|
971
|
+
else {
|
|
972
|
+
// S2 * (1+premium)
|
|
973
|
+
markPrice = indexPrices.s2 * (1 + ABK64x64ToFloat(ammState[8]));
|
|
974
|
+
}
|
|
957
975
|
let state = {
|
|
958
976
|
id: perpId,
|
|
959
977
|
state: PERP_STATE_STR[Number(ammState[13])],
|
|
960
978
|
baseCurrency: ccy[0],
|
|
961
979
|
quoteCurrency: ccy[1],
|
|
962
980
|
indexPrice: S2,
|
|
963
|
-
collToQuoteIndexPrice: S3,
|
|
981
|
+
collToQuoteIndexPrice: S3 ?? (ccy[0] === ccy[1] ? S2 : 1),
|
|
982
|
+
markPremium: ABK64x64ToFloat(ammState[8]),
|
|
964
983
|
markPrice: markPrice,
|
|
965
984
|
midPrice: ABK64x64ToFloat(ammState[10]),
|
|
966
985
|
currentFundingRateBps: ABK64x64ToFloat(ammState[14]) * 1e4,
|
|
967
986
|
openInterestBC: ABK64x64ToFloat(ammState[11]),
|
|
968
|
-
isMarketClosed: indexPrices
|
|
987
|
+
isMarketClosed: indexPrices.s2MktClosed || (indexPrices.s3MktClosed !== undefined && indexPrices.s3MktClosed),
|
|
969
988
|
longBC: ABK64x64ToFloat(longShort[0]),
|
|
970
989
|
shortBC: ABK64x64ToFloat(longShort[1]),
|
|
971
990
|
};
|
|
@@ -979,7 +998,7 @@ export default class PerpetualDataHandler {
|
|
|
979
998
|
* @param symbolToPerpStaticInfo mapping symbol->PerpStaticInfo
|
|
980
999
|
* @returns liquidation mark-price, corresponding collateral/quote conversion
|
|
981
1000
|
*/
|
|
982
|
-
static _calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo) {
|
|
1001
|
+
static _calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo, isPredMarket) {
|
|
983
1002
|
const idx_availableCashCC = 2;
|
|
984
1003
|
const idx_cash = 3;
|
|
985
1004
|
const idx_notional = 4;
|
|
@@ -993,13 +1012,21 @@ export default class PerpetualDataHandler {
|
|
|
993
1012
|
if (perpInfo == undefined) {
|
|
994
1013
|
throw new Error(`no info for perpetual ${symbol}`);
|
|
995
1014
|
}
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1015
|
+
const tau = perpInfo.maintenanceMarginRate;
|
|
1016
|
+
const lockedInValueQC = ABK64x64ToFloat(traderState[idx_locked_in]);
|
|
1017
|
+
const position = ABK64x64ToFloat(traderState[idx_notional]);
|
|
1018
|
+
const cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
|
|
1019
|
+
const Sm = ABK64x64ToFloat(traderState[idx_mark_price]);
|
|
1020
|
+
const unpaidFundingCC = ABK64x64ToFloat(traderState[idx_availableCashCC] - traderState[idx_cash]);
|
|
1002
1021
|
let unpaidFunding = unpaidFundingCC;
|
|
1022
|
+
if (isPredMarket) {
|
|
1023
|
+
const S2Liq = pmFindLiquidationPrice(position, S3Liq, lockedInValueQC, cashCC, tau, S2);
|
|
1024
|
+
let pnl = position * Sm - lockedInValueQC + unpaidFunding / S3Liq;
|
|
1025
|
+
// liquidation margin rate
|
|
1026
|
+
const tauLiq = pmMaintenanceMarginRate(position, S2Liq, tau);
|
|
1027
|
+
return [S2Liq, S3Liq, tauLiq, pnl, unpaidFundingCC];
|
|
1028
|
+
}
|
|
1029
|
+
// regular perpetuals:
|
|
1003
1030
|
if (perpInfo.collateralCurrencyType == CollaterlCCY.BASE) {
|
|
1004
1031
|
S2Liq = calculateLiquidationPriceCollateralBase(lockedInValueQC, position, cashCC, tau);
|
|
1005
1032
|
S3Liq = S2Liq;
|
|
@@ -1087,7 +1114,7 @@ export default class PerpetualDataHandler {
|
|
|
1087
1114
|
}
|
|
1088
1115
|
// adjust prices for market type
|
|
1089
1116
|
const sInfo = symbolToPerpInfoMap.get(symbol);
|
|
1090
|
-
if (PerpetualDataHandler.
|
|
1117
|
+
if (PerpetualDataHandler.isPredictionMarketStatic(sInfo)) {
|
|
1091
1118
|
limitPrice = limitPrice !== undefined && limitPrice !== 0 ? priceToProb(limitPrice) : limitPrice;
|
|
1092
1119
|
stopPrice = stopPrice !== undefined && stopPrice !== 0 ? priceToProb(stopPrice) : stopPrice;
|
|
1093
1120
|
}
|
|
@@ -1106,9 +1133,9 @@ export default class PerpetualDataHandler {
|
|
|
1106
1133
|
leverage: Number(order.leverageTDR) / 100,
|
|
1107
1134
|
deadline: Number(order.iDeadline),
|
|
1108
1135
|
executionTimestamp: Number(order.executionTimestamp),
|
|
1109
|
-
submittedTimestamp:
|
|
1110
|
-
parentChildOrderIds:
|
|
1111
|
-
? [order
|
|
1136
|
+
submittedTimestamp: "submittedTimestamp" in order ? Number(order.submittedTimestamp) : undefined,
|
|
1137
|
+
parentChildOrderIds: "parentChildDigest1" && "parentChildDigest2" in order
|
|
1138
|
+
? [order.parentChildDigest1.toString(), order.parentChildDigest2.toString()]
|
|
1112
1139
|
: undefined,
|
|
1113
1140
|
};
|
|
1114
1141
|
return userOrder;
|
|
@@ -1137,7 +1164,7 @@ export default class PerpetualDataHandler {
|
|
|
1137
1164
|
else {
|
|
1138
1165
|
throw Error(`invalid side in order spec, use ${BUY_SIDE} or ${SELL_SIDE}`);
|
|
1139
1166
|
}
|
|
1140
|
-
const isPred = PerpetualDataHandler.
|
|
1167
|
+
const isPred = PerpetualDataHandler.isPredictionMarketStatic(perpStaticInfo.get(order.symbol));
|
|
1141
1168
|
let fLimitPrice;
|
|
1142
1169
|
if (order.limitPrice == undefined) {
|
|
1143
1170
|
// we need to set the limit price to infinity or zero for
|
|
@@ -1612,15 +1639,14 @@ export default class PerpetualDataHandler {
|
|
|
1612
1639
|
if (staticInfo == undefined) {
|
|
1613
1640
|
throw new Error(`Perpetual with symbol ${symbol} not found. Check symbol or use createProxyInstance().`);
|
|
1614
1641
|
}
|
|
1615
|
-
return PerpetualDataHandler.
|
|
1642
|
+
return PerpetualDataHandler.isPredictionMarketStatic(staticInfo);
|
|
1616
1643
|
}
|
|
1617
1644
|
/**
|
|
1618
1645
|
* Determines whether a given perpetual represents a prediction market
|
|
1619
1646
|
* @param staticInfo Perpetual static info
|
|
1620
1647
|
* @returns True if this is a prediction market
|
|
1621
1648
|
*/
|
|
1622
|
-
static
|
|
1623
|
-
// return true; // for testing
|
|
1649
|
+
static isPredictionMarketStatic(staticInfo) {
|
|
1624
1650
|
return containsFlag(staticInfo.perpFlags, MASK_PREDICTION_MARKET);
|
|
1625
1651
|
}
|
|
1626
1652
|
}
|