@@ -734,6 +734,78 @@ contract SuperformRouterPlusTest is ProtocolActions {
734
734
assertEq (SuperPositions (SUPER_POSITIONS_SOURCE).balanceOf (deployer, superformId1), 0 );
735
735
}
736
736
737
+ function test_revert_AMOUNT_IN_NOT_EQUAL_OR_LOWER_THAN_BALANCE () public {
738
+ vm.startPrank (deployer);
739
+
740
+ _directDeposit (superformId1, 1e18 );
741
+
742
+ ISuperformRouterPlus.RebalanceSinglePositionSyncArgs memory args =
743
+ _buildRebalanceSinglePositionToOneVaultArgs (deployer);
744
+
745
+ SingleVaultSFData memory sfDataRebalanceTo =
746
+ abi.decode (_parseCallData (args.rebalanceToCallData), (SingleDirectSingleVaultStateReq)).superformData;
747
+ sfDataRebalanceTo.amount = 1e30 ;
748
+
749
+ args.rebalanceToCallData = abi.encodeCall (
750
+ IBaseRouter.singleDirectSingleVaultDeposit, SingleDirectSingleVaultStateReq (sfDataRebalanceTo)
751
+ );
752
+ SuperPositions (SUPER_POSITIONS_SOURCE).increaseAllowance (ROUTER_PLUS_SOURCE, superformId1, args.sharesToRedeem);
753
+
754
+ vm.expectRevert (ISuperformRouterPlus.AMOUNT_IN_NOT_EQUAL_OR_LOWER_THAN_BALANCE.selector );
755
+ SuperformRouterPlus (ROUTER_PLUS_SOURCE).rebalanceSinglePosition { value: 2 ether }(args);
756
+ }
757
+
758
+ function test_revert_ASSETS_RECEIVED_OUT_OF_SLIPPAGE () public {
759
+ vm.startPrank (deployer);
760
+
761
+ _directDeposit (superformId1, 1e18 );
762
+ _directDeposit (superformId2, 1e6 );
763
+
764
+ (ISuperformRouterPlus.RebalanceMultiPositionsSyncArgs memory args , uint256 totalAmountToDeposit ) =
765
+ _buildRebalanceTwoPositionsToOneVaultXChainArgs ();
766
+
767
+ SingleVaultSFData memory sfDataRebalanceTo =
768
+ abi.decode (_parseCallData (args.rebalanceToCallData), (SingleXChainSingleVaultStateReq)).superformData;
769
+
770
+ /// @dev keeper attempting to rug the user by reducing amount in
771
+ sfDataRebalanceTo.liqRequest.txData = _buildLiqBridgeTxData (
772
+ LiqBridgeTxDataArgs (
773
+ 1 ,
774
+ args.interimAsset,
775
+ getContract (OP, "DAI " ),
776
+ getContract (OP, "DAI " ),
777
+ getContract (SOURCE_CHAIN, "SuperformRouter " ),
778
+ SOURCE_CHAIN,
779
+ OP,
780
+ OP,
781
+ false ,
782
+ getContract (OP, "CoreStateRegistry " ),
783
+ uint256 (OP),
784
+ totalAmountToDeposit - 5e5 ,
785
+ false ,
786
+ 0 ,
787
+ 1 ,
788
+ 1 ,
789
+ 1 ,
790
+ address (0 )
791
+ ),
792
+ false
793
+ );
794
+
795
+ args.rebalanceToCallData = abi.encodeCall (
796
+ IBaseRouter.singleXChainSingleVaultDeposit, SingleXChainSingleVaultStateReq (AMBs, OP, sfDataRebalanceTo)
797
+ );
798
+
799
+ SuperPositions (SUPER_POSITIONS_SOURCE).increaseAllowance (
800
+ ROUTER_PLUS_SOURCE, superformId1, args.sharesToRedeem[0 ]
801
+ );
802
+ SuperPositions (SUPER_POSITIONS_SOURCE).increaseAllowance (
803
+ ROUTER_PLUS_SOURCE, superformId2, args.sharesToRedeem[1 ]
804
+ );
805
+ vm.expectRevert (ISuperformRouterPlus.ASSETS_RECEIVED_OUT_OF_SLIPPAGE.selector );
806
+ SuperformRouterPlus (ROUTER_PLUS_SOURCE).rebalanceMultiPositions { value: 2 ether }(args);
807
+ }
808
+
737
809
function test_rebalanceSinglePosition_singleXChainSingleVaultDepositSelector () public {
738
810
vm.startPrank (deployer);
739
811
@@ -3189,23 +3261,24 @@ contract SuperformRouterPlusTest is ProtocolActions {
3189
3261
args.callData = _callDataRebalanceFromTwoVaults (args.interimAsset);
3190
3262
3191
3263
uint256 decimal1 = MockERC20 (getContract (SOURCE_CHAIN, "DAI " )).decimals ();
3192
- uint256 decimal2 = MockERC20 (args.interimAsset).decimals ();
3264
+ uint256 decimal2 = MockERC20 (getContract (SOURCE_CHAIN, "USDC " )).decimals ();
3265
+ uint256 decimalInterim = MockERC20 (args.interimAsset).decimals ();
3193
3266
uint256 previewRedeemAmount1 = IBaseForm (superform1).previewRedeemFrom (args.sharesToRedeem[0 ]);
3194
3267
3195
3268
uint256 expectedAmountToReceivePostRebalanceFrom1;
3196
- if (decimal1 > decimal2 ) {
3197
- expectedAmountToReceivePostRebalanceFrom1 = previewRedeemAmount1 / (10 ** (decimal1 - decimal2 ));
3269
+ if (decimal1 > decimalInterim ) {
3270
+ expectedAmountToReceivePostRebalanceFrom1 = previewRedeemAmount1 / (10 ** (decimal1 - decimalInterim ));
3198
3271
} else {
3199
- expectedAmountToReceivePostRebalanceFrom1 = previewRedeemAmount1 * 10 ** (decimal2 - decimal1);
3272
+ expectedAmountToReceivePostRebalanceFrom1 = previewRedeemAmount1 * 10 ** (decimalInterim - decimal1);
3200
3273
}
3201
3274
3202
3275
uint256 previewRedeemAmount2 = IBaseForm (superform2).previewRedeemFrom (args.sharesToRedeem[1 ]);
3203
3276
3204
3277
uint256 expectedAmountToReceivePostRebalanceFrom2;
3205
- if (decimal1 > decimal2 ) {
3206
- expectedAmountToReceivePostRebalanceFrom2 = previewRedeemAmount2 / (10 ** (decimal1 - decimal2 ));
3278
+ if (decimal2 > decimalInterim ) {
3279
+ expectedAmountToReceivePostRebalanceFrom2 = previewRedeemAmount2 / (10 ** (decimal2 - decimalInterim ));
3207
3280
} else {
3208
- expectedAmountToReceivePostRebalanceFrom2 = previewRedeemAmount2 * 10 ** (decimal2 - decimal1 );
3281
+ expectedAmountToReceivePostRebalanceFrom2 = previewRedeemAmount2 * 10 ** (decimalInterim - decimal2 );
3209
3282
}
3210
3283
3211
3284
totalAmountToDeposit = expectedAmountToReceivePostRebalanceFrom1 + expectedAmountToReceivePostRebalanceFrom2;
0 commit comments