Commit 54bce64e authored by obscuren's avatar obscuren

Validations reordering & added nonce validation

parent bee05d52
...@@ -114,30 +114,34 @@ func (bm *BlockManager) CalculateTD(block *ethutil.Block) bool { ...@@ -114,30 +114,34 @@ func (bm *BlockManager) CalculateTD(block *ethutil.Block) bool {
} }
// Validates the current block. Returns an error if the block was invalid, // Validates the current block. Returns an error if the block was invalid,
// an uncle or anything that isn't on the current block chain // an uncle or anything that isn't on the current block chain.
// Validation validates easy over difficult (dagger takes longer time = difficult)
func (bm *BlockManager) ValidateBlock(block *ethutil.Block) error { func (bm *BlockManager) ValidateBlock(block *ethutil.Block) error {
// TODO // TODO
// 1. Check if the nonce of the block is valid
// 2. Check if the difficulty is correct // 2. Check if the difficulty is correct
// Check if we have the parent hash, if it isn't known we discard it // Check if we have the parent hash, if it isn't known we discard it
// Reasons might be catching up or simply an invalid block // Reasons might be catching up or simply an invalid block
if bm.bc.HasBlock(block.PrevHash) { if !bm.bc.HasBlock(block.PrevHash) {
// Check each uncle's previous hash. In order for it to be valid return errors.New("Block's parent unknown")
// is if it has the same block hash as the current }
for _, uncle := range block.Uncles {
if uncle.PrevHash != block.PrevHash { // Check each uncle's previous hash. In order for it to be valid
if Debug { // is if it has the same block hash as the current
log.Printf("Uncle prvhash mismatch %x %x\n", block.PrevHash, uncle.PrevHash) for _, uncle := range block.Uncles {
} if uncle.PrevHash != block.PrevHash {
if Debug {
return errors.New("Mismatching Prvhash from uncle") log.Printf("Uncle prvhash mismatch %x %x\n", block.PrevHash, uncle.PrevHash)
} }
return errors.New("Mismatching Prvhash from uncle")
} }
} else {
return errors.New("Block's parent unknown")
} }
// Verify the nonce of the block. Return an error if it's not valid
if !DaggerVerify(block.Hash(), block.Nonce) {
return errors.New("Block's nonce is invalid")
}
return nil return nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment