Added bloom filter & block filter methods
This commit is contained in:
47
ethchain/bloom.go
Normal file
47
ethchain/bloom.go
Normal file
@ -0,0 +1,47 @@
|
||||
package ethchain
|
||||
|
||||
type BloomFilter struct {
|
||||
bin []byte
|
||||
}
|
||||
|
||||
func NewBloomFilter(bin []byte) *BloomFilter {
|
||||
if bin == nil {
|
||||
bin = make([]byte, 255)
|
||||
}
|
||||
|
||||
return &BloomFilter{
|
||||
bin: bin,
|
||||
}
|
||||
}
|
||||
|
||||
func (self *BloomFilter) Set(addr []byte) {
|
||||
if len(addr) < 8 {
|
||||
chainlogger.Warnf("err: bloom set to small: %x\n", addr)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
for _, i := range addr[len(addr)-8:] {
|
||||
self.bin[i] = 1
|
||||
}
|
||||
}
|
||||
|
||||
func (self *BloomFilter) Search(addr []byte) bool {
|
||||
if len(addr) < 8 {
|
||||
chainlogger.Warnf("err: bloom search to small: %x\n", addr)
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
for _, i := range addr[len(addr)-8:] {
|
||||
if self.bin[i] == 0 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *BloomFilter) Bin() []byte {
|
||||
return self.bin
|
||||
}
|
Reference in New Issue
Block a user