github.com/onflow/flow-go@v0.33.17/engine/collection/epochmgr/factories/builder.go (about)

     1  package factories
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/dgraph-io/badger/v2"
     7  	"github.com/rs/zerolog"
     8  
     9  	"github.com/onflow/flow-go/module"
    10  	builder "github.com/onflow/flow-go/module/builder/collection"
    11  	finalizer "github.com/onflow/flow-go/module/finalizer/collection"
    12  	"github.com/onflow/flow-go/module/mempool"
    13  	"github.com/onflow/flow-go/network"
    14  	clusterstate "github.com/onflow/flow-go/state/cluster"
    15  	"github.com/onflow/flow-go/state/protocol"
    16  	"github.com/onflow/flow-go/storage"
    17  )
    18  
    19  type BuilderFactory struct {
    20  	db               *badger.DB
    21  	protoState       protocol.State
    22  	mainChainHeaders storage.Headers
    23  	trace            module.Tracer
    24  	opts             []builder.Opt
    25  	metrics          module.CollectionMetrics
    26  	pusher           network.Engine // engine for pushing finalized collection to consensus committee
    27  	log              zerolog.Logger
    28  }
    29  
    30  func NewBuilderFactory(
    31  	db *badger.DB,
    32  	protoState protocol.State,
    33  	mainChainHeaders storage.Headers,
    34  	trace module.Tracer,
    35  	metrics module.CollectionMetrics,
    36  	pusher network.Engine,
    37  	log zerolog.Logger,
    38  	opts ...builder.Opt,
    39  ) (*BuilderFactory, error) {
    40  
    41  	factory := &BuilderFactory{
    42  		db:               db,
    43  		protoState:       protoState,
    44  		mainChainHeaders: mainChainHeaders,
    45  		trace:            trace,
    46  		metrics:          metrics,
    47  		pusher:           pusher,
    48  		log:              log,
    49  		opts:             opts,
    50  	}
    51  	return factory, nil
    52  }
    53  
    54  func (f *BuilderFactory) Create(
    55  	clusterState clusterstate.State,
    56  	clusterHeaders storage.Headers,
    57  	clusterPayloads storage.ClusterPayloads,
    58  	pool mempool.Transactions,
    59  	epoch uint64,
    60  ) (module.Builder, *finalizer.Finalizer, error) {
    61  
    62  	build, err := builder.NewBuilder(
    63  		f.db,
    64  		f.trace,
    65  		f.protoState,
    66  		clusterState,
    67  		f.mainChainHeaders,
    68  		clusterHeaders,
    69  		clusterPayloads,
    70  		pool,
    71  		f.log,
    72  		epoch,
    73  		f.opts...,
    74  	)
    75  	if err != nil {
    76  		return nil, nil, fmt.Errorf("could not create builder: %w", err)
    77  	}
    78  
    79  	final := finalizer.NewFinalizer(
    80  		f.db,
    81  		pool,
    82  		f.pusher,
    83  		f.metrics,
    84  	)
    85  
    86  	return build, final, nil
    87  }