Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/RevShareContractsUpgrader.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ contract RevShareContractsUpgrader {
/// @notice Thrown when chain fees recipient is zero address
error ChainFeesRecipientCannotBeZeroAddress();

/// @notice Thrown when gas limit is zero
error GasLimitCannotBeZero();

/// @notice Thrown when array is empty
error EmptyArray();

Expand Down Expand Up @@ -64,6 +67,7 @@ contract RevShareContractsUpgrader {
if (config.portal == address(0)) revert PortalCannotBeZeroAddress();
if (config.l1WithdrawerConfig.recipient == address(0)) revert L1WithdrawerRecipientCannotBeZeroAddress();
if (config.chainFeesRecipient == address(0)) revert ChainFeesRecipientCannotBeZeroAddress();
if (config.l1WithdrawerConfig.gasLimit == 0) revert GasLimitCannotBeZero();

// Deploy L1Withdrawer and SuperchainRevenueShareCalculator
address precalculatedCalculator =
Expand Down Expand Up @@ -111,6 +115,7 @@ contract RevShareContractsUpgrader {
if (config.portal == address(0)) revert PortalCannotBeZeroAddress();
if (config.l1WithdrawerConfig.recipient == address(0)) revert L1WithdrawerRecipientCannotBeZeroAddress();
if (config.chainFeesRecipient == address(0)) revert ChainFeesRecipientCannotBeZeroAddress();
if (config.l1WithdrawerConfig.gasLimit == 0) revert GasLimitCannotBeZero();

// Deploy L1Withdrawer and SuperchainRevenueShareCalculator
address calculator =
Expand Down
25 changes: 25 additions & 0 deletions src/interfaces/IRevShareContractsUpgrader.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IRevShareContractsUpgrader {
error PortalCannotBeZeroAddress();
error L1WithdrawerRecipientCannotBeZeroAddress();
error ChainFeesRecipientCannotBeZeroAddress();
error GasLimitCannotBeZero();
error EmptyArray();

struct L1WithdrawerConfig {
uint256 minWithdrawalAmount;
address recipient;
uint32 gasLimit;
}

struct RevShareConfig {
address portal;
L1WithdrawerConfig l1WithdrawerConfig;
address chainFeesRecipient;
}

function upgradeAndSetupRevShare(RevShareConfig[] calldata _configs) external;
function setupRevShare(RevShareConfig[] calldata _configs) external;
}
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,15 @@ contract RevShareContractsUpgrader_UpgradeAndSetupRevShare_Test is RevShareContr
upgrader.upgradeAndSetupRevShare(configs);
}

/// @notice Test that upgradeAndSetupRevShare reverts when gas limit is zero
function test_upgradeAndSetupRevShare_whenGasLimitIsZero_reverts() public {
RevShareContractsUpgrader.RevShareConfig[] memory configs = new RevShareContractsUpgrader.RevShareConfig[](1);
configs[0] = _createRevShareConfig(PORTAL_ONE, MIN_WITHDRAWAL_AMOUNT, L1_RECIPIENT_ONE, 0, CHAIN_FEES_RECIPIENT_ONE);

vm.expectRevert(RevShareContractsUpgrader.GasLimitCannotBeZero.selector);
upgrader.upgradeAndSetupRevShare(configs);
}

/// @notice Fuzz test successful upgradeAndSetupRevShare with single chain
function testFuzz_upgradeAndSetupRevShare_singleChain_succeeds(
address _portal,
Expand All @@ -412,7 +421,7 @@ contract RevShareContractsUpgrader_UpgradeAndSetupRevShare_Test is RevShareContr
_assumeValidAddress(_portal);
_assumeValidAddress(_l1Recipient);
_assumeValidAddress(_chainFeesRecipient);
bound(_gasLimit, 1, type(uint32).max);
_gasLimit = uint32(bound(_gasLimit, 1, type(uint32).max));

RevShareContractsUpgrader.RevShareConfig[] memory configs = new RevShareContractsUpgrader.RevShareConfig[](1);
configs[0] = _createRevShareConfig(_portal, _minWithdrawalAmount, _l1Recipient, _gasLimit, _chainFeesRecipient);
Expand Down Expand Up @@ -529,6 +538,15 @@ contract RevShareContractsUpgrader_SetupRevShare_Test is RevShareContractsUpgrad
upgrader.setupRevShare(configs);
}

/// @notice Test that setupRevShare reverts when gas limit is zero
function test_setupRevShare_whenGasLimitIsZero_reverts() public {
RevShareContractsUpgrader.RevShareConfig[] memory configs = new RevShareContractsUpgrader.RevShareConfig[](1);
configs[0] = _createRevShareConfig(PORTAL_ONE, MIN_WITHDRAWAL_AMOUNT, L1_RECIPIENT_ONE, 0, CHAIN_FEES_RECIPIENT_ONE);

vm.expectRevert(RevShareContractsUpgrader.GasLimitCannotBeZero.selector);
upgrader.setupRevShare(configs);
}

/// @notice Fuzz test successful setupRevShare with single chain
function testFuzz_setupRevShare_singleChain_succeeds(
address _portal,
Expand All @@ -542,7 +560,7 @@ contract RevShareContractsUpgrader_SetupRevShare_Test is RevShareContractsUpgrad
_assumeValidAddress(_portal);
_assumeValidAddress(_l1Recipient);
_assumeValidAddress(_chainFeesRecipient);
bound(_gasLimit, 1, type(uint32).max);
_gasLimit = uint32(bound(_gasLimit, 1, type(uint32).max));

RevShareContractsUpgrader.RevShareConfig[] memory configs = new RevShareContractsUpgrader.RevShareConfig[](1);
configs[0] = _createRevShareConfig(_portal, _minWithdrawalAmount, _l1Recipient, _gasLimit, _chainFeesRecipient);
Expand Down