Commit 5593b9c3 authored by OptimismBot's avatar OptimismBot Committed by GitHub

Merge pull request #7062 from ethereum-optimism/aj/cannon-info-freq

op-challenger: Make cannon processing info logging configurable
parents 990c5cd6 c0d5d69b
......@@ -254,6 +254,28 @@ func TestCannonSnapshotFreq(t *testing.T) {
cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon, "--cannon-snapshot-freq=1234"))
require.Equal(t, uint(1234), cfg.CannonSnapshotFreq)
})
t.Run("Invalid", func(t *testing.T) {
verifyArgsInvalid(t, "invalid value \"abc\" for flag -cannon-snapshot-freq",
addRequiredArgs(config.TraceTypeCannon, "--cannon-snapshot-freq=abc"))
})
}
func TestCannonInfoFreq(t *testing.T) {
t.Run("UsesDefault", func(t *testing.T) {
cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon))
require.Equal(t, config.DefaultCannonInfoFreq, cfg.CannonInfoFreq)
})
t.Run("Valid", func(t *testing.T) {
cfg := configForArgs(t, addRequiredArgs(config.TraceTypeCannon, "--cannon-info-freq=1234"))
require.Equal(t, uint(1234), cfg.CannonInfoFreq)
})
t.Run("Invalid", func(t *testing.T) {
verifyArgsInvalid(t, "invalid value \"abc\" for flag -cannon-info-freq",
addRequiredArgs(config.TraceTypeCannon, "--cannon-info-freq=abc"))
})
}
func TestGameWindow(t *testing.T) {
......
......@@ -26,6 +26,7 @@ var (
ErrMissingL1EthRPC = errors.New("missing l1 eth rpc url")
ErrMissingGameFactoryAddress = errors.New("missing game factory address")
ErrMissingCannonSnapshotFreq = errors.New("missing cannon snapshot freq")
ErrMissingCannonInfoFreq = errors.New("missing cannon info freq")
ErrMissingCannonRollupConfig = errors.New("missing cannon network or rollup config path")
ErrMissingCannonL2Genesis = errors.New("missing cannon network or l2 genesis path")
ErrCannonNetworkAndRollupConfig = errors.New("only specify one of network or rollup config path")
......@@ -78,6 +79,7 @@ func ValidTraceType(value TraceType) bool {
const (
DefaultCannonSnapshotFreq = uint(1_000_000_000)
DefaultCannonInfoFreq = uint(10_000_000)
// DefaultGameWindow is the default maximum time duration in the past
// that the challenger will look for games to progress.
// The default value is 11 days, which is a 4 day resolution buffer
......@@ -111,6 +113,7 @@ type Config struct {
CannonL2GenesisPath string
CannonL2 string // L2 RPC Url
CannonSnapshotFreq uint // Frequency of snapshots to create when executing cannon (in VM instructions)
CannonInfoFreq uint // Frequency of cannon progress log messages (in VM instructions)
TxMgrConfig txmgr.CLIConfig
MetricsConfig opmetrics.CLIConfig
......@@ -140,6 +143,7 @@ func NewConfig(
Datadir: datadir,
CannonSnapshotFreq: DefaultCannonSnapshotFreq,
CannonInfoFreq: DefaultCannonInfoFreq,
GameWindow: DefaultGameWindow,
}
}
......@@ -194,6 +198,9 @@ func (c Config) Check() error {
if c.CannonSnapshotFreq == 0 {
return ErrMissingCannonSnapshotFreq
}
if c.CannonInfoFreq == 0 {
return ErrMissingCannonInfoFreq
}
}
if c.TraceType == TraceTypeAlphabet && c.AlphabetTrace == "" {
return ErrMissingAlphabetTrace
......
......@@ -132,6 +132,14 @@ func TestCannonSnapshotFreq(t *testing.T) {
})
}
func TestCannonInfoFreq(t *testing.T) {
t.Run("MustNotBeZero", func(t *testing.T) {
cfg := validConfig(TraceTypeCannon)
cfg.CannonInfoFreq = 0
require.ErrorIs(t, cfg.Check(), ErrMissingCannonInfoFreq)
})
}
func TestCannonNetworkOrRollupConfigRequired(t *testing.T) {
cfg := validConfig(TraceTypeCannon)
cfg.CannonNetwork = ""
......
......@@ -116,6 +116,12 @@ var (
EnvVars: prefixEnvVars("CANNON_SNAPSHOT_FREQ"),
Value: config.DefaultCannonSnapshotFreq,
}
CannonInfoFreqFlag = &cli.UintFlag{
Name: "cannon-info-freq",
Usage: "Frequency of cannon info log messages to generate in VM steps (cannon trace type only)",
EnvVars: prefixEnvVars("CANNON_INFO_FREQ"),
Value: config.DefaultCannonInfoFreq,
}
GameWindowFlag = &cli.DurationFlag{
Name: "game-window",
Usage: "The time window which the challenger will look for games to progress.",
......@@ -146,6 +152,7 @@ var optionalFlags = []cli.Flag{
CannonPreStateFlag,
CannonL2Flag,
CannonSnapshotFreqFlag,
CannonInfoFreqFlag,
GameWindowFlag,
}
......@@ -250,6 +257,7 @@ func NewConfigFromCLI(ctx *cli.Context) (*config.Config, error) {
Datadir: ctx.String(DatadirFlag.Name),
CannonL2: ctx.String(CannonL2Flag.Name),
CannonSnapshotFreq: ctx.Uint(CannonSnapshotFreqFlag.Name),
CannonInfoFreq: ctx.Uint(CannonInfoFreqFlag.Name),
AgreeWithProposedOutput: ctx.Bool(AgreeWithProposedOutputFlag.Name),
TxMgrConfig: txMgrConfig,
MetricsConfig: metricsConfig,
......
......@@ -40,6 +40,7 @@ type Executor struct {
l2Genesis string
absolutePreState string
snapshotFreq uint
infoFreq uint
selectSnapshot snapshotSelect
cmdExecutor cmdExecutor
}
......@@ -57,6 +58,7 @@ func NewExecutor(logger log.Logger, cfg *config.Config, inputs LocalGameInputs)
l2Genesis: cfg.CannonL2GenesisPath,
absolutePreState: cfg.CannonAbsolutePreState,
snapshotFreq: cfg.CannonSnapshotFreq,
infoFreq: cfg.CannonInfoFreq,
selectSnapshot: findStartingSnapshot,
cmdExecutor: runCmd,
}
......@@ -76,6 +78,7 @@ func (e *Executor) GenerateProof(ctx context.Context, dir string, i uint64) erro
"--input", start,
"--output", lastGeneratedState,
"--meta", "",
"--info-at", "%" + strconv.FormatUint(uint64(e.infoFreq), 10),
"--proof-at", "=" + strconv.FormatUint(i, 10),
"--proof-fmt", filepath.Join(proofDir, "%d.json.gz"),
"--snapshot-at", "%" + strconv.FormatUint(uint64(e.snapshotFreq), 10),
......
......@@ -29,6 +29,7 @@ func TestGenerateProof(t *testing.T) {
cfg.CannonServer = "./bin/op-program"
cfg.CannonL2 = "http://localhost:9999"
cfg.CannonSnapshotFreq = 500
cfg.CannonInfoFreq = 900
inputs := LocalGameInputs{
L1Head: common.Hash{0x11},
......@@ -81,6 +82,7 @@ func TestGenerateProof(t *testing.T) {
require.Equal(t, "=150000000", args["--proof-at"])
require.Equal(t, "=150000001", args["--stop-at"])
require.Equal(t, "%500", args["--snapshot-at"])
require.Equal(t, "%900", args["--info-at"])
// Slight quirk of how we pair off args
// The server binary winds up as the key and the first arg --server as the value which has no value
// Then everything else pairs off correctly again
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment