@defisaver/automation-sdk 3.3.12-strategies-refactor-2-dev → 3.3.12-strategies-refactor-4-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.
@@ -892,6 +892,7 @@ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
892
892
  debtAsset: subData.loanToken,
893
893
  price: triggerData.price,
894
894
  ratio: subData.targetRatio,
895
+ ratioState: triggerData.priceState,
895
896
  };
896
897
  return _position;
897
898
  }
@@ -78,9 +78,6 @@ export declare const compoundV3Encode: {
78
78
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, ratioState: RatioState, user: EthereumAddress): (number | boolean | string[])[];
79
79
  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[])[];
80
80
  };
81
- export declare const compoundV3L2Encode: {
82
- leverageManagement(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA?: boolean): string;
83
- };
84
81
  export declare const morphoAaveV2Encode: {
85
82
  leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string[];
86
83
  };
@@ -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.aaveV4Encode = exports.fluidEncode = exports.liquityV2Encode = exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3L2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
29
+ exports.aaveV4Encode = exports.fluidEncode = exports.liquityV2Encode = exports.morphoBlueEncode = exports.crvUSDEncode = exports.sparkEncode = exports.exchangeEncode = exports.morphoAaveV2Encode = exports.compoundV3Encode = exports.compoundV2Encode = exports.aaveV3Encode = exports.aaveV2Encode = exports.chickenBondsEncode = exports.liquityEncode = exports.makerEncode = void 0;
30
30
  const decimal_js_1 = __importDefault(require("decimal.js"));
31
31
  const tokens_1 = require("@defisaver/tokens");
32
32
  const enums_1 = require("../types/enums");
@@ -158,7 +158,7 @@ exports.aaveV2Encode = {
158
158
  },
159
159
  leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
160
160
  const isBundle = true;
161
- const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
161
+ const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
162
162
  const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
163
163
  return [strategyOrBundleId, isBundle, triggerData, subData];
164
164
  },
@@ -260,11 +260,6 @@ exports.compoundV3Encode = {
260
260
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
261
261
  },
262
262
  };
263
- exports.compoundV3L2Encode = {
264
- leverageManagement(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA = false) {
265
- return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
266
- },
267
- };
268
263
  exports.morphoAaveV2Encode = {
269
264
  leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
270
265
  return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
@@ -1450,37 +1450,6 @@ describe('Feature: strategySubService.ts', () => {
1450
1450
  });
1451
1451
  });
1452
1452
  });
