Selaa lähdekoodia

core: fixed wildcard topic filters. Closes #725

obscuren 10 vuotta sitten
vanhempi
commit
cd2782f59c
1 muutettua tiedostoa jossa 14 lisäystä ja 5 poistoa
  1. 14 5
      core/filter.go

+ 14 - 5
core/filter.go

@@ -131,17 +131,26 @@ Logs:
 		logTopics := make([]common.Hash, len(self.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 {
+			var match bool
 			for _, topic := range topics {
-				var match bool
 				// common.Hash{} is a match all (wildcard)
 				if (topic == common.Hash{}) || log.Topics[i] == topic {
 					match = true
-				}
-				if !match {
-					continue Logs
+					break
 				}
 			}
+
+			if !match {
+				continue Logs
+			}
+
 		}
 
 		ret = append(ret, log)
@@ -168,7 +177,7 @@ func (self *Filter) bloomFilter(block *types.Block) bool {
 	for _, sub := range self.topics {
 		var included bool
 		for _, topic := range sub {
-			if types.BloomLookup(block.Bloom(), topic) {
+			if (topic == common.Hash{}) || types.BloomLookup(block.Bloom(), topic) {
 				included = true
 				break
 			}