@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.
Files changed (41) hide show
  1. package/cjs/constants/index.js +130 -0
  2. package/cjs/index.d.ts +4 -3
  3. package/cjs/index.js +6 -2
  4. package/cjs/services/strategiesService.js +178 -17
  5. package/cjs/services/strategySubService.d.ts +14 -13
  6. package/cjs/services/strategySubService.js +79 -63
  7. package/cjs/services/strategySubService.test.js +0 -234
  8. package/cjs/services/subDataService.d.ts +92 -4
  9. package/cjs/services/subDataService.js +245 -35
  10. package/cjs/services/subDataService.test.js +0 -110
  11. package/cjs/services/utils.d.ts +3 -1
  12. package/cjs/services/utils.js +34 -1
  13. package/cjs/services/utils.test.js +25 -0
  14. package/cjs/types/enums.d.ts +36 -6
  15. package/cjs/types/enums.js +30 -0
  16. package/esm/constants/index.js +130 -0
  17. package/esm/index.d.ts +4 -3
  18. package/esm/index.js +7 -3
  19. package/esm/services/strategiesService.js +178 -17
  20. package/esm/services/strategySubService.d.ts +14 -13
  21. package/esm/services/strategySubService.js +79 -60
  22. package/esm/services/strategySubService.test.js +2 -236
  23. package/esm/services/subDataService.d.ts +92 -4
  24. package/esm/services/subDataService.js +243 -34
  25. package/esm/services/subDataService.test.js +0 -110
  26. package/esm/services/utils.d.ts +3 -1
  27. package/esm/services/utils.js +32 -1
  28. package/esm/services/utils.test.js +27 -2
  29. package/esm/types/enums.d.ts +36 -6
  30. package/esm/types/enums.js +30 -0
  31. package/package.json +1 -1
  32. package/src/constants/index.ts +132 -1
  33. package/src/index.ts +24 -6
  34. package/src/services/strategiesService.ts +242 -17
  35. package/src/services/strategySubService.test.ts +0 -279
  36. package/src/services/strategySubService.ts +209 -116
  37. package/src/services/subDataService.test.ts +0 -120
  38. package/src/services/subDataService.ts +335 -49
  39. package/src/services/utils.test.ts +32 -1
  40. package/src/services/utils.ts +32 -1
  41. package/src/types/enums.ts +30 -2
@@ -71,6 +71,14 @@ export declare const makerLeverageManagementWithoutSubProxy: {
71
71
  daiAddr: string;
72
72
  };
73
73
  };
