From cefcc684b1f69a8e0293a70d9da71c60a34a598a Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 23 Feb 2026 09:58:20 -0500 Subject: [PATCH 1/6] add semver for FeeDisburser contract --- snapshots/semver-lock.json | 4 ++++ src/revenue-share/FeeDisburser.sol | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) 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/revenue-share/FeeDisburser.sol b/src/revenue-share/FeeDisburser.sol index d28dcd8dc..ba097aaab 100644 --- a/src/revenue-share/FeeDisburser.sol +++ b/src/revenue-share/FeeDisburser.sol @@ -3,11 +3,12 @@ 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"; /// @title FeeDisburser /// @notice Withdraws funds from system FeeVault contracts and bridges to L1. -contract FeeDisburser { +contract FeeDisburser is ISemver { //////////////////////////////////////////////////////////////// /// Constants //////////////////////////////////////////////////////////////// @@ -130,6 +131,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 //////////////////////////////////////////////////////////////// From 34f914c4e3f3774a15a86ba5ea123dfa387ebefc Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 23 Feb 2026 10:44:48 -0500 Subject: [PATCH 2/6] update FeeDisburser comment --- src/revenue-share/FeeDisburser.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/revenue-share/FeeDisburser.sol b/src/revenue-share/FeeDisburser.sol index ba097aaab..2d2fa689a 100644 --- a/src/revenue-share/FeeDisburser.sol +++ b/src/revenue-share/FeeDisburser.sol @@ -102,7 +102,7 @@ contract FeeDisburser is ISemver { 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)); From 60e42acd3f016636a33971192015d45e1d4f9e13 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 23 Feb 2026 10:55:38 -0500 Subject: [PATCH 3/6] remove outdated comment --- src/L1/SuperchainConfig.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/src/L1/SuperchainConfig.sol b/src/L1/SuperchainConfig.sol index 2d1e35192..b9e63830b 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 From ba673a3b9afec8575411adf0c7fdcf365a0c42d1 Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 23 Feb 2026 11:10:20 -0500 Subject: [PATCH 4/6] add proxied check to FeeDisburser --- src/revenue-share/FeeDisburser.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/src/revenue-share/FeeDisburser.sol b/src/revenue-share/FeeDisburser.sol index 2d2fa689a..42698e345 100644 --- a/src/revenue-share/FeeDisburser.sol +++ b/src/revenue-share/FeeDisburser.sol @@ -6,6 +6,7 @@ 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 is ISemver { From 49e46a233dd55ff2dd1c690a9234e628b9cdc59f Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 23 Feb 2026 11:21:25 -0500 Subject: [PATCH 5/6] update stage 1 comment --- src/L1/SuperchainConfig.sol | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/L1/SuperchainConfig.sol b/src/L1/SuperchainConfig.sol index b9e63830b..46aafe745 100644 --- a/src/L1/SuperchainConfig.sol +++ b/src/L1/SuperchainConfig.sol @@ -85,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); } From 05f10bf669c0bdfd7b513169ad0547da12ce0dfc Mon Sep 17 00:00:00 2001 From: Jack Chuma Date: Mon, 23 Feb 2026 11:24:21 -0500 Subject: [PATCH 6/6] fix comment --- src/L1/SuperchainConfig.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/L1/SuperchainConfig.sol b/src/L1/SuperchainConfig.sol index 46aafe745..f2e8160e7 100644 --- a/src/L1/SuperchainConfig.sol +++ b/src/L1/SuperchainConfig.sol @@ -42,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.