@@ -68,7 +68,8 @@ type SimulatedBackend struct {
6868 pendingState * state.StateDB // Currently pending state that will be the active on request
6969 pendingReceipts types.Receipts // Currently receipts for the pending block
7070
71- events * filters.EventSystem // Event system for filtering log events live
71+ events * filters.EventSystem // for filtering log events live
72+ filterSystem * filters.FilterSystem // for filtering database logs
7273
7374 config * params.ChainConfig
7475}
@@ -86,7 +87,11 @@ func NewSimulatedBackendWithDatabase(database ethdb.Database, alloc core.Genesis
8687 blockchain : blockchain ,
8788 config : genesis .Config ,
8889 }
89- backend .events = filters .NewEventSystem (& filterBackend {database , blockchain , backend }, false )
90+
91+ filterBackend := & filterBackend {database , blockchain , backend }
92+ backend .filterSystem = filters .NewFilterSystem (filterBackend , filters.Config {})
93+ backend .events = filters .NewEventSystem (backend .filterSystem , false )
94+
9095 backend .rollback (blockchain .CurrentBlock ())
9196 return backend
9297}
@@ -609,7 +614,7 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call ethereum.CallM
609614 // User specified the legacy gas field, convert to 1559 gas typing
610615 call .GasFeeCap , call .GasTipCap = call .GasPrice , call .GasPrice
611616 } else {
612- // User specified 1559 gas feilds (or none), use those
617+ // User specified 1559 gas fields (or none), use those
613618 if call .GasFeeCap == nil {
614619 call .GasFeeCap = new (big.Int )
615620 }
@@ -689,7 +694,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter
689694 var filter * filters.Filter
690695 if query .BlockHash != nil {
691696 // Block filter requested, construct a single-shot filter
692- filter = filters . NewBlockFilter ( & filterBackend { b . database , b . blockchain , b }, * query .BlockHash , query .Addresses , query .Topics )
697+ filter = b . filterSystem . NewBlockFilter ( * query .BlockHash , query .Addresses , query .Topics )
693698 } else {
694699 // Initialize unset filter boundaries to run from genesis to chain head
695700 from := int64 (0 )
@@ -701,7 +706,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query ethereum.Filter
701706 to = query .ToBlock .Int64 ()
702707 }
703708 // Construct the range filter
704- filter = filters . NewRangeFilter ( & filterBackend { b . database , b . blockchain , b }, from , to , query .Addresses , query .Topics )
709+ filter = b . filterSystem . NewRangeFilter ( from , to , query .Addresses , query .Topics )
705710 }
706711 // Run the filter and return all the logs
707712 logs , err := filter .Logs (ctx )
@@ -827,7 +832,8 @@ type filterBackend struct {
827832 backend * SimulatedBackend
828833}
829834
830- func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
835+ func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
836+
831837func (fb * filterBackend ) EventMux () * event.TypeMux { panic ("not supported" ) }
832838
833839func (fb * filterBackend ) HeaderByNumber (ctx context.Context , block rpc.BlockNumber ) (* types.Header , error ) {
@@ -853,19 +859,8 @@ func (fb *filterBackend) GetReceipts(ctx context.Context, hash common.Hash) (typ
853859 return rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ()), nil
854860}
855861
856- func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash ) ([][]* types.Log , error ) {
857- number := rawdb .ReadHeaderNumber (fb .db , hash )
858- if number == nil {
859- return nil , nil
860- }
861- receipts := rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ())
862- if receipts == nil {
863- return nil , nil
864- }
865- logs := make ([][]* types.Log , len (receipts ))
866- for i , receipt := range receipts {
867- logs [i ] = receipt .Logs
868- }
862+ func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash , number uint64 ) ([][]* types.Log , error ) {
863+ logs := rawdb .ReadLogs (fb .db , hash , number , fb .bc .Config ())
869864 return logs , nil
870865}
871866
0 commit comments