74
+ export declare const makerLiquidationProtectionSubData: {
75
+ encode(vaultId: number, targetRatio: number, daiAddr?: EthereumAddress): string[];
76
+ decode(subData: string[]): {
77
+ vaultId: number;
78
+ targetRatio: number;
79
+ daiAddr: string;
80
+ };
81
+ };
74
82
  /**
75
83
  __ __ ______ __ __ __ .___________.____ ____ ____ ____ __
76
84
  | | | | / __ \ | | | | | | | |\ \ / / \ \ / / /_ |
@@ -89,6 +97,13 @@ export declare const liquityLeverageManagementSubData: {
89
97
  targetRatio: number;
90
98
  };
91
99
  };
100
+ export declare const liquityLeverageManagementSubDataWithoutSubProxy: {
101
+ encode(targetRatio: number, ratioState: RatioState): string[];
102
+ decode(subData: string[]): {
103
+ targetRatio: number;
104
+ ratioState: RatioState;
105
+ };
106
+ };
92
107
  export declare const liquityCloseSubData: {
93
108
  encode(closeToAssetAddr: EthereumAddress, chainId?: ChainId, collAddr?: EthereumAddress, debtAddr?: EthereumAddress): string[];
94
109
  decode(subData: string[]): {
@@ -177,6 +192,14 @@ export declare const aaveV2LeverageManagementSubData: {
177
192
  targetRatio: number;
178
193
  };
179
194
  };
195
+ export declare const aaveV2LeverageManagementSubDataWithoutSubProxy: {
196
+ encode(market: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
197
+ decode(subData: string[]): {
198
+ market: EthereumAddress;
199
+ targetRatio: number;
200
+ ratioState: RatioState;
201
+ };
202
+ };
180
203
  /**
181
204
  ___ ___ ____ ____ _______ ____ ____ ____
182
205
  / \ / \ \ \ / / | ____| \ \ / / |___ \
@@ -197,6 +220,13 @@ export declare const aaveV3LeverageManagementSubDataWithoutSubProxy: {
197
220
  ratioState: RatioState;
198
221
  };
199
222
  };
223
+ export declare const aaveV3LiquidationProtectionSubData: {
224
+ encode(targetRatio: number, ratioState: RatioState, market: EthereumAddress, user: EthereumAddress): string[];
225
+ decode(subData: string[]): {
226
+ targetRatio: number;
227
+ ratioState: RatioState;
228
+ };
229
+ };
200
230
  export declare const aaveV3LeverageManagementOnPriceGeneric: {
201
231
  encode(collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number, user: EthereumAddress): string[];
202
232
  decode(subData: string[]): {
@@ -269,6 +299,15 @@ export declare const aaveV4LeverageManagementSubData: {
269
299
  targetRatio: number;
270
300
  };
271
301
  };
302
+ export declare const aaveV4LiquidationProtectionSubData: {
303
+ encode: (spoke: EthereumAddress, owner: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
304
+ decode: (subData: string[]) => {
305
+ spoke: string;
306
+ owner: string;
307
+ ratioState: RatioState;
308
+ targetRatio: number;
309
+ };
310
+ };
272
311
  export declare const aaveV4LeverageManagementOnPriceSubData: {
273
312
  encode: (spoke: EthereumAddress, owner: EthereumAddress, collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, ratioState: RatioState, targetRatio: number) => string[];
274
313
  decode: (subData: string[]) => {
@@ -320,6 +359,13 @@ export declare const compoundV2LeverageManagementSubData: {
320
359
  targetRatio: number;
321
360
  };
322
361
  };
362
+ export declare const compoundV2LeverageManagementSubDataWithoutSubProxy: {
363
+ encode(targetRatio: number, ratioState: RatioState): string[];
364
+ decode(subData: string[]): {
365
+ targetRatio: number;
366
+ ratioState: RatioState;
367
+ };
368
+ };
323
369
  /**
324
370
  ______ ______ .___ ___. .______ ____ ____ ____
325
371
  / | / __ \ | \/ | | _ \ \ \ / / |___ \
@@ -328,16 +374,22 @@ export declare const compoundV2LeverageManagementSubData: {
328
374
  | `----.| `--' | | | | | | | \ / ___) |
329
375
  \______| \______/ |__| |__| | _| \__/ |____/
330
376
  */
