Skip to content

fix(L1): bump semver for contracts changed since the last release (v8.3.0 backport) - #439

Merged
jackchuma merged 1 commit into
releases/v8.3.0from
backport/v8.3.0-bump-contract-versions
Sep 14, 2026
Merged

jackchuma merged 1 commit into
releases/v8.3.0from
backport/v8.3.0-bump-contract-versions

Conversation

@jackchuma

Copy link
Copy Markdown
Collaborator

Backport of #438 to releases/v8.3.0.

Summary

OptimismPortal2, DisputeGameFactory, and AggregateVerifier all have source changes relative to what is currently deployed onchain, but they still declare the same semver on this release branch. This bumps each one so the onchain version() actually distinguishes the artifacts.

Verified against live contracts on L1 (Base mainnet and Base Sepolia both report the same values):

Contract Live onchain This branch (before) After
OptimismPortal2 5.2.0 5.2.0 6.0.0
DisputeGameFactory 1.4.0 1.4.0 1.5.0
AggregateVerifier not deployed 0.1.0 0.2.0

Why each bump

OptimismPortal2 5.2.0 → 6.0.0 (major). The ETHLockbox removal is an interface break: the ethLockbox() getter and the OptimismPortal_InvalidLockboxState error are both gone from the ABI, and the storage slot is now a spacer.

DisputeGameFactory 1.4.0 → 1.5.0 (minor). Game proxies are now deployed via cloneDeterministic instead of clone, and the duplicate-UUID check moved so the UUID can serve as the CREATE2 salt. The ABI snapshot is byte-identical, so this is a behavioral change only.

AggregateVerifier 0.1.0 → 0.2.0 (minor). This is the bump that most needs attention. 0.1.0 shipped in the v8.2.x tags. The scheduleId / ProtocolVersions pinning work landed afterward and raised the version to 0.2.0, but the cadence revert in #436 reverted the version string along with the cadence changes — while the schedule-pinning work stayed. The result is that this branch currently declares 0.1.0 for code that differs from the released 0.1.0 (the journal now commits to scheduleId, and the constructor takes a ScheduleConfig).

Note that 0.2.0 here is not the same artifact as 0.2.0 previously on main: this branch has the schedule-pinning work without the cadence fork-gating. To avoid two bytecodes sharing a version, #438 moves main to 0.3.0 so this release can own 0.2.0.

OptimismPortal2.sol and DisputeGameFactory.sol are identical on main and this branch, so those two bumps match #438 exactly.

Testing

  • just snapshots regenerated from a clean build; only snapshots/semver-lock.json changes, covering exactly the three contracts. No ABI or storage layout changes, as expected for a version-string-only edit.
  • just test: 1214 passed, 0 failed, 1 skipped.
  • just lint-check clean.

Made with Cursor

OptimismPortal2, DisputeGameFactory, and AggregateVerifier all have source
changes relative to the versions currently deployed onchain, but still declare
the same semver. Bump each so the onchain version distinguishes the artifacts.

- OptimismPortal2 5.2.0 -> 6.0.0: ETHLockbox removal drops the `ethLockbox()`
  getter and the `OptimismPortal_InvalidLockboxState` error from the ABI.
- DisputeGameFactory 1.4.0 -> 1.5.0: game proxies are now deployed with
  `cloneDeterministic`; the ABI is unchanged.
- AggregateVerifier 0.1.0 -> 0.2.0: the schedule-pinning work landed after
  0.1.0 shipped, and reverting the cadence changes in #436 also reverted the
  version, leaving it colliding with the released 0.1.0.

Co-authored-by: Cursor <cursoragent@cursor.com>
@jackchuma
jackchuma merged commit 33cad5e into releases/v8.3.0 Sep 14, 2026
3 checks passed
@jackchuma
jackchuma deleted the backport/v8.3.0-bump-contract-versions branch September 14, 2026 23:58
jackchuma added a commit that referenced this pull request Sep 15, 2026
#439 bumped OptimismPortal2, DisputeGameFactory and AggregateVerifier because
each had source changes relative to the versions deployed onchain while still
declaring the same semver. SystemConfig meets that description too and was
missed.

#378 changed two behaviours without touching the version:

- `paused()` no longer selects the pause identifier based on whether the
  ETH_LOCKBOX feature is enabled; it always uses `optimismPortal()`.
- `_setFeature` no longer guards ETH_LOCKBOX against being disabled while the
  portal still has a lockbox configured, or toggled while paused.

snapshots/semver-lock.json already records both a different sourceCodeHash and
initCodeHash for SystemConfig across that change, so the lock file and the
declared version disagreed.

Minor rather than major: no function, error or event declarations were added or
removed, so the ABI is unchanged. This matches the DisputeGameFactory 1.4.0 ->
1.5.0 precedent in #439; OptimismPortal2 went major only because it dropped
`ethLockbox()` from its ABI.

Co-authored-by: Cursor <cursoragent@cursor.com>
jackchuma added a commit that referenced this pull request Sep 15, 2026
#439 bumped OptimismPortal2, DisputeGameFactory and AggregateVerifier because
each had source changes relative to the versions deployed onchain while still
declaring the same semver. SystemConfig meets that description too and was
missed.

#378 changed two behaviours without touching the version:

- `paused()` no longer selects the pause identifier based on whether the
  ETH_LOCKBOX feature is enabled; it always uses `optimismPortal()`.
- `_setFeature` no longer guards ETH_LOCKBOX against being disabled while the
  portal still has a lockbox configured, or toggled while paused.

snapshots/semver-lock.json already records both a different sourceCodeHash and
initCodeHash for SystemConfig across that change, so the lock file and the
declared version disagreed.

Minor rather than major: no function, error or event declarations were added or
removed, so the ABI is unchanged. This matches the DisputeGameFactory 1.4.0 ->
1.5.0 precedent in #439; OptimismPortal2 went major only because it dropped
`ethLockbox()` from its ABI.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant