|
|
@ -680,21 +680,20 @@ func (self *ChainManager) diff(oldBlock, newBlock *types.Block) (types.Blocks, e |
|
|
|
// first reduce whoever is higher bound
|
|
|
|
// first reduce whoever is higher bound
|
|
|
|
if oldBlock.NumberU64() > newBlock.NumberU64() { |
|
|
|
if oldBlock.NumberU64() > newBlock.NumberU64() { |
|
|
|
// reduce old chain
|
|
|
|
// reduce old chain
|
|
|
|
for oldBlock = oldBlock; oldBlock.NumberU64() != newBlock.NumberU64(); oldBlock = self.GetBlock(oldBlock.ParentHash()) { |
|
|
|
for oldBlock = oldBlock; oldBlock != nil && oldBlock.NumberU64() != newBlock.NumberU64(); oldBlock = self.GetBlock(oldBlock.ParentHash()) { |
|
|
|
if oldBlock == nil { |
|
|
|
|
|
|
|
return nil, fmt.Errorf("Invalid old chain") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
// reduce new chain and append new chain blocks for inserting later on
|
|
|
|
// reduce new chain and append new chain blocks for inserting later on
|
|
|
|
for newBlock = newBlock; newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = self.GetBlock(newBlock.ParentHash()) { |
|
|
|
for newBlock = newBlock; newBlock != nil && newBlock.NumberU64() != oldBlock.NumberU64(); newBlock = self.GetBlock(newBlock.ParentHash()) { |
|
|
|
if newBlock == nil { |
|
|
|
|
|
|
|
return nil, fmt.Errorf("Invalid new chain") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
newChain = append(newChain, newBlock) |
|
|
|
newChain = append(newChain, newBlock) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if oldBlock == nil { |
|
|
|
|
|
|
|
return nil, fmt.Errorf("Invalid old chain") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if newBlock == nil { |
|
|
|
|
|
|
|
return nil, fmt.Errorf("Invalid new chain") |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
numSplit := newBlock.Number() |
|
|
|
numSplit := newBlock.Number() |
|
|
|
for { |
|
|
|
for { |
|
|
|