@defisaver/automation-sdk 3.1.7 → 3.1.8-dev-1

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.
@@ -96,6 +96,11 @@ exports.MAINNET_STRATEGIES_INFO = {
96
96
  strategyId: enums_1.Strategies.Identifiers.Payback,
97
97
  protocol: exports.PROTOCOLS.CrvUSD,
98
98
  },
99
+ [enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK]: {
100
+ strategyOrBundleId: enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK,
101
+ strategyId: enums_1.Strategies.Identifiers.Payback,
102
+ protocol: exports.PROTOCOLS.LiquityV2,
103
+ },
99
104
  };
100
105
  exports.OPTIMISM_STRATEGIES_INFO = {
101
106
  [enums_1.Strategies.OptimismIds.EXCHANGE_DCA]: {
@@ -709,16 +709,27 @@ function parseLiquityV2LeverageManagementOnPrice(position, parseData) {
709
709
  _position.strategyData.decoded.triggerData = triggerData;
710
710
  _position.strategyData.decoded.subData = subData;
711
711
  _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
712
- /// @TODO: what does even go here
713
- /*
714
712
  _position.specific = {
715
- market: subData.market,
716
- troveId: subData.troveId,
717
- ratio: subData.targetRatio,
718
- price: triggerData.price,
719
- ratioState: triggerData.ratioState,
713
+ subHash: _position.subHash,
714
+ market: subData.market,
715
+ troveId: subData.troveId,
716
+ collAsset: subData.collToken,
717
+ debtAsset: subData.boldToken,
718
+ price: triggerData.price,
719
+ ratio: subData.targetRatio,
720
+ ratioState: triggerData.ratioState,
720
721
  };
721
- */
722
+ return _position;
723
+ }
724
+ function parseLiquityV2Payback(position, parseData) {
725
+ const _position = (0, lodash_1.cloneDeep)(position);
726
+ const { subStruct } = parseData.subscriptionEventData;
727
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
728
+ const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
729
+ _position.strategyData.decoded.triggerData = triggerData;
730
+ _position.strategyData.decoded.subData = subData;
731
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
732
+ _position.strategy.strategyId = enums_1.Strategies.Identifiers.Payback;
722
733
  return _position;
723
734
  }
724
735
  const parsingMethodsMapping = {
@@ -745,8 +756,9 @@ const parsingMethodsMapping = {
745
756
  [enums_1.Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
746
757
  [enums_1.Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
747
758
  [enums_1.Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
748
- [enums_1.Strategies.Identifiers.OpenOrderFromCollateral]: parseLiquityV2LeverageManagementOnPrice,
759
+ [enums_1.Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
749
760
  [enums_1.Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
761
+ [enums_1.Strategies.Identifiers.Payback]: parseLiquityV2Payback,
750
762
  },
751
763
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
752
764
  [enums_1.Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
@@ -103,4 +103,5 @@ export declare const liquityV2Encode: {
103
103
  leverageManagement(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
104
104
  closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
105
105
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, price: number, state: RatioState, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): (number | boolean | string[])[];
106
+ payback(market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState, triggerRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
106
107
  };
@@ -290,4 +290,11 @@ exports.liquityV2Encode = {
290
290
  const isBundle = true;
291
291
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
292
292
  },
293
+ payback(market, troveId, boldToken, targetRatio, ratioState, triggerRatio) {
294
+ const strategyId = enums_1.Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
295
+ const isBundle = false;
296
+ const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
297
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
298
+ return [strategyId, isBundle, triggerData, subData];
299
+ },
293
300
  };
@@ -233,3 +233,13 @@ export declare const morphoBlueLeverageManagementOnPriceSubData: {
233
233
  user: string;
234
234
  };
235
235
  };
236
+ export declare const liquityV2PaybackSubData: {
237
+ encode: (market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState) => string[];
238
+ decode: (subData: string[]) => {
239
+ market: string;
240
+ troveId: string;
241
+ boldToken: string;
242
+ ratioState: RatioState;
243
+ targetRatio: number;
244
+ };
245
+ };
@@ -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.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.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
6
+ 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.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");
@@ -607,3 +607,30 @@ exports.morphoBlueLeverageManagementOnPriceSubData = {
607
607
  };
608
608
  },
609
609
  };
610
+ exports.liquityV2PaybackSubData = {
611
+ encode: (market, troveId, boldToken, targetRatio, ratioState) => {
612
+ const marketEncoded = web3_eth_abi_1.default.encodeParameter('address', market);
613
+ const troveIdEncoded = web3_eth_abi_1.default.encodeParameter('uint256', troveId);
614
+ const boldTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', boldToken);
615
+ const targetRatioEncoded = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
616
+ const ratioStateEncoded = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
617
+ return [
618
+ marketEncoded,
619
+ troveIdEncoded,
620
+ boldTokenEncoded,
621
+ targetRatioEncoded,
622
+ ratioStateEncoded,
623
+ ];
624
+ },
625
+ decode: (subData) => {
626
+ const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
627
+ const troveId = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
628
+ const boldToken = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
629
+ const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[3]);
630
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[4]);
631
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(weiRatio);
632
+ return {
633
+ market, troveId, boldToken, ratioState, targetRatio,
634
+ };
635
+ },
636
+ };
@@ -83,7 +83,8 @@ export declare namespace Strategies {
83
83
  LIQUITY_DSR_PAYBACK = 69,
84
84
  LIQUITY_DSR_SUPPLY = 70,
85
85
  LIQUITY_DEBT_IN_FRONT_REPAY = 75,
86
- CURVEUSD_PAYBACK = 92
86
+ CURVEUSD_PAYBACK = 92,
87
+ LIQUITY_V2_PAYBACK = 113
87
88
  }
88
89
  enum OptimismIds {
89
90
  EXCHANGE_DCA = 8,
@@ -100,6 +100,7 @@ var Strategies;
100
100
  MainnetIds[MainnetIds["LIQUITY_DSR_SUPPLY"] = 70] = "LIQUITY_DSR_SUPPLY";
101
101
  MainnetIds[MainnetIds["LIQUITY_DEBT_IN_FRONT_REPAY"] = 75] = "LIQUITY_DEBT_IN_FRONT_REPAY";
102
102
  MainnetIds[MainnetIds["CURVEUSD_PAYBACK"] = 92] = "CURVEUSD_PAYBACK";
103
+ MainnetIds[MainnetIds["LIQUITY_V2_PAYBACK"] = 113] = "LIQUITY_V2_PAYBACK";
103
104
  })(MainnetIds = Strategies.MainnetIds || (Strategies.MainnetIds = {}));
104
105
  let OptimismIds;
105
106
  (function (OptimismIds) {
@@ -147,6 +147,11 @@ export declare namespace Position {
147
147
  stopLossType: CloseToAssetType | undefined;
148
148
  takeProfitType: CloseToAssetType | undefined;
149
149
  }
150
+ interface BoostOnPriceLiquityV2 extends Base {
151
+ market: EthereumAddress;
152
+ troveId: string;
153
+ subHash: string;
154
+ }
150
155
  interface TrailingStop extends Base {
151
156
  roundId: number;
152
157
  triggerPercentage: number;
@@ -161,7 +166,7 @@ export declare namespace Position {
161
166
  subHashRepay?: string;
162
167
  }
163
168
  }
164
- type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho;
169
+ type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho | Specific.BoostOnPriceLiquityV2;
165
170
  interface Automated {
166
171
  chainId: ChainId;
167
172
  positionId: string;
@@ -90,6 +90,11 @@ export const MAINNET_STRATEGIES_INFO = {
90
90
  strategyId: Strategies.Identifiers.Payback,
91
91
  protocol: PROTOCOLS.CrvUSD,
92
92
  },
93
+ [Strategies.MainnetIds.LIQUITY_V2_PAYBACK]: {
94
+ strategyOrBundleId: Strategies.MainnetIds.LIQUITY_V2_PAYBACK,
95
+ strategyId: Strategies.Identifiers.Payback,
96
+ protocol: PROTOCOLS.LiquityV2,
97
+ },
93
98
  };
94
99
  export const OPTIMISM_STRATEGIES_INFO = {
95
100
  [Strategies.OptimismIds.EXCHANGE_DCA]: {
@@ -680,16 +680,27 @@ function parseLiquityV2LeverageManagementOnPrice(position, parseData) {
680
680
  _position.strategyData.decoded.triggerData = triggerData;
681
681
  _position.strategyData.decoded.subData = subData;
682
682
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
683
- /// @TODO: what does even go here
684
- /*
685
683
  _position.specific = {
686
- market: subData.market,
687
- troveId: subData.troveId,
688
- ratio: subData.targetRatio,
689
- price: triggerData.price,
690
- ratioState: triggerData.ratioState,
684
+ subHash: _position.subHash,
685
+ market: subData.market,
686
+ troveId: subData.troveId,
687
+ collAsset: subData.collToken,
688
+ debtAsset: subData.boldToken,
689
+ price: triggerData.price,
690
+ ratio: subData.targetRatio,
691
+ ratioState: triggerData.ratioState,
691
692
  };
692
- */
693
+ return _position;
694
+ }
695
+ function parseLiquityV2Payback(position, parseData) {
696
+ const _position = cloneDeep(position);
697
+ const { subStruct } = parseData.subscriptionEventData;
698
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
699
+ const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
700
+ _position.strategyData.decoded.triggerData = triggerData;
701
+ _position.strategyData.decoded.subData = subData;
702
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
703
+ _position.strategy.strategyId = Strategies.Identifiers.Payback;
693
704
  return _position;
694
705
  }
695
706
  const parsingMethodsMapping = {
@@ -716,8 +727,9 @@ const parsingMethodsMapping = {
716
727
  [Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
717
728
  [Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
718
729
  [Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
719
- [Strategies.Identifiers.OpenOrderFromCollateral]: parseLiquityV2LeverageManagementOnPrice,
730
+ [Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
720
731
  [Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
732
+ [Strategies.Identifiers.Payback]: parseLiquityV2Payback,
721
733
  },
722
734
  [ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
723
735
  [Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
@@ -103,4 +103,5 @@ export declare const liquityV2Encode: {
103
103
  leverageManagement(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
104
104
  closeOnPrice(strategyOrBundleId: number, market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
105
105
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, price: number, state: RatioState, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, targetRatio: number, isRepayOnPrice: boolean): (number | boolean | string[])[];
106
+ payback(market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState, triggerRatio: number): (boolean | string[] | Strategies.MainnetIds)[];
106
107
  };
@@ -261,4 +261,11 @@ export const liquityV2Encode = {
261
261
  const isBundle = true;
262
262
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
263
263
  },
264
+ payback(market, troveId, boldToken, targetRatio, ratioState, triggerRatio) {
265
+ const strategyId = Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
266
+ const isBundle = false;
267
+ const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
268
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
269
+ return [strategyId, isBundle, triggerData, subData];
270
+ },
264
271
  };
@@ -233,3 +233,13 @@ export declare const morphoBlueLeverageManagementOnPriceSubData: {
233
233
  user: string;
234
234
  };
235
235
  };
236
+ export declare const liquityV2PaybackSubData: {
237
+ encode: (market: EthereumAddress, troveId: string, boldToken: EthereumAddress, targetRatio: number, ratioState: RatioState) => string[];
238
+ decode: (subData: string[]) => {
239
+ market: string;
240
+ troveId: string;
241
+ boldToken: string;
242
+ ratioState: RatioState;
243
+ targetRatio: number;
244
+ };
245
+ };
@@ -601,3 +601,30 @@ export const morphoBlueLeverageManagementOnPriceSubData = {
601
601
  };
602
602
  },
603
603
  };
604
+ export const liquityV2PaybackSubData = {
605
+ encode: (market, troveId, boldToken, targetRatio, ratioState) => {
606
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
607
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
608
+ const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
609
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
610
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
611
+ return [
612
+ marketEncoded,
613
+ troveIdEncoded,
614
+ boldTokenEncoded,
615
+ targetRatioEncoded,
616
+ ratioStateEncoded,
617
+ ];
618
+ },
619
+ decode: (subData) => {
620
+ const market = AbiCoder.decodeParameter('address', subData[0]);
621
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]);
622
+ const boldToken = AbiCoder.decodeParameter('address', subData[2]);
623
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
624
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[4]);
625
+ const targetRatio = weiToRatioPercentage(weiRatio);
626
+ return {
627
+ market, troveId, boldToken, ratioState, targetRatio,
628
+ };
629
+ },
630
+ };
@@ -83,7 +83,8 @@ export declare namespace Strategies {
83
83
  LIQUITY_DSR_PAYBACK = 69,
84
84
  LIQUITY_DSR_SUPPLY = 70,
85
85
  LIQUITY_DEBT_IN_FRONT_REPAY = 75,
86
- CURVEUSD_PAYBACK = 92
86
+ CURVEUSD_PAYBACK = 92,
87
+ LIQUITY_V2_PAYBACK = 113
87
88
  }
88
89
  enum OptimismIds {
89
90
  EXCHANGE_DCA = 8,
@@ -97,6 +97,7 @@ export var Strategies;
97
97
  MainnetIds[MainnetIds["LIQUITY_DSR_SUPPLY"] = 70] = "LIQUITY_DSR_SUPPLY";
98
98
  MainnetIds[MainnetIds["LIQUITY_DEBT_IN_FRONT_REPAY"] = 75] = "LIQUITY_DEBT_IN_FRONT_REPAY";
99
99
  MainnetIds[MainnetIds["CURVEUSD_PAYBACK"] = 92] = "CURVEUSD_PAYBACK";
100
+ MainnetIds[MainnetIds["LIQUITY_V2_PAYBACK"] = 113] = "LIQUITY_V2_PAYBACK";
100
101
  })(MainnetIds = Strategies.MainnetIds || (Strategies.MainnetIds = {}));
101
102
  let OptimismIds;
102
103
  (function (OptimismIds) {
@@ -147,6 +147,11 @@ export declare namespace Position {
147
147
  stopLossType: CloseToAssetType | undefined;
148
148
  takeProfitType: CloseToAssetType | undefined;
149
149
  }
150
+ interface BoostOnPriceLiquityV2 extends Base {
151
+ market: EthereumAddress;
152
+ troveId: string;
153
+ subHash: string;
154
+ }
150
155
  interface TrailingStop extends Base {
151
156
  roundId: number;
152
157
  triggerPercentage: number;
@@ -161,7 +166,7 @@ export declare namespace Position {
161
166
  subHashRepay?: string;
162
167
  }
163
168
  }
164
- type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho;
169
+ type SpecificAny = Specific.CloseOnPrice | Specific.TrailingStop | Specific.RatioProtection | Specific.CloseOnPriceAave | Specific.BoostOnPriceAave | Specific.CloseOnPriceWithMaximumGasPriceAave | Specific.DebtInFrontRepay | Specific.LeverageManagementCrvUSD | Specific.CloseOnPriceLiquityV2 | Specific.BoostOnPriceMorpho | Specific.BoostOnPriceLiquityV2;
165
170
  interface Automated {
166
171
  chainId: ChainId;
167
172
  positionId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/automation-sdk",
3
- "version": "3.1.7",
3
+ "version": "3.1.8-dev-1",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -113,6 +113,11 @@ export const MAINNET_STRATEGIES_INFO: MainnetStrategiesInfo = {
113
113
  strategyId: Strategies.Identifiers.Payback,
114
114
  protocol: PROTOCOLS.CrvUSD,
115
115
  },
116
+ [Strategies.MainnetIds.LIQUITY_V2_PAYBACK]: {
117
+ strategyOrBundleId: Strategies.MainnetIds.LIQUITY_V2_PAYBACK,
118
+ strategyId: Strategies.Identifiers.Payback,
119
+ protocol: PROTOCOLS.LiquityV2,
120
+ },
116
121
  };
117
122
 
118
123
  export const OPTIMISM_STRATEGIES_INFO: OptimismStrategiesInfo = {
@@ -935,16 +935,32 @@ function parseLiquityV2LeverageManagementOnPrice(position: Position.Automated, p
935
935
  _position.strategyData.decoded.triggerData = triggerData;
936
936
  _position.strategyData.decoded.subData = subData;
937
937
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, Math.random());
938
- /// @TODO: what does even go here
939
- /*
938
+
940
939
  _position.specific = {
940
+ subHash: _position.subHash,
941
941
  market: subData.market,
942
942
  troveId: subData.troveId,
943
- ratio: subData.targetRatio,
943
+ collAsset: subData.collToken,
944
+ debtAsset: subData.boldToken,
944
945
  price: triggerData.price,
946
+ ratio: subData.targetRatio,
945
947
  ratioState: triggerData.ratioState,
946
948
  };
947
- */
949
+
950
+ return _position;
951
+ }
952
+
953
+ function parseLiquityV2Payback(position: Position.Automated, parseData: ParseData): Position.Automated {
954
+ const _position = cloneDeep(position);
955
+
956
+ const { subStruct } = parseData.subscriptionEventData;
957
+ const triggerData = triggerService.liquityV2RatioTrigger.decode(subStruct.triggerData);
958
+ const subData = subDataService.liquityV2PaybackSubData.decode(subStruct.subData);
959
+
960
+ _position.strategyData.decoded.triggerData = triggerData;
961
+ _position.strategyData.decoded.subData = subData;
962
+ _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.troveId, triggerData.market);
963
+ _position.strategy.strategyId = Strategies.Identifiers.Payback;
948
964
 
949
965
  return _position;
950
966
  }
@@ -973,8 +989,9 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
973
989
  [Strategies.Identifiers.Repay]: parseLiquityV2LeverageManagement,
974
990
  [Strategies.Identifiers.Boost]: parseLiquityV2LeverageManagement,
975
991
  [Strategies.Identifiers.CloseOnPrice]: parseLiquityV2CloseOnPrice,
976
- [Strategies.Identifiers.OpenOrderFromCollateral]: parseLiquityV2LeverageManagementOnPrice,
992
+ [Strategies.Identifiers.BoostOnPrice]: parseLiquityV2LeverageManagementOnPrice,
977
993
  [Strategies.Identifiers.RepayOnPrice]: parseLiquityV2LeverageManagementOnPrice,
994
+ [Strategies.Identifiers.Payback]: parseLiquityV2Payback,
978
995
  },
979
996
  [ProtocolIdentifiers.StrategiesAutomation.AaveV2]: {
980
997
  [Strategies.Identifiers.Repay]: parseAaveV2LeverageManagement,
@@ -598,4 +598,20 @@ export const liquityV2Encode = {
598
598
  const isBundle = true;
599
599
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
600
600
  },
601
- };
601
+ payback(
602
+ market: EthereumAddress,
603
+ troveId: string,
604
+ boldToken: EthereumAddress,
605
+ targetRatio: number,
606
+ ratioState: RatioState,
607
+ triggerRatio: number,
608
+ ) {
609
+ const strategyId = Strategies.MainnetIds.LIQUITY_V2_PAYBACK;
610
+ const isBundle = false;
611
+
612
+ const subData = subDataService.liquityV2PaybackSubData.encode(market, troveId, boldToken, targetRatio, ratioState);
613
+ const triggerData = triggerService.liquityV2RatioTrigger.encode(market, troveId, triggerRatio, ratioState);
614
+
615
+ return [strategyId, isBundle, triggerData, subData];
616
+ },
617
+ };
@@ -833,3 +833,38 @@ export const morphoBlueLeverageManagementOnPriceSubData = {
833
833
  };
834
834
  },
835
835
  };
836
+ export const liquityV2PaybackSubData = {
837
+ encode: (
838
+ market: EthereumAddress,
839
+ troveId: string,
840
+ boldToken: EthereumAddress,
841
+ targetRatio: number,
842
+ ratioState: RatioState,
843
+ ) => {
844
+ const marketEncoded = AbiCoder.encodeParameter('address', market);
845
+ const troveIdEncoded = AbiCoder.encodeParameter('uint256', troveId);
846
+ const boldTokenEncoded = AbiCoder.encodeParameter('address', boldToken);
847
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
848
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
849
+
850
+ return [
851
+ marketEncoded,
852
+ troveIdEncoded,
853
+ boldTokenEncoded,
854
+ targetRatioEncoded,
855
+ ratioStateEncoded,
856
+ ];
857
+ },
858
+ decode: (subData: SubData) => {
859
+ const market = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
860
+ const troveId = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
861
+ const boldToken = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
862
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
863
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[4]) as any as RatioState;
864
+ const targetRatio = weiToRatioPercentage(weiRatio);
865
+
866
+ return {
867
+ market, troveId, boldToken, ratioState, targetRatio,
868
+ };
869
+ },
870
+ };
@@ -94,6 +94,7 @@ export namespace Strategies {
94
94
  LIQUITY_DSR_SUPPLY = 70,
95
95
  LIQUITY_DEBT_IN_FRONT_REPAY = 75,
96
96
  CURVEUSD_PAYBACK = 92,
97
+ LIQUITY_V2_PAYBACK = 113,
97
98
  }
98
99
 
99
100
  export enum OptimismIds {
@@ -177,6 +177,12 @@ export declare namespace Position {
177
177
  takeProfitType: CloseToAssetType | undefined,
178
178
  }
179
179
 
180
+ interface BoostOnPriceLiquityV2 extends Base {
181
+ market: EthereumAddress,
182
+ troveId: string,
183
+ subHash: string;
184
+ }
185
+
180
186
  interface TrailingStop extends Base {
181
187
  roundId: number,
182
188
  triggerPercentage: number,
@@ -204,7 +210,8 @@ export declare namespace Position {
204
210
  | Specific.DebtInFrontRepay
205
211
  | Specific.LeverageManagementCrvUSD
206
212
  | Specific.CloseOnPriceLiquityV2
207
- | Specific.BoostOnPriceMorpho;
213
+ | Specific.BoostOnPriceMorpho
214
+ | Specific.BoostOnPriceLiquityV2;
208
215
 
209
216
  export interface Automated {
210
217
  chainId: ChainId,