diff options
author | Péter Szilágyi <peterke@gmail.com> | 2017-09-27 18:14:52 +0800 |
---|---|---|
committer | Felix Lange <fjl@users.noreply.github.com> | 2017-09-27 18:14:52 +0800 |
commit | 2ab2a9f13116748ca343892f851e3632861c994e (patch) | |
tree | 97e5cc5dc3b07dbcdc6a73adfbfb07acf816d35f /eth/filters/api.go | |
parent | 860e697b00c25b8f47371f8b8c7342d0230cee84 (diff) | |
download | go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.tar go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.tar.gz go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.tar.bz2 go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.tar.lz go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.tar.xz go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.tar.zst go-tangerine-2ab2a9f13116748ca343892f851e3632861c994e.zip |
core/bloombits, eth/filters: handle null topics (#15195)
When implementing the new bloombits based filter, I've accidentally broke null
topics by removing the special casing of common.Hash{} filter rules, which
acted as the wildcard topic until now.
This PR fixes the regression, but instead of using the magic hash
common.Hash{} as the null wildcard, the PR reworks the code to handle nil
topics during parsing, converting a JSON null into nil []common.Hash topic.
Diffstat (limited to 'eth/filters/api.go')
-rw-r--r-- | eth/filters/api.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/eth/filters/api.go b/eth/filters/api.go index 6e1d48adb..03c1d6afc 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -498,7 +498,6 @@ func (args *FilterCriteria) UnmarshalJSON(data []byte) error { switch topic := t.(type) { case nil: // ignore topic when matching logs - args.Topics[i] = []common.Hash{{}} case string: // match specific topic @@ -507,12 +506,16 @@ func (args *FilterCriteria) UnmarshalJSON(data []byte) error { return err } args.Topics[i] = []common.Hash{top} + case []interface{}: // or case e.g. [null, "topic0", "topic1"] for _, rawTopic := range topic { if rawTopic == nil { - args.Topics[i] = append(args.Topics[i], common.Hash{}) - } else if topic, ok := rawTopic.(string); ok { + // null component, match all + args.Topics[i] = nil + break + } + if topic, ok := rawTopic.(string); ok { parsed, err := decodeTopic(topic) if err != nil { return err |