core: fixed unwinding bad hash (#3347)

Fixed unwinding of bad hashes when already on the canon chain
pull/3360/head
Jeffrey Wilcke 8 years ago committed by GitHub
parent eea8d6aa96
commit 801a13f791
  1. 11
      core/blockchain.go

@ -152,9 +152,14 @@ func NewBlockChain(chainDb ethdb.Database, config *params.ChainConfig, pow pow.P
// Check the current state of the block hashes and make sure that we do not have any of the bad blocks in our chain // Check the current state of the block hashes and make sure that we do not have any of the bad blocks in our chain
for hash, _ := range BadHashes { for hash, _ := range BadHashes {
if header := bc.GetHeaderByHash(hash); header != nil { if header := bc.GetHeaderByHash(hash); header != nil {
glog.V(logger.Error).Infof("Found bad hash, rewinding chain to block #%d [%x…]", header.Number, header.ParentHash[:4]) // get the canonical block corresponding to the offending header's number
bc.SetHead(header.Number.Uint64() - 1) headerByNumber := bc.GetHeaderByNumber(header.Number.Uint64())
glog.V(logger.Error).Infoln("Chain rewind was successful, resuming normal operation") // make sure the headerByNumber (if present) is in our current canonical chain
if headerByNumber != nil && headerByNumber.Hash() == header.Hash() {
glog.V(logger.Error).Infof("Found bad hash, rewinding chain to block #%d [%x…]", header.Number, header.ParentHash[:4])
bc.SetHead(header.Number.Uint64() - 1)
glog.V(logger.Error).Infoln("Chain rewind was successful, resuming normal operation")
}
} }
} }
// Take ownership of this particular state // Take ownership of this particular state

Loading…
Cancel
Save