From 6623500c6b2e5fe9fa41a1ce75269955af6026e8 Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 27 Oct 2014 11:22:27 +0100
Subject: [PATCH] Implemented new bloom filter. Closes #156

---
 ethchain/bloom9.go | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 ethchain/bloom9.go

diff --git a/ethchain/bloom9.go b/ethchain/bloom9.go
new file mode 100644
index 000000000..eef0a9d3f
--- /dev/null
+++ b/ethchain/bloom9.go
@@ -0,0 +1,38 @@
+package ethchain
+
+import "github.com/ethereum/go-ethereum/vm"
+
+func CreateBloom(txs Transactions) uint64 {
+	var bin uint64
+	for _, tx := range txs {
+		bin |= logsBloom(tx.logs)
+	}
+
+	return bin
+}
+
+func logsBloom(logs []vm.Log) uint64 {
+	var bin uint64
+	for _, log := range logs {
+		data := []byte{log.Address}
+		for _, topic := range log.Topics {
+			data = append(data, topic.Bytes())
+		}
+		data = append(data, log.Data)
+
+		for _, b := range data {
+			bin |= bloom9(b)
+		}
+	}
+
+	return bin
+}
+
+func bloom9(b []byte) uint64 {
+	var r uint64
+	for _, i := range []int{0, 2, 4} {
+		r |= 1 << (b[i+1] + 256*(b[i]&1))
+	}
+
+	return r
+}
-- 
GitLab