Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
5cefc95
LivenessModule2 implementation (#17272)
JosepBove Sep 19, 2025
97064ab
op-acceptance-tests: move presets into tests, away from config.yaml (…
nonsense Sep 19, 2025
9f2c80b
feat: add U16a report (#17538)
smartcontracts Sep 19, 2025
9712fa4
fix(op-deployer): forge verbose install (#17540)
serpixel Sep 19, 2025
b307294
opcm: Support cannon+kona games in addGameType (#17513)
ajsutton Sep 19, 2025
b7b94b9
fix(op-deployer): remove forge version check (#17541)
serpixel Sep 19, 2025
fd5f8e3
feat(op-deployer): cli based integration tests (#17511)
serpixel Sep 19, 2025
565ec51
refactor(test-validation): extract exclusions to TOML config and add …
aliersh Sep 21, 2025
8c3da2d
op-deployer: simplify ReadImplementationAddresses.s.sol (#17542)
bitwiseguy Sep 22, 2025
608f398
tests: Skip Interop Acceptance Tests (#17555)
axelKingsley Sep 22, 2025
47e9597
fix: errant comment in OptimismPortal2 (#17482)
smartcontracts Sep 22, 2025
2841f11
fix: simplified code for SystemConfig code (#17539)
smartcontracts Sep 22, 2025
ca32a27
chore(op-acceptance-tests): isthmus into base gate. (#17514)
scharissis Sep 22, 2025
bdd9baa
txmgr: fetch BlobBaseFee over RPC instead of computing from block hea…
geoknee Sep 23, 2025
c9bbdbd
op-acceptance-tests: Ext Network EL Sync Test using Sync Tester (#17532)
pcw109550 Sep 23, 2025
6b04052
op-acceptance-tests: Bump attempts for CL Sync testing (#17567)
pcw109550 Sep 23, 2025
014893e
Merge branch 'develop' into chore/new-splitter-sync
0xDiscotech Sep 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 12 additions & 114 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1224,40 +1224,12 @@ jobs:
type: string
default: 30m
# Optional sync test configuration parameters
l2_network_name:
description: L2 network name
network_preset:
description: Network preset
type: string
default: ""
l1_chain_id:
description: L1 chain ID
type: string
default: ""
l2_el_endpoint:
description: L2 EL endpoint
type: string
default: ""
l1_cl_beacon_endpoint:
description: L1 CL beacon endpoint
type: string
default: ""
l1_el_endpoint:
description: L1 EL endpoint
type: string
default: ""
initial_l2_block:
description: Initial L2 block
type: string
default: ""
l2_el_endpoint_tailscale:
description: L2 EL endpoint for Tailscale networking
type: string
default: ""
l1_cl_beacon_endpoint_tailscale:
description: L1 CL beacon endpoint for Tailscale networking
type: string
default: ""
l1_el_endpoint_tailscale:
description: L1 EL endpoint for Tailscale networking
l2_cl_syncmode:
description: L2 CL Sync mode - can be EL Sync or CL Sync
type: string
default: ""
resource_class: xlarge
Expand Down Expand Up @@ -1292,15 +1264,8 @@ jobs:
GO111MODULE: "on"
GOGC: "0"
# Optional sync test configuration environment variables (only set if parameters are provided)
L2_NETWORK_NAME: "<<parameters.l2_network_name>>"
L1_CHAIN_ID: "<<parameters.l1_chain_id>>"
L2_EL_ENDPOINT: "<<parameters.l2_el_endpoint>>"
L1_CL_BEACON_ENDPOINT: "<<parameters.l1_cl_beacon_endpoint>>"
L1_EL_ENDPOINT: "<<parameters.l1_el_endpoint>>"
INITIAL_L2_BLOCK: "<<parameters.initial_l2_block>>"
L2_EL_ENDPOINT_TAILSCALE: "<<parameters.l2_el_endpoint_tailscale>>"
L1_CL_BEACON_ENDPOINT_TAILSCALE: "<<parameters.l1_cl_beacon_endpoint_tailscale>>"
L1_EL_ENDPOINT_TAILSCALE: "<<parameters.l1_el_endpoint_tailscale>>"
NETWORK_PRESET: "<<parameters.network_preset>>"
L2_CL_SYNCMODE: "<<parameters.l2_cl_syncmode>>"
command: |
# Run the tests
LOG_LEVEL=debug just acceptance-test "" "<<parameters.gate>>"
Expand Down Expand Up @@ -2190,6 +2155,7 @@ workflows:
- op-proposer
- op-challenger
- op-dispute-mon
- op-deployer
- op-conductor
- da-server
- op-supervisor
Expand Down Expand Up @@ -2641,88 +2607,20 @@ workflows:
- circleci-repo-readonly-authenticated-github-token
requires:
- initialize
# Sync tests for multiple networks (runs in parallel)
# OP Sepolia
- op-acceptance-sync-tests-docker:
name: sync-test-op-sepolia-daily
gate: sync-test-op-node
no_output_timeout: 30m
l2_network_name: "op-sepolia"
l1_chain_id: "11155111"
l2_el_endpoint: "https://ci-sepolia-l2.optimism.io"
l1_cl_beacon_endpoint: "https://ci-sepolia-beacon.optimism.io"
l1_el_endpoint: "https://ci-sepolia-l1.optimism.io"
context:
- circleci-repo-readonly-authenticated-github-token
- discord
requires:
- contracts-bedrock-build
- cannon-prestate-quick
# Base Sepolia
- op-acceptance-sync-tests-docker:
name: sync-test-base-sepolia-daily
gate: sync-test-op-node
no_output_timeout: 30m
l2_network_name: "base-sepolia"
l1_chain_id: "11155111"
l2_el_endpoint: "https://base-sepolia-rpc.optimism.io"
l1_cl_beacon_endpoint: "https://ci-sepolia-beacon.optimism.io"
l1_el_endpoint: "https://ci-sepolia-l1.optimism.io"
context:
- circleci-repo-readonly-authenticated-github-token
- discord
requires:
- contracts-bedrock-build
- cannon-prestate-quick
## Unichain Sepolia
- op-acceptance-sync-tests-docker:
name: sync-test-unichain-sepolia-daily
name: "sync-test-<<matrix.network_preset>>-daily-<<matrix.l2_cl_syncmode>>"
gate: sync-test-op-node
no_output_timeout: 30m
l2_network_name: "unichain-sepolia"
l1_chain_id: "11155111"
l2_el_endpoint: "https://unichain-sepolia-rpc.optimism.io"
l1_cl_beacon_endpoint: "https://ci-sepolia-beacon.optimism.io"
l1_el_endpoint: "https://ci-sepolia-l1.optimism.io"
context:
- circleci-repo-readonly-authenticated-github-token
- discord
requires:
- contracts-bedrock-build
- cannon-prestate-quick
## OP Mainnet
- op-acceptance-sync-tests-docker:
name: sync-test-op-mainnet-daily
gate: sync-test-op-node
no_output_timeout: 30m
l2_network_name: "op-mainnet"
l1_chain_id: "1"
l2_el_endpoint: "https://op-mainnet-rpc.optimism.io"
l1_cl_beacon_endpoint: "https://ci-mainnet-beacon.optimism.io"
l1_el_endpoint: "https://ci-mainnet-l1.optimism.io"
context:
- circleci-repo-readonly-authenticated-github-token
- discord
requires:
- contracts-bedrock-build
- cannon-prestate-quick
## Base Mainnet
- op-acceptance-sync-tests-docker:
name: sync-test-base-mainnet-daily
gate: sync-test-op-node
no_output_timeout: 30m
l2_network_name: "base-mainnet"
l1_chain_id: "1"
l2_el_endpoint: "https://base-mainnet-rpc.optimism.io"
l1_cl_beacon_endpoint: "https://ci-mainnet-beacon.optimism.io"
l1_el_endpoint: "https://ci-mainnet-l1.optimism.io"
context:
- circleci-repo-readonly-authenticated-github-token
- discord
requires:
- contracts-bedrock-build
- cannon-prestate-quick

matrix:
parameters:
network_preset: ["op-sepolia", "base-sepolia", "unichain-sepolia", "op-mainnet", "base-mainnet"]
l2_cl_syncmode: ["consensus-layer", "execution-layer"]
# Acceptance tests (post-merge to develop)
acceptance-tests:
when:
Expand Down
Binary file added docs/security-reviews/2025_09-U16a-Spearbit.pdf
Binary file not shown.
1 change: 1 addition & 0 deletions docs/security-reviews/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ Please see the report for the specific details.
| 2025-06 | Radiant Labs | Cannon Go 1.24 support | [2025_06-Cannon-3DOC.pdf](./2025_06-Cannon-3DOC.pdf) | 689111fca9a10e6670ba0b5c7f1a549a212c855b | |
| 2025-05 | Spearbit | Upgrade 16 | [2025_05-Upgrade16-Spearbit.pdf](./2025_05-Upgrade16-Spearbit.pdf) / [Auditor hosted report][SpearbitMay25] | 54c19f6acb7a6d3505f884bae601733d3d54a3a6 | op-contracts/v4.0.0 |
| 2025-07 | Spearbit | VerifyOPCM | [2025_07-VerifyOPCM-Spearbit.pdf](./2025_07-VerifyOPCM-Spearbit.pdf) / [Auditor hosted report][SpearbitJuly25] | 731280c6fc0ad184d252e0fb1d0ad12b5f59fd60 | op-contracts/v4.0.0 |
| 2025-09 | Spearbit | U16a | [2025_09-U16a-Spearbit.pdf](./2025_09-U16a-Spearbit.pdf) | 475801690f7a451469ee4da87b5fe3c54c92f372 | op-contracts/v4.1.0 |

<!-- Note: in order to reduce dependency on the honesty of repo maintainers, we should include a link to the auditor hosted report whenever possible. -->

Expand Down
3 changes: 1 addition & 2 deletions op-acceptance-tests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ just acceptance-test "" base

# Run against Kurtosis devnets (requires Docker + Kurtosis)
just acceptance-test simple base
just acceptance-test isthmus isthmus
just acceptance-test interop interop
```

Expand Down Expand Up @@ -106,7 +105,7 @@ For integration testing against realistic networks:

1. **Automated approach** (rebuilds devnet each time):
```bash
just acceptance-test isthmus isthmus
just acceptance-test interop interop
```

2. **Manual approach** (once-off)
Expand Down
34 changes: 17 additions & 17 deletions op-acceptance-tests/acceptance-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,24 @@


gates:
- id: conductor
description: "Sanity/smoke acceptance tests for networks with conductors."
- id: isthmus
description: "Isthmus network tests."
tests:
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/conductor
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus
timeout: 6h
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/operator_fee
timeout: 6h
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/withdrawal_root
timeout: 20m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/erc20_bridge
timeout: 10m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/pectra
timeout: 10m

- id: base
description: "Sanity/smoke acceptance tests for all networks."
inherits:
- isthmus
tests:
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit
Expand All @@ -28,20 +38,10 @@ gates:
# timeout: 10m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord

- id: isthmus
inherits:
- base
description: "Isthmus network tests."
- id: conductor
description: "Sanity/smoke acceptance tests for networks with conductors."
tests:
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus
timeout: 6h
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/operator_fee
timeout: 6h
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/withdrawal_root
timeout: 20m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/erc20_bridge
timeout: 10m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/isthmus/pectra
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/conductor
timeout: 10m

- id: pre-interop
Expand Down Expand Up @@ -82,7 +82,7 @@ gates:

- id: flashblocks-with-isthmus
inherits:
- isthmus
- base
description: "Flashblocks network tests with Isthmus."
tests:
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/flashblocks
Expand Down
10 changes: 2 additions & 8 deletions op-acceptance-tests/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,6 @@ ACCEPTOR_IMAGE := env_var_or_default("ACCEPTOR_IMAGE", DOCKER_REGISTRY + "/op-ac
default:
@just acceptance-test "" base

holocene:
@just acceptance-test "" holocene

isthmus:
@just acceptance-test "" isthmus

jovian:
@just acceptance-test jovian jovian

Expand All @@ -28,7 +22,7 @@ interop:
# just acceptance-test "" "" # In-process gateless mode (all tests)
# just acceptance-test "simple" base # External devnet with specific gate
# just acceptance-test "simple" "" # External devnet gateless mode (all tests)
acceptance-test devnet="" gate="holocene":
acceptance-test devnet="" gate="base":
#!/usr/bin/env bash
set -euo pipefail

Expand Down Expand Up @@ -132,7 +126,7 @@ acceptance-test devnet="" gate="holocene":


# Run acceptance tests against a devnet using Docker (fallback if needed)
acceptance-test-docker devnet="simple" gate="holocene":
acceptance-test-docker devnet="simple" gate="base":
#!/usr/bin/env bash
set -euo pipefail

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (

// TestRegularMessage checks that messages can be sent and relayed via L2ToL2CrossDomainMessenger
func TestRegularMessage(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t := devtest.SerialT(gt)
sys := presets.NewSimpleInterop(t)
require := sys.T.Require()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ func (ie *InvalidExecMsgSpammer) Spam(t devtest.T) error {
// executing messages are also spammed. The number of invalid messages spammed per slot is
// configurable via NAT_INVALID_MPS (default: 1_000).
func TestRelayWithInvalidMessagesSteady(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t, l2A, l2B := setupLoadTest(gt)

// Emit a valid initiating message.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ func (e *ExecMsgSpammer) Spam(t devtest.T) error {
// executing messages emitted by one spammer become initiating messages for the other spammer. The
// test aims to maximize load on the supervisor (indexing and access list checks).
func TestMaxExecutingMessagesBurst(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t, l2A, l2B := setupLoadTest(gt)

// Initiate messages on both chains.
Expand Down
2 changes: 2 additions & 0 deletions op-acceptance-tests/tests/interop/loadtest/relay_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ func (r *RelaySpammer) Spam(t devtest.T) error {
// spammer sends one initating message on the source chain and one corresponding executing message
// on the destination chain.
func TestRelaySteady(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t, l2A, l2B := setupLoadTest(gt)
s := NewSteady(l2B.EL.Escape().EthClient(), l2B.Config.ElasticityMultiplier(), l2B.BlockTime, WithAIMDObserver(aimdObserver{}))
s.Run(t, NewRelaySpammer(l2A, l2B))
Expand All @@ -63,6 +64,7 @@ func TestRelaySteady(gt *testing.T) {
// TestRelayBurst runs the Relay spammer on a Burst schedule. See TestRelaySteady for more details
// on the Relay spammer.
func TestRelayBurst(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t, l2A, l2B := setupLoadTest(gt)
burst := NewBurst(l2B.BlockTime, WithAIMDObserver(aimdObserver{}))
burst.Run(t, NewRelaySpammer(l2A, l2B))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
// included in two L2 chains and that the cross-safe ref for both of them progresses as expected beyond
// the block number where the messages were included
func TestInteropHappyTx(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t := devtest.SerialT(gt)
sys := presets.NewSimpleInterop(t)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (

// TestInteropMon is testing that the op-interop-mon metrics are correctly collected
func TestInteropMon(gt *testing.T) {
gt.Skip("Skipping Interop Acceptance Test")
t := devtest.SerialT(gt)
sys := presets.NewSimpleInterop(t)

Expand Down
Loading