Skip to content
149 changes: 70 additions & 79 deletions op-challenger/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,16 @@ const (
// This also contains config options for auxiliary services.
// It is used to initialize the challenger.
type Config struct {
L1EthRpc string // L1 RPC Url
L1Beacon string // L1 Beacon API Url
L1BeaconSkipBlobVerification bool // Skip verification of the KZG proof for each blob. Not recommended unless the provided beacon endpoints are trusted.
GameFactoryAddress common.Address // Address of the dispute game factory
GameAllowlist []common.Address // Allowlist of fault game addresses
GameWindow time.Duration // Maximum time duration to look for games to progress
Datadir string // Data Directory
MaxConcurrency uint // Maximum number of threads to use when progressing games
PollInterval time.Duration // Polling interval for latest-block subscription when using an HTTP RPC provider
AllowInvalidPrestate bool // Whether to allow responding to games where the prestate does not match
MinUpdateInterval time.Duration // Minimum duration the L1 head block time must advance before scheduling a new update cycle
L1EthRpc string // L1 RPC Url
L1Beacon string // L1 Beacon API Url
GameFactoryAddress common.Address // Address of the dispute game factory
GameAllowlist []common.Address // Allowlist of fault game addresses
GameWindow time.Duration // Maximum time duration to look for games to progress
Datadir string // Data Directory
MaxConcurrency uint // Maximum number of threads to use when progressing games
PollInterval time.Duration // Polling interval for latest-block subscription when using an HTTP RPC provider
AllowInvalidPrestate bool // Whether to allow responding to games where the prestate does not match
MinUpdateInterval time.Duration // Minimum duration the L1 head block time must advance before scheduling a new update cycle

AdditionalBondClaimants []common.Address // List of addresses to claim bonds for in addition to the tx manager sender

Expand Down Expand Up @@ -152,46 +151,42 @@ func NewInteropConfig(
Datadir: datadir,

Cannon: vm.Config{
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: l2Rpcs,
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: l2Rpcs,
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
},
CannonKona: vm.Config{
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: l2Rpcs,
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: l2Rpcs,
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
},
Asterisc: vm.Config{
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: l2Rpcs,
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: l2Rpcs,
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
},
AsteriscKona: vm.Config{
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: l2Rpcs,
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: l2Rpcs,
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
},
GameWindow: DefaultGameWindow,
}
Expand Down Expand Up @@ -226,46 +221,42 @@ func NewConfig(
Datadir: datadir,

Cannon: vm.Config{
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
},
CannonKona: vm.Config{
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
},
Asterisc: vm.Config{
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
},
AsteriscKona: vm.Config{
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
},
GameWindow: DefaultGameWindow,
}
Expand Down
172 changes: 79 additions & 93 deletions op-challenger/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,13 +283,6 @@ var (
EnvVars: prefixEnvVars("RESPONSE_DELAY_AFTER"),
Value: config.DefaultResponseDelayAfter,
}
L1BeaconSkipBlobVerificationFlag = &cli.BoolFlag{
Name: "l1-beacon-skip-blob-verification",
Usage: "Skip verification of the KZG proof for each blob returned by the Beacon node. Not recommended unless the provided beacon endpoints are trusted.",
EnvVars: prefixEnvVars("L1_BEACON_SKIP_BLOB_VERIFICATION"),
Value: false,
Hidden: true,
}
)

// requiredFlags are checked by [CheckRequired]
Expand Down Expand Up @@ -337,7 +330,6 @@ var optionalFlags = []cli.Flag{
ResponseDelayFlag,
ResponseDelayAfterFlag,
L1GenesisFlag,
L1BeaconSkipBlobVerificationFlag,
}

func init() {
Expand Down Expand Up @@ -703,109 +695,103 @@ func NewConfigFromCLI(ctx *cli.Context, logger log.Logger) (*config.Config, erro
networks := ctx.StringSlice(flags.NetworkFlagName)
l1EthRpc := ctx.String(L1EthRpcFlag.Name)
l1Beacon := ctx.String(L1BeaconFlag.Name)
l1BeaconSkipBlobVerification := ctx.Bool(L1BeaconSkipBlobVerificationFlag.Name)
l2Rpcs := ctx.StringSlice(L2EthRpcFlag.Name)
l2Experimental := ctx.String(L2ExperimentalEthRpcFlag.Name)
return &config.Config{
// Required Flags
L1EthRpc: l1EthRpc,
L1Beacon: l1Beacon,
L1BeaconSkipBlobVerification: l1BeaconSkipBlobVerification,
TraceTypes: traceTypes,
GameFactoryAddress: gameFactoryAddress,
GameAllowlist: allowedGames,
GameWindow: ctx.Duration(GameWindowFlag.Name),
MaxConcurrency: maxConcurrency,
L2Rpcs: l2Rpcs,
MaxPendingTx: ctx.Uint64(MaxPendingTransactionsFlag.Name),
PollInterval: ctx.Duration(HTTPPollInterval.Name),
MinUpdateInterval: ctx.Duration(MinUpdateInterval.Name),
AdditionalBondClaimants: claimants,
RollupRpc: ctx.String(RollupRpcFlag.Name),
SupervisorRPC: ctx.String(SupervisorRpcFlag.Name),
L1EthRpc: l1EthRpc,
L1Beacon: l1Beacon,
TraceTypes: traceTypes,
GameFactoryAddress: gameFactoryAddress,
GameAllowlist: allowedGames,
GameWindow: ctx.Duration(GameWindowFlag.Name),
MaxConcurrency: maxConcurrency,
L2Rpcs: l2Rpcs,
MaxPendingTx: ctx.Uint64(MaxPendingTransactionsFlag.Name),
PollInterval: ctx.Duration(HTTPPollInterval.Name),
MinUpdateInterval: ctx.Duration(MinUpdateInterval.Name),
AdditionalBondClaimants: claimants,
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,
L1BeaconSkipBlobVerification: l1BeaconSkipBlobVerification,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(CannonBinFlag.Name),
Server: ctx.String(CannonServerFlag.Name),
Networks: networks,
L2Custom: ctx.Bool(CannonL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeCannon),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannon),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannon),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
DebugInfo: true,
BinarySnapshots: true,
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(CannonBinFlag.Name),
Server: ctx.String(CannonServerFlag.Name),
Networks: networks,
L2Custom: ctx.Bool(CannonL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeCannon),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannon),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannon),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
DebugInfo: true,
BinarySnapshots: true,
},
CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name),
CannonAbsolutePreStateBaseURL: cannonPreStatesURL,
CannonKona: vm.Config{
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L1BeaconSkipBlobVerification: l1BeaconSkipBlobVerification,
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, types.TraceTypeCannonKona),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannonKona),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannonKona),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
DebugInfo: true,
BinarySnapshots: true,
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeCannonKona,
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, types.TraceTypeCannonKona),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeCannonKona),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeCannonKona),
SnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
DebugInfo: true,
BinarySnapshots: true,
},
CannonKonaAbsolutePreState: ctx.String(CannonKonaPreStateFlag.Name),
CannonKonaAbsolutePreStateBaseURL: cannonKonaPreStatesURL,
Datadir: ctx.String(DatadirFlag.Name),
Asterisc: vm.Config{
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L1BeaconSkipBlobVerification: l1BeaconSkipBlobVerification,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(AsteriscBinFlag.Name),
Server: ctx.String(AsteriscServerFlag.Name),
Networks: networks,
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeAsterisc),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeAsterisc),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsterisc),
SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name),
BinarySnapshots: true,
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(AsteriscBinFlag.Name),
Server: ctx.String(AsteriscServerFlag.Name),
Networks: networks,
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeAsterisc),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeAsterisc),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsterisc),
SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name),
BinarySnapshots: true,
},
AsteriscAbsolutePreState: ctx.String(AsteriscPreStateFlag.Name),
AsteriscAbsolutePreStateBaseURL: asteriscPreStatesURL,
AsteriscKona: vm.Config{
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L1BeaconSkipBlobVerification: l1BeaconSkipBlobVerification,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(AsteriscBinFlag.Name),
Server: ctx.String(AsteriscKonaServerFlag.Name),
Networks: networks,
L2Custom: ctx.Bool(AsteriscKonaL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeAsteriscKona),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeAsteriscKona),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsteriscKona),
SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name),
BinarySnapshots: true,
L1GenesisPath: ctx.String(L1GenesisFlag.Name),
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1Beacon,
L2s: l2Rpcs,
L2Experimental: l2Experimental,
VmBin: ctx.String(AsteriscBinFlag.Name),
Server: ctx.String(AsteriscKonaServerFlag.Name),
Networks: networks,
L2Custom: ctx.Bool(AsteriscKonaL2CustomFlag.Name),
RollupConfigPaths: RollupConfigFlag.StringSlice(ctx, types.TraceTypeAsteriscKona),
L2GenesisPaths: L2GenesisFlag.StringSlice(ctx, types.TraceTypeAsteriscKona),
DepsetConfigPath: DepsetConfigFlag.String(ctx, types.TraceTypeAsteriscKona),
SnapshotFreq: ctx.Uint(AsteriscSnapshotFreqFlag.Name),
InfoFreq: ctx.Uint(AsteriscInfoFreqFlag.Name),
BinarySnapshots: true,
},
AsteriscKonaAbsolutePreState: ctx.String(AsteriscKonaPreStateFlag.Name),
AsteriscKonaAbsolutePreStateBaseURL: asteriscKonaPreStatesURL,
Expand Down
Loading