1453
- describe('When testing strategySubService.compoundV3L2Encode', () => {
1454
- describe('leverageManagement()', () => {
1455
- const examples = [
1456
- [
1457
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1458
- [
1459
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1460
- web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1461
- 160, 220, 180, 190,
1462
- true,
1463
- false,
1464
- ],
1465
- ],
1466
- [
1467
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1468
- [
1469
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1470
- web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1471
- 160, 220, 180, 110,
1472
- false,
1473
- false,
1474
- ],
1475
- ],
1476
- ];
1477
- examples.forEach(([expected, actual]) => {
1478
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1479
- (0, chai_1.expect)(strategySubService_1.compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
1480
- });
1481
- });
1482
- });
1483
- });
1484
1453
  describe('When testing strategySubService.sparkEncode', () => {
1485
1454
  describe('leverageManagement()', () => {
1486
1455
  const examples = [
@@ -185,8 +185,9 @@ export declare const aaveV2LeverageManagementSubData: {
185
185
  };
186
186
  };
187
187
  export declare const aaveV2LeverageManagementSubDataWithoutSubProxy: {
188
- encode(targetRatio: number, ratioState: RatioState): string[];
188
+ encode(market: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
189
189
  decode(subData: string[]): {
190
+ market: EthereumAddress;
190
191
  targetRatio: number;
191
192
  ratioState: RatioState;
192
193
  };
@@ -364,12 +365,6 @@ export declare const compoundV3LeverageManagementSubDataWithoutSubProxy: {
364
365
  ratioState: RatioState;
365
366
  };
366
367
  };
367
- export declare const compoundV3L2LeverageManagementSubData: {
368
- encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string;
369
- decode(subData: string[]): {
370
- targetRatio: number;
371
- };
372
- };
373
368
  export declare const compoundV3LeverageManagementOnPriceSubData: {
374
369
  encode(market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState, user: EthereumAddress): string[];
375
370
  decode(subData: string[]): {
@@ -3,8 +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.morphoBlueCloseOnPriceSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.sparkLeverageManagementOnPriceSubData = exports.sparkCloseGenericSubData = exports.sparkLeverageManagementSubDataWithoutSubProxy = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubDataWithoutSubProxy = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubDataWithoutSubProxy = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubDataWithoutSubProxy = exports.compoundV2LeverageManagementSubData = exports.aaveV4CollateralSwitchSubData = exports.aaveV4CloseSubData = exports.aaveV4LeverageManagementOnPriceSubData = exports.aaveV4LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubDataWithoutSubProxy = exports.aaveV2LeverageManagementSubData = exports.liquityV2PaybackSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubDataWithoutSubProxy = exports.liquityLeverageManagementSubData = exports.liquityRepayFromSavingsSubData = exports.makerLeverageManagementWithoutSubProxy = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.makerRepayFromSavingsSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = void 0;
7
- exports.fluidLeverageManagementSubData = void 0;
6
+ exports.fluidLeverageManagementSubData = exports.morphoBlueCloseOnPriceSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.sparkLeverageManagementOnPriceSubData = exports.sparkCloseGenericSubData = exports.sparkLeverageManagementSubDataWithoutSubProxy = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubDataWithoutSubProxy = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.compoundV3LeverageManagementSubDataWithoutSubProxy = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubDataWithoutSubProxy = exports.compoundV2LeverageManagementSubData = exports.aaveV4CollateralSwitchSubData = exports.aaveV4CloseSubData = exports.aaveV4LeverageManagementOnPriceSubData = exports.aaveV4LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubDataWithoutSubProxy = exports.aaveV2LeverageManagementSubData = exports.liquityV2PaybackSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubDataWithoutSubProxy = exports.liquityLeverageManagementSubData = exports.liquityRepayFromSavingsSubData = exports.makerLeverageManagementWithoutSubProxy = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.makerRepayFromSavingsSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = void 0;
8
7
  const decimal_js_1 = __importDefault(require("decimal.js"));
9
8
  const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
10
9
  const web3_utils_1 = require("web3-utils");
@@ -170,13 +169,18 @@ exports.liquityLeverageManagementSubData = {
170
169
  };
171
170
  exports.liquityLeverageManagementSubDataWithoutSubProxy = {
172
171
  encode(targetRatio, ratioState) {
173
- const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
174
172
  const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
175
- return [encodedTargetRatio, encodedRatioState];
173
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
174
+ const isRepay = ratioState === enums_1.RatioState.UNDER;
175
+ const collActionType = isRepay ? enums_1.CollActionType.WITHDRAW : enums_1.CollActionType.SUPPLY;
176
+ const debtActionType = isRepay ? enums_1.DebtActionType.PAYBACK : enums_1.DebtActionType.BORROW;
177
+ const collActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', collActionType);
178
+ const debtActionTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', debtActionType);
179
+ return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
176
180
  },
177
181
  decode(subData) {
178
- const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[0]));
179
- const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[1]);
182
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[0]);
183
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[1]));
180
184
  return { targetRatio, ratioState };
181
185
  },
182
186
  };
@@ -412,15 +416,22 @@ exports.aaveV2LeverageManagementSubData = {
412
416
  },
413
417
  };
