@defisaver/automation-sdk 3.3.14 → 3.3.15-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 +95 -0
- package/cjs/index.d.ts +4 -3
- package/cjs/index.js +6 -2
- package/cjs/services/strategiesService.js +181 -17
- package/cjs/services/strategySubService.d.ts +14 -13
- package/cjs/services/strategySubService.js +74 -63
- package/cjs/services/strategySubService.test.js +0 -234
- package/cjs/services/subDataService.d.ts +98 -1
- package/cjs/services/subDataService.js +264 -6
- package/cjs/services/subDataService.test.js +0 -42
- 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 +29 -6
- package/cjs/types/enums.js +23 -0
- package/esm/constants/index.js +95 -0
- package/esm/index.d.ts +4 -3
- package/esm/index.js +7 -3
- package/esm/services/strategiesService.js +181 -17
- package/esm/services/strategySubService.d.ts +14 -13
- package/esm/services/strategySubService.js +74 -60
- package/esm/services/strategySubService.test.js +2 -236
- package/esm/services/subDataService.d.ts +98 -1
- package/esm/services/subDataService.js +262 -5
- package/esm/services/subDataService.test.js +0 -42
- 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 +29 -6
- package/esm/types/enums.js +23 -0
- package/package.json +1 -1
- package/src/constants/index.ts +96 -0
- package/src/index.ts +24 -6
- package/src/services/strategiesService.ts +246 -17
- package/src/services/strategySubService.test.ts +0 -279
- package/src/services/strategySubService.ts +196 -110
- package/src/services/subDataService.test.ts +0 -48
- package/src/services/subDataService.ts +363 -4
- package/src/services/utils.test.ts +32 -1
- package/src/services/utils.ts +32 -1
- package/src/types/enums.ts +23 -0
|
@@ -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_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,19 +453,41 @@ 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,
|
|
475
|
+
market: EthereumAddress,
|
|
476
|
+
baseToken: EthereumAddress,
|
|
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
|
+
liquidationProtection(
|
|
457
491
|
market: EthereumAddress,
|
|
458
492
|
baseToken: EthereumAddress,
|
|
459
493
|
triggerRepayRatio: number,
|
|
@@ -463,8 +497,9 @@ export const compoundV3Encode = {
|
|
|
463
497
|
boostEnabled: boolean,
|
|
464
498
|
isEOA: boolean,
|
|
465
499
|
) {
|
|
466
|
-
return subDataService.
|
|
500
|
+
return subDataService.compoundV3LiquidationProtectionSubData.encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA);
|
|
467
501
|
},
|
|
502
|
+
|
|
468
503
|
leverageManagementOnPrice(
|
|
469
504
|
strategyOrBundleId: number,
|
|
470
505
|
market: EthereumAddress,
|
|
@@ -503,21 +538,6 @@ export const compoundV3Encode = {
|
|
|
503
538
|
},
|
|
504
539
|
};
|
|
505
540
|
|
|
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
541
|
export const morphoAaveV2Encode = {
|
|
522
542
|
leverageManagement(
|
|
523
543
|
triggerRepayRatio: number,
|
|
@@ -547,40 +567,28 @@ export const exchangeEncode = {
|
|
|
547
567
|
|
|
548
568
|
return [strategyId, false, triggerData, subData];
|
|
549
569
|
},
|
|
550
|
-
|
|
570
|
+
limitOrderWithoutSubProxy(
|
|
551
571
|
fromToken: EthereumAddress,
|
|
552
572
|
toToken: EthereumAddress,
|
|
553
573
|
amount: string,
|
|
554
574
|
targetPrice: string,
|
|
555
575
|
goodUntil: string | number,
|
|
556
576
|
orderType: OrderType,
|
|
577
|
+
fromTokenDecimals: number,
|
|
578
|
+
toTokenDecimals: number,
|
|
579
|
+
network: ChainId,
|
|
557
580
|
) {
|
|
558
|
-
|
|
581
|
+
requireAddresses([fromToken, toToken]);
|
|
582
|
+
const subData = subDataService.exchangeLimitOrderSubDataWithoutSubProxy.encode(fromToken, toToken, amount);
|
|
583
|
+
const triggerData = triggerService.exchangeOffchainPriceTrigger.encode(targetPrice, Number(goodUntil), orderType, fromTokenDecimals, toTokenDecimals);
|
|
584
|
+
|
|
585
|
+
const strategyId = STRATEGY_IDS[network].EXCHANGE_LIMIT_ORDER;
|
|
586
|
+
|
|
587
|
+
return [strategyId, false, triggerData, subData];
|
|
559
588
|
},
|
|
560
589
|
};
|
|
561
590
|
|
|
562
591
|
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
592
|
leverageManagementOnPrice(
|
|
585
593
|
strategyOrBundleId: number,
|
|
586
594
|
isBundle: boolean = true,
|
|
@@ -642,6 +650,26 @@ export const sparkEncode = {
|
|
|
642
650
|
|
|
643
651
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
644
652
|
},
|
|
653
|
+
|
|
654
|
+
liquidationProtection(
|
|
655
|
+
strategyOrBundleId: number,
|
|
656
|
+
market: EthereumAddress,
|
|
657
|
+
user: EthereumAddress,
|
|
658
|
+
ratioState: RatioState,
|
|
659
|
+
targetRatio: number,
|
|
660
|
+
triggerRatio: number,
|
|
661
|
+
) {
|
|
662
|
+
const isBundle = true;
|
|
663
|
+
|
|
664
|
+
const subData = subDataService.sparkLiquidationProtectionSubData.encode(
|
|
665
|
+
targetRatio,
|
|
666
|
+
ratioState,
|
|
667
|
+
);
|
|
668
|
+
const triggerData = triggerService.sparkRatioTrigger.encode(user, market, triggerRatio, ratioState);
|
|
669
|
+
|
|
670
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
671
|
+
},
|
|
672
|
+
|
|
645
673
|
collateralSwitch(
|
|
646
674
|
strategyOrBundleId: number,
|
|
647
675
|
fromAsset: EthereumAddress,
|
|
@@ -738,6 +766,32 @@ export const morphoBlueEncode = {
|
|
|
738
766
|
|
|
739
767
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
740
768
|
},
|
|
769
|
+
|
|
770
|
+
liquidationProtection(
|
|
771
|
+
marketId: string,
|
|
772
|
+
loanToken: EthereumAddress,
|
|
773
|
+
collToken: EthereumAddress,
|
|
774
|
+
oracle: EthereumAddress,
|
|
775
|
+
irm: EthereumAddress,
|
|
776
|
+
lltv: string,
|
|
777
|
+
ratioState: RatioState,
|
|
778
|
+
targetRatio: number,
|
|
779
|
+
triggerRatio: number,
|
|
780
|
+
user: EthereumAddress,
|
|
781
|
+
isEOA: boolean,
|
|
782
|
+
network: ChainId,
|
|
783
|
+
) {
|
|
784
|
+
const subData = subDataService.morphoBlueLiquidationProtectionSubData.encode(loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA);
|
|
785
|
+
|
|
786
|
+
const triggerData = triggerService.morphoBlueRatioTrigger.encode(marketId, user, triggerRatio, ratioState);
|
|
787
|
+
|
|
788
|
+
// TODO -> Check if need to deploy separate bundles for EOA, or can reuse this for EOA. Logic above is different for EOA and SW on arbi and mainnet. Base uses same for both, not sure if because of lack of EOA support or because it is using same bundle for both.
|
|
789
|
+
const bundleId = (getBundleIdsByNetwork(network) as typeof Bundles.MainnetIds).MORPHO_BLUE_LIQUIDATION_PROTECTION;
|
|
790
|
+
const isBundle = true;
|
|
791
|
+
|
|
792
|
+
return [bundleId, isBundle, triggerData, subData];
|
|
793
|
+
},
|
|
794
|
+
|
|
741
795
|
leverageManagementOnPrice(
|
|
742
796
|
strategyOrBundleId: number,
|
|
743
797
|
isBundle: boolean = true,
|
|
@@ -866,6 +920,22 @@ export const fluidEncode = {
|
|
|
866
920
|
|
|
867
921
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
868
922
|
},
|
|
923
|
+
|
|
924
|
+
liquidationProtection(
|
|
925
|
+
nftId: string,
|
|
926
|
+
vault: EthereumAddress,
|
|
927
|
+
ratioState: RatioState,
|
|
928
|
+
targetRatio: number,
|
|
929
|
+
triggerRatio: number,
|
|
930
|
+
strategyOrBundleId: number,
|
|
931
|
+
) {
|
|
932
|
+
const isBundle = true;
|
|
933
|
+
const subData = subDataService.fluidLiquidationProtectionSubData.encode(nftId, vault, ratioState, targetRatio);
|
|
934
|
+
const triggerData = triggerService.fluidRatioTrigger.encode(nftId, triggerRatio, ratioState);
|
|
935
|
+
|
|
936
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
937
|
+
},
|
|
938
|
+
|
|
869
939
|
};
|
|
870
940
|
|
|
871
941
|
export const aaveV4Encode = {
|
|
@@ -883,6 +953,22 @@ export const aaveV4Encode = {
|
|
|
883
953
|
|
|
884
954
|
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
885
955
|
},
|
|
956
|
+
|
|
957
|
+
liquidationProtection(
|
|
958
|
+
strategyOrBundleId: number,
|
|
959
|
+
owner: EthereumAddress,
|
|
960
|
+
spoke: EthereumAddress,
|
|
961
|
+
ratioState: RatioState,
|
|
962
|
+
targetRatio: number,
|
|
963
|
+
triggerRatio: number,
|
|
964
|
+
) {
|
|
965
|
+
const isBundle = true;
|
|
966
|
+
const subData = subDataService.aaveV4LiquidationProtectionSubData.encode(spoke, owner, ratioState, targetRatio);
|
|
967
|
+
const triggerData = triggerService.aaveV4RatioTrigger.encode(owner, spoke, triggerRatio, ratioState);
|
|
968
|
+
|
|
969
|
+
return [strategyOrBundleId, isBundle, triggerData, subData];
|
|
970
|
+
},
|
|
971
|
+
|
|
886
972
|
leverageManagementOnPrice(
|
|
887
973
|
strategyOrBundleId: number,
|
|
888
974
|
owner: EthereumAddress,
|
|
@@ -1408,54 +1408,6 @@ describe('Feature: subDataService.ts', () => {
|
|
|
1408
1408
|
});
|
|
1409
1409
|
});
|
|
1410
1410
|
|
|
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
1411
|
describe('When testing subDataService.morphoBlueLeverageManagementSubData', () => {
|
|
1460
1412
|
describe('encode()', () => {
|
|
1461
1413
|
const examples: Array<[
|