From c21293cd91f5cd95a823065eb2345c840feec1a0 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Tue, 17 Mar 2015 16:05:17 +0100
Subject: [PATCH] bloom

---
 core/types/bloom9.go |  7 ++++---
 tests/vm/gh_test.go  | 25 +++++++++++++++----------
 vm/environment.go    |  2 +-
 3 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/core/types/bloom9.go b/core/types/bloom9.go
index 55bfe2756..59b6c69c3 100644
--- a/core/types/bloom9.go
+++ b/core/types/bloom9.go
@@ -28,7 +28,7 @@ func LogsBloom(logs state.Logs) *big.Int {
 		}
 
 		for _, b := range data {
-			bin.Or(bin, common.BigD(bloom9(crypto.Sha3(b[:])).Bytes()))
+			bin.Or(bin, bloom9(crypto.Sha3(b[:])))
 		}
 	}
 
@@ -38,9 +38,10 @@ func LogsBloom(logs state.Logs) *big.Int {
 func bloom9(b []byte) *big.Int {
 	r := new(big.Int)
 
-	for i := 0; i < 16; i += 2 {
+	for i := 0; i < 6; i += 2 {
 		t := big.NewInt(1)
-		b := uint(b[i+1]) + 1024*(uint(b[i])&1)
+		//b := uint(b[i+1]) + 512*(uint(b[i])&1)
+		b := (uint(b[i+1]) + (uint(b[i]) << 8)) & 511
 		r.Or(r, t.Lsh(t, b))
 	}
 
diff --git a/tests/vm/gh_test.go b/tests/vm/gh_test.go
index f352e862d..bce34bb5d 100644
--- a/tests/vm/gh_test.go
+++ b/tests/vm/gh_test.go
@@ -2,11 +2,13 @@ package vm
 
 import (
 	"bytes"
+	"fmt"
 	"math/big"
 	"strconv"
 	"testing"
 
 	"github.com/ethereum/go-ethereum/common"
+	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/ethdb"
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/state"
@@ -80,6 +82,9 @@ func RunVmTest(p string, t *testing.T) {
 	helper.CreateFileTests(t, p, &tests)
 
 	for name, test := range tests {
+		if name != "log2_nonEmptyMem" {
+			continue
+		}
 		db, _ := ethdb.NewMemDatabase()
 		statedb := state.New(common.Hash{}, db)
 		for addr, account := range test.Pre {
@@ -167,16 +172,16 @@ func RunVmTest(p string, t *testing.T) {
 			if len(test.Logs) != len(logs) {
 				t.Errorf("log length mismatch. Expected %d, got %d", len(test.Logs), len(logs))
 			} else {
-				/*
-					fmt.Println("A", test.Logs)
-					fmt.Println("B", logs)
-						for i, log := range test.Logs {
-							genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256)
-							if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) {
-								t.Errorf("bloom mismatch")
-							}
-						}
-				*/
+				fmt.Println("A", test.Logs)
+				fmt.Println("B", logs)
+				for i, log := range test.Logs {
+					genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256)
+					fmt.Println("A BLOOM", log.BloomF)
+					fmt.Printf("B BLOOM %x\n", genBloom)
+					if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) {
+						t.Errorf("'%s' bloom mismatch", name)
+					}
+				}
 			}
 		}
 		//statedb.Trie().PrintRoot()
diff --git a/vm/environment.go b/vm/environment.go
index fdce526ee..5d493166c 100644
--- a/vm/environment.go
+++ b/vm/environment.go
@@ -88,5 +88,5 @@ func (self *Log) RlpData() interface{} {
 */
 
 func (self *Log) String() string {
-	return fmt.Sprintf("[A=%x T=%x D=%x]", self.address, self.topics, self.data)
+	return fmt.Sprintf("{%x %x %x}", self.address, self.data, self.topics)
 }
-- 
GitLab