@d8x/perpetuals-sdk 2.1.0-alpha2 → 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.
Files changed (97) hide show
  1. package/dist/cjs/abi/IPerpetualManager.json +30 -1
  2. package/dist/cjs/accountTrade.d.ts +3 -3
  3. package/dist/cjs/accountTrade.js +1 -1
  4. package/dist/cjs/accountTrade.js.map +1 -1
  5. package/dist/cjs/brokerTool.js +7 -7
  6. package/dist/cjs/brokerTool.js.map +1 -1
  7. package/dist/cjs/config/defaultConfig.json +0 -12
  8. package/dist/cjs/config/priceFeedConfig.json +1 -1
  9. package/dist/cjs/constants.d.ts +0 -1
  10. package/dist/cjs/constants.js +2 -3
  11. package/dist/cjs/constants.js.map +1 -1
  12. package/dist/cjs/contracts/IPerpetualManager.d.ts +20 -4
  13. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +23 -1
  14. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +30 -1
  15. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  16. package/dist/cjs/d8XMath.d.ts +16 -1
  17. package/dist/cjs/d8XMath.js +28 -5
  18. package/dist/cjs/d8XMath.js.map +1 -1
  19. package/dist/cjs/liquidatorTool.js +2 -2
  20. package/dist/cjs/liquidatorTool.js.map +1 -1
  21. package/dist/cjs/marketData.d.ts +3 -3
  22. package/dist/cjs/marketData.js +38 -16
  23. package/dist/cjs/marketData.js.map +1 -1
  24. package/dist/cjs/nodeSDKTypes.d.ts +3 -2
  25. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  26. package/dist/cjs/perpetualDataHandler.d.ts +9 -8
  27. package/dist/cjs/perpetualDataHandler.js +17 -6
  28. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  29. package/dist/cjs/polyMktsPxFeed.d.ts +1 -1
  30. package/dist/cjs/polyMktsPxFeed.js +15 -4
  31. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  32. package/dist/cjs/priceFeeds.js +2 -2
  33. package/dist/cjs/priceFeeds.js.map +1 -1
  34. package/dist/cjs/version.d.ts +1 -1
  35. package/dist/cjs/version.js +1 -1
  36. package/dist/cjs/writeAccessHandler.js +1 -1
  37. package/dist/cjs/writeAccessHandler.js.map +1 -1
  38. package/dist/esm/abi/IPerpetualManager.json +30 -1
  39. package/dist/esm/accountTrade.d.ts +3 -3
  40. package/dist/esm/accountTrade.js +1 -1
  41. package/dist/esm/accountTrade.js.map +1 -1
  42. package/dist/esm/brokerTool.js +7 -7
  43. package/dist/esm/brokerTool.js.map +1 -1
  44. package/dist/esm/config/defaultConfig.json +0 -12
  45. package/dist/esm/config/priceFeedConfig.json +1 -1
  46. package/dist/esm/constants.d.ts +0 -1
  47. package/dist/esm/constants.js +1 -2
  48. package/dist/esm/constants.js.map +1 -1
  49. package/dist/esm/contracts/IPerpetualManager.d.ts +20 -4
  50. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +23 -1
  51. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +30 -1
  52. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  53. package/dist/esm/d8XMath.d.ts +16 -1
  54. package/dist/esm/d8XMath.js +26 -4
  55. package/dist/esm/d8XMath.js.map +1 -1
  56. package/dist/esm/liquidatorTool.js +2 -2
  57. package/dist/esm/liquidatorTool.js.map +1 -1
  58. package/dist/esm/marketData.d.ts +3 -3
  59. package/dist/esm/marketData.js +39 -17
  60. package/dist/esm/marketData.js.map +1 -1
  61. package/dist/esm/nodeSDKTypes.d.ts +3 -2
  62. package/dist/esm/nodeSDKTypes.js.map +1 -1
  63. package/dist/esm/perpetualDataHandler.d.ts +9 -8
  64. package/dist/esm/perpetualDataHandler.js +19 -8
  65. package/dist/esm/perpetualDataHandler.js.map +1 -1
  66. package/dist/esm/polyMktsPxFeed.d.ts +1 -1
  67. package/dist/esm/polyMktsPxFeed.js +15 -4
  68. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  69. package/dist/esm/priceFeeds.js +2 -2
  70. package/dist/esm/priceFeeds.js.map +1 -1
  71. package/dist/esm/version.d.ts +1 -1
  72. package/dist/esm/version.js +1 -1
  73. package/dist/esm/writeAccessHandler.js +3 -3
  74. package/dist/esm/writeAccessHandler.js.map +1 -1
  75. package/doc/brokerTool.md +3 -1
  76. package/doc/d8x-perpetuals-sdk.md +804 -132
  77. package/doc/marketData.md +813 -0
  78. package/doc/perpetualDataHandler.md +76 -7
  79. package/package.json +1 -1
  80. package/src/abi/IPerpetualManager.json +30 -1
  81. package/src/accountTrade.ts +3 -3
  82. package/src/brokerTool.ts +7 -7
  83. package/src/config/defaultConfig.json +0 -13
  84. package/src/config/priceFeedConfig.json +1 -1
  85. package/src/constants.ts +1 -2
  86. package/src/contracts/IPerpetualManager.ts +33 -3
  87. package/src/contracts/factories/IPerpetualManager__factory.ts +30 -1
  88. package/src/d8XMath.ts +27 -4
  89. package/src/liquidatorTool.ts +2 -2
  90. package/src/marketData.ts +41 -20
  91. package/src/nodeSDKTypes.ts +3 -2
  92. package/src/perpetualDataHandler.ts +26 -15
  93. package/src/polyMktsPxFeed.ts +15 -4
  94. package/src/priceFeeds.ts +2 -2
  95. package/src/version.ts +1 -1
  96. package/src/writeAccessHandler.ts +2 -2
  97. package/src/abi-zkevm/IPerpetualManager.json +0 -5366
