@defisaver/automation-sdk 3.3.17 → 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.
Files changed (38) hide show
  1. package/cjs/constants/index.js +170 -0
  2. package/cjs/index.d.ts +2 -2
  3. package/cjs/index.js +5 -2
  4. package/cjs/services/ethereumService.test.js +4 -7
  5. package/cjs/services/strategiesService.js +195 -15
  6. package/cjs/services/strategySubService.d.ts +22 -17
  7. package/cjs/services/strategySubService.js +92 -28
  8. package/cjs/services/strategySubService.test.js +297 -40
  9. package/cjs/services/subDataService.d.ts +108 -20
  10. package/cjs/services/subDataService.js +97 -79
  11. package/cjs/services/subDataService.test.js +479 -174
  12. package/cjs/types/enums.d.ts +44 -6
  13. package/cjs/types/enums.js +38 -0
  14. package/esm/constants/index.js +170 -0
  15. package/esm/index.d.ts +2 -2
  16. package/esm/index.js +5 -2
  17. package/esm/services/ethereumService.test.js +4 -7
  18. package/esm/services/strategiesService.js +195 -15
  19. package/esm/services/strategySubService.d.ts +22 -17
  20. package/esm/services/strategySubService.js +91 -27
  21. package/esm/services/strategySubService.test.js +298 -38
  22. package/esm/services/subDataService.d.ts +108 -20
  23. package/esm/services/subDataService.js +95 -77
  24. package/esm/services/subDataService.test.js +480 -172
  25. package/esm/types/enums.d.ts +44 -6
  26. package/esm/types/enums.js +38 -0
  27. package/package.json +1 -1
  28. package/src/constants/index.ts +172 -1
  29. package/src/index.ts +22 -6
  30. package/src/services/ethereumService.test.ts +5 -8
  31. package/src/services/strategiesService.ts +262 -16
  32. package/src/services/strategySubService.test.ts +384 -46
  33. package/src/services/strategySubService.ts +251 -40
  34. package/src/services/subDataService.test.ts +639 -231
  35. package/src/services/subDataService.ts +149 -106
  36. package/src/services/utils.test.ts +1 -1
  37. package/src/services/utils.ts +3 -1
  38. package/src/types/enums.ts +38 -2
@@ -1,22 +1,25 @@
1
- import Dec from 'decimal.js';
2
1
  import { getAssetInfo } from '@defisaver/tokens';
2
+ import Dec from 'decimal.js';
3
3
 
4
- import type { OrderType } from '../types/enums';
4
+ import { STRATEGY_IDS } from '../constants';
5
5
  import {
6
- CloseToAssetType,
7
6
  Bundles,
8
7
  ChainId,
8
+ CloseToAssetType,
9
9
  RatioState,
10
10
  Strategies,
11
11
  } from '../types/enums';
12
12
  import type { EthereumAddress, StrategyOrBundleIds } from '../types';
13
13
 
14
- import { STRATEGY_IDS } from '../constants';
14
+ import type { OrderType } from '../types/enums';
15
15
 
16
16
  import * as subDataService from './subDataService';
17
17
  import * as triggerService from './triggerService';
18
18
  import {
19
- compareAddresses, getCloseStrategyType, requireAddress, requireAddresses,
19
+ compareAddresses,
20
+ getCloseStrategyType,
21
+ requireAddress,
22
+ requireAddresses,
20
23
  } from './utils';
21
24
 
