Implemented new bloom filter. Closes #156
This commit is contained in:
parent
08c26ab8b0
commit
6623500c6b
38
ethchain/bloom9.go
Normal file
38
ethchain/bloom9.go
Normal file
@ -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
|
||||
}
|
Loading…
Reference in New Issue
Block a user