Skip to content

Commit 7855e98

Browse files
refactor: optimize refund mappings in RouterPlusAsync [sup 9339] (#659)
Co-authored-by: 0xTimepunk <jldcmartins@gmail.com>
1 parent 1abc86d commit 7855e98

File tree

4 files changed

+13
-18
lines changed

4 files changed

+13
-18
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
push:
99
branches: [main, develop, v1.5]
1010
pull_request:
11-
branches: [main, develop, v1.5]
11+
branches: [main, develop]
1212

1313
env:
1414
BSC_RPC_URL: ${{ secrets.BSC_RPC_URL }}

src/interfaces/ISuperformRouterPlusAsync.sol

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ interface ISuperformRouterPlusAsync is IBaseSuperformRouterPlus {
5959
/// @notice thrown when requested refund amount is too high
6060
error REQUESTED_AMOUNT_TOO_HIGH();
6161

62-
/// @notice thrown when the refund payload is already approved
63-
error REFUND_ALREADY_APPROVED();
64-
6562
//////////////////////////////////////////////////////////////
6663
// EVENTS //
6764
//////////////////////////////////////////////////////////////

src/router-plus/SuperformRouterPlusAsync.sol

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ contract SuperformRouterPlusAsync is ISuperformRouterPlusAsync, BaseSuperformRou
3636
mapping(uint256 routerPlusPayloadId => Refund) public refunds;
3737
mapping(uint256 routerPlusPayloadId => bool processed) public processedRebalancePayload;
3838

39-
mapping(uint256 routerPlusPayloadId => bool approvedRefund) public approvedRefund;
40-
4139
//////////////////////////////////////////////////////////////
4240
// MODIFIERS //
4341
//////////////////////////////////////////////////////////////
@@ -448,13 +446,9 @@ contract SuperformRouterPlusAsync is ISuperformRouterPlusAsync, BaseSuperformRou
448446

449447
/// @inheritdoc ISuperformRouterPlusAsync
450448
function approveRefund(uint256 routerPlusPayloadId_) external onlyCoreStateRegistryRescuer {
451-
if (approvedRefund[routerPlusPayloadId_]) revert REFUND_ALREADY_APPROVED();
452-
453449
Refund memory r = refunds[routerPlusPayloadId_];
454450

455-
if (r.interimToken == address(0)) revert INVALID_REFUND_DATA();
456-
457-
approvedRefund[routerPlusPayloadId_] = true;
451+
if (r.receiver == address(0) && r.interimToken == address(0)) revert INVALID_REFUND_DATA();
458452

459453
/// @dev deleting to prevent re-entrancy
460454
delete refunds[routerPlusPayloadId_];

test/unit/router-plus/SuperformRouterPlus.t.sol

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2430,6 +2430,8 @@ contract SuperformRouterPlusTest is ProtocolActions {
24302430
uint64 REBALANCE_FROM = ETH;
24312431
uint64 REBALANCE_TO = OP;
24322432

2433+
console2.log("Initializing XChain Deposit...");
2434+
24332435
// Step 1: Initial XCHAIN Deposit
24342436
_xChainDeposit(superformId5ETH, REBALANCE_FROM, 1);
24352437

@@ -2440,12 +2442,16 @@ contract SuperformRouterPlusTest is ProtocolActions {
24402442

24412443
vm.startPrank(deployer);
24422444

2445+
console2.log("Starting Cross-Chain Rebalance...");
2446+
24432447
SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance(
24442448
ROUTER_PLUS_SOURCE, superformId5ETH, args.sharesToRedeem
24452449
);
24462450
vm.recordLogs();
24472451
SuperformRouterPlus(ROUTER_PLUS_SOURCE).startCrossChainRebalance{ value: 2 ether }(args);
24482452

2453+
console2.log("Processing XChain Withdraw (rebalance from)...");
2454+
24492455
// Step 3: Process XChain Withdraw (rebalance from)
24502456
uint256 balanceOfInterimAssetBefore =
24512457
MockERC20(args.interimAsset).balanceOf(getContract(SOURCE_CHAIN, "SuperformRouterPlusAsync"));
@@ -2464,12 +2470,16 @@ contract SuperformRouterPlusTest is ProtocolActions {
24642470
// Step 4: Complete cross-chain rebalance
24652471
vm.startPrank(deployer);
24662472

2473+
console2.log("Completing Cross-Chain Rebalance...");
2474+
24672475
completeArgs =
24682476
_buildCompleteCrossChainRebalanceArgs(interimAmountOnRouterPlusAsync, superformId4OP, REBALANCE_TO);
24692477
completeArgs.amountReceivedInterimAsset = completeArgs.amountReceivedInterimAsset / 3;
24702478
SuperformRouterPlusAsync(ROUTER_PLUS_ASYNC_SOURCE).completeCrossChainRebalance{ value: 1 ether }(completeArgs);
24712479
vm.stopPrank();
24722480

2481+
console2.log("Requesting Refund...");
2482+
24732483
// Step 5: Request refund
24742484

24752485
/// @dev testing invalid requester (not receiver)
@@ -2506,12 +2516,6 @@ contract SuperformRouterPlusTest is ProtocolActions {
25062516
SuperformRouterPlusAsync(ROUTER_PLUS_ASYNC_SOURCE).approveRefund(1);
25072517
vm.stopPrank();
25082518

2509-
/// @dev testing invalid refund data
2510-
vm.startPrank(deployer);
2511-
vm.expectRevert(ISuperformRouterPlusAsync.INVALID_REFUND_DATA.selector);
2512-
SuperformRouterPlusAsync(ROUTER_PLUS_ASYNC_SOURCE).approveRefund(3);
2513-
vm.stopPrank();
2514-
25152519
/// @dev testing valid refund approval
25162520
uint256 balanceBefore = MockERC20(refundToken).balanceOf(deployer);
25172521
uint256 routerBalanceBefore = MockERC20(refundToken).balanceOf(address(ROUTER_PLUS_ASYNC_SOURCE));
@@ -2536,7 +2540,7 @@ contract SuperformRouterPlusTest is ProtocolActions {
25362540

25372541
/// @dev testing refund already approved
25382542
vm.startPrank(deployer);
2539-
vm.expectRevert(ISuperformRouterPlusAsync.REFUND_ALREADY_APPROVED.selector);
2543+
vm.expectRevert();
25402544
SuperformRouterPlusAsync(ROUTER_PLUS_ASYNC_SOURCE).approveRefund(1);
25412545
vm.stopPrank();
25422546
}

0 commit comments

Comments
 (0)