@d8x/perpetuals-sdk 2.6.22 → 2.7.0

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 (58) hide show
  1. package/dist/cjs/config/defaultConfig.json +2 -2
  2. package/dist/cjs/constants.js.map +1 -1
  3. package/dist/cjs/d8XMath.d.ts +42 -25
  4. package/dist/cjs/d8XMath.js +188 -151
  5. package/dist/cjs/d8XMath.js.map +1 -1
  6. package/dist/cjs/liquidatorTool.d.ts +1 -1
  7. package/dist/cjs/liquidatorTool.js +9 -9
  8. package/dist/cjs/liquidatorTool.js.map +1 -1
  9. package/dist/cjs/marketData.d.ts +3 -3
  10. package/dist/cjs/marketData.js +9 -8
  11. package/dist/cjs/marketData.js.map +1 -1
  12. package/dist/cjs/perpetualDataHandler.d.ts +3 -3
  13. package/dist/cjs/perpetualDataHandler.js +7 -5
  14. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  15. package/dist/cjs/polyMktsPxFeed.js +2 -2
  16. package/dist/cjs/polyMktsPxFeed.js.map +1 -1
  17. package/dist/cjs/priceFeeds.d.ts +1 -0
  18. package/dist/cjs/priceFeeds.js +18 -2
  19. package/dist/cjs/priceFeeds.js.map +1 -1
  20. package/dist/cjs/utils.d.ts +3 -3
  21. package/dist/cjs/utils.js.map +1 -1
  22. package/dist/cjs/version.d.ts +1 -1
  23. package/dist/cjs/version.js +1 -1
  24. package/dist/esm/config/defaultConfig.json +2 -2
  25. package/dist/esm/constants.js.map +1 -1
  26. package/dist/esm/d8XMath.d.ts +42 -25
  27. package/dist/esm/d8XMath.js +187 -150
  28. package/dist/esm/d8XMath.js.map +1 -1
  29. package/dist/esm/liquidatorTool.d.ts +1 -1
  30. package/dist/esm/liquidatorTool.js +10 -10
  31. package/dist/esm/liquidatorTool.js.map +1 -1
  32. package/dist/esm/marketData.d.ts +3 -3
  33. package/dist/esm/marketData.js +9 -8
  34. package/dist/esm/marketData.js.map +1 -1
  35. package/dist/esm/perpetualDataHandler.d.ts +3 -3
  36. package/dist/esm/perpetualDataHandler.js +7 -5
  37. package/dist/esm/perpetualDataHandler.js.map +1 -1
  38. package/dist/esm/polyMktsPxFeed.js +2 -2
  39. package/dist/esm/polyMktsPxFeed.js.map +1 -1
  40. package/dist/esm/priceFeeds.d.ts +1 -0
  41. package/dist/esm/priceFeeds.js +18 -2
  42. package/dist/esm/priceFeeds.js.map +1 -1
  43. package/dist/esm/utils.d.ts +3 -3
  44. package/dist/esm/utils.js.map +1 -1
  45. package/dist/esm/version.d.ts +1 -1
  46. package/dist/esm/version.js +1 -1
  47. package/doc/d8x-perpetuals-sdk.md +116 -64
  48. package/package.json +1 -1
  49. package/src/config/defaultConfig.json +2 -2
  50. package/src/constants.ts +0 -1
  51. package/src/d8XMath.ts +210 -167
  52. package/src/liquidatorTool.ts +16 -10
  53. package/src/marketData.ts +38 -25
  54. package/src/perpetualDataHandler.ts +13 -9
  55. package/src/polyMktsPxFeed.ts +6 -7
  56. package/src/priceFeeds.ts +19 -3
  57. package/src/utils.ts +3 -3
  58. package/src/version.ts +1 -1
@@ -40,21 +40,21 @@ export declare function fromBytes4HexString(s: string): string;
40
40
  * @param {Object} mapping List of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
41
41
  * @returns {string} User friendly currency symbol, e.g. "MATIC"
42
42
  */
