6 log "github.com/sirupsen/logrus"
8 "github.com/bytom/vapor/errors"
9 "github.com/bytom/vapor/netsync/peers"
10 "github.com/bytom/vapor/p2p/security"
11 "github.com/bytom/vapor/protocol"
14 var errOrphanBlock = errors.New("fast sync inserting orphan block")
16 type blockProcessor struct {
22 func newBlockProcessor(chain Chain, storage *storage, peers *peers.PeerSet) *blockProcessor {
23 return &blockProcessor{
30 func (bp *blockProcessor) insert(blockStorage *blockStorage) error {
31 isOrphan, err := bp.chain.ProcessBlock(blockStorage.block)
33 bp.peers.ProcessIllegal(blockStorage.peerID, security.LevelMsgIllegal, errOrphanBlock.Error())
37 if err != nil && errors.Root(err) != protocol.ErrDoubleSignBlock {
38 bp.peers.ProcessIllegal(blockStorage.peerID, security.LevelMsgIllegal, err.Error())
43 func (bp *blockProcessor) process(downloadNotifyCh chan struct{}, ProcessStop chan struct{}, syncHeight uint64, wg *sync.WaitGroup) {
51 block, err := bp.storage.readBlock(syncHeight)
56 if err := bp.insert(block); err != nil {
57 log.WithFields(log.Fields{"module": logModule, "err": err}).Error("failed on process block")
61 bp.storage.deleteBlock(syncHeight)
65 if _, ok := <-downloadNotifyCh; !ok {