331
- export declare const compoundV3LeverageManagementSubData: {
332
- encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string[];
377
+ export declare const compoundV3LeverageManagementSubDataWithoutSubProxy: {
378
+ encode(market: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
333
379
  decode(subData: string[]): {
380
+ market: EthereumAddress;
381
+ baseToken: EthereumAddress;
334
382
  targetRatio: number;
383
+ ratioState: RatioState;
335
384
  };
336
385
  };
337
- export declare const compoundV3L2LeverageManagementSubData: {
338
- encode(market: EthereumAddress, baseToken: EthereumAddress, triggerRepayRatio: number, triggerBoostRatio: number, targetBoostRatio: number, targetRepayRatio: number, boostEnabled: boolean, isEOA: boolean): string;
386
+ export declare const compoundV3LiquidationProtectionSubDataWithoutSubProxy: {
387
+ encode(market: EthereumAddress, baseToken: EthereumAddress, targetRatio: number, ratioState: RatioState): string[];
339
388
  decode(subData: string[]): {
389
+ market: EthereumAddress;
390
+ baseToken: EthereumAddress;
340
391
  targetRatio: number;
392
+ ratioState: RatioState;
341
393
  };
342
394
  };
343
395
  export declare const compoundV3LeverageManagementOnPriceSubData: {
@@ -386,6 +438,14 @@ export declare const exchangeLimitOrderSubData: {
386
438
  amount: string;
387
439
  };
388
440
  };
441
+ export declare const exchangeLimitOrderSubDataWithoutSubProxy: {
442
+ encode(fromToken: EthereumAddress, toToken: EthereumAddress, amount: string): string[];
443
+ decode: (subData: string[], chainId: ChainId) => {
444
+ fromToken: string;
445
+ toToken: string;
446
+ amount: string;
447
+ };
448
+ };
389
449
  /**
390
450
  _______..______ ___ .______ __ ___
391
451
  / || _ \ / \ | _ \ | |/ /
@@ -406,6 +466,13 @@ export declare const sparkLeverageManagementSubDataWithoutSubProxy: {
406
466
  ratioState: RatioState;
407
467
  };
408
468
  };
469
+ export declare const sparkLiquidationProtectionSubData: {
470
+ encode(targetRatio: number, ratioState: RatioState): string[];
471
+ decode(subData: string[]): {
472
+ targetRatio: number;
473
+ ratioState: RatioState;
474
+ };
475
+ };
409
476
  export declare const sparkCloseGenericSubData: {
410
477
  encode(collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, closeType: CloseStrategyType, marketAddr: EthereumAddress, user: EthereumAddress): string[];
411
478
  decode(subData: string[]): {
@@ -484,6 +551,18 @@ export declare const morphoBlueLeverageManagementSubData: {
484
551
  targetRatio: number;
485
552
  };
486
553
  };
554
+ export declare const morphoBlueLiquidationProtectionSubData: {
555
+ encode: (loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, ratioState: RatioState, targetRatio: number, user: EthereumAddress, isEOA: boolean) => string[];
556
+ decode: (subData: string[]) => {
557
+ loanToken: string;
558
+ collToken: string;
559
+ oracle: string;
560
+ irm: string;
561
+ lltv: string;
562
+ user: string;
563
+ targetRatio: number;
564
+ };
565
+ };
487
566
  export declare const morphoBlueLeverageManagementOnPriceSubData: {
488
567
  encode(loanToken: EthereumAddress, collToken: EthereumAddress, oracle: EthereumAddress, irm: EthereumAddress, lltv: string, targetRatio: number, user: EthereumAddress): string[];
489
568
  decode(subData: string[]): {
@@ -525,3 +604,12 @@ export declare const fluidLeverageManagementSubData: {
525
604
  targetRatio: number;
526
605
  };
527
606
  };
607
+ export declare const fluidLiquidationProtectionSubData: {
608
+ encode: (nftId: string, vault: EthereumAddress, ratioState: RatioState, targetRatio: number) => string[];
609
+ decode: (subData: string[]) => {
610
+ nftId: string;
611
+ vault: string;
612
+ ratioState: RatioState;
613
+ targetRatio: number;
614
+ };
615
+ };
@@ -125,6 +125,8 @@ export const makerLeverageManagementSubData = {
125
125
  return { vaultId, targetRatio };
126
126
  },
127
127
  };
128
+ // ! Any change here will PROBABLY require a change in makerLiquidationProtectionSubData as well, since it is copy paste
129
+ // ! Double check before changing
128
130
  export const makerLeverageManagementWithoutSubProxy = {
129
131
  encode(vaultId, targetRatio, daiAddr) {
130
132
  const encodedVaultId = AbiCoder.encodeParameter('uint256', vaultId);
@@ -139,6 +141,20 @@ export const makerLeverageManagementWithoutSubProxy = {
139
141
  return { vaultId, targetRatio, daiAddr };
140
142
  },
141
143
  };
144
+ export const makerLiquidationProtectionSubData = {
145
+ encode(vaultId, targetRatio, daiAddr) {
146
+ const encodedVaultId = AbiCoder.encodeParameter('uint256', vaultId);
147
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
148
+ const encodedDaiAddr = AbiCoder.encodeParameter('address', daiAddr || getAssetInfo('DAI', 1).address);
149
+ return [encodedVaultId, encodedTargetRatio, encodedDaiAddr];
150
+ },
151
+ decode(subData) {
152
+ const vaultId = +AbiCoder.decodeParameter('uint256', subData[0]).toString();
153
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
154
+ const daiAddr = AbiCoder.decodeParameter('address', subData[2]).toString();
155
+ return { vaultId, targetRatio, daiAddr };
156
+ },
157
+ };
142
158
  /**
143
159
  __ __ ______ __ __ __ .___________.____ ____ ____ ____ __
144
160
  | | | | / __ \ | | | | | | | |\ \ / / \ \ / / /_ |
@@ -161,6 +177,23 @@ export const liquityLeverageManagementSubData = {
161
177
  return { targetRatio };
162
178
  },
163
179
  };
180
+ export const liquityLeverageManagementSubDataWithoutSubProxy = {
181
+ encode(targetRatio, ratioState) {
182
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
183
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
184
+ const isRepay = ratioState === RatioState.UNDER;
185
+ const collActionType = isRepay ? CollActionType.WITHDRAW : CollActionType.SUPPLY;
186
+ const debtActionType = isRepay ? DebtActionType.PAYBACK : DebtActionType.BORROW;
187
+ const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
188
+ const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
189
+ return [encodedRatioState, encodedTargetRatio, collActionTypeEncoded, debtActionTypeEncoded];
190
+ },
191
+ decode(subData) {
192
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[0]);
193
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
194
+ return { targetRatio, ratioState };
195
+ },
196
+ };
164
197
  export const liquityCloseSubData = {
165
198
  encode(closeToAssetAddr, chainId = ChainId.Ethereum, collAddr, debtAddr) {
166
199
  const _collAddr = collAddr || getAssetInfo('WETH', chainId).address;
@@ -392,6 +425,25 @@ export const aaveV2LeverageManagementSubData = {
392
425
  return { targetRatio };
393
426
  },
394
427
  };
428
+ export const aaveV2LeverageManagementSubDataWithoutSubProxy = {
429
+ encode(market, targetRatio, ratioState) {
430
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
431
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
432
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
433
+ const isBoost = ratioState === RatioState.OVER;
434
+ if (isBoost) {
435
+ const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
436
+ return [encodedMarket, encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
437
+ }
438
+ return [encodedMarket, encodedTargetRatio, encodedRatioState];
439
+ },
440
+ decode(subData) {
441
+ const market = AbiCoder.decodeParameter('address', subData[0]);
442
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[1]));
443
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
444
+ return { market, targetRatio, ratioState };
445
+ },
446
+ };
395
447
  /**
396
448
  ___ ___ ____ ____ _______ ____ ____ ____
397
449
  / \ / \ \ \ / / | ____| \ \ / / |___ \
@@ -407,6 +459,8 @@ export const aaveV3LeverageManagementSubData = {
407
459
  return { targetRatio };
408
460
  },
409
461
  };
462
+ // ! Any change here will PROBABLY require a change in aaveV3LiquidationProtectionSubData as well
463
+ // ! Double check before changing. Liquidation protection is using Generic encoding for both - EOA and SW
410
464
  export const aaveV3LeverageManagementSubDataWithoutSubProxy = {
411
465
  encode(targetRatio, ratioState, market, user, isGeneric) {
412
466
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
@@ -426,6 +480,20 @@ export const aaveV3LeverageManagementSubDataWithoutSubProxy = {
426
480
  return { targetRatio, ratioState };
427
481
  },
428
482
  };
483
+ export const aaveV3LiquidationProtectionSubData = {
484
+ encode(targetRatio, ratioState, market, user) {
485
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
486
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
487
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
488
+ const encodedUser = AbiCoder.encodeParameter('address', user);
489
+ return [encodedTargetRatio, encodedRatioState, encodedMarket, encodedUser];
490
+ },
491
+ decode(subData) {
492
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
493
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
494
+ return { targetRatio, ratioState };
495
+ },
496
+ };
429
497
  export const aaveV3LeverageManagementOnPriceGeneric = {
430
498
  encode(collAsset, collAssetId, debtAsset, debtAssetId, marketAddr, targetRatio, user) {
431
499
  const encodedColl = AbiCoder.encodeParameter('address', collAsset);
@@ -587,6 +655,8 @@ export const aaveV3LeverageManagementOnPriceSubData = {
587
655
  / _____ \ / _____ \ \ / | |____ \ / | |
588
656
  /__/ \__\ /__/ \__\ \__/ |_______| \__/ |_|
589
657
  */
658
+ // ! Any change here will PROBABLY require a change in aaveV4LiquidationProtectionSubData as well, since it is copy paste
659
+ // ! Double check before changing
590
660
  export const aaveV4LeverageManagementSubData = {
591
661
  encode: (spoke, owner, ratioState, targetRatio) => {
592
662
  const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
@@ -613,6 +683,32 @@ export const aaveV4LeverageManagementSubData = {
613
683
  };
614
684
  },
615
685
  };
686
+ export const aaveV4LiquidationProtectionSubData = {
687
+ encode: (spoke, owner, ratioState, targetRatio) => {
688
+ const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
689
+ const ownerEncoded = AbiCoder.encodeParameter('address', owner);
690
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
691
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
692
+ // Add two empty slots for future addons (e.g tsi or slippage settings)
693
+ return [
694
+ spokeEncoded,
695
+ ownerEncoded,
696
+ ratioStateEncoded,
697
+ targetRatioEncoded,
698
+ EMPTY_SLOT,
699
+ EMPTY_SLOT,
700
+ ];
701
+ },
702
+ decode: (subData) => {
703
+ const spoke = AbiCoder.decodeParameter('address', subData[0]);
704
+ const owner = AbiCoder.decodeParameter('address', subData[1]);
705
+ const ratioState = Number(AbiCoder.decodeParameter('uint8', subData[2]));
706
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]));
707
+ return {
708
+ spoke, owner, ratioState, targetRatio,
709
+ };
710
+ },
711
+ };
616
712
  export const aaveV4LeverageManagementOnPriceSubData = {
617
713
  encode: (spoke, owner, collAsset, collAssetId, debtAsset, debtAssetId, ratioState, targetRatio) => {
618
714
  const spokeEncoded = AbiCoder.encodeParameter('address', spoke);
@@ -746,6 +842,23 @@ export const compoundV2LeverageManagementSubData = {
746
842
  return { targetRatio };
747
843
  },
748
844
  };
845
+ export const compoundV2LeverageManagementSubDataWithoutSubProxy = {
846
+ encode(targetRatio, ratioState) {
847
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
848
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
849
+ const isBoost = ratioState === RatioState.OVER;
850
+ if (isBoost) {
851
+ const enableAsCollEncoded = AbiCoder.encodeParameter('uint256', 1);
852
+ return [encodedTargetRatio, encodedRatioState, enableAsCollEncoded];
853
+ }
854
+ return [encodedTargetRatio, encodedRatioState];
855
+ },
856
+ decode(subData) {
857
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
858
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
859
+ return { targetRatio, ratioState };
860
+ },
861
+ };
749
862
  /**
750
863
  ______ ______ .___ ___. .______ ____ ____ ____
751
864
  / | / __ \ | \/ | | _ \ \ \ / / |___ \
@@ -754,46 +867,42 @@ export const compoundV2LeverageManagementSubData = {
754
867
  | `----.| `--' | | | | | | | \ / ___) |
755
868
  \______| \______/ |__| |__| | _| \__/ |____/
756
869
  */
757
- export const compoundV3LeverageManagementSubData = {
758
- encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
759
- return [
760
- market,
761
- baseToken,
762
- new Dec(triggerRepayRatio).mul(1e16).toString(),
763
- new Dec(triggerBoostRatio).mul(1e16).toString(),
764
- new Dec(targetBoostRatio).mul(1e16).toString(),
765
- new Dec(targetRepayRatio).mul(1e16).toString(),
766
- // @ts-ignore // TODO
767
- boostEnabled, isEOA,
768
- ];
870
+ // ! Any change here will PROBABLY require a change in compoundV3LiquidationProtectionSubDataWithoutSubProxy as well, since it is copy paste
871
+ // ! Double check before changing
872
+ export const compoundV3LeverageManagementSubDataWithoutSubProxy = {
873
+ encode(market, baseToken, targetRatio, ratioState) {
874
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
875
+ const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
876
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
877
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
878
+ return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
769
879
  },
770
880
  decode(subData) {
771
- const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
772
- const targetRatio = weiToRatioPercentage(weiRatio);
773
- return { targetRatio };
881
+ const market = AbiCoder.decodeParameter('address', subData[0]);
882
+ const baseToken = AbiCoder.decodeParameter('address', subData[1]);
883
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
884
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]));
885
+ return {
886
+ market, baseToken, targetRatio, ratioState,
887
+ };
774
888
  },
