Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
112 changes: 46 additions & 66 deletions op-challenger/cmd/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,48 @@ func TestAsteriscKonaRequiredArgs(t *testing.T) {
})
}

// validateCustomNetworkFlagsProhibitedWithNetworkFlag ensures custom network flags are not used simultaneously with the network flag.
// It validates disallowed flag combinations for a given trace type and trace type prefix configuration.
func validateCustomNetworkFlagsProhibitedWithNetworkFlag(t *testing.T, traceType types.TraceType, traceTypeForFlagPrefix types.TraceType, customNetworkFlag string) {
expectedError := fmt.Sprintf("flag network can not be used with rollup-config/%v-rollup-config, l2-genesis/%v-l2-genesis, l1-genesis/%v-l1-genesis or %v", traceTypeForFlagPrefix, traceTypeForFlagPrefix, traceTypeForFlagPrefix, customNetworkFlag)

// Test the custom l2 flag
t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndCustomL2Flag-%v", traceType), func(t *testing.T) {
verifyArgsInvalid(
t,
expectedError,
addRequiredArgs(traceType, fmt.Sprintf("--%v=true", customNetworkFlag)))
})

// Now test flags with trace-specific permutations
customNetworkFlags := map[string]string{
"RollupConfig": "rollup-config",
"L2Genesis": "l2-genesis",
"L1Genesis": "l1-genesis",
}
for testName, flag := range customNetworkFlags {
for _, withTraceSpecificPrefix := range []bool{true, false} {
var postFix string
if withTraceSpecificPrefix {
postFix = "-withTraceSpecificPrefix"
}

t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAnd%v-%v%v", testName, traceType, postFix), func(t *testing.T) {
var prefix string
if withTraceSpecificPrefix {
prefix = fmt.Sprintf("%v-", traceTypeForFlagPrefix)
}
flagName := fmt.Sprintf("%v%v", prefix, flag)

verifyArgsInvalid(
t,
expectedError,
addRequiredArgs(traceType, fmt.Sprintf("--%v=somevalue.json", flagName)))
})
}
}
}

func TestAsteriscBaseRequiredArgs(t *testing.T) {
for _, traceType := range []types.TraceType{types.TraceTypeAsterisc, types.TraceTypeAsteriscKona} {
traceType := traceType
Expand Down Expand Up @@ -581,12 +623,7 @@ func TestAsteriscBaseRequiredArgs(t *testing.T) {
addRequiredArgsExcept(traceType, "--network", "--l2-genesis=gensis.json"))
})

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",
addRequiredArgs(traceType, "--rollup-config=rollup.json"))
})
validateCustomNetworkFlagsProhibitedWithNetworkFlag(t, traceType, types.TraceTypeAsteriscKona, "asterisc-kona-l2-custom")

t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) {
t.Run("NotRequiredForAlphabetTrace", func(t *testing.T) {
Expand Down Expand Up @@ -669,26 +706,7 @@ func TestCannonCustomConfigArgs(t *testing.T) {
addRequiredArgsExcept(traceType, "--network", "--cannon-l2-genesis=gensis.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",
addRequiredArgs(traceType, "--cannon-rollup-config=rollup.json"))
})

t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) {
args := requiredArgs(traceType)
delete(args, "--network")
delete(args, "--game-factory-address")
args["--network"] = network
args["--cannon-rollup-config"] = "rollup.json"
args["--cannon-l2-genesis"] = "gensis.json"
args["--cannon-l2-custom"] = "true"
verifyArgsInvalid(
t,
"flag network can not be used with cannon-rollup-config, cannon-l2-genesis or cannon-l2-custom",
toArgList(args))
})
validateCustomNetworkFlagsProhibitedWithNetworkFlag(t, traceType, types.TraceTypeCannon, "cannon-l2-custom")

t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) {
t.Run("NotRequiredWhenRollupAndGenesIsSpecified", func(t *testing.T) {
Expand Down Expand Up @@ -762,26 +780,7 @@ func TestSuperCannonCustomConfigArgs(t *testing.T) {
addRequiredArgsExcept(traceType, "--network", "--cannon-rollup-config=rollup.json", "--cannon-l2-genesis=gensis.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",
addRequiredArgs(traceType, "--cannon-rollup-config=rollup.json"))
})

t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) {
args := requiredArgs(traceType)
delete(args, "--network")
delete(args, "--game-factory-address")
args["--network"] = network
args["--cannon-rollup-config"] = "rollup.json"
args["--cannon-l2-genesis"] = "gensis.json"
args["--cannon-l2-custom"] = "true"
verifyArgsInvalid(
t,
"flag network can not be used with cannon-rollup-config, cannon-l2-genesis or cannon-l2-custom",
toArgList(args))
})
validateCustomNetworkFlagsProhibitedWithNetworkFlag(t, traceType, types.TraceTypeCannon, "cannon-l2-custom")

t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) {
t.Run("NotRequiredWhenRollupGenesisAndDepsetIsSpecified", func(t *testing.T) {
Expand Down Expand Up @@ -868,26 +867,7 @@ func TestSuperAsteriscKonaCustomConfigArgs(t *testing.T) {
addRequiredArgsExcept(traceType, "--network", "--asterisc-kona-rollup-config=rollup.json", "--asterisc-kona-l2-genesis=gensis.json"))
})

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",
addRequiredArgs(traceType, "--asterisc-kona-rollup-config=rollup.json"))
})

