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
149 changes: 79 additions & 70 deletions op-challenger/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,17 @@ 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
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
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

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

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

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

Cannon: vm.Config{
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
VmType: types.TraceTypeCannon,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
},
CannonKona: vm.Config{
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
VmType: types.TraceTypeCannonKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultCannonSnapshotFreq,
InfoFreq: DefaultCannonInfoFreq,
DebugInfo: true,
BinarySnapshots: true,
},
Asterisc: vm.Config{
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
VmType: types.TraceTypeAsterisc,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
},
AsteriscKona: vm.Config{
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
VmType: types.TraceTypeAsteriscKona,
L1: l1EthRpc,
L1Beacon: l1BeaconApi,
L1BeaconSkipBlobVerification: false,
L2s: []string{l2EthRpc},
SnapshotFreq: DefaultAsteriscSnapshotFreq,
InfoFreq: DefaultAsteriscInfoFreq,
BinarySnapshots: true,
},
GameWindow: DefaultGameWindow,
}
Expand Down
172 changes: 93 additions & 79 deletions op-challenger/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,13 @@ 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 @@ -330,6 +337,7 @@ var optionalFlags = []cli.Flag{
ResponseDelayFlag,
ResponseDelayAfterFlag,
L1GenesisFlag,
L1BeaconSkipBlobVerificationFlag,
}

func init() {
Expand Down Expand Up @@ -695,103 +703,109 @@ 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,
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,
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),
Cannon: vm.Config{
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,
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,
},
CannonAbsolutePreState: ctx.String(CannonPreStateFlag.Name),
CannonAbsolutePreStateBaseURL: cannonPreStatesURL,
CannonKona: vm.Config{
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,
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,
},
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,
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,
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,
},
AsteriscAbsolutePreState: ctx.String(AsteriscPreStateFlag.Name),
AsteriscAbsolutePreStateBaseURL: asteriscPreStatesURL,
AsteriscKona: vm.Config{
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,
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,
},
AsteriscKonaAbsolutePreState: ctx.String(AsteriscKonaPreStateFlag.Name),
AsteriscKonaAbsolutePreStateBaseURL: asteriscKonaPreStatesURL,
Expand Down
Loading