code: func New(context fabcontext.Client, chConfig fab.ChannelCfg, discoveryService fab.DiscoveryService, opts ...options.Opt) (*Client, error) {
  	params := defaultParams()
  	options.Apply(params, opts)
  
  	// Use a custom Discovery Service which wraps the given discovery service
  	// and produces event endpoints containing additional GRPC options.
  	discoveryWrapper, err := endpoint.NewEndpointDiscoveryWrapper(context, chConfig.ID(), discoveryService)
  	if err != nil {
  		return nil, err
  	}
  
  	dispatcher := dispatcher.New(context, chConfig, discoveryWrapper, params.connProvider, opts...)
  
  	//default seek type is `Newest`
  	if params.seekType == "" {
  		params.seekType = seek.Newest
  		//discard (do not publish) next BlockEvent/FilteredBlockEvent in dispatcher, since default seek type 'newest' is
  		// only needed for block height calculations
  		dispatcher.UpdateLastBlockInfoOnly()
  	}
  
  	client := &Client{
  		Client: client.New(dispatcher, opts...),
  		params: *params,
  	}
  
  	client.SetAfterConnectHandler(client.seek)
  	client.SetBeforeReconnectHandler(client.setSeekFromLastBlockReceived)
  
  	if err := client.Start(); err != nil {
  		return nil, err
  	}
  
  	return client, nil
  }
docs: // New returns a new deliver event client