43
- export declare function contractSymbolToSymbol(s: string, mapping: Map<string, string>): string;
43
+ export declare function contractSymbolToSymbol(s: string, mapping: ReadonlyMap<string, string>): string;
44
44
  /**
45
45
  *
46
46
  * @param {string} s User friendly currency symbol, e.g. "MATIC"
47
47
  * @param {Object} mapping List of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
48
48
  * @returns {Buffer} Buffer that can be used with smart contract to identify tokens
49
49
  */
50
- export declare function symbolToContractSymbol(s: string, mapping: Map<string, string>): Buffer;
50
+ export declare function symbolToContractSymbol(s: string, mapping: ReadonlyMap<string, string>): Buffer;
51
51
  /**
52
52
  * Converts symbol or symbol combination into long format
53
53
  * @param {string} s symbol, e.g., USDC-MATC-USDC, MATC, USDC, ...
54
54
  * @param {Object} mapping list of symbol and clean symbol pairs, e.g. [{symbol: "MATIC", cleanSymbol: "MATC"}, ...]
55
55
  * @returns {string} long format e.g. MATIC. if not found the element is ""
56
56
  */
57
- export declare function symbol4BToLongSymbol(s: string, mapping: Map<string, string>): string;
57
+ export declare function symbol4BToLongSymbol(s: string, mapping: ReadonlyMap<string, string>): string;
58
58
  export declare function combineFlags(f1: bigint, f2: bigint): bigint;
59
59
  export declare function containsFlag(f1: bigint, f2: bigint): boolean;
60
60
  export declare function loadConfigAbis(config: NodeSDKConfig): void;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare const D8X_SDK_VERSION = "2.6.22";
1
+ export declare const D8X_SDK_VERSION = "2.7.00";
@@ -1,2 +1,2 @@
1
- export const D8X_SDK_VERSION = "2.6.22";
1
+ export const D8X_SDK_VERSION = "2.7.00";
2
2
  //# sourceMappingURL=version.js.map
