Merge pull request #975 from obscuren/develop
core: changed log message for forks. closes #952
This commit is contained in:
commit
3ac34ee3c4
@ -573,13 +573,6 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
|
|||||||
if block.Td.Cmp(self.td) > 0 {
|
if block.Td.Cmp(self.td) > 0 {
|
||||||
// Check for chain forks. If H(block.num - 1) != block.parent, we're on a fork and need to do some merging
|
// Check for chain forks. If H(block.num - 1) != block.parent, we're on a fork and need to do some merging
|
||||||
if previous := self.getBlockByNumber(block.NumberU64() - 1); previous.Hash() != block.ParentHash() {
|
if previous := self.getBlockByNumber(block.NumberU64() - 1); previous.Hash() != block.ParentHash() {
|
||||||
chash := cblock.Hash()
|
|
||||||
hash := block.Hash()
|
|
||||||
|
|
||||||
if glog.V(logger.Info) {
|
|
||||||
glog.Infof("Split detected. New head #%v (%x) TD=%v, was #%v (%x) TD=%v\n", block.Header().Number, hash[:4], block.Td, cblock.Header().Number, chash[:4], self.td)
|
|
||||||
}
|
|
||||||
|
|
||||||
// during split we merge two different chains and create the new canonical chain
|
// during split we merge two different chains and create the new canonical chain
|
||||||
self.merge(previous, block)
|
self.merge(previous, block)
|
||||||
|
|
||||||
@ -636,17 +629,21 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
|
|||||||
// diff takes two blocks, an old chain and a new chain and will reconstruct the blocks and inserts them
|
// diff takes two blocks, an old chain and a new chain and will reconstruct the blocks and inserts them
|
||||||
// to be part of the new canonical chain.
|
// to be part of the new canonical chain.
|
||||||
func (self *ChainManager) diff(oldBlock, newBlock *types.Block) types.Blocks {
|
func (self *ChainManager) diff(oldBlock, newBlock *types.Block) types.Blocks {
|
||||||
glog.V(logger.Debug).Infof("Applying diff to %x & %x\n", oldBlock.Hash().Bytes()[:4], newBlock.Hash().Bytes()[:4])
|
var (
|
||||||
|
newChain types.Blocks
|
||||||
var newChain types.Blocks
|
commonBlock *types.Block
|
||||||
|
oldStart = oldBlock
|
||||||
|
newStart = newBlock
|
||||||
|
)
|
||||||
// first find common number
|
// first find common number
|
||||||
for newBlock = newBlock; newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = self.GetBlock(newBlock.ParentHash()) {
|
for newBlock = newBlock; newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = self.GetBlock(newBlock.ParentHash()) {
|
||||||
newChain = append(newChain, newBlock)
|
newChain = append(newChain, newBlock)
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(logger.Debug).Infoln("Found common number", newBlock.Number())
|
numSplit := newBlock.Number()
|
||||||
for {
|
for {
|
||||||
if oldBlock.Hash() == newBlock.Hash() {
|
if oldBlock.Hash() == newBlock.Hash() {
|
||||||
|
commonBlock = oldBlock
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
newChain = append(newChain, newBlock)
|
newChain = append(newChain, newBlock)
|
||||||
@ -654,6 +651,11 @@ func (self *ChainManager) diff(oldBlock, newBlock *types.Block) types.Blocks {
|
|||||||
oldBlock, newBlock = self.GetBlock(oldBlock.ParentHash()), self.GetBlock(newBlock.ParentHash())
|
oldBlock, newBlock = self.GetBlock(oldBlock.ParentHash()), self.GetBlock(newBlock.ParentHash())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if glog.V(logger.Info) {
|
||||||
|
commonHash := commonBlock.Hash()
|
||||||
|
glog.Infof("Fork detected @ %x. Reorganising chain from #%v %x to %x", commonHash[:4], numSplit, oldStart.Hash().Bytes()[:4], newStart.Hash().Bytes()[:4])
|
||||||
|
}
|
||||||
|
|
||||||
return newChain
|
return newChain
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user