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

     1  package das
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"time"
     7  
     8  	"github.com/ipfs/go-datastore"
     9  
    10  	"github.com/celestiaorg/go-fraud"
    11  	libhead "github.com/celestiaorg/go-header"
    12  
    13  	"github.com/celestiaorg/celestia-node/das"
    14  	"github.com/celestiaorg/celestia-node/header"
    15  	modfraud "github.com/celestiaorg/celestia-node/nodebuilder/fraud"
    16  	"github.com/celestiaorg/celestia-node/pruner"
    17  	"github.com/celestiaorg/celestia-node/share"
    18  	"github.com/celestiaorg/celestia-node/share/eds/byzantine"
    19  	"github.com/celestiaorg/celestia-node/share/p2p/shrexsub"
    20  )
    21  
    22  var _ Module = (*daserStub)(nil)
    23  
    24  var errStub = fmt.Errorf("module/das: stubbed: dasing is not available on bridge nodes")
    25  
    26  // daserStub is a stub implementation of the DASer that is used on bridge nodes, so that we can
    27  // provide a friendlier error when users try to access the daser over the API.
    28  type daserStub struct{}
    29  
    30  func (d daserStub) SamplingStats(context.Context) (das.SamplingStats, error) {
    31  	return das.SamplingStats{}, errStub
    32  }
    33  
    34  func (d daserStub) WaitCatchUp(context.Context) error {
    35  	return errStub
    36  }
    37  
    38  func newDaserStub() Module {
    39  	return &daserStub{}
    40  }
    41  
    42  func newDASer(
    43  	da share.Availability,
    44  	hsub libhead.Subscriber[*header.ExtendedHeader],
    45  	store libhead.Store[*header.ExtendedHeader],
    46  	batching datastore.Batching,
    47  	fraudServ fraud.Service[*header.ExtendedHeader],
    48  	bFn shrexsub.BroadcastFn,
    49  	availWindow pruner.AvailabilityWindow,
    50  	options ...das.Option,
    51  ) (*das.DASer, *modfraud.ServiceBreaker[*das.DASer, *header.ExtendedHeader], error) {
    52  	options = append(options, das.WithSamplingWindow(time.Duration(availWindow)))
    53  
    54  	ds, err := das.NewDASer(da, hsub, store, batching, fraudServ, bFn, options...)
    55  	if err != nil {
    56  		return nil, nil, err
    57  	}
    58  
    59  	return ds, &modfraud.ServiceBreaker[*das.DASer, *header.ExtendedHeader]{
    60  		Service:   ds,
    61  		FraudServ: fraudServ,
    62  		FraudType: byzantine.BadEncoding,
    63  	}, nil
    64  }