github.com/aakash4dev/cometbft@v0.38.2/state/indexer/block/indexer.go (about)

     1  package block
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	dbm "github.com/aakash4dev/cometbft-db"
     8  
     9  	"github.com/aakash4dev/cometbft/config"
    10  	"github.com/aakash4dev/cometbft/state/indexer"
    11  	blockidxkv "github.com/aakash4dev/cometbft/state/indexer/block/kv"
    12  	blockidxnull "github.com/aakash4dev/cometbft/state/indexer/block/null"
    13  	"github.com/aakash4dev/cometbft/state/indexer/sink/psql"
    14  	"github.com/aakash4dev/cometbft/state/txindex"
    15  	"github.com/aakash4dev/cometbft/state/txindex/kv"
    16  	"github.com/aakash4dev/cometbft/state/txindex/null"
    17  )
    18  
    19  // EventSinksFromConfig constructs a slice of indexer.EventSink using the provided
    20  // configuration.
    21  //
    22  //nolint:lll
    23  func IndexerFromConfig(cfg *config.Config, dbProvider config.DBProvider, chainID string) (txindex.TxIndexer, indexer.BlockIndexer, error) {
    24  	switch cfg.TxIndex.Indexer {
    25  	case "kv":
    26  		store, err := dbProvider(&config.DBContext{ID: "tx_index", Config: cfg})
    27  		if err != nil {
    28  			return nil, nil, err
    29  		}
    30  
    31  		return kv.NewTxIndex(store), blockidxkv.New(dbm.NewPrefixDB(store, []byte("block_events"))), nil
    32  
    33  	case "psql":
    34  		conn := cfg.TxIndex.PsqlConn
    35  		if conn == "" {
    36  			return nil, nil, errors.New("the psql connection settings cannot be empty")
    37  		}
    38  		es, err := psql.NewEventSink(cfg.TxIndex.PsqlConn, chainID)
    39  		if err != nil {
    40  			return nil, nil, fmt.Errorf("creating psql indexer: %w", err)
    41  		}
    42  		return es.TxIndexer(), es.BlockIndexer(), nil
    43  
    44  	default:
    45  		return &null.TxIndex{}, &blockidxnull.BlockerIndexer{}, nil
    46  	}
    47  }