Commit 1d57357f authored by Adrian Sutton's avatar Adrian Sutton Committed by GitHub

Merge pull request #8531 from ethereum-optimism/refcell/rollup-client-hoist

feat(op-challenger): Rollup Client Hoist
parents beb2d4e2 4ef0930a
...@@ -14,7 +14,6 @@ import ( ...@@ -14,7 +14,6 @@ import (
"github.com/ethereum-optimism/optimism/op-challenger/game/scheduler" "github.com/ethereum-optimism/optimism/op-challenger/game/scheduler"
"github.com/ethereum-optimism/optimism/op-challenger/game/types" "github.com/ethereum-optimism/optimism/op-challenger/game/types"
"github.com/ethereum-optimism/optimism/op-challenger/metrics" "github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/dial"
"github.com/ethereum-optimism/optimism/op-service/sources/batching" "github.com/ethereum-optimism/optimism/op-service/sources/batching"
"github.com/ethereum-optimism/optimism/op-service/txmgr" "github.com/ethereum-optimism/optimism/op-service/txmgr"
"github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethclient"
...@@ -40,6 +39,7 @@ func RegisterGameTypes( ...@@ -40,6 +39,7 @@ func RegisterGameTypes(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
cfg *config.Config, cfg *config.Config,
rollupClient outputs.OutputRollupClient,
txMgr txmgr.TxManager, txMgr txmgr.TxManager,
caller *batching.MultiCaller, caller *batching.MultiCaller,
) (CloseFunc, error) { ) (CloseFunc, error) {
...@@ -54,16 +54,16 @@ func RegisterGameTypes( ...@@ -54,16 +54,16 @@ func RegisterGameTypes(
closer = l2Client.Close closer = l2Client.Close
} }
if cfg.TraceTypeEnabled(config.TraceTypeOutputCannon) { if cfg.TraceTypeEnabled(config.TraceTypeOutputCannon) {
registerOutputCannon(registry, ctx, logger, m, cfg, txMgr, caller, l2Client) registerOutputCannon(registry, ctx, logger, m, cfg, rollupClient, txMgr, caller, l2Client)
} }
if cfg.TraceTypeEnabled(config.TraceTypeOutputAlphabet) { if cfg.TraceTypeEnabled(config.TraceTypeOutputAlphabet) {
registerOutputAlphabet(registry, ctx, logger, m, cfg, txMgr, caller) registerOutputAlphabet(registry, ctx, logger, m, rollupClient, txMgr, caller)
} }
if cfg.TraceTypeEnabled(config.TraceTypeCannon) { if cfg.TraceTypeEnabled(config.TraceTypeCannon) {
registerCannon(registry, ctx, logger, m, cfg, txMgr, caller, l2Client) registerCannon(registry, ctx, logger, m, cfg, txMgr, caller, l2Client)
} }
if cfg.TraceTypeEnabled(config.TraceTypeAlphabet) { if cfg.TraceTypeEnabled(config.TraceTypeAlphabet) {
registerAlphabet(registry, ctx, logger, m, cfg, txMgr, caller) registerAlphabet(registry, ctx, logger, m, cfg.AlphabetTrace, txMgr, caller)
} }
return closer, nil return closer, nil
} }
...@@ -73,7 +73,7 @@ func registerOutputAlphabet( ...@@ -73,7 +73,7 @@ func registerOutputAlphabet(
ctx context.Context, ctx context.Context,
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
cfg *config.Config, rollupClient outputs.OutputRollupClient,
txMgr txmgr.TxManager, txMgr txmgr.TxManager,
caller *batching.MultiCaller) { caller *batching.MultiCaller) {
playerCreator := func(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) { playerCreator := func(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) {
...@@ -85,17 +85,13 @@ func registerOutputAlphabet( ...@@ -85,17 +85,13 @@ func registerOutputAlphabet(
if err != nil { if err != nil {
return nil, err return nil, err
} }
rollupClient, err := dial.DialRollupClientWithTimeout(ctx, dial.DefaultDialTimeout, logger, cfg.RollupRpc)
if err != nil {
return nil, err
}
prestateProvider := outputs.NewPrestateProvider(ctx, logger, rollupClient, prestateBlock) prestateProvider := outputs.NewPrestateProvider(ctx, logger, rollupClient, prestateBlock)
creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) { creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) {
splitDepth, err := contract.GetSplitDepth(ctx) splitDepth, err := contract.GetSplitDepth(ctx)
if err != nil { if err != nil {
return nil, err return nil, err
} }
accessor, err := outputs.NewOutputAlphabetTraceAccessor(ctx, logger, m, cfg, prestateProvider, rollupClient, gameDepth, splitDepth, prestateBlock, poststateBlock) accessor, err := outputs.NewOutputAlphabetTraceAccessor(ctx, logger, m, prestateProvider, rollupClient, gameDepth, splitDepth, prestateBlock, poststateBlock)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -114,6 +110,7 @@ func registerOutputCannon( ...@@ -114,6 +110,7 @@ func registerOutputCannon(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
cfg *config.Config, cfg *config.Config,
rollupClient outputs.OutputRollupClient,
txMgr txmgr.TxManager, txMgr txmgr.TxManager,
caller *batching.MultiCaller, caller *batching.MultiCaller,
l2Client cannon.L2HeaderSource) { l2Client cannon.L2HeaderSource) {
...@@ -126,10 +123,6 @@ func registerOutputCannon( ...@@ -126,10 +123,6 @@ func registerOutputCannon(
if err != nil { if err != nil {
return nil, err return nil, err
} }
rollupClient, err := dial.DialRollupClientWithTimeout(ctx, dial.DefaultDialTimeout, logger, cfg.RollupRpc)
if err != nil {
return nil, err
}
prestateProvider := outputs.NewPrestateProvider(ctx, logger, rollupClient, prestateBlock) prestateProvider := outputs.NewPrestateProvider(ctx, logger, rollupClient, prestateBlock)
creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) { creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) {
splitDepth, err := contract.GetSplitDepth(ctx) splitDepth, err := contract.GetSplitDepth(ctx)
...@@ -163,7 +156,7 @@ func registerCannon( ...@@ -163,7 +156,7 @@ func registerCannon(
if err != nil { if err != nil {
return nil, err return nil, err
} }
prestateProvider := cannon.NewPrestateProvider(cfg) prestateProvider := cannon.NewPrestateProvider(cfg.CannonAbsolutePreState)
creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) { creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) {
localInputs, err := cannon.FetchLocalInputs(ctx, contract, l2Client) localInputs, err := cannon.FetchLocalInputs(ctx, contract, l2Client)
if err != nil { if err != nil {
...@@ -183,7 +176,7 @@ func registerAlphabet( ...@@ -183,7 +176,7 @@ func registerAlphabet(
ctx context.Context, ctx context.Context,
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
cfg *config.Config, alphabetTrace string,
txMgr txmgr.TxManager, txMgr txmgr.TxManager,
caller *batching.MultiCaller) { caller *batching.MultiCaller) {
playerCreator := func(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) { playerCreator := func(game types.GameMetadata, dir string) (scheduler.GamePlayer, error) {
...@@ -193,7 +186,7 @@ func registerAlphabet( ...@@ -193,7 +186,7 @@ func registerAlphabet(
} }
prestateProvider := &alphabet.AlphabetPrestateProvider{} prestateProvider := &alphabet.AlphabetPrestateProvider{}
creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) { creator := func(ctx context.Context, logger log.Logger, gameDepth uint64, dir string) (faultTypes.TraceAccessor, error) {
traceProvider := alphabet.NewTraceProvider(cfg.AlphabetTrace, gameDepth) traceProvider := alphabet.NewTraceProvider(alphabetTrace, gameDepth)
return trace.NewSimpleTraceAccessor(traceProvider), nil return trace.NewSimpleTraceAccessor(traceProvider), nil
} }
validator := NewPrestateValidator(contract.GetAbsolutePrestateHash, prestateProvider) validator := NewPrestateValidator(contract.GetAbsolutePrestateHash, prestateProvider)
......
...@@ -7,7 +7,6 @@ import ( ...@@ -7,7 +7,6 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum-optimism/optimism/cannon/mipsevm" "github.com/ethereum-optimism/optimism/cannon/mipsevm"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
) )
...@@ -17,10 +16,8 @@ type CannonPrestateProvider struct { ...@@ -17,10 +16,8 @@ type CannonPrestateProvider struct {
prestate string prestate string
} }
func NewPrestateProvider(cfg *config.Config) *CannonPrestateProvider { func NewPrestateProvider(prestate string) *CannonPrestateProvider {
return &CannonPrestateProvider{ return &CannonPrestateProvider{prestate}
prestate: cfg.CannonAbsolutePreState,
}
} }
func (p *CannonPrestateProvider) absolutePreState() ([]byte, error) { func (p *CannonPrestateProvider) absolutePreState() ([]byte, error) {
......
...@@ -3,7 +3,6 @@ package outputs ...@@ -3,7 +3,6 @@ package outputs
import ( import (
"context" "context"
"github.com/ethereum-optimism/optimism/op-challenger/config"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/contracts"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace"
"github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/alphabet" "github.com/ethereum-optimism/optimism/op-challenger/game/fault/trace/alphabet"
...@@ -18,7 +17,6 @@ func NewOutputAlphabetTraceAccessor( ...@@ -18,7 +17,6 @@ func NewOutputAlphabetTraceAccessor(
ctx context.Context, ctx context.Context,
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
cfg *config.Config,
prestateProvider types.PrestateProvider, prestateProvider types.PrestateProvider,
rollupClient OutputRollupClient, rollupClient OutputRollupClient,
gameDepth uint64, gameDepth uint64,
......
...@@ -7,6 +7,7 @@ import ( ...@@ -7,6 +7,7 @@ import (
"io" "io"
"sync/atomic" "sync/atomic"
"github.com/ethereum-optimism/optimism/op-service/sources"
"github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
...@@ -40,6 +41,8 @@ type Service struct { ...@@ -40,6 +41,8 @@ type Service struct {
loader *loader.GameLoader loader *loader.GameLoader
rollupClient *sources.RollupClient
l1Client *ethclient.Client l1Client *ethclient.Client
pollClient client.RPC pollClient client.RPC
...@@ -73,6 +76,9 @@ func (s *Service) initFromConfig(ctx context.Context, cfg *config.Config) error ...@@ -73,6 +76,9 @@ func (s *Service) initFromConfig(ctx context.Context, cfg *config.Config) error
if err := s.initL1Client(ctx, cfg); err != nil { if err := s.initL1Client(ctx, cfg); err != nil {
return err return err
} }
if err := s.initRollupClient(ctx, cfg); err != nil {
return err
}
if err := s.initPollClient(ctx, cfg); err != nil { if err := s.initPollClient(ctx, cfg); err != nil {
return err return err
} }
...@@ -166,10 +172,22 @@ func (s *Service) initGameLoader(cfg *config.Config) error { ...@@ -166,10 +172,22 @@ func (s *Service) initGameLoader(cfg *config.Config) error {
return nil return nil
} }
func (s *Service) initRollupClient(ctx context.Context, cfg *config.Config) error {
if cfg.RollupRpc == "" {
return nil
}
rollupClient, err := dial.DialRollupClientWithTimeout(ctx, dial.DefaultDialTimeout, s.logger, cfg.RollupRpc)
if err != nil {
return err
}
s.rollupClient = rollupClient
return nil
}
func (s *Service) initScheduler(ctx context.Context, cfg *config.Config) error { func (s *Service) initScheduler(ctx context.Context, cfg *config.Config) error {
gameTypeRegistry := registry.NewGameTypeRegistry() gameTypeRegistry := registry.NewGameTypeRegistry()
caller := batching.NewMultiCaller(s.l1Client.Client(), batching.DefaultBatchSize) caller := batching.NewMultiCaller(s.l1Client.Client(), batching.DefaultBatchSize)
closer, err := fault.RegisterGameTypes(gameTypeRegistry, ctx, s.logger, s.metrics, cfg, s.txMgr, caller) closer, err := fault.RegisterGameTypes(gameTypeRegistry, ctx, s.logger, s.metrics, cfg, s.rollupClient, s.txMgr, caller)
if err != nil { if err != nil {
return err return err
} }
...@@ -228,6 +246,9 @@ func (s *Service) Stop(ctx context.Context) error { ...@@ -228,6 +246,9 @@ func (s *Service) Stop(ctx context.Context) error {
s.txMgr.Close() s.txMgr.Close()
} }
if s.rollupClient != nil {
s.rollupClient.Close()
}
if s.pollClient != nil { if s.pollClient != nil {
s.pollClient.Close() s.pollClient.Close()
} }
......
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