@d8x/perpetuals-sdk 2.4.1 → 2.4.3

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.
Files changed (167) hide show
  1. package/dist/cjs/d8XMath.d.ts +1 -1
  2. package/dist/cjs/d8XMath.js +25 -9
  3. package/dist/cjs/d8XMath.js.map +1 -1
  4. package/dist/cjs/marketData.d.ts +10 -3
  5. package/dist/cjs/marketData.js +13 -5
  6. package/dist/cjs/marketData.js.map +1 -1
  7. package/dist/cjs/priceFeeds.js +1 -1
  8. package/dist/cjs/priceFeeds.js.map +1 -1
  9. package/dist/cjs/version.d.ts +1 -1
  10. package/dist/cjs/version.js +1 -1
  11. package/dist/{cjs/contracts/factories/MockToken__factory.d.ts → esm/contracts/factories/PerpStorage__factory.d.ts} +115 -128
  12. package/dist/esm/contracts/factories/{MockToken__factory.js → PerpStorage__factory.js} +128 -139
  13. package/dist/esm/contracts/factories/PerpStorage__factory.js.map +1 -0
  14. package/dist/esm/d8XMath.d.ts +1 -1
  15. package/dist/esm/d8XMath.js +25 -9
  16. package/dist/esm/d8XMath.js.map +1 -1
  17. package/dist/esm/marketData.d.ts +10 -3
  18. package/dist/esm/marketData.js +13 -5
  19. package/dist/esm/marketData.js.map +1 -1
  20. package/dist/esm/priceFeeds.js +1 -1
  21. package/dist/esm/priceFeeds.js.map +1 -1
  22. package/dist/esm/version.d.ts +1 -1
  23. package/dist/esm/version.js +1 -1
  24. package/doc/d8x-perpetuals-sdk.md +177 -8
  25. package/doc/marketData.md +18 -3
  26. package/doc/perpetualDataHandler.md +13 -0
  27. package/package.json +1 -1
  28. package/src/d8XMath.ts +26 -8
  29. package/src/marketData.ts +13 -5
  30. package/src/priceFeeds.ts +2 -1
  31. package/src/version.ts +1 -1
  32. package/dist/cjs/abi/BeaconProxy.json +0 -71
  33. package/dist/cjs/abi/Maintainer.json +0 -774
  34. package/dist/cjs/abi/MockToken.json +0 -347
  35. package/dist/cjs/abi/UUPSUpgradeable.json +0 -104
  36. package/dist/cjs/abi/WeETH.json +0 -310
  37. package/dist/cjs/abi-zkevm/LimitOrderBook.json +0 -910
  38. package/dist/cjs/abi-zkevm/LimitOrderBookFactory.json +0 -236
  39. package/dist/cjs/contracts/BeaconProxy.d.ts +0 -63
  40. package/dist/cjs/contracts/BeaconProxy.js +0 -3
  41. package/dist/cjs/contracts/BeaconProxy.js.map +0 -1
  42. package/dist/cjs/contracts/Maintainer.d.ts +0 -799
  43. package/dist/cjs/contracts/Maintainer.js +0 -3
  44. package/dist/cjs/contracts/Maintainer.js.map +0 -1
  45. package/dist/cjs/contracts/MockToken.d.ts +0 -263
  46. package/dist/cjs/contracts/MockToken.js +0 -3
  47. package/dist/cjs/contracts/MockToken.js.map +0 -1
  48. package/dist/cjs/contracts/UUPSUpgradeable.d.ts +0 -118
  49. package/dist/cjs/contracts/UUPSUpgradeable.js +0 -3
  50. package/dist/cjs/contracts/UUPSUpgradeable.js.map +0 -1
  51. package/dist/cjs/contracts/WeETH.d.ts +0 -503
  52. package/dist/cjs/contracts/WeETH.js +0 -3
  53. package/dist/cjs/contracts/WeETH.js.map +0 -1
  54. package/dist/cjs/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  55. package/dist/cjs/contracts/factories/BeaconProxy__factory.js +0 -89
  56. package/dist/cjs/contracts/factories/BeaconProxy__factory.js.map +0 -1
  57. package/dist/cjs/contracts/factories/Maintainer__factory.d.ts +0 -609
  58. package/dist/cjs/contracts/factories/Maintainer__factory.js +0 -792
  59. package/dist/cjs/contracts/factories/Maintainer__factory.js.map +0 -1
  60. package/dist/cjs/contracts/factories/MockToken__factory.js +0 -365
  61. package/dist/cjs/contracts/factories/MockToken__factory.js.map +0 -1
  62. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  63. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js +0 -122
  64. package/dist/cjs/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  65. package/dist/cjs/contracts/factories/WeETH__factory.d.ts +0 -545
  66. package/dist/cjs/contracts/factories/WeETH__factory.js +0 -721
  67. package/dist/cjs/contracts/factories/WeETH__factory.js.map +0 -1
  68. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  69. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5324
  70. package/dist/cjs/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  71. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  72. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -254
  73. package/dist/cjs/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  74. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  75. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js +0 -928
  76. package/dist/cjs/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  77. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  78. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js +0 -456
  79. package/dist/cjs/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  80. package/dist/cjs/contracts/factories/lean0/index.d.ts +0 -4
  81. package/dist/cjs/contracts/factories/lean0/index.js +0 -15
  82. package/dist/cjs/contracts/factories/lean0/index.js.map +0 -1
  83. package/dist/cjs/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  84. package/dist/cjs/contracts/lean0/IPerpetualManager.js +0 -3
  85. package/dist/cjs/contracts/lean0/IPerpetualManager.js.map +0 -1
  86. package/dist/cjs/contracts/lean0/LimitOrderBook.d.ts +0 -533
  87. package/dist/cjs/contracts/lean0/LimitOrderBook.js +0 -3
  88. package/dist/cjs/contracts/lean0/LimitOrderBook.js.map +0 -1
  89. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  90. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js +0 -3
  91. package/dist/cjs/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  92. package/dist/cjs/contracts/lean0/ShareToken.d.ts +0 -320
  93. package/dist/cjs/contracts/lean0/ShareToken.js +0 -3
  94. package/dist/cjs/contracts/lean0/ShareToken.js.map +0 -1
  95. package/dist/cjs/contracts/lean0/index.d.ts +0 -4
  96. package/dist/cjs/contracts/lean0/index.js +0 -3
  97. package/dist/cjs/contracts/lean0/index.js.map +0 -1
  98. package/dist/esm/abi/BeaconProxy.json +0 -71
  99. package/dist/esm/abi/Maintainer.json +0 -774
  100. package/dist/esm/abi/MockToken.json +0 -347
  101. package/dist/esm/abi/UUPSUpgradeable.json +0 -104
  102. package/dist/esm/abi/WeETH.json +0 -310
  103. package/dist/esm/abi/lean0/IPerpetualManager.json +0 -5306
  104. package/dist/esm/abi/lean0/LimitOrderBook.json +0 -910
  105. package/dist/esm/abi/lean0/LimitOrderBookFactory.json +0 -236
  106. package/dist/esm/abi/lean0/ShareToken.json +0 -438
  107. package/dist/esm/abi-zkevm/LimitOrderBook.json +0 -910
  108. package/dist/esm/abi-zkevm/LimitOrderBookFactory.json +0 -236
  109. package/dist/esm/contracts/BeaconProxy.d.ts +0 -63
  110. package/dist/esm/contracts/BeaconProxy.js +0 -2
  111. package/dist/esm/contracts/BeaconProxy.js.map +0 -1
  112. package/dist/esm/contracts/Maintainer.d.ts +0 -799
  113. package/dist/esm/contracts/Maintainer.js +0 -2
  114. package/dist/esm/contracts/Maintainer.js.map +0 -1
  115. package/dist/esm/contracts/MockToken.d.ts +0 -263
  116. package/dist/esm/contracts/MockToken.js +0 -2
  117. package/dist/esm/contracts/MockToken.js.map +0 -1
  118. package/dist/esm/contracts/UUPSUpgradeable.d.ts +0 -118
  119. package/dist/esm/contracts/UUPSUpgradeable.js +0 -2
  120. package/dist/esm/contracts/UUPSUpgradeable.js.map +0 -1
  121. package/dist/esm/contracts/WeETH.d.ts +0 -503
  122. package/dist/esm/contracts/WeETH.js +0 -2
  123. package/dist/esm/contracts/WeETH.js.map +0 -1
  124. package/dist/esm/contracts/factories/BeaconProxy__factory.d.ts +0 -61
  125. package/dist/esm/contracts/factories/BeaconProxy__factory.js +0 -85
  126. package/dist/esm/contracts/factories/BeaconProxy__factory.js.map +0 -1
  127. package/dist/esm/contracts/factories/Maintainer__factory.d.ts +0 -609
  128. package/dist/esm/contracts/factories/Maintainer__factory.js +0 -788
  129. package/dist/esm/contracts/factories/Maintainer__factory.js.map +0 -1
  130. package/dist/esm/contracts/factories/MockToken__factory.d.ts +0 -273
  131. package/dist/esm/contracts/factories/MockToken__factory.js.map +0 -1
  132. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.d.ts +0 -87
  133. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js +0 -118
  134. package/dist/esm/contracts/factories/UUPSUpgradeable__factory.js.map +0 -1
  135. package/dist/esm/contracts/factories/WeETH__factory.d.ts +0 -545
  136. package/dist/esm/contracts/factories/WeETH__factory.js +0 -717
  137. package/dist/esm/contracts/factories/WeETH__factory.js.map +0 -1
  138. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.d.ts +0 -4136
  139. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js +0 -5320
  140. package/dist/esm/contracts/factories/lean0/IPerpetualManager__factory.js.map +0 -1
  141. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.d.ts +0 -189
  142. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js +0 -250
  143. package/dist/esm/contracts/factories/lean0/LimitOrderBookFactory__factory.js.map +0 -1
  144. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.d.ts +0 -715
  145. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js +0 -924
  146. package/dist/esm/contracts/factories/lean0/LimitOrderBook__factory.js.map +0 -1
  147. package/dist/esm/contracts/factories/lean0/ShareToken__factory.d.ts +0 -344
  148. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js +0 -452
  149. package/dist/esm/contracts/factories/lean0/ShareToken__factory.js.map +0 -1
  150. package/dist/esm/contracts/factories/lean0/index.d.ts +0 -4
  151. package/dist/esm/contracts/factories/lean0/index.js +0 -8
  152. package/dist/esm/contracts/factories/lean0/index.js.map +0 -1
  153. package/dist/esm/contracts/lean0/IPerpetualManager.d.ts +0 -2821
  154. package/dist/esm/contracts/lean0/IPerpetualManager.js +0 -2
  155. package/dist/esm/contracts/lean0/IPerpetualManager.js.map +0 -1
  156. package/dist/esm/contracts/lean0/LimitOrderBook.d.ts +0 -533
  157. package/dist/esm/contracts/lean0/LimitOrderBook.js +0 -2
  158. package/dist/esm/contracts/lean0/LimitOrderBook.js.map +0 -1
  159. package/dist/esm/contracts/lean0/LimitOrderBookFactory.d.ts +0 -210
  160. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js +0 -2
  161. package/dist/esm/contracts/lean0/LimitOrderBookFactory.js.map +0 -1
  162. package/dist/esm/contracts/lean0/ShareToken.d.ts +0 -320
  163. package/dist/esm/contracts/lean0/ShareToken.js +0 -2
  164. package/dist/esm/contracts/lean0/ShareToken.js.map +0 -1
  165. package/dist/esm/contracts/lean0/index.d.ts +0 -4
  166. package/dist/esm/contracts/lean0/index.js +0 -2
  167. package/dist/esm/contracts/lean0/index.js.map +0 -1
