@defisaver/automation-sdk 3.3.7 → 3.3.8-lev-management-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.
Files changed (42) hide show
  1. package/cjs/constants/index.js +15 -0
  2. package/cjs/services/ethereumService.test.js +1 -0
  3. package/cjs/services/strategiesService.js +30 -0
  4. package/cjs/services/strategiesService.test.js +1 -0
  5. package/cjs/services/strategySubService.d.ts +3 -0
  6. package/cjs/services/strategySubService.js +24 -0
  7. package/cjs/services/strategySubService.test.js +40 -2
  8. package/cjs/services/subDataService.d.ts +26 -0
  9. package/cjs/services/subDataService.js +58 -1
  10. package/cjs/services/subDataService.test.js +62 -10
  11. package/cjs/services/triggerService.d.ts +10 -0
  12. package/cjs/services/triggerService.js +21 -1
  13. package/cjs/services/triggerService.test.js +48 -0
  14. package/cjs/types/enums.d.ts +6 -3
  15. package/cjs/types/enums.js +3 -0
  16. package/esm/constants/index.js +15 -0
  17. package/esm/services/ethereumService.test.js +1 -0
  18. package/esm/services/strategiesService.js +30 -0
  19. package/esm/services/strategiesService.test.js +1 -0
  20. package/esm/services/strategySubService.d.ts +3 -0
  21. package/esm/services/strategySubService.js +24 -0
  22. package/esm/services/strategySubService.test.js +40 -2
  23. package/esm/services/subDataService.d.ts +26 -0
  24. package/esm/services/subDataService.js +57 -0
  25. package/esm/services/subDataService.test.js +62 -10
  26. package/esm/services/triggerService.d.ts +10 -0
  27. package/esm/services/triggerService.js +20 -0
  28. package/esm/services/triggerService.test.js +49 -1
  29. package/esm/types/enums.d.ts +6 -3
  30. package/esm/types/enums.js +3 -0
  31. package/package.json +2 -2
  32. package/src/constants/index.ts +15 -0
  33. package/src/services/ethereumService.test.ts +1 -0
  34. package/src/services/strategiesService.test.ts +1 -0
  35. package/src/services/strategiesService.ts +43 -0
  36. package/src/services/strategySubService.test.ts +57 -2
  37. package/src/services/strategySubService.ts +64 -2
  38. package/src/services/subDataService.test.ts +73 -14
  39. package/src/services/subDataService.ts +79 -0
  40. package/src/services/triggerService.test.ts +53 -0
  41. package/src/services/triggerService.ts +32 -0
  42. package/src/types/enums.ts +3 -0
@@ -104,6 +104,25 @@ export const makerLeverageManagementSubData = {
104
104
  },
105
105
  };
106
106
 
107
+ export const makerLeverageManagementWithoutSubProxy = {
108
+ encode(
109
+ cdpId: number,
110
+ targetRatio: number,
111
+ ratioState: RatioState,
112
+ ): SubData {
113
+ const encodedCdpId = AbiCoder.encodeParameter('uint256', cdpId);
114
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
115
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
116
+ return [encodedTargetRatio, encodedRatioState, encodedCdpId];
117
+ },
118
+ decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
119
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
120
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
121
+
122
+ return { targetRatio, ratioState };
123
+ },
124
+ };
125
+
107
126
  export const liquityLeverageManagementSubData = {
108
127
  decode: (subData:SubData) => {
109
128
  const weiRatio = AbiCoder.decodeParameter('uint256', subData[1]) as any as string;
@@ -592,6 +611,26 @@ export const sparkLeverageManagementSubData = { // TODO encode?
592
611
  return { targetRatio };
593
612
  },
594
613
  };
614
+ export const sparkLeverageManagementSubDataWithoutSubProxy = {
615
+ encode(
616
+ targetRatio: number,
617
+ ratioState: RatioState,
618
+ ): SubData {
619
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
620
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
621
+
622
+ const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
623
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
624
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
625
+ },
626
+ decode(subData: SubData): { targetRatio: number, ratioState: RatioState } {
627
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]) as any as string);
628
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]) as any as RatioState;
629
+
630
+ return { targetRatio, ratioState };
631
+ },
632
+ };
633
+
595
634
 
