Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1e0c41c
feat(kona): implement L2PayloadWitness hint for interop
pauldowman Mar 5, 2026
56c7e4f
Fix package reference in interop acceptance tests
pauldowman Mar 6, 2026
a2d3336
feat(op-challenger): add --cannon-kona-experimental-witness-endpoint …
pauldowman Mar 9, 2026
d46aadd
remove redundant witness endpoint acceptance test
pauldowman Mar 9, 2026
ff61668
fix(kona): add L2PayloadWitness proactive hint and improve interop tests
pauldowman Mar 9, 2026
cda0dd9
fix(kona): extract preimages iterator before kv lock, add WithL2ELKin…
pauldowman Mar 10, 2026
e5f9c84
fix(op-reth): wire proof-history exex and RPC overrides into main ent…
pauldowman Mar 10, 2026
4952830
Lint fix
pauldowman Mar 11, 2026
fa985f4
fix(op-reth): make supervisor URL optional, disable interop validatio…
pauldowman Mar 12, 2026
e6c221b
chore(rust): apply nightly rustfmt to op-reth changes
pauldowman Mar 12, 2026
038af5e
Lint fixes
pauldowman Mar 12, 2026
401c6a7
fix(op-devstack): always enable proof history for op-reth, window=10000
pauldowman Mar 12, 2026
1ff78c6
feat(op-devstack): use op-reth for all interop tests, always enable p…
pauldowman Mar 12, 2026
ece2a4c
fix(op-devstack): remove supervisor RPC from op-reth node startup
pauldowman Mar 12, 2026
cb29474
feat(op-devstack): use op-reth for supernode interop tests
pauldowman Mar 12, 2026
ad0fc32
fix(op-node): handle reorged super authority safe head gracefully
pauldowman Mar 12, 2026
4a30826
fix(op-devstack): skip op-reth tests gracefully when binary not avail…
pauldowman Mar 12, 2026
564453a
fix(op-devstack): revert startL2ELNodeWithSupervisor to op-geth
pauldowman Mar 12, 2026
c5d80a9
fix(op-challenger): clarify --proofs-history requirement in flag usage
pauldowman Mar 12, 2026
95a6658
fix(op-reth): fix imports and Cargo.toml after rebase conflict resolu…
pauldowman Mar 13, 2026
4e8bd3a
review: fail on missing op-reth binary, clarify supervisor deprecation
pauldowman Mar 13, 2026
bfe93c4
Revert "fix(op-node): handle reorged super authority safe head gracef…
pauldowman Mar 13, 2026
5407555
fix(kona): log info when debug_executePayload is unavailable, add tests
pauldowman Mar 13, 2026
11f2c2e
chore(kona): fix import ordering from nightly rustfmt
pauldowman Mar 13, 2026
60d4d5c
Lint fix
pauldowman Mar 13, 2026
ba31fa7
fix(kona): make is_rpc_method_not_found const to satisfy clippy
pauldowman Mar 13, 2026
53d1ba1
fix(op-devstack): respect DEVSTACK_L2EL_KIND in supernode runtime
pauldowman Mar 13, 2026
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
74 changes: 37 additions & 37 deletions op-acceptance-tests/acceptance-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,42 +49,42 @@ gates:
- id: flake-shake
description: "Quarantine gate for new and potentially flaky tests requiring stability validation."
tests:
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/reqressyncdisabled
name: TestUnsafeChainNotStalling_DisabledReqRespSync
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/supernode/interop/activation
name: TestSupernodeInteropActivationAfterGenesis
timeout: 10m
metadata:
owner: "adrian sutton"
target_gate: "supernode-interop"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/supernode/interop
name: TestSupernodeInteropChainLag
timeout: 15m
metadata:
owner: "axel kingsley"
target_gate: "supernode-interop"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/syncmodereqressync/elsync
name: TestUnsafeChainNotStalling_ELSync_Short
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/syncmodereqressync/elsync
name: TestUnsafeChainNotStalling_ELSync_Long
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/syncmodereqressync/elsync
name: TestUnsafeChainNotStalling_ELSync_RestartOpNode_Long
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/reqressyncdisabled
name: TestUnsafeChainNotStalling_DisabledReqRespSync
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/supernode/interop/activation
name: TestSupernodeInteropActivationAfterGenesis
timeout: 10m
metadata:
owner: "adrian sutton"
target_gate: "supernode-interop"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/supernode/interop
name: TestSupernodeInteropChainLag
timeout: 15m
metadata:
owner: "axel kingsley"
target_gate: "supernode-interop"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/syncmodereqressync/elsync
name: TestUnsafeChainNotStalling_ELSync_Short
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/syncmodereqressync/elsync
name: TestUnsafeChainNotStalling_ELSync_Long
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/depreqres/syncmodereqressync/elsync
name: TestUnsafeChainNotStalling_ELSync_RestartOpNode_Long
timeout: 10m
metadata:
owner: "anton evangelatov"
target_gate: "depreqres"

