v4.3.1
Patch release that closes GHSA-5jh4-3p33-85xc, a soundness gap in WitnessExecutor::run where a non-interop EndOfSource could let an adversarial witness commit a (claimed_l2_output_root, claimed_l2_block_number) pair referring to different L2 blocks. The fix binds the committed l2BlockNumber to the actual derived safe-head number. The release also bundles fault-proof, host, and CI fixes merged since v4.3.0.
Breaking Changes
- Verification keys have changed — range and aggregation ELFs are rebuilt with the patched
WitnessExecutor::run. All deployments must upgrade contracts with the new keys.
Migration Guide (v4.3.0 → v4.3.1)
Since the verification keys have changed, you must upgrade your contracts with the new keys. Follow the upgrade guide for your deployment type:
- OP Succinct Lite (Fault Proofs): Upgrading the OPSuccinct Fault Dispute Game. Existing games continue under the vkeys they were created with.
- OP Succinct (Validity): Updating OPSuccinctL2OutputOracle Parameters.
Verification Key Hashes
| Program | Verification Key Hash |
|---|---|
| Ethereum DA Range | 0x0e459f7b7b91a69544714f82370e93cb0ffa8dfe1d750a6b7095c3cc03d22406 |
| Celestia DA Range | 0x12ba926d0b4a23822455687914e8c3420803934d3d140136583f4c6e1791dc70 |
| EigenDA Range | 0x53f3096213735de635e1d4687e625be72277df1c5f3b6ec96fccf9625838c598 |
| Aggregation | 0x0045e1767d8214ebb172f1e5e0267aab63192b5a10b437211ea991f852b14587 |
Summary of Changes
Security
WitnessExecutor::runnow rejects when the derived safe-head block number does not matchBootInfo.claimed_l2_block_number, closing the(l2_output_root, l2_block_number)binding gap (GHSA-5jh4-3p33-85xc).
What's Changed
- fix(fault-proof): pin L1 block during sync to prevent RPC inconsistency by @fakedev9999 in #865
- fix(ci): report all required check names on PRs to unblock merge queue by @fakedev9999 in #885
- fix(host): surface real RPC failures in is_safe_db_activated by @fakedev9999 in #884
- fix(fault-proof): correct resolve() invariant comment by @fakedev9999 in #881
- fix(fault-proof): correct maxChallengeDuration return type to uint64 by @fakedev9999 in #891
- fix(ci): drop missing FOUNDRY_PROFILE=ci to unbreak Foundry Test by @fakedev9999 in #892
- fix(client): use canonical OP precompile set for fork-correct semantics by @fakedev9999 in #895
- ci(eigenda): run eigenda-proxy ephemerally inside CI jobs by @fakedev9999 in #897
- chore: release v4.3.1 by @fakedev9999 in #899
Full Changelog: v4.3.0...v4.3.1