aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ethchain/bloom9.go13
-rw-r--r--ethchain/bloom9_test.go17
2 files changed, 29 insertions, 1 deletions
diff --git a/ethchain/bloom9.go b/ethchain/bloom9.go
index 508644b62..e841e7af7 100644
--- a/ethchain/bloom9.go
+++ b/ethchain/bloom9.go
@@ -3,6 +3,7 @@ package ethchain
import (
"math/big"
+ "github.com/ethereum.backup/ethutil-go"
"github.com/ethereum/go-ethereum/vm"
)
@@ -23,7 +24,10 @@ func LogsBloom(logs []vm.Log) *big.Int {
for _, topic := range log.Topics {
data = append(data, topic)
}
- data = append(data, log.Data)
+
+ if log.Data != nil {
+ data = append(data, log.Data)
+ }
for _, b := range data {
bin.Or(bin, bloom9(b))
@@ -42,3 +46,10 @@ func bloom9(b []byte) *big.Int {
return r
}
+
+func BloomLookup(bin, topic []byte) bool {
+ bloom := ethutil.BigD(bin)
+ cmp := bloom9(topic)
+
+ return bloom.And(bloom, cmp).Cmp(cmp) == 0
+}
diff --git a/ethchain/bloom9_test.go b/ethchain/bloom9_test.go
new file mode 100644
index 000000000..ab648b7fc
--- /dev/null
+++ b/ethchain/bloom9_test.go
@@ -0,0 +1,17 @@
+package ethchain
+
+import (
+ "testing"
+
+ "github.com/ethereum/go-ethereum/vm"
+)
+
+func TestBloom9(t *testing.T) {
+ testCase := []byte("testtest")
+ bin := LogsBloom([]vm.Log{vm.Log{testCase, nil, nil}}).Bytes()
+ res := BloomLookup(bin, testCase)
+
+ if !res {
+ t.Errorf("Bloom lookup failed")
+ }
+}