@defisaver/automation-sdk 3.3.0 → 3.3.2-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.
@@ -101,6 +101,11 @@ exports.MAINNET_STRATEGIES_INFO = {
101
101
  strategyId: enums_1.Strategies.Identifiers.Payback,
102
102
  protocol: exports.PROTOCOLS.LiquityV2,
103
103
  },
104
+ [enums_1.Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT]: {
105
+ strategyOrBundleId: enums_1.Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT,
106
+ strategyId: enums_1.Strategies.Identifiers.InterestRateAdjustment,
107
+ protocol: exports.PROTOCOLS.LiquityV2,
108
+ },
104
109
  };
105
110
  exports.OPTIMISM_STRATEGIES_INFO = {
106
111
  [enums_1.Strategies.OptimismIds.EXCHANGE_DCA]: {
@@ -380,8 +380,6 @@ function parseCompoundV3LeverageManagementOnPrice(position, parseData) {
380
380
  price: triggerData.price,
381
381
  priceState: triggerData.priceState,
382
382
  };
383
- const isEOA = _position.strategy.strategyId.includes('eoa');
384
- _position.strategy.strategyId = isEOA ? enums_1.Strategies.IdOverrides.EoaLeverageManagementOnPrice : enums_1.Strategies.IdOverrides.LeverageManagementOnPrice;
385
383
  return _position;
386
384
  }
387
385
  function parseCompoundV3CloseOnPrice(position, parseData) {
@@ -814,6 +812,23 @@ function parseFluidT1LeverageManagement(position, parseData) {
814
812
  _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
815
813
  return _position;
816
814
  }
815
+ function parseLiquityV2InterestRateAdjustment(position, parseData) {
816
+ const _position = (0, lodash_1.cloneDeep)(position);
817
+ const { subStruct } = parseData.subscriptionEventData;
818
+ const triggerData = triggerService.liquityV2InterestRateAdjustmentTrigger.decode(subStruct.triggerData);
819
+ const subData = subDataService.liquityV2InterestRateAdjustmentSubData.decode(subStruct.subData);
820
+ _position.strategyData.decoded.triggerData = triggerData;
821
+ _position.strategyData.decoded.subData = subData;
822
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
823
+ _position.specific = {
824
+ market: subData.market,
825
+ troveId: subData.troveId,
826
+ criticalDebtInFrontLimit: triggerData.criticalDebtInFrontLimit,
827
+ nonCriticalDebtInFrontLimit: triggerData.nonCriticalDebtInFrontLimit,
828
+ interestRateChange: subData.interestRateChange,
829
+ };
830
+ return _position;
831
+ }
817
832
  const parsingMethodsMapping = {
818
833
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
819
834
  [enums_1.Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -841,6 +856,7 @@ const parsingMethodsMapping = {
841
856
  [enums_1.Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
842
857
  [enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
843
858
  [enums_1.Strategies.Identifiers.Payback]: parseLiquityV2Payback,
859
+ [enums_1.Strategies.Identifiers.InterestRateAdjustment]: parseLiquityV2InterestRateAdjustment,
844
860
  },
845
861
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
846
862
  [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
@@ -107,6 +107,7 @@ export declare const liquityV2Encode: {
107
107
  closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
108
108
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, price: number, state: RatioState, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): (number | boolean | string[])[];
109
109
  payback(market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState, triggerRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
110
+ interestRateAdjustment(market: EthereumAddress, troveId: string, criticalDebtInFrontLimit: string, nonCriticalDebtInFrontLimit: string, interestRateChange: string): (boolean | string[] | Strategies.MainnetIds)[];
110
111
  };
111
112
  export declare const fluidEncode: {
112
113
  leverageManagement(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
@@ -317,6 +317,13 @@ exports.liquityV2Encode = {
317
317
  const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
318
318
  return [strategyId, isBundle, triggerData, subData];
319
319
  },
320
+ interestRateAdjustment(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit, interestRateChange) {
321
+ const strategyId = enums_1.Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT;
322
+ const isBundle = false;
323
+ const subData = subDataService.liquityV2InterestRateAdjustmentSubData.encode(market, troveId, interestRateChange);
324
+ const triggerData = triggerService.liquityV2InterestRateAdjustmentTrigger.encode(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit);
325
+ return [strategyId, isBundle, triggerData, subData];
326
+ },
320
327
  };
321
328
  exports.fluidEncode = {
322
329
  leverageManagement(nftId, vault, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
@@ -280,3 +280,11 @@ export declare const compoundV3CloseSubData: {
280
280
  owner: EthereumAddress;
281
281
  };
282
282
  };
283
+ export declare const liquityV2InterestRateAdjustmentSubData: {
284
+ encode: (market: EthereumAddress, troveId: string, interestRateChange: string) => string[];
285
+ decode: (subData: string[]) => {
286
+ market: string;
287
+ troveId: string;
288
+ interestRateChange: string;
289
+ };
290
+ };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.fluidLeverageManagementSubData = exports.liquityV2PaybackSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkQuotePriceSubData = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
6
+ exports.liquityV2InterestRateAdjustmentSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.fluidLeverageManagementSubData = exports.liquityV2PaybackSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkQuotePriceSubData = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
7
7
  const decimal_js_1 = __importDefault(require("decimal.js"));
8
8
  const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
9
9
  const web3_utils_1 = require("web3-utils");
@@ -738,3 +738,27 @@ exports.compoundV3CloseSubData = {
738
738
  };
739
739
  },
740
740
  };
741
+ exports.liquityV2InterestRateAdjustmentSubData = {
742
+ encode: (market, troveId, interestRateChange) => {
743
+ const marketEncoded = web3_eth_abi_1.default.encodeParameter('address', market);
744
+ const troveIdEncoded = web3_eth_abi_1.default.encodeParameter('uint256', troveId);
745
+ const interestRateChangeWei = new decimal_js_1.default(interestRateChange).mul(1e16).toString();
746
+ const interestRateChangeEncoded = web3_eth_abi_1.default.encodeParameter('uint256', interestRateChangeWei.toString());
747
+ return [
748
+ marketEncoded,
749
+ troveIdEncoded,
750
+ interestRateChangeEncoded,
751
+ ];
752
+ },
753
+ decode: (subData) => {
754
+ const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
755
+ const troveId = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
756
+ const interestRateChangeWei = web3_eth_abi_1.default.decodeParameter('uint256', subData[2]);
757
+ const interestRateChange = new decimal_js_1.default(interestRateChangeWei).div(Math.pow(10, 16)).toString();
758
+ return {
759
+ market,
760
+ troveId,
761
+ interestRateChange,
762
+ };
763
+ },
764
+ };
@@ -266,3 +266,12 @@ export declare const compoundV3PriceRangeTrigger: {
266
266
  upperPrice: string;
267
267
  };
268
268
  };
269
+ export declare const liquityV2InterestRateAdjustmentTrigger: {
270
+ encode(market: EthereumAddress, troveId: string, criticalDebtInFrontLimit: string, nonCriticalDebtInFrontLimit: string): string[];
271
+ decode(triggerData: string[]): {
272
+ market: EthereumAddress;
273
+ troveId: string;
274
+ criticalDebtInFrontLimit: string;
275
+ nonCriticalDebtInFrontLimit: string;
276
+ };
277
+ };
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.compoundV3PriceRangeTrigger = exports.compoundV3PriceTrigger = exports.fluidRatioTrigger = exports.morphoBluePriceTrigger = exports.closePriceTrigger = exports.liquityV2QuotePriceTrigger = exports.liquityV2RatioTrigger = exports.morphoBlueRatioTrigger = exports.crvUsdHealthRatioTrigger = exports.crvUSDRatioTrigger = exports.curveUsdSoftLiquidationTrigger = exports.curveUsdBorrowRateTrigger = exports.sparkQuotePriceTrigger = exports.sparkRatioTrigger = exports.exchangeOffchainPriceTrigger = exports.exchangeTimestampTrigger = exports.compoundV3RatioTrigger = exports.cBondsRebondTrigger = exports.aaveV2RatioTrigger = exports.liquityV2AdjustTimeTrigger = exports.liquityV2DebtInFrontTrigger = exports.liquityDebtInFrontWithLimitTrigger = exports.liquityDebtInFrontTrigger = exports.liquityRatioTrigger = exports.compoundV2RatioTrigger = exports.aaveV3QuotePriceWithMaximumGasPriceTrigger = exports.aaveV3QuotePriceTrigger = exports.morphoAaveV2RatioTrigger = exports.aaveV3RatioTrigger = exports.makerRatioTrigger = exports.trailingStopTrigger = exports.chainlinkPriceTrigger = void 0;
29
+ exports.liquityV2InterestRateAdjustmentTrigger = exports.compoundV3PriceRangeTrigger = exports.compoundV3PriceTrigger = exports.fluidRatioTrigger = exports.morphoBluePriceTrigger = exports.closePriceTrigger = exports.liquityV2QuotePriceTrigger = exports.liquityV2RatioTrigger = exports.morphoBlueRatioTrigger = exports.crvUsdHealthRatioTrigger = exports.crvUSDRatioTrigger = exports.curveUsdSoftLiquidationTrigger = exports.curveUsdBorrowRateTrigger = exports.sparkQuotePriceTrigger = exports.sparkRatioTrigger = exports.exchangeOffchainPriceTrigger = exports.exchangeTimestampTrigger = exports.compoundV3RatioTrigger = exports.cBondsRebondTrigger = exports.aaveV2RatioTrigger = exports.liquityV2AdjustTimeTrigger = exports.liquityV2DebtInFrontTrigger = exports.liquityDebtInFrontWithLimitTrigger = exports.liquityDebtInFrontTrigger = exports.liquityRatioTrigger = exports.compoundV2RatioTrigger = exports.aaveV3QuotePriceWithMaximumGasPriceTrigger = exports.aaveV3QuotePriceTrigger = exports.morphoAaveV2RatioTrigger = exports.aaveV3RatioTrigger = exports.makerRatioTrigger = exports.trailingStopTrigger = exports.chainlinkPriceTrigger = void 0;
30
30
  const decimal_js_1 = __importDefault(require("decimal.js"));
31
31
  const tokens_1 = require("@defisaver/tokens");
32
32
  const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
@@ -507,3 +507,19 @@ exports.compoundV3PriceRangeTrigger = {
507
507
  };
508
508
  },
509
509
  };
510
+ exports.liquityV2InterestRateAdjustmentTrigger = {
511
+ encode(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit) {
512
+ const criticalDebtInFrontLimitWei = web3Utils.toWei(new decimal_js_1.default(criticalDebtInFrontLimit).toString(), 'ether');
513
+ const nonCriticalDebtInFrontLimitWei = web3Utils.toWei(new decimal_js_1.default(nonCriticalDebtInFrontLimit).toString(), 'ether');
514
+ return [web3_eth_abi_1.default.encodeParameters(['address', 'uint256', 'uint256', 'uint256'], [market, troveId, criticalDebtInFrontLimitWei, nonCriticalDebtInFrontLimitWei])];
515
+ },
516
+ decode(triggerData) {
517
+ const decodedData = web3_eth_abi_1.default.decodeParameters(['address', 'uint256', 'uint256', 'uint256'], triggerData[0]);
518
+ return {
519
+ market: decodedData[0],
520
+ troveId: decodedData[1],
521
+ criticalDebtInFrontLimit: new decimal_js_1.default(decodedData[2]).div(Math.pow(10, 18)).toString(),
522
+ nonCriticalDebtInFrontLimit: new decimal_js_1.default(decodedData[3]).div(Math.pow(10, 18)).toString(),
523
+ };
524
+ },
525
+ };
@@ -85,7 +85,8 @@ export declare namespace Strategies {
85
85
  LIQUITY_DSR_SUPPLY = 70,
86
86
  LIQUITY_DEBT_IN_FRONT_REPAY = 75,
87
87
  CURVEUSD_PAYBACK = 92,
88
- LIQUITY_V2_PAYBACK = 113
88
+ LIQUITY_V2_PAYBACK = 113,
89
+ LIQUITY_V2_INTEREST_RATE_ADJUSTMENT = 124
89
90
  }
90
91
  enum OptimismIds {
91
92
  EXCHANGE_DCA = 8,
@@ -128,7 +129,8 @@ export declare namespace Strategies {
128
129
  BoostOnPrice = "boost-on-price",
129
130
  RepayOnPrice = "repay-on-price",
130
131
  EoaBoostOnPrice = "eoa-boost-on-price",
131
- EoaRepayOnPrice = "eoa-repay-on-price"
132
+ EoaRepayOnPrice = "eoa-repay-on-price",
133
+ InterestRateAdjustment = "interest-rate-adjustment"
132
134
  }
133
135
  enum IdOverrides {
134
136
  TakeProfit = "take-profit",
@@ -102,6 +102,7 @@ var Strategies;
102
102
  MainnetIds[MainnetIds["LIQUITY_DEBT_IN_FRONT_REPAY"] = 75] = "LIQUITY_DEBT_IN_FRONT_REPAY";
103
103
  MainnetIds[MainnetIds["CURVEUSD_PAYBACK"] = 92] = "CURVEUSD_PAYBACK";
104
104
  MainnetIds[MainnetIds["LIQUITY_V2_PAYBACK"] = 113] = "LIQUITY_V2_PAYBACK";
105
+ MainnetIds[MainnetIds["LIQUITY_V2_INTEREST_RATE_ADJUSTMENT"] = 124] = "LIQUITY_V2_INTEREST_RATE_ADJUSTMENT";
105
106
  })(MainnetIds = Strategies.MainnetIds || (Strategies.MainnetIds = {}));
106
107
  let OptimismIds;
107
108
  (function (OptimismIds) {
@@ -149,6 +150,7 @@ var Strategies;
149
150
  Identifiers["RepayOnPrice"] = "repay-on-price";
150
151
  Identifiers["EoaBoostOnPrice"] = "eoa-boost-on-price";
151
152
  Identifiers["EoaRepayOnPrice"] = "eoa-repay-on-price";
153
+ Identifiers["InterestRateAdjustment"] = "interest-rate-adjustment";
152
154
  })(Identifiers = Strategies.Identifiers || (Strategies.Identifiers = {}));
153
155
  let IdOverrides;
154
156
  (function (IdOverrides) {
@@ -158,6 +158,13 @@ export declare namespace Position {
158
158
  targetRatio: number;
159
159
  triggerRatio: number;
160
160
  }
161
+ interface InterestRateAdjustmentLiquityV2 extends Base {
162
+ market: EthereumAddress;
163
+ troveId: string;
164
+ criticalDebtInFrontLimit: string;
165
+ nonCriticalDebtInFrontLimit: string;
166
+ interestRateChange: string;
167
+ }
161
168
  interface TrailingStop extends Base {
162
169
  roundId: number;
163
170
  triggerPercentage: number;
@@ -188,7 +195,7 @@ export declare namespace Position {
188
195
  takeProfitType: CloseToAssetType | undefined;
189
196
  }
190
197
  }
191
- type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho | Specific.BoostOnPriceLiquityV2 | Specific.PaybackLiquityV2 | Specific.CompoundV3LeverageManagementOnPrice | Specific.CompoundV3CloseOnPrice;
198
+ type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho | Specific.BoostOnPriceLiquityV2 | Specific.PaybackLiquityV2 | Specific.InterestRateAdjustmentLiquityV2 | Specific.CompoundV3LeverageManagementOnPrice | Specific.CompoundV3CloseOnPrice;
192
199
  interface Automated {
193
200
  chainId: ChainId;
194
201
  positionId: string;
@@ -95,6 +95,11 @@ export const MAINNET_STRATEGIES_INFO = {
95
95
  strategyId: Strategies.Identifiers.Payback,
96
96
  protocol: PROTOCOLS.LiquityV2,
97
97
  },
98
+ [Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT]: {
99
+ strategyOrBundleId: Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT,
100
+ strategyId: Strategies.Identifiers.InterestRateAdjustment,
101
+ protocol: PROTOCOLS.LiquityV2,
102
+ },
98
103
  };
99
104
  export const OPTIMISM_STRATEGIES_INFO = {
100
105
  [Strategies.OptimismIds.EXCHANGE_DCA]: {
@@ -351,8 +351,6 @@ function parseCompoundV3LeverageManagementOnPrice(position, parseData) {
351
351
  price: triggerData.price,
352
352
  priceState: triggerData.priceState,
353
353
  };
354
- const isEOA = _position.strategy.strategyId.includes('eoa');
355
- _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagementOnPrice : Strategies.IdOverrides.LeverageManagementOnPrice;
356
354
  return _position;
357
355
  }
358
356
  function parseCompoundV3CloseOnPrice(position, parseData) {
@@ -785,6 +783,23 @@ function parseFluidT1LeverageManagement(position, parseData) {
785
783
  _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
786
784
  return _position;
787
785
  }
786
+ function parseLiquityV2InterestRateAdjustment(position, parseData) {
787
+ const _position = cloneDeep(position);
788
+ const { subStruct } = parseData.subscriptionEventData;
789
+ const triggerData = triggerService.liquityV2InterestRateAdjustmentTrigger.decode(subStruct.triggerData);
790
+ const subData = subDataService.liquityV2InterestRateAdjustmentSubData.decode(subStruct.subData);
791
+ _position.strategyData.decoded.triggerData = triggerData;
792
+ _position.strategyData.decoded.subData = subData;
793
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
794
+ _position.specific = {
795
+ market: subData.market,
796
+ troveId: subData.troveId,
797
+ criticalDebtInFrontLimit: triggerData.criticalDebtInFrontLimit,
798
+ nonCriticalDebtInFrontLimit: triggerData.nonCriticalDebtInFrontLimit,
799
+ interestRateChange: subData.interestRateChange,
800
+ };
801
+ return _position;
802
+ }
788
803
  const parsingMethodsMapping = {
789
804
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
790
805
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -812,6 +827,7 @@ const parsingMethodsMapping = {
812
827
  [Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
813
828
  [Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
814
829
  [Strategies.Identifiers.Payback]: parseLiquityV2Payback,
830
+ [Strategies.Identifiers.InterestRateAdjustment]: parseLiquityV2InterestRateAdjustment,
815
831
  },
816
832
  [ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
817
833
  [Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
@@ -107,6 +107,7 @@ export declare const liquityV2Encode: {
107
107
  closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
108
108
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, price: number, state: RatioState, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): (number | boolean | string[])[];
109
109
  payback(market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState, triggerRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
110
+ interestRateAdjustment(market: EthereumAddress, troveId: string, criticalDebtInFrontLimit: string, nonCriticalDebtInFrontLimit: string, interestRateChange: string): (boolean | string[] | Strategies.MainnetIds)[];
110
111
  };
111
112
  export declare const fluidEncode: {
112
113
  leverageManagement(nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
@@ -288,6 +288,13 @@ export const liquityV2Encode = {
288
288
  const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
289
289
  return [strategyId, isBundle, triggerData, subData];
290
290
  },
291
+ interestRateAdjustment(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit, interestRateChange) {
292
+ const strategyId = Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT;
293
+ const isBundle = false;
294
+ const subData = subDataService.liquityV2InterestRateAdjustmentSubData.encode(market, troveId, interestRateChange);
295
+ const triggerData = triggerService.liquityV2InterestRateAdjustmentTrigger.encode(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit);
296
+ return [strategyId, isBundle, triggerData, subData];
297
+ },
291
298
  };
292
299
  export const fluidEncode = {
293
300
  leverageManagement(nftId, vault, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
@@ -280,3 +280,11 @@ export declare const compoundV3CloseSubData: {
280
280
  owner: EthereumAddress;
281
281
  };
282
282
  };
283
+ export declare const liquityV2InterestRateAdjustmentSubData: {
284
+ encode: (market: EthereumAddress, troveId: string, interestRateChange: string) => string[];
285
+ decode: (subData: string[]) => {
286
+ market: string;
287
+ troveId: string;
288
+ interestRateChange: string;
289
+ };
290
+ };
@@ -732,3 +732,27 @@ export const compoundV3CloseSubData = {
732
732
  };
733
733
  },
734
734
  };
735
+ export const liquityV2InterestRateAdjustmentSubData = {
736
+ encode: (market, troveId, interestRateChange) => {
737
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
738
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
739
+ const interestRateChangeWei = new Dec(interestRateChange).mul(1e16).toString();
740
+ const interestRateChangeEncoded = AbiCoder.encodeParameter('uint256', interestRateChangeWei.toString());
741
+ return [
742
+ marketEncoded,
743
+ troveIdEncoded,
744
+ interestRateChangeEncoded,
745
+ ];
746
+ },
747
+ decode: (subData) => {
748
+ const market = AbiCoder.decodeParameter('address', subData[0]);
749
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
750
+ const interestRateChangeWei = AbiCoder.decodeParameter('uint256', subData[2]);
751
+ const interestRateChange = new Dec(interestRateChangeWei).div(Math.pow(10, 16)).toString();
752
+ return {
753
+ market,
754
+ troveId,
755
+ interestRateChange,
756
+ };
757
+ },
758
+ };
@@ -266,3 +266,12 @@ export declare const compoundV3PriceRangeTrigger: {
266
266
  upperPrice: string;
267
267
  };
268
268
  };
269
+ export declare const liquityV2InterestRateAdjustmentTrigger: {
270
+ encode(market: EthereumAddress, troveId: string, criticalDebtInFrontLimit: string, nonCriticalDebtInFrontLimit: string): string[];
271
+ decode(triggerData: string[]): {
272
+ market: EthereumAddress;
273
+ troveId: string;
274
+ criticalDebtInFrontLimit: string;
275
+ nonCriticalDebtInFrontLimit: string;
276
+ };
277
+ };
@@ -478,3 +478,19 @@ export const compoundV3PriceRangeTrigger = {
478
478
  };
479
479
  },
480
480
  };
481
+ export const liquityV2InterestRateAdjustmentTrigger = {
482
+ encode(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit) {
483
+ const criticalDebtInFrontLimitWei = web3Utils.toWei(new Dec(criticalDebtInFrontLimit).toString(), 'ether');
484
+ const nonCriticalDebtInFrontLimitWei = web3Utils.toWei(new Dec(nonCriticalDebtInFrontLimit).toString(), 'ether');
485
+ return [AbiCoder.encodeParameters(['address', 'uint256', 'uint256', 'uint256'], [market, troveId, criticalDebtInFrontLimitWei, nonCriticalDebtInFrontLimitWei])];
486
+ },
487
+ decode(triggerData) {
488
+ const decodedData = AbiCoder.decodeParameters(['address', 'uint256', 'uint256', 'uint256'], triggerData[0]);
489
+ return {
490
+ market: decodedData[0],
491
+ troveId: decodedData[1],
492
+ criticalDebtInFrontLimit: new Dec(decodedData[2]).div(Math.pow(10, 18)).toString(),
493
+ nonCriticalDebtInFrontLimit: new Dec(decodedData[3]).div(Math.pow(10, 18)).toString(),
494
+ };
495
+ },
496
+ };
@@ -85,7 +85,8 @@ export declare namespace Strategies {
85
85
  LIQUITY_DSR_SUPPLY = 70,
86
86
  LIQUITY_DEBT_IN_FRONT_REPAY = 75,
87
87
  CURVEUSD_PAYBACK = 92,
88
- LIQUITY_V2_PAYBACK = 113
88
+ LIQUITY_V2_PAYBACK = 113,
89
+ LIQUITY_V2_INTEREST_RATE_ADJUSTMENT = 124
89
90
  }
90
91
  enum OptimismIds {
91
92
  EXCHANGE_DCA = 8,
@@ -128,7 +129,8 @@ export declare namespace Strategies {
128
129
  BoostOnPrice = "boost-on-price",
129
130
  RepayOnPrice = "repay-on-price",
130
131
  EoaBoostOnPrice = "eoa-boost-on-price",
131
- EoaRepayOnPrice = "eoa-repay-on-price"
132
+ EoaRepayOnPrice = "eoa-repay-on-price",
133
+ InterestRateAdjustment = "interest-rate-adjustment"
132
134
  }
133
135
  enum IdOverrides {
134
136
  TakeProfit = "take-profit",
@@ -99,6 +99,7 @@ export var Strategies;
99
99
  MainnetIds[MainnetIds["LIQUITY_DEBT_IN_FRONT_REPAY"] = 75] = "LIQUITY_DEBT_IN_FRONT_REPAY";
100
100
  MainnetIds[MainnetIds["CURVEUSD_PAYBACK"] = 92] = "CURVEUSD_PAYBACK";
101
101
  MainnetIds[MainnetIds["LIQUITY_V2_PAYBACK"] = 113] = "LIQUITY_V2_PAYBACK";
102
+ MainnetIds[MainnetIds["LIQUITY_V2_INTEREST_RATE_ADJUSTMENT"] = 124] = "LIQUITY_V2_INTEREST_RATE_ADJUSTMENT";
102
103
  })(MainnetIds = Strategies.MainnetIds || (Strategies.MainnetIds = {}));
103
104
  let OptimismIds;
104
105
  (function (OptimismIds) {
@@ -146,6 +147,7 @@ export var Strategies;
146
147
  Identifiers["RepayOnPrice"] = "repay-on-price";
147
148
  Identifiers["EoaBoostOnPrice"] = "eoa-boost-on-price";
148
149
  Identifiers["EoaRepayOnPrice"] = "eoa-repay-on-price";
150
+ Identifiers["InterestRateAdjustment"] = "interest-rate-adjustment";
149
151
  })(Identifiers = Strategies.Identifiers || (Strategies.Identifiers = {}));
150
152
  let IdOverrides;
151
153
  (function (IdOverrides) {
@@ -158,6 +158,13 @@ export declare namespace Position {
158
158
  targetRatio: number;
159
159
  triggerRatio: number;
160
160
  }
161
+ interface InterestRateAdjustmentLiquityV2 extends Base {
162
+ market: EthereumAddress;
163
+ troveId: string;
164
+ criticalDebtInFrontLimit: string;
165
+ nonCriticalDebtInFrontLimit: string;
166
+ interestRateChange: string;
167
+ }
161
168
  interface TrailingStop extends Base {
162
169
  roundId: number;
163
170
  triggerPercentage: number;
@@ -188,7 +195,7 @@ export declare namespace Position {
188
195
  takeProfitType: CloseToAssetType | undefined;
189
196
  }
190
197
  }
191
- type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho | Specific.BoostOnPriceLiquityV2 | Specific.PaybackLiquityV2 | Specific.CompoundV3LeverageManagementOnPrice | Specific.CompoundV3CloseOnPrice;
198
+ type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho | Specific.BoostOnPriceLiquityV2 | Specific.PaybackLiquityV2 | Specific.InterestRateAdjustmentLiquityV2 | Specific.CompoundV3LeverageManagementOnPrice | Specific.CompoundV3CloseOnPrice;
192
199
  interface Automated {
193
200
  chainId: ChainId;
194
201
  positionId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/automation-sdk",
3
- "version": "3.3.0",
3
+ "version": "3.3.2-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -23,7 +23,7 @@
23
23
  "repository": "https://github.com/defisaver/automation-sdk",
24
24
  "license": "ISC",
25
25
  "dependencies": {
26
- "@defisaver/sdk": "^1.3.0",
26
+ "@defisaver/sdk": "^1.3.2",
27
27
  "@defisaver/tokens": "^1.6.19",
28
28
  "@ethersproject/address": "^5.0.10",
29
29
  "@ethersproject/solidity": "^5.0.9",
@@ -118,6 +118,11 @@ export const MAINNET_STRATEGIES_INFO: MainnetStrategiesInfo = {
118
118
  strategyId: Strategies.Identifiers.Payback,
119
119
  protocol: PROTOCOLS.LiquityV2,
120
120
  },
121
+ [Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT]: {
122
+ strategyOrBundleId: Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT,
123
+ strategyId: Strategies.Identifiers.InterestRateAdjustment,
124
+ protocol: PROTOCOLS.LiquityV2,
125
+ },
121
126
  };
122
127
 
123
128
  export const OPTIMISM_STRATEGIES_INFO: OptimismStrategiesInfo = {
@@ -487,9 +487,6 @@ function parseCompoundV3LeverageManagementOnPrice(position: Position.Automated,
487
487
  priceState: triggerData.priceState,
488
488
  };
489
489
 
490
- const isEOA = _position.strategy.strategyId.includes('eoa');
491
- _position.strategy.strategyId = isEOA ? Strategies.IdOverrides.EoaLeverageManagementOnPrice : Strategies.IdOverrides.LeverageManagementOnPrice;
492
-
493
490
  return _position;
494
491
  }
495
492
 
@@ -1071,6 +1068,32 @@ function parseFluidT1LeverageManagement(position: Position.Automated, parseData:
1071
1068
  return _position;
1072
1069
  }
1073
1070
 
1071
+ function parseLiquityV2InterestRateAdjustment(position: Position.Automated, parseData: ParseData): Position.Automated {
1072
+ const _position = cloneDeep(position);
1073
+
1074
+ const { subStruct } = parseData.subscriptionEventData;
1075
+
1076
+ const triggerData = triggerService.liquityV2InterestRateAdjustmentTrigger.decode(subStruct.triggerData);
1077
+ const subData = subDataService.liquityV2InterestRateAdjustmentSubData.decode(subStruct.subData);
1078
+
1079
+ _position.strategyData.decoded.triggerData = triggerData;
1080
+ _position.strategyData.decoded.subData = subData;
1081
+
1082
+ _position.positionId = getPositionId(
1083
+ _position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market,
1084
+ );
1085
+
1086
+ _position.specific = {
1087
+ market: subData.market,
1088
+ troveId: subData.troveId,
1089
+ criticalDebtInFrontLimit: triggerData.criticalDebtInFrontLimit,
1090
+ nonCriticalDebtInFrontLimit: triggerData.nonCriticalDebtInFrontLimit,
1091
+ interestRateChange: subData.interestRateChange,
1092
+ };
1093
+
1094
+ return _position;
1095
+ }
1096
+
1074
1097
  const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1075
1098
  [ProtocolIdentifiers.StrategiesAutomation.MakerDAO]: {
1076
1099
  [Strategies.Identifiers.SavingsLiqProtection]: parseMakerSavingsLiqProtection,
@@ -1098,6 +1121,7 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1098
1121
  [Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
1099
1122
  [Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
1100
1123
  [Strategies.Identifiers.Payback]: parseLiquityV2Payback,
1124
+ [Strategies.Identifiers.InterestRateAdjustment]: parseLiquityV2InterestRateAdjustment,
1101
1125
  },
1102
1126
  [ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
1103
1127
  [Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
@@ -663,6 +663,25 @@ export const liquityV2Encode = {
663
663
  const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
664
664
  const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
665
665
 
666
+ return [strategyId, isBundle, triggerData, subData];
667
+ },
668
+ interestRateAdjustment(
669
+ market: EthereumAddress,
670
+ troveId: string,
671
+ criticalDebtInFrontLimit: string,
672
+ nonCriticalDebtInFrontLimit: string,
673
+ interestRateChange: string,
674
+ ) {
675
+ const strategyId = Strategies.MainnetIds.LIQUITY_V2_INTEREST_RATE_ADJUSTMENT;
676
+ const isBundle = false;
677
+
678
+ const subData = subDataService.liquityV2InterestRateAdjustmentSubData.encode(
679
+ market,
680
+ troveId,
681
+ interestRateChange,
682
+ );
683
+ const triggerData = triggerService.liquityV2InterestRateAdjustmentTrigger.encode(market, troveId, criticalDebtInFrontLimit, nonCriticalDebtInFrontLimit);
684
+
666
685
  return [strategyId, isBundle, triggerData, subData];
667
686
  },
668
687
  };
@@ -1022,3 +1022,34 @@ export const compoundV3CloseSubData = {
1022
1022
  };
1023
1023
  },
1024
1024
  };
1025
+
1026
+ export const liquityV2InterestRateAdjustmentSubData = {
1027
+ encode: (
1028
+ market: EthereumAddress,
1029
+ troveId: string,
1030
+ interestRateChange: string,
1031
+ ) => {
1032
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
1033
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
1034
+ const interestRateChangeWei = new Dec(interestRateChange).mul(1e16).toString();
1035
+ const interestRateChangeEncoded = AbiCoder.encodeParameter('uint256', interestRateChangeWei.toString());
1036
+
1037
+ return [
1038
+ marketEncoded,
1039
+ troveIdEncoded,
1040
+ interestRateChangeEncoded,
1041
+ ];
1042
+ },
1043
+ decode: (subData: SubData) => {
1044
+ const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
1045
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
1046
+ const interestRateChangeWei = AbiCoder.decodeParameter('uint256', subData[2]) as any as string;
1047
+ const interestRateChange = new Dec(interestRateChangeWei).div(10 ** 16).toString();
1048
+
1049
+ return {
1050
+ market,
1051
+ troveId,
1052
+ interestRateChange,
1053
+ };
1054
+ },
1055
+ };
@@ -656,4 +656,26 @@ export const compoundV3PriceRangeTrigger = {
656
656
  upperPrice: new Dec(decodedData[3] as string).div(1e8).toString(),
657
657
  };
658
658
  },
659
+ };
660
+
661
+ export const liquityV2InterestRateAdjustmentTrigger = {
662
+ encode(
663
+ market: EthereumAddress,
664
+ troveId: string,
665
+ criticalDebtInFrontLimit: string,
666
+ nonCriticalDebtInFrontLimit: string,
667
+ ) {
668
+ const criticalDebtInFrontLimitWei = web3Utils.toWei(new Dec(criticalDebtInFrontLimit).toString(), 'ether');
669
+ const nonCriticalDebtInFrontLimitWei = web3Utils.toWei(new Dec(nonCriticalDebtInFrontLimit).toString(), 'ether');
670
+ return [AbiCoder.encodeParameters(['address', 'uint256', 'uint256', 'uint256'], [market, troveId, criticalDebtInFrontLimitWei, nonCriticalDebtInFrontLimitWei])];
671
+ },
672
+ decode(triggerData: TriggerData): { market: EthereumAddress, troveId: string, criticalDebtInFrontLimit: string, nonCriticalDebtInFrontLimit: string } {
673
+ const decodedData = AbiCoder.decodeParameters(['address', 'uint256', 'uint256', 'uint256'], triggerData[0]);
674
+ return {
675
+ market: decodedData[0] as EthereumAddress,
676
+ troveId: decodedData[1] as string,
677
+ criticalDebtInFrontLimit: new Dec(decodedData[2] as string).div(10 ** 18).toString(),
678
+ nonCriticalDebtInFrontLimit: new Dec(decodedData[3] as string).div(10 ** 18).toString(),
679
+ };
680
+ },
659
681
  };