Skip to content

Merge upstream v4.0.1#109

Merged
seolaoh merged 13 commits intodevelopfrom
seolaoh/merge-4.0.0
Feb 16, 2026
Merged

Merge upstream v4.0.1#109
seolaoh merged 13 commits intodevelopfrom
seolaoh/merge-4.0.0

Conversation

@seolaoh
Copy link
Collaborator

@seolaoh seolaoh commented Feb 11, 2026

Previously we merged v4.0.0-rc.2, and this PR now merges the final release v4.0.1.

v4.0.1 includes:


Note

Medium Risk
Moderate risk due to dependency/version upgrades and changes to proposer task-spawning/caching behavior that can affect proof generation and operational workflows, though changes are mostly additive and guarded (cache is opt-in, skipped spawns are explicit).

Overview
Updates the workspace to v4.0.1 and aligns dependencies (notably celo-kona rev bump and broad lockfile churn), along with contract semver constant bumps in both validity and fault-proof dispute games.

Adds disk-based SP1Stdin caching (new utils/host witness_cache module) and wires it into the multi and cost-estimator scripts via a renamed --cache flag, with new docs replacing the old cost-estimator page.

Fixes proposer behavior by making spawn_game_proving_task return whether a task was actually spawned (vs skipped due to deadline/vkey mismatch), and refactors precompile cycle-tracker keys into shared constants with added tests to ensure key/name consistency.

Introduces GitHub automation for label-driven backports (tibdex/backport) and expands semantic PR title validation to allow a backport type.

Written by Cursor Bugbot for commit c38a850. This will update automatically on new commits. Configure here.

fakedev9999 and others added 10 commits January 29, 2026 21:35
…uccinctlabs#789)

