@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.
- package/cjs/constants/index.js +170 -0
- package/cjs/index.d.ts +2 -2
- package/cjs/index.js +5 -2
- package/cjs/services/ethereumService.test.js +4 -7
- package/cjs/services/strategiesService.js +195 -15
- package/cjs/services/strategySubService.d.ts +22 -17
- package/cjs/services/strategySubService.js +92 -28
- package/cjs/services/strategySubService.test.js +297 -40
- package/cjs/services/subDataService.d.ts +108 -20
- package/cjs/services/subDataService.js +97 -79
- package/cjs/services/subDataService.test.js +479 -174
- package/cjs/types/enums.d.ts +44 -6
- package/cjs/types/enums.js +38 -0
- package/esm/constants/index.js +170 -0
- package/esm/index.d.ts +2 -2
- package/esm/index.js +5 -2
- package/esm/services/ethereumService.test.js +4 -7
- package/esm/services/strategiesService.js +195 -15
- package/esm/services/strategySubService.d.ts +22 -17
- package/esm/services/strategySubService.js +91 -27
- package/esm/services/strategySubService.test.js +298 -38
- package/esm/services/subDataService.d.ts +108 -20
- package/esm/services/subDataService.js +95 -77
- package/esm/services/subDataService.test.js +480 -172
- package/esm/types/enums.d.ts +44 -6
- package/esm/types/enums.js +38 -0
- package/package.json +1 -1
- package/src/constants/index.ts +172 -1
- package/src/index.ts +22 -6
- package/src/services/ethereumService.test.ts +5 -8
- package/src/services/strategiesService.ts +262 -16
- package/src/services/strategySubService.test.ts +384 -46
- package/src/services/strategySubService.ts +251 -40
- package/src/services/subDataService.test.ts +639 -231
- package/src/services/subDataService.ts +149 -106
- package/src/services/utils.test.ts +1 -1
- package/src/services/utils.ts +3 -1
- 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
|
|
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 {
|
|
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,
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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,
|