@@ -144,16 +144,17 @@ on-chain</p></dd>
144
144
  * [~calculateLiquidationPriceCollateralQuote(LockedInValueQC, position, cash_cc, maintenance_margin_rate, S3)](#module_d8xMath..calculateLiquidationPriceCollateralQuote) ⇒ <code>number</code>
145
145
  * [~getMarginRequiredForLeveragedTrade(targetLeverage, currentPosition, currentLockedInValue, tradeAmount, markPrice, indexPriceS2, indexPriceS3, tradePrice, feeRate)](#module_d8xMath..getMarginRequiredForLeveragedTrade) ⇒ <code>number</code>
146
146
  * [~getNewPositionLeverage(tradeAmount, marginCollateral, currentPosition, currentLockedInValue, price, indexPriceS3, markPrice)](#module_d8xMath..getNewPositionLeverage) ⇒
147
- * [~getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark, isPredMkt)](#module_d8xMath..getDepositAmountForLvgTrade) ⇒ <code>number</code>
147
+ * [~getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark, cmin)](#module_d8xMath..getDepositAmountForLvgTrade) ⇒ <code>number</code>
148
+ * [~getDepositAmountForPredMktLvgTrade(pos0, b0, c0, tradeAmnt, targetLvg, prob, S3, markProb, imr)](#module_d8xMath..getDepositAmountForPredMktLvgTrade) ⇒ <code>number</code>
149
+ * [~newPos](#module_d8xMath..getDepositAmountForPredMktLvgTrade..newPos)
148
150
  * [~priceToProb(px)](#module_d8xMath..priceToProb) ⇒
149
151
  * [~probToPrice(prob)](#module_d8xMath..probToPrice) ⇒
150
- * [~pmMarginThresh(pos, s2, s3, m)](#module_d8xMath..pmMarginThresh) ⇒
151
- * [~pmMaintenanceMarginRate(posSign, sm, m)](#module_d8xMath..pmMaintenanceMarginRate) ⇒
152
- * [~pmInitialMarginRate(posSign, sm, m)](#module_d8xMath..pmInitialMarginRate) ⇒
153
- * [~expectedLoss(p, m, totLong, totShort, tradeAmt, tradeMgnRate)](#module_d8xMath..expectedLoss) ⇒
154
- * [~expectedLossImpact(p, m, tradeAmt, tradeMgnRate)](#module_d8xMath..expectedLossImpact) ⇒
152
+ * [~pmMarginThresh(pos, lockedInQC, s2, s3, m)](#module_d8xMath..pmMarginThresh) ⇒
153
+ * [~pmMaintenanceMarginRate(position, lockedInQC, sm, m)](#module_d8xMath..pmMaintenanceMarginRate) ⇒ <code>number</code>
154
+ * [~pmInitialMarginRate(posSign, s0, sm, cmin)](#module_d8xMath..pmInitialMarginRate) ⇒ <code>number</code>
155
155
  * [~pmExchangeFee(prob, m, tradeAmt, tradeMgnRate)](#module_d8xMath..pmExchangeFee) ⇒
156
156
  * [~pmMarginBalance(pos, s2, s3, ell, mc)](#module_d8xMath..pmMarginBalance) ⇒
157
+ * [~pmFindLiquidationPrice(pos, s3, ell, mc, baseMarginRate, sm)](#module_d8xMath..pmFindLiquidationPrice) ⇒ <code>number</code>
157
158
  * [~excessMargin(tradeAmt, currentCashCC, currentPos, currentLockedInQC, limitPrice, Sm, S3)](#module_d8xMath..excessMargin) ⇒
158
159
  * [~pmGetDepositAmtForLvgTrade(tradeAmt, targetLvg, price, S3, S2Mark)](#module_d8xMath..pmGetDepositAmtForLvgTrade) ⇒
159
160
  * [~pmExcessCashAtLvg(tradeAmt, lvg, walletBalCC, currentCashCC, currentPosition, currentLockedInValue, slippage, S2, Sm, S3, totLong, totShort)](#module_d8xMath..pmExcessCashAtLvg) ⇒
@@ -395,7 +396,7 @@ See calculateLiquidationPriceCollateralQuantoConservative for a more conservativ
395
396
 
396
397
  <a name="module_d8xMath..getDepositAmountForLvgTrade"></a>
397
398
 
398
- ### d8xMath~getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark, isPredMkt) ⇒ <code>number</code>
399
+ ### d8xMath~getDepositAmountForLvgTrade(pos0, b0, tradeAmnt, targetLvg, price, S3, S2Mark, cmin) ⇒ <code>number</code>
399
400
  <p>Determine amount to be deposited into margin account so that the given leverage
400
401
  is obtained when trading a position pos (trade amount = position)
401
402
  Does NOT include fees
@@ -413,8 +414,77 @@ Smart contract equivalent: calcMarginForTargetLeverage(..., _ignorePosBalance =
413
414
  | price | <code>number</code> | <p>price to trade amount 'tradeAmnt'</p> |
414
415
  | S3 | <code>number</code> | <p>collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)</p> |
415
416
  | S2Mark | <code>number</code> | <p>mark price</p> |
416
- | isPredMkt | <code>boolean</code> | <p>true if prediction market</p> |
417
+ | cmin | <code>number</code> | <p>Absolute minimum margin per contract, only for pred markets</p> |
417
418
 
419
+ <a name="module_d8xMath..getDepositAmountForPredMktLvgTrade"></a>
420
+
421
+ ### d8xMath~getDepositAmountForPredMktLvgTrade(pos0, b0, c0, tradeAmnt, targetLvg, prob, S3, markProb, imr) ⇒ <code>number</code>
422
+ <p>Determine amount to be deposited into margin account so that the given leverage
423
+ is obtained when opening a prediction market position
424
+ Does NOT include fees, but accounts for a possible non-zero current position
425
+ Smart contract equivalent: getDepositAmountForPredMktLvgPosition</p>
426
+
427
+ **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
428
+ **Returns**: <code>number</code> - <p>Amount to be deposited to have the given leverage when trading into position pos before fees</p>
429
+
430
+ | Param | Type | Description |
431
+ | --- | --- | --- |
432
+ | pos0 | <code>number</code> | <p>current position</p> |
433
+ | b0 | <code>number</code> | <p>current balance</p> |
434
+ | c0 | <code>number</code> | <p>current available cash</p> |
435
+ | tradeAmnt | <code>number</code> | <p>amount to trade</p> |
436
+ | targetLvg | <code>number</code> | <p>target leverage</p> |
437
+ | prob | <code>number</code> | <p>prob to trade amount 'tradeAmnt'</p> |
438
+ | S3 | <code>number</code> | <p>collateral to quote conversion (=S2 if base-collateral, =1 if quote collateral, = index S3 if quanto)</p> |
439
+ | markProb | <code>number</code> | <p>mark prob</p> |
440
+ | imr | <code>number</code> | <p>minimum absolute margin per contract (fInitialMarginRate)</p> |
441
+
442
+ <a name="module_d8xMath..getDepositAmountForPredMktLvgTrade..newPos"></a>
443
+
444
+ #### getDepositAmountForPredMktLvgTrade~newPos
445
+ <p>Smart contract implementation:
446
+ // find smallest x such that:
447
+ // bal * s3 &gt;= pos value / lvg
448
+ // where:
449
+ // pos value / lvg = |pos| * R(pm, sign(pos)) * margin rate
450
+ // pos = pos0 + k
451
+ // cash = cash0 + x
452
+ // ell = ell0 + px * k
453
+ // bal * s3 = cash * s3 + pos * sm - ell
454
+ // = bal0 * s3 + x * s3 + k * (sm - px)
455
+ // subject to:
456
+ // x &gt;= 0
457
+ // cash * s3 &gt;= |pos| * min(cmin, prob(sign(pos)))
458
+ // k * (sm - px) &lt;= 0 a.s.
459
+ // (positive pnl does not contribute, i.e. ignore px better than mark)
460
+ // solution:
461
+ // bal0 * s3 + x * s3 &gt;= pos value / lvg + (k * (px - sm))<em>+ = v * s3
462
+ // --&gt;
463
+ // x &gt;= v + (cash0 - bal0)</em>+ - cash0 = v - min(bal0, cash0)
464
+ // = pos value / lvg/ s3 + (k * (px - sm))_+ / s3 - min (bal0, cash0)
465
+ // = A + B - C
466
+ // x &gt;= |pos| * min(cmin, prob(sign(pos))) / s3 - cash0
467
+ // x &gt;= 0
468
+ // init x = A = pos value / lvg / s3
469
+ int128 fNewPos = _fPosition0.add(_fTradeAmount);
470
+ int128 v = (
471
+ fNewPos &gt; 0 ? fNewPos.mul(_fMarkProb) : fNewPos.neg().mul(ONE_64x64.sub(_fMarkProb))
472
+ ).mul(_fMarginRate).div(_fS3);
473
+ // + B = max(0,k * (px - sm)) / s3
474
+ {
475
+ int128 fPnL = _fTradeAmount.mul(_fMarkProb.sub(_fTradeProb));
476
+ if (fPnL &lt; 0) {
477
+ v = v.sub(fPnL.div(_fS3)); // pnl &lt; 0 -&gt; increase v
478
+ }
479
+ }
480
+ // - C = - min(bal0, cash0) = - Equity
481
+ {
482
+ int128 equity = _fCash0CC &lt; _fBalance0 ? _fCash0CC : _fBalance0;
483
+ v = v.sub(equity); // equity can be used / must be covered if negative
484
+ }
485
+ return v &gt; 0 ? v : int128(0);</p>
486
+
487
+ **Kind**: inner constant of [<code>getDepositAmountForPredMktLvgTrade</code>](#module_d8xMath..getDepositAmountForPredMktLvgTrade)
418
488
  <a name="module_d8xMath..priceToProb"></a>
419
489
 
420
490
  ### d8xMath~priceToProb(px) ⇒
@@ -441,82 +511,49 @@ Smart contract equivalent: calcMarginForTargetLeverage(..., _ignorePosBalance =
441
511
 
442
512
  <a name="module_d8xMath..pmMarginThresh"></a>
443
513
 
444
- ### d8xMath~pmMarginThresh(pos, s2, s3, m) ⇒
514
+ ### d8xMath~pmMarginThresh(pos, lockedInQC, s2, s3, m) ⇒
445
515
  <p>Maintenance margin requirement for prediction markets</p>
446
516
 
447
517
  **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
448
518
  **Returns**: <p>required margin balance</p>
449
519
 
450
- | Param | Default | Description |
451
- | --- | --- | --- |
452
- | pos | | <p>signed position</p> |
453
- | s2 | | <p>mark price</p> |
454
- | s3 | | <p>collateral to quote conversion</p> |
455
- | m | <code>0.18</code> | <p>base margin rate</p> |
520
+ | Param | Description |
521
+ | --- | --- |
522
+ | pos | <p>signed position</p> |
523
+ | lockedInQC | <p>locked in value</p> |
524
+ | s2 | <p>mark price</p> |
525
+ | s3 | <p>collateral to quote conversion</p> |
526
+ | m | <p>base margin rate</p> |
456
527
 
457
528
  <a name="module_d8xMath..pmMaintenanceMarginRate"></a>
458
529
 
459
- ### d8xMath~pmMaintenanceMarginRate(posSign, sm, m) ⇒
530
+ ### d8xMath~pmMaintenanceMarginRate(position, lockedInQC, sm, m) ⇒ <code>number</code>
460
531
  <p>Maintenance margin rate for prediction markets.</p>
461
532
 
462
533
  **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
463
- **Returns**: <p>margin rate to be applied (Math.abs(pos) * p * tau) / s3;</p>
464
-
465
- | Param | Default | Description |
466
- | --- | --- | --- |
467
- | posSign | | <p>sign of position in base currency (can be signed position or -1, 1)</p> |
468
- | sm | | <p>mark-price (=1+p)</p> |
469
- | m | <code>0.18</code> | <p>max margin rate from fInitialMarginRate</p> |
470
-
471
- <a name="module_d8xMath..pmInitialMarginRate"></a>
472
-
473
- ### d8xMath~pmInitialMarginRate(posSign, sm, m) ⇒
474
- <p>Maintenance margin rate for prediction markets.</p>
475
-
476
- **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
477
- **Returns**: <p>margin rate to be applied (Math.abs(pos) * p * tau) / s3;</p>
478
-
479
- | Param | Default | Description |
480
- | --- | --- | --- |
481
- | posSign | | <p>sign of position in base currency (can be signed position or -1, 1)</p> |
482
- | sm | | <p>mark-price (=1+p)</p> |
483
- | m | <code>0.2</code> | <p>max margin rate from fMaintenanceMarginRate</p> |
484
-
485
- <a name="module_d8xMath..expectedLoss"></a>
486
-
487
- ### d8xMath~expectedLoss(p, m, totLong, totShort, tradeAmt, tradeMgnRate) ⇒
488
- <p>Calculate the expected loss for a prediction market trade used for
489
- prediction market fees</p>
490
-
491
- **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
492
- **Returns**: <p>expected loss in dollars</p>
534
+ **Returns**: <code>number</code> - <p>The margin rate to be applied: (Math.abs(pos) * p * tau) / s3</p>
493
535
 
494
536
  | Param | Description |
495
537
  | --- | --- |
496
- | p | <p>probability derived from mark price (long)</p> |
497
- | m | <p>maximal maintenance rate from which we defer the actual maintenance margin rate</p> |
498
- | totLong | <p>total long in base currency</p> |
499
- | totShort | <p>total short</p> |
500
- | tradeAmt | <p>signed trade amount, can be zero</p> |
501
- | tradeMgnRate | <p>margin rate of the trader</p> |
538
+ | position | <p>signed position in base currency</p> |
539
+ | lockedInQC | <p>locked in value, p or 1-p times number of contracts</p> |
540
+ | sm | <p>mark-price (=1+p)</p> |
541
+ | m | <p>absolute maintenance buffer per contract (mu_m, fMaintenanceMarginRate)</p> |
502
542
 
503
- <a name="module_d8xMath..expectedLossImpact"></a>
543
+ <a name="module_d8xMath..pmInitialMarginRate"></a>
504
544
 
505
- ### d8xMath~expectedLossImpact(p, m, tradeAmt, tradeMgnRate) ⇒
506
- <p>Equivalent to
507
- const el0 = expectedLoss(prob, m, totLong, totShort, 0, 0);
508
- const el1 = expectedLoss(prob, m, totLong, totShort, tradeAmt, tradeMgnRate)
509
- const fee = (el1 - el0) / Math.abs(tradeAmt);</p>
545
+ ### d8xMath~pmInitialMarginRate(posSign, s0, sm, cmin) ⇒ <code>number</code>
546
+ <p>Initial margin rate for prediction markets.</p>
510
547
 
511
548
  **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
512
- **Returns**: <p>dollar fee</p>
549
+ **Returns**: <code>number</code> - <p>The margin rate to be applied: <code>(Math.abs(pos) * p * tau) / s3</code></p>
513
550
 
514
551
  | Param | Description |
515
552
  | --- | --- |
516
- | p | <p>prob long probability</p> |
517
- | m | <p>max maintenance margin rate (0.18)</p> |
518
- | tradeAmt | <p>trade amount in base currency</p> |
519
- | tradeMgnRate | <p>margin rate for this trade</p> |
553
+ | posSign | <p>sign of position in base currency (can be signed position or -1, 1)</p> |
554
+ | s0 | <p>trade price</p> |
555
+ | sm | <p>mark-price (=1+p)</p> |
556
+ | cmin | <p>Absolute min margin saved as <code>fInitialMarginRate</code></p> |
520
557
 
521
558
  <a name="module_d8xMath..pmExchangeFee"></a>
522
559
 
@@ -550,6 +587,21 @@ For opening trades only</p>
550
587
  | ell | <p>locked in value</p> |
551
588
  | mc | <p>margin cash in collateral currency</p> |
552
589
 
590
+ <a name="module_d8xMath..pmFindLiquidationPrice"></a>
591
+
592
+ ### d8xMath~pmFindLiquidationPrice(pos, s3, ell, mc, baseMarginRate, sm) ⇒ <code>number</code>
593
+ **Kind**: inner method of [<code>d8xMath</code>](#module_d8xMath)
594
+ **Returns**: <code>number</code> - <p>Liquidation price as a probability in the range [0, 1]</p>
595
+
596
+ | Param | Description |
597
+ | --- | --- |
598
+ | pos | <p>Signed position size</p> |
599
+ | s3 | <p>Collateral to quote conversion at spot</p> |
600
+ | ell | <p>Locked-in value</p> |
601
+ | mc | <p>Margin collateral</p> |
602
+ | baseMarginRate | <p>Maintenance margin per contract (mu_m)</p> |
603
+ | sm | <p>Mark price at entry</p> |
604
+
553
605
  <a name="module_d8xMath..excessMargin"></a>
554
606
 
555
607
  ### d8xMath~excessMargin(tradeAmt, currentCashCC, currentPos, currentLockedInQC, limitPrice, Sm, S3) ⇒
@@ -649,7 +701,7 @@ Factors in lot size and global max short/long, factors in opening/closing positi
649
701
  | short | <p>Short open OI</p> |
650
702
  | sm | <p>Mark price (&gt;1)</p> |
651
703
  | isBuy | <p>True if trade is long</p> |
652
- | mr | <p>Maintenance margin rate</p> |
704
+ | mr | <p>Margin threshold per contract for liquidation (mu_m)</p> |
653
705
 
654
706
  <a name="module_utils"></a>
655
707
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d8x/perpetuals-sdk",
3
- "version": "2.6.22",
3
+ "version": "2.7.00",
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",
@@ -28,8 +28,8 @@
28
28
  {
29
29
  "name": "base_sepolia",
30
30
  "chainId": 84532,
31
- "version": 1,
32
- "proxyAddr": "0xa7868558E094E58251c6D12f407294c11522E88D",
31
+ "version": 3,
32
+ "proxyAddr": "0xfaC638d51B769D060aFC5953C41bF35595620b1c",
33
33
  "nodeURL": "https://sepolia.base.org",
34
34
  "priceFeedConfigNetwork": "mainnet",
35
35
  "shareTokenABILocation": "./abi/ShareToken.json",
package/src/constants.ts CHANGED
@@ -34,7 +34,6 @@ export const MASK_PREDICTION_MARKET = 2n;
34
34
  export const MASK_LOW_LIQUIDITY_MARKET = 4n;
35
35
  export const MASK_TRADFI_MARKET = 8n;
36
36
 
37
-
38
37
  export const ORDER_TYPE_LIMIT = "LIMIT";
39
38
  export const ORDER_TYPE_MARKET = "MARKET";
40
39
  export const ORDER_TYPE_STOP_MARKET = "STOP_MARKET";