ChainIndexer

ChainIndexer

// ChainIndexer does a post-processing job for equally sized sections of the
// canonical chain (like BlooomBits and CHT structures). A ChainIndexer is
// connected to the blockchain through the event system by starting a
// ChainEventLoop in a goroutine.
//
// Further child ChainIndexers can be added which use the output of the parent
// section indexer. These child indexers receive new head notifications only
// after an entire section has been finished or in case of rollbacks that might
// affect already finished sections.
type ChainIndexer struct {
    chainDb  serodb.Database     // Chain database to index the data from
    indexDb  serodb.Database     // Prefixed table-view of the db to write index metadata into
    backend  ChainIndexerBackend // Background processor generating the index data content
    children []*ChainIndexer     // Child indexers to cascade chain updates to

    active uint32          // Flag whether the event loop was started
    update chan struct{}   // Notification channel that headers should be processed
    quit   chan chan error // Quit channel to tear down running goroutines

    sectionSize uint64 // Number of blocks in a single chain segment to process
    confirmsReq uint64 // Number of confirmations before processing a completed segment

    storedSections uint64 // Number of sections successfully indexed into the database
    knownSections  uint64 // Number of sections known to be complete (block wise)
    cascadedHead   uint64 // Block number of the last completed section cascaded to subindexers

    throttling time.Duration // Disk throttling to prevent a heavy upgrade from hogging resources

    log  log.Logger
    lock sync.RWMutex
}

Last updated

Was this helpful?