github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/internal/state/indexer/sink/kv/kv.go (about)

     1  package kv
     2  
     3  import (
     4  	"context"
     5  
     6  	dbm "github.com/tendermint/tm-db"
     7  
     8  	abci "github.com/ari-anchor/sei-tendermint/abci/types"
     9  	"github.com/ari-anchor/sei-tendermint/internal/pubsub/query"
    10  	"github.com/ari-anchor/sei-tendermint/internal/state/indexer"
    11  	kvb "github.com/ari-anchor/sei-tendermint/internal/state/indexer/block/kv"
    12  	kvt "github.com/ari-anchor/sei-tendermint/internal/state/indexer/tx/kv"
    13  	"github.com/ari-anchor/sei-tendermint/types"
    14  )
    15  
    16  var _ indexer.EventSink = (*EventSink)(nil)
    17  
    18  // The EventSink is an aggregator for redirecting the call path of the tx/block kvIndexer.
    19  // For the implementation details please see the kv.go in the indexer/block and indexer/tx folder.
    20  type EventSink struct {
    21  	txi   *kvt.TxIndex
    22  	bi    *kvb.BlockerIndexer
    23  	store dbm.DB
    24  }
    25  
    26  func NewEventSink(store dbm.DB) indexer.EventSink {
    27  	return &EventSink{
    28  		txi:   kvt.NewTxIndex(store),
    29  		bi:    kvb.New(store),
    30  		store: store,
    31  	}
    32  }
    33  
    34  func (kves *EventSink) Type() indexer.EventSinkType {
    35  	return indexer.KV
    36  }
    37  
    38  func (kves *EventSink) IndexBlockEvents(bh types.EventDataNewBlockHeader) error {
    39  	return kves.bi.Index(bh)
    40  }
    41  
    42  func (kves *EventSink) IndexTxEvents(results []*abci.TxResult) error {
    43  	return kves.txi.Index(results)
    44  }
    45  
    46  func (kves *EventSink) SearchBlockEvents(ctx context.Context, q *query.Query) ([]int64, error) {
    47  	return kves.bi.Search(ctx, q)
    48  }
    49  
    50  func (kves *EventSink) SearchTxEvents(ctx context.Context, q *query.Query) ([]*abci.TxResult, error) {
    51  	return kves.txi.Search(ctx, q)
    52  }
    53  
    54  func (kves *EventSink) GetTxByHash(hash []byte) (*abci.TxResult, error) {
    55  	return kves.txi.Get(hash)
    56  }
    57  
    58  func (kves *EventSink) HasBlock(h int64) (bool, error) {
    59  	return kves.bi.Has(h)
    60  }
    61  
    62  func (kves *EventSink) Stop() error {
    63  	return kves.store.Close()
    64  }