github.com/celestiaorg/celestia-node@v0.15.0-beta.1/nodebuilder/das/module.go (about)

     1  package das
     2  
     3  import (
     4  	"context"
     5  
     6  	"go.uber.org/fx"
     7  
     8  	"github.com/celestiaorg/celestia-node/das"
     9  	"github.com/celestiaorg/celestia-node/header"
    10  	modfraud "github.com/celestiaorg/celestia-node/nodebuilder/fraud"
    11  	"github.com/celestiaorg/celestia-node/nodebuilder/node"
    12  )
    13  
    14  func ConstructModule(tp node.Type, cfg *Config) fx.Option {
    15  	var err error
    16  	// do not validate daser config for bridge node as it
    17  	// does not need it
    18  	if tp != node.Bridge {
    19  		err = cfg.Validate()
    20  	}
    21  
    22  	baseComponents := fx.Options(
    23  		fx.Supply(*cfg),
    24  		fx.Error(err),
    25  		fx.Provide(
    26  			func(c Config) []das.Option {
    27  				return []das.Option{
    28  					das.WithSamplingRange(c.SamplingRange),
    29  					das.WithConcurrencyLimit(c.ConcurrencyLimit),
    30  					das.WithBackgroundStoreInterval(c.BackgroundStoreInterval),
    31  					das.WithSampleFrom(c.SampleFrom),
    32  					das.WithSampleTimeout(c.SampleTimeout),
    33  				}
    34  			},
    35  		),
    36  	)
    37  
    38  	switch tp {
    39  	case node.Light, node.Full:
    40  		return fx.Module(
    41  			"das",
    42  			baseComponents,
    43  			fx.Provide(fx.Annotate(
    44  				newDASer,
    45  				fx.OnStart(func(ctx context.Context, breaker *modfraud.ServiceBreaker[*das.DASer, *header.ExtendedHeader]) error {
    46  					return breaker.Start(ctx)
    47  				}),
    48  				fx.OnStop(func(ctx context.Context, breaker *modfraud.ServiceBreaker[*das.DASer, *header.ExtendedHeader]) error {
    49  					return breaker.Stop(ctx)
    50  				}),
    51  			)),
    52  			// Module is needed for the RPC handler
    53  			fx.Provide(func(das *das.DASer) Module {
    54  				return das
    55  			}),
    56  		)
    57  	case node.Bridge:
    58  		return fx.Module(
    59  			"das",
    60  			baseComponents,
    61  			fx.Provide(newDaserStub),
    62  		)
    63  	default:
    64  		panic("invalid node type")
    65  	}
    66  }