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 }