}
startSeq := state.CalcVoteSeq(c.bestBlockHeader.Height)
-
if err = c.setState(targetBlockHeader, setIrrBlockHeader, nil, utxoView, []*state.ConsensusResult{consensusResult.Fork()}); err != nil {
return err
}
for _, block := range deletedBlocks {
- if err := c.store.DeleteBlock(block); err != nil {
+ hashes, err := c.store.GetBlockHashesByHeight(block.Height)
+ if err != nil{
return err
}
+
+ for _, hash := range hashes{
+ block, err := c.store.GetBlock(hash)
+ if err != nil{
+ return err
+ }
+
+ if err := c.store.DeleteBlock(block); err != nil{
+ return err
+ }
+ }
}
endSeq := state.CalcVoteSeq(targetHeight)
log.WithFields(log.Fields{"module": logModule, "height": blockHeader.Height, "hash": blockHash.String()}).Debug("attach from mainchain")
}
- if len(detachBlockHeaders) > 0 &&
- detachBlockHeaders[len(detachBlockHeaders)-1].Height <= c.lastIrrBlockHeader.Height &&
- irrBlockHeader.Height <= c.lastIrrBlockHeader.Height {
- return errors.New("rollback block below the height of irreversible block")
+ if len(detachBlockHeaders) > 0 && detachBlockHeaders[len(detachBlockHeaders)-1].Height <= c.lastIrrBlockHeader.Height && irrBlockHeader.Height <= c.lastIrrBlockHeader.Height {
+ log.WithField("module", logModule).Warn("rollback block below the height of irreversible block")
+ return nil
}
consensusResults = append(consensusResults, consensusResult.Fork())