Commit 7cbda018 authored by Adrian Sutton's avatar Adrian Sutton Committed by GitHub

op-challenger: Actually use the prestate downloaded from URL when executing (#10650)

* op-challenger: Actually use the prestate downloaded from URL when executing.

* op-challenger: Actually use the asterisc prestate downloaded from URL when executing. (#10651)
parent abe39e98
...@@ -244,7 +244,11 @@ func registerAsterisc( ...@@ -244,7 +244,11 @@ func registerAsterisc(
} }
prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock) prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock)
creator := func(ctx context.Context, logger log.Logger, gameDepth faultTypes.Depth, dir string) (faultTypes.TraceAccessor, error) { creator := func(ctx context.Context, logger log.Logger, gameDepth faultTypes.Depth, dir string) (faultTypes.TraceAccessor, error) {
accessor, err := outputs.NewOutputAsteriscTraceAccessor(logger, m, cfg, l2Client, prestateProvider, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) asteriscPrestate, err := prestateSource.PrestatePath(requiredPrestatehash)
if err != nil {
return nil, fmt.Errorf("failed to get asterisc prestate: %w", err)
}
accessor, err := outputs.NewOutputAsteriscTraceAccessor(logger, m, cfg, l2Client, prestateProvider, asteriscPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -335,7 +339,11 @@ func registerCannon( ...@@ -335,7 +339,11 @@ func registerCannon(
} }
prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock) prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock)
creator := func(ctx context.Context, logger log.Logger, gameDepth faultTypes.Depth, dir string) (faultTypes.TraceAccessor, error) { creator := func(ctx context.Context, logger log.Logger, gameDepth faultTypes.Depth, dir string) (faultTypes.TraceAccessor, error) {
accessor, err := outputs.NewOutputCannonTraceAccessor(logger, m, cfg, l2Client, prestateProvider, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) cannonPrestate, err := prestateSource.PrestatePath(requiredPrestatehash)
if err != nil {
return nil, fmt.Errorf("failed to get cannon prestate: %w", err)
}
accessor, err := outputs.NewOutputCannonTraceAccessor(logger, m, cfg, l2Client, prestateProvider, cannonPrestate, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -34,7 +34,7 @@ type Executor struct { ...@@ -34,7 +34,7 @@ type Executor struct {
cmdExecutor utils.CmdExecutor cmdExecutor utils.CmdExecutor
} }
func NewExecutor(logger log.Logger, m AsteriscMetricer, cfg *config.Config, inputs utils.LocalGameInputs) *Executor { func NewExecutor(logger log.Logger, m AsteriscMetricer, cfg *config.Config, prestate string, inputs utils.LocalGameInputs) *Executor {
return &Executor{ return &Executor{
logger: logger, logger: logger,
metrics: m, metrics: m,
...@@ -47,7 +47,7 @@ func NewExecutor(logger log.Logger, m AsteriscMetricer, cfg *config.Config, inpu ...@@ -47,7 +47,7 @@ func NewExecutor(logger log.Logger, m AsteriscMetricer, cfg *config.Config, inpu
network: cfg.AsteriscNetwork, network: cfg.AsteriscNetwork,
rollupConfig: cfg.AsteriscRollupConfigPath, rollupConfig: cfg.AsteriscRollupConfigPath,
l2Genesis: cfg.AsteriscL2GenesisPath, l2Genesis: cfg.AsteriscL2GenesisPath,
absolutePreState: cfg.AsteriscAbsolutePreState, absolutePreState: prestate,
snapshotFreq: cfg.AsteriscSnapshotFreq, snapshotFreq: cfg.AsteriscSnapshotFreq,
infoFreq: cfg.AsteriscInfoFreq, infoFreq: cfg.AsteriscInfoFreq,
selectSnapshot: utils.FindStartingSnapshot, selectSnapshot: utils.FindStartingSnapshot,
......
...@@ -22,7 +22,7 @@ func TestGenerateProof(t *testing.T) { ...@@ -22,7 +22,7 @@ func TestGenerateProof(t *testing.T) {
dir := filepath.Join(tempDir, "gameDir") dir := filepath.Join(tempDir, "gameDir")
cfg := config.NewConfig(common.Address{0xbb}, "http://localhost:8888", "http://localhost:9000", "http://localhost:9096", "http://localhost:9095", tempDir, config.TraceTypeAsterisc) cfg := config.NewConfig(common.Address{0xbb}, "http://localhost:8888", "http://localhost:9000", "http://localhost:9096", "http://localhost:9095", tempDir, config.TraceTypeAsterisc)
cfg.L2Rpc = "http://localhost:9999" cfg.L2Rpc = "http://localhost:9999"
cfg.AsteriscAbsolutePreState = "pre.json" prestate := "pre.json"
cfg.AsteriscBin = "./bin/asterisc" cfg.AsteriscBin = "./bin/asterisc"
cfg.AsteriscServer = "./bin/op-program" cfg.AsteriscServer = "./bin/op-program"
cfg.AsteriscSnapshotFreq = 500 cfg.AsteriscSnapshotFreq = 500
...@@ -37,7 +37,7 @@ func TestGenerateProof(t *testing.T) { ...@@ -37,7 +37,7 @@ func TestGenerateProof(t *testing.T) {
} }
captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) { captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) {
m := &asteriscDurationMetrics{} m := &asteriscDurationMetrics{}
executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, &cfg, inputs) executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, &cfg, prestate, inputs)
executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) { executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) {
return input, nil return input, nil
} }
......
...@@ -43,12 +43,12 @@ type AsteriscTraceProvider struct { ...@@ -43,12 +43,12 @@ type AsteriscTraceProvider struct {
lastStep uint64 lastStep uint64
} }
func NewTraceProvider(logger log.Logger, m AsteriscMetricer, cfg *config.Config, prestateProvider types.PrestateProvider, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProvider { func NewTraceProvider(logger log.Logger, m AsteriscMetricer, cfg *config.Config, prestateProvider types.PrestateProvider, asteriscPrestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *AsteriscTraceProvider {
return &AsteriscTraceProvider{ return &AsteriscTraceProvider{
logger: logger, logger: logger,
dir: dir, dir: dir,
prestate: cfg.AsteriscAbsolutePreState, prestate: asteriscPrestate,
generator: NewExecutor(logger, m, cfg, localInputs), generator: NewExecutor(logger, m, cfg, asteriscPrestate, localInputs),
gameDepth: gameDepth, gameDepth: gameDepth,
preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get),
PrestateProvider: prestateProvider, PrestateProvider: prestateProvider,
...@@ -185,7 +185,7 @@ func NewTraceProviderForTest(logger log.Logger, m AsteriscMetricer, cfg *config. ...@@ -185,7 +185,7 @@ func NewTraceProviderForTest(logger log.Logger, m AsteriscMetricer, cfg *config.
logger: logger, logger: logger,
dir: dir, dir: dir,
prestate: cfg.AsteriscAbsolutePreState, prestate: cfg.AsteriscAbsolutePreState,
generator: NewExecutor(logger, m, cfg, localInputs), generator: NewExecutor(logger, m, cfg, cfg.AsteriscNetwork, localInputs),
gameDepth: gameDepth, gameDepth: gameDepth,
preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get),
} }
......
...@@ -34,7 +34,7 @@ type Executor struct { ...@@ -34,7 +34,7 @@ type Executor struct {
cmdExecutor utils.CmdExecutor cmdExecutor utils.CmdExecutor
} }
func NewExecutor(logger log.Logger, m CannonMetricer, cfg *config.Config, inputs utils.LocalGameInputs) *Executor { func NewExecutor(logger log.Logger, m CannonMetricer, cfg *config.Config, prestate string, inputs utils.LocalGameInputs) *Executor {
return &Executor{ return &Executor{
logger: logger, logger: logger,
metrics: m, metrics: m,
...@@ -47,7 +47,7 @@ func NewExecutor(logger log.Logger, m CannonMetricer, cfg *config.Config, inputs ...@@ -47,7 +47,7 @@ func NewExecutor(logger log.Logger, m CannonMetricer, cfg *config.Config, inputs
network: cfg.CannonNetwork, network: cfg.CannonNetwork,
rollupConfig: cfg.CannonRollupConfigPath, rollupConfig: cfg.CannonRollupConfigPath,
l2Genesis: cfg.CannonL2GenesisPath, l2Genesis: cfg.CannonL2GenesisPath,
absolutePreState: cfg.CannonAbsolutePreState, absolutePreState: prestate,
snapshotFreq: cfg.CannonSnapshotFreq, snapshotFreq: cfg.CannonSnapshotFreq,
infoFreq: cfg.CannonInfoFreq, infoFreq: cfg.CannonInfoFreq,
selectSnapshot: utils.FindStartingSnapshot, selectSnapshot: utils.FindStartingSnapshot,
......
...@@ -27,7 +27,7 @@ func TestGenerateProof(t *testing.T) { ...@@ -27,7 +27,7 @@ func TestGenerateProof(t *testing.T) {
dir := filepath.Join(tempDir, "gameDir") dir := filepath.Join(tempDir, "gameDir")
cfg := config.NewConfig(common.Address{0xbb}, "http://localhost:8888", "http://localhost:9000", "http://localhost:9096", "http://localhost:9095", tempDir, config.TraceTypeCannon) cfg := config.NewConfig(common.Address{0xbb}, "http://localhost:8888", "http://localhost:9000", "http://localhost:9096", "http://localhost:9095", tempDir, config.TraceTypeCannon)
cfg.L2Rpc = "http://localhost:9999" cfg.L2Rpc = "http://localhost:9999"
cfg.CannonAbsolutePreState = "pre.json" prestate := "pre.json"
cfg.CannonBin = "./bin/cannon" cfg.CannonBin = "./bin/cannon"
cfg.CannonServer = "./bin/op-program" cfg.CannonServer = "./bin/op-program"
cfg.CannonSnapshotFreq = 500 cfg.CannonSnapshotFreq = 500
...@@ -42,7 +42,7 @@ func TestGenerateProof(t *testing.T) { ...@@ -42,7 +42,7 @@ func TestGenerateProof(t *testing.T) {
} }
captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) { captureExec := func(t *testing.T, cfg config.Config, proofAt uint64) (string, string, map[string]string) {
m := &cannonDurationMetrics{} m := &cannonDurationMetrics{}
executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, &cfg, inputs) executor := NewExecutor(testlog.Logger(t, log.LevelInfo), m, &cfg, prestate, inputs)
executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) { executor.selectSnapshot = func(logger log.Logger, dir string, absolutePreState string, i uint64) (string, error) {
return input, nil return input, nil
} }
......
...@@ -41,12 +41,12 @@ type CannonTraceProvider struct { ...@@ -41,12 +41,12 @@ type CannonTraceProvider struct {
lastStep uint64 lastStep uint64
} }
func NewTraceProvider(logger log.Logger, m CannonMetricer, cfg *config.Config, prestateProvider types.PrestateProvider, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProvider { func NewTraceProvider(logger log.Logger, m CannonMetricer, cfg *config.Config, prestateProvider types.PrestateProvider, prestate string, localInputs utils.LocalGameInputs, dir string, gameDepth types.Depth) *CannonTraceProvider {
return &CannonTraceProvider{ return &CannonTraceProvider{
logger: logger, logger: logger,
dir: dir, dir: dir,
prestate: cfg.CannonAbsolutePreState, prestate: prestate,
generator: NewExecutor(logger, m, cfg, localInputs), generator: NewExecutor(logger, m, cfg, prestate, localInputs),
gameDepth: gameDepth, gameDepth: gameDepth,
preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get),
PrestateProvider: prestateProvider, PrestateProvider: prestateProvider,
...@@ -188,7 +188,7 @@ func NewTraceProviderForTest(logger log.Logger, m CannonMetricer, cfg *config.Co ...@@ -188,7 +188,7 @@ func NewTraceProviderForTest(logger log.Logger, m CannonMetricer, cfg *config.Co
logger: logger, logger: logger,
dir: dir, dir: dir,
prestate: cfg.CannonAbsolutePreState, prestate: cfg.CannonAbsolutePreState,
generator: NewExecutor(logger, m, cfg, localInputs), generator: NewExecutor(logger, m, cfg, cfg.CannonAbsolutePreState, localInputs),
gameDepth: gameDepth, gameDepth: gameDepth,
preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get), preimageLoader: utils.NewPreimageLoader(kvstore.NewDiskKV(utils.PreimageDir(dir)).Get),
} }
......
...@@ -24,6 +24,7 @@ func NewOutputAsteriscTraceAccessor( ...@@ -24,6 +24,7 @@ func NewOutputAsteriscTraceAccessor(
cfg *config.Config, cfg *config.Config,
l2Client utils.L2HeaderSource, l2Client utils.L2HeaderSource,
prestateProvider types.PrestateProvider, prestateProvider types.PrestateProvider,
asteriscPrestate string,
rollupClient OutputRollupClient, rollupClient OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
...@@ -39,7 +40,7 @@ func NewOutputAsteriscTraceAccessor( ...@@ -39,7 +40,7 @@ func NewOutputAsteriscTraceAccessor(
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to fetch asterisc local inputs: %w", err) return nil, fmt.Errorf("failed to fetch asterisc local inputs: %w", err)
} }
provider := asterisc.NewTraceProvider(logger, m, cfg, prestateProvider, localInputs, subdir, depth) provider := asterisc.NewTraceProvider(logger, m, cfg, prestateProvider, asteriscPrestate, localInputs, subdir, depth)
return provider, nil return provider, nil
} }
......
...@@ -24,6 +24,7 @@ func NewOutputCannonTraceAccessor( ...@@ -24,6 +24,7 @@ func NewOutputCannonTraceAccessor(
cfg *config.Config, cfg *config.Config,
l2Client utils.L2HeaderSource, l2Client utils.L2HeaderSource,
prestateProvider types.PrestateProvider, prestateProvider types.PrestateProvider,
cannonPrestate string,
rollupClient OutputRollupClient, rollupClient OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
...@@ -39,7 +40,7 @@ func NewOutputCannonTraceAccessor( ...@@ -39,7 +40,7 @@ func NewOutputCannonTraceAccessor(
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to fetch cannon local inputs: %w", err) return nil, fmt.Errorf("failed to fetch cannon local inputs: %w", err)
} }
provider := cannon.NewTraceProvider(logger, m, cfg, prestateProvider, localInputs, subdir, depth) provider := cannon.NewTraceProvider(logger, m, cfg, prestateProvider, cannonPrestate, localInputs, subdir, depth)
return provider, nil return provider, nil
} }
......
...@@ -62,7 +62,7 @@ func (g *OutputCannonGameHelper) CreateHonestActor(ctx context.Context, l2Node s ...@@ -62,7 +62,7 @@ func (g *OutputCannonGameHelper) CreateHonestActor(ctx context.Context, l2Node s
prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock) prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock)
l1Head := g.GetL1Head(ctx) l1Head := g.GetL1Head(ctx)
accessor, err := outputs.NewOutputCannonTraceAccessor( accessor, err := outputs.NewOutputCannonTraceAccessor(
logger, metrics.NoopMetrics, cfg, l2Client, prestateProvider, rollupClient, dir, l1Head, splitDepth, prestateBlock, poststateBlock) logger, metrics.NoopMetrics, cfg, l2Client, prestateProvider, cfg.CannonAbsolutePreState, rollupClient, dir, l1Head, splitDepth, prestateBlock, poststateBlock)
g.Require.NoError(err, "Failed to create output cannon trace accessor") g.Require.NoError(err, "Failed to create output cannon trace accessor")
return NewOutputHonestHelper(g.T, g.Require, &g.OutputGameHelper, g.Game, accessor) return NewOutputHonestHelper(g.T, g.Require, &g.OutputGameHelper, g.Game, accessor)
} }
......
...@@ -147,7 +147,7 @@ func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs uti ...@@ -147,7 +147,7 @@ func runCannon(t *testing.T, ctx context.Context, sys *op_e2e.System, inputs uti
cannonOpts(&cfg) cannonOpts(&cfg)
logger := testlog.Logger(t, log.LevelInfo).New("role", "cannon") logger := testlog.Logger(t, log.LevelInfo).New("role", "cannon")
executor := cannon.NewExecutor(logger, metrics.NoopMetrics, &cfg, inputs) executor := cannon.NewExecutor(logger, metrics.NoopMetrics, &cfg, cfg.CannonAbsolutePreState, inputs)
t.Log("Running cannon") t.Log("Running cannon")
err := executor.GenerateProof(ctx, proofsDir, math.MaxUint) err := executor.GenerateProof(ctx, proofsDir, math.MaxUint)
......
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