- Add GitHub Action workflow using tibdex/backport@v2
- Detects backport/* labels on merged PRs to main
- Automatically cherry-picks changes to maintenance branches
- Posts comments on original PR if conflicts detected
- Update CONTRIBUTING.md with backporting guidelines
* test(precompiles): add cycle tracker regression tests

Add unit tests for precompile cycle tracking to prevent regressions
like the one in commit 62d3a1d where cycle tracking was dropped.

Changes:
- Add shared `cycle_tracker` constants module with names and keys
- Refactor `get_precompile_tracker_name` to use `PrecompileId` matching
- Update consumers (stats.rs, types.rs) to use shared constants
- Add 10 unit tests covering tracker name mapping and consistency

* chore: bump elfs

* chore: bump elfs

* chore: bump elfs
…inctlabs#776)

* feat(witness-cache): add caching for witness generation

Add witness caching to reduce 2-hour bottleneck in multi.rs and cost_estimator scripts.
Cache WitnessData (not SP1Stdin) to disk with keys (chain_id, start_block, end_block).

New features:
- Witness cache module with save/load functions using rkyv serialization
- cfg_if conditional compilation for EigenDA support
- Three cache flags: --cache (default), --use-cache (load only), --save-cache (force regenerate)
- Multi-script integration with cache status messages
- Cost estimator parallel cache loads per batch range
- Comprehensive documentation on cache usage and management

Cache location: data/{chain_id}/witness-cache/{start_block}-{end_block}.bin
DA compatibility: Ethereum/Celestia compatible, EigenDA separate cache

Files changed:
- utils/host/src/witness_cache.rs (NEW)
- utils/host/src/lib.rs, Cargo.toml
- scripts/utils/src/lib.rs
- scripts/prove/bin/multi.rs
- scripts/utils/bin/cost_estimator.rs
- book/advanced/cost-estimation-tools.md (renamed from cost-estimator.md)
- book/SUMMARY.md

* fix(witness-cache): use SP1Stdin caching for cost_estimator to fix CI

- Add SP1Stdin cache functions using bincode (DA-agnostic)
- cost_estimator.rs now caches SP1Stdin instead of WitnessData
- Remove WitnessDataType type constraint that caused CI failures
- Fix race condition in multi.rs by using match pattern with graceful fallback

SP1Stdin is the same type regardless of which DA witness generator
produced it, so it works with generic host types. This fixes the CI
type mismatch error when running with --features celestia/eigenda.

* refactor(witness-cache): unify on SP1Stdin caching for DA-agnosticism

Switch both multi.rs and cost_estimator.rs to use SP1Stdin caching
instead of WitnessData caching. This fixes CI failures when running
with different DA feature flags (celestia, eigenda).

SP1Stdin is DA-agnostic - it's the same type regardless of which
witness generator produced it. This means cache files now work across
all DA types (Ethereum, Celestia, EigenDA).

Changes:
- Update multi.rs to cache SP1Stdin using bincode
- Simplify witness_cache.rs to only contain SP1Stdin functions
- Remove eigenda feature flag from utils/host (no longer needed)
- Update documentation to reflect SP1Stdin caching

* refactor(witness-cache): address PR review comments

- Use tracing macros instead of println/eprintln in multi.rs
- Fix DA compatibility docs: clarify that cache files are compatible
  between Ethereum ↔ Celestia, but NOT with EigenDA
- Simplify cache flags: remove --use-cache and --save-cache,
  keep only --cache for simpler UX
…games (succinctlabs#794)

When spawn_game_proving_task skipped a game (due to vkey mismatch or deadline
passed), callers still incremented their task counters, causing incorrect
tracking. A single foreign game could permanently block defense proving.

Changed spawn_game_proving_task to return Ok(bool) to distinguish between:
- Ok(true): task was spawned (increment counters)
- Ok(false): task was skipped (don't increment)
- Err: actual error occurred

This ensures active_defense_tasks_count and active_proving are only
incremented when tasks are actually spawned.

Fixes: succinctlabs#758 (review)
Allow `backport: <description>` format for backport PRs to pass
the semantic PR title check.
…labs#774 (succinctlabs#801)

PR succinctlabs#774 introduced ABI-breaking changes without bumping contract versions:
- OPSuccinctDisputeGame: function rename (l2BlockNumber → l2SequenceNumber), constructor change
- OPSuccinctFaultDisputeGame: public state var type change (OutputRoot → Proposal)

These changes break calling convention for any consumer expecting the old ABI.
Bump versions to reflect the breaking changes and align with semver policy.

- OPSuccinctDisputeGame: v3.0.0 → v4.0.0
- OPSuccinctFaultDisputeGame: 1.0.0 → 2.0.0
* chore: release v4.0.1

* chore: bump elfs
# Conflicts:
#	elf/aggregation-elf
#	elf/eigenda-range-elf-embedded
#	elf/range-elf-bump
#	elf/range-elf-embedded
#	scripts/prove/bin/multi.rs
#	scripts/utils/bin/cost_estimator.rs
# Conflicts:
#	elf/aggregation-elf
#	elf/eigenda-range-elf-embedded
#	elf/range-elf-bump
#	elf/range-elf-embedded
@seolaoh seolaoh marked this pull request as ready for review February 11, 2026 11:39
@github-actions
Copy link

github-actions bot commented Feb 11, 2026

Performance Comparison (ELF: eigenda-range-elf-embedded)

Range 17545029~17545034

Metric Base Branch Current PR Diff (%)
Total Instructions 2438148966 2436785287 -0.06%
Oracle Verify Cycles 144943023 144943023 0.00%
Derivation Cycles 977212308 976138862 -0.11%
Block Execution Cycles 89524272 89883967 0.40%
Blob Verification Cycles 728 728 0.00%
Total SP1 Gas 3306816729 3306594458 -0.01%
Cycles per Block 487629793 487357057 -0.06%
Cycles per Transaction 487629793 487357057 -0.06%
BN Pair Cycles 0 0 0.00%
BN Add Cycles 0 0 0.00%
BN Mul Cycles 0 0 0.00%
KZG Eval Cycles 0 0 0.00%
EC Recover Cycles 0 0 0.00%
P256 Verify Cycles 0 0 0.00%

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

@palango
Copy link

palango commented Feb 11, 2026

There was a patch release: https://github.com/succinctlabs/op-succinct/releases/tag/v4.0.1

I guess we should update to that right away.

# Conflicts:
#	Cargo.lock
#	elf/aggregation-elf
#	elf/eigenda-range-elf-embedded
#	elf/range-elf-bump
#	elf/range-elf-embedded
@seolaoh seolaoh force-pushed the seolaoh/merge-4.0.0 branch from d2921cf to c38a850 Compare February 11, 2026 17:03
@seolaoh seolaoh changed the title Merge upstream v4.0.0 Merge upstream v4.0.1 Feb 11, 2026
@seolaoh
Copy link
Collaborator Author

seolaoh commented Feb 11, 2026

@Mc01 This PR merges the final release 4.0.1 from upstream, and it includes OPSuccinctFaultDisputeGame version bump 1.0.0 → 2.0.0. Please refer to the release note for details.

@palango palango requested a review from Mc01 February 11, 2026 18:34
@ezdac
Copy link

ezdac commented Feb 12, 2026

It seems that the only public breaking changes in OPSuccinctFaultDisputeGame are just related to the type exposed as the startingOutputRoot attribute of the contract.

The proposer is not retrieving this value (it's not in the contract binding interface), so from the proposer side we should be backwards compatible without upgrading the contract.

Thus, we don't need to deploy any new contract versions on Chaos for testing, correct?

@seolaoh
Copy link
Collaborator Author

seolaoh commented Feb 12, 2026

It seems that the only public breaking changes in OPSuccinctFaultDisputeGame are just related to the type exposed as the startingOutputRoot attribute of the contract.

The proposer is not retrieving this value (it's not in the contract binding interface), so from the proposer side we should be backwards compatible without upgrading the contract.

Thus, we don't need to deploy any new contract versions on Chaos for testing, correct?

Hm, I guess the proposer calls the newly added function l2SequenceNumber(), so we might need to redeploy the contract as well to test the proposer.

@seolaoh seolaoh merged commit fdb4bc3 into develop Feb 16, 2026
16 checks passed
@seolaoh seolaoh deleted the seolaoh/merge-4.0.0 branch February 16, 2026 10:59
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.

5 participants