596
635
  export const liquityDsrPaybackSubData = {
597
636
  encode: (targetRatio: number) => {
@@ -1212,3 +1251,43 @@ export const sparkCloseGenericSubData = {
1212
1251
  };
1213
1252
  },
1214
1253
  };
1254
+
1255
+ export const morphoBlueCloseOnPriceSubData = {
1256
+ encode(
1257
+ loanToken: EthereumAddress,
1258
+ collToken: EthereumAddress,
1259
+ oracle: EthereumAddress,
1260
+ irm: EthereumAddress,
1261
+ lltv: string,
1262
+ user: EthereumAddress,
1263
+ closeType: CloseStrategyType,
1264
+ ): SubData {
1265
+ const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
1266
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
1267
+ const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
1268
+ const irmEncoded = AbiCoder.encodeParameter('address', irm);
1269
+ const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
1270
+ const userEncoded = AbiCoder.encodeParameter('address', user);
1271
+ const closeTypeEncoded = AbiCoder.encodeParameter('uint8', closeType);
1272
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, userEncoded, closeTypeEncoded];
1273
+ },
1274
+ decode(subData: SubData) {
1275
+ const loanToken = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
1276
+ const collToken = AbiCoder.decodeParameter('address', subData[1]) as any as EthereumAddress;
1277
+ const oracle = AbiCoder.decodeParameter('address', subData[2]) as any as EthereumAddress;
1278
+ const irm = AbiCoder.decodeParameter('address', subData[3]) as any as EthereumAddress;
1279
+ const lltv = AbiCoder.decodeParameter('uint256', subData[4]) as any as EthereumAddress;
1280
+ const user = AbiCoder.decodeParameter('address', subData[5]) as any as EthereumAddress;
1281
+ const closeType = Number(AbiCoder.decodeParameter('uint8', subData[6])) as CloseStrategyType;
1282
+
1283
+ return {
1284
+ loanToken,
1285
+ collToken,
1286
+ oracle,
1287
+ irm,
1288
+ lltv,
1289
+ user,
1290
+ closeType,
1291
+ };
1292
+ },
1293
+ };
@@ -31,6 +31,7 @@ import {
31
31
  crvUsdHealthRatioTrigger, liquityV2DebtInFrontTrigger, liquityV2AdjustTimeTrigger,
32
32
  compoundV3PriceRangeTrigger,
33
33
  aaveV3QuotePriceRangeTrigger,
34
+ morphoBluePriceRangeTrigger,
34
35
  } from './triggerService';
35
36
 
36
37
  describe('Feature: triggerService.ts', () => {
@@ -1230,4 +1231,56 @@ describe('Feature: triggerService.ts', () => {
1230
1231
  });
1231
1232
  });
1232
1233
  });
