@defisaver/automation-sdk 3.3.18-audit-dev → 3.3.18-spark-eoa-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.
@@ -122,6 +122,11 @@ exports.MAINNET_STRATEGIES_INFO = {
122
122
  strategyId: enums_1.Strategies.Identifiers.CollateralSwitch,
123
123
  protocol: exports.PROTOCOLS.Spark,
124
124
  },
125
+ [enums_1.Strategies.MainnetIds.SPARK_GENERIC_FL_COLLATERAL_SWITCH]: {
126
+ strategyOrBundleId: enums_1.Strategies.MainnetIds.SPARK_GENERIC_FL_COLLATERAL_SWITCH,
127
+ strategyId: enums_1.Strategies.Identifiers.EoaCollateralSwitch,
128
+ protocol: exports.PROTOCOLS.Spark,
129
+ },
125
130
  };
126
131
  exports.OPTIMISM_STRATEGIES_INFO = {
127
132
  [enums_1.Strategies.OptimismIds.EXCHANGE_DCA]: {
@@ -549,6 +554,31 @@ exports.MAINNET_BUNDLES_INFO = {
549
554
  strategyId: enums_1.Strategies.Identifiers.EoaCloseOnPrice,
550
555
  protocol: exports.PROTOCOLS.AaveV4,
551
556
  },
557
+ [enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY]: {
558
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY,
559
+ strategyId: enums_1.Strategies.Identifiers.EoaRepay,
560
+ protocol: exports.PROTOCOLS.Spark,
561
+ },
562
+ [enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST]: {
563
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST,
564
+ strategyId: enums_1.Strategies.Identifiers.EoaBoost,
565
+ protocol: exports.PROTOCOLS.Spark,
566
+ },
567
+ [enums_1.Bundles.MainnetIds.SPARK_EOA_CLOSE]: {
568
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.SPARK_EOA_CLOSE,
569
+ strategyId: enums_1.Strategies.Identifiers.EoaCloseOnPrice,
570
+ protocol: exports.PROTOCOLS.Spark,
571
+ },
572
+ [enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY_ON_PRICE]: {
573
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY_ON_PRICE,
574
+ strategyId: enums_1.Strategies.Identifiers.EoaRepayOnPrice,
575
+ protocol: exports.PROTOCOLS.Spark,
576
+ },
577
+ [enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST_ON_PRICE]: {
578
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST_ON_PRICE,
579
+ strategyId: enums_1.Strategies.Identifiers.EoaBoostOnPrice,
580
+ protocol: exports.PROTOCOLS.Spark,
581
+ },
552
582
  [enums_1.Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION]: {
553
583
  strategyOrBundleId: enums_1.Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION,
554
584
  strategyId: enums_1.Strategies.Identifiers.LiquidationProtection,
@@ -624,6 +654,11 @@ exports.MAINNET_BUNDLES_INFO = {
624
654
  strategyId: enums_1.Strategies.Identifiers.EoaCloseOnPrice,
625
655
  protocol: exports.PROTOCOLS.MorphoBlue,
626
656
  },
657
+ [enums_1.Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION]: {
658
+ strategyOrBundleId: enums_1.Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION,
659
+ strategyId: enums_1.Strategies.Identifiers.EoaLiquidationProtection,
660
+ protocol: exports.PROTOCOLS.Spark,
661
+ },
627
662
  };
628
663
  exports.OPTIMISM_BUNDLES_INFO = {
629
664
  [enums_1.Bundles.OptimismIds.AAVE_V3_REPAY]: {
@@ -14,6 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const web3_1 = __importDefault(require("web3"));
16
16
  const chai_1 = require("chai");
17
+ const lodash_1 = require("lodash");
17
18
  const tokens_1 = require("@defisaver/tokens");
18
19
  const enums_1 = require("../types/enums");
19
20
  require("../configuration");
@@ -101,7 +102,6 @@ describe('Feature: ethereumService.ts', () => {
101
102
  'address': '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0',
102
103
  'blockHash': '0xb92cab2569456dbfbdb853d2c67d72c9a7580543dbcb55d483a77322b40755a4',
103
104
  'blockNumber': 15166163,
104
- 'blockTimestamp': '0x62d53ad8',
105
105
  'event': 'Transfer',
106
106
  'id': 'log_e2258e3a',
107
107
  'logIndex': 385,
@@ -128,7 +128,7 @@ describe('Feature: ethereumService.ts', () => {
128
128
  },
129
129
  ],
130
130
  [
131
- (0, contractService_1.makeErc20Contract)(Web3_1, (0, tokens_1.getAssetInfo)('LUSD').address, enums_1.ChainId.Ethereum),
131
+ Object.assign(Object.assign({}, (0, contractService_1.makeErc20Contract)(Web3_1, (0, tokens_1.getAssetInfo)('LUSD').address, enums_1.ChainId.Ethereum)), { createdBlock: 15166163 }),
132
132
  null,
133
133
  'Transfer',
134
134
  {
@@ -147,7 +147,6 @@ describe('Feature: ethereumService.ts', () => {
147
147
  'address': '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',
148
148
  'blockHash': '0xacb0213af63b4c17c436f084a96d1ac385641a59a9a4cf014ae3337cbe545aa7',
149
149
  'blockNumber': 5353002,
150
- 'blockTimestamp': '0x624c1a5b',
151
150
  'event': 'Transfer',
152
151
  'id': 'log_f49645b8',
153
152
  'logIndex': 1,
@@ -193,7 +192,6 @@ describe('Feature: ethereumService.ts', () => {
193
192
  'address': '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',
194
193
  'blockHash': '0xacb0213af63b4c17c436f084a96d1ac385641a59a9a4cf014ae3337cbe545aa7',
195
194
  'blockNumber': 5353002,
196
- 'blockTimestamp': '0x624c1a5b',
197
195
  'event': 'Transfer',
198
196
  'id': 'log_f49645b8',
199
197
  'logIndex': 1,
@@ -236,9 +234,8 @@ describe('Feature: ethereumService.ts', () => {
236
234
  ];
237
235
  examples.forEach(([expected, actual]) => {
238
236
  it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => __awaiter(void 0, void 0, void 0, function* () {
239
- const data = yield (0, ethereumService_1.getEventsFromContract)(...actual);
240
- console.log(data);
241
- (0, chai_1.expect)(yield (0, ethereumService_1.getEventsFromContract)(...actual)).to.eql(expected);
237
+ const events = yield (0, ethereumService_1.getEventsFromContract)(...actual);
238
+ (0, chai_1.expect)(events.map((event) => (0, lodash_1.omit)(event, 'blockTimestamp'))).to.eql(expected);
242
239
  }));
243
240
  });
244
241
  });
@@ -359,11 +359,17 @@ function parseAaveV3CollateralSwitch(position, parseData) {
359
359
  function parseSparkCollateralSwitch(position, parseData) {
360
360
  const _position = (0, lodash_1.cloneDeep)(position);
361
361
  const { subStruct } = parseData.subscriptionEventData;
362
+ const isEOA = _position.strategy.strategyId.includes('eoa');
362
363
  const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
363
- const subData = subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
364
+ const subData = isEOA
365
+ ? subDataService.sparkGenericFLCollateralSwitchSubData.decode(subStruct.subData)
366
+ : subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
364
367
  _position.strategyData.decoded.triggerData = triggerData;
365
368
  _position.strategyData.decoded.subData = subData;
366
369
  _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
370
+ _position.strategy.strategyId = isEOA
371
+ ? enums_1.Strategies.Identifiers.EoaCollateralSwitch
372
+ : enums_1.Strategies.Identifiers.CollateralSwitch;
367
373
  return _position;
368
374
  }
369
375
  function parseAaveV4LeverageManagement(position, parseData) {
@@ -775,19 +781,22 @@ function parseSparkLeverageManagement(position, parseData) {
775
781
  const _position = (0, lodash_1.cloneDeep)(position);
776
782
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
777
783
  const { isEnabled } = parseData.strategiesSubsData;
784
+ const isEOA = _position.strategy.strategyId.includes('eoa');
778
785
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
779
- const subData = subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
786
+ const subData = isEOA
787
+ ? subDataService.sparkGenericLeverageManagementSubData.decode(subStruct.subData)
788
+ : subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
780
789
  _position.strategyData.decoded.triggerData = triggerData;
781
790
  _position.strategyData.decoded.subData = subData;
782
791
  _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
783
- const isRepay = _position.strategy.strategyId === enums_1.Strategies.Identifiers.Repay;
792
+ const isRepay = [enums_1.Strategies.Identifiers.Repay, enums_1.Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId);
784
793
  if (isRepay) {
785
794
  _position.specific = {
786
795
  triggerRepayRatio: triggerData.ratio,
787
796
  targetRepayRatio: subData.targetRatio,
788
797
  repayEnabled: isEnabled,
789
798
  subId1: Number(subId),
790
- mergeWithId: enums_1.Strategies.Identifiers.Boost,
799
+ mergeWithId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
791
800
  subHashRepay: subHash,
792
801
  };
793
802
  }
@@ -797,19 +806,24 @@ function parseSparkLeverageManagement(position, parseData) {
797
806
  targetBoostRatio: subData.targetRatio,
798
807
  boostEnabled: isEnabled,
799
808
  subId2: Number(subId),
800
- mergeId: enums_1.Strategies.Identifiers.Boost,
809
+ mergeId: isEOA ? enums_1.Strategies.Identifiers.EoaBoost : enums_1.Strategies.Identifiers.Boost,
801
810
  subHashBoost: subHash,
802
811
  };
803
812
  }
804
- _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LeverageManagement;
813
+ _position.strategy.strategyId = isEOA
814
+ ? enums_1.Strategies.IdOverrides.EoaLeverageManagement
815
+ : enums_1.Strategies.IdOverrides.LeverageManagement;
805
816
  return _position;
806
817
  }
807
818
  function parseSparkLiquidationProtection(position, parseData) {
808
819
  const _position = (0, lodash_1.cloneDeep)(position);
809
820
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
810
821
  const { isEnabled } = parseData.strategiesSubsData;
822
+ const isEOA = _position.strategy.strategyId.includes('eoa');
811
823
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
812
- const subData = subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
824
+ const subData = isEOA
825
+ ? subDataService.sparkGenericLiquidationProtectionSubData.decode(subStruct.subData)
826
+ : subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
813
827
  _position.strategyData.decoded.triggerData = triggerData;
814
828
  _position.strategyData.decoded.subData = subData;
815
829
  _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
@@ -820,14 +834,20 @@ function parseSparkLiquidationProtection(position, parseData) {
820
834
  subId1: Number(subId),
821
835
  subHashRepay: subHash,
822
836
  };
837
+ _position.strategy.strategyId = isEOA
838
+ ? enums_1.Strategies.IdOverrides.EoaLiquidationProtection
839
+ : enums_1.Strategies.IdOverrides.LiquidationProtection;
823
840
  _position.strategy.strategyId = enums_1.Strategies.IdOverrides.LiquidationProtection;
824
841
  return _position;
825
842
  }
826
843
  function parseSparkLeverageManagementOnPrice(position, parseData) {
827
844
  const _position = (0, lodash_1.cloneDeep)(position);
828
845
  const { subStruct } = parseData.subscriptionEventData;
846
+ const isEOA = _position.strategy.strategyId.includes('eoa');
829
847
  const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
830
- const subData = subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
848
+ const subData = isEOA
849
+ ? subDataService.sparkLeverageManagementOnPriceGenericSubData.decode(subStruct.subData)
850
+ : subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
831
851
  _position.strategyData.decoded.triggerData = triggerData;
832
852
  _position.strategyData.decoded.subData = subData;
833
853
  _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
@@ -844,6 +864,9 @@ function parseSparkLeverageManagementOnPrice(position, parseData) {
844
864
  price: triggerData.price,
845
865
  ratioState: triggerData.ratioState,
846
866
  };
867
+ _position.strategy.strategyId = isEOA
868
+ ? enums_1.Strategies.IdOverrides.EoaLeverageManagementOnPrice
869
+ : enums_1.Strategies.IdOverrides.LeverageManagementOnPrice;
847
870
  return _position;
848
871
  }
849
872
  function parseSparkCloseOnPrice(position, parseData) {
@@ -851,9 +874,11 @@ function parseSparkCloseOnPrice(position, parseData) {
851
874
  const { subStruct } = parseData.subscriptionEventData;
852
875
  const triggerData = triggerService.sparkQuotePriceRangeTrigger.decode(subStruct.triggerData);
853
876
  const subData = subDataService.sparkCloseGenericSubData.decode(subStruct.subData);
877
+ const isEOA = _position.strategy.strategyId.includes('eoa');
854
878
  _position.strategyData.decoded.triggerData = triggerData;
855
879
  _position.strategyData.decoded.subData = subData;
856
880
  _position.positionId = (0, utils_1.getPositionId)(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
881
+ _position.strategy.strategyId = isEOA ? enums_1.Strategies.Identifiers.EoaCloseOnPrice : enums_1.Strategies.Identifiers.CloseOnPrice;
857
882
  const { takeProfitType, stopLossType } = (0, utils_1.getStopLossAndTakeProfitTypeByCloseStrategyType)(+subData.closeType);
858
883
  _position.specific = {
859
884
  collAsset: subData.collAsset,
@@ -1276,8 +1301,15 @@ const parsingMethodsMapping = {
1276
1301
  [enums_1.Strategies.Identifiers.RepayOnPrice]: parseSparkLeverageManagementOnPrice,
1277
1302
  [enums_1.Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1278
1303
  [enums_1.Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1304
+ [enums_1.Strategies.Identifiers.EoaRepay]: parseSparkLeverageManagement,
1305
+ [enums_1.Strategies.Identifiers.EoaBoost]: parseSparkLeverageManagement,
1306
+ [enums_1.Strategies.Identifiers.EoaRepayOnPrice]: parseSparkLeverageManagementOnPrice,
1307
+ [enums_1.Strategies.Identifiers.EoaBoostOnPrice]: parseSparkLeverageManagementOnPrice,
1308
+ [enums_1.Strategies.Identifiers.EoaCloseOnPrice]: parseSparkCloseOnPrice,
1279
1309
  [enums_1.Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1310
+ [enums_1.Strategies.Identifiers.EoaCollateralSwitch]: parseSparkCollateralSwitch,
1280
1311
  [enums_1.Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1312
+ [enums_1.Strategies.Identifiers.EoaLiquidationProtection]: parseSparkLiquidationProtection,
1281
1313
  },
1282
1314
  [enums_1.ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1283
1315
  [enums_1.Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,
@@ -93,7 +93,11 @@ export declare const sparkEncode: {
93
93
  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[])[];
94
94
  leverageManagement(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
95
95
  liquidationProtection(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
96
+ leverageManagementGeneric(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
97
+ liquidationProtectionGeneric(strategyOrBundleId: number, market: EthereumAddress, user: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number): (number | boolean | string[])[];
98
+ leverageManagementOnPriceGeneric(strategyOrBundleId: number, price: number, ratioState: RatioState, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number, user: EthereumAddress): (number | boolean | string[])[];
96
99
  collateralSwitch(strategyOrBundleId: number, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState): (number | boolean | string[])[];
100
+ collateralSwitchGeneric(strategyOrBundleId: number, fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, user: EthereumAddress, baseTokenAddress: EthereumAddress, quoteTokenAddress: EthereumAddress, price: number, state: RatioState): (number | boolean | string[])[];
97
101
  };
98
102
  export declare const crvUSDEncode: {
99
103
  leverageManagement(owner: EthereumAddress, controllerAddr: EthereumAddress, ratioState: RatioState, targetRatio: number, triggerRatio: number, collTokenAddr: EthereumAddress, crvUSDAddr: EthereumAddress): (boolean | string[] | Bundles.MainnetIds)[];
@@ -276,12 +276,36 @@ exports.sparkEncode = {
276
276
  const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
277
277
  return [strategyOrBundleId, isBundle, triggerData, subData];
278
278
  },
279
+ leverageManagementGeneric(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
280
+ const isBundle = true;
281
+ const subData = subDataService.sparkGenericLeverageManagementSubData.encode(targetRatio, ratioState, market, user);
282
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
283
+ return [strategyOrBundleId, isBundle, triggerData, subData];
284
+ },
285
+ liquidationProtectionGeneric(strategyOrBundleId, market, user, ratioState, targetRatio, triggerRatio) {
286
+ const isBundle = true;
287
+ const subData = subDataService.sparkGenericLiquidationProtectionSubData.encode(targetRatio, ratioState, market, user);
288
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
289
+ return [strategyOrBundleId, isBundle, triggerData, subData];
290
+ },
291
+ leverageManagementOnPriceGeneric(strategyOrBundleId, price, ratioState, collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user) {
292
+ const isBundle = true;
293
+ const subData = subDataService.sparkLeverageManagementOnPriceGenericSubData.encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user);
294
+ const triggerData = triggerService.sparkQuotePriceTrigger.encode(collAsset, debtAsset, price, ratioState);
295
+ return [strategyOrBundleId, isBundle, triggerData, subData];
296
+ },
279
297
  collateralSwitch(strategyOrBundleId, fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, baseTokenAddress, quoteTokenAddress, price, state) {
280
298
  const isBundle = false;
281
299
  const subDataEncoded = subDataService.sparkCollateralSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch);
282
300
  const triggerDataEncoded = triggerService.sparkQuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
283
301
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
284
302
  },
303
+ collateralSwitchGeneric(strategyOrBundleId, fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user, baseTokenAddress, quoteTokenAddress, price, state) {
304
+ const isBundle = false;
305
+ const subDataEncoded = subDataService.sparkGenericFLCollateralSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user);
306
+ const triggerDataEncoded = triggerService.sparkQuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
307
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
308
+ },
285
309
  };
286
310
  exports.crvUSDEncode = {
287
311
  leverageManagement(owner, controllerAddr, ratioState, targetRatio, triggerRatio, collTokenAddr, crvUSDAddr) {
@@ -1478,6 +1478,224 @@ describe('Feature: strategySubService.ts', () => {
1478
1478
  });
1479
1479
  });
1480
1480
  });
1481
+ describe('leverageManagementGeneric()', () => {
1482
+ const examples = [
1483
+ [
1484
+ [
1485
+ enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY,
1486
+ true,
1487
+ ['0x000000000000000000000000123456789012345678901234567890123456789000000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
1488
+ [
1489
+ '0x00000000000000000000000000000000000000000000000018fae27693b40000',
1490
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1491
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1492
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1493
+ ],
1494
+ ],
1495
+ [
1496
+ enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY,
1497
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1498
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1499
+ enums_1.RatioState.UNDER,
1500
+ 180,
1501
+ 140,
1502
+ ],
1503
+ ],
1504
+ [
1505
+ [
1506
+ enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST,
1507
+ true,
1508
+ ['0x000000000000000000000000123456789012345678901234567890123456789000000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee0000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'],
1509
+ [
1510
+ '0x00000000000000000000000000000000000000000000000016345785d8a00000',
1511
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1512
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1513
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1514
+ ],
1515
+ ],
1516
+ [
1517
+ enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST,
1518
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1519
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1520
+ enums_1.RatioState.OVER,
1521
+ 160,
1522
+ 200,
1523
+ ],
1524
+ ],
1525
+ ];
1526
+ examples.forEach(([expected, actual]) => {
1527
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1528
+ (0, chai_1.expect)(strategySubService_1.sparkEncode.leverageManagementGeneric(...actual)).to.eql(expected);
1529
+ });
1530
+ });
1531
+ });
1532
+ describe('liquidationProtection()', () => {
1533
+ const examples = [
1534
+ [
1535
+ [
1536
+ enums_1.Bundles.MainnetIds.SPARK_SW_LIQUIDATION_PROTECTION,
1537
+ true,
1538
+ ['0x000000000000000000000000123456789012345678901234567890123456789000000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
1539
+ [
1540
+ '0x00000000000000000000000000000000000000000000000018fae27693b40000',
1541
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1542
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1543
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1544
+ ],
1545
+ ],
1546
+ [
1547
+ enums_1.Bundles.MainnetIds.SPARK_SW_LIQUIDATION_PROTECTION,
1548
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1549
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1550
+ enums_1.RatioState.UNDER,
1551
+ 180,
1552
+ 140,
1553
+ ],
1554
+ ],
1555
+ [
1556
+ [
1557
+ enums_1.Bundles.MainnetIds.SPARK_SW_LIQUIDATION_PROTECTION,
1558
+ true,
1559
+ ['0x000000000000000000000000123456789012345678901234567890123456789000000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee0000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'],
1560
+ [
1561
+ '0x00000000000000000000000000000000000000000000000016345785d8a00000',
1562
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1563
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1564
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1565
+ ],
1566
+ ],
1567
+ [
1568
+ enums_1.Bundles.MainnetIds.SPARK_SW_LIQUIDATION_PROTECTION,
1569
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1570
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1571
+ enums_1.RatioState.OVER,
1572
+ 160,
1573
+ 200,
1574
+ ],
1575
+ ],
1576
+ ];
1577
+ examples.forEach(([expected, actual]) => {
1578
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1579
+ (0, chai_1.expect)(strategySubService_1.sparkEncode.liquidationProtection(...actual)).to.eql(expected);
1580
+ });
1581
+ });
1582
+ });
1583
+ describe('liquidationProtectionGeneric()', () => {
1584
+ const examples = [
1585
+ [
1586
+ [
1587
+ enums_1.Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION,
1588
+ true,
1589
+ ['0x000000000000000000000000123456789012345678901234567890123456789000000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee000000000000000000000000000000000000000000000000136dcc951d8c00000000000000000000000000000000000000000000000000000000000000000001'],
1590
+ [
1591
+ '0x00000000000000000000000000000000000000000000000018fae27693b40000',
1592
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1593
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1594
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1595
+ ],
1596
+ ],
1597
+ [
1598
+ enums_1.Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION,
1599
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1600
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1601
+ enums_1.RatioState.UNDER,
1602
+ 180,
1603
+ 140,
1604
+ ],
1605
+ ],
1606
+ [
1607
+ [
1608
+ enums_1.Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION,
1609
+ true,
1610
+ ['0x000000000000000000000000123456789012345678901234567890123456789000000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee0000000000000000000000000000000000000000000000001bc16d674ec800000000000000000000000000000000000000000000000000000000000000000000'],
1611
+ [
1612
+ '0x00000000000000000000000000000000000000000000000016345785d8a00000',
1613
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1614
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1615
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1616
+ ],
1617
+ ],
1618
+ [
1619
+ enums_1.Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION,
1620
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1621
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1622
+ enums_1.RatioState.OVER,
1623
+ 160,
1624
+ 200,
1625
+ ],
1626
+ ],
1627
+ ];
1628
+ examples.forEach(([expected, actual]) => {
1629
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1630
+ (0, chai_1.expect)(strategySubService_1.sparkEncode.liquidationProtectionGeneric(...actual)).to.eql(expected);
1631
+ });
1632
+ });
1633
+ });
1634
+ describe('leverageManagementOnPriceGeneric()', () => {
1635
+ const examples = [
1636
+ [
1637
+ [
1638
+ enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY_ON_PRICE,
1639
+ true,
1640
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000003a352944000000000000000000000000000000000000000000000000000000000000000001'],
1641
+ [
1642
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1643
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1644
+ '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
1645
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
1646
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1647
+ '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
1648
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1649
+ ],
1650
+ ],
1651
+ [
1652
+ enums_1.Bundles.MainnetIds.SPARK_EOA_REPAY_ON_PRICE,
1653
+ 2500,
1654
+ enums_1.RatioState.UNDER,
1655
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
1656
+ 0,
1657
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('USDC', enums_1.ChainId.Ethereum).address),
1658
+ 1,
1659
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1660
+ 200,
1661
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1662
+ ],
1663
+ ],
1664
+ [
1665
+ [
1666
+ enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST_ON_PRICE,
1667
+ true,
1668
+ ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000417bce6c8000000000000000000000000000000000000000000000000000000000000000000'],
1669
+ [
1670
+ '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
1671
+ '0x0000000000000000000000000000000000000000000000000000000000000002',
1672
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
1673
+ '0x0000000000000000000000000000000000000000000000000000000000000004',
1674
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1675
+ '0x00000000000000000000000000000000000000000000000022b1c8c1227a0000',
1676
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1677
+ ],
1678
+ ],
1679
+ [
1680
+ enums_1.Bundles.MainnetIds.SPARK_EOA_BOOST_ON_PRICE,
1681
+ 45000,
1682
+ enums_1.RatioState.OVER,
1683
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WBTC', enums_1.ChainId.Ethereum).address),
1684
+ 2,
1685
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('DAI', enums_1.ChainId.Ethereum).address),
1686
+ 4,
1687
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1688
+ 250,
1689
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1690
+ ],
1691
+ ],
1692
+ ];
1693
+ examples.forEach(([expected, actual]) => {
1694
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1695
+ (0, chai_1.expect)(strategySubService_1.sparkEncode.leverageManagementOnPriceGeneric(...actual)).to.eql(expected);
1696
+ });
1697
+ });
1698
+ });
1481
1699
  describe('closeOnPrice()', () => {
1482
1700
  const examples = [
1483
1701
  [
@@ -1516,6 +1734,44 @@ describe('Feature: strategySubService.ts', () => {
1516
1734
  });
1517
1735
  });
1518
1736
  });
1737
+ describe('closeOnPriceGeneric()', () => {
1738
+ const examples = [
1739
+ [
1740
+ [
1741
+ enums_1.Bundles.MainnetIds.SPARK_EOA_CLOSE,
1742
+ true,
1743
+ ['0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c5990000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000000000000000000000000000000003a35294400000000000000000000000000000000000000000000000000000000574fbde6000'],
1744
+ [
1745
+ '0x0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599',
1746
+ '0x0000000000000000000000000000000000000000000000000000000000000002',
1747
+ '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
1748
+ '0x0000000000000000000000000000000000000000000000000000000000000004',
1749
+ '0x0000000000000000000000000000000000000000000000000000000000000005',
1750
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1751
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1752
+ ],
1753
+ ],
1754
+ [
1755
+ enums_1.Bundles.MainnetIds.SPARK_EOA_CLOSE,
1756
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WBTC', enums_1.ChainId.Ethereum).address),
1757
+ 2,
1758
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('DAI', enums_1.ChainId.Ethereum).address),
1759
+ 4,
1760
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1761
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1762
+ 40000,
1763
+ enums_1.CloseToAssetType.DEBT,
1764
+ 60000,
1765
+ enums_1.CloseToAssetType.COLLATERAL,
1766
+ ],
1767
+ ],
1768
+ ];
1769
+ examples.forEach(([expected, actual]) => {
1770
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1771
+ (0, chai_1.expect)(strategySubService_1.sparkEncode.closeOnPriceGeneric(...actual)).to.eql(expected);
1772
+ });
1773
+ });
1774
+ });
1519
1775
  describe('collateralSwitch()', () => {
1520
1776
  const examples = [
1521
1777
  // WETH -> cbBTC, price 0.025 WETH/cbBTC, state UNDER
@@ -1615,6 +1871,45 @@ describe('Feature: strategySubService.ts', () => {
1615
1871
  });
1616
1872
  });
1617
1873
  });
1874
+ describe('collateralSwitchGeneric()', () => {
1875
+ const examples = [
1876
+ [
1877
+ [
1878
+ enums_1.Strategies.MainnetIds.SPARK_GENERIC_FL_COLLATERAL_SWITCH,
1879
+ false,
1880
+ ['0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf00000000000000000000000000000000000000000000000000000000002625a00000000000000000000000000000000000000000000000000000000000000001'],
1881
+ [
1882
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
1883
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
1884
+ '0x000000000000000000000000cbb7c0000ab88b473b1f5afd9ef808440eed33bf',
1885
+ '0x0000000000000000000000000000000000000000000000000000000000000007',
1886
+ '0x00000000000000000000000002c3ea4e34c0cbd694d2adfa2c690eecbc1793ee',
1887
+ '0x0000000000000000000000000000000000000000000000008ac7230489e80000',
1888
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
1889
+ ],
1890
+ ],
1891
+ [
1892
+ enums_1.Strategies.MainnetIds.SPARK_GENERIC_FL_COLLATERAL_SWITCH,
1893
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
1894
+ 0,
1895
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('cbBTC', enums_1.ChainId.Ethereum).address),
1896
+ 7,
1897
+ web3Utils.toChecksumAddress('0x02C3eA4e34C0cBd694D2adFa2c690EECbC1793eE'),
1898
+ '10000000000000000000',
1899
+ web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890'),
1900
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('WETH', enums_1.ChainId.Ethereum).address),
1901
+ web3Utils.toChecksumAddress((0, tokens_1.getAssetInfo)('cbBTC', enums_1.ChainId.Ethereum).address),
1902
+ 0.025,
1903
+ enums_1.RatioState.UNDER,
1904
+ ],
1905
+ ],
1906
+ ];
1907
+ examples.forEach(([expected, actual]) => {
1908
+ it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
1909
+ (0, chai_1.expect)(strategySubService_1.sparkEncode.collateralSwitchGeneric(...actual)).to.eql(expected);
1910
+ });
1911
+ });
1912
+ });
1618
1913
  });
1619
1914
  describe('When testing strategySubService.aaveV4Encode', () => {
1620
1915
  describe('leverageManagement()', () => {