|
|
@ -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 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|