775
889
  };
776
- export const compoundV3L2LeverageManagementSubData = {
777
- encode(market, baseToken, triggerRepayRatio, triggerBoostRatio, targetBoostRatio, targetRepayRatio, boostEnabled, isEOA) {
778
- let subInput = '0x';
779
- subInput = subInput.concat(market.slice(2));
780
- subInput = subInput.concat(baseToken.slice(2));
781
- subInput = subInput.concat(new Dec(triggerRepayRatio).mul(1e16).toHex().slice(2)
782
- .padStart(32, '0'));
783
- subInput = subInput.concat(new Dec(triggerBoostRatio).mul(1e16).toHex().slice(2)
784
- .padStart(32, '0'));
785
- subInput = subInput.concat(new Dec(targetBoostRatio).mul(1e16).toHex().slice(2)
786
- .padStart(32, '0'));
787
- subInput = subInput.concat(new Dec(targetRepayRatio).mul(1e16).toHex().slice(2)
788
- .padStart(32, '0'));
789
- subInput = subInput.concat(boostEnabled ? '01' : '00');
790
- subInput = subInput.concat(isEOA ? '01' : '00');
791
- return subInput;
890
+ export const compoundV3LiquidationProtectionSubDataWithoutSubProxy = {
891
+ encode(market, baseToken, targetRatio, ratioState) {
892
+ const encodedMarket = AbiCoder.encodeParameter('address', market);
893
+ const encodedBaseToken = AbiCoder.encodeParameter('address', baseToken);
894
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
895
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
896
+ return [encodedMarket, encodedBaseToken, encodedRatioState, encodedTargetRatio];
792
897
  },
793
898
  decode(subData) {
794
- const ratioWei = AbiCoder.decodeParameter('uint256', subData[3]);
795
- const targetRatio = weiToRatioPercentage(ratioWei);
796
- return { targetRatio };
899
+ const market = AbiCoder.decodeParameter('address', subData[0]);
900
+ const baseToken = AbiCoder.decodeParameter('address', subData[1]);
901
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
902
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[3]));
903
+ return {
904
+ market, baseToken, targetRatio, ratioState,
905
+ };
797
906
  },
798
907
  };
