code: func (e *EndorsementHandler) Handle(requestContext *RequestContext, clientContext *ClientContext) {
  
  	if len(requestContext.Opts.Targets) == 0 {
  		requestContext.Error = status.New(status.ClientStatus, status.NoPeersFound.ToInt32(), "targets were not provided", nil)
  		return
  	}
  
  	// Endorse Tx
  	var TxnHeaderOpts []fab.TxnHeaderOpt
  	if e.headerOptsProvider != nil {
  		TxnHeaderOpts = e.headerOptsProvider()
  	}
  
  	transactionProposalResponses, proposal, err := createAndSendTransactionProposal(
  		clientContext.Transactor,
  		&requestContext.Request,
  		peer.PeersToTxnProcessors(requestContext.Opts.Targets),
  		TxnHeaderOpts...,
  	)
  
  	requestContext.Response.Proposal = proposal
  	requestContext.Response.TransactionID = proposal.TxnID // TODO: still needed?
  
  	if err != nil {
  		requestContext.Error = err
  		return
  	}
  
  	requestContext.Response.Responses = transactionProposalResponses
  	if len(transactionProposalResponses) > 0 {
  		requestContext.Response.Payload = transactionProposalResponses[0].ProposalResponse.GetResponse().Payload
  		requestContext.Response.ChaincodeStatus = transactionProposalResponses[0].ChaincodeStatus
  	}
  
  	//Delegate to next step if any
  	if e.next != nil {
  		e.next.Handle(requestContext, clientContext)
  	}
  }
docs: //Handle for endorsing transactions