@@ -66,7 +66,8 @@ type SimulatedBackend struct {
6666 pendingState * state.StateDB // Currently pending state that will be the active on request
6767 pendingReceipts types.Receipts // Currently receipts for the pending block
6868
69- events * filters.EventSystem // Event system for filtering log events live
69+ events * filters.EventSystem // for filtering log events live
70+ filterSystem * filters.FilterSystem // for filtering database logs
7071
7172 config * params.ChainConfig
7273}
@@ -95,9 +96,7 @@ func SimulateWalletAddressAndSignFn() (common.Address, func(account accounts.Acc
9596
9697// XDC simulated backend for testing purpose.
9798func NewXDCSimulatedBackend (alloc core.GenesisAlloc , gasLimit uint64 , chainConfig * params.ChainConfig ) * SimulatedBackend {
98- // database := ethdb.NewMemDatabase()
9999 database := rawdb .NewMemoryDatabase ()
100-
101100 genesis := core.Genesis {
102101 GasLimit : gasLimit , // need this big, support initial smart contract
103102 Config : chainConfig ,
@@ -128,7 +127,11 @@ func NewXDCSimulatedBackend(alloc core.GenesisAlloc, gasLimit uint64, chainConfi
128127 blockchain : blockchain ,
129128 config : genesis .Config ,
130129 }
131- backend .events = filters .NewEventSystem (& filterBackend {database , blockchain , backend }, false )
130+
131+ filterBackend := & filterBackend {database , blockchain , backend }
132+ backend .filterSystem = filters .NewFilterSystem (filterBackend , filters.Config {})
133+ backend .events = filters .NewEventSystem (backend .filterSystem , false )
134+
132135 blockchain .Client = backend
133136 backend .rollback ()
134137 return backend
@@ -148,7 +151,11 @@ func NewSimulatedBackend(alloc core.GenesisAlloc) *SimulatedBackend {
148151 blockchain : blockchain ,
149152 config : genesis .Config ,
150153 }
151- backend .events = filters .NewEventSystem (& filterBackend {database , blockchain , backend }, false )
154+
155+ filterBackend := & filterBackend {database , blockchain , backend }
156+ backend .filterSystem = filters .NewFilterSystem (filterBackend , filters.Config {})
157+ backend .events = filters .NewEventSystem (backend .filterSystem , false )
158+
152159 backend .rollback ()
153160 return backend
154161}
@@ -422,7 +429,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query XDPoSChain.Filt
422429 var filter * filters.Filter
423430 if query .BlockHash != nil {
424431 // Block filter requested, construct a single-shot filter
425- filter = filters . NewBlockFilter ( & filterBackend { b . database , b . blockchain , b }, * query .BlockHash , query .Addresses , query .Topics )
432+ filter = b . filterSystem . NewBlockFilter ( * query .BlockHash , query .Addresses , query .Topics )
426433 } else {
427434 // Initialize unset filter boundaried to run from genesis to chain head
428435 from := int64 (0 )
@@ -434,7 +441,7 @@ func (b *SimulatedBackend) FilterLogs(ctx context.Context, query XDPoSChain.Filt
434441 to = query .ToBlock .Int64 ()
435442 }
436443 // Construct the range filter
437- filter = filters . NewRangeFilter ( & filterBackend { b . database , b . blockchain , b }, from , to , query .Addresses , query .Topics )
444+ filter = b . filterSystem . NewRangeFilter ( from , to , query .Addresses , query .Topics )
438445 }
439446 // Run the filter and return all the logs
440447 logs , err := filter .Logs (ctx )
@@ -551,15 +558,8 @@ func (fb *filterBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts
551558 return fb .backend .pendingBlock , fb .backend .pendingReceipts
552559}
553560
554- func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash ) ([][]* types.Log , error ) {
555- receipts := core .GetBlockReceipts (fb .db , hash , core .GetBlockNumber (fb .db , hash ))
556- if receipts == nil {
557- return nil , nil
558- }
559- logs := make ([][]* types.Log , len (receipts ))
560- for i , receipt := range receipts {
561- logs [i ] = receipt .Logs
562- }
561+ func (fb * filterBackend ) GetLogs (ctx context.Context , hash common.Hash , number uint64 ) ([][]* types.Log , error ) {
562+ logs := rawdb .ReadLogs (fb .db , hash , number )
563563 return logs , nil
564564}
565565
0 commit comments