From 3e93a5e0cf5fb700f39f620990c66e4408a582b8 Mon Sep 17 00:00:00 2001 From: geoknee Date: Thu, 2 Oct 2025 21:30:18 +0100 Subject: [PATCH 1/4] op-challenger: convert l1 genesis flag to VMFlag --- op-challenger/flags/flags.go | 22 ++++++++++--------- op-challenger/game/fault/trace/vm/executor.go | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index a911eaaf1bfc7..6850e46d8a522 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -44,11 +44,6 @@ var ( Usage: "Address of L1 Beacon API endpoint to use", EnvVars: prefixEnvVars("L1_BEACON"), } - L1GenesisFlag = &cli.StringFlag{ - Name: "l1-genesis-path", - Usage: "Path to the L1 genesis file. Only required if the L1 is not mainnet, sepolia, holesky, or hoodi.", - EnvVars: prefixEnvVars("L1_GENESIS_PATH"), - } SupervisorRpcFlag = &cli.StringFlag{ Name: "supervisor-rpc", Usage: "Provider URL for supervisor RPC", @@ -148,6 +143,13 @@ var ( EnvVars: envVars, } }) + L1GenesisFlag = NewVMFlag("l1-genesis", EnvVarPrefix, faultDisputeVMs, func(name string, envVars []string, traceTypeInfo string) cli.Flag { + return &cli.StringFlag{ + Name: name, + Usage: "Path to the L1 genesis file. Only required if the L1 is not mainnet, sepolia, holesky, or hoodi.", + EnvVars: envVars, + } + }) DepsetConfigFlag = NewVMFlag("depset-config", EnvVarPrefix, faultDisputeVMs, func(name string, envVars []string, traceTypeInfo string) cli.Flag { return &cli.StringFlag{ Name: name, @@ -329,7 +331,6 @@ var optionalFlags = []cli.Flag{ UnsafeAllowInvalidPrestate, ResponseDelayFlag, ResponseDelayAfterFlag, - L1GenesisFlag, } func init() { @@ -337,6 +338,7 @@ func init() { optionalFlags = append(optionalFlags, PreStatesURLFlag.Flags()...) optionalFlags = append(optionalFlags, RollupConfigFlag.Flags()...) optionalFlags = append(optionalFlags, L2GenesisFlag.Flags()...) + optionalFlags = append(optionalFlags, L1GenesisFlag.Flags()...) optionalFlags = append(optionalFlags, DepsetConfigFlag.Flags()...) optionalFlags = append(optionalFlags, txmgr.CLIFlagsWithDefaults(EnvVarPrefix, txmgr.DefaultChallengerFlagValues)...) optionalFlags = append(optionalFlags, opmetrics.CLIFlags(EnvVarPrefix)...) @@ -714,7 +716,6 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro RollupRpc: ctx.String(RollupRpcFlag.Name), SupervisorRPC: ctx.String(SupervisorRpcFlag.Name), Cannon: vm.Config{ - L1GenesisPath: ctx.String(L1GenesisFlag.Name), VmType: types.TraceTypeCannon, L1: l1EthRpc, L1Beacon: l1Beacon, @@ -726,6 +727,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro L2Custom: ctx.Bool(CannonL2CustomFlag.Name), RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeCannon), L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannon), + L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeCannon), DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannon), SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name), InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name), @@ -735,7 +737,6 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name), CannonAbsolutePreStateBaseURL: cannonPreStatesURL, CannonKona: vm.Config{ - L1GenesisPath: ctx.String(L1GenesisFlag.Name), VmType: types.TraceTypeCannonKona, L1: l1EthRpc, L1Beacon: l1Beacon, @@ -750,6 +751,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannonKona), SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name), InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name), + L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeCannonKona), DebugInfo: true, BinarySnapshots: true, }, @@ -757,7 +759,6 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro CannonKonaAbsolutePreStateBaseURL: cannonKonaPreStatesURL, Datadir: ctx.String(DatadirFlag.Name), Asterisc: vm.Config{ - L1GenesisPath: ctx.String(L1GenesisFlag.Name), VmType: types.TraceTypeAsterisc, L1: l1EthRpc, L1Beacon: l1Beacon, @@ -771,12 +772,12 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsterisc), SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name), InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name), + L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeAsterisc), BinarySnapshots: true, }, AsteriscAbsolutePreState: ctx.String(AsteriscPreStateFlag.Name), AsteriscAbsolutePreStateBaseURL: asteriscPreStatesURL, AsteriscKona: vm.Config{ - L1GenesisPath: ctx.String(L1GenesisFlag.Name), VmType: types.TraceTypeAsteriscKona, L1: l1EthRpc, L1Beacon: l1Beacon, @@ -791,6 +792,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsteriscKona), SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name), InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name), + L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeAsteriscKona), BinarySnapshots: true, }, AsteriscKonaAbsolutePreState: ctx.String(AsteriscKonaPreStateFlag.Name), diff --git a/op-challenger/game/fault/trace/vm/executor.go b/op-challenger/game/fault/trace/vm/executor.go index 38fe3791c84dd..969a2e19e95fd 100644 --- a/op-challenger/game/fault/trace/vm/executor.go +++ b/op-challenger/game/fault/trace/vm/executor.go @@ -57,8 +57,8 @@ type Config struct { Networks []string L2Custom bool RollupConfigPaths []string - L1GenesisPath string L2GenesisPaths []string + L1GenesisPath string DepsetConfigPath string } From f6a154798abce88d24df1c15b0689cb1520816ac Mon Sep 17 00:00:00 2001 From: geoknee Date: Fri, 3 Oct 2025 11:15:23 +0100 Subject: [PATCH 2/4] loop l1 genesis flag into check on flag compatibility --- op-challenger/cmd/main_test.go | 79 ++++++++++++++++------------ op-challenger/flags/flags.go | 95 +++++++++++++++++++++++++--------- 2 files changed, 116 insertions(+), 58 deletions(-) diff --git a/op-challenger/cmd/main_test.go b/op-challenger/cmd/main_test.go index aa3b7ef3a2086..13e1231f3e75e 100644 --- a/op-challenger/cmd/main_test.go +++ b/op-challenger/cmd/main_test.go @@ -584,7 +584,7 @@ func TestAsteriscBaseRequiredArgs(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { verifyArgsInvalid( t, - "flag network can not be used with rollup-config, l2-genesis or asterisc-kona-l2-custom", + "flag network can not be used with rollup-config, l2-genesis, asterisc-kona-l2-custom or l1-genesis", addRequiredArgs(traceType, "--rollup-config=rollup.json")) }) @@ -657,22 +657,26 @@ func TestCannonCustomConfigArgs(t *testing.T) { t.Run(fmt.Sprintf("TestRequireEitherCannonNetworkOrRollupAndGenesis-%v", traceType), func(t *testing.T) { verifyArgsInvalid( t, - "flag network or rollup-config/cannon-rollup-config and l2-genesis/cannon-l2-genesis is required", + "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis and l1-genesis/cannon-l1-genesis is required", addRequiredArgsExcept(traceType, "--network")) verifyArgsInvalid( t, - "flag network or rollup-config/cannon-rollup-config and l2-genesis/cannon-l2-genesis is required", - addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json")) + "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis and l1-genesis/cannon-l1-genesis is required", + addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=gensis.json")) + verifyArgsInvalid( + t, + "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis and l1-genesis/cannon-l1-genesis is required", + addRequiredArgsExcept(traceType, "--network", "--cannon-l2-genesis=gensis.json", "--cannon-l1-genesis=l1-genesis.json")) verifyArgsInvalid( t, - "flag network or rollup-config/cannon-rollup-config and l2-genesis/cannon-l2-genesis is required", - addRequiredArgsExcept(traceType, "--network", "--cannon-l2-genesis=gensis.json")) + "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis and l1-genesis/cannon-l1-genesis is required", + addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l1-genesis=l1-genesis.json")) }) t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { verifyArgsInvalid( t, - "flag network can not be used with cannon-rollup-config, l2-genesis or cannon-l2-custom", + "flag network can not be used with cannon-rollup-config, l2-genesis, cannon-l2-custom or l1-genesis", addRequiredArgs(traceType, "--cannon-rollup-config=rollup.json")) }) @@ -686,14 +690,14 @@ func TestCannonCustomConfigArgs(t *testing.T) { args["--cannon-l2-custom"] = "true" verifyArgsInvalid( t, - "flag network can not be used with cannon-rollup-config, cannon-l2-genesis or cannon-l2-custom", + "flag network can not be used with cannon-rollup-config, cannon-l2-genesis, cannon-l2-custom or l1-genesis", toArgList(args)) }) t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) { t.Run("NotRequiredWhenRollupAndGenesIsSpecified", func(t *testing.T) { configForArgs(t, addRequiredArgsExcept(traceType, "--network", - "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json")) + "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-l1-genesis=l1-genesis.json")) }) t.Run("Valid", func(t *testing.T) { @@ -706,6 +710,7 @@ func TestCannonCustomConfigArgs(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", + "--cannon-l1-genesis=l1-genesis.json", "--cannon-l2-custom")) require.True(t, cfg.Cannon.L2Custom) }) @@ -716,7 +721,7 @@ func TestCannonCustomConfigArgs(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-l1-genesis=l1-genesis.json")) require.Equal(t, []string{"rollup.json"}, cfg.Cannon.RollupConfigPaths) }) }) @@ -727,7 +732,7 @@ func TestCannonCustomConfigArgs(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-l1-genesis=l1-genesis.json")) require.Equal(t, []string{"genesis.json"}, cfg.Cannon.L2GenesisPaths) }) }) @@ -739,7 +744,7 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { traceType := traceType t.Run(fmt.Sprintf("TestRequireEitherCannonNetworkOrRollupAndGenesisAndDepset-%v", traceType), func(t *testing.T) { - expectedErrorMessage := "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis and depset-config/cannon-depset-config is required" + expectedErrorMessage := "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis, depset-config/cannon-depset-config and l1-genesis/cannon-l1-genesis is required" // Missing all verifyArgsInvalid( t, @@ -749,23 +754,28 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { verifyArgsInvalid( t, expectedErrorMessage, - addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-depset-config=depset.json")) + addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-depset-config=depset.json", "--cannon-l1-genesis=l1-genesis.json")) // Missing rollup-config verifyArgsInvalid( t, expectedErrorMessage, - addRequiredArgsExcept(traceType, "--network", "--cannon-l2-genesis=gensis.json", "--cannon-depset-config=depset.json")) + addRequiredArgsExcept(traceType, "--network", "--cannon-l2-genesis=gensis.json", "--cannon-depset-config=depset.json", "--cannon-l1-genesis=l1-genesis.json")) // Missing depset-config verifyArgsInvalid( t, expectedErrorMessage, - addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=gensis.json")) + addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=gensis.json", "--cannon-l1-genesis=l1-genesis.json")) + // Missing l1-genesis + verifyArgsInvalid( + t, + expectedErrorMessage, + addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=gensis.json", "--cannon-depset-config=depset.json")) }) t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { verifyArgsInvalid( t, - "flag network can not be used with cannon-rollup-config, l2-genesis or cannon-l2-custom", + "flag network can not be used with cannon-rollup-config, l2-genesis, cannon-l2-custom or l1-genesis", addRequiredArgs(traceType, "--cannon-rollup-config=rollup.json")) }) @@ -779,14 +789,14 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { args["--cannon-l2-custom"] = "true" verifyArgsInvalid( t, - "flag network can not be used with cannon-rollup-config, cannon-l2-genesis or cannon-l2-custom", + "failed to setup: flag network can not be used with cannon-rollup-config, cannon-l2-genesis, cannon-l2-custom or l1-genesis", toArgList(args)) }) t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) { t.Run("NotRequiredWhenRollupGenesisAndDepsetIsSpecified", func(t *testing.T) { configForArgs(t, addRequiredArgsExcept(traceType, "--network", - "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json")) + "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json", "--cannon-l1-genesis=l1-genesis.json")) }) t.Run("Valid", func(t *testing.T) { @@ -800,7 +810,8 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json", - "--cannon-l2-custom")) + "--cannon-l2-custom", + "--cannon-l1-genesis=l1-genesis.json")) require.True(t, cfg.Cannon.L2Custom) }) @@ -811,7 +822,7 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", - "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json")) + "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json", "--cannon-l1-genesis=l1-genesis.json")) require.Equal(t, []string{"rollup.json"}, cfg.Cannon.RollupConfigPaths) }) }) @@ -822,7 +833,7 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json", "--cannon-l1-genesis=l1-genesis.json")) require.Equal(t, []string{"genesis.json"}, cfg.Cannon.L2GenesisPaths) }) }) @@ -833,7 +844,7 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=genesis.json", "--cannon-depset-config=depset.json", "--cannon-l1-genesis=l1-genesis.json")) require.Equal(t, "depset.json", cfg.Cannon.DepsetConfigPath) }) }) @@ -845,7 +856,7 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { traceType := traceType t.Run(fmt.Sprintf("TestRequireEitherAsteriscKonaNetworkOrRollupAndGenesisAndDepset-%v", traceType), func(t *testing.T) { - expectedErrorMessage := "flag network or rollup-config/asterisc-kona-rollup-config, l2-genesis/asterisc-kona-l2-genesis and depset-config/asterisc-kona-depset-config is required" + expectedErrorMessage := "flag network or rollup-config/asterisc-kona-rollup-config, l2-genesis/asterisc-kona-l2-genesis, depset-config/asterisc-kona-depset-config and l1-genesis/asterisc-kona-l1-genesis is required" // Missing all verifyArgsInvalid( t, @@ -871,7 +882,7 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) { verifyArgsInvalid( t, - "flag network can not be used with asterisc-kona-rollup-config, l2-genesis or asterisc-kona-l2-custom", + "flag network can not be used with asterisc-kona-rollup-config, l2-genesis, asterisc-kona-l2-custom or l1-genesis", addRequiredArgs(traceType, "--asterisc-kona-rollup-config=rollup.json")) }) @@ -883,16 +894,17 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { args["--asterisc-kona-rollup-config"] = "rollup.json" args["--asterisc-kona-l2-genesis"] = "gensis.json" args["--asterisc-kona-l2-custom"] = "true" + args["--asterisc-kona-l1-genesis"] = "l1-genesis.json" verifyArgsInvalid( t, - "flag network can not be used with asterisc-kona-rollup-config, asterisc-kona-l2-genesis or asterisc-kona-l2-custom", + "flag network can not be used with asterisc-kona-rollup-config, asterisc-kona-l2-genesis, asterisc-kona-l2-custom or asterisc-kona-l1-genesis", toArgList(args)) }) t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) { t.Run("NotRequiredWhenRollupGenesisAndDepsetIsSpecified", func(t *testing.T) { configForArgs(t, addRequiredArgsExcept(traceType, "--network", - "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json")) + "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json", "--asterisc-kona-l1-genesis=l1-genesis.json")) }) t.Run("Valid", func(t *testing.T) { @@ -906,7 +918,8 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json", - "--asterisc-kona-l2-custom")) + "--asterisc-kona-l2-custom", + "--asterisc-kona-l1-genesis=l1-genesis.json")) require.True(t, cfg.AsteriscKona.L2Custom) }) @@ -917,7 +930,7 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { t.Run("Valid", func(t *testing.T) { cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", - "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json")) + "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json", "--asterisc-kona-l1-genesis=l1-genesis.json")) require.Equal(t, []string{"rollup.json"}, cfg.AsteriscKona.RollupConfigPaths) }) }) @@ -928,7 +941,7 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json", "--asterisc-kona-l1-genesis=l1-genesis.json")) require.Equal(t, []string{"genesis.json"}, cfg.AsteriscKona.L2GenesisPaths) }) }) @@ -939,7 +952,7 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=genesis.json", "--asterisc-kona-depset-config=depset.json", "--asterisc-kona-l1-genesis=l1-genesis.json")) require.Equal(t, "depset.json", cfg.AsteriscKona.DepsetConfigPath) }) }) @@ -1090,18 +1103,18 @@ func TestDepsetConfig(t *testing.T) { if traceType == types.TraceTypeSuperCannon || traceType == types.TraceTypeSuperPermissioned { t.Run("Required-"+traceType.String(), func(t *testing.T) { verifyArgsInvalid(t, - "flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis and depset-config/cannon-depset-config is required", + "failed to setup: flag network or rollup-config/cannon-rollup-config, l2-genesis/cannon-l2-genesis, depset-config/cannon-depset-config and l1-genesis/cannon-l1-genesis is required", addRequiredArgsExcept(traceType, "--network", "--rollup-config=rollup.json", "--l2-genesis=genesis.json")) }) } else if traceType == types.TraceTypeSuperAsteriscKona { t.Run("Required-"+traceType.String(), func(t *testing.T) { verifyArgsInvalid(t, - "flag network or rollup-config/asterisc-kona-rollup-config, l2-genesis/asterisc-kona-l2-genesis and depset-config/asterisc-kona-depset-config is required", + "failed to setup: flag network or rollup-config/asterisc-kona-rollup-config, l2-genesis/asterisc-kona-l2-genesis, depset-config/asterisc-kona-depset-config and l1-genesis/asterisc-kona-l1-genesis is required", addRequiredArgsExcept(traceType, "--network", "--rollup-config=rollup.json", "--l2-genesis=genesis.json")) }) } else { t.Run("NotRequired-"+traceType.String(), func(t *testing.T) { - cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--rollup-config=rollup.json", "--l2-genesis=genesis.json")) + cfg := configForArgs(t, addRequiredArgsExcept(traceType, "--network", "--rollup-config=rollup.json", "--l2-genesis=genesis.json", "--l1-genesis=l1-genesis.json")) require.Equal(t, "", cfg.Cannon.DepsetConfigPath) }) } diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index 6850e46d8a522..7e69e0580e201 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -359,13 +359,26 @@ func checkOutputProviderFlags(ctx *cli.Context) error { func CheckCannonBaseFlags(ctx *cli.Context) error { if ctx.IsSet(flags.NetworkFlagName) && - (RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) || L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) || ctx.Bool(CannonL2CustomFlag.Name)) { - return fmt.Errorf("flag %v can not be used with %v, %v or %v", - flags.NetworkFlagName, RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeCannon), L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannon), CannonL2CustomFlag.Name) - } - if ctx.Bool(CannonL2CustomFlag.Name) && !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { - return fmt.Errorf("flag %v and %v must be set when %v is true", - RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), CannonL2CustomFlag.Name) + (RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) || + L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) || + ctx.Bool(CannonL2CustomFlag.Name) || + L1GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { + return fmt.Errorf("flag %v can not be used with %v, %v, %v or %v", + flags.NetworkFlagName, + RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeCannon), + L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannon), + CannonL2CustomFlag.Name, + L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannon)) + } + if ctx.Bool(CannonL2CustomFlag.Name) && + !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && + L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) && + L1GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { + return fmt.Errorf("flag %v, %v and %v must be set when %v is true", + RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), + L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), + L1GenesisFlag.EitherFlagName(types.TraceTypeCannon), + CannonL2CustomFlag.Name) } if !ctx.IsSet(CannonBinFlag.Name) { return fmt.Errorf("flag %s is required", CannonBinFlag.Name) @@ -384,12 +397,16 @@ func CheckSuperCannonFlags(ctx *cli.Context) error { return fmt.Errorf("flag %v is required", SupervisorRpcFlag.Name) } if !ctx.IsSet(flags.NetworkFlagName) && - !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) && DepsetConfigFlag.IsSet(ctx, types.TraceTypeCannon)) { - return fmt.Errorf("flag %v or %v, %v and %v is required", + !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && + L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) && + DepsetConfigFlag.IsSet(ctx, types.TraceTypeCannon) && + L1GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { + return fmt.Errorf("flag %v or %v, %v, %v and %v is required", flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), - DepsetConfigFlag.EitherFlagName(types.TraceTypeCannon)) + DepsetConfigFlag.EitherFlagName(types.TraceTypeCannon), + L1GenesisFlag.EitherFlagName(types.TraceTypeCannon)) } if err := CheckCannonBaseFlags(ctx); err != nil { return err @@ -402,9 +419,9 @@ func CheckCannonFlags(ctx *cli.Context) error { return err } if !ctx.IsSet(flags.NetworkFlagName) && - !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { - return fmt.Errorf("flag %v or %v and %v is required", - flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon)) + !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) && L1GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { + return fmt.Errorf("flag %v or %v, %v and %v is required", + flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), L1GenesisFlag.EitherFlagName(types.TraceTypeCannon)) } if err := CheckCannonBaseFlags(ctx); err != nil { return err @@ -414,14 +431,26 @@ func CheckCannonFlags(ctx *cli.Context) error { func CheckCannonKonaBaseFlags(ctx *cli.Context, traceType types.TraceType) error { if !ctx.IsSet(flags.NetworkFlagName) && - !(RollupConfigFlag.IsSet(ctx, traceType) && L2GenesisFlag.IsSet(ctx, traceType)) { - return fmt.Errorf("flag %v or %v and %v is required", - flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(traceType), L2GenesisFlag.EitherFlagName(traceType)) + !(RollupConfigFlag.IsSet(ctx, traceType) && L2GenesisFlag.IsSet(ctx, traceType) && L1GenesisFlag.IsSet(ctx, traceType)) { + return fmt.Errorf("flag %v or %v, %v and %v is required", + flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(traceType), L2GenesisFlag.EitherFlagName(traceType), L1GenesisFlag.EitherFlagName(traceType)) } if ctx.IsSet(flags.NetworkFlagName) && - (RollupConfigFlag.IsSet(ctx, types.TraceTypeCannonKona) || L2GenesisFlag.IsSet(ctx, types.TraceTypeCannonKona) || ctx.Bool(CannonKonaL2CustomFlag.Name)) { - return fmt.Errorf("flag %v can not be used with %v, %v or %v", - flags.NetworkFlagName, RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeCannonKona), L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannonKona), CannonKonaL2CustomFlag.Name) + (RollupConfigFlag.IsSet(ctx, types.TraceTypeCannonKona) || L2GenesisFlag.IsSet(ctx, types.TraceTypeCannonKona) || ctx.Bool(CannonKonaL2CustomFlag.Name) || L1GenesisFlag.IsSet(ctx, types.TraceTypeCannonKona)) { + return fmt.Errorf("flag %v can not be used with %v, %v, %v or %v", + flags.NetworkFlagName, + RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeCannonKona), + L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannonKona), + CannonKonaL2CustomFlag.Name, + L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannonKona)) + } + if ctx.Bool(CannonKonaL2CustomFlag.Name) && + !(RollupConfigFlag.IsSet(ctx, traceType) && L2GenesisFlag.IsSet(ctx, traceType) && L1GenesisFlag.IsSet(ctx, traceType)) { + return fmt.Errorf("flag %v, %v and %v must be set when %v is true", + RollupConfigFlag.EitherFlagName(traceType), + L2GenesisFlag.EitherFlagName(traceType), + L1GenesisFlag.EitherFlagName(traceType), + CannonKonaL2CustomFlag.Name) } if !ctx.IsSet(CannonBinFlag.Name) { return fmt.Errorf("flag %s is required", CannonBinFlag.Name) @@ -452,9 +481,21 @@ func CheckAsteriscBaseFlags(ctx *cli.Context, traceType types.TraceType) error { flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(traceType), L2GenesisFlag.EitherFlagName(traceType)) } if ctx.IsSet(flags.NetworkFlagName) && - (RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) || L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) || ctx.Bool(AsteriscKonaL2CustomFlag.Name)) { - return fmt.Errorf("flag %v can not be used with %v, %v or %v", - flags.NetworkFlagName, RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), AsteriscKonaL2CustomFlag.Name) + (RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) || L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) || ctx.Bool(AsteriscKonaL2CustomFlag.Name) || L1GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { + return fmt.Errorf("flag %v can not be used with %v, %v, %v or %v", + flags.NetworkFlagName, + RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), + L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), + AsteriscKonaL2CustomFlag.Name, + L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona)) + } + if ctx.Bool(AsteriscKonaL2CustomFlag.Name) && + !(RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L1GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { + return fmt.Errorf("flag %v, %v and %v must be set when %v is true", + RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), + L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), + L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), + AsteriscKonaL2CustomFlag.Name) } if !ctx.IsSet(AsteriscBinFlag.Name) { return fmt.Errorf("flag %s is required", AsteriscBinFlag.Name) @@ -499,12 +540,16 @@ func CheckSuperAsteriscKonaFlags(ctx *cli.Context) error { return fmt.Errorf("flag %v is required", SupervisorRpcFlag.Name) } if !ctx.IsSet(flags.NetworkFlagName) && - !(RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && DepsetConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { - return fmt.Errorf("flag %v or %v, %v and %v is required", + !(RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && + L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && + DepsetConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && + L1GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { + return fmt.Errorf("flag %v or %v, %v, %v and %v is required", flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeAsteriscKona), L2GenesisFlag.EitherFlagName(types.TraceTypeAsteriscKona), - DepsetConfigFlag.EitherFlagName(types.TraceTypeAsteriscKona)) + DepsetConfigFlag.EitherFlagName(types.TraceTypeAsteriscKona), + L1GenesisFlag.EitherFlagName(types.TraceTypeAsteriscKona)) } if err := CheckAsteriscBaseFlags(ctx, types.TraceTypeAsteriscKona); err != nil { return err From 7b578b2647e5c4ec7cb293a1fae840539fa5bff2 Mon Sep 17 00:00:00 2001 From: geoknee Date: Fri, 3 Oct 2025 15:24:47 +0100 Subject: [PATCH 3/4] remove requirement to pass L1GenesisPath when CustomFlag is set --- op-challenger/flags/flags.go | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index 7e69e0580e201..a698360d121e8 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -372,12 +372,10 @@ func CheckCannonBaseFlags(ctx *cli.Context) error { } if ctx.Bool(CannonL2CustomFlag.Name) && !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && - L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) && - L1GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { + L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { return fmt.Errorf("flag %v, %v and %v must be set when %v is true", RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), - L1GenesisFlag.EitherFlagName(types.TraceTypeCannon), CannonL2CustomFlag.Name) } if !ctx.IsSet(CannonBinFlag.Name) { @@ -445,11 +443,10 @@ func CheckCannonKonaBaseFlags(ctx *cli.Context, traceType types.TraceType) error L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeCannonKona)) } if ctx.Bool(CannonKonaL2CustomFlag.Name) && - !(RollupConfigFlag.IsSet(ctx, traceType) && L2GenesisFlag.IsSet(ctx, traceType) && L1GenesisFlag.IsSet(ctx, traceType)) { + !(RollupConfigFlag.IsSet(ctx, traceType) && L2GenesisFlag.IsSet(ctx, traceType)) { return fmt.Errorf("flag %v, %v and %v must be set when %v is true", RollupConfigFlag.EitherFlagName(traceType), L2GenesisFlag.EitherFlagName(traceType), - L1GenesisFlag.EitherFlagName(traceType), CannonKonaL2CustomFlag.Name) } if !ctx.IsSet(CannonBinFlag.Name) { @@ -490,11 +487,10 @@ func CheckAsteriscBaseFlags(ctx *cli.Context, traceType types.TraceType) error { L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona)) } if ctx.Bool(AsteriscKonaL2CustomFlag.Name) && - !(RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L1GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { + !(RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { return fmt.Errorf("flag %v, %v and %v must be set when %v is true", RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), - L1GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), AsteriscKonaL2CustomFlag.Name) } if !ctx.IsSet(AsteriscBinFlag.Name) { From f8c0919039fb2affe432a963dba7d07aa7048a01 Mon Sep 17 00:00:00 2001 From: geoknee Date: Fri, 3 Oct 2025 15:27:57 +0100 Subject: [PATCH 4/4] fix string format --- op-challenger/flags/flags.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/op-challenger/flags/flags.go b/op-challenger/flags/flags.go index a698360d121e8..588a30f37b3bd 100644 --- a/op-challenger/flags/flags.go +++ b/op-challenger/flags/flags.go @@ -373,7 +373,7 @@ func CheckCannonBaseFlags(ctx *cli.Context) error { if ctx.Bool(CannonL2CustomFlag.Name) && !(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) && L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon)) { - return fmt.Errorf("flag %v, %v and %v must be set when %v is true", + return fmt.Errorf("flag %v and %v must be set when %v is true", RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), CannonL2CustomFlag.Name) @@ -444,7 +444,7 @@ func CheckCannonKonaBaseFlags(ctx *cli.Context, traceType types.TraceType) error } if ctx.Bool(CannonKonaL2CustomFlag.Name) && !(RollupConfigFlag.IsSet(ctx, traceType) && L2GenesisFlag.IsSet(ctx, traceType)) { - return fmt.Errorf("flag %v, %v and %v must be set when %v is true", + return fmt.Errorf("flag %v and %v must be set when %v is true", RollupConfigFlag.EitherFlagName(traceType), L2GenesisFlag.EitherFlagName(traceType), CannonKonaL2CustomFlag.Name) @@ -488,7 +488,7 @@ func CheckAsteriscBaseFlags(ctx *cli.Context, traceType types.TraceType) error { } if ctx.Bool(AsteriscKonaL2CustomFlag.Name) && !(RollupConfigFlag.IsSet(ctx, types.TraceTypeAsteriscKona) && L2GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona)) { - return fmt.Errorf("flag %v, %v and %v must be set when %v is true", + return fmt.Errorf("flag %v and %v must be set when %v is true", RollupConfigFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), L2GenesisFlag.SourceFlagName(ctx, types.TraceTypeAsteriscKona), AsteriscKonaL2CustomFlag.Name)