From f4b717cb9da6113304f243caea6a3799a1aeecf3 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Tue, 4 Nov 2014 11:04:02 +0100
Subject: [PATCH] Bloom validation

---
 chain/block_manager.go | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/chain/block_manager.go b/chain/block_manager.go
index 998b1705d..1a5e3aeb3 100644
--- a/chain/block_manager.go
+++ b/chain/block_manager.go
@@ -3,6 +3,7 @@ package chain
 import (
 	"bytes"
 	"container/list"
+	"errors"
 	"fmt"
 	"math/big"
 	"os"
@@ -168,7 +169,6 @@ done:
 				erroneous = append(erroneous, tx)
 				err = nil
 				continue
-				//return nil, nil, nil, err
 			}
 		}
 
@@ -177,7 +177,6 @@ done:
 
 		txGas.Sub(txGas, st.gas)
 		cumulative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, txGas))
-		//receipt := &Receipt{tx, ethutil.CopyBytes(state.Root().([]byte)), accumelative}
 		receipt := &Receipt{ethutil.CopyBytes(state.Root().([]byte)), cumulative, LogsBloom(state.Logs()).Bytes(), state.Logs()}
 
 		if i < len(block.Receipts()) {
@@ -254,8 +253,6 @@ func (sm *BlockManager) Process(block *Block) (err error) {
 		return fmt.Errorf("Error validating receipt sha. Received %x, got %x", block.ReceiptSha, receiptSha)
 	}
 
-	// TODO validate bloom
-
 	// Block validation
 	if err = sm.ValidateBlock(block); err != nil {
 		statelogger.Errorln("Error validating block:", err)
@@ -267,6 +264,10 @@ func (sm *BlockManager) Process(block *Block) (err error) {
 		return err
 	}
 
+	if bytes.Compare(CreateBloom(block), block.LogsBloom) != 0 {
+		return errors.New("Unable to replicate block's bloom")
+	}
+
 	state.Update()
 
 	if !block.State().Cmp(state) {
-- 
GitLab