414
418
  exports.aaveV2LeverageManagementSubDataWithoutSubProxy = {
415
- encode(targetRatio, ratioState) {
419
+ encode(market, targetRatio, ratioState) {
420
+ const encodedMarket = web3_eth_abi_1.default.encodeParameter('address', market);
416
421
  const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
417
422
  const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
418
- return [encodedTargetRatio, encodedRatioState];
423
+ const isBoost = ratioState === enums_1.RatioState.OVER;
424
+ if (isBoost) {
425
+ const enableAsCollEncoded = web3_eth_abi_1.default.encodeParameter('uint256', 1);
426
+ return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
427
+ }
428
+ return [encodedMarket, encodedTargetRatio, encodedRatioState];
419
429
  },
420
430
  decode(subData) {
421
- const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[0]));
422
- const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[1]);
423
- return { targetRatio, ratioState };
431
+ const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
432
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[1]));
433
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[2]);
434
+ return { market, targetRatio, ratioState };
424
435
  },
425
436
  };
426
437
  /**
@@ -781,6 +792,11 @@ exports.compoundV2LeverageManagementSubDataWithoutSubProxy = {
781
792
  encode(targetRatio, ratioState) {
782
793
  const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
783
794
  const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
795
+ const isBoost = ratioState === enums_1.RatioState.OVER;
796
+ if (isBoost) {
797
+ const enableAsCollEncoded = web3_eth_abi_1.default.encodeParameter('uint256', 1);
798
+ return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
799
+ }
784
800
  return [encodedTargetRatio, encodedRatioState];
785
801
  },
786
802
  decode(subData) {
@@ -820,43 +836,20 @@ exports.compoundV3LeverageManagementSubDataWithoutSubProxy = {
820
836
  encode(market, baseToken, targetRatio, ratioState) {
821
837
  const encodedMarket = web3_eth_abi_1.default.encodeParameter('address', market);
822
838
  const encodedBaseToken = web3_eth_abi_1.default.encodeParameter('address', baseToken);
823
- const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
824
839
  const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
825
- return [encodedMarket, encodedBaseToken, encodedTargetRatio, encodedRatioState];
840
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
841
+ return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
826
842
  },
827
843
  decode(subData) {
828
844
  const market = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
829
845
  const baseToken = web3_eth_abi_1.default.decodeParameter('address', subData[1]);
830
- const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[2]));
831
- const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[3]);
846
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[2]);
847
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[3]));
832
848
  return {
833
849
  market, baseToken, targetRatio, ratioState,
834
850
  };
835
851
  },
836
852
  };
837
- exports.compoundV3L2LeverageManagementSubData = {
838
- encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
839
- let subInput = '0x';
840
- subInput = subInput.concat(market.slice(2));
841
- subInput = subInput.concat(baseToken.slice(2));
842
- subInput = subInput.concat(new decimal_js_1.default(triggerRepayRatio).mul(1e16).toHex().slice(2)
843
- .padStart(32, '0'));
844
- subInput = subInput.concat(new decimal_js_1.default(triggerBoostRatio).mul(1e16).toHex().slice(2)
845
- .padStart(32, '0'));
846
- subInput = subInput.concat(new decimal_js_1.default(targetBoostRatio).mul(1e16).toHex().slice(2)
847
- .padStart(32, '0'));
848
- subInput = subInput.concat(new decimal_js_1.default(targetRepayRatio).mul(1e16).toHex().slice(2)
849
- .padStart(32, '0'));
850
- subInput = subInput.concat(boostEnabled ? '01' : '00');
851
- subInput = subInput.concat(isEOA ? '01' : '00');
852
- return subInput;
853
- },
854
- decode(subData) {
855
- const ratioWei = web3_eth_abi_1.default.decodeParameter('uint256', subData[3]);
856
- const targetRatio = (0, utils_1.weiToRatioPercentage)(ratioWei);
857
- return { targetRatio };
858
- },
859
- };
860
853
  exports.compoundV3LeverageManagementOnPriceSubData = {
861
854
  encode(market, collToken, baseToken, targetRatio, ratioState, user) {
862
855
  const marketEncoded = web3_eth_abi_1.default.encodeParameter('address', market);
@@ -1216,48 +1216,6 @@ describe('Feature: subDataService.ts', () => {
1216
1216
  });
1217
1217
  });
1218
1218
  });
1219
- describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
1220
- describe('encode()', () => {
1221
- const examples = [
1222
- [
1223
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1224
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
1225
- ],
1226
- [
1227
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1228
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
1229
- ],
1230
- ];
1231
- examples.forEach(([expected, actual]) => {
1232
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1233
- (0, chai_1.expect)(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
1234
- });
1235
- });
1236
- });
1237
- describe('decode()', () => {
1238
- const examples = [
1239
- [
1240
- { targetRatio: 200 },
1241
- [
1242
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
1243
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1244
- ],
1245
- ],
1246
- [
1247
- { targetRatio: 123 },
1248
- [
1249
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
1250
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
1251
- ],
1252
- ],
1253
- ];
1254
- examples.forEach(([expected, actual]) => {
1255
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1256
- (0, chai_1.expect)(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
1257
- });
1258
- });
1259
- });
1260
- });
1261
1219
  describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
1262
1220
  describe('encode()', () => {
1263
1221
  const examples = [
@@ -863,6 +863,7 @@ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
863
863
  debtAsset: subData.loanToken,
864
864
  price: triggerData.price,
865
865
  ratio: subData.targetRatio,
866
+ ratioState: triggerData.priceState,
866
867
  };
867
868
  return _position;
868
869
  }
@@ -78,9 +78,6 @@ export declare const compoundV3Encode: {
78
78
  leverageManagementOnPrice(strategyOrBundleId: number, market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, price: number, priceState: RatioState, ratioState: RatioState, user: EthereumAddress): (number | boolean | string[])[];
79
79
  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[])[];
80
80
  };
81
- export declare const compoundV3L2Encode: {
82
- leverageManagement(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA?: boolean): string;
83
- };
84
81
  export declare const morphoAaveV2Encode: {
85
82
  leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string[];
86
83
  };
@@ -129,7 +129,7 @@ export const aaveV2Encode = {
129
129
  },
130
130
  leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
131
131
  const isBundle = true;
132
- const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
132
+ const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
133
133
  const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
134
134
  return [strategyOrBundleId, isBundle, triggerData, subData];
135
135
  },
@@ -231,11 +231,6 @@ export const compoundV3Encode = {
231
231
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
232
232
  },
233
233
  };
234
- export const compoundV3L2Encode = {
235
- leverageManagement(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA = false) {
236
- return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
237
- },
238
- };
239
234
  export const morphoAaveV2Encode = {
240
235
  leverageManagement(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled) {
241
236
  return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
@@ -5,7 +5,7 @@ import { getAssetInfo, MAXUINT } from '@defisaver/tokens';
5
5
  import * as web3Utils from 'web3-utils';
6
6
  import { Bundles, ChainId, CloseToAssetType, OrderType, RatioState, Strategies } from '../types/enums';
7
7
  import '../configuration';
8
- import { aaveV2Encode, chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV2Encode, compoundV3Encode, morphoAaveV2Encode, exchangeEncode, crvUSDEncode, compoundV3L2Encode, morphoBlueEncode, sparkEncode, aaveV4Encode, } from './strategySubService';
8
+ import { aaveV2Encode, chickenBondsEncode, liquityEncode, makerEncode, aaveV3Encode, compoundV2Encode, compoundV3Encode, morphoAaveV2Encode, exchangeEncode, crvUSDEncode, morphoBlueEncode, sparkEncode, aaveV4Encode, } from './strategySubService';
9
9
  describe('Feature: strategySubService.ts', () => {
10
10
  describe('When testing strategySubService.makerEncode', () => {
11
11
  // @ts-ignore // TODO - this requires change in @defisaver/tokens
@@ -1422,37 +1422,6 @@ describe('Feature: strategySubService.ts', () => {
1422
1422
  });
1423
1423
  });
1424
1424
  });
1425
- describe('When testing strategySubService.compoundV3L2Encode', () => {
1426
- describe('leverageManagement()', () => {
1427
- const examples = [
1428
- [
1429
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1430
- [
1431
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1432
- web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1433
- 160, 220, 180, 190,
1434
- true,
1435
- false,
1436
- ],
1437
- ],
1438
- [
1439
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1440
- [
1441
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1442
- web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1443
- 160, 220, 180, 110,
1444
- false,
1445
- false,
1446
- ],
1447
- ],
1448
- ];
1449
- examples.forEach(([expected, actual]) => {
1450
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1451
- expect(compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
1452
- });
1453
- });
1454
- });
1455
- });
1456
1425
  describe('When testing strategySubService.sparkEncode', () => {
1457
1426
  describe('leverageManagement()', () => {
1458
1427
  const examples = [
@@ -185,8 +185,9 @@ export declare const aaveV2LeverageManagementSubData: {
185
185
  };
186
186
  };
187
187
  export declare const aaveV2LeverageManagementSubDataWithoutSubProxy: {
188
- encode(targetRatio: number, ratioState: RatioState): string[];
188
+ encode(market: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
189
189
  decode(subData: string[]): {
190
+ market: EthereumAddress;
190
191
  targetRatio: number;
191
192
  ratioState: RatioState;
192
193
  };
@@ -364,12 +365,6 @@ export declare const compoundV3LeverageManagementSubDataWithoutSubProxy: {
364
365
  ratioState: RatioState;
365
366
  };
366
367
  };
367
- export declare const compoundV3L2LeverageManagementSubData: {
368
- encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string;
369
- decode(subData: string[]): {
370
- targetRatio: number;
371
- };
372
- };
373
368
  export declare const compoundV3LeverageManagementOnPriceSubData: {
374
369
  encode(market: EthereumAddress, collToken: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState, user: EthereumAddress): string[];
375
370
  decode(subData: string[]): {
@@ -163,13 +163,18 @@ export const liquityLeverageManagementSubData = {
163
163
  };
164
164
  export const liquityLeverageManagementSubDataWithoutSubProxy = {
165
165
  encode(targetRatio, ratioState) {
166
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
167
166
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
168
- return [encodedTargetRatio, encodedRatioState];
167
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
168
+ const isRepay = ratioState === RatioState.UNDER;
169
+ const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
170
+ const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
171
+ const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
172
+ const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
173
+ return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
169
174
  },
170
175
  decode(subData) {
171
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
172
- const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
176
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[0]);
177
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
173
178
  return { targetRatio, ratioState };
174
179
  },
175
180
  };
@@ -405,15 +410,22 @@ export const aaveV2LeverageManagementSubData = {
405
410
  },
406
411
  };
407
412
  export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
408
- encode(targetRatio, ratioState) {
413
+ encode(market, targetRatio, ratioState) {
414
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
409
415
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
410
416
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
411
- return [encodedTargetRatio, encodedRatioState];
417
+ const isBoost = ratioState === RatioState.OVER;
418
+ if (isBoost) {
419
+ const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
420
+ return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
421
+ }
422
+ return [encodedMarket, encodedTargetRatio, encodedRatioState];
412
423
  },
413
424
  decode(subData) {
414
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
415
- const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
416
- return { targetRatio, ratioState };
425
+ const market = AbiCoder.decodeParameter('address', subData[0]);
426
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
427
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
428
+ return { market, targetRatio, ratioState };
417
429
  },
418
430
  };
419
431
  /**
@@ -774,6 +786,11 @@ export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
774
786
  encode(targetRatio, ratioState) {
775
787
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
776
788
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
789
+ const isBoost = ratioState === RatioState.OVER;
790
+ if (isBoost) {
791
+ const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
792
+ return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
793
+ }
777
794
  return [encodedTargetRatio, encodedRatioState];
778
795
  },
779
796
  decode(subData) {
@@ -813,43 +830,20 @@ export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
813
830
  encode(market, baseToken, targetRatio, ratioState) {
814
831
  const encodedMarket = AbiCoder.encodeParameter('address', market);
815
832
  const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
816
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
817
833
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
818
- return [encodedMarket, encodedBaseToken, encodedTargetRatio, encodedRatioState];
834
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
835
+ return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
819
836
  },
820
837
  decode(subData) {
821
838
  const market = AbiCoder.decodeParameter('address', subData[0]);
822
839
  const baseToken = AbiCoder.decodeParameter('address', subData[1]);
823
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[2]));
824
- const ratioState = AbiCoder.decodeParameter('uint8', subData[3]);
840
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
841
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]));
825
842
  return {
826
843
  market, baseToken, targetRatio, ratioState,
827
844
  };
828
845
  },
829
846
  };
830
- export const compoundV3L2LeverageManagementSubData = {
831
- encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
832
- let subInput = '0x';
833
- subInput = subInput.concat(market.slice(2));
834
- subInput = subInput.concat(baseToken.slice(2));
835
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
836
- .padStart(32, '0'));
837
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
838
- .padStart(32, '0'));
839
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
840
- .padStart(32, '0'));
841
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
842
- .padStart(32, '0'));
843
- subInput = subInput.concat(boostEnabled ? '01' : '00');
844
- subInput = subInput.concat(isEOA ? '01' : '00');
845
- return subInput;
846
- },
847
- decode(subData) {
848
- const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]);
849
- const targetRatio = weiToRatioPercentage(ratioWei);
850
- return { targetRatio };
851
- },
852
- };
853
847
  export const compoundV3LeverageManagementOnPriceSubData = {
854
848
  encode(market, collToken, baseToken, targetRatio, ratioState, user) {
855
849
  const marketEncoded = AbiCoder.encodeParameter('address', market);
@@ -1188,48 +1188,6 @@ describe('Feature: subDataService.ts', () => {
1188
1188
  });
1189
1189
  });
1190
1190
  });
1191
- describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
1192
- describe('encode()', () => {
1193
- const examples = [
1194
- [
1195
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1196
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
1197
- ],
1198
- [
1199
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1200
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
1201
- ],
1202
- ];
1203
- examples.forEach(([expected, actual]) => {
1204
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1205
- expect(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
1206
- });
1207
- });
1208
- });
1209
- describe('decode()', () => {
1210
- const examples = [
1211
- [
1212
- { targetRatio: 200 },
1213
- [
1214
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
1215
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1216
- ],
1217
- ],
1218
- [
1219
- { targetRatio: 123 },
1220
- [
1221
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
1222
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
1223
- ],
1224
- ],
1225
- ];
1226
- examples.forEach(([expected, actual]) => {
1227
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1228
- expect(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
1229
- });
1230
- });
1231
- });
1232
- });
1233
1191
  describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
1234
1192
  describe('encode()', () => {
1235
1193
  const examples = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/automation-sdk",
3
- "version": "3.3.12-strategies-refactor-2-dev",
3
+ "version": "3.3.12-strategies-refactor-4-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -1129,6 +1129,7 @@ function parseMorphoBlueLeverageManagementOnPrice(position: Position.Automated,
1129
1129
  debtAsset: subData.loanToken,
1130
1130
  price: triggerData.price,
1131
1131
  ratio: subData.targetRatio,
1132
+ ratioState: triggerData.priceState,
1132
1133
  };
1133
1134
 
1134
1135
  return _position;
@@ -19,7 +19,6 @@ import {
19
19
  morphoAaveV2Encode,
20
20
  exchangeEncode,
21
21
  crvUSDEncode,
22
- compoundV3L2Encode,
23
22
  morphoBlueEncode,
24
23
  sparkEncode,
25
24
  aaveV4Encode,
@@ -1701,38 +1700,6 @@ describe('Feature: strategySubService.ts', () => {
1701
1700
  });
1702
1701
  });
1703
1702
 
1704
- describe('When testing strategySubService.compoundV3L2Encode', () => {
1705
- describe('leverageManagement()', () => {
1706
- const examples: Array<[string, [EthereumAddress, EthereumAddress, number, number, number, number, boolean, boolean]]> = [
1707
- [
1708
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1709
- [
1710
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1711
- web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1712
- 160, 220, 180, 190,
1713
- true,
1714
- false,
1715
- ],
1716
- ],
1717
- [
1718
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1719
- [
1720
- web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1721
- web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'),
1722
- 160, 220, 180, 110,
1723
- false,
1724
- false,
1725
- ],
1726
- ],
1727
- ];
1728
- examples.forEach(([expected, actual]) => {
1729
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1730
- expect(compoundV3L2Encode.leverageManagement(...actual)).to.eql(expected);
1731
- });
1732
- });
1733
- });
1734
- });
1735
-
1736
1703
  describe('When testing strategySubService.sparkEncode', () => {
1737
1704
  describe('leverageManagement()', () => {
1738
1705
  const examples: Array<[string, [number, number, number, number, boolean]]> = [
@@ -281,7 +281,7 @@ export const aaveV2Encode = {
281
281
  ) {
282
282
  const isBundle = true;
283
283
 
284
- const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
284
+ const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
285
285
  const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
286
286
 
287
287
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -562,21 +562,6 @@ export const compoundV3Encode = {
562
562
  },
563
563
  };
564
564
 
565
- export const compoundV3L2Encode = {
566
- leverageManagement(
567
- market: EthereumAddress,
568
- baseToken: EthereumAddress,
569
- triggerRepayRatio: number,
570
- triggerBoostRatio: number,
571
- targetBoostRatio: number,
572
- targetRepayRatio: number,
573
- boostEnabled: boolean,
574
- isEOA: boolean = false,
575
- ) {
576
- return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
577
- },
578
- };
579
-
580
565
  export const morphoAaveV2Encode = {
581
566
  leverageManagement(
582
567
  triggerRepayRatio: number,
@@ -1283,54 +1283,6 @@ describe('Feature: subDataService.ts', () => {
1283
1283
  });
1284
1284
  });
1285
1285
 
1286
- describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
1287
- describe('encode()', () => {
1288
- const examples: Array<[
1289
- string,
1290
- [market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean],
1291
- ]> = [
1292
- [
1293
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
1294
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
1295
- ],
1296
- [
1297
- '0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
1298
- [web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
1299
- ],
1300
- ];
1301
-
1302
- examples.forEach(([expected, actual]) => {
1303
- it(`Given ${actual} should return expected value: ${expected}`, () => {
1304
- expect(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
1305
- });
1306
- });
1307
- });
1308
- describe('decode()', () => {
1309
- const examples: Array<[{ targetRatio: number }, SubData]> = [
1310
- [
1311
- { targetRatio: 200 },
1312
- [
1313
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
1314
- '0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1315
- ],
1316
- ],
1317
- [
1318
- { targetRatio: 123 },
1319
- [
1320
- '0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
1321
- '0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
1322
- ],
1323
- ],
1324
- ];
1325
-
1326
- examples.forEach(([expected, actual]) => {
1327
- it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1328
- expect(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
1329
- });
1330
- });
1331
- });
1332
- });
1333
-
1334
1286
  describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
1335
1287
  describe('encode()', () => {
1336
1288
  const examples: Array<[
@@ -212,13 +212,21 @@ export const liquityLeverageManagementSubDataWithoutSubProxy = {
212
212
  targetRatio: number,
213
213
  ratioState: RatioState,
214
214
  ): SubData {
215
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
216
215
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
217
- return [encodedTargetRatio, encodedRatioState];
216
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
217
+
218
+ const isRepay = ratioState === RatioState.UNDER;
219
+ const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
220
+ const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
221
+
222
+ const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
223
+ const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
224
+
225
+ return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
218
226
  },
219
227
  decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
220
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
221
- const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
228
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[0]) as any as RatioState;
229
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]) as any as string);
222
230
 
223
231
  return { targetRatio, ratioState };
224
232
  },
@@ -528,18 +536,29 @@ export const aaveV2LeverageManagementSubData = {
528
536
  };
529
537
  export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
530
538
  encode(
539
+ market: EthereumAddress,
531
540
  targetRatio: number,
532
541
  ratioState: RatioState,
533
542
  ): SubData {
543
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
534
544
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
535
545
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
536
- return [encodedTargetRatio, encodedRatioState];
546
+
547
+ const isBoost = ratioState === RatioState.OVER;
548
+
549
+ if (isBoost) {
550
+ const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
551
+ return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
552
+ }
553
+
554
+ return [encodedMarket, encodedTargetRatio, encodedRatioState];
537
555
  },
538
- decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
539
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
540
- const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
556
+ decode(subData: SubData): { market: EthereumAddress, targetRatio: number, ratioState: RatioState } {
557
+ const market = AbiCoder.decodeParameter('address', subData[0]) as any as EthereumAddress;
558
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]) as any as string);
559
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]) as any as RatioState;
541
560
 
542
- return { targetRatio, ratioState };
561
+ return { market, targetRatio, ratioState };
543
562
  },
544
563
  };
545
564
 
@@ -1036,6 +1055,14 @@ export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
1036
1055
  ): SubData {
1037
1056
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1038
1057
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
1058
+
1059
+ const isBoost = ratioState === RatioState.OVER;
1060
+
1061
+ if (isBoost) {
1062
+ const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
1063
+ return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
1064
+ }
1065
+
1039
1066
  return [encodedTargetRatio, encodedRatioState];
1040
1067
  },
1041
1068
  decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
@@ -1092,56 +1119,21 @@ export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
1092
1119
  ): SubData {
1093
1120
  const encodedMarket = AbiCoder.encodeParameter('address', market);
1094
1121
  const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
1095
- const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1096
1122
  const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
1097
- return [encodedMarket, encodedBaseToken, encodedTargetRatio, encodedRatioState];
1123
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1124
+ return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
1098
1125
  },
1099
1126
  decode(subData: SubData): { market: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState } {
1100
1127
  const market = AbiCoder.decodeParameter('address', subData[0]) as any as EthereumAddress;
1101
1128
  const baseToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
1102
- const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[2]) as any as string);
1103
- const ratioState = AbiCoder.decodeParameter('uint8', subData[3]) as any as RatioState;
1129
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]) as any as RatioState;
1130
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]) as any as string);
1104
1131
 
1105
1132
  return {
1106
1133
  market, baseToken, targetRatio, ratioState,
1107
1134
  };
1108
1135
  },
1109
1136
  };
1110
- export const compoundV3L2LeverageManagementSubData = {
1111
- encode(
1112
- market: EthereumAddress,
1113
- baseToken: EthereumAddress,
1114
- triggerRepayRatio: number,
1115
- triggerBoostRatio: number,
1116
- targetBoostRatio: number,
1117
- targetRepayRatio: number,
1118
- boostEnabled: boolean,
1119
- isEOA: boolean,
1120
- ): string {
1121
- let subInput = '0x';
1122
-
1123
- subInput = subInput.concat(market.slice(2));
1124
- subInput = subInput.concat(baseToken.slice(2));
1125
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
1126
- .padStart(32, '0'));
1127
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
1128
- .padStart(32, '0'));
1129
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
1130
- .padStart(32, '0'));
1131
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
1132
- .padStart(32, '0'));
1133
- subInput = subInput.concat(boostEnabled ? '01' : '00');
1134
- subInput = subInput.concat(isEOA ? '01' : '00');
1135
-
1136
- return subInput;
1137
- },
1138
- decode(subData: SubData): { targetRatio: number } {
1139
- const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]) as any as string;
1140
- const targetRatio = weiToRatioPercentage(ratioWei);
1141
-
1142
- return { targetRatio };
1143
- },
1144
- };
1145
1137
  export const compoundV3LeverageManagementOnPriceSubData = {
1146
1138
  encode(
1147
1139
  market: EthereumAddress,