From 1bf66a6134ed1f81a052d246c433394fa488bca4 Mon Sep 17 00:00:00 2001 From: 0xTimepunk Date: Fri, 24 Jan 2025 13:54:26 +0000 Subject: [PATCH 1/5] fix: routerplus issue --- Makefile | 2 +- src/router-plus/SuperformRouterPlus.sol | 36 +++++- .../router-plus/SuperformRouterPlus.t.sol | 119 ++++++++++++++++++ 3 files changed, 154 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 4c9c86f80..e6dd5e859 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ build-sizes: ## Builds the project and shows sizes .PHONY: test-vvv test-vvv: ## Runs tests with verbose output - forge test --match-test test_superRegistryAddresses --evm-version cancun -vv + forge test --match-test test_deposit4626_maliciousReceiver --evm-version cancun -vvv .PHONY: ftest ftest: ## Runs tests with cancun evm version diff --git a/src/router-plus/SuperformRouterPlus.sol b/src/router-plus/SuperformRouterPlus.sol index 6417d6a70..636a9ce6c 100644 --- a/src/router-plus/SuperformRouterPlus.sol +++ b/src/router-plus/SuperformRouterPlus.sol @@ -33,6 +33,13 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { /// @dev Tolerance constant to account for tokens with rounding issues on transfer uint256 constant TOLERANCE_CONSTANT = 10 wei; + ////////////////////////////////////////////////////////////// + // ERRORS // + ////////////////////////////////////////////////////////////// + + /// @notice thrown if the receiver address is invalid + /// @dev notice this error was added to prevent malicious deposits + error RECEIVER_ADDRESS_MISMATCH(); ////////////////////////////////////////////////////////////// // CONSTRUCTOR // ////////////////////////////////////////////////////////////// @@ -485,7 +492,8 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { revert Error.VAULT_IMPLEMENTATION_FAILED(); } - uint256 amountIn = _validateAndGetAmountIn(rebalanceToCallData, availableBalanceToDeposit); + uint256 amountIn = + _validateAndGetAmountIn(rebalanceToCallData, args.receiverAddressSP, availableBalanceToDeposit); _deposit(router_, interimAsset, amountIn, args.rebalanceToMsgValue, rebalanceToCallData); } @@ -643,7 +651,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { uint256 amountRedeemed = _redeemShare(vault, assetAdr, args.amount, args.expectedOutputAmount, args.maxSlippage); - uint256 amountIn = _validateAndGetAmountIn(args.depositCallData, amountRedeemed); + uint256 amountIn = _validateAndGetAmountIn(args.depositCallData, args.receiverAddressSP, amountRedeemed); address router = _getAddress(keccak256("SUPERFORM_ROUTER")); @@ -656,6 +664,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { function _validateAndGetAmountIn( bytes calldata rebalanceToCallData, + address receiverAddressSP, uint256 availableBalanceToDeposit ) internal @@ -674,10 +683,12 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { SingleVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleDirectSingleVaultStateReq)).superformData; amountIn = _takeAmountIn(sfData.liqRequest, sfData.amount); + _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.singleXChainSingleVaultDeposit.selector) { SingleVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleXChainSingleVaultStateReq)).superformData; amountIn = _takeAmountIn(sfData.liqRequest, sfData.amount); + _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.singleDirectMultiVaultDeposit.selector) { MultiVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleDirectMultiVaultStateReq)).superformData; @@ -687,6 +698,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { amountInTemp = _takeAmountIn(sfData.liqRequests[i], sfData.amounts[i]); amountIn += amountInTemp; } + _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.singleXChainMultiVaultDeposit.selector) { MultiVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleXChainMultiVaultStateReq)).superformsData; @@ -695,6 +707,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { amountInTemp = _takeAmountIn(sfData.liqRequests[i], sfData.amounts[i]); amountIn += amountInTemp; } + _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.multiDstSingleVaultDeposit.selector) { SingleVaultSFData[] memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (MultiDstSingleVaultStateReq)).superformsData; @@ -702,6 +715,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { for (uint256 i; i < lenDst; ++i) { amountInTemp = _takeAmountIn(sfData[i].liqRequest, sfData[i].amount); amountIn += amountInTemp; + _checkReceiverAddress(receiverAddressSP, sfData[i].receiverAddress, sfData[i].receiverAddressSP); } } else if (rebalanceToSelector == IBaseRouter.multiDstMultiVaultDeposit.selector) { MultiVaultSFData[] memory sfData = @@ -713,6 +727,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { amountInTemp = _takeAmountIn(sfData[i].liqRequests[j], sfData[i].amounts[j]); amountIn += amountInTemp; } + _checkReceiverAddress(receiverAddressSP, sfData[i].receiverAddress, sfData[i].receiverAddressSP); } } @@ -726,4 +741,21 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { revert ASSETS_RECEIVED_OUT_OF_SLIPPAGE(); } } + + function _checkReceiverAddress( + address receiverAddressSP, + address callDataReceiverAddress, + address callDataReceiverAddressSP + ) + internal + pure + { + /// @dev These checks below prevent a user approving funds to router plus while another user receives the + /// SuperPositions + + /// @dev We force all receiver addresses to match + if (receiverAddressSP != callDataReceiverAddressSP || callDataReceiverAddressSP != callDataReceiverAddress) { + revert RECEIVER_ADDRESS_MISMATCH(); + } + } } diff --git a/test/unit/router-plus/SuperformRouterPlus.t.sol b/test/unit/router-plus/SuperformRouterPlus.t.sol index 6f89bc9a8..ddc8ca929 100644 --- a/test/unit/router-plus/SuperformRouterPlus.t.sol +++ b/test/unit/router-plus/SuperformRouterPlus.t.sol @@ -2747,6 +2747,73 @@ contract SuperformRouterPlusTest is ProtocolActions { // SAME_CHAIN REBALANCING TESTS // ////////////////////////////////////////////////////////////// + function _buildRebalanceSinglePositionToOneVaultArgsHack(address user) + internal + view + returns (ISuperformRouterPlus.RebalanceSinglePositionSyncArgs memory args) + { + args.id = superformId1; + args.sharesToRedeem = SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(user, superformId1); + args.rebalanceFromMsgValue = 1 ether; + args.rebalanceToMsgValue = 1 ether; + args.interimAsset = getContract(SOURCE_CHAIN, "USDC"); + args.slippage = 100; + args.receiverAddressSP = user; + args.callData = _callDataRebalanceFrom(args.interimAsset); + + uint256 decimal1 = MockERC20(getContract(SOURCE_CHAIN, "DAI")).decimals(); + uint256 decimal2 = MockERC20(args.interimAsset).decimals(); + uint256 previewRedeemAmount = IBaseForm(superform1).previewRedeemFrom(args.sharesToRedeem); + + if (decimal1 > decimal2) { + args.expectedAmountToReceivePostRebalanceFrom = previewRedeemAmount / (10 ** (decimal1 - decimal2)); + } else { + args.expectedAmountToReceivePostRebalanceFrom = previewRedeemAmount * 10 ** (decimal2 - decimal1); + } + + args.rebalanceToCallData = _callDataRebalanceToOneVaultSameChainHack( + args.expectedAmountToReceivePostRebalanceFrom, args.interimAsset, user + ); + } + + function _callDataRebalanceToOneVaultSameChainHack( + uint256 amountToDeposit, + address interimToken, + address user + ) + internal + view + returns (bytes memory) + { + SingleVaultSFData memory data = SingleVaultSFData( + superformId2, + amountToDeposit, + IBaseForm(superform2).previewDepositTo(amountToDeposit), + 100, + LiqRequest("", interimToken, address(0), 1, SOURCE_CHAIN, 0), + "", + false, + false, + address(0xDEAD), + address(0xDEAD), + "" + ); + return abi.encodeCall(IBaseRouter.singleDirectSingleVaultDeposit, SingleDirectSingleVaultStateReq(data)); + } + + function test_rebalanceFromSinglePosition_toOneVault_hack() public { + vm.startPrank(deployer); + + _directDeposit(superformId1, 1e18); + + ISuperformRouterPlus.RebalanceSinglePositionSyncArgs memory args = + _buildRebalanceSinglePositionToOneVaultArgsHack(deployer); + + SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance(ROUTER_PLUS_SOURCE, superformId1, args.sharesToRedeem); + vm.expectRevert(SuperformRouterPlus.RECEIVER_ADDRESS_MISMATCH.selector); + SuperformRouterPlus(ROUTER_PLUS_SOURCE).rebalanceSinglePosition{ value: 2 ether }(args); + } + /// @dev rebalance from a single position to a single vault function test_rebalanceFromSinglePosition_toOneVault() public { vm.startPrank(deployer); @@ -5122,4 +5189,56 @@ contract SuperformRouterPlusTest is ProtocolActions { SuperformRouterPlus(getContract(SOURCE_CHAIN, "SuperformRouterPlus")).setGlobalSlippage(100); vm.stopPrank(); } + + function test_deposit4626_maliciousReceiver() public { + // User approves router for vault tokens + vm.startPrank(deployer); + (address sfMigrateFrom,,) = superformId1.getSuperform(); + address migrateFromVault = IBaseForm(sfMigrateFrom).getVaultAddress(); + deal(migrateFromVault, deployer, 1e18); + + // Approve and deposit DAI into the mock vault + MockERC20(getContract(SOURCE_CHAIN, "DAI")).approve(migrateFromVault, 1e18); + uint256 vaultTokenAmount = IERC4626(migrateFromVault).deposit(1e18, deployer); + IERC20(migrateFromVault).approve(getContract(SOURCE_CHAIN, "SuperformRouterPlus"), vaultTokenAmount); + + vm.stopPrank(); + + address attacker = address(0x1337); + vm.deal(attacker, 1e18); + // Attacker prepares malicious deposit data + SingleVaultSFData memory data = SingleVaultSFData( + superformId1, + 1e18, + 1, + 10_000, + LiqRequest("", address(0), address(0), 0, SOURCE_CHAIN, 0), + "", + false, + false, + attacker, // Set attacker as receiver + attacker, // Set attacker as receiverSP + "" + ); + + bytes4 selector = IBaseRouter.singleDirectSingleVaultDeposit.selector; + bytes memory maliciousCallData = abi.encodePacked(selector, abi.encode(SingleDirectSingleVaultStateReq(data))); + + address[] memory vaults = new address[](1); + vaults[0] = migrateFromVault; + + ISuperformRouterPlus.Deposit4626Args[] memory args = new ISuperformRouterPlus.Deposit4626Args[](1); + args[0] = ISuperformRouterPlus.Deposit4626Args({ + amount: 1e18, + expectedOutputAmount: 1, + maxSlippage: 9999, + receiverAddressSP: deployer, + depositCallData: maliciousCallData + }); + + // Attacker executes malicious deposit + vm.prank(attacker); + vm.expectRevert(SuperformRouterPlus.RECEIVER_ADDRESS_MISMATCH.selector); + SuperformRouterPlus(getContract(SOURCE_CHAIN, "SuperformRouterPlus")).deposit4626(vaults, args); + } } From 08b88ab86f6075937b16500618473e859cb614aa Mon Sep 17 00:00:00 2001 From: 0xTimepunk Date: Fri, 24 Jan 2025 18:11:03 +0000 Subject: [PATCH 2/5] fix: router plus properly --- Makefile | 2 +- src/router-plus/SuperformRouterPlus.sol | 65 ++--- .../router-plus/SuperformRouterPlus.t.sol | 244 +++++++++--------- 3 files changed, 148 insertions(+), 163 deletions(-) diff --git a/Makefile b/Makefile index e6dd5e859..ac4c6bf65 100644 --- a/Makefile +++ b/Makefile @@ -121,7 +121,7 @@ build-sizes: ## Builds the project and shows sizes .PHONY: test-vvv test-vvv: ## Runs tests with verbose output - forge test --match-test test_deposit4626_maliciousReceiver --evm-version cancun -vvv + forge test --match-test test_rebalanceFromSinglePosition_toOneVault_hack --evm-version cancun -vvv .PHONY: ftest ftest: ## Runs tests with cancun evm version diff --git a/src/router-plus/SuperformRouterPlus.sol b/src/router-plus/SuperformRouterPlus.sol index 636a9ce6c..9edaf85f8 100644 --- a/src/router-plus/SuperformRouterPlus.sol +++ b/src/router-plus/SuperformRouterPlus.sol @@ -33,13 +33,6 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { /// @dev Tolerance constant to account for tokens with rounding issues on transfer uint256 constant TOLERANCE_CONSTANT = 10 wei; - ////////////////////////////////////////////////////////////// - // ERRORS // - ////////////////////////////////////////////////////////////// - - /// @notice thrown if the receiver address is invalid - /// @dev notice this error was added to prevent malicious deposits - error RECEIVER_ADDRESS_MISMATCH(); ////////////////////////////////////////////////////////////// // CONSTRUCTOR // ////////////////////////////////////////////////////////////// @@ -66,7 +59,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { ); /// @dev transfers a single superPosition to this contract and approves router - _transferSuperPositions(superPositions, router, args.receiverAddressSP, args.id, args.sharesToRedeem); + _transferSuperPositions(superPositions, router, msg.sender, args.id, args.sharesToRedeem); uint256[] memory sharesToRedeem = new uint256[](1); @@ -89,9 +82,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { args.rebalanceToCallData ); - _refundUnusedAndResetApprovals( - superPositions, router, args.interimAsset, args.receiverAddressSP, balanceBefore, totalFee - ); + _refundUnusedAndResetApprovals(superPositions, router, args.interimAsset, msg.sender, balanceBefore, totalFee); emit RebalanceSyncCompleted(args.receiverAddressSP, args.id, args.sharesToRedeem); } @@ -114,7 +105,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { } /// @dev transfers multiple superPositions to this contract and approves router - _transferBatchSuperPositions(superPositions, router, args.receiverAddressSP, args.ids, args.sharesToRedeem); + _transferBatchSuperPositions(superPositions, router, msg.sender, args.ids, args.sharesToRedeem); _rebalancePositionsSync( router, @@ -133,9 +124,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { args.rebalanceToCallData ); - _refundUnusedAndResetApprovals( - superPositions, router, args.interimAsset, args.receiverAddressSP, balanceBefore, totalFee - ); + _refundUnusedAndResetApprovals(superPositions, router, args.interimAsset, msg.sender, balanceBefore, totalFee); emit RebalanceMultiSyncCompleted(args.receiverAddressSP, args.ids, args.sharesToRedeem); } @@ -154,7 +143,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { } /// @dev transfers a single superPosition to this contract and approves router - _transferSuperPositions(superPositions, router, args.receiverAddressSP, args.id, args.sharesToRedeem); + _transferSuperPositions(superPositions, router, msg.sender, args.id, args.sharesToRedeem); /// @dev this can only be IBaseRouter.singleXChainSingleVaultWithdraw.selector due to the whitelist in /// BaseSuperformRouterPlus @@ -197,6 +186,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { ISuperformRouterPlusAsync(ROUTER_PLUS_ASYNC).setXChainRebalanceCallData( args.receiverAddressSP, + /// @dev user must send an address that controls on the destination chain routerPlusPayloadId, XChainRebalanceData({ rebalanceSelector: args.rebalanceToSelector, @@ -239,7 +229,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { } /// @dev transfers multiple superPositions to this contract and approves router - _transferBatchSuperPositions(superPositions, router, args.receiverAddressSP, args.ids, args.sharesToRedeem); + _transferBatchSuperPositions(superPositions, router, msg.sender, args.ids, args.sharesToRedeem); /// @dev validate the call data bytes4 selector = _parseSelectorMem(args.callData); @@ -344,6 +334,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { /// @dev in multiDst multiple payloads ids will be generated on source chain ISuperformRouterPlusAsync(ROUTER_PLUS_ASYNC).setXChainRebalanceCallData( args.receiverAddressSP, + /// @dev user must send an address that controls on the destination chain routerPlusPayloadId, XChainRebalanceData({ rebalanceSelector: args.rebalanceToSelector, @@ -370,6 +361,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { /// @inheritdoc ISuperformRouterPlus function deposit4626(address[] calldata vaults_, Deposit4626Args[] calldata args) external payable { + /// @notice: args.receiverAddress SP is purely ignored now (not added in natspec to preserve the interface) uint256 length = vaults_.length; if (length != args.length) { @@ -432,6 +424,8 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { ) internal { + /// @notice: args.receiverAddress SP is purely ignored now (not added in natspec to preserve the interface) + IERC20 interimAsset = IERC20(args.interimAsset); /// @dev validate the call dataREBALANCE_SINGLE_POSITIONS_DIFFERENT_AMOUNT @@ -492,8 +486,7 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { revert Error.VAULT_IMPLEMENTATION_FAILED(); } - uint256 amountIn = - _validateAndGetAmountIn(rebalanceToCallData, args.receiverAddressSP, availableBalanceToDeposit); + uint256 amountIn = _validateAndGetAmountIn(rebalanceToCallData, availableBalanceToDeposit); _deposit(router_, interimAsset, amountIn, args.rebalanceToMsgValue, rebalanceToCallData); } @@ -642,7 +635,9 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { /// @param args Rest of the arguments to deposit 4626 /// @param valueToPass The value to pass to the deposit function function _deposit4626(address vault_, Deposit4626Args calldata args, uint256 valueToPass) internal { - _transferERC20In(IERC20(vault_), args.receiverAddressSP, args.amount); + address user = msg.sender; + _transferERC20In(IERC20(vault_), user, args.amount); + IERC4626 vault = IERC4626(vault_); address assetAdr = vault.asset(); IERC20 asset = IERC20(assetAdr); @@ -651,20 +646,19 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { uint256 amountRedeemed = _redeemShare(vault, assetAdr, args.amount, args.expectedOutputAmount, args.maxSlippage); - uint256 amountIn = _validateAndGetAmountIn(args.depositCallData, args.receiverAddressSP, amountRedeemed); + uint256 amountIn = _validateAndGetAmountIn(args.depositCallData, amountRedeemed); address router = _getAddress(keccak256("SUPERFORM_ROUTER")); _deposit(router, asset, amountIn, valueToPass, args.depositCallData); - _tokenRefunds(router, assetAdr, args.receiverAddressSP, balanceBefore); + _tokenRefunds(router, assetAdr, user, balanceBefore); - emit Deposit4626Completed(args.receiverAddressSP, vault_); + emit Deposit4626Completed(user, vault_); } function _validateAndGetAmountIn( bytes calldata rebalanceToCallData, - address receiverAddressSP, uint256 availableBalanceToDeposit ) internal @@ -683,12 +677,10 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { SingleVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleDirectSingleVaultStateReq)).superformData; amountIn = _takeAmountIn(sfData.liqRequest, sfData.amount); - _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.singleXChainSingleVaultDeposit.selector) { SingleVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleXChainSingleVaultStateReq)).superformData; amountIn = _takeAmountIn(sfData.liqRequest, sfData.amount); - _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.singleDirectMultiVaultDeposit.selector) { MultiVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleDirectMultiVaultStateReq)).superformData; @@ -698,7 +690,6 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { amountInTemp = _takeAmountIn(sfData.liqRequests[i], sfData.amounts[i]); amountIn += amountInTemp; } - _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.singleXChainMultiVaultDeposit.selector) { MultiVaultSFData memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (SingleXChainMultiVaultStateReq)).superformsData; @@ -707,7 +698,6 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { amountInTemp = _takeAmountIn(sfData.liqRequests[i], sfData.amounts[i]); amountIn += amountInTemp; } - _checkReceiverAddress(receiverAddressSP, sfData.receiverAddress, sfData.receiverAddressSP); } else if (rebalanceToSelector == IBaseRouter.multiDstSingleVaultDeposit.selector) { SingleVaultSFData[] memory sfData = abi.decode(_parseCallData(rebalanceToCallData), (MultiDstSingleVaultStateReq)).superformsData; @@ -715,7 +705,6 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { for (uint256 i; i < lenDst; ++i) { amountInTemp = _takeAmountIn(sfData[i].liqRequest, sfData[i].amount); amountIn += amountInTemp; - _checkReceiverAddress(receiverAddressSP, sfData[i].receiverAddress, sfData[i].receiverAddressSP); } } else if (rebalanceToSelector == IBaseRouter.multiDstMultiVaultDeposit.selector) { MultiVaultSFData[] memory sfData = @@ -727,7 +716,6 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { amountInTemp = _takeAmountIn(sfData[i].liqRequests[j], sfData[i].amounts[j]); amountIn += amountInTemp; } - _checkReceiverAddress(receiverAddressSP, sfData[i].receiverAddress, sfData[i].receiverAddressSP); } } @@ -741,21 +729,4 @@ contract SuperformRouterPlus is ISuperformRouterPlus, BaseSuperformRouterPlus { revert ASSETS_RECEIVED_OUT_OF_SLIPPAGE(); } } - - function _checkReceiverAddress( - address receiverAddressSP, - address callDataReceiverAddress, - address callDataReceiverAddressSP - ) - internal - pure - { - /// @dev These checks below prevent a user approving funds to router plus while another user receives the - /// SuperPositions - - /// @dev We force all receiver addresses to match - if (receiverAddressSP != callDataReceiverAddressSP || callDataReceiverAddressSP != callDataReceiverAddress) { - revert RECEIVER_ADDRESS_MISMATCH(); - } - } } diff --git a/test/unit/router-plus/SuperformRouterPlus.t.sol b/test/unit/router-plus/SuperformRouterPlus.t.sol index ddc8ca929..b1da93474 100644 --- a/test/unit/router-plus/SuperformRouterPlus.t.sol +++ b/test/unit/router-plus/SuperformRouterPlus.t.sol @@ -18,6 +18,9 @@ import "forge-std/console2.sol"; import { IERC4626 } from "openzeppelin-contracts/contracts/interfaces/IERC4626.sol"; +import { IERC1155A } from "ERC1155A/interfaces/IERC1155A.sol"; +import { IERC20Errors } from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol"; + contract RejectEther { // This function will revert when called, simulating a contract that can't receive native tokens receive() external payable { @@ -2747,75 +2750,25 @@ contract SuperformRouterPlusTest is ProtocolActions { // SAME_CHAIN REBALANCING TESTS // ////////////////////////////////////////////////////////////// - function _buildRebalanceSinglePositionToOneVaultArgsHack(address user) - internal - view - returns (ISuperformRouterPlus.RebalanceSinglePositionSyncArgs memory args) - { - args.id = superformId1; - args.sharesToRedeem = SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(user, superformId1); - args.rebalanceFromMsgValue = 1 ether; - args.rebalanceToMsgValue = 1 ether; - args.interimAsset = getContract(SOURCE_CHAIN, "USDC"); - args.slippage = 100; - args.receiverAddressSP = user; - args.callData = _callDataRebalanceFrom(args.interimAsset); - - uint256 decimal1 = MockERC20(getContract(SOURCE_CHAIN, "DAI")).decimals(); - uint256 decimal2 = MockERC20(args.interimAsset).decimals(); - uint256 previewRedeemAmount = IBaseForm(superform1).previewRedeemFrom(args.sharesToRedeem); - - if (decimal1 > decimal2) { - args.expectedAmountToReceivePostRebalanceFrom = previewRedeemAmount / (10 ** (decimal1 - decimal2)); - } else { - args.expectedAmountToReceivePostRebalanceFrom = previewRedeemAmount * 10 ** (decimal2 - decimal1); - } - - args.rebalanceToCallData = _callDataRebalanceToOneVaultSameChainHack( - args.expectedAmountToReceivePostRebalanceFrom, args.interimAsset, user - ); - } - - function _callDataRebalanceToOneVaultSameChainHack( - uint256 amountToDeposit, - address interimToken, - address user - ) - internal - view - returns (bytes memory) - { - SingleVaultSFData memory data = SingleVaultSFData( - superformId2, - amountToDeposit, - IBaseForm(superform2).previewDepositTo(amountToDeposit), - 100, - LiqRequest("", interimToken, address(0), 1, SOURCE_CHAIN, 0), - "", - false, - false, - address(0xDEAD), - address(0xDEAD), - "" - ); - return abi.encodeCall(IBaseRouter.singleDirectSingleVaultDeposit, SingleDirectSingleVaultStateReq(data)); - } - - function test_rebalanceFromSinglePosition_toOneVault_hack() public { + /// @dev rebalance from a single position to a single vault + function test_rebalanceFromSinglePosition_toOneVault() public { vm.startPrank(deployer); _directDeposit(superformId1, 1e18); ISuperformRouterPlus.RebalanceSinglePositionSyncArgs memory args = - _buildRebalanceSinglePositionToOneVaultArgsHack(deployer); + _buildRebalanceSinglePositionToOneVaultArgs(deployer); SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance(ROUTER_PLUS_SOURCE, superformId1, args.sharesToRedeem); - vm.expectRevert(SuperformRouterPlus.RECEIVER_ADDRESS_MISMATCH.selector); SuperformRouterPlus(ROUTER_PLUS_SOURCE).rebalanceSinglePosition{ value: 2 ether }(args); + + assertEq(SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(deployer, superformId1), 0); + + assertGt(SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(deployer, superformId2), 0); } - /// @dev rebalance from a single position to a single vault - function test_rebalanceFromSinglePosition_toOneVault() public { + /// @dev attempt to use the approval of someone else + function test_rebalanceFromSinglePosition_toOneVault_hack() public { vm.startPrank(deployer); _directDeposit(superformId1, 1e18); @@ -2824,11 +2777,12 @@ contract SuperformRouterPlusTest is ProtocolActions { _buildRebalanceSinglePositionToOneVaultArgs(deployer); SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance(ROUTER_PLUS_SOURCE, superformId1, args.sharesToRedeem); + vm.stopPrank(); + deal(getContract(SOURCE_CHAIN, "DAI"), users[2], 100e18); + vm.deal(users[2], 2 ether); + vm.prank(users[2]); + vm.expectRevert(IERC1155A.DECREASED_ALLOWANCE_BELOW_ZERO.selector); SuperformRouterPlus(ROUTER_PLUS_SOURCE).rebalanceSinglePosition{ value: 2 ether }(args); - - assertEq(SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(deployer, superformId1), 0); - - assertGt(SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(deployer, superformId2), 0); } /// @dev rebalance from a single position to two vaults @@ -2879,6 +2833,33 @@ contract SuperformRouterPlusTest is ProtocolActions { assertGt(SuperPositions(SUPER_POSITIONS_SOURCE).balanceOf(deployer, superformId4OP), 0); } + function test_rebalanceFromTwoPositions_toOneXChainVault_hack() public { + vm.startPrank(deployer); + + _directDeposit(superformId1, 1e18); + _directDeposit(superformId2, 1e6); + + (ISuperformRouterPlus.RebalanceMultiPositionsSyncArgs memory args,) = + _buildRebalanceTwoPositionsToOneVaultXChainArgs(); + + SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance( + ROUTER_PLUS_SOURCE, superformId1, args.sharesToRedeem[0] + ); + SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance( + ROUTER_PLUS_SOURCE, superformId2, args.sharesToRedeem[1] + ); + + vm.stopPrank(); + + vm.recordLogs(); + deal(getContract(SOURCE_CHAIN, "DAI"), users[2], 100e18); + vm.deal(users[2], 2 ether); + vm.prank(users[2]); + vm.expectRevert(IERC1155A.DECREASED_ALLOWANCE_BELOW_ZERO.selector); + + SuperformRouterPlus(ROUTER_PLUS_SOURCE).rebalanceMultiPositions{ value: 2 ether }(args); + } + ////////////////////////////////////////////////////////////// // X_CHAIN REBALANCING TESTS // ////////////////////////////////////////////////////////////// @@ -2965,6 +2946,36 @@ contract SuperformRouterPlusTest is ProtocolActions { ); } + function test_crossChainRebalanceSinglePosition_toOneVaultXChain_hack() public { + vm.startPrank(deployer); + + uint64 REBALANCE_FROM = ETH; + uint64 REBALANCE_TO = OP; + + // Step 1: Initial XCHAIN Deposit + _xChainDeposit(superformId5ETH, REBALANCE_FROM, 1); + + // Step 2: Start cross-chain rebalance + vm.selectFork(FORKS[SOURCE_CHAIN]); + ISuperformRouterPlus.InitiateXChainRebalanceArgs memory args = + _buildInitiateXChainRebalanceArgs(REBALANCE_FROM, REBALANCE_TO, deployer); + + vm.startPrank(deployer); + + SuperPositions(SUPER_POSITIONS_SOURCE).increaseAllowance( + ROUTER_PLUS_SOURCE, superformId5ETH, args.sharesToRedeem + ); + vm.stopPrank(); + + vm.recordLogs(); + deal(getContract(SOURCE_CHAIN, "DAI"), users[2], 100e18); + vm.deal(users[2], 2 ether); + vm.prank(users[2]); + vm.expectRevert(IERC1155A.DECREASED_ALLOWANCE_BELOW_ZERO.selector); + + SuperformRouterPlus(ROUTER_PLUS_SOURCE).startCrossChainRebalance{ value: 2 ether }(args); + } + /// @dev rebalance from two positions to one vault function test_crossChainRebalanceMultiPositions_toOneVaultXChain() public { vm.startPrank(deployer); @@ -3291,6 +3302,61 @@ contract SuperformRouterPlusTest is ProtocolActions { ); } + function test_deposit4626_hack() public { + // User approves router for vault tokens + vm.startPrank(deployer); + (address sfMigrateFrom,,) = superformId1.getSuperform(); + address migrateFromVault = IBaseForm(sfMigrateFrom).getVaultAddress(); + deal(migrateFromVault, deployer, 1e18); + + // Approve and deposit DAI into the mock vault + MockERC20(getContract(SOURCE_CHAIN, "DAI")).approve(migrateFromVault, 1e18); + uint256 vaultTokenAmount = IERC4626(migrateFromVault).deposit(1e18, deployer); + IERC20(migrateFromVault).approve(getContract(SOURCE_CHAIN, "SuperformRouterPlus"), vaultTokenAmount); + + vm.stopPrank(); + + address attacker = address(0x1337); + vm.deal(attacker, 1e18); + // Attacker prepares malicious deposit data + SingleVaultSFData memory data = SingleVaultSFData( + superformId1, + 1e18, + 1, + 10_000, + LiqRequest("", address(0), address(0), 0, SOURCE_CHAIN, 0), + "", + false, + false, + attacker, // Set attacker as receiver + attacker, // Set attacker as receiverSP + "" + ); + + bytes4 selector = IBaseRouter.singleDirectSingleVaultDeposit.selector; + bytes memory maliciousCallData = abi.encodePacked(selector, abi.encode(SingleDirectSingleVaultStateReq(data))); + + address[] memory vaults = new address[](1); + vaults[0] = migrateFromVault; + + ISuperformRouterPlus.Deposit4626Args[] memory args = new ISuperformRouterPlus.Deposit4626Args[](1); + args[0] = ISuperformRouterPlus.Deposit4626Args({ + amount: 1e18, + expectedOutputAmount: 1, + maxSlippage: 9999, + receiverAddressSP: deployer, + depositCallData: maliciousCallData + }); + + // Attacker executes malicious deposit + vm.prank(attacker); + + vm.expectRevert(); + // this should fail with IERC20Errors.ERC20InsufficientAllowance.selector, but we can't use + // vm.expectPartialRevert + SuperformRouterPlus(getContract(SOURCE_CHAIN, "SuperformRouterPlus")).deposit4626(vaults, args); + } + ////////////////////////////////////////////////////////////// // INTERNAL HELPERS // ////////////////////////////////////////////////////////////// @@ -5189,56 +5255,4 @@ contract SuperformRouterPlusTest is ProtocolActions { SuperformRouterPlus(getContract(SOURCE_CHAIN, "SuperformRouterPlus")).setGlobalSlippage(100); vm.stopPrank(); } - - function test_deposit4626_maliciousReceiver() public { - // User approves router for vault tokens - vm.startPrank(deployer); - (address sfMigrateFrom,,) = superformId1.getSuperform(); - address migrateFromVault = IBaseForm(sfMigrateFrom).getVaultAddress(); - deal(migrateFromVault, deployer, 1e18); - - // Approve and deposit DAI into the mock vault - MockERC20(getContract(SOURCE_CHAIN, "DAI")).approve(migrateFromVault, 1e18); - uint256 vaultTokenAmount = IERC4626(migrateFromVault).deposit(1e18, deployer); - IERC20(migrateFromVault).approve(getContract(SOURCE_CHAIN, "SuperformRouterPlus"), vaultTokenAmount); - - vm.stopPrank(); - - address attacker = address(0x1337); - vm.deal(attacker, 1e18); - // Attacker prepares malicious deposit data - SingleVaultSFData memory data = SingleVaultSFData( - superformId1, - 1e18, - 1, - 10_000, - LiqRequest("", address(0), address(0), 0, SOURCE_CHAIN, 0), - "", - false, - false, - attacker, // Set attacker as receiver - attacker, // Set attacker as receiverSP - "" - ); - - bytes4 selector = IBaseRouter.singleDirectSingleVaultDeposit.selector; - bytes memory maliciousCallData = abi.encodePacked(selector, abi.encode(SingleDirectSingleVaultStateReq(data))); - - address[] memory vaults = new address[](1); - vaults[0] = migrateFromVault; - - ISuperformRouterPlus.Deposit4626Args[] memory args = new ISuperformRouterPlus.Deposit4626Args[](1); - args[0] = ISuperformRouterPlus.Deposit4626Args({ - amount: 1e18, - expectedOutputAmount: 1, - maxSlippage: 9999, - receiverAddressSP: deployer, - depositCallData: maliciousCallData - }); - - // Attacker executes malicious deposit - vm.prank(attacker); - vm.expectRevert(SuperformRouterPlus.RECEIVER_ADDRESS_MISMATCH.selector); - SuperformRouterPlus(getContract(SOURCE_CHAIN, "SuperformRouterPlus")).deposit4626(vaults, args); - } } From dbcc5ad391eb4fa221ff324c8429de492f691d33 Mon Sep 17 00:00:00 2001 From: 0xTimepunk Date: Fri, 24 Jan 2025 18:30:38 +0000 Subject: [PATCH 3/5] chore: prepare mainnet script --- .../misc/run_script_mainnet_routerplus.sh | 82 ++++++++----------- 1 file changed, 36 insertions(+), 46 deletions(-) diff --git a/script/utils/misc/run_script_mainnet_routerplus.sh b/script/utils/misc/run_script_mainnet_routerplus.sh index 10c881c62..b18a1a2bc 100644 --- a/script/utils/misc/run_script_mainnet_routerplus.sh +++ b/script/utils/misc/run_script_mainnet_routerplus.sh @@ -15,68 +15,58 @@ export BLAST_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/BLAST_RPC_URL/cre # Run the script echo Deploying Router Plus on prod: ... -# # FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --account default --broadcast --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# # wait - -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --account default --broadcast --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# # FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 7 0 --rpc-url $FANTOM_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# # wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# wait +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +wait echo Configuring Router Plus on prod: ... -# # //FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -# # // wait - -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait - -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -# // FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 7 0 --rpc-url $FANTOM_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -# // wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait -echo disable ftm cross chain -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "disableFTMCrossChain(uint256,uint256,uint256)" 0 7 1 --rpc-url $FANTOM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# wait \ No newline at end of file From a006e14479ebd60ff538760a44ecdaa65bbfe070 Mon Sep 17 00:00:00 2001 From: 0xTimepunk Date: Sun, 26 Jan 2025 21:56:16 +0000 Subject: [PATCH 4/5] fix: ready to configure --- .../v1_deployment/1/Ethereum-latest.json | 2 +- .../v1_deployment/10/Optimism-latest.json | 2 +- .../v1_deployment/137/Polygon-latest.json | 2 +- .../v1_deployment/42161/Arbitrum-latest.json | 2 +- .../v1_deployment/43114/Avalanche-latest.json | 2 +- .../v1_deployment/56/Binance-latest.json | 2 +- .../v1_deployment/59144/Linea-latest.json | 2 +- .../v1_deployment/81457/Blast-latest.json | 2 +- .../v1_deployment/8453/Base-latest.json | 2 +- .../10/Optimism-latest.json | 2 +- .../42161/Arbitrum-latest.json | 2 +- .../56/Binance-latest.json | 2 +- .../59144/Linea-latest.json | 2 +- .../81457/Blast-latest.json | 2 +- .../8453/Base-latest.json | 2 +- .../Abstract.Deploy.Single.s.sol | 2 +- .../misc/Abstract.Deploy.RouterPlus.s.sol | 10 +-- .../misc/run_script_mainnet_routerplus.sh | 84 ++++++++++++------- script/utils/verify_contracts.sh | 6 +- script/utils/verify_contracts_staging.sh | 2 +- 20 files changed, 78 insertions(+), 56 deletions(-) diff --git a/script/deployments/v1_deployment/1/Ethereum-latest.json b/script/deployments/v1_deployment/1/Ethereum-latest.json index b4609c439..49151f676 100644 --- a/script/deployments/v1_deployment/1/Ethereum-latest.json +++ b/script/deployments/v1_deployment/1/Ethereum-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/10/Optimism-latest.json b/script/deployments/v1_deployment/10/Optimism-latest.json index b4609c439..49151f676 100644 --- a/script/deployments/v1_deployment/10/Optimism-latest.json +++ b/script/deployments/v1_deployment/10/Optimism-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/137/Polygon-latest.json b/script/deployments/v1_deployment/137/Polygon-latest.json index b4609c439..49151f676 100644 --- a/script/deployments/v1_deployment/137/Polygon-latest.json +++ b/script/deployments/v1_deployment/137/Polygon-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/42161/Arbitrum-latest.json b/script/deployments/v1_deployment/42161/Arbitrum-latest.json index b4609c439..49151f676 100644 --- a/script/deployments/v1_deployment/42161/Arbitrum-latest.json +++ b/script/deployments/v1_deployment/42161/Arbitrum-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/43114/Avalanche-latest.json b/script/deployments/v1_deployment/43114/Avalanche-latest.json index b4609c439..49151f676 100644 --- a/script/deployments/v1_deployment/43114/Avalanche-latest.json +++ b/script/deployments/v1_deployment/43114/Avalanche-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/56/Binance-latest.json b/script/deployments/v1_deployment/56/Binance-latest.json index b4609c439..49151f676 100644 --- a/script/deployments/v1_deployment/56/Binance-latest.json +++ b/script/deployments/v1_deployment/56/Binance-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/59144/Linea-latest.json b/script/deployments/v1_deployment/59144/Linea-latest.json index 04e6b263f..e1b83a07e 100644 --- a/script/deployments/v1_deployment/59144/Linea-latest.json +++ b/script/deployments/v1_deployment/59144/Linea-latest.json @@ -30,5 +30,5 @@ "WormholeSRImplementation": "0x0000000000000000000000000000000000000000", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/81457/Blast-latest.json b/script/deployments/v1_deployment/81457/Blast-latest.json index e0675b096..0f1029238 100644 --- a/script/deployments/v1_deployment/81457/Blast-latest.json +++ b/script/deployments/v1_deployment/81457/Blast-latest.json @@ -30,5 +30,5 @@ "WormholeSRImplementation": "0x2827eFf89affacf9E80D671bca6DeCf7dbdcCaCa", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_deployment/8453/Base-latest.json b/script/deployments/v1_deployment/8453/Base-latest.json index 82d6d24bf..48636006d 100644 --- a/script/deployments/v1_deployment/8453/Base-latest.json +++ b/script/deployments/v1_deployment/8453/Base-latest.json @@ -30,5 +30,5 @@ "DeBridgeValidator": "0x04A9e7318544DA4dd8c3d76E9c72d2087e285a8d", "AsyncStateRegistry": "0x0000000000000000000000000000000000000000", "ERC7540Form": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9" + "SuperformRouterPlus": "0xC417496D46eD390514cEABE2297ec6d65Df214a4" } \ No newline at end of file diff --git a/script/deployments/v1_staging_deployment/10/Optimism-latest.json b/script/deployments/v1_staging_deployment/10/Optimism-latest.json index 22dd191ee..9fdd7ec78 100644 --- a/script/deployments/v1_staging_deployment/10/Optimism-latest.json +++ b/script/deployments/v1_staging_deployment/10/Optimism-latest.json @@ -30,6 +30,6 @@ "ERC5115Form": "0x93f5fD75460aC5F0686eBfE22e556F1129F504B0", "OneInchValidator": "0x480140a26c3eb10F0F17e56495CE588320f45Cfe", "ERC5115To4626WrapperFactory": "0x14Bc2728DaE89FE7c828833a186DdC5E9AE439C3", - "SuperformRouterPlus": "0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249", + "SuperformRouterPlus": "0x57bf790F609e35e7C30F35fe53A886A657f8C7d1", "SuperformRouterPlusAsync": "0xbc1300e95393cF481b7c2d29d85B54689ef04fc8" } \ No newline at end of file diff --git a/script/deployments/v1_staging_deployment/42161/Arbitrum-latest.json b/script/deployments/v1_staging_deployment/42161/Arbitrum-latest.json index 22dd191ee..9fdd7ec78 100644 --- a/script/deployments/v1_staging_deployment/42161/Arbitrum-latest.json +++ b/script/deployments/v1_staging_deployment/42161/Arbitrum-latest.json @@ -30,6 +30,6 @@ "ERC5115Form": "0x93f5fD75460aC5F0686eBfE22e556F1129F504B0", "OneInchValidator": "0x480140a26c3eb10F0F17e56495CE588320f45Cfe", "ERC5115To4626WrapperFactory": "0x14Bc2728DaE89FE7c828833a186DdC5E9AE439C3", - "SuperformRouterPlus": "0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249", + "SuperformRouterPlus": "0x57bf790F609e35e7C30F35fe53A886A657f8C7d1", "SuperformRouterPlusAsync": "0xbc1300e95393cF481b7c2d29d85B54689ef04fc8" } \ No newline at end of file diff --git a/script/deployments/v1_staging_deployment/56/Binance-latest.json b/script/deployments/v1_staging_deployment/56/Binance-latest.json index 22dd191ee..9fdd7ec78 100644 --- a/script/deployments/v1_staging_deployment/56/Binance-latest.json +++ b/script/deployments/v1_staging_deployment/56/Binance-latest.json @@ -30,6 +30,6 @@ "ERC5115Form": "0x93f5fD75460aC5F0686eBfE22e556F1129F504B0", "OneInchValidator": "0x480140a26c3eb10F0F17e56495CE588320f45Cfe", "ERC5115To4626WrapperFactory": "0x14Bc2728DaE89FE7c828833a186DdC5E9AE439C3", - "SuperformRouterPlus": "0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249", + "SuperformRouterPlus": "0x57bf790F609e35e7C30F35fe53A886A657f8C7d1", "SuperformRouterPlusAsync": "0xbc1300e95393cF481b7c2d29d85B54689ef04fc8" } \ No newline at end of file diff --git a/script/deployments/v1_staging_deployment/59144/Linea-latest.json b/script/deployments/v1_staging_deployment/59144/Linea-latest.json index 21f85d21b..35d3e3489 100644 --- a/script/deployments/v1_staging_deployment/59144/Linea-latest.json +++ b/script/deployments/v1_staging_deployment/59144/Linea-latest.json @@ -30,6 +30,6 @@ "VaultClaimer": "0xf1930eD240cF9c4F1840aDB689E5d231687922C5", "WormholeARImplementation": "0x0000000000000000000000000000000000000000", "WormholeSRImplementation": "0x0000000000000000000000000000000000000000", - "SuperformRouterPlus": "0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249", + "SuperformRouterPlus": "0x57bf790F609e35e7C30F35fe53A886A657f8C7d1", "SuperformRouterPlusAsync": "0xbc1300e95393cF481b7c2d29d85B54689ef04fc8" } \ No newline at end of file diff --git a/script/deployments/v1_staging_deployment/81457/Blast-latest.json b/script/deployments/v1_staging_deployment/81457/Blast-latest.json index 2de5eafc8..e8d4aec94 100644 --- a/script/deployments/v1_staging_deployment/81457/Blast-latest.json +++ b/script/deployments/v1_staging_deployment/81457/Blast-latest.json @@ -30,6 +30,6 @@ "VaultClaimer": "0xf1930eD240cF9c4F1840aDB689E5d231687922C5", "WormholeARImplementation": "0x71ec658F19AcF74D258c55A025ADC534c34EcaDA", "WormholeSRImplementation": "0x44b451Ca87267a62A0C853ECFbaaC1C3E528a82C", - "SuperformRouterPlus": "0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249", + "SuperformRouterPlus": "0x57bf790F609e35e7C30F35fe53A886A657f8C7d1", "SuperformRouterPlusAsync": "0xbc1300e95393cF481b7c2d29d85B54689ef04fc8" } \ No newline at end of file diff --git a/script/deployments/v1_staging_deployment/8453/Base-latest.json b/script/deployments/v1_staging_deployment/8453/Base-latest.json index 0e0fc5dab..4c801e73c 100644 --- a/script/deployments/v1_staging_deployment/8453/Base-latest.json +++ b/script/deployments/v1_staging_deployment/8453/Base-latest.json @@ -30,6 +30,6 @@ "ERC5115Form": "0x93f5fD75460aC5F0686eBfE22e556F1129F504B0", "OneInchValidator": "0x480140a26c3eb10F0F17e56495CE588320f45Cfe", "ERC5115To4626WrapperFactory": "0x14Bc2728DaE89FE7c828833a186DdC5E9AE439C3", - "SuperformRouterPlus": "0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249", + "SuperformRouterPlus": "0x57bf790F609e35e7C30F35fe53A886A657f8C7d1", "SuperformRouterPlusAsync": "0xbc1300e95393cF481b7c2d29d85B54689ef04fc8" } \ No newline at end of file diff --git a/script/forge-scripts/Abstract.Deploy.Single.s.sol b/script/forge-scripts/Abstract.Deploy.Single.s.sol index 7caad0871..4d2b45fe4 100644 --- a/script/forge-scripts/Abstract.Deploy.Single.s.sol +++ b/script/forge-scripts/Abstract.Deploy.Single.s.sol @@ -363,7 +363,7 @@ abstract contract AbstractDeploySingle is BatchScript { uint64 public constant BLAST = 81_457; uint64 public constant BARTIO = 80_084; - uint256[] public manualNonces = [23, 23, 23, 23, 22, 22, 21, 10, 4, 3, 0]; + uint256[] public manualNonces = [24, 24, 24, 24, 23, 23, 22, 10, 6, 5, 0]; uint64[] public chainIds = [1, 56, 43_114, 137, 42_161, 10, 8453, 250, 59_144, 81_457, 80_084]; string[] public chainNames = [ "Ethereum", diff --git a/script/forge-scripts/misc/Abstract.Deploy.RouterPlus.s.sol b/script/forge-scripts/misc/Abstract.Deploy.RouterPlus.s.sol index b2c850ac6..eecfe2000 100644 --- a/script/forge-scripts/misc/Abstract.Deploy.RouterPlus.s.sol +++ b/script/forge-scripts/misc/Abstract.Deploy.RouterPlus.s.sol @@ -49,12 +49,12 @@ abstract contract AbstractDeployRouterPlus is EnvironmentUtils { SuperRegistry(superRegistry).setAddress(keccak256("SUPERFORM_ROUTER_PLUS"), superformRouterPlus, vars.chainId); - address superformRouterPlusAsync = address(new SuperformRouterPlusAsync{ salt: salt }(superRegistry)); - contracts[vars.chainId][bytes32(bytes("SuperformRouterPlusAsync"))] = superformRouterPlusAsync; + // address superformRouterPlusAsync = address(new SuperformRouterPlusAsync{ salt: salt }(superRegistry)); + // contracts[vars.chainId][bytes32(bytes("SuperformRouterPlusAsync"))] = superformRouterPlusAsync; - SuperRegistry(superRegistry).setAddress( - keccak256("SUPERFORM_ROUTER_PLUS_ASYNC"), superformRouterPlusAsync, vars.chainId - ); + // SuperRegistry(superRegistry).setAddress( + // keccak256("SUPERFORM_ROUTER_PLUS_ASYNC"), superformRouterPlusAsync, vars.chainId + // ); vm.stopBroadcast(); diff --git a/script/utils/misc/run_script_mainnet_routerplus.sh b/script/utils/misc/run_script_mainnet_routerplus.sh index b18a1a2bc..88e89893f 100644 --- a/script/utils/misc/run_script_mainnet_routerplus.sh +++ b/script/utils/misc/run_script_mainnet_routerplus.sh @@ -12,61 +12,83 @@ export FANTOM_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/FANTOM_RPC_URL/c export LINEA_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/LINEA_RPC_URL/credential) export BLAST_RPC_URL=$(op read op://5ylebqljbh3x6zomdxi3qd7tsa/BLAST_RPC_URL/credential) -# Run the script -echo Deploying Router Plus on prod: ... -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --account default --broadcast --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# echo Deploying Router Plus on staging: ... -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusStaging(uint256,uint256,uint256)" 1 0 0 --rpc-url $BSC_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusStaging(uint256,uint256,uint256)" 1 1 0 --rpc-url $ARBITRUM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusStaging(uint256,uint256,uint256)" 1 2 0 --rpc-url $OPTIMISM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusStaging(uint256,uint256,uint256)" 1 3 0 --rpc-url $BASE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusStaging(uint256,uint256,uint256)" 1 5 0 --rpc-url $LINEA_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusStaging(uint256,uint256,uint256)" 1 6 0 --rpc-url $BLAST_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +# wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait -FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --broadcast --slow --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy -wait +# Run the script +# echo Deploying Router Plus on prod: ... -echo Configuring Router Plus on prod: ... +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy +# wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "deployRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --slow --broadcast --account default --sender 0x48aB8AdF869Ba9902Ad483FB1Ca2eFDAb6eabe92 --legacy # wait -# FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 -# wait \ No newline at end of file +echo Configuring Router Plus on prod: ... + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 0 0 --rpc-url $ETHEREUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 1 0 --rpc-url $BSC_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 2 0 --rpc-url $AVALANCHE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 3 0 --rpc-url $POLYGON_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 4 0 --rpc-url $ARBITRUM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 5 0 --rpc-url $OPTIMISM_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 6 0 --rpc-url $BASE_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 8 0 --rpc-url $LINEA_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait + +FOUNDRY_PROFILE=production forge script script/forge-scripts/misc/Mainnet.Deploy.SuperformRouterPlus.s.sol:MainnetDeployRouterPlus --sig "configureRouterPlusProd(uint256,uint256,uint256)" 0 9 0 --rpc-url $BLAST_RPC_URL --slow --sender 0x1985df46791BEBb1e3ed9Ec60417F38CECc1D349 +wait \ No newline at end of file diff --git a/script/utils/verify_contracts.sh b/script/utils/verify_contracts.sh index 73e17c785..5a9266221 100644 --- a/script/utils/verify_contracts.sh +++ b/script/utils/verify_contracts.sh @@ -185,7 +185,7 @@ contract_addresses=( 0x35E3057FF29ebC5b8dEF18EC66FEde16f1B237F5 0x664E1e7b8393DF4aC4EFAbEf9d56B2100098FCE2 0xc100592b40eeb4CBC7524092A00400917421ab64 - 0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9 + 0xC417496D46eD390514cEABE2297ec6d65Df214a4 # Add more addresses here if needed ) @@ -252,7 +252,7 @@ contract_addresses_linea=( 0x35E3057FF29ebC5b8dEF18EC66FEde16f1B237F5 0x664E1e7b8393DF4aC4EFAbEf9d56B2100098FCE2 0xc100592b40eeb4CBC7524092A00400917421ab64 - 0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9 + 0xC417496D46eD390514cEABE2297ec6d65Df214a4 # Add more addresses here if needed ) @@ -286,7 +286,7 @@ contract_addresses_blast=( 0x5266958cb4b8E6A1534c6Ac19f4220909cf3F7FA 0x664E1e7b8393DF4aC4EFAbEf9d56B2100098FCE2 0xc100592b40eeb4CBC7524092A00400917421ab64 - 0x4393C2a521ef115cd32C1d45897E7ce33aDa7aa9 + 0xC417496D46eD390514cEABE2297ec6d65Df214a4 # Add more addresses here if needed ) diff --git a/script/utils/verify_contracts_staging.sh b/script/utils/verify_contracts_staging.sh index f3e2498ed..37e512930 100644 --- a/script/utils/verify_contracts_staging.sh +++ b/script/utils/verify_contracts_staging.sh @@ -170,7 +170,7 @@ contract_addresses=( # 0x0000000000000000000000000000000000000000 # 0x14Bc2728DaE89FE7c828833a186DdC5E9AE439C3 # 0xF442FC47c5e8b6CA772a9b7345d9E6A663375258 - 0xA4bf3ab533Bd9dd0cC8C71D273B748E968065249 + 0x57bf790F609e35e7C30F35fe53A886A657f8C7d1 0xbc1300e95393cF481b7c2d29d85B54689ef04fc8 # 0xcB11480022E5B6D76661441C8eD025d756B5D1Ed # 0xE2005E8A9b8A21d6dF752db866fA78a574057052 From 1984e6231c7d89c1c19d78d7f545e35b70a2f402 Mon Sep 17 00:00:00 2001 From: 0xTimepunk Date: Sun, 26 Jan 2025 22:14:14 +0000 Subject: [PATCH 5/5] fix: verify scripts --- .../verify_safe_txs/verify_all_networks.sh | 23 ++--- ...verify_dvn_config.sh => verify_network.sh} | 94 +------------------ 2 files changed, 13 insertions(+), 104 deletions(-) rename script/utils/verify_safe_txs/{verify_dvn_config.sh => verify_network.sh} (76%) diff --git a/script/utils/verify_safe_txs/verify_all_networks.sh b/script/utils/verify_safe_txs/verify_all_networks.sh index d27537e4b..426078b48 100755 --- a/script/utils/verify_safe_txs/verify_all_networks.sh +++ b/script/utils/verify_safe_txs/verify_all_networks.sh @@ -9,7 +9,6 @@ NETWORKS=( "arbitrum" "optimism" "base" - "fantom" "linea" "blast" ) @@ -23,26 +22,24 @@ declare -A NETWORK_ADDRESSES=( ["arbitrum"]="0x7Fc07cAFb65d1552849BcF151F7035C5210B76f4" ["optimism"]="0x99620a926D68746D5F085B3f7cD62F4fFB71f0C1" ["base"]="0x2F973806f8863E860A553d4F2E7c2AB4A9F3b87C" - ["fantom"]="0xe6ca8aC2D27A1bAd2Ab6b136Eab87488c3c98Fd1" ["linea"]="0x62Bbfe3ef3faAb7045d29bC388E5A0c5033D8b77" ["blast"]="0x95B5837CF46E6ab340fFf3844ca5e7d8ead5B8AF" ) declare -A NETWORK_NONCES=( - ["ethereum"]="22" - ["bsc"]="22" - ["avalanche"]="22" - ["polygon"]="22" - ["arbitrum"]="21" - ["optimism"]="21" - ["base"]="20" - ["fantom"]="9" - ["linea"]="3" - ["blast"]="2" + ["ethereum"]="24" + ["bsc"]="24" + ["avalanche"]="24" + ["polygon"]="24" + ["arbitrum"]="23" + ["optimism"]="23" + ["base"]="22" + ["linea"]="6" + ["blast"]="5" ) # Path to the verification script -VERIFY_SCRIPT="./script/utils/verify_safe_txs/verify_dvn_config.sh" +VERIFY_SCRIPT="./script/utils/verify_safe_txs/verify_network.sh" # Check if the verification script exists if [ ! -f "$VERIFY_SCRIPT" ]; then diff --git a/script/utils/verify_safe_txs/verify_dvn_config.sh b/script/utils/verify_safe_txs/verify_network.sh similarity index 76% rename from script/utils/verify_safe_txs/verify_dvn_config.sh rename to script/utils/verify_safe_txs/verify_network.sh index 6ce164b45..50ffd9a82 100755 --- a/script/utils/verify_safe_txs/verify_dvn_config.sh +++ b/script/utils/verify_safe_txs/verify_network.sh @@ -193,97 +193,9 @@ print_decoded_data() { ;; esac - # First process all batchSetAddress methods - echo "$parameters" | jq -c '.[] | .valueDecoded[]? | select(.dataDecoded != null and .dataDecoded.method == "batchSetAddress")' | while read -r nested_param; do - ids=$(echo "$nested_param" | jq -r '.dataDecoded.parameters[0].value') - new_addresses=$(echo "$nested_param" | jq -r '.dataDecoded.parameters[1].value') - chain_ids=$(echo "$nested_param" | jq -r '.dataDecoded.parameters[-1].value') - - # Validate IDs - expected_id="0xf98729ec1ce0343ca1d11c51d1d2d3aa1a7b3f4f6876d0611e0a6fa86520a0cb" - if [[ $(echo "$ids" | jq -r '.[0]') != "$expected_id" || $(echo "$ids" | jq -r '.[1]') != "$expected_id" ]]; then - echo -e "${BOLD}${RED}ERROR: IDs validation failed. Both values must be $expected_id${RESET}" - exit 1 - fi - - # Validate New Addresses - expected_address="0x90ed07A867bDb6a73565D7abBc7434Dd810Fafc5" - if [[ $(echo "$new_addresses" | jq -r '.[0]') != "$expected_address" || $(echo "$new_addresses" | jq -r '.[1]') != "$expected_address" ]]; then - echo -e "${BOLD}${RED}ERROR: New Addresses validation failed. Both values must be $expected_address${RESET}" - exit 1 - fi - - # Validate Chain IDs - expected_chain_id_1="59144" - expected_chain_id_2="81457" - if [[ $(echo "$chain_ids" | jq -r '.[0]') != "$expected_chain_id_1" || $(echo "$chain_ids" | jq -r '.[1]') != "$expected_chain_id_2" ]]; then - echo -e "${BOLD}${RED}ERROR: Chain IDs validation failed. First value must be $expected_chain_id_1 and second value must be $expected_chain_id_2${RESET}" - exit 1 - fi - - echo -e "${GREEN}✓ batchSetAddress parameter validated successfully${RESET}" - done - - # Then process all setConfig methods - echo "$parameters" | jq -c '.[] | .valueDecoded[]? | select(.dataDecoded != null and .dataDecoded.method == "setConfig")' | while read -r nested_param; do - eid=$(echo "$nested_param" | jq -r '.dataDecoded.parameters[-1].value[0][0]') - uln_config=$(echo "$nested_param" | jq -r '.dataDecoded.parameters[-1].value[0][-1]') - # Format EID according to chain mapping - dst_chain_id="" - case "$eid" in - "30101") - formatted_eid="1 (ETH)" - dst_chain_id="1" - ;; - "30102") - formatted_eid="56 (BSC)" - dst_chain_id="56" - ;; - "30106") - formatted_eid="43114 (AVAX)" - dst_chain_id="43114" - ;; - "30109") - formatted_eid="137 (POLY)" - dst_chain_id="137" - ;; - "30110") - formatted_eid="42161 (ARBI)" - dst_chain_id="42161" - ;; - "30111") - formatted_eid="10 (OP)" - dst_chain_id="10" - ;; - "30184") - formatted_eid="8453 (BASE)" - dst_chain_id="8453" - ;; - "30112") - formatted_eid="250 (FANTOM)" - dst_chain_id="250" - ;; - "30183") - formatted_eid="59144 (LINEA)" - dst_chain_id="59144" - ;; - "30243") - formatted_eid="81457 (BLAST)" - dst_chain_id="81457" - ;; - *) - formatted_eid="$eid (Unknown)" - dst_chain_id="0" - ;; - esac - - # Add Foundry decode call to assert confirmations were coded as intended - FOUNDRY_PROFILE=production forge script ./script/forge-scripts/misc/DecodeULNConfig.sol --sig "decodeULNConfig(uint64,uint64,bytes)" "$chain_id" "$dst_chain_id" "$uln_config" - echo -e "${GREEN}✓ setConfig parameter validated successfully${RESET}" - done - - - + # Print the parameters in a readable format + print_field "Parameters" "$(echo "$parameters" | jq -r '.')" + fi }