@d8x/perpetuals-sdk 2.6.21 → 2.6.23

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.
@@ -158,6 +158,7 @@ on-chain</p></dd>
158
158
  * [~pmGetDepositAmtForLvgTrade(tradeAmt, targetLvg, price, S3, S2Mark)](#module_d8xMath..pmGetDepositAmtForLvgTrade) ⇒
159
159
  * [~pmExcessCashAtLvg(tradeAmt, lvg, walletBalCC, currentCashCC, currentPosition, currentLockedInValue, slippage, S2, Sm, S3, totLong, totShort)](#module_d8xMath..pmExcessCashAtLvg) ⇒
160
160
  * [~pmFindMaxPersonalTradeSizeAtLeverage(dir, lvg, walletBalCC, slippage, currentPosition, currentCashCC, currentLockedInValue, S2, Sm, S3, glblMaxTrade)](#module_d8xMath..pmFindMaxPersonalTradeSizeAtLeverage) ⇒
161
+ * [~pmMaxSignedOpenTradeSize(long, short, sm, isBuy, mr)](#module_d8xMath..pmMaxSignedOpenTradeSize)
161
162
 
162
163
  <a name="module_d8xMath..ABDK29ToFloat"></a>
163
164
 
@@ -635,6 +636,21 @@ Factors in lot size and global max short/long, factors in opening/closing positi
635
636
  | S3 | <p>current collateral to quote index price</p> |
636
637
  | glblMaxTrade | <p>global max short or long order size that we retreive, e.g., from position risk (sign irrelevant) based on long: (<em>ℓ+n) * (1-p) - m (1-p) s = F → n = (F+m</em>(1-p)<em>s)/(1-p)-ℓ</em> short: (s+n)<em>p - m p <em>ℓ</em> = F →n = (F+m</em>p**ℓ*)/p-s</p> |
637
638
 
639
+ <a name="module_d8xMath..pmMaxSignedOpenTradeSize"></a>
640
+
641
+ ### d8xMath~pmMaxSignedOpenTradeSize(long, short, sm, isBuy, mr)
642
+ <p>See PerpetualTradeLogic::_getMaxSignedOpenPredMktTradeSize</p>
643
+
644
+ **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
645
+
646
+ | Param | Description |
647
+ | --- | --- |
648
+ | long | <p>Long open OI</p> |
649
+ | short | <p>Short open OI</p> |
650
+ | sm | <p>Mark price (&gt;1)</p> |
651
+ | isBuy | <p>True if trade is long</p> |
652
+ | mr | <p>Maintenance margin rate</p> |
653
+
638
654
  <a name="module_utils"></a>
639
655
 
640
656
  ## utils
@@ -796,6 +812,9 @@ require gas-payments.</p>
796
812
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
797
813
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
798
814
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
815
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
816
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
817
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
799
818
 
800
819
  <a name="new_AccountTrade_new"></a>
801
820
 
@@ -1571,6 +1590,30 @@ main();
1571
1590
 
1572
1591
  **Kind**: instance method of [<code>AccountTrade</code>](#AccountTrade)
1573
1592
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
1593
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
1594
+
1595
+ ### accountTrade.getLocalPerpetualStates() ⇒
1596
+ <p>Get state of perpetuals as currently known locally</p>
1597
+
1598
+ **Kind**: instance method of [<code>AccountTrade</code>](#AccountTrade)
1599
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
1600
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
1601
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
1602
+
1603
+ ### accountTrade.fetchOnChainPerpetualStates() ⇒
1604
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
1605
+
1606
+ **Kind**: instance method of [<code>AccountTrade</code>](#AccountTrade)
1607
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
1608
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
1609
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
1610
+
1611
+ ### accountTrade.checkHeartbeat() ⇒
1612
+ <p>Check that states of all perps known locally match on-chain states</p>
1613
+
1614
+ **Kind**: instance method of [<code>AccountTrade</code>](#AccountTrade)
1615
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
1616
+ **Returns**: <p>True if all perp states are correct</p>
1574
1617
  <a name="BrokerTool"></a>
1575
1618
 
1576
1619
  ## BrokerTool ⇐ [<code>WriteAccessHandler</code>](#WriteAccessHandler)
@@ -1634,6 +1677,9 @@ require gas-payments.</p>
1634
1677
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
1635
1678
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
1636
1679
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
1680
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
1681
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
1682
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
1637
1683
 
1638
1684
  <a name="new_BrokerTool_new"></a>
1639
1685
 
@@ -2593,6 +2639,30 @@ main();
2593
2639
 
2594
2640
  **Kind**: instance method of [<code>BrokerTool</code>](#BrokerTool)
2595
2641
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
2642
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
2643
+
2644
+ ### brokerTool.getLocalPerpetualStates() ⇒
2645
+ <p>Get state of perpetuals as currently known locally</p>
2646
+
2647
+ **Kind**: instance method of [<code>BrokerTool</code>](#BrokerTool)
2648
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
2649
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
2650
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
2651
+
2652
+ ### brokerTool.fetchOnChainPerpetualStates() ⇒
2653
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
2654
+
2655
+ **Kind**: instance method of [<code>BrokerTool</code>](#BrokerTool)
2656
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
2657
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
2658
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
2659
+
2660
+ ### brokerTool.checkHeartbeat() ⇒
2661
+ <p>Check that states of all perps known locally match on-chain states</p>
2662
+
2663
+ **Kind**: instance method of [<code>BrokerTool</code>](#BrokerTool)
2664
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
2665
+ **Returns**: <p>True if all perp states are correct</p>
2596
2666
  <a name="LiquidatorTool"></a>
2597
2667
 
2598
2668
  ## LiquidatorTool ⇐ [<code>WriteAccessHandler</code>](#WriteAccessHandler)
@@ -2648,6 +2718,9 @@ and executes smart-contract interactions that require gas-payments.</p>
2648
2718
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
2649
2719
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
2650
2720
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
2721
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
2722
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
2723
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
2651
2724
 
2652
2725
  <a name="new_LiquidatorTool_new"></a>
2653
2726
 
@@ -3365,6 +3438,30 @@ main();
3365
3438
 
3366
3439
  **Kind**: instance method of [<code>LiquidatorTool</code>](#LiquidatorTool)
3367
3440
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
3441
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
3442
+
3443
+ ### liquidatorTool.getLocalPerpetualStates() ⇒
3444
+ <p>Get state of perpetuals as currently known locally</p>
3445
+
3446
+ **Kind**: instance method of [<code>LiquidatorTool</code>](#LiquidatorTool)
3447
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
3448
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
3449
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
3450
+
3451
+ ### liquidatorTool.fetchOnChainPerpetualStates() ⇒
3452
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
3453
+
3454
+ **Kind**: instance method of [<code>LiquidatorTool</code>](#LiquidatorTool)
3455
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
3456
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
3457
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
3458
+
3459
+ ### liquidatorTool.checkHeartbeat() ⇒
3460
+ <p>Check that states of all perps known locally match on-chain states</p>
3461
+
3462
+ **Kind**: instance method of [<code>LiquidatorTool</code>](#LiquidatorTool)
3463
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
3464
+ **Returns**: <p>True if all perp states are correct</p>
3368
3465
  <a name="LiquidityProviderTool"></a>
3369
3466
 
3370
3467
  ## LiquidityProviderTool ⇐ [<code>WriteAccessHandler</code>](#WriteAccessHandler)
@@ -3418,6 +3515,9 @@ smart-contract interactions that require gas-payments.</p>
3418
3515
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
3419
3516
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
3420
3517
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
3518
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
3519
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
3520
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
3421
3521
 
3422
3522
  <a name="new_LiquidityProviderTool_new"></a>
3423
3523
 
@@ -4074,6 +4174,30 @@ main();
4074
4174
 
4075
4175
  **Kind**: instance method of [<code>LiquidityProviderTool</code>](#LiquidityProviderTool)
4076
4176
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
4177
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
4178
+
4179
+ ### liquidityProviderTool.getLocalPerpetualStates() ⇒
4180
+ <p>Get state of perpetuals as currently known locally</p>
4181
+
4182
+ **Kind**: instance method of [<code>LiquidityProviderTool</code>](#LiquidityProviderTool)
4183
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
4184
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
4185
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
4186
+
4187
+ ### liquidityProviderTool.fetchOnChainPerpetualStates() ⇒
4188
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
4189
+
4190
+ **Kind**: instance method of [<code>LiquidityProviderTool</code>](#LiquidityProviderTool)
4191
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
4192
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
4193
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
4194
+
4195
+ ### liquidityProviderTool.checkHeartbeat() ⇒
4196
+ <p>Check that states of all perps known locally match on-chain states</p>
4197
+
4198
+ **Kind**: instance method of [<code>LiquidityProviderTool</code>](#LiquidityProviderTool)
4199
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
4200
+ **Returns**: <p>True if all perp states are correct</p>
4077
4201
  <a name="MarketData"></a>
4078
4202
 
4079
4203
  ## MarketData ⇐ [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
@@ -4157,6 +4281,9 @@ No gas required for the queries here.</p>
4157
4281
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
4158
4282
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
4159
4283
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
4284
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
4285
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
4286
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
4160
4287
  * _static_
4161
4288
  * [.exchangeFeePrdMkts(maxMaintMgnRate, Sm, tradeAmtBC, tradeMgnRate)](#MarketData.exchangeFeePrdMkts) ⇒
4162
4289
 
@@ -5457,6 +5584,30 @@ main();
5457
5584
 
5458
5585
  **Kind**: instance method of [<code>MarketData</code>](#MarketData)
5459
5586
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
5587
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
5588
+
5589
+ ### marketData.getLocalPerpetualStates() ⇒
5590
+ <p>Get state of perpetuals as currently known locally</p>
5591
+
5592
+ **Kind**: instance method of [<code>MarketData</code>](#MarketData)
5593
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
5594
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
5595
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
5596
+
5597
+ ### marketData.fetchOnChainPerpetualStates() ⇒
5598
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
5599
+
5600
+ **Kind**: instance method of [<code>MarketData</code>](#MarketData)
5601
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
5602
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
5603
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
5604
+
5605
+ ### marketData.checkHeartbeat() ⇒
5606
+ <p>Check that states of all perps known locally match on-chain states</p>
5607
+
5608
+ **Kind**: instance method of [<code>MarketData</code>](#MarketData)
5609
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
5610
+ **Returns**: <p>True if all perp states are correct</p>
5460
5611
  <a name="MarketData.exchangeFeePrdMkts"></a>
5461
5612
 
5462
5613
  ### MarketData.exchangeFeePrdMkts(maxMaintMgnRate, Sm, tradeAmtBC, tradeMgnRate) ⇒
@@ -5548,6 +5699,9 @@ gas-payments.</p>
5548
5699
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
5549
5700
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
5550
5701
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
5702
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
5703
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
5704
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
5551
5705
 
5552
5706
  <a name="new_OrderExecutorTool_new"></a>
5553
5707
 
@@ -6311,6 +6465,30 @@ main();
6311
6465
 
6312
6466
  **Kind**: instance method of [<code>OrderExecutorTool</code>](#OrderExecutorTool)
6313
6467
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
6468
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
6469
+
6470
+ ### orderExecutorTool.getLocalPerpetualStates() ⇒
6471
+ <p>Get state of perpetuals as currently known locally</p>
6472
+
6473
+ **Kind**: instance method of [<code>OrderExecutorTool</code>](#OrderExecutorTool)
6474
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
6475
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
6476
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
6477
+
6478
+ ### orderExecutorTool.fetchOnChainPerpetualStates() ⇒
6479
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
6480
+
6481
+ **Kind**: instance method of [<code>OrderExecutorTool</code>](#OrderExecutorTool)
6482
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
6483
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
6484
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
6485
+
6486
+ ### orderExecutorTool.checkHeartbeat() ⇒
6487
+ <p>Check that states of all perps known locally match on-chain states</p>
6488
+
6489
+ **Kind**: instance method of [<code>OrderExecutorTool</code>](#OrderExecutorTool)
6490
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
6491
+ **Returns**: <p>True if all perp states are correct</p>
6314
6492
  <a name="PerpetualDataHandler"></a>
6315
6493
 
6316
6494
  ## PerpetualDataHandler
@@ -6357,6 +6535,9 @@ common data and chain operations.</p>
6357
6535
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
6358
6536
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
6359
6537
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
6538
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
6539
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
6540
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
6360
6541
  * _static_
6361
6542
  * [.fetchSlotsInfo(chainId, short)](#PerpetualDataHandler.fetchSlotsInfo) ⇒
6362
6543
  * [.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList)](#PerpetualDataHandler.getPerpetualStaticInfo) ⇒
@@ -6388,6 +6569,7 @@ common data and chain operations.</p>
6388
6569
  * [.getMaintenanceMarginRate(staticInfo)](#PerpetualDataHandler.getMaintenanceMarginRate) ⇒
6389
6570
  * [.isMarketDayTime(fAMMTargetDD)](#PerpetualDataHandler.isMarketDayTime) ⇒
6390
6571
  * [.getIndexSymbol(_symbolList, info)](#PerpetualDataHandler.getIndexSymbol) ⇒
6572
+ * [.extractStatesFromStaticInfos(perpInfos)](#PerpetualDataHandler.extractStatesFromStaticInfos) ⇒
6391
6573
 
6392
6574
  <a name="new_PerpetualDataHandler_new"></a>
6393
6575
 
@@ -6852,6 +7034,27 @@ main();
6852
7034
  <p>Refreshes symbol mappings if at least one prediction market is expired</p>
6853
7035
 
6854
7036
  **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
7037
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
7038
+
7039
+ ### perpetualDataHandler.getLocalPerpetualStates() ⇒
7040
+ <p>Get state of perpetuals as currently known locally</p>
7041
+
7042
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
7043
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
7044
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
7045
+
7046
+ ### perpetualDataHandler.fetchOnChainPerpetualStates() ⇒
7047
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
7048
+
7049
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
7050
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
7051
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
7052
+
7053
+ ### perpetualDataHandler.checkHeartbeat() ⇒
7054
+ <p>Check that states of all perps known locally match on-chain states</p>
7055
+
7056
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
7057
+ **Returns**: <p>True if all perp states are correct</p>
6855
7058
  <a name="PerpetualDataHandler.fetchSlotsInfo"></a>
6856
7059
 
6857
7060
  ### PerpetualDataHandler.fetchSlotsInfo(chainId, short) ⇒
@@ -7265,6 +7468,18 @@ which has open/close times</p>
7265
7468
  | _symbolList | <p>Mapping from long symbol (e.g. NHL_TOR_DAL_251015) to price-feed API symbol (NHL0-USD:84532)</p> |
7266
7469
  | info | <p>Perpetual static info</p> |
7267
7470
 
7471
+ <a name="PerpetualDataHandler.extractStatesFromStaticInfos"></a>
7472
+
7473
+ ### PerpetualDataHandler.extractStatesFromStaticInfos(perpInfos) ⇒
7474
+ <p>Extract perpetual states from collection of static infos</p>
7475
+
7476
+ **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
7477
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
7478
+
7479
+ | Param | Description |
7480
+ | --- | --- |
7481
+ | perpInfos | <p>Perpetual static infos, either a symbol =&gt; PerpInfo mapping, or a PerpInfo array</p> |
7482
+
7268
7483
  <a name="PerpetualEventHandler"></a>
7269
7484
 
7270
7485
  ## PerpetualEventHandler
@@ -8020,6 +8235,9 @@ so that signatures can be handled in frontend via wallet</p>
8020
8235
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
8021
8236
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
8022
8237
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
8238
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
8239
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
8240
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
8023
8241
  * _static_
8024
8242
  * [.chainOrders(orders, ids)](#TraderInterface.chainOrders) ⇒
8025
8243
 
@@ -9581,6 +9799,30 @@ main();
9581
9799
 
9582
9800
  **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
9583
9801
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
9802
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
9803
+
9804
+ ### traderInterface.getLocalPerpetualStates() ⇒
9805
+ <p>Get state of perpetuals as currently known locally</p>
9806
+
9807
+ **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
9808
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
9809
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
9810
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
9811
+
9812
+ ### traderInterface.fetchOnChainPerpetualStates() ⇒
9813
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
9814
+
9815
+ **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
9816
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
9817
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
9818
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
9819
+
9820
+ ### traderInterface.checkHeartbeat() ⇒
9821
+ <p>Check that states of all perps known locally match on-chain states</p>
9822
+
9823
+ **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
9824
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
9825
+ **Returns**: <p>True if all perp states are correct</p>
9584
9826
  <a name="TraderInterface.chainOrders"></a>
9585
9827
 
9586
9828
  ### TraderInterface.chainOrders(orders, ids) ⇒
@@ -9647,6 +9889,9 @@ require gas-payments.</p>
9647
9889
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
9648
9890
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
9649
9891
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
9892
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
9893
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
9894
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
9650
9895
 
9651
9896
  <a name="new_WriteAccessHandler_new"></a>
9652
9897
 
@@ -10193,6 +10438,30 @@ main();
10193
10438
 
10194
10439
  **Kind**: instance method of [<code>WriteAccessHandler</code>](#WriteAccessHandler)
10195
10440
  **Overrides**: [<code>refreshSymbols</code>](#PerpetualDataHandler+refreshSymbols)
10441
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
10442
+
10443
+ ### writeAccessHandler.getLocalPerpetualStates() ⇒
10444
+ <p>Get state of perpetuals as currently known locally</p>
10445
+
10446
+ **Kind**: instance method of [<code>WriteAccessHandler</code>](#WriteAccessHandler)
10447
+ **Overrides**: [<code>getLocalPerpetualStates</code>](#PerpetualDataHandler+getLocalPerpetualStates)
10448
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
10449
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
10450
+
10451
+ ### writeAccessHandler.fetchOnChainPerpetualStates() ⇒
10452
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
10453
+
10454
+ **Kind**: instance method of [<code>WriteAccessHandler</code>](#WriteAccessHandler)
10455
+ **Overrides**: [<code>fetchOnChainPerpetualStates</code>](#PerpetualDataHandler+fetchOnChainPerpetualStates)
10456
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
10457
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
10458
+
10459
+ ### writeAccessHandler.checkHeartbeat() ⇒
10460
+ <p>Check that states of all perps known locally match on-chain states</p>
10461
+
10462
+ **Kind**: instance method of [<code>WriteAccessHandler</code>](#WriteAccessHandler)
10463
+ **Overrides**: [<code>checkHeartbeat</code>](#PerpetualDataHandler+checkHeartbeat)
10464
+ **Returns**: <p>True if all perp states are correct</p>
10196
10465
  <a name="default"></a>
10197
10466
 
10198
10467
  ## default ⇒
@@ -44,6 +44,9 @@ common data and chain operations.</p>
44
44
  * [.getMaintenanceMarginRate(symbol)](#PerpetualDataHandler+getMaintenanceMarginRate) ⇒
45
45
  * [.getShortSymbol(symbol)](#PerpetualDataHandler+getShortSymbol) ⇒
46
46
  * [.refreshSymbols()](#PerpetualDataHandler+refreshSymbols)
47
+ * [.getLocalPerpetualStates()](#PerpetualDataHandler+getLocalPerpetualStates) ⇒
48
+ * [.fetchOnChainPerpetualStates()](#PerpetualDataHandler+fetchOnChainPerpetualStates) ⇒
49
+ * [.checkHeartbeat()](#PerpetualDataHandler+checkHeartbeat) ⇒
47
50
  * _static_
48
51
  * [.fetchSlotsInfo(chainId, short)](#PerpetualDataHandler.fetchSlotsInfo) ⇒
49
52
  * [.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList)](#PerpetualDataHandler.getPerpetualStaticInfo) ⇒
@@ -75,6 +78,7 @@ common data and chain operations.</p>
75
78
  * [.getMaintenanceMarginRate(staticInfo)](#PerpetualDataHandler.getMaintenanceMarginRate) ⇒
76
79
  * [.isMarketDayTime(fAMMTargetDD)](#PerpetualDataHandler.isMarketDayTime) ⇒
77
80
  * [.getIndexSymbol(_symbolList, info)](#PerpetualDataHandler.getIndexSymbol) ⇒
81
+ * [.extractStatesFromStaticInfos(perpInfos)](#PerpetualDataHandler.extractStatesFromStaticInfos) ⇒
78
82
 
79
83
  <a name="new_PerpetualDataHandler_new"></a>
80
84
 
@@ -539,6 +543,27 @@ main();
539
543
  <p>Refreshes symbol mappings if at least one prediction market is expired</p>
540
544
 
541
545
  **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
546
+ <a name="PerpetualDataHandler+getLocalPerpetualStates"></a>
547
+
548
+ ### perpetualDataHandler.getLocalPerpetualStates() ⇒
549
+ <p>Get state of perpetuals as currently known locally</p>
550
+
551
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
552
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
553
+ <a name="PerpetualDataHandler+fetchOnChainPerpetualStates"></a>
554
+
555
+ ### perpetualDataHandler.fetchOnChainPerpetualStates() ⇒
556
+ <p>Fetches on-chain state of local perpetual ids. Does not run if SDK is not ready.</p>
557
+
558
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
559
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
560
+ <a name="PerpetualDataHandler+checkHeartbeat"></a>
561
+
562
+ ### perpetualDataHandler.checkHeartbeat() ⇒
563
+ <p>Check that states of all perps known locally match on-chain states</p>
564
+
565
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
566
+ **Returns**: <p>True if all perp states are correct</p>
542
567
  <a name="PerpetualDataHandler.fetchSlotsInfo"></a>
543
568
 
544
569
  ### PerpetualDataHandler.fetchSlotsInfo(chainId, short) ⇒
@@ -952,3 +977,15 @@ which has open/close times</p>
952
977
  | _symbolList | <p>Mapping from long symbol (e.g. NHL_TOR_DAL_251015) to price-feed API symbol (NHL0-USD:84532)</p> |
953
978
  | info | <p>Perpetual static info</p> |
954
979
 
980
+ <a name="PerpetualDataHandler.extractStatesFromStaticInfos"></a>
981
+
982
+ ### PerpetualDataHandler.extractStatesFromStaticInfos(perpInfos) ⇒
983
+ <p>Extract perpetual states from collection of static infos</p>
984
+
985
+ **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
986
+ **Returns**: <p>Array of [perpetual Id, perpetual state (string)]</p>
987
+
988
+ | Param | Description |
989
+ | --- | --- |
990
+ | perpInfos | <p>Perpetual static infos, either a symbol =&gt; PerpInfo mapping, or a PerpInfo array</p> |
991
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d8x/perpetuals-sdk",
3
- "version": "2.6.21",
3
+ "version": "2.6.23",
4
4
  "description": "Node TypeScript SDK for D8X Perpetual Futures",
5
5
  "author": "D8X",
6
6
  "homepage": "https://github.com/D8-X/d8x-futures-node-sdk#readme",
package/src/d8XMath.ts CHANGED
@@ -961,7 +961,7 @@ export function pmMaxSignedOpenTradeSize(
961
961
  return 0;
962
962
  }
963
963
  const m = pmMaintenanceMarginRate(isBuy ? 1 : -1, sm, mr);
964
- let p = isBuy ? sm - 1 : 2 - sm;
964
+ let p = !isBuy ? sm - 1 : 2 - sm;
965
965
  p = p < 0.01 ? 0.01 : p > 0.99 ? 0.99 : p; // same cap as contract
966
966
  return isBuy ? (ammFundsQC + m * p * short) / p - long : -(ammFundsQC + m * p * long) / p + short;
967
967
  }
package/src/marketData.ts CHANGED
@@ -991,10 +991,11 @@ export default class MarketData extends PerpetualDataHandler {
991
991
  markPrice: number,
992
992
  collToQuoteConversion: number,
993
993
  S2: number,
994
- symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>
994
+ symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>
995
995
  ): [number, number | undefined, number] {
996
996
  let S2Liq: number, S3Liq: number | undefined;
997
997
  const staticInfo = symbolToPerpStaticInfo.get(symbol)!;
998
+
998
999
  let ccyType = staticInfo.collateralCurrencyType;
999
1000
  const isPred = MarketData.isPredictionMarketStatic(staticInfo);
1000
1001
  const idx_availableCashCC = 2;
@@ -1819,7 +1820,7 @@ export default class MarketData extends PerpetualDataHandler {
1819
1820
  protected static async openOrdersOnOrderBook(
1820
1821
  traderAddr: string,
1821
1822
  orderBookContract: LimitOrderBook,
1822
- symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1823
+ symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1823
1824
  overrides?: Overrides
1824
1825
  ): Promise<Order[]> {
1825
1826
  //eliminate empty orders and map to user friendly orders
@@ -1856,7 +1857,7 @@ export default class MarketData extends PerpetualDataHandler {
1856
1857
  traderAddr: string,
1857
1858
  orderBookContracts: LimitOrderBook[],
1858
1859
  multicall: Multicall3,
1859
- symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
1860
+ symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
1860
1861
  overrides?: Overrides
1861
1862
  ): Promise<{ orders: Order[][]; digests: string[][] }> {
1862
1863
  // eliminate empty orders and map to user friendly orders
@@ -2044,9 +2045,9 @@ export default class MarketData extends PerpetualDataHandler {
2044
2045
  * @ignore
2045
2046
  */
2046
2047
  private static async _getAllActivePerpIndexPrices(
2047
- _symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
2048
+ _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2048
2049
  _priceFeedGetter: PriceFeeds,
2049
- _symbolList: Map<string, string>
2050
+ _symbolList: ReadonlyMap<string, string>
2050
2051
  ): Promise<Map<string, [number, boolean]>> {
2051
2052
  // get all prices from off-chain price-sources
2052
2053
  let allSym = new Set<string>();
@@ -2102,7 +2103,7 @@ export default class MarketData extends PerpetualDataHandler {
2102
2103
  */
2103
2104
  private static async _isMarketClosed(
2104
2105
  symbol: string,
2105
- _symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
2106
+ _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2106
2107
  _priceFeedGetter: PriceFeeds
2107
2108
  ): Promise<boolean> {
2108
2109
  const sInfo: PerpetualStaticInfo | undefined = _symbolToPerpStaticInfo.get(symbol);
@@ -2133,13 +2134,13 @@ export default class MarketData extends PerpetualDataHandler {
2133
2134
  */
2134
2135
  private static async _queryMidPrices(
2135
2136
  _proxyContract: Contract,
2136
- _poolStaticInfos: Array<PoolStaticInfo>,
2137
+ _poolStaticInfos: ReadonlyArray<PoolStaticInfo>,
2137
2138
  _multicall: Multicall3,
2138
- _nestedPerpetualIDs: Array<Array<number>>,
2139
- _symbolToPerpStaticInfo: Map<string, PerpetualStaticInfo>,
2140
- _perpetualIdToSymbol: Map<number, string>,
2141
- _idxPriceMap: Map<string, [number, boolean]>,
2142
- _symbolList: Map<string, string>,
2139
+ _nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
2140
+ _symbolToPerpStaticInfo: ReadonlyMap<string, PerpetualStaticInfo>,
2141
+ _perpetualIdToSymbol: ReadonlyMap<number, string>,
2142
+ _idxPriceMap: ReadonlyMap<string, [number, boolean]>,
2143
+ _symbolList: ReadonlyMap<string, string>,
2143
2144
  overrides?: Overrides
2144
2145
  ): Promise<Map<string, number>> {
2145
2146
  // what is the maximal number of queries at once?
@@ -2218,9 +2219,9 @@ export default class MarketData extends PerpetualDataHandler {
2218
2219
  private static async _queryPoolAndPerpetualStates(
2219
2220
  _proxyContract: Contract,
2220
2221
  _multicall: Multicall3,
2221
- _poolStaticInfos: PoolStaticInfo[],
2222
- _symbolList: Map<string, string>,
2223
- _nestedPerpetualIDs: Array<Array<number>>,
2222
+ _poolStaticInfos: readonly PoolStaticInfo[],
2223
+ _symbolList: ReadonlyMap<string, string>,
2224
+ _nestedPerpetualIDs: ReadonlyArray<ReadonlyArray<number>>,
2224
2225
  overrides?: Overrides
2225
2226
  ): Promise<{ pools: Array<PoolState>; perpetuals: Array<PerpetualState> }> {
2226
2227
  const chunkSize = 5;
@@ -2298,7 +2299,7 @@ export default class MarketData extends PerpetualDataHandler {
2298
2299
  */
2299
2300
  protected static _poolDataToPoolState(
2300
2301
  _liquidityPools: Partial<PerpStorage.LiquidityPoolDataStructOutput>[],
2301
- _poolStaticInfos: PoolStaticInfo[]
2302
+ _poolStaticInfos: readonly PoolStaticInfo[]
2302
2303
  ): PoolState[] {
2303
2304
  const poolStates = _liquidityPools.map(
2304
2305
  (pool, k) =>
@@ -2326,9 +2327,9 @@ export default class MarketData extends PerpetualDataHandler {
2326
2327
  * @ignore
2327
2328
  */
2328
2329
  protected static _perpetualDataToPerpetualState(
2329
- _perpetuals: any[],
2330
- _longShortBC: [bigint, bigint][],
2331
- _symbolList: Map<string, string>
2330
+ _perpetuals: readonly any[],
2331
+ _longShortBC: readonly [bigint, bigint][],
2332
+ _symbolList: ReadonlyMap<string, string>
2332
2333
  ): PerpetualState[] {
2333
2334
  const perpStates = new Array<PerpetualState>();
2334
2335
  for (let k = 0; k < _perpetuals.length; k++) {
@@ -2427,9 +2428,13 @@ export default class MarketData extends PerpetualDataHandler {
2427
2428
  ) {
2428
2429
  perp.isMarketClosed = true;
2429
2430
  } else {
2430
- const idxPriceS2Pair = idxPriceMap.get(MarketData.getIndexSymbol(_symbolList, info))!;
2431
+ const indexSymbol = MarketData.getIndexSymbol(_symbolList, info);
2432
+ const idxPriceS2Pair = idxPriceMap.get(indexSymbol)!; // checked in if
2431
2433
  let idxPriceS3Pair: [number, boolean] = [0, false];
2432
- perp.isMarketClosed = idxPriceS2Pair[1];
2434
+ perp.isMarketClosed =
2435
+ idxPriceS2Pair[1] ||
2436
+ (MarketData.isPredictionMarketStatic(info) &&
2437
+ (isNaN(idxPriceS2Pair[0]) || idxPriceS2Pair[0] < 1.01 || idxPriceS2Pair[0] > 1.99));
2433
2438
  if (info.S3Symbol != "" && idxPriceMap.has(info.S3Symbol)) {
2434
2439
  idxPriceS3Pair = idxPriceMap.get(info.S3Symbol)!;
2435
2440
  perp.isMarketClosed = perp.isMarketClosed || idxPriceS3Pair[1];
@@ -2443,7 +2448,7 @@ export default class MarketData extends PerpetualDataHandler {
2443
2448
  }
2444
2449
  perp.collToQuoteIndexPrice = indexS3;
2445
2450
 
2446
- const emaKey = info.S2Symbol + ":ema";
2451
+ const emaKey = indexSymbol + ":ema";
2447
2452
  let markPrice: number;
2448
2453
  if (idxPriceMap.has(emaKey)) {
2449
2454
  let ema: number;