code: func (b *SimulatedBackend) SubscribeFilterLogs(ctx context.Context, query ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) {
  	// Subscribe to contract events
  	sink := make(chan []*types.Log)
  
  	sub, err := b.events.SubscribeLogs(query, sink)
  	if err != nil {
  		return nil, err
  	}
  	// Since we're getting logs in batches, we need to flatten them into a plain stream
  	return event.NewSubscription(func(quit <-chan struct{}) error {
  		defer sub.Unsubscribe()
  		for {
  			select {
  			case logs := <-sink:
  				for _, log := range logs {
  					select {
  					case ch <- *log:
  					case err := <-sub.Err():
  						return err
  					case <-quit:
  						return nil
  					}
  				}
  			case err := <-sub.Err():
  				return err
  			case <-quit:
  				return nil
  			}
  		}
  	}), nil
  }
docs: // SubscribeFilterLogs creates a background log filtering operation, returning a
  // subscription immediately, which can be used to stream the found events.