@defisaver/automation-sdk 3.3.18 → 3.3.19

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.
@@ -104,6 +104,7 @@ export var Strategies;
104
104
  MainnetIds[MainnetIds["AAVE_V4_COLLATERAL_SWITCH"] = 154] = "AAVE_V4_COLLATERAL_SWITCH";
105
105
  MainnetIds[MainnetIds["AAVE_V4_COLLATERAL_SWITCH_EOA"] = 155] = "AAVE_V4_COLLATERAL_SWITCH_EOA";
106
106
  MainnetIds[MainnetIds["SPARK_COLLATERAL_SWITCH"] = 156] = "SPARK_COLLATERAL_SWITCH";
107
+ MainnetIds[MainnetIds["SPARK_GENERIC_FL_COLLATERAL_SWITCH"] = 167] = "SPARK_GENERIC_FL_COLLATERAL_SWITCH";
107
108
  })(MainnetIds = Strategies.MainnetIds || (Strategies.MainnetIds = {}));
108
109
  let OptimismIds;
109
110
  (function (OptimismIds) {
@@ -264,6 +265,12 @@ export var Bundles;
264
265
  MainnetIds[MainnetIds["MORPHO_BLUE_EOA_BOOST_ON_PRICE"] = 85] = "MORPHO_BLUE_EOA_BOOST_ON_PRICE";
265
266
  MainnetIds[MainnetIds["MORPHO_BLUE_EOA_REPAY_ON_PRICE"] = 86] = "MORPHO_BLUE_EOA_REPAY_ON_PRICE";
266
267
  MainnetIds[MainnetIds["MORPHO_BLUE_EOA_CLOSE"] = 87] = "MORPHO_BLUE_EOA_CLOSE";
268
+ MainnetIds[MainnetIds["SPARK_EOA_REPAY"] = 88] = "SPARK_EOA_REPAY";
269
+ MainnetIds[MainnetIds["SPARK_EOA_BOOST"] = 89] = "SPARK_EOA_BOOST";
270
+ MainnetIds[MainnetIds["SPARK_EOA_REPAY_ON_PRICE"] = 90] = "SPARK_EOA_REPAY_ON_PRICE";
271
+ MainnetIds[MainnetIds["SPARK_EOA_BOOST_ON_PRICE"] = 91] = "SPARK_EOA_BOOST_ON_PRICE";
272
+ MainnetIds[MainnetIds["SPARK_EOA_CLOSE"] = 92] = "SPARK_EOA_CLOSE";
273
+ MainnetIds[MainnetIds["SPARK_EOA_LIQUIDATION_PROTECTION"] = 93] = "SPARK_EOA_LIQUIDATION_PROTECTION";
267
274
  })(MainnetIds = Bundles.MainnetIds || (Bundles.MainnetIds = {}));
268
275
  let OptimismIds;
269
276
  (function (OptimismIds) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/automation-sdk",
3
- "version": "3.3.18",
3
+ "version": "3.3.19",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -140,6 +140,11 @@ export const MAINNET_STRATEGIES_INFO: MainnetStrategiesInfo = {
140
140
  strategyId: Strategies.Identifiers.CollateralSwitch,
141
141
  protocol: PROTOCOLS.Spark,
142
142
  },
143
+ [Strategies.MainnetIds.SPARK_GENERIC_FL_COLLATERAL_SWITCH]: {
144
+ strategyOrBundleId: Strategies.MainnetIds.SPARK_GENERIC_FL_COLLATERAL_SWITCH,
145
+ strategyId: Strategies.Identifiers.EoaCollateralSwitch,
146
+ protocol: PROTOCOLS.Spark,
147
+ },
143
148
  };
144
149
 