@@ -10,6 +10,7 @@ common data and chain operations.</p>
10
10
  * [new PerpetualDataHandler(config)](#new_PerpetualDataHandler_new)
11
11
  * _instance_
12
12
  * [.getOrderBookContract(symbol)](#PerpetualDataHandler+getOrderBookContract) ⇒
13
+ * [.getOrderBookAddress(symbol)](#PerpetualDataHandler+getOrderBookAddress) ⇒
13
14
  * [.getPerpetuals(ids, overrides)](#PerpetualDataHandler+getPerpetuals) ⇒
14
15
  * [.getLiquidityPools(fromIdx, toIdx, overrides)](#PerpetualDataHandler+getLiquidityPools) ⇒
15
16
  * [._fillSymbolMaps()](#PerpetualDataHandler+_fillSymbolMaps)
@@ -34,13 +35,16 @@ common data and chain operations.</p>
34
35
  * [.getMarginTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getMarginTokenDecimalsFromSymbol) ⇒
35
36
  * [.getSettlementTokenDecimalsFromSymbol(symbol)](#PerpetualDataHandler+getSettlementTokenDecimalsFromSymbol) ⇒
36
37
  * [.getABI(contract)](#PerpetualDataHandler+getABI) ⇒
38
+ * [.isPredictionMarket(symbol)](#PerpetualDataHandler+isPredictionMarket) ⇒
37
39
  * _static_
38
40
  * [.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList)](#PerpetualDataHandler.getPerpetualStaticInfo) ⇒
39
41
  * [.nestedIDsToChunks(chunkSize, nestedIDs)](#PerpetualDataHandler.nestedIDsToChunks) ⇒ <code>Array.&lt;Array.&lt;number&gt;&gt;</code>
40
42
  * [._getLiquidityPools(ids, _proxyContract, _symbolList, overrides)](#PerpetualDataHandler._getLiquidityPools) ⇒
41
43
  * [._getPerpetuals(ids, _proxyContract, _symbolList, overrides)](#PerpetualDataHandler._getPerpetuals) ⇒
42
- * [.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxS2S3, overrides)](#PerpetualDataHandler.getMarginAccount) ⇒
43
- * [.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxS2S3s, overrides)](#PerpetualDataHandler.getMarginAccounts) ⇒
44
+ * [.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxInfo, overrides)](#PerpetualDataHandler.getMarginAccount) ⇒
45
+ * [.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxInfo, overrides)](#PerpetualDataHandler.getMarginAccounts) ⇒
46
+ * [._queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, isPredMkt, overrides)](#PerpetualDataHandler._queryPerpetualMarkPrice) ⇒
47
+ * [._oiAndAmmPosToLongShort(oi, ammPos)](#PerpetualDataHandler._oiAndAmmPosToLongShort) ⇒
44
48
  * [._calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo)](#PerpetualDataHandler._calculateLiquidationPrice) ⇒
45
49
  * [.symbolToPerpetualId(symbol, symbolToPerpStaticInfo)](#PerpetualDataHandler.symbolToPerpetualId) ⇒
46
50
  * [.toSmartContractOrder(order, traderAddr, symbolToPerpetualMap)](#PerpetualDataHandler.toSmartContractOrder) ⇒
@@ -56,6 +60,7 @@ common data and chain operations.</p>
56
60
  * [._getABIFromContract(contract, functionName)](#PerpetualDataHandler._getABIFromContract) ⇒
57
61
  * [.checkOrder(order, traderAccount, perpStaticInfo)](#PerpetualDataHandler.checkOrder)
58
62
  * [.fromClientOrderToTypeSafeOrder(order)](#PerpetualDataHandler.fromClientOrderToTypeSafeOrder) ⇒
63
+ * [.isPredictionMarketStatic(staticInfo)](#PerpetualDataHandler.isPredictionMarketStatic) ⇒
59
64
 
60
65
  <a name="new_PerpetualDataHandler_new"></a>
61
66
 
@@ -79,6 +84,18 @@ common data and chain operations.</p>
79
84
  | --- | --- |
80
85
  | symbol | <p>symbol of the form ETH-USD-MATIC</p> |
81
86
 
87
+ <a name="PerpetualDataHandler+getOrderBookAddress"></a>
88
+
89
+ ### perpetualDataHandler.getOrderBookAddress(symbol) ⇒
90
+ <p>Returns the order-book contract for the symbol if found or fails</p>
91
+
92
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
93
+ **Returns**: <p>order book contract for the perpetual</p>
94
+
95
+ | Param | Description |
96
+ | --- | --- |
97
+ | symbol | <p>symbol of the form ETH-USD-MATIC</p> |
98
+
82
99
  <a name="PerpetualDataHandler+getPerpetuals"></a>
83
100
 
84
101
  ### perpetualDataHandler.getPerpetuals(ids, overrides) ⇒
@@ -412,6 +429,18 @@ main();
412
429
  | --- | --- |
413
430
  | contract | <p>name of contract: proxy|lob|sharetoken</p> |
414
431
 
432
+ <a name="PerpetualDataHandler+isPredictionMarket"></a>
433
+
434
+ ### perpetualDataHandler.isPredictionMarket(symbol) ⇒
435
+ <p>Determines whether a given perpetual represents a prediction market</p>
436
+
437
+ **Kind**: instance method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
438
+ **Returns**: <p>True if this is a prediction market</p>
439
+
440
+ | Param | Description |
441
+ | --- | --- |
442
+ | symbol | <p>perpetual symbol of the form TRUMP24-USD-USDC</p> |
443
+
415
444
  <a name="PerpetualDataHandler.getPerpetualStaticInfo"></a>
416
445
 
417
446
  ### PerpetualDataHandler.getPerpetualStaticInfo(_proxyContract, nestedPerpetualIDs, symbolList) ⇒
@@ -471,7 +500,7 @@ main();
471
500
 
472
501
  <a name="PerpetualDataHandler.getMarginAccount"></a>
473
502
 
474
- ### PerpetualDataHandler.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxS2S3, overrides) ⇒
503
+ ### PerpetualDataHandler.getMarginAccount(traderAddr, symbol, symbolToPerpStaticInfo, _proxyContract, _pxInfo, overrides) ⇒
475
504
  <p>Get trader state from the blockchain and parse into a human-readable margin account</p>
476
505
 
477
506
  **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
@@ -483,12 +512,12 @@ main();
483
512
  | symbol | <p>Perpetual symbol</p> |
484
513
  | symbolToPerpStaticInfo | <p>Symbol to perp static info mapping</p> |
485
514
  | _proxyContract | <p>Proxy contract instance</p> |
486
- | _pxS2S3 | <p>Prices [S2, S3]</p> |
515
+ | _pxInfo | <p>index price info</p> |
487
516
  | overrides | <p>Optional overrides for eth_call</p> |
488
517
 
489
518
  <a name="PerpetualDataHandler.getMarginAccounts"></a>
490
519
 
491
- ### PerpetualDataHandler.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxS2S3s, overrides) ⇒
520
+ ### PerpetualDataHandler.getMarginAccounts(traderAddrs, symbols, symbolToPerpStaticInfo, _multicall, _proxyContract, _pxInfo, overrides) ⇒
492
521
  <p>Get trader states from the blockchain and parse into a list of human-readable margin accounts</p>
493
522
 
494
523
  **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
@@ -501,9 +530,37 @@ main();
501
530
  | symbolToPerpStaticInfo | <p>Symbol to perp static info mapping</p> |
502
531
  | _multicall | <p>Multicall3 contract instance</p> |
503
532
  | _proxyContract | <p>Proxy contract instance</p> |
504
- | _pxS2S3s | <p>List of price pairs, [[S2, S3] (1st perp), [S2, S3] (2nd perp), ... ]</p> |
533
+ | _pxInfo | <p>List of price info</p> |
505
534
  | overrides | <p>Optional eth_call overrides</p> |
506
535
 
536
+ <a name="PerpetualDataHandler._queryPerpetualMarkPrice"></a>
537
+
538
+ ### PerpetualDataHandler.\_queryPerpetualMarkPrice(symbol, symbolToPerpStaticInfo, _proxyContract, indexPrices, isPredMkt, overrides) ⇒
539
+ **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
540
+ **Returns**: <p>mark price</p>
541
+
542
+ | Param | Description |
543
+ | --- | --- |
544
+ | symbol | <p>perpetual symbol of the form BTC-USDC-USDC</p> |
545
+ | symbolToPerpStaticInfo | <p>mapping</p> |
546
+ | _proxyContract | <p>contract instance</p> |
547
+ | indexPrices | <p>IdxPriceInfo</p> |
548
+ | isPredMkt | <p>true if prediction market perpetual</p> |
549
+ | overrides | |
550
+
551
+ <a name="PerpetualDataHandler._oiAndAmmPosToLongShort"></a>
552
+
553
+ ### PerpetualDataHandler.\_oiAndAmmPosToLongShort(oi, ammPos) ⇒
554
+ <p>Calculate long and short exposures from open interest and long/short</p>
555
+
556
+ **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
557
+ **Returns**: <p>long, short exposure</p>
558
+
559
+ | Param | Description |
560
+ | --- | --- |
561
+ | oi | <p>open interest</p> |
562
+ | ammPos | <p>amm net exposure</p> |
563
+
507
564
  <a name="PerpetualDataHandler._calculateLiquidationPrice"></a>
508
565
 
509
566
  ### PerpetualDataHandler.\_calculateLiquidationPrice(symbol, traderState, S2, symbolToPerpStaticInfo) ⇒
@@ -674,7 +731,7 @@ main();
674
731
  <a name="PerpetualDataHandler._getABIFromContract"></a>
675
732
 
676
733
  ### PerpetualDataHandler.\_getABIFromContract(contract, functionName) ⇒
677
- <p>Get the ABI of a function in a given contract</p>
734
+ <p>Get the ABI of a function in a given contract. Undefined if it doesn't exist.</p>
678
735
 
679
736
  **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
680
737
  **Returns**: <p>Function ABI as a single JSON string</p>
@@ -709,3 +766,15 @@ main();
709
766
  | --- | --- |
710
767
  | order | <p>Client order</p> |
711
768
 
769
+ <a name="PerpetualDataHandler.isPredictionMarketStatic"></a>
770
+
771
+ ### PerpetualDataHandler.isPredictionMarketStatic(staticInfo) ⇒
772
+ <p>Determines whether a given perpetual represents a prediction market</p>
773
+
774
+ **Kind**: static method of [<code>PerpetualDataHandler</code>](#PerpetualDataHandler)
775
+ **Returns**: <p>True if this is a prediction market</p>
776
+
777
+ | Param | Description |
778
+ | --- | --- |
779
+ | staticInfo | <p>Perpetual static info</p> |
780
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d8x/perpetuals-sdk",
3
- "version": "2.1.0-alpha2",
3
+ "version": "2.1.1-alpha2",
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",
@@ -1095,7 +1095,7 @@
1095
1095
  {
1096
1096
  "indexed": false,
1097
1097
  "internalType": "int128",
1098
- "name": "fSpotIndexPrice",
1098
+ "name": "fMarkIndexPrice",
1099
1099
  "type": "int128"
1100
1100
  }
1101
1101
  ],
@@ -2301,6 +2301,35 @@
2301
2301
  "stateMutability": "pure",
2302
2302
  "type": "function"
2303
2303
  },
2304
+ {
2305
+ "inputs": [
2306
+ {
2307
+ "internalType": "uint24",
2308
+ "name": "_perpetualId",
2309
+ "type": "uint24"
2310
+ },
2311
+ {
2312
+ "internalType": "int128",
2313
+ "name": "_fAmount",
2314
+ "type": "int128"
2315
+ },
2316
+ {
2317
+ "internalType": "uint16",
2318
+ "name": "_leverageTDR",
2319
+ "type": "uint16"
2320
+ }
2321
+ ],
2322
+ "name": "getExchangeFeePrdMkts",
2323
+ "outputs": [
2324
+ {
2325
+ "internalType": "uint16",
2326
+ "name": "",
2327
+ "type": "uint16"
2328
+ }
2329
+ ],
2330
+ "stateMutability": "view",
2331
+ "type": "function"
2332
+ },
2304
2333
  {
2305
2334
  "inputs": [
2306
2335
  {
@@ -1,7 +1,7 @@
1
1
  import { Buffer } from "buffer";
2
2
  import { BigNumberish, Contract, ContractTransaction, ContractTransactionResponse, Overrides, Signer } from "ethers";
3
3
  import { ZERO_ADDRESS } from "./constants";
4
- import { LimitOrderBook } from "./contracts";
4
+ import { IPerpetualManager, LimitOrderBook } from "./contracts";
5
5
  import { PayableOverrides } from "./contracts/common";
6
6
  import { ABK64x64ToFloat, floatToABK64x64 } from "./d8XMath";
7
7
  import MarketData from "./marketData";
@@ -176,7 +176,7 @@ export default class AccountTrade extends WriteAccessHandler {
176
176
  }
177
177
  let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
178
178
  let feeTbps = await this.proxyContract.queryExchangeFee(poolId, this.traderAddr, brokerAddr, overrides || {});
179
- return feeTbps / 100_000;
179
+ return Number(feeTbps) / 100_000;
180
180
  }
181
181
 
182
182
  /**
@@ -254,7 +254,7 @@ export default class AccountTrade extends WriteAccessHandler {
254
254
  order: Order,
255
255
  traderAddr: string,
256
256
  symbolToPerpetualMap: Map<string, PerpetualStaticInfo>,
257
- proxyContract: Contract,
257
+ proxyContract: IPerpetualManager,
258
258
  orderBookContract: LimitOrderBook,
259
259
  chainId: BigNumberish,
260
260
  signer: Signer,
package/src/brokerTool.ts CHANGED
@@ -68,7 +68,7 @@ export default class BrokerTool extends WriteAccessHandler {
68
68
  }
69
69
  let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
70
70
  let feeTbps = await this.proxyContract.getBrokerInducedFee(poolId, this.traderAddr, overrides || {});
71
- let fee = feeTbps / 100_000;
71
+ let fee = Number(feeTbps) / 100_000;
72
72
  if (fee == 0.65535) {
73
73
  return undefined;
74
74
  }
@@ -115,7 +115,7 @@ export default class BrokerTool extends WriteAccessHandler {
115
115
  brokerDesignation = lots;
116
116
  }
117
117
  let feeTbps = await this.proxyContract.getFeeForBrokerDesignation(brokerDesignation, overrides || {});
118
- return feeTbps / 100_000;
118
+ return Number(feeTbps) / 100_000;
119
119
  }
120
120
 
121
121
  /**
@@ -146,7 +146,7 @@ export default class BrokerTool extends WriteAccessHandler {
146
146
  }
147
147
  let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
148
148
  let feeTbps = await this.proxyContract.getFeeForBrokerVolume(poolId, this.traderAddr, overrides || {});
149
- return feeTbps / 100_000;
149
+ return Number(feeTbps) / 100_000;
150
150
  }
151
151
 
152
152
  /**
@@ -179,7 +179,7 @@ export default class BrokerTool extends WriteAccessHandler {
179
179
  brokerAddr = this.traderAddr;
180
180
  }
181
181
  let feeTbps = await this.proxyContract.getFeeForBrokerStake(brokerAddr, overrides || {});
182
- return feeTbps / 100_000;
182
+ return Number(feeTbps) / 100_000;
183
183
  }
184
184
 
185
185
  /**
@@ -231,12 +231,12 @@ export default class BrokerTool extends WriteAccessHandler {
231
231
  const lvgTdr = order.leverage == undefined ? 0 : Math.round(100 * order.leverage);
232
232
  const feeTbps = await this.proxyContract.getExchangeFeePrdMkts(id, fAmount, lvgTdr);
233
233
 
234
- return feeTbps / 100_000;
234
+ return Number(feeTbps) / 100_000;
235
235
  }
236
236
  // regular markets
237
237
  let scOrder = AccountTrade.toSmartContractOrder(order, traderAddr, this.symbolToPerpStaticInfo);
238
238
  let feeTbps = await this.proxyContract.determineExchangeFee(scOrder, overrides || {});
239
- return feeTbps / 100_000;
239
+ return Number(feeTbps) / 100_000;
240
240
  }
241
241
 
242
242
  // Volume
@@ -331,7 +331,7 @@ export default class BrokerTool extends WriteAccessHandler {
331
331
  }
332
332
  let poolId = PerpetualDataHandler._getPoolIdFromSymbol(poolSymbolName, this.poolStaticInfos);
333
333
  let designation = await this.proxyContract.getBrokerDesignation(poolId, this.traderAddr, overrides || {});
334
- return designation;
334
+ return Number(designation);
335
335
  }
336
336
 
337
337
  /**
@@ -1,17 +1,4 @@
1
1
  [
2
- {
3
- "name": "zkevm",
4
- "chainId": 1101,
5
- "version": 1,
6
- "proxyAddr": "0xaB7794EcD2c8e9Decc6B577864b40eBf9204720f",
7
- "nodeURL": "https://zkevm-rpc.com",
8
- "priceFeedConfigNetwork": "mainnet",
9
- "shareTokenABILocation": "./abi/ShareToken.json",
10
- "proxyABILocation": "./abi-zkevm/IPerpetualManager.json",
11
- "limitOrderBookFactoryABILocation": "./abi/LimitOrderBookFactory.json",
12
- "limitOrderBookABILocation": "./abi/LimitOrderBook.json"
13
- },
14
-
15
2
  {
16
3
  "name": "x1",
17
4
  "chainId": 195,
@@ -246,7 +246,7 @@
246
246
  }
247
247
  ],
248
248
  "endpoints": [
249
- { "type": "odin", "endpoints": ["https://hermes.pyth.network"], "writeEndpoints": ["https://odin.d8x.xyz"] },
249
+ { "type": "odin", "endpoints": ["https://hermes.pyth.network"], "writeEndpoints": ["https://odin-poly.d8x.xyz"] },
250
250
  { "type": "polymarket", "endpoints": [""], "writeEndpoints": ["https://odin-poly.d8x.xyz"] }
251
251
  ]
252
252
  }
package/src/constants.ts CHANGED
@@ -4,7 +4,6 @@ import { NodeSDKConfig } from "./nodeSDKTypes";
4
4
  export const ERC20_ABI = require("./abi/ERC20.json");
5
5
  export const MOCK_TOKEN_SWAP_ABI = require("./abi/MockTokenSwap.json");
6
6
  export const PROXY_ABI = require("./abi/IPerpetualManager.json");
7
- export const PROXY_ZKEVM_ABI = require("./abi-zkevm/IPerpetualManager.json");
8
7
  export const LOB_FACTORY_ABI = require("./abi/LimitOrderBookFactory.json");
9
8
  export const LOB_ABI = require("./abi/LimitOrderBook.json");
10
9
  export const SHARE_TOKEN_ABI = require("./abi/ShareToken.json");
@@ -58,7 +57,7 @@ export const DEFAULT_CONFIG_TESTNET_NAME = "testnet";
58
57
 
59
58
  let defaultConfigs = require("./config/defaultConfig.json") as NodeSDKConfig[];
60
59
  defaultConfigs.map((config) => {
61
- config.proxyABI = config.proxyABILocation.includes("abi-zkevm") ? PROXY_ZKEVM_ABI : PROXY_ABI;
60
+ config.proxyABI = PROXY_ABI;
62
61
  config.lobABI = LOB_ABI;
63
62
  config.lobFactoryABI = LOB_FACTORY_ABI;
64
63
  config.shareTokenABI = SHARE_TOKEN_ABI;
@@ -459,6 +459,7 @@ export interface IPerpetualManagerInterface extends Interface {
459
459
  | "getCurrentBrokerVolume"
460
460
  | "getCurrentTraderVolume"
461
461
  | "getDepositAmountForLvgPosition"
462
+ | "getExchangeFeePrdMkts"
462
463
  | "getFeeForBrokerDesignation"
463
464
  | "getFeeForBrokerStake"
464
465
  | "getFeeForBrokerVolume"
@@ -787,6 +788,10 @@ export interface IPerpetualManagerInterface extends Interface {
787
788
  BigNumberish
788
789
  ]
789
790
  ): string;
791
+ encodeFunctionData(
792
+ functionFragment: "getExchangeFeePrdMkts",
793
+ values: [BigNumberish, BigNumberish, BigNumberish]
794
+ ): string;
790
795
  encodeFunctionData(
791
796
  functionFragment: "getFeeForBrokerDesignation",
792
797
  values: [BigNumberish]
@@ -1358,6 +1363,10 @@ export interface IPerpetualManagerInterface extends Interface {
1358
1363
  functionFragment: "getDepositAmountForLvgPosition",
1359
1364
  data: BytesLike
1360
1365
  ): Result;
1366
+ decodeFunctionResult(
1367
+ functionFragment: "getExchangeFeePrdMkts",
1368
+ data: BytesLike
1369
+ ): Result;
1361
1370
  decodeFunctionResult(
1362
1371
  functionFragment: "getFeeForBrokerDesignation",
1363
1372
  data: BytesLike
@@ -2544,19 +2553,19 @@ export namespace UpdateMarkPriceEvent {
2544
2553
  perpetualId: BigNumberish,
2545
2554
  fMidPricePremium: BigNumberish,
2546
2555
  fMarkPricePremium: BigNumberish,
2547
- fSpotIndexPrice: BigNumberish
2556
+ fMarkIndexPrice: BigNumberish
2548
2557
  ];
2549
2558
  export type OutputTuple = [
2550
2559
  perpetualId: bigint,
2551
2560
  fMidPricePremium: bigint,
2552
2561
  fMarkPricePremium: bigint,
2553
- fSpotIndexPrice: bigint
2562
+ fMarkIndexPrice: bigint
2554
2563
  ];
2555
2564
  export interface OutputObject {
2556
2565
  perpetualId: bigint;
2557
2566
  fMidPricePremium: bigint;
2558
2567
  fMarkPricePremium: bigint;
2559
- fSpotIndexPrice: bigint;
2568
+ fMarkIndexPrice: bigint;
2560
2569
  }
2561
2570
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
2562
2571
  export type Filter = TypedDeferredTopicFilter<Event>;
@@ -2871,6 +2880,16 @@ export interface IPerpetualManager extends BaseContract {
2871
2880
  "view"
2872
2881
  >;
2873
2882
 
2883
+ getExchangeFeePrdMkts: TypedContractMethod<
2884
+ [
2885
+ _perpetualId: BigNumberish,
2886
+ _fAmount: BigNumberish,
2887
+ _leverageTDR: BigNumberish
2888
+ ],
2889
+ [bigint],
2890
+ "view"
2891
+ >;
2892
+
2874
2893
  getFeeForBrokerDesignation: TypedContractMethod<
2875
2894
  [_brokerDesignation: BigNumberish],
2876
2895
  [bigint],
@@ -3810,6 +3829,17 @@ export interface IPerpetualManager extends BaseContract {
3810
3829
  [bigint],
3811
3830
  "view"
3812
3831
  >;
3832
+ getFunction(
3833
+ nameOrSignature: "getExchangeFeePrdMkts"
3834
+ ): TypedContractMethod<
3835
+ [
3836
+ _perpetualId: BigNumberish,
3837
+ _fAmount: BigNumberish,
3838
+ _leverageTDR: BigNumberish
3839
+ ],
3840
+ [bigint],
3841
+ "view"
3842
+ >;
3813
3843
  getFunction(
3814
3844
  nameOrSignature: "getFeeForBrokerDesignation"
3815
3845
  ): TypedContractMethod<[_brokerDesignation: BigNumberish], [bigint], "view">;
@@ -1105,7 +1105,7 @@ const _abi = [
1105
1105
  {
1106
1106
  indexed: false,
1107
1107
  internalType: "int128",
1108
- name: "fSpotIndexPrice",
1108
+ name: "fMarkIndexPrice",
1109
1109
  type: "int128",
1110
1110
  },
1111
1111
  ],
@@ -2311,6 +2311,35 @@ const _abi = [
2311
2311
  stateMutability: "pure",
2312
2312
  type: "function",
2313
2313
  },
2314
+ {
2315
+ inputs: [
2316
+ {
2317
+ internalType: "uint24",
2318
+ name: "_perpetualId",
2319
+ type: "uint24",
2320
+ },
2321
+ {
2322
+ internalType: "int128",
2323
+ name: "_fAmount",
2324
+ type: "int128",
2325
+ },
2326
+ {
2327
+ internalType: "uint16",
2328
+ name: "_leverageTDR",
2329
+ type: "uint16",
2330
+ },
2331
+ ],
2332
+ name: "getExchangeFeePrdMkts",
2333
+ outputs: [
2334
+ {
2335
+ internalType: "uint16",
2336
+ name: "",
2337
+ type: "uint16",
2338
+ },
2339
+ ],
2340
+ stateMutability: "view",
2341
+ type: "function",
2342
+ },
2314
2343
  {
2315
2344
  inputs: [
2316
2345
  {
package/src/d8XMath.ts CHANGED
@@ -464,15 +464,38 @@ function pmMarginThresh(pos: number, s2: number, s3: number, m: number | undefin
464
464
  return (Math.abs(pos) * p * tau) / s3;
465
465
  }
466
466
 
467
- export function pmMaintenanceMarginRate(pos: number, s2: number, m: number | undefined = 0.18): number {
468
- let p = s2 - 1;
469
- if (pos < 0) {
467
+ /**
468
+ * Maintenance margin rate for prediction markets.
469
+ * @param posSign sign of position in base currency (can be signed position or -1, 1)
470
+ * @param sm mark-price (=1+p)
471
+ * @param m max margin rate from fInitialMarginRate
472
+ * @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3;
473
+ */
474
+ export function pmMaintenanceMarginRate(posSign: number, sm: number, m: number | undefined = 0.18): number {
475
+ let p = sm - 1;
476
+ if (posSign < 0) {
470
477
  p = 1 - p;
471
478
  }
472
479
  const h = entropy(p);
473
480
  return m + (0.4 - m) * h;
474
481
  }
475
482
 
483
+ /**
484
+ * Maintenance margin rate for prediction markets.
485
+ * @param posSign sign of position in base currency (can be signed position or -1, 1)
486
+ * @param sm mark-price (=1+p)
487
+ * @param m max margin rate from fMaintenanceMarginRate
488
+ * @returns margin rate to be applied (Math.abs(pos) * p * tau) / s3;
489
+ */
490
+ export function pmInitialMarginRate(posSign: number, sm: number, m: number | undefined = 0.2): number {
491
+ let p = sm - 1;
492
+ if (posSign < 0) {
493
+ p = 1 - p;
494
+ }
495
+ const h = entropy(p);
496
+ return m + (0.5 - m) * h;
497
+ }
498
+
476
499
  /**
477
500
  * Calculate the expected loss for a prediction market trade used for
478
501
  * prediction market fees
@@ -593,7 +616,7 @@ export function pmFindLiquidationPrice(
593
616
  * @param S3
594
617
  * @param totLong
595
618
  * @param totShort
596
- * @returns
619
+ * @returns excess margin as defined above
597
620
  */
598
621
  function excessMargin(
599
622
  tradeAmt: number,
@@ -223,7 +223,7 @@ export default class LiquidatorTool extends WriteAccessHandler {
223
223
 
224
224
  indexPrices = [
225
225
  obj.ema, // ema (pred mkts) or s2
226
- obj.s3, // s3
226
+ obj.s3 ?? 0, // s3
227
227
  ];
228
228
  }
229
229
  const fIdxPx = indexPrices.map((x) => floatToABK64x64(x == undefined || Number.isNaN(x) ? 0 : x)) as [
@@ -231,7 +231,7 @@ export default class LiquidatorTool extends WriteAccessHandler {
231
231
  bigint
232
232
  ];
233
233
  let traderState = await this.proxyContract.getTraderState(perpID, traderAddr, fIdxPx, overrides || {});
234
- if (traderState[idx_notional].eq(0)) {
234
+ if (traderState[idx_notional] === 0n) {
235
235
  // trader does not have open position
236
236
  return true;
237
237
  }