eth/filters: change filter block to be by-ref (#26054)

This PR changes the block field in the filter to be a pointer, to disambiguate between empty hash and no hash
This commit is contained in:
Martin Holst Swende 2022-10-27 15:25:01 +02:00 committed by Felix Lange
parent 99bbb33701
commit 27600a5b84

View File

@ -34,7 +34,7 @@ type Filter struct {
addresses []common.Address addresses []common.Address
topics [][]common.Hash topics [][]common.Hash
block common.Hash // Block hash if filtering a single block block *common.Hash // Block hash if filtering a single block
begin, end int64 // Range interval if filtering multiple blocks begin, end int64 // Range interval if filtering multiple blocks
matcher *bloombits.Matcher matcher *bloombits.Matcher
@ -78,7 +78,7 @@ func (sys *FilterSystem) NewRangeFilter(begin, end int64, addresses []common.Add
func (sys *FilterSystem) NewBlockFilter(block common.Hash, addresses []common.Address, topics [][]common.Hash) *Filter { func (sys *FilterSystem) NewBlockFilter(block common.Hash, addresses []common.Address, topics [][]common.Hash) *Filter {
// Create a generic filter and convert it into a block filter // Create a generic filter and convert it into a block filter
filter := newFilter(sys, addresses, topics) filter := newFilter(sys, addresses, topics)
filter.block = block filter.block = &block
return filter return filter
} }
@ -96,8 +96,8 @@ func newFilter(sys *FilterSystem, addresses []common.Address, topics [][]common.
// first block that contains matches, updating the start of the filter accordingly. // first block that contains matches, updating the start of the filter accordingly.
func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) { func (f *Filter) Logs(ctx context.Context) ([]*types.Log, error) {
// If we're doing singleton block filtering, execute and return // If we're doing singleton block filtering, execute and return
if f.block != (common.Hash{}) { if f.block != nil {
header, err := f.sys.backend.HeaderByHash(ctx, f.block) header, err := f.sys.backend.HeaderByHash(ctx, *f.block)
if err != nil { if err != nil {
return nil, err return nil, err
} }