@defisaver/automation-sdk 3.3.14-strategies-refactor-dev → 3.3.15-liq-prot-dev

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.
@@ -543,6 +543,46 @@ export const MAINNET_BUNDLES_INFO = {
543
543
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
544
544
  protocol: PROTOCOLS.AaveV4,
545
545
  },
546
+ [Bundles.MainnetIds.MAKER_LIQUIDATION_PROTECTION]: {
547
+ strategyOrBundleId: Bundles.MainnetIds.MAKER_LIQUIDATION_PROTECTION,
548
+ strategyId: Strategies.Identifiers.LiquidationProtection,
549
+ protocol: PROTOCOLS.MakerDAO,
550
+ },
551
+ [Bundles.MainnetIds.AAVE_V3_LIQUIDATION_PROTECTION]: {
552
+ strategyOrBundleId: Bundles.MainnetIds.AAVE_V3_LIQUIDATION_PROTECTION,
553
+ strategyId: Strategies.Identifiers.LiquidationProtection,
554
+ protocol: PROTOCOLS.AaveV3,
555
+ },
556
+ [Bundles.MainnetIds.AAVE_V4_LIQUIDATION_PROTECTION]: {
557
+ strategyOrBundleId: Bundles.MainnetIds.AAVE_V4_LIQUIDATION_PROTECTION,
558
+ strategyId: Strategies.Identifiers.LiquidationProtection,
559
+ protocol: PROTOCOLS.AaveV4,
560
+ },
561
+ [Bundles.MainnetIds.SPARK_LIQUIDATION_PROTECTION]: {
562
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_LIQUIDATION_PROTECTION,
563
+ strategyId: Strategies.Identifiers.LiquidationProtection,
564
+ protocol: PROTOCOLS.Spark,
565
+ },
566
+ [Bundles.MainnetIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
567
+ strategyOrBundleId: Bundles.MainnetIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
568
+ strategyId: Strategies.Identifiers.LiquidationProtection,
569
+ protocol: PROTOCOLS.CompoundV3,
570
+ },
571
+ [Bundles.MainnetIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
572
+ strategyOrBundleId: Bundles.MainnetIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
573
+ strategyId: Strategies.Identifiers.LiquidationProtection,
574
+ protocol: PROTOCOLS.CompoundV3,
575
+ },
576
+ [Bundles.MainnetIds.MORPHO_BLUE_LIQUIDATION_PROTECTION]: {
577
+ strategyOrBundleId: Bundles.MainnetIds.MORPHO_BLUE_LIQUIDATION_PROTECTION,
578
+ strategyId: Strategies.Identifiers.LiquidationProtection,
579
+ protocol: PROTOCOLS.MorphoBlue,
580
+ },
581
+ [Bundles.MainnetIds.FLUID_T1_LIQUIDATION_PROTECTION]: {
582
+ strategyOrBundleId: Bundles.MainnetIds.FLUID_T1_LIQUIDATION_PROTECTION,
583
+ strategyId: Strategies.Identifiers.LiquidationProtection,
584
+ protocol: PROTOCOLS.FluidT1,
585
+ },
546
586
  };
