사용할 configuration을 config.toml로부터 선택 (default : kv)
switch config.TxIndex.Indexer {
case "lv" :
store, err := dbProvider(&DBContext{"tx_index", config})
// ...
// indxer interface의 인스턴스로 indexing된 데이터를 저장, 관리
txIndexer = kv.NewTxIndex(store)
blockIndexer = blockidxkv.New(dbm.NewPrefixDB(store, []byte("block_events")))
case "psql" :
// ...
es, err := psql.NewEventSink(config.TxIndex.PsqlConn, chainID)
// ...
txIndexer = ex.TxIndexer()
blockIndexer = ex.BlockIndexer()
default :
// ...
}
생성된 store들로 indexer Service instance 생성
indexerService := txindex.NewIndexerService(txIndexer, blockIndexer, eventBus, false)
인스턴스 구동 (Start > OnStart() 함수 호출)
if err := indexerService.Start(); err != nil {...}
// dir : state/tdxindex/indexer_service.go
모함수로 db와 service 인스턴스 리턴
return indexerService, txIndexer, blockIndexer, nil