github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/state/module.go (about) 1 package state 2 3 import ( 4 "context" 5 6 logging "github.com/ipfs/go-log/v2" 7 "go.uber.org/fx" 8 9 "github.com/celestiaorg/celestia-node/header" 10 "github.com/celestiaorg/celestia-node/libs/fxutil" 11 "github.com/celestiaorg/celestia-node/nodebuilder/core" 12 modfraud "github.com/celestiaorg/celestia-node/nodebuilder/fraud" 13 "github.com/celestiaorg/celestia-node/nodebuilder/node" 14 "github.com/celestiaorg/celestia-node/state" 15 ) 16 17 var log = logging.Logger("module/state") 18 19 // ConstructModule provides all components necessary to construct the 20 // state service. 21 func ConstructModule(tp node.Type, cfg *Config, coreCfg *core.Config) fx.Option { 22 // sanitize config values before constructing module 23 cfgErr := cfg.Validate() 24 25 baseComponents := fx.Options( 26 fx.Supply(*cfg), 27 fx.Error(cfgErr), 28 fxutil.ProvideIf(coreCfg.IsEndpointConfigured(), fx.Annotate( 29 coreAccessor, 30 fx.OnStart(func(ctx context.Context, 31 breaker *modfraud.ServiceBreaker[*state.CoreAccessor, *header.ExtendedHeader]) error { 32 return breaker.Start(ctx) 33 }), 34 fx.OnStop(func(ctx context.Context, 35 breaker *modfraud.ServiceBreaker[*state.CoreAccessor, *header.ExtendedHeader]) error { 36 return breaker.Stop(ctx) 37 }), 38 )), 39 fxutil.ProvideIf(!coreCfg.IsEndpointConfigured(), func() (*state.CoreAccessor, Module) { 40 return nil, &stubbedStateModule{} 41 }), 42 ) 43 44 switch tp { 45 case node.Light, node.Full, node.Bridge: 46 return fx.Module( 47 "state", 48 baseComponents, 49 ) 50 default: 51 panic("invalid node type") 52 } 53 }