@@ -1829,56 +1829,65 @@ contract SuperformRouterPlusTest is ProtocolActions {
1829
1829
SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).completeCrossChainRebalance { value: 1 ether }(completeArgs);
1830
1830
vm.stopPrank ();
1831
1831
1832
- vm.expectRevert (Error.NOT_VALID_DISPUTER.selector );
1833
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).disputeRefund (1 );
1832
+ // Step 5: Request refund
1834
1833
1835
- vm.startPrank (deployer);
1836
- vm.mockCall (
1837
- address (getContract (SOURCE_CHAIN, "SuperRegistry " )),
1838
- abi.encodeWithSelector (ISuperRegistry.delay.selector ),
1839
- abi.encode (0 )
1840
- );
1841
- vm.expectRevert (Error.DELAY_NOT_SET.selector );
1842
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).disputeRefund (1 );
1843
- vm.clearMockedCalls ();
1844
-
1845
- vm.warp (block .timestamp + 100 days);
1846
- vm.expectRevert (Error.DISPUTE_TIME_ELAPSED.selector );
1847
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).disputeRefund (1 );
1848
-
1849
- vm.warp (block .timestamp - 100 days);
1850
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).disputeRefund (1 );
1834
+ /// @dev testing invalid requester (not receiver)
1835
+ vm.startPrank (address (222 ));
1836
+ vm.expectRevert (ISuperformRouterPlusAsync.INVALID_REQUESTER.selector );
1837
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).requestRefund (1 , 100 );
1838
+ vm.stopPrank ();
1851
1839
1852
- vm.expectRevert (Error.DISPUTE_TIME_ELAPSED.selector );
1853
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).disputeRefund (1 );
1840
+ // @dev testing refund amount exceeds expected amount
1841
+ vm.startPrank (deployer);
1842
+ vm.expectRevert (ISuperformRouterPlusAsync.REQUESTED_AMOUNT_TOO_HIGH.selector );
1843
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).requestRefund (1 , 1000e18 );
1854
1844
vm.stopPrank ();
1855
1845
1856
- vm.expectRevert (ISuperformRouterPlusAsync.INVALID_PROPOSER.selector );
1857
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).proposeRefund (1 , completeArgs.amountReceivedInterimAsset);
1846
+ /// @dev testing valid refund request
1847
+ vm.prank (deployer);
1848
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).requestRefund (1 , 100 );
1858
1849
1859
- vm.startPrank (deployer);
1860
- vm.expectRevert (ISuperformRouterPlusAsync.INVALID_REFUND_DATA.selector );
1861
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).proposeRefund (2 , completeArgs.amountReceivedInterimAsset);
1850
+ (,, uint256 requestedAmount ) = SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).refunds (1 );
1851
+ assertEq (requestedAmount, 100 );
1862
1852
1863
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).proposeRefund (1 , completeArgs.amountReceivedInterimAsset);
1853
+ (, address refundToken ,) = SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).refunds (1 );
1854
+ assertEq (refundToken, address (args.interimAsset));
1864
1855
1865
- vm.expectRevert (ISuperformRouterPlusAsync.REFUND_ALREADY_PROPOSED.selector );
1866
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).proposeRefund (1 , completeArgs.amountReceivedInterimAsset);
1856
+ // Step 6: Approve refund
1867
1857
1868
- vm.expectRevert (ISuperformRouterPlusAsync.IN_DISPUTE_PHASE.selector );
1869
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).finalizeRefund (1 );
1858
+ /// @dev testing invalid approver (not core state registry)
1859
+ vm.startPrank (address (1234 ));
1860
+ vm.expectRevert (ISuperformRouterPlusAsync.NOT_CORE_STATE_REGISTRY_RESCUER.selector );
1861
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).approveRefund (1 );
1862
+ vm.stopPrank ();
1870
1863
1871
- (, address refundToken ,,) = SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE). refunds ( 1 );
1864
+ /// @dev testing valid refund approval
1872
1865
uint256 balanceBefore = MockERC20 (refundToken).balanceOf (deployer);
1866
+ uint256 routerBalanceBefore = MockERC20 (refundToken).balanceOf (address (ROUTER_PLUS_ASYNC_SOURCE));
1867
+ vm.startPrank (deployer);
1868
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).approveRefund (1 );
1869
+ vm.stopPrank ();
1873
1870
1874
- vm.warp (block .timestamp + 100 days);
1875
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).finalizeRefund (1 );
1876
1871
uint256 balanceAfter = MockERC20 (refundToken).balanceOf (deployer);
1877
-
1878
1872
assertGt (balanceAfter, balanceBefore);
1873
+ assertEq (MockERC20 (refundToken).balanceOf (address (ROUTER_PLUS_ASYNC_SOURCE)), routerBalanceBefore - 100 );
1874
+ assertEq (MockERC20 (refundToken).balanceOf (address (deployer)), balanceBefore + 100 );
1875
+
1876
+ (, address interimToken ,) = SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).refunds (1 );
1877
+ assertEq (interimToken, address (0 ));
1878
+
1879
+ (, address receiver ,) = SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).refunds (1 );
1880
+ assertEq (receiver, address (0 ));
1879
1881
1880
- vm.expectRevert (ISuperformRouterPlusAsync.IN_DISPUTE_PHASE.selector );
1881
- SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).finalizeRefund (1 );
1882
+ (,, uint256 updatedRequestedAmount ) = SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).refunds (1 );
1883
+ assertEq (updatedRequestedAmount, 0 );
1884
+ vm.stopPrank ();
1885
+
1886
+ /// @dev testing refund already approved
1887
+ vm.startPrank (deployer);
1888
+ vm.expectRevert (ISuperformRouterPlusAsync.REFUND_ALREADY_APPROVED.selector );
1889
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).approveRefund (1 );
1890
+ vm.stopPrank ();
1882
1891
}
1883
1892
1884
1893
function test_crossChainRebalance_negativeSlippage () public {
@@ -1935,6 +1944,7 @@ contract SuperformRouterPlusTest is ProtocolActions {
1935
1944
1936
1945
function test_crossChainRebalance_updateSuperformData_allErrors () public {
1937
1946
vm.selectFork (FORKS[SOURCE_CHAIN]);
1947
+
1938
1948
SingleVaultSFData memory sfData = SingleVaultSFData ({
1939
1949
superformId: superformId1,
1940
1950
amount: 1e18 ,
@@ -2042,14 +2052,19 @@ contract SuperformRouterPlusTest is ProtocolActions {
2042
2052
2043
2053
// Reset liqDstChainId
2044
2054
completeArgs.liqRequests[0 ][0 ].liqDstChainId = SOURCE_CHAIN;
2045
-
2046
- /// @FIXME: This line is not reacheable
2047
- // vm.expectRevert(ISuperformRouterPlusAsync.COMPLETE_REBALANCE_DIFFERENT_RECEIVER.selector);
2048
- // completeArgs.receiverAddressSP = address(0x123);
2049
- // SuperformRouterPlusAsync(ROUTER_PLUS_ASYNC_SOURCE).completeCrossChainRebalance{ value: 1 ether
2050
- // }(completeArgs);
2051
2055
vm.stopPrank ();
2056
+ vm.startPrank (ROUTER_PLUS_SOURCE);
2057
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).setXChainRebalanceCallData (address (0x123 ), 2 , data);
2058
+ vm.stopPrank ();
2059
+ vm.startPrank (deployer);
2052
2060
2061
+ vm.expectRevert (ISuperformRouterPlusAsync.COMPLETE_REBALANCE_DIFFERENT_RECEIVER.selector );
2062
+ completeArgs.routerPlusPayloadId = 2 ;
2063
+ completeArgs.receiverAddressSP = address (0x123 );
2064
+ SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).completeCrossChainRebalance { value: 1 ether }(completeArgs);
2065
+ vm.stopPrank ();
2066
+ completeArgs.routerPlusPayloadId = 1 ;
2067
+ completeArgs.receiverAddressSP = deployer;
2053
2068
sfData.liqRequest.token = address (0 );
2054
2069
2055
2070
data = IBaseSuperformRouterPlus.XChainRebalanceData ({
@@ -2070,6 +2085,7 @@ contract SuperformRouterPlusTest is ProtocolActions {
2070
2085
completeArgs.routerPlusPayloadId = 2 ;
2071
2086
vm.expectRevert (ISuperformRouterPlusAsync.COMPLETE_REBALANCE_INVALID_TX_DATA_UPDATE.selector );
2072
2087
SuperformRouterPlusAsync (ROUTER_PLUS_ASYNC_SOURCE).completeCrossChainRebalance { value: 1 ether }(completeArgs);
2088
+ vm.stopPrank ();
2073
2089
}
2074
2090
2075
2091
//////////////////////////////////////////////////////////////
0 commit comments