Merge pull request #803 from obscuren/log_filter_fixes

core: fixed wildcard topic filters. Closes #725
This commit is contained in:
Jeffrey Wilcke 2015-04-24 07:43:01 -07:00
commit c8e21a4d17
1 changed files with 14 additions and 5 deletions

View File

@ -131,17 +131,26 @@ Logs:
logTopics := make([]common.Hash, len(self.topics)) logTopics := make([]common.Hash, len(self.topics))
copy(logTopics, log.Topics) copy(logTopics, log.Topics)
// If the to filtered topics is greater than the amount of topics in
// logs, skip.
if len(self.topics) > len(log.Topics) {
continue Logs
}
for i, topics := range self.topics { for i, topics := range self.topics {
for _, topic := range topics {
var match bool var match bool
for _, topic := range topics {
// common.Hash{} is a match all (wildcard) // common.Hash{} is a match all (wildcard)
if (topic == common.Hash{}) || log.Topics[i] == topic { if (topic == common.Hash{}) || log.Topics[i] == topic {
match = true match = true
break
} }
}
if !match { if !match {
continue Logs continue Logs
} }
}
} }
ret = append(ret, log) ret = append(ret, log)
@ -168,7 +177,7 @@ func (self *Filter) bloomFilter(block *types.Block) bool {
for _, sub := range self.topics { for _, sub := range self.topics {
var included bool var included bool
for _, topic := range sub { for _, topic := range sub {
if types.BloomLookup(block.Bloom(), topic) { if (topic == common.Hash{}) || types.BloomLookup(block.Bloom(), topic) {
included = true included = true
break break
} }