@@ -71,7 +71,8 @@ type SimulatedBackend struct {
7171 pendingState * state.StateDB // Currently pending state that will be the active on request
7272 pendingReceipts types.Receipts // Currently receipts for the pending block
7373
74- events * filters.EventSystem // Event system for filtering log events live
74+ events * filters.EventSystem // for filtering log events live
75+ filterSystem * filters.FilterSystem // for filtering database logs
7576
7677 config ctypes.ChainConfigurator
7778}
@@ -89,7 +90,11 @@ func NewSimulatedBackendWithDatabase(database ethdb.Database, alloc genesisT.Gen
8990 blockchain : blockchain ,
9091 config : genesis .Config ,
9192 }
92- backend .events = filters .NewEventSystem (& filterBackend {database , blockchain , backend }, false )
93+
94+ filterBackend := & filterBackend {database , blockchain , backend }
95+ backend .filterSystem = filters .NewFilterSystem (filterBackend , filters.Config {})
96+ backend .events = filters .NewEventSystem (backend .filterSystem , false )
97+
9398 backend .rollback (blockchain .CurrentBlock ())
9499 return backend
95100}
@@ -611,7 +616,7 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallM
611616 // User specified the legacy gas field, convert to 1559 gas typing
612617 call .GasFeeCap , call .GasTipCap = call .GasPrice , call .GasPrice
613618 } else {
614- // User specified 1559 gas feilds (or none), use those
619+ // User specified 1559 gas fields (or none), use those
615620 if call .GasFeeCap == nil {
616621 call .GasFeeCap = new (big.Int )
617622 }
@@ -691,7 +696,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter
691696 var filter * filters.Filter
692697 if query .BlockHash != nil {
693698 // Block filter requested, construct a single-shot filter
694- filter = filters . NewBlockFilter ( & filterBackend { b . database , b . blockchain , b }, * query .BlockHash , query .Addresses , query .Topics )
699+ filter = b . filterSystem . NewBlockFilter ( * query .BlockHash , query .Addresses , query .Topics )
695700 } else {
696701 // Initialize unset filter boundaries to run from genesis to chain head
697702 from := int64 (0 )
@@ -703,7 +708,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter
703708 to = query .ToBlock .Int64 ()
704709 }
705710 // Construct the range filter
706- filter = filters . NewRangeFilter ( & filterBackend { b . database , b . blockchain , b }, from , to , query .Addresses , query .Topics )
711+ filter = b . filterSystem . NewRangeFilter ( from , to , query .Addresses , query .Topics )
707712 }
708713 // Run the filter and return all the logs
709714 logs , err := filter .Logs (ctx )
@@ -856,7 +861,8 @@ type filterBackend struct {
856861 backend * SimulatedBackend
857862}
858863
859- func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
864+ func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
865+
860866func (fb * filterBackend ) EventMux () * event.TypeMux { panic ("not supported" ) }
861867
862868func (fb * filterBackend ) HeaderByNumber (ctx context.Context , block rpc.BlockNumber ) (* types.Header , error ) {
@@ -882,19 +888,8 @@ func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (typ
882888 return rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ()), nil
883889}
884890
885- func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash ) ([][]* types.Log , error ) {
886- number := rawdb .ReadHeaderNumber (fb .db , hash )
887- if number == nil {
888- return nil , nil
889- }
890- receipts := rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ())
891- if receipts == nil {
892- return nil , nil
893- }
894- logs := make ([][]* types.Log , len (receipts ))
895- for i , receipt := range receipts {
896- logs [i ] = receipt .Logs
897- }
891+ func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash , number uint64 ) ([][]* types.Log , error ) {
892+ logs := rawdb .ReadLogs (fb .db , hash , number , fb .bc .Config ())
898893 return logs , nil
899894}
900895
0 commit comments