799
908
  export const compoundV3LeverageManagementOnPriceSubData = {
@@ -899,6 +1008,21 @@ export const exchangeLimitOrderSubData = {
899
1008
  return { fromToken, toToken, amount };
900
1009
  },
901
1010
  };
1011
+ export const exchangeLimitOrderSubDataWithoutSubProxy = {
1012
+ encode(fromToken, toToken, amount) {
1013
+ return [
1014
+ AbiCoder.encodeParameter('address', fromToken),
1015
+ AbiCoder.encodeParameter('address', toToken),
1016
+ AbiCoder.encodeParameter('uint256', amount),
1017
+ ];
1018
+ },
1019
+ decode: (subData, chainId) => {
1020
+ const fromToken = AbiCoder.decodeParameter('address', subData[0]).toString();
1021
+ const toToken = AbiCoder.decodeParameter('address', subData[1]).toString();
1022
+ const amount = assetAmountInEth(AbiCoder.decodeParameter('uint256', subData[2]).toString(), getAssetInfoByAddress(fromToken, chainId).symbol);
1023
+ return { fromToken, toToken, amount };
1024
+ },
1025
+ };
902
1026
  /**
903
1027
  _______..______ ___ .______ __ ___
904
1028
  / || _ \ / \ | _ \ | |/ /
@@ -914,6 +1038,8 @@ export const sparkLeverageManagementSubData = {
914
1038
  return { targetRatio };
915
1039
  },
916
1040
  };
1041
+ // ! Any change here will PROBABLY require a change in sparkLiquidationProtectionSubData as well, since it is copy paste
1042
+ // ! Double check before changing
917
1043
  export const sparkLeverageManagementSubDataWithoutSubProxy = {
918
1044
  encode(targetRatio, ratioState) {
919
1045
  const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
@@ -928,6 +1054,20 @@ export const sparkLeverageManagementSubDataWithoutSubProxy = {
928
1054
  return { targetRatio, ratioState };
929
1055
  },
930
1056
  };
1057
+ export const sparkLiquidationProtectionSubData = {
1058
+ encode(targetRatio, ratioState) {
1059
+ const encodedTargetRatio = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1060
+ const encodedRatioState = AbiCoder.encodeParameter('uint8', ratioState);
1061
+ const encodedUseDefaultMarket = AbiCoder.encodeParameter('bool', true);
1062
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', false);
1063
+ return [encodedTargetRatio, encodedRatioState, encodedUseDefaultMarket, encodedUseOnBehalf];
1064
+ },
1065
+ decode(subData) {
1066
+ const targetRatio = weiToRatioPercentage(AbiCoder.decodeParameter('uint256', subData[0]));
1067
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[1]);
1068
+ return { targetRatio, ratioState };
1069
+ },
1070
+ };
931
1071
  export const sparkCloseGenericSubData = {
932
1072
  encode(collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, user) {
933
1073
  const encodedColl = AbiCoder.encodeParameter('address', collAsset);
@@ -1076,6 +1216,8 @@ export const crvUSDPaybackSubData = {
1076
1216
  | | | | | `--' | | |\ \----.| | | | | | | `--' |
1077
1217
  |__| |__| \______/ | _| `._____|| _| |__| |__| \______/
1078
1218
  */