145
150
  export const OPTIMISM_STRATEGIES_INFO: OptimismStrategiesInfo = {
@@ -573,6 +578,31 @@ export const MAINNET_BUNDLES_INFO: MainnetBundleInfo = {
573
578
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
574
579
  protocol: PROTOCOLS.AaveV4,
575
580
  },
581
+ [Bundles.MainnetIds.SPARK_EOA_REPAY]: {
582
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_EOA_REPAY,
583
+ strategyId: Strategies.Identifiers.EoaRepay,
584
+ protocol: PROTOCOLS.Spark,
585
+ },
586
+ [Bundles.MainnetIds.SPARK_EOA_BOOST]: {
587
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_EOA_BOOST,
588
+ strategyId: Strategies.Identifiers.EoaBoost,
589
+ protocol: PROTOCOLS.Spark,
590
+ },
591
+ [Bundles.MainnetIds.SPARK_EOA_CLOSE]: {
592
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_EOA_CLOSE,
593
+ strategyId: Strategies.Identifiers.EoaCloseOnPrice,
594
+ protocol: PROTOCOLS.Spark,
595
+ },
596
+ [Bundles.MainnetIds.SPARK_EOA_REPAY_ON_PRICE]: {
597
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_EOA_REPAY_ON_PRICE,
598
+ strategyId: Strategies.Identifiers.EoaRepayOnPrice,
599
+ protocol: PROTOCOLS.Spark,
600
+ },
601
+ [Bundles.MainnetIds.SPARK_EOA_BOOST_ON_PRICE]: {
602
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_EOA_BOOST_ON_PRICE,
603
+ strategyId: Strategies.Identifiers.EoaBoostOnPrice,
604
+ protocol: PROTOCOLS.Spark,
605
+ },
576
606
  [Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION]: {
577
607
  strategyOrBundleId: Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION,
578
608
  strategyId: Strategies.Identifiers.LiquidationProtection,
@@ -649,6 +679,11 @@ export const MAINNET_BUNDLES_INFO: MainnetBundleInfo = {
649
679
  strategyId: Strategies.Identifiers.EoaCloseOnPrice,
650
680
  protocol: PROTOCOLS.MorphoBlue,
651
681
  },
682
+ [Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION]: {
683
+ strategyOrBundleId: Bundles.MainnetIds.SPARK_EOA_LIQUIDATION_PROTECTION,
684
+ strategyId: Strategies.Identifiers.EoaLiquidationProtection,
685
+ protocol: PROTOCOLS.Spark,
686
+ },
652
687
  };
653
688
 
654
689
  export const OPTIMISM_BUNDLES_INFO: OptimismBundleInfo = {
@@ -1,10 +1,11 @@
1
1
  import Web3 from 'web3';
2
2
  import { expect } from 'chai';
3
+ import { omit } from 'lodash';
3
4
  import { getAssetInfo } from '@defisaver/tokens';
4
5
  import { PastEventOptions } from 'web3-eth-contract';
5
6
 
6
7
  import { ChainId } from '../types/enums';
7
- import type { BlockNumber, Multicall } from '../types';
8
+ import type { BlockNumber, Multicall, PlaceholderType } from '../types';
8
9
  import { Contract } from '../types';
9
10
  import type { Erc20 } from '../types/contracts/generated';
10
11
 
@@ -115,7 +116,6 @@ describe('Feature: ethereumService.ts', () => {
115
116
  'address': '0x5f98805A4E8be255a32880FDeC7F6728C6568bA0',
116
117
  'blockHash': '0xb92cab2569456dbfbdb853d2c67d72c9a7580543dbcb55d483a77322b40755a4',
117
118
  'blockNumber': 15166163,
118
- 'blockTimestamp': '0x62d53ad8',
119
119
  'event': 'Transfer',
120
120
  'id': 'log_e2258e3a',
121
121
  'logIndex': 385,
@@ -142,7 +142,7 @@ describe('Feature: ethereumService.ts', () => {
142
142
  },
143
143
  ],
144
144
  [
145
- makeErc20Contract(Web3_1, getAssetInfo('LUSD').address, ChainId.Ethereum),
145
+ { ...makeErc20Contract(Web3_1, getAssetInfo('LUSD').address, ChainId.Ethereum), createdBlock: 15166163 },
146
146
  null,
147
147
  'Transfer',
148
148
  {
@@ -161,7 +161,6 @@ describe('Feature: ethereumService.ts', () => {
161
161
  'address': '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',
162
162
  'blockHash': '0xacb0213af63b4c17c436f084a96d1ac385641a59a9a4cf014ae3337cbe545aa7',
163
163
  'blockNumber': 5353002,
164
- 'blockTimestamp': '0x624c1a5b',
165
164
  'event': 'Transfer',
166
165
  'id': 'log_f49645b8',
167
166
  'logIndex': 1,
@@ -207,7 +206,6 @@ describe('Feature: ethereumService.ts', () => {
207
206
  'address': '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',
208
207
  'blockHash': '0xacb0213af63b4c17c436f084a96d1ac385641a59a9a4cf014ae3337cbe545aa7',
209
208
  'blockNumber': 5353002,
210
- 'blockTimestamp': '0x624c1a5b',
211
209
  'event': 'Transfer',
212
210
  'id': 'log_f49645b8',
213
211
  'logIndex': 1,
@@ -251,9 +249,8 @@ describe('Feature: ethereumService.ts', () => {
251
249
 
252
250
  examples.forEach(([expected, actual]) => {
253
251
  it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, async () => {
254
- const data = await getEventsFromContract(...actual);
255
- console.log(data);
256
- expect(await getEventsFromContract(...actual)).to.eql(expected);
252
+ const events = await getEventsFromContract(...actual);
253
+ expect(events.map((event: PlaceholderType) => omit(event, 'blockTimestamp'))).to.eql(expected);
257
254
  });
258
255
  });
259
256
  });
@@ -8,7 +8,7 @@ import type {
8
8
  BundleInfoUnion, StrategyInfoUnion,
9
9
  } from '../types';
10
10
  import {
11
- ChainId, ProtocolIdentifiers, RatioState, Strategies,
11
+ ChainId, ProtocolIdentifiers, Strategies,
12
12
  } from '../types/enums';
13
13
 
14
14
  import {
@@ -448,11 +448,17 @@ function parseAaveV3CollateralSwitch(position: Position.Automated, parseData: Pa
448
448
  function parseSparkCollateralSwitch(position: Position.Automated, parseData: ParseData): Position.Automated {
449
449
  const _position = cloneDeep(position);
450
450
  const { subStruct } = parseData.subscriptionEventData;
451
+ const isEOA = _position.strategy.strategyId.includes('eoa');
451
452
  const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
452
- const subData = subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
453
+ const subData = isEOA
454
+ ? subDataService.sparkGenericFLCollateralSwitchSubData.decode(subStruct.subData)
455
+ : subDataService.sparkCollateralSwitchSubData.decode(subStruct.subData);
453
456
  _position.strategyData.decoded.triggerData = triggerData;
454
457
  _position.strategyData.decoded.subData = subData;
455
458
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
459
+ _position.strategy.strategyId = isEOA
460
+ ? Strategies.Identifiers.EoaCollateralSwitch
461
+ : Strategies.Identifiers.CollateralSwitch;
456
462
  return _position;
457
463
  }
458
464
 
@@ -987,16 +993,19 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
987
993
 
988
994
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
989
995
  const { isEnabled } = parseData.strategiesSubsData;
996
+ const isEOA = _position.strategy.strategyId.includes('eoa');
990
997
 
991
998
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
992
- const subData = subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
999
+ const subData = isEOA
1000
+ ? subDataService.sparkGenericLeverageManagementSubData.decode(subStruct.subData)
1001
+ : subDataService.legacySparkLeverageManagementSubData.decode(subStruct.subData);
993
1002
 
994
1003
  _position.strategyData.decoded.triggerData = triggerData;
995
1004
  _position.strategyData.decoded.subData = subData;
996
1005
 
997
1006
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, triggerData.market);
998
1007
 
999
- const isRepay = _position.strategy.strategyId === Strategies.Identifiers.Repay;
1008
+ const isRepay = [Strategies.Identifiers.Repay, Strategies.Identifiers.EoaRepay].includes(_position.strategy.strategyId as Strategies.Identifiers);
1000
1009
 
1001
1010
  if (isRepay) {
1002
1011
  _position.specific = {
@@ -1004,7 +1013,7 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
1004
1013
  targetRepayRatio: subData.targetRatio,
1005
1014
  repayEnabled: isEnabled,
1006
1015
  subId1: Number(subId),
1007
- mergeWithId: Strategies.Identifiers.Boost,
1016
+ mergeWithId: isEOA ? Strategies.Identifiers.EoaBoost : Strategies.Identifiers.Boost,
1008
1017
  subHashRepay: subHash,
1009
1018
  };
1010
1019
  } else {
@@ -1013,12 +1022,14 @@ function parseSparkLeverageManagement(position: Position.Automated, parseData: P
1013
1022
  targetBoostRatio: subData.targetRatio,
1014
1023
  boostEnabled: isEnabled,
1015
1024
  subId2: Number(subId),
1016
- mergeId: Strategies.Identifiers.Boost,
1025
+ mergeId: isEOA ? Strategies.Identifiers.EoaBoost : Strategies.Identifiers.Boost,
1017
1026
  subHashBoost: subHash,
1018
1027
  };
1019
1028
  }
1020
1029
 
1021
- _position.strategy.strategyId = Strategies.IdOverrides.LeverageManagement;
1030
+ _position.strategy.strategyId = isEOA
1031
+ ? Strategies.IdOverrides.EoaLeverageManagement
1032
+ : Strategies.IdOverrides.LeverageManagement;
1022
1033
 
1023
1034
  return _position;
1024
1035
  }
@@ -1028,9 +1039,12 @@ function parseSparkLiquidationProtection(position: Position.Automated, parseData
1028
1039
 
1029
1040
  const { subStruct, subId, subHash } = parseData.subscriptionEventData;
1030
1041
  const { isEnabled } = parseData.strategiesSubsData;
1042
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1031
1043
 
1032
1044
  const triggerData = triggerService.sparkRatioTrigger.decode(subStruct.triggerData);
1033
- const subData = subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
1045
+ const subData = isEOA
1046
+ ? subDataService.sparkGenericLiquidationProtectionSubData.decode(subStruct.subData)
1047
+ : subDataService.sparkLiquidationProtectionSubData.decode(subStruct.subData);
1034
1048
 
1035
1049
  _position.strategyData.decoded.triggerData = triggerData;
1036
1050
  _position.strategyData.decoded.subData = subData;
@@ -1045,7 +1059,9 @@ function parseSparkLiquidationProtection(position: Position.Automated, parseData
1045
1059
  subHashRepay: subHash,
1046
1060
  };
1047
1061
 
1048
- _position.strategy.strategyId = Strategies.IdOverrides.LiquidationProtection;
1062
+ _position.strategy.strategyId = isEOA
1063
+ ? Strategies.IdOverrides.EoaLiquidationProtection
1064
+ : Strategies.IdOverrides.LiquidationProtection;
1049
1065
 
1050
1066
  return _position;
1051
1067
  }
@@ -1054,9 +1070,12 @@ function parseSparkLiquidationProtection(position: Position.Automated, parseData
1054
1070
  function parseSparkLeverageManagementOnPrice(position: Position.Automated, parseData: ParseData): Position.Automated {
1055
1071
  const _position = cloneDeep(position);
1056
1072
  const { subStruct } = parseData.subscriptionEventData;
1073
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1057
1074
 
1058
1075
  const triggerData = triggerService.sparkQuotePriceTrigger.decode(subStruct.triggerData);
1059
- const subData = subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
1076
+ const subData = isEOA
1077
+ ? subDataService.sparkLeverageManagementOnPriceGenericSubData.decode(subStruct.subData)
1078
+ : subDataService.sparkLeverageManagementOnPriceSubData.decode(subStruct.subData);
1060
1079
 
1061
1080
  _position.strategyData.decoded.triggerData = triggerData;
1062
1081
  _position.strategyData.decoded.subData = subData;
@@ -1077,6 +1096,10 @@ function parseSparkLeverageManagementOnPrice(position: Position.Automated, parse
1077
1096
  ratioState: triggerData.ratioState,
1078
1097
  };
1079
1098
 
1099
+ _position.strategy.strategyId = isEOA
1100
+ ? Strategies.IdOverrides.EoaLeverageManagementOnPrice
1101
+ : Strategies.IdOverrides.LeverageManagementOnPrice;
1102
+
1080
1103
  return _position;
1081
1104
  }
1082
1105
 
@@ -1087,10 +1110,13 @@ function parseSparkCloseOnPrice(position: Position.Automated, parseData: ParseDa
1087
1110
  const triggerData = triggerService.sparkQuotePriceRangeTrigger.decode(subStruct.triggerData);
1088
1111
  const subData = subDataService.sparkCloseGenericSubData.decode(subStruct.subData);
1089
1112
 
1113
+ const isEOA = _position.strategy.strategyId.includes('eoa');
1114
+
1090
1115
  _position.strategyData.decoded.triggerData = triggerData;
1091
1116
  _position.strategyData.decoded.subData = subData;
1092
1117
 
1093
1118
  _position.positionId = getPositionId(_position.chainId, _position.protocol.id, _position.owner, subData.marketAddr);
1119
+ _position.strategy.strategyId = isEOA ? Strategies.Identifiers.EoaCloseOnPrice : Strategies.Identifiers.CloseOnPrice;
1094
1120
 
1095
1121
  const { takeProfitType, stopLossType } = getStopLossAndTakeProfitTypeByCloseStrategyType(+subData.closeType);
1096
1122
 
@@ -1625,8 +1651,15 @@ const parsingMethodsMapping: StrategiesToProtocolVersionMapping = {
1625
1651
  [Strategies.Identifiers.RepayOnPrice]: parseSparkLeverageManagementOnPrice,
1626
1652
  [Strategies.Identifiers.BoostOnPrice]: parseSparkLeverageManagementOnPrice,
1627
1653
  [Strategies.Identifiers.CloseOnPrice]: parseSparkCloseOnPrice,
1654
+ [Strategies.Identifiers.EoaRepay]: parseSparkLeverageManagement,
1655
+ [Strategies.Identifiers.EoaBoost]: parseSparkLeverageManagement,
1656
+ [Strategies.Identifiers.EoaRepayOnPrice]: parseSparkLeverageManagementOnPrice,
1657
+ [Strategies.Identifiers.EoaBoostOnPrice]: parseSparkLeverageManagementOnPrice,
1658
+ [Strategies.Identifiers.EoaCloseOnPrice]: parseSparkCloseOnPrice,
1628
1659
  [Strategies.Identifiers.CollateralSwitch]: parseSparkCollateralSwitch,
1660
+ [Strategies.Identifiers.EoaCollateralSwitch]: parseSparkCollateralSwitch,
1629
1661
  [Strategies.Identifiers.LiquidationProtection]: parseSparkLiquidationProtection,
1662
+ [Strategies.Identifiers.EoaLiquidationProtection]: parseSparkLiquidationProtection,
1630
1663
  },
1631
1664
  [ProtocolIdentifiers.StrategiesAutomation.CrvUSD]: {
1632
1665
  [Strategies.Identifiers.Repay]: parseCrvUSDLeverageManagement,