@@ -597,7 +597,7 @@ after a trade of size tradeAmt in prediction markets</p>
597
597
  <p>Find maximal <em>affordable</em> trade size (short dir=-1 or long dir=1) for prediction
598
598
  markets at provided leverage and incorporating the current position
599
599
  and wallet balance.
600
- Factors in lot size and global max short/long</p>
600
+ Factors in lot size and global max short/long, factors in opening/closing position</p>
601
601
 
602
602
  **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
603
603
  **Returns**: <p>max <em>signed</em> trade size</p>
@@ -770,6 +770,7 @@ require gas-payments.</p>
770
770
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
771
771
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
772
772
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
773
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
773
774
 
774
775
  <a name="new_AccountTrade_new"></a>
775
776
 
@@ -1460,6 +1461,19 @@ main();
1460
1461
  | --- | --- |
1461
1462
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
1462
1463
 
1464
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
1465
+
1466
+ ### accountTrade.isLowLiquidityMarket(symbol) ⇒
1467
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
1468
+
1469
+ **Kind**: instance method of [<code>AccountTrade</code>](#AccountTrade)
1470
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
1471
+ **Returns**: <p>True if this is a low-liquidity market</p>
1472
+
1473
+ | Param | Description |
1474
+ | --- | --- |
1475
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
1476
+
1463
1477
  <a name="BrokerTool"></a>
1464
1478
 
1465
1479
  ## BrokerTool ⇐ [<code>WriteAccessHandler</code>](#WriteAccessHandler)
@@ -1516,6 +1530,7 @@ require gas-payments.</p>
1516
1530
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
1517
1531
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
1518
1532
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
1533
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
1519
1534
 
1520
1535
  <a name="new_BrokerTool_new"></a>
1521
1536
 
@@ -2390,6 +2405,19 @@ main();
2390
2405
  | --- | --- |
2391
2406
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
2392
2407
 
2408
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
2409
+
2410
+ ### brokerTool.isLowLiquidityMarket(symbol) ⇒
2411
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
2412
+
2413
+ **Kind**: instance method of [<code>BrokerTool</code>](#BrokerTool)
2414
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
2415
+ **Returns**: <p>True if this is a low-liquidity market</p>
2416
+
2417
+ | Param | Description |
2418
+ | --- | --- |
2419
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
2420
+
2393
2421
  <a name="LiquidatorTool"></a>
2394
2422
 
2395
2423
  ## LiquidatorTool ⇐ [<code>WriteAccessHandler</code>](#WriteAccessHandler)
@@ -2438,6 +2466,7 @@ and executes smart-contract interactions that require gas-payments.</p>
2438
2466
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
2439
2467
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
2440
2468
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
2469
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
2441
2470
 
2442
2471
  <a name="new_LiquidatorTool_new"></a>
2443
2472
 
@@ -3070,6 +3099,19 @@ main();
3070
3099
  | --- | --- |
3071
3100
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
3072
3101
 
3102
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
3103
+
3104
+ ### liquidatorTool.isLowLiquidityMarket(symbol) ⇒
3105
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
3106
+
3107
+ **Kind**: instance method of [<code>LiquidatorTool</code>](#LiquidatorTool)
3108
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
3109
+ **Returns**: <p>True if this is a low-liquidity market</p>
3110
+
3111
+ | Param | Description |
3112
+ | --- | --- |
3113
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
3114
+
3073
3115
  <a name="LiquidityProviderTool"></a>
3074
3116
 
3075
3117
  ## LiquidityProviderTool ⇐ [<code>WriteAccessHandler</code>](#WriteAccessHandler)
@@ -3116,6 +3158,7 @@ smart-contract interactions that require gas-payments.</p>
3116
3158
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
3117
3159
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
3118
3160
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
3161
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
3119
3162
 
3120
3163
  <a name="new_LiquidityProviderTool_new"></a>
3121
3164
 
@@ -3687,6 +3730,19 @@ main();
3687
3730
  | --- | --- |
3688
3731
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
3689
3732
 
3733
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
3734
+
3735
+ ### liquidityProviderTool.isLowLiquidityMarket(symbol) ⇒
3736
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
3737
+
3738
+ **Kind**: instance method of [<code>LiquidityProviderTool</code>](#LiquidityProviderTool)
3739
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
3740
+ **Returns**: <p>True if this is a low-liquidity market</p>
3741
+
3742
+ | Param | Description |
3743
+ | --- | --- |
3744
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
3745
+
3690
3746
  <a name="MarketData"></a>
3691
3747
 
3692
3748
  ## MarketData ⇐ [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
@@ -3717,6 +3773,7 @@ No gas required for the queries here.</p>
3717
3773
  * [.maxOrderSizeForTrader(traderAddr, symbol)](#MarketData+maxOrderSizeForTrader) ⇒
3718
3774
  * [.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides)](#MarketData+pmMaxOrderSizeForTrader) ⇒
3719
3775
  * [.getMaxShortLongTrade(perpId, currentTraderPos, overrides)](#MarketData+getMaxShortLongTrade) ⇒
3776
+ * [.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides)](#MarketData+rmMaxOrderSizeForTrader) ⇒
3720
3777
  * [.maxSignedPosition(side, symbol)](#MarketData+maxSignedPosition) ⇒ <code>number</code>
3721
3778
  * [.getOraclePrice(base, quote)](#MarketData+getOraclePrice) ⇒ <code>number</code>
3722
3779
  * [.getOrderStatus(symbol, orderId, overrides)](#MarketData+getOrderStatus) ⇒
@@ -3761,6 +3818,7 @@ No gas required for the queries here.</p>
3761
3818
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
3762
3819
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
3763
3820
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
3821
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
3764
3822
  * _static_
3765
3823
  * [.exchangeFeePrdMkts(maxMaintMgnRate, Sm, tradeAmtBC, tradeMgnRate)](#MarketData.exchangeFeePrdMkts) ⇒
3766
3824
 
@@ -4115,9 +4173,9 @@ main();
4115
4173
  <a name="MarketData+maxOrderSizeForTrader"></a>
4116
4174
 
4117
4175
  ### marketData.maxOrderSizeForTrader(traderAddr, symbol) ⇒
4118
- <p>Gets the maximal order sizes to open positions (increase size), both long and short,
4176
+ <p>Gets the maximal order sizes to open/close/flip positions, both long and short,
4119
4177
  considering the existing position, state of the perpetual
4120
- Accounts for user's wallet balance.</p>
4178
+ Accounts for user's wallet balance only in rmMaxOrderSizeForTrader case.</p>
4121
4179
 
4122
4180
  **Kind**: instance method of [<code>MarketData</code>](#MarketData)
4123
4181
  **Returns**: <p>Maximal buy and sell trade sizes (positive)</p>
@@ -4147,7 +4205,7 @@ main();
4147
4205
  ### marketData.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides) ⇒
4148
4206
  <p>pmMaxOrderSizeForTrader returns the max order size for the
4149
4207
  trader that is possible from AMM perspective (agnostic about wallet
4150
- balance and leverage)</p>
4208
+ balance and leverage, also correct if trader is shrinking their position)</p>
4151
4209
 
4152
4210
  **Kind**: instance method of [<code>MarketData</code>](#MarketData)
4153
4211
  **Returns**: <p>buy: number; sell: number absolute</p>
@@ -4173,6 +4231,20 @@ that has a given notional (in ABDK format) in the perpetual, ignoring the trader
4173
4231
  | currentTraderPos | <p>ABDK64x64 signed notional position of trader</p> |
4174
4232
  | overrides | |
4175
4233
 
4234
+ <a name="MarketData+rmMaxOrderSizeForTrader"></a>
4235
+
4236
+ ### marketData.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides) ⇒
4237
+ <p>Returns the maximal order size. Also applies to closing positions.</p>
4238
+
4239
+ **Kind**: instance method of [<code>MarketData</code>](#MarketData)
4240
+ **Returns**: <p>max buy and sell order size in absolute terms</p>
4241
+
4242
+ | Param | Description |
4243
+ | --- | --- |
4244
+ | traderAddr | <p>trader addr to get their position</p> |
4245
+ | symbol | <p>symbol we are trading</p> |
4246
+ | overrides | |
4247
+
4176
4248
  <a name="MarketData+maxSignedPosition"></a>
4177
4249
 
4178
4250
  ### marketData.maxSignedPosition(side, symbol) ⇒ <code>number</code>
@@ -4945,6 +5017,19 @@ main();
4945
5017
  | --- | --- |
4946
5018
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
4947
5019
 
5020
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
5021
+
5022
+ ### marketData.isLowLiquidityMarket(symbol) ⇒
5023
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
5024
+
5025
+ **Kind**: instance method of [<code>MarketData</code>](#MarketData)
5026
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
5027
+ **Returns**: <p>True if this is a low-liquidity market</p>
5028
+
5029
+ | Param | Description |
5030
+ | --- | --- |
5031
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
5032
+
4948
5033
  <a name="MarketData.exchangeFeePrdMkts"></a>
4949
5034
 
4950
5035
  ### MarketData.exchangeFeePrdMkts(maxMaintMgnRate, Sm, tradeAmtBC, tradeMgnRate) ⇒
@@ -5029,6 +5114,7 @@ gas-payments.</p>
5029
5114
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
5030
5115
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
5031
5116
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
5117
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
5032
5118
 
5033
5119
  <a name="new_OrderExecutorTool_new"></a>
5034
5120
 
@@ -5707,6 +5793,19 @@ main();
5707
5793
  | --- | --- |
5708
5794
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
5709
5795
 
5796
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
5797
+
5798
+ ### orderExecutorTool.isLowLiquidityMarket(symbol) ⇒
5799
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
5800
+
5801
+ **Kind**: instance method of [<code>OrderExecutorTool</code>](#OrderExecutorTool)
5802
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
5803
+ **Returns**: <p>True if this is a low-liquidity market</p>
5804
+
5805
+ | Param | Description |
5806
+ | --- | --- |
5807
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
5808
+
5710
5809
  <a name="PerpetualDataHandler"></a>
5711
5810
 
5712
5811
  ## PerpetualDataHandler
@@ -5746,6 +5845,7 @@ common data and chain operations.</p>
5746
5845
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
5747
5846
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
5748
5847
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
5848
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
5749
5849
  * _static_
5750
5850
  * [.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList)](#PerpetualDataHandler.getPerpetualStaticInfo) ⇒
5751
5851
  * [.nestedIDsToChunks(chunkSize, nestedIDs)](#PerpetualDataHandler.nestedIDsToChunks) ⇒ <code>Array.&lt;Array.&lt;number&gt;&gt;</code>
@@ -6157,6 +6257,18 @@ main();
6157
6257
  | --- | --- |
6158
6258
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
6159
6259
 
6260
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
6261
+
6262
+ ### perpetualDataHandler.isLowLiquidityMarket(symbol) ⇒
6263
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
6264
+
6265
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
6266
+ **Returns**: <p>True if this is a low-liquidity market</p>
6267
+
6268
+ | Param | Description |
6269
+ | --- | --- |
6270
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
6271
+
6160
6272
  <a name="PerpetualDataHandler.getPerpetualStaticInfo"></a>
6161
6273
 
6162
6274
  ### PerpetualDataHandler.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList) ⇒
@@ -6805,6 +6917,7 @@ trader liquidations, trade executions, change of trader margin amount.</p>
6805
6917
  * [.triangulatePricesFromFeedPrices(symbols, feeds)](#PriceFeeds+triangulatePricesFromFeedPrices) ⇒
6806
6918
  * [.fetchVAAQuery(query)](#PriceFeeds+fetchVAAQuery) ⇒
6807
6919
  * [.fetchPriceQuery(query)](#PriceFeeds+fetchPriceQuery) ⇒
6920
+ * [.fetchFullPriceQuery(query)](#PriceFeeds+fetchFullPriceQuery) ⇒
6808
6921
  * _static_
6809
6922
  * [.trimEndpoint(endp)](#PriceFeeds.trimEndpoint) ⇒
6810
6923
  * [._selectConfig(configs, network)](#PriceFeeds._selectConfig) ⇒
@@ -6972,7 +7085,19 @@ for the smart contracts</p>
6972
7085
  <p>Queries the REST endpoint and returns parsed price data</p>
6973
7086
 
6974
7087
  **Kind**: instance method of [<code>PriceFeeds</code>](#PriceFeeds)
6975
- **Returns**: <p>vaa and price info</p>
7088
+ **Returns**: <p>array of vaa and price info</p>
7089
+
7090
+ | Param | Description |
7091
+ | --- | --- |
7092
+ | query | <p>query price-info from endpoint</p> |
7093
+
7094
+ <a name="PriceFeeds+fetchFullPriceQuery"></a>
7095
+
7096
+ ### priceFeeds.fetchFullPriceQuery(query) ⇒
7097
+ <p>Queries the REST endpoint and returns parsed price data</p>
7098
+
7099
+ **Kind**: instance method of [<code>PriceFeeds</code>](#PriceFeeds)
7100
+ **Returns**: <p>object with vaa and price info (both spot and ema)</p>
6976
7101
 
6977
7102
  | Param | Description |
6978
7103
  | --- | --- |
@@ -7184,6 +7309,7 @@ so that signatures can be handled in frontend via wallet</p>
7184
7309
  * [.maxOrderSizeForTrader(traderAddr, symbol)](#MarketData+maxOrderSizeForTrader) ⇒
7185
7310
  * [.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides)](#MarketData+pmMaxOrderSizeForTrader) ⇒
7186
7311
  * [.getMaxShortLongTrade(perpId, currentTraderPos, overrides)](#MarketData+getMaxShortLongTrade) ⇒
7312
+ * [.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides)](#MarketData+rmMaxOrderSizeForTrader) ⇒
7187
7313
  * [.maxSignedPosition(side, symbol)](#MarketData+maxSignedPosition) ⇒ <code>number</code>
7188
7314
  * [.getOraclePrice(base, quote)](#MarketData+getOraclePrice) ⇒ <code>number</code>
7189
7315
  * [.getOrderStatus(symbol, orderId, overrides)](#MarketData+getOrderStatus) ⇒
@@ -7227,6 +7353,7 @@ so that signatures can be handled in frontend via wallet</p>
7227
7353
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
7228
7354
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
7229
7355
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
7356
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
7230
7357
  * _static_
7231
7358
  * [.chainOrders(orders, ids)](#TraderInterface.chainOrders) ⇒
7232
7359
 
@@ -7834,9 +7961,9 @@ main();
7834
7961
  <a name="MarketData+maxOrderSizeForTrader"></a>
7835
7962
 
7836
7963
  ### traderInterface.maxOrderSizeForTrader(traderAddr, symbol) ⇒
7837
- <p>Gets the maximal order sizes to open positions (increase size), both long and short,
7964
+ <p>Gets the maximal order sizes to open/close/flip positions, both long and short,
7838
7965
  considering the existing position, state of the perpetual
7839
- Accounts for user's wallet balance.</p>
7966
+ Accounts for user's wallet balance only in rmMaxOrderSizeForTrader case.</p>
7840
7967
 
7841
7968
  **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
7842
7969
  **Overrides**: [<code>maxOrderSizeForTrader</code>](#MarketData+maxOrderSizeForTrader)
@@ -7867,7 +7994,7 @@ main();
7867
7994
  ### traderInterface.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides) ⇒
7868
7995
  <p>pmMaxOrderSizeForTrader returns the max order size for the
7869
7996
  trader that is possible from AMM perspective (agnostic about wallet
7870
- balance and leverage)</p>
7997
+ balance and leverage, also correct if trader is shrinking their position)</p>
7871
7998
 
7872
7999
  **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
7873
8000
  **Overrides**: [<code>pmMaxOrderSizeForTrader</code>](#MarketData+pmMaxOrderSizeForTrader)
@@ -7895,6 +8022,21 @@ that has a given notional (in ABDK format) in the perpetual, ignoring the trader
7895
8022
  | currentTraderPos | <p>ABDK64x64 signed notional position of trader</p> |
7896
8023
  | overrides | |
7897
8024
 
8025
+ <a name="MarketData+rmMaxOrderSizeForTrader"></a>
8026
+
8027
+ ### traderInterface.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides) ⇒
8028
+ <p>Returns the maximal order size. Also applies to closing positions.</p>
8029
+
8030
+ **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
8031
+ **Overrides**: [<code>rmMaxOrderSizeForTrader</code>](#MarketData+rmMaxOrderSizeForTrader)
8032
+ **Returns**: <p>max buy and sell order size in absolute terms</p>
8033
+
8034
+ | Param | Description |
8035
+ | --- | --- |
8036
+ | traderAddr | <p>trader addr to get their position</p> |
8037
+ | symbol | <p>symbol we are trading</p> |
8038
+ | overrides | |
8039
+
7898
8040
  <a name="MarketData+maxSignedPosition"></a>
7899
8041
 
7900
8042
  ### traderInterface.maxSignedPosition(side, symbol) ⇒ <code>number</code>
@@ -8670,6 +8812,19 @@ main();
8670
8812
  | --- | --- |
8671
8813
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
8672
8814
 
8815
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
8816
+
8817
+ ### traderInterface.isLowLiquidityMarket(symbol) ⇒
8818
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
8819
+
8820
+ **Kind**: instance method of [<code>TraderInterface</code>](#TraderInterface)
8821
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
8822
+ **Returns**: <p>True if this is a low-liquidity market</p>
8823
+
8824
+ | Param | Description |
8825
+ | --- | --- |
8826
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
8827
+
8673
8828
  <a name="TraderInterface.chainOrders"></a>
8674
8829
 
8675
8830
  ### TraderInterface.chainOrders(orders, ids) ⇒
@@ -8729,6 +8884,7 @@ require gas-payments.</p>
8729
8884
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
8730
8885
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
8731
8886
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
8887
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
8732
8888
 
8733
8889
  <a name="new_WriteAccessHandler_new"></a>
8734
8890
 
@@ -9190,6 +9346,19 @@ main();
9190
9346
  | --- | --- |
9191
9347
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
9192
9348
 
9349
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
9350
+
9351
+ ### writeAccessHandler.isLowLiquidityMarket(symbol) ⇒
9352
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
9353
+
9354
+ **Kind**: instance method of [<code>WriteAccessHandler</code>](#WriteAccessHandler)
9355
+ **Overrides**: [<code>isLowLiquidityMarket</code>](#PerpetualDataHandler+isLowLiquidityMarket)
9356
+ **Returns**: <p>True if this is a low-liquidity market</p>
9357
+
9358
+ | Param | Description |
9359
+ | --- | --- |
9360
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
9361
+
9193
9362
  <a name="default"></a>
9194
9363
 
9195
9364
  ## default ⇒
package/doc/marketData.md CHANGED
@@ -28,6 +28,7 @@ No gas required for the queries here.</p>
28
28
  * [.maxOrderSizeForTrader(traderAddr, symbol)](#MarketData+maxOrderSizeForTrader) ⇒
29
29
  * [.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides)](#MarketData+pmMaxOrderSizeForTrader) ⇒
30
30
  * [.getMaxShortLongTrade(perpId, currentTraderPos, overrides)](#MarketData+getMaxShortLongTrade) ⇒
31
+ * [.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides)](#MarketData+rmMaxOrderSizeForTrader) ⇒
31
32
  * [.maxSignedPosition(side, symbol)](#MarketData+maxSignedPosition) ⇒ <code>number</code>
32
33
  * [.getOraclePrice(base, quote)](#MarketData+getOraclePrice) ⇒ <code>number</code>
33
34
  * [.getOrderStatus(symbol, orderId, overrides)](#MarketData+getOrderStatus) ⇒
@@ -398,9 +399,9 @@ main();
398
399
  <a name="MarketData+maxOrderSizeForTrader"></a>
399
400
 
400
401
  ### marketData.maxOrderSizeForTrader(traderAddr, symbol) ⇒
401
- <p>Gets the maximal order sizes to open positions (increase size), both long and short,
402
+ <p>Gets the maximal order sizes to open/close/flip positions, both long and short,
402
403
  considering the existing position, state of the perpetual
403
- Accounts for user's wallet balance.</p>
404
+ Accounts for user's wallet balance only in rmMaxOrderSizeForTrader case.</p>
404
405
 
405
406
  **Kind**: instance method of [<code>MarketData</code>](#MarketData)
406
407
  **Returns**: <p>Maximal buy and sell trade sizes (positive)</p>
@@ -430,7 +431,7 @@ main();
430
431
  ### marketData.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides) ⇒
431
432
  <p>pmMaxOrderSizeForTrader returns the max order size for the
432
433
  trader that is possible from AMM perspective (agnostic about wallet
433
- balance and leverage)</p>
434
+ balance and leverage, also correct if trader is shrinking their position)</p>
434
435
 
435
436
  **Kind**: instance method of [<code>MarketData</code>](#MarketData)
436
437
  **Returns**: <p>buy: number; sell: number absolute</p>
@@ -456,6 +457,20 @@ that has a given notional (in ABDK format) in the perpetual, ignoring the trader
456
457
  | currentTraderPos | <p>ABDK64x64 signed notional position of trader</p> |
457
458
  | overrides | |
458
459
 
460
+ <a name="MarketData+rmMaxOrderSizeForTrader"></a>
461
+
462
+ ### marketData.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides) ⇒
463
+ <p>Returns the maximal order size. Also applies to closing positions.</p>
464
+
465
+ **Kind**: instance method of [<code>MarketData</code>](#MarketData)
466
+ **Returns**: <p>max buy and sell order size in absolute terms</p>
467
+
468
+ | Param | Description |
469
+ | --- | --- |
470
+ | traderAddr | <p>trader addr to get their position</p> |
471
+ | symbol | <p>symbol we are trading</p> |
472
+ | overrides | |
473
+
459
474
  <a name="MarketData+maxSignedPosition"></a>
460
475
 
461
476
  ### marketData.maxSignedPosition(side, symbol) ⇒ <code>number</code>
@@ -37,6 +37,7 @@ common data and chain operations.</p>
37
37
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
38
38
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
39
39
  * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
40
+ * [.isLowLiquidityMarket(symbol)](#PerpetualDataHandler+isLowLiquidityMarket) ⇒
40
41
  * _static_
41
42
  * [.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList)](#PerpetualDataHandler.getPerpetualStaticInfo) ⇒
42
43
  * [.nestedIDsToChunks(chunkSize, nestedIDs)](#PerpetualDataHandler.nestedIDsToChunks) ⇒ <code>Array.&lt;Array.&lt;number&gt;&gt;</code>
@@ -448,6 +449,18 @@ main();
448
449
  | --- | --- |
449
450
  | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
450
451
 
452
+ <a name="PerpetualDataHandler+isLowLiquidityMarket"></a>
453
+
454
+ ### perpetualDataHandler.isLowLiquidityMarket(symbol) ⇒
455
+ <p>Determines whether a given perpetual represents a low-liquidity market</p>
456
+
457
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
458
+ **Returns**: <p>True if this is a low-liquidity market</p>
459
+
460
+ | Param | Description |
461
+ | --- | --- |
462
+ | symbol | <p>perpetual symbol of the form DIRAC-HONEY-USDC</p> |
463
+
451
464
  <a name="PerpetualDataHandler.getPerpetualStaticInfo"></a>
452
465
 
453
466
  ### PerpetualDataHandler.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList) ⇒
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d8x/perpetuals-sdk",
3
- "version": "2.4.1",
3
+ "version": "2.4.3",
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
@@ -780,7 +780,7 @@ function pmExcessCashAtLvg(
780
780
  * Find maximal *affordable* trade size (short dir=-1 or long dir=1) for prediction
781
781
  * markets at provided leverage and incorporating the current position
782
782
  * and wallet balance.
783
- * Factors in lot size and global max short/long
783
+ * Factors in lot size and global max short/long, factors in opening/closing position
784
784
  * @param dir direction of trade (-1 sell, 1 buy)
785
785
  * @param lvg leverage of the trade
786
786
  * @param walletBalCC wallet balance of the trader (collateral currency)
@@ -884,14 +884,32 @@ export function pmFindMaxPersonalTradeSizeAtLeverage(
884
884
  sNew = -Math.random() * (Math.abs(glblMaxTrade) + currentPosition);
885
885
  }
886
886
  }
887
- // ensure trade maximal trade sNew does not exceed
888
- // the contract limits
889
- if (sNew < -Math.abs(glblMaxTrade)) {
890
- sNew = -Math.abs(glblMaxTrade);
891
- } else if (sNew > glblMaxTrade) {
892
- sNew = glblMaxTrade;
893
- }
894
887
  // round trade size down to lot
895
888
  sNew = Math.sign(sNew) * Math.floor(Math.abs(sNew) / lot) * lot;
889
+ // Cases
890
+ // 1) trading in closing direction
891
+ // |sNew| >= |currPosition| ->
892
+ // - if we are flipping, global max applies
893
+ // - we should at least have currPos because we can always close
894
+ // max(min(|glblMaxTrade|, |sNew|), |currPos|)
895
+ // note: closing positions do not add any margin. If liquidations work correctly,
896
+ // the starting position is at least at maintenance margin and after reducing the
897
+ // size (which only costs trading fee from the margin), the new position is (without fees)
898
+ // above maintenance margin. Therefore assuming closing is always affordable
899
+ // 2) trading in opening dir
900
+ // min(|glblMaxTrade|,|sNew|)
901
+
902
+ // 2) ensure trade maximal trade sNew does not exceed
903
+ // the contract limits
904
+ // if opening trade, adhere to glblMaxTrade
905
+ sNew = dir * Math.min(Math.abs(sNew), Math.abs(glblMaxTrade));
906
+ // 1)
907
+ // We are trading into closing direction.
908
+ // So we need to make sure that glblMaxTrade did
909
+ // not shrink our sNew beyond the position size (per note |sNew|>|currentPosition| when closing)
910
+ const isClosingDir = currentPosition != 0 && currentPosition * dir < 0;
911
+ if (isClosingDir) {
912
+ return dir * Math.max(Math.abs(sNew), Math.abs(currentPosition));
913
+ }
896
914
  return sNew;
897
915
  }
package/src/marketData.ts CHANGED
@@ -1154,9 +1154,9 @@ export default class MarketData extends PerpetualDataHandler {
1154
1154
  }
1155
1155
 
1156
1156
  /**
1157
- * Gets the maximal order sizes to open positions (increase size), both long and short,
1157
+ * Gets the maximal order sizes to open/close/flip positions, both long and short,
1158
1158
  * considering the existing position, state of the perpetual
1159
- * Accounts for user's wallet balance.
1159
+ * Accounts for user's wallet balance only in rmMaxOrderSizeForTrader case.
1160
1160
  * @param {string} traderAddr Address of trader
1161
1161
  * @param {symbol} symbol Symbol of the form ETH-USD-MATIC
1162
1162
  * @returns Maximal buy and sell trade sizes (positive)
@@ -1183,17 +1183,17 @@ export default class MarketData extends PerpetualDataHandler {
1183
1183
  throw new Error("proxy contract not initialized");
1184
1184
  }
1185
1185
  if (this.isPredictionMarket(symbol)) {
1186
- // prediction markets
1186
+ // prediction markets: also works for closing positions
1187
1187
  return this.pmMaxOrderSizeForTrader(traderAddr, symbol, overrides);
1188
1188
  }
1189
- // regular markets
1189
+ // regular markets: also works for closing positions
1190
1190
  return this.rmMaxOrderSizeForTrader(traderAddr, symbol, overrides);
1191
1191
  }
1192
1192
 
1193
1193
  /**
1194
1194
  * pmMaxOrderSizeForTrader returns the max order size for the
1195
1195
  * trader that is possible from AMM perspective (agnostic about wallet
1196
- * balance and leverage)
1196
+ * balance and leverage, also correct if trader is shrinking their position)
1197
1197
  * @param traderAddr address of trader
1198
1198
  * @param symbol perp symbol
1199
1199
  * @param overrides optional
@@ -1286,6 +1286,13 @@ export default class MarketData extends PerpetualDataHandler {
1286
1286
  return [maxShortOrderPerp, maxLongOrderPerp];
1287
1287
  }
1288
1288
 
1289
+ /**
1290
+ * Returns the maximal order size. Also applies to closing positions.
1291
+ * @param traderAddr trader addr to get their position
1292
+ * @param symbol symbol we are trading
1293
+ * @param overrides
1294
+ * @returns max buy and sell order size in absolute terms
1295
+ */
1289
1296
  private async rmMaxOrderSizeForTrader(
1290
1297
  traderAddr: string,
1291
1298
  symbol: string,
@@ -1362,6 +1369,7 @@ export default class MarketData extends PerpetualDataHandler {
1362
1369
  poolInfo.poolSettleTokenDecimals
1363
1370
  );
1364
1371
 
1372
+ // getMaxShortLongTrade: allows closing of existing position
1365
1373
  const [maxShortTrade, maxLongTrade] = await this.getMaxShortLongTrade(perpId, traderState[idxNotional], overrides);
1366
1374
  const curPos = (account.side == BUY_SIDE ? 1 : -1) * account.positionNotionalBaseCCY;
1367
1375
 
package/src/priceFeeds.ts CHANGED
@@ -285,10 +285,11 @@ export default class PriceFeeds {
285
285
  const feedResponses = await this.fetchFeedPriceResponses(feedSymbols);
286
286
  // triangulate
287
287
  let feedPrices = new Map();
288
- for (const [key, value] of feedPrices) {
288
+ for (const [key, value] of feedResponses) {
289
289
  feedPrices.set(key, [value[0], value[1]]);
290
290
  }
291
291
  let [prices, mktClosed] = this.triangulatePricesFromFeedPrices(indexSymbols, feedPrices);
292
+
292
293
  // if low liquidity, assume base-quote is a feed
293
294
  if (this.dataHandler.isLowLiquidityMarket(symbol)) {
294
295
  const [, , s2Info, s2EmaInfo] = feedResponses.get(indexSymbols[0])!;
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const D8X_SDK_VERSION = "2.4.1";
1
+ export const D8X_SDK_VERSION = "2.4.3";
@@ -1,71 +0,0 @@
1
- [
2
- {
3
- "inputs": [
4
- {
5
- "internalType": "address",
6
- "name": "beacon",
7
- "type": "address"
8
- },
9
- {
10
- "internalType": "bytes",
11
- "name": "data",
12
- "type": "bytes"
13
- }
14
- ],
15
- "stateMutability": "payable",
16
- "type": "constructor"
17
- },
18
- {
19
- "anonymous": false,
20
- "inputs": [
21
- {
22
- "indexed": false,
23
- "internalType": "address",
24
- "name": "previousAdmin",
25
- "type": "address"
26
- },
27
- {
28
- "indexed": false,
29
- "internalType": "address",
30
- "name": "newAdmin",
31
- "type": "address"
32
- }
33
- ],
34
- "name": "AdminChanged",
35
- "type": "event"
36
- },
37
- {
38
- "anonymous": false,
39
- "inputs": [
40
- {
41
- "indexed": true,
42
- "internalType": "address",
43
- "name": "beacon",
44
- "type": "address"
45
- }
46
- ],
47
- "name": "BeaconUpgraded",
48
- "type": "event"
49
- },
50
- {
51
- "anonymous": false,
52
- "inputs": [
53
- {
54
- "indexed": true,
55
- "internalType": "address",
56
- "name": "implementation",
57
- "type": "address"
58
- }
59
- ],
60
- "name": "Upgraded",
61
- "type": "event"
62
- },
63
- {
64
- "stateMutability": "payable",
65
- "type": "fallback"
66
- },
67
- {
68
- "stateMutability": "payable",
69
- "type": "receive"
70
- }
71
- ]