|
@@ -53,12 +53,6 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error {
|
|
|
if v.bc.HasBlockAndState(block.Hash(), block.NumberU64()) {
|
|
if v.bc.HasBlockAndState(block.Hash(), block.NumberU64()) {
|
|
|
return ErrKnownBlock
|
|
return ErrKnownBlock
|
|
|
}
|
|
}
|
|
|
- if !v.bc.HasBlockAndState(block.ParentHash(), block.NumberU64()-1) {
|
|
|
|
|
- if !v.bc.HasBlock(block.ParentHash(), block.NumberU64()-1) {
|
|
|
|
|
- return consensus.ErrUnknownAncestor
|
|
|
|
|
- }
|
|
|
|
|
- return consensus.ErrPrunedAncestor
|
|
|
|
|
- }
|
|
|
|
|
// Header validity is known at this point, check the uncles and transactions
|
|
// Header validity is known at this point, check the uncles and transactions
|
|
|
header := block.Header()
|
|
header := block.Header()
|
|
|
if err := v.engine.VerifyUncles(v.bc, block); err != nil {
|
|
if err := v.engine.VerifyUncles(v.bc, block); err != nil {
|
|
@@ -70,6 +64,12 @@ func (v *BlockValidator) ValidateBody(block *types.Block) error {
|
|
|
if hash := types.DeriveSha(block.Transactions()); hash != header.TxHash {
|
|
if hash := types.DeriveSha(block.Transactions()); hash != header.TxHash {
|
|
|
return fmt.Errorf("transaction root hash mismatch: have %x, want %x", hash, header.TxHash)
|
|
return fmt.Errorf("transaction root hash mismatch: have %x, want %x", hash, header.TxHash)
|
|
|
}
|
|
}
|
|
|
|
|
+ if !v.bc.HasBlockAndState(block.ParentHash(), block.NumberU64()-1) {
|
|
|
|
|
+ if !v.bc.HasBlock(block.ParentHash(), block.NumberU64()-1) {
|
|
|
|
|
+ return consensus.ErrUnknownAncestor
|
|
|
|
|
+ }
|
|
|
|
|
+ return consensus.ErrPrunedAncestor
|
|
|
|
|
+ }
|
|
|
return nil
|
|
return nil
|
|
|
}
|
|
}
|
|
|
|
|
|