Commit 5d52bea9 authored by Adrian Sutton's avatar Adrian Sutton Committed by GitHub

op-challenger: Remove l2Client and rollupClient from RegisterTask API (#13770)

Makes RegisterTask generic enough to support interop games
parent 57fcd5d5
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ 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/metrics" "github.com/ethereum-optimism/optimism/op-challenger/metrics"
"github.com/ethereum-optimism/optimism/op-service/clock" "github.com/ethereum-optimism/optimism/op-service/clock"
"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/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethclient"
...@@ -52,7 +53,6 @@ func RegisterGameTypes( ...@@ -52,7 +53,6 @@ func RegisterGameTypes(
cfg *config.Config, cfg *config.Config,
registry Registry, registry Registry,
oracles OracleRegistry, oracles OracleRegistry,
rollupClient RollupClient,
txSender TxSender, txSender TxSender,
gameFactory *contracts.DisputeGameFactoryContract, gameFactory *contracts.DisputeGameFactoryContract,
caller *batching.MultiCaller, caller *batching.MultiCaller,
...@@ -64,31 +64,41 @@ func RegisterGameTypes( ...@@ -64,31 +64,41 @@ func RegisterGameTypes(
if err != nil { if err != nil {
return nil, fmt.Errorf("dial l2 client %v: %w", cfg.L2Rpc, err) return nil, fmt.Errorf("dial l2 client %v: %w", cfg.L2Rpc, err)
} }
closer := l2Client.Close
rollupClient, err := dial.DialRollupClientWithTimeout(ctx, dial.DefaultDialTimeout, logger, cfg.RollupRpc)
if err != nil {
return closer, fmt.Errorf("dial rollup client %v: %w", cfg.RollupRpc, err)
}
closer = func() {
l2Client.Close()
rollupClient.Close()
}
syncValidator := newSyncStatusValidator(rollupClient) syncValidator := newSyncStatusValidator(rollupClient)
var registerTasks []*RegisterTask var registerTasks []*RegisterTask
if cfg.TraceTypeEnabled(faultTypes.TraceTypeCannon) { if cfg.TraceTypeEnabled(faultTypes.TraceTypeCannon) {
registerTasks = append(registerTasks, NewCannonRegisterTask(faultTypes.CannonGameType, cfg, m, vm.NewOpProgramServerExecutor(logger))) registerTasks = append(registerTasks, NewCannonRegisterTask(faultTypes.CannonGameType, cfg, m, vm.NewOpProgramServerExecutor(logger), l2Client, rollupClient))
} }
if cfg.TraceTypeEnabled(faultTypes.TraceTypePermissioned) { if cfg.TraceTypeEnabled(faultTypes.TraceTypePermissioned) {
registerTasks = append(registerTasks, NewCannonRegisterTask(faultTypes.PermissionedGameType, cfg, m, vm.NewOpProgramServerExecutor(logger))) registerTasks = append(registerTasks, NewCannonRegisterTask(faultTypes.PermissionedGameType, cfg, m, vm.NewOpProgramServerExecutor(logger), l2Client, rollupClient))
} }
if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsterisc) { if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsterisc) {
registerTasks = append(registerTasks, NewAsteriscRegisterTask(faultTypes.AsteriscGameType, cfg, m, vm.NewOpProgramServerExecutor(logger))) registerTasks = append(registerTasks, NewAsteriscRegisterTask(faultTypes.AsteriscGameType, cfg, m, vm.NewOpProgramServerExecutor(logger), l2Client, rollupClient))
} }
if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsteriscKona) { if cfg.TraceTypeEnabled(faultTypes.TraceTypeAsteriscKona) {
registerTasks = append(registerTasks, NewAsteriscKonaRegisterTask(faultTypes.AsteriscKonaGameType, cfg, m, vm.NewKonaExecutor())) registerTasks = append(registerTasks, NewAsteriscKonaRegisterTask(faultTypes.AsteriscKonaGameType, cfg, m, vm.NewKonaExecutor(), l2Client, rollupClient))
} }
if cfg.TraceTypeEnabled(faultTypes.TraceTypeFast) { if cfg.TraceTypeEnabled(faultTypes.TraceTypeFast) {
registerTasks = append(registerTasks, NewAlphabetRegisterTask(faultTypes.FastGameType)) registerTasks = append(registerTasks, NewAlphabetRegisterTask(faultTypes.FastGameType, l2Client, rollupClient))
} }
if cfg.TraceTypeEnabled(faultTypes.TraceTypeAlphabet) { if cfg.TraceTypeEnabled(faultTypes.TraceTypeAlphabet) {
registerTasks = append(registerTasks, NewAlphabetRegisterTask(faultTypes.AlphabetGameType)) registerTasks = append(registerTasks, NewAlphabetRegisterTask(faultTypes.AlphabetGameType, l2Client, rollupClient))
} }
for _, task := range registerTasks { for _, task := range registerTasks {
if err := task.Register(ctx, registry, oracles, systemClock, l1Clock, logger, m, syncValidator, rollupClient, txSender, gameFactory, caller, l2Client, l1HeaderSource, selective, claimants); err != nil { if err := task.Register(ctx, registry, oracles, systemClock, l1Clock, logger, m, syncValidator, txSender, gameFactory, caller, l1HeaderSource, selective, claimants); err != nil {
return nil, fmt.Errorf("failed to register %v game type: %w", task.gameType, err) return closer, fmt.Errorf("failed to register %v game type: %w", task.gameType, err)
} }
} }
return l2Client.Close, nil return closer, nil
} }
...@@ -33,14 +33,13 @@ type RegisterTask struct { ...@@ -33,14 +33,13 @@ type RegisterTask struct {
gameType faultTypes.GameType gameType faultTypes.GameType
skipPrestateValidation bool skipPrestateValidation bool
getPrestateProvider func(ctx context.Context, prestateHash common.Hash) (faultTypes.PrestateProvider, error) getTopPrestateProvider func(ctx context.Context, prestateBlock uint64) (faultTypes.PrestateProvider, error)
newTraceAccessor func( getBottomPrestateProvider func(ctx context.Context, prestateHash common.Hash) (faultTypes.PrestateProvider, error)
newTraceAccessor func(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
l2Client utils.L2HeaderSource,
prestateProvider faultTypes.PrestateProvider, prestateProvider faultTypes.PrestateProvider,
vmPrestateProvider faultTypes.PrestateProvider, vmPrestateProvider faultTypes.PrestateProvider,
rollupClient outputs.OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
splitDepth faultTypes.Depth, splitDepth faultTypes.Depth,
...@@ -48,7 +47,7 @@ type RegisterTask struct { ...@@ -48,7 +47,7 @@ type RegisterTask struct {
poststateBlock uint64) (*trace.Accessor, error) poststateBlock uint64) (*trace.Accessor, error)
} }
func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m caching.Metrics, serverExecutor vm.OracleServerExecutor) *RegisterTask { func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m caching.Metrics, serverExecutor vm.OracleServerExecutor, l2Client utils.L2HeaderSource, rollupClient outputs.OutputRollupClient) *RegisterTask {
stateConverter := cannon.NewStateConverter(cfg.Cannon) stateConverter := cannon.NewStateConverter(cfg.Cannon)
return &RegisterTask{ return &RegisterTask{
gameType: gameType, gameType: gameType,
...@@ -56,7 +55,10 @@ func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m c ...@@ -56,7 +55,10 @@ func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m c
// Only trusted actors participate in these games so they aren't expected to reach the step() call and // Only trusted actors participate in these games so they aren't expected to reach the step() call and
// are often configured without valid prestates but the challenger should still resolve the games. // are often configured without valid prestates but the challenger should still resolve the games.
skipPrestateValidation: gameType == faultTypes.PermissionedGameType, skipPrestateValidation: gameType == faultTypes.PermissionedGameType,
getPrestateProvider: cachePrestates( getTopPrestateProvider: func(ctx context.Context, prestateBlock uint64) (faultTypes.PrestateProvider, error) {
return outputs.NewPrestateProvider(rollupClient, prestateBlock), nil
},
getBottomPrestateProvider: cachePrestates(
gameType, gameType,
stateConverter, stateConverter,
m, m,
...@@ -69,10 +71,8 @@ func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m c ...@@ -69,10 +71,8 @@ func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m c
newTraceAccessor: func( newTraceAccessor: func(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
l2Client utils.L2HeaderSource,
prestateProvider faultTypes.PrestateProvider, prestateProvider faultTypes.PrestateProvider,
vmPrestateProvider faultTypes.PrestateProvider, vmPrestateProvider faultTypes.PrestateProvider,
rollupClient outputs.OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
splitDepth faultTypes.Depth, splitDepth faultTypes.Depth,
...@@ -84,11 +84,14 @@ func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m c ...@@ -84,11 +84,14 @@ func NewCannonRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m c
} }
} }
func NewAsteriscRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m caching.Metrics, serverExecutor vm.OracleServerExecutor) *RegisterTask { func NewAsteriscRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m caching.Metrics, serverExecutor vm.OracleServerExecutor, l2Client utils.L2HeaderSource, rollupClient outputs.OutputRollupClient) *RegisterTask {
stateConverter := asterisc.NewStateConverter(cfg.Asterisc) stateConverter := asterisc.NewStateConverter(cfg.Asterisc)
return &RegisterTask{ return &RegisterTask{
gameType: gameType, gameType: gameType,
getPrestateProvider: cachePrestates( getTopPrestateProvider: func(ctx context.Context, prestateBlock uint64) (faultTypes.PrestateProvider, error) {
return outputs.NewPrestateProvider(rollupClient, prestateBlock), nil
},
getBottomPrestateProvider: cachePrestates(
gameType, gameType,
stateConverter, stateConverter,
m, m,
...@@ -101,10 +104,8 @@ func NewAsteriscRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m ...@@ -101,10 +104,8 @@ func NewAsteriscRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m
newTraceAccessor: func( newTraceAccessor: func(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
l2Client utils.L2HeaderSource,
prestateProvider faultTypes.PrestateProvider, prestateProvider faultTypes.PrestateProvider,
vmPrestateProvider faultTypes.PrestateProvider, vmPrestateProvider faultTypes.PrestateProvider,
rollupClient outputs.OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
splitDepth faultTypes.Depth, splitDepth faultTypes.Depth,
...@@ -116,11 +117,14 @@ func NewAsteriscRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m ...@@ -116,11 +117,14 @@ func NewAsteriscRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m
} }
} }
func NewAsteriscKonaRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m caching.Metrics, serverExecutor vm.OracleServerExecutor) *RegisterTask { func NewAsteriscKonaRegisterTask(gameType faultTypes.GameType, cfg *config.Config, m caching.Metrics, serverExecutor vm.OracleServerExecutor, l2Client utils.L2HeaderSource, rollupClient outputs.OutputRollupClient) *RegisterTask {
stateConverter := asterisc.NewStateConverter(cfg.Asterisc) stateConverter := asterisc.NewStateConverter(cfg.Asterisc)
return &RegisterTask{ return &RegisterTask{
gameType: gameType, gameType: gameType,
getPrestateProvider: cachePrestates( getTopPrestateProvider: func(ctx context.Context, prestateBlock uint64) (faultTypes.PrestateProvider, error) {
return outputs.NewPrestateProvider(rollupClient, prestateBlock), nil
},
getBottomPrestateProvider: cachePrestates(
gameType, gameType,
stateConverter, stateConverter,
m, m,
...@@ -133,10 +137,8 @@ func NewAsteriscKonaRegisterTask(gameType faultTypes.GameType, cfg *config.Confi ...@@ -133,10 +137,8 @@ func NewAsteriscKonaRegisterTask(gameType faultTypes.GameType, cfg *config.Confi
newTraceAccessor: func( newTraceAccessor: func(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
l2Client utils.L2HeaderSource,
prestateProvider faultTypes.PrestateProvider, prestateProvider faultTypes.PrestateProvider,
vmPrestateProvider faultTypes.PrestateProvider, vmPrestateProvider faultTypes.PrestateProvider,
rollupClient outputs.OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
splitDepth faultTypes.Depth, splitDepth faultTypes.Depth,
...@@ -148,19 +150,20 @@ func NewAsteriscKonaRegisterTask(gameType faultTypes.GameType, cfg *config.Confi ...@@ -148,19 +150,20 @@ func NewAsteriscKonaRegisterTask(gameType faultTypes.GameType, cfg *config.Confi
} }
} }
func NewAlphabetRegisterTask(gameType faultTypes.GameType) *RegisterTask { func NewAlphabetRegisterTask(gameType faultTypes.GameType, l2Client utils.L2HeaderSource, rollupClient outputs.OutputRollupClient) *RegisterTask {
return &RegisterTask{ return &RegisterTask{
gameType: gameType, gameType: gameType,
getPrestateProvider: func(_ context.Context, _ common.Hash) (faultTypes.PrestateProvider, error) { getTopPrestateProvider: func(ctx context.Context, prestateBlock uint64) (faultTypes.PrestateProvider, error) {
return outputs.NewPrestateProvider(rollupClient, prestateBlock), nil
},
getBottomPrestateProvider: func(_ context.Context, _ common.Hash) (faultTypes.PrestateProvider, error) {
return alphabet.PrestateProvider, nil return alphabet.PrestateProvider, nil
}, },
newTraceAccessor: func( newTraceAccessor: func(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
l2Client utils.L2HeaderSource,
prestateProvider faultTypes.PrestateProvider, prestateProvider faultTypes.PrestateProvider,
vmPrestateProvider faultTypes.PrestateProvider, vmPrestateProvider faultTypes.PrestateProvider,
rollupClient outputs.OutputRollupClient,
dir string, dir string,
l1Head eth.BlockID, l1Head eth.BlockID,
splitDepth faultTypes.Depth, splitDepth faultTypes.Depth,
...@@ -181,13 +184,14 @@ func cachePrestates( ...@@ -181,13 +184,14 @@ func cachePrestates(
newPrestateProvider func(ctx context.Context, path string) faultTypes.PrestateProvider, newPrestateProvider func(ctx context.Context, path string) faultTypes.PrestateProvider,
) func(ctx context.Context, prestateHash common.Hash) (faultTypes.PrestateProvider, error) { ) func(ctx context.Context, prestateHash common.Hash) (faultTypes.PrestateProvider, error) {
prestateSource := prestates.NewPrestateSource(prestateBaseURL, preStatePath, prestateDir, stateConverter) prestateSource := prestates.NewPrestateSource(prestateBaseURL, preStatePath, prestateDir, stateConverter)
prestateProviderCache := prestates.NewPrestateProviderCache(m, fmt.Sprintf("prestates-%v", gameType), func(ctx context.Context, prestateHash common.Hash) (faultTypes.PrestateProvider, error) { prestateProviderCache := prestates.NewPrestateProviderCache(m, fmt.Sprintf("prestates-%v", gameType),
prestatePath, err := prestateSource.PrestatePath(ctx, prestateHash) func(ctx context.Context, prestateHash common.Hash) (faultTypes.PrestateProvider, error) {
if err != nil { prestatePath, err := prestateSource.PrestatePath(ctx, prestateHash)
return nil, fmt.Errorf("required prestate %v not available: %w", prestateHash, err) if err != nil {
} return nil, fmt.Errorf("required prestate %v not available: %w", prestateHash, err)
return newPrestateProvider(ctx, prestatePath), nil }
}) return newPrestateProvider(ctx, prestatePath), nil
})
return prestateProviderCache.GetOrCreate return prestateProviderCache.GetOrCreate
} }
...@@ -200,11 +204,9 @@ func (e *RegisterTask) Register( ...@@ -200,11 +204,9 @@ func (e *RegisterTask) Register(
logger log.Logger, logger log.Logger,
m metrics.Metricer, m metrics.Metricer,
syncValidator SyncValidator, syncValidator SyncValidator,
rollupClient outputs.OutputRollupClient,
txSender TxSender, txSender TxSender,
gameFactory *contracts.DisputeGameFactoryContract, gameFactory *contracts.DisputeGameFactoryContract,
caller *batching.MultiCaller, caller *batching.MultiCaller,
l2Client utils.L2HeaderSource,
l1HeaderSource L1HeaderSource, l1HeaderSource L1HeaderSource,
selective bool, selective bool,
claimants []common.Address) error { claimants []common.Address) error {
...@@ -219,7 +221,7 @@ func (e *RegisterTask) Register( ...@@ -219,7 +221,7 @@ func (e *RegisterTask) Register(
return nil, fmt.Errorf("failed to load prestate hash for game %v: %w", game.Proxy, err) return nil, fmt.Errorf("failed to load prestate hash for game %v: %w", game.Proxy, err)
} }
vmPrestateProvider, err := e.getPrestateProvider(ctx, requiredPrestatehash) vmPrestateProvider, err := e.getBottomPrestateProvider(ctx, requiredPrestatehash)
if err != nil { if err != nil {
return nil, fmt.Errorf("required prestate %v not available for game %v: %w", requiredPrestatehash, game.Proxy, err) return nil, fmt.Errorf("required prestate %v not available for game %v: %w", requiredPrestatehash, game.Proxy, err)
} }
...@@ -241,9 +243,12 @@ func (e *RegisterTask) Register( ...@@ -241,9 +243,12 @@ func (e *RegisterTask) Register(
if err != nil { if err != nil {
return nil, err return nil, err
} }
prestateProvider := outputs.NewPrestateProvider(rollupClient, prestateBlock) prestateProvider, err := e.getTopPrestateProvider(ctx, prestateBlock)
if err != nil {
return nil, fmt.Errorf("failed to create top prestate provider: %w", err)
}
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 := e.newTraceAccessor(logger, m, l2Client, prestateProvider, vmPrestateProvider, rollupClient, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock) accessor, err := e.newTraceAccessor(logger, m, prestateProvider, vmPrestateProvider, dir, l1HeadID, splitDepth, prestateBlock, poststateBlock)
if err != nil { if err != nil {
return nil, err return nil, err
} }
......
...@@ -10,7 +10,6 @@ import ( ...@@ -10,7 +10,6 @@ import (
"github.com/ethereum-optimism/optimism/op-challenger/game/keccak" "github.com/ethereum-optimism/optimism/op-challenger/game/keccak"
"github.com/ethereum-optimism/optimism/op-challenger/game/keccak/fetcher" "github.com/ethereum-optimism/optimism/op-challenger/game/keccak/fetcher"
"github.com/ethereum-optimism/optimism/op-challenger/sender" "github.com/ethereum-optimism/optimism/op-challenger/sender"
"github.com/ethereum-optimism/optimism/op-service/sources"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
...@@ -55,7 +54,6 @@ type Service struct { ...@@ -55,7 +54,6 @@ type Service struct {
factoryContract *contracts.DisputeGameFactoryContract factoryContract *contracts.DisputeGameFactoryContract
registry *registry.GameTypeRegistry registry *registry.GameTypeRegistry
oracles *registry.OracleRegistry oracles *registry.OracleRegistry
rollupClient *sources.RollupClient
l1Client *ethclient.Client l1Client *ethclient.Client
pollClient client.RPC pollClient client.RPC
...@@ -93,9 +91,6 @@ func (s *Service) initFromConfig(ctx context.Context, cfg *config.Config) error ...@@ -93,9 +91,6 @@ 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 fmt.Errorf("failed to init l1 client: %w", err) return fmt.Errorf("failed to init l1 client: %w", err)
} }
if err := s.initRollupClient(ctx, cfg); err != nil {
return fmt.Errorf("failed to init rollup client: %w", err)
}
if err := s.initPollClient(ctx, cfg); err != nil { if err := s.initPollClient(ctx, cfg); err != nil {
return fmt.Errorf("failed to init poll client: %w", err) return fmt.Errorf("failed to init poll client: %w", err)
} }
...@@ -210,27 +205,15 @@ func (s *Service) initBondClaims() error { ...@@ -210,27 +205,15 @@ func (s *Service) initBondClaims() 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) registerGameTypes(ctx context.Context, cfg *config.Config) error { func (s *Service) registerGameTypes(ctx context.Context, cfg *config.Config) error {
gameTypeRegistry := registry.NewGameTypeRegistry() gameTypeRegistry := registry.NewGameTypeRegistry()
oracles := registry.NewOracleRegistry() oracles := registry.NewOracleRegistry()
caller := batching.NewMultiCaller(s.l1Client.Client(), batching.DefaultBatchSize) caller := batching.NewMultiCaller(s.l1Client.Client(), batching.DefaultBatchSize)
closer, err := fault.RegisterGameTypes(ctx, s.systemClock, s.l1Clock, s.logger, s.metrics, cfg, gameTypeRegistry, oracles, s.rollupClient, s.txSender, s.factoryContract, caller, s.l1Client, cfg.SelectiveClaimResolution, s.claimants) closer, err := fault.RegisterGameTypes(ctx, s.systemClock, s.l1Clock, s.logger, s.metrics, cfg, gameTypeRegistry, oracles, s.txSender, s.factoryContract, caller, s.l1Client, cfg.SelectiveClaimResolution, s.claimants)
s.faultGamesCloser = closer
if err != nil { if err != nil {
return err return err
} }
s.faultGamesCloser = closer
s.registry = gameTypeRegistry s.registry = gameTypeRegistry
s.oracles = oracles s.oracles = oracles
return nil return nil
...@@ -304,9 +287,6 @@ func (s *Service) Stop(ctx context.Context) error { ...@@ -304,9 +287,6 @@ 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