t.Run(fmt.Sprintf("TestMustNotSpecifyNetworkAndRollup-%v", traceType), func(t *testing.T) {
args := requiredArgs(traceType)
delete(args, "--network")
delete(args, "--game-factory-address")
args["--network"] = network
args["--asterisc-kona-rollup-config"] = "rollup.json"
args["--asterisc-kona-l2-genesis"] = "gensis.json"
args["--asterisc-kona-l2-custom"] = "true"
verifyArgsInvalid(
t,
"flag network can not be used with asterisc-kona-rollup-config, asterisc-kona-l2-genesis or asterisc-kona-l2-custom",
toArgList(args))
})
validateCustomNetworkFlagsProhibitedWithNetworkFlag(t, traceType, types.TraceTypeAsteriscKona, "asterisc-kona-l2-custom")

t.Run(fmt.Sprintf("TestNetwork-%v", traceType), func(t *testing.T) {
t.Run("NotRequiredWhenRollupGenesisAndDepsetIsSpecified", func(t *testing.T) {
Expand Down
40 changes: 21 additions & 19 deletions op-challenger/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -329,13 +331,13 @@ var optionalFlags = []cli.Flag{
UnsafeAllowInvalidPrestate,
ResponseDelayFlag,
ResponseDelayAfterFlag,
L1GenesisFlag,
}

func init() {
optionalFlags = append(optionalFlags, oplog.CLIFlags(EnvVarPrefix)...)
optionalFlags = append(optionalFlags, PreStatesURLFlag.Flags()...)
optionalFlags = append(optionalFlags, RollupConfigFlag.Flags()...)
optionalFlags = append(optionalFlags, L1GenesisFlag.Flags()...)
optionalFlags = append(optionalFlags, L2GenesisFlag.Flags()...)
optionalFlags = append(optionalFlags, DepsetConfigFlag.Flags()...)
optionalFlags = append(optionalFlags, txmgr.CLIFlagsWithDefaults(EnvVarPrefix, txmgr.DefaultChallengerFlagValues)...)
Expand All @@ -357,9 +359,9 @@ 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)
(RollupConfigFlag.IsSet(ctx, types.TraceTypeCannon) || L2GenesisFlag.IsSet(ctx, types.TraceTypeCannon) || L1GenesisFlag.IsSet(ctx, types.TraceTypeCannon) || ctx.Bool(CannonL2CustomFlag.Name)) {
return fmt.Errorf("flag %v can not be used with %v, %v, %v or %v",
flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeCannon), L2GenesisFlag.EitherFlagName(types.TraceTypeCannon), L1GenesisFlag.EitherFlagName(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",
Expand Down Expand Up @@ -417,9 +419,9 @@ func CheckCannonKonaBaseFlags(ctx *cli.Context, traceType types.TraceType) error
flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(traceType), L2GenesisFlag.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) || L1GenesisFlag.IsSet(ctx, types.TraceTypeCannonKona) || ctx.Bool(CannonKonaL2CustomFlag.Name)) {
return fmt.Errorf("flag %v can not be used with %v, %v, %v or %v",
flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeCannonKona), L2GenesisFlag.EitherFlagName(types.TraceTypeCannonKona), L1GenesisFlag.EitherFlagName(types.TraceTypeCannonKona), CannonKonaL2CustomFlag.Name)
}
if !ctx.IsSet(CannonBinFlag.Name) {
return fmt.Errorf("flag %s is required", CannonBinFlag.Name)
Expand Down Expand Up @@ -450,9 +452,9 @@ 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) || L1GenesisFlag.IsSet(ctx, types.TraceTypeAsteriscKona) || ctx.Bool(AsteriscKonaL2CustomFlag.Name)) {
return fmt.Errorf("flag %v can not be used with %v, %v, %v or %v",
flags.NetworkFlagName, RollupConfigFlag.EitherFlagName(types.TraceTypeAsteriscKona), L2GenesisFlag.EitherFlagName(types.TraceTypeAsteriscKona), L1GenesisFlag.EitherFlagName(types.TraceTypeAsteriscKona), AsteriscKonaL2CustomFlag.Name)
}
if !ctx.IsSet(AsteriscBinFlag.Name) {
return fmt.Errorf("flag %s is required", AsteriscBinFlag.Name)
Expand Down Expand Up @@ -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,
Expand All @@ -725,6 +726,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
Networks: networks,
L2Custom: ctx.Bool(CannonL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeCannon),
L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeCannon),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannon),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannon),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
Expand All @@ -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,
Expand All @@ -746,6 +747,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
Networks: networks,
L2Custom: ctx.Bool(CannonKonaL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeCannonKona),
L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeCannonKona),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannonKona),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannonKona),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
Expand All @@ -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,
Expand All @@ -767,6 +768,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
Server: ctx.String(AsteriscServerFlag.Name),
Networks: networks,
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeAsterisc),
L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeAsterisc),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeAsterisc),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsterisc),
SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name),
Expand All @@ -776,7 +778,6 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
AsteriscAbsolutePreState: ctx.String(AsteriscPreStateFlag.Name),
AsteriscAbsolutePreStateBaseURL: asteriscPreStatesURL,
AsteriscKona: vm.Config{
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1Beacon,
Expand All @@ -787,6 +788,7 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
Networks: networks,
L2Custom: ctx.Bool(AsteriscKonaL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeAsteriscKona),
L1GenesisPath: L1GenesisFlag.String(ctx, types.TraceTypeAsteriscKona),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeAsteriscKona),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsteriscKona),
SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name),
Expand Down