547
587
  export const OPTIMISM_BUNDLES_INFO = {
548
588
  [Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -600,6 +640,11 @@ export const OPTIMISM_BUNDLES_INFO = {
600
640
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
601
641
  protocol: PROTOCOLS.AaveV3,
602
642
  },
643
+ [Bundles.OptimismIds.AAVE_V3_LIQUIDATION_PROTECTION]: {
644
+ strategyOrBundleId: Bundles.OptimismIds.AAVE_V3_LIQUIDATION_PROTECTION,
645
+ strategyId: Strategies.Identifiers.LiquidationProtection,
646
+ protocol: PROTOCOLS.AaveV3,
647
+ },
603
648
  };
604
649
  export const BASE_BUNDLES_INFO = {
605
650
  [Bundles.BaseIds.AAVE_V3_REPAY]: {
@@ -737,6 +782,31 @@ export const BASE_BUNDLES_INFO = {
737
782
  strategyId: Strategies.Identifiers.CloseOnPrice,
738
783
  protocol: PROTOCOLS.MorphoBlue,
739
784
  },
785
+ [Bundles.BaseIds.AAVE_V3_LIQUIDATION_PROTECTION]: {
786
+ strategyOrBundleId: Bundles.BaseIds.AAVE_V3_LIQUIDATION_PROTECTION,
787
+ strategyId: Strategies.Identifiers.LiquidationProtection,
788
+ protocol: PROTOCOLS.AaveV3,
789
+ },
790
+ [Bundles.BaseIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
791
+ strategyOrBundleId: Bundles.BaseIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
792
+ strategyId: Strategies.Identifiers.LiquidationProtection,
793
+ protocol: PROTOCOLS.CompoundV3,
794
+ },
795
+ [Bundles.BaseIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
796
+ strategyOrBundleId: Bundles.BaseIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
797
+ strategyId: Strategies.Identifiers.LiquidationProtection,
798
+ protocol: PROTOCOLS.CompoundV3,
799
+ },
800
+ [Bundles.BaseIds.MORPHO_BLUE_LIQUIDATION_PROTECTION]: {
801
+ strategyOrBundleId: Bundles.BaseIds.MORPHO_BLUE_LIQUIDATION_PROTECTION,
802
+ strategyId: Strategies.Identifiers.LiquidationProtection,
803
+ protocol: PROTOCOLS.MorphoBlue,
804
+ },
805
+ [Bundles.BaseIds.FLUID_T1_LIQUIDATION_PROTECTION]: {
806
+ strategyOrBundleId: Bundles.BaseIds.FLUID_T1_LIQUIDATION_PROTECTION,
807
+ strategyId: Strategies.Identifiers.LiquidationProtection,
808
+ protocol: PROTOCOLS.FluidT1,
809
+ },
740
810
  };
741
811
  export const ARBITRUM_BUNDLES_INFO = {
742
812
  [Bundles.ArbitrumIds.AAVE_V3_REPAY]: {
@@ -884,6 +954,31 @@ export const ARBITRUM_BUNDLES_INFO = {
884
954
  strategyId: Strategies.Identifiers.CloseOnPrice,
885
955
  protocol: PROTOCOLS.MorphoBlue,
886
956
  },
957
+ [Bundles.ArbitrumIds.AAVE_V3_LIQUIDATION_PROTECTION]: {
958
+ strategyOrBundleId: Bundles.ArbitrumIds.AAVE_V3_LIQUIDATION_PROTECTION,
959
+ strategyId: Strategies.Identifiers.LiquidationProtection,
960
+ protocol: PROTOCOLS.AaveV3,
961
+ },
962
+ [Bundles.ArbitrumIds.COMP_V3_SW_LIQUIDATION_PROTECTION]: {
963
+ strategyOrBundleId: Bundles.ArbitrumIds.COMP_V3_SW_LIQUIDATION_PROTECTION,
964
+ strategyId: Strategies.Identifiers.LiquidationProtection,
965
+ protocol: PROTOCOLS.CompoundV3,
966
+ },
967
+ [Bundles.ArbitrumIds.COMP_V3_EOA_LIQUIDATION_PROTECTION]: {
968
+ strategyOrBundleId: Bundles.ArbitrumIds.COMP_V3_EOA_LIQUIDATION_PROTECTION,
969
+ strategyId: Strategies.Identifiers.LiquidationProtection,
970
+ protocol: PROTOCOLS.CompoundV3,
971
+ },
972
+ [Bundles.ArbitrumIds.MORPHO_BLUE_LIQUIDATION_PROTECTION]: {
973
+ strategyOrBundleId: Bundles.ArbitrumIds.MORPHO_BLUE_LIQUIDATION_PROTECTION,
974
+ strategyId: Strategies.Identifiers.LiquidationProtection,
975
+ protocol: PROTOCOLS.MorphoBlue,
976
+ },
977
+ [Bundles.ArbitrumIds.FLUID_T1_LIQUIDATION_PROTECTION]: {
978
+ strategyOrBundleId: Bundles.ArbitrumIds.FLUID_T1_LIQUIDATION_PROTECTION,
979
+ strategyId: Strategies.Identifiers.LiquidationProtection,
980
+ protocol: PROTOCOLS.FluidT1,
981
+ },
887
982
  };
888
983
  export const BUNDLES_INFO = {
889
984
  [ChainId.Ethereum]: MAINNET_BUNDLES_INFO,
package/esm/index.d.ts CHANGED
@@ -13,12 +13,13 @@ import * as strategiesService from './services/strategiesService';
13
13
  import * as constants from './constants';
14
14
  import * as enums from './types/enums';
15
15
  import type * as types from './types';
16
- import { getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType } from './services/utils';
16
+ import { getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType, getCompoundV3LeverageManagementBundleId } from './services/utils';
17
17
  declare const utils: {
18
- getRatioStateInfoForAaveCloseStrategy: typeof getRatioStateInfoForAaveCloseStrategy;
19
18
  compareSubHashes: typeof compareSubHashes;
20
19
  encodeSubId: typeof encodeSubId;
21
20
  getCloseStrategyType: typeof getCloseStrategyType;
21
+ getCompoundV3LeverageManagementBundleId: typeof getCompoundV3LeverageManagementBundleId;
22
+ getRatioStateInfoForAaveCloseStrategy: typeof getRatioStateInfoForAaveCloseStrategy;
22
23
  };
23
- export { LegacyMakerAutomation, LegacyAaveAutomation, LegacyCompoundAutomation, EthereumStrategies, OptimismStrategies, ArbitrumStrategies, BaseStrategies, triggerService, subDataService, strategySubService, utils, enums, constants, strategiesService, };
24
+ export { ArbitrumStrategies, BaseStrategies, EthereumStrategies, LegacyAaveAutomation, LegacyCompoundAutomation, LegacyMakerAutomation, OptimismStrategies, constants, enums, strategiesService, strategySubService, subDataService, triggerService, utils, };
24
25
  export type { types };
package/esm/index.js CHANGED
@@ -16,8 +16,12 @@ import * as strategySubService from './services/strategySubService';
16
16
  import * as strategiesService from './services/strategiesService';
17
17
  import * as constants from './constants';
18
18
  import * as enums from './types/enums';
19
- import { getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType, } from './services/utils';
19
+ import { getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType, getCompoundV3LeverageManagementBundleId, } from './services/utils';
20
20
  const utils = {
21
- getRatioStateInfoForAaveCloseStrategy, compareSubHashes, encodeSubId, getCloseStrategyType,
21
+ compareSubHashes,
22
+ encodeSubId,
23
+ getCloseStrategyType,
24
+ getCompoundV3LeverageManagementBundleId,
25
+ getRatioStateInfoForAaveCloseStrategy,
22
26
  };
23
- export { LegacyMakerAutomation, LegacyAaveAutomation, LegacyCompoundAutomation, EthereumStrategies, OptimismStrategies, ArbitrumStrategies, BaseStrategies, triggerService, subDataService, strategySubService, utils, enums, constants, strategiesService, };
27
+ export { ArbitrumStrategies, BaseStrategies, EthereumStrategies, LegacyAaveAutomation, LegacyCompoundAutomation, LegacyMakerAutomation, OptimismStrategies, constants, enums, strategiesService, strategySubService, subDataService, triggerService, utils, };
@@ -94,6 +94,25 @@ function parseMakerLeverageManagement(position, parseData) {
94
94
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
95
95
  return _position;
96
96
  }
97
+ function parseMakerLiquidationProtection(position, parseData) {
98
+ const _position = cloneDeep(position);
99
+ const { subStruct, subId } = parseData.subscriptionEventData;
100
+ const { isEnabled } = parseData.strategiesSubsData;
101
+ const triggerData = triggerService.makerRatioTrigger.decode(subStruct.triggerData);
102
+ const subData = subDataService.makerLiquidationProtectionSubData.decode(subStruct.subData);
103
+ _position.strategyData.decoded.triggerData = triggerData;
104
+ _position.strategyData.decoded.subData = subData;
105
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, subData.vaultId);
106
+ _position.specific = {
107
+ triggerRepayRatio: triggerData.ratio,
108
+ targetRepayRatio: subData.targetRatio,
109
+ repayEnabled: isEnabled,
110
+ subId1: Number(subId),
111
+ };
112
+ // TODO -> Is this ok?
113
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
114
+ return _position;
115
+ }
97
116
  function parseLiquityCloseOnPrice(position, parseData) {
98
117
  const _position = cloneDeep(position);
99
118
  const { subStruct } = parseData.subscriptionEventData;
@@ -204,6 +223,27 @@ function parseAaveV3LeverageManagement(position, parseData) {
204
223
  }
205
224
  return _position;
206
225
  }
226
+ function parseAaveV3LiquidationProtection(position, parseData) {
227
+ const _position = cloneDeep(position);
228
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
229
+ const { isEnabled } = parseData.strategiesSubsData;
230
+ const triggerData = triggerService.aaveV3RatioTrigger.decode(subStruct.triggerData);
231
+ // const isEOA = _position.strategy.strategyId.includes('eoa');
232
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.decode(subStruct.subData);
233
+ _position.strategyData.decoded.triggerData = triggerData;
234
+ _position.strategyData.decoded.subData = subData;
235
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
236
+ _position.specific = {
237
+ triggerRepayRatio: triggerData.ratio,
238
+ targetRepayRatio: subData.targetRatio,
239
+ repayEnabled: isEnabled,
240
+ subId1: Number(subId),
241
+ subHashRepay: subHash,
242
+ };
243
+ // TODO -> Should split for EOA or not? Prob not as they will use same encoding and decoding
244
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
245
+ return _position;
246
+ }
207
247
  function parseAaveV3LeverageManagementOnPrice(position, parseData) {
208
248
  const _position = cloneDeep(position);
209
249
  const { subStruct } = parseData.subscriptionEventData;
@@ -333,6 +373,27 @@ function parseAaveV4LeverageManagement(position, parseData) {
333
373
  }
334
374
  return _position;
335
375
  }
376
+ function parseAaveV4LiquidationProtection(position, parseData) {
377
+ const _position = cloneDeep(position);
378
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
379
+ const { isEnabled } = parseData.strategiesSubsData;
380
+ const triggerData = triggerService.aaveV4RatioTrigger.decode(subStruct.triggerData);
381
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.decode(subStruct.subData);
382
+ // const isEOA = _position.strategy.strategyId.includes('eoa');
383
+ // const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId as Strategies.Identifiers);
384
+ _position.strategyData.decoded.triggerData = triggerData;
385
+ _position.strategyData.decoded.subData = subData;
386
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.spoke);
387
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
388
+ _position.specific = {
389
+ triggerRepayRatio: triggerData.ratio,
390
+ targetRepayRatio: subData.targetRatio,
391
+ repayEnabled: isEnabled,
392
+ subId1: Number(subId),
393
+ subHashRepay: subHash,
394
+ };
395
+ return _position;
396
+ }
336
397
  function parseAaveV4LeverageManagementOnPrice(position, parseData) {
337
398
  const _position = cloneDeep(position);
338
399
  const { subStruct } = parseData.subscriptionEventData;
@@ -517,6 +578,28 @@ function parseCompoundV3LeverageManagement(position, parseData) {
517
578
  _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
518
579
  return _position;
519
580
  }
581
+ function parseCompoundV3LiquidationProtection(position, parseData) {
582
+ const _position = cloneDeep(position);
583
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
584
+ const { isEnabled } = parseData.strategiesSubsData;
585
+ const subDataDecoder = subDataService.compoundV3LiquidationProtectionSubData;
586
+ const triggerData = triggerService.compoundV3RatioTrigger.decode(subStruct.triggerData);
587
+ const subData = subDataDecoder.decode(subStruct.subData);
588
+ _position.strategyData.decoded.triggerData = triggerData;
589
+ _position.strategyData.decoded.subData = subData;
590
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.market);
591
+ // const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId as Strategies.Identifiers);
592
+ const isEOA = _position.strategy.strategyId.includes('eoa');
593
+ _position.specific = {
594
+ triggerRepayRatio: triggerData.ratio,
595
+ targetRepayRatio: subData.targetRatio,
596
+ repayEnabled: isEnabled,
597
+ subId1: Number(subId),
598
+ subHashRepay: subHash,
599
+ };
600
+ _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLiquidationProtection : Strategies.IdOverrides.LiquidationProtection;
601
+ return _position;
602
+ }
520
603
  function parseCompoundV3LeverageManagementOnPrice(position, parseData) {
521
604
  const _position = cloneDeep(position);
522
605
  const { subStruct } = parseData.subscriptionEventData;
@@ -696,6 +779,25 @@ function parseSparkLeverageManagement(position, parseData) {
696
779
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
697
780
  return _position;
698
781
  }
782
+ function parseSparkLiquidationProtection(position, parseData) {
783
+ const _position = cloneDeep(position);
784
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
785
+ const { isEnabled } = parseData.strategiesSubsData;
786
+ const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
787
+ const subData = subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
788
+ _position.strategyData.decoded.triggerData = triggerData;
789
+ _position.strategyData.decoded.subData = subData;
790
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
791
+ _position.specific = {
792
+ triggerRepayRatio: triggerData.ratio,
793
+ targetRepayRatio: subData.targetRatio,
794
+ repayEnabled: isEnabled,
795
+ subId1: Number(subId),
796
+ subHashRepay: subHash,
797
+ };
798
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
799
+ return _position;
800
+ }
699
801
  function parseSparkLeverageManagementOnPrice(position, parseData) {
700
802
  const _position = cloneDeep(position);
701
803
  const { subStruct } = parseData.subscriptionEventData;
@@ -850,6 +952,27 @@ function parseMorphoBlueLeverageManagement(position, parseData) {
850
952
  _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagement : Strategies.IdOverrides.LeverageManagement;
851
953
  return _position;
852
954
  }
955
+ function parseMorphoBlueLiquidationProtection(position, parseData) {
956
+ const _position = cloneDeep(position);
957
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
958
+ const { isEnabled } = parseData.strategiesSubsData;
959
+ const triggerData = triggerService.morphoBlueRatioTrigger.decode(subStruct.triggerData);
960
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.decode(subStruct.subData);
961
+ _position.strategyData.decoded.triggerData = triggerData;
962
+ _position.strategyData.decoded.subData = subData;
963
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, triggerData.owner.toLowerCase(), triggerData.marketId);
964
+ _position.specific = {
965
+ triggerRepayRatio: triggerData.ratio,
966
+ targetRepayRatio: subData.targetRatio,
967
+ repayEnabled: isEnabled,
968
+ subId1: Number(subId),
969
+ subHashRepay: subHash,
970
+ };
971
+ const isEOA = _position.strategy.strategyId.includes('eoa');
972
+ // TODO -> Should be separate for EOA ?
973
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
974
+ return _position;
975
+ }
853
976
  function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
854
977
  const _position = cloneDeep(position);
855
978
  const { subStruct } = parseData.subscriptionEventData;
@@ -1002,6 +1125,25 @@ function parseFluidT1LeverageManagement(position, parseData) {
1002
1125
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
1003
1126
  return _position;
1004
1127
  }
1128
+ function parseFluidT1LiquidationProtection(position, parseData) {
1129
+ const _position = cloneDeep(position);
1130
+ const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1131
+ const { isEnabled } = parseData.strategiesSubsData;
1132
+ const triggerData = triggerService.fluidRatioTrigger.decode(subStruct.triggerData);
1133
+ const subData = subDataService.fluidLiquidationProtectionSubData.decode(subStruct.subData);
1134
+ _position.strategyData.decoded.triggerData = triggerData;
1135
+ _position.strategyData.decoded.subData = subData;
1136
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.nftId, subData.vault);
1137
+ _position.specific = {
1138
+ triggerRepayRatio: triggerData.ratio,
1139
+ targetRepayRatio: subData.targetRatio,
1140
+ repayEnabled: isEnabled,
1141
+ subId1: Number(subId),
1142
+ subHashRepay: subHash,
1143
+ };
1144
+ _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1145
+ return _position;
1146
+ }
1005
1147
  const parsingMethodsMapping = {
1006
1148
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1007
1149
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1011,6 +1153,7 @@ const parsingMethodsMapping = {
1011
1153
  [Strategies.Identifiers.TrailingStopToDebt]: parseMakerTrailingStop,
1012
1154
  [Strategies.Identifiers.Repay]: parseMakerLeverageManagement,
1013
1155
  [Strategies.Identifiers.Boost]: parseMakerLeverageManagement,
1156
+ [Strategies.Identifiers.LiquidationProtection]: parseMakerLiquidationProtection,
1014
1157
  },
1015
1158
  [ProtocolIdentifiers.StrategiesAutomation.Liquity]: {
1016
1159
  [Strategies.Identifiers.CloseOnPriceToColl]: parseLiquityCloseOnPrice,
@@ -1049,6 +1192,7 @@ const parsingMethodsMapping = {
1049
1192
  [Strategies.Identifiers.EoaBoostOnPrice]: parseAaveV3LeverageManagementOnPrice,
1050
1193
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV3CloseOnPrice,
1051
1194
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV3CollateralSwitch,
1195
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV3LiquidationProtection,
1052
1196
  },
1053
1197
  [ProtocolIdentifiers.StrategiesAutomation.AaveV4]: {
1054
1198
  [Strategies.Identifiers.Repay]: parseAaveV4LeverageManagement,
@@ -1063,6 +1207,7 @@ const parsingMethodsMapping = {
1063
1207
  [Strategies.Identifiers.EoaCloseOnPrice]: parseAaveV4CloseOnPrice,
1064
1208
  [Strategies.Identifiers.CollateralSwitch]: parseAaveV4CollateralSwitch,
1065
1209
  [Strategies.Identifiers.EoaCollateralSwitch]: parseAaveV4CollateralSwitch,
1210
+ [Strategies.Identifiers.LiquidationProtection]: parseAaveV4LiquidationProtection,
1066
1211
  },
1067
1212
  [ProtocolIdentifiers.StrategiesAutomation.CompoundV2]: {
1068
1213
  [Strategies.Identifiers.Repay]: parseCompoundV2LeverageManagement,
@@ -1079,6 +1224,9 @@ const parsingMethodsMapping = {
1079
1224
  [Strategies.Identifiers.EoaBoostOnPrice]: parseCompoundV3LeverageManagementOnPrice,
1080
1225
  [Strategies.Identifiers.CloseOnPrice]: parseCompoundV3CloseOnPrice,
1081
1226
  [Strategies.Identifiers.EoaCloseOnPrice]: parseCompoundV3CloseOnPrice,
1227
+ // TODO -> here should prob separate EOA from SW
1228
+ [Strategies.Identifiers.LiquidationProtection]: parseCompoundV3LiquidationProtection,
1229
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseCompoundV3LiquidationProtection,
1082
1230
  },
1083
1231
  [ProtocolIdentifiers.StrategiesAutomation.ChickenBonds]: {
1084
1232
  [Strategies.Identifiers.Rebond]: parseChickenBondsRebond,
@@ -1098,6 +1246,7 @@ const parsingMethodsMapping = {
1098
1246
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1099
1247
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1100
1248
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1249
+ [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1101
1250
  },
1102
1251
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1103
1252
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -1111,10 +1260,12 @@ const parsingMethodsMapping = {
1111
1260
  [Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
1112
1261
  [Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
1113
1262
  [Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
1263
+ [Strategies.Identifiers.LiquidationProtection]: parseMorphoBlueLiquidationProtection,
1114
1264
  },
1115
1265
  [ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
1116
1266
  [Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
1117
1267
  [Strategies.Identifiers.Boost]: parseFluidT1LeverageManagement,
1268
+ [Strategies.Identifiers.LiquidationProtection]: parseFluidT1LiquidationProtection,
1118
1269
  },
1119
1270
  };
1120
1271
  function getParsingMethod(id, strategy) {
@@ -1,11 +1,12 @@
1
- import type { OrderType } from '../types/enums';
2
- import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies } from '../types/enums';
1
+ import { Bundles, ChainId, CloseToAssetType, RatioState, Strategies } from '../types/enums';
3
2
  import type { EthereumAddress, StrategyOrBundleIds } from '../types';
3
+ import type { OrderType } from '../types/enums';
4
4
  export declare const makerEncode: {
5
5
  repayFromSavings(bundleId: StrategyOrBundleIds, vaultId: number, triggerRepayRatio: number, targetRepayRatio: number, isBundle?: boolean, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds | Strategies.OptimismIds | Strategies.ArbitrumIds | Strategies.BaseIds | Bundles.MainnetIds | Bundles.OptimismIds | Bundles.ArbitrumIds | Bundles.BaseIds)[];
6
6
  closeOnPrice(vaultId: number, ratioState: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
7
7
  trailingStop(vaultId: number, triggerPercentage: number, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, roundId: number, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
8
8
  leverageManagementWithoutSubProxy(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, isBoost: boolean, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
9
+ liquidationProtection(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, daiAddr?: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
9
10
  };
10
11
  export declare const liquityEncode: {
11
12
  closeOnPrice(priceOverOrUnder: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
@@ -60,6 +61,7 @@ export declare const aaveV3Encode: {
60
61
  targetRatio: number;
61
62
  }): (number | boolean | string[])[];
62
63
  leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, isGeneric?: boolean): (number | boolean | string[])[];
64
+ liquidationProtection(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
63
65
  leverageManagementOnPriceGeneric(strategyOrBundleId: number, price: number, ratioState: RatioState, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number, user: EthereumAddress): (number | boolean | string[])[];
64
66
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
65
67
  collateralSwitch(strategyOrBundleId: number, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState): (number | boolean | string[])[];
@@ -69,6 +71,7 @@ export declare const compoundV2Encode: {
69
71
  };
70
72
  export declare const compoundV3Encode: {
71
73
  leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, baseToken: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
74
+ liquidationProtection(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string[];
72
75
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, ratioState: RatioState, user: EthereumAddress): (number | boolean | string[])[];
73
76
  closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, stopLossPrice: number | undefined, stopLossType: CloseToAssetType | undefined, takeProfitPrice: number | undefined, takeProfitType: CloseToAssetType | undefined, user: EthereumAddress): (number | boolean | string[])[];
74
77
  };
@@ -95,6 +98,7 @@ export declare const sparkEncode: {
95
98
  }): (number | boolean | string[])[];
96
99
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
97
100
  leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
101
+ liquidationProtection(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
98
102
  collateralSwitch(strategyOrBundleId: number, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState): (number | boolean | string[])[];
99
103
  };
100
104
  export declare const crvUSDEncode: {
@@ -103,6 +107,7 @@ export declare const crvUSDEncode: {
103
107
  };
104
108
  export declare const morphoBlueEncode: {
105
109
  leverageManagement(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (boolean | string[] | Bundles.BaseIds)[] | (boolean | string[] | Bundles.MainnetIds | Bundles.ArbitrumIds)[];
110
+ liquidationProtection(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (boolean | string[] | Bundles.MainnetIds)[];
106
111
  leverageManagementOnPrice(strategyOrBundleId: number, isBundle: boolean | undefined, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, targetRatio: number, price: number, priceState: RatioState): (number | boolean | string[])[];
107
112
  closeOnPrice(strategyOrBundleId: number, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
108
113
  };
@@ -114,9 +119,11 @@ export declare const liquityV2Encode: {
114
119
  };
115
120
  export declare const fluidEncode: {
116
121
  leverageManagement(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
122
+ liquidationProtection(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
117
123
  };
118
124
  export declare const aaveV4Encode: {
119
125
  leverageManagement(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
126
+ liquidationProtection(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
120
127
  leverageManagementOnPrice(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, targetRatio: number, price: string, priceState: RatioState, ratioState: RatioState): (number | boolean | string[])[];
121
128
  closeOnPrice(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, stopLossPrice?: string, stopLossType?: CloseToAssetType, takeProfitPrice?: string, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
122
129
  collateralSwitch(strategyOrBundleId: number, owner: EthereumAddress, spoke: EthereumAddress, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, amountToSwitch: string, price: string, ratioState: RatioState): (number | boolean | string[])[];
@@ -1,9 +1,9 @@
1
1
  import { getAssetInfo } from '@defisaver/tokens';
2
- import { CloseToAssetType, Bundles, ChainId, RatioState, Strategies, } from '../types/enums';
3
2
  import { STRATEGY_IDS } from '../constants';
3
+ import { Bundles, ChainId, CloseToAssetType, RatioState, Strategies, } from '../types/enums';
4
4
  import * as subDataService from './subDataService';
5
5
  import * as triggerService from './triggerService';
6
- import { compareAddresses, getCloseStrategyType, requireAddress, requireAddresses, } from './utils';
6
+ import { compareAddresses, getBundleIdsByNetwork, getCloseStrategyType, requireAddress, requireAddresses, } from './utils';
7
7
  export const makerEncode = {
8
8
  repayFromSavings(bundleId, vaultId, triggerRepayRatio, targetRepayRatio, isBundle = true, chainId = ChainId.Ethereum, daiAddr, mcdCdpManagerAddr) {
9
9
  const subData = subDataService.makerRepayFromSavingsSubData.encode(vaultId, targetRepayRatio, chainId, daiAddr, mcdCdpManagerAddr);
@@ -41,6 +41,17 @@ export const makerEncode = {
41
41
  subData,
42
42
  ];
43
43
  },
44
+ liquidationProtection(vaultId, triggerRatio, targetRatio, ratioState, daiAddr) {
45
+ const bundleId = Bundles.MainnetIds.MAKER_LIQUIDATION_PROTECTION;
46
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
47
+ const subData = subDataService.makerLiquidationProtectionSubData.encode(vaultId, targetRatio, daiAddr);
48
+ return [
49
+ bundleId,
50
+ true,
51
+ triggerData,
52
+ subData,
53
+ ];
54
+ },
44
55
  };
45
56
  export const liquityEncode = {
46
57
  closeOnPrice(priceOverOrUnder, price, closeToAssetAddr, chainlinkCollAddress, chainId = ChainId.Ethereum, collAddr, debtAddr) {
@@ -139,6 +150,12 @@ export const aaveV3Encode = {
139
150
  const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
140
151
  return [strategyOrBundleId, isBundle, triggerData, subData];
141
152
  },
153
+ liquidationProtection(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
154
+ const isBundle = true;
155
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.encode(targetRatio, ratioState, market, user);
156
+ const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
157
+ return [strategyOrBundleId, isBundle, triggerData, subData];
158
+ },
142
159
  leverageManagementOnPriceGeneric(strategyOrBundleId, price, ratioState, collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user) {
143
160
  const isBundle = true;
144
161
  const subDataEncoded = subDataService.aaveV3LeverageManagementOnPriceGeneric.encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user);
@@ -174,6 +191,9 @@ export const compoundV3Encode = {
174
191
  const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
175
192
  return [strategyOrBundleId, isBundle, triggerData, subData];
176
193
  },
194
+ liquidationProtection(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
195
+ return subDataService.compoundV3LiquidationProtectionSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
196
+ },
177
197
  leverageManagementOnPrice(strategyOrBundleId, market, collToken, baseToken, targetRatio, price, priceState, ratioState, // REPAY for repay on price, BOOST for boost on price
178
198
  user) {
179
199
  const isBundle = true;
@@ -231,6 +251,12 @@ export const sparkEncode = {
231
251
  const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
232
252
  return [strategyOrBundleId, isBundle, triggerData, subData];
233
253
  },
254
+ liquidationProtection(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
255
+ const isBundle = true;
256
+ const subData = subDataService.sparkLiquidationProtectionSubData.encode(targetRatio, ratioState);
257
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
258
+ return [strategyOrBundleId, isBundle, triggerData, subData];
259
+ },
234
260
  collateralSwitch(strategyOrBundleId, fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, baseTokenAddress, quoteTokenAddress, price, state) {
235
261
  const isBundle = false;
236
262
  const subDataEncoded = subDataService.sparkCollateralSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch);
@@ -273,6 +299,14 @@ export const morphoBlueEncode = {
273
299
  const isBundle = true;
274
300
  return [strategyOrBundleId, isBundle, triggerData, subData];
275
301
  },
302
+ liquidationProtection(marketId, loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, triggerRatio, user, isEOA, network) {
303
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
304
+ const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
305
+ // TODO -> Check if need to deploy separate bundles for EOA, or can reuse this for EOA. Logic above is different for EOA and SW on arbi and mainnet. Base uses same for both, not sure if because of lack of EOA support or because it is using same bundle for both.
306
+ const bundleId = getBundleIdsByNetwork(network).MORPHO_BLUE_LIQUIDATION_PROTECTION;
307
+ const isBundle = true;
308
+ return [bundleId, isBundle, triggerData, subData];
309
+ },
276
310
  leverageManagementOnPrice(strategyOrBundleId, isBundle = true, loanToken, collToken, oracle, irm, lltv, user, targetRatio, price, priceState) {
277
311
  const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
278
312
  const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
@@ -321,6 +355,12 @@ export const fluidEncode = {
321
355
  const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
322
356
  return [strategyOrBundleId, isBundle, triggerData, subData];
323
357
  },
358
+ liquidationProtection(nftId, vault, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
359
+ const isBundle = true;
360
+ const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
361
+ const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
362
+ return [strategyOrBundleId, isBundle, triggerData, subData];
363
+ },
324
364
  };
325
365
  export const aaveV4Encode = {
326
366
  leverageManagement(strategyOrBundleId, owner, spoke, ratioState, targetRatio, triggerRatio) {
@@ -329,6 +369,12 @@ export const aaveV4Encode = {
329
369
  const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
330
370
  return [strategyOrBundleId, isBundle, triggerData, subData];
331
371
  },
372
+ liquidationProtection(strategyOrBundleId, owner, spoke, ratioState, targetRatio, triggerRatio) {
373
+ const isBundle = true;
374
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
375
+ const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
376
+ return [strategyOrBundleId, isBundle, triggerData, subData];
377
+ },
332
378
  leverageManagementOnPrice(strategyOrBundleId, owner, spoke, collAsset, collAssetId, debtAsset, debtAssetId, targetRatio, price, priceState, ratioState) {
333
379
  const isBundle = true;
334
380
  const subData = subDataService.aaveV4LeverageManagementOnPriceSubData.encode(spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, ratioState, targetRatio);