@d8x/perpetuals-sdk 2.5.13 → 2.5.15

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 (59) hide show
  1. package/dist/cjs/abi/IPerpetualManager.json +93 -16
  2. package/dist/cjs/abi/PerpetualManagerProxy.json +1 -1
  3. package/dist/cjs/constants.d.ts +1 -0
  4. package/dist/cjs/constants.js +2 -1
  5. package/dist/cjs/constants.js.map +1 -1
  6. package/dist/cjs/contracts/IPerpetualManager.d.ts +20 -13
  7. package/dist/cjs/contracts/PerpetualManagerProxy.d.ts +3 -3
  8. package/dist/cjs/contracts/factories/IPerpetualManager__factory.d.ts +74 -13
  9. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js +93 -16
  10. package/dist/cjs/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  11. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.d.ts +1 -1
  12. package/dist/cjs/contracts/factories/PerpetualManagerProxy__factory.js +1 -1
  13. package/dist/cjs/marketData.js +5 -2
  14. package/dist/cjs/marketData.js.map +1 -1
  15. package/dist/cjs/nodeSDKTypes.d.ts +1 -0
  16. package/dist/cjs/nodeSDKTypes.js.map +1 -1
  17. package/dist/cjs/perpetualDataHandler.d.ts +23 -0
  18. package/dist/cjs/perpetualDataHandler.js +56 -2
  19. package/dist/cjs/perpetualDataHandler.js.map +1 -1
  20. package/dist/cjs/priceFeeds.js +1 -1
  21. package/dist/cjs/priceFeeds.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/abi/IPerpetualManager.json +93 -16
  25. package/dist/esm/abi/PerpetualManagerProxy.json +1 -1
  26. package/dist/esm/constants.d.ts +1 -0
  27. package/dist/esm/constants.js +1 -0
  28. package/dist/esm/constants.js.map +1 -1
  29. package/dist/esm/contracts/IPerpetualManager.d.ts +20 -13
  30. package/dist/esm/contracts/PerpetualManagerProxy.d.ts +3 -3
  31. package/dist/esm/contracts/factories/IPerpetualManager__factory.d.ts +74 -13
  32. package/dist/esm/contracts/factories/IPerpetualManager__factory.js +93 -16
  33. package/dist/esm/contracts/factories/IPerpetualManager__factory.js.map +1 -1
  34. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.d.ts +1 -1
  35. package/dist/esm/contracts/factories/PerpetualManagerProxy__factory.js +1 -1
  36. package/dist/esm/marketData.js +5 -2
  37. package/dist/esm/marketData.js.map +1 -1
  38. package/dist/esm/nodeSDKTypes.d.ts +1 -0
  39. package/dist/esm/nodeSDKTypes.js.map +1 -1
  40. package/dist/esm/perpetualDataHandler.d.ts +23 -0
  41. package/dist/esm/perpetualDataHandler.js +56 -2
  42. package/dist/esm/perpetualDataHandler.js.map +1 -1
  43. package/dist/esm/priceFeeds.js +1 -1
  44. package/dist/esm/priceFeeds.js.map +1 -1
  45. package/dist/esm/version.d.ts +1 -1
  46. package/dist/esm/version.js +1 -1
  47. package/package.json +1 -1
  48. package/src/abi/IPerpetualManager.json +5589 -5512
  49. package/src/abi/PerpetualManagerProxy.json +1597 -1597
  50. package/src/constants.ts +2 -0
  51. package/src/contracts/IPerpetualManager.ts +29 -22
  52. package/src/contracts/PerpetualManagerProxy.ts +3 -3
  53. package/src/contracts/factories/IPerpetualManager__factory.ts +93 -16
  54. package/src/contracts/factories/PerpetualManagerProxy__factory.ts +1 -1
  55. package/src/marketData.ts +5 -3
  56. package/src/nodeSDKTypes.ts +1 -0
  57. package/src/perpetualDataHandler.ts +60 -3
  58. package/src/priceFeeds.ts +1 -1
  59. package/src/version.ts +1 -1
package/src/constants.ts CHANGED
@@ -32,6 +32,8 @@ export const MASK_STOP_ORDER = BigInt("0x20000000");
32
32
  export const MASK_KEEP_POS_LEVERAGE = BigInt("0x08000000");
