@defisaver/automation-sdk 3.3.22-coll-switch-generic-dev → 3.3.22-instant-twap-close-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.
@@ -424,52 +424,33 @@ export const aaveV3Encode = {
424
424
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
425
425
  },
426
426
 
427
- collateralSwitch(
428
- strategyOrBundleId: number,
429
- fromAsset: EthereumAddress,
430
- fromAssetId: number,
431
- toAsset: EthereumAddress,
432
- toAssetId: number,
433
- marketAddr: EthereumAddress,
434
- amountToSwitch: string,
435
- baseTokenAddress: EthereumAddress,
436
- quoteTokenAddress: EthereumAddress,
437
- price: number,
438
- state: RatioState,
439
- ) {
440
- const isBundle = false;
441
-
442
- const subDataEncoded = subDataService.aaveV3CollateralSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch);
443
- const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
444
-
445
- return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
446
- },
447
-
448
- collateralSwitchGeneric(
427
+ instantCloseOnPriceGeneric(
449
428
  strategyOrBundleId: number,
450
- fromAsset: EthereumAddress,
451
- fromAssetId: number,
452
- toAsset: EthereumAddress,
453
- toAssetId: number,
429
+ collAsset: EthereumAddress,
430
+ collAssetId: number,
431
+ debtAsset: EthereumAddress,
432
+ debtAssetId: number,
454
433
  marketAddr: EthereumAddress,
455
- amountToSwitch: string,
456
434
  user: EthereumAddress,
457
- baseTokenAddress: EthereumAddress,
458
- quoteTokenAddress: EthereumAddress,
459
- price: number,
460
- state: RatioState,
435
+ tsi: string,
436
+ slippage: string,
437
+ stopLossPrice: number = 0,
438
+ stopLossType: CloseToAssetType = CloseToAssetType.DEBT,
439
+ takeProfitPrice: number = 0,
440
+ takeProfitType: CloseToAssetType = CloseToAssetType.COLLATERAL,
461
441
  ) {
462
- const isBundle = false;
442
+ const isBundle = true;
443
+ const closeType = getCloseStrategyType(stopLossPrice, stopLossType, takeProfitPrice, takeProfitType);
463
444
 
464
- const subDataEncoded = subDataService.aaveV3GenericFLCollateralSwitchSubData.encode(
465
- fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user,
445
+ const subDataEncoded = subDataService.aaveV3InstantCloseGenericSubData.encode(
446
+ collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, user, tsi, slippage,
466
447
  );
467
- const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
448
+ const triggerDataEncoded = triggerService.aaveV3QuotePriceRangeTrigger.encode(collAsset, debtAsset, stopLossPrice, takeProfitPrice);
468
449
 
469
450
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
470
451
  },
471
452
 
472
- debtSwitch(
453
+ collateralSwitch(
473
454
  strategyOrBundleId: number,
474
455
  fromAsset: EthereumAddress,
475
456
  fromAssetId: number,
@@ -477,7 +458,6 @@ export const aaveV3Encode = {
477
458
  toAssetId: number,
478
459
  marketAddr: EthereumAddress,
479
460
  amountToSwitch: string,
480
- user: EthereumAddress,
481
461
  baseTokenAddress: EthereumAddress,
482
462
  quoteTokenAddress: EthereumAddress,
483
463
  price: number,
@@ -485,7 +465,7 @@ export const aaveV3Encode = {
485
465
  ) {
486
466
  const isBundle = false;
487
467
 
488
- const subDataEncoded = subDataService.aaveV3DebtSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user);
468
+ const subDataEncoded = subDataService.aaveV3CollateralSwitchSubData.encode(fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch);
489
469
  const triggerDataEncoded = triggerService.aaveV3QuotePriceTrigger.encode(baseTokenAddress, quoteTokenAddress, price, state);
490
470
 
491
471
  return [strategyOrBundleId, isBundle, triggerDataEncoded, subDataEncoded];
@@ -549,155 +549,6 @@ describe('Feature: subDataService.ts', () => {
549
549
  });
550
550
  });
551
551
 
552
- describe('When testing subDataService.aaveV3DebtSwitchSubData', () => {
553
- describe('encode()', () => {
554
- const examples: Array<[SubData, [fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, user: EthereumAddress]]> = [
555
- // USDC -> DAI
556
- [
557
- [
558
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
559
- '0x0000000000000000000000000000000000000000000000000000000000000001',
560
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
561
- '0x0000000000000000000000000000000000000000000000000000000000000003',
562
- '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
563
- '0x0000000000000000000000000000000000000000000000008ac7230489e80000',
564
- '0x000000000000000000000000dd6ecd6c9b9f7e29e0f14bb9d5f0d0a3c6cb6c6a',
565
- ],
566
- [
567
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
568
- 1,
569
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
570
- 3,
571
- web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
572
- '10000000000000000000', // 10 tokens
573
- web3Utils.toChecksumAddress('0xDd6ecD6c9b9F7e29E0f14bb9D5F0D0A3C6cB6c6A'),
574
- ]
575
- ],
576
- // DAI -> USDC (MaxUint256)
577
- [
578
- [
579
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
580
- '0x0000000000000000000000000000000000000000000000000000000000000003',
581
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
582
- '0x0000000000000000000000000000000000000000000000000000000000000001',
583
- '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
584
- '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
585
- '0x000000000000000000000000dd6ecd6c9b9f7e29e0f14bb9d5f0d0a3c6cb6c6a',
586
- ],
587
- [
588
- web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
589
- 3,
590
- web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
591
- 1,
592
- web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
593
- MAXUINT, // MaxUint256
594
- web3Utils.toChecksumAddress('0xDd6ecD6c9b9F7e29E0f14bb9D5F0D0A3C6cB6c6A'),
595
- ]
596
- ],
597
- ];
598
-
599
- examples.forEach(([expected, actual]) => {
600
- it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
601
- expect(subDataService.aaveV3DebtSwitchSubData.encode(...actual)).to.eql(expected);
602
- });
603
- });
604
- });
605
-
606
- describe('decode()', () => {
607
- const examples: Array<[{ fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, user: EthereumAddress }, SubData]> = [
608
- // USDC -> DAI
609
- [
610
- {
611
- fromAsset: web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
612
- fromAssetId: 1,
613
- toAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
614
- toAssetId: 3,
615
- marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
616
- amountToSwitch: '10000000000000000000',
617
- user: web3Utils.toChecksumAddress('0xDd6ecD6c9b9F7e29E0f14bb9D5F0D0A3C6cB6c6A'),
618
- },
619
- [
620
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
621
- '0x0000000000000000000000000000000000000000000000000000000000000001',
622
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
623
- '0x0000000000000000000000000000000000000000000000000000000000000003',
624
- '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
625
- '0x0000000000000000000000000000000000000000000000008ac7230489e80000',
626
- '0x000000000000000000000000dd6ecd6c9b9f7e29e0f14bb9d5f0d0a3c6cb6c6a',
627
- ],
628
- ],
629
- // DAI -> USDC (MaxUint256)
630
- [
631
- {
632
- fromAsset: web3Utils.toChecksumAddress(getAssetInfo('DAI', ChainId.Ethereum).address),
633
- fromAssetId: 3,
634
- toAsset: web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address),
635
- toAssetId: 1,
636
- marketAddr: web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39'),
637
- amountToSwitch: MAXUINT,
638
- user: web3Utils.toChecksumAddress('0xDd6ecD6c9b9F7e29E0f14bb9D5F0D0A3C6cB6c6A'),
639
- },
640
- [
641
- '0x0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f',
642
- '0x0000000000000000000000000000000000000000000000000000000000000003',
643
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
644
- '0x0000000000000000000000000000000000000000000000000000000000000001',
645
- '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
646
- '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
647
- '0x000000000000000000000000dd6ecd6c9b9f7e29e0f14bb9d5f0d0a3c6cb6c6a',
648
- ],
649
- ],
650
- ];
651
-
652
- examples.forEach(([expected, actual]) => {
653
- it(`Given ${JSON.stringify(actual)} should return expected value: ${JSON.stringify(expected)}`, () => {
654
- expect(subDataService.aaveV3DebtSwitchSubData.decode(actual)).to.eql(expected);
655
- });
656
- });
657
- });
658
- });
659
-
660
- describe('When testing subDataService.aaveV3GenericFLCollateralSwitchSubData', () => {
661
- const fromAsset = web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address);
662
- const toAsset = web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address);
663
- const marketAddr = web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39');
664
- const user = web3Utils.toChecksumAddress('0x1234567890abcdef1234567890abcdef12345678');
665
- const examples = [
666
- ['10000000000000000000', '0x0000000000000000000000000000000000000000000000008ac7230489e80000'],
667
- [MAXUINT, '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'],
668
- ];
669
-
670
- examples.forEach(([amountToSwitch, encodedAmount]) => {
671
- const subData: SubData = [
672
- '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
673
- '0x0000000000000000000000000000000000000000000000000000000000000100',
674
- '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
675
- '0x000000000000000000000000000000000000000000000000000000000000ffff',
676
- '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
677
- encodedAmount,
678
- '0x0000000000000000000000001234567890abcdef1234567890abcdef12345678',
679
- ];
680
-
681
- it(`encode() preserves uint16 asset IDs and user when switching ${amountToSwitch}`, () => {
682
- expect(subDataService.aaveV3GenericFLCollateralSwitchSubData.encode(
683
- fromAsset, 256, toAsset, 65535, marketAddr, amountToSwitch, user,
684
- )).to.eql(subData);
685
- });
686
-
687
- it(`decode() preserves uint16 asset IDs and user when switching ${amountToSwitch}`, () => {
688
- expect(subDataService.aaveV3GenericFLCollateralSwitchSubData.decode(subData)).to.eql({
689
- fromAsset,
690
- fromAssetId: 256,
691
- toAsset,
692
- toAssetId: 65535,
693
- marketAddr,
694
- amountToSwitch,
695
- user,
696
- });
697
- });
698
- });
699
- });
700
-
701
552
  describe('When testing subDataService.sparkCollateralSwitchSubData', () => {
702
553
  describe('encode()', () => {
703
554
  const examples: Array<[SubData, [fromAsset: EthereumAddress, fromAssetId: number, toAsset: EthereumAddress, toAssetId: number, marketAddr: EthereumAddress, amountToSwitch: string, useOnBehalf?: boolean]]> = [
@@ -2644,6 +2495,104 @@ describe('Feature: subDataService.ts', () => {
2644
2495
  });
2645
2496
  });
2646
2497
  });
2498
+
2499
+ describe("When testing subDataService.aaveV3InstantCloseGenericSubData", () => {
2500
+ const WETH = web3Utils.toChecksumAddress(getAssetInfo('WETH', ChainId.Ethereum).address);
2501
+ const USDC = web3Utils.toChecksumAddress(getAssetInfo('USDC', ChainId.Ethereum).address);
2502
+ const MARKET = web3Utils.toChecksumAddress('0x87870Bca3F3fD6335C3F4ce8392D69d0B4161d39');
2503
+ const USER = web3Utils.toChecksumAddress('0x1234567890123456789012345678901234567890');
2504
+
2505
+ const examples: Array<
2506
+ [
2507
+ string[],
2508
+ [
2509
+ collAsset: EthereumAddress,
2510
+ collAssetId: number,
2511
+ debtAsset: EthereumAddress,
2512
+ debtAssetId: number,
2513
+ closeType: CloseStrategyType,
2514
+ marketAddr: EthereumAddress,
2515
+ user: EthereumAddress,
2516
+ tsi: string,
2517
+ slippage: string
2518
+ ]
2519
+ ]
2520
+ > = [
2521
+ // TAKE_PROFIT_IN_COLLATERAL, zero tsi and slippage
2522
+ [
2523
+ [
2524
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
2525
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
2526
+ '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
2527
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
2528
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
2529
+ '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
2530
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
2531
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
2532
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
2533
+ ],
2534
+ [WETH, 0, USDC, 1, CloseStrategyType.TAKE_PROFIT_IN_COLLATERAL, MARKET, USER, '0', '0'],
2535
+ ],
2536
+ // STOP_LOSS_IN_DEBT
2537
+ [
2538
+ [
2539
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
2540
+ '0x0000000000000000000000000000000000000000000000000000000000000000',
2541
+ '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
2542
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
2543
+ '0x0000000000000000000000000000000000000000000000000000000000000003',
2544
+ '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
2545
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
2546
+ '0x0000000000000000000000000000000000000000000000000de0b6b3a7640000',
2547
+ '0x000000000000000000000000000000000000000000000000002386f26fc10000',
2548
+ ],
2549
+ [WETH, 0, USDC, 1, CloseStrategyType.STOP_LOSS_IN_DEBT, MARKET, USER, '1000000000000000000', '10000000000000000'],
2550
+ ],
2551
+ // TAKE_PROFIT_IN_DEBT_AND_STOP_LOSS_IN_COLLATERAL, asset ids above uint8 range
2552
+ [
2553
+ [
2554
+ '0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
2555
+ '0x000000000000000000000000000000000000000000000000000000000000012c',
2556
+ '0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
2557
+ '0x0000000000000000000000000000000000000000000000000000000000000190',
2558
+ '0x0000000000000000000000000000000000000000000000000000000000000007',
2559
+ '0x00000000000000000000000087870bca3f3fd6335c3f4ce8392d69d0b4161d39',
2560
+ '0x0000000000000000000000001234567890123456789012345678901234567890',
2561
+ '0x00000000000000000000000000000000000000000000000000b1a2bc2ec50000',
2562
+ '0x0000000000000000000000000000000000000000000000000011c37937e08000',
2563
+ ],
2564
+ [WETH, 300, USDC, 400, CloseStrategyType.TAKE_PROFIT_IN_DEBT_AND_STOP_LOSS_IN_COLLATERAL, MARKET, USER, '50000000000000000', '5000000000000000'],
2565
+ ],
2566
+ ];
2567
+
2568
+ describe("encode()", () => {
2569
+ examples.forEach(([expected, actual]) => {
2570
+ it(`Given ${JSON.stringify(
2571
+ actual
2572
+ )} should return expected value: ${JSON.stringify(expected)}`, () => {
2573
+ expect(
2574
+ subDataService.aaveV3InstantCloseGenericSubData.encode(...actual)
2575
+ ).to.eql(expected);
2576
+ });
2577
+ });
2578
+ });
2579
+
2580
+ describe("decode()", () => {
2581
+ examples.forEach(([encoded, [collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, user, tsi, slippage]]) => {
2582
+ const expected = {
2583
+ collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, owner: user, tsi, slippage,
2584
+ };
2585
+
2586
+ it(`Given ${JSON.stringify(
2587
+ encoded
2588
+ )} should return expected value: ${JSON.stringify(expected)}`, () => {
2589
+ expect(
2590
+ subDataService.aaveV3InstantCloseGenericSubData.decode(encoded)
2591
+ ).to.eql(expected);
2592
+ });
2593
+ });
2594
+ });
2595
+ });
2647
2596
  describe('When testing subDataService.sparkLeverageManagementOnPriceSubData', () => {
2648
2597
  describe('encode()', () => {
2649
2598
  const examples: Array<[SubData, [collAsset: EthereumAddress, collAssetId: number, debtAsset: EthereumAddress, debtAssetId: number, marketAddr: EthereumAddress, targetRatio: number]] > =
@@ -687,106 +687,68 @@ export const aaveV3CloseGenericSubData = {
687
687
  };
688
688
  },
689
689
  };
690
- export const aaveV3CollateralSwitchSubData = {
690
+ export const aaveV3InstantCloseGenericSubData = {
691
691
  encode(
692
- fromAsset: EthereumAddress,
693
- fromAssetId: number,
694
- toAsset: EthereumAddress,
695
- toAssetId: number,
696
- marketAddr: EthereumAddress,
697
- amountToSwitch: string,
698
- useOnBehalf: boolean = false,
699
- ): SubData {
700
- const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
701
- const encodedFromAssetId = AbiCoder.encodeParameter('uint8', fromAssetId);
702
- const encodedToAsset = AbiCoder.encodeParameter('address', toAsset);
703
- const encodedToAssetId = AbiCoder.encodeParameter('uint8', toAssetId);
704
- const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
705
- const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
706
- const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', useOnBehalf);
707
-
708
- return [
709
- encodedFromAsset,
710
- encodedFromAssetId,
711
- encodedToAsset,
712
- encodedToAssetId,
713
- encodedMarketAddr,
714
- encodedAmountToSwitch,
715
- encodedUseOnBehalf,
716
- ];
717
- },
718
- decode(subData: SubData): {
719
- fromAsset: EthereumAddress,
720
- fromAssetId: number,
721
- toAsset: EthereumAddress,
722
- toAssetId: number,
723
- marketAddr: EthereumAddress,
724
- amountToSwitch: string,
725
- } {
726
- const fromAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
727
- const fromAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
728
- const toAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
729
- const toAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
730
- const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
731
- const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
732
-
733
- return {
734
- fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch,
735
- };
736
- },
737
- };
738
- export const aaveV3GenericFLCollateralSwitchSubData = {
739
- encode(
740
- fromAsset: EthereumAddress,
741
- fromAssetId: number,
742
- toAsset: EthereumAddress,
743
- toAssetId: number,
692
+ collAsset: EthereumAddress,
693
+ collAssetId: number,
694
+ debtAsset: EthereumAddress,
695
+ debtAssetId: number,
696
+ closeType: CloseStrategyType,
744
697
  marketAddr: EthereumAddress,
745
- amountToSwitch: string,
746
698
  user: EthereumAddress,
699
+ tsi: string,
700
+ slippage: string,
747
701
  ): SubData {
748
- const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
749
- const encodedFromAssetId = AbiCoder.encodeParameter('uint16', fromAssetId);
750
- const encodedToAsset = AbiCoder.encodeParameter('address', toAsset);
751
- const encodedToAssetId = AbiCoder.encodeParameter('uint16', toAssetId);
752
- const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
753
- const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
702
+ const encodedColl = AbiCoder.encodeParameter('address', collAsset);
703
+ const encodedCollId = AbiCoder.encodeParameter('uint16', collAssetId);
704
+ const encodedDebt = AbiCoder.encodeParameter('address', debtAsset);
705
+ const encodedDebtId = AbiCoder.encodeParameter('uint16', debtAssetId);
706
+ const encodedCloseType = AbiCoder.encodeParameter('uint8', closeType);
707
+ const encodedMarket = AbiCoder.encodeParameter('address', marketAddr);
754
708
  const encodedUser = AbiCoder.encodeParameter('address', user);
709
+ const encodedTsi = AbiCoder.encodeParameter('uint256', tsi);
710
+ const encodedSlippage = AbiCoder.encodeParameter('uint256', slippage);
755
711
 
756
712
  return [
757
- encodedFromAsset,
758
- encodedFromAssetId,
759
- encodedToAsset,
760
- encodedToAssetId,
761
- encodedMarketAddr,
762
- encodedAmountToSwitch,
713
+ encodedColl,
714
+ encodedCollId,
715
+ encodedDebt,
716
+ encodedDebtId,
717
+ encodedCloseType,
718
+ encodedMarket,
763
719
  encodedUser,
720
+ encodedTsi,
721
+ encodedSlippage,
764
722
  ];
765
723
  },
724
+
766
725
  decode(subData: SubData): {
767
- fromAsset: EthereumAddress,
768
- fromAssetId: number,
769
- toAsset: EthereumAddress,
770
- toAssetId: number,
726
+ collAsset: EthereumAddress,
727
+ collAssetId: number,
728
+ debtAsset: EthereumAddress,
729
+ debtAssetId: number,
730
+ closeType: CloseStrategyType,
771
731
  marketAddr: EthereumAddress,
772
- amountToSwitch: string,
773
- user: EthereumAddress,
732
+ owner: EthereumAddress,
733
+ tsi: string,
734
+ slippage: string,
774
735
  } {
775
- const fromAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
776
- const fromAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
777
- const toAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
778
- const toAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
779
- const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
780
- const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
781
- const user = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
736
+ const collAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
737
+ const collAssetId = Number(AbiCoder.decodeParameter('uint16', subData[1]));
738
+ const debtAsset = AbiCoder.decodeParameter('address', subData[2]) as unknown as EthereumAddress;
739
+ const debtAssetId = Number(AbiCoder.decodeParameter('uint16', subData[3]));
740
+ const closeType = Number(AbiCoder.decodeParameter('uint8', subData[4])) as CloseStrategyType;
741
+ const marketAddr = AbiCoder.decodeParameter('address', subData[5]) as unknown as EthereumAddress;
742
+ const owner = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
743
+ const tsi = AbiCoder.decodeParameter('uint256', subData[7]) as unknown as string;
744
+ const slippage = AbiCoder.decodeParameter('uint256', subData[8]) as unknown as string;
782
745
 
783
746
  return {
784
- fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user,
747
+ collAsset, collAssetId, debtAsset, debtAssetId, closeType, marketAddr, owner, tsi, slippage,
785
748
  };
786
749
  },
787
750
  };
788
-
789
- export const aaveV3DebtSwitchSubData = {
751
+ export const aaveV3CollateralSwitchSubData = {
790
752
  encode(
791
753
  fromAsset: EthereumAddress,
792
754
  fromAssetId: number,
@@ -794,7 +756,7 @@ export const aaveV3DebtSwitchSubData = {
794
756
  toAssetId: number,
795
757
  marketAddr: EthereumAddress,
796
758
  amountToSwitch: string,
797
- user: EthereumAddress,
759
+ useOnBehalf: boolean = false,
798
760
  ): SubData {
799
761
  const encodedFromAsset = AbiCoder.encodeParameter('address', fromAsset);
800
762
  const encodedFromAssetId = AbiCoder.encodeParameter('uint8', fromAssetId);
@@ -802,7 +764,7 @@ export const aaveV3DebtSwitchSubData = {
802
764
  const encodedToAssetId = AbiCoder.encodeParameter('uint8', toAssetId);
803
765
  const encodedMarketAddr = AbiCoder.encodeParameter('address', marketAddr);
804
766
  const encodedAmountToSwitch = AbiCoder.encodeParameter('uint256', amountToSwitch);
805
- const encodedUser = AbiCoder.encodeParameter('address', user);
767
+ const encodedUseOnBehalf = AbiCoder.encodeParameter('bool', useOnBehalf);
806
768
 
807
769
  return [
808
770
  encodedFromAsset,
@@ -811,7 +773,7 @@ export const aaveV3DebtSwitchSubData = {
811
773
  encodedToAssetId,
812
774
  encodedMarketAddr,
813
775
  encodedAmountToSwitch,
814
- encodedUser,
776
+ encodedUseOnBehalf,
815
777
  ];
816
778
  },
817
779
  decode(subData: SubData): {
@@ -821,7 +783,6 @@ export const aaveV3DebtSwitchSubData = {
821
783
  toAssetId: number,
822
784
  marketAddr: EthereumAddress,
823
785
  amountToSwitch: string,
824
- user: EthereumAddress,
825
786
  } {
826
787
  const fromAsset = AbiCoder.decodeParameter('address', subData[0]) as unknown as EthereumAddress;
827
788
  const fromAssetId = Number(AbiCoder.decodeParameter('uint8', subData[1]));
@@ -829,10 +790,9 @@ export const aaveV3DebtSwitchSubData = {
829
790
  const toAssetId = Number(AbiCoder.decodeParameter('uint8', subData[3]));
830
791
  const marketAddr = AbiCoder.decodeParameter('address', subData[4]) as unknown as EthereumAddress;
831
792
  const amountToSwitch = AbiCoder.decodeParameter('uint256', subData[5]) as unknown as string;
832
- const user = AbiCoder.decodeParameter('address', subData[6]) as unknown as EthereumAddress;
833
793
 
834
794
  return {
835
- fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch, user,
795
+ fromAsset, fromAssetId, toAsset, toAssetId, marketAddr, amountToSwitch,
836
796
  };
837
797
  },
838
798
  };
@@ -102,36 +102,24 @@ export namespace Strategies {
102
102
  AAVE_V4_COLLATERAL_SWITCH_EOA = 155,
103
103
  SPARK_COLLATERAL_SWITCH = 156,
104
104
  SPARK_GENERIC_FL_COLLATERAL_SWITCH = 167,
105
- AAVE_V3_DEBT_SWITCH = 168,
106
- AAVE_V3_DEBT_SWITCH_EOA = 169,
107
- AAVE_V3_COLLATERAL_SWITCH_EOA = 170,
108
105
  }
109
106
 
110
107
  export enum OptimismIds {
111
108
  EXCHANGE_DCA = 8,
112
109
  EXCHANGE_LIMIT_ORDER = 9,
113
110
  AAVE_V3_COLLATERAL_SWITCH = 24,
114
- AAVE_V3_DEBT_SWITCH = 25,
115
- AAVE_V3_DEBT_SWITCH_EOA = 26,
116
- AAVE_V3_COLLATERAL_SWITCH_EOA = 27,
117
111
  }
118
112
 
119
113
  export enum BaseIds {
120
114
  EXCHANGE_DCA = 8,
121
115
  EXCHANGE_LIMIT_ORDER = 9,
122
116
  AAVE_V3_COLLATERAL_SWITCH = 56,
123
- AAVE_V3_DEBT_SWITCH = 61,
124
- AAVE_V3_DEBT_SWITCH_EOA = 62,
125
- AAVE_V3_COLLATERAL_SWITCH_EOA = 63,
126
117
  }
127
118
 
128
119
  export enum ArbitrumIds {
129
120
  EXCHANGE_DCA = 8,
130
121
  EXCHANGE_LIMIT_ORDER = 9,
131
122
  AAVE_V3_COLLATERAL_SWITCH = 50,
132
- AAVE_V3_DEBT_SWITCH = 55,
133
- AAVE_V3_DEBT_SWITCH_EOA = 56,
134
- AAVE_V3_COLLATERAL_SWITCH_EOA = 57,
135
123
  }
136
124
 
137
125
  export enum Identifiers {
@@ -150,6 +138,8 @@ export namespace Strategies {
150
138
  CloseOnPriceToColl = 'close-on-price-to-collateral',
151
139
  CloseOnPrice = 'close-on-price',
152
140
  EoaCloseOnPrice = 'eoa-close-on-price',
141
+ InstantCloseOnPrice = 'instant-close-on-price',
142
+ EoaInstantCloseOnPrice = 'eoa-instant-close-on-price',
153
143
  TrailingStopToColl = 'trailing-stop-to-collateral',
154
144
  TrailingStopToDebt = 'trailing-stop-to-debt',
155
145
  Rebond = 'rebond',
@@ -166,8 +156,6 @@ export namespace Strategies {
166
156
  EoaRepayOnPrice = 'eoa-repay-on-price',
167
157
  CollateralSwitch = 'collateral-switch',
168
158
  EoaCollateralSwitch = 'eoa-collateral-switch',
169
- DebtSwitch = 'debt-switch',
170
- EoaDebtSwitch = 'eoa-debt-switch',
171
159
  LiquidationProtection = 'liquidation-protection',
172
160
  EoaLiquidationProtection = 'liquidation-protection-eoa',
173
161
  }
@@ -280,6 +268,8 @@ export namespace Bundles {
280
268
  SPARK_EOA_BOOST_ON_PRICE = 91,
281
269
  SPARK_EOA_CLOSE = 92,
282
270
  SPARK_EOA_LIQUIDATION_PROTECTION = 93,
271
+ AAVE_V3_SW_INSTANT_CLOSE = 94,
272
+ AAVE_V3_EOA_INSTANT_CLOSE = 95,
283
273
  }
284
274
 
285
275
  export enum OptimismIds {
@@ -296,6 +286,9 @@ export namespace Bundles {
296
286
  AAVE_V3_EOA_CLOSE = 10,
297
287
  AAVE_V3_SW_LIQUIDATION_PROTECTION = 11,
298
288
  AAVE_V3_EOA_LIQUIDATION_PROTECTION = 12,
289
+ // TODO -> Fix ids
290
+ AAVE_V3_SW_INSTANT_CLOSE = 13,
291
+ AAVE_V3_EOA_INSTANT_CLOSE = 14,
299
292
  }
300
293
 
301
294
  export enum BaseIds {
@@ -339,6 +332,8 @@ export namespace Bundles {
339
332
  MORPHO_BLUE_EOA_REPAY_ON_PRICE = 40,
340
333
  MORPHO_BLUE_EOA_CLOSE = 41,
341
334
  MORPHO_BLUE_EOA_LIQUIDATION_PROTECTION = 42,
335
+ AAVE_V3_SW_INSTANT_CLOSE = 43,
336
+ AAVE_V3_EOA_INSTANT_CLOSE = 44,
342
337
  }
343
338
 
344
339
  export enum ArbitrumIds {
@@ -382,5 +377,7 @@ export namespace Bundles {
382
377
  MORPHO_BLUE_EOA_BOOST_ON_PRICE = 37,
383
378
  MORPHO_BLUE_EOA_REPAY_ON_PRICE = 38,
384
379
  MORPHO_BLUE_EOA_CLOSE = 39,
380
+ AAVE_V3_SW_INSTANT_CLOSE = 40,
381
+ AAVE_V3_EOA_INSTANT_CLOSE = 41,
385
382
  }
386
383
  }