@defisaver/automation-sdk 3.3.16-dev-13082-morpho-eoa-dev → 3.3.16-liq-prot-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 +117 -42
- package/cjs/index.d.ts +2 -2
- package/cjs/index.js +5 -2
- package/cjs/services/strategiesService.js +157 -12
- package/cjs/services/strategySubService.d.ts +18 -21
- package/cjs/services/strategySubService.js +78 -74
- package/cjs/services/strategySubService.test.js +3 -149
- package/cjs/services/subDataService.d.ts +70 -20
- package/cjs/services/subDataService.js +23 -79
- package/cjs/services/subDataService.test.js +17 -202
- package/cjs/services/utils.d.ts +2 -1
- package/cjs/services/utils.js +14 -1
- package/cjs/types/enums.d.ts +36 -17
- package/cjs/types/enums.js +30 -11
- package/esm/constants/index.js +117 -42
- package/esm/index.d.ts +2 -2
- package/esm/index.js +5 -2
- package/esm/services/strategiesService.js +157 -12
- package/esm/services/strategySubService.d.ts +18 -21
- package/esm/services/strategySubService.js +78 -73
- package/esm/services/strategySubService.test.js +4 -147
- package/esm/services/subDataService.d.ts +70 -20
- package/esm/services/subDataService.js +21 -77
- package/esm/services/subDataService.test.js +18 -200
- package/esm/services/utils.d.ts +2 -1
- package/esm/services/utils.js +13 -1
- package/esm/types/enums.d.ts +36 -17
- package/esm/types/enums.js +30 -11
- package/package.json +1 -1
- package/src/constants/index.ts +119 -43
- package/src/index.ts +22 -6
- package/src/services/strategiesService.ts +221 -12
- package/src/services/strategySubService.test.ts +3 -191
- package/src/services/strategySubService.ts +173 -121
- package/src/services/subDataService.test.ts +18 -214
- package/src/services/subDataService.ts +42 -106
- package/src/services/utils.test.ts +1 -1
- package/src/services/utils.ts +15 -1
- package/src/types/enums.ts +30 -13
|
@@ -1,22 +1,26 @@
|
|
|
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
|
+
getBundleIdsByNetwork,
|
|
21
|
+
getCloseStrategyType,
|
|
22
|
+
requireAddress,
|
|
23
|
+
requireAddresses,
|
|
20
24
|
} from './utils';
|
|
21
25
|
|
|
22
26
|
export const makerEncode = {
|
|
@@ -81,7 +85,7 @@ export const makerEncode = {
|
|
|
81
85
|
|
|
82
86
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
83
87
|
},
|
|
84
|
-
|
|
88
|
+
leverageManagement(
|
|
85
89
|
vaultId: number,
|
|
86
90
|
triggerRatio: number,
|
|
87
91
|
targetRatio: number,
|
|
@@ -93,7 +97,27 @@ export const makerEncode = {
|
|
|
93
97
|
|
|
94
98
|
const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
|
|
95
99
|
|
|
96
|
-
const subData = subDataService.
|
|
100
|
+
const subData = subDataService.makerLeverageManagementSubData.encode(vaultId, targetRatio, daiAddr);
|
|
101
|
+
|
|
102
|
+
return [
|
|
103
|
+
bundleId,
|
|
104
|
+
true,
|
|
105
|
+
triggerData,
|
|
106
|
+
subData,
|
|
107
|
+
];
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
liquidationProtection(
|
|
111
|
+
vaultId: number,
|
|
112
|
+
triggerRatio: number,
|
|
113
|
+
targetRatio: number,
|
|
114
|
+
ratioState: RatioState,
|
|
115
|
+
daiAddr?: EthereumAddress,
|
|
116
|
+
) {
|
|
117
|
+
const bundleId = Bundles.MainnetIds.MAKER_SW_LIQUIDATION_PROTECTION;
|
|
118
|
+
|
|
119
|
+
const triggerData = triggerService.makerRatioTrigger.encode(vaultId, triggerRatio, ratioState);
|
|
120
|
+
const subData = subDataService.makerLiquidationProtectionSubData.encode(vaultId, targetRatio, daiAddr);
|
|
97
121
|
|
|
98
122
|
return [
|
|
99
123
|
bundleId,
|
|
@@ -162,7 +186,7 @@ export const liquityEncode = {
|
|
|
162
186
|
|
|
163
187
|
return [strategyId, isBundle, triggerData, subData];
|
|
164
188
|
},
|
|
165
|
-
|
|
189
|
+
leverageManagement(
|
|
166
190
|
strategyOrBundleId: number,
|
|
167
191
|
user: EthereumAddress,
|
|
168
192
|
ratioState: RatioState,
|
|
@@ -171,7 +195,7 @@ export const liquityEncode = {
|
|
|
171
195
|
) {
|
|
172
196
|
const isBundle = true;
|
|
173
197
|
|
|
174
|
-
const subData = subDataService.
|
|
198
|
+
const subData = subDataService.liquityLeverageManagementSubData.encode(targetRatio, ratioState);
|
|
175
199
|
const triggerData = triggerService.liquityRatioTrigger.encode(user, triggerRatio, ratioState);
|
|
176
200
|
|
|
177
201
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
@@ -223,14 +247,8 @@ export const liquityEncode = {
|
|
|
223
247
|
},
|
|
224
248
|
};
|
|
225
249
|
|
|
226
|
-
export const chickenBondsEncode = {
|
|
227
|
-
rebond(bondId: number) {
|
|
228
|
-
return subDataService.cBondsRebondSubData.encode(bondId);
|
|
229
|
-
},
|
|
230
|
-
};
|
|
231
|
-
|
|
232
250
|
export const aaveV2Encode = {
|
|
233
|
-
|
|
251
|
+
leverageManagement(
|
|
234
252
|
strategyOrBundleId: number,
|
|
235
253
|
market: EthereumAddress,
|
|
236
254
|
user: EthereumAddress,
|
|
@@ -240,7 +258,7 @@ export const aaveV2Encode = {
|
|
|
240
258
|
) {
|
|
241
259
|
const isBundle = true;
|
|
242
260
|
|
|
243
|
-
const subData = subDataService.
|
|
261
|
+
const subData = subDataService.aaveV2LeverageManagementSubData.encode(market, targetRatio, ratioState);
|
|
244
262
|
const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
245
263
|
|
|
246
264
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
@@ -314,7 +332,7 @@ export const aaveV3Encode = {
|
|
|
314
332
|
|
|
315
333
|
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
316
334
|
},
|
|
317
|
-
|
|
335
|
+
leverageManagement(
|
|
318
336
|
strategyOrBundleId: number,
|
|
319
337
|
market: EthereumAddress,
|
|
320
338
|
user: EthereumAddress,
|
|
@@ -325,7 +343,7 @@ export const aaveV3Encode = {
|
|
|
325
343
|
) {
|
|
326
344
|
const isBundle = true;
|
|
327
345
|
|
|
328
|
-
const subData = subDataService.
|
|
346
|
+
const subData = subDataService.aaveV3LeverageManagementSubData.encode(
|
|
329
347
|
targetRatio,
|
|
330
348
|
ratioState,
|
|
331
349
|
market,
|
|
@@ -337,6 +355,28 @@ export const aaveV3Encode = {
|
|
|
337
355
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
338
356
|
},
|
|
339
357
|
|
|
358
|
+
liquidationProtection(
|
|
359
|
+
strategyOrBundleId: number,
|
|
360
|
+
market: EthereumAddress,
|
|
361
|
+
user: EthereumAddress,
|
|
362
|
+
ratioState: RatioState,
|
|
363
|
+
targetRatio: number,
|
|
364
|
+
triggerRatio: number,
|
|
365
|
+
) {
|
|
366
|
+
const isBundle = true;
|
|
367
|
+
|
|
368
|
+
const subData = subDataService.aaveV3LiquidationProtectionSubData.encode(
|
|
369
|
+
targetRatio,
|
|
370
|
+
ratioState,
|
|
371
|
+
market,
|
|
372
|
+
user,
|
|
373
|
+
true, // isGeneric
|
|
374
|
+
);
|
|
375
|
+
const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
376
|
+
|
|
377
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
378
|
+
},
|
|
379
|
+
|
|
340
380
|
leverageManagementOnPriceGeneric(
|
|
341
381
|
strategyOrBundleId: number,
|
|
342
382
|
price: number,
|
|
@@ -408,7 +448,7 @@ export const aaveV3Encode = {
|
|
|
408
448
|
};
|
|
409
449
|
|
|
410
450
|
export const compoundV2Encode = {
|
|
411
|
-
|
|
451
|
+
leverageManagement(
|
|
412
452
|
strategyOrBundleId: number,
|
|
413
453
|
user: EthereumAddress,
|
|
414
454
|
ratioState: RatioState,
|
|
@@ -417,7 +457,7 @@ export const compoundV2Encode = {
|
|
|
417
457
|
) {
|
|
418
458
|
const isBundle = true;
|
|
419
459
|
|
|
420
|
-
const subData = subDataService.
|
|
460
|
+
const subData = subDataService.compoundV2LeverageManagementSubData.encode(targetRatio, ratioState);
|
|
421
461
|
const triggerData = triggerService.compoundV2RatioTrigger.encode(user, triggerRatio, ratioState);
|
|
422
462
|
|
|
423
463
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
@@ -425,7 +465,24 @@ export const compoundV2Encode = {
|
|
|
425
465
|
};
|
|
426
466
|
|
|
427
467
|
export const compoundV3Encode = {
|
|
428
|
-
|
|
468
|
+
leverageManagement(
|
|
469
|
+
strategyOrBundleId: number,
|
|
470
|
+
market: EthereumAddress,
|
|
471
|
+
baseToken: EthereumAddress,
|
|
472
|
+
user: EthereumAddress,
|
|
473
|
+
ratioState: RatioState,
|
|
474
|
+
targetRatio: number,
|
|
475
|
+
triggerRatio: number,
|
|
476
|
+
) {
|
|
477
|
+
const isBundle = true;
|
|
478
|
+
|
|
479
|
+
const subData = subDataService.compoundV3LeverageManagementSubData.encode(market, baseToken, targetRatio, ratioState);
|
|
480
|
+
const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
481
|
+
|
|
482
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
liquidationProtection(
|
|
429
486
|
strategyOrBundleId: number,
|
|
430
487
|
market: EthereumAddress,
|
|
431
488
|
baseToken: EthereumAddress,
|
|
@@ -436,11 +493,12 @@ export const compoundV3Encode = {
|
|
|
436
493
|
) {
|
|
437
494
|
const isBundle = true;
|
|
438
495
|
|
|
439
|
-
const subData = subDataService.
|
|
496
|
+
const subData = subDataService.compoundV3LiquidationProtectionSubData.encode(market, baseToken, targetRatio, ratioState);
|
|
440
497
|
const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
441
498
|
|
|
442
499
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
443
500
|
},
|
|
501
|
+
|
|
444
502
|
leverageManagementOnPrice(
|
|
445
503
|
strategyOrBundleId: number,
|
|
446
504
|
market: EthereumAddress,
|
|
@@ -479,18 +537,6 @@ export const compoundV3Encode = {
|
|
|
479
537
|
},
|
|
480
538
|
};
|
|
481
539
|
|
|
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
540
|
export const exchangeEncode = {
|
|
495
541
|
dca(
|
|
496
542
|
fromToken: EthereumAddress,
|
|
@@ -508,7 +554,7 @@ export const exchangeEncode = {
|
|
|
508
554
|
|
|
509
555
|
return [strategyId, false, triggerData, subData];
|
|
510
556
|
},
|
|
511
|
-
|
|
557
|
+
limitOrder(
|
|
512
558
|
fromToken: EthereumAddress,
|
|
513
559
|
toToken: EthereumAddress,
|
|
514
560
|
amount: string,
|
|
@@ -520,7 +566,7 @@ export const exchangeEncode = {
|
|
|
520
566
|
network: ChainId,
|
|
521
567
|
) {
|
|
522
568
|
requireAddresses([fromToken, toToken]);
|
|
523
|
-
const subData = subDataService.
|
|
569
|
+
const subData = subDataService.exchangeLimitOrderSubData.encode(fromToken, toToken, amount);
|
|
524
570
|
const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
|
|
525
571
|
|
|
526
572
|
const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
|
|
@@ -573,7 +619,26 @@ export const sparkEncode = {
|
|
|
573
619
|
|
|
574
620
|
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
575
621
|
},
|
|
576
|
-
|
|
622
|
+
leverageManagement(
|
|
623
|
+
strategyOrBundleId: number,
|
|
624
|
+
market: EthereumAddress,
|
|
625
|
+
user: EthereumAddress,
|
|
626
|
+
ratioState: RatioState,
|
|
627
|
+
targetRatio: number,
|
|
628
|
+
triggerRatio: number,
|
|
629
|
+
) {
|
|
630
|
+
const isBundle = true;
|
|
631
|
+
|
|
632
|
+
const subData = subDataService.sparkLeverageManagementSubData.encode(
|
|
633
|
+
targetRatio,
|
|
634
|
+
ratioState,
|
|
635
|
+
);
|
|
636
|
+
const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
637
|
+
|
|
638
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
639
|
+
},
|
|
640
|
+
|
|
641
|
+
liquidationProtection(
|
|
577
642
|
strategyOrBundleId: number,
|
|
578
643
|
market: EthereumAddress,
|
|
579
644
|
user: EthereumAddress,
|
|
@@ -583,7 +648,7 @@ export const sparkEncode = {
|
|
|
583
648
|
) {
|
|
584
649
|
const isBundle = true;
|
|
585
650
|
|
|
586
|
-
const subData = subDataService.
|
|
651
|
+
const subData = subDataService.sparkLiquidationProtectionSubData.encode(
|
|
587
652
|
targetRatio,
|
|
588
653
|
ratioState,
|
|
589
654
|
);
|
|
@@ -591,6 +656,7 @@ export const sparkEncode = {
|
|
|
591
656
|
|
|
592
657
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
593
658
|
},
|
|
659
|
+
|
|
594
660
|
collateralSwitch(
|
|
595
661
|
strategyOrBundleId: number,
|
|
596
662
|
fromAsset: EthereumAddress,
|
|
@@ -652,44 +718,6 @@ export const crvUSDEncode = {
|
|
|
652
718
|
},
|
|
653
719
|
};
|
|
654
720
|
|
|
655
|
-
export type MorphoBlueBundleStrategy = 'repay' | 'boost' | 'repayOnPrice' | 'boostOnPrice' | 'close';
|
|
656
|
-
|
|
657
|
-
function getMorphoBlueBundlesIds(network: ChainId) {
|
|
658
|
-
switch (network) {
|
|
659
|
-
case ChainId.Ethereum:
|
|
660
|
-
return Bundles.MainnetIds;
|
|
661
|
-
case ChainId.Base:
|
|
662
|
-
return Bundles.BaseIds;
|
|
663
|
-
case ChainId.Arbitrum:
|
|
664
|
-
return Bundles.ArbitrumIds;
|
|
665
|
-
default:
|
|
666
|
-
throw new Error(`Morpho Blue strategies are not supported on chain ${network}`);
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
export function getMorphoBlueBundleId(
|
|
671
|
-
network: ChainId,
|
|
672
|
-
strategy: MorphoBlueBundleStrategy,
|
|
673
|
-
isEOA: boolean,
|
|
674
|
-
): number {
|
|
675
|
-
const bundlesIds = getMorphoBlueBundlesIds(network);
|
|
676
|
-
|
|
677
|
-
switch (strategy) {
|
|
678
|
-
case 'repay':
|
|
679
|
-
return isEOA ? bundlesIds.MORPHO_BLUE_EOA_REPAY : bundlesIds.MORPHO_BLUE_REPAY;
|
|
680
|
-
case 'boost':
|
|
681
|
-
return isEOA ? bundlesIds.MORPHO_BLUE_EOA_BOOST : bundlesIds.MORPHO_BLUE_BOOST;
|
|
682
|
-
case 'repayOnPrice':
|
|
683
|
-
return isEOA ? bundlesIds.MORPHO_BLUE_EOA_REPAY_ON_PRICE : bundlesIds.MORPHO_BLUE_REPAY_ON_PRICE;
|
|
684
|
-
case 'boostOnPrice':
|
|
685
|
-
return isEOA ? bundlesIds.MORPHO_BLUE_EOA_BOOST_ON_PRICE : bundlesIds.MORPHO_BLUE_BOOST_ON_PRICE;
|
|
686
|
-
case 'close':
|
|
687
|
-
return isEOA ? bundlesIds.MORPHO_BLUE_EOA_CLOSE : bundlesIds.MORPHO_BLUE_CLOSE;
|
|
688
|
-
default:
|
|
689
|
-
throw new Error(`Unknown Morpho Blue strategy: ${strategy}`);
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
|
|
693
721
|
export const morphoBlueEncode = {
|
|
694
722
|
leverageManagement(
|
|
695
723
|
marketId: string,
|
|
@@ -711,72 +739,68 @@ export const morphoBlueEncode = {
|
|
|
711
739
|
|
|
712
740
|
// over is boost, under is repay
|
|
713
741
|
const isBoost = ratioState === RatioState.OVER;
|
|
714
|
-
|
|
742
|
+
let strategyOrBundleId;
|
|
743
|
+
|
|
744
|
+
if (network === ChainId.Base) {
|
|
745
|
+
return [isBoost ? Bundles.BaseIds.MORPHO_BLUE_BOOST : Bundles.BaseIds.MORPHO_BLUE_REPAY, true, triggerData, subData];
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
const bundlesIds = network === ChainId.Arbitrum ? Bundles.ArbitrumIds : Bundles.MainnetIds;
|
|
749
|
+
|
|
750
|
+
if (isBoost) strategyOrBundleId = isEOA ? bundlesIds.MORPHO_BLUE_EOA_BOOST : bundlesIds.MORPHO_BLUE_BOOST;
|
|
751
|
+
else strategyOrBundleId = isEOA ? bundlesIds.MORPHO_BLUE_EOA_REPAY : bundlesIds.MORPHO_BLUE_REPAY;
|
|
715
752
|
const isBundle = true;
|
|
716
753
|
|
|
717
|
-
return [bundleId, isBundle, triggerData, subData];
|
|
718
|
-
},
|
|
719
|
-
leverageManagementOnPrice(
|
|
720
|
-
strategyOrBundleId: number,
|
|
721
|
-
isBundle: boolean = true,
|
|
722
|
-
loanToken: EthereumAddress,
|
|
723
|
-
collToken: EthereumAddress,
|
|
724
|
-
oracle: EthereumAddress,
|
|
725
|
-
irm: EthereumAddress,
|
|
726
|
-
lltv: string,
|
|
727
|
-
user: EthereumAddress,
|
|
728
|
-
targetRatio: number,
|
|
729
|
-
price: number,
|
|
730
|
-
priceState: RatioState,
|
|
731
|
-
) {
|
|
732
|
-
const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
|
|
733
|
-
const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
|
|
734
754
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
735
755
|
},
|
|
736
|
-
|
|
756
|
+
|
|
757
|
+
liquidationProtection(
|
|
758
|
+
marketId: string,
|
|
737
759
|
loanToken: EthereumAddress,
|
|
738
760
|
collToken: EthereumAddress,
|
|
739
761
|
oracle: EthereumAddress,
|
|
740
762
|
irm: EthereumAddress,
|
|
741
763
|
lltv: string,
|
|
742
|
-
|
|
764
|
+
ratioState: RatioState,
|
|
743
765
|
targetRatio: number,
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
isBoost: boolean,
|
|
766
|
+
triggerRatio: number,
|
|
767
|
+
user: EthereumAddress,
|
|
747
768
|
isEOA: boolean,
|
|
748
769
|
network: ChainId,
|
|
749
770
|
) {
|
|
750
|
-
const subData = subDataService.
|
|
751
|
-
|
|
771
|
+
const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
|
|
772
|
+
|
|
773
|
+
const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
|
|
752
774
|
|
|
753
|
-
|
|
775
|
+
|
|
776
|
+
// Type casting because there is no MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION for Base chain.
|
|
777
|
+
// That is fine because we will just always send isEOA == false for Base chain.
|
|
778
|
+
const bundleNetwork = getBundleIdsByNetwork(network) as typeof Bundles.MainnetIds;
|
|
779
|
+
const bundleId = isEOA ? bundleNetwork.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION : bundleNetwork.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION;
|
|
754
780
|
const isBundle = true;
|
|
755
781
|
|
|
756
782
|
return [bundleId, isBundle, triggerData, subData];
|
|
757
783
|
},
|
|
758
|
-
|
|
784
|
+
|
|
785
|
+
leverageManagementOnPrice(
|
|
759
786
|
strategyOrBundleId: number,
|
|
787
|
+
isBundle: boolean = true,
|
|
760
788
|
loanToken: EthereumAddress,
|
|
761
789
|
collToken: EthereumAddress,
|
|
762
790
|
oracle: EthereumAddress,
|
|
763
791
|
irm: EthereumAddress,
|
|
764
792
|
lltv: string,
|
|
765
793
|
user: EthereumAddress,
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
takeProfitType: CloseToAssetType = CloseToAssetType.COLLATERAL,
|
|
794
|
+
targetRatio: number,
|
|
795
|
+
price: number,
|
|
796
|
+
priceState: RatioState,
|
|
770
797
|
) {
|
|
771
|
-
const
|
|
772
|
-
const
|
|
773
|
-
|
|
774
|
-
const subDataEncoded = subDataService.morphoBlueCloseOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, user, closeType);
|
|
775
|
-
const triggerDataEncoded = triggerService.morphoBluePriceRangeTrigger.encode(oracle, collToken, loanToken, stopLossPrice, takeProfitPrice);
|
|
776
|
-
|
|
777
|
-
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
798
|
+
const subData = subDataService.morphoBlueLeverageManagementOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user);
|
|
799
|
+
const triggerData = triggerService.morphoBluePriceTrigger.encode(oracle, collToken, loanToken, price, priceState);
|
|
800
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
778
801
|
},
|
|
779
|
-
|
|
802
|
+
closeOnPrice(
|
|
803
|
+
strategyOrBundleId: number,
|
|
780
804
|
loanToken: EthereumAddress,
|
|
781
805
|
collToken: EthereumAddress,
|
|
782
806
|
oracle: EthereumAddress,
|
|
@@ -787,8 +811,6 @@ export const morphoBlueEncode = {
|
|
|
787
811
|
stopLossType: CloseToAssetType = CloseToAssetType.DEBT,
|
|
788
812
|
takeProfitPrice: number = 0,
|
|
789
813
|
takeProfitType: CloseToAssetType = CloseToAssetType.COLLATERAL,
|
|
790
|
-
isEOA: boolean,
|
|
791
|
-
network: ChainId,
|
|
792
814
|
) {
|
|
793
815
|
const isBundle = true;
|
|
794
816
|
const closeType = getCloseStrategyType(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
|
|
@@ -796,9 +818,7 @@ export const morphoBlueEncode = {
|
|
|
796
818
|
const subDataEncoded = subDataService.morphoBlueCloseOnPriceSubData.encode(loanToken, collToken, oracle, irm, lltv, user, closeType);
|
|
797
819
|
const triggerDataEncoded = triggerService.morphoBluePriceRangeTrigger.encode(oracle, collToken, loanToken, stopLossPrice, takeProfitPrice);
|
|
798
820
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
return [bundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
821
|
+
return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
|
|
802
822
|
},
|
|
803
823
|
};
|
|
804
824
|
|
|
@@ -890,6 +910,22 @@ export const fluidEncode = {
|
|
|
890
910
|
|
|
891
911
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
892
912
|
},
|
|
913
|
+
|
|
914
|
+
liquidationProtection(
|
|
915
|
+
nftId: string,
|
|
916
|
+
vault: EthereumAddress,
|
|
917
|
+
ratioState: RatioState,
|
|
918
|
+
targetRatio: number,
|
|
919
|
+
triggerRatio: number,
|
|
920
|
+
strategyOrBundleId: number,
|
|
921
|
+
) {
|
|
922
|
+
const isBundle = true;
|
|
923
|
+
const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
|
|
924
|
+
const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
|
|
925
|
+
|
|
926
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
927
|
+
},
|
|
928
|
+
|
|
893
929
|
};
|
|
894
930
|
|
|
895
931
|
export const aaveV4Encode = {
|
|
@@ -907,6 +943,22 @@ export const aaveV4Encode = {
|
|
|
907
943
|
|
|
908
944
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
909
945
|
},
|
|
946
|
+
|
|
947
|
+
liquidationProtection(
|
|
948
|
+
strategyOrBundleId: number,
|
|
949
|
+
owner: EthereumAddress,
|
|
950
|
+
spoke: EthereumAddress,
|
|
951
|
+
ratioState: RatioState,
|
|
952
|
+
targetRatio: number,
|
|
953
|
+
triggerRatio: number,
|
|
954
|
+
) {
|
|
955
|
+
const isBundle = true;
|
|
956
|
+
const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
|
|
957
|
+
const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
|
|
958
|
+
|
|
959
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
960
|
+
},
|
|
961
|
+
|
|
910
962
|
leverageManagementOnPrice(
|
|
911
963
|
strategyOrBundleId: number,
|
|
912
964
|
owner: EthereumAddress,
|