code: func New(channelProvider context.ChannelProvider, opts ...ClientOption) (*Client, error) {
  
  	channelContext, err := channelProvider()
  	if err != nil {
  		return nil, errors.WithMessage(err, "failed to create channel context")
  	}
  
  	eventClient := Client{}
  
  	for _, param := range opts {
  		err1 := param(&eventClient)
  		if err1 != nil {
  			return nil, errors.WithMessage(err, "option failed")
  		}
  	}
  
  	if channelContext.ChannelService() == nil {
  		return nil, errors.New("channel service not initialized")
  	}
  
  	var es fab.EventService
  	if eventClient.permitBlockEvents {
  		var opts []options.Opt
  		opts = append(opts, client.WithBlockEvents())
  		if eventClient.seekType != "" {
  			opts = append(opts, deliverclient.WithSeekType(eventClient.seekType))
  			if eventClient.seekType == seek.FromBlock {
  				opts = append(opts, deliverclient.WithBlockNum(eventClient.fromBlock))
  			}
  		}
  		es, err = channelContext.ChannelService().EventService(opts...)
  	} else {
  		es, err = channelContext.ChannelService().EventService()
  	}
  
  	if err != nil {
  		return nil, errors.WithMessage(err, "event service creation failed")
  	}
  
  	eventClient.eventService = es
  
  	return &eventClient, nil
  }
docs: // New returns a Client instance. Client receives events such as block, filtered block,
  // chaincode, and transaction status events.