aboutsummaryrefslogtreecommitdiffstats
path: root/eth/filters/api.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2017-09-27 18:14:52 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-09-27 18:14:52 +0800
commit2ab2a9f13116748ca343892f851e3632861c994e (patch)
tree97e5cc5dc3b07dbcdc6a73adfbfb07acf816d35f /eth/filters/api.go
parent860e697b00c25b8f47371f8b8c7342d0230cee84 (diff)
downloadgo-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.go9
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