diff options
author | Péter Szilágyi <peterke@gmail.com> | 2018-02-22 18:48:14 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-02-23 01:12:43 +0800 |
commit | 5cf1d354704cd2cbc5c64c96d4aaabeeec7dd161 (patch) | |
tree | 10c38cbf3cd5a0e796d6df6c667cc84ce57e2a34 /eth/filters/filter_system.go | |
parent | 45352477933d71ec5055504da74547b0cdf0274b (diff) | |
download | go-tangerine-5cf1d354704cd2cbc5c64c96d4aaabeeec7dd161.tar.gz go-tangerine-5cf1d354704cd2cbc5c64c96d4aaabeeec7dd161.tar.zst go-tangerine-5cf1d354704cd2cbc5c64c96d4aaabeeec7dd161.zip |
eth, les, light: filter on logs only, derive receipts on demand
Diffstat (limited to 'eth/filters/filter_system.go')
-rw-r--r-- | eth/filters/filter_system.go | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/eth/filters/filter_system.go b/eth/filters/filter_system.go index b09998f9c..f8097c7b9 100644 --- a/eth/filters/filter_system.go +++ b/eth/filters/filter_system.go @@ -375,19 +375,35 @@ func (es *EventSystem) lightFilterLogs(header *types.Header, addresses []common. // Get the logs of the block ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) defer cancel() - receipts, err := es.backend.GetReceipts(ctx, header.Hash()) + logsList, err := es.backend.GetLogs(ctx, header.Hash()) if err != nil { return nil } var unfiltered []*types.Log - for _, receipt := range receipts { - for _, log := range receipt.Logs { + for _, logs := range logsList { + for _, log := range logs { logcopy := *log logcopy.Removed = remove unfiltered = append(unfiltered, &logcopy) } } logs := filterLogs(unfiltered, nil, nil, addresses, topics) + if len(logs) > 0 && logs[0].TxHash == (common.Hash{}) { + // We have matching but non-derived logs + receipts, err := es.backend.GetReceipts(ctx, header.Hash()) + if err != nil { + return nil + } + unfiltered = unfiltered[:0] + for _, receipt := range receipts { + for _, log := range receipt.Logs { + logcopy := *log + logcopy.Removed = remove + unfiltered = append(unfiltered, &logcopy) + } + } + logs = filterLogs(unfiltered, nil, nil, addresses, topics) + } return logs } return nil |