@@ -97,7 +97,8 @@ type SimulatedBackend struct {
97
97
acceptedBlock * types.Block // Currently accepted block that will be imported on request
98
98
acceptedState * state.StateDB // Currently accepted state that will be the active on request
99
99
100
- events * filters.EventSystem // Event system for filtering log events live
100
+ events * filters.EventSystem // for filtering log events live
101
+ filterSystem * filters.FilterSystem // for filtering database logs
101
102
102
103
config * params.ChainConfig
103
104
}
@@ -118,7 +119,11 @@ func NewSimulatedBackendWithDatabase(database ethdb.Database, alloc core.Genesis
118
119
blockchain : blockchain ,
119
120
config : genesis .Config ,
120
121
}
121
- backend .events = filters .NewEventSystem (& filterBackend {database , blockchain , backend }, false )
122
+
123
+ filterBackend := & filterBackend {database , blockchain , backend }
124
+ backend .filterSystem = filters .NewFilterSystem (filterBackend , filters.Config {})
125
+ backend .events = filters .NewEventSystem (backend .filterSystem , false )
126
+
122
127
backend .rollback (blockchain .CurrentBlock ())
123
128
return backend
124
129
}
@@ -647,7 +652,7 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call interfaces.Cal
647
652
// User specified the legacy gas field, convert to 1559 gas typing
648
653
call .GasFeeCap , call .GasTipCap = call .GasPrice , call .GasPrice
649
654
} else {
650
- // User specified 1559 gas feilds (or none), use those
655
+ // User specified 1559 gas fields (or none), use those
651
656
if call .GasFeeCap == nil {
652
657
call .GasFeeCap = new (big.Int )
653
658
}
@@ -729,7 +734,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query interfaces.Filt
729
734
var filter * filters.Filter
730
735
if query .BlockHash != nil {
731
736
// Block filter requested, construct a single-shot filter
732
- filter = filters . NewBlockFilter ( & filterBackend { b . database , b . blockchain , b }, * query .BlockHash , query .Addresses , query .Topics )
737
+ filter = b . filterSystem . NewBlockFilter ( * query .BlockHash , query .Addresses , query .Topics )
733
738
} else {
734
739
// Initialize unset filter boundaries to run from genesis to chain head
735
740
from := int64 (0 )
@@ -741,7 +746,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query interfaces.Filt
741
746
to = query .ToBlock .Int64 ()
742
747
}
743
748
// Construct the range filter
744
- filter , _ = filters . NewRangeFilter ( & filterBackend { b . database , b . blockchain , b }, from , to , query .Addresses , query .Topics )
749
+ filter , _ = b . filterSystem . NewRangeFilter ( from , to , query .Addresses , query .Topics )
745
750
}
746
751
// Run the filter and return all the logs
747
752
logs , err := filter .Logs (ctx )
@@ -891,7 +896,8 @@ func (fb *filterBackend) GetMaxBlocksPerRequest() int64 {
891
896
return eth .DefaultSettings .MaxBlocksPerRequest
892
897
}
893
898
894
- func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
899
+ func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
900
+
895
901
func (fb * filterBackend ) EventMux () * event.TypeMux { panic ("not supported" ) }
896
902
897
903
func (fb * filterBackend ) HeaderByNumber (ctx context.Context , block rpc.BlockNumber ) (* types.Header , error ) {
@@ -913,19 +919,8 @@ func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (typ
913
919
return rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ()), nil
914
920
}
915
921
916
- func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash ) ([][]* types.Log , error ) {
917
- number := rawdb .ReadHeaderNumber (fb .db , hash )
918
- if number == nil {
919
- return nil , nil
920
- }
921
- receipts := rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ())
922
- if receipts == nil {
923
- return nil , nil
924
- }
925
- logs := make ([][]* types.Log , len (receipts ))
926
- for i , receipt := range receipts {
927
- logs [i ] = receipt .Logs
928
- }
922
+ func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash , number uint64 ) ([][]* types.Log , error ) {
923
+ logs := rawdb .ReadLogs (fb .db , hash , number )
929
924
return logs , nil
930
925
}
931
926
0 commit comments