@@ -97,7 +97,8 @@ type SimulatedBackend struct {
9797 acceptedBlock * types.Block // Currently accepted block that will be imported on request
9898 acceptedState * state.StateDB // Currently accepted state that will be the active on request
9999
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
101102
102103 config * params.ChainConfig
103104}
@@ -118,7 +119,11 @@ func NewSimulatedBackendWithDatabase(database ethdb.Database, alloc core.Genesis
118119 blockchain : blockchain ,
119120 config : genesis .Config ,
120121 }
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+
122127 backend .rollback (blockchain .CurrentBlock ())
123128 return backend
124129}
@@ -647,7 +652,7 @@ func (b *SimulatedBackend) callContract(ctx context.Context, call interfaces.Cal
647652 // User specified the legacy gas field, convert to 1559 gas typing
648653 call .GasFeeCap , call .GasTipCap = call .GasPrice , call .GasPrice
649654 } else {
650- // User specified 1559 gas feilds (or none), use those
655+ // User specified 1559 gas fields (or none), use those
651656 if call .GasFeeCap == nil {
652657 call .GasFeeCap = new (big.Int )
653658 }
@@ -729,7 +734,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query interfaces.Filt
729734 var filter * filters.Filter
730735 if query .BlockHash != nil {
731736 // 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 )
733738 } else {
734739 // Initialize unset filter boundaries to run from genesis to chain head
735740 from := int64 (0 )
@@ -741,7 +746,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query interfaces.Filt
741746 to = query .ToBlock .Int64 ()
742747 }
743748 // 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 )
745750 }
746751 // Run the filter and return all the logs
747752 logs , err := filter .Logs (ctx )
@@ -891,7 +896,8 @@ func (fb *filterBackend) GetMaxBlocksPerRequest() int64 {
891896 return eth .DefaultSettings .MaxBlocksPerRequest
892897}
893898
894- func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
899+ func (fb * filterBackend ) ChainDb () ethdb.Database { return fb .db }
900+
895901func (fb * filterBackend ) EventMux () * event.TypeMux { panic ("not supported" ) }
896902
897903func (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
913919 return rawdb .ReadReceipts (fb .db , hash , * number , fb .bc .Config ()), nil
914920}
915921
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 )
929924 return logs , nil
930925}
931926
0 commit comments