diff --git a/snapshots/semver-lock.json b/snapshots/semver-lock.json index 2b47ea63a..6f3428cd3 100644 --- a/snapshots/semver-lock.json +++ b/snapshots/semver-lock.json @@ -231,6 +231,10 @@ "initCodeHash": "0x3a82e248129d19764bb975bb79b48a982f077f33bb508480bf8d2ec1c0c9810d", "sourceCodeHash": "0x955bd0c9b47e43219865e4e92abf28d916c96de20cbdf2f94c8ab14d02083759" }, + "src/revenue-share/FeeDisburser.sol:FeeDisburser": { + "initCodeHash": "0x32d40b0ba1476f3576f6edeb300583deb485134ebeb6b6a4d32dd4dea46b071c", + "sourceCodeHash": "0x9e25eb9eb75e642476e7b8b8799cada4d86a0a9548bc2c7ed997c2cb9722a313" + }, "src/safe/DeputyPauseModule.sol:DeputyPauseModule": { "initCodeHash": "0x18422b48c4901ed6fd9338d76d3c5aecfff9a7add34b05c6e21c23d0011ed6bf", "sourceCodeHash": "0xd15f4bb43e81a10317902cd8e27394581a59df2656b130727eb67543c985c72e" diff --git a/src/L1/SuperchainConfig.sol b/src/L1/SuperchainConfig.sol index 2d1e35192..f2e8160e7 100644 --- a/src/L1/SuperchainConfig.sol +++ b/src/L1/SuperchainConfig.sol @@ -8,7 +8,6 @@ import { ProxyAdminOwnedBase } from "src/L1/ProxyAdminOwnedBase.sol"; import { ISemver } from "interfaces/universal/ISemver.sol"; /// @custom:proxied true -/// @custom:audit none This contracts is not yet audited. /// @title SuperchainConfig /// @notice The SuperchainConfig contract is used to manage configuration of global superchain values. /// @dev WARNING: When upgrading this contract, any active pause states will be lost as the pause state @@ -43,7 +42,7 @@ contract SuperchainConfig is ProxyAdminOwnedBase, ISemver { mapping(address => uint256) public pauseTimestamps; /// @notice Emitted when the pause is triggered. - /// @param identifier A string helping to identify provenance of the pause transaction. + /// @param identifier An address helping to identify provenance of the pause transaction. event Paused(address identifier); /// @notice Emitted when the pause is lifted. @@ -86,7 +85,10 @@ contract SuperchainConfig is ProxyAdminOwnedBase, ISemver { _assertOnlyGuardianOrIncidentResponder(); // Cannot pause if the identifier is already paused to prevent re-pausing without either - // unpausing, extending, or resetting the pause timestamp. + // unpausing, extending, or resetting the pause timestamp. Note that this check intentionally + // prevents re-pausing even after a pause has expired (when paused() returns false but the + // timestamp is still non-zero). This is a Stage 1 Decentralization requirement: the guardian + // must explicitly unpause before pausing again, ensuring deliberate action is taken. if (pauseTimestamps[_identifier] != 0) { revert SuperchainConfig_AlreadyPaused(_identifier); } diff --git a/src/revenue-share/FeeDisburser.sol b/src/revenue-share/FeeDisburser.sol index d28dcd8dc..42698e345 100644 --- a/src/revenue-share/FeeDisburser.sol +++ b/src/revenue-share/FeeDisburser.sol @@ -3,11 +3,13 @@ pragma solidity 0.8.25; import { IL2StandardBridge } from "interfaces/L2/IL2StandardBridge.sol"; import { IFeeVault, Types } from "interfaces/L2/IFeeVault.sol"; +import { ISemver } from "interfaces/universal/ISemver.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; +/// @custom:proxied true /// @title FeeDisburser /// @notice Withdraws funds from system FeeVault contracts and bridges to L1. -contract FeeDisburser { +contract FeeDisburser is ISemver { //////////////////////////////////////////////////////////////// /// Constants //////////////////////////////////////////////////////////////// @@ -101,7 +103,7 @@ contract FeeDisburser { function disburseFees() external virtual { if (block.timestamp < lastDisbursementTime + FEE_DISBURSEMENT_INTERVAL) revert IntervalNotReached(); - // Sequencer and base FeeVaults will withdraw fees to the FeeDisburser contract mutating netFeeRevenue + // Sequencer, base, and L1 FeeVaults will withdraw fees to the FeeDisburser contract. _feeVaultWithdrawal(payable(Predeploys.SEQUENCER_FEE_WALLET)); _feeVaultWithdrawal(payable(Predeploys.BASE_FEE_VAULT)); _feeVaultWithdrawal(payable(Predeploys.L1_FEE_VAULT)); @@ -130,6 +132,11 @@ contract FeeDisburser { emit FeesReceived(msg.sender, msg.value); } + /// @custom:semver 1.0.0 + function version() external pure virtual returns (string memory) { + return "1.0.0"; + } + //////////////////////////////////////////////////////////////// /// Private Functions ////////////////////////////////////////////////////////////////