From 3d3e683fa43717bb69ac60a931c5d3cdce990bf0 Mon Sep 17 00:00:00 2001 From: Thanh Trinh Date: Wed, 9 Sep 2026 11:56:09 -0500 Subject: [PATCH] fix(L1): retarget the AggregateVerifier cadence switch to Denim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 200ms block-time hardfork moved back to Denim, so `FAST_BLOCK_UPGRADE_INDEX` goes from 12 (Cobalt) to 13 (Denim). Index 13 is one past the end of the current Base mainnet schedule, so `getSchedule()` returns a shorter array until Denim is registered. `_firstFastBlock()` already treats a short array as unscheduled, which is the same state the zero timestamp at index 12 produced, so behaviour is unchanged until the entry is written. Semver stays at 0.2.0 — no deployment has consumed it yet. Co-Authored-By: Claude --- snapshots/semver-lock.json | 4 ++-- src/L1/proofs/AggregateVerifier.sol | 7 +++++-- test/L1/proofs/AggregateVerifier.t.sol | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/snapshots/semver-lock.json b/snapshots/semver-lock.json index bbb801acd..3e3c23654 100644 --- a/snapshots/semver-lock.json +++ b/snapshots/semver-lock.json @@ -28,8 +28,8 @@ "sourceCodeHash": "0x780ff372493ba9010bc0d13100ac896f2bf75730a9b17d4bb63aaf694dc3c634" }, "src/L1/proofs/AggregateVerifier.sol:AggregateVerifier": { - "initCodeHash": "0x0642919b493a739e0280ded0dab2123c0c0d569fb613203ad71f79eca25af8e4", - "sourceCodeHash": "0xa03d89648901890b4e2ab06a72578045f75d6dfa649dbac0ae9364fd20f0657d" + "initCodeHash": "0xac5b40f2fadfbf26c206e5abb44870a93053063ba03ceb523a09799785c82e06", + "sourceCodeHash": "0x1234f4ea80d6da4f0c0e98cf11839b423d211da2027faf4c10ccf131aa62d8d7" }, "src/L1/proofs/AnchorStateRegistry.sol:AnchorStateRegistry": { "initCodeHash": "0x6f3afd2d0ef97a82ca3111976322b99343a270e54cd4a405028f2f29c75f7fb1", diff --git a/src/L1/proofs/AggregateVerifier.sol b/src/L1/proofs/AggregateVerifier.sol index 44b9ca218..544d7b52c 100644 --- a/src/L1/proofs/AggregateVerifier.sol +++ b/src/L1/proofs/AggregateVerifier.sol @@ -87,11 +87,14 @@ contract AggregateVerifier is Clone, ReentrancyGuard, ISemver { uint256 public constant PROOF_THRESHOLD = 1; /// @notice The ProtocolVersions upgrade index at which L2 blocks switch to the fast cadence. - /// @dev This is the one place the contract is tied to a specific hardfork: index 12 is Cobalt, + /// @dev This is the one place the contract is tied to a specific hardfork: index 13 is Denim, /// which drops the L2 block time from 2s to 200ms. Everything downstream is expressed as /// slow-vs-fast blocks, so a later cadence change is a new index and new interval pair /// rather than new machinery. - uint256 private constant FAST_BLOCK_UPGRADE_INDEX = 12; + /// @dev Index 13 is one past the end of the current Base mainnet schedule, so `getSchedule()` + /// returns a shorter array until Denim is registered. `_firstFastBlock()` treats that as + /// unscheduled, which is the same state an index-in-range zero timestamp produces. + uint256 private constant FAST_BLOCK_UPGRADE_INDEX = 13; /// @notice The number of whole fast-cadence L2 blocks produced per second. uint256 private constant FAST_BLOCKS_PER_SECOND = 5; diff --git a/test/L1/proofs/AggregateVerifier.t.sol b/test/L1/proofs/AggregateVerifier.t.sol index 2a7f76c76..d3ed4946b 100644 --- a/test/L1/proofs/AggregateVerifier.t.sol +++ b/test/L1/proofs/AggregateVerifier.t.sol @@ -20,7 +20,7 @@ import { BaseTest } from "./BaseTest.t.sol"; contract AggregateVerifierTest is BaseTest { using LibClone for address; - uint256 private constant FAST_BLOCK_UPGRADE_INDEX = 12; + uint256 private constant FAST_BLOCK_UPGRADE_INDEX = 13; uint256 private constant FAST_BLOCKS_PER_SECOND = 5; AggregateVerifier private aggregateVerifierImpl;