22
25
  export const makerEncode = {
@@ -81,7 +84,7 @@ export const makerEncode = {
81
84
 
82
85
  return [strategyOrBundleId, isBundle, triggerData, subData];
83
86
  },
84
- leverageManagementWithoutSubProxy(
87
+ leverageManagement(
85
88
  vaultId: number,
86
89
  triggerRatio: number,
87
90
  targetRatio: number,
@@ -93,7 +96,27 @@ export const makerEncode = {
93
96
 
94
97
  const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
95
98
 
96
- const subData = subDataService.makerLeverageManagementWithoutSubProxy.encode(vaultId, targetRatio, daiAddr);
99
+ const subData = subDataService.makerLeverageManagementSubData.encode(vaultId, targetRatio, daiAddr);
100
+
101
+ return [
102
+ bundleId,
103
+ true,
104
+ triggerData,
105
+ subData,
106
+ ];
107
+ },
108
+
109
+ liquidationProtection(
110
+ vaultId: number,
111
+ triggerRatio: number,
112
+ targetRatio: number,
113
+ ratioState: RatioState,
114
+ daiAddr?: EthereumAddress,
115
+ ) {
116
+ const bundleId = Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION;
117
+
118
+ const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
119
+ const subData = subDataService.makerLiquidationProtectionSubData.encode(vaultId, targetRatio, daiAddr);
97
120
 
98
121
  return [
99
122
  bundleId,
@@ -162,7 +185,7 @@ export const liquityEncode = {
162
185
 
163
186
  return [strategyId, isBundle, triggerData, subData];
164
187
  },
165
- leverageManagementWithoutSubProxy(
188
+ leverageManagement(
166
189
  strategyOrBundleId: number,
167
190
  user: EthereumAddress,
168
191
  ratioState: RatioState,
@@ -171,7 +194,7 @@ export const liquityEncode = {
171
194
  ) {
172
195
  const isBundle = true;
173
196
 
174
- const subData = subDataService.liquityLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
197
+ const subData = subDataService.liquityLeverageManagementSubData.encode(targetRatio, ratioState);
175
198
  const triggerData = triggerService.liquityRatioTrigger.encode(user, triggerRatio, ratioState);
176
199
 
177
200
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -223,14 +246,8 @@ export const liquityEncode = {
223
246
  },
224
247
  };
225
248
 
226
- export const chickenBondsEncode = {
227
- rebond(bondId: number) {
228
- return subDataService.cBondsRebondSubData.encode(bondId);
229
- },
230
- };
231
-
232
249
  export const aaveV2Encode = {
233
- leverageManagementWithoutSubProxy(
250
+ leverageManagement(
234
251
  strategyOrBundleId: number,
235
252
  market: EthereumAddress,
236
253
  user: EthereumAddress,
@@ -240,7 +257,7 @@ export const aaveV2Encode = {
240
257
  ) {
241
258
  const isBundle = true;
242
259
 
243
- const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
260
+ const subData = subDataService.aaveV2LeverageManagementSubData.encode(market, targetRatio, ratioState);
244
261
  const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
245
262
 
246
263
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -314,7 +331,7 @@ export const aaveV3Encode = {
314
331
 
315
332
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
316
333
  },
317
- leverageManagementWithoutSubProxy(
334
+ leverageManagement(
318
335
  strategyOrBundleId: number,
319
336
  market: EthereumAddress,
320
337
  user: EthereumAddress,
@@ -325,7 +342,7 @@ export const aaveV3Encode = {
325
342
  ) {
326
343
  const isBundle = true;
327
344
 
328
- const subData = subDataService.aaveV3LeverageManagementSubDataWithoutSubProxy.encode(
345
+ const subData = subDataService.aaveV3LeverageManagementSubData.encode(
329
346
  targetRatio,
330
347
  ratioState,
331
348
  market,
@@ -337,6 +354,28 @@ export const aaveV3Encode = {
337
354
  return [strategyOrBundleId, isBundle, triggerData, subData];
338
355
  },
339
356
 
357
+ liquidationProtection(
358
+ strategyOrBundleId: number,
359
+ market: EthereumAddress,
360
+ user: EthereumAddress,
361
+ ratioState: RatioState,
362
+ targetRatio: number,
363
+ triggerRatio: number,
364
+ ) {
365
+ const isBundle = true;
366
+
367
+ const subData = subDataService.aaveV3LiquidationProtectionSubData.encode(
368
+ targetRatio,
369
+ ratioState,
370
+ market,
371
+ user,
372
+ true, // isGeneric
373
+ );
374
+ const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
375
+
376
+ return [strategyOrBundleId, isBundle, triggerData, subData];
377
+ },
378
+
340
379
  leverageManagementOnPriceGeneric(
341
380
  strategyOrBundleId: number,
342
381
  price: number,
@@ -408,7 +447,7 @@ export const aaveV3Encode = {
408
447
  };
409
448
 
410
449
  export const compoundV2Encode = {
411
- leverageManagementWithoutSubProxy(
450
+ leverageManagement(
412
451
  strategyOrBundleId: number,
413
452
  user: EthereumAddress,
414
453
  ratioState: RatioState,
@@ -417,7 +456,7 @@ export const compoundV2Encode = {
417
456
  ) {
418
457
  const isBundle = true;
419
458
 
420
- const subData = subDataService.compoundV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
459
+ const subData = subDataService.compoundV2LeverageManagementSubData.encode(targetRatio, ratioState);
421
460
  const triggerData = triggerService.compoundV2RatioTrigger.encode(user, triggerRatio, ratioState);
422
461
 
423
462
  return [strategyOrBundleId, isBundle, triggerData, subData];
@@ -425,7 +464,7 @@ export const compoundV2Encode = {
425
464
  };
426
465
 
427
466
  export const compoundV3Encode = {
428
- leverageManagementWithoutSubProxy(
467
+ leverageManagement(
429
468
  strategyOrBundleId: number,
430
469
  market: EthereumAddress,
431
470
  baseToken: EthereumAddress,
@@ -436,11 +475,29 @@ export const compoundV3Encode = {
436
475
  ) {
437
476
  const isBundle = true;
438
477
 
439
- const subData = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy.encode(market, baseToken, targetRatio, ratioState);
478
+ const subData = subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, targetRatio, ratioState);
440
479
  const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
441
480
 
442
481
  return [strategyOrBundleId, isBundle, triggerData, subData];
443
482
  },
483
+
484
+ liquidationProtection(
485
+ strategyOrBundleId: number,
486
+ market: EthereumAddress,
487
+ baseToken: EthereumAddress,
488
+ user: EthereumAddress,
489
+ ratioState: RatioState,
490
+ targetRatio: number,
491
+ triggerRatio: number,
492
+ ) {
493
+ const isBundle = true;
494
+
495
+ const subData = subDataService.compoundV3LiquidationProtectionSubData.encode(market, baseToken, targetRatio, ratioState);
496
+ const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
497
+
498
+ return [strategyOrBundleId, isBundle, triggerData, subData];
499
+ },
500
+
444
501
  leverageManagementOnPrice(
445
502
  strategyOrBundleId: number,
446
503
  market: EthereumAddress,
@@ -479,18 +536,6 @@ export const compoundV3Encode = {
479
536
  },
480
537
  };
481
538
 
482
- export const morphoAaveV2Encode = {
483
- leverageManagement(
484
- triggerRepayRatio: number,
485
- triggerBoostRatio: number,
486
- targetBoostRatio: number,
487
- targetRepayRatio: number,
488
- boostEnabled: boolean,
489
- ) {
490
- return subDataService.morphoAaveV2LeverageManagementSubData.encode(triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled);
491
- },
492
- };
493
-
494
539
  export const exchangeEncode = {
495
540
  dca(
496
541
  fromToken: EthereumAddress,
@@ -508,7 +553,7 @@ export const exchangeEncode = {
508
553
 
509
554
  return [strategyId, false, triggerData, subData];
510
555
  },
511
- limitOrderWithoutSubProxy(
556
+ limitOrder(
512
557
  fromToken: EthereumAddress,
513
558
  toToken: EthereumAddress,
514
559
  amount: string,
@@ -520,7 +565,7 @@ export const exchangeEncode = {
520
565
  network: ChainId,
521
566
  ) {
522
567
  requireAddresses([fromToken, toToken]);
523
- const subData = subDataService.exchangeLimitOrderSubDataWithoutSubProxy.encode(fromToken, toToken, amount);
568
+ const subData = subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount);
524
569
  const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
525
570
 
526
571
  const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
@@ -552,6 +597,7 @@ export const sparkEncode = {
552
597
 
553
598
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
554
599
  },
600
+
555
601
  closeOnPriceGeneric(
556
602
  strategyOrBundleId: number,
557
603
  collAsset: EthereumAddress,
@@ -573,7 +619,67 @@ export const sparkEncode = {
573
619
 
574
620
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
575
621
  },
576
- leverageManagementWithoutSubProxy(
622
+
623
+ leverageManagement(
624
+ strategyOrBundleId: number,
625
+ market: EthereumAddress,
626
+ user: EthereumAddress,
627
+ ratioState: RatioState,
628
+ targetRatio: number,
629
+ triggerRatio: number,
630
+ ) {
631
+ const isBundle = true;
632
+
633
+ const subData = subDataService.sparkLeverageManagementSubData.encode(
634
+ targetRatio,
635
+ ratioState,
636
+ );
637
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
638
+
639
+ return [strategyOrBundleId, isBundle, triggerData, subData];
640
+ },
641
+
642
+ liquidationProtection(
643
+ strategyOrBundleId: number,
644
+ market: EthereumAddress,
645
+ user: EthereumAddress,
646
+ ratioState: RatioState,
647
+ targetRatio: number,
648
+ triggerRatio: number,
649
+ ) {
650
+ const isBundle = true;
651
+
652
+ const subData = subDataService.sparkLiquidationProtectionSubData.encode(
653
+ targetRatio,
654
+ ratioState,
655
+ );
656
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
657
+
658
+ return [strategyOrBundleId, isBundle, triggerData, subData];
659
+ },
660
+
661
+ leverageManagementGeneric(
662
+ strategyOrBundleId: number,
663
+ market: EthereumAddress,
664
+ user: EthereumAddress,
665
+ ratioState: RatioState,
666
+ targetRatio: number,
667
+ triggerRatio: number,
668
+ ) {
669
+ const isBundle = true;
670
+
671
+ const subData = subDataService.sparkGenericLeverageManagementSubData.encode(
672
+ targetRatio,
673
+ ratioState,
674
+ market,
675
+ user,
676
+ );
677
+ const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
678
+
679
+ return [strategyOrBundleId, isBundle, triggerData, subData];
680
+ },
681
+
682
+ liquidationProtectionGeneric(
577
683
  strategyOrBundleId: number,
578
684
  market: EthereumAddress,
579
685
  user: EthereumAddress,
@@ -583,14 +689,37 @@ export const sparkEncode = {
583
689
  ) {
584
690
  const isBundle = true;
585
691
 
586
- const subData = subDataService.sparkLeverageManagementSubDataWithoutSubProxy.encode(
692
+ const subData = subDataService.sparkGenericLiquidationProtectionSubData.encode(
587
693
  targetRatio,
588
694
  ratioState,
695
+ market,
696
+ user,
589
697
  );
590
698
  const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
591
699
 
592
700
  return [strategyOrBundleId, isBundle, triggerData, subData];
593
701
  },
702
+
703
+ leverageManagementOnPriceGeneric(
704
+ strategyOrBundleId: number,
705
+ price: number,
706
+ ratioState: RatioState,
707
+ collAsset: EthereumAddress,
708
+ collAssetId: number,
709
+ debtAsset: EthereumAddress,
710
+ debtAssetId: number,
711
+ marketAddr: EthereumAddress,
712
+ targetRatio: number,
713
+ user: EthereumAddress,
714
+ ) {
715
+ const isBundle = true;
716
+ const subData = subDataService.sparkLeverageManagementOnPriceGenericSubData.encode(
717
+ collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user,
718
+ );
719
+ const triggerData = triggerService.sparkQuotePriceTrigger.encode(collAsset, debtAsset, price, ratioState);
720
+ return [strategyOrBundleId, isBundle, triggerData, subData];
721
+ },
722
+
594
723
  collateralSwitch(
595
724
  strategyOrBundleId: number,
596
725
  fromAsset: EthereumAddress,
@@ -612,6 +741,29 @@ export const sparkEncode = {
612
741
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
613
742
  },
614
743
 
744
+ collateralSwitchGeneric(
745
+ strategyOrBundleId: number,
746
+ fromAsset: EthereumAddress,
747
+ fromAssetId: number,
748
+ toAsset: EthereumAddress,
749
+ toAssetId: number,
750
+ marketAddr: EthereumAddress,
751
+ amountToSwitch: string,
752
+ user: EthereumAddress,
753
+ baseTokenAddress: EthereumAddress,
754
+ quoteTokenAddress: EthereumAddress,
755
+ price: number,
756
+ state: RatioState,
757
+ ) {
758
+ const isBundle = false;
759
+
760
+ const subDataEncoded = subDataService.sparkGenericFLCollateralSwitchSubData.encode(
761
+ fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user,
762
+ );
763
+ const triggerDataEncoded = triggerService.sparkQuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
764
+
765
+ return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
766
+ },
615
767
  };
616
768
 
617
769
  export const crvUSDEncode = {
@@ -652,7 +804,7 @@ export const crvUSDEncode = {
652
804
  },
653
805
  };
654
806
 
655
- export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close';
807
+ export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close' | 'liquidationProtection';
656
808
 
657
809
  function getMorphoBlueBundlesIds(network: ChainId) {
658
810
  switch (network) {
@@ -685,6 +837,8 @@ export function getMorphoBlueBundleId(
685
837
  return isEOA ? bundlesIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE : bundlesIds.MORPHO_BLUE_BOOST_ON_PRICE;
686
838
  case 'close':
687
839
  return isEOA ? bundlesIds.MORPHO_BLUE_EOA_CLOSE : bundlesIds.MORPHO_BLUE_CLOSE;
840
+ case 'liquidationProtection':
841
+ return isEOA ? bundlesIds.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION : bundlesIds.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION;
688
842
  default:
689
843
  throw new Error(`Unknown Morpho Blue strategy: ${strategy}`);
690
844
  }
@@ -716,6 +870,31 @@ export const morphoBlueEncode = {
716
870
 
717
871
  return [bundleId, isBundle, triggerData, subData];
718
872
  },
873
+
874
+ liquidationProtection(
875
+ marketId: string,
876
+ loanToken: EthereumAddress,
877
+ collToken: EthereumAddress,
878
+ oracle: EthereumAddress,
879
+ irm: EthereumAddress,
880
+ lltv: string,
881
+ ratioState: RatioState,
882
+ targetRatio: number,
883
+ triggerRatio: number,
884
+ user: EthereumAddress,
885
+ isEOA: boolean,
886
+ network: ChainId,
887
+ ) {
888
+ const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
889
+
890
+ const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
891
+
892
+ const bundleId = getMorphoBlueBundleId(network, 'liquidationProtection', isEOA);
893
+ const isBundle = true;
894
+
895
+ return [bundleId, isBundle, triggerData, subData];
896
+ },
897
+
719
898
  leverageManagementOnPrice(
720
899
  strategyOrBundleId: number,
721
900
  isBundle: boolean = true,
@@ -890,6 +1069,22 @@ export const fluidEncode = {
890
1069
 
891
1070
  return [strategyOrBundleId, isBundle, triggerData, subData];
892
1071
  },
1072
+
1073
+ liquidationProtection(
1074
+ nftId: string,
1075
+ vault: EthereumAddress,
1076
+ ratioState: RatioState,
1077
+ targetRatio: number,
1078
+ triggerRatio: number,
1079
+ strategyOrBundleId: number,
1080
+ ) {
1081
+ const isBundle = true;
1082
+ const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
1083
+ const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
1084
+
1085
+ return [strategyOrBundleId, isBundle, triggerData, subData];
1086
+ },
1087
+
893
1088
  };
894
1089
 
895
1090
  export const aaveV4Encode = {
@@ -907,6 +1102,22 @@ export const aaveV4Encode = {
907
1102
 
908
1103
  return [strategyOrBundleId, isBundle, triggerData, subData];
909
1104
  },
1105
+
1106
+ liquidationProtection(
1107
+ strategyOrBundleId: number,
1108
+ owner: EthereumAddress,
1109
+ spoke: EthereumAddress,
1110
+ ratioState: RatioState,
1111
+ targetRatio: number,
1112
+ triggerRatio: number,
1113
+ ) {
1114
+ const isBundle = true;
1115
+ const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
1116
+ const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
1117
+
1118
+ return [strategyOrBundleId, isBundle, triggerData, subData];
1119
+ },
1120
+
910
1121
  leverageManagementOnPrice(
911
1122
  strategyOrBundleId: number,
912
1123
  owner: EthereumAddress,