41f4f1fd83
- When chainwatch is ran it will first start a Syncer that continuously collects blocks from the ChainNotify channel and persists them to the blocks_synced table. Once the Syncer has caught the blocks_synced table up to the lotus daemons current head a Processor is started. The Processor selects a batch of contiguous blocks and extracts and stores their data. It attempts to do as much work as it can in parallel. When the blocks are done being processed their corresponding processed_at and is_processed fields in the blocks_synced table are filled out.
27 lines
437 B
Go
27 lines
437 B
Go
package syncer
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/filecoin-project/lotus/chain/types"
|
|
"github.com/ipfs/go-cid"
|
|
)
|
|
|
|
func (s *Syncer) subBlocks(ctx context.Context) {
|
|
sub, err := s.node.SyncIncomingBlocks(ctx)
|
|
if err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
|
|
for bh := range sub {
|
|
err := s.storeHeaders(map[cid.Cid]*types.BlockHeader{
|
|
bh.Cid(): bh,
|
|
}, false, time.Now())
|
|
if err != nil {
|
|
log.Errorf("%+v", err)
|
|
}
|
|
}
|
|
}
|