33
33
  export const MASK_PREDICTION_MARKET = 2n;
34
34
  export const MASK_LOW_LIQUIDITY_MARKET = 4n;
35
+ export const MASK_TRADFI_MARKET = 8n;
36
+
35
37
 
36
38
  export const ORDER_TYPE_LIMIT = "LIMIT";
37
39
  export const ORDER_TYPE_MARKET = "MARKET";
@@ -253,7 +253,7 @@ export declare namespace PerpStorage {
253
253
  fMinimalAMMExposureEMA: BigNumberish;
254
254
  fSettlementS3PriceData: BigNumberish;
255
255
  fSettlementS2PriceData: BigNumberish;
256
- fTotalMarginBalance: BigNumberish;
256
+ fParams: BigNumberish;
257
257
  fMarkPriceEMALambda: BigNumberish;
258
258
  fFundingRateClamp: BigNumberish;
259
259
  fMaximalTradeSizeBumpUp: BigNumberish;
@@ -300,7 +300,7 @@ export declare namespace PerpStorage {
300
300
  fMinimalAMMExposureEMA: bigint,
301
301
  fSettlementS3PriceData: bigint,
302
302
  fSettlementS2PriceData: bigint,
303
- fTotalMarginBalance: bigint,
303
+ fParams: bigint,
304
304
  fMarkPriceEMALambda: bigint,
305
305
  fFundingRateClamp: bigint,
306
306
  fMaximalTradeSizeBumpUp: bigint,
@@ -345,7 +345,7 @@ export declare namespace PerpStorage {
345
345
  fMinimalAMMExposureEMA: bigint;
346
346
  fSettlementS3PriceData: bigint;
347
347
  fSettlementS2PriceData: bigint;
348
- fTotalMarginBalance: bigint;
348
+ fParams: bigint;
349
349
  fMarkPriceEMALambda: bigint;
350
350
  fFundingRateClamp: bigint;
351
351
  fMaximalTradeSizeBumpUp: bigint;
@@ -386,6 +386,7 @@ export declare namespace IPerpetualInfo {
386
386
  priceIds: BytesLike[];
387
387
  isPyth: boolean[];
388
388
  perpFlags: BigNumberish;
389
+ fAMMTargetDD: BigNumberish;
389
390
  };
390
391
 
391
392
  export type PerpetualStaticInfoStructOutput = [
@@ -403,7 +404,8 @@ export declare namespace IPerpetualInfo {
403
404
  fReferralRebateCC: bigint,
404
405
  priceIds: string[],
405
406
  isPyth: boolean[],
406
- perpFlags: bigint
407
+ perpFlags: bigint,
408
+ fAMMTargetDD: bigint
407
409
  ] & {
408
410
  id: bigint;
409
411
  limitOrderBookAddr: string;
@@ -420,6 +422,7 @@ export declare namespace IPerpetualInfo {
420
422
  priceIds: string[];
421
423
  isPyth: boolean[];
422
424
  perpFlags: bigint;
425
+ fAMMTargetDD: bigint;
423
426
  };
424
427
  }
425
428
 
@@ -544,6 +547,7 @@ export interface IPerpetualManagerInterface extends Interface {
544
547
  | "settleNextTraderInPool"
545
548
  | "settleTraders"
546
549
  | "splitProtocolFee"
550
+ | "testTradeEvent"
547
551
  | "togglePerpEmergencyState"
548
552
  | "tradeViaOrderBook"
549
553
  | "transferBrokerLots"
@@ -552,7 +556,6 @@ export interface IPerpetualManagerInterface extends Interface {
552
556
  | "transferValueToTreasury"
553
557
  | "updateAMMTargetFundSize"
554
558
  | "updateDefaultFundTargetSize"
555
- | "updateDefaultFundTargetSizeRandom"
556
559
  | "updateFundingAndPricesAfter"
557
560
  | "updateFundingAndPricesBefore"
558
561
  | "updatePriceFeeds"
@@ -1162,6 +1165,10 @@ export interface IPerpetualManagerInterface extends Interface {
1162
1165
  functionFragment: "splitProtocolFee",
1163
1166
  values: [BigNumberish]
1164
1167
  ): string;
1168
+ encodeFunctionData(
1169
+ functionFragment: "testTradeEvent",
1170
+ values: [IPerpetualOrder.OrderStruct]
1171
+ ): string;
1165
1172
  encodeFunctionData(
1166
1173
  functionFragment: "togglePerpEmergencyState",
1167
1174
  values: [BigNumberish]
@@ -1194,10 +1201,6 @@ export interface IPerpetualManagerInterface extends Interface {
1194
1201
  functionFragment: "updateDefaultFundTargetSize",
1195
1202
  values: [BigNumberish]
1196
1203
  ): string;
1197
- encodeFunctionData(
1198
- functionFragment: "updateDefaultFundTargetSizeRandom",
1199
- values: [BigNumberish]
1200
- ): string;
1201
1204
  encodeFunctionData(
1202
1205
  functionFragment: "updateFundingAndPricesAfter",
1203
1206
  values: [BigNumberish]
@@ -1699,6 +1702,10 @@ export interface IPerpetualManagerInterface extends Interface {
1699
1702
  functionFragment: "splitProtocolFee",
1700
1703
  data: BytesLike
1701
1704
  ): Result;
1705
+ decodeFunctionResult(
1706
+ functionFragment: "testTradeEvent",
1707
+ data: BytesLike
1708
+ ): Result;
1702
1709
  decodeFunctionResult(
1703
1710
  functionFragment: "togglePerpEmergencyState",
1704
1711
  data: BytesLike
@@ -1731,10 +1738,6 @@ export interface IPerpetualManagerInterface extends Interface {
1731
1738
  functionFragment: "updateDefaultFundTargetSize",
1732
1739
  data: BytesLike
1733
1740
  ): Result;
1734
- decodeFunctionResult(
1735
- functionFragment: "updateDefaultFundTargetSizeRandom",
1736
- data: BytesLike
1737
- ): Result;
1738
1741
  decodeFunctionResult(
1739
1742
  functionFragment: "updateFundingAndPricesAfter",
1740
1743
  data: BytesLike
@@ -3454,6 +3457,12 @@ export interface IPerpetualManager extends BaseContract {
3454
3457
  "view"
3455
3458
  >;
3456
3459
 
3460
+ testTradeEvent: TypedContractMethod<
3461
+ [_order: IPerpetualOrder.OrderStruct],
3462
+ [void],
3463
+ "nonpayable"
3464
+ >;
3465
+
3457
3466
  togglePerpEmergencyState: TypedContractMethod<
3458
3467
  [_perpetualId: BigNumberish],
3459
3468
  [void],
@@ -3498,12 +3507,6 @@ export interface IPerpetualManager extends BaseContract {
3498
3507
  "nonpayable"
3499
3508
  >;
3500
3509
 
3501
- updateDefaultFundTargetSizeRandom: TypedContractMethod<
3502
- [_iPoolIndex: BigNumberish],
3503
- [void],
3504
- "nonpayable"
3505
- >;
3506
-
3507
3510
  updateFundingAndPricesAfter: TypedContractMethod<
3508
3511
  [_iPerpetualId: BigNumberish],
3509
3512
  [void],
@@ -4417,6 +4420,13 @@ export interface IPerpetualManager extends BaseContract {
4417
4420
  getFunction(
4418
4421
  nameOrSignature: "splitProtocolFee"
4419
4422
  ): TypedContractMethod<[fee: BigNumberish], [[bigint, bigint]], "view">;
4423
+ getFunction(
4424
+ nameOrSignature: "testTradeEvent"
4425
+ ): TypedContractMethod<
4426
+ [_order: IPerpetualOrder.OrderStruct],
4427
+ [void],
4428
+ "nonpayable"
4429
+ >;
4420
4430
  getFunction(
4421
4431
  nameOrSignature: "togglePerpEmergencyState"
4422
4432
  ): TypedContractMethod<[_perpetualId: BigNumberish], [void], "nonpayable">;
@@ -4457,9 +4467,6 @@ export interface IPerpetualManager extends BaseContract {
4457
4467
  getFunction(
4458
4468
  nameOrSignature: "updateDefaultFundTargetSize"
4459
4469
  ): TypedContractMethod<[_iPerpetualId: BigNumberish], [void], "nonpayable">;
4460
- getFunction(
4461
- nameOrSignature: "updateDefaultFundTargetSizeRandom"
4462
- ): TypedContractMethod<[_iPoolIndex: BigNumberish], [void], "nonpayable">;
4463
4470
  getFunction(
4464
4471
  nameOrSignature: "updateFundingAndPricesAfter"
4465
4472
  ): TypedContractMethod<[_iPerpetualId: BigNumberish], [void], "nonpayable">;
@@ -1206,19 +1206,19 @@ export namespace UpdateMarkPriceEvent {
1206
1206
  perpetualId: BigNumberish,
1207
1207
  fMidPricePremium: BigNumberish,
1208
1208
  fMarkPricePremium: BigNumberish,
1209
- fSpotIndexPrice: BigNumberish
1209
+ fMarkIndexPrice: BigNumberish
1210
1210
  ];
1211
1211
  export type OutputTuple = [
1212
1212
  perpetualId: bigint,
1213
1213
  fMidPricePremium: bigint,
1214
1214
  fMarkPricePremium: bigint,
1215
- fSpotIndexPrice: bigint
1215
+ fMarkIndexPrice: bigint
1216
1216
  ];
1217
1217
  export interface OutputObject {
1218
1218
  perpetualId: bigint;
1219
1219
  fMidPricePremium: bigint;
1220
1220
  fMarkPricePremium: bigint;
1221
- fSpotIndexPrice: bigint;
1221
+ fMarkIndexPrice: bigint;
1222
1222
  }
1223
1223
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
1224
1224
  export type Filter = TypedDeferredTopicFilter<Event>;
@@ -3188,7 +3188,7 @@ const _abi = [
3188
3188
  },
3189
3189
  {
3190
3190
  internalType: "int128",
3191
- name: "fTotalMarginBalance",
3191
+ name: "fParams",
3192
3192
  type: "int128",
3193
3193
  },
3194
3194
  {
@@ -3370,6 +3370,11 @@ const _abi = [
3370
3370
  name: "perpFlags",
3371
3371
  type: "int128",
3372
3372
  },
3373
+ {
3374
+ internalType: "int128",
3375
+ name: "fAMMTargetDD",
3376
+ type: "int128",
3377
+ },
3373
3378
  ],
3374
3379
  internalType: "struct IPerpetualInfo.PerpetualStaticInfo[]",
3375
3380
  name: "",
@@ -3453,7 +3458,7 @@ const _abi = [
3453
3458
  },
3454
3459
  {
3455
3460
  internalType: "uint16",
3456
- name: "minimalSpreadTbps",
3461
+ name: "minimalSpreadBps",
3457
3462
  type: "uint16",
3458
3463
  },
3459
3464
  {
@@ -3580,7 +3585,7 @@ const _abi = [
3580
3585
  },
3581
3586
  {
3582
3587
  internalType: "int128",
3583
- name: "fTotalMarginBalance",
3588
+ name: "fParams",
3584
3589
  type: "int128",
3585
3590
  },
3586
3591
  {
@@ -5084,6 +5089,91 @@ const _abi = [
5084
5089
  stateMutability: "pure",
5085
5090
  type: "function",
5086
5091
  },
5092
+ {
5093
+ inputs: [
5094
+ {
5095
+ components: [
5096
+ {
5097
+ internalType: "uint16",
5098
+ name: "leverageTDR",
5099
+ type: "uint16",
5100
+ },
5101
+ {
5102
+ internalType: "uint16",
5103
+ name: "brokerFeeTbps",
5104
+ type: "uint16",
5105
+ },
5106
+ {
5107
+ internalType: "uint24",
5108
+ name: "iPerpetualId",
5109
+ type: "uint24",
5110
+ },
5111
+ {
5112
+ internalType: "address",
5113
+ name: "traderAddr",
5114
+ type: "address",
5115
+ },
5116
+ {
5117
+ internalType: "uint32",
5118
+ name: "executionTimestamp",
5119
+ type: "uint32",
5120
+ },
5121
+ {
5122
+ internalType: "address",
5123
+ name: "brokerAddr",
5124
+ type: "address",
5125
+ },
5126
+ {
5127
+ internalType: "uint32",
5128
+ name: "submittedTimestamp",
5129
+ type: "uint32",
5130
+ },
5131
+ {
5132
+ internalType: "uint32",
5133
+ name: "flags",
5134
+ type: "uint32",
5135
+ },
5136
+ {
5137
+ internalType: "uint32",
5138
+ name: "iDeadline",
5139
+ type: "uint32",
5140
+ },
5141
+ {
5142
+ internalType: "address",
5143
+ name: "executorAddr",
5144
+ type: "address",
5145
+ },
5146
+ {
5147
+ internalType: "int128",
5148
+ name: "fAmount",
5149
+ type: "int128",
5150
+ },
5151
+ {
5152
+ internalType: "int128",
5153
+ name: "fLimitPrice",
5154
+ type: "int128",
5155
+ },
5156
+ {
5157
+ internalType: "int128",
5158
+ name: "fTriggerPrice",
5159
+ type: "int128",
5160
+ },
5161
+ {
5162
+ internalType: "bytes",
5163
+ name: "brokerSignature",
5164
+ type: "bytes",
5165
+ },
5166
+ ],
5167
+ internalType: "struct IPerpetualOrder.Order",
5168
+ name: "_order",
5169
+ type: "tuple",
5170
+ },
5171
+ ],
5172
+ name: "testTradeEvent",
5173
+ outputs: [],
5174
+ stateMutability: "nonpayable",
5175
+ type: "function",
5176
+ },
5087
5177
  {
5088
5178
  inputs: [
5089
5179
  {
@@ -5291,19 +5381,6 @@ const _abi = [
5291
5381
  stateMutability: "nonpayable",
5292
5382
  type: "function",
5293
5383
  },
5294
- {
5295
- inputs: [
5296
- {
5297
- internalType: "uint8",
5298
- name: "_iPoolIndex",
5299
- type: "uint8",
5300
- },
5301
- ],
5302
- name: "updateDefaultFundTargetSizeRandom",
5303
- outputs: [],
5304
- stateMutability: "nonpayable",
5305
- type: "function",
5306
- },
5307
5384
  {
5308
5385
  inputs: [
5309
5386
  {
@@ -1218,7 +1218,7 @@ const _abi = [
1218
1218
  {
1219
1219
  indexed: false,
1220
1220
  internalType: "int128",
1221
- name: "fSpotIndexPrice",
1221
+ name: "fMarkIndexPrice",
1222
1222
  type: "int128",
1223
1223
  },
1224
1224
  ],
package/src/marketData.ts CHANGED
@@ -988,7 +988,6 @@ export default class MarketData extends PerpetualDataHandler {
988
988
  ): [number, number | undefined, number] {
989
989
  let S2Liq: number, S3Liq: number | undefined;
990
990
  const staticInfo = symbolToPerpStaticInfo.get(symbol)!;
991
- let tau = staticInfo.maintenanceMarginRate;
992
991
  let ccyType = staticInfo.collateralCurrencyType;
993
992
  const isPred = MarketData.isPredictionMarketStatic(staticInfo);
994
993
  const idx_availableCashCC = 2;
@@ -997,14 +996,16 @@ export default class MarketData extends PerpetualDataHandler {
997
996
  const idx_locked_in = 5;
998
997
  const idx_mark_price = 8;
999
998
  const idx_s3 = 9;
1000
- let traderState = new Array<bigint>(10);
999
+ const idx_maint_mgn_rate = 10;
1000
+ let traderState = new Array<bigint>(11);
1001
1001
  traderState[idx_availableCashCC] = floatToABK64x64(marginCashCC);
1002
1002
  traderState[idx_cash] = traderState[idx_availableCashCC];
1003
1003
  traderState[idx_notional] = floatToABK64x64(signedPositionBC);
1004
1004
  traderState[idx_locked_in] = floatToABK64x64(lockedInQC);
1005
1005
  traderState[idx_mark_price] = floatToABK64x64(markPrice);
1006
1006
  traderState[idx_s3] = floatToABK64x64(collToQuoteConversion);
1007
-
1007
+ traderState[idx_maint_mgn_rate] = floatToABK64x64(PerpetualDataHandler.getMaintenanceMarginRate(staticInfo));
1008
+ let tau;
1008
1009
  [S2Liq, S3Liq, tau, ,] = MarketData._calculateLiquidationPrice(
1009
1010
  symbol,
1010
1011
  traderState,
@@ -1735,6 +1736,7 @@ export default class MarketData extends PerpetualDataHandler {
1735
1736
  priceIds: perpInfo.priceIds,
1736
1737
  isPyth: perpInfo.isPyth,
1737
1738
  perpFlags: perpInfo.perpFlags,
1739
+ fAMMTargetDD: perpInfo.fAMMTargetDD,
1738
1740
  };
1739
1741
  return res;
1740
1742
  }
@@ -80,6 +80,7 @@ export interface PerpetualStaticInfo {
80
80
  priceIds: string[];
81
81
  isPyth: boolean[];
82
82
  perpFlags: bigint;
83
+ fAMMTargetDD: bigint;
83
84
  }
84
85
 
85
86
  /*
@@ -698,6 +698,7 @@ export default class PerpetualDataHandler {
698
698
  priceIds: perpInfos[j].priceIds,
699
699
  isPyth: perpInfos[j].isPyth,
700
700
  perpFlags: BigInt(perpInfos[j].perpFlags?.toString() ?? 0),
701
+ fAMMTargetDD: perpInfos[j].fAMMTargetDD
701
702
  };
702
703
  infoArr.push(info);
703
704
  }
@@ -834,7 +835,7 @@ export default class PerpetualDataHandler {
834
835
  fMinimalAMMExposureEMA: ABK64x64ToFloat(BigInt(orig.fMinimalAMMExposureEMA)), // parameter: minimal abs value for fCurrentAMMExposureEMA that we don't want to undershoot
835
836
  fSettlementS3PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS3PriceData)), //quanto index
836
837
  fSettlementS2PriceData: ABK64x64ToFloat(BigInt(orig.fSettlementS2PriceData)), //base-quote pair. Used as last price in normal state.
837
- fTotalMarginBalance: ABK64x64ToFloat(BigInt(orig.fTotalMarginBalance)), //calculated for settlement, in collateral currency
838
+ fTotalMarginBalance: ABK64x64ToFloat(BigInt(orig.fParams)), //calculated for settlement, in collateral currency
838
839
  fMarkPriceEMALambda: ABK64x64ToFloat(Number(orig.fMarkPriceEMALambda)), // parameter: Lambda parameter for EMA used in mark-price for funding rates
839
840
  fFundingRateClamp: ABK64x64ToFloat(Number(orig.fFundingRateClamp)), // parameter: funding rate clamp between which we charge 1bps
840
841
  fMaximalTradeSizeBumpUp: ABK64x64ToFloat(Number(orig.fMaximalTradeSizeBumpUp)), // parameter: >1, users can create a maximal position of size fMaximalTradeSizeBumpUp*fCurrentAMMExposureEMA
@@ -1401,6 +1402,7 @@ export default class PerpetualDataHandler {
1401
1402
  const idx_locked_in = 5;
1402
1403
  const idx_mark_price = 8;
1403
1404
  const idx_s3 = 9;
1405
+ const idx_maint_mgn_rate = 10;
1404
1406
  // const idx_s2 = 10;
1405
1407
  let S2Liq: number;
1406
1408
  let S3Liq: number = ABK64x64ToFloat(traderState[idx_s3]);
@@ -1408,7 +1410,7 @@ export default class PerpetualDataHandler {
1408
1410
  if (perpInfo == undefined) {
1409
1411
  throw new Error(`no info for perpetual ${symbol}`);
1410
1412
  }
1411
- const tau = perpInfo.maintenanceMarginRate;
1413
+ const tau = ABK64x64ToFloat(traderState[idx_maint_mgn_rate]);
1412
1414
  const lockedInValueQC = ABK64x64ToFloat(traderState[idx_locked_in]);
1413
1415
  const position = ABK64x64ToFloat(traderState[idx_notional]);
1414
1416
  const cashCC = ABK64x64ToFloat(traderState[idx_availableCashCC]);
@@ -2099,6 +2101,15 @@ export default class PerpetualDataHandler {
2099
2101
  }
2100
2102
  return containsFlag(staticInfo.perpFlags, MASK_LOW_LIQUIDITY_MARKET);
2101
2103
  }
2104
+ /**
2105
+ * Determines whether a given perpetual represents a tradfi market
2106
+ * which has open/close times
2107
+ * @param staticInfo Perpetual static info
2108
+ * @returns True if perp has tradfi market flag set
2109
+ */
2110
+ public static isTradFiMarketStatic(staticInfo: PerpetualStaticInfo) {
2111
+ return containsFlag(staticInfo.perpFlags, MASK_PREDICTION_MARKET);
2112
+ }
2102
2113
 
2103
2114
  /**
2104
2115
  * Determines whether a given perpetual represents a prediction market
@@ -2108,4 +2119,50 @@ export default class PerpetualDataHandler {
2108
2119
  public static isPredictionMarketStatic(staticInfo: PerpetualStaticInfo) {
2109
2120
  return containsFlag(staticInfo.perpFlags, MASK_PREDICTION_MARKET);
2110
2121
  }
2111
- }
2122
+
2123
+ /**
2124
+ * Get initial margin rate from static data considering open/close of tradfi markets
2125
+ * @param staticInfo static info
2126
+ * @returns initial margin rate in decimals
2127
+ */
2128
+ public static getInitialMarginRate(staticInfo: PerpetualStaticInfo) : number {
2129
+ if (!PerpetualDataHandler.isTradFiMarketStatic(staticInfo)) {
2130
+ return staticInfo.initialMarginRate;
2131
+ }
2132
+ const t = (Date.now()/1000) % 86_400;
2133
+ let oc = PerpetualDataHandler.decodeOpenCloseSeconds(staticInfo.fAMMTargetDD);
2134
+ const isOpen = (t > oc.openSec) != (t > oc.closeSec) != (oc.openSec > oc.closeSec);
2135
+ if (isOpen) {
2136
+ return staticInfo.initialMarginRate;
2137
+ }
2138
+ return 0.2;//5x
2139
+ }
2140
+
2141
+ /**
2142
+ * Get maintenance margin rate from static data considering open/close of tradfi markets
2143
+ * @param staticInfo static info
2144
+ * @returns maintenance margin rate in decimals
2145
+ */
2146
+ public static getMaintenanceMarginRate(staticInfo: PerpetualStaticInfo) : number {
2147
+ if (!PerpetualDataHandler.isTradFiMarketStatic(staticInfo)) {
2148
+ return staticInfo.maintenanceMarginRate;
2149
+ }
2150
+ const t = (Date.now()/1000) % 86_400;
2151
+ let oc = PerpetualDataHandler.decodeOpenCloseSeconds(staticInfo.fAMMTargetDD);
2152
+ const isOpen = (t > oc.openSec) != (t > oc.closeSec) != (oc.openSec > oc.closeSec);
2153
+ if (isOpen) {
2154
+ return staticInfo.maintenanceMarginRate;
2155
+ }
2156
+ return 0.1;//10x
2157
+ }
2158
+
2159
+ public static decodeOpenCloseSeconds(packed: bigint): { openSec: number; closeSec: number } {
2160
+ const MASK = 0x7Fn; // 7-bit mask
2161
+ const closeSlot = Number(packed & MASK);
2162
+ const openSlot = Number((packed >> 7n) & MASK);
2163
+ return {
2164
+ openSec: openSlot * 900, // 15 * 60
2165
+ closeSec: closeSlot * 900,
2166
+ }
2167
+ }
2168
+ }
package/src/priceFeeds.ts CHANGED
@@ -300,7 +300,7 @@ export default class PriceFeeds {
300
300
  ema: decNToFloat(s2EmaInfo?.price ?? 0n, -(s2EmaInfo?.expo ?? 1)),
301
301
  s2MktClosed: mktClosed[0],
302
302
  s3MktClosed: mktClosed[1],
303
- conf: s2Info?.conf ?? 0n,
303
+ conf: BigInt(s2Info?.conf ?? 0n),
304
304
  predMktCLOBParams: s2EmaInfo?.conf ?? 0n,
305
305
  } as IdxPriceInfo;
306
306
  } else {
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const D8X_SDK_VERSION = "2.5.13";
1
+ export const D8X_SDK_VERSION = "2.5.15";