core/rpc: fix for null entries in log filters. Closes #725

You can now specify `null` as a way of saying "not interested in this
topic, match all". core.Filter assumes the zero'd address to be the
wildcard. JSON rpc assumes empty strings to be wildcards.
This commit is contained in:
obscuren 2015-04-21 12:00:57 +02:00
parent 093d6d5074
commit ed0817c55d
2 changed files with 6 additions and 1 deletions

@ -134,7 +134,8 @@ Logs:
for i, topics := range self.topics {
for _, topic := range topics {
var match bool
if log.Topics[i] == topic {
// common.Hash{} is a match all (wildcard)
if (topic == common.Hash{}) || log.Topics[i] == topic {
match = true
}
if !match {

@ -739,10 +739,14 @@ func (args *BlockFilterArgs) UnmarshalJSON(b []byte) (err error) {
for j, jv := range argarray {
if v, ok := jv.(string); ok {
topicdbl[i][j] = v
} else if jv == nil {
topicdbl[i][j] = ""
} else {
return NewInvalidTypeError(fmt.Sprintf("topic[%d][%d]", i, j), "is not a string")
}
}
} else if iv == nil {
topicdbl[i] = []string{""}
} else {
return NewInvalidTypeError(fmt.Sprintf("topic[%d]", i), "not a string or array")
}