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  }