1219
+ // ! Any change here will PROBABLY require a change in morphoBlueLiquidationProtectionSubData as well, since it is copy paste
1220
+ // ! Double check before changing
1079
1221
  export const morphoBlueLeverageManagementSubData = {
1080
1222
  encode: (loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA) => {
1081
1223
  const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
@@ -1109,6 +1251,39 @@ export const morphoBlueLeverageManagementSubData = {
1109
1251
  };
1110
1252
  },
1111
1253
  };
1254
+ export const morphoBlueLiquidationProtectionSubData = {
1255
+ encode: (loanToken, collToken, oracle, irm, lltv, ratioState, targetRatio, user, isEOA) => {
1256
+ const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
1257
+ const collTokenEncoded = AbiCoder.encodeParameter('address', collToken);
1258
+ const oracleEncoded = AbiCoder.encodeParameter('address', oracle);
1259
+ const irmEncoded = AbiCoder.encodeParameter('address', irm);
1260
+ const lltvEncoded = AbiCoder.encodeParameter('uint256', lltv);
1261
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
1262
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1263
+ const userEncoded = AbiCoder.encodeParameter('address', user);
1264
+ const isEOAEncoded = AbiCoder.encodeParameter('bool', isEOA);
1265
+ return [loanTokenEncoded, collTokenEncoded, oracleEncoded, irmEncoded, lltvEncoded, ratioStateEncoded, targetRatioEncoded, userEncoded, isEOAEncoded];
1266
+ },
1267
+ decode: (subData) => {
1268
+ const loanToken = AbiCoder.decodeParameter('address', subData[0]);
1269
+ const collToken = AbiCoder.decodeParameter('address', subData[1]);
1270
+ const oracle = AbiCoder.decodeParameter('address', subData[2]);
1271
+ const irm = AbiCoder.decodeParameter('address', subData[3]);
1272
+ const lltv = AbiCoder.decodeParameter('uint256', subData[4]);
1273
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[6]);
1274
+ const user = AbiCoder.decodeParameter('address', subData[7]);
1275
+ const targetRatio = weiToRatioPercentage(weiRatio);
1276
+ return {
1277
+ loanToken,
1278
+ collToken,
1279
+ oracle,
1280
+ irm,
1281
+ lltv,
1282
+ user,
1283
+ targetRatio,
1284
+ };
1285
+ },
1286
+ };
1112
1287
  export const morphoBlueLeverageManagementOnPriceSubData = {
1113
1288
  encode(loanToken, collToken, oracle, irm, lltv, targetRatio, user) {
1114
1289
  const loanTokenEncoded = AbiCoder.encodeParameter('address', loanToken);
@@ -1178,6 +1353,8 @@ _______ __ __ __ __ _______
1178
1353
  | | | `----.| `--' | | | | '--' |
1179
1354
  |__| |_______| \______/ |__| |_______/
1180
1355
  */
1356
+ // ! Any change here will PROBABLY require a change in fluidLeverageManagementSubData as well, since it is copy paste
1357
+ // ! Double check before changing
1181
1358
  export const fluidLeverageManagementSubData = {
1182
1359
  encode: (nftId, vault, ratioState, targetRatio) => {
1183
1360
  const nftIdEncoded = AbiCoder.encodeParameter('uint256', nftId);
@@ -1211,3 +1388,35 @@ export const fluidLeverageManagementSubData = {
1211
1388
  };
1212
1389
  },
1213
1390
  };
1391
+ export const fluidLiquidationProtectionSubData = {
1392
+ encode: (nftId, vault, ratioState, targetRatio) => {
1393
+ const nftIdEncoded = AbiCoder.encodeParameter('uint256', nftId);
1394
+ const vaultEncoded = AbiCoder.encodeParameter('address', vault);
1395
+ const ratioStateEncoded = AbiCoder.encodeParameter('uint8', ratioState);
1396
+ const targetRatioEncoded = AbiCoder.encodeParameter('uint256', ratioPercentageToWei(targetRatio));
1397
+ const wrapEthEncoded = AbiCoder.encodeParameter('bool', true);
1398
+ const collActionType = CollActionType.WITHDRAW;
1399
+ const debtActionType = DebtActionType.PAYBACK;
1400
+ const collActionTypeEncoded = AbiCoder.encodeParameter('uint8', collActionType);
1401
+ const debtActionTypeEncoded = AbiCoder.encodeParameter('uint8', debtActionType);
1402
+ return [
1403
+ nftIdEncoded,
1404
+ vaultEncoded,
1405
+ ratioStateEncoded,
1406
+ targetRatioEncoded,
1407
+ wrapEthEncoded,
1408
+ collActionTypeEncoded,
1409
+ debtActionTypeEncoded,
1410
+ ];
1411
+ },
1412
+ decode: (subData) => {
1413
+ const nftId = AbiCoder.decodeParameter('uint256', subData[0]);
1414
+ const vault = AbiCoder.decodeParameter('address', subData[1]);
1415
+ const ratioState = AbiCoder.decodeParameter('uint8', subData[2]);
1416
+ const weiRatio = AbiCoder.decodeParameter('uint256', subData[3]);
1417
+ const targetRatio = weiToRatioPercentage(weiRatio);
1418
+ return {
1419
+ nftId, vault, ratioState, targetRatio,
1420
+ };
1421
+ },
1422
+ };