@defisaver/automation-sdk 3.3.14 → 3.3.15-liq-prot-1-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 +130 -0
- package/cjs/index.d.ts +4 -3
- package/cjs/index.js +6 -2
- package/cjs/services/strategiesService.js +178 -17
- package/cjs/services/strategySubService.d.ts +14 -13
- package/cjs/services/strategySubService.js +79 -63
- package/cjs/services/strategySubService.test.js +0 -234
- package/cjs/services/subDataService.d.ts +92 -4
- package/cjs/services/subDataService.js +245 -35
- package/cjs/services/subDataService.test.js +0 -110
- package/cjs/services/utils.d.ts +3 -1
- package/cjs/services/utils.js +34 -1
- package/cjs/services/utils.test.js +25 -0
- package/cjs/types/enums.d.ts +36 -6
- package/cjs/types/enums.js +30 -0
- package/esm/constants/index.js +130 -0
- package/esm/index.d.ts +4 -3
- package/esm/index.js +7 -3
- package/esm/services/strategiesService.js +178 -17
- package/esm/services/strategySubService.d.ts +14 -13
- package/esm/services/strategySubService.js +79 -60
- package/esm/services/strategySubService.test.js +2 -236
- package/esm/services/subDataService.d.ts +92 -4
- package/esm/services/subDataService.js +243 -34
- package/esm/services/subDataService.test.js +0 -110
- package/esm/services/utils.d.ts +3 -1
- package/esm/services/utils.js +32 -1
- package/esm/services/utils.test.js +27 -2
- package/esm/types/enums.d.ts +36 -6
- package/esm/types/enums.js +30 -0
- package/package.json +1 -1
- package/src/constants/index.ts +132 -1
- package/src/index.ts +24 -6
- package/src/services/strategiesService.ts +242 -17
- package/src/services/strategySubService.test.ts +0 -279
- package/src/services/strategySubService.ts +209 -116
- package/src/services/subDataService.test.ts +0 -120
- package/src/services/subDataService.ts +335 -49
- package/src/services/utils.test.ts +32 -1
- package/src/services/utils.ts +32 -1
- package/src/types/enums.ts +30 -2
|
@@ -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,23 +85,6 @@ export const makerEncode = {
|
|
|
81
85
|
|
|
82
86
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
83
87
|
},
|
|
84
|
-
leverageManagement(
|
|
85
|
-
vaultId: number,
|
|
86
|
-
triggerRepayRatio: string,
|
|
87
|
-
triggerBoostRatio: string,
|
|
88
|
-
targetBoostRatio: string,
|
|
89
|
-
targetRepayRatio: string,
|
|
90
|
-
boostEnabled: boolean,
|
|
91
|
-
) {
|
|
92
|
-
return [
|
|
93
|
-
vaultId,
|
|
94
|
-
new Dec(triggerRepayRatio).mul(1e16).toString(),
|
|
95
|
-
new Dec(triggerBoostRatio).mul(1e16).toString(),
|
|
96
|
-
new Dec(targetBoostRatio).mul(1e16).toString(),
|
|
97
|
-
new Dec(targetRepayRatio).mul(1e16).toString(),
|
|
98
|
-
boostEnabled,
|
|
99
|
-
];
|
|
100
|
-
},
|
|
101
88
|
leverageManagementWithoutSubProxy(
|
|
102
89
|
vaultId: number,
|
|
103
90
|
triggerRatio: number,
|
|
@@ -119,6 +106,26 @@ export const makerEncode = {
|
|
|
119
106
|
subData,
|
|
120
107
|
];
|
|
121
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);
|
|
121
|
+
|
|
122
|
+
return [
|
|
123
|
+
bundleId,
|
|
124
|
+
true,
|
|
125
|
+
triggerData,
|
|
126
|
+
subData,
|
|
127
|
+
];
|
|
128
|
+
},
|
|
122
129
|
};
|
|
123
130
|
|
|
124
131
|
export const liquityEncode = {
|
|
@@ -179,20 +186,19 @@ export const liquityEncode = {
|
|
|
179
186
|
|
|
180
187
|
return [strategyId, isBundle, triggerData, subData];
|
|
181
188
|
},
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
189
|
+
leverageManagementWithoutSubProxy(
|
|
190
|
+
strategyOrBundleId: number,
|
|
191
|
+
user: EthereumAddress,
|
|
192
|
+
ratioState: RatioState,
|
|
193
|
+
targetRatio: number,
|
|
194
|
+
triggerRatio: number,
|
|
188
195
|
) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
];
|
|
196
|
+
const isBundle = true;
|
|
197
|
+
|
|
198
|
+
const subData = subDataService.liquityLeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
|
|
199
|
+
const triggerData = triggerService.liquityRatioTrigger.encode(user, triggerRatio, ratioState);
|
|
200
|
+
|
|
201
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
196
202
|
},
|
|
197
203
|
dsrPayback(
|
|
198
204
|
proxyAddress: EthereumAddress,
|
|
@@ -248,39 +254,24 @@ export const chickenBondsEncode = {
|
|
|
248
254
|
};
|
|
249
255
|
|
|
250
256
|
export const aaveV2Encode = {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
+
leverageManagementWithoutSubProxy(
|
|
258
|
+
strategyOrBundleId: number,
|
|
259
|
+
market: EthereumAddress,
|
|
260
|
+
user: EthereumAddress,
|
|
261
|
+
ratioState: RatioState,
|
|
262
|
+
targetRatio: number,
|
|
263
|
+
triggerRatio: number,
|
|
257
264
|
) {
|
|
258
|
-
|
|
265
|
+
const isBundle = true;
|
|
266
|
+
|
|
267
|
+
const subData = subDataService.aaveV2LeverageManagementSubDataWithoutSubProxy.encode(market, targetRatio, ratioState);
|
|
268
|
+
const triggerData = triggerService.aaveV2RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
269
|
+
|
|
270
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
259
271
|
},
|
|
260
272
|
};
|
|
261
273
|
|
|
262
274
|
export const aaveV3Encode = {
|
|
263
|
-
leverageManagement(
|
|
264
|
-
triggerRepayRatio: number,
|
|
265
|
-
triggerBoostRatio: number,
|
|
266
|
-
targetBoostRatio: number,
|
|
267
|
-
targetRepayRatio: number,
|
|
268
|
-
boostEnabled: boolean,
|
|
269
|
-
) {
|
|
270
|
-
let subInput = '0x';
|
|
271
|
-
|
|
272
|
-
subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
273
|
-
.padStart(32, '0'));
|
|
274
|
-
subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
275
|
-
.padStart(32, '0'));
|
|
276
|
-
subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
277
|
-
.padStart(32, '0'));
|
|
278
|
-
subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
279
|
-
.padStart(32, '0'));
|
|
280
|
-
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
281
|
-
|
|
282
|
-
return subInput;
|
|
283
|
-
},
|
|
284
275
|
closeToAsset(
|
|
285
276
|
strategyOrBundleId: number,
|
|
286
277
|
isBundle: boolean = true,
|
|
@@ -370,6 +361,27 @@ export const aaveV3Encode = {
|
|
|
370
361
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
371
362
|
},
|
|
372
363
|
|
|
364
|
+
liquidationProtection(
|
|
365
|
+
strategyOrBundleId: number,
|
|
366
|
+
market: EthereumAddress,
|
|
367
|
+
user: EthereumAddress,
|
|
368
|
+
ratioState: RatioState,
|
|
369
|
+
targetRatio: number,
|
|
370
|
+
triggerRatio: number,
|
|
371
|
+
) {
|
|
372
|
+
const isBundle = true;
|
|
373
|
+
|
|
374
|
+
const subData = subDataService.aaveV3LiquidationProtectionSubData.encode(
|
|
375
|
+
targetRatio,
|
|
376
|
+
ratioState,
|
|
377
|
+
market,
|
|
378
|
+
user,
|
|
379
|
+
);
|
|
380
|
+
const triggerData = triggerService.aaveV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
381
|
+
|
|
382
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
383
|
+
},
|
|
384
|
+
|
|
373
385
|
leverageManagementOnPriceGeneric(
|
|
374
386
|
strategyOrBundleId: number,
|
|
375
387
|
price: number,
|
|
@@ -441,30 +453,57 @@ export const aaveV3Encode = {
|
|
|
441
453
|
};
|
|
442
454
|
|
|
443
455
|
export const compoundV2Encode = {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
456
|
+
leverageManagementWithoutSubProxy(
|
|
457
|
+
strategyOrBundleId: number,
|
|
458
|
+
user: EthereumAddress,
|
|
459
|
+
ratioState: RatioState,
|
|
460
|
+
targetRatio: number,
|
|
461
|
+
triggerRatio: number,
|
|
450
462
|
) {
|
|
451
|
-
|
|
463
|
+
const isBundle = true;
|
|
464
|
+
|
|
465
|
+
const subData = subDataService.compoundV2LeverageManagementSubDataWithoutSubProxy.encode(targetRatio, ratioState);
|
|
466
|
+
const triggerData = triggerService.compoundV2RatioTrigger.encode(user, triggerRatio, ratioState);
|
|
467
|
+
|
|
468
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
452
469
|
},
|
|
453
470
|
};
|
|
454
471
|
|
|
455
472
|
export const compoundV3Encode = {
|
|
456
|
-
|
|
473
|
+
leverageManagementWithoutSubProxy(
|
|
474
|
+
strategyOrBundleId: number,
|
|
457
475
|
market: EthereumAddress,
|
|
458
476
|
baseToken: EthereumAddress,
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
477
|
+
user: EthereumAddress,
|
|
478
|
+
ratioState: RatioState,
|
|
479
|
+
targetRatio: number,
|
|
480
|
+
triggerRatio: number,
|
|
481
|
+
) {
|
|
482
|
+
const isBundle = true;
|
|
483
|
+
|
|
484
|
+
const subData = subDataService.compoundV3LeverageManagementSubDataWithoutSubProxy.encode(market, baseToken, targetRatio, ratioState);
|
|
485
|
+
const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
486
|
+
|
|
487
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
488
|
+
},
|
|
489
|
+
|
|
490
|
+
liquidationProtectionWithoutSubProxy(
|
|
491
|
+
strategyOrBundleId: number,
|
|
492
|
+
market: EthereumAddress,
|
|
493
|
+
baseToken: EthereumAddress,
|
|
494
|
+
user: EthereumAddress,
|
|
495
|
+
ratioState: RatioState,
|
|
496
|
+
targetRatio: number,
|
|
497
|
+
triggerRatio: number,
|
|
465
498
|
) {
|
|
466
|
-
|
|
499
|
+
const isBundle = true;
|
|
500
|
+
|
|
501
|
+
const subData = subDataService.compoundV3LiquidationProtectionSubDataWithoutSubProxy.encode(market, baseToken, targetRatio, ratioState);
|
|
502
|
+
const triggerData = triggerService.compoundV3RatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
503
|
+
|
|
504
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
467
505
|
},
|
|
506
|
+
|
|
468
507
|
leverageManagementOnPrice(
|
|
469
508
|
strategyOrBundleId: number,
|
|
470
509
|
market: EthereumAddress,
|
|
@@ -503,21 +542,6 @@ export const compoundV3Encode = {
|
|
|
503
542
|
},
|
|
504
543
|
};
|
|
505
544
|
|
|
506
|
-
export const compoundV3L2Encode = {
|
|
507
|
-
leverageManagement(
|
|
508
|
-
market: EthereumAddress,
|
|
509
|
-
baseToken: EthereumAddress,
|
|
510
|
-
triggerRepayRatio: number,
|
|
511
|
-
triggerBoostRatio: number,
|
|
512
|
-
targetBoostRatio: number,
|
|
513
|
-
targetRepayRatio: number,
|
|
514
|
-
boostEnabled: boolean,
|
|
515
|
-
isEOA: boolean = false,
|
|
516
|
-
) {
|
|
517
|
-
return subDataService.compoundV3L2LeverageManagementSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
|
|
518
|
-
},
|
|
519
|
-
};
|
|
520
|
-
|
|
521
545
|
export const morphoAaveV2Encode = {
|
|
522
546
|
leverageManagement(
|
|
523
547
|
triggerRepayRatio: number,
|
|
@@ -547,40 +571,28 @@ export const exchangeEncode = {
|
|
|
547
571
|
|
|
548
572
|
return [strategyId, false, triggerData, subData];
|
|
549
573
|
},
|
|
550
|
-
|
|
574
|
+
limitOrderWithoutSubProxy(
|
|
551
575
|
fromToken: EthereumAddress,
|
|
552
576
|
toToken: EthereumAddress,
|
|
553
577
|
amount: string,
|
|
554
578
|
targetPrice: string,
|
|
555
579
|
goodUntil: string | number,
|
|
556
580
|
orderType: OrderType,
|
|
581
|
+
fromTokenDecimals: number,
|
|
582
|
+
toTokenDecimals: number,
|
|
583
|
+
network: ChainId,
|
|
557
584
|
) {
|
|
558
|
-
|
|
585
|
+
requireAddresses([fromToken, toToken]);
|
|
586
|
+
const subData = subDataService.exchangeLimitOrderSubDataWithoutSubProxy.encode(fromToken, toToken, amount);
|
|
587
|
+
const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
|
|
588
|
+
|
|
589
|
+
const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
|
|
590
|
+
|
|
591
|
+
return [strategyId, false, triggerData, subData];
|
|
559
592
|
},
|
|
560
593
|
};
|
|
561
594
|
|
|
562
595
|
export const sparkEncode = {
|
|
563
|
-
leverageManagement(
|
|
564
|
-
triggerRepayRatio: number,
|
|
565
|
-
triggerBoostRatio: number,
|
|
566
|
-
targetBoostRatio: number,
|
|
567
|
-
targetRepayRatio: number,
|
|
568
|
-
boostEnabled: boolean,
|
|
569
|
-
) {
|
|
570
|
-
let subInput = '0x';
|
|
571
|
-
|
|
572
|
-
subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
|
|
573
|
-
.padStart(32, '0'));
|
|
574
|
-
subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
|
|
575
|
-
.padStart(32, '0'));
|
|
576
|
-
subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
|
|
577
|
-
.padStart(32, '0'));
|
|
578
|
-
subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
|
|
579
|
-
.padStart(32, '0'));
|
|
580
|
-
subInput = subInput.concat(boostEnabled ? '01' : '00');
|
|
581
|
-
|
|
582
|
-
return subInput;
|
|
583
|
-
},
|
|
584
596
|
leverageManagementOnPrice(
|
|
585
597
|
strategyOrBundleId: number,
|
|
586
598
|
isBundle: boolean = true,
|
|
@@ -642,6 +654,26 @@ export const sparkEncode = {
|
|
|
642
654
|
|
|
643
655
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
644
656
|
},
|
|
657
|
+
|
|
658
|
+
liquidationProtection(
|
|
659
|
+
strategyOrBundleId: number,
|
|
660
|
+
market: EthereumAddress,
|
|
661
|
+
user: EthereumAddress,
|
|
662
|
+
ratioState: RatioState,
|
|
663
|
+
targetRatio: number,
|
|
664
|
+
triggerRatio: number,
|
|
665
|
+
) {
|
|
666
|
+
const isBundle = true;
|
|
667
|
+
|
|
668
|
+
const subData = subDataService.sparkLiquidationProtectionSubData.encode(
|
|
669
|
+
targetRatio,
|
|
670
|
+
ratioState,
|
|
671
|
+
);
|
|
672
|
+
const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
673
|
+
|
|
674
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
675
|
+
},
|
|
676
|
+
|
|
645
677
|
collateralSwitch(
|
|
646
678
|
strategyOrBundleId: number,
|
|
647
679
|
fromAsset: EthereumAddress,
|
|
@@ -738,6 +770,35 @@ export const morphoBlueEncode = {
|
|
|
738
770
|
|
|
739
771
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
740
772
|
},
|
|
773
|
+
|
|
774
|
+
liquidationProtection(
|
|
775
|
+
marketId: string,
|
|
776
|
+
loanToken: EthereumAddress,
|
|
777
|
+
collToken: EthereumAddress,
|
|
778
|
+
oracle: EthereumAddress,
|
|
779
|
+
irm: EthereumAddress,
|
|
780
|
+
lltv: string,
|
|
781
|
+
ratioState: RatioState,
|
|
782
|
+
targetRatio: number,
|
|
783
|
+
triggerRatio: number,
|
|
784
|
+
user: EthereumAddress,
|
|
785
|
+
isEOA: boolean,
|
|
786
|
+
network: ChainId,
|
|
787
|
+
) {
|
|
788
|
+
const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
|
|
789
|
+
|
|
790
|
+
const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
|
|
791
|
+
|
|
792
|
+
|
|
793
|
+
// Type casting because there is no MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION for Base chain.
|
|
794
|
+
// That is fine because we will just always send isEOA == false for Base chain.
|
|
795
|
+
const bundleNetwork = getBundleIdsByNetwork(network) as typeof Bundles.MainnetIds;
|
|
796
|
+
const bundleId = isEOA ? bundleNetwork.MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION : bundleNetwork.MORPHO_BLUE_SW_LIQUIDATION_PROTECTION;
|
|
797
|
+
const isBundle = true;
|
|
798
|
+
|
|
799
|
+
return [bundleId, isBundle, triggerData, subData];
|
|
800
|
+
},
|
|
801
|
+
|
|
741
802
|
leverageManagementOnPrice(
|
|
742
803
|
strategyOrBundleId: number,
|
|
743
804
|
isBundle: boolean = true,
|
|
@@ -866,6 +927,22 @@ export const fluidEncode = {
|
|
|
866
927
|
|
|
867
928
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
868
929
|
},
|
|
930
|
+
|
|
931
|
+
liquidationProtection(
|
|
932
|
+
nftId: string,
|
|
933
|
+
vault: EthereumAddress,
|
|
934
|
+
ratioState: RatioState,
|
|
935
|
+
targetRatio: number,
|
|
936
|
+
triggerRatio: number,
|
|
937
|
+
strategyOrBundleId: number,
|
|
938
|
+
) {
|
|
939
|
+
const isBundle = true;
|
|
940
|
+
const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
|
|
941
|
+
const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
|
|
942
|
+
|
|
943
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
944
|
+
},
|
|
945
|
+
|
|
869
946
|
};
|
|
870
947
|
|
|
871
948
|
export const aaveV4Encode = {
|
|
@@ -883,6 +960,22 @@ export const aaveV4Encode = {
|
|
|
883
960
|
|
|
884
961
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
885
962
|
},
|
|
963
|
+
|
|
964
|
+
liquidationProtection(
|
|
965
|
+
strategyOrBundleId: number,
|
|
966
|
+
owner: EthereumAddress,
|
|
967
|
+
spoke: EthereumAddress,
|
|
968
|
+
ratioState: RatioState,
|
|
969
|
+
targetRatio: number,
|
|
970
|
+
triggerRatio: number,
|
|
971
|
+
) {
|
|
972
|
+
const isBundle = true;
|
|
973
|
+
const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
|
|
974
|
+
const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
|
|
975
|
+
|
|
976
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
977
|
+
},
|
|
978
|
+
|
|
886
979
|
leverageManagementOnPrice(
|
|
887
980
|
strategyOrBundleId: number,
|
|
888
981
|
owner: EthereumAddress,
|
|
@@ -734,78 +734,6 @@ describe('Feature: subDataService.ts', () => {
|
|
|
734
734
|
});
|
|
735
735
|
});
|
|
736
736
|
|
|
737
|
-
describe('When testing subDataService.compoundV3LeverageManagementSubData', () => {
|
|
738
|
-
describe('encode()', () => {
|
|
739
|
-
const examples: Array<[[EthereumAddress, EthereumAddress, string, string, string, string, boolean, boolean], [market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean]]> = [
|
|
740
|
-
[
|
|
741
|
-
[
|
|
742
|
-
web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
|
|
743
|
-
web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
|
|
744
|
-
new Dec(160).mul(1e16).toString(),
|
|
745
|
-
new Dec(220).mul(1e16).toString(),
|
|
746
|
-
new Dec(180).mul(1e16).toString(),
|
|
747
|
-
new Dec(190).mul(1e16).toString(),
|
|
748
|
-
true, false,
|
|
749
|
-
],
|
|
750
|
-
[
|
|
751
|
-
web3Utils.toChecksumAddress('0x1C0F620155e85491f8D35440eb17538Ca5c55212'),
|
|
752
|
-
web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
|
|
753
|
-
160, 220, 180, 190,
|
|
754
|
-
true, false,
|
|
755
|
-
]
|
|
756
|
-
],
|
|
757
|
-
[
|
|
758
|
-
[
|
|
759
|
-
web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
|
|
760
|
-
web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
|
|
761
|
-
new Dec(160).mul(1e16).toString(),
|
|
762
|
-
new Dec(210).mul(1e16).toString(),
|
|
763
|
-
new Dec(180).mul(1e16).toString(),
|
|
764
|
-
new Dec(190).mul(1e16).toString(),
|
|
765
|
-
false, true,
|
|
766
|
-
],
|
|
767
|
-
[
|
|
768
|
-
web3Utils.toChecksumAddress('0xaC0F620155e85491f8D35440eb17538Ca5c55212'),
|
|
769
|
-
web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address),
|
|
770
|
-
160, 210, 180, 190,
|
|
771
|
-
false, true,
|
|
772
|
-
]
|
|
773
|
-
],
|
|
774
|
-
];
|
|
775
|
-
|
|
776
|
-
examples.forEach(([expected, actual]) => {
|
|
777
|
-
it(`Given ${actual} should return expected value: ${expected}`, () => {
|
|
778
|
-
expect(subDataService.compoundV3LeverageManagementSubData.encode(...actual)).to.eql(expected);
|
|
779
|
-
});
|
|
780
|
-
});
|
|
781
|
-
});
|
|
782
|
-
|
|
783
|
-
describe('decode()', () => {
|
|
784
|
-
const examples: Array<[{ targetRatio: number }, SubData]> = [
|
|
785
|
-
[
|
|
786
|
-
{ targetRatio: 123 },
|
|
787
|
-
[
|
|
788
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
|
|
789
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
|
|
790
|
-
],
|
|
791
|
-
],
|
|
792
|
-
[
|
|
793
|
-
{ targetRatio: 200 },
|
|
794
|
-
[
|
|
795
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000000000000000000000',
|
|
796
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
|
|
797
|
-
],
|
|
798
|
-
],
|
|
799
|
-
];
|
|
800
|
-
|
|
801
|
-
examples.forEach(([expected, actual]) => {
|
|
802
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
803
|
-
expect(subDataService.compoundV3LeverageManagementSubData.decode(actual)).to.eql(expected);
|
|
804
|
-
});
|
|
805
|
-
});
|
|
806
|
-
});
|
|
807
|
-
});
|
|
808
|
-
|
|
809
737
|
describe('When testing subDataService.morphoAaveV2LeverageManagementSubData', () => {
|
|
810
738
|
describe('encode()', () => {
|
|
811
739
|
const examples: Array<[[string, string, string, string, boolean], [triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean]]> = [
|
|
@@ -1408,54 +1336,6 @@ describe('Feature: subDataService.ts', () => {
|
|
|
1408
1336
|
});
|
|
1409
1337
|
});
|
|
1410
1338
|
|
|
1411
|
-
describe('When testing subDataService.compoundV3L2LeverageManagementSubData', () => {
|
|
1412
|
-
describe('encode()', () => {
|
|
1413
|
-
const examples: Array<[
|
|
1414
|
-
string,
|
|
1415
|
-
[market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean],
|
|
1416
|
-
]> = [
|
|
1417
|
-
[
|
|
1418
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0213D212133AfaB8F2b829B1066C7E43cAD94E2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000001a5e27eef13e00000100',
|
|
1419
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0213d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 190, true, false]
|
|
1420
|
-
],
|
|
1421
|
-
[
|
|
1422
|
-
'0x0313D212133AFab8F2b829B1066c7e43caD94e2c0413d212133afAb8F2B829b1066C7e43cAd94e2c000000000000000016345785d8a0000000000000000000001e87f85809dc0000000000000000000018fae27693b4000000000000000000000f43fc2c04ee00000000',
|
|
1423
|
-
[web3Utils.toChecksumAddress('0x0313d212133AFaB8F2B829B1066c7E43cAd94E2c'), web3Utils.toChecksumAddress('0x0413d212133AFaB8F2B829B1066c7E43cAd94E2c'), 160, 220, 180, 110, false, false]
|
|
1424
|
-
],
|
|
1425
|
-
];
|
|
1426
|
-
|
|
1427
|
-
examples.forEach(([expected, actual]) => {
|
|
1428
|
-
it(`Given ${actual} should return expected value: ${expected}`, () => {
|
|
1429
|
-
expect(subDataService.compoundV3L2LeverageManagementSubData.encode(...actual)).to.eql(expected);
|
|
1430
|
-
});
|
|
1431
|
-
});
|
|
1432
|
-
});
|
|
1433
|
-
describe('decode()', () => {
|
|
1434
|
-
const examples: Array<[{ targetRatio: number }, SubData]> = [
|
|
1435
|
-
[
|
|
1436
|
-
{ targetRatio: 200 },
|
|
1437
|
-
[
|
|
1438
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000213d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1439
|
-
'0x0000000000000000000000000000000000000000000000000000000000000001', '0x0000000000000000000000000000000000000000000000001bc16d674ec80000',
|
|
1440
|
-
],
|
|
1441
|
-
],
|
|
1442
|
-
[
|
|
1443
|
-
{ targetRatio: 123 },
|
|
1444
|
-
[
|
|
1445
|
-
'0x0000000000000000000000000313d212133AFaB8F2B829B1066c7E43cAd94E2c', '0x0000000000000000000000000413d212133AFaB8F2B829B1066c7E43cAd94E2c',
|
|
1446
|
-
'0x0000000000000000000000000000000000000000000000000000000000000000', '0x0000000000000000000000000000000000000000000000001111d67bb1bb0000',
|
|
1447
|
-
],
|
|
1448
|
-
],
|
|
1449
|
-
];
|
|
1450
|
-
|
|
1451
|
-
examples.forEach(([expected, actual]) => {
|
|
1452
|
-
it(`Given ${actual} should return expected value: ${JSON.stringify(expected)}`, () => {
|
|
1453
|
-
expect(subDataService.compoundV3L2LeverageManagementSubData.decode(actual)).to.eql(expected);
|
|
1454
|
-
});
|
|
1455
|
-
});
|
|
1456
|
-
});
|
|
1457
|
-
});
|
|
1458
|
-
|
|
1459
1339
|
describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
|
|
1460
1340
|
describe('encode()', () => {
|
|
1461
1341
|
const examples: Array<[
|