@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
@@ -468,6 +468,11 @@ exports.MAINNET_BUNDLES_INFO = {
468
468
  strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
469
469
  protocol: exports.PROTOCOLS.Spark,
470
470
  },
471
+ [enums_1.Bundles.MainnetIds.MORPHO_BLUE_CLOSE]: {
472
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.MORPHO_BLUE_CLOSE,
473
+ strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
474
+ protocol: exports.PROTOCOLS.MorphoBlue,
475
+ },
471
476
  };
472
477
  exports.OPTIMISM_BUNDLES_INFO = {
473
478
  [enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -657,6 +662,11 @@ exports.BASE_BUNDLES_INFO = {
657
662
  strategyId: enums_1.Strategies.Identifiers.EoaCloseOnPrice,
658
663
  protocol: exports.PROTOCOLS.AaveV3,
659
664
  },
665
+ [enums_1.Bundles.BaseIds.MORPHO_BLUE_CLOSE]: {
666
+ strategyOrBundleId: enums_1.Bundles.BaseIds.MORPHO_BLUE_CLOSE,
667
+ strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
668
+ protocol: exports.PROTOCOLS.MorphoBlue,
669
+ },
660
670
  };
661
671
  exports.ARBITRUM_BUNDLES_INFO = {
662
672
  [enums_1.Bundles.ArbitrumIds.AAVE_V3_REPAY]: {
@@ -799,6 +809,11 @@ exports.ARBITRUM_BUNDLES_INFO = {
799
809
  strategyId: enums_1.Strategies.Identifiers.EoaBoost,
800
810
  protocol: exports.PROTOCOLS.MorphoBlue,
801
811
  },
812
+ [enums_1.Bundles.ArbitrumIds.MORPHO_BLUE_CLOSE]: {
813
+ strategyOrBundleId: enums_1.Bundles.ArbitrumIds.MORPHO_BLUE_CLOSE,
814
+ strategyId: enums_1.Strategies.Identifiers.CloseOnPrice,
815
+ protocol: exports.PROTOCOLS.MorphoBlue,
816
+ },
802
817
  };
803
818
  exports.BUNDLES_INFO = {
804
819
  [enums_1.ChainId.Ethereum]: exports.MAINNET_BUNDLES_INFO,
@@ -101,6 +101,7 @@ describe('Feature: ethereumService.ts', () => {
101
101
  'address': '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0',
102
102
  'blockHash': '0xb92cab2569456dbfbdb853d2c67d72c9a7580543dbcb55d483a77322b40755a4',
103
103
  'blockNumber': 15166163,
104
+ 'blockTimestamp': '0x62d53ad8',
104
105
  'event': 'Transfer',
105
106
  'id': 'log_e2258e3a',
106
107
  'logIndex': 385,
@@ -770,6 +770,35 @@ function parseMorphoBlueLeverageManagementOnPrice(position, parseData) {
770
770
  };
771
771
  return _position;
772
772
  }
773
+ function parseMorphoBlueCloseOnPrice(position, parseData) {
774
+ const _position = (0, lodash_1.cloneDeep)(position);
775
+ const { subStruct } = parseData.subscriptionEventData;
776
+ const triggerData = triggerService.morphoBluePriceRangeTrigger.decode(subStruct.triggerData);
777
+ const subData = subDataService.morphoBlueCloseOnPriceSubData.decode(subStruct.subData);
778
+ _position.strategyData.decoded.triggerData = triggerData;
779
+ _position.strategyData.decoded.subData = subData;
780
+ _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, Math.random());
781
+ const marketIdEncodedData = web3.eth.abi.encodeParameters(['address', 'address', 'address', 'address', 'uint256'], [
782
+ subData.loanToken,
783
+ subData.collToken,
784
+ subData.oracle,
785
+ subData.irm,
786
+ subData.lltv,
787
+ ]);
788
+ const marketId = web3.utils.keccak256(marketIdEncodedData);
789
+ const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
790
+ _position.specific = {
791
+ subHash: _position.subHash,
792
+ marketId,
793
+ collAsset: subData.collToken,
794
+ debtAsset: subData.loanToken,
795
+ stopLossPrice: triggerData.lowerPrice,
796
+ takeProfitPrice: triggerData.upperPrice,
797
+ stopLossType,
798
+ takeProfitType,
799
+ };
800
+ return _position;
801
+ }
773
802
  function parseLiquityV2CloseOnPrice(position, parseData) {
774
803
  const _position = (0, lodash_1.cloneDeep)(position);
775
804
  const { subStruct } = parseData.subscriptionEventData;
@@ -957,6 +986,7 @@ const parsingMethodsMapping = {
957
986
  [enums_1.Strategies.Identifiers.EoaRepay]: parseMorphoBlueLeverageManagement,
958
987
  [enums_1.Strategies.Identifiers.EoaBoost]: parseMorphoBlueLeverageManagement,
959
988
  [enums_1.Strategies.Identifiers.BoostOnPrice]: parseMorphoBlueLeverageManagementOnPrice,
989
+ [enums_1.Strategies.Identifiers.CloseOnPrice]: parseMorphoBlueCloseOnPrice,
960
990
  },
961
991
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.FluidT1]: {
962
992
  [enums_1.Strategies.Identifiers.Repay]: parseFluidT1LeverageManagement,
@@ -73,6 +73,7 @@ describe('Feature: strategiesService.ts', () => {
73
73
  repayEnabled: true,
74
74
  subId1: 379,
75
75
  mergeWithId: enums_1.Strategies.Identifiers.Boost,
76
+ subHashRepay: '0xafa4d200be62f171b57b1ae0f4e8348d1ac3f6d0812ad6da74a2adae8037dde1',
76
77
  }
77
78
  },
78
79
  {
@@ -6,6 +6,7 @@ export declare const makerEncode: {
6
6
  closeOnPrice(vaultId: number, ratioState: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
7
7
  trailingStop(vaultId: number, triggerPercentage: number, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, roundId: number, chainId?: ChainId, daiAddr?: EthereumAddress, mcdCdpManagerAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
8
8
  leverageManagement(vaultId: number, triggerRepayRatio: string, triggerBoostRatio: string, targetBoostRatio: string, targetRepayRatio: string, boostEnabled: boolean): (string | number | boolean)[];
9
+ leverageManagementWithoutSubProxy(vaultId: number, triggerRatio: number, targetRatio: number, ratioState: RatioState, isBoost: boolean): (boolean | string[] | Bundles.MainnetIds)[];
9
10
  };
10
11
  export declare const liquityEncode: {
11
12
  closeOnPrice(priceOverOrUnder: RatioState, price: string, closeToAssetAddr: EthereumAddress, chainlinkCollAddress: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): (boolean | string[] | Strategies.MainnetIds)[];
@@ -86,6 +87,7 @@ export declare const exchangeEncode: {
86
87
  export declare const sparkEncode: {
87
88
  leverageManagement(triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean): string;
88
89
  closeOnPriceGeneric(strategyOrBundleId: number, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
90
+ leverageManagementWithoutSubProxy(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
89
91
  };
90
92
  export declare const crvUSDEncode: {
91
93
  leverageManagement(owner: EthereumAddress, controllerAddr: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, collTokenAddr: EthereumAddress, crvUSDAddr: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
@@ -94,6 +96,7 @@ export declare const crvUSDEncode: {
94
96
  export declare const morphoBlueEncode: {
95
97
  leverageManagement(marketId: string, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, triggerRatio: number, user: EthereumAddress, isEOA: boolean, network: ChainId): (boolean | string[] | Bundles.BaseIds)[] | (boolean | string[] | Bundles.MainnetIds | Bundles.ArbitrumIds)[];
96
98
  leverageManagementOnPrice(strategyOrBundleId: number, isBundle: boolean | undefined, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, targetRatio: number, price: number, priceState: RatioState): (number | boolean | string[])[];
99
+ closeOnPrice(strategyOrBundleId: number, loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, stopLossPrice?: number, stopLossType?: CloseToAssetType, takeProfitPrice?: number, takeProfitType?: CloseToAssetType): (number | boolean | string[])[];
97
100
  };
98
101
  export declare const liquityV2Encode: {
99
102
  leverageManagement(market: EthereumAddress, troveId: string, collToken: EthereumAddress, boldToken: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, strategyOrBundleId: number): (number | boolean | string[])[];
@@ -70,6 +70,17 @@ exports.makerEncode = {
70
70
  boostEnabled,
71
71
  ];
72
72
  },
73
+ leverageManagementWithoutSubProxy(vaultId, triggerRatio, targetRatio, ratioState, isBoost) {
74
+ const bundleId = isBoost ? enums_1.Bundles.MainnetIds.MAKER_BOOST : enums_1.Bundles.MainnetIds.MAKER_REPAY;
75
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
76
+ const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, ratioState);
77
+ return [
78
+ bundleId,
79
+ true,
80
+ triggerData,
81
+ subData,
82
+ ];
83
+ },
73
84
  };
74
85
  exports.liquityEncode = {
75
86
  closeOnPrice(priceOverOrUnder, price, closeToAssetAddr, chainlinkCollAddress, chainId = enums_1.ChainId.Ethereum, collAddr, debtAddr) {
@@ -268,6 +279,12 @@ exports.sparkEncode = {
268
279
  const triggerDataEncoded = triggerService.sparkQuotePriceRangeTrigger.encode(collAsset, debtAsset, stopLossPrice, takeProfitPrice);
269
280
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
270
281
  },
282
+ leverageManagementWithoutSubProxy(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
283
+ const isBundle = true;
284
+ const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
285
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
286
+ return [strategyOrBundleId, isBundle, triggerData, subData];
287
+ },
271
288
  };
272
289
  exports.crvUSDEncode = {
273
290
  leverageManagement(owner, controllerAddr, ratioState, targetRatio, triggerRatio, collTokenAddr, crvUSDAddr) {
@@ -309,6 +326,13 @@ exports.morphoBlueEncode = {
309
326
  const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
310
327
  return [strategyOrBundleId, isBundle, triggerData, subData];
311
328
  },
329
+ closeOnPrice(strategyOrBundleId, loanToken, collToken, oracle, irm, lltv, user, stopLossPrice = 0, stopLossType = enums_1.CloseToAssetType.DEBT, takeProfitPrice = 0, takeProfitType = enums_1.CloseToAssetType.COLLATERAL) {
330
+ const isBundle = true;
331
+ const closeType = (0, utils_1.getCloseStrategyType)(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
332
+ const subDataEncoded = subDataService.morphoBlueCloseOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, user, closeType);
333
+ const triggerDataEncoded = triggerService.morphoBluePriceRangeTrigger.encode(oracle, collToken, loanToken, stopLossPrice, takeProfitPrice);
334
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
335
+ },
312
336
  };
313
337
  exports.liquityV2Encode = {
314
338
  leverageManagement(market, troveId, collToken, boldToken, ratioState, targetRatio, triggerRatio, strategyOrBundleId) {
@@ -500,7 +500,7 @@ describe('Feature: strategySubService.ts', () => {
500
500
  [
501
501
  enums_1.Bundles.MainnetIds.AAVE_V3_EOA_REPAY_ON_PRICE,
502
502
  true,
503
- ['0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000001'],
503
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4800000000000000000000000000000000000000000000000000000026e1f9c6000000000000000000000000000000000000000000000000000000000000000001'],
504
504
  [
505
505
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
506
506
  '0x0000000000000000000000000000000000000000000000000000000000000000',
@@ -528,7 +528,7 @@ describe('Feature: strategySubService.ts', () => {
528
528
  [
529
529
  enums_1.Bundles.MainnetIds.AAVE_V3_EOA_BOOST_ON_PRICE,
530
530
  true,
531
- ['0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000'],
531
+ ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000002faf0800000000000000000000000000000000000000000000000000000000000000000'],
532
532
  [
533
533
  '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
534
534
  '0x0000000000000000000000000000000000000000000000000000000000000002',
@@ -1364,6 +1364,44 @@ describe('Feature: strategySubService.ts', () => {
1364
1364
  });
1365
1365
  });
1366
1366
  });
1367
+ describe('closeOnPrice()', () => {
1368
+ const examples = [
1369
+ [
1370
+ [
1371
+ enums_1.Bundles.MainnetIds.MORPHO_BLUE_CLOSE,
1372
+ true,
1373
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
1374
+ [
1375
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1376
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1377
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1378
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1379
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1380
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1381
+ '0x0000000000000000000000000000000000000000000000000000000000000005',
1382
+ ],
1383
+ ],
1384
+ [
1385
+ enums_1.Bundles.MainnetIds.MORPHO_BLUE_CLOSE,
1386
+ web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'),
1387
+ web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
1388
+ web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
1389
+ web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1390
+ '945000000000000000',
1391
+ web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'),
1392
+ 1500,
1393
+ enums_1.CloseToAssetType.DEBT,
1394
+ 4000,
1395
+ enums_1.CloseToAssetType.COLLATERAL
1396
+ ]
1397
+ ],
1398
+ ];
1399
+ examples.forEach(([expected, actual]) => {
1400
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1401
+ (0, chai_1.expect)(strategySubService_1.morphoBlueEncode.closeOnPrice(...actual)).to.eql(expected);
1402
+ });
1403
+ });
1404
+ });
1367
1405
  });
1368
1406
  describe('When testing strategySubService.compoundV3L2Encode', () => {
1369
1407
  describe('leverageManagement()', () => {
@@ -28,6 +28,13 @@ export declare const makerLeverageManagementSubData: {
28
28
  targetRatio: number;
29
29
  };
30
30
  };
31
+ export declare const makerLeverageManagementWithoutSubProxy: {
32
+ encode(cdpId: number, targetRatio: number, ratioState: RatioState): string[];
33
+ decode(subData: string[]): {
34
+ targetRatio: number;
35
+ ratioState: RatioState;
36
+ };
37
+ };
31
38
  export declare const liquityLeverageManagementSubData: {
32
39
  decode: (subData: string[]) => {
33
40
  targetRatio: number;
@@ -166,6 +173,13 @@ export declare const sparkLeverageManagementSubData: {
166
173
  targetRatio: number;
167
174
  };
168
175
  };
176
+ export declare const sparkLeverageManagementSubDataWithoutSubProxy: {
177
+ encode(targetRatio: number, ratioState: RatioState): string[];
178
+ decode(subData: string[]): {
179
+ targetRatio: number;
180
+ ratioState: RatioState;
181
+ };
182
+ };
169
183
  export declare const liquityDsrPaybackSubData: {
170
184
  encode: (targetRatio: number) => string[];
171
185
  decode: (subData: string[]) => {
@@ -318,3 +332,15 @@ export declare const sparkCloseGenericSubData: {
318
332
  owner: EthereumAddress;
319
333
  };
320
334
  };
335
+ export declare const morphoBlueCloseOnPriceSubData: {
336
+ encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, user: EthereumAddress, closeType: CloseStrategyType): string[];
337
+ decode(subData: string[]): {
338
+ loanToken: string;
339
+ collToken: string;
340
+ oracle: string;
341
+ irm: string;
342
+ lltv: string;
343
+ user: string;
344
+ closeType: CloseStrategyType;
345
+ };
346
+ };
@@ -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.sparkCloseGenericSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.fluidLeverageManagementSubData = exports.liquityV2PaybackSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementSubData = exports.makerCloseSubData = exports.liquityRepayFromSavingsSubData = exports.makerRepayFromSavingsSubData = void 0;
6
+ exports.morphoBlueCloseOnPriceSubData = exports.sparkCloseGenericSubData = exports.compoundV3CloseSubData = exports.compoundV3LeverageManagementOnPriceSubData = exports.fluidLeverageManagementSubData = exports.liquityV2PaybackSubData = exports.morphoBlueLeverageManagementOnPriceSubData = exports.liquityV2LeverageManagementOnPriceSubData = exports.liquityV2CloseSubData = exports.liquityV2LeverageManagementSubData = exports.aaveV3LeverageManagementOnPriceSubData = exports.morphoBlueLeverageManagementSubData = exports.crvUSDPaybackSubData = exports.crvUSDLeverageManagementSubData = exports.liquityDebtInFrontRepaySubData = exports.liquityDsrSupplySubData = exports.liquityDsrPaybackSubData = exports.sparkLeverageManagementSubDataWithoutSubProxy = exports.sparkLeverageManagementSubData = exports.exchangeLimitOrderSubData = exports.exchangeDcaSubData = exports.liquityPaybackUsingChickenBondSubData = exports.cBondsRebondSubData = exports.morphoAaveV2LeverageManagementSubData = exports.compoundV3L2LeverageManagementSubData = exports.compoundV3LeverageManagementSubData = exports.compoundV2LeverageManagementSubData = exports.aaveV3QuotePriceSubData = exports.aaveV3CollateralSwitchSubData = exports.aaveV3CloseGenericSubData = exports.aaveV3LeverageManagementOnPriceGeneric = exports.aaveV3LeverageManagementSubDataWithoutSubProxy = exports.aaveV3LeverageManagementSubData = exports.aaveV2LeverageManagementSubData = exports.liquityCloseSubData = exports.liquityLeverageManagementSubData = exports.makerLeverageManagementWithoutSubProxy = 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");
@@ -76,6 +76,19 @@ exports.makerLeverageManagementSubData = {
76
76
  return { vaultId, targetRatio };
77
77
  },
78
78
  };
79
+ exports.makerLeverageManagementWithoutSubProxy = {
80
+ encode(cdpId, targetRatio, ratioState) {
81
+ const encodedCdpId = web3_eth_abi_1.default.encodeParameter('uint256', cdpId);
82
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
83
+ const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
84
+ return [encodedTargetRatio, encodedRatioState, encodedCdpId];
85
+ },
86
+ decode(subData) {
87
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[0]));
88
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[1]);
89
+ return { targetRatio, ratioState };
90
+ },
91
+ };
79
92
  exports.liquityLeverageManagementSubData = {
80
93
  decode: (subData) => {
81
94
  const weiRatio = web3_eth_abi_1.default.decodeParameter('uint256', subData[1]);
@@ -417,6 +430,20 @@ exports.sparkLeverageManagementSubData = {
417
430
  return { targetRatio };
418
431
  },
419
432
  };
433
+ exports.sparkLeverageManagementSubDataWithoutSubProxy = {
434
+ encode(targetRatio, ratioState) {
435
+ const encodedTargetRatio = web3_eth_abi_1.default.encodeParameter('uint256', (0, utils_1.ratioPercentageToWei)(targetRatio));
436
+ const encodedRatioState = web3_eth_abi_1.default.encodeParameter('uint8', ratioState);
437
+ const encodedUseDefaultMarket = web3_eth_abi_1.default.encodeParameter('bool', true);
438
+ const encodedUseOnBehalf = web3_eth_abi_1.default.encodeParameter('bool', false);
439
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
440
+ },
441
+ decode(subData) {
442
+ const targetRatio = (0, utils_1.weiToRatioPercentage)(web3_eth_abi_1.default.decodeParameter('uint256', subData[0]));
443
+ const ratioState = web3_eth_abi_1.default.decodeParameter('uint8', subData[1]);
444
+ return { targetRatio, ratioState };
445
+ },
446
+ };
420
447
  exports.liquityDsrPaybackSubData = {
421
448
  encode: (targetRatio) => {
422
449
  const daiAddress = (0, tokens_1.getAssetInfo)('DAI').address;
@@ -858,3 +885,33 @@ exports.sparkCloseGenericSubData = {
858
885
  };
859
886
  },
860
887
  };
888
+ exports.morphoBlueCloseOnPriceSubData = {
889
+ encode(loanToken, collToken, oracle, irm, lltv, user, closeType) {
890
+ const loanTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', loanToken);
891
+ const collTokenEncoded = web3_eth_abi_1.default.encodeParameter('address', collToken);
892
+ const oracleEncoded = web3_eth_abi_1.default.encodeParameter('address', oracle);
893
+ const irmEncoded = web3_eth_abi_1.default.encodeParameter('address', irm);
894
+ const lltvEncoded = web3_eth_abi_1.default.encodeParameter('uint256', lltv);
895
+ const userEncoded = web3_eth_abi_1.default.encodeParameter('address', user);
896
+ const closeTypeEncoded = web3_eth_abi_1.default.encodeParameter('uint8', closeType);
897
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, userEncoded, closeTypeEncoded];
898
+ },
899
+ decode(subData) {
900
+ const loanToken = web3_eth_abi_1.default.decodeParameter('address', subData[0]);
901
+ const collToken = web3_eth_abi_1.default.decodeParameter('address', subData[1]);
902
+ const oracle = web3_eth_abi_1.default.decodeParameter('address', subData[2]);
903
+ const irm = web3_eth_abi_1.default.decodeParameter('address', subData[3]);
904
+ const lltv = web3_eth_abi_1.default.decodeParameter('uint256', subData[4]);
905
+ const user = web3_eth_abi_1.default.decodeParameter('address', subData[5]);
906
+ const closeType = Number(web3_eth_abi_1.default.decodeParameter('uint8', subData[6]));
907
+ return {
908
+ loanToken,
909
+ collToken,
910
+ oracle,
911
+ irm,
912
+ lltv,
913
+ user,
914
+ closeType,
915
+ };
916
+ },
917
+ };
@@ -1292,6 +1292,58 @@ describe('Feature: subDataService.ts', () => {
1292
1292
  });
1293
1293
  });
1294
1294
  });
1295
+ describe('When testing subDataService.morphoBlueCloseOnPriceSubData', () => {
1296
+ describe('encode()', () => {
1297
+ const examples = [
1298
+ [
1299
+ [
1300
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1301
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1302
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1303
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1304
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1305
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1306
+ '0x0000000000000000000000000000000000000000000000000000000000000006',
1307
+ ],
1308
+ [web3Utils.toChecksumAddress('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'), '945000000000000000', web3Utils.toChecksumAddress('0x1031d218133AFaB8c2B819B1366c7E434Ad91E9c'), enums_1.CloseStrategyType.TAKE_PROFIT_AND_STOP_LOSS_IN_DEBT]
1309
+ ],
1310
+ ];
1311
+ examples.forEach(([expected, actual]) => {
1312
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1313
+ (0, chai_1.expect)(subDataService.morphoBlueCloseOnPriceSubData.encode(...actual)).to.eql(expected);
1314
+ });
1315
+ });
1316
+ });
1317
+ describe('decode()', () => {
1318
+ const examples = [
1319
+ [
1320
+ {
1321
+ loanToken: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',
1322
+ collToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
1323
+ oracle: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
1324
+ irm: '0x0000000000000000000000000000000000000000',
1325
+ lltv: '945000000000000000',
1326
+ user: '0x1031d218133AFaB8C2B819B1366c7e434Ad91e9c',
1327
+ closeType: enums_1.CloseStrategyType.TAKE_PROFIT_AND_STOP_LOSS_IN_DEBT,
1328
+ },
1329
+ [
1330
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1331
+ '0x0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
1332
+ '0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc',
1333
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1334
+ '0x0000000000000000000000000000000000000000000000000d1d507e40be8000',
1335
+ '0x0000000000000000000000001031d218133afab8c2b819b1366c7e434ad91e9c',
1336
+ '0x0000000000000000000000000000000000000000000000000000000000000006',
1337
+ ],
1338
+ ],
1339
+ ];
1340
+ examples.forEach(([expected, actual]) => {
1341
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1342
+ (0, chai_1.expect)(subDataService.morphoBlueCloseOnPriceSubData.decode(actual)).to.eql(expected);
1343
+ });
1344
+ });
1345
+ });
1346
+ });
1295
1347
  describe('When testing subDataService.aaveV3LeverageManagementOnPriceSubData', () => {
1296
1348
  describe('encode()', () => {
1297
1349
  const examples = [
@@ -1585,7 +1637,7 @@ describe('Feature: subDataService.ts', () => {
1585
1637
  debtAssetId: 1,
1586
1638
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1587
1639
  targetRatio: 200,
1588
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1640
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1589
1641
  },
1590
1642
  [
1591
1643
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
@@ -1605,7 +1657,7 @@ describe('Feature: subDataService.ts', () => {
1605
1657
  debtAssetId: 1,
1606
1658
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1607
1659
  targetRatio: 200,
1608
- user: web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1660
+ owner: web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1609
1661
  },
1610
1662
  [
1611
1663
  '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
@@ -1814,7 +1866,7 @@ describe('Feature: subDataService.ts', () => {
1814
1866
  debtAssetId: 1,
1815
1867
  closeType: enums_1.CloseStrategyType.TAKE_PROFIT_IN_COLLATERAL,
1816
1868
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1817
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1869
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1818
1870
  },
1819
1871
  [
1820
1872
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
@@ -1835,7 +1887,7 @@ describe('Feature: subDataService.ts', () => {
1835
1887
  debtAssetId: 1,
1836
1888
  closeType: enums_1.CloseStrategyType.STOP_LOSS_IN_COLLATERAL,
1837
1889
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1838
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1890
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1839
1891
  },
1840
1892
  [
1841
1893
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
@@ -1856,7 +1908,7 @@ describe('Feature: subDataService.ts', () => {
1856
1908
  debtAssetId: 1,
1857
1909
  closeType: enums_1.CloseStrategyType.TAKE_PROFIT_IN_DEBT,
1858
1910
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1859
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1911
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1860
1912
  },
1861
1913
  [
1862
1914
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
@@ -1877,7 +1929,7 @@ describe('Feature: subDataService.ts', () => {
1877
1929
  debtAssetId: 1,
1878
1930
  closeType: enums_1.CloseStrategyType.STOP_LOSS_IN_DEBT,
1879
1931
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1880
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1932
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1881
1933
  },
1882
1934
  [
1883
1935
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
@@ -1898,7 +1950,7 @@ describe('Feature: subDataService.ts', () => {
1898
1950
  debtAssetId: 1,
1899
1951
  closeType: enums_1.CloseStrategyType.TAKE_PROFIT_AND_STOP_LOSS_IN_COLLATERAL,
1900
1952
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1901
- user: web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1953
+ owner: web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1902
1954
  },
1903
1955
  [
1904
1956
  '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
@@ -1919,7 +1971,7 @@ describe('Feature: subDataService.ts', () => {
1919
1971
  debtAssetId: 1,
1920
1972
  closeType: enums_1.CloseStrategyType.TAKE_PROFIT_IN_COLLATERAL_AND_STOP_LOSS_IN_DEBT,
1921
1973
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1922
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1974
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1923
1975
  },
1924
1976
  [
1925
1977
  '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
@@ -1940,7 +1992,7 @@ describe('Feature: subDataService.ts', () => {
1940
1992
  debtAssetId: 1,
1941
1993
  closeType: enums_1.CloseStrategyType.TAKE_PROFIT_AND_STOP_LOSS_IN_DEBT,
1942
1994
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1943
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1995
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1944
1996
  },
1945
1997
  [
1946
1998
  '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
@@ -1961,7 +2013,7 @@ describe('Feature: subDataService.ts', () => {
1961
2013
  debtAssetId: 1,
1962
2014
  closeType: enums_1.CloseStrategyType.TAKE_PROFIT_IN_DEBT_AND_STOP_LOSS_IN_COLLATERAL,
1963
2015
  marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
1964
- user: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
2016
+ owner: web3Utils.toChecksumAddress('0x0000000000000000000000000000000000000000'),
1965
2017
  },
1966
2018
  [
1967
2019
  '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
@@ -275,3 +275,13 @@ export declare const sparkQuotePriceRangeTrigger: {
275
275
  upperPrice: string;
276
276
  };
277
277
  };
278
+ export declare const morphoBluePriceRangeTrigger: {
279
+ encode(oracle: EthereumAddress, collateralToken: EthereumAddress, loanToken: EthereumAddress, lowerPrice: number, upperPrice: number): string[];
280
+ decode(triggerData: string[]): {
281
+ oracle: string;
282
+ collateralToken: string;
283
+ loanToken: string;
284
+ lowerPrice: string;
285
+ upperPrice: string;
286
+ };
287
+ };
@@ -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.sparkQuotePriceRangeTrigger = exports.aaveV3QuotePriceRangeTrigger = exports.compoundV3PriceRangeTrigger = exports.compoundV3PriceTrigger = exports.fluidRatioTrigger = exports.morphoBluePriceTrigger = exports.closePriceTrigger = exports.liquityV2QuotePriceTrigger = exports.liquityV2RatioTrigger = exports.morphoBlueRatioTrigger = exports.crvUsdHealthRatioTrigger = exports.crvUSDRatioTrigger = exports.curveUsdSoftLiquidationTrigger = exports.curveUsdBorrowRateTrigger = exports.sparkRatioTrigger = exports.exchangeOffchainPriceTrigger = exports.exchangeTimestampTrigger = exports.compoundV3RatioTrigger = exports.cBondsRebondTrigger = exports.aaveV2RatioTrigger = exports.liquityV2AdjustTimeTrigger = exports.liquityV2DebtInFrontTrigger = exports.liquityDebtInFrontWithLimitTrigger = exports.liquityDebtInFrontTrigger = exports.liquityRatioTrigger = exports.compoundV2RatioTrigger = exports.aaveV3QuotePriceWithMaximumGasPriceTrigger = exports.aaveV3QuotePriceTrigger = exports.morphoAaveV2RatioTrigger = exports.aaveV3RatioTrigger = exports.makerRatioTrigger = exports.trailingStopTrigger = exports.chainlinkPriceTrigger = void 0;
29
+ exports.morphoBluePriceRangeTrigger = exports.sparkQuotePriceRangeTrigger = exports.aaveV3QuotePriceRangeTrigger = exports.compoundV3PriceRangeTrigger = exports.compoundV3PriceTrigger = exports.fluidRatioTrigger = exports.morphoBluePriceTrigger = exports.closePriceTrigger = exports.liquityV2QuotePriceTrigger = exports.liquityV2RatioTrigger = exports.morphoBlueRatioTrigger = exports.crvUsdHealthRatioTrigger = exports.crvUSDRatioTrigger = exports.curveUsdSoftLiquidationTrigger = exports.curveUsdBorrowRateTrigger = exports.sparkRatioTrigger = exports.exchangeOffchainPriceTrigger = exports.exchangeTimestampTrigger = exports.compoundV3RatioTrigger = exports.cBondsRebondTrigger = exports.aaveV2RatioTrigger = exports.liquityV2AdjustTimeTrigger = exports.liquityV2DebtInFrontTrigger = exports.liquityDebtInFrontWithLimitTrigger = exports.liquityDebtInFrontTrigger = exports.liquityRatioTrigger = exports.compoundV2RatioTrigger = exports.aaveV3QuotePriceWithMaximumGasPriceTrigger = exports.aaveV3QuotePriceTrigger = exports.morphoAaveV2RatioTrigger = exports.aaveV3RatioTrigger = exports.makerRatioTrigger = exports.trailingStopTrigger = exports.chainlinkPriceTrigger = void 0;
30
30
  const decimal_js_1 = __importDefault(require("decimal.js"));
31
31
  const tokens_1 = require("@defisaver/tokens");
32
32
  const web3_eth_abi_1 = __importDefault(require("web3-eth-abi"));
@@ -527,3 +527,23 @@ exports.sparkQuotePriceRangeTrigger = {
527
527
  };
528
528
  },
529
529
  };
530
+ exports.morphoBluePriceRangeTrigger = {
531
+ encode(oracle, collateralToken, loanToken, lowerPrice, upperPrice) {
532
+ // Price is scaled to 1e8
533
+ const lowerPriceFormatted = new decimal_js_1.default(lowerPrice).mul(1e8).floor().toString();
534
+ const upperPriceFormatted = new decimal_js_1.default(upperPrice).mul(1e8).floor().toString();
535
+ return [
536
+ web3_eth_abi_1.default.encodeParameters(['address', 'address', 'address', 'uint256', 'uint256'], [oracle, collateralToken, loanToken, lowerPriceFormatted, upperPriceFormatted]),
537
+ ];
538
+ },
539
+ decode(triggerData) {
540
+ const decodedData = web3_eth_abi_1.default.decodeParameters(['address', 'address', 'address', 'uint256', 'uint256'], triggerData[0]);
541
+ return {
542
+ oracle: decodedData[0],
543
+ collateralToken: decodedData[1],
544
+ loanToken: decodedData[2],
545
+ lowerPrice: new decimal_js_1.default(decodedData[3]).div(1e8).toString(),
546
+ upperPrice: new decimal_js_1.default(decodedData[4]).div(1e8).toString(),
547
+ };
548
+ },
549
+ };
@@ -1136,4 +1136,52 @@ describe('Feature: triggerService.ts', () => {
1136
1136
  });
1137
1137
  });
1138
1138
  });
1139
+ describe('When testing triggerService.morphoBluePriceRangeTrigger', () => {
1140
+ describe('encode()', () => {
1141
+ const examples = [
1142
+ [
1143
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
1144
+ [web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), 1500, 4000]
1145
+ ],
1146
+ [
1147
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800'],
1148
+ [web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'), web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'), web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'), 0, 5000]
1149
+ ],
1150
+ ];
1151
+ examples.forEach(([expected, actual]) => {
1152
+ it(`Given ${actual} should return expected value: ${expected}`, () => {
1153
+ (0, chai_1.expect)(triggerService_1.morphoBluePriceRangeTrigger.encode(...actual)).to.eql(expected);
1154
+ });
1155
+ });
1156
+ });
1157
+ describe('decode()', () => {
1158
+ const examples = [
1159
+ [
1160
+ {
1161
+ oracle: web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
1162
+ collateralToken: web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
1163
+ loanToken: web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
1164
+ lowerPrice: '1500',
1165
+ upperPrice: '4000',
1166
+ },
1167
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000022ecb25c000000000000000000000000000000000000000000000000000000005d21dba000'],
1168
+ ],
1169
+ [
1170
+ {
1171
+ oracle: web3Utils.toChecksumAddress('0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC'),
1172
+ collateralToken: web3Utils.toChecksumAddress('0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
1173
+ loanToken: web3Utils.toChecksumAddress('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'),
1174
+ lowerPrice: '0',
1175
+ upperPrice: '5000',
1176
+ },
1177
+ ['0x000000000000000000000000870ac11d48b15db9a138cf899d20f13f79ba00bc0000000000000000000000007f39c581f595b53c5cb19bd0b3f8dA6c935e2ca0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000746a528800'],
1178
+ ],
1179
+ ];
1180
+ examples.forEach(([expected, actual]) => {
1181
+ it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
1182
+ (0, chai_1.expect)(triggerService_1.morphoBluePriceRangeTrigger.decode(actual)).to.eql(expected);
1183
+ });
1184
+ });
1185
+ });
1186
+ });
1139
1187
  });