1234
+
1235
+ describe('When testing triggerService.morphoBluePriceRangeTrigger', () => {
1236
+ describe('encode()', () => {
1237
+ const examples: Array<[[string], [oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, lowerPrice: number, upperPrice: number]]> = [
1238
+ [
1239
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
1240
+ [web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), 1500, 4000]
1241
+ ],
1242
+ [
1243
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800'],
1244
+ [web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), 0, 5000]
1245
+ ],
1246
+ ];
1247
+
1248
+ examples.forEach(([expected, actual]) => {
1249
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1250
+ expect(morphoBluePriceRangeTrigger.encode(...actual)).to.eql(expected);
1251
+ });
1252
+ });
1253
+ });
1254
+
1255
+ describe('decode()', () => {
1256
+ const examples: Array<[{ oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, lowerPrice: string, upperPrice: string }, TriggerData]> = [
1257
+ [
1258
+ {
1259
+ oracle: web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
1260
+ collateralToken: web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
1261
+ loanToken: web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
1262
+ lowerPrice: '1500',
1263
+ upperPrice: '4000',
1264
+ },
1265
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
1266
+ ],
1267
+ [
1268
+ {
1269
+ oracle: web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
1270
+ collateralToken: web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
1271
+ loanToken: web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
1272
+ lowerPrice: '0',
1273
+ upperPrice: '5000',
1274
+ },
1275
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8dA6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800'],
1276
+ ],
1277
+ ];
1278
+
1279
+ examples.forEach(([expected, actual]) => {
1280
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1281
+ expect(morphoBluePriceRangeTrigger.decode(actual)).to.eql(expected);
1282
+ });
1283
+ });
1284
+ });
1285
+ });
1233
1286
  });
@@ -688,4 +688,36 @@ export const sparkQuotePriceRangeTrigger = {
688
688
  upperPrice: new Dec(decodedData[3] as string).div(1e8).toString(),
689
689
  };
690
690
  },
691
+ };
692
+
693
+ export const morphoBluePriceRangeTrigger = {
694
+ encode(
695
+ oracle: EthereumAddress,
696
+ collateralToken: EthereumAddress,
697
+ loanToken: EthereumAddress,
698
+ lowerPrice: number,
699
+ upperPrice: number,
700
+ ) {
701
+ // Price is scaled to 1e8
702
+ const lowerPriceFormatted = new Dec(lowerPrice).mul(1e8).floor().toString();
703
+ const upperPriceFormatted = new Dec(upperPrice).mul(1e8).floor().toString();
704
+ return [
705
+ AbiCoder.encodeParameters(
706
+ ['address', 'address', 'address', 'uint256', 'uint256'],
707
+ [oracle, collateralToken, loanToken, lowerPriceFormatted, upperPriceFormatted],
708
+ ),
709
+ ];
710
+ },
711
+ decode(
712
+ triggerData: TriggerData,
713
+ ) {
714
+ const decodedData = AbiCoder.decodeParameters(['address', 'address', 'address', 'uint256', 'uint256'], triggerData[0]);
715
+ return {
716
+ oracle: decodedData[0] as EthereumAddress,
717
+ collateralToken: decodedData[1] as EthereumAddress,
718
+ loanToken: decodedData[2] as EthereumAddress,
719
+ lowerPrice: new Dec(decodedData[3] as string).div(1e8).toString(),
720
+ upperPrice: new Dec(decodedData[4] as string).div(1e8).toString(),
721
+ };
722
+ },
691
723
  };
@@ -222,6 +222,7 @@ export namespace Bundles {
222
222
  AAVE_V3_EOA_BOOST_ON_PRICE = 55,
223
223
  AAVE_V3_EOA_CLOSE = 56,
224
224
  SPARK_CLOSE = 57,
225
+ MORPHO_BLUE_CLOSE = 58,
225
226
  }
226
227
 
227
228
  export enum OptimismIds {
@@ -265,6 +266,7 @@ export namespace Bundles {
265
266
  AAVE_V3_EOA_REPAY_ON_PRICE = 25,
266
267
  AAVE_V3_EOA_BOOST_ON_PRICE = 26,
267
268
  AAVE_V3_EOA_CLOSE = 27,
269
+ MORPHO_BLUE_CLOSE = 28,
268
270
  }
269
271
 
270
272
  export enum ArbitrumIds {
@@ -296,6 +298,7 @@ export namespace Bundles {
296
298
  MORPHO_BLUE_BOOST_ON_PRICE = 25,
297
299
  MORPHO_BLUE_EOA_REPAY = 26,
298
300
  MORPHO_BLUE_EOA_BOOST = 27,
301
+ MORPHO_BLUE_CLOSE = 28,
299
302
  }
300
303
  }
301
304