- id: jovian
description: "Jovian network tests."
Expand Down Expand Up @@ -150,7 +150,7 @@ gates:
timeout: 10m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/interop/message
timeout: 30m
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/interop/sync
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/interop/sync/...
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/interop/smoke
- package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/interop/contract

Expand Down
46 changes: 28 additions & 18 deletions op-challenger/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (
const EnvVarPrefix = "OP_CHALLENGER"

func prefixEnvVars(names ...string) []string {

envs := make([]string, 0, len(names))
for _, name := range names {
envs = append(envs, EnvVarPrefix+"_"+name)
Expand Down Expand Up @@ -232,6 +231,15 @@ var (
Value: false,
Hidden: true,
}
CannonKonaExperimentalWitnessEndpointFlag = &cli.BoolFlag{
Name: "cannon-kona-experimental-witness-endpoint",
Usage: "Enable experimental witness endpoint for Kona interop. " +
"Uses debug_executePayload RPC to collect execution witnesses, " +
"reducing proof generation time by avoiding re-execution. " +
"Requires op-reth or execution client started with " +
"--proofs-history enabled to provide debug_executePayload support.",
EnvVars: prefixEnvVars("CANNON_KONA_EXPERIMENTAL_WITNESS_ENDPOINT"),
}
GameWindowFlag = &cli.DurationFlag{
Name: "game-window",
Usage: "The time window which the challenger will look for games to progress and claim bonds. " +
Expand Down Expand Up @@ -296,6 +304,7 @@ var optionalFlags = []cli.Flag{
CannonKonaServerFlag,
CannonKonaPreStateFlag,
CannonKonaL2CustomFlag,
CannonKonaExperimentalWitnessEndpointFlag,
GameWindowFlag,
SelectiveClaimResolutionFlag,
UnsafeAllowInvalidPrestate,
Expand Down Expand Up @@ -637,23 +646,24 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name),
CannonAbsolutePreStateBaseURL: cannonPreStatesURL,
CannonKona: vm.Config{
VmType: gameTypes.CannonKonaGameType,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(CannonBinFlag.Name),
Server: ctx.String(CannonKonaServerFlag.Name),
Networks: networks,
L2Custom: ctx.Bool(CannonKonaL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, gameTypes.CannonKonaGameType),
L1GenesisPath: L1GenesisFlag.String(ctx, gameTypes.CannonKonaGameType),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, gameTypes.CannonKonaGameType),
DepsetConfigPath: DepsetConfigFlag.String(ctx, gameTypes.CannonKonaGameType),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
DebugInfo: true,
BinarySnapshots: true,
VmType: gameTypes.CannonKonaGameType,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(CannonBinFlag.Name),
Server: ctx.String(CannonKonaServerFlag.Name),
Networks: networks,
L2Custom: ctx.Bool(CannonKonaL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, gameTypes.CannonKonaGameType),
L1GenesisPath: L1GenesisFlag.String(ctx, gameTypes.CannonKonaGameType),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, gameTypes.CannonKonaGameType),
DepsetConfigPath: DepsetConfigFlag.String(ctx, gameTypes.CannonKonaGameType),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
DebugInfo: true,
BinarySnapshots: true,
EnableExperimentalWitnessEndpoint: ctx.Bool(CannonKonaExperimentalWitnessEndpointFlag.Name),
},
CannonKonaAbsolutePreState: ctx.String(CannonKonaPreStateFlag.Name),
CannonKonaAbsolutePreStateBaseURL: cannonKonaPreStatesURL,
Expand Down
7 changes: 7 additions & 0 deletions op-challenger/game/fault/trace/vm/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,13 @@ type Config struct {
L1GenesisPath string
L2GenesisPaths []string
DepsetConfigPath string

// EnableExperimentalWitnessEndpoint enables kona's L2PayloadWitness hint,
// which uses debug_executePayload to collect execution witnesses.
// This can reduce proof generation time by avoiding full block re-derivation
// and re-execution. Requires an execution client with debug_executePayload
// support (e.g., op-reth).
EnableExperimentalWitnessEndpoint bool
}

func (c *Config) Check() error {
Expand Down
4 changes: 4 additions & 0 deletions op-challenger/game/fault/trace/vm/kona_server_executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,9 @@ func (s *KonaExecutor) OracleCommand(cfg Config, dataDir string, inputs utils.Lo
args = append(args, "--l1-config-path", cfg.L1GenesisPath)
}

if cfg.EnableExperimentalWitnessEndpoint {
args = append(args, "--enable-experimental-witness-endpoint")
}

return args, nil
}
48 changes: 48 additions & 0 deletions op-challenger/game/fault/trace/vm/kona_server_executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,54 @@ import (
"github.com/stretchr/testify/require"
)

func TestKonaExecutorWithWitnessEndpoint(t *testing.T) {
t.Parallel()
executor := NewKonaExecutor()
cfg := Config{
Server: "/path/to/kona",
L1: "http://l1",
L1Beacon: "http://beacon",
L2s: []string{"http://l2"},
Networks: []string{"op-sepolia"},
EnableExperimentalWitnessEndpoint: true,
}
inputs := utils.LocalGameInputs{
L1Head: common.Hash{0x11},
L2Head: common.Hash{0x22},
L2OutputRoot: common.Hash{0x33},
L2Claim: common.Hash{0x44},
L2SequenceNumber: big.NewInt(100),
}

args, err := executor.OracleCommand(cfg, "/data", inputs)
require.NoError(t, err)
require.True(t, slices.Contains(args, "--enable-experimental-witness-endpoint"))
}

func TestKonaExecutorWithoutWitnessEndpoint(t *testing.T) {
t.Parallel()
executor := NewKonaExecutor()
cfg := Config{
Server: "/path/to/kona",
L1: "http://l1",
L1Beacon: "http://beacon",
L2s: []string{"http://l2"},
Networks: []string{"op-sepolia"},
EnableExperimentalWitnessEndpoint: false,
}
inputs := utils.LocalGameInputs{
L1Head: common.Hash{0x11},
L2Head: common.Hash{0x22},
L2OutputRoot: common.Hash{0x33},
L2Claim: common.Hash{0x44},
L2SequenceNumber: big.NewInt(100),
}

args, err := executor.OracleCommand(cfg, "/data", inputs)
require.NoError(t, err)
require.False(t, slices.Contains(args, "--enable-experimental-witness-endpoint"))
}

func TestKonaFillHostCommand(t *testing.T) {
dir := "mockdir"
cfg := Config{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,9 @@ func (s *KonaSuperExecutor) OracleCommand(cfg Config, dataDir string, inputs uti
args = append(args, "--l1-config-path", cfg.L1GenesisPath)
}

if cfg.EnableExperimentalWitnessEndpoint {
args = append(args, "--enable-experimental-witness-endpoint")
}

return args, nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package vm

import (
"math/big"
"slices"
"testing"

"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/utils"
"github.com/ethereum/go-ethereum/common"
"github.com/stretchr/testify/require"
)

func TestKonaSuperExecutorWithWitnessEndpoint(t *testing.T) {
t.Parallel()
executor := NewKonaSuperExecutor()
cfg := Config{
Server: "/path/to/kona",
L1: "http://l1",
L1Beacon: "http://beacon",
L2s: []string{"http://l2a", "http://l2b"},
EnableExperimentalWitnessEndpoint: true,
}
inputs := utils.LocalGameInputs{
L1Head: common.Hash{0x11},
AgreedPreState: []byte{0x01, 0x02},
L2Claim: common.Hash{0x44},
L2SequenceNumber: big.NewInt(100),
}

args, err := executor.OracleCommand(cfg, "/data", inputs)
require.NoError(t, err)
require.True(t, slices.Contains(args, "--enable-experimental-witness-endpoint"))
}

func TestKonaSuperExecutorWithoutWitnessEndpoint(t *testing.T) {
t.Parallel()
executor := NewKonaSuperExecutor()
cfg := Config{
Server: "/path/to/kona",
L1: "http://l1",
L1Beacon: "http://beacon",
L2s: []string{"http://l2a", "http://l2b"},
EnableExperimentalWitnessEndpoint: false,
}
inputs := utils.LocalGameInputs{
L1Head: common.Hash{0x11},
AgreedPreState: []byte{0x01, 0x02},
L2Claim: common.Hash{0x44},
L2SequenceNumber: big.NewInt(100),
}

args, err := executor.OracleCommand(cfg, "/data", inputs)
require.NoError(t, err)
require.False(t, slices.Contains(args, "--enable-experimental-witness-endpoint"))
}
11 changes: 11 additions & 0 deletions op-devstack/shared/challenger/challenger.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,17 @@ func WithFastGames() Option {
}
}

// WithExperimentalWitnessEndpoint enables kona's experimental witness endpoint feature.
// This uses debug_executePayload to collect execution witnesses, reducing proof generation
// time by avoiding full block re-derivation and re-execution.
// Requires op-reth or execution client with debug_executePayload support.
func WithExperimentalWitnessEndpoint() Option {
return func(c *config.Config) error {
c.CannonKona.EnableExperimentalWitnessEndpoint = true
return nil
}
}

func NewInteropChallengerConfig(dir string, l1Endpoint string, l1Beacon string, supervisorEndpoint string, l2Endpoints []string, options ...Option) (*config.Config, error) {
cfg := config.NewInteropConfig(common.Address{}, l1Endpoint, l1Beacon, supervisorEndpoint, l2Endpoints, dir)
if err := applyCommonChallengerOpts(&cfg, options...); err